說說晶元設計這點事

2021-07-03 08:29:46 字數 4755 閱讀 6491

晶元設計這個行當 ,從大的方面講,主要分模擬和數字兩大塊, 而每大塊又分前端和後端, 我想大部分同學對這個肯定是非常清楚的, 下面就數位電路聊聊晶元設計的一些事情,就是晶元設計有哪些活做, 這並不是全面完整的系統介紹,只是個人的了解和總結, 希望拋磚引玉,也許不全面, 不正確, 歡迎同學們指正和補充

說到數字晶元,不能不說fpga, 這種是可程式設計的數位電路, 用法原理也不說了, 數位電路設計的目標,就是把這些功能,做成我們自己專用的asic/soc, 這樣無論面積, 成本或者安全性等等都能***

從流程上講, 數字晶元設計的大致步驟就是系統與功能定義,rtl實現 驗證, 綜合及可測試性設計(synthesize , dft ), atpg**, 時序分析, 到自動布局佈線(apr). 直至交付fab的gds網表.

這個流程是可以反覆迭代的, 當對於不同型別晶元, 如純數asic或混合電路(mix-signal及系統級晶元(soc), 每一步的方法和具體實施流程上可能又有所差異.下面就這些基本流程分步談一些主要問題。

系統設計主要設計到功能定義及架構設計, 匯流排架構的配置,模組設計,資料流的分配, 時鐘的設計等問題。匯流排包括模組之間,模組與mcu核之間,或者外部主機和晶元之間通訊,或者測試需要等等一系列因素。 時鐘涉及到資料流的規劃, 通訊介面或內部mcu的時鐘約定,工藝條件,功耗等因素。模組需要明確介面和定義。

在系統級設計上, 特別是很多數模混合電路中或對功耗有特別要求的電路中,還要有電壓域的設計,不同模組之間,功能模組和介面之間可能都需要根據工藝條件,功耗要求設定不同的電壓。

無論是時鐘,還是電壓,都可以通過控制開關來實現功耗的要求,時鐘實現比較簡單,在大部分電路中都可以實現這種時鐘控制,電壓控制一般是實現在整合有電源管理晶元的較大規模晶元上。但未來趨勢是即使沒有電源管理晶元,電壓的gating也需要納入考慮範圍。

在soc系統設計上,乙個重要的環節是mcu 核心的選型,現在常用的核心一般是arm, 較老的arm7, arm9等系列,較新的是三大系列cortex a , r, m, 具體的用途不做詳細訴述,選定好後核需要根據需要進行設定,一般做硬體的人不需要對它的指令集了解太多,但是需要了解它的匯流排介面,資料匯流排,指令匯流排,以及儲存系統的設計,一般需要安排rom, ram分別作為指令和資料儲存器,由於rom是不可更改的,一般也需要加入flash作為補丁程式寫入地。也可能需要外部儲存器或者dma控制器來增加外部儲存空間。位址的分配是按照功能需要來進行的,現在有很多任務具如synopsys的designkits可以產生外部匯流排**及進行位址分配。

第一步完成系統和功能定義後, 就要實施的就是rtl實現, rtl是專門描述硬體電路的工具語言, 有verilog和vhdl, rtl的特點就是硬體上的同時觸發性,不同於軟體的按順序執行, 電路有時序邏輯和組合邏輯組成, 時序邏輯在物理構成上就是一些暫存器,這些暫存器受時鐘控制, 暫存器代表了電路中資料或控制訊號, 這些訊號受時鐘的驅動流動. 組合邏輯是不受時鐘控制的電路塊, 組合邏輯顧名思義,通過一些訊號的組合直接生成一些邏輯結果。

rtl設計中,一大問題是非同步設計問題,非同步資料的處理根據不同情況有很多方式, 最簡單的,如果對非同步的電平訊號, 可以直接在新的時鐘域中加2級暫存器來隔離,避免不定態的發生. 當如果對於匯流排的處理, 或者脈衝的處理, 則需要同步模組, 同步模快一般是指需要握手訊號,就是前一級時鐘告訴取樣的時鐘,訊號ok了, 取樣的第二個時鐘再去採,採好後再告訴前一級時鐘,我搞定了,那樣前一級時鐘就可以換資料或其他處理.

有一種情況就是前一級時鐘太快, 造成第二級來不及,則需要加入fifo作為隔離, 就是讓那些資料先放好, 我在慢慢來取. 這個fifo的設計涉及到讀寫位址的判斷,寫滿或讀空都需要做相應處理, 讀寫位址之間的判斷只能在其中乙個時鐘域中進行, 這本身又涉及非同步訊號的處理問題,這一般用格雷瑪解決, 或者有些地方直接可以判斷位址高位, 這些方法的目的就是不能讓位址在比較的時候不穩定.

rtl設計中時鐘本身的設計問題也要注意, 我們在乙個晶元中, 盡量把時鐘產生電路放在一塊,主要是從綜合, dft的角度去考慮的, 讓這些時鐘統一管理和約束。 時鐘的分頻,切換也要專門處理,否則容易產生毛刺等事情。

rtl設計中還有很多需要注意的問題,比如可綜合性, 還有要考慮到電路的面積, 以及響應速度等等, 這些問題是rtl coding的基礎問題

**寫完後,需要進行的是驗證工作, 下面談談這方面的事情

上次寫完後,有人支援,也有個朋友說寫這些東西意義不大吧,如果就某些細節方面感興趣的朋友可以**和切磋,互相學習,也可以私下交流。

這只是我的角度去寫這些東西,希望大家指正和補充。下面接前天的,繼續驗證部分。

晶元驗證一般有這幾個層面, 乙個是rtl級或者netlist( pre or post pr with sdf ), 這個也是一般意義上的晶元驗證工作, 乙個是fpga級的,也是rtl, 只不過download到fpga中, 借助硬體環境,也可以直接做應用實驗。

晶元驗證的工作量在晶元設計中佔據了大部分的時間和精力,無論是那種驗證,都需要搭建測試平台(testbench),驗證平台從軟體結構上模擬晶元的工作環境。即有清晰的連線結構,也有完成這些測試所需要的非結構性的函式或任務包。測試平台中的被測試晶元是rtl級的,測試向量或者說施加的激勵可以是verilog/vhdl,hdl語言本身就具有比較完善的行為級描述功能,也可以滿足絕大部分測試平台的搭建和測試激勵的產生,當然我們面對更複雜設計,或追求更高效率 也可以使用其它被編譯器相容的語言, 如c/c++, sc, sv,e等等

還有post layout的後仿,這個後仿是指dft和apr之後的網表,加入帶有時序資訊的sdf檔案進行**。有些人說,我做過驗證,**和網表之間,pr前後網表之間的一致性驗證也做了,還需要後仿嗎? 答案當然還是需要的,因為一致性也無法檢測到很多時序的問題,比如毛刺,甚至dft的錯誤, 功能性的問題等等。

現在比較常見數模混合晶元的驗證,模擬的部分主要是採用了verilogams建模,當然也有vhdlrn建模等等,這些東西就是引入了可控制和可檢測的模擬量,進入數字**系統,也是數字驗證流程的一環。 更專業的數模混合驗證系統adms, 裡面引入了數字和模擬多個引擎,如數字的nvverilog 模擬的eldo等等,數字部分匯入rtl**,模擬部分直接匯入gds電路, 當然為了加快速度,模擬部分在使用中一般仍然匯入數字模型。

soc驗證中, 植入了燒入rom的軟體, 在**驗證系統中,使用的一般是儲存器的模型加上文字格式的**檔案, 一般實現是直接通過系統讀入指令把檔案讀入到儲存器模型中。(有些**工具可以直接通過選項匯入,類似sdf檔案,如工具nscim),**器可以直接寫出指令執行的log以用於debug,不過現在有更先進的方式用於複雜soc驗證, 如codelink工具,能夠在原**器的基礎上,建立起mcu和hdl電路已經軟體的關係,通過展示波形和韌體(firmware)原始碼的鏈結進行更方便的debug。 

下面需要說的實現部分,就是綜合,dft, sta ,atpg等,準備合在一起寫,感興趣的朋友也可以接著我的寫,我暫時不做這方面的更新,希望朋友們玩個接力。

(此處略去若干回帖。。。。。)

帖子的話題受到了大家關注, 也被加精 , 受到鼓舞, 一直想繼續寫完,但時間有限,更主要惰性使然, 一直沒有接著寫完, 今日得寬裕,繼續談談數字 ic設計接下來的一些工作 

不過在繼續之前, 我要說的是, 其實我之前寫的也不夠完善, 只是想到了就隨之敲下來了, 不夠完整 ,特別是現在的晶元設計, 不同的產品, 要求不同, 所設計的步驟也不完全一致 。比如, 對於很多設計數位電路可能實現建立軟體模型, 來評估我們的頻率,資源,或者數字訊號處理中的訊雜比等一些指標, 這些都是在規格定義之後, 電路設計之前需要做的一些工作。

在晶元完成了設計與驗證之後, 我們要做的工作 就是把它裝化成gds網表,就是所謂的implementation(電路實現), 這其中的流程包括綜合,dft, formality, sta, atpg pattern generation 和**(和功能驗證一樣 也包括前後仿), 再進入後端的pr/lvs/drc 的流程 ,這個屬於物理設計, 當然這個流程 是籠統的 ,這裡主要講幾個後端物理設計之前的前端實現的幾個步驟 。

綜合的原理比較直觀,從rtl到gtech庫到廠家工藝庫的編譯翻譯對映與替代, 綜合需要輸入的就是時鐘約束即sdc檔案,sdc是設計與產品的使用要求決定的。

dft包括好幾種型別, scan chain是最常見的一種,這個可以在綜合步驟中一起做,也可以 在綜合之後進行,掃瞄鏈的多少和晶元本身的規模和晶元可提供的可測試晶元管腳有關, 盡量掃瞄鏈的長度越短越好,以縮短測試時間;由於有些**的管腳有限,需要壓縮掃瞄鏈;甚至有些晶元由於可復用的管腳太少,進入測試模式都需要在功能模式 下由主機的設定, 設定後再退出功能模式。

掃瞄鏈的插入後可以由工具產生atpg的 pattern, dft成功與否要看測試覆蓋率,一般在 95%以上說明就差不多ok了, 如果覆蓋率偏低 ,需要追究原因,一般看有沒有漏掉的dff,以及為什麼會溜掉,一般主要原因不是這個, 是一些不可控的節點造成了覆蓋率低, 需要在電路中做一些處理來使之能 有相關 atpg產生,如加入測試模式生效的 可選的dff或者電平 /地 。

有些電路包括了rom/ram,需要給rom/ram本身加入內建自測電路(bist), 一般如果帶有mcu的 soc,其實也可以通過軟體來完成ram測試,不一定加入bist, 但是植入cpu軟體的 rom肯定必須有bist電路來完成自測,自測電路的原理很簡單, 就是判斷寫入和讀出的資料是否吻合, 否則會 bist電路會給出錯誤的標識。

boundary scan chain是另一種dft, 很容易理解的是,我們可以控制晶元各個pad的輸入輸出值, 這樣它的作用可以應用於板級除錯。

formaliry或者說equence check, 主要檢查綜合,dft以及後端pr之後和各自步驟之前的rtl/網表的等效性。

sta是靜態時序分析, 主要用在晶元完成後端流程後,也檢查是否滿足時序要求, 特別是插入了時鐘樹之後,這是需要後端工具(icc/encounter等) 反標出的sdf檔案來進行分析 。細節不表。sta完成後才可以進行功能後仿和atpg pattern的後仿 。

mount掛載這點事

一.作用 掛接目錄和檔案系統 二.mount的標準用法 mount t type device dir mount t 檔案系統型別 裝置名 掛載點 mount 192.168.86.5 share mnt三.mount的檢視 df h 可以來檢視對應裝置和目錄的掛載關係 mount命令直接回車,也...

Unix許可權這點事

unix linux的許可權管理還是比較複雜的,別人說看高階環境程式設計得看2,3遍。我想這應該是在linux有了一定基礎上。我看的過程中覺得需要反覆推敲,有些地方得翻來覆去看上5,6遍甚至更多,下面是自己的一些對unix許可權的理解,盡量翻譯成了大白話。如果有不對的地方,歡迎討論。關於使用者和組,...

談談創業這點事 1

以前,我經常勸一些牛人,特別是技術牛人創業,因為在我眼裡,這個世界機會太多,成功案例太多,總是替朋友們錯失機會而可惜。咳咳,其實我也一樣 但最近,我突然覺得,現在的環境下,對於某些型別的人才而言,創業未必是最佳選擇。兩個月前,乙個技術大牛聽說我恰好在上海,特意從杭州跑來跟我吃飯,這個傢伙曾經是一家網...