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