0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何对SpinalEnum类型进行操作

lhl545545 来源:Spinal FPGA 作者:Spinal FPGA 2022-09-05 10:37 次阅读

SpinalEnum其实一直很少直接使用,前段时间做Avalon总线的仿真偶尔用到,初上手仿真还略微耽误了我几分钟,今天就SpinalEnum的仿真简单share下。

》关于SpinalEnum SpinalEnum说白了就是一个枚举类型,像SpinalHDL中所提供的fsm lib其状态的表示均采用的SpinalEnum。使用其好处是我们在查看波形时能够所见即所得,看到波形的状态,像下面的样子:

04c91b94-2bf9-11ed-ba43-dac502259ad0.png

而关于SpinalEnum在设计中的使用方式,在SpinalHDL Document中所提及到的已足够设计使用了。之前也曾分享过一篇SpinalEnum中的一些tips:
《Enum几个值得了解的Tips》。今天着重分享下在仿真中如何对SpinalEnum类型进行操作。为简单起见,我们这里的DUT采取如下逻辑:

import spinal.core._
object Num extends SpinalEnum{val one,two,three,four=newElement()}case class EnumDemo() extends Component{val io=new Bundle{val dataIn=in(Num)val dataOut=out(Num)  }  noIoPrefix()  io.dataOut:=io.dataIn}
》常用的四行仿真代码

对于仿真而言,无非是数据激励的注入与信号的读取。而针对SpinalEnum,数据的注入与读取可以采用如下方式:

import spinal.core.sim._object EnumDemoApp extends App{SimConfig.withFstWave.compile(EnumDemo()).doSim{dut=>    dut.io.dataIn#=Num.two    sleep(10)println(s"io.dataOut Value=${dut.io.dataOut.toEnum}")println(s"io.dataOut Value=${dut.io.dataOut.toBigInt}")println(dut.io.dataOut.toEnum==Num.two)  }}

先看仿真结果:

04f5ac90-2bf9-11ed-ba43-dac502259ad0.png

这里信号驱动与读取代码一共牵涉到四行。对于SpinalEnum的信号驱动(第4行),我们需用所声明的Num中具体的Element进行赋值。而在读取信号时(第6、7行),则可以采用toEnum/toBigInt两种方式进行。同时对于SpinalEnum信号的判断,则可以直接用Num中的Element进行对比判断(第8行)。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    7017

    浏览量

    89008
  • 仿真
    +关注

    关注

    50

    文章

    4080

    浏览量

    133586
  • 代码
    +关注

    关注

    30

    文章

    4787

    浏览量

    68589

原文标题:SpinalEnum四行仿真代码

文章出处:【微信号:Spinal FPGA,微信公众号:Spinal FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux操作系统下常见文件类型分析

    Linux操作系统下常见文件类型分析,压缩和打包文件,普通文件格式,系统文件
    发表于 01-06 17:00 991次阅读

    【初级】labview教程每日一教之数据文件操作+数据类型转换

    点击学习>>《龙哥手把手教你学LabVIEW视觉设计》视频教程12数据文件操作:1.理解文件I/02.文件格式3.高层文件I/O4.底层文件I/O5.实用底层函数进行连续文件操作
    发表于 11-07 10:01

    labview数据类型操作

    labview数据类型操作相关的教程,适合初学者学习使用。
    发表于 11-28 19:08

    C语言指针必须要进行强制类型转换?

    。既然要通过左值指针来访问右值指针所指向的数据类型,那么,问题来了,指针在定义的时候,就已经知道自己在加加或者减减操作时应该访问多少字节的内存,或者加减n时应该跳过多少字节的内存。既然要用左值指针来
    发表于 03-06 04:14

    SpinalHDL的UInt与SInt数据类型能够进行有符号/无符号数操作

    在Bits的基础上,SpinalHDL提供了UInt、SInt数据类型,从而能够进行有符号/无符号数操作。变量定义/初始化UInt/SInt的初始化与Bits类型相似:逻辑
    发表于 07-14 14:45

    掌上电脑操作系统的主要类型

    掌上电脑操作系统的主要类型 掌上电脑的核心是操作系统
    发表于 12-21 17:11 636次阅读

    UNIX操作系统类型

    UNIX操作系统类型 由于Unix操作系统众所周知的稳定性、可靠性,用来提供各种Internet服务的计算机运行的操作系统占很大比例的是Unix及Unix类
    发表于 12-26 12:02 2171次阅读

    硬盘保护卡的接口类型 /操作系统

    硬盘保护卡的接口类型 /操作系统  接口类型     
    发表于 12-26 15:39 692次阅读

    蓝牙的设备类型/操作系统/LED显示

    蓝牙的设备类型/操作系统/LED显示    设备类型
    发表于 12-28 14:53 2183次阅读

    Variant类型的变量指令说明

    SCL指令:TypeOf(操作数),操作数是FC/FB的Input/Output/InOut/Temp中定义为Variant类型的参数,该语句输出是数据类型,在程序中只能用在IF与CA
    的头像 发表于 03-30 15:13 2854次阅读

    Python对txt进行读写操作

    Python对txt进行读写操作
    的头像 发表于 01-11 15:16 821次阅读

    远程数据容灾方式类型操作

    电子发烧友网站提供《远程数据容灾方式类型操作.doc》资料免费下载
    发表于 10-25 09:52 0次下载
    远程数据容灾方式<b class='flag-5'>类型</b>与<b class='flag-5'>操作</b>

    如何使用原子类型

    一、何为原子操作 原子操作:顾名思义就是不可分割的操作,该操作只存在未开始和已完成两种状态,不存在中间状态; 原子类型:原子库中定义的数据
    的头像 发表于 11-10 16:21 824次阅读
    如何使用原子<b class='flag-5'>类型</b>

    修改查询将clob转成字符类型

    进行Oracle数据库查询时,我们经常会遇到clob类型的数据,这是一种用于存储大型字符数据的数据类型。在一些情况下,我们可能需要将clob类型的数据转换为字符
    的头像 发表于 11-21 11:31 873次阅读

    java有比long还大的类型

    。它使用内部的数组来存储大整数并提供了相应的操作方法。BigInteger 类型的大小是没有限制的,因此可以表示比long更大范围的整数。它提供了各种算术、位操作等方法,可以进行各种计
    的头像 发表于 11-30 11:25 3070次阅读