吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

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

問題是什么

不可否認,在當前的整體大環境下,Verilog/SystemVerilog仍然是主流,而SpinalHDL其本質上更像是一個生成Verilog的腳本工具。在團隊合作中,最終拿去生成跑綜合及布局布線生網表的仍然是Verilog代碼。團隊合作時當同時存在SpianlHDL代碼和Verilog代碼時不可避免的存在命名沖突的問題:

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

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

setDefinitionName

在《換個名字混江湖》中對setDefinitionName的使用有較為詳細的介紹,setDefinitionName可以手動的修改最終生成的Verilog代碼對應的模塊名,像下面的這段代碼:

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

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

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

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

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

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

globalPrefix

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

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

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

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

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

多人合作時根據每個人負責的功能模塊分別添加響應的模塊命名前綴似乎是一個很的方式,然而是否通用? 看下面的例子:

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

這里我們在SpinalHDL中調用了封裝好的RTL代碼addTop,如果我們在例化時指定globalPrefix為“test_”,那么看看會是什么樣子:

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

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

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

怎么做

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

怎么做?合二為一唄!

看下面的代碼:

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

而最終生成的RTL代碼為:

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

是不是看起來解決了我們的問題? setDefinitionName的優先級是高于globalPrefix的,我們在例化BlackBox時通過setDefinitionName指定模塊的名字來避免在添加globalPrefix時帶來的問題便可。

小小建議

在當前的環境下,團隊合作時若你采用SpinalHDL作為編程語言不妨采用下面的方式來進行混合編程下的模塊命名與管理:

1、若只負責單個模塊的開發,那么在生成rtl代碼時根據模塊的功能通過globalPrefix添加適當的前綴。

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

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2733

    瀏覽量

    47747
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110391
  • 混合編程
    +關注

    關注

    0

    文章

    26

    瀏覽量

    8274

原文標題:混合編程中的模塊命名與管理

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    VC與MATLAB混合編程在語音及圖像處理的應用

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

    基于labview與matlab的混合編程

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

    labview與matlab混合編程

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

    LABVIEW 與 MATLAB混合編程

    誰有用Xactive方法實現LABVIEW 與 MATLAB混合編程具體實例,包含詳細步驟的!急求!!!
    發表于 03-29 22:22

    LabVIEW與Matlab混合編程

    `針對LabVIEW與Matlab混合編程得文件,謝謝大家可以關注我的微信公眾號,獲取更多技術相關得文章`
    發表于 12-10 16:12

    Matlab與VC混合編程

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

    ADSP-TS101S混合編程的接口規范和標準,有什么應用?

    混合編程的接口規范和標準混合編程的調用和中斷混合編程在系統程序管理的應用
    發表于 04-25 09:33

    關于混合編程的基本知識都在這里

    C語言和匯編語言的混合編程混合編程的方法有哪些?混合編程的實例有哪些?混合編程的注意事項有哪些?
    發表于 04-25 08:56

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

    提出了基于flash MX 和authorware 的混合編程方法,給出了混合編程的關鍵――變量傳遞的方法,并給出相應范例。關鍵詞:多媒體 軟件 變量 程序隨著多媒體技術和網絡技術的出
    發表于 08-31 11:04 ?13次下載

    Matlab與C混合編程匯總

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

    DSP集成開發環境混合編程及FFT算法的實現

    DSP集成開發環境混合編程及FFT算法的實現
    發表于 12-17 21:16 ?16次下載

    C_與Matlab混合編程在BEAM繪制的應用_范嬋嬌

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

    Qt與Matlab混合編程

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

    混合編程面臨著哪些性能挑戰

    討論混合編程面臨的性能挑戰和幫助開發人員克服內存挑戰的工具。
    的頭像 發表于 11-13 06:29 ?2695次閱讀

    matlab vsFortran混合編程工具

    matlab vsFortran混合編程工具
    發表于 06-30 14:51 ?0次下載
    网上百家乐哪里开户| 百家乐官网赌博娱乐| 破解百家乐官网真人游戏| 百家乐官网真人游戏赌场娱乐网规则| 百家乐拍是什么| 高科技百家乐牌具| 威尼斯人娱乐平台开户| 爱玩棋牌下载| 澳门百家乐官网赌技术| 新葡京娱乐城官网| 稷山县| 百家乐官网推荐| 威尼斯人娱乐场首页| 娱乐城大全| 尊龙百家乐官网娱乐| 真人百家乐赌场娱乐网规则| 香港六合彩码报| 百家乐官网娱乐网佣金| 新濠峰百家乐的玩法技巧和规则 | 澳门百家乐网上| 豪门网上娱乐| 中骏百家乐官网的玩法技巧和规则| 赌场百家乐是如何| 王牌国际| 老虎百家乐官网的玩法技巧和规则| 悦榕庄百家乐的玩法技巧和规则| 缙云县| 百家乐视频游戏界面| 聚宝盆百家乐的玩法技巧和规则| 贵定县| 百家乐娱乐城有几家| 澳博| 皇冠百家乐代理网| 百家乐游戏机的玩法| 澳门足球博彩| 百家乐怎样发牌| 香港六合彩挂牌| 百家乐官网德州扑克桌布| 大发娱乐场下载| 百家乐单注技巧| 球讯网|