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

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

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

ASIC數(shù)字設(shè)計:前端設(shè)計、驗證、后端實現(xiàn)

數(shù)字芯片實驗室 ? 來源:數(shù)字芯片實驗室 ? 2023-07-02 09:42 ? 次閱讀

前端設(shè)計

數(shù)字系統(tǒng)設(shè)計中有三個重要的設(shè)計級別概念:行為級(Behavior Level)、寄存器傳輸級(Register Transfer Level)和門級(Gate level)。其中,

行為級通過行為級算法描述數(shù)字系統(tǒng);

寄存器傳輸級通過寄存器之間的數(shù)據(jù)傳輸進(jìn)行電路功能設(shè)計,例如有限狀態(tài)機(jī);

門級按AND、OR、NOT、NAND等等描述,通常不會進(jìn)行門級設(shè)計,門級網(wǎng)表一般是通過邏輯綜合的輸出。

RTL可以用Verilog或VHDL描述。Verilog是一種用于描述數(shù)字系統(tǒng)的硬件描述語言(HDL),例如Latches、Flip-Flops、組合邏輯、時序邏輯等?;旧?,你可以使用Verilog來描述任何類型的數(shù)字系統(tǒng)。設(shè)計通常以自頂向下的方式編寫,系統(tǒng)具有層次結(jié)構(gòu),使得設(shè)計和調(diào)試更容易。verilog模塊的基本框架如下:

module top_module(
    input clk,
    input rst,
    input [7:0] in_data,
    output [7:0] out_data
);

// Instantiate submodules here

// Your code here

endmodule

模塊實例化(module instance)時,需要指定被實例化的模塊名稱(例如NAND或INV)、實例名稱(在當(dāng)前模塊中唯一標(biāo)識該實例)和端口連接列表。模塊端口連接可以按照位置順序(位置映射)或者名稱對應(yīng)(命名映射)給出。一般推薦使用命名映射,因為可以避免一些錯誤。

1.按名稱進(jìn)行端口映射:

 INV V2(.in(a), .out(abar));

2.按順序進(jìn)行端口映射,這種情況下,端口列表的順序要和被實例化的模塊一致:

AND A1(a, b, d);

下面是一個簡單的D觸發(fā)器 Verilog示例代碼:

module dff (q, d, clk, rst);
  output q;
  input d, clk, rst;
  reg q;

  always @(posedge clk or posedge rst)
    if (rst)
      q <= 0;
    else
      q <= d;
endmodule

數(shù)字電路設(shè)計分為組合邏輯和時序邏輯兩種。

用Verilog編寫的代碼并不一定都能綜合成電路。我們需要保證我們的代碼能綜合出我們想要的電路。在Verilog中,有些與時間相關(guān)的語句是不能綜合的。比如,wait, initial, delay等。

在Verilog中,可以用always語句塊來建模電平敏感和邊沿敏感的電路行為。

用always語句塊建模組合電路時,要注意每個輸出都要依賴于敏感列表。如果沒有完全指定組合電路,可能會綜合出鎖存器(latch)。

驗證

在數(shù)字系統(tǒng)設(shè)計完成后,要用仿真來驗證邏輯功能是否正確。在Verilog中,可以用testbench(測試平臺)來檢驗代碼。編寫testbench的一些基本原則如下:
1、Testbench要實例化設(shè)計的頂層模塊,并給它提供輸入激勵(stimulus)。
2、設(shè)計(DUT)的輸入激勵要用'reg'類型聲明。'reg'類型的數(shù)據(jù)可以在always或initial語句塊中改變。
3、設(shè)計(DUT)的輸出要用'wire'類型聲明。'wire'類型的數(shù)據(jù)不能在always或initial語句塊中賦值。
4、always和initial語句塊是兩種時序控制塊,它們是并行執(zhí)行的。initial語句塊的一個例子如下:

