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

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

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

混合編程中的模塊命名與管理

FPGA之家 ? 來源:Spinal FPGA ? 作者:玉騏 ? 2022-12-13 17:03 ? 次閱讀

最近在項(xiàng)目中以SpinalHDL為主體做系統(tǒng)集成,其中遇到了不少模塊命名與管理的坑,借此機(jī)會(huì),再來聊一聊混合編程中的模塊件命名與管理的事情。

問題是什么

不可否認(rèn),在當(dāng)前的整體大環(huán)境下,Verilog/SystemVerilog仍然是主流,而SpinalHDL其本質(zhì)上更像是一個(gè)生成Verilog的腳本工具。在團(tuán)隊(duì)合作中,最終拿去生成跑綜合及布局布線生網(wǎng)表的仍然是Verilog代碼。團(tuán)隊(duì)合作時(shí)當(dāng)同時(shí)存在SpianlHDL代碼和Verilog代碼時(shí)不可避免的存在命名沖突的問題:

盡管SpinalHDL支持參數(shù)化設(shè)計(jì),但其參數(shù)化是基于Scala層面上的,當(dāng)我們調(diào)用SpinalHDL同一個(gè)IP以不同的參數(shù)例化時(shí)往往會(huì)為每次例化均生成一個(gè)Verilog模塊代碼。而當(dāng)合作中存在多人調(diào)用組件生成RTL代碼時(shí)最后往往會(huì)有模塊命名撞車的問題。

在《被忽略的兩個(gè)Tips》及《換個(gè)名字混江湖》中對(duì)于模塊的命名均有提到一些方法,這里就真實(shí)的使用場(chǎng)景來看看這個(gè)問題。

setDefinitionName

在《換個(gè)名字混江湖》中對(duì)setDefinitionName的使用有較為詳細(xì)的介紹,setDefinitionName可以手動(dòng)的修改最終生成的Verilog代碼對(duì)應(yīng)的模塊名,像下面的這段代碼:

e62eaad8-7878-11ed-8abf-dac502259ad0.png

這里在例化Apb3Decoder這個(gè)SpinalHDL中的IP組件時(shí),通過setDefinitionName來設(shè)置生成RTL代碼時(shí)該模塊名重新命名為Deocer。最終生成的代碼便是下面這樣:

e6bb984e-7878-11ed-8abf-dac502259ad0.png

倘若不添加setDefinitionName指定那么生成的RTL代碼則保持原來的名字:

e6d79d8c-7878-11ed-8abf-dac502259ad0.png

通過setDefinitionName可以手動(dòng)的為我們的模塊指定特定的名稱,但如此做帶來的問題是我們需要要求每個(gè)人在例化每個(gè)模塊時(shí)均指定名稱。稍有不慎漏掉一個(gè)那么在最后合并整體工程時(shí)便會(huì)有重復(fù)命名的問題。更值得把握的是當(dāng)我們調(diào)用的其他lib有多層嵌套例化時(shí)那么這種方式便顯得更為復(fù)雜了。

globalPrefix

通過globalPrefix的方式可以使得在生成RTL代碼時(shí)為每個(gè)模塊添加一個(gè)特定的前綴。像下面的代碼:

e6fc5a14-7878-11ed-8abf-dac502259ad0.png

指定每個(gè)模塊的命名前面均添加“test_”,可以看到最終生成的RTL代碼的每個(gè)模塊前均添加有"test_"前綴:

e7228946-7878-11ed-8abf-dac502259ad0.png

e735caec-7878-11ed-8abf-dac502259ad0.png

多人合作時(shí)根據(jù)每個(gè)人負(fù)責(zé)的功能模塊分別添加響應(yīng)的模塊命名前綴似乎是一個(gè)很的方式,然而是否通用? 看下面的例子:

e763e6f2-7878-11ed-8abf-dac502259ad0.png

這里我們?cè)赟pinalHDL中調(diào)用了封裝好的RTL代碼addTop,如果我們?cè)诶瘯r(shí)指定globalPrefix為“test_”,那么看看會(huì)是什么樣子:

e78193b4-7878-11ed-8abf-dac502259ad0.png

問題來了,我例化的BlackBox代碼模塊名稱為addTop,而這里例化的時(shí)候卻例化了test_addTop——一個(gè)壓根沒有的模塊。

也就意味著當(dāng)代碼里存在Verilog和SpinalHDL代碼混合使用時(shí)那么這種globalPrefix方式便顯得太“一刀切”了。

怎么做

解決不了上面的問題那么無論SpinalHDL再怎么優(yōu)秀那終究是雞肋~

怎么做?合二為一唄!

看下面的代碼:

e7a5964c-7878-11ed-8abf-dac502259ad0.png

而最終生成的RTL代碼為:

