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