何為建立時間(Setup Time)和保持時間(HoldTime)?以D觸發器為例,在作為接收端時;由於工藝、寄生參數、觸發器結構等原因決定,被采樣數據必需有一個穩定區 間,保證數據可以正確的被觸發器采樣。通常我們把這個要求的穩定區間稱為 Setup-Hold window。我們把 Setup-Hold window 和時鍾沿對應起來,把Setup-Hold window 分解為兩部分,建立時間(Setup Time)和保持時間(Hold Time)。
我們先來對他有一個直觀的描述:
在觸發器的時鍾沿到來前,輸入數據必須保持在一個穩定狀態的最小時間;稱為建立時間(setuptime)。
在觸發器的時鍾沿到達后,輸入數據需要繼續保持在原狀態的最小時間,稱為保持時間(holdtime)。
建立保持時間的初步推導
在這里我們從觸發器的內部結構來分析建立保持時間
上 圖是一個由6個與非門構成的維持阻塞結構的D觸發器,每個與非門有門延時tpd;其中/SD 和/RD是異步置0置1端;當/SD 和/RD為0、1(或1、0)時,觸發器被直接置1(或置0),只有當/SD 和/RD同時為1時,CLK和D的變化才起作用。各端的邏輯關系如下
G1=(/SD&SD'&G2) ////Q=/SD & SD' & /Q
G2=(/RD&RD'&G1) ////Q=/RD & RD‘ & Q
RD'=(SD'&CP&a) ////RD‘ = SD‘ & CP & a
SD'=(/RD&CP&b) ////SD' = /RD & CP & b
b=(/SD&SD'&a) ////b = /SD & SD' & a
a=(D&/RD&RD') //// a = /RD & RD' & D
分析電路邏輯功能時可以假定/SD 和/RD同時為1,即可暫時把/SD 和/RD相關的門的連線去掉,如下圖:
Q=SD' & /Q
/Q=& RD‘ & Q
RD‘ = CP & a // RD‘=0鎖住G6,一個 & 門延遲,RD'更新
SD' = CP & b //SD‘=0鎖住G4 G5,一個 & 門延遲,SD'更新
b = SD' & a //兩個 & 門延遲2ptd,b的值更新
a = RD' & D //一個 & 門延遲tpd,a的值更新
結合上圖觸發器結構,我們看出,若要使時鍾到來前數據a、b都穩定,從D到a經過1個與非門,到b經過2個與非門;所以必須使D在CLK上升沿到來之前至少提前2個tpd輸入才能保證數據穩定;
時鍾到來之后,要經過1個tpd,使RD’和SD’輸出;當RD’=0時,鎖住與非門G6;SD=0時,鎖住G4和G5;使D的變化不再影響到下一級;
通過上面的推導結合建立保持時間的定義,我們可以得出該D觸發器的建立時間為2*tpd;保持時間為tpd;
詳細驗證:
上面只是一個初步推論,不滿足這個時間會不會又有怎樣的現象?是否和我們取得的定義符合?為了支撐該推論我們還需要做些驗證:當D與CLK的建立保持時間滿足上述條件的情形和不滿足上述條件情形都會出現什么狀況;
我們列出在D輸入為0時,
1. 比clk上升沿提前穩定2*tpd,並在clk上升沿到來后保持1*tpd;
2. 比clk上升沿提前穩定1*tpd,並在clk上升沿到來后保持1*tpd;
3. 比clk上升沿提前穩定2*tpd,並在clk上升沿到來不保持;
三種情形,看會對輸出造成什么影響
以下為上述三個條件下的真值表;相鄰兩欄之間間隔一個tpd;Z表示無效狀態,tpd=0時,Q 和/Q已被賦予一個初始狀態;
D輸入為0,比clk上升沿提前穩定2*tpd,並在clk上升沿到來后保持1*tpd
Tpd |
D |
a |
b |
CLK |
SD' |
RD’ |
Q |
/Q |
備注 |
0 |
Z |
Z |
Z |
0 |
1 |
1 |
1 |
0 |
無數據輸入時高阻態,Q被異步置0后釋放 |
1 |
0 |
Z |
Z |
0 |
1 |
1 |
1 |
0 |
有效數據開始輸入 |
2 |
0 |
1 |
Z |
0 |
1 |
1 |
1 |
0 |
|
3 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
數據穩定(a和b) |
4 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
穩定后時鍾沿到來 |
5 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
RD’鎖定G6輸出1狀態,此處開始輸入D變化不對輸出造成影響 |
6 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
|
7 |
X |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
此值由SD'&RD'經過tpd后輸出,當CLK為低時,數據保持,直到下一個時鍾到來 |
D輸入為0,比clk上升沿提前穩定1*tpd,並在clk上升沿到來后保持1*tpd
Tpd |
D |
a |
b |
CLK |
SD' |
RD’ |
Q |
/Q |
備注 |
0 |
Z |
Z |
Z |
0 |
1 |
1 |
1 |
0 |
無數據輸入時高阻態,Q被異步置0后釋放 |
1 |
0 |
Z |
Z |
0 |
1 |
1 |
1 |
0 |
有效數據開始輸入 |
2 |
1 |
1 |
Z |
0 |
1 |
1 |
1 |
0 |
D在1個tpd后跳變(不滿足建立時間) |
3 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
時鍾來臨 |
4 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
穩定后時鍾沿到來 |
5 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
輸出錯誤,且不能鎖住G6,會有空翻轉,數據無法保持,狀態不定 |
6 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
|
7 |
X |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
此值由SD'&RD'經過tpd后輸出,當CLK為低時,數據保持,直到下一個時鍾到來 |
D輸入為0,比clk上升沿提前穩定2*tpd,並在clk上升沿到來不保持
tpd |
D |
a |
b |
CLK |
SD' |
RD’ |
Q |
/Q |
備注 |
0 |
Z |
Z |
Z |
0 |
1 |
1 |
1 |
0 |
無數據輸入時高阻態,Q被異步置0后釋放 |
1 |
0 |
Z |
Z |
0 |
1 |
1 |
1 |
0 |
有效數據開始輸入 |
2 |
0 |
1 |
Z |
0 |
1 |
1 |
1 |
0 |
|
3 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
數據穩定(a和b) |
4 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
穩定后時鍾沿到來 |
5 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
RD’鎖定G6輸出1狀態,此處開始輸入D變化不對輸出造成影響 |
6 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
|
7 |
X |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
此值由SD'&RD'經過tpd后輸出,當CLK為低時,數據保持,直到下一個時鍾到來 |
8 |
X |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
SD’鎖定G4和G5輸出1狀態,此處開始輸入D變化不對輸出造成影響 |
9 |
X |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
鎖定為此出錯狀態 |
從表中結果來看,不滿足建立保持時間出現了誤觸發、空翻轉等異常操作,且可能無法鎖定G6與非門,使保持時間失效;以上只是不滿足建立保持時間的部分現象。這類現象叫亞穩態。
D觸發器的邏輯很有趣,初始輸入輸出狀態不同與非門翻轉的過程也會不一樣;當D=1時情形會和D=0有所不同,在此不贅述,附件會有一個計算表格,大家有興趣可以推導當D=1時的狀態。
異步信號:異步信號對於本地時鍾域系統都意味着一個不穩定的源,因為總是存在這種可能,時鍾會在異步信號變化的時候進行了采樣,導致建立/保持時間不穩定,D觸發器進入亞穩定狀態。
危害:異步信號A的輸入,可能導致亞穩態,引起信號B的輸出狀態不穩定。如果B信號有多個扇出,那么就不能保證所有的扇出將亞穩態的信號識別為相同的邏輯電平值,電路判斷出現混亂。
保 證下級時鍾對上級數據采樣的Setup時間和Hold時間,避免亞穩態。(注:如果觸發器的Setup time或者Hold time不滿足,就可能產生亞穩態,此時觸發器輸出端Q在有效時鍾沿之后比較長的一段時間處於不確定的狀態,在這段時間里Q端毛刺、振盪、固定的某一電壓 值,而不是等於數據輸入端D的值。這段之間成為決斷時間(Resolution time)。經過Resolution time之后Q端將穩定到0或1上,但是究竟是0還是1,這是隨機的,與輸入沒有必然的關系)
使用兩級寄存器采樣可以有效的減少亞穩態繼續傳播的概率,但是無法糾正由於亞穩態導致的數據錯誤。在圖中,左邊為異步輸入端,經過兩級觸發器采樣,在右邊的輸出與bclk同步的,而且該輸出基本不存在亞穩態。其原理是即使第一個觸發器的輸出端存在亞穩態,經過一個Clk周期后,第二個觸發器D端的電平仍未穩定的概率非常小,因此第二個觸發器Q端基本不會產生亞穩態。理論上如果再添加一級寄存器,使同步采樣達到3級,則末級輸出為亞穩態的概率幾乎等於0。
經過兩級觸發器采樣能解決異步信號的亞穩態問題,但是不能保證輸出的值是正確的。