Clock TreeSynthesis,時(shí)鐘樹(shù)綜合,簡(jiǎn)稱CTS。時(shí)鐘樹(shù)綜合就是建立一個(gè)時(shí)鐘網(wǎng)絡(luò),使時(shí)鐘信號(hào)能夠傳遞到各個(gè)時(shí)序器件。CTS是布局之后相當(dāng)重要的一個(gè)步驟,在現(xiàn)如今集成了上億個(gè)晶體管的芯片上,如何設(shè)計(jì)一個(gè)合理的時(shí)鐘網(wǎng)絡(luò),是一件非常具有挑戰(zhàn)性的事情。個(gè)人認(rèn)為相比于place和route更依賴工具的能力,CTS是需要更多的人為干預(yù)。通常需要人工做的事情,那都是比較難弄的。在深入學(xué)習(xí)如何做好時(shí)鐘樹(shù)之前,以下這些概念和問(wèn)題我們首先得先弄明白:
What’s the purpose ofCTS?
現(xiàn)代人做事情講究先明確目標(biāo),才能未雨綢繆。那CTS的目標(biāo)是什么?這是一個(gè)開(kāi)放性的問(wèn)題,每個(gè)人的答案都不盡相同。往大的講就是建立一個(gè)合理的時(shí)鐘網(wǎng)絡(luò),往小的方向講,個(gè)人認(rèn)為可以分為以下兩點(diǎn):
1)保持時(shí)鐘信號(hào)完整性
2)平衡時(shí)鐘樹(shù)
首先看第一點(diǎn),“保持時(shí)鐘信號(hào)完整性”,這是最基本,也最重要的一點(diǎn)。那時(shí)鐘信號(hào)的完整性包括哪些東西呢?時(shí)鐘的傳播延遲(Latency),時(shí)鐘偏差(Skew),時(shí)鐘轉(zhuǎn)換時(shí)間(transition),時(shí)鐘不確定性( uncertainy),時(shí)鐘的級(jí)數(shù)…..這些參數(shù)構(gòu)成了一個(gè)完整的時(shí)鐘樹(shù),也是衡量時(shí)鐘樹(shù)性能的重要指標(biāo)。并不是單一地認(rèn)為這些參數(shù)越小越好,有利必有弊,整個(gè)PR流程中沒(méi)有絕對(duì)的概念,而如何綜合考慮這些參數(shù),得出一個(gè)最優(yōu)的組合,這才是CTS的精髓所在。那下面我來(lái)分別介紹一下這些概念。
時(shí)鐘的傳播延遲(Latency)
時(shí)鐘傳播延遲Latency,通常也被稱為插入延遲(insertiondelay)。主要指從Clock源到時(shí)序組件Clock輸入端的延遲時(shí)間。它可以分為兩個(gè)部分,時(shí)鐘源插入延遲(sourcelatency)和時(shí)鐘網(wǎng)絡(luò)延遲(networklatency)
source latency:主要指從clock source端到clock定義端的延遲,即是時(shí)鐘源(例如PLL)到當(dāng)前芯片時(shí)鐘根節(jié)點(diǎn)(clock root pin)之間的延遲。
network latency:主要指從clock定義端到時(shí)序器件的clock pin端的延遲。
以下兩張圖分別定義了片上(on chip)和片外(off chip)中clock latency的描述
我們可以用如下命令來(lái)定義描述clock latency:
#specify sourcelatency
set_clock_latency1.9 -source [get_clocks SYS_CLK]
#specify clocklatency
set_clock_latency0.8 [get_clocks CLK_CONFIG]
那latency值有什么用呢?其實(shí)這相當(dāng)于一個(gè)target值,CTS的engine會(huì)根據(jù)你設(shè)置的latency值來(lái)插入buffer(當(dāng)然只是對(duì)network latency操作),做出一個(gè)接近于你設(shè)定的值,可能多一點(diǎn),也可能少一點(diǎn)。latency值的大小直接影響著clock skew的計(jì)算和固定。因?yàn)槲覀兊臅r(shí)鐘樹(shù)是以平衡為目的,假設(shè)你對(duì)一個(gè)root和sink設(shè)置了1ns的latency值,那么對(duì)另外的幾個(gè)sink來(lái)說(shuō),就算你沒(méi)有給定latency值,CTS為了得到較小的skew,也會(huì)將另外的幾個(gè)sink做成1ns的latency。過(guò)大的latency值會(huì)受到OCV和PVT等因素的影響較大(因?yàn)橛?/span>time derate的存在)。
時(shí)鐘的偏差(skew)
時(shí)鐘偏差(skew),這是CTS中相當(dāng)重要的一個(gè)概念。在CTS中,由于時(shí)鐘到每個(gè)寄存器的路徑延遲不一樣,造成信號(hào)到達(dá) clockpin 的時(shí)間也不一樣,寄存器也不會(huì)同時(shí)翻轉(zhuǎn)。 Skew 的定義就是最長(zhǎng)路徑延遲減去最短路徑延遲的值。一直以來(lái),Skew都是衡量時(shí)鐘樹(shù)性能的重要參數(shù),CTS的目的就是為了減小skew。
Skew的類型分為很多種,
根據(jù)clock和data path的方向,skew可以分為positive skew和negative skew。如下圖所示:
對(duì)于positive skew,clock和data path在相同方向上。反之對(duì)negative skew來(lái)說(shuō),clock和data path在相反方向上。那它們對(duì)我們的design有什么影響呢?我們來(lái)看一下setup和hold的計(jì)算公式(這個(gè)公式大家應(yīng)該很熟悉吧):
我們可以得到以下結(jié)果,
對(duì)于positive skew來(lái)說(shuō),它可以減少T的時(shí)間,相當(dāng)于提升芯片的performace。但是它的hold時(shí)間會(huì)變得更加難以滿足
對(duì)于negative skew來(lái)說(shuō),它的hold時(shí)間更加容易滿足,取而代之的是,它會(huì)降低芯片的性能。
還有另外一種skew的分類方法,是我們更為常見(jiàn)的,根據(jù)時(shí)鐘域以及路徑關(guān)系, skew 可以分為 global skew , local skew , interclock skew。
Global skew 是指,同一時(shí)鐘域,任意兩個(gè)路徑的最大 skew ,如下圖所示。CTS時(shí),工具更關(guān)注的是global skew, 會(huì)盡可能地將global skew做小
Local skew 是指,同一時(shí)鐘域,任意兩個(gè)有邏輯關(guān)聯(lián)關(guān)系的路徑最大 skew ,如下圖所示,我們?cè)诜治?/span>timing的時(shí)候,更多地是關(guān)注local skew
interClock skew 是指,不同時(shí)鐘域之間路徑的最大 skew,如下圖所示:
另外還有一種比較特使的skew就是現(xiàn)如今用得較多的useful skew,它也是二代CTS工具這么紅火的一個(gè)特色。大概說(shuō)一下useful skew的概念。
如下圖:時(shí)鐘周期為 10ns ,各時(shí)鐘路徑延遲如下:可以看到有一條路徑的 slack 為 -1ns ,說(shuō)明這條路徑違規(guī)。可以看到與這條路徑相關(guān)的 skew 是 T3-T2= -1ns 。
下面我們利用 usefulskew 向前面一個(gè) slack 比較充裕的路徑(slack=2ns)借點(diǎn) time ,來(lái)修正現(xiàn)在這條路徑。如下圖:
這就是 usefulskew 的作用,可以向前,或者向后借time來(lái)修正 violation。
限于篇幅所限,關(guān)于skew,我先簡(jiǎn)單介紹這些概念,許多深入的skew探討后面我會(huì)專門(mén)寫(xiě)一篇文章來(lái)介紹它。
時(shí)鐘轉(zhuǎn)換時(shí)間(transition time)
時(shí)鐘轉(zhuǎn)換時(shí)間clock transition time ,也稱為clock slew。通常是指電壓從10%VDD上升到90%VDD所需要的時(shí)間,或者是從90%VDD下降到10%VDD所需要的時(shí)間,上升和下降時(shí)間過(guò)長(zhǎng)意味著電路的速度很慢。如下圖所示
在sdc中,用以下命令來(lái)限制slew大小
set_max_transition0.1 -clock_path[all_clocks]
對(duì)CTS來(lái)說(shuō),這也是一個(gè)target值,當(dāng)你設(shè)定了一個(gè)slew target后,CTS engine會(huì)通過(guò)插入buffer或者upsize等操作,盡可能地去滿足整個(gè)target值。當(dāng)然,slew也不是越小越好,過(guò)小的slew會(huì)導(dǎo)致CTS階段在clock path上插入過(guò)多的buffer,從而影響到skew的balance以及功耗和面積。
時(shí)鐘不確定性(clock uncertainty)
定義了Clock信號(hào)到時(shí)序器件的Clock端可能早到或晚到的時(shí)間。主要是用來(lái)降低時(shí)鐘抖動(dòng)jitter對(duì)有效時(shí)鐘周期的影響。值得注意的是,在setup check中,clock uncertainty是代表著降低了時(shí)鐘的有效周期;而在hold check中,clock uncertainty是代表著hold check所需要滿足的額外margin。
來(lái)看下面一條reg2reg path. 對(duì)照著如下時(shí)鐘波形圖??梢詫?xiě)出下面的約束。
set_clock_uncertainty-fromVIRTUAL_SYS_CLK -to SYS_CLK -hold 0.05
set_clock_uncertainty -from VIRTUAL_SYS_CLK -to SYS_CLK -setup 0.3
set_clock_uncertainty -from SYS_CLK -to CFG_CLK -hold 0.05
set_clock_uncertainty -from SYS_CLK -to CFG_CLK -setup 0.1
在pre-CTS的時(shí)候,我們將時(shí)鐘的不確定性設(shè)定為target的skew和jitter值之和來(lái)模擬真實(shí)的時(shí)鐘;而post-CTS之后,時(shí)鐘樹(shù)propagate delay已經(jīng)確定,skew真實(shí)存在,所以uncertainty就是時(shí)鐘的真實(shí)抖動(dòng)值。因此preCTS的target skew不能設(shè)置的太大或者太小,這樣會(huì)造成preCTS和postCTS的correlation不好??偨Y(jié)一下:
在pre-CTS中,
setup的clock uncertainty = jitter + clock treeskew
hold的clock uncertainty = clock tree skew
在post-CTS中,
setup的clock uncertainty = jitter
hold的clock uncertainty = 0
時(shí)鐘樹(shù)級(jí)數(shù)
時(shí)鐘樹(shù)其實(shí)是由buffer一級(jí)一級(jí)串行級(jí)聯(lián)下去組成,每一個(gè)分結(jié)點(diǎn)就化分成一級(jí),如下圖所示
通常來(lái)說(shuō),我們期望時(shí)鐘樹(shù)的級(jí)數(shù)越少越好,因?yàn)檫@樣tree上的common path最長(zhǎng),受到OCV和PVT因素的影響也最小,時(shí)鐘的性能也最好。但是,這樣情況下tree很難去生長(zhǎng)完成,并且會(huì)導(dǎo)致過(guò)多的fanout,導(dǎo)致負(fù)載過(guò)大,延遲變差。因此這也是一個(gè)trade off 的過(guò)程。
至于第二點(diǎn),“Balance clock sinks”,CTS的目的始終是Balanceclock sinks。至于特殊的useful skew是會(huì)考慮到timing的情況下,做不到balance,這個(gè)放在以后單獨(dú)開(kāi)辟一章介紹。較小的skew值會(huì)得到較為平衡的時(shí)鐘樹(shù),性能也越好,有利于時(shí)序收斂。
這里面有幾個(gè)關(guān)于clock tree經(jīng)常用的名詞大家需要了解下
root pin指的是時(shí)鐘的產(chǎn)生點(diǎn),通常在create_clock定義
sink pin指的是時(shí)鐘所到達(dá)的最后寄存器的ckpin
leaf net指的是時(shí)鐘到達(dá)寄存器和它前一級(jí)buffer之間的net
trunk net指的是除去leafnet后剩余所有的net我們都稱之為trunk,如下圖所示
當(dāng)然還有一種叫top net,是人為自定義的。我們可以把fanout超過(guò)指定數(shù)目的net,定義為top net. 但是CTS中的fanout和傳統(tǒng)的fanout定義不一樣,相比傳統(tǒng)的只trace后面一級(jí)相比,它會(huì)一直trace最后一級(jí)。top net的存在可以讓我們多一種方式去查看tree.
How to judge a clocktree?
最后一個(gè)問(wèn)題,我們?nèi)绾稳ピu(píng)判一個(gè)clock tree. 這個(gè)問(wèn)題留給大家,相信理解完前面的概念,大家應(yīng)該有所思路了吧~~小編認(rèn)為,不管tree怎么樣,最終我們更關(guān)注于timing.
聯(lián)系客服