本章節(jié)介紹庫(library)里單元描述中所提供的時序信息。單元可以是標準單元、IO 緩沖器或者是如 USB 內(nèi)核這樣的復雜 IP。
- 除時序信息外,庫單元描述中還包含一些其它屬性,例如單元面積和功能,這些屬性與時序無關,但在 RTL 綜合(synthesis)過程中會用到。在本章節(jié)中,我們僅關注與時序和功耗計算有關的那些屬性??梢允褂酶鞣N標準格式來描述庫單元,各種格式的內(nèi)容基本相似,本書中使用 Liberty 語法描述庫單元。本章節(jié)的前面部分介紹了線性和非線性時序模型,隨后介紹了用于納米技術的高級時序模型,這些將在 3.7 節(jié)中進行介紹。
?
3.1 引腳電容
單元的每個輸入和輸出都可以在引腳(pin)上指定電容。在大多數(shù)情況下,僅為單元輸入引腳指定電容,而不為輸出引腳指定電容,即大多數(shù)單元庫中的輸出引腳電容為 0。
上面的示例展示了輸入 INP1 引腳電容值的一般規(guī)格(specification)。在最基本的格式中,引腳電容被指定為單個值(在上面的示例中為 0.5 個單位)。電容單位通常為皮法拉(pF),一般在庫文件的開頭指定。單元描述中還可以為 rise_capacitance(0.5 個單位)和 fall_capacitance(0.45 個單位)分別指定值,這些值是指引腳 INP1 上發(fā)生電平上升和下降跳變時的值。也可以將 rise_capacitance 和 fall_capacitance 的值指定為范圍,并在描述中指定下限值和上限值。
?
3.2 時序模型
邏輯單元的時序模型(timing model)旨在為設計中的各種單元實例(instance)提供準確的時序信息。通常會從單元的詳細電路仿真中獲得時序模型,用以對單元工作時的實際情況進行建模,且需要為邏輯單元的每個時序弧都建立一個時序模型。
圖 3-1
?
讓我們首先考慮圖 3-1 中所示的反向器(inverter)的時序弧。 由于這是一個反相器,因此輸入端的電平上升(下降)跳變會導致輸出端的電平下降(上升)跳變。表征這個反相器的兩種延遲是:
- Tr:輸出上升沿延遲 Tf:輸出下降沿延遲
注意,延遲是根據(jù)單元庫中定義的閾值(threshold)點(詳見 2.4 節(jié))測量的,通常為 50%Vdd。 因此,延遲值是指從輸入經(jīng)過其閾值點到輸出經(jīng)過其閾值點的延遲。
通過反相器的時序弧的延遲取決于兩個因素:
輸出負載,即反相器輸出引腳上的電容負載
輸入信號的過渡(transition)時間
延遲值與負載電容有直接關系:負載電容越大,延遲越大。在大多數(shù)情況下,延遲會隨著輸入信號過渡時間的增加而增加。而在某些情況下,輸入信號閾值點(用于測量延遲)與單元的內(nèi)部開關點(switching point)明顯不同。在這種情況下,通過單元的延遲可能相對于輸入信號過渡時間表現(xiàn)出非單調(diào)行為:較大的輸入信號過渡時間可能會產(chǎn)生較小的延遲,尤其是在輸出負載較小的情況下。
邏輯單元輸出引腳的壓擺(slew)主要取決于輸出引腳電容:輸出信號過渡時間會隨著輸出負載的增加而增加。 因此,在輸入端壓擺較大(輸入信號過渡時間較長)的情況下,選擇合適的單元類型及輸出負載,可以改善輸出端的壓擺。圖 3-2 展示了通過調(diào)節(jié)邏輯單元的輸出負載,可以改善或惡化單元輸出信號過渡時間的情況。
圖 3-2
3.2.1 線性時序模型
一個簡單的時序模型是線性延遲模型(linear delay model),該模型使用含兩個參數(shù)的線性函數(shù)表示邏輯單元的延遲和輸出過渡時間,這兩個參數(shù)是:輸入過渡時間(input transition time)和輸出負載電容(output load capacitance)。通過邏輯單元的延遲(D)使用線性模型的一般形式如下所示:
其中 D0,D1,D2 是常數(shù),S 是輸入過渡時間,C 是輸出負載電容。 對于亞微米(submicron)技術,線性延遲模型在輸入過渡時間和輸出負載電容的范圍內(nèi)并不準確,因此,目前大多數(shù)單元庫都使用更復雜的模型,例如非線性延遲模型(non-linear delay model)。
?
3.2.2 非線性延遲模型
大多數(shù)單元庫都包括表格模型(table model),用于為單元的各種時序弧指定延遲并進行時序檢查。一些用于納米技術的較新的時序庫還提供了基于電流源的高級時序模型(例如 CCS,ECSM 等),本章稍后將對此進行介紹。 這些表格模型被稱為 NLDM(Non-Linear Delay Model),可用于延遲、輸出壓擺計算或其他時序檢查。表格模型中提供了:在單元輸入引腳處輸入過渡時間和輸出引腳處輸出負載電容的各種組合下通過單元的延遲。
NLDM 模型以二維形式表示,兩個獨立變量是輸入過渡時間和輸出負載電容,表中的數(shù)值表示延遲。以下是一個典型反相器單元的表格模型示例:
上面的示例描述了輸出引腳 OUT 的延遲信息。單元描述里的這個部分包含了從引腳 INP1 到引腳 OUT 時序弧的上升和下降延遲模型,以及引腳 OUT 的 max_transition 允許時間。上升和下降延遲有單獨的模型(用于輸出引腳),分別標記為 cell_rise 和 cell_fall。索引(index)變量的類型和順序在以下查找表模板 delay_template_3x3 中進行了描述:
該查找表模板指定了表中的第一個變量是輸入過渡時間,第二個變量是輸出負載電容。表中數(shù)值的給定類似于嵌套循環(huán),其中第一個索引(index_1)為外部循環(huán)變量,第二個索引(index_2)為內(nèi)部循環(huán)變量,依此類推。在上面的示例中每個變量都有三個可能值(條目),因此它對應于一個 3×3 的表。在大多數(shù)情況下,表的條目也可按照表的格式設置,然后可以將第一個索引(index_1)視為行索引,而第二個索引(index_2)則等同于列索引。索引值(例如 1000)是偽占位符,它們會被 cell_fall 和 cell_rise 延遲表中的實際索引值覆蓋。指定索引值的另一種方法是在模板定義中指定索引值,而不是在 cell_rise 和 cell_fall 表中指定索引值,例如以下示例:
根據(jù)延遲表,輸入下降過渡時間為 0.3ns 且輸出負載為 0.16pf 時,反相器的上升延遲為 0.1018ns。 由于輸入的下降沿跳變導致反相器輸出的上升沿跳變,因此當輸入引腳發(fā)生下降沿跳變時,應該去查詢 cell_rise 延遲表。
將表格中的延遲值表示為輸入過渡時間和輸出負載電容這兩個變量的函數(shù)的這種形式稱為非線性延遲模型,因為在這些表格中可以看到延遲隨輸入過渡時間和輸出負載電容的非線性變化。
注意,表格模型也可以是 3 維的,例如一個具有互補輸出 Q 和 QN 的觸發(fā)器,這將在 3.8 節(jié)中進行介紹。
NLDM 模型不僅可以用于計算延遲,而且還可用于計算邏輯單元輸出引腳的過渡時間,該時間同樣由輸入過渡時間和輸出負載電容來表征。因此,還存在著另外一張獨立的用于計算單元的輸出上升和下降過渡時間的二維表格。
輸出過渡時間也同樣有兩張表:rise_transition 和 fall_transition。如第 2 章所述,過渡時間是根據(jù)特定的壓擺閾值點(通常為電源的 10%-90%)測量的。
綜上所述,使用 NLDM 模型的反相器單元具有下列表格模型:
- 上升延遲時間(Rise delay)下降延遲時間(Fall delay)上升過渡時間(Rise transition)下降過渡時間(Fall transition)
假設有這么一個反相器單元,其輸入過渡時間和輸出負載電容如圖 3-3 所示。對于 15ps 的輸入(下降)過渡時間和 10fF 負載,可從 cell_rise 表中獲得輸出上升延遲時間,而從 cell_fall 表中可獲得 20ps 輸入(上升)過渡時間和 10fF 負載下的輸出下降延遲時間 。
圖 3-3
指定單元邏輯功能為“反相”(invert)的信息在哪里呢?該信息可以在時序弧里的 timing_sense 字段中找到,但在某些情況下如果該字段中未指明,則應該也可從引腳功能(pin function)中推斷出。
例如對于反相器單元,時序弧為 negative_unate,這表明輸出引腳電平跳變方向與輸入引腳電平跳變方向相反。因此,在 cell_rise 表中進行查找時使用的參數(shù)是輸入引腳的下降過渡時間。
** 查找非線性延遲模型**
這個小節(jié)通過一個例子來說明表格模型的查找。如果輸入過渡時間和輸出電容正好與表格條目中的值相對應,則表格查找是很簡單的,因為可以直接從表中對應的位置讀出時序值。以下示例對應于一般情況,即輸入過渡時間和輸出電容無法與表格條目中的值對應的情況。在這種情況下,可利用二維插值的方法來得到最終的時序值,一般選擇每個維度中兩個最接近的表格條目中的值以進行表格插值??紤]輸入過渡時間為 0.15ns、輸出電容為 1.16pF 的輸出下降沿查找表(前文的示例), 下面復制了與二維插值有關的輸出下降過渡表的相應部分。
在下面的公式中,兩個 index_1 值分別表示為 x1 和 x2;兩個 index_2 值分別表示為 y1 和 y2,而對應的表值分別表示為 T11,T12,T21 和 T22。
如果需要在表中查找(x0,y0)的值,則查找值 T00 只能通過插值獲得,計算公式如下:
其中
將 0.15ns 代入 index_1,將 1.16pF 代入 index_2,根據(jù)上述公式可計算出 fall_transition 值為:
請注意,上面的等式對于內(nèi)插和外推均有效,即當索引值(x0,y0)超出范圍時依然成立。例如,當 index_1 索引值為 0.05 且 index_2 索引值為 1.7 時,fall_transition 值計算如下:
?
3.2.3 閾值規(guī)格和壓擺降額
壓擺值(slew)基于的是在庫中指定的測量閾值點,大多數(shù)上一代的庫(0.25um 或更舊的庫)都使用 10%和 90%作為壓擺(或稱過渡時間)的測量閾值點。
壓擺閾值點的選擇對應的是波形的線性部分。隨著技術的發(fā)展,實際波形最線性的部分通常在 30%至 70%之間。 因此,大多數(shù)新一代時序庫都將壓擺測量閾值點指定為 Vdd 的 30%和 70%。但是,由于之前測得的過渡時間在 10%至 90%之間,因此在填充庫時,通常將測得的 30%至 70%的過渡時間加倍,這由壓擺降額系數(shù)(slew derate factor)指定,通常指定為 0.5。壓擺測量閾值點為 30%和 70%且壓擺降額系數(shù)為 0.5,等效于測量閾值點為 10%和 90%。 閾值設置的示例如下:
上面的設置規(guī)定了要將表格中的過渡時間乘以 0.5,以獲得與閾值(30%-70%)設置相對應的過渡時間。這意味著表格中的值(以及相應的索引值)實際上是 10%-90%閾值點的測量值。在標定過渡時間值時,首先在 30%-70%處測量,然后再把測量值外推到 10%至 90%((70-30)/(90-10)= 0.5)。
以下是壓擺測量閾值點設置的另一個例子:
slew_lower_threshold_pct_fall:20.0;
slew_upper_threshold_pct_fall:80.0;
slew_lower_threshold_pct_rise:20.0;
slew_upper_threshold_pct_rise:80.0;
slew_derate_from_library not specified
在上述 20%-80%壓擺閾值設置的例子中,未指定 slew_derate_from_library(默認值為 1.0),這意味著庫中的過渡時間不會降額(derate)。表格中的過渡時間值直接對應于 20%-80%的閾值點,如圖 3-4 所示:
圖 3-4
?
對上述單元庫中壓擺閾值設置稍作修改,如下所示:
slew_lower_threshold_pct_fall:20.0;
slew_upper_threshold_pct_fall:80.0;
slew_lower_threshold_pct_rise:20.0;
slew_upper_threshold_pct_rise:80.0;
slew_derate_from_library:0.6;
在這種情況下,將 slew_derate_from_library 設置為 0.6,并將壓擺測量閾值點指定為 20%和 80%,這意味著庫中的過渡時間表里的數(shù)據(jù)對應于外推到 0%至 100%((80-20)/(100-0)= 0.6)的值,如圖 3-5 所示:
圖 3-5
?
指定了壓擺降額后,計算延遲時使用的壓擺值等于:
庫中過渡時間值 * 壓擺降額系數(shù) ( library_transition_time_value * slew_derate)
這就是延遲計算工具在內(nèi)部使用的壓擺值,是對應于指定的壓擺閾值測量點的。
?
3.3 時序模型 - 組合邏輯單元
考慮一個兩輸入與門(and)的時序弧,由前面章節(jié)所述可知該單元的兩個時序弧均為正單邊類型(positive_unate), 因此,輸入引腳的電平上升對應于輸出引腳的電平上升,反之亦然。
對于這個兩輸入與門,共有以下 4 種延時:
- A -> Z :輸出上升沿延遲(Output rise)A -> Z :輸出下降沿延遲(Output fall)B -> Z :輸出上升沿延遲(Output rise)B -> Z :輸出下降沿延遲(Output fall)
圖 3-6
這意味著對于 NLDM 模型,將會有四個表格模型用于指定延遲。同樣,也將有四個表格模型用于指定輸出過渡時間(壓擺)。
?
3.3.1 延遲與壓擺模型
以下是一個用于分析三輸入與非門(nand)單元的輸入 INP1 到輸出 OUT 的時序模型:
在上面的例子中,使用了兩個單元延遲表 cell_rise 和 cell_fall 以及兩個過渡時間表 rise_transition 和 fall_transition 來描述從 INP1 到 OUT 的時序弧的特性,上面的例子中還包括了輸出的最大過渡時間(max_transition)值。
如章節(jié) 2.7 中所述,與非門單元中的時序弧為負單邊類型(negative unate),這表示輸出引腳電平跳變方向與輸入引腳電平跳變方向是相反的。因此,查找 cell_rise 表對應于輸入引腳上的下降過渡時間。同樣,通過與門單元或者或門單元的時序弧是正單邊類型(positive unate)的,因為輸出引腳電平跳變方向與輸入引腳電平跳變方向相同。
?
3.3.2 通用組合邏輯塊
考慮以下這個具有三輸入和兩輸出的通用組合邏輯塊(General Combinational Block):
圖 3-7
?
像這樣的組合邏輯塊可以具有多個時序弧。通常,從塊的每個輸入到每個輸出都有一條時序弧。如果從輸入到輸出的邏輯路徑是同相(non-inverting)或正單邊類型的,則輸出的極性(polarity)與輸入的極性相同;如果邏輯路徑是反相(inverting)或負單邊類型,則輸出的極性與輸入相反,即當輸入電平上升時,輸出電平將下降。這些時序弧代表了通過這個組合邏輯塊的傳播延遲。
通過組合邏輯單元的某些時序弧可以既是正單邊類型,也是負單邊類型的。一個例子是通過兩輸入異或門(xor)單元的時序弧,根據(jù)該單元的另一個輸入的邏輯狀態(tài),兩輸入異或門單元的輸入引腳處的電平跳變會導致輸出引腳處的電平沿相同或相反的方向跳變。這些時序弧可以描述為非單邊類型(non-unate)的,也可以描述為兩組狀態(tài)相關(state-dependent)的正單邊類型時序模型和負單邊類型時序模型。這種與狀態(tài)相關的表格模型將在 3.5 節(jié)中有更詳細的描述。