想做數字晶元設計前端?那你得了解這些事

2021-10-12 16:23:05 字數 3128 閱讀 1600

數字前端設計也稱邏輯設計,前端以設計架構為起點,以功能正確且滿足目標時序的網表為終點,用邏輯電路實現預期的功能。主要包括:規則書制定、系統架構設計、部件詳細設計、hdl編碼、**驗證、sdc編寫、邏輯綜合、sta檢查、形式化驗證等,系統架構設計最難掌握,需要有豐富的設計經驗,對應用場景也需要有深入的理解。

前端設計師需要掌握的最基本技能就是實現編碼,但編碼不是數字前端設計的全部,它只是前端設計過程中的部分工作。下面編寫乙個mux邏輯,mux的行為可以描述為:只要訊號a或b或sel發生變化,如果sel為0則選擇a輸出;否則選擇b輸出。

學習前端設計首先要掌握數位電路基礎知識並建立硬體意識,基本的數位電路像與或非門、d觸發器、計數器、移位暫存器、狀態機、多路選擇器、解碼器等一定要掌握,所有複雜的電路都可由這些基本電路構成,軟體設計和邏輯設計的不同要明白,軟體是順序執行思維,而邏輯設計需要併發思維。

數位電路是由很多的與非門及d觸發器構成,上電之後所有部件都同時執行,不會因為a觸發器的**描述在 b觸發器之前a觸發器就先工作,事實上,rtl級**書寫的先後順序在綜合成網表檔案後就消失了,取代的是基本邏輯電路之間的互聯關係描述。數位電路功能中存在先後順序的關係,但這種順序不是靠**的先後順序來實現,它的先後順序是基於時間軸(時鐘)來實現,它的承載體是時序邏輯(觸發器)。

因此邏輯設計需要的是一種併發的思維,設計師需要用併發的思維去考慮電路的設計。

前端設計流程

1.規格制定

規格制定是晶元設計中最重要的步驟之一,這個步驟就像是在設計建築前, 先決定要幾間房間、浴室,有什麼建築法規需要遵守,在確定好所有的功能之後再進行設計,這樣才不用再花額外的時間進行後續修改。如果規格還制定好就開始設計,很難確保設計中不出任何差錯。

規格制定前需要進行市場調研,收集客戶需求,第一步是確定晶元的功能、功耗、效能,對大方向做設定;接著需要確定相容那些規範,如無線網絡卡的晶元就需要符合 ieee 802.11 等規範;最後則是確立這顆 ic 的製作方法,將不同功能分配成不同的單元,並確立不同單元間鏈結的方法,如此便完成規格的制定。

2.系統架構和部件詳細設計

這個步驟就像初步有了建築的規劃,將整體輪廓描繪了出來,方便後續製圖。根據規則需求編寫詳細設計文件,明確具體架構,劃分功能模組。對不確定的功能進行建模測試確保方案可順利實現,這個階段就是確定晶元設計的細節。

基於arm的自動駕駛晶元系統架構圖

做好設計方案非常重要,這裡說的方案絕不是只擺幾個框圖,設計的時候需要做總體設計方案、邏輯詳細設計方案,這兩種方案包括了很多東西,總體方案主要是一級功能模組的劃分及介面時序的定義,而邏輯詳細方案就是**的文字及圖形描述(模組內部所有關鍵訊號的時序最好都設計好)。

3.hdl編碼

很多人在做邏輯設計時喜歡一上來就狂寫**,寫到一半後發現了功能問題,只好推倒重來,反覆好幾次才能做到**基本正確,最後通過修補湊時序達到對的功能。這個做法除了設計周期長外,**的質量也難以保證,往往存在很多冗餘的邏輯,甚至會有一些隱藏較深的bug。

所以數字邏輯設計一定要方案先行,根據方案寫**,這樣才能在寫**時做到胸有成竹,避免邏輯混亂的情況。其實在方案階段把時序設計好後,模組內部各個訊號之間的邏輯關係也就理得差不多了,之後就是將它翻譯成**的體力勞動了。

hdl編碼這個階段是要使用硬體描述語言(hdl)描述實現功能模組,也就是把電路描寫出來。常使用的hdl有 verilog、vhdl等,國內一般使用verilog編寫rtl(暫存器傳輸級)**。

4.功能驗證

