????????在數字集成電路設計中,時鐘信號是數據傳輸的基準,它對于同步數字系統的功能、性能和穩定性起決定性作用,所以時鐘信號的特性及其分配網絡尤被人們關注。時鐘信號通常是整個芯片中有最大扇出、通過最長距離、以最高速度運行的信號。時鐘信號必須保證在最差的條件下,關鍵的時序要求能得到滿足,否則對時鐘信號任何不當的控制都可能導致紊亂情況,將錯誤的數據信號鎖存到寄存器,從而導致系統功能的錯誤。
????????在現有基于標準單元的ASIC流程中,通常將扇出較大的時鐘網絡在綜合階段設置為理想時鐘,在物理設計階段進行時鐘樹綜合,因此它是后端物理設計的關鍵步驟之一。
一、時鐘樹綜合方法
????????芯片設計中的時鐘分為兩類:真實時鐘(real clock)和虛擬時鐘(virtual clock)。真實時鐘又有兩種模式,時鐘樹綜合前沒有延時的理想時鐘(ideal dock)和時鐘樹綜合后的傳播時鐘(propagated clock)。在設計中有時需要定義相對于系統的參考時鐘,例如,對于某個不含PLL的設計模塊,其時鐘信號來自頂層芯片時,我們就定義它為虛擬時鐘。虛擬時鐘沒有源頭,它在整個系統設計中存在,在當前設計中不存在。時鐘樹綜合時必須先定義虛擬時鐘,然后才能定義并約束端口的輸入輸出延遲。
簡單的說,設置virtual clock的好處就是可以在不影響real clock的情況下,指定clock的clock network delay。
????????我們知道,clock latency包括了clock source latency和clock network delay。當BLOCK中沒有做clock tree 的時候,clock network delay 等于0, 這時候,RegA到PORT這個path來說,用virtual clock還是用real clock, 效果都是一樣的。
????????但是,當BLOCK到了CTS階段后,因為有BLOCK內部有clock network delay的存在,而RegB僅僅是個虛擬的寄存器,他的clock tree是不存在的,因此,clock network delay也就是0,這就會導致 RegA 到 PORT的timing path變得過于嚴格(與之相反,input 到 內部寄存器的path的setup check就會過于樂觀)。那么我們可以對RegB設source latency。然而不幸的是,如果用的是real clock, 那么必然會導致RegA的clock的source latency也相應的改變。這時候就體現出了virtual clock的作用。
????????虛擬時鐘在設計中的實際應用是用于作為輸入輸出端口延時約束的時鐘源。EDA工具會基于虛擬時鐘,根據芯片/模塊內部時鐘的實際 delay評估IO外部假定寄存器的propagation time,這樣時序分析就可以規避不必要的“假”違例。
?????????理想時鐘開始用于邏輯綜合階段,通過設定一些參數模擬真實時鐘。在芯片布局完成后,需要對理想時鐘進行延時計算從而建立時鐘樹,這時,便設定時鐘的屬性為傳播時鐘,這樣,時序工具在分析時,就會考慮時鐘樹的門延遲和線延遲。
1、設計約束
????????時鐘樹綜合(CTS,clock tree synthesis)時需要對期望實現的參數做出定義,這些參數通過“時鐘樹約束文件”來提供。時鐘樹所用的約束文件中首先是對時鐘信號本身的定義,它們直接來源于標準設計約束SDC文件。SDC文件為設計約束的標準,它的主要內容包括時序約束(timing constraints),因此它也常常被稱為時序約束文件。
????????標準設計約束SDC文件是規定到達同步寄存器的數據與時鐘之間滿足設計要求的一種時序關系。SDC文件主要有三部分組成:時鐘定義、輸入延遲、輸出延遲。在頂層設計中,還需要約束輸入端口的驅動以及輸出端口的負載等信息。對于多時鐘的復雜SoC設計,還需要根據設計的具體情況設定多周期檢查路徑、冗余的偽路徑以及最大延遲時間和最小延遲時間等約束,如下表:
????????與時鐘信號延滯有關的延遲定義還有輸入延遲、輸出延遲、路徑最大延遲和路徑最小延遲。輸入延遲指的是數據到達輸入端口的延遲,輸出延遲是數據離開輸出端口的延遲,它們主要用于輸入和輸出端口的時序匹配。
????????在模塊級設計中,輸入延遲與輸出延遲是模塊之間的時序接口,輸入延遲主要用于匹配另一接口模塊的輸出組合電路的路徑延遲,而輸出延遲則為另一接口模塊的輸入組合電路的路徑延遲預留一定的時間范圍。在芯片設計的頂層,輸入輸出延遲可作為芯片和板級設計之間的時序接口,主要是預留給PCB上走線的延遲。
?????????最大最小延遲一般是滿足特殊時序所規定的要求,可以是芯片的一個端口到達另一個端口的延遲要求,也可以是芯片內部的某個寄存器到達另外一個寄存器的延遲。
????????在輸入輸出端口,需要分別定義驅動能力和負載大小。定義輸入端口的驅動能力可以是標準單元庫中的一個緩沖器(buffer,BUF)單元,也可以是指定的電阻值。在芯片的頂層常指定特定的阻值,也即定義輸入電阻的大小,由于在頂層驅動的是負載較大的I /O單元,故需要的驅動能力較強,典型的值是0. 05,單位取工藝庫中電阻的單位,一般為kΩ;在模塊級設計中,則用某個單元來定義,常用中等驅動能力的BUFX2,驅動能力太小(例如BUFX2)會導致優化時插人多余的BUF,而驅動定義得太大(如BUFX16)會造成優化時插入的BUF不足,從而造成兩個模塊拼接時時序的違例。
????????輸出負載指的是與輸出端口相連接的負載,其值為電容,一般單位為PF。在芯片的頂層設計中,所需要定義的值與板級PCB上的負載相關。例如,某CPU設計常用的數據總線如CPU的輸出數據總線、PCI總線、SDRAM總線、LCD控制和數據線等其經驗負載一般取30pF,一些特殊的端口,如USB端口其負載較大,取60pF較為合理。
????????對于時鐘的定義、時鐘延遲的定義、時鐘不確定性定義是為了在布局、時鐘樹綜合和布線時提供時序約束參考點。時鐘的定義將通過時鐘樹綜合來實現,而時鐘延遲和時鐘抖動或不確定性(jitter或uncertainty)將在靜態時序分析時進行檢查。靜態時序分析將根據時鐘樹綜合和布線的實際結果,通過提取整個電路中所有的時序路徑,通過計算信號在路徑上的延遲傳播找出違背時序約束的錯誤,詳見靜態時序分析。
2、時鐘樹的結構
????????時鐘信號在物理設計中的實現結果被形象地稱之為時鐘樹,時鐘信號的起點叫做根節點(root pin或root cell),時鐘信號經過一系列分布節點最終到達寄存器時鐘輸入端或其他時鐘終點(例如,存儲器時鐘輸入端)被稱為葉節點。根節點、分布節點和葉節點都依附于的邏輯單元則分別稱作根單元、分布單元和葉單元。時鐘網絡從根節點逐級插人驅動器(buffer、inverter)?,從而到達其葉節點,按照芯片時鐘網絡的約束要求產生時鐘樹的過程叫做時鐘樹綜合。
????????今天,在基于標準單元的ASIC芯片流程中,通常扇出較大的時鐘網絡在綜合階段設置為“理想時鐘”。在物理設計階段,即在布局布線的過程中進行綜合,而后定義為“傳播時鐘”進行靜態時序分析,時鐘樹綜合的實現已被公認為物理設計的關鍵步驟。????????
????????時鐘樹根據其在芯片內的分布特征,可分為多種結構,主要有H 樹(H-tree)、X 樹(X-tree)、平衡樹(balanced tree),以及梳狀或脊椎狀時鐘網(clock tree mesh: comb or spine)。
????????H-tree從中心點到達各個葉節點的距離是相等的,因此信號到達葉節點的時間理論上相等,時鐘偏差理論值為0,該結構的不足是布線比較困難,扇出難以協調一致,適用于較小的設計。
????????X-tree也是一種實現等長互連線的方法,與H-tree相比,X-tree采用了很多非90°的互連線,與H-tree的扇出為2相比,X-tree的扇出是4。?
????????為了減小葉節點反射電流的影響,將分支后的時鐘網線的電阻提高到分支前的2倍,也即分支后的線寬為分支前的1/2,得到“裁剪狀的’’(tapered)H-tree。
????????平衡樹采用的是兩個層次的驅動,比較適用于分層次的時鐘樹設計以及較大的時鐘樹綜合。在頂層上,它采用一個層次的驅動插入以平衡時鐘偏差,到模塊級再采用模塊級的驅動插人平衡時鐘偏差。從圖中可以看出從時鐘的根節點通過一級驅動到達模塊的時間是不同的,存在時鐘偏差,但是比較小。
????????對于很大的時鐘樹,用時鐘網絡或時鐘網格(clock mesh,clock grid)的方法是獲取較小時鐘偏差較好實用方案,如圖所示。盡管當代的EDA工具能自動生成時鐘網絡或網格等拓撲結構,但它還是需要很豐富的經驗和細致的手動方法去設計并作調整。
3、時鐘樹綜合策略
????????在SoC芯片設計中,它的時鐘數目多,時鐘結構復雜,有很多葉節點同時屬于多個時鐘域,在時鐘樹綜合時需要采取一些相關的策略。
????????自動時鐘樹綜合對于自我交叉(self-reconvergent)和相互交叉(crossover)兩種情況的處理方法如下:
- 自我交叉是很常見的一種情況,從PLL出來的時鐘,經過不同的處理(分頻或控制等)然后又通過一個選擇器(mux)匯集到一起,在這種情況下,工具在被設定為處理自我收斂狀態時,先綜合平衡右側tree部分的偏差(skew),然后再均衡circuit1和circuit2的偏差,從而平衡整個時鐘樹偏差。
- 相互交叉時鐘如圖所示,tree3是wb_clk和lcd_clk經過一個選擇器mux所重復的部分,工具在時鐘樹綜合時,首先綜合tree3,平衡其內部偏差,然后對tree1進行綜合,同時平衡其內部偏差以及到達mux輸入端的延遲,最后對tree2進行綜合,平衡tree2自身的偏差以及tree2與tree1之間的偏差。如果兩個時鐘的頻率相差很多,對于其重復的區域,應當選擇對快速時鐘的要求作為統一目標要求再進行時鐘樹綜合。
????????
二、時鐘樹設計策略
1、綜合優化
1)有用偏差
????????在傳統的或早期的時鐘樹綜合時,期望獲得“零偏差”的時鐘樹。但是后來研究發現即使能夠獲得“零偏差”的時鐘樹,它的性能也不見得就是最好,有用偏差(useful skew)的概念隨即被提出并應用。
????????從一些時鐘樹拓撲結構中發現,有些組合邏輯電路(如datapath)延時較大,而處于同一時鐘樹中的寄存器的時鐘延時相對較小時,這時如果遷就延時長的組合邏輯電路,增加寄存器的時鐘延時并不影響時鐘樹的功能。這種方法稱作時鐘樹的有用偏差。如下圖中針對組合邏輯的延時違例,我們可以在CTS之前去加快到達第一個寄存器的源(source)時鐘信號,完成CTS后再去添加填塞單元(padding cell)去減慢到達第二個寄存器的靶(target)時鐘信號。
????????顯然,有用偏差就是利用時鐘偏差來滿足時序要求。
2)OCV與CPPR
????????在納米工藝條件和12英寸硅片技術中,片上誤差OCV在時序檢查時已經成為非常重要的一步工作。同時人們發現在考慮OCV時,它會對時鐘時序路徑延時偏差(skew)和數據路徑(data path)延時提出更嚴格的要求,因此需要在時鐘樹綜合階段進行分析和處理。同一個芯片上的誤(OCV,on-chip variation)會對芯片的時序產生直接影響。如兩個相同的緩沖器單元在輸入信號變化和負載相同的條件下,由于在芯片上所處位置不同,它們的實際門延時卻不同。
詳見靜態時序分析——On-chip Variation?
3)與布局結合的手動時鐘樹設計
????????在布局布線常用流程中,EDA工具自動放置標準單元,并在要插入時鐘樹的時序單元附近預留一定的空間,設計者指定時鐘的根節點和頻率、整個時鐘樹最大的電容值、轉換時間值以及所要達到的目標偏差值,CTS工具會根據設計者的要求將buffer單元自動地插入時鐘樹。當對具體的設計非常地了解時,可以采用與布局相結合的手動時鐘樹設計,具體實施如下:搜索所有的葉節點,根據模塊之間的關系,按照一定的相對規則指導工具將其放置在芯片適當的位置。在時鐘樹綜合階段,先在小范圍內綜合各個模塊的時鐘,即手動設置插入buffer的級數,每級buffer所驅動的具體的葉節點,然后在頂層平衡全局時鐘。? ? ??
4)多驅動buffer
????????對負載很大的時鐘樹,也即葉節點數目較大的時鐘樹,在根節點處采用多個buffer驅動(STA不能對這種平行連接的buffer做出準確的時序計算,而需要通過SPICE仿真),從而提高驅動負載的能力,如下圖(a)所示,從根節點出來的時鐘其中cpu_clk的負載較大,則在根節點處擴展多個驅動后再進行后面的時鐘樹綜合。下圖(b)展示了時鐘樹應用的綜合實例,它由三節結合組成,第一節為buffer鏈驅動,第二節為H-tree(也稱為魚骨狀)和第三節局部時鐘樹(葉)。
2、異步時鐘樹設計
????????雖然同步時鐘設計及其時鐘樹的綜合較為容易實現,但由于信號傳送在同一時間頻率發生,通常各模塊間的時鐘同屬于同一個主時鐘,因此能量功耗也最大。如果將結構bus作成自我定時各個模塊的時鐘成為相互獨立,時鐘的偏差與平衡也就容易實現了。在實際的SoC設計中,它是以非同步時鐘即異步時鐘設計來實現,從而降低功耗。
- 時鐘樹綜合對同步電路實現的優點是:電路結構簡單明朗,具有較好的魯棒性,驗證簡單。同步電路的缺點是:較大的時鐘在物理實施時具有一定的難度,封裝電感和電源電阻會在同步時鐘跳變的瞬間產生很大的噪聲。
- ?異步電路與同步電路相反,其電路不規則,但是速度快,功耗低,將全局時鐘變為多個局部時鐘,成為目前人們關注的熱點。
????????
? ? ? ? 如上圖所示,各級電路都有自己的局部自定時電路(self-timed circuit),各級之間通過異步握手信號完成電路的功能。異步電路的時鐘控制信號一般都是異步應答信號,在同一個異步電路中,要求其涵蓋的時序單元是在異步應答信號下同步工作,故異步應答信號在一個異步模塊中也是需要當作特殊的時鐘信號來處理。故異步電路的應用將一個大的全局時鐘,抽象成各個獨立的局部時鐘,給時鐘樹綜合帶來了極大的方便。
3、鎖存器時鐘樹
? ? ? ? 在一些設計中,人們發現同一時鐘周期的時序不夠用,而引入了時間借用(time borrowing)的概念和方法。
?詳見靜態時序分析——Timing borrow
????????與寄存器相比較,鎖存器的特點是數據在有效電平區間內傳輸,而非在時鐘的邊沿傳輸。在寄存器電路中,兩個寄存器之間組合路徑的延遲決定了時鐘最小的周期值,如果在一個周期內,組合路徑早早的完成了其功能,則將處于閑置狀態,直到下個周期的到來。相對于寄存器電路,鎖存器半個時鐘周期內直通,故能在本周期內容忍一定的負的剩余時間或者借用下一級的時間(time borrowing),因此鎖存器上的時序更容易滿足。
????????鎖存器可以實現較高頻率的電路,但是鎖存器在半個周期內透明的特性增加了電路的靈活性同時也帶來了一定的問題。由于噪聲的影響,數據上的毛刺信號很容易在鎖存器電路中傳遞,從而造成功能的錯誤,因此鎖存器的抗噪性比較差,在應用中要非常地謹慎。一般不提倡使用鎖存器,但是在設計經驗豐富,對內部電路了解較透徹,在物理設計中采用一定的抗噪方法的前提下,是可以考慮采用鎖存器的。