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