電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 171|回復(fù): 0
收起左側(cè)

【芯片設(shè)計】從RTL到GDS(八):時鐘樹綜合

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
匿名  發(fā)表于 2024-10-16 12:20:00 回帖獎勵 |倒序瀏覽 |閱讀模式
在上一篇文章中,我們已經(jīng)了解了布局這個概念。在完成了芯片的布局以后,我們才知道每個Instance放在哪里,也才知道每個Flip-Flop的具體位置。時鐘樹綜合需要知道每個觸發(fā)器的物理位置,以便于計算到達(dá)每個觸發(fā)器的最佳路徑和插入適當(dāng)?shù)木彌_器。布局階段完成后,所有單元都有了確定的坐標(biāo),這為時鐘樹綜合提供了所需的信息。此外布局階段不僅確定了單元的位置,還確定了大部分連線的布線。
時鐘樹綜合需要考慮現(xiàn)有的連線情況,以確保時鐘網(wǎng)絡(luò)的引入不會與現(xiàn)有的信號線沖突。在完成時鐘樹綜合以后,下一步將會完成進(jìn)一步的布線。本篇文章我們將重點(diǎn)放在時鐘樹綜合上。

在之前的階段中,我們都認(rèn)為時鐘是理想的,現(xiàn)在既然所有的時序單元都已經(jīng)放好了,我們按理說要給這些時序單元提供真正的時鐘信號,才能讓我們的分析變得更加準(zhǔn)確。

一個非常簡單的辦法,直接用一個時鐘作為Source,連接到所有的時序單元的Clock接口?梢詥?
顯然不可以,這種辦法沒有考慮Timing、Power、Area等等一系列的問題。最顯而易見的就是沒有考慮時序,假設(shè)兩個時序單元模塊物理距離比較遠(yuǎn),那么時鐘到達(dá)的時間顯然也不一樣。目前的電路都是高速電路,一個時鐘周期可能1ns都不到,從同一源頭出發(fā),這個時間信號可能才走到芯片的一半呢!
既然問題沒有這么簡單,那么我們就逐一考慮這一系列的問題,將這些問題解決了,大概也就清楚了時鐘樹綜合到底是在做什么。


1、Implications of Clocking

回顧一下靜態(tài)時序分析的基本概念,我們的時鐘約束有兩大約束,分別稱為Max Delay約束和Min Delay約束。其本質(zhì)都是評估數(shù)據(jù)信號到達(dá)觸發(fā)器D端和時鐘信號到達(dá)觸發(fā)器Clock端的時間關(guān)系。

之前我們的分析相對簡單,考慮理想的時鐘信號。大家有沒有想過時鐘信號不是那么理想的情況?比如時鐘信號到達(dá)兩個寄存器的時刻不一樣。這就會引入額外的參數(shù),這個概念我們稱之為Clock Skew。同樣對時序造成影響的還有Clock Jitter。
Clock Skew是一個空間概念,反映的是不同寄存器之間的時鐘到達(dá)關(guān)系。Clock Jitter則是相對于同一個寄存器而言,由于時鐘信號的擾動之類的影響,其不同的時鐘周期持續(xù)時間不一樣的現(xiàn)象。此外時鐘的上升和下降,顯然不是一下子就從0到1或者從1到0,其必然需要一個時間,我們一般叫做trise,tfall。
對于Clock Skew,有一個很簡單的思路,既然到達(dá)的時刻不一樣,想辦法讓它們一樣不就行了?比如到達(dá)一個寄存器比較快,我在它中間搞一點(diǎn)延遲,那么到達(dá)時間不就慢下來了?這種方法我們稱為Insertion Delay。

下圖反映了Skew和Jitter是怎么導(dǎo)致的。基本上由以下幾個因素導(dǎo)致:
Clock Generation
時鐘信號最初由時鐘源生成,如果時鐘源本身存在不穩(wěn)定因素,比如晶體振蕩器的老化、溫度變化影響等,都可能導(dǎo)致時鐘信號的不穩(wěn)定;
Distribution Network
Number of Buffers:在時鐘分布網(wǎng)絡(luò)中,為了驅(qū)動更多的負(fù)載,會插入多個緩沖器。緩沖器的數(shù)量和類型會影響時鐘信號的穩(wěn)定性和傳遞時間;
Device Variation:即使是同一批次的器件,它們的工作特性也可能存在微小的差異,這些差異可能會導(dǎo)致時鐘信號通過不同器件時產(chǎn)生不同的延遲;
Wire length and Variation:芯片內(nèi)部的連線長度不同,電氣特性也不盡相同,這會導(dǎo)致時鐘信號到達(dá)各個觸發(fā)器的時間不同;
Coupling:信號線之間的耦合效應(yīng)也可能導(dǎo)致時鐘信號的傳播受到影響,比如相鄰信號線之間的電磁干擾;
Load:不同的觸發(fā)器或邏輯單元對時鐘信號的負(fù)載不同,這會影響時鐘信號的傳遞速度;
Environment Variation
Temperature:溫度變化會影響器件的電氣特性,包括信號傳播速度和電源電壓等,進(jìn)而影響時鐘信號的穩(wěn)定性;
Power Supply:電源的波動或者噪聲也會影響時鐘信號的穩(wěn)定性,尤其是在電壓供應(yīng)不穩(wěn)定的情況下;


我們知道了Skew和Jitter的由來,我們再來看看它是怎么影響我們的時序分析的,通過下圖我們可以非常清晰的看到Skew和Jitter對時序的影響。這里相信大家看過靜態(tài)時序分析那篇文章以后,對靜態(tài)時序分析有基本的理解,所以大家這里直接看圖就行,我就不多做解釋了。