module testbench;
  // 定義clk和reset信號
  reg clk, reset;
  
  // 定義被測模塊的實例
  dut dut_inst(
    .clk(clk),
    .reset(reset),
    // 其他端口
  );
  
  // 在initial塊中生成clk和reset激勵
  initial begin
    // 初始化clk和reset為0
    clk = 0;
    reset = 0;
    
    // 等待一段時間后釋放reset
    #10 reset = 1;
    
    // 每隔5個時間單位切換clk的值
    forever #5 clk = ~clk;
  end
  
endmodule

initial語句塊在仿真開始時(時間為0)按照“begin end”之間的語句順序執(zhí)行。遇到延遲時,該語句塊暫停執(zhí)行,等待延遲結(jié)束后繼續(xù)執(zhí)行。上面的代碼是一個比較典型的復(fù)位和時鐘激勵生成的代碼。

5、系統(tǒng)任務(wù)。這些系統(tǒng)任務(wù)不會被綜合工具識別,所以可以在設(shè)計代碼中使用它們。系統(tǒng)任務(wù)以$符號開頭。一些常用的系統(tǒng)任務(wù)如下:
$display:在仿真過程中,在屏幕上顯示文本信息
$stop:暫停仿真。
$finish:結(jié)束仿真
$dumpvar,$dumpfile:生成波形文件,保存到指定的文件中。

6、tasks用于實現(xiàn)常用的驗證功能。tasks可以有輸入,輸出,并且可以包含時序控制。下面是一個task的例子:

// 定義一個帶有時序延遲的task
task delay_task;
  input [7:0] data; // 輸入數(shù)據(jù)
  input [3:0] delay; // 輸入延遲時間
  output [7:0] result; // 輸出結(jié)果
  reg [7:0] result; // 定義寄存器存儲結(jié)果
  begin
    #delay result = data; // 延遲賦值
    $display("data = %b, delay = %d, result = %b", data, delay, result); // 打印結(jié)果
  end
endtask

// 定義一個模塊調(diào)用task
module test;
  reg [7:0] data; // 定義數(shù)據(jù)信號
  reg [3:0] delay; // 定義延遲信號
  wire [7:0] result; // 定義結(jié)果信號
  
  initial begin
    data = 8'b10101010; // 初始化數(shù)據(jù)
    delay = 4'd10; // 初始化延遲
    delay_task(data, delay, result); // 調(diào)用task
    #20 $finish; // 結(jié)束仿真
  end
  
endmodule

上面的代碼的功能是定義一個帶有時序延遲的task,然后在一個模塊中調(diào)用它。

7、編譯指令`timescale設(shè)置時間單位和時間精度

`timescale 10ns/1 ns     // 單位 10 ns,精度 1 ns

8、Verilog測試平臺可以使用包含C語言描述的編程語言接口(PLI)。

9、在編寫testbench之前,了解設(shè)計規(guī)范(spec),并且創(chuàng)建所有可能的測試用例列表非常重要。

10、可以根據(jù)波形檢查信號值是否正確。

11、在編寫testbench時,可以設(shè)置斷點,也可以單步執(zhí)行。

12、進(jìn)行功能仿真時,最好進(jìn)行受約束的隨機(jī)仿真。受約束的隨機(jī)仿真可以提供有效輸入的隨機(jī)組合。當(dāng)隨機(jī)仿真運行很長時間時,它可以覆蓋大部分的corner cases。在verilog中,可以使用$random在testbench中創(chuàng)建隨機(jī)變量。

13、覆蓋率統(tǒng)計:觀察存在多少種可能性以及有多少種可能性已經(jīng)通過仿真。

13.1、行覆蓋率:代碼中的行仿真覆蓋百分比,由仿真工具統(tǒng)計。

13.2、條件覆蓋:它檢查代碼中的各種條件語句覆蓋百分比。

