10.1 片上變化
通常,工藝和各環(huán)境參數(shù)在芯片的不同部分上可能不一致。由于工藝差異,芯片上不同部分的相同 MOS 晶體管可能沒有相似的特性,這些差異是由于芯片內(nèi)部的工藝差異引起的。請注意,多個制造批次中的工藝參數(shù)差異可能會覆蓋慢工藝到快工藝(2.10 節(jié)中所介紹)。在本節(jié)中,我們討論的是對一個芯片上可能存在的工藝差異(稱為局部工藝差異)的分析,該差異遠(yuǎn)小于多個制造批次之間的差異(稱為全局工藝差異)。
除了工藝參數(shù)的變化之外,設(shè)計中不同部分可能還會存在不同的電源電壓和溫度。因此,同一芯片的兩個區(qū)域可能不在相同的 PVT 條件下。這些差異可能是由許多因素引起的,包括:
會影響局部電源電壓的沿芯片區(qū)域的 IR 壓降變化;
PMOS 或 NMOS 器件的電壓閾值變化;
PMOS 或 NMOS 器件的溝道長度變化;
由于局部熱點造成的溫度變化;
上述的 PVT 變化被稱為片上變化(OCV),這些變化會影響芯片不同部分的走線延遲和單元延遲。如上所述,OCV 建模并不是要對芯片與芯片之間可能的 PVT 變化進(jìn)行建模,而是要對單個芯片內(nèi)局部可能的 PVT 變化進(jìn)行建模。OCV 帶來的影響通常在時鐘路徑上更為明顯,因為時鐘路徑在芯片中傳播的距離更長。解決局部 PVT 變化的一種方法是在 STA 期間包含 OCV 分析。前面各章中所介紹的靜態(tài)時序分析能夠獲得特定時序角(timing corner)的時序,但沒有對芯片上的變化進(jìn)行建模。由于時鐘和數(shù)據(jù)路徑可能受到不同 OCV 的影響,因此時序驗證可以通過使數(shù)據(jù)發(fā)起路徑和捕獲路徑的 PVT 條件稍有不同來對 OCV 的影響進(jìn)行建模。通過降額(derate)特定路徑的延遲就可以對 OCV 帶來的影響進(jìn)行建模,即首先使這些路徑更快或更慢,然后通過這些變化來驗證設(shè)計的性能。可以降額單元延遲或走線延遲,或同時降額兩者,以模擬 OCV 的影響。
現(xiàn)在,我們來討論如何完成 OCV 降額處理以進(jìn)行建立時間檢查??紤]圖 10-1 中所示邏輯,其中 PVT 條件可能隨芯片的不同區(qū)域而變化。當(dāng)發(fā)起時鐘路徑和數(shù)據(jù)路徑的 OCV 條件導(dǎo)致延遲最大、而捕獲時鐘路徑的 OCV 條件導(dǎo)致延遲最小時,此時的建立時間檢查最為嚴(yán)格。請注意,此處最小和最大延遲是由于芯片上局部 PVT 的變化。
圖 10-1
對于此示例,以下是建立時間檢查,注意此處還不包括任何用于降額延遲的 OCV 設(shè)置:
LaunchClockPath + MaxDataPath <= ClockPeriod + CaptureClockPath - Tsetup_UFF1
Minimum clock period = LaunchClockPath + MaxDataPath - CaptureClockPath + Tsetup_UFF1
LaunchClockPath = 1.2 + 0.8 = 2.0
MaxDataPath = 5.2
CaptureClockPath = 1.2 + 0.86 = 2.06
Tsetup_UFF1 = 0.35
Minimum clock period = 2.0 + 5.2 - 2.06 + 0.35 = 5.49ns
以上路徑延遲對應(yīng)于沒有任何 OCV 降額的延遲值,我們可以使用 set_timing_derate 命令來對單元和網(wǎng)絡(luò)延遲進(jìn)行降額處理。比如以下命令:
set_timing_derate -early 0.8
set_timing_derate -lata 1.1
上述命令將最小 / 最短 / 最早路徑的延遲降低了 20%,并將最大 / 最長 / 最遲路徑的延遲增加了 10%。長路徑的延遲(例如,用于建立時間檢查的數(shù)據(jù)路徑和發(fā)起時鐘路徑或用于保持時間檢查的捕獲時鐘路徑)將乘以使用 -late 選項指定的降額值,而短路徑的延遲(例如,用于建立時間檢查的捕獲時鐘路徑或用于保持時間檢查的數(shù)據(jù)路徑和發(fā)起時鐘路徑)將乘以使用 -early 選項指定的降額值。如果未指定降額系數(shù),則假定值為 1.0。
降額系數(shù)將統(tǒng)一應(yīng)用于所有網(wǎng)絡(luò)延遲和單元延遲,如果某個應(yīng)用場景中需要保證單元和網(wǎng)絡(luò)的降額系數(shù)不同,則可以在 set_timing_derate 命令中使用 -cell_delay 和 -net_delay 選項。
set_timing_derate -cell_delay -early 0.9
set_timing_derate -cell_delay -late 1.0
set_timing_derate -net_delay -early 1.0
set_timing_derate -net_delay -late 1.2
可以使用 -cell_check 選項來對單元檢查(例如建立時間和保持時間)的延遲進(jìn)行降額。使用此選項時,使用 set_output_delay 指定的任何輸出延遲也將被降額,因為此約束也是輸出建立時間要求的一部分。但是,對于使用 set_input_delay 指定的輸入延遲,是不會被降額的。
set_timing_derate -early 0.8 -cell_check
set_timing_derate -late 1.1 -cell_check
-clock 選項僅將降額應(yīng)用于時鐘路徑。同樣,-data 選項僅將降額應(yīng)用于數(shù)據(jù)路徑。
set_timing_derate -early 0.95 -clock
set_timing_derate -late 1.05 -data
現(xiàn)在,我們將以下降額約束應(yīng)用于圖 10-1 的示例:
set_timing_derate -early 0.9
set_timing_derate -late 1.2
set_timing_derate -late 1.1 -cell_check
在以上降額約束的情況下,我們可以進(jìn)行如下計算:
LaunchClockPath = 2.0 * 1.2 = 2.4
MaxDataPath = 5.2 * 1.2 = 6.24
CaptureClockPath = 2.06 * 0.9 = 1.854
Tsetup_UFF1 = 0.35 * 1.1 = 0.385
Minimum clock period = 2.4 + 6.24 - 1.854 + 0.385 = 7.171ns
在上面的建立時間檢查中,由于時鐘樹的公共時鐘路徑(圖 10-1)具有 1.2ns 的延遲,而發(fā)起時鐘和捕獲時鐘路徑上的降額有所不同,因此存在差異。時鐘樹的這一部分對于發(fā)起時鐘和捕獲時鐘路徑都是通用的,因此不應(yīng)進(jìn)行不同的降額。對發(fā)起和捕獲時鐘路徑應(yīng)用不同的降額是過于悲觀的,因為在實際上時鐘樹的這一部分實際上僅處于一個 PVT 條件下,即最大路徑或最小路徑(或介于兩者之間),但絕不會同一時間處在兩種不同 PVT 條件下。由于對時鐘樹的公共部分應(yīng)用了不同降額系數(shù)而引起的悲觀被稱為“公共路徑悲觀度”CPP(Common Path Pessimism),在分析過程中應(yīng)將其消除。CPPR(Common Path Pessimism Removal)表示“公共路徑悲觀度消除”,通常在路徑報告中作為單獨的條目列出,它也被標(biāo)記為時鐘收斂悲觀度消除 CRPR(Clock Reconvergence Pessimism Removal)。
CPPR 消除了時序分析中發(fā)起時鐘路徑和捕獲時鐘路徑之間的人為悲觀情緒。如果同一個時鐘既驅(qū)動捕獲觸發(fā)器又驅(qū)動發(fā)起觸發(fā)器,那么時鐘樹很可能會在分支之前共享一條公共路徑。CPP 本身是沿時鐘樹公共路徑的延遲之差,這是由于發(fā)起和捕獲時鐘路徑的降額系數(shù)不同所致。時鐘信號在公共點的最小到達(dá)時間和最大到達(dá)時間之間的差即為 CPP。公共點(Common Point)的定義為時鐘樹公共部分中最后一個單元的輸出引腳。
- CPP = LatestArrivalTime @CommonPoint - EarliestArrivalTime @CommonPoint
上述分析中的“最晚時間”和“最早時間”是指在特定工藝角(Corner)下的 OCV 降額值,例如最壞情況下的慢速(Worst-Case-Slow)或最佳情況下的快速(Best-Case-Fast)。對于圖 10-1 的示例:
LatestArrivalTime @CommonPoint = 1.2 * 1.2 = 1.44
EarliestArrivalTime @CommonPoint = 1.2 * 0.9 = 1.08
CPP = 1.44 - 1.08 = 0.36ns
Minimum clock period = 7.171 - 0.36 = 6.811ns
對于前面的設(shè)計示例,應(yīng)用 OCV 降額會把最小時鐘周期從 5.49ns 增加到 6.811ns,這說明了通過這些降額系數(shù)建模的 OCV 變化會降低設(shè)計的最大工作頻率。
最差 PVT 條件下的 OCV 分析
如果在最差情況(worst-case)的 PVT 條件下執(zhí)行建立時間檢查,則在較晚路徑(late path)上就無需降額了,因為它們已經(jīng)是最差的情況了。但是,可以通過將特定的降額系數(shù)應(yīng)用于較早路徑(early path)來使那些路徑更快,例如使較早路徑加速 10%。在最差情況下,降額約束可能如下所示:
set_timing_derate -early 0.9
set_timing_derate -late 1.0
上述降額約束可用于在最差情況的慢速工藝角下進(jìn)行最大路徑(或建立時間)檢查。因此,較晚路徑的 OCV 降額系數(shù)設(shè)置為 1.0,以使其不會超出最差情況的慢速工藝角。
接下來介紹在最差情況的慢速工藝角下進(jìn)行建立時間檢查的示例。為捕獲時鐘路徑指定了以下降額約束:
- set_timing_derate -early 0.8 -clock
以下是在最差情況的慢速工藝角下執(zhí)行的建立時間檢查路徑報告。較晚路徑使用的降額系數(shù)在報告中為 Max Data Paths Derating Factor 和 Max Clock Paths Derating Factor,而較早路徑使用的降額系數(shù)在報告中為 Min Clock Paths Derating Factor。
請注意,捕獲時鐘路徑的延遲已被降低了 20%:可參考時序報告中的單元 UCKBUF0,在發(fā)起路徑中它有 56ps 的延遲,而在捕獲路徑中僅有 45ps 的延遲。單元 UCKBUF0 處在公共時鐘路徑上,也就是既在捕獲時鐘路徑上又在發(fā)起時鐘路徑上。由于公共時鐘路徑不能有不同的降額系數(shù),因此該公共路徑的延遲差 56ps-45ps = 11ps 將會被補償校正,這可以從 clock reconvergence pessimism 那行中看出??偠灾绻容^此路徑報告降額與不降額的差別的話,則可能會注意到只有捕獲時鐘路徑的單元和網(wǎng)絡(luò)延遲被降低了。
保持時間檢查的 OCV
現(xiàn)在,我們將介紹如何對保持時間檢查進(jìn)行降額處理??紤]如圖 10-2 所示的邏輯,如果整個芯片上的 PVT 條件不同,則當(dāng)發(fā)起時鐘路徑和數(shù)據(jù)路徑具有導(dǎo)致延遲最小的 OCV 條件(即最早的發(fā)起時鐘),且保持時鐘路徑具有導(dǎo)致延遲最大的 OCV 條件(即最晚的捕獲時鐘)時,保持時間檢查的最差情況就會發(fā)生。
圖 10-2
以下表達(dá)式即為此示例所要執(zhí)行的保持時間檢查:
- LaunchClockPath + MinDataPath - CaptureClockPath - Told_UFF1 >= 0
將圖 10-2 中的延遲值應(yīng)用于上述表達(dá)式,我們可得(不應(yīng)用任何降額系數(shù)):
LaunchClockPath = 0.25 + 0.6 = 0.85
MinDataPath = 1.7
CaptureClockPath = 0.25 + 0.75 = 1.00
Thold_UFF1 = 1.25
這意味著檢查結(jié)果如下:
- 0.85 + 1.7 - 1.00 - 1.25 = 0.3ns >= 0
因此可得結(jié)論:保持時間沒有違例。
應(yīng)用以下降額約束:
set_timing_derate -early 0.9
set_timing_derate -late 1.2
set_timing_derate -early 0.95 -cell_check
重新計算的結(jié)果如下:
LaunchClockPath = 0.85 * 0.9 = 0.765
MinDataPath = 1.7 * 0.9 = 1.53
CaptureClockPath = 1.00 * 1.2 = 1.2
Thold_UFF1 = 1.25 * 0.95 = 1.1875
Common Clock Path Pessimism = 0.25 * (1.2 - 0.9) = 0.075
由于在公共時鐘路徑上應(yīng)用不同降額系數(shù)而導(dǎo)致的悲觀度也進(jìn)行了計算,這個值將被補償然后再進(jìn)行保持時間檢查。保持時間的檢查將變?yōu)椋?/p>
- 0.765 + 1.53 - 1.2 - 1.1875 + 0.075 = -0.0175ns
結(jié)果小于 0,因此表明對路徑應(yīng)用了 OCV 降額系數(shù)之后保持時間違例了。
通常,保持時間檢查是在最佳情況的快速 PVT 角下執(zhí)行的。在這種情況下,較早路徑無需降額,因為這些路徑已經(jīng)是最快的路徑了。但是,可以通過將特定的降額系數(shù)應(yīng)用于較晚路徑來使那些路徑更慢,例如使較晚路徑變慢 20%。在最佳情況下,降額約束可能如下所示:
set_timing_derate -early 1.0
set_timing_derate -late 1.2
對于圖 10-2 中的示例:
LatestArrivalTime @CommonPoint = 0.25 * 1.2 = 0.30
EarliestArrivalTime @CommonPoint = 0.25 * 1.0 = 0.25
因此此時公共路徑悲觀度為:
- 0.30 - 0.25 = 0.05ns
這是使用此降額約束的設(shè)計示例的保持時間檢查路徑報告:
請注意,較晚路徑的延遲增加了 20%,而較早路徑保持不變。來看一下單元 UCKBUF0 的延遲,其在發(fā)起時鐘路徑上的延遲為 56ps,而在捕獲時鐘路徑上的延遲為 67ps,增加了 20%。UCKBUF0 是公共時鐘樹上的單元,因此由于此公共時鐘樹上的降額系數(shù)不同而引入的悲觀度為 67ps-56ps = 11ps,這在 clock reconvergence pessimism 一行中得到了補償校正。
10.2 時間借用
時間借用(Time Borrowing)技術(shù)(也稱為周期竊取 cycle stealing 技術(shù))發(fā)生在鎖存器(Latch)上。在鎖存器中,時鐘的一個邊沿會使鎖存器透明,即這個沿打開了鎖存器,使得鎖存器的輸出與數(shù)據(jù)輸入相同,該時鐘沿被稱為打開沿(opening edge)。時鐘的另一個沿會關(guān)閉鎖存器,也就是說,輸入數(shù)據(jù)的任何改變在鎖存器的輸出處都無效,此時鐘沿被稱為關(guān)閉沿(closing edge)。
通常,應(yīng)在時鐘有效沿之前就在鎖存器輸入處準(zhǔn)備好數(shù)據(jù)。但是,由于鎖存器在時鐘處于有效狀態(tài)時是透明的,因此數(shù)據(jù)可以晚于有效時鐘沿到達(dá),也就是說,它可以從下一個周期借用時間。如果這樣借用了時間,則會減少可用于下一級(鎖存器到另一個時序單元)的時間。
圖 10-3 給出了使用有效上升沿借用時間的示例。如果在鎖存器 10ns 處的 CLK 上升沿(打開沿)之前的時間 A 處數(shù)據(jù) DIN 就已經(jīng)準(zhǔn)備好了,則數(shù)據(jù)在鎖存器打開時會流向鎖存器的輸出。如果數(shù)據(jù) DIN 在時間 B 處(延遲)到達(dá),則它將借用時間 Tb。但是,這減少了從鎖存器到下一個觸發(fā)器 UFF2 的可用時間,只有時間 Ta 可用,而不再是完整的時鐘周期。
圖 10-3
鎖存器的時序的第一條規(guī)則是:如果數(shù)據(jù)在鎖存器的打開沿之前到達(dá),則寄存器行為將與觸發(fā)器完全一樣。在打開沿捕獲數(shù)據(jù),而同一時鐘沿又將發(fā)起數(shù)據(jù),作為下一條時序路徑的起點。
第二條規(guī)則適用的情況是:數(shù)據(jù)在鎖存器為透明狀態(tài)時(在打開沿和關(guān)閉沿之間)到達(dá)。鎖存器的輸出將被用作下一級時序路徑的起點,而不是時鐘引腳。在鎖存器處結(jié)束的時序路徑所借用的時間將決定下一級的發(fā)起時間。
在鎖存器的關(guān)閉沿之后到達(dá)的數(shù)據(jù)信號是時序違例的。圖 10-4 顯示了正裕量、零裕量和負(fù)裕量(即發(fā)生違例時)所分別對應(yīng)的數(shù)據(jù)到達(dá)時序區(qū)域。
圖 10-4
圖 10-5(a)中為鎖存器到下一級觸發(fā)器的半周期路徑,圖 10-5(b)描繪了時間借用的波形,時鐘周期為 10ns。UFF0 在 0 時刻發(fā)起數(shù)據(jù),但數(shù)據(jù)路徑需要 7ns。鎖存器 ULAT1 在 5ns 時打開。因此,向 ULAT1 到 UFF1 的路徑借用了 2ns,而 ULAT1 到 UFF1 的可用時間僅為 3ns(5ns-2ns)。
圖 10-5
接下來,我們將介紹圖 10-5(a)鎖存器示例的三組不同時序報告,以說明從下一級路徑借用的不同時間量。
沒有借用時間
若從觸發(fā)器 UFF0 到鎖存器 ULAT1 的數(shù)據(jù)路徑延遲小于 5ns,則建立時間檢查的路徑報告如下:
在這種情況下,由于數(shù)據(jù)在鎖存器打開之前及時到達(dá)了鎖存器 ULAT1,因此無需借用時間。
借用了時間
若從觸發(fā)器 UFF0 到鎖存器 ULAT1 的數(shù)據(jù)路徑延遲大于 5ns,則建立時間檢查的路徑報告如下:
在這種情況下,由于鎖存器透明時數(shù)據(jù)是可用的,因此會從后續(xù)路徑借用所需的 1.81ns,然后仍能滿足時序要求。以下是后續(xù)路徑的路徑報告,其中顯示了前一條路徑借用的 1.81ns:
時序違例的例子
在這種情況下,數(shù)據(jù)路徑延遲要大得多,并且數(shù)據(jù)在鎖存器關(guān)閉之后才能到達(dá),這顯然是時序違例的。
10.3 數(shù)據(jù)引腳到數(shù)據(jù)引腳檢查
建立時間和保持時間檢查也可以在任意兩個數(shù)據(jù)引腳之間進(jìn)行,這兩個都不是時鐘引腳。一個引腳為約束引腳(constrained pin),其作用類似于觸發(fā)器的數(shù)據(jù)引腳,而另一個引腳為相關(guān)引腳(related pin),其作用類似于觸發(fā)器的時鐘引腳。關(guān)于觸發(fā)器建立時間檢查的一個重要區(qū)別是,數(shù)據(jù)到數(shù)據(jù)的建立時間檢查是在與發(fā)起沿相同的沿上執(zhí)行的(不同于觸發(fā)器的常規(guī)建立時間檢查,其中捕獲時鐘邊沿通常會距離發(fā)起時鐘沿一個周期)。因此,數(shù)據(jù)到數(shù)據(jù)的建立時間檢查也稱為零周期檢查(zero-cycle checks)或同周期檢查(same-cycle checks)。
使用 set_data_check 命令可以指定數(shù)據(jù)到數(shù)據(jù)的檢查,SDC 約束命令示例如下:
set_data_check -from SDA -to SCTRL -setup 2.1
set_data_check -from SDA -to SCTRL -hold 1.5
參見圖 10-6,SDA 是相關(guān)引腳,而 SCTRL 是約束引腳。建立時間數(shù)據(jù)檢查規(guī)定 SCTRL 應(yīng)該在相關(guān)引腳 SDA 的邊沿之前至少 2.1ns 到達(dá),否則即為數(shù)據(jù)到數(shù)據(jù)的建立時間檢查違例。保持時間數(shù)據(jù)檢查規(guī)定 SCTRL 應(yīng)該在 SDA 之后至少 1.5ns 到達(dá),如果約束引腳的信號早于該時刻到達(dá),即為數(shù)據(jù)到數(shù)據(jù)的保持時間檢查違例。
圖 10-6
此檢查在定制設(shè)計的模塊中很有用,在定制設(shè)計的模塊中很有可能會要去約束一個信號相對于另一個信號的到達(dá)時間。一種常見情況是由使能信號選通的數(shù)據(jù)信號,此時需要確保當(dāng)數(shù)據(jù)信號到達(dá)時使能信號保持穩(wěn)定。
考慮圖 10-7 中所示的與門單元。我們假設(shè)要求是確保 PNA 在 PREAD 上升沿之前 1.8ns 到達(dá),并且在 PREAD 上升沿之后 1.0ns 內(nèi)不應(yīng)發(fā)生改變。在此示例中,PNA 是約束引腳,而 PREAD 是相關(guān)引腳,對應(yīng)的波形如圖 10-7 所示。
圖 10-7
對于這樣的時序要求,可以使用數(shù)據(jù)到數(shù)據(jù)的建立時間和保持時間檢查:
set_data_check -from UAND0/A1 -to UAND0/A2 -setup 1.8
set_data_check -from UAND0/A1 -to UAND0/A2 -hold 1.0
以下是建立時間檢查路徑報告:
建立時間在報告中顯示為 data check setup time。以上時序違例的報告表明 PREAD 至少需要延遲 1.72ns,以確保 PNA 在 PREAD 之前 1.8ns 能夠到達(dá),這是我們的建立時間要求。
數(shù)據(jù)到數(shù)據(jù)建立時間檢查很重要的一點是,約束引腳和相關(guān)引腳的發(fā)起時鐘沿都來自同一時鐘周期。因此,在報告中請注意,捕獲沿(UDFF0 / CK)的起始時間為 0ns,而不是一個周期之后的時鐘沿(通常在報告中看到的都是這種情況)。
零周期(zero-cycle)建立時間檢查會導(dǎo)致保持時間檢查與其它保持時間檢查有所不同,保持時間檢查將不再位于同一時鐘沿。以下是 CLKPLL 的時鐘定義,將用于下面的保持時間路徑報告:
- create_clock -name CLKPLL -period 10 -waveform {0 5} [get_ports CLKPLL]
注意,在保持時間檢查中,相關(guān)引腳的發(fā)起沿比約束引腳的發(fā)起沿要早一個周期。這是因為根據(jù)定義,通常在建立時間捕獲沿之前的一個周期執(zhí)行保持時間檢查。由于數(shù)據(jù)到數(shù)據(jù)建立時間檢查的約束引腳和相關(guān)引腳的時鐘沿相同,因此會在發(fā)起沿之前一個周期執(zhí)行保持時間檢查。
在某些情況下,設(shè)計人員可能要求在同一時鐘周期上執(zhí)行數(shù)據(jù)到數(shù)據(jù)的保持時間檢查。相同周期的保持時間要求意味著要將用于相關(guān)引腳的時鐘沿移回約束引腳的時鐘沿處??梢酝ㄟ^指定多周期保持時間為 -1 來實現(xiàn):
- set_multicycle_path -1 -hold -to UAND0/A2
以下是帶有多周期約束的上述示例的保持時間檢查路徑報告:
現(xiàn)在,保持時間檢查是在約束引腳和相關(guān)引腳相同時鐘沿上執(zhí)行的。在同一周期中執(zhí)行數(shù)據(jù)到數(shù)據(jù)保持時間檢查的另一種方法是:將其指定為相反方向上的引腳之間的數(shù)據(jù)到數(shù)據(jù)建立時間檢查。
- set_data_check -from UAND0/A2 -to UAND0/A1 -setup 1.0
數(shù)據(jù)到數(shù)據(jù)的檢查在對數(shù)據(jù)不改變進(jìn)行檢查(no-change data check)時也很有用。通過在上升沿處指定建立時間檢查,在下降沿處指定保持時間檢查,從而有效地定義了數(shù)據(jù)不變窗口,如圖 10-8 所示。
圖 10-8
這種情況的約束如下:
set_data_check -rise_from D2 -to D1 -setup 1.2
set_data_check -fall_from D2 -to D1 -hold 0.8
10.4 非時序檢查
單元或宏(macro)的庫文件可以將時序弧指定為非時序(non-sequential)檢查,例如兩個數(shù)據(jù)引腳之間的時序弧。非時序檢查是指兩個引腳之間的檢查,兩者都不是時鐘。一個引腳是約束引腳,其作用類似于數(shù)據(jù),而第二個引腳是相關(guān)引腳,其作用類似于時鐘。該檢查指定了在相關(guān)引腳上的數(shù)據(jù)改變前后,約束引腳上的數(shù)據(jù)必須保持穩(wěn)定多長時間。
請注意,此檢查被指定為單元庫規(guī)范的一部分,并且不需要顯式的數(shù)據(jù)到數(shù)據(jù)檢查約束。以下是這種時序弧在單元庫中的表示形式:
setup_rising 指相關(guān)引腳的上升沿,固有(intrinsic)上升值和下降值是指約束引腳的上升和下降建立時間??梢詾?hold_rising、setup_falling 和 hold_falling 定義類似的時序弧。
非時序檢查類似于 10.3 節(jié)中介紹的數(shù)據(jù)到數(shù)據(jù)檢查,但是有兩個主要區(qū)別。在非時序檢查中,建立時間和保持時間的值是從標(biāo)準(zhǔn)單元庫中獲得的,可以使用 NLDM 表格模型或其它高級時序模型來描述建立時間和保持時間模型。而在數(shù)據(jù)到數(shù)據(jù)檢查中,只能為數(shù)據(jù)到數(shù)據(jù)的建立時間或保持時間檢查指定一個值。第二個區(qū)別是,非時序檢查只能應(yīng)用于單元的引腳,而數(shù)據(jù)到數(shù)據(jù)的檢查可以應(yīng)用于設(shè)計中的任意兩個引腳。
非時序建立時間檢查指定了約束信號必須相對于相關(guān)引腳多早到達(dá),如圖 10-9 所示。單元庫中包含了建立時間弧 D0-> WEN,它被指定為了非時序弧。如果在建立時間窗口內(nèi)出現(xiàn) WEN 信號,則非時序建立時間檢查將失敗。
圖 10-9
非時序保持時間檢查指定了約束信號必須相對于相關(guān)引腳多晚到達(dá),如圖 10-9 所示。如果 WEN 在保持時間窗口中改變了,則非時序保持時間檢查將失敗。
貝塔的微信?
?
MOMO 的微信?