SpinalEnum其實(shí)一直很少直接使用,前段時(shí)間做Avalon總線的仿真偶爾用到,初上手仿真還略微耽誤了我?guī)追昼?,今天就SpinalEnum的仿真簡單share下。
》關(guān)于SpinalEnum SpinalEnum說白了就是一個(gè)枚舉類型,像SpinalHDL中所提供的fsm lib其狀態(tài)的表示均采用的SpinalEnum。使用其好處是我們在查看波形時(shí)能夠所見即所得,看到波形的狀態(tài),像下面的樣子:

而關(guān)于SpinalEnum在設(shè)計(jì)中的使用方式,在SpinalHDL Document中所提及到的已足夠設(shè)計(jì)使用了。之前也曾分享過一篇SpinalEnum中的一些tips:
《Enum幾個(gè)值得了解的Tips》。今天著重分享下在仿真中如何對(duì)SpinalEnum類型進(jìn)行操作。為簡單起見,我們這里的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}》常用的四行仿真代碼
對(duì)于仿真而言,無非是數(shù)據(jù)激勵(lì)的注入與信號(hào)的讀取。而針對(duì)SpinalEnum,數(shù)據(jù)的注入與讀取可以采用如下方式:
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) }}
先看仿真結(jié)果:

這里信號(hào)驅(qū)動(dòng)與讀取代碼一共牽涉到四行。對(duì)于SpinalEnum的信號(hào)驅(qū)動(dòng)(第4行),我們需用所聲明的Num中具體的Element進(jìn)行賦值。而在讀取信號(hào)時(shí)(第6、7行),則可以采用toEnum/toBigInt兩種方式進(jìn)行。同時(shí)對(duì)于SpinalEnum信號(hào)的判斷,則可以直接用Num中的Element進(jìn)行對(duì)比判斷(第8行)。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7324瀏覽量
94289 -
仿真
+關(guān)注
關(guān)注
54文章
4452瀏覽量
137910 -
代碼
+關(guān)注
關(guān)注
30文章
4956瀏覽量
73506
原文標(biāo)題:SpinalEnum四行仿真代碼
文章出處:【微信號(hào):Spinal FPGA,微信公眾號(hào):Spinal FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Linux操作系統(tǒng)下常見文件類型分析
【初級(jí)】labview教程每日一教之?dāng)?shù)據(jù)文件操作+數(shù)據(jù)類型轉(zhuǎn)換
labview數(shù)據(jù)類型與操作
C語言指針必須要進(jìn)行強(qiáng)制類型轉(zhuǎn)換?
SpinalHDL的UInt與SInt數(shù)據(jù)類型能夠進(jìn)行有符號(hào)/無符號(hào)數(shù)操作
UNIX操作系統(tǒng)類型
藍(lán)牙的設(shè)備類型/操作系統(tǒng)/LED顯示
Variant類型的變量指令說明
遠(yuǎn)程數(shù)據(jù)容災(zāi)方式類型與操作
如何對(duì)SpinalEnum類型進(jìn)行操作
評(píng)論