13.3、狀態(tài)機(jī)覆蓋率:檢查狀態(tài)轉(zhuǎn)換覆蓋百分比。

14、回歸測試(Regression):將新的模塊添加到已驗證的代碼中?;貧w測試是一種驗證方法,用于確保修改或更新后的代碼不會影響原有的功能和性能。

仿真目標(biāo)

功能正確:通過驗證來驗證設(shè)計的功能,主要的test cases(主要功能)和corner cases(特殊條件下)。功能正確是仿真的基本要求,確保設(shè)計符合規(guī)范和預(yù)期。例如,可以使用assertions來檢查設(shè)計的輸出是否與預(yù)期相符。

設(shè)計的錯誤處理:通過驗證來檢測設(shè)計中可能存在的錯誤或異常情況,并測試設(shè)計如何應(yīng)對或恢復(fù)。設(shè)計的錯誤處理是仿真的重要目標(biāo),提高了設(shè)計的可靠性和安全性。例如,可以使用fault injection來模擬設(shè)計中可能發(fā)生的故障,并觀察設(shè)計的反應(yīng)和行為。

性能:通過驗證來評估設(shè)計的性能指標(biāo),如時延,吞吐量,功耗等,并與設(shè)計目標(biāo)進(jìn)行比較。性能是仿真的重要目標(biāo),影響了設(shè)計的效率和優(yōu)化。例如,可以使用profiling tools來分析設(shè)計中各個部分的資源占用和執(zhí)行時間,并找出性能瓶頸和改進(jìn)點。

真實世界仿真

在軟件的功能仿真之后,如何在真實世界中仿真你的設(shè)計呢?

FPGA原型:加快驗證速度。

硬件加速器:將一些可綜合的代碼映射到FPGA上。其他不可綜合的部分,如testbench用仿真工具驅(qū)動。當(dāng)設(shè)計非常大時,這種硬件加速驗證方法能大幅度提高驗證效率。

后端實現(xiàn)

在數(shù)字物理設(shè)計流程中需要對多個目標(biāo)進(jìn)行優(yōu)化,包括面積,走線長度和功耗,以及需要確保物理實現(xiàn)之后的網(wǎng)表滿足設(shè)計的時序要求。以下將概述芯片數(shù)字后端的基本步驟:

29a434b4-1873-11ee-962d-dac502259ad0.png

物理設(shè)計的第一步是floor planning,定義芯片(die&core)的寬度和高度,也就是芯片的面積。

29f72f66-1873-11ee-962d-dac502259ad0.png

“core”是芯片的核心區(qū)域,用于放置(place)設(shè)計的基本邏輯單元。芯片是從晶圓(wafer)上切割出來的,晶圓是一種圓形的硅片,上面可以制造多個芯片(die)。

在布局布線(P&R)階段,工具會根據(jù)約束條件來放置邏輯單元。在正式進(jìn)行P&R之前,需要先確定一些關(guān)鍵模塊的位置,例如RAM,ROM等。這些模塊被稱為“預(yù)放置單元(preplaced cells)”。

2a219670-1873-11ee-962d-dac502259ad0.png

將關(guān)鍵模塊擺放之后,圍繞關(guān)鍵模塊擺放Decap(decoupling capacitors),提高了芯片的可靠性和效率。

2a4a516e-1873-11ee-962d-dac502259ad0.png

電路原理圖中,我們通常只看到一個“Vdd”和一個’Vss’,表示電源和地。但是,在芯片上,我們需要構(gòu)建一個電源網(wǎng)絡(luò),將電源和地分布到各個模塊。在floorplan階段,我們還需要放置引腳(pin)或焊盤(pad),用于與外部設(shè)備連接。引腳是模塊級別的接口,焊盤是芯片級別的接口。

2a751c64-1873-11ee-962d-dac502259ad0.png

