對于FPGA系統(tǒng)設(shè)計(jì)里,寄存器控制通道的設(shè)計(jì)是系統(tǒng)控制中必不可少的部分。今日且看SpinalHDL中如何優(yōu)雅地實(shí)現(xiàn)寄存器總線讀寫。
Bus Slave Factory
在SpinalHDL里,其Libraries里提供了關(guān)于總線相關(guān)的庫。包含AMBA3、AMBA4、AVALON等總線類型,并提供了bus slave factory工具:
通過bus slave factory,我們可以方便地實(shí)現(xiàn)寄存器讀寫,其提供了一系列寄存器讀寫方法。這里列舉幾個常用的方法(完整的方法列表可參照SpinalHDL-Doc):
read(that,address,bitOffset)
注冊寄存器讀操作到指定地址,比特偏移為bitOffset 。
write(that,address,bitOffset)
注冊寄存器寫操作到指定地址,比特偏移為bitOffset。
readAndWrite(that,address,bitOffset)
注冊寄存器讀寫操作到指定地址,比特偏移為bitOffset 。
readMultiWord(that,address)
注冊大位寬寄存器(超過總線數(shù)據(jù)位寬)讀操作到指定地址,其中address地址存放對應(yīng)低比特,高比特地址向上累加。
writeMultiWord(that,address)
注冊大位寬寄存器(超過總線數(shù)據(jù)位寬)寫操作到指定地址,其中address地址存放對應(yīng)低比特,高比特地址向上累加。
除此之外,bus slave factory還提供了printDataModel函數(shù)用于打印寄存器列表。而且在生成RTL時,其會自動檢測寄存器地址是否存在沖突。
AXI4-Lite總線實(shí)現(xiàn)
這里以AXI4-Lite總線舉例,通過AXI4-Lite總線讀寫三組寄存器:
en:單比特信號,可讀可寫。
plus:單比特信號,可讀寫,寫1自動清零。
cnt:64比特信號,可讀。
這里給出完整的代碼結(jié)構(gòu):
這里代碼5~10行代碼聲明模塊端口,第12行代碼規(guī)范AXI4-Lite端口名稱。代碼第15~18行通過slave factory實(shí)現(xiàn)AXI4-Lite寄存器讀寫。代碼第19行打印輸出寄存器列表。
由于plus寫1清零,因此代碼14行用于實(shí)現(xiàn)清零操作。
通過下面的語法生成RTL代碼:
在生成RTL代碼的同時,會打印寄存器列表:
仿真結(jié)果
SpinalHDL里提供了AXI4-Lite總線的基礎(chǔ)仿真庫,這里直接調(diào)用其仿真庫,完整的仿真代碼如下:
通過gtkWave觀察波形:
可以看到,功能符合我們的設(shè)計(jì),寫寄存器0x4信號plus拉高1個時鐘周期后自動清零。 這里簡單幾行代碼實(shí)現(xiàn)了AXI4-Lite總線控制寄存器讀寫,對于我們在真正的項(xiàng)目實(shí)現(xiàn)里,能夠極大簡化我們的工作量和bug產(chǎn)生。盡管現(xiàn)在各個大廠或許有專門的總線控制寄存器讀寫代碼生成工具,但SpinalHDL這種形式從本質(zhì)上解決了Verilog描述的重復(fù)性工作。
寫在最后
雖然SpinalHDL這種slave factory工具能夠讓我們在工程中快捷的實(shí)現(xiàn)想要的功能,但對于初學(xué)者來說,理解掌握AXI4-Lite這些標(biāo)準(zhǔn)的總線協(xié)議時序還是非常有必要的(Verilog or SpinalHDL實(shí)現(xiàn)都行嘍)~
編輯:lyn
-
FPGA
+關(guān)注
關(guān)注
1630文章
21796瀏覽量
605996 -
寄存器
+關(guān)注
關(guān)注
31文章
5363瀏覽量
121158
原文標(biāo)題:SpinalHDL—優(yōu)雅地實(shí)現(xiàn)總線寄存器讀寫
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論