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

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

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

設計中DFX的重要性表現(xiàn)

Spinal FPGA ? 來源:Spinal FPGA ? 作者:Spinal FPGA ? 2022-10-09 10:25 ? 次閱讀

一種<>也不好使的場景,該assignAllByName上場了。

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

0300a87c-4170-11ed-96c9-dac502259ad0.png

這里我們假定對inPort端口添加一些監(jiān)控信息,我們設計如下模塊作為AxiLite4總線的一個通用監(jiān)控模塊(只是舉例說明,非真實應用):

03393de0-4170-11ed-96c9-dac502259ad0.png

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

03737af0-4170-11ed-96c9-dac502259ad0.png

原因無他,對于AxiLite4Mon的aite接口而言,其全部為輸入信號,而對于inPort接口而言,其既有輸出信號又有輸入信號,從而導致工具無法推斷具體的連接關系。 對于SpinalHDL了解的小伙伴也許能夠想到,這里把AxiLite4Mon定義擴展為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
}
此時在BundleTest中例化就可以寫成:
AxiLite4Mon(io.inPort,io.state)
誠然,這種方式從SpinalHDL的角度來講更簡潔,但對接口做一個好的DFX監(jiān)控不是像這里的這么簡單一行代碼。而且尤其當合作中有人采用Verilog來作為開發(fā)語言時最終你生成的代碼功能代碼和這些DFX代碼混合在一起給人看起來代碼過長,難以閱讀(當然我基本不直接閱讀生成的RTL代碼)。因此像這種總線接口的DFX代碼,個人還是傾向于采用Component進行封裝。 》assignAllByName

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

03ef77ae-4170-11ed-96c9-dac502259ad0.png

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

0457e17c-4170-11ed-96c9-dac502259ad0.png

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

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

0537e934-4170-11ed-96c9-dac502259ad0.png

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

通過這些,相信能基本滿足日常代碼設計需求。

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

    關注

    6

    文章

    2211

    瀏覽量

    55229
  • 數(shù)據(jù)接口

    關注

    1

    文章

    79

    瀏覽量

    17847
  • DFx
    DFx
    +關注

    關注

    0

    文章

    35

    瀏覽量

    10551

原文標題:<>也不好使—assignAllByName

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

收藏 人收藏

    評論

    相關推薦

    論RISC-V的MCUUART接口的重要性

    RISC-V的MCU(微控制器單元)UART(通用異步收發(fā)器)接口的重要性主要體現(xiàn)在以下幾個方面: 廣泛的適用 : UART接口是一種用于連接兩個計算機設備的接口,允許一個設備向另一個設備發(fā)送
    發(fā)表于 05-27 15:52

    求助,ADC接地的重要性?

    ADC接地的重要性
    發(fā)表于 06-04 07:56

    基準源設計的重要性

    的充電過程。讀過相關文章“Design SAR-ADC Driver Cirtuitry”工程師,都會深刻理解SAR-ADC驅(qū)動電路后,ADC輸入引腳電容的重要性。原因是在采樣保持過程SAR-ADC
    發(fā)表于 06-18 06:10

    BGA焊接溫度控制重要性

    `請問BGA焊接溫度控制重要性有哪些?`
    發(fā)表于 03-26 16:41

    Syncer模塊的重要性是什么?

    我在我的項目中使用25G以太網(wǎng)IP。通過打開此IP的示例設計,我們可以看到許多SYNCER模塊,一個FSM模塊和一個流量生成器模塊。我想問一下這些Syncer模塊的重要性是什么,我是否需要在我的最終設計中使用所有syncer模塊。
    發(fā)表于 05-18 09:25

    代碼規(guī)范的重要性是什么

    論代碼規(guī)范的重要性
    發(fā)表于 05-19 13:07

    使用ODDR原語的重要性是什么?

    你好我將virtex5 LX50與具有應根據(jù)standardEIA / TIA-644 LVDS規(guī)范終止的輸出數(shù)據(jù)的設備連接起來我在用著IBUFDS用于將輸入LVDS轉(zhuǎn)換為LVTTL,OBUFDS用于輸出信號和時鐘這是這樣做的正確方法為此目的使用ODDR原語的重要性是什么?問候uzmeed
    發(fā)表于 06-17 14:59

    欠壓保護的重要性

    欠壓保護的重要性雙電源供電時欠壓保護電路的注意事項
    發(fā)表于 03-03 06:06

    什么是網(wǎng)絡拓撲,它的重要性是什么?

    什么是網(wǎng)絡拓撲,它的重要性是什么?
    發(fā)表于 03-17 06:50

    論調(diào)節(jié)閥的重要性

    調(diào)節(jié)閥的重要性執(zhí)行機構(gòu)的選擇  論調(diào)節(jié)閥的重要性:  1.控制閥是一種節(jié)流裝置,屬于運動部件。與檢測元件、變送器和控制器相比,在控制過程,控制閥需要不斷改變節(jié)流部分的過流面積,使控制變量的變化適應
    發(fā)表于 09-15 07:25

    ATPG是什么?ATPG有何重要性

    ATPG是什么?ATPG有何重要性?常見的DFT技術(shù)有哪幾種?
    發(fā)表于 11-02 09:31

    時鐘服務器的重要性是什么?

    時鐘服務器的重要性是什么?
    發(fā)表于 11-08 08:31

    UPS的重要性

    中心機房的UPS太重要了,前不久就出現(xiàn)過停電壞了一個磁盤陳列硬盤的事故,一個2T的硬盤壞了,還好有一個備用的硬盤使用,否則磁盤陳列里的資料就岌岌可危了。服務器多了,UPS的重要性尤其重要,學校周邊
    發(fā)表于 11-16 09:09

    arm匯編的重要性是什么?

    arm匯編的重要性是什么?
    發(fā)表于 11-30 08:03

    POE浪涌保護的重要性是什么?

    POE浪涌保護的重要性是什么?
    發(fā)表于 01-14 06:07