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