ICG(Intergrated Clock Gating)作為low power的設計手法之一,已經在實際中得到廣泛應用。它們能夠在某些時候將某些clock關斷從而達到降低功耗的目的。然而從時序的角度,經常會發生ICG的setup難以收斂的情況。
為什么會出現這種情況呢?
下圖展示了一種簡單的帶ICG的clock tree結構:
一般每個ICG會控制一個或多個DFF,通過某個DFF傳遞過來的控制信號控制ICG的開啟或者關斷。
然而,在CTS(clock tree synthesis)工具或者命令綜合時鍾樹的時候,ICG不會被看作sink因此並不會作為balance對象,因此就會出現如下這種結果:
由上圖可以看出,在分析setup時:
launck clk delay = a + b
capture clk delay = a
因此,對於ICG的setup path,天然存在clock skew:b ,而skew的大小完全取決於ICG距離sink DFF有多遠。
在出現setup violation的ICG path上,比較多見的就是因為ICG和sink DFF的clock之間存在較多邏輯或者物理上距離較遠,從而導致skew較大而發生setup violation。
針對這種現象,在實際設計中,我們可能會考慮將出現setup violation的ICG盡量放在sin DFF附近以減小skew。與此同時,EDA工具也提供命令來收緊ICG的timing constraint來迫使工具來優化這些path,比如set_clock_gating_check命令。