時鐘樹綜合
在數(shù)字集成電路設計中,時鐘信號是數(shù)據(jù)傳輸?shù)幕荆鼘τ谕綌?shù)字系統(tǒng)的功能、性能和穩(wěn)定性起決定性作用,所以時鐘信號的特性及其分配網(wǎng)絡至關重要。時鐘信號通常是整個芯片中有最大扇出,最長距離,最高速度的信號,其必須保證在各種極端條件下,時序均能滿足要求,而時鐘樹綜合作為后端設計流程中的關鍵步驟,提供了對時鐘信號的平衡和分配方法。
時鐘樹綜合(clock tree synthesis)是通過建立buffer/inverter的時鐘網(wǎng)絡去平衡時鐘路徑的延遲。其本質(zhì)是通過減小各個時鐘路徑上的延遲差異,以達到時序收斂的目的。
時鐘信號
時鐘信號的物理特性有很多,時鐘周期(頻率)、時鐘遲滯(latency)和時鐘的不確定性(uncertainty)是三個必不可少的參數(shù)。
周期為時鐘波形中相鄰上升沿或下降沿之間的時間。在設計中,時鐘用create_clock和create_generated_clock命令來定義。例如,定義周期20ns的時鐘命令為create_clock -period 20 CLK。定義clk2是clk1的二分頻時鐘的命令為create_generated_clock -name clk2 -source clk1 -divide_by 2 FF1/Q。
時鐘遲滯(latency)又稱為時鐘延遲,它包括兩個部分,時鐘源延遲(clock source latency),即時鐘源到當前模塊的input port所需時間,如下圖紅線所示。時鐘網(wǎng)絡延遲(clock network latency),即時鐘從input port到寄存器CK pin所需的時間,如下圖綠線所示。時鐘網(wǎng)絡延遲也就是時鐘樹延遲。在理想時鐘的情況下,假定時鐘網(wǎng)絡延遲為零。對于上述兩種延遲的定義,可以通過不同的命令加以區(qū)分。
例如,set_clock_latency 2.0 -source [get_clocks {cpu_clk}],該命令定義了時鐘源延遲;set_clock_latency 2.0 [get_clocks {cpu_clk}],該命令定義了時鐘網(wǎng)絡延遲,兩者可通過-source區(qū)分。

時鐘不確定性(uncertainty)又稱為時鐘抖動(jitter),如下圖所示,它取決于時鐘發(fā)生器的結(jié)構(gòu),所以時鐘抖動是先天存在的,無法通過時鐘樹綜合進行優(yōu)化,只能考慮其影響。通常將時鐘不確定性設置得較大,從而給時鐘樹偏差(skew)預留一定的范圍。在時鐘樹綜合之后,可以將該值設置得較小,一般視工藝情況而定??赏ㄟ^以下命令設置:set_clock_uncertainty 0.3 [get_clock {*}]。

時鐘信號偏差(skew)指同一時鐘到達該時鐘域內(nèi)不同寄存器CK pin之間的時間偏差。時鐘信號偏差是衡量時鐘樹性能的重要參數(shù),而時鐘樹綜合的目的就是為了減少偏差。
標準設計約束SDC文件
SDC文件是由一組命令組成的設計約束的標準,它的主要內(nèi)容為時序約束(timing constraints),因此它也被稱為時序約束文件。
簡單介紹一下SDC文件中的幾類常用約束:
1.clock相關約束
包括周期period,占空比duty cycle,時鐘遲滯latency,時鐘不確定性uncertainty等;
2.IO端口約束
包括輸入延遲input_delay,輸出延遲output_delay,輸入驅(qū)動input_transition,drive,driving_cell,輸出負載load等;
3.邏輯設計規(guī)則
包括最大轉(zhuǎn)換時間max_transition,最大扇出max_fanout,最大負載電容max_capacitance等;
4.時序特例
包括false_path,多周期路徑multicycle_path等。
時鐘樹綜合基礎和策略
做時鐘樹綜合時需要告訴ICC工具buffer和inverter長到哪里為止,所以需要定義幾類pin。1.stop pinBuffer和inverter tree長到哪里為止,ICC工具默認所有的pin為stop pin;2.float pin告訴工具該pin后還有一段delay,從而使工具在balance時會考慮到float pin后的delay;3.ignore pin工具只會在該pin上做buffer和inverter tree,但不會去做任何的balance;4.non-stop pin工具不會認為這是tree的終點,會穿過該pin繼續(xù)向前長tree。
在SoC芯片設計中,時鐘數(shù)量往往非常龐大,結(jié)構(gòu)復雜,做時鐘樹時需要一定的策略。下面介紹幾種比較常見的例子,自我交叉(self-reconvergent)和相互交叉(crossover),OCV與CPPR。
1、自我交叉(self-reconvergent)
如下圖所示,從PLL出來的時鐘,經(jīng)過不同的處理(分頻)然后通過一個MUX匯集到一起,在這種情況下,我們可先綜合balance右邊tree部分的skew,再balance左邊circuit1和circuit2的skew,從而balance掉整個時鐘樹的skew。

2、相互交叉(crossover)
如下圖,tree3是兩個不同時鐘所選擇后的公共部分,在做時鐘樹綜合時,可首先綜合tree3,balance掉tree3的skew,然后對tree1進行綜合,同時根據(jù)tree3的結(jié)果balance掉tree1的skew。最后根據(jù)tree3的結(jié)果,balance掉tree2的skew。

3、OCV與CPPR在時鐘樹綜合中的應用
片上誤差OCV對時序路徑的延時偏差(skew)有著更嚴格的要求。因此在做時鐘樹時需要考慮OCV的影響。如下圖所示。左側(cè)結(jié)構(gòu)時鐘的公共路徑(common path)更多,在做時序分析時,因為公共路徑的悲觀消除(CPPR),時序更加容易收斂。

時鐘樹綜合的評論 (共 條)