我們再來看一下時鐘對功耗的影響。對時鐘網(wǎng)絡(luò)自身而言,其作為源頭,是需要一直活躍的。因此其活躍因子為1。因此我們需要考慮一下電容對功耗的影響。時鐘電容主要由以下幾方面組成:
時鐘生成:時鐘信號的產(chǎn)生通常涉及到鎖相環(huán)、時鐘分頻器等電路,這些電路在產(chǎn)生時鐘信號的過程中會消耗一定的功率;
時鐘元件:時鐘網(wǎng)絡(luò)中包含的緩沖器、多路選擇器、時鐘門控等元件,在驅(qū)動時鐘信號時會消耗功率;
時鐘連線:時鐘信號需要通過連線傳遞到芯片上的各個部分,連線的電容會對時鐘信號產(chǎn)生負(fù)載,從而影響功耗;
時鐘負(fù)載:時鐘信號需要驅(qū)動所有的時序元件(如觸發(fā)器),這些元件的負(fù)載也會消耗時鐘網(wǎng)絡(luò)的功率;
綜上所述,時鐘占據(jù)了整個芯片Power的很大一部分,考慮功耗的時候需要重點(diǎn)考慮這一部分。

我們再來看一下時鐘網(wǎng)絡(luò)對信號完整性的需求和影響?紤]信號完整性,意味著時鐘信號在傳輸過程中需要保持其原始形狀和質(zhì)量,不受噪聲和失真的影響。時鐘網(wǎng)絡(luò)上的噪聲可能會導(dǎo)致以下問題:
首先考慮時鐘網(wǎng)絡(luò)上的噪聲會產(chǎn)生什么負(fù)面影響。最壞的情況下,噪聲會導(dǎo)致額外的時鐘邊緣,造成后級模塊的誤判斷,以為新的時鐘周期又來了。顯然這樣會造成嚴(yán)重錯誤。即使噪聲沒有引起額外的邊沿,較低的耦合效應(yīng)仍然可能減緩或加速時鐘信號的傳播,導(dǎo)致時鐘偏斜。不規(guī)則的時鐘邊沿可能會阻礙觸發(fā)器的正常操作,因為觸發(fā)器需要精確的時鐘邊沿來同步其操作。
然后考慮一下時鐘邊沿上升下降緩慢會帶來什么影響。時鐘信號的過渡時間過長可能會導(dǎo)致觸發(fā)器無法在正確的時間窗口內(nèi)識別時鐘邊沿,影響其設(shè)置和保持時間。此時對噪聲的容忍性會進(jìn)一步下降。還會導(dǎo)致觸發(fā)器的性能下降,比如更差的建立時間保持時間。
那是不是上升下降越快越好呢?就像理想情況一樣,直接就從1到0或者從0到1。其實(shí)也不是,雖然快速的時鐘過渡通常被認(rèn)為是理想的,但如果過快,可能會導(dǎo)致功率消耗增加、設(shè)計過度復(fù)雜化,以及對其他信號的干擾增大。
此外如果時鐘網(wǎng)絡(luò)中的driver不平衡,會導(dǎo)致時鐘偏斜的增加,從而影響電路的同步性能。
一個比較好的建議,將trise和tfall設(shè)置為時鐘周期的百分之10到百分之20。

我們再來看一下時鐘網(wǎng)絡(luò)對面積的影響。時鐘網(wǎng)絡(luò)包括時鐘生成器、時鐘元件和時鐘連線,所有這些都會占用芯片面積。
時鐘生成器:例如鎖相環(huán)(PLL),可能會非常大,因為它需要包含振蕩器、相位檢測器、電荷泵、濾波器等多個子組件。
時鐘緩沖器:時鐘緩沖器分布在芯片的各個部分,以便驅(qū)動時鐘信號到達(dá)每個時鐘元素。這些緩沖器的總和會占用相當(dāng)大的面積。
時鐘連線:時鐘連線會消耗大量的布線資源。在芯片設(shè)計中,布線資源是非常寶貴的,因為它們決定了信號如何在芯片上傳播。
此外我們需要考慮布線資源的重要性,為了實(shí)現(xiàn)快速和干凈的時鐘信號過渡,需要低的電阻-電容(RC)時間常數(shù)。這意味著時鐘網(wǎng)絡(luò)需要高質(zhì)量的布線資源。為了減少電阻,通常會選擇high、wide的金屬層來布線時鐘信號,因為這些金屬層通常更寬,電阻更低。
時鐘網(wǎng)絡(luò)需要連接到芯片上的每個時鐘元素,這意味著時鐘連線需要遍布整個芯片。此外為了從高層次的金屬層連接到低層次的金屬層,需要使用疊孔,這也會占用額外的面積,并可能增加延遲。

2、Clock Distribution所以我們怎么構(gòu)建時鐘樹呢?

我們看一下需要做到什么。首先考慮只有一個時鐘源頭,有多個Sinks。我們需要將他們連接起來。同時讓Clock Skew,Delay,整體的Wire length,噪聲和耦合效應(yīng)都盡可能的小。
我們的挑戰(zhàn)是什么?
同步數(shù)百萬(數(shù)十億)個獨(dú)立元素:在現(xiàn)代集成電路中,可能包含數(shù)百萬甚至數(shù)十億個需要同步的元素,如觸發(fā)器、寄存器等。
在10 ps的時間尺度上同步:這些元素需要在極短的時間內(nèi)同步,大約在10皮秒(ps)的量級上。這是一個非常短暫的時間窗口,要求時鐘信號必須非常精確和穩(wěn)定。
跨越2-4 cm的距離:時鐘信號需要在芯片上傳播很長的距離,通常在2到4厘米之間。這樣的距離在芯片內(nèi)部是一個相對較大的范圍。
同步距離與元素尺寸的比例約為10^5:這意味著時鐘信號需要在一個非常大的范圍內(nèi)同步非常小的元素,這是一個巨大的挑戰(zhàn)。
參考:光在1 cm內(nèi)傳播需要10 ps:光在10皮秒傳播不到1cm。這是一個理論上的極限,實(shí)際上的電子信號傳播速度遠(yuǎn)低于光速。
總結(jié)來說,時鐘路由的挑戰(zhàn)在于如何在極短的時間內(nèi),將時鐘信號精確地同步到芯片上每一個角落的元素,同時還要克服信號在傳播過程中的延遲和衰減。這要求設(shè)計師采用先進(jìn)的時鐘樹綜合技術(shù),優(yōu)化時鐘網(wǎng)絡(luò)的布局和布線,以確保時鐘信號的穩(wěn)定性和同步性。

