對於數字積體電路設計,一般分為數字前端與數字後端兩部分。我將分別介紹這兩部分的設計流程。水平有限,如有錯誤之處希望大家指正。

——————————————————————————————————————————————————-

前端設計總流程

數字積體電路的設計流程簡介

數字積體電路的設計流程簡介

1。

演算法或硬體架構設計與分析

目的:完成晶片中數字部分的高層次演算法或架構的分析與建模,為硬體提供一個正確的軟體功能模型,更為重要的是,透過大量的高層次模擬和除錯,為RTL實現提供總體性的設計指導。數字部分越複雜,這一點越重要。

工具:MATLAB、C++、C、System C、System Verilog等。不同型別的晶片都不同的選擇,如數字訊號處理類晶片,偏好MATLAB。

特點:

這部分工作至關重要,基本上奠定了整個晶片的效能和功耗的基礎。

這部分工作主要由具有通訊、訊號處理、計算機、軟體專業背景的工程師完成,也有很多微電子專業背景的工程師參與。

2。 RTL實現

目的:依據第一步的結果,完成由高層次描述到Verilog HDL實現的過程。

工具:Vim、Emac(二者不分前後順序哦)

特點:

這一步能明顯區別中訓練有素的工程師和初學者。前者在寫程式碼的過程中,具有極強的大局觀,能夠在書寫Verilog HDL、描述邏輯功能的同時,還能夠兼顧邏輯綜合、STA、P&R、DFX、功耗分析等多方面因素,最終提供一份另其他環節的工程師都賞心悅目的程式碼。初學者則處處留地雷,一不小心就引爆。

擴充套件知識:

如何才能看到verilog,就知道綜合出來的電路呢?

3。Coding Style Check

目的:排除RTL程式碼中Clock Domain Cross、Lint等問題。

工具:Syglass、LEDA、0inCDC

目前大部分晶片中的數字部分基本上都採用區域性同步和全域性非同步的設計策略,因此,在設計中需要小心注意跨時鐘域的資料同步問題。具體例項參見:最難除錯修復的 bug 是怎樣的?

4。功能驗證

目的:在無延遲的理想情況在,透過大量的模擬,發現電路設計過程中的人為或者非人為引起的bug。主要指標是功能覆蓋率。

工具:Modelsim、VCS、NC-Verilog

語言:C++、C、System C、System Verilog,基於UVM的方法學等。主要是System Verilog,一般哪個方便用哪個。

特點:

驗證工程師近年來已經成為IC設計中需求量最大的崗位。

這個階段會佔用大量的時間,數以月計

5。邏輯綜合

目的:將RTL程式碼對映為與工藝庫相關的網表。

工具:DesignCompiler、RTL Compiler。DesignCompiler在市場中佔有壟斷性地位,幾乎成為邏輯綜合的標準。

特點:

從晶片生產的角度來看,在該步驟之前,所有的工作都可近似看做一個虛擬性的,與現實無關。而從邏輯綜合起,後續所有的工作都將與工藝的物理特性、電特性等息息相關。邏輯綜合工具的功能主要是將VerilogHDL格式的文字對映為網表格式的文字,因此,它的功能等同於文字編譯器。那麼轉換的方式有很多種,工具如何選取呢?邏輯綜合過程中,整個文字格式的編譯過程是在給定的人為約束條件下進行的,透過這些約束和設定的目標來指導工具完成Compiler的工作。所以,邏輯綜合過程可以看成一個多目標(頻率、面積、功耗)多約束的工程最佳化問題。

該步驟中,通常會插入DFT、clock gating等。

該步驟中通常加入Memory、各種IP等。為了在各種工藝庫以及FPGA原型驗證平臺之間有一個更方便的移植,注意適當處理這些Memory、IP等的介面。該步驟中也可加入I/O、PLL等。

數字積體電路的設計流程簡介

數字積體電路的設計流程簡介

輸入檔案:

