本篇文章將分享我對"數位IC設計的流程理解"和"數位IC設計在各階段會用到的EDA Tool及其功能"

主要會focus on Fornt-end,Back-end就放個流程圖供大家參考

我就不獻醜了(不是我負責的部分XD)

歡迎各位一起來交流想法喔~~~

 


 

嗨嗨~各位好,這裡是九椅特報!

今天要來介紹數位IC的整個設計流程和各階段會用到的EDA Tool及其功能,

廢話不多上,讓我們直接看圖!

從下圖中我直接把流程拆成4大區塊,"System""Front-end""Back-end""Fabrication"

 

1.PNG

 

我先簡介一下這四個區塊~

System: 事先制定規格並利用軟體模擬該規格是否能達到預期效果

Front-end: 將預期的功能利用 RTL 來設計電路

Back-end: 將 Front-end 設計好的電路 mapping 到電路板上

Fabrication: 將經過 Front-end 及 Back-end 的設計圖送到 Fab 廠(TSMC、UMC...)進行晶片生產

以上是我對四個區塊的簡單描述,再來就進入到今天的重點 Front-end digital design

 


 

front-end.PNG

 

1. Specification

 

Front-end 的最開始,工程師當然是要直接參與整個開 SPEC. 的決策過程,

部分大公司會有一個專門的部門來根據制定好的 SPEC. 建置 C-model,

藉由 C-model 來模擬整個硬體是否能達到預期的 PPA,

據我所知,大部分都是用 SystemC 來進行硬體模擬,

HLS 則是工程師可以撰寫 C語言來描述所需功能,再合成至 FPGA進行模擬,

但由於 HLS 在"C語言轉譯成 RTL 的效果不太好",因此這個 Tool 還不是很普及!

 


 

2. RTL Simulation

 

再來就是撰寫硬體描述語言(RTL),

目前亞洲及美國普遍都是用 verilog 來進行設計,歐洲則是用 VHDL 比較多,

這邊主要會用到的 EDA tool 有

VCS+Verdi、ncverilog:初步檢查 RTL code 是否合乎規則,並進行電路波型模擬

當然,要進行波型模擬就需要撰寫測試集(testbench, tb)

這個 tb 需盡可能包含電路可能會遇到的狀況,

才能知道電路的輸出結果是否能符合功能需求,

此時的 Simulation 可以稱為 pre-RTL sim.

 

1.PNG

 

nLint:初步檢查撰寫出的 RTL code 是否能生成出可合成的邏輯電路

 

Code coverage:則是藉由 Simulation 結果來判斷 RTL 是否有冗餘的描述

 

2.PNG

 

        Line:表示每一行 code 是否都有被執行過

        Toggle:表示每個 bit 是否都有變化過

        FSM:表示狀態機所描述的狀態是否都有執行過

        Condition:表示每個判斷條件是否都有被執行到

        Branch:表示 if...else if...else, case 的所有分支是否都有發生過

 


 

3. FPGA

 

在學界,考量到下線經費龐大且可能回來的 chip 會 fail,

因此近期滿多學生會直接 import 到 FPGA 看自己的 design 是否能在 FPGA 上跑成功,

但這時候就需要探討到如何跟板子上的 SoC進行溝通整合,需要懂一定的 bus protocol,

也需要去寫 driver 來驅動整個 FPGA,這份工也是非常麻煩的!

 

而在業界,需要保證 design 驗證的 coverage 夠高,

因此需要跑非常大量的測資來做驗證,

倘若單純用 RTL simulation 跑一億筆測資,可能需要跑個2~3天,

但透過 FPGA 可能只需要1小時即可完成,

且 FPGA 也可以直接做一些實際應用,來確保整個 design 整個 system整合起來是可以 work 的!

 


 

4. Synthesis

 

接著,會把撰寫好的 RTL 藉由 Design Compiler(DC) 從 Cell library 找到適合的元件來進行電路合成,

 

3.PNG

 

而怎麼樣是適合的呢?

這步 Tool 就會根據工程師事前設定好的參數(Constraint) 來決定,

而這些 Constraint 可以決定 Timing, Area, Power 的走向,

 

例如此次設計一個加法器希望 Area 愈小愈好,不在乎速度,

那 Tool 可能就會選擇使用 Ripple-carry adder 來進行這個加法器的合成(Area小, 速度慢)

又例如這次設計一個加法器希望 Performance 愈高愈好,

那 Tool 可能就會選擇使用 Carry-lookahead adder 來進行這個加法器的合成(Area大, 速度快)