功能驗證就是檢驗編碼設計的正確性,不符合規格的要重新設計和編碼。設計和**驗證是反覆迭代的過程,直到驗證結果顯示完全符合規格標準。設計師一般只做基本通路驗證,功能和**的詳細驗證一般由驗證工程師完成,驗證和設計可同步進行。

常用**工具:

synopsys的vcs,mentor modelsim(linux版本為questasim),cadence xcelium(老版本叫incisive)。

5.編寫sdc和**檢查

sdc是一種約束檔案,這裡的約束是針對綜合和布局佈線工具而言的。為什麼會有約束這個東西出現呢?主要原因是eda軟體比較笨,難以理解設計師的心思,如果設計師不把更詳細的資訊告訴它的話它就幹不好活,所以設計師需要用sdc來把設計意圖(時序、面積和功耗等)傳達給eda工具。

這裡說的**檢查是指用eda工具(spyglass最常用)來檢查和診斷設計中可能存在的潛在問題,然後用其分析和追蹤問題的根源,rtl級一般做lint、cdc(多時鐘域檢查)、constraint(約束)三個方面的檢查。

常用的檢查工具:spyglass

6.邏輯綜合

邏輯綜合就是把hdl**翻譯成門級網表(netlist),綜合需rtl**和sdc檔案。邏輯綜合需要基於特定的綜合庫,不同庫中的閘電路基本標準單元(standard cell)的面積,時序引數是不一樣的,因此綜合出來的電路在時序,面積上是有差異的。一般來說,綜合完成後需要再次做**驗證(這個也稱為後**)。

常用綜合工具:synopsys的dc,cadence的genus

7.靜態時序分析

static timing analysis(sta),靜態時序分析屬於驗證範疇,它主要是在時序上對電路進行驗證,檢查電路是否存在建立時間(setup time)和保持時間(hold time)的違例(violation)。這個是數位電路基礎知識,乙個暫存器出現這兩個時序違例時,是沒有辦法正確取樣資料和輸出資料的,所以以暫存器為基礎的數字晶元功能肯定會出現問題。

sta工具:synopsys的prime time。

8.形式驗證

形式化驗證屬驗證範疇,它是從功能上(sta是時序上)對綜合後的網表進行驗證。常用的就是等價性檢查方法,以功能驗證後的hdl設計為參考,對比綜合後的網表功能,他們是否在功能上存在等價性。這樣做是為了保證在邏輯綜合過程中沒有改變原先hdl描述的電路功能。

形式驗證工具:synopsys的formality,cadence conformal。

前端設計入門要學的知識

高手水平高並不是體現在他能寫出一些很奇特的電路,相反水平高體現在他們總能將複雜的電路用一些很樸素的基本電路去描述。

前端設計一般需要掌握的知識有linux操作基礎、數字電子基礎、verilog語言、計算機體系結構、指令碼語言、eda**工具等。

數字晶元設計流程之verilog設計

數字晶元設計流程 功能驗證之前與工藝庫沒多大聯絡,驗證晶元設計的功能是否正確,針對抽象的 進行功能驗證理想值。一致性驗證確保生成的網表和 設計功能一致 dft之後是數字後端。靜態時序分析,從邏輯綜合開始拿給後端,確保每乙個階段沒有問題。後 證明加入延遲後功能是否正確。一 verilog設計 可綜合語...

華為晶元與器件設計工程師 數字晶元設計工程師

崗位職責 1 參與晶元需求討論,並按照晶元規格的要求,參與完成晶元總體方案 詳細設計方案的完成 邏輯 的編寫 2 嚴格遵循開發流程 模板 標準和規範,確保開發工作按時按質完成。崗位要求 1 具有soc開發經驗者 熟悉arm處理器 amba匯流排 外設介面 具備複雜電路設計 ut驗證經驗,深刻理解同步...

數字晶元前端 STA時序分析的小練習2

沒事還是看看書,保持學習的態度,別嫌累別嫌苦,哪天忘光就剩哭 雙押 4 繼續總結一些小題目,繼續上次的題目 數字晶元前端 sta時序分析的小練習1 電路圖如上圖所示,tcyc 10ns,觸發器的tsetup 1ns,thold 1ns,觸發器資料輸入延時為t1 5ns,時鐘端延時為t2 3ns,請問...