RTL程式碼:由ASIC design engineers團隊提供;交接前,必須保證在第3步的check中沒有任何問題;

工藝庫(。db):由晶圓廠提供;

約束(SDC):由邏輯綜合工程師和ASIC design engineers共同商定。

輸出檔案:

網表:包含了RTL中的所有的邏輯資訊,除此以外,可能還會有DFT、clock gating、I/O等;網表主要用於P&R等流程;

標準延遲檔案SDF:主要包含了網表中所有器件的延遲資訊,用於時序模擬;通常情況下,在模擬過程中會使用由PT報出的sdf,因為PT會結合後端工具,生成延遲更為精確的sdf檔案。

Project檔案:。ddc;

各種報告:timing report、area report、constrain report、clock report、violation report等等,以及工具的log檔案。(此處最好能夠熟悉各種指令碼語言,將各種report處理為友好易讀形式)

擴充套件知識:什麼是“門級網表”(Gate-level netlist)檔案?

6。靜態時序分析

目的:相對動態模擬的類窮舉式驗證方法而言,從靜態分析的角度,保證設計中所有的路徑,滿足內部時序單元對建立時間和保持時間的要求。即無論起點是什麼,訊號都可以被及時地傳遞到該路徑的終點,並且在電路正常工作所必需的時間段內保持恆定。

工具:PrimeTime、Tempus。PrimeTime在市場中佔有壟斷性地位,幾乎成為STA的標準。

數字積體電路的設計流程簡介

數字積體電路的設計流程簡介

特點:

從邏輯綜合開始,基本上每做一步大的調整,都會完成一次STA分析,以保證每步都能實現時序收斂。鑑於該特性非常重要,PrimeTime成為了Signoff的重要工具。

所用到的SDC同邏輯綜合;

通常設計中會存在大量的違例路徑,STA要修大量的setup、hold等,如何修這些違例,可以體現工作經驗的重要性。此外,如果是前端修timing違例,一般會修的很快,但是會帶來一個重大的問題,程式碼被前端修改後是否存在新的bug,還需重新仿真確認,模擬會消耗掉數以月計的時間,所以除非萬不得已,不會找前端修timing。

7。一致性驗證

目的:RTL程式碼和邏輯綜合後的網表都可以抽象為兩幅由節點和邊構成的圖,一致性驗證階段採用了類似於直接比較兩幅圖是否一致的方法,來確定邏輯綜合生成的網表是否正確。

工具:Formality、Conformal

輸入檔案:RTL程式碼、netlist(邏輯綜合輸出)、約束

輸出檔案:match(兩張圖節點是否一致)和verify(計算得出兩張圖功能是否一致)的報告。

8。時序模擬

同功能模擬,只是將RTL程式碼替換為網表,然後需要載入SDF檔案和工藝庫模型。該步驟的目的在於,在延遲等近似實際工作的條件下,觀察功能是否還能保持正確。

————————————————————————————————————————————————————————-

數字後端流程

數字後端設計又稱物理設計,將網標格式的文字轉化成一個個有物理大小和位置的單元、連線。並且在實現過程中要滿足面積、功耗、效能等要求。

業界主流的後端工具來自synopsys、cadence兩家公司,雖然兩家公司工具不同但是基本流程相似。數字後端流程如下圖。

數字積體電路的設計流程簡介

數字積體電路的設計流程簡介

1 Date prepare

在後端設計之前我們需要以下檔案。

Technology file

資料格式:Synopsys 。tf Cadence 。lef

功能:定義unit大小。規定每一層Metal的基本屬性,例如最小最大寬度,最小間距,最大密度等。定義VIA的基本屬性,例如size enclosure等。

RC file

資料格式:Synopsys tluplus Cadence qrcfile

功能:後端工具會根據它來抽取design中的RC值計算delay。

SDC

功能:包括clock generate_clock定義,input delay output delay等時序約束資訊。在後端timing檢查時完全依靠此檔案。

Netlist

功能:規定了整個Design的設計邏輯資訊。

Timing Library

