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文章
6892瀏覽量
88827 -
仿真
+關注
關注
50文章
4043瀏覽量
133416 -
代碼
+關注
關注
30文章
4748瀏覽量
68349
原文標題:SpinalEnum四行仿真代碼
文章出處:【微信號:Spinal FPGA,微信公眾號:Spinal FPGA】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論