SpinalEnum其实一直很少直接使用,前段时间做Avalon总线的仿真偶尔用到,初上手仿真还略微耽误了我几分钟,今天就SpinalEnum的仿真简单share下。
》关于SpinalEnum SpinalEnum说白了就是一个枚举类型,像SpinalHDL中所提供的fsm lib其状态的表示均采用的SpinalEnum。使用其好处是我们在查看波形时能够所见即所得,看到波形的状态,像下面的样子:
而关于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) }}
先看仿真结果:
这里信号驱动与读取代码一共牵涉到四行。对于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】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论