8.3 多周期路徑
在某些情況下,兩個(gè)觸發(fā)器之間的數(shù)據(jù)路徑可能需要一個(gè)以上的時(shí)鐘周期才能傳播通過(guò)邏輯。在這種情況下,這條組合邏輯路徑會(huì)被定義為多周期路徑(multicycle path)。雖然數(shù)據(jù)還是會(huì)在每個(gè)時(shí)鐘沿上都被捕獲觸發(fā)器捕獲,但我們需要告知 STA 在指定數(shù)量的時(shí)鐘周期之后才會(huì)出現(xiàn)有效的捕獲時(shí)鐘沿。
圖 8-14 是一個(gè)示例。由于數(shù)據(jù)路徑最多需要三個(gè)時(shí)鐘周期,因此應(yīng)指定三個(gè)周期的多周期建立時(shí)間檢查。為此需要指定如下的多周期建立時(shí)間約束:
圖 8-14
create_clock -name CLKM -period 10 [get_ports CLKM]
set_multicycle_path 3 -setup -from [get_pins UFF0/Q] -to [get_pins UFF1/D]
多周期建立時(shí)間約束規(guī)定,建立時(shí)間檢查時(shí)從 UFF0 / CK 到 UFF1 / D 的路徑最多可以花費(fèi)三個(gè)時(shí)鐘周期,這意味著設(shè)計(jì)每三個(gè)周期才會(huì)使用一次 UFF1 / Q 引腳上輸出的數(shù)據(jù),而不是每個(gè)周期都使用。
以下是一份具有多周期約束的建立時(shí)間路徑報(bào)告:
注意,現(xiàn)在捕獲觸發(fā)器的時(shí)鐘沿距離發(fā)起觸發(fā)器的時(shí)鐘沿三個(gè)時(shí)鐘周期,為 30ns。
現(xiàn)在,我們來(lái)檢查一下多周期路徑上的保持時(shí)間檢查。在最常見(jiàn)的情況下,我們希望保持時(shí)間檢查保持不變(與單周期路徑一致),如圖 8-14 所示,這樣可使數(shù)據(jù)在三個(gè)時(shí)鐘周期之內(nèi)任意進(jìn)行改變。只有指定多周期保持時(shí)間為 2,才可以獲得與單周期建立時(shí)間檢查情況相同的保持時(shí)間檢查。這是因?yàn)樵跊](méi)有這樣的多周期保持時(shí)間約束的情況下,默認(rèn)的保持時(shí)間檢查是在建立時(shí)間捕獲沿的前一個(gè)有效時(shí)鐘沿上執(zhí)行的,這顯然不是我們希望的。
我們需要將執(zhí)行保持時(shí)間檢查的時(shí)鐘沿移動(dòng)到默認(rèn)時(shí)鐘沿之前的兩個(gè)周期,因此指定了多周期保持時(shí)間為 2。預(yù)期的檢查如圖 8-15 所示,通過(guò)多周期保持時(shí)間約束,數(shù)據(jù)路徑的最小延遲可以小于一個(gè)時(shí)鐘周期。
圖 8-15
- set_multicycle_path 2 -hold -from [get_pins UFF0/Q] -to [get_pins UFF1/D]
多周期保持時(shí)間約束命令中的周期數(shù)指定了從默認(rèn)保持時(shí)間檢查沿(建立時(shí)間捕獲沿之前的一個(gè)有效沿)需要移回多少個(gè)時(shí)鐘周期。以下是一份保持時(shí)間檢查的路徑報(bào)告:
由于此路徑的多周期建立時(shí)間約束為 3,因此其默認(rèn)保持時(shí)間檢查是在建立時(shí)間捕獲沿之前的有效時(shí)鐘沿上執(zhí)行的。在大多數(shù)設(shè)計(jì)中,如果最大路徑(或建立時(shí)間)需要 N 個(gè)時(shí)鐘周期,則大于(N-1)個(gè)時(shí)鐘周期的最小路徑約束是不可行的。通過(guò)指定兩個(gè)周期的多周期保持時(shí)間約束,可以將保持時(shí)間檢查時(shí)鐘沿移回到數(shù)據(jù)發(fā)起沿處(即 0ns 處),如上面的路徑報(bào)告中所示。
因此在大多數(shù)設(shè)計(jì)中,指定為 N(周期)的多周期建立時(shí)間約束應(yīng)伴隨著指定為 N-1(周期)的多周期保持時(shí)間約束。
如果指定了 N 個(gè)周期的多周期建立時(shí)間約束,但缺少了相應(yīng)的 N-1 個(gè)周期的多周期保持時(shí)間約束,會(huì)發(fā)生什么情況呢?在這種情況下,會(huì)在建立時(shí)間捕獲沿之前的一個(gè)周期時(shí)鐘沿上執(zhí)行保持時(shí)間檢查。圖 8-16 顯示了僅約束多周期建立時(shí)間為 3 個(gè)周期時(shí),進(jìn)行這種保持時(shí)間檢查的情況。
圖 8-16
如圖所示,這規(guī)定了數(shù)據(jù)只能在建立時(shí)間捕獲沿之前的一個(gè)周期內(nèi)進(jìn)行改變。因此,數(shù)據(jù)路徑必須具有至少兩個(gè)時(shí)鐘周期的最小延遲才能滿足此要求。以下是這種情況的路徑報(bào)告:
從路徑報(bào)告中注意到,在捕獲沿之前的一個(gè)時(shí)鐘沿對(duì)保持時(shí)間進(jìn)行了檢查,這導(dǎo)致了較大的保持時(shí)間違例。實(shí)際上,該保持時(shí)間檢查將要求組合邏輯中的最小延遲至少為兩個(gè)時(shí)鐘周期。
跨時(shí)鐘域
讓我們考慮在周期相同的兩個(gè)不同時(shí)鐘之間存在多周期路徑的情況。(時(shí)鐘周期也不同的情況將在本章后面進(jìn)行介紹)
例子 1:
create_clock -name CLKM -period 10 -waveform {0 5} [get_ports CLKM]
create_clock -name CLKP -period 10 -waveform {0 5} [get_ports CLKP]
多周期建立時(shí)間約束指定了給定路徑的時(shí)鐘周期數(shù),如圖 8-17 所示。默認(rèn)建立時(shí)間捕獲沿總是與發(fā)起沿相隔一個(gè)時(shí)鐘周期,約束多周期建立時(shí)間為 2 會(huì)使建立時(shí)間捕獲沿與發(fā)起沿相隔 2 個(gè)時(shí)鐘周期。
圖 8-17
多周期保持時(shí)間約束指定了保持時(shí)間檢查應(yīng)該在建立時(shí)間捕獲沿之前幾個(gè)時(shí)鐘周期的時(shí)鐘沿處執(zhí)行,無(wú)論建立時(shí)間發(fā)起沿在何處,如圖 8-18 所示。默認(rèn)的保持時(shí)間檢查是在建立時(shí)間捕獲沿之前一個(gè)周期的時(shí)鐘沿處執(zhí)行的。約束多周期保持時(shí)間為 1 會(huì)將保持時(shí)間檢查放置于默認(rèn)保持時(shí)間檢查之前一個(gè)周期的時(shí)鐘沿處,因此變?yōu)榻r(shí)間捕獲沿之前兩個(gè)周期的時(shí)鐘沿處。
圖 8-18
假設(shè)有如下多周期路徑約束:
- set_multicycle_path 2 -from [get_pins UFF0/CK] -to [get_pins UFF3/D]
由于沒(méi)有 -hold 選項(xiàng),因此將默認(rèn)為 -setup 選項(xiàng)。以上約束指定多周期建立時(shí)間為 2 且多周期保持時(shí)間為 0。對(duì)應(yīng)建立時(shí)間檢查的路徑報(bào)告如下所示:
注意,路徑報(bào)告中所打印出的路徑組(Path Group)始終是捕獲觸發(fā)器的路徑組,在這種情況下為 CLKP。
接下來(lái)是保持時(shí)間檢查的路徑報(bào)告。由于多周期保持時(shí)間約束默認(rèn)為 0,因此將在建立時(shí)間捕獲沿(20ns)之前一個(gè)時(shí)鐘周期的 10ns 處進(jìn)行保持時(shí)間檢查。
以上報(bào)告報(bào)出了保持時(shí)間違例,這可以通過(guò)將多周期保持時(shí)間約束指定為 1 來(lái)消除,下面的另一個(gè)示例對(duì)此進(jìn)行了說(shuō)明。
例子 2:
set_multicycle_path 2 -from [get_pins UFF0/CK] -to [get_pins UFF3/D] -setup
set_multicycle_path 1 -from [get_pins UFF0/CK] -to [get_pins UFF3/D] -hold
以下是多周期建立時(shí)間約束為 2 時(shí)建立時(shí)間檢查的路徑報(bào)告:
以下是多周期保持時(shí)間約束為 1 時(shí)保持時(shí)間檢查的路徑報(bào)告:
請(qǐng)注意,本節(jié)中建立時(shí)間檢查和保持時(shí)間檢查的示例報(bào)告是針對(duì)同一工藝角(corner)的。通常,在最壞情況的慢速工藝角下,建立時(shí)間檢查最難滿足(裕量最?。?,而在最佳情況的快速工藝角下,保持時(shí)間檢查最難滿足(裕量最?。?。
8.4 偽路徑
當(dāng)設(shè)計(jì)的功能運(yùn)行時(shí),某些時(shí)序路徑可能不真實(shí)(或不可能)存在。在執(zhí)行 STA 時(shí)可以將這些路徑設(shè)置為偽路徑(false path),這樣就可以關(guān)閉這些路徑,那么 STA 就不會(huì)對(duì)這些偽路徑去進(jìn)行分析了。
偽路徑可能是從一個(gè)時(shí)鐘域到另一個(gè)時(shí)鐘域、從觸發(fā)器的時(shí)鐘引腳到另一觸發(fā)器的輸入引腳、通過(guò)一個(gè)單元的引腳、通過(guò)多個(gè)單元的引腳或這些情況的組合 。當(dāng)通過(guò)單元的引腳指定了偽路徑后,通過(guò)該引腳的所有路徑都將被忽略,無(wú)需進(jìn)行時(shí)序分析。辨別出偽路徑的好處在于減少了分析空間,從而使分析可以專注于真實(shí)存在的路徑,這同樣有助于減少分析時(shí)間。但是,過(guò)多使用 -through 選項(xiàng)去指定偽路徑同樣會(huì)降低分析的速度。
可以使用 set_false_path 命令來(lái)約束偽路徑,以下是一些例子:
set_false_path -from [get_clocks SCAN_CLK] -to [get_clocks CORE_CLK]
set_false_path -through [get_pins UMUX0/S]
set_false_path -through [get_pins SAD_CORE/RSTN]
set_false_path -to [get_ports TEST_REG*]
set_false_path -through UINV/Z -through UAND0/Z
下面給出了一些關(guān)于設(shè)置偽路徑的建議。要在兩個(gè)時(shí)鐘域之間設(shè)置偽路徑,請(qǐng)使用:
- set_false_path -from [get_clocks clockA] -to [get_clocks clockB]
而不要使用:
- set_false_path -from [get_pins {regA_ * }/CK] -to [get_pins {regB_ * }/D]
后者這種方式要慢得多。
另一個(gè)建議是盡可能少使用 -through 選項(xiàng),因?yàn)樗黾恿诉\(yùn)行時(shí)不必要的復(fù)雜性。僅在絕對(duì)有必要且沒(méi)有替代方法可以指定該偽路徑的情況下,才可以使用 -through 選項(xiàng)。
從優(yōu)化的角度來(lái)看,還有一個(gè)建議是不要將一條多周期路徑約束為偽路徑。如果需要在已知或可預(yù)測(cè)的時(shí)刻對(duì)信號(hào)進(jìn)行采樣,則無(wú)論時(shí)間間隔多大,都應(yīng)使用多周期路徑約束,以使路徑具有一定的約束條件并進(jìn)行優(yōu)化以滿足多周期約束。如果把一條許多時(shí)鐘周期后進(jìn)行采樣的路徑指定為了偽路徑,則對(duì)設(shè)計(jì)中其余邏輯路徑的優(yōu)化可能會(huì)使該路徑變長(zhǎng),甚至超出所需的時(shí)間。
8.5 半周期路徑
如果設(shè)計(jì)中同時(shí)具有負(fù)邊沿觸發(fā)的觸發(fā)器(有效時(shí)鐘沿為下降沿)和正邊沿觸發(fā)的觸發(fā)器(有效時(shí)鐘沿為上升沿),則設(shè)計(jì)中可能存在半周期路徑(half-cycle path)。半周期路徑可能是從一個(gè)觸發(fā)器的上升沿到另一個(gè)觸發(fā)器的下降沿,或者反過(guò)來(lái)。圖 8-19 給出了一個(gè)示例,其中數(shù)據(jù)的發(fā)起沿在觸發(fā)器 UFF5 的時(shí)鐘下降沿,而數(shù)據(jù)的捕獲沿在觸發(fā)器 UFF3 的時(shí)鐘上升沿。
圖 8-19
以下是建立時(shí)間檢查的路徑報(bào)告:
請(qǐng)注意起點(diǎn)(Startpoint)和終點(diǎn)(Endpoint)中的邊沿說(shuō)明。時(shí)鐘 CLKP 的下降沿出現(xiàn)在 6ns,上升沿出現(xiàn)在 12ns。因此,數(shù)據(jù)需要在半個(gè)周期 6ns 內(nèi)到達(dá)捕獲觸發(fā)器的輸入引腳。
雖然在建立時(shí)間檢查時(shí)數(shù)據(jù)路徑僅有半個(gè)時(shí)鐘周期,但額外的半個(gè)周期可用于保持時(shí)間檢查。以下是保持時(shí)間檢查的路徑報(bào)告:
保持時(shí)間檢查通常是在捕獲沿之前一個(gè)周期的捕獲沿上執(zhí)行的。由于捕獲沿是在 12ns 處,因此前一個(gè)捕獲沿在 0ns 處,故將在 0ns 處檢查保持時(shí)間。這為保持時(shí)間檢查有效地增加了半個(gè)時(shí)鐘周期的裕量,因此可以看見(jiàn)保持時(shí)間檢查有較大的正裕量(slack)。
8.6 撤銷時(shí)間檢查
撤銷時(shí)間檢查(removal timing check)可確保在有效時(shí)鐘沿與釋放異步控制信號(hào)之間有足夠的時(shí)間。該檢查可確保有效時(shí)鐘沿不帶來(lái)影響,因?yàn)楫惒娇刂菩盘?hào)將保持有效狀態(tài),直到有效時(shí)鐘沿之后一段撤銷時(shí)間為止。換句話說(shuō),異步控制信號(hào)會(huì)在有效時(shí)鐘沿之后被釋放(變?yōu)闊o(wú)效),因此該時(shí)鐘沿不會(huì)產(chǎn)生任何影響,如圖 8-20 所示。該檢查基于的是觸發(fā)器異步引腳上指定的撤銷時(shí)間。以下是單元庫(kù)中與撤銷時(shí)間檢查有關(guān)的描述片段:
圖 8-20
與保持時(shí)間檢查一樣,該檢查也是針對(duì)最小路徑的,不過(guò)是在觸發(fā)器的異步引腳上。
終點(diǎn)(Endpoint)表明這是撤銷時(shí)間檢查,且在觸發(fā)器 UFF6 的異步引腳 CDN 上。該觸發(fā)器的撤銷時(shí)間在報(bào)告中顯示為 library removal time,值為 0.19ns。
所有異步時(shí)序檢查均被分配給了 async_default 路徑組。
8.7 恢復(fù)時(shí)間檢查
恢復(fù)時(shí)間檢查(recovery timing check)可確保異步信號(hào)變?yōu)闊o(wú)效狀態(tài)的時(shí)刻與下一個(gè)有效時(shí)鐘沿之間的時(shí)間間隔大于一個(gè)最小值。換句話說(shuō),此檢查可確保在異步信號(hào)變?yōu)闊o(wú)效狀態(tài)之后,有足夠的時(shí)間恢復(fù),以便下一個(gè)有效時(shí)鐘沿可以生效。例如,考慮從異步復(fù)位變?yōu)闊o(wú)效的時(shí)刻到觸發(fā)器有效時(shí)鐘沿之間的時(shí)間間隔。如果該時(shí)間間隔太短即有效時(shí)鐘沿在復(fù)位釋放后太早出現(xiàn),則觸發(fā)器可能進(jìn)入未知的狀態(tài)。恢復(fù)時(shí)間檢查如圖 8-21 所示。該檢查基于的是觸發(fā)器異步引腳上指定的恢復(fù)時(shí)間,單元庫(kù)文件中與恢復(fù)時(shí)間有關(guān)的描述片段如下:
圖 8-21
與建立時(shí)間檢查一樣,該檢查也是針對(duì)最大路徑的,不過(guò)是在觸發(fā)器的異步引腳上。
以下是一份恢復(fù)時(shí)間檢查的路徑報(bào)告:
終點(diǎn)(Endpoint)表明這是恢復(fù)時(shí)間檢查,并且觸發(fā)器 UFF6 的恢復(fù)時(shí)間在報(bào)告中顯示為 library recovery time,值為 0.09ns?;謴?fù)時(shí)間檢查也屬于 async_default 路徑組。
8.8 跨時(shí)鐘域的時(shí)序
8.8.1 慢速時(shí)鐘域到快速時(shí)鐘域
讓我們來(lái)對(duì)一條從慢速時(shí)鐘域到快速時(shí)鐘域的路徑來(lái)進(jìn)行建立時(shí)間與保持時(shí)間檢查,如圖 8-22 所示。
圖 8-22
這是以上示例的時(shí)鐘定義:
create_clock -name CLKM -period 20 -waveform {0 10} [get_ports CLKM]
create_clock -name CLKP -period 5 -waveform {0 2.5} [get_ports CLKP]
當(dāng)數(shù)據(jù)發(fā)起觸發(fā)器和捕獲觸發(fā)器的時(shí)鐘頻率不同時(shí),STA 會(huì)首先確定一個(gè)公共基本周期(common base period)。下面給出了在具有上述兩個(gè)時(shí)鐘的設(shè)計(jì)中執(zhí)行 STA 時(shí)打印出的信息。較快的時(shí)鐘會(huì)被延拓,以便獲得一個(gè)公共周期。
圖 8-23
圖 8-23 中為建立時(shí)間檢查。默認(rèn)情況下,將使用最嚴(yán)格的建立時(shí)間邊沿去檢查,在本例中為 5ns 處的時(shí)鐘沿。以下是此時(shí)建立時(shí)間檢查的路徑報(bào)告:
請(qǐng)注意,發(fā)起時(shí)鐘沿為 0ns,而捕獲時(shí)鐘沿為 5ns。
如前所述,保持時(shí)間檢查與建立時(shí)間檢查有關(guān),并確保由當(dāng)前時(shí)鐘沿發(fā)起的數(shù)據(jù)不會(huì)干擾先前數(shù)據(jù)的捕獲。這是保持時(shí)間檢查的報(bào)告:
在上面的示例中,我們可以看到發(fā)起的數(shù)據(jù)在捕獲時(shí)鐘的第四個(gè)周期可用。讓我們假設(shè)該設(shè)計(jì)的目的不是在 CLKP 的下一個(gè)有效沿上就捕獲數(shù)據(jù),而是在每第 4 個(gè)捕獲沿上捕獲數(shù)據(jù)。該假設(shè)給觸發(fā)器之間的組合邏輯路徑提供了 4 個(gè) CLKP 周期的時(shí)間,即 20ns。我們可以通過(guò)設(shè)置以下多周期路徑約束來(lái)做到這一點(diǎn):
- set_multicycle_path 4 -setup -from [get_clocks CLKM] -to [get_clocks CLKP] -end
圖 8-24
-end 選項(xiàng)指定了多周期 4 是用于終點(diǎn)(endpoint)或捕獲時(shí)鐘的。此多周期路徑約束將建立時(shí)間和保持時(shí)間檢查更改為了圖 8-24 中所示。以下是這種情況下建立時(shí)間檢查的路徑報(bào)告:
上圖 8-24 中也說(shuō)明了保持時(shí)間檢查,請(qǐng)注意,保持時(shí)間檢查是根據(jù)建立時(shí)間檢查而決定的,默認(rèn)為當(dāng)前數(shù)據(jù)捕獲沿之前的一個(gè)周期。以下是保持時(shí)間檢查的路徑報(bào)告。注意,保持時(shí)間捕獲沿為 15ns,比建立時(shí)間捕獲沿(20ns)早一個(gè)周期(5ns)。
在大多數(shù)設(shè)計(jì)中,這不是理想的時(shí)序檢查,應(yīng)將保持時(shí)間檢查一直移回到數(shù)據(jù)發(fā)起沿所在位置。因此,我們可以約束多周期保持時(shí)間為 3。
- set_multicycle_path 3 -hold -from [get_clocks CLKM] -to [get_clocks CLKP] -end
3 是指將保持時(shí)間檢查沿向后移三個(gè) CLKP 時(shí)鐘周期,即 0ns 時(shí)刻處。與多周期建立時(shí)間約束的區(qū)別在于:在多周期建立時(shí)間約束中,建立時(shí)間捕獲沿會(huì)從默認(rèn)的建立時(shí)間捕獲沿向前移動(dòng)指定的周期數(shù);而在多周期保持時(shí)間約束中,保持時(shí)間檢查沿會(huì)從默認(rèn)的保持時(shí)間檢查沿向后移動(dòng)指定的周期數(shù)。-end 選項(xiàng)意味著我們想將終點(diǎn)(或捕獲邊沿)移回指定的周期數(shù),即捕獲時(shí)鐘的周期數(shù)。代替 -end 的另一種選項(xiàng) -start 指定了要移動(dòng)的發(fā)起時(shí)鐘周期數(shù),-end 選項(xiàng)指定了要移動(dòng)的捕獲時(shí)鐘周期數(shù)。-end 是多周期建立時(shí)間約束的默認(rèn)值,-start 是多周期保持時(shí)間約束的默認(rèn)值。
圖 8-25
使用多周期保持時(shí)間約束,可以將保持時(shí)間檢查的時(shí)鐘沿往回移,檢查效果如圖 8-25 所示。具有多周期保持時(shí)間約束的保持時(shí)間檢查路徑報(bào)告如下:
總之,如果指定了 N 個(gè)周期的多周期建立時(shí)間,那么很可能還應(yīng)指定 N-1 個(gè)周期的多周期保持時(shí)間。對(duì)于慢速到快速時(shí)鐘域之間的路徑,多周期路徑約束的一個(gè)好經(jīng)驗(yàn)是使用 -end 選項(xiàng)。使用此選項(xiàng),可以根據(jù)快速時(shí)鐘的時(shí)鐘周期來(lái)調(diào)整建立時(shí)間和保持時(shí)間檢查。
8.8.2 快速時(shí)鐘域到慢速時(shí)鐘域
在本小節(jié)中,我們考慮數(shù)據(jù)路徑從快速時(shí)鐘域到慢速時(shí)鐘域的示例。使用以下時(shí)鐘定義時(shí),默認(rèn)的建立時(shí)間和保持時(shí)間檢查如圖 8-26 所示。
create_clock -name CLKM -period 20 -waveform {0 10} [get_ports CLKM]
create_clock -name CLKP -period 5 -waveform {0 2.5} [get_ports CLKP]
圖 8-26
總共可能有四種建立時(shí)間檢查,請(qǐng)參閱圖 8-26 中的 Setup1,Setup2,Setup3 和 Setup4。其中,最嚴(yán)格的是 Setup4 檢查。以下是此最嚴(yán)格檢查的路徑報(bào)告。請(qǐng)注意,數(shù)據(jù)發(fā)起時(shí)鐘沿為 15ns,捕獲時(shí)鐘沿為 20ns。
與建立時(shí)間檢查類似,總共也可能有四種保持時(shí)間檢查。圖 8-26 中所示為最嚴(yán)格的保持時(shí)間檢查,該檢查可確保 0ns 處的捕獲沿不捕獲 0ns 處正在發(fā)起的數(shù)據(jù)。以下是這種情況下保持時(shí)間檢查的路徑報(bào)告:
通常,設(shè)計(jì)人員可以將從快時(shí)鐘域到慢時(shí)鐘域的數(shù)據(jù)路徑指定為多周期路徑。如果想要放寬建立時(shí)間檢查,比如為數(shù)據(jù)路徑提供兩個(gè)快時(shí)鐘周期,則此多周期路徑約束如下:
set_multicycle_path 2 -setup -from [get_clocks CLKP] -to [get_clocks CLKM] -start
set_multicycle_path 1 -hold -from [get_clocks CLKP] -to [get_clocks CLKM] -start
在這種情況下,圖 8-27 中為用于建立時(shí)間和保持時(shí)間檢查的時(shí)鐘沿。-start 選項(xiàng)指定周期數(shù)的單位(在這種情況下為 2)是發(fā)起時(shí)鐘周期(在這種情況下為 CLKP)。約束多周期建立時(shí)間為 2 會(huì)將發(fā)起沿移動(dòng)到默認(rèn)發(fā)起沿之前的一個(gè)時(shí)鐘沿,即在 10ns 而不是默認(rèn)的 15ns 處。多周期保持時(shí)間約束確保了在 0ns 處發(fā)起沿發(fā)起的數(shù)據(jù),不會(huì)被 0ns 處的捕獲沿捕獲到。
圖 8-27
以下是建立時(shí)間檢查的路徑報(bào)告。與預(yù)期一樣,發(fā)起時(shí)鐘沿為 10ns,捕獲時(shí)鐘沿為 20ns。
以下是保持時(shí)間檢查的路徑報(bào)告。保持時(shí)間檢查是在 0ns 處執(zhí)行的,此時(shí)捕獲時(shí)鐘和發(fā)起時(shí)鐘均為上升沿。
與從慢速時(shí)鐘域到快速時(shí)鐘域的路徑不同,在從快速時(shí)鐘域到慢速時(shí)鐘域的路徑中,多周期路徑約束的一個(gè)好經(jīng)驗(yàn)是使用 -start 選項(xiàng),然后再根據(jù)快速時(shí)鐘調(diào)整建立時(shí)間和保持時(shí)間檢查。