0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

原來(lái)SpinalHDL中BlackBox封裝數(shù)組接口如此簡(jiǎn)單

Spinal FPGA ? 來(lái)源:Spinal FPGA ? 2023-05-22 10:04 ? 次閱讀

編 者 按

當(dāng)在SpinalHDL中調(diào)用別人的RTL代碼時(shí),需要采用BlackBox進(jìn)行封裝。對(duì)于大多數(shù)場(chǎng)景,想必小伙伴們都已輕車(chē)熟路。今天著重來(lái)看下當(dāng)RTL代碼的接口中存在數(shù)組形式的接口時(shí)如何處理。

合并數(shù)組和非合并數(shù)組 在開(kāi)始之前先了解兩個(gè)概念:合并數(shù)組與非合并數(shù)組。在SystemVerilog中,關(guān)于可綜合的數(shù)組存在兩種形式:
wire [1:0][7:0] data0; //合并數(shù)組 wire [7:0] data1[1:0]; //非合并數(shù)組 ? 在仿真方面,合并數(shù)組是緊密排列的,而非合并數(shù)組則是按照內(nèi)存對(duì)齊的形式進(jìn)行排列(電路綜合中則無(wú)需考慮):

a866bb9c-f70c-11ed-90ce-dac502259ad0.jpg

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

a874c598-f70c-11ed-90ce-dac502259ad0.png

而合并數(shù)組與非合并數(shù)組,則可以通過(guò)SystemVerilog中所提供的流操作符進(jìn)行相互轉(zhuǎn)換處理(是可以綜合的):

a8862f7c-f70c-11ed-90ce-dac502259ad0.png? ?

》BlackBox封裝

在了解了上面的背景知識(shí)之后,再來(lái)看如何這種數(shù)組類(lèi)場(chǎng)景如何封裝至BlackBox。兩條規(guī)則:

1、BlackBox封裝針對(duì)數(shù)組類(lèi)接口僅能支持合并數(shù)組類(lèi)型。

2、當(dāng)接口中存在非合并數(shù)組接口時(shí)則需手動(dòng)封裝一層通過(guò)流操作符將非合并數(shù)組轉(zhuǎn)換為合并數(shù)組。

基于上面的規(guī)則,可以進(jìn)行數(shù)組接口的BlackBox封裝。

看下面的RTL代碼示例:

a8a2a85a-f70c-11ed-90ce-dac502259ad0.png

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

a8bcf00c-f70c-11ed-90ce-dac502259ad0.png

這里我們?cè)贐lackBox中定義接口時(shí)將合并數(shù)組data_in,data_out均定義為Bits類(lèi)型,寬度為合并數(shù)組中所有元素的位寬總和(2*8).

(這里面的setInlineVerilog也可不寫(xiě),主要是懶得再創(chuàng)建一個(gè)SV文件了。關(guān)于這部分功能可參見(jiàn)《彩——看blackBox的inline功能》)

在進(jìn)行調(diào)用時(shí)就可以和其他調(diào)用沒(méi)有區(qū)別了:

a8d9867c-f70c-11ed-90ce-dac502259ad0.png

進(jìn)行仿真:

a8e007e0-f70c-11ed-90ce-dac502259ad0.png

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

a8ef52a4-f70c-11ed-90ce-dac502259ad0.png

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8254

    瀏覽量

    149945
  • 封裝
    +關(guān)注

    關(guān)注

    125

    文章

    7592

    瀏覽量

    142140
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    384

    瀏覽量

    59515
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4670

    瀏覽量

    67764
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    411

    瀏覽量

    25821

原文標(biāo)題:驚!原來(lái)SpinalHDL中BlackBox封裝數(shù)組接口如此簡(jiǎn)單