e7d9942e-7878-11ed-8abf-dac502259ad0.png

是不是看起來解決了我們的問題? setDefinitionName的優(yōu)先級(jí)是高于globalPrefix的,我們?cè)诶疊lackBox時(shí)通過setDefinitionName指定模塊的名字來避免在添加globalPrefix時(shí)帶來的問題便可。

小小建議

在當(dāng)前的環(huán)境下,團(tuán)隊(duì)合作時(shí)若你采用SpinalHDL作為編程語言不妨采用下面的方式來進(jìn)行混合編程下的模塊命名與管理:

1、若只負(fù)責(zé)單個(gè)模塊的開發(fā),那么在生成rtl代碼時(shí)根據(jù)模塊的功能通過globalPrefix添加適當(dāng)?shù)那熬Y。

2、若在SpinalHDL中例化封裝Verilog代碼時(shí),在例化時(shí)通過setDefinitionName指定例化時(shí)的模塊名稱確保生成RTL代碼時(shí)不會(huì)被修改掉。

審核編輯:湯梓紅

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

    關(guān)注

    7

    文章

    2612

    瀏覽量

    47006
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1333

    瀏覽量

    109712
  • 混合編程
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    8241

原文標(biāo)題:混合編程中的模塊命名與管理

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    VC與MATLAB混合編程在語音及圖像處理的應(yīng)用

    VC與MATLAB混合編程在語音及圖像處理的應(yīng)用 [hide][/hide]
    發(fā)表于 11-25 09:28

    基于labview與matlab的混合編程

    求大神解答怎樣編寫一個(gè)VI控制matlab仿真小車前后行走 。。。。。。。。通過SIT混合編程
    發(fā)表于 03-06 14:42

    labview與matlab混合編程

    labview與matlab混合編程
    發(fā)表于 05-13 17:03

    LABVIEW 與 MATLAB混合編程

    誰有用Xactive方法實(shí)現(xiàn)LABVIEW 與 MATLAB混合編程具體實(shí)例,包含詳細(xì)步驟的!急求?。。?/div>
    發(fā)表于 03-29 22:22

    LabVIEW與Matlab混合編程

    `針對(duì)LabVIEW與Matlab混合編程得文件,謝謝大家可以關(guān)注我的微信公眾號(hào),獲取更多技術(shù)相關(guān)得文章`
    發(fā)表于 12-10 16:12

    Matlab與VC混合編程

    Matlab與VC混合編程
    發(fā)表于 04-03 16:14

    ADSP-TS101S混合編程的接口規(guī)范和標(biāo)準(zhǔn),有什么應(yīng)用?

    混合編程的接口規(guī)范和標(biāo)準(zhǔn)混合編程的調(diào)用和中斷混合編程在系統(tǒng)程序管理的應(yīng)用
    發(fā)表于 04-25 09:33

    關(guān)于混合編程的基本知識(shí)都在這里

    C語言和匯編語言的混合編程混合編程的方法有哪些?混合編程的實(shí)例有哪些?混合編程的注意事項(xiàng)有哪些?
    發(fā)表于 04-25 08:56

    基于flash MX和authorware的混合編程軟件小助

    提出了基于flash MX 和authorware 的混合編程方法,給出了混合編程的關(guān)鍵――變量傳遞的方法,并給出相應(yīng)范例。關(guān)鍵詞:多媒體 軟件 變量 程序隨著多媒體技術(shù)和網(wǎng)絡(luò)技術(shù)的出
    發(fā)表于 08-31 11:04 ?13次下載

    Matlab與C混合編程匯總

    接受matlab與C,C++等混合編程的方法案例
    發(fā)表于 01-14 16:09 ?0次下載

    DSP集成開發(fā)環(huán)境混合編程及FFT算法的實(shí)現(xiàn)

    DSP集成開發(fā)環(huán)境混合編程及FFT算法的實(shí)現(xiàn)
    發(fā)表于 12-17 21:16 ?16次下載

    C_與Matlab混合編程在BEAM繪制的應(yīng)用_范嬋嬌

    C_與Matlab混合編程在BEAM繪制的應(yīng)用_范嬋嬌
    發(fā)表于 03-19 11:26 ?0次下載

    Qt與Matlab混合編程

    Qt與Matlab混合編程
    發(fā)表于 03-27 08:48 ?0次下載

    混合編程面臨著哪些性能挑戰(zhàn)

    討論混合編程面臨的性能挑戰(zhàn)和幫助開發(fā)人員克服內(nèi)存挑戰(zhàn)的工具。
    的頭像 發(fā)表于 11-13 06:29 ?2563次閱讀

    matlab vsFortran混合編程工具

    matlab vsFortran混合編程工具
    發(fā)表于 06-30 14:51 ?0次下載