數字后端——時鐘樹綜合

????????在數字集成電路設計中,時鐘信號是數據傳輸的基準,它對于同步數字系統的功能、性能和穩定性起決定性作用,所以時鐘信號的特性及其分配網絡尤被人們關注。時鐘信號通常是整個芯片中有最大扇出、通過最長距離、以最高速度運行的信號。時鐘信號必須保證在最差的條件下,關鍵的時序要求能得到滿足,否則對時鐘信號任何不當的控制都可能導致紊亂情況,將錯誤的數據信號鎖存到寄存器,從而導致系統功能的錯誤。

????????在現有基于標準單元的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)兩種情況的處理方法如下:

  1. 自我交叉是很常見的一種情況,從PLL出來的時鐘,經過不同的處理(分頻或控制等)然后又通過一個選擇器(mux)匯集到一起,在這種情況下,工具在被設定為處理自我收斂狀態時,先綜合平衡右側tree部分的偏差(skew),然后再均衡circuit1和circuit2的偏差,從而平衡整個時鐘樹偏差。
  2. 相互交叉時鐘如圖所示,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),因此鎖存器上的時序更容易滿足。

????????鎖存器可以實現較高頻率的電路,但是鎖存器在半個周期內透明的特性增加了電路的靈活性同時也帶來了一定的問題。由于噪聲的影響,數據上的毛刺信號很容易在鎖存器電路中傳遞從而造成功能的錯誤,因此鎖存器的抗噪性比較差,在應用中要非常地謹慎。一般不提倡使用鎖存器,但是在設計經驗豐富,對內部電路了解較透徹,在物理設計中采用一定的抗噪方法的前提下,是可以考慮采用鎖存器的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253711.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253711.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253711.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

52次課(mysql用戶管理、常用sql語句、 mysql數據庫備份恢復)

MySQL創建用戶以及授權 默認用戶是root用戶,不可能所有人員都用root用戶,創建用戶防止誤刪除,因為mysql里邊有多個庫每個庫里有很多表,所以需要給單獨的用戶做一些授權我只需要它對某一個數據庫有權限,或者說對某個數據…

線程池的種類,區別和使用場景

