建立时间与保持时间
建立時間與保持時間
概述: 建立時間、保持時間模型展現;建立時間余量、保持時間余量的計算;以及系統允許時鐘頻率的最大頻率計算。
文章目錄
- 1、建立時間與保持時間概述及模型
- 2、寄存器之間數據傳輸時建立時間與保持時間
- 3、寄存器之間數據傳輸時建立時間余量與保持時間余量計算
- 4、 FPGA允許的最大時鐘頻率或最小時鐘周期
- 5、計算FPGA時鐘所允許的最大頻率或最小時鐘周期
- 6、違反建立和保持時間會發生什么?
- 7、Vivado中建立時間余量與保持時間余量的計算。
1、建立時間與保持時間概述及模型
建立時間(Tsu): 在時鐘采樣沿之前,數據必須保持穩定的時間,該時間量稱為建立時間。
保持時間(Th): 在時鐘采樣沿之后,數據必須保持穩定的最短時間。
理想最優的建立時間和保持時間出現在數據中間采樣的位置,如下所示,實質就是使觸發器在采樣沿得到穩定的數據,如果數據在時鐘上升沿的建立保持時間內{latch edge-setup,latch edge+hold time}發生跳變,則會產生亞穩態輸出,即輸出值在短時間內處于不確定態,有可能是1,有可能是0,也可能什么都不是,處于中間態。
在出現沿打沿的現象時會出現建立時間最大值或者保持時間最大值。
理想建立時間最大值:
理想保持時間最大值:
2、寄存器之間數據傳輸時建立時間與保持時間
??寄存器數據傳輸的模型:數據從在Reg1到Reg2,理想情況下采樣沿到達Reg2時,數據的中間位置到達Reg2的數據端,這樣出現最優的建立時間和保持時間,此時采樣的數據也是最穩定的,如果時鐘早到或者數據早到就會產生余量,嚴重的情況下就會產生時序為例。
數據和時鐘到達Reg2最優情況,采樣沿位于數據的中間位置:
出現保持時間最大值采樣沿,采樣沿與數據起始位置對齊:
出現建立時間最大值,采樣沿與數據結束為止對齊:
3、寄存器之間數據傳輸時建立時間余量與保持時間余量計算
在實際的數據傳輸中器件和線路均會存在延遲,寄存器間數據傳輸模型如下所示:
Tclk1 :時鐘到達Reg1的時鐘延時。
Tco?:數據從Reg1器件D到Q的物理延時。
Tclk2 :時鐘到達Reg2的時鐘延時。
Tdata:數據從Reg1的Q端到Reg2的D端的線路延時。
Tsu/Th:保持時間/建立時間。
建立時間余量(Setup Slack): 要求數據到達時間和數據實際到達時間的差值。
實際考慮線路延時時數據從Reg1到Reg2的時序圖如下所示:
Clk_in:輸入時鐘。
Clk_Reg1:Clk_in經過Tclk1時延到達Reg1的時鐘。
Reg1 Q :數據從Reg1的D端進入到達Q端經過Tco時延的數據。
Reg1 D :數據從Reg1的Q端輸出經過Tdata時延到達Reg2的D端的數據。
Clk_Reg2:Clk_in經過Tclk2時延到達Reg2的時鐘。
通過上圖觀察:(Tcycle為一個時鐘周期)
要求數據達到的時間 = Tcycle + Tclk2 - Tsu。(圖中②)
實際數據到達的時間 = Tclk1 + Tco + Tdata。(圖中①)
建立時間余量(Setup Slack)= Tcycle + Tclk2 - Tsu - (Tclk1 + Tco + Tdata)。
保持時間余量(Hold Slack): 數據實際結束位置和要求數據結束位置的差值。
實際考慮線路延時時數據從Reg1到Reg2的時序圖如下所示:
Clk_in :輸入時鐘。
Clk_Reg1:Clk_in經過Tclk1時延到達Reg1的時鐘。
Reg1 Q :數據從Reg1的D端進入到達Q端經過Tco時延的數據。
Reg1 D :數據從Reg1的Q端輸出經過Tdata時延到達Reg2的D端的數據。
Clk_Reg2:Clk_in經過Tclk2時延到達Reg2的時鐘。
通過上圖觀察:(Tcycle為一個時鐘周期)
實際數據結束的時間 = Tcycle + Tclk1 + Tco + Tdata。(圖中②)
要求數據結束的時間 = Tcycle + Tclk2 + Th。(圖中①)
保持時間余量(Told Slack)= Tcycle + Tclk1 + Tco + Tdata - (Tcycle + Tclk2 + Th)。
從上面的公式中可以看出建立時間余量(Told Slack)與時鐘周期Tcycle 無關,所以時鐘頻率也與保持時間余量無關。
4、 FPGA允許的最大時鐘頻率或最小時鐘周期
通過上面的推導時鐘周期和頻率與保持時間無關,所以在 建立時間余量為0時取得最大時鐘頻率即最小時鐘周期。
5、計算FPGA時鐘所允許的最大頻率或最小時鐘周期
例: 計算建立時間余量Setup Slack 與 系統時鐘允許的最大時鐘頻率 Fmax。
??時鐘周期為10ns;Clk in到Reg1的時延為3ns;Clk in到Reg2的時延為2ns;Reg1 Q端到Reg2 D端的時延為3ns;Tus=0.5ns;Tco=1ns;建立時間余量?FPGA允許的最大時鐘頻率?
建立時間余量(Setup Slack)= Tcycle + Tclk2 - Tsu - (Tclk1 + Tco + Tdata)。
Setup Slack = 10 + 2 - 0.5 -(3 + 1 +3)= 4.5ns
建立時間余量為0時取得最大時鐘頻率即最小時鐘周期。
Fmax = 1/(Tcycle - Setup Slack)= 1/(10 - 4.5)。
例: 計算保持時間余量Hold Slack 與 系統時鐘允許的最大時鐘頻率 Fmax。
??時鐘周期為10ns;Clk in到Reg1的時延為3ns;Clk in到Reg2的時延為2ns;Reg1 Q端到Reg2 D端的時延為3ns;Th=0.5ns;Tco=1ns;保持時間余量?FPGA允許的最大時鐘頻率?
保持時間余量(Told Slack)= Tcycle + Tclk1 + Tco + Tdata - (Tcycle + Tclk2 + Th)=Tclk1 + Tco + Tdata - Tclk2 - Th。
Told Slack = 3 + 1 + 3 -2 - 0.5 = 4.5。
Fmax與保持時間余量無關。
6、違反建立和保持時間會發生什么?
??在觸發器建立期間,如果數據在時鐘上升沿的建立保持時間內{latch edge-setup,latch edge+hold time}發生跳變,則會產生亞穩態輸出,即輸出值在短時間內處于不確定態,有可能是1,有可能是0,也可能什么都不是,處于中間態。
7、Vivado中建立時間余量與保持時間余量的計算。
建立時間余量分析:
如下打開時序分析報告:
在報告中建立時間顯示紅色,表明建立時間余量不滿足時序要求。
雙擊該路徑:
數據實際到達的時間為19.592。
要求數據到達的時間為18.145。
建立時間余量 = 要求數據到達的時間 - 實際數據到達的施加 = 18.145-19.592= -1.447。
負值,則要求達不到。
保持時間余量分析:
數據實際結束的時間為-0.287。
數據要求結束的時間為-0.336.
保持時間余量 = 數據實際結束的時間 - 數據要求結束的時間 = -0.287-(-0.336)=0.049ns。
為正值,時序要求可以達到。
★★★如有錯誤,歡迎指導!!!
總結
- 上一篇: 7723java版_刺马_JAVA游戏免
- 下一篇: 嵌入式ARM下使用ALSA USB声卡