我們看一下目前的技術(shù)趨勢。我們都知道時鐘頻率目前變得越來越高,隨著時鐘頻率的提高,對始終偏斜以及信號過渡的要求也越來越高。此外隨著CMOS工藝的縮小,PLL的性能得到改善,有助于減少時鐘抖動,但與此同時其它噪聲源可能會增加,比如電源噪聲和溫度梯度。
銅互連的使用降低了電阻-電容(RC)時間常數(shù),有助于改善信號過渡和潛在的時鐘偏斜。低介電常數(shù)(low k)材料可以減少時鐘功耗,改善延遲、偏斜和過渡率。
隨著設(shè)計的深入流水線化,使用了更多的寄存器,這增加了時鐘網(wǎng)絡(luò)的電容負(fù)載。更大的芯片尺寸需要更長的連線來覆蓋整個晶圓,增加了時鐘網(wǎng)絡(luò)的復(fù)雜性和功耗。隨著功能的增加和器件的增多,更多的元素需要時鐘信號,這進(jìn)一步增加了時鐘網(wǎng)絡(luò)的負(fù)擔(dān)。動態(tài)邏輯設(shè)計中,通常會有更多的元素需要時鐘信號,這也會增加時鐘網(wǎng)絡(luò)的復(fù)雜性。

根據(jù)不同的設(shè)計需求和目標(biāo),時鐘綜合可以采用不同的方法,主要包括以下幾種:
時鐘樹(Clock Tree):這是傳統(tǒng)的時鐘分布方法,它從單一的時鐘源開始,通過一系列的緩沖器(buffers)和驅(qū)動器(drivers)將時鐘信號分支傳遞到芯片上的各個觸發(fā)器。時鐘樹的設(shè)計旨在平衡每個觸發(fā)器看到的時鐘路徑長度,以減少時鐘偏斜。
時鐘網(wǎng)格(Clock Mesh/Grid):時鐘網(wǎng)格是一種全局時鐘分布網(wǎng)絡(luò),它由水平和垂直的時鐘線組成,這些線在整個芯片上形成一個網(wǎng)格狀結(jié)構(gòu)。時鐘網(wǎng)格的設(shè)計可以提高時鐘信號的均勻性,減少時鐘偏斜,并且有助于應(yīng)對隨著芯片尺寸增大而增加的時鐘分布挑戰(zhàn)。
時鐘脊柱(Clock Spines):時鐘脊柱是一種介于時鐘樹和時鐘網(wǎng)格之間的時鐘分布方法。它通常包括一些主要的垂直或水平時鐘線,這些線充當(dāng)主時鐘路徑,然后通過分支將時鐘信號傳遞到芯片上的各個部分。時鐘脊柱的設(shè)計旨在提供一種平衡的方法,既能夠減少時鐘偏斜,又能夠簡化時鐘網(wǎng)絡(luò)的復(fù)雜性。
每種方法都有其優(yōu)勢和局限性,設(shè)計師需要根據(jù)具體的電路設(shè)計、性能要求和工藝技術(shù)來選擇合適的時鐘綜合方法。隨著集成電路尺寸的增大和性能要求的提高,時鐘綜合變得越來越具有挑戰(zhàn)性,需要更加先進(jìn)的工具和算法來支持。

我們來看一下時鐘樹。時鐘樹是集成電路中用于分布時鐘信號的一種結(jié)構(gòu)。在設(shè)計中,一個簡單但非實(shí)用的方法是為每個時鐘終點(diǎn)(sink)單獨(dú)布線,并平衡RC延遲。然而,這種方法會導(dǎo)致功耗過大,且每個網(wǎng)線的較大RC值可能會引起信號完整性問題。
為了避免這些問題,實(shí)際中會使用緩沖器樹(buffered tree)結(jié)構(gòu)。這種方法的特點(diǎn)和優(yōu)勢包括:
短網(wǎng)線意味著更低的RC值:通過使用緩沖器樹,每個時鐘網(wǎng)線的長度可以縮短,從而降低RC(電阻-電容)值。短的網(wǎng)線可以減少信號延遲和功耗。
緩沖器恢復(fù)信號:在時鐘信號傳播路徑上插入緩沖器可以幫助恢復(fù)信號強(qiáng)度,提高信號的過渡速率(slew rates),確保時鐘邊沿的清晰和可識別。
降低總插入延遲:由于RC值較低,整個時鐘樹的插入延遲(insertion delay)也會降低,這有助于減少時鐘偏斜。
減少總的開關(guān)電容:緩沖器樹可以減少時鐘網(wǎng)絡(luò)上總的開關(guān)電容,因為每個緩沖器只需驅(qū)動較少的負(fù)載。這有助于降低時鐘網(wǎng)絡(luò)的動態(tài)功耗。
總之,時鐘樹的設(shè)計目標(biāo)是在功耗、信號完整性和時鐘偏斜之間找到平衡。通過使用緩沖器樹,設(shè)計師可以有效地管理這些設(shè)計約束,實(shí)現(xiàn)高效且可靠的時鐘分布。

讓我們來構(gòu)建一個實(shí)際的時鐘樹,可以看到下圖這個形狀,非常像H。所以我們稱之為H-Tree。它具有以下特點(diǎn):
一個大的中心驅(qū)動器:H-Tree從一個大的中心驅(qū)動器開始,向四個方向(或者更多的方向,取決于設(shè)計的復(fù)雜性)分支。
遞歸的H形狀結(jié)構(gòu):H-Tree使用遞歸的H形狀結(jié)構(gòu)來匹配連線長度,確保時鐘信號到達(dá)各個觸發(fā)器的時間大致相同。
在分支點(diǎn)減半連線寬度:在H-Tree的分支點(diǎn),連線的寬度會減半,這樣做可以減少信號反射,提高信號質(zhì)量。
然而,這種完美平衡的H-Tree在實(shí)際應(yīng)用中很難實(shí)現(xiàn),因此更現(xiàn)實(shí)的方法是使用錐形H-Tree(Tapered H-Tree),其試圖實(shí)現(xiàn)平衡,但更加靈活,以適應(yīng)實(shí)際設(shè)計中觸發(fā)器不均勻分布的情況。
標(biāo)準(zhǔn)的時鐘樹綜合(CTS)方法會考慮到觸發(fā)器的實(shí)際分布,嘗試構(gòu)建一個平衡的時鐘樹。在CTS過程中,工具會根據(jù)觸發(fā)器的位置和時鐘網(wǎng)絡(luò)的需求來自動放置緩沖器,并調(diào)整連線的長度和寬度,以實(shí)現(xiàn)最佳的時鐘分布。

我們來看兩個工業(yè)界的芯片的時鐘網(wǎng)絡(luò),其使用了H-Tree。

我們再來看一下時鐘網(wǎng)格,其相對于時鐘樹有什么區(qū)別呢?首先我們看一下時鐘網(wǎng)格長什么樣子,可以看到其前面仍然是時鐘樹,但真的驅(qū)動的時候,將flip flop放到一個個的格子中,然后直接通過連線進(jìn)行驅(qū)動。它有以下幾個優(yōu)點(diǎn):
時鐘偏斜由網(wǎng)格密度決定:時鐘網(wǎng)格通過均勻分布的網(wǎng)格線來提供時鐘信號,因此時鐘偏斜主要取決于網(wǎng)格的密度,而不是特定負(fù)載的位置。
時鐘信號無處不在:由于時鐘網(wǎng)格覆蓋整個芯片,因此時鐘信號幾乎可以在芯片的任何地方獲得。
對工藝變化的容忍度高:時鐘網(wǎng)格的結(jié)構(gòu)使得它對制造過程中的變化不那么敏感,因此可以提供更加穩(wěn)定的時鐘分布。
通常能夠?qū)崿F(xiàn)極低的時鐘偏斜:由于時鐘網(wǎng)格的設(shè)計方式,它通常能夠?qū)崿F(xiàn)非常低的時鐘偏斜值。
然而,時鐘網(wǎng)格也有一些缺點(diǎn):
大量的布線和功耗:時鐘網(wǎng)格需要大量的布線,這會導(dǎo)致功耗的增加。
連線電容大:由于時鐘網(wǎng)格的布線范圍廣泛,因此連線的電容也會很大。
需要強(qiáng)大的驅(qū)動器:為了驅(qū)動這樣的網(wǎng)格,需要強(qiáng)大的驅(qū)動器,這意味著驅(qū)動器的預(yù)驅(qū)動電容也會很大。
布線面積大:時鐘網(wǎng)格占用了大量的芯片面積,這可能會影響其他電路元素的布局。
為了最小化這些缺點(diǎn),可以使網(wǎng)格間距變得更粗,但這樣做會導(dǎo)致時鐘偏斜變差,從而失去了時鐘網(wǎng)格的主要優(yōu)勢。設(shè)計時不應(yīng)過度設(shè)計,而是應(yīng)該讓時鐘偏斜盡可能大,只要它仍然在可容忍的范圍內(nèi)。
此外時鐘網(wǎng)格對于片上系統(tǒng)來說似乎并不可行,這是因為SoC的復(fù)雜性和對功耗、面積的限制。因此,設(shè)計師需要根據(jù)具體的應(yīng)用和設(shè)計約束來選擇合適的時鐘分布方法。

我們看幾個工業(yè)界的例子,可以看到時鐘網(wǎng)格的Driver Size很大。其Skew相比于時鐘周期而言非常的小。

時鐘脊柱(Clock Spines)是一種用于時鐘分布的替代方法,它旨在減少時鐘網(wǎng)格所導(dǎo)致的功耗和布線資源的消耗。時鐘脊柱的設(shè)計理念是構(gòu)建一個中心脊柱,然后從脊柱向外輻射時鐘信號,以實(shí)現(xiàn)時鐘的局部分布。
以下是時鐘脊柱的一些關(guān)鍵特點(diǎn):
構(gòu)建H Tree到每個脊柱:與時鐘網(wǎng)格不同,時鐘脊柱設(shè)計中會構(gòu)建一個中心脊柱,然后從脊柱向外輻射時鐘信號。這種設(shè)計類似于H Tree結(jié)構(gòu)。
從脊柱輻射本地時鐘分布:時鐘脊柱的設(shè)計允許從脊柱向各個方向輻射時鐘信號,以實(shí)現(xiàn)對本地區(qū)域的時鐘分布。
減少功耗和布線資源:與時鐘網(wǎng)格相比,時鐘脊柱的設(shè)計減少了布線資源的需求,因為它不要求在每個方向上都布設(shè)時鐘線。這有助于降低功耗。
Pentium 4是早期采用時鐘脊柱設(shè)計的一個例子。它表明時鐘脊柱在實(shí)際應(yīng)用中是可行的,并且能夠滿足當(dāng)時的設(shè)計需求。

當(dāng)然時鐘的設(shè)計非常復(fù)雜,上面也是簡單介紹一下。這里我們簡單總結(jié)一下這三種時鐘網(wǎng)絡(luò)的區(qū)別:

此外還有專用的Skew管理機(jī)制。

