關於建立時間和保持時間


建立時間(Tsu:set up time)是指在時鍾沿到來之前數據從不穩定到穩定所需的時間,如果建立的時間不滿足要求那么數據將不能在這個時鍾上升沿被穩定的打入觸發器;保持時間(Th:hold time)是指數據穩定后保持的時間,如果保持時間不滿足要求那么數據同樣也不能被穩定的打入觸發器。建立與保持時間的簡單示意圖如下圖1所示。

圖1 保持時間與建立時間的示意圖

    在FPGA設計的同一個模塊中常常是包含組合邏輯與時序邏輯,為了保證在這些邏輯的接口處數據能穩定的被處理,那么對建立時間與保持時間建立清晰的概念非常重要。下面在認識了建立時間與保持時間的概念上思考如下的問題。

圖2 同步設計中的一個基本模型

    圖2為統一采用一個時鍾的同步設計中一個基本的模型。圖中Tco是觸發器的數據輸出的延時;Tdelay是組合邏輯的延時;Tsetup是觸發器的建立時間;Tpd為時鍾的延時。如果第一個觸發器D1建立時間最大為T1max,最小為T1min,組合邏輯的延時最大為T2max,最小為T2min。問第二個觸發器D2建立時間T3與保持時間T4應該滿足什么條件,或者是知道了T3與T4那么能容許的最大時鍾周期是多少。這個問題是在設計中必須考慮的問題,只有弄清了這個問題才能保證所設計的組合邏輯的延時是否滿足了要求。
    下面通過時序圖來分析:設第一個觸發器的輸入為D1,輸出為Q1,第二個觸發器的輸入為D2,輸出為Q2;
    時鍾統一在上升沿進行采樣,為了便於分析我們討論兩種情況即第一:假設時鍾的延時Tpd為零,其實這種情況在FPGA設計中是常常滿足的,由於在FPGA 設計中一般是采用統一的系統時鍾,也就是利用從全局時鍾管腳輸入的時鍾,這樣在內部時鍾的延時完全可以忽略不計。這種情況下不必考慮保持時間,因為每個數據都是保持一個時鍾節拍同時又有線路的延時,也就是都是基於CLOCK的延遲遠小於數據的延遲基礎上,所以保持時間都能滿足要求,重點是要關心建立時間,此時如果D2的建立時間滿足要求那么時序圖應該如圖3所示。
從圖中可以看出如果:
T-Tco-Tdelay>T3
即: Tdelay< T-Tco-T3
那么就滿足了建立時間的要求,其中T為時鍾的周期,這種情況下第二個觸發器就能在第二個時鍾的升沿就能穩定的采到D2,時序圖如圖3所示。

點擊看大圖

圖3 符合要求的時序圖

    如果組合邏輯的延時過大使得T-Tco-Tdelay<T3
那么將不滿足要求,第二個觸發器就在第二個時鍾的升沿將采到的是一個不定態,如圖4所示。那么電路將不能正常的工作。點擊看大圖

圖4 組合邏輯的延時過大時序不滿足要求
    從而可以推出
T-Tco-T2max>=T3
這也就是要求的D2的建立時間。
    從上面的時序圖中也可以看出,D2的建立時間與保持時間與D1的建立與保持時間是沒有關系的,而只和D2前面的組合邏輯和D1的數據傳輸延時有關,這也是一個很重要的結論。說明了延時沒有疊加效應
    第二種情況如果時鍾存在延時,這種情況下就要考慮保持時間了,同時也需要考慮建立時間。時鍾出現較大的延時多是采用了異步時鍾的設計方法,這種方法較難保證數據的同步性,所以實際的設計中很少采用。此時如果建立時間與保持時間都滿足要求那么輸出的時序如圖5所示。

點擊看大圖

圖5 時鍾存在延時但滿足時序
    從圖5中可以容易的看出對建立時間放寬了Tpd,所以D2的建立時間需滿足要求:
Tpd+T-Tco-T2max>=T3
    由於建立時間與保持時間的和是穩定的一個時鍾周期,如果時鍾有延時,同時數據的延時也較小那么建立時間必然是增大的,保持時間就會隨之減小,如果減小到不滿足D2的保持時間要求時就不能采集到正確的數據,如圖6所示。
    這時即T-(Tpd+T-Tco-T2min)<T4,就不滿足要求了,所以D2的保持時間應該為:
T-(Tpd+T-Tco-T2min)>=T4 即Tco+T2min-Tpd>=T4
    從上式也可以看出如果Tpd=0也就是時鍾的延時為0那么同樣是要求Tco+T2min>T4,但是在實際的應用中由於T2的延時也就是線路的延時遠遠大於觸發器的保持時間即T4所以不必要關系保持時間。

點擊看大圖

圖6 時鍾存在延時且保持時間不滿足要求
    綜上所述,如果不考慮時鍾的延時那么只需關心建立時間,如果考慮時鍾的延時那么更需關心保持時間。下面將要分析在FPGA設計中如何提高同步系統中的工作時鍾。

如何提高同步系統中的工作時鍾
    從上面的分析可以看出同步系統時對D2建立時間T3的要求為:
T-Tco-T2max>=T3
    所以很容易推出T>=T3+Tco+T2max,其中T3為D2的建立時間Tset,T2為組合邏輯的延時。在一個設計中T3和Tco都是由器件決定的固定值,可控的也只有T2也就時輸入端組合邏輯的延時,所以通過盡量來減小T2就可以提高系統的工作時鍾。為了達到減小T2在設計中可以用下面不同的幾種方法綜合來實現。
通過改變走線的方式來減小延時
    以altera的器件為例,我們在quartus里面的timing closure floorplan可以看到有很多條條塊塊,我們可以將條條塊塊按行和按列分,每一個條塊代表1個LAB,每個LAB里有8個或者是10個LE。它們的走線時延的關系如下:同一個LAB中(最快) < 同列或者同行 < 不同行且不同列。我們通過給綜合器加適當的約束(約束要適量,一般以加5%裕量較為合適,比如電路工作在100Mhz,則加約束加到105Mhz就可以了,過大的約束效果反而不好,且極大增加綜合時間)可以將相關的邏輯在布線時盡量布的靠近一點,從而減少走線的時延。

通過拆分組合邏輯的方法來減小延時
    由於一般同步電路都不止一級鎖存(如圖8),而要使電路穩定工作,時鍾周期必須滿足最大延時要求,縮短最長延時路徑,才可提高電路的工作頻率。如圖7所示:我們可以將較大的組合邏輯分解為較小的幾塊,中間插入觸發器,這樣可以提高電路的工作頻率。這也是所謂“流水線”(pipelining)技術的基本原理。
    對於圖8的上半部分,它時鍾頻率受制於第二個較大的組合邏輯的延時,通過適當的方法平均分配組合邏輯,可以避免在兩個觸發器之間出現過大的延時,消除速度瓶頸。

圖7 分割組合邏輯

圖8 轉移組合邏輯

那么在設計中如何拆分組合邏輯呢,更好的方法要在實踐中不斷的積累,但是一些良好的設計思想和方法也需要掌握。我們知道,目前大部分 FPGA都基於4輸入LUT的,如果一個輸出對應的判斷條件大於四輸入的話就要由多個LUT級聯才能完成,這樣就引入一級組合邏輯時延,我們要減少組合邏輯,無非就是要輸入條件盡可能的少,這樣就可以級聯的LUT更少,從而減少了組合邏輯引起的時延。


免責聲明!

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



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