1. 程式人生 > >【轉】setup time和hold time的周期問題(slack)

【轉】setup time和hold time的周期問題(slack)

logic 默認 概念理解 CI report -s 不同的 都是 capture

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

轉至: https://www.cnblogs.com/kylechiang/p/4773196.html

【轉】setup time和hold time的周期問題(slack)