關於晶元設計的二三事

關於晶元設計的二三事

4 人贊了文章

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

說到數字晶元,不能不說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的基礎問題

(本文轉載自bbs.eetop.cn/thread-340

推薦閱讀:

TAG:晶元集成電路 |