在開始之前有兩件事想征求一下大家的意見: 最近有同學反映文章中很多專業詞匯不太明白,因此想開一個系列專門講一些后端的基礎知識和詞匯,畢竟后端的知識頗為繁雜,對入門者極為不利。因此如果大家有不懂的知識盡管留言,我會以適當的形式統一講解。 在我們已經決定了如何進行時鐘樹綜合后,就需要對EDA工具進行一系列的設置來使其能夠忠實地反應我們的策略。因此,今天我們談談CTS的設置。 有人可能擔心不同的工具中CTS的方法是否會有不同。以我接觸過幾種主要的工具的經驗來看,雖然某些設置的叫法可能不同,但是其本質并沒有變化。比如Innovus的CCOpt中將這些設置稱為CTS spec,但是其本質內容大同小異。 在具體討論CTS設置之前,我們首先需要了解工具在CTS階段的行為到底是什么。換句話說,所謂時鐘樹綜合,到底是在綜合什么東西呢? 時鐘樹綜合階段,工具首先對clock line上的cell/net進行DRV優化,主要包括max_transition, max_capacitance, max_fanout, max_net_length等約束;在此之后,會分別對每個clock的latency和skew進行優化,也就是盡量縮短每個clock的latency并減小sink之間的skew;最后,如果有clock之間的latency需要balance,還會將這些clock的latency盡量做平。 上述大部分是工具的自發行為,但我們依然可以通過各種設置來調整這些行為。下面我們將一一對CTS的基本設置進行說明和討論。 Target Skew:clock內部或clock之間需要實現的目標skew值。
Clock Max Transition: clock line上cell的最大transition/slew值。
CTS exceptions:精確控制部分時鐘樹的設置。在此我們遵從ICC的術語,在ICC2中某些術語已經棄用,但仍能找到對應的設置方法。
exclude pin : 將某些pin/port從balance對象中移除,否則CTS將默認balance所有sink;
float pin : 用于對某些sink設置useful skew。用法為在sink的clock pin上加上一個正的或者負的delay,從而使工具在計算latency的時候考慮到這些delay而把clock tree做長或者做短。
non-stop pin : 工具CTS時可能會在某些地方停住,此時我們需要告訴工具穿過這些地方 繼續向前,比如分頻DFF。在ICC2中取消了原來在ICC中存在的non-stop pin設置,改為統一在sdc中通過create_generate_clock來實現這一功能。 CTS cells : 控制clock line上使用cell的種類。
Clock Routing Rules : 控制時鐘樹上net的繞線規則。包括金屬層、線寬、線間距、是否需要shielding等(NDR:Non-Default Rule)。
上述routing rule還有很多其他option,大家可以在實際使用中慢慢體會。 設置balance groups。
至此,CTS的基本設置就算告一段落了。其實在ICC2中還有很多其他的option和命令來微調CTS,但是對于clock不太復雜的design,上述設置完全夠用了。 除了保證CTS的基本質量之外,對于某些特殊design或者先進工藝,CTS的EM以及Power問題也是我們關注的重點。尤其是在傳統CTS之外的一些特殊時鐘樹,比如H-tree, fishbone等,都是一些很有意思的話題。希望以后我們有機會能夠共同探討。 在下次CTS系列的最后一片文章中,我將會和大家聊聊如何調用工具命令跑CTS以及如何查看CTS的結果,同時會涉及如何debug一些CTS的常見問題,敬請關注。 |
|