《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計(jì) > 業(yè)界動(dòng)態(tài) > <>也不好使—assignAllByName

<>也不好使—assignAllByName

2022-10-01
來源:Spinal FPGA
關(guān)鍵詞: assignAllByName DFX AxiLite4

  從校園畢業(yè)從事邏輯設(shè)計(jì)也有三年時(shí)光了,對(duì)于邏輯設(shè)計(jì),最大的感受就是在設(shè)計(jì)中DFX的重要性。無論你自己的設(shè)計(jì)多么牛逼,仿真多么到位,全面的DFX仍舊是必不可少,尤其是跨部門多團(tuán)隊(duì)合作里,好的DFX能夠在系統(tǒng)上線及運(yùn)維上有極大的幫助。在一些系統(tǒng)設(shè)計(jì)里,我們往往會(huì)對(duì)模塊的各路數(shù)據(jù)接口添加狀態(tài)信息DFX以及一些輔助性能分析的工具。這里以Axiite4為例,我們以如下模塊作為待監(jiān)控模塊:

  

1.png

  這里我們假定對(duì)inPort端口添加一些監(jiān)控信息,我們?cè)O(shè)計(jì)如下模塊作為AxiLite4總線的一個(gè)通用監(jiān)控模塊(只是舉例說明,非真實(shí)應(yīng)用):

  

2.png

  這里我們定義了一個(gè)AxiLite4Mon的Component,監(jiān)控aw,w,b,ar,r五路通路的狀態(tài)。這里值得注意的是對(duì)于AxiLite4Mon而言,alite接口的所有信號(hào)都是輸入。故其書寫形式為in(AxiLite4(32,32))。也正因如此,當(dāng)我們?cè)贐undleTest中去例化AxiLite4Mon時(shí)你會(huì)發(fā)現(xiàn)采用<>對(duì)alite接口進(jìn)行連線時(shí)生成RTL時(shí)會(huì)報(bào)錯(cuò):

  

3.png

  原因無他,對(duì)于AxiLite4Mon的aite接口而言,其全部為輸入信號(hào),而對(duì)于inPort接口而言,其既有輸出信號(hào)又有輸入信號(hào),從而導(dǎo)致工具無法推斷具體的連接關(guān)系。

  對(duì)于SpinalHDL了解的小伙伴也許能夠想到,這里把AxiLite4Mon定義擴(kuò)展為Area而非Component:

  case class AxiLite4Mon(alite:AxiLite4,state:Bits) extends Area{

  state:=alite.aw.fire##alite.w.fire##alite.b.fire##alite.ar.fire##alite.r.fire

  }

  此時(shí)在BundleTest中例化就可以寫成:

  AxiLite4Mon(io.inPort,io.state)

  誠然,這種方式從SpinalHDL的角度來講更簡潔,但對(duì)接口做一個(gè)好的DFX監(jiān)控不是像這里的這么簡單一行代碼。而且尤其當(dāng)合作中有人采用Verilog來作為開發(fā)語言時(shí)最終你生成的代碼功能代碼和這些DFX代碼混合在一起給人看起來代碼過長,難以閱讀(當(dāng)然我基本不直接閱讀生成的RTL代碼)。因此像這種總線接口的DFX代碼,個(gè)人還是傾向于采用Component進(jìn)行封裝。

  》assignAllByName

  像上面的問題,如果你手動(dòng)對(duì)alite接口展開賦值那我也不攔著,只能說沒學(xué)好SpinalHDL。在SpinalHDL里這些復(fù)雜的接口都集成擴(kuò)展于Bundle。但凡你打開過Bundle的代碼實(shí)現(xiàn),你就會(huì)發(fā)現(xiàn)這里面有一個(gè)assignAllByName的方法實(shí)現(xiàn)很符合我們的需求:

  

4.png

  我們?cè)贐undle中聲明的信號(hào)接口都存儲(chǔ)于elements中,elements的定義形式為:ArrayBuffer[(String, Data)]。這里僅需要根據(jù)定義的信號(hào)名字找到對(duì)應(yīng)的接口信號(hào)進(jìn)行連接即可,這也是assignAllByName所做的事情,相信有點(diǎn)兒Scala基礎(chǔ)上面的代碼并不難理解。此時(shí)像上面的代碼我們就可以輕松實(shí)現(xiàn)了:

  

5.png

  這才是SpinalHDL的正確書寫形式。

  除了assignAllByName,Bundle中也定義了下面兩種用于連線賦值的API:

  6.png

  assignSomeByName相比于assignAllByName,其允許that中的部分信號(hào)為null,而bundleAssign則可以讓我們自定義連接賦值函數(shù)。

  通過這些,相信能基本滿足日常代碼設(shè)計(jì)需求。




 

更多信息可以來這里獲取==>>電子技術(shù)應(yīng)用-AET<<

圖片.jpg


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 品色堂永久免费| 中文字幕日韩精品有码视频 | 免费在线看片网站| 久久青青草原亚洲AV无码麻豆 | 久久精品视频5| a级成人毛片完整版| 麻豆国产96在线|日韩| 狠狠夜色午夜久久综合热91| 日韩欧美一区二区三区免费观看 | 巨胸狂喷奶水视频www网站免费| 国产精品二区三区免费播放心| 啊用力太猛了啊好深视频 | 鲁啊鲁啊鲁在线视频播放| 琪琪色原网站在线观看| 日韩有码在线观看| 在线天堂bt种子资源| 国产一区二区精品人妖系列| 又粗又黄又猛又爽大片免费| 亚洲人成未满十八禁网站| 久久综合久久鬼色| 97久久婷婷五月综合色d啪蜜芽| 三级视频在线播放| 适合一个人在晚上偷偷看b站| 法国女人与动zozoz0z0| 无限在线观看下载免费视频| 国产精品久久久久久影视| 人妻体内射精一区二区| 丰满多毛的大隂户毛茸茸| 日韩精品一区二区三区中文精品 | 狠狠久久精品中文字幕无码| 无遮挡亲胸捏胸激吻视频| 国产精品二区三区免费播放心| 停不了的爱在线观看高清| 中韩高清无专码区2021曰| 国产在线资源站| 欧美日韩一二三| 日本亚州视频在线八a| 国产福利免费视频| 亚洲精品国产av成拍色拍| 丁香六月纪婷婷激情综合| 裴远之的原型人物是谁 |