setup time和hold time的周期問題


為什么計算setup timeslack時需要考慮加周期,hold time時不需要?

總結一:

因為計算setup time時,由於存在數據傳輸data delay,Launch edge與Capture edge並不對應時鍾信號source clock的同一個時鍾沿,因此需要考慮加周期。單時鍾周期檢查的時候工具默認capture edge-launch edge=1個周期。

Hold time時由於二者對應的是同一個時鍾沿,所以不考慮周期。

如圖所示:REG1.CLK的第一個時鍾上升沿對應launch edge,REG2.CLK的第二個時鍾上升沿對應capture  edge。二者分別對應時鍾源source clock CLK的第一個上升沿和第二個上升沿。

                      

 

總結二:

時鍾源CLK經過network latency后,第一個上升沿到達REG1.CLK端,並觸發REG.1數據輸入端REG.1.D數據輸入。此時CLK第一個上升沿同時發送往REG2.CLK,它所需要的時間相比data latency非常之短,因而此時檢查setup time對此次數據傳輸沒有意義,增加周期后,才有意義。

Hold time時,第一波數據穩定輸入REG2.D與第二波數據傳輸至REG2.D對應REG2.CLK同一個時鍾信號,因而不用加周期計算。

 

對於多周期:

多時鍾周期或者多周期路徑檢查的時候,如果setup設置成N,那么hold需要設置成N-1;即是說
Thus, in most designs, a multicycle setup specified as N (cycles) should be accompanied by a multicycle hold constraint specified as N-1 (cycles).

 

解釋有兩種,本質都是一樣的

  說法一: hold的capature edge is prior to setup capature edge,This imposes a restriction that data can only change in the one cycle before the setup capture edge as the figure shows. Thus the data path must have a min delay of at least two clock cycles tomeet this requirement. Here is such a path report.
   說法二:hold 是對前后兩個flip flop在相同時鍾沿的檢查.設了n-1就是返回n-1個周期做hold的檢查,滿足了兩個flip flop在同一個時鍾沿。如果沒有-hold默認是檢查n前一個有效時鍾沿,如果n>=2,hold的檢查就不是在同一個時鍾效沿,對hold的要求就要多n-1個周期,那樣太苛刻了,一般時序無法收斂。

 

Skew的大小對setuphold的影響是什么?

根據原理可以修改下slack的計算方式得:

Setup: slack=(period+clock skew-setup time)-(REG1 cell delay+combinatinal logic delay)

Hold:slack=(REG1 cell delay+combinatinal logic delay)-(clock skew+hold time)

其中clock skew=Tclk2-Tclk1

因此無論對於setup還是hold時計算slack,clock skew都是越趨於0越悲觀。如果clock skew可為負值,則對setup time越小越悲觀,對hold time越大越悲觀。

 

 

我的理解

 有關setup和hold相關的計算與概念時,最大的難點在於,對於不同的模型和分析角度,它們對應的計算方式和概念理解算法和說法都不一樣,大家在討論的時候,因為角度不同,很容易造成理解偏差。其實根本概念都只是針對時鍾信號和數據信號兩部分來看,本質互通,並沒有涉及到特別難的原理或公式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM