說說芯片設計這點事

說說芯片設計這點事

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

        很顯然,測試激勵是有時間概念的,是按順序進入和流出芯片的,使用的這些非電路描述語言和功能和軟件幾乎是沒有區別的,所以驗證中也越來越多地使用軟件的一些技術, 如面向對象的編程技術,SystemVerilog, Specman E等,SV也支持斷言語句(assertion),不同廠家提供的OVM, VMM,UVM等也包括了很多類庫可供使用。 關於這些技術其實可以有更深入的探討,也期待感興趣的能深入展開。 無論傳統的驗證還是最新的驗證方法學,都需要追求驗證的收斂性,即驗證完全是自動化的檢測,除非debug, 我們無需通過波形判斷測試通過與否。 對於很多驗證,我們幾乎不需要上到FPGA上驗證,比如數據通信類,完全可以軟件實現數據的產生和比對。而有些應用,如視頻,圖形抓取等等,如果進入FPGA就可以實現效果功能的檢驗,FPGA的流程這裏不做表述,不過要注意的是,我們用作流片的RTL代碼可能和待燒入FPGA的代碼有不同之處,比如有些使用的IP在FPGA中可能和流片廠家提供的不一樣,還有些端口等等需要特別注意。

         還有post layout的後仿,這個後仿是指DFT和APR之後的網表,加入帶有時序信息的SDF文件進行仿真。有些人說,我做過驗證,代碼和網表之間,PR前後網表之間的一致性驗證也做了,還需要後仿嗎? 答案當然還是需要的,因爲一致性也無法檢測到很多時序的問題,比如毛刺,甚至DFT的錯誤, 功能性的問題等等。

         現在比較常見數模混合芯片的驗證,模擬的部分主要是採用了verilogams建模,當然也有VHDLRN建模等等,這些東西就是引入了可控制和可檢測的模擬量,進入數字仿真系統,也是數字驗證流程的一環。 更專業的數模混合驗證系統ADMS, 裏面引入了數字和模擬多個引擎,如數字的nc_verilog 模擬的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的後仿 。

 

參考文獻:

[1] 原文地址:http://bbs.eetop.cn/thread-340177-1-1.html

https://www.cnblogs.com/dpc525/p/5146827.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章