在使用物理實現工具進行CTS時,我們使用create_clock命令定義時鐘源(clock root),然後工具可以自動trace所有其扇出的clock sinks
如果一個時鐘具有generated clock,工具可以從generated clock trace到相應的master clock ,當然這是在正確定義generated clock的情況下。
可以使用check_clock_tree命令來檢查master clock是否正確定義。
這裡就體現了在做時鐘樹綜合時,工程師和CTS工具各自的角色。
工程師正確定義crate_clock,正確定義generated clock
EDA工具trace相應的sinks。工具操作正確的前提就是工程師對設計需求的正確定義。
時鐘樹綜合不僅僅是一個cts_opt可以搞定的,工具只是起到了加速優化的作用。
錯誤地定義master clock和generated clock會導致糟糕的CTS結果,即工具不會balance master clock和generated clock(清晰地指定設計需求,EDA工具才能實現「自動化」)。
對於下圖,如果genclk2定義clk2作為master clock,則在時鐘樹綜合時genclk2和clk2之間會進行balance。
如果在時鐘路徑上還有其他時鐘門控邏輯,例如XOR或XNOR門,可以使用set_case_analysis命令指定CTS模式
icc_shell> set_case_analysis 0 U0/B
當然時鐘樹綜合的設計需求是一個很大的詞,一個設計的時鐘需求僅使用create_clock和create_generated_clock是遠遠不夠的。
時鐘路徑有兩種Endpoints:
•Stoppins
Stop pins(sink pins)是時鐘樹的端點,在時鐘樹綜合時會進行DRC優化和(skew、insertion delay)優化
•Excludepins
Exclude pins是從時鐘樹(skew、insertiondelay)優化中排除的端點(因為設計上不需要),只進行DRC優化。
這時進行時鐘樹綜合的工程師就需要完成一項工作,即指定Exclude pins。
這時優秀並且「懶惰」的工程師們會想「這其中哪些苦力是工具可以做的」,於是就有了implicit Exclude pins的概念。(工具隱式定義的Exclude pins)
IC Compiler工具從clock source向後trace,自動確定implicit stop pins和implicit exclude pins(自動確定的,所以稱為implicit)。
generated clock和integrated clock-gating (ICG) cells都被工具定義為implicit nonstop pins
IC Compiler工具將以下時鐘端點定義為implicit exclude pins(即工具自動排除):
•另一個時鐘的clock source引腳
•時序單元的非時鐘引腳
•多路復用器選擇引腳
•三態使能引腳
•輸出埠
•錯誤定義的時鐘引腳,既不存在時鐘時序
到這裡,我們定義了clock source,並通過工具自動識別了implicit stop pins、implicit exclude pins和implicit nonstop pins
在定義時鐘需求階段,工具已經盡力了。還有另外其他的需求就需要工程師顯式指定了。
如果clock source是輸入埠,還必須準確地指定輸入埠的驅動單元。
時鐘驅動單元不會影響邏輯綜合,因為邏輯綜合使用理想時鐘。
但是,時鐘驅動單元會影響時鐘樹綜合,驅動單元讓工具插入更多的buffer,以滿足DRC(maximum transition time and maximum capacitance)。
如果不指定驅動單元,則工具會默認clock source埠的驅動能力無窮大,導致實際晶片驅動能力不足。
icc_shell> set_driving_cell -lib_cellmylib/CLKBUF [get_ports CLK1]
或者
icc_shell> set_input_transition -rise0.3 [get_ports CLK1]icc_shell> set_input_transition -fall0.2 [get_ports CLK1]工具加速了設計進程,提高工作效率,但是事實上工程師的工作強度和加班時長不會變少。
可以說,工具搶走了簡單的活,留下了難啃的骨頭;
也可以說,由於工具,你可以專注在更重要的事情上。