資料格式:Synopsys 。db Cadence 。lib

功能:規定了標準單元和宏單元以及IO的邏輯功能、時序要求、CELL delay等資訊。一般有一下幾種模型,NLDM CCS ECSM。NLDM過於悲觀,一般建議用CCS或者ECSM庫,可以得到時鐘週期的5%到10%的timing margin。

Physical Library

資料格式:Synopsys 。mky Cadence 。lef

功能:每個標準單元、宏單元以及IO的物理資訊。包括cell大小,出Pin的位置金屬層次以及Pin的形狀。

Low power flow

資料格式: Synopsys upf Cadence cpf

功能:定義Power Domain,以及不同power domain之間的isolation cell level shift 等。在low power design中需要用到。

2 Floor Plan

將Design匯入後端工具後,檢查輸入檔案是否缺少或者有錯誤。確保Design 正常initial後就可以進行調整Floor Plan。Floor Plan主要目的是要確定design的形狀大小,出Pin的位置已經所有macro的擺放。

die_area/core_area

如果是block一般形狀由top規定的。

如果是top需要根據instants count和Macro大小進行預估。

擺放Macro和PAD

一般模擬IP可能有特殊擺放要求,需要與IP owner一起商討確定

Memory根據不同的hierarchy分類擺放,並且根據時序要求和memory形狀大小進行調整,具體情況不同擺放也不同。一般需要多嘗試幾次得到一個滿意的結果。

PAD擺放位置會影響到package,需要與package工程師一起商討。對於數字設計一般數字的Power/Ground PAD由後端工程師加,加的時候需要注意電源要分佈均勻並且要滿足ESD要求。

P/G

對於頂層金屬來說,在不超過最大密度的提前下儘量多打,因為top metal不做繞線不會佔用繞線資源。

對於底層金屬來說,既要考慮到power要求又要考慮到不能佔用過多繞線資源。一般對於不同工藝代各家design house都有自己的一套標準。

Add tab,endcap,tcd cell

Tab cell將nwell接power, psub接ground。整個core區域內每隔一定距離加一列。

Endcap cell,在Macro四周和core邊界圍一圈。主要是從DFM上考慮,不能讓poly和OD周圍太空曠,不對稱,密度太低。

TCD cell,technology critical dimension unit,指foundry拿來做工藝校準用的,在28nm一般要求2000*2000放一下。

Trail place

檢查place後congestion和timing結果,並根據此結果對floor plan進行調整。進行多次iteration後可以得到一個最終的floor plan。至此floor plan確定。

3 Placement

目的是將所有std cell放入core area中,並且滿足congestion和timing的要求。

最簡單的說可以分為兩步: global 和 detail place。global不考慮cell放的位置是否legal;detail place的時候會將cell放到附近legal的位置。在place過程中為了得到更好timing結果會對關鍵路徑進行邏輯重組,刪除buffer trees。

隨著工具的不斷髮展,目前place的引擎已經十分強大。例如C家的giga place,它採用新的演算法slack-driven,透過計算真正timing而不是預估的timing來進行place, 在place的同時進行最佳化。

4 Prects

在Place之後CTS之前,我們會對進行一次setup timing最佳化。只最佳化setup,原因是clock tree還沒做,所有clock都是ideal的。

5 CTS

晶片中的時鐘網路要驅動電路中所有的時序單元,所以時鐘源端門單元帶載很多,其負載延時很大並且不平衡,需要插入緩衝器減小負載和平衡延時。時鐘網路及其上的緩衝器構成了時鐘樹。

(1) 傳統的時鐘樹

傳統的時鐘樹綜合為了得到一個儘量balance的clock tree。

一般要設定三個約束max transition, max cap, max fanout。工具在做cts時一定會滿足這三個約束,不然會報violation。

兩個目標minmum insetdelay, maxmium skew。工具在做cts時儘量達到這兩個目標,但是不一定要完全滿足,就算有沒有達到的情況也不會報violation。

數字積體電路的設計流程簡介

