SpinalEnum其實(shí)一直很少直接使用,前段時(shí)間做Avalon總線的仿真偶爾用到,初上手仿真還略微耽誤了我?guī)追昼姡裉炀蚐pinalEnum的仿真簡單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》。今天著重分享下在仿真中如何對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}》常用的四行仿真代碼
對于仿真而言,無非是數(shù)據(jù)激勵(lì)的注入與信號的讀取。而針對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é)果:
這里信號驅(qū)動與讀取代碼一共牽涉到四行。對于SpinalEnum的信號驅(qū)動(第4行),我們需用所聲明的Num中具體的Element進(jìn)行賦值。而在讀取信號時(shí)(第6、7行),則可以采用toEnum/toBigInt兩種方式進(jìn)行。同時(shí)對于SpinalEnum信號的判斷,則可以直接用Num中的Element進(jìn)行對比判斷(第8行)。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7241瀏覽量
91036 -
仿真
+關(guān)注
關(guān)注
51文章
4241瀏覽量
135328 -
代碼
+關(guān)注
關(guān)注
30文章
4887瀏覽量
70268
原文標(biāo)題:SpinalEnum四行仿真代碼
文章出處:【微信號:Spinal FPGA,微信公眾號:Spinal FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
Linux操作系統(tǒng)下常見文件類型分析
【初級】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)行有符號/無符號數(shù)操作
UNIX操作系統(tǒng)類型
藍(lán)牙的設(shè)備類型/操作系統(tǒng)/LED顯示
Variant類型的變量指令說明
遠(yuǎn)程數(shù)據(jù)容災(zāi)方式類型與操作

評論