我們來看一下時鐘并發(fā)優(yōu)化。不要忘記CTS的主要目標(biāo),我們的核心目標(biāo)是要滿足時序要求和DRV約束。時鐘偏斜的減少只是作為時鐘綜合與后端設(shè)計(post-CTS)和前端設(shè)計(pre-CTS)之間時序相關(guān)性的一個指標(biāo)。實(shí)際上,我們更應(yīng)該關(guān)注的是滿足時序和驅(qū)動約束。
CCOpt提出了一種新的時鐘綜合方法,它不再將時鐘偏斜作為唯一目標(biāo),而是同時考慮時序和驅(qū)動約束,以及功耗和面積的優(yōu)化。在構(gòu)建時鐘網(wǎng)絡(luò)時,CCOpt方法會考慮時序和驅(qū)動約束,而不是僅僅關(guān)注時鐘偏斜。這有助于在滿足性能要求的同時,減少功耗和面積的浪費(fèi)。

其首先構(gòu)建一個時鐘樹,然后檢查時序并修復(fù)任何違反時序要求的地方。這種方法之所以有效,是因為大多數(shù)時序路徑都是局部的,它們可能來自同一個時鐘分支,因此不需要太多的時鐘偏斜平衡。
以下是這種方法的一些優(yōu)點(diǎn):
局部的時序路徑:大多數(shù)時序路徑都是局部的,這意味著它們通常來自同一個時鐘分支。因此,這些路徑不需要太多的時鐘偏斜平衡來開始;
減少時鐘偏斜平衡:由于時序路徑的局部性,可以減少時鐘偏斜平衡的需求。這有助于降低插入延遲,因為時鐘信號到達(dá)觸發(fā)器的時間更短;
降低功耗和面積:由于減少了時鐘偏斜平衡的需求,因此可以減少時鐘緩沖器的數(shù)量,從而降低功耗和面積的消耗;
電流分布的優(yōu)化:減少時鐘偏斜平衡有助于優(yōu)化電流分布,減少IR Drop的影響;
有用的時鐘偏斜:盡管減少了時鐘偏斜平衡,但仍會保留一定程度的時鐘偏斜,這對于時序路徑上的局部時序要求是有益的。比如可以在建立時間緊張的寄存器,你讓時鐘晚一點(diǎn)到來,這屬于合理利用Skew;
總的來說,CCOpt方法通過首先構(gòu)建一個基本的時鐘樹,然后根據(jù)時序要求進(jìn)行調(diào)整,可以在滿足時序要求的同時,減少功耗和面積的消耗。這種方法強(qiáng)調(diào)時序路徑的局部性,并在此基礎(chǔ)上進(jìn)行時鐘網(wǎng)絡(luò)的設(shè)計和優(yōu)化。

3、Clock Tree Synthesis in EDA我們來看一下實(shí)際EDA工具是如何進(jìn)行時鐘樹綜合的。這里我們將以Cadence的Innovus為例進(jìn)行說明。

首先我們再明確一下,我們在時鐘樹綜合之前已經(jīng)有了什么,基于這些東西我們需要做什么,實(shí)現(xiàn)什么。
我們需要滿足DRV約束,比如最大扇出,最大電容,最大長度等等。還要盡可能減少Skew,減少Insertion Delay。

我們來看一下時鐘樹由哪些部分組成?
起始點(diǎn):時鐘樹的起始點(diǎn)是時鐘端口或時鐘生成器的輸出引腳,這是時鐘信號的源頭,所有的時鐘信號都是從這里開始傳播的;
葉子節(jié)點(diǎn)/終點(diǎn):時鐘樹的葉節(jié)點(diǎn)或終點(diǎn)是指時鐘信號最終到達(dá)的地方,通常是寄存器、存儲器等同步元件的時鐘引腳,理論上時鐘信號必須在這些點(diǎn)上同時到達(dá),以保持?jǐn)?shù)據(jù)的同步性;
緩沖器/反相器:緩沖器和反相器是時鐘樹中的重要組成部分,它們用于驅(qū)動時鐘信號,確保時鐘信號的轉(zhuǎn)換能夠滿足設(shè)計要求。通過插入緩沖器或反相器,可以調(diào)整時鐘路徑的延遲,以減少時鐘偏斜;(比如通過兩個反相器,讓信號0和1變得更分明,變得變強(qiáng))


特殊邏輯:包括多路復(fù)用器、集成的時鐘門控、時鐘分頻器等。這些邏輯單元可以用來控制時鐘信號的分布,例如,通過時鐘門控來關(guān)閉不需要的時鐘信號,以降低功耗;
我們需要一種“語言”來定義這些(以及其他)組件,接下來我們會討論CCOpt方法中對這些的命名規(guī)定。

我們再來回顧一下什么是Source和Sink。
Clock Source:
Clock Source是指時鐘信號發(fā)散出來的引腳,是時鐘樹的起點(diǎn);
Clock Source可以是:(這三個直接看下圖就可以理解,很清楚)
設(shè)計的主要輸入端口,例如一個外部時鐘信號輸入到芯片;
一個IP核的輸出引腳,比如一個鎖相環(huán)(PLL)的輸出,PLL通常用于生成穩(wěn)定且頻率可調(diào)的時鐘信號;
一個門控電路的輸出引腳,例如時鐘復(fù)用器或時鐘門控的輸出。這些電路用于控制時鐘信號的路由和開關(guān);
Clock Sink:
Clock Sinks是指所有接收時鐘信號的引腳,是時鐘樹的終點(diǎn)。
Clock Sinks可以是:
寄存器(觸發(fā)器FF或鎖存器latch)的時鐘輸入引腳;
IP核的時鐘輸入引腳,比如SRAM,這種我們也成為Macro單元;
主要輸出端口,比如時鐘信號需要從當(dāng)前模塊驅(qū)動到外部;