在floorplan確定(freeze)后,就可以開始布局布線(P&R)了。P&R工具的輸入包括綜合后的門級網(wǎng)表,時序庫,物理庫和設(shè)計約束。P&R工具根據(jù)設(shè)計約束(constraints),例如時鐘頻率,時序裕度(margin),最大電容等,用算法來確定標(biāo)準(zhǔn)單元(Flipflops,AND,OR,BUFFER等)的位置,并把它們放在core里。

2ab5a022-1873-11ee-962d-dac502259ad0.png

假設(shè)時鐘網(wǎng)絡(luò)的最大電容限制是2F??纯瓷厦娴膱D,時鐘節(jié)點’B’連著4個觸發(fā)器的’clk’腳。假設(shè)每個觸發(fā)器的’clk’腳的電容是1F。那么,PNR工具就會算出節(jié)點’B’的總電容是4F。然后它會把這個電容和約束文件里的最大電容2F比較。

因為節(jié)點’B’的電容超過了2F,工具就會用2個buffer把節(jié)點’B’的負(fù)載分開,就像圖上那樣。它從庫里選buffer(假設(shè)每個buffer的輸入電容是1F),并建一個樹(時鐘樹),來滿足設(shè)計的最大電容約束。這個過程叫做’時鐘樹綜合(Clock tree synthesis)'。

2ae94c2e-1873-11ee-962d-dac502259ad0.png

最后,物理設(shè)計完成后,PNR工具會對原來的網(wǎng)表做一些修改。比如:加buffer,調(diào)整單元大小(size)等。然后,可以提取電阻和電容的值RC(resistances、capacitance),把它們保存在一個文件里,一般叫做SPEF(Standard Parasitic Extraction Format)文件。

最后,要用靜態(tài)時序分析(STA)工具做timing sign off。靜態(tài)時序分析(STA)工具會檢查設(shè)計的各條路徑是否符合約束文件里的時序要求,包括建立時間檢查,保持時間檢查,最大電容檢查和過渡時間檢查等(Setup check,Hold check, Max Capacitance check 和 Transition Check)。

設(shè)計約束

3、指定設(shè)計約束

SDC(Synopsys Design Constraints)是一種基于Tcl的格式。SDC文件里的所有命令都遵循Tcl的語法規(guī)則。SDC文件用來告訴EDA工具設(shè)計的意圖,包括時序、面積和功耗等。SDC文件包含以下信息:

?版本(可選)

?單位(可選)

?約束值

?約束對象

?注釋(可選)

SDC文件里不包含加載或鏈接設(shè)計的命令。所以,在讀取SDC文件之前必須先讀取你的設(shè)計。

1、指定SDC版本

如果沒有指定SDC版本,那么版本就取決于讀取SDC文件的EDA工具。為了保證SDC文件在不同工具之間的兼容性,可以在文件開頭用以下命令指定SDC版本:

set sdc_version value

2、指定SDC單位

set_units命令指定SDC文件里的電容,電阻,時間,電壓,電流和功耗等單位。

3、指定設(shè)計約束

用約束命令來指定設(shè)計約束。如果命令太長,可以用反斜杠字符()把命令分成多行。SDC約束命令有下表這些。

2b18c80a-1873-11ee-962d-dac502259ad0.png

2b48d73e-1873-11ee-962d-dac502259ad0.png

4、指定約束對象

大多數(shù)約束命令都需要設(shè)計對象作為命令參數(shù)。

如果當(dāng)前設(shè)計中有一個名為U1的單元,可以通過命令

[get_cells U1]

找到。下表SDC格式中尋找設(shè)計對象的命令。

2b776df6-1873-11ee-962d-dac502259ad0.png

同時,可以使用Tcl列表或通配符(?、*)指定多個對象。默認(rèn)情況下,當(dāng)前設(shè)計約束的參考點是頂級設(shè)計。我們可以使用分隔符(/)來約束層次結(jié)構(gòu)化設(shè)計。

5、添加注釋

