對于數字系統(tǒng)而言,建立時間(setup time)和保持時間(hold time)是數字電路時序的基礎。數字電路系統(tǒng)的穩(wěn)定性,基本取決于時序是否滿足建立時間和保持時間。所以,這里用一整節(jié)的篇幅,來詳細的說明建立時間和保持時間的概念。
建立時間就是時鐘觸發(fā)事件來臨之前,數據需要保持穩(wěn)定的最小時間,以便數據能夠被時鐘正確的采樣。
保持時間就是時鐘觸發(fā)事件來臨之后,數據需要保持穩(wěn)定的最小時間,以便數據能夠被電路準確的傳輸。
可以通俗的理解為:時鐘到來之前,數據需要提前準備好;時鐘到來之后,數據還要穩(wěn)定一段時間。建立時間和保持時間組成了數據穩(wěn)定的窗口,如下圖所示。
《Verilog 門延遲》中已經介紹過一種簡單的 D 觸發(fā)器。下面再看一種典型的上升沿 D 觸發(fā)器,來說明建立時間和保持時間的由來。
G1~G4 與非門是維持阻塞電路,G5~G6 組成 RS 觸發(fā)器。
時鐘直接作用在 G2/G3 門上,時鐘為低時 G2/G3 通道關閉,為高時通道打開,進行數據的采樣傳輸。
但數據傳輸到 G2/G3 門之前,會經過 G4/G1 與非門,將引入時間延遲。引入建立時間的概念,就是為了補償數據在 G4/G1 門上的延遲。即時鐘到來之前,G2/G3 端的輸入數據需要準備好,以便數據能夠被正確的采樣。
數據被時鐘采樣完畢后,傳輸到 RS 觸發(fā)器進行鎖存之前,也需要經過 G2/G3 門,也會引入延遲。保持時間就是為了補償數據在 G2/G3 門上的延遲。即時鐘到來之后,要保證數據能夠正確的傳輸到 G6/G5 與非門輸入端。
如果數據在傳輸中不滿足建立時間或保持時間,則會處于亞穩(wěn)態(tài),導致傳輸出錯。
下圖是一個典型的觸發(fā)器到觸發(fā)器之間的數據傳輸示意圖。其中 "Comb" 代表組合邏輯延遲,"Clock Skew" 表示時鐘偏移,數據均在時鐘上升沿觸發(fā)。
時鐘到來之前,數據需要提前準備好,才能被時鐘正確采樣,要求數據路徑 (data path) 比時鐘路徑 (clock path)更快,即數據到達時間(data arrival time)小于數據要求時間(data required time)。則建立時間需要滿足的表達式為:
Tcq + Tcomb + Tsu <= Tclk + Tskew (1)
各個時間參數說明如下:
Tcq
?: 寄存器 clock 端到 Q 端的延遲;Tcomb
?: data path 中的組合邏輯延遲;Tsu
?: 建立時間;Tclk
?: 時鐘周期;Tskew
?: 時鐘偏移。對上式進行變換,則理論上電路能夠承載的最小時鐘周期和最快時鐘頻率分別為:
最小時鐘周期 = Tcq + Tcomb + Tsu - Tskew
最快時鐘頻率 = 1 / (Tcq + Tcomb + Tsu - Tskew)
時鐘到來之后,數據還要穩(wěn)定一段時間,這就要求前一級的數據延遲(data delay time)不要大于觸發(fā)器的保持時間,以免數據被沖刷掉。則保持時間需要滿足的表達式為:
Tcq + Tcomb >= Thd + Tskew (2)
各個時間參數說明如下:
Tcq
?: 寄存器 clock 端到 Q 端的延遲;Tcomb
?: data path 中的組合邏輯延遲;Thd
?: 保持時間;Tskew
?: 時鐘偏移。由式 (1) (2) 可以推導出時鐘偏移、組合邏輯延遲及時鐘周期的約束。
建議大家只需要記住這 2 個最基本的約束條件表達式,需要求取其他參數約束時,再進行推導,以免各種推導造成記憶混亂。
一個關于建立時間和保持時間的復雜時序圖如下所示。
其中,綠色部分表示建立時間的裕量(margin),藍色部分表示保持時間的裕量。時間裕量,其實就是電路在滿足時序約束的條件下,不等式 (1) 或 (2) 兩邊時間的差值。
建立時間裕量為:(時鐘路徑時間)-(數據路徑時間)
保持時間裕量為:(數據延遲時間) - (保持時間 + 時鐘偏移)
該圖只是便于理解建立時間和保持時間約束條件的推導。如果這里會造成記憶混亂,建議不要深究(^_^)。
為更好的理解建立時間和保持時間的概念,也為面試或工作提供方便,這里列舉一些典型的建立時間和保持時間的試題,以供參考。
例1:
考慮線網延遲,某電路各種延遲值(單位:ns)如下,時鐘周期為 15ns,請判斷該電路的建立時間和保持時間是否存在 violation ?
解:
這里涉及了延遲值的最大值和最小值。
因為要求時序約束恒成立,所以式 (1) (2) 的變形為:
max (data path time) <= min (clock path time)
min (data delay time) >= max (Thd + Tskew)
建立時間檢查:
max (data path time) = 2 + 11 + 2 + 9 + 2 + 2 = 28ns
min (clock path time) = 15 + 2 + 5 + 2 = 24ns
因此建立時間存在 violation。
保持時間檢查:
min (data delay time) = 1 + 9 + 1 + 6 + 1 = 18ns
max (Thd + Tskew) = 3 + 3 + 9 + 2 = 17ns
因此保持時間不存在 violation,裕量(margin)為 1ns。
此例不能生硬的去照搬建立時間和保持時間的表達式,而要從數據路徑、時間路徑、數據延遲等概念去建立約束條件。所以,各種時序約束條件還要根據實際電路去分析。
例2:
一道知名公司的面試題:時鐘周期為 T, 第一級觸發(fā)器 D1 建立時間最大值為 T1max,最小值為 T1min。組合邏輯最大延遲為 T2max, 最小值為 T2min。問:第二級觸發(fā)器 D2 的建立時間和保持時間應該滿足什么條件?
解:
第二級的建立時間和保持時間和第一級觸發(fā)器沒有直接關系,所以這里的 T1max 和 T1min 是迷惑項。
例題中也沒有給出時鐘到 Q 端的延遲和時鐘偏移,這里也不用考慮。
結合例 1 的指示,所以 D2 建立時間 Tsu 和保持時間 Thd 應該滿足:
T2max + Tsu <= T
T2min >= Thold
即
Tsu <= T - T2max
Thold <= T2min
此例中很多延遲類型沒有考慮。建立時序約束條件時,還需要根據已知條件懂得取舍。
例3:
一種簡單的分頻電路如下所示。該觸發(fā)器建立時間為 3ns, 保持時間為 3ns, 邏輯延遲為 6ns,兩個反相器延遲為 1ns,連線延遲為0。則該電路的最高工作頻率是多少?
解:
這里的邏輯延遲要理解為時鐘端到 Q 端的延遲,一定要注意不是電路中的組合邏輯延遲。
因為觸發(fā)器 Q 端和 D 端連接,可以理解為兩個觸發(fā)器直接進行傳輸,所以 data path 沒有組合邏輯延遲,只有一個反相器延遲。
因為只有一個鐘,所以也沒有時鐘偏移,clock path 的反相器延遲也是迷惑項。
所以,時序約束條件為:
Tcq + Tbuf + Tsu <= Tclk
可得該電路最高工作頻率為:
1 / (6ns + 1ns + 3ns) = 100Mhz。
此例是一個觸發(fā)器自身到自身的反饋,一定要分析好數據路徑和時鐘路徑,下面再看一道此類型的擴展例題。
例4:
解:
該電路數據路徑和時鐘路徑上均有延遲,為達到與觸發(fā)器相同建立時間和保持時間的條件約束,則觸發(fā)器 D 端和時鐘端 CK,以及等效的數據端 Data 和時鐘端 Clock 時序圖如下(我已經很努力在往簡潔的方向上畫了~_~):
該電路固有的建立時間為:2.1 + 2 - 1.2 = 2.9ns
固有的保持時間為:1.2 + 1.5 - 2.1 = 0.6ns
由此可知,數據路徑的延遲會增加電路固有的建立時間,但是會減少電路固有的保持時間。而時鐘偏移會減少電路固有的建立時間,增加電路固有的保持時間。
偷偷告訴你,求取電路固有的建立時間和保持時間,其實就是求取時間裕量的過程。
更多建議: