2.5 波形的壓擺
壓擺率(slew rate)的定義是電壓轉(zhuǎn)換速率。在靜態(tài)時序分析中,通常會根據(jù)電平轉(zhuǎn)換的快慢來衡量上升波形或下降波形。壓擺(slew)通常是根據(jù)轉(zhuǎn)換時間(transition time)來定義的,轉(zhuǎn)換時間是指信號在兩個特定電平之間轉(zhuǎn)換所需要的時間。請注意,轉(zhuǎn)換時間實際上就是壓擺率的倒數(shù),因此轉(zhuǎn)換時間越大,壓擺率就越低,反之亦然。
圖 2-10
回顧圖 2-10 給出的 CMOS 單元輸出端典型波形:靠近 Vdd 和 Vss 兩端的波形是漸近的,很難確定過渡時間的確切起點和終點。因此,一般使用指定的閾值電壓來規(guī)定過渡時間計算的起點和終點。例如,壓擺閾值設(shè)置可以如下所示:
#下降沿的閾值點
slew_lower_threshold_pct_fall:30.0;
slew_upper_threshold_pct_fall:70.0;
#上升沿的閾值點
slew_lower_threshold_pct_rise:30.0;
slew_upper_threshold_pct_rise:70.0;
以上這些數(shù)值的單位同樣是 Vdd 的百分比。閾值設(shè)置指定了下降壓擺(Fall slew)為下降沿達到 Vdd 的 70%和 30%的時間之差。類似地,設(shè)置指定了上升壓擺(Rise slew)為上升沿達到 Vdd 的 30%和 70%的時間之差,如圖 2-13 所示:
圖 2-13
圖 2-14 是另一個示例,其中下降沿的壓擺測量范圍為 80%至 20%,而上升沿的壓擺測量范圍為 10%至 90%,以下是這個例子的閾值設(shè)置:
#下降沿的閾值點
slew_lower_threshold_pct_fall:20.0;
slew_upper_threshold_pct_fall:80.0;
#上升沿的閾值點
slew_lower_threshold_pct_rise:10.0;
slew_upper_threshold_pct_rise:90.0;
圖 2-14
2.6 信號偏斜
偏斜(skew)是指兩個或多個信號(數(shù)據(jù)或者時鐘)之間的時序之差。例如,如果一個時鐘樹(clock tree)有 500 個終點,并且有 50ps 的偏斜,則意味著最長時鐘路徑和最短時鐘路徑之間的延遲差為 50ps。如圖 2-15 所示是一個時鐘樹,時鐘樹的起點通常是定義時鐘的節(jié)點,時鐘樹的終點通常是同步元件(例如觸發(fā)器)的時鐘引腳。時鐘延遲(clock latency)是指從時鐘源到終點所花費的總時間,時鐘偏斜(clock skew)是指到達不同時鐘樹終點的時間差。
圖 2-15
理想時鐘樹是假定時鐘源具有無限驅(qū)動力,也就是說,時鐘可以無延遲地驅(qū)動無限個終點。另外,假定時鐘樹中存在的任何邏輯單元都具有零延遲(zero delay)。在邏輯設(shè)計的早期階段,STA 通常使用理想的時鐘樹來執(zhí)行,因此分析的重點是數(shù)據(jù)路徑(data path)。在理想的時鐘樹中,默認情況下時鐘偏斜為 0ps,可以使用 set_clock_latency 命令顯式地指定時鐘樹的延遲:
set_clock_latency 2.2 [get_clocks BZCLK]
上述命令規(guī)定了時鐘樹 BZCLK 的上升沿延遲(rise latency)和下降沿延遲(fall latency)均為 2.2ns。注意,如果兩個延時值不同,可以使用選項**-rise 和 -fall**來分別指定延時值。
時鐘樹的時鐘偏斜可以借助 set_clock_uncertainty 命令顯式指定時鐘不確定度的值來進行描述:
set_clock_uncertainty 0.250 -setup [get_clocks BZCLK]
set_clock_uncertainty 0.100 -hold [get_clocks BZCLK]
set_clock_uncertainty 命令為時鐘沿的出現(xiàn)指定了一個窗口。時鐘邊沿時序的不確定性將考慮多個因素,例如時鐘周期抖動(jitter)和用于時序驗證的額外裕量(slack)。每個實際的時鐘源都有一定的抖動量,即一個時間窗口,在該窗口內(nèi)都可能會出現(xiàn)時鐘沿。時鐘周期抖動取決于所使用的時鐘發(fā)生器的類型。實際上是不存在理想時鐘的,也就是說,所有時鐘都具有一定的抖動量,并且在指定時鐘不確定度(clock uncertainty)時應(yīng)包括時鐘周期抖動。
在時鐘樹被實現(xiàn)(implement)之前,時鐘不確定度還必須包括預(yù)期的時鐘偏斜。
可以為建立時間(setup time)檢查和保持時間(hold time)檢查指定不同的時鐘不確定度。保持時間檢查不需要將時鐘抖動包括在內(nèi),因此通常為保持時間檢查指定較小的時鐘不確定度。
如下圖 2-16 所示是時鐘不確定度為 250ps 的建立時間檢查。圖 2-16(b)揭示了時鐘不確定度是如何從邏輯傳播到下一個觸發(fā)器的耗時中消去的,這相當(dāng)于要驗證設(shè)計能夠以更高的頻率運行。
圖 2-16
如上所述,set_clock_uncertainty 命令也可以用于建模任何額外時序裕量。例如,設(shè)計人員可以在設(shè)計過程中依據(jù)一定的悲觀度而設(shè)置 50ps 的時序裕量,使用 set_clock_uncertainty 命令時會將這個值加進去。
總而言之,在實現(xiàn)時鐘樹之前,set_clock_uncertainty 命令指定的值將包括時鐘抖動、時鐘偏斜估計值以及額外悲觀度。
set_clock_latency 2.0 [get_clocks USBCLK]
set_clock_uncertainty 0.2 [get_clocks USBCLK]
上面這條命令中 200ps 的時鐘不確定度可能是由 50ps 時鐘抖動、100ps 時鐘偏斜以及 50ps 的額外悲觀度組成的。
隨后我們將看到 set_clock_uncertainty 這條命令是如何影響建立時間和保持時間檢查的,我們最好能夠?qū)r鐘不確定度視為最終計算時序裕量(slack)的補償(offset)。
?
2.7 時序弧
每個邏輯單元都有多個時序?。╰iming arc)。像與門、或門、與非門、加法器這些組合邏輯單元,每個輸入引腳到每個輸出引腳都存在一條時序弧。而像觸發(fā)器之類的時序邏輯單元除了有從時鐘引腳到輸出引腳的時序弧,還有相對于時鐘引腳的數(shù)據(jù)引腳時序約束(timing constraint)。每個時序弧都具有特定的時序敏感(timing sense),即輸出如何針對輸入的不同跳變類型而變化。如果輸入引腳上的上升沿跳變導(dǎo)致輸出引腳電平上升(或不變),而輸入引腳上的下降沿跳變導(dǎo)致輸出引腳電平下降(或不變),則時序弧為正單邊(positive unate)類型。例如,與門和或門的時序弧為正單邊類型,如下圖 2-17(a)所示:
圖 2-17
如果輸入引腳上的上升沿跳變導(dǎo)致輸出引腳電平下降(或不變),而輸入引腳上的下降沿跳變導(dǎo)致輸出引腳電平上升(或不變),則時序弧為負單邊(negative unate)類型。例如,與非門和或非門的時序弧為負單邊類型,如上圖 2-17(b)所示。
在非單邊(non-unate)時序弧中,僅僅從一個輸入引腳的跳變方向是無法確定輸出引腳電平將如何跳變的,還要取決于其他輸入引腳的狀態(tài)。例如,異或門中的時序弧是非單邊時序弧,如上圖 2-17(c)所示。
單邊性(unateness)對于時序很重要,因為它指定了輸入引腳上電平跳變沿將如何通過邏輯單元傳播以及將如何出現(xiàn)在邏輯單元的輸出引腳上。
可以利用時序弧的非單邊性(如異或門)來反轉(zhuǎn)時鐘的極性(polarity)。如下圖 2-18 所示,如果輸入 POLCTRL 為邏輯 0,則單元 UXOR0 的輸出上的時鐘 DDRCLK 具有與輸入時鐘 MEMCLK 相同的極性。如果 POLCTRL 為邏輯 1,則單元 UXOR0 的輸出時鐘的極性與輸入時鐘 MEMCLK 的極性相反。
圖 2-18
2.8 最小與最大時序路徑
邏輯通過邏輯路徑傳播的總延遲稱為路徑延遲(path delay),包括了邏輯路徑中經(jīng)過各個邏輯單元(cell)和網(wǎng)絡(luò)走線(net)的延遲。通常,邏輯想要傳遞到一個終點可能有不止一條邏輯路徑可走,所經(jīng)過的實際路徑取決于邏輯路徑上其他輸入的狀態(tài)。圖 2-19 給出了一個例子,由于有多個到達邏輯終點的路徑,因此可以得出到達邏輯終點的最大時序和最小時序,對應(yīng)于最大時序和最小時序的路徑分別稱為最大路徑和最小路徑。兩個節(jié)點之間的最大路徑是指延遲最大的路徑(也稱為最長路徑),同樣,最小路徑是指延遲最小的路徑(也稱為最短路徑)。請注意,最長和最短是指路徑上的累積延遲,而不是路徑上的邏輯單元個數(shù)。
圖 2-19
圖 2-19 給出了兩級觸發(fā)器之間數(shù)據(jù)路徑的示例??梢钥吹浇?jīng)過 UNAND0、UBUF2、UOR2 和 UNAND6 單元的路徑是觸發(fā)器 UFF1 和 UFF3 之間的最大路徑,而經(jīng)過 UOR4 和 UNAND6 單元的路徑是觸發(fā)器 UFF1 和 UFF3 之間的最小路徑。請注意,本例中所說的最小與最大時序路徑都是基于終點是觸發(fā)器 UFF3 的 D 引腳。
通常也稱最大路徑為晚路徑(late path),稱最小路徑為早路徑(early path)。
當(dāng)考慮從 UFF1 到 UFF3 這樣的從觸發(fā)器到觸發(fā)器的路徑時,其中一個觸發(fā)器發(fā)起(launch)數(shù)據(jù),另一個觸發(fā)器捕獲(capture)數(shù)據(jù)。在這種情況下,由于 UFF1 發(fā)起數(shù)據(jù),因此 UFF1 被稱為發(fā)起觸發(fā)器(launch flip-flop),由于 UFF3 捕獲數(shù)據(jù),因此 UFF3 被稱為捕獲觸發(fā)器(capture flip-flop)。請注意,“發(fā)起”和“觸發(fā)”不是絕對的,一定是相對于某一條時序路徑才能決定觸發(fā)器到底是發(fā)起數(shù)據(jù)還是捕獲數(shù)據(jù)。例如,UFF3 發(fā)起的數(shù)據(jù)如果被下一級觸發(fā)器捕獲了,那么在那條時序路徑中 UFF3 則變?yōu)榱税l(fā)起觸發(fā)器。
2.9 時鐘域
在同步邏輯設(shè)計中,周期性的時鐘信號將計算出的新數(shù)據(jù)鎖存到觸發(fā)器中。新的輸入數(shù)據(jù)基于的是前一個時鐘周期的觸發(fā)器值,因此鎖存到的數(shù)據(jù)將被用于計算下一個時鐘周期的數(shù)據(jù)。
一個時鐘通常驅(qū)動許多觸發(fā)器,由同一時鐘驅(qū)動的一組觸發(fā)器稱為其時鐘域(clock domain)。在典型的設(shè)計中,可能有多個時鐘域。例如,USBCLK 驅(qū)動了 200 個觸發(fā)器,而時鐘 MEMCLK 驅(qū)動了 1000 個觸發(fā)器,如圖 2-20 所示。在此示例中,我們稱有兩個時鐘域。
圖 2-20
需要關(guān)注一個問題:兩個時鐘域是相關(guān)的還是彼此獨立的?答案取決于是否存在一條從一個時鐘域開始并在另一時鐘域結(jié)束的數(shù)據(jù)路徑,如果沒有這樣的路徑,我們可以肯定地說這兩個時鐘域彼此獨立,這意味著沒有時序路徑從一個時鐘域開始而在另一時鐘域結(jié)束。
圖 2-21
若存在跨時鐘域的數(shù)據(jù)路徑(如圖 2-21 所示),則必須確定這些路徑是否為真實(real)路徑。例如,一個兩倍頻時鐘驅(qū)動的觸發(fā)器發(fā)起數(shù)據(jù),再由一倍頻時鐘驅(qū)動的觸發(fā)器捕獲數(shù)據(jù),這條路徑就是一條真實路徑。偽路徑(false path)的一個例子是設(shè)計人員將時鐘同步器(clock synchronizer)邏輯明確放置在兩個時鐘域之間。在這種情況下,即使好像存在從一個時鐘域到下一時鐘域的時序路徑,但這也不是真實的時序路徑,因為數(shù)據(jù)沒有被約束要在一個時鐘周期之內(nèi)通過同步器邏輯傳播。這樣的路徑稱為偽路徑(不是真實的),因為是由時鐘同步器來確保數(shù)據(jù)正確地從一個時鐘域傳遞到另一個時鐘域??梢允褂?set_false_path 命令指定時鐘域之間的偽路徑,例如:
set_false_path -from [get_clocks USBCLK] ?-to [get_clocks MEMCLK]
雖然無法從圖 2-21 中看到,但實際出現(xiàn)跨時鐘域的情況往往是雙向的,即從 USBCLK 時鐘域到 MEMCLK 時鐘域,以及從 MEMCLK 時鐘域到 USBCLK 時鐘域,這兩種情況都需要在 STA 中正確理解和處理。
為什么要討論時鐘域之間的路徑呢?通常,一個設(shè)計中會有多個時鐘,并且時鐘域之間可能有無數(shù)條路徑。分辨出哪些跨時鐘域路徑是真實的,哪些是偽路徑,是時序驗證工作的重要組成部分,這使得設(shè)計人員可以專注于驗證真實的時序路徑。
圖 2-22 給出了時鐘域的另一個示例,多路復(fù)用器(multiplexer)根據(jù)設(shè)計的工作模式選擇時鐘源。雖然只有一個時鐘域,但卻有兩個時鐘,這兩個時鐘是互斥的,因為一次只有一個時鐘處于有效狀態(tài)。因此,在這個例子中,USBCLK 和 USBCLKx2 這兩個時鐘域之間永遠不會存在時序路徑(假定多路復(fù)用器的控制是靜態(tài)的,并且設(shè)計中其余部分也不存在這兩個時鐘域之間的時序路徑)。
圖 2-22
2.10 工作條件
靜態(tài)時序分析通常是在特定的工作條件(operating condition)下執(zhí)行的,工作條件定義為工藝(process)、電壓(voltage)和溫度(temperature)的組合,簡稱 PVT。邏輯單元延遲和互連線的走線延遲是根據(jù)特定的工作條件計算的。
半導(dǎo)體代工廠(foundry)為數(shù)字設(shè)計提供了 3 種加工工藝模型:慢速(slow)工藝模型,典型(typical)工藝模型和快速(fast)工藝模型,快速和慢速工藝模型代表了半導(dǎo)體代工廠加工的兩個極端工藝角(process corner)。對于穩(wěn)健(robust)的設(shè)計,應(yīng)該在極端加工工藝角以及溫度和電源電壓都比較極端的環(huán)境下對設(shè)計進行驗證。圖 2-23(a)展示了邏輯單元延遲如何隨工藝角變化;圖 2-23(b)展示了邏輯單元延遲如何隨電源電壓變化;圖 2-23(c)展示了邏輯單元延遲如何隨溫度變化。因此,為靜態(tài)時序分析選擇特定的工作條件是非常重要的。
圖 2-23
為 STA 選擇合適的工作條件還需要考慮到可用的單元庫(cell library),3 種標(biāo)準(zhǔn)的工作條件如下所示:
(1)WCS(Worst-Case Slow):工藝慢(slow)、溫度最高(例如 125°C)并且電壓最低(例如額定 1.2V 減去 10%)。對于使用低電源的納米技術(shù),可能還有另一個最壞的情況:工藝慢、電壓最低并且溫度也最低。低溫下的延遲并不總是小于高溫下的延遲,這是因為對于納米技術(shù)而言,相對于電源的器件閾值電壓(Vt)裕度降低了。在這種低電源的情況下,負載較小的邏輯單元的延遲在低溫下要高于在高溫下的延遲。對于高 Vt(較高閾值,較大延遲)甚至是標(biāo)準(zhǔn) Vt(常規(guī)閾值,較低延遲)的單元,情況尤其如此。在較低溫度下延遲增加的這種異常行為稱為溫度反轉(zhuǎn)(temperature inversion),參見圖 2-23(c)。
(2)TYP(Typical):典型(typical)工藝,溫度是額定值(例如 25°C),電壓是額定值(例如 1.2V)。
(3)BCF(Best-Case Fast):工藝快(fast),溫度最低(例如 -40°C),電壓最高(例如額定 1.2V 加 10%)。
功耗分析(power analysis)的工作條件通常不同于靜態(tài)時序分析所使用的工作條件。對于功耗分析,工作條件可能是:
(1)ML(Maximal Leakage):工藝快,溫度最高(例如 125°C),電壓也最高(例如 1.2V 加 10%)。該工作條件有最大的漏電功耗(leakage power),對于大多數(shù)設(shè)計,也有著最大的有效功耗(active power)。
(2)TL(Typical Leakage):經(jīng)典工藝,溫度最高(例如 125°C),電壓是額定值(例如 1.2V)。該工作條件下的漏電功耗比較具有代表性,因為由于正常工作時的功耗,芯片溫度往往會更高。
靜態(tài)時序分析基于的是設(shè)計人員所加載(load)和鏈接(link)的庫,可以使用 set_operating_conditions 命令明確指定設(shè)計的工作條件。
set_operating_conditions “WCCOM” -library mychip
上述命令使用了在單元庫 mychip 中定義的名為 WCCOM 的工作條件。
單元庫可在各種工作條件下使用,選擇何種工作條件進行分析取決于為 STA 加載的單元庫。