Time borrowing
latch 在高電平時(shí)透明,dff 在邊沿采樣。
image-20200622162330779
opening edge 指邊沿跳變以后有效的邊沿,closing edge 指邊沿跳變之后無效的邊沿。
通常觸發(fā)器有建立時(shí)間和保持時(shí)間的要求,對(duì)于 latch 也是有類似的要求的。latch 可以在 opening edge 以后變化,這種情況類似于向后借時(shí)間了,所以稱之為 Time borrowing。
一個(gè) time borrowing 的例子,數(shù)據(jù)可以在建立時(shí)間之前到達(dá)(DIN),也可以在邊沿以后到來(delay),翻轉(zhuǎn)到邊沿的時(shí)間稱為 time borrowing,進(jìn)一步下一個(gè)周期的時(shí)間余量就會(huì)變小。
三種 slack,如果在 opening 之前到來,成為 positive edge,在 opening 和 closing 之間成為 zero edge,可以使用 time borrowing 保證時(shí)序,如果在 closing 之后到來,那么就會(huì)產(chǎn)生時(shí)序違例,因?yàn)榫退闶褂?time borrowing 也無法讓數(shù)據(jù)正確采樣。
使用 latch 的一個(gè)例子,緩和時(shí)序。
image-20200622163910240
UFF0 到 ULAT1 之間的邏輯延遲小于 5ns,那么數(shù)據(jù)在 opening edge 之前到來。
時(shí)序報(bào)告,期待您是 UFF0 終點(diǎn)時(shí) ULAT1,發(fā)射路徑:
image-20200622164715848
捕獲路徑,不需要借時(shí)間,時(shí)序滿足。
下面是 zero slack,發(fā)射路徑。
捕獲路徑,使用 time borrowing,借了 1.81ns。
下面分析發(fā)生 time borrowing 時(shí) ULAT1 到 DFF1 的時(shí)序,首先發(fā)射路徑,注意,類似半周期路徑,clock CLK‘ incr 為 5。
image-20200622165141641
捕獲路徑,時(shí)序滿足。
negedge slack,發(fā)射路徑。
image-20200622165547742
捕獲路徑,就算借滿所有時(shí)間,也無法滿足時(shí)序(4.99 是要減去 setup 時(shí)間 0.01)。
?
Data To Data check
檢查兩個(gè) pin 之間的關(guān)系,而且并沒有時(shí)鐘,一個(gè)為 constrainted pin 類似于 DFF 的數(shù)據(jù)端,一個(gè) related pin 類似于 DFF 的 clock。
這種檢查的不同之處為,建立時(shí)間檢查是在同一個(gè)邊沿檢查的,因此稱之為 zero-cycle check。
image-20200622170127811
data to data check 使用 set_data_check 約束進(jìn)行檢查。
這是用于約束外部引腳的約束。
一個(gè)例子,對(duì)于與門,為了避免毛刺,進(jìn)行約束。
約束時(shí)序報(bào)告,注意時(shí)序報(bào)告中的是 data check setup time。
上面是建立時(shí)間檢查,下面是保持時(shí)間檢查,在發(fā)射路徑中,是從 10 開始的,這相對(duì)于建立時(shí)間先前移動(dòng)了一個(gè)周期。
如果現(xiàn)在同一個(gè)邊沿檢查 hold,可以使用多周期約束實(shí)現(xiàn)。
多周期約束以后,發(fā)射路徑從 0 開始。
也可以將兩個(gè)信號(hào)的約束反向,保持時(shí)間約束通過反向的建立時(shí)間約束實(shí)現(xiàn),在同一個(gè)邊沿進(jìn)行檢查。
data to data check 也可以用于約束要求信號(hào)在時(shí)間內(nèi)保持不變。