文章出處:【微信號(hào):Spinal FPGA,微信公眾號(hào):Spinal FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    原來(lái)單片機(jī)編程可以如此簡(jiǎn)單

    原來(lái)單片機(jī)編程可以如此簡(jiǎn)單
    發(fā)表于 08-11 18:54

    SpinalHDL里實(shí)現(xiàn)優(yōu)雅的添加待跟蹤波形信號(hào)

    在FPGA的開(kāi)發(fā)過(guò)程,在線(xiàn)抓取波形往往是終極調(diào)試大法。而如何抓取信號(hào),相信做邏輯開(kāi)發(fā)的小伙伴都是輕車(chē)熟路,張口就來(lái),無(wú)非兩種方式嘛:待跟蹤信號(hào)添加原語(yǔ)或者手動(dòng)例化Ila。而在SpinalHDL
    發(fā)表于 06-22 14:37

    SpinalHDL的設(shè)計(jì)中集成現(xiàn)有RTL設(shè)計(jì)(IP)的渠道——BlackBox

    接口及parameter參數(shù)(這也是我們?cè)赗TL里例化IP時(shí)常用的)。我們來(lái)看SpinalHDL-doc給出的example:整個(gè)代碼里做了三件事:參數(shù)聲明、端口聲明,時(shí)鐘域映射。參數(shù)聲明在上例
    發(fā)表于 06-22 14:59

    關(guān)于SpinalHDL的驗(yàn)證覆蓋率收集簡(jiǎn)單說(shuō)明

    在做RTL仿真驗(yàn)證時(shí),覆蓋率收集往往是我們?cè)隍?yàn)證需要注意的地方,本篇就SpinalHDL的驗(yàn)證覆蓋率收集做一個(gè)簡(jiǎn)單說(shuō)明。sbt配置在Spinal
    發(fā)表于 06-24 15:56

    聊一聊SpinalHDL 1.6.1引入的blackbox inline功能

    BlackBox在之前的文章,曾介紹過(guò)如何封裝兼容別人的RTL代碼:SpinalHDL——集成你的RTL代碼整體的思路還是簡(jiǎn)潔明了的,相信讀完后照著做很快就能上手。這對(duì)于保持設(shè)計(jì)的兼
    發(fā)表于 06-29 16:02

    聊聊SpinalHDL的FIFO

    顯示在Pop接口,那么此時(shí)可以選擇StreamFifoLowLatency:其時(shí)序模型為:至于里面的設(shè)計(jì)原理,建議自己去翻看一下源代碼,很簡(jiǎn)單,重要的是將它封裝成標(biāo)準(zhǔn)的組建,減少我們真正“業(yè)務(wù)代碼”
    發(fā)表于 06-30 15:28

    SpinalHDL是如何讓仿真跑起來(lái)的

    SpinalHDL的測(cè)試代碼里也可以起多個(gè),不過(guò)其為協(xié)程。SpinalHDL的仿真庫(kù)已經(jīng)幫我們封裝好了底層協(xié)程的處理,兩個(gè)協(xié)程之間的通信(類(lèi)似systemVerilog的mailb
    發(fā)表于 07-25 15:09

    記錄一個(gè)在使用BlackBoxparameter踩到的坑

    SpinalHDL doc里面也曾提到,在創(chuàng)建BlackBox時(shí),關(guān)于原始RTL代碼的parameter的處理方式為:嗯,看起來(lái)很簡(jiǎn)單,我們照貓畫(huà)虎就好了,最近在寫(xiě)代碼時(shí)偶然間踩到了
    發(fā)表于 08-31 14:58

    SpinalHDL的對(duì)應(yīng)關(guān)系及聲明形式

    針對(duì)SpinalHDL的兩大類(lèi)型Reg、Wire,來(lái)梳理下在SpinalHDL的對(duì)應(yīng)關(guān)系及聲明形式。
    的頭像 發(fā)表于 07-03 11:02 ?1420次閱讀

    SpinalHDL BlackBox時(shí)鐘與復(fù)位

    SpinalHDL中使用之前已有的Verilog等代碼的時(shí)候需要將這些代碼包在一個(gè)BlackBox里面,但是如果這些代碼里面有時(shí)鐘和復(fù)位,我們需要怎么將時(shí)鐘和復(fù)位端口和SpinalHDL
    的頭像 發(fā)表于 05-04 11:13 ?680次閱讀
    <b class='flag-5'>SpinalHDL</b> <b class='flag-5'>BlackBox</b>時(shí)鐘與復(fù)位

    當(dāng)RTL代碼的接口中存在數(shù)組形式的接口時(shí)如何處理?

    當(dāng)在SpinalHDL調(diào)用別人的RTL代碼時(shí),需要采用BlackBox進(jìn)行封裝。對(duì)于大多數(shù)場(chǎng)景,想必小伙伴們都已輕車(chē)熟路。
    發(fā)表于 07-12 16:21 ?403次閱讀
    當(dāng)RTL代碼的<b class='flag-5'>接口</b>中存在<b class='flag-5'>數(shù)組</b>形式的<b class='flag-5'>接口</b>時(shí)如何處理?

    Verilog代碼封裝后門(mén)訪(fǎng)問(wèn)

    關(guān)于仿真里的后門(mén)訪(fǎng)問(wèn),之前的文章《三分鐘教會(huì)你SpinalHDL仿真中的后門(mén)讀寫(xiě)》中有做過(guò)介紹,其針對(duì)的都是針對(duì)以SpinalHDL的代碼進(jìn)行的后門(mén)訪(fǎng)問(wèn)。今天來(lái)看看當(dāng)封裝了Veril
    的頭像 發(fā)表于 07-15 10:22 ?760次閱讀
    Verilog代碼<b class='flag-5'>封裝</b>后門(mén)訪(fǎng)問(wèn)

    看懂EMC整改知識(shí):原來(lái)竟然如此簡(jiǎn)單!(上)

    看懂EMC整改知識(shí):原來(lái)竟然如此簡(jiǎn)單!|深圳比創(chuàng)達(dá)EMC(上)
    的頭像 發(fā)表于 09-06 11:10 ?860次閱讀

    看懂EMC整改知識(shí):原來(lái)竟然如此簡(jiǎn)單!(下)

    看懂EMC整改知識(shí):原來(lái)竟然如此簡(jiǎn)單(下)?相信不少人是有疑問(wèn)的,今天深圳市比創(chuàng)達(dá)電子科技有限公司就跟大家解答一下!
    的頭像 發(fā)表于 09-08 11:02 ?594次閱讀
    看懂EMC整改知識(shí):<b class='flag-5'>原來(lái)</b>竟然<b class='flag-5'>如此</b><b class='flag-5'>簡(jiǎn)單</b>?。ㄏ拢? />    </a>
</div>                            <div   id=

    淺析SpinalHDLPipeline的復(fù)位定制

    之前有系列文章介紹了SpinalHDLPipeline的使用,最近在一個(gè)功能模塊真實(shí)的使用了這個(gè)lib。
    的頭像 發(fā)表于 03-17 17:31 ?843次閱讀
    淺析<b class='flag-5'>SpinalHDL</b><b class='flag-5'>中</b>Pipeline<b class='flag-5'>中</b>的復(fù)位定制