合成結束後,DC 會生成出一串資料集,如:

netlist file:RTL mapping 成邏輯電路的 file

SDC:Synopsys Design Constraint,設計者下的 Constraint 資料集

SDF:Standard Delay File,合成電路的 delay 資訊

 

再來,為了確保合成出來的 netlist 電路功能與原先設計的 RTL 功能一致(不能保證 DC mapping 一定正確),

因此會進行 Gate-level simulation(又稱 post-RTL sim.),

這邊的作法會將 DC 合成出來的 netlist file 及 Cell library 還有前面所撰寫好的 tb 丟掉 vcs+verdi 或 ncverilog 進行波型模擬,

但此時的 IO port 名稱會被 mapping 成 Cell library 才看得懂的名稱,

因此這邊最好是能讓 tb dump 出一些運算結果的 file,

藉由運算結果來判斷 pre-RTL sim. 及 post-RTL sim. 是否功能一致,

以上是我還在當學生的時候做的麻煩事XD

進業界之後才知道有 Tool 可以幫忙做比對,

這個 EDA Tool 就是 LEC(Logic Equivaience Check)

他會比較兩者的 function 及 register 數量是否相同,

藉此來判斷 Tool 轉譯是否正確,

但還是藉由 Gate-level simulation 看過整個 function toggle 的狀況會比較安全喔!

 

最後,DC 也會可以 dump 出 Area, Timing, Power 等資訊,

這邊 Area 主要可以看 cell area 就好,total area 包含了 wire 的繞線面積,

在還沒跑 Back-end 的情況下看繞線面積很不準!

面積的單位是um2,而這個面積也會跟使用的製程有關,

因此若要跟功能類似但使用不同製程的 design 做比較的話,比 gate count 是最準的!

 

area.PNG

 

Timing 的部分須注意 slack 不能為負值,

為負值就代表你所設計的電路所需要的最長執行時間(Critical path)超過你所給訂的電路執行時間(period or frequency)

很繞口嗎!? 簡單來說就是你的電路跑太慢了,沒辦法在所設定的時間內完成運算!

這時候可以針對 Critical path 進行調整,

例如:電路的path為 

"input" -> "logic1(耗時5ns)" ->  "logic2(耗時2ns)" ->  "logic3(耗時2ns)" -> output

這時候整個電路的 Critical path 就是卡在 logic1,因為 logic1 耗時 5ns,整個電路的最高頻率就被限制在 200MHz (period 5ns)

倘若能把電路修正為

"input" -> "logic1(耗時3ns)" ->  "logic2(耗時3ns)" ->  "logic3(耗時3ns)" -> output

這時候三個 logic 是耗時非常平衡的,整個電路的最高頻率也可以來到 333MHz (period 3ns)

但如果整個電路都沒辦法調整的話,那就直接降頻最快啦XD

當然這邊也需要探討到 Setup/hold time 及 CDC 的問題,之後應該會再發一篇文專門探討這個議題!

 

timing.PNG

 

Power 的部分就不要看 DC 的 report 了,非常不準XD

建議去跑 Prime Time(PT) 看比較準,

PT 這個 Tool 主要可以看 timing 及 power report,

在跑 PT 的時候需要準備波型檔(.vcd 或 .fsdb),

波型檔可以藉由 tb dump 出來,PT 就會根據波型檔所展示出來的狀況來判斷靜/動態功耗,

若 design 有分很多種狀態(IDLE, LOAD, CALCULATION, STORE)

也可以藉由 tb 生成出對應的波型檔,再透過PT來得知各種狀態下的功耗狀況,

這樣可以獲得初步的電路 PPA(Power, Performance, Area) 及 netlist了!

 

以上大致就是 Front-end 所負責的部分了,再來就把相關資料丟給 Back-end 就完事了XD

當然 Back-end 有遇到什麼問題也很常會來回討論,嚴重的話甚至是需要重新改 design...

因此還是需要了解 Back-end 大致在做什麼(才不會被坑XD)

這邊我畫了一張 Back-end 的流程圖,大家參考參考就好XD

 

back-end.PNG

 


 

以上是這次關於 Front-end digital design 的介紹,

下期預計會做 "碩班選組 ICS 組分析",

來幫大家分析一下怎麼樣的人適合走 ICS 組,跨到 ICS 組需要具備怎麼樣的能力等等,

就再請大家多多關照啦~~

 

 

arrow
arrow
    創作者介紹
    創作者 九椅 的頭像
    九椅

    九椅的部落格

    九椅 發表在 痞客邦 留言(2) 人氣()