1. 程式人生 > >關於 建立保持時間的三篇文章之一 (轉載)

關於 建立保持時間的三篇文章之一 (轉載)

時間 ron tro dsw ted 分析 -s 對數 延遲

對於 建立保持時間的論述,有很多文章做了全面的講解。我現在分享(轉載) 三篇 我看到的 講解,以便於日後查看。

這邊文章轉載自: https://mp.weixin.qq.com/s/qWh5gob03GtAVCFV3eDSWg

時序邏輯電路的建立,保持時間裕量分析

在Verilog裏,時序邏輯電路即表示如下圖所示的電路。前後兩級寄存器之間有一個組合邏輯運算電路。

技術分享圖片

假設寄存器的建立時間要求為tsetup, 保持時間要求為thold, 輸出延時為tcq。

故對於第一個寄存器,時鐘上升沿之後,經過時間tcq數據才從Q端輸出。波形圖示如下。

技術分享圖片

假設組合邏輯運算電路的運算耗時為tlogic。故運算後的數據在時鐘上升沿之後經過時間tcq+tlogic才到達下一級寄存器的D端,圖示如下。

技術分享圖片

那麽對於下一級寄存器在接下來到來的時鐘上升沿采集數據,其必須要滿足建立保持時間要求。

建立時間:既數據D至少需要提前於clk上升沿多長時間到來,數據的采集才不會出錯。

從上述分析可得數據D提前於clk上升沿的時間為 tcycle-(tcq+tlogic)。

其中tcycle為時鐘周期。

如果 tcycle-(tcq+tlogic) > tsetup 那麽建立時間要求就得到了滿足。一般稱 tcycle-(tcq+tlogic) - tsetup 為建立時間裕量,為保證建立時間滿足要求,裕量必須要大於0。

技術分享圖片

當然上述情況還忽略了時鐘的延遲,即默認前後兩級寄存器的clk都是同時到達。如果時鐘存在正延時,即時鐘的傳播方向與數據傳播方向一致,即電路如下圖所示。clk從第一級到後一級寄存器的線路延時為tclk_delay。

技術分享圖片

從而對應的時序如下。針對於下一級的寄存器來說,相當於建立時間裕量增加了tclk_delay,即建立時間裕量為tcycle-(tcq+tlogic) - tsetup+tclk_delay。這種情況對於建立時間是有好處的。

技術分享圖片

相反,如果時鐘存在反向延時,即時鐘的傳播方向與數據傳播方向相反,那麽對於建立時間是不利的。此時的建立時間裕量為tcycle-(tcq+tlogic) - tsetup-tclk_delay。大家可自行畫時序圖分析,當作練習。

技術分享圖片

從上述對建立時間裕量的分析,可以發現,從前端設計的角度去分析,優化建立時間裕量可以靠減少兩級寄存器之間的組合邏輯的延時去增大建立時間裕量。後面會有文章去根據示例來介紹優化方法,其中流水線設計就是一種優化方式。

保持時間(thold):就是時鐘上升沿之後,數據D還需要維持多長時間不變,寄存器對數據的采集才不會出錯。還是對下面這個電路模型進行分析。

技術分享圖片

對於後一級寄存器來說,時鐘上升沿之後,後一級D端的數據要得到改變,必須是上一級的數據Q輸出了,並通過組合邏輯運算電路的延時,送到了D端。故在時鐘上升沿之後,數據要經過時間tcq+tlogic才到達下一級寄存器的D端,故每次時鐘上升沿之後,後一級寄存器的數據D可以維持不變的時間為tcq+tlogic。那麽保持時間裕量為 tcq+tlogic-thold。時序見下圖。

從這可以看出,時序邏輯電路裏面tlogic越大,對建立時間裕量不利,但對保持時間裕量有利。

技術分享圖片

同樣,再考慮存在時鐘延時對保持時間的影響。如下電路,即時鐘存在正延時時。

技術分享圖片

分析後一級寄存器的保持時間裕量時,對應的時序變成如下。可以看到,相當於前級寄存器的clk比下一級寄存器的clk提前了tclk_delay時間,故數據D2提前到來了。保持時間裕量變成了tcq+tlogic-thold-tclk_delay。

可以看到時鐘正向延時對建立時間要求有利,但對於保持時間要求是不利的。對於時鐘反向延時,大家自行畫圖分析。

技術分享圖片

上面還有一個因素沒有說明,就是時鐘clk的抖動。因為時鐘上升沿不可能每次都固定間隔時間tcycle到來一次。可能與這個時間有一個小小的偏差,但是不確定是提前到來還是延遲到來。這個偏差的時間為tjitter。如果考慮這個因素,建立時間與保持時間裕量都還要減掉這個抖動時間。故最終的建立時間與保持時間裕量計算公式入下(其中的tclk_delay為時鐘正向延時):

建立時間裕量 tsetup_slack = tcycle-(tcq+tlogic) - tsetup+tclk_delay-tjitter

保持時間裕量 thold_slack = tcq+tlogic-thold-tclk_delay-tjitter

到這大家明白了,建立時間裕量與保持時間裕量就是一對矛盾的關系,我們需要通過優化時鐘延時,組合邏輯延時來折中考慮這兩個裕量。在裕量不滿足要求時,可以選擇增大時鐘clk的周期,但這就降低了電路的運行速度。從而就要考慮時序優化,從前端考慮也就是兩級寄存器之間的組合邏輯延時優化,比如簡化組合邏輯,或者通過流水線設計,後面會通過實例介紹。

關於 建立保持時間的三篇文章之一 (轉載)