??? 摘 要: 針對當前RTL綜合面對的挑戰,總結了實際項目中的經驗,可以使綜合工具在更少的時間里產生的網表芯片面積更小、速度更快,而功耗更低。
??? 關鍵詞: RTL綜合;CMOS電路;設計自動化
?
?
??? 隨著微電子設計復雜度不斷增加,生產工藝的不斷縮小,對設計自動化工具提出了不斷的挑戰。電子設計、自動化需要能處理非常復雜的設計所產生的挑戰和需求。邏輯綜合更是應該滿足這一需求。邏輯綜合工具應該可以在合理的時間里處理上百萬甚至千萬門的邏輯電路。而傳統的邏輯綜合理論主要是靠電路綜合轉換的反復試驗,這個過程其實是功效和質量的折中,通常不能產生最優化的結果。而且,產生的電路非常依賴于具體的設計。因此,只有非常有經驗的設計工程師才能綜合出優化的電路。面對這些挑戰,可以用本文所闡述的方法,在更少的時間里,綜合出速度更快、面積更小、功耗更低的芯片。其技術是基于新出現的綜合工具,不斷增強的后端工具,更好的計算機資源和更快的操作系統。通過應用這些技術,已經成功地完成了一個90 nm芯片項目,特別是使用這些技術產生的網表,可以在后端實現的時候很快地時序收斂,保證了芯片的按時完成。
??? 怎樣指導綜合工具產生想要的電路?當使用工具綜合設計的時候,首先明確的是工具永遠按照工程師的指導在工作,這就需要工程師在做綜合之前,首先要清楚需要完成什么樣的電路。比如電路的工作頻率,有無低功耗要求,面積要求等;其次要清楚工具會為我們做什么,而不能將工具看成一個萬能的工具;然后要指導約束工具綜合產生出我們需要的電路。接下來介紹應用哪些規則和方法,可以綜合產生更好的電路。
1 重視RTL編碼設計
??? 第一個規則就是注重RTL設計。無論綜合工具提高了多少,多么好的計算機和多快的操作系統,都要從設計剛開始的時候就注重RTL編碼設計。綜合是將設計理念從一種表達形式(RTL功能描述),轉換成另一種形式(針對于某一工藝的門級網表),電路在綜合前后具有相同的功能[1]。不能將綜合看成一個黑盒子而不知道里面的內容。必須清楚的知道所需要實現的電路、設計的特殊性、應用的綜合工具、還有工具如何處理邏輯電路。不要依賴后端工具來解決時序問題,而是要在開始設計編碼的時候,就應考慮怎么解決這些問題。在項目開始的時候,應用從先前芯片設計中得到的經驗,結構化設計理念,更有可能產生高效的電路。預先計劃怎樣描述RTL設計,就不用在后端實現的時候花很多時間進行布局布線的設計。
2 采用自上而下的綜合
??? 綜合工具的性能已經提升了很多,能夠在可以接受的時間里完成自上而下(top-down)的綜合,而不用從下而上(bottom-up)的綜合。這樣可以簡化綜合約束的管理,減少編譯設計所需的綜合腳本,也就減少了使用綜合工具所需的許可證。自上而下的綜合可以使工具在優化時知道設計在模塊間的拓撲連接、負載、時序,從而能綜合產生更好的電路。使用自上而下的綜合方法,還可以消除綜合對時序預算的依賴。
3 只對關鍵路徑加額外的約束
??? 傳統的綜合流程里,為了能在后端實現時留有一定的余地,通常建議在加約束的時候,將時鐘額外增加10 %,有些設計甚至增加更多,或者用更大的連線模型,以留有足夠的余地。一些設計在加約束時,增加了如此多的額外約束[3],以至于雖然設計在后端實現的時候滿足了時序收斂的要求,但是卻以犧牲面積為代價,而且有些可能是不必要的。
??? 現在的工具可以明確需要在哪些關鍵路徑上加額外的約束,以使這些路徑在后端實現時能夠滿足時序的要求,而不用將整個時鐘都加額外的約束。如果將時鐘加額外的約束,將會使設計中使用這個時鐘的電路都被不必要的優化,包括那些在后端實現的時候時序已經收斂的電路。
??? 在本方法的流程里,定義了實際需要的時鐘,不是將整個時鐘加額外的約束,而是只針對關鍵路徑加額外約束,如圖1所示。
?
??? 不可否認,這個流程仍然需要反復,但是通過這個流程綜合產生的網表能夠得到更好的時序收斂結果。因為在后端實現中的關鍵路徑在綜合時被加了更快的約束,而非關鍵路徑沒有加額外約束,從而減少了芯片面積,降低了成本。
4 重視寄存器與寄存器之間路徑的最優化
??? 通常,設計中的輸入輸出(I/O)成為整個芯片工作頻率的瓶頸,而核心的邏輯能在更快的頻率上工作。所以在綜合時,放松加在I/O上的約束,使綜合工具能夠專注在寄存器到寄存器路徑的優化。待路徑優化滿足了設計的需要,再關注輸入輸出路徑,或者對輸入輸出路徑做一些結構的微調以滿足產品的需求。通過這種方法,可以使綜合工具先優化寄存器到寄存器的路徑,然后再優化輸入輸出路徑,達到設計要求。
5 利用電容及電阻的物理信息
??? 傳統的基于輸出連線負載模型不能很好地模擬連線間的延遲。如果設計的大小在優化時發生了變化,即使是定制的連線負載模型也是低效的,因為它是“靜態”的。現在的綜合工具可以讀入物理庫文件,可以更好地模擬,并動態地調整物理連線上的時序。例如,Cadence公司的RTL Compiler在綜合的時候,利用布局評估器(PLE)使用物理信息來計算線延時[2]。雖然PLE沒有芯片的物理布局布線信息,但是可以用讀入的LEF文件,或者電容文件估算出線延時。在綜合時,利用物理信息來估算連線的電容、電阻以計算線延時比用傳統的連線負載模型更準確、更高效,而且也容易使用。
6? 設置正確的時序特例
??? 時序特例(timing exception)是綜合工具默認的單周期時序行為的特例。對于設計中每一個不符合默認時序特征的電路,都要設置聲明時序特例,以使綜合工具不去優化這條電路,或用更寬松的約束去優化。
??? 時序特例共3種:電路延遲、多周期電路和虛假電路。多周期電路是指需要超過1個時鐘的時間來傳送數據,需要對這個傳送間隔聲明1個有限個數的時鐘周期。電路延遲特例是指電路的延遲需要滿足具體說明的延遲[4]。電路存在于設計中,但是不會被激活,稱為功能虛假電路。綜合工具會優化這些功能虛假電路以滿足時序的要求。綜合工具是基于靜態時序分析的工具。靜態時序是基于連接關系,而不是功能。不管這些路徑是否會在芯片中真的用到,時序分析都會基于連接關系顯示出這些關鍵路徑。可以通過聲明路徑是功能虛假電路來消除很多不需要的關鍵路徑。越早清除這些虛假路徑,綜合工具就能越早地優化那些真正的路徑,也就能更有效地達到時序收斂。所以,設置正確的、有效的時序特例至關重要。
7 允許新的時序優化
??? 新的時序優化技術可以綜合產生出更好的電路,但是通常會有邏輯等效性檢查的問題。為了避免邏輯等效性檢查題,應盡量使用最新版本的邏輯等效性檢查工具,或者使用與綜合工具相對應版本的邏輯等效性檢查工具。邏輯等效性檢查工具在理解綜合優化上已經取得了很大的進步。邏輯檢查工具現在可以驗證很多綜合優化,比如寄存器重新調整(register retiming)、邊界優化、數據分支優化和時序優化等。不要因為這些新的時序優化技術可能產生的邏輯等效性檢查的問題就關掉這些優化,這樣會影響綜合出的電路性能。
8 不要限制對庫單元的選擇
??? 在傳統的綜合中,為了得到更好的網表結構,往往限制對庫單元(library cell)的選擇。而現在的綜合工具是基于所加的約束條件和目標單元庫來產生邏輯電路。因此,可供選擇的庫單元越豐富,綜合工具就越可能優化電路,從而平衡電路的面積、速度和功耗,可以給后端提供更好的電路網表。
本文闡述了多種應用在SoC芯片設計中的綜合技術,應用這些技術和規則,可以更加充分地利用現代綜合工具和軟硬件環境,從而能在更短的時間內,使綜合產生的網表電路速度更快、面積更小、功耗更低,后端實現時也能更快地進行時序收斂,從而滿足芯片設計的要求。今后將繼續優化本文介紹的綜合技術,跟蹤使用新的綜合工具,以優化本文的芯片設計。
參考文獻
[1]?Synopsys Inc. Design compiler reference manual. Release 2006.06, Mountain View, CA, 2006.
[2]?Cadence Inc. RTL compiler reference manual. Release 6.2.2,? Seely Ave., San Jose, CA, 2007.
[3]?YU Xin You, HONG Peng, YAN Hui Yang. Signal integrity timing closure of million gates SOC platform. IEEE ASICON, 2005.
[4]?JUNG J Y, KIM T. Timing variation-aware high-level synthesis IEEE Computer-Aided Design, 2007.