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

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

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

談?wù)剮追N芯片設(shè)計(jì)增加代碼復(fù)用性的方法

sanyue7758 ? 來源:IC的世界 ? 2023-09-12 09:55 ? 次閱讀

很多芯片在設(shè)計(jì)之初,就已經(jīng)考慮如何增加代碼的復(fù)用性,盡量減少工作量,降低錯(cuò)誤概率。 增加復(fù)用性的幾個(gè)場(chǎng)景:

不同項(xiàng)目之間的代碼復(fù)用性

不同工藝之間的代碼復(fù)用性

同一個(gè)模塊例化多份,分別工作在不同模式下

同一個(gè)項(xiàng)目不同環(huán)境(RTL驗(yàn)證,FPGA demo 驗(yàn)證)之間的代碼復(fù)用性

本章節(jié)將簡(jiǎn)單談?wù)剮追N增加代碼復(fù)用性的方法。

1、基礎(chǔ)模塊IP化

在各家ASIC/FPGA項(xiàng)目的代碼目錄中,我們經(jīng)常能看到各類小的基礎(chǔ)模塊,例如各類跨時(shí)鐘模塊、各類調(diào)度仲裁模塊、各類RAM讀寫模塊、各類總線接口模塊等等。它們可能命名為share_ip_*或base_ip_*或cmn_ip_*,又或者其他名稱,幾乎每個(gè)設(shè)計(jì)者都需要用到這些基礎(chǔ)模塊。 我們?cè)谛枰獙?shí)現(xiàn)其相關(guān)功能時(shí),只需要例化模塊即可,簡(jiǎn)單高效,有降低了bug概率。

2、模塊參數(shù)

在進(jìn)行模塊設(shè)計(jì)時(shí),我們需要盡量保證模塊參數(shù)化,盡量避免使用立即數(shù)(例如10’d0)。 被參數(shù)化的信號(hào)可能是數(shù)據(jù)位寬,用戶數(shù)量或者其他類型的信號(hào)。

module  ip_bus_sync #( // 
    parameter   DATA_WDTH                       =       16                                      ,   //
    parameter   INI_VALUE                       =       {DATA_WDTH{1'b0}}                           //
)(
    input                                               i_src_clk                               ,   //
    input                                               i_src_rst_n                             ,   //
    input               [DATA_WDTH-1:0]                 i_src_din                               ,   //
    input                                               i_dst_clk                               ,   //
    input                                               i_dst_rst_n                             ,   //
    output  reg         [DATA_WDTH-1:0]                 o_dst_dout                                  // 


);




//邏輯代碼


endmodule

3、宏定義區(qū)分代碼分支

ASIC項(xiàng)目的代碼一般至少有兩個(gè)版本:ASIC版本和驗(yàn)證版本(FPGA/加速器)。部分公司還會(huì)同時(shí)出兩個(gè)系列的芯片,ASIC系列和FPGA系列。因此我們通常需要通過宏定義區(qū)分不同的代碼分支和參數(shù)

`ifdef FOR_ASIC_DESIGN
  //ASIC  logic
  //參數(shù)定義
`else
  //其他分支邏輯
  //參數(shù)定義
`endif
`ifdef FOR_ASIC_DESIGN




generate
genvar  i;


for ( i=0; i
        

4、使用參數(shù)選擇代碼分支

在同一個(gè)宏定義分支下(例如同在ASIC或者FPGA項(xiàng)目),我們可能需要獎(jiǎng)模塊例化多份,以支持如下場(chǎng)景:

Case1:同一個(gè)模塊,工作在同的模式下,為了節(jié)約資源,只需要保留對(duì)應(yīng)模式的代碼邏輯。 Case2:同一個(gè)模塊,其支持的功能數(shù)量不同,所需要的RAM等資源也不相同,需要例化不同規(guī)格的RAM。

module xxxxx
#(
    parameter   FUNCTION_MODE   =       `MULTI_FUNCTION             
)
(
   //各類IO信號(hào)
) ;




generate


if (FUNCTION_MODE==`MULTI_FUNCTION) begin:MULTI_FUNCTION_CODE


     //多function 邏輯  


end


else begin:SINGLE_FUNCTION_CODE


    // 單function 邏輯


end


end
endgenerate

5、IP接口隔離

不同Vendor的IP的用戶側(cè)接口大概率是不一樣的,為了避免因?yàn)镮P替換導(dǎo)致的大量代碼修改,可以在設(shè)計(jì)之處就考慮將IP接口隔離。例如通過2類接口轉(zhuǎn)換模塊(控制類和數(shù)據(jù)類),將所需要的控制信號(hào)和數(shù)據(jù)流信號(hào)轉(zhuǎn)換成通用的內(nèi)部信號(hào),這樣無(wú)論怎么替換IP,都只需要修改少量代碼。

4c118826-5090-11ee-a25d-92fbcf53809c.png ? ? ? ? ? ? ? ? ?

6、std cell 隔離

我們通常會(huì)將std cell外包一層或者多層代碼,這樣就能將工藝與設(shè)計(jì)代碼盡量分離。

常見的有bit同步器,ram,clk-gating,clk mux等模塊。如下是單bit同步器的案例。

module  ip_bit_sync #( parameter      DATA_WDTH = 1    // bit width)(in

put  wire                     i_dst_clk,   // destination clockinput  wire [(DATA_WDTH-1):0]   i_src_din,   // data inputoutput wire [(DATA_WDTH-1):0]   o_dst_dout   // data output);`ifdef FOR_ASIC_DESIGNgenerategenvar  i;for ( i=0; i





審核編輯:劉清

聲明:本文內(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)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1625

    文章

    21628

    瀏覽量

    601261
  • 加速器
    +關(guān)注

    關(guān)注

    2

    文章

    790

    瀏覽量

    37683
  • 芯片設(shè)計(jì)
    +關(guān)注

    關(guān)注

    15

    文章

    995

    瀏覽量

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

    關(guān)注

    1

    文章

    385

    瀏覽量

    59667
  • ASIC芯片
    +關(guān)注

    關(guān)注

    2

    文章

    91

    瀏覽量

    23709

