轉EDI時鍾樹人工干預的方法


 

 

****************時鍾樹的約束格式*****************

原來的CTS用ctstch文件作為約束,而CCOpt Native直接用命令進行約束,命令基本都能跟ctstch對應上。比如原來的AutoCTSRootPin對應create_ccopt_clock_tree,等等。

無論是原來的CTS還是CCOpt Native,Encounter都提供了sdc轉時鍾樹約束的功能,不過用它做出來的時鍾樹質量基本是娛樂級的...還是自己重新寫一套約束比較好。

*********對需要減小insertion delay寄存器的約束*********

對某些關鍵路徑的寄存器,或是為了優化reg2out,或是為了減小OCV沖擊,我們會希望它們的insertion delay盡可能小。在原來的CTS中,我們會通過定義正的MacroModel來將這些寄存器提前,但定義的值很難把握,稍有不慎就會使主時鍾樹被額外地推后。在CCOpt Native中,可以對這些寄存器創建一個Skew Group,把這個Skew Group的target_insertion_delay設為一個很小的值,工具會自動把這些寄存器提到最前。

*********對需要增加insertion delay寄存器的約束*********

在原來的CTS中,我們會定義負的MacroModel來將這些寄存器推后。在CCOpt Native中,同樣是對這些寄存器創建一個Skew Group,把這個Skew Group的target_insertion_delay設為你期望的推后值即可。

與原先相比的改進是,CCOpt Native中可以定義Delay Cell用來推后時鍾(當然, 需要庫里有上下沿平衡的Delay Cell),以節省面積和功耗。原來的CTS中要想工具自動調用Delay Cell是很困難的。

**************隔離非關鍵寄存器的約束***************

在原來的CTS中,我們會把非關鍵寄存器丟到LeafPinGroup中,並通過一個小的ExcludeBuffer進行隔離,以防止對非關鍵寄存器的平衡降低主時鍾樹的性能。但有個局限是,一個設計中的寄存器通常並不能非黑即白地划分為“關鍵”和“非關鍵”,還有一些“次關鍵”寄存器,我們既不希望它們拖慢主時鍾樹,又不希望這些寄存器被太小的ExcludeBuffer過多地推后。問題是,ExcludeBuffer只能定義一個Cell,而且一旦被丟進LeafPinGroup,各項優化的優先級都會被降到最低。

在CCOpt Native中,只需對關鍵/次關鍵/非關鍵寄存器創建各自的Skew Group,設置好期望的insertion delay值即可。當開啟advanced_insertion_delay_optimization和recluster_to_reduce_power兩個變量后,工具會自動對“次關鍵”寄存器用大Buffer/Inverter隔離,“非關鍵”寄存器用小Buffer/Inverter隔離,非常智能。

*********手動設置target insertion delay的意義**********

CCOpt Native在智能度大大改善的同時,還提供了相當多的手工約束命令,乍一看甚是嚇人...為什么工具可以全自動完成,還要手動設置insertion delay,這要從CCOpt Native的流程來看。CCOpt Native的流程大致可描述為initial cluster -> optDesign -> adjust skew -> optDesign -> adjust skew...(循環)。如果不手動設置target insertion delay,那工具在initial cluster時會把時鍾做成完全平衡的,這時跑optDesign會把datapath往錯誤的方向優化,很可能后面就回不來了...手動設置target insertion delay后,initial cluster就會把時鍾做成你設置的skew值,第二步的optDesign就會收斂得非常快了。

手動設置的target insertion delay不需要特別精確,因為后面的adjust skew步驟里工具會自動幫你Fine Tune。

***************對Debug的一點Tips*****************

如果你剛剛接觸CCOpt Native,那么建議打開ccopt_worst_chAIn_report_timing_too變量,在每一輪optDesign之后都會報一個timeDesign出來,這時候就可以進行Debug了,而不必等到整個CCOpt Native跑完。

******************QoR的改變********************

在以前CTS的流程中,preCTS的時序約束通常需要比postCTS更緊,收緊的值約等於時鍾樹skew值,因為skew可能會劣化Timing。

在CCOpt Native中,postCTS的約束甚至可以比preCTS再緊一點,因為所有的skew都是有益的。這確實是非常令人驚訝的QoR提升...

(以preCTS時序約束中Clock Latency已反標為前提)

*****************一點改進建議********************

CCOpt Native這種針對Critical Chain的優化,是不能應用於同步鏈的(如果同步鏈的skew被借出去就會損MTBF,雖然Timing看起來是Clean的)。希望后續有方便點的方法來照顧同步鏈...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM