setup & hold , synchronous & asynchronous


這篇文章主要整理靜態時序分析(STA)的一些基本概念

1. setup time & hold time

數字電路中最重要的時序單元是觸發器,而最常用的觸發器就是 DFF

對於任何一個 DFF, 都有兩個重要的參數: setup time 和 hold time

這兩個參數是相對於時鍾信號上升沿(或者下降沿)來定義的:

setup time 是指:在 CLK 端的時鍾信號上升沿到來之前, D 端數據信號必須保持穩定的最短時間,這個最短時間長度記為 Tsu

hold   time 是指:在 CLK 端的時鍾信號上升沿到來之后, D 端數據信號必須繼續維持穩定的最短時間,這個時間長度記為 Th

也就是說,D 端的數據信號必須比時鍾上升沿提前至少 Tsu 時間到達D端,且在時鍾上升沿到來之后的 Th 時間長度內依然保持穩定,才能保證 DFF 將 D 端的數據信號穩定的鎖存下來。

換句話說,如果時鍾上升沿出現在時間 Tr,那么在(Tr - Tsu,Tr + Th)這個時間區間內,DFF 的 D 端數據必須保持穩定不變,否則 DFF 就無法准確地鎖存數據,導致電路出錯。

數字電路設計的重中之重就是要保證每一個 DFF 都能夠將其輸入端的數據穩定地鎖存住,也就是要保證每個 DFF 的 setup time 和 hold time 都不出現違例。

 

2. 靜態時序分析(STA)基本模型

下圖就是一個最簡單的靜態時序分析模型:

 

 在時鍾上升沿的驅動下,REG1 將其 D 端的數據鎖存下來並且輸出到 Q 端, Q 端的數據經過組合邏輯運算后傳輸到 REG2 的 D 端,然后在下一個時鍾上升沿的驅動下,REG2 將其 D 端的數據鎖存下來,這樣就完成了一次數據運算,並將運算結果保存在 REG2 中,整個過程需要在一個時鍾周期內完成。

在這個過程中,最重要的是當數據到達 REG2 的 D 端時,必須滿足 REG2 的 setup time 和 hold time,這樣才能准確地鎖存數據。

靜態時序分析的目的,就是分析 REG2 的 setup time 和 hold time 是否得到滿足,如果不滿足,就需要報出 timing violation,引導工具或者設計人員修改。

 

3. setup check & hold check

setup check 和 hold check 可以用波形圖直觀地表示出來:

setup check:

時鍾 clk1 的 launch edge 驅動 REG1 發出數據,經過組合邏輯運算后傳輸到 REG2 的 D 端,然后被 clk2 的 capture edge 鎖存到 REG2 中,如果組合邏輯很復雜,導致數據傳輸路徑太長,那么數據就可能侵入 REG2 的 setup time,導致數據無法准確鎖存,所以 setup check 就要求數據傳輸不能太慢,否則會引起 setup violation

hold check:

上面說到如果數據傳輸路徑太長,可能導致setup violation,那么如果數據傳輸路徑非常短,數據就會在很短時間內到達 REG2 的 D 端,此時 REG2 可能還正在鎖存上一個數據,也就是數據侵入了 REG2 的 hold time,導致上一個數據無法准確鎖存,所以 hold check 就要求數據傳輸不能太快,否則會引起 hold violation

總結來講,setup check 和 hold check 要求數據傳輸路徑既不能太長,又不能太短,數據必須在如下圖所示的 timing window 內到達,才能保證電路正常工作。

 

4. synchronous & asynchronous

在靜態時序分析中,有一個很重要的概念是同步和異步

如果 launch clock 與 capture clock 有固定的相位差,那就是同步時序

如果兩者沒有固定的相位差,那就是異步時序

一般情況下,STA 只檢查同步時序,不用檢查異步時序

同步時序又分為以下幾種情況:

a) launch 和 capture 的周期相同:

這種情況最簡單,launch clock 發出的數據被一個周期后的capture clock 鎖存,setup check 和 hold check 如下圖:

b) launch 和 capture 的周期不同,且 launch 周期小於 capture 周期

這是典型的快時鍾域到慢時鍾域,此時有多個上升沿發出的數據可能被同一個capture 上升沿采集到,如下圖:

那么在這種情況下,STA 工具會選擇哪些邊沿來做時序分析呢?

首先,launch 的周期是10ns,capture 的周期是 15ns,可以看出每隔30ns形成一個循環,所以只需要考慮30ns 以內的情況,后面的都是無限重復

工具會從這 30ns 內找出最苛刻的時鍾邊沿來做時序分析,對於 setup 來說,從 10ns 到 15 ns 這組的時序是最嚴格的,所以工具會選擇這組來做 setup check; 而對於 hold, 從 0ns 到 0ns 這組的時序最嚴格,所以選擇這組做 hold check,保證從 0ns 發出的數據不會干擾到capture edge 在 0ns 采集上一組數據

c) launch 和 capture 的周期不同,且 launch 的周期大於 capture 的周期

這是慢時鍾域到快時鍾域,那么此時又該選擇哪些邊沿來做時序分析?

首先,launch 的周期是 15, capture 的周期是10, 兩者的最小共同周期就是 30ns, 而在 30ns 內,對於 setup 最嚴格的時序是從 15ns 到 20ns 這一組,所以工具會選擇這組做 setup check,而對於hold, 最嚴格的依然是從 0ns 到 0ns, 所以選擇這組做 hold check

 

總之,對於 launch 和 capture 周期不同的同步時序電路,只要先找出兩者的最小共同周期,然后在這個周期內找到最苛刻的那組時鍾沿,就可以快速分析出用來做 setup check 和 hold check 的時鍾沿;比如下面這個例子,launch clock 的周期是6ns,capture 的周期是10ns,那么兩者的最小周期就是 30ns,在這 30ns 內,最嚴格的 setup 是從 18ns 到 20ns,而最嚴格的 hold 依然是從 0ns 到 0ns 。

 

對於異步時序來說,由於無法確定launch 和 capture 的最小共同周期,各個時鍾邊沿之間也沒有固定的時間差,所以是無法做時序分析的,對於跨時鍾域的異步電路,需要在設計階段就做好防護,采用多級 register、異步 FIFO 等方法確保數據的准確傳輸。

 

 

 

|------------------------------------------|

 


免責聲明!

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



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