可以使用#將注釋添加到SDC文件中。

例如,

# This is an SDC comment line.
create_clock -period 10 [get_ports CLK] ; #comment fragment

6、管理大型項目SDC文件

當(dāng)設(shè)計非常大時,SDC文件可能會得很大。減少SDC文件大小的一種方法是壓縮文件

read_sdc命令自動檢測gzip壓縮文件并解壓縮,然后讀取它們的文件。例如,

read_sdc design.sdc.gz

審核編輯:湯梓紅

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

    關(guān)注

    34

    文章

    1183

    瀏覽量

    120225
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1343

    瀏覽量

    109925
  • HDL
    HDL
    +關(guān)注

    關(guān)注

    8

    文章

    327

    瀏覽量

    47307
  • 數(shù)字設(shè)計
    +關(guān)注

    關(guān)注

    0

    文章

    46

    瀏覽量

    22282
  • 前端設(shè)計
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    10038

原文標(biāo)題:ASIC數(shù)字設(shè)計:前端設(shè)計、驗證、后端實現(xiàn)

文章出處:【微信號:數(shù)字芯片實驗室,微信公眾號:數(shù)字芯片實驗室】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    典型的基于RTL的ASIC設(shè)計流程分析

    FPGA的前端設(shè)計流程類似于ASIC,但后端不同。FPGA的后端部分與ASIC的主要區(qū)別在于FPGA的布局和布線。對于
    的頭像 發(fā)表于 06-20 16:24 ?5219次閱讀
    典型的基于RTL的<b class='flag-5'>ASIC</b>設(shè)計流程分析

    IC前端后端設(shè)計的區(qū)別

    /VHDL之外,還有什么要求呢?我本身是做后端的,所以,對于前端的要求也不是特別的清楚。根據(jù)我的認(rèn)識,前端會分為設(shè)計部和驗證部,設(shè)計部更加的注重算法、工作原理等方面,畢竟用verilo
    發(fā)表于 12-19 16:01

    集成電路前端后端設(shè)計培訓(xùn)

    后端設(shè)計培訓(xùn) 第一階段 集成電路前端設(shè)計計算機(jī)操作系統(tǒng)UNIX應(yīng)用;數(shù)字電路邏輯設(shè)計;硬件描述語言HDL和邏輯綜合初步;集成電路設(shè)計導(dǎo)論及流程;半導(dǎo)體器件原理及集成電路概論;項目設(shè)計實踐(C
    發(fā)表于 05-16 14:57

    數(shù)字ASIC/SOC芯片后端設(shè)計工程師

    上海英資設(shè)計服務(wù)公司急招數(shù)字ASIC/SOC芯片后端設(shè)計工程師!4種職位包括:畢業(yè)生,初級工程師,中級工程師和高級工程師。簡歷投遞郵箱:qixin_soc@163.com
    發(fā)表于 06-05 10:58

    [招聘] 新思科技(Synopsys)上海/西安招聘數(shù)字前端AC

    [/url],另有數(shù)字前端,數(shù)字后端,數(shù)字驗證歡迎有意向的朋友發(fā)送簡歷。 Implementation Specialist AC (Frontend) Description
    發(fā)表于 03-03 09:49

    【招聘】職位包括數(shù)字IC設(shè)計/驗證/后端物理設(shè)計、模擬IC設(shè)計/版圖工程師

    設(shè)計、驗證能力都具備。 2)數(shù)字后端設(shè)計工程師 工作職責(zé): 1.負(fù)責(zé)芯片的后端物理實現(xiàn),從NETLIST到GDSII。 2.負(fù)責(zé)芯片物理設(shè)計的時序收斂,DRC/LVS,Power
    發(fā)表于 03-03 14:53

    【招聘】職位包括數(shù)字IC設(shè)計/驗證/后端物理設(shè)計、模擬IC設(shè)計/版圖工程師

    1) 數(shù)字前端(設(shè)計、驗證) 北京2)數(shù)字后端設(shè)計工程師 北京 3)通信算法工程師 北京 4)ADC/DAC模擬電路設(shè)計工程師北京5)圖像/視頻算法工程師 北京6)高級系統(tǒng)工程師 北京7)高速
    發(fā)表于 04-05 10:03

    ASIC原型驗證實現(xiàn)

    原型驗證---用軟件的方法來發(fā)現(xiàn)硬件的問題 在芯片tap-out之前,通常都會計算一下風(fēng)險,例如存在一些的嚴(yán)重錯誤可能性。通常要某個人簽字來確認(rèn)是否去生產(chǎn)。這是一個艱難的決定。ASIC的產(chǎn)品NRE
    發(fā)表于 07-11 08:19

    數(shù)字IC后端設(shè)計介紹,寫給哪些想轉(zhuǎn)IC后端的人!

    物理庫為后續(xù)后端半定制設(shè)計提供物理實現(xiàn)基礎(chǔ)?! ?b class='flag-5'>后端半定制設(shè)計是指使用布局布線工具并基于后端全定制階段完成的標(biāo)準(zhǔn)單元庫及IP庫并根據(jù)前端設(shè)計
    發(fā)表于 12-29 11:53

    如何去實現(xiàn)一種數(shù)字前端的設(shè)計?包括哪些步驟?

    什么是數(shù)字前端?數(shù)字前端主要包括哪些?什么是數(shù)字后端?數(shù)字后端主要包括哪些?數(shù)字前端設(shè)計的一般流程包括哪些步驟?如何對
    發(fā)表于 06-18 07:53

    數(shù)字IC前端后端有何區(qū)別

    數(shù)字IC就是傳遞、加工、處理數(shù)字信號的IC,是近年來應(yīng)用最廣、發(fā)展最快的IC品種,可分為通用數(shù)字IC和專用數(shù)字IC。數(shù)字前端以設(shè)計架構(gòu)為起點
    發(fā)表于 07-28 08:27

    如何理解Web前端后端的工作內(nèi)容和區(qū)別?

    Web前端后端的區(qū)別是什么?如何區(qū)分?從前端后端兩者工作內(nèi)容和負(fù)責(zé)項目是完全不同。后端:入門難深入更難,枯燥乏味,看業(yè)務(wù)邏輯代碼;
    的頭像 發(fā)表于 09-18 16:11 ?4739次閱讀

    數(shù)字IC前端后端的區(qū)別,數(shù)字IC設(shè)計流程與設(shè)計工具

    數(shù)字IC就是傳遞、加工、處理數(shù)字信號的IC,是近年來應(yīng)用最廣、發(fā)展最快的IC品種,可分為通用數(shù)字IC和專用數(shù)字IC。數(shù)字前端以設(shè)計架構(gòu)為起點
    發(fā)表于 11-06 16:51 ?26次下載
    <b class='flag-5'>數(shù)字</b>IC<b class='flag-5'>前端</b><b class='flag-5'>后端</b>的區(qū)別,<b class='flag-5'>數(shù)字</b>IC設(shè)計流程與設(shè)計工具

    芯片設(shè)計分為哪些步驟?為什么要分前端后端前端后端是什么意思

    芯片設(shè)計分為哪些步驟?為什么要分為前端后端?前端后端分別是什么意思? 芯片設(shè)計分為前端后端兩個
    的頭像 發(fā)表于 12-07 14:31 ?3509次閱讀

    模擬前端數(shù)字后端哪個好 模擬前端數(shù)字后端的區(qū)別

    模擬前端數(shù)字后端都是電子系統(tǒng)設(shè)計中的重要環(huán)節(jié),它們各自扮演著不可或缺的角色,難以簡單地進(jìn)行優(yōu)劣比較。
    的頭像 發(fā)表于 03-16 15:09 ?905次閱讀