編 者 按
當(dāng)在SpinalHDL中調(diào)用別人的RTL代碼時,需要采用BlackBox進行封裝。對于大多數(shù)場景,想必小伙伴們都已輕車熟路。今天著重來看下當(dāng)RTL代碼的接口中存在數(shù)組形式的接口時如何處理。
合并數(shù)組和非合并數(shù)組 在開始之前先了解兩個概念:合并數(shù)組與非合并數(shù)組。在SystemVerilog中,關(guān)于可綜合的數(shù)組存在兩種形式:
wire [1:0][7:0] data0; //合并數(shù)組 wire [7:0] data1[1:0]; //非合并數(shù)組 ? 在仿真方面,合并數(shù)組是緊密排列的,而非合并數(shù)組則是按照內(nèi)存對齊的形式進行排列(電路綜合中則無需考慮):

相應(yīng)的,合并數(shù)組則可以作為一個整體進行賦值,而非合并數(shù)組則不可以:

而合并數(shù)組與非合并數(shù)組,則可以通過SystemVerilog中所提供的流操作符進行相互轉(zhuǎn)換處理(是可以綜合的):
? ?
》BlackBox封裝
在了解了上面的背景知識之后,再來看如何這種數(shù)組類場景如何封裝至BlackBox。兩條規(guī)則:
1、BlackBox封裝針對數(shù)組類接口僅能支持合并數(shù)組類型。
2、當(dāng)接口中存在非合并數(shù)組接口時則需手動封裝一層通過流操作符將非合并數(shù)組轉(zhuǎn)換為合并數(shù)組。
基于上面的規(guī)則,可以進行數(shù)組接口的BlackBox封裝。
看下面的RTL代碼示例:

該模塊輸入,輸出均為一個合并數(shù)組,實現(xiàn)功能為兩個元素的數(shù)據(jù)交換。我們在進行封裝BlackBox時可采用下面的封裝形式:

這里我們在BlackBox中定義接口時將合并數(shù)組data_in,data_out均定義為Bits類型,寬度為合并數(shù)組中所有元素的位寬總和(2*8).
(這里面的setInlineVerilog也可不寫,主要是懶得再創(chuàng)建一個SV文件了。關(guān)于這部分功能可參見《彩——看blackBox的inline功能》)
在進行調(diào)用時就可以和其他調(diào)用沒有區(qū)別了:

進行仿真:

結(jié)果非常符合預(yù)期:

審核編輯:湯梓紅
-
接口
+關(guān)注
關(guān)注
33文章
9525瀏覽量
157089 -
封裝
+關(guān)注
關(guān)注
128文章
9258瀏覽量
148697 -
RTL
+關(guān)注
關(guān)注
1文章
394瀏覽量
62678 -
代碼
+關(guān)注
關(guān)注
30文章
4968瀏覽量
74012 -
數(shù)組
+關(guān)注
關(guān)注
1文章
420瀏覽量
27372
原文標(biāo)題:驚!原來SpinalHDL中BlackBox封裝數(shù)組接口如此簡單
文章出處:【微信號:Spinal FPGA,微信公眾號:Spinal FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
在SpinalHDL里實現(xiàn)優(yōu)雅的添加待跟蹤波形信號
在SpinalHDL的設(shè)計中集成現(xiàn)有RTL設(shè)計(IP)的渠道——BlackBox
關(guān)于SpinalHDL中的驗證覆蓋率收集簡單說明
聊一聊SpinalHDL 1.6.1引入的blackbox inline功能
聊聊SpinalHDL中的FIFO
SpinalHDL是如何讓仿真跑起來的
記錄一個在使用BlackBox中parameter踩到的坑
在SpinalHDL中的對應(yīng)關(guān)系及聲明形式
SpinalHDL BlackBox時鐘與復(fù)位
當(dāng)RTL代碼的接口中存在數(shù)組形式的接口時如何處理?
Verilog代碼封裝后門訪問
原來SpinalHDL中BlackBox封裝數(shù)組接口如此簡單
評論