1. 程式人生 > ><DC guide ---9>

<DC guide ---9>

帶來 連接 src 最大 個推 等等 pan 因子 最終

我們進行了時鐘建模,設置了input\output_delay,這些都是為了DC對綜合邏輯的優化而準備的.

我們知道std_cell各自都由延遲,DC不斷替換期間,以滿足時序要求。那麽這些cell_delay到底是怎麽一回事?

整個電路會被拆成 cell +net cell的延遲信息是一個範圍值,它隨著輸入\輸出連接的信號的不同而呈現非線性變化.

net是純導線,有著RC寄生效應.需要把這種delay時間也考慮進來.

總的來說: 查表去找尋 cell + net 各自的延遲,然後累加在一起啊,看是否符合時序要求。

對於cell的延遲,DC是根據 輸入跳變速率 input transition 和 輸出負載電容 out load 進行查表所得的。

對於net的延遲,DC是根據 wire_load模型的fanout-length、resistance、cap、area值進行查表所得的。

Cell 的delay模型

技術分享

這是一個2輸入與門, 我們可以感覺出 輸入----輸出之間的時間,可能受到 input 跳變速率、output負載電容、PVT(氣壓、電壓、溫度)等多方面共同影響。

如果負載電容變大,輸出信號B的將呈現一種緩慢拉升的狀態,如下左圖:

如果輸入A變化速率慢, 同樣傳導到輸出端就會慢一些,如下右圖:

技術分享 技術分享

我們知道, 電路會被綜合成N多的cell,我們不可能說明每一個cell的輸入跳變\輸出負載. 工藝廠商替我們想到了這個問題.

技術分享

假設兩個寄存器之間的verilog,被翻譯成如圖的組合邏輯。黑色粗線條是wire線。其余均是std-cell。

先理解一概概念:fanout,即驅動負載的能力大小。 And1的輸出,要驅動一個not1門,以及And2的1個輸出pin,Not1的輸出只需要驅動nor1的一個pin。

std_cell每個cell的每個pin,肯定要消耗前一級的負載能力。而且消耗程度可能不盡相同。如果出現某個cell的輸出端掛載了過多的負載,可能部分負載就不能正常

工作,這個跟宿舍裏面一塊用高壓鍋、電吹風、熱水壺一個道理。

為了避免這種情況:我們要清楚的知道 一個cell的輸出端,所能承受的最大負載值。 以及cell每一個輸入pin,所要消耗的資源大小。

在lib文件中,對於cell的描述信息中,就包含了這兩個信息: max_fanout ----輸出引腳所能帶動的最大負載值。

fanout_load ------輸入引腳將消耗的資源。

如果不考慮導線的存在,直接把cell的引腳互聯起來就行了。但是由於寄生參數,導線又不得不考慮。

我是這樣認為的:如果一個cell驅動多個器件,那導線長度必定要增加,因為你需要走線去連接後面若幹cell的pin。

所以,fanout值和互連線長度會呈現一定的關系: 下圖就是:

技術分享

Resistance: 是單位長度導線的電阻值, 0.000331kΩ

Capacitance: 是單位長度導線的電容值,0.000086pF

長度對應關系如表格. slop是計算超出部分的斜率值.

比如fanout 22的導線的長度應該是: 952.16+ (22-20)*93.7215 = 1139.6

所以這段導線的總阻值: R= 1139.6 * .000331 = 0.377 k. 總電容 Cnet = 1139.6 * 0.000086 = 0.098 pF.

技術分享

如果一個net上連接若幹個cell,net的模型可以參考下面三種建模方式:

導線delay的計算方法: 其實對於前後級cell互聯的net有三種建模方法:每種的net_delay計算公式都不一樣。

技術分享

第一種: 我們認為前後級的cell離得很近,這時候我們認為導線是很短的.電阻接近於0.(電容不為0,這個我也沒想清楚)

第二種: 是一種平衡式的走線模型,此時Dc值(即delay值) 計算公式如上.

第三種: 是最壞的走線模型,Dc值計算公式如上.

這是三種不同的建模方法,使用哪一種建模方式,由我們自己決定. 它取決於我們使用哪一種 corne------ BEST WORST NORMAL

我們知道,如果一段導線有Resistance、Cap值,會帶來延遲以及影響輸出端的transition time,根據導線的建模方式,我們知道了一段導線delay的計算公式,

但是我們還不知道transition的計算公式. 這個該怎麽辦呢? 我也不知道是不是由於理論上無法計算,還是出於別的原因.

把導線的電容連同Cpin值一起考慮. 這樣理想的認為導線只具有delay效果,不具有改變transition time的效果

技術分享

改變transition time 這個鍋,交給cell來背了. 雖然不知道為啥這樣做,但是我們看lib中cell的信息:

技術分享

上面是兩個表格,其中 input_trans值 是cell 輸入pin的 transition time,Output_load 是 Cpin + Cnet.

根據這兩個信息, 我們就能查表,找出該cell的延遲值,以及輸出端的 transition time值.

此時導線只考慮 delay效果. 因此 output transition 又會作為下一個cell的input_transition, 依次嵌套下去。

從這個推演來看:

我們只要知道current_design的輸入 transition,輸出端的負載值。 然後通過建模導線,根據fanout,計算導線長度,Resistance、Cap值,計算導線延遲。

層層計算cell的延遲、transition時間。就能較為準確的描述整個路徑的delay信息。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

我們理解了這一個建模原理, 有必要了解下lib庫文件裏面包含哪些信息.

(1) 庫名稱

(2) 庫的基本特征,比如工藝類型,版本號、庫中參數的單位描述,電壓是1V? 時間精度是1ns?電阻單位是1kΩ? corner類型,是Best、Typical、Worst

等等這些基本的信息。如下圖:

技術分享

(3) 庫環境描述。

這個主要是描述,庫的參數在不同的溫度、電壓、壓強等條件的偏差情況。它是通過比例因子來描述的。

舉個例子:我們一般情況下一個AND的cell_delay是1ns,但是在高溫85℃,電壓3,3V,cell_delay的計算需要再乘以一個系數K。

技術分享技術分享

(4) wire模型。

這個是對net互連線所有模型的描述,跟上圖中一樣,包含了 單位長度電阻值、單位長度電容值、長度和fanout的對應表格等信息。

在這裏,需要特別說一下: 我們的wire模型不是只有一個.會有許多個.

技術分享

為什麽要有那麽多的模型呢? DC文檔上是這樣解釋的: 在同一種工藝庫下,可能每家fabless設計公司的芯片大小都不一樣,

如果面積比較大, 相應的布線就先稀疏一些,後果就是net的線變長了.所以看上圖140000 和800000規模下, wire的模型還是有區別的.

所以我們需要選擇合適的模式. (DC好像能自動選擇)

(5) cell描述

這個才是最重要的部分, 一個庫內的cell信息,是我們最終想要映射的.

cell的信息包括: 面積、

每一個輸出口所能承載的最大fanout值,輸出口說能連接的最大電容值。

每一個輸入口所消耗掉的fanout, 自己的Cpin值. 所支持的最大transition範圍.

當然還有,每個cell, input-transition 和out_load ,生成的 cell-delay out_transition表格信息。

等等,我可能也說不太清楚.如下表:

技術分享

lib庫主要就是這5個方面的內容.

<DC guide ---9>