我們再來看一下Skew Group這個概念。我們有很多很多的Sink,我們將一部分Sink劃分為一個Skew Group,用于分析和控制Skew。默認(rèn)情況下,時鐘樹所有的Sinks屬于同一Skew Group。
然而,這些Sink也可以被劃分為幾個時鐘偏斜組,這樣可以更精細(xì)地控制時鐘偏斜。(有點(diǎn)像之前的Timing Group的概念)
此外不同時鐘的接收端可以屬于同一個時鐘偏斜組(例如,時鐘和生成的時鐘),這意味著它們在時鐘樹上可能共享相同的路徑或緩沖器,甚至一個接收端可以同時屬于多個時鐘偏斜組。

我們再來看幾個關(guān)于Pins的概念。
Stop Pins
時鐘樹的葉子節(jié)點(diǎn),時鐘網(wǎng)絡(luò)將緩沖到停止引腳,但不會接著往下傳遞了;
所有時鐘接收端都是隱式的停止引腳,因此,按理說這些引腳需要進(jìn)行時鐘偏斜平衡/分析(隱式代表不要額外去聲明,與之對應(yīng)的我們可以定義顯式的停止引腳,比如一個反相器,我們不希望時鐘順著它接著往下傳遞了,就可以顯式的聲明出來);
要在CCOpt中定義額外的引腳作為停止引腳,使用下圖中的命令;
Ignore Pins
本身是時鐘網(wǎng)絡(luò)上的引腳,但它們在任何時鐘偏斜組中都不會被視為時鐘接收端,因此也就不需要進(jìn)行時鐘偏斜平衡/分析;
時鐘網(wǎng)絡(luò)將緩沖到忽略引腳,但不會接著往下傳遞了;
Exclude Pins
與Ignore Pins相似,但時鐘網(wǎng)絡(luò)不會緩沖到Exclude Pins;
Through Pins
Through Pins是指那些本來會被視為Stop pins的引腳,但我們希望時鐘信號能夠通過它們傳播(用于緩沖和將引腳添加到時鐘偏斜組中);
在Innovus的新版本中,沒有明確的命令來定義穿越引腳。只需將其稱為Ignore Pins;
簡單來說在時鐘樹綜合的過程中,Through Pins允許時鐘信號在不被視作最終接收端的情況下通過某些節(jié)點(diǎn)。這樣做可以保持時鐘網(wǎng)絡(luò)的連續(xù)性,同時允許在這些節(jié)點(diǎn)上進(jìn)行緩沖和其他操作,以優(yōu)化時鐘網(wǎng)絡(luò)的性能。在Innovus的新版本中,不再需要顯式地定義穿越引腳,而是通過將它們標(biāo)記為忽略引腳來實(shí)現(xiàn)相同的功能;



我們再來看一個概念,Insertion Delay Pin,也可以叫做float pin。這個Pin角對應(yīng)Macro比如SRAM的時鐘輸入引腳。
這個引腳到其內(nèi)部的時鐘引腳還有一段邏輯。就比如下圖,其還需要X,這個時候如果我們要保證時鐘平衡的話。我們就應(yīng)該讓時鐘信號到這個Macro的時鐘引腳早一點(diǎn),從T變成T-X。其寫法如下所示。

讓我們來總結(jié)一下上述的Pin角類型。Stop Pin非常好理解,就是終點(diǎn),時鐘到這里就停下來了,不會接著傳了。Exclude Pin是完完全全可以忽視的Pin,什么規(guī)則都不用滿足。而Ignore Pin盡管叫這個名字,但還是要進(jìn)行DRV fixing的。

來看一下Clock Net的Routing問題。由于Clock nets對于信號完整性影響非常大,前面也已經(jīng)介紹過了。所以對待其相比對待別的Net,有額外的工作要做。
我們在時鐘樹綜合的時候要對其進(jìn)行Pre-route,來快速檢查一遍。此外還需要:
優(yōu)先選擇布線軌道:
為了減少電阻和電容,我們通常優(yōu)先選擇更高、更厚的金屬層來布線時鐘網(wǎng)絡(luò)。高層的金屬通常具有較低的電阻,而且與襯底的電容較小,這有助于提高時鐘網(wǎng)絡(luò)的性能。
屏蔽時鐘網(wǎng)絡(luò):
屏蔽是一種常用的技術(shù),用于減少時鐘網(wǎng)絡(luò)對其他網(wǎng)絡(luò)的干擾。通過在時鐘網(wǎng)絡(luò)周圍添加保護(hù)層或使用專門的屏蔽軌跡,可以減少電磁干擾(EMI)。
考慮在時鐘緩沖器旁邊添加去耦電容(DeCaps):
去耦電容可以用來過濾時鐘緩沖器輸出端的噪聲,提高時鐘信號的穩(wěn)定性。這些電容通常放置在時鐘緩沖器的附近,以減少電源噪聲對時鐘信號的影響。


我們怎么在Innovus中布線時鐘nets呢?首先,既然這些nets很特殊,就不能用默認(rèn)規(guī)則,要使用非默認(rèn)規(guī)則即Non-Default Rules(NDRs)。比如double-width/double-spacing。
同時還需要指定Routing類型,定義首選的布線層和屏蔽技術(shù)。
在Innovus中,我們將時鐘網(wǎng)絡(luò)分為三種類型:
頂部(Top)時鐘網(wǎng)絡(luò),即時鐘樹的初始分支,通常非常寬和高;
主干(Trunks)時鐘網(wǎng)絡(luò),即時鐘樹的主要分支,也比較寬和高;
葉子(Leaf)時鐘網(wǎng)絡(luò),即時鐘樹的底層,更接近邏輯單元。
綜上,我們將定義NDRs和布線規(guī)則,然后將它們應(yīng)用到時鐘網(wǎng)絡(luò)上。

