我來自西北工業大學計算機學院微電子學研究所,現在是微電子學研究所的研一學生,專業方向是數字積體電路設計。在研一上學期,初步掌握了數字積體電路後端綜合設計方法,本篇學術素養課程報告主要討論在實現後端流程時的方法、經驗、以及相關的感悟。 一般而言,軟體工程師的需求量和硬體工程師的需求量是10:1,也就是說硬體工程師需求量遠小於軟體工程師,硬體工程師中又分為模擬和數字兩大類,模擬積體電路設計主要包括ADC、DAC、PLL等,數字積體電路設計則更偏向於實現特定功能的晶片,如CPU、GPU、MCU、MPU、DSP等。 事實上,發展到現階段,數字積體電路的設計方法已經在EDA工具的幫助之下十分類似於軟體開發了,典型的數字積體電路開發一般為以下步驟: 1、根據需求,自頂向下設計電路模組,明確該數字系統需要實現什麼功能,再具體細分到各個功能模組。此時的設計圖形式一般為模組框圖,使用visio或其他繪圖軟體實現。這個環節較為鬆散,但十分重要,因為根據需求設計大的模組和指標時,必須要結合實際情況,否則到後期會經歷無限次返工甚至無法達到預定指標。一般由德高望重,經驗豐富的工程師進行總體設計。 2、定義好各個模組之後,接下來就是具體實現各個模組的功能。因為硬體描述語言的存在,我們可以很輕易的透過硬體描述語言來“寫”出模組的實現方法,在本次實驗中,我使用的是Verilog HDL。具體程式碼的複雜程度和模組的複雜程度有關,我在這次實驗中採用的是“八位格雷碼計數器”電路設計。 3、完成“八位格雷碼計數器”的Verilog程式碼後,需要對該設計進行“前模擬”。所謂前模擬,主要是為了驗證程式碼是否描述正確,是否真正實現了所規劃的功能。一般使用modelsim軟體進行模擬,模擬成功進入下一階段,不成功則需要返回修改程式碼。 4、前模擬成功後,已經有了功能正確的Verilog設計程式碼,此時可以將程式碼下載到FPGA板上進行驗證(Quartus,JTAG),驗證成功則證明此設計正確無誤。對於某些整合度要求不高且時間非常緊張的數位電路設計專案,可以直接使用FPGA來實現晶片功能。顯然,FPGA這種通用器件是不能滿足高整合、低功耗、專用性高ASIC設計需求的,只能用於較為簡單和粗獷的設計。 5、接下來進入後端流程。這時需要專用的伺服器以及價格高昂的EDA工具支援。這也是為什麼硬體設計入門較難的原因之一,如果一個沒有接觸過軟體程式設計的有志青年立志做軟體工程,一般一臺電腦,一本書就夠了,最多再買個正版編譯器(VS,Eclipse,DW等),但是要做硬體電路設計,一臺電腦一本書最多畫畫PCB。要做最核心的部分,必須使用功能強大的伺服器和價格昂貴的EDA工具,因為普通的PC電腦負擔不起“後端綜合”的工作需求。而且大量linux下的複雜操作也會使人望而卻步。 6、準備好後端平臺後,就可以將“八位格雷碼計數器”放到平臺裡,這時馬上需要考慮的問題是使用什麼元件庫以及什麼工藝?因為同樣一個與非門,不同元件庫有不同實現細節,MOS管細節可能都大相徑庭,另外還要考慮工藝,這些工藝的檔案來自於相關廠家(TSMC,CSMS等),這也是個人無法做後端的原因之一——因為你幾乎不可能以自己的名義向臺積電商量工藝庫檔案,畢竟作為一個涉世未深,無錢無術的初學者,你是無法充滿自信的和人數上萬、資金上億的工藝廠籤合同的。經過精心篩選後(更多情況下是沒得選),確定你想使用的工藝。在本次實驗中,我使用的是實驗室學長改良過的元件庫,以及TSMC 0.18um工藝,EDA工具為Cadence IC 614。 7、經過一系列配置之後,“八位格雷碼計數器”已經成為了一個龐大的工程檔案,我建議採用TCL指令碼檔案進行配置。然後就可以進行RTL級綜合。所謂RTL級綜合,實際上是指將Verilog程式碼“改寫”為綜合工具(我使用的是Encounter)所能識別的Verilog程式碼。通俗的講,這個類似於將“文言文”翻譯為“白話文”,也類似於C語言中的“編譯”,即將高階語言翻譯為彙編程式碼。當然,理論上可以直接寫出RTL級程式碼,但這就和直接寫組合語言一樣,複雜程度不言而喻。 8、RTL級綜合完成後,接下來將RTL Verilog匯入Encounter進行真正的後端綜合。匯入RTL程式碼後,還需要說明標準單元庫的LEF檔案,並定義電源和地的線名。此時需要一個MMMC config配置,流程繁雜,主要是配置相關檔案和器件狀態(TT、SS、FF等)。 9、完成匯入配置,接下來是晶片佈局設計,即Floorplan。Floorplan需要設定一些基礎引數,如晶片的長寬(面積),留給管腳的空間,晶片利用率等。長寬比建議為0.2-5,複雜電路利用率0.85,一般電路利用率0.90,簡單電路利用率0.95。 10、POWER計算,以此為根據佈置電源線路,主要為ring和stripe。例如,某數位電路晶片功耗為55mW,增加冗餘量到2倍左右,設計為100mW,按照1.8V供電,電流約為60mA,也就是總電源線為60u,如果每條線10u,則六條電源線,兩側各一條,中間四條。Encounter中有專門的佈線配置器。佈線之後,可以先Apply,然後撤銷反覆嘗試。 11、佈置IO管腳。如果提前沒有匯入IO,可以重新匯入(TCL),也可以自行調整。 12、Pre-Place,因為Verilog中往往有很多的module,每個module對應一個佈局模組,佈局時應當注意一些佈局原則。佈局時一般透過簡單的拖動就可以。“八位格雷碼計數器”因為只有一個module,因此不需要複雜的佈局。 13、佈局是一個不斷修改和改進的過程,Pre-Place之後進行Place,之後進行之後Post-Place。Place之後,需要進行時鐘樹綜合(CTS),時鐘樹綜合的目的是為了讓每個訊號都在約束的時間內傳輸到下一個時序單元,否則會對晶片的主頻產生影響(主頻是在設計前就定下來的指標),然後在Post-CTS對不符合時鐘約束的部分進行佈線調整。 14、佈局之後進行佈線,即Route,對於特殊還佈線需要進行SRoute,然後進行Post-Place,這些步驟某種程度上都是“點按鈕”和“配引數”,但後端綜合時一定要有清醒的頭腦,必須知道為什麼要點這些按鈕,以及該配置什麼引數。 15、佈局佈線經過多次迭代,IO管腳配置好後,可以Fill全圖,用各層金屬覆蓋未使用的區域。單個“八位格雷碼計數器”因為結構簡單,晶片未覆蓋區域較大。 16、至此,Encounter內的後端綜合就完成了,可以匯出(export)成GDSII格式的網表,以及為了做DRC,LVS檢查,也需要“Netlist”成schematic(電路原理圖)的格式。 17,將後端綜合的GDSII檔案匯入(Stream in)到Virtuoso裡。Virtuoso是一個用於模擬積體電路設計的軟體。將GDSII檔案匯入該軟體主要有兩個目的,一是可以在Virtuoso裡做“後模擬”,驗證經過後端綜合的一系列流程之後,概念晶片是否能滿足設計需求,此時的模擬就已經考慮到了延時,電阻,功耗等實際存在的問題,如果模擬時出現了問題,需要進行返工修改,必要時要重新佈局佈線。當“後模擬”通過後,還要對該晶片進行DRC和LVS檢查,DRC是檢視是否滿足所選工藝的要求,因為在實際情況下,一些理論上的值是不現實的,比如過細的線無法生產,柵極間的距離過短可能會導致短路,導線和各金屬層之間的電容會影響電路功能等。LVS是比較layout和Schematic之間的拓撲關係是否不一致。二是可以方便以後做數模混合晶片設計時進行混合設計,因為模擬積體電路的是直接在Virtuoso中進行的,兩者最後結合在一起,就可以進行數模混合積體電路設計。 18、進行完檢查之後,就可以與工藝提供廠家聯絡進行加工了,如TSMC。一般加工需要跟上企業的業務流程。大約經過1月左右,晶片加工完成,然後進入測試環節。焊接,試驗,驗證晶片指標,以及提出改進方案。 至此,一個數字積體電路從概念到實物的整個流程就完成了,每一步都值得研究和回味,從二四譯碼器到複雜的CPU,其流程是基本一樣的。經過研一上一個學期的學習,我也基本掌握了這個流程。以後會更加努力的在本專業方向繼續前進,培養核心競爭力。
我來自西北工業大學計算機學院微電子學研究所,現在是微電子學研究所的研一學生,專業方向是數字積體電路設計。在研一上學期,初步掌握了數字積體電路後端綜合設計方法,本篇學術素養課程報告主要討論在實現後端流程時的方法、經驗、以及相關的感悟。 一般而言,軟體工程師的需求量和硬體工程師的需求量是10:1,也就是說硬體工程師需求量遠小於軟體工程師,硬體工程師中又分為模擬和數字兩大類,模擬積體電路設計主要包括ADC、DAC、PLL等,數字積體電路設計則更偏向於實現特定功能的晶片,如CPU、GPU、MCU、MPU、DSP等。 事實上,發展到現階段,數字積體電路的設計方法已經在EDA工具的幫助之下十分類似於軟體開發了,典型的數字積體電路開發一般為以下步驟: 1、根據需求,自頂向下設計電路模組,明確該數字系統需要實現什麼功能,再具體細分到各個功能模組。此時的設計圖形式一般為模組框圖,使用visio或其他繪圖軟體實現。這個環節較為鬆散,但十分重要,因為根據需求設計大的模組和指標時,必須要結合實際情況,否則到後期會經歷無限次返工甚至無法達到預定指標。一般由德高望重,經驗豐富的工程師進行總體設計。 2、定義好各個模組之後,接下來就是具體實現各個模組的功能。因為硬體描述語言的存在,我們可以很輕易的透過硬體描述語言來“寫”出模組的實現方法,在本次實驗中,我使用的是Verilog HDL。具體程式碼的複雜程度和模組的複雜程度有關,我在這次實驗中採用的是“八位格雷碼計數器”電路設計。 3、完成“八位格雷碼計數器”的Verilog程式碼後,需要對該設計進行“前模擬”。所謂前模擬,主要是為了驗證程式碼是否描述正確,是否真正實現了所規劃的功能。一般使用modelsim軟體進行模擬,模擬成功進入下一階段,不成功則需要返回修改程式碼。 4、前模擬成功後,已經有了功能正確的Verilog設計程式碼,此時可以將程式碼下載到FPGA板上進行驗證(Quartus,JTAG),驗證成功則證明此設計正確無誤。對於某些整合度要求不高且時間非常緊張的數位電路設計專案,可以直接使用FPGA來實現晶片功能。顯然,FPGA這種通用器件是不能滿足高整合、低功耗、專用性高ASIC設計需求的,只能用於較為簡單和粗獷的設計。 5、接下來進入後端流程。這時需要專用的伺服器以及價格高昂的EDA工具支援。這也是為什麼硬體設計入門較難的原因之一,如果一個沒有接觸過軟體程式設計的有志青年立志做軟體工程,一般一臺電腦,一本書就夠了,最多再買個正版編譯器(VS,Eclipse,DW等),但是要做硬體電路設計,一臺電腦一本書最多畫畫PCB。要做最核心的部分,必須使用功能強大的伺服器和價格昂貴的EDA工具,因為普通的PC電腦負擔不起“後端綜合”的工作需求。而且大量linux下的複雜操作也會使人望而卻步。 6、準備好後端平臺後,就可以將“八位格雷碼計數器”放到平臺裡,這時馬上需要考慮的問題是使用什麼元件庫以及什麼工藝?因為同樣一個與非門,不同元件庫有不同實現細節,MOS管細節可能都大相徑庭,另外還要考慮工藝,這些工藝的檔案來自於相關廠家(TSMC,CSMS等),這也是個人無法做後端的原因之一——因為你幾乎不可能以自己的名義向臺積電商量工藝庫檔案,畢竟作為一個涉世未深,無錢無術的初學者,你是無法充滿自信的和人數上萬、資金上億的工藝廠籤合同的。經過精心篩選後(更多情況下是沒得選),確定你想使用的工藝。在本次實驗中,我使用的是實驗室學長改良過的元件庫,以及TSMC 0.18um工藝,EDA工具為Cadence IC 614。 7、經過一系列配置之後,“八位格雷碼計數器”已經成為了一個龐大的工程檔案,我建議採用TCL指令碼檔案進行配置。然後就可以進行RTL級綜合。所謂RTL級綜合,實際上是指將Verilog程式碼“改寫”為綜合工具(我使用的是Encounter)所能識別的Verilog程式碼。通俗的講,這個類似於將“文言文”翻譯為“白話文”,也類似於C語言中的“編譯”,即將高階語言翻譯為彙編程式碼。當然,理論上可以直接寫出RTL級程式碼,但這就和直接寫組合語言一樣,複雜程度不言而喻。 8、RTL級綜合完成後,接下來將RTL Verilog匯入Encounter進行真正的後端綜合。匯入RTL程式碼後,還需要說明標準單元庫的LEF檔案,並定義電源和地的線名。此時需要一個MMMC config配置,流程繁雜,主要是配置相關檔案和器件狀態(TT、SS、FF等)。 9、完成匯入配置,接下來是晶片佈局設計,即Floorplan。Floorplan需要設定一些基礎引數,如晶片的長寬(面積),留給管腳的空間,晶片利用率等。長寬比建議為0.2-5,複雜電路利用率0.85,一般電路利用率0.90,簡單電路利用率0.95。 10、POWER計算,以此為根據佈置電源線路,主要為ring和stripe。例如,某數位電路晶片功耗為55mW,增加冗餘量到2倍左右,設計為100mW,按照1.8V供電,電流約為60mA,也就是總電源線為60u,如果每條線10u,則六條電源線,兩側各一條,中間四條。Encounter中有專門的佈線配置器。佈線之後,可以先Apply,然後撤銷反覆嘗試。 11、佈置IO管腳。如果提前沒有匯入IO,可以重新匯入(TCL),也可以自行調整。 12、Pre-Place,因為Verilog中往往有很多的module,每個module對應一個佈局模組,佈局時應當注意一些佈局原則。佈局時一般透過簡單的拖動就可以。“八位格雷碼計數器”因為只有一個module,因此不需要複雜的佈局。 13、佈局是一個不斷修改和改進的過程,Pre-Place之後進行Place,之後進行之後Post-Place。Place之後,需要進行時鐘樹綜合(CTS),時鐘樹綜合的目的是為了讓每個訊號都在約束的時間內傳輸到下一個時序單元,否則會對晶片的主頻產生影響(主頻是在設計前就定下來的指標),然後在Post-CTS對不符合時鐘約束的部分進行佈線調整。 14、佈局之後進行佈線,即Route,對於特殊還佈線需要進行SRoute,然後進行Post-Place,這些步驟某種程度上都是“點按鈕”和“配引數”,但後端綜合時一定要有清醒的頭腦,必須知道為什麼要點這些按鈕,以及該配置什麼引數。 15、佈局佈線經過多次迭代,IO管腳配置好後,可以Fill全圖,用各層金屬覆蓋未使用的區域。單個“八位格雷碼計數器”因為結構簡單,晶片未覆蓋區域較大。 16、至此,Encounter內的後端綜合就完成了,可以匯出(export)成GDSII格式的網表,以及為了做DRC,LVS檢查,也需要“Netlist”成schematic(電路原理圖)的格式。 17,將後端綜合的GDSII檔案匯入(Stream in)到Virtuoso裡。Virtuoso是一個用於模擬積體電路設計的軟體。將GDSII檔案匯入該軟體主要有兩個目的,一是可以在Virtuoso裡做“後模擬”,驗證經過後端綜合的一系列流程之後,概念晶片是否能滿足設計需求,此時的模擬就已經考慮到了延時,電阻,功耗等實際存在的問題,如果模擬時出現了問題,需要進行返工修改,必要時要重新佈局佈線。當“後模擬”通過後,還要對該晶片進行DRC和LVS檢查,DRC是檢視是否滿足所選工藝的要求,因為在實際情況下,一些理論上的值是不現實的,比如過細的線無法生產,柵極間的距離過短可能會導致短路,導線和各金屬層之間的電容會影響電路功能等。LVS是比較layout和Schematic之間的拓撲關係是否不一致。二是可以方便以後做數模混合晶片設計時進行混合設計,因為模擬積體電路的是直接在Virtuoso中進行的,兩者最後結合在一起,就可以進行數模混合積體電路設計。 18、進行完檢查之後,就可以與工藝提供廠家聯絡進行加工了,如TSMC。一般加工需要跟上企業的業務流程。大約經過1月左右,晶片加工完成,然後進入測試環節。焊接,試驗,驗證晶片指標,以及提出改進方案。 至此,一個數字積體電路從概念到實物的整個流程就完成了,每一步都值得研究和回味,從二四譯碼器到複雜的CPU,其流程是基本一樣的。經過研一上一個學期的學習,我也基本掌握了這個流程。以後會更加努力的在本專業方向繼續前進,培養核心競爭力。