數字積體電路的設計流程簡介

(2) Useful skew

在新一代的後端工具中提供了一個新的feature, useful skew,就是說並不一定要將所有的clock tree做balance,可以適當利用useful skew來達到更好的效能,更快時序收斂和更低的IR drop。

數字積體電路的設計流程簡介

數字積體電路的設計流程簡介

6 Postcts

CTS完成後,需要進一步的最佳化,主要解決一下幾個問題。

修復剩餘的DRV(design rule violation)

將ideal clock改成 propagate clock

最佳化setup timing

最佳化hold timing(由於此時clock tree已經生成)

7 Routing

CTS之後整個晶片的大體結構已定。要將訊號線透過金屬連線起來。繞線過程主要完成一下幾個目標

繞線過程中會考慮DRC和LVS,繞完後不會有DRC/LVS violations

繞線過程中不會導致timing變差,也不會引入新的SI問題。

考慮DFM,例如multi-cut via,線寬和線間距。

8 PostRouting

routing之後timing會跟preRoute的結果有區別,主要由於以下兩個原因。

由於congestion導致具體的繞線有detour。

寄生電容

所以我們還要最佳化一下setup/hold timing。

最後需要開啟SI 模式後再最佳化一次setup/hold timing。

由上可知在PNR過程中會有多次的timing最佳化。但是要注意每次timing最佳化可達到的程度是逐漸遞減的,越到最後階段可最佳化的範圍越小。

數字積體電路的設計流程簡介

數字積體電路的設計流程簡介

9 ECO

進入這一階段後,當前的資料就不能再回去用PNR工具來進行優。只能透過指令碼進行區域性改動。一般分為兩大類。

Function ECO:區域性的改動邏輯功能,例如將cell的連線關係改掉,或者增加刪除inverter等。

Timing ECO:PT/Tempus最佳化分析後吐出的timing最佳化指令碼。

10 FINISH

ADD FILLER/DCAP CELL:Filler cell填充core內空缺的地方,為了確保所有的Nwell的連線在一起的,也為了防止DRC。 Dcap cell是去耦電容,防止IPdrop。但是由於Dcap本身有leakage,所以加的時候稍微注意一下不能大面積的加。

Generate OD/Metal FILLER:為了滿足 OD metal density的要求,會在空白處插入一下od filler和metal filler。由foundry提供指令碼。

Sealring:為了保護晶片在切割時避免誤切,會在晶片周圍加入一圈Sealring,有時也可以連線晶片中數字Ground。

Merge GDS:將PNR gds和IP,Memory,OD/Metal filler,Sealring整合到一起。至此晶片已完成。

11 SIGNOFF

檢查專案工具內容時序檢查PT/Tempus檢查是否有時序違例功耗檢查Redhawk/Voltus檢查靜態、動態功耗、IR drop物理驗證Calibre/ICV/PVS檢查DRC、LVS、ANT、ERC、DFM形式驗證LEC/formality 檢查postlayout 網標的邏輯功能是否與綜合後網標一致

——————————————————————————————————————————————————————-

擴充套件知識:

設計流程和方法近十年發生了哪些變化:十年前的ASIC/SoC設計跟現在的ASIC/SoC設計,大家覺得發生了哪些變化(流程跟技術方面)?

流程中使用的EDA工具相關知識:synopsys,mentor graphic和cadence這三家公司對比?各方面有什麼差別?

數字IC入門書單:你所在領域的入門書單? - 知乎使用者的回答

參與流片是一種怎樣的體驗:參與流片是一種怎樣的體驗?

——————————————————————————————————————————————————————-

最後大家要有興趣可以參加我最新的知乎Live ”半導體先進工藝的器件結構和挑戰“ 知乎 Live - 全新的實時問答

也歡迎大家參加我之前的Live

你不瞭解的微電子行業 知乎 Live - 全新的實時問答

初學者在數字 IC 設計學習中易進入的誤區 知乎 Live - 全新的實時問答