我們來看一個具體的例子:
首先,定義NDR規(guī)則,比如Double width和Double Spacing,定義方式如下圖所示。這個規(guī)則的名字叫做CTS_2W2S。我們定義的規(guī)則允許我們指定時鐘網(wǎng)絡(luò)布線的特殊要求,例如更大的線寬、間距或特定的布線層。
然后我們創(chuàng)建用于時鐘樹綜合的routing type ,type名字叫做cts_trunk。在Innovus中,布線類型允許我們定義首選的布線層和屏蔽。這意味著在設(shè)計時鐘網(wǎng)絡(luò)時,我們可以指定時鐘信號應(yīng)該優(yōu)先在哪些金屬層上布線,以及是否需要采取屏蔽措施來保護(hù)時鐘信號免受干擾。此外routing type是基于我們上述定義的NDR的,也就是說routing type可以理解為在NDR上的進(jìn)一步規(guī)則定義。
最后我們上述定義的屬性作用在trunk類型的網(wǎng)絡(luò)上。這樣,Innovus就會根據(jù)定義的NDR和布線類型來布線時鐘網(wǎng)絡(luò),確保時鐘信號的質(zhì)量和完整性。

在運(yùn)行時鐘樹綜合之前,對設(shè)計中的每個時鐘樹進(jìn)行分析是非常重要的。分析的目的是為了確定以下幾個關(guān)鍵方面:
確定時鐘樹的根節(jié)點(diǎn),即時鐘信號的發(fā)散點(diǎn),通常是一個時鐘生成器或時鐘源的輸出引腳。
確定時鐘信號應(yīng)該到達(dá)的所有時鐘匯(如寄存器、觸發(fā)器等)以及可能需要特殊處理的時鐘樹例外情況。
檢查時鐘樹中是否已經(jīng)包含了某些預(yù)存的單元,例如用于時鐘門控的邏輯單元。
確定時鐘樹是否收斂,即是否存在自身收斂的時鐘路徑(一個時鐘樹的多個分支最終匯合)或與其他時鐘樹重疊的時鐘路徑。
分析時鐘樹之間是否存在時序關(guān)系,例如跨時鐘偏斜要求。
確定DRV約束,包括最大扇出、最大轉(zhuǎn)換時間和最大電容等。
選擇合適的庫單元來構(gòu)建時鐘樹,這些單元應(yīng)該滿足設(shè)計的要求,并且與工藝相兼容。
確定布線約束,包括布線規(guī)則和金屬層的選擇。這些約束將指導(dǎo)CTS工具如何布線時鐘網(wǎng)絡(luò),以確保信號質(zhì)量和滿足設(shè)計約束。
通過這些分析,設(shè)計者可以確保時鐘樹綜合的結(jié)果能夠滿足設(shè)計的時序和性能要求,同時還可以避免潛在的問題,如時鐘偏斜過大、時鐘抖動過多等。這有助于提高整個數(shù)字系統(tǒng)的可靠性和穩(wěn)定性。

我們看一下Clock Tree優(yōu)化前后的對比。包括但不限于使用Gate relocation、Buffer relocation、Buffer Sizing等技術(shù)。

我們再看看時鐘樹綜合以后,對時序的影響?梢钥吹街罢J(rèn)為時鐘是理想的,現(xiàn)在引入了positive skew和negative skew。為了解決這一點(diǎn),我們按理說就得對input delay和output delay,把這個因素給考慮進(jìn)來。
想象一下入口和出口有兩個Virtual寄存器,其Clock Skew存在不平衡。我們可以通過設(shè)置Input Delay和Output Delay,做到時鐘平衡。

我們看一下如何減少時鐘分布問題,下面的很多方法其實(shí)用的不太多,大家可以自己看看。

4、Clock Generation

前面講了這么多,我們來看看時鐘是怎么生成的。最簡單的方法就是用環(huán)形振蕩器,如下圖右上角所示。但這種方法雖然簡單,但不是很穩(wěn)定,很容易受到PVT的影響。
因此我們通常是在芯片外部使用專用的晶振電路產(chǎn)生時鐘,但這個片外時鐘只有一個,并且時鐘頻率很受限,如果要實(shí)現(xiàn)高頻和分頻呢?我們就需要使用片上的專用時鐘生成器,通常是PLL。

基于上述的方案的電路大概長這樣,可以看到我們實(shí)現(xiàn)了時鐘的倍頻和分頻。

PLL長什么樣呢?其大概長下面這個樣子。鎖相環(huán)基本的組成部件:檢相器 (PD)、環(huán)路濾波器 (LF) 和壓控振蕩器 (VCO)。作為一個負(fù)反饋系統(tǒng),在反饋回路中VCO的輸出被分頻器分頻到低頻后,通過檢相器和參考時鐘比較產(chǎn)生相位差信號,接著該相差信號在前向通路上,被電荷泵和環(huán)路濾波器處理后產(chǎn)生電壓控制信號,從而反過來控制VCO的輸出。鎖相環(huán)鎖相環(huán),關(guān)鍵是把相位給鎖住。

我們簡單看一下PD長啥樣。其輸入自然而然有兩個時鐘信號,我們假設(shè)一個是Ref,一個是F_IN。如果REF先來,那不就是慢了嗎,我們要把時鐘往前挪動。類似的如果F_REF先來,那就要把時鐘往后挪動。

電荷泵和積分器長下面這樣,我們已經(jīng)有了UP和DOWN信號。如果F_IN和F_REF一樣,那么就不需要充放電,V_C保持不變,輸出頻率也不變,否則就需要改變輸出頻率。

這個電壓就會用來控制Delay Line。我們看下圖,如果電壓不變,是不是Delay也就不變?如果電壓改變了,Delay-line的Delay也改變了,進(jìn)而影響到頻率。

我們把上面這個東西集成一下,就是VCO了。也就是壓控振蕩器。

5、Clock Domain Crossing

跨時鐘域可以說是面試必問的一個問題了。為什么要考慮跨時鐘域問題呢?其本質(zhì)是建立時間和保持時間的要求決定的。如下圖所示,DA到DB的時候,由于CLKA和CLKB是異步時鐘,其無法保證建立時間的要求,所以就會出現(xiàn)亞穩(wěn)態(tài)。

