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