newCachedThreadPool: 底層:返回ThreadPoolExecutor實例,corePoolSize為0;maximumPoolSize為Integer.MAX_VALUE;keepAliveTime為60L;unit為TimeUnit.SECONDS;workQueue為SynchronousQueue(同步隊…

20145225 《信息安全系統設計基礎》第14周學習總結

第九章 虛擬存儲器 虛擬存儲器是計算機系統最重要的概念之一,它是對主存的一個抽象 三個重要能力: 它將主存看成是一個存儲在磁盤上的地址空間的高速緩存,在主存中只保存活動區域,并根據需要在磁盤和主存之間來回傳送數據&#xf…

數字后端——布線

布線是繼布局和時鐘樹綜合之后的重要物理實施任務,其內容是將分布在芯片核內的模塊、標準單元和輸入輸出接口單元( I /O pad)按邏輯關系進行互連,其要求是百分之百地完成它們之間的所有邏輯信號的互連,并為滿足各種約束條件進行優…

動態加載和靜態加載及其編譯步驟

在類unix操作系統中,驅動加載方式一般分為:動態加載和靜態加載,下面分別對其詳細論述。 一、動態加載 動態加載是將驅動模塊加載到內核中,而不能放入/lib/modules/下。 在2.4內核中,加載驅動命令為:ins…

streamsets 集成 minio s3測試

具體streamsets crate 集成可以參考 streamsets crate 以下文檔只關注minio 集成的配置 minio 服務 搭建 具體搭建參考: https://www.cnblogs.com/rongfengliang/p/9197315.html 創建bucket (crate 集成使用) 測試的csv 文件從https://www.s…

sqlite性能優化

1、數據庫性能上 1.1 批量事務插入,提升數據插入的性能 由于sqlite默認每次插入都是事務,需要對文件進行讀寫,那么減少事務次數就能簡書磁盤讀寫次數從而獲得性能提升。 1.2 單條sql優于多條sql 實測發現,對于幾十條sql插入當你替…

【codecombat】 試玩全攻略 第十四關 已知敵人

第十四關 已知敵人 在這一關里,我們的英雄獲得了一副可以看見敵人的眼鏡,所以他很強勢的學會了“發現敵人”的技能。 hero.findNearestEnemy()命令,單詞多了,首字母都要大寫了,不然分不出來。玩過wow的小伙伴用過 宏命…

數字后端——信號完整性分析

隨著光刻和集成電路制造工藝的不斷進步,以及芯片的特征尺寸從深亞微米到納米的迅速采用,人們一方面因為芯片的功能極大提高而受益,另一方面,當邏輯門的溝道長度減小時,門的開關時間會減小,這意味著輸出驅動…

新浪前端面試

1、什么是Html語義化? 語義化 div > section,div > nav(語言自己能解釋), input/(關閉符號) br/相對于樣式標記,如 i(樣式)/ em(語義);b(樣式&#xff…

poj3278 【BFS】

Catch That CowTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 97240 Accepted: 30519Description Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a num…

表單高級

● 表單高級 ○ 表單字段集<fieldset></fieldset> ■ 功能&#xff1a;相當于一個方框&#xff0c;在字段集中可以包含文本和其他元素。該元素用于對表單中的元素進行分組并在文檔中區別標出文本。fieldset元素可以嵌套&#xff0c;在其內部可以在設置多個fieldset…

CMOS圖像傳感器——TDI CIS

一、面陣與線陣圖像傳感器 人們在日常生活中見到的相機大多基于普通的面陣圖像傳感器,這種相機多用來拍攝靜止的物體。即使用它們來拍攝運動的物體,也僅僅是縮短了相鄰兩次拍攝的時間間隔,無需對所拍攝圖像進行額外操作,對物體的運動方向和速度也沒有限定條件。 除此之外,…

gpio_request 原形代碼

其原型為 int gpio_request(unsigned gpio, const char *label) 先說說其參數&#xff0c;gpio則為你要申請的哪一個管腳&#xff0c;label則是為其取一個名字。其具體實現如下&#xff1a; [cpp] view plaincopyprint?int gpio_request(unsigned gpio, const char *label) …

【noip模擬】德充符

時間限制&#xff1a;2s 內存限制&#xff1a;512MB 【題目描述】 申徒嘉和鄭子產都是伯昏無人的學生&#xff0c;子產因為申徒嘉是殘疾人&#xff0c;非常看不起他&#xff0c;于是想要刁難他。 子產給了申徒嘉 n個數 a1,a2...an。 現在他要求申徒嘉重新排列這些數&#xff0c…

做好數據挖掘模型的9條經驗總結

愛數據學習社 welcome數據挖掘是利用業務知識從數據中發現和解釋知識(或稱為模式)的過程&#xff0c;這種知識是以自然或者人工形式創造的新知識。當前的數據挖掘形式&#xff0c;是在20世紀90年代實踐領域誕生的&#xff0c;是在集成數據挖掘算法平臺發展的支撐下適合商業分析…

json及JavaBean轉json

先來看看JSON&#xff1a; 什么是JSON&#xff1a; JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。 JSON是用字符串來表示Javascript對象&#xff0c;例如可以在Servlet中發送一個JSON格式的字符串給客戶端Javascript&#xff0c;Javascript可以執行這個字符串…

數字后端——低功耗設計物理實施

一、低功耗設計方案綜述 為了實現集成電路的低功耗設計目標&#xff0c;我們需要在系統設計階段就采用低功耗設計方案&#xff0c;因為隨著設計流程的逐步推進&#xff0c;到了芯片設計實現階段&#xff0c;降低芯片功耗的方法將越來越少&#xff0c;可節省功耗的百分比將不斷下…

Eclipse里修改SVN的用戶名和密碼

刪除Eclipse subclipse plugin中記住的SVN用戶名密碼&#xff1a; 1&#xff09; 查看你的Eclipse中使用的是什么SVN Interface windows > preference > Team > SVN #SVN Interface 2.&#xff09;如果是用的JavaHL, 找到以下目錄并刪除auth目錄. 刪除C:\Users\…

Omap3530 的GPIO中斷設置

Omap3530 的GPIO中斷設置&#xff1a; 1.配置成GPIO&#xff0c;申請GPIO中斷 omap_cfg_reg(OMAP3_KBD_GPIO);配置成gpio if (gpio_request(OMAP3_KBD_GPIO, "kbd7279 IRQ") < 0) printk(KERN_ERR "Failed to request GPIO%d for kbd IRQ/n");//申請GPI…