我們看一下跨時鐘域主要的問題有哪些:
亞穩(wěn)態(tài):
亞穩(wěn)態(tài)是指一個觸發(fā)器(flip-flop)的輸出在穩(wěn)定的高電平或低電平狀態(tài)之間的一種不穩(wěn)定狀態(tài)。當(dāng)異步信號在觸發(fā)器的建立時間(setup time)和保持時間(hold time)窗口內(nèi)發(fā)生變化時,就可能會出現(xiàn)亞穩(wěn)態(tài)。亞穩(wěn)態(tài)可能導(dǎo)致的問題包括:
在扇出處產(chǎn)生高的傳播延遲。
在芯片內(nèi)產(chǎn)生高電流流動,可能會導(dǎo)致芯片損壞。
在扇出的不同部分出現(xiàn)信號的不同值
數(shù)據(jù)丟失:
數(shù)據(jù)丟失可能發(fā)生在源端產(chǎn)生新數(shù)據(jù)時,而目的端尚未捕獲前一個數(shù)據(jù)。在異步系統(tǒng)中,由于時鐘不同步,這種數(shù)據(jù)丟失的情況更為常見。
數(shù)據(jù)不一致
數(shù)據(jù)不一致性是指數(shù)據(jù)被延遲捕獲,導(dǎo)致多個相關(guān)信號處于不同的狀態(tài)。這種情況可能會在多時鐘域系統(tǒng)中出現(xiàn),當(dāng)一個域中的數(shù)據(jù)更新速度與其他域不同步時,就會導(dǎo)致數(shù)據(jù)的不一致性。



通過同步器可以解決亞穩(wěn)態(tài)問題,通常采用雙DFF同步,其讓亞穩(wěn)態(tài)出現(xiàn)的頻率變得非常低。值得注意的是其只是消除亞穩(wěn)態(tài),并不能保證是0還是1。

同步器就足夠了嗎?并不是,同步器只解決了亞穩(wěn)態(tài),沒有解決數(shù)據(jù)丟失問題和數(shù)據(jù)不一致問題。
以數(shù)據(jù)不一致為例,我們想象一下有多個bit,都采用同步的方式,其到達(dá)的時間有前有后,比如01變成10,采樣得到的可能是11(低比特還沒有采到變化以后的值)。
為了消除數(shù)據(jù)丟失,我們可以采取以下措施:
慢時鐘到快時鐘:如果數(shù)據(jù)從慢時鐘域傳輸?shù)娇鞎r鐘域,由于快時鐘域的時鐘周期較短,可以在多個周期內(nèi)采樣慢時鐘域的數(shù)據(jù),從而不會丟失數(shù)據(jù)。
快時鐘到慢時鐘:如果數(shù)據(jù)從快時鐘域傳輸?shù)铰龝r鐘域,快時鐘域的數(shù)據(jù)需要在源端保持多個周期,以確保慢時鐘域有足夠的時間采樣到數(shù)據(jù)。
為了確保數(shù)據(jù)一致性,我們需要考慮更多的因素:
握手協(xié)議:通過握手協(xié)議,源時鐘域和目的時鐘域可以相互確認(rèn)數(shù)據(jù)已經(jīng)準(zhǔn)備好并被接收,從而確保數(shù)據(jù)的連貫性和一致性。
異步FIFO接口:異步FIFO可以在不同的時鐘域之間提供一種緩沖機(jī)制,確保數(shù)據(jù)按照順序傳輸,避免數(shù)據(jù)丟失和一致性問題。
即使不用異步FIFO,也可以單獨(dú)使用格雷碼,其可以減少在跨時鐘域傳輸時出現(xiàn)的數(shù)據(jù)不一致。但針對的是順序變化的數(shù)據(jù)才有意義,比如順序訪存地址。以上述的01變成10為例,格雷碼就將其轉(zhuǎn)換成了01變成11。這樣你要么采到01要么采到11,只會采到舊的值或者新的值,而不會采到錯誤的值。還可以使用Mux實(shí)現(xiàn)跨時鐘,具體的可以搜相關(guān)資料了解一下。



系列文章入口——
【芯片設(shè)計】SoC 101(一):緒論
【芯片設(shè)計】FIFO漫談(零)從無處不在的FIFO開始說起
【芯片設(shè)計】計算機(jī)體系結(jié)構(gòu)(一)虛擬內(nèi)存
【芯片設(shè)計】深入理解AMBA總線(零)緒論
【芯片設(shè)計】握手協(xié)議的介紹與時序說明
【芯片設(shè)計】復(fù)位那些小事 —— 復(fù)位消抖
【芯片設(shè)計】快速入門數(shù)字芯片設(shè)計(一)Introduction
【芯片驗證】UVM源碼計劃(零)下定決心讀源碼前的自測環(huán)節(jié)
【芯片設(shè)計】異步電路碎碎念(一) 到底什么是異步電路
【芯片設(shè)計】從RTL到GDS(一):Introduction
其他文章鏈接——
【芯片驗證】sva_assertion: 15道助力飛升的斷言練習(xí)
【芯片驗證】可能是RTL定向驗證的巔峰之作
【芯片驗證】RTL仿真中X態(tài)行為的傳播 —— 從xprop說起
【芯片驗證】年輕人的第一個systemVerilog驗證環(huán)境全工程與解析
【芯片設(shè)計】verilog中有符號數(shù)和無符號數(shù)的本質(zhì)探究
【芯片設(shè)計】論RTL中always語法的消失術(shù)
【芯片設(shè)計】代碼即注釋,注釋即代碼
【芯片設(shè)計】700行代碼的risc處理器你確實(shí)不能要求太多了
入職芯片開發(fā)部門后,每天摸魚之外的時間我們要做些什么呢
如何計算系統(tǒng)的outstanding 和 burst length?
芯片搬磚日!け扑缽(qiáng)迫癥的關(guān)鍵詞不對齊事件
熟人社會里,一群沒有社會價值的局外人

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有賬號?立即注冊

x
回復(fù)

使用道具

發(fā)表回復(fù)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表