原文標(biāo)題:增加設(shè)計(jì)復(fù)用性的6種方法

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于可測(cè)設(shè)計(jì)的雷達(dá)數(shù)字處理芯片的實(shí)現(xiàn)

    本文采用基于掃描路徑法的可測(cè)設(shè)計(jì)技術(shù),對(duì)一款約750萬(wàn)門級(jí)雷達(dá)芯片的實(shí)際電路進(jìn)行可測(cè)設(shè)計(jì)。在設(shè)計(jì)中通過使用時(shí)鐘復(fù)用技術(shù)、時(shí)鐘電路處理技術(shù)以及IP隔離技術(shù)等
    的頭像 發(fā)表于 12-11 10:04 ?2408次閱讀
    基于可測(cè)<b class='flag-5'>性</b>設(shè)計(jì)的雷達(dá)數(shù)字處理<b class='flag-5'>芯片</b>的實(shí)現(xiàn)

    電磁兼容整改的幾種方法

    電磁兼容整改的幾種方法
    發(fā)表于 08-12 10:34

    電磁兼容主要的幾種整改方法

    首先,要根據(jù)實(shí)際情況對(duì)產(chǎn)品進(jìn)行診斷,分析其干擾源所在及其相互干擾的途徑和方式。再根據(jù)分析結(jié)果,有針對(duì)的進(jìn)行整改。一般來說主要的整改方法有如下幾種。 1 減弱干擾源 在找到干擾源的基礎(chǔ)上,可對(duì)干擾源
    發(fā)表于 05-30 08:06

    軟件復(fù)用庫(kù)互操作有哪些方法

    存放的構(gòu)件,同時(shí)又使用戶通過一個(gè)界面透明地訪問和檢索多個(gè)復(fù)用庫(kù)中的構(gòu)件,這對(duì)于提高構(gòu)件復(fù)用效率和復(fù)用的可能非常必要,因此出現(xiàn)了軟件復(fù)用庫(kù)互
    發(fā)表于 11-01 06:10

    物聯(lián)網(wǎng)技術(shù)中幾種典型芯片NB-IOT的測(cè)試方法

    高速數(shù)字設(shè)計(jì)和測(cè)試綜述高質(zhì)量的信號(hào)生成電源完整測(cè)試物聯(lián)網(wǎng)技術(shù)中幾種典型芯片NB-IOT的測(cè)試方法
    發(fā)表于 01-12 07:15

    代碼優(yōu)化的目的是什么?具體方法包括哪幾種?

    代碼優(yōu)化的目的是什么?具體方法包括哪幾種?代碼優(yōu)化工作有什么創(chuàng)新點(diǎn)?
    發(fā)表于 06-03 06:17

    你知道可測(cè)試設(shè)計(jì)方法有哪幾種

    可掃描觸發(fā)器的作用有哪些?標(biāo)準(zhǔn)IEEE測(cè)試訪問方法主要有哪些應(yīng)用領(lǐng)域?可測(cè)試設(shè)計(jì)方法有哪幾種?分別有哪些優(yōu)點(diǎn)?
    發(fā)表于 08-09 07:23

    代碼如何復(fù)用

    工程。背景需求做任何事情都要有目標(biāo),朝著目標(biāo)去前進(jìn)。本文關(guān)注的目標(biāo)如下:1. 代碼如何復(fù)用,達(dá)到多項(xiàng)目復(fù)用的目的2. 如何滿足多項(xiàng)目復(fù)用的前提下...
    發(fā)表于 08-11 07:26

    芯片分析的幾種方法與步驟

    半導(dǎo)體器件芯片分析的幾種方法與步驟。分析手段一般包括:c-sam,x-ray,sem掃描電鏡,EMMI微光顯微鏡等。
    發(fā)表于 05-02 15:36 ?1w次閱讀

    電磁兼容整改的幾種方法

    電磁兼容整改的幾種方法,這些方法不僅節(jié)約成本,而且是最有效的整改方法
    發(fā)表于 10-28 14:56 ?9次下載

    Linux的內(nèi)核級(jí)代碼復(fù)用攻擊檢測(cè)

    內(nèi)核級(jí)代碼復(fù)用攻擊,提出了一種基于細(xì)粒度控制流完整(CFD的檢測(cè)方法.首先根據(jù)代碼復(fù)用攻擊原理
    發(fā)表于 12-27 15:14 ?0次下載

    一種新穎的復(fù)用代碼精確快速溯源方法

    提出了一種新穎的復(fù)用代碼精確快速溯源方法。該方法以函數(shù)為單位,基于simhash與倒排索引技術(shù),能在海量代碼中快速溯源相似函數(shù)。首先基于si
    發(fā)表于 01-31 14:23 ?0次下載
    一種新穎的<b class='flag-5'>復(fù)用</b><b class='flag-5'>代碼</b>精確快速溯源<b class='flag-5'>方法</b>

    談?wù)?/b>STM32Fxx系列單片機(jī)引腳的復(fù)用功能資料下載

    電子發(fā)燒友網(wǎng)為你提供談?wù)?/b>STM32Fxx系列單片機(jī)引腳的復(fù)用功能資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-13 08:46 ?15次下載
    <b class='flag-5'>談?wù)?/b>STM32Fxx系列單片機(jī)引腳的<b class='flag-5'>復(fù)用</b>功能資料下載

    嵌入式代碼的可移植和可復(fù)用

    可移植與我們平時(shí)所說的跨平臺(tái)能力比較相近,而軟件復(fù)用則是一種通過已有軟件子件來構(gòu)建新產(chǎn)品軟件的能力。
    的頭像 發(fā)表于 11-10 09:06 ?1249次閱讀

    AN021 測(cè)量MCU代碼運(yùn)行時(shí)間的幾種方法

    AN021 測(cè)量MCU代碼運(yùn)行時(shí)間的幾種方法
    發(fā)表于 02-27 18:23 ?0次下載
    AN021 測(cè)量MCU<b class='flag-5'>代碼</b>運(yùn)行時(shí)間的<b class='flag-5'>幾種方法</b>