只要設計到時鐘上升沿或者下降沿的采樣,,就會提到建立時間(setup TIme) 和保持時間(hold TIme) 。時鐘是FPGA設計中最重要的信號,,FPGA系統內大部分器件的動作都是在時鐘的上升沿或者下降沿進行,。無論是在輸入,輸出或是寄存器與寄存器之間,,
建立時間(Tsu:set up TIme)是指在時鐘沿到來之前數據從不穩(wěn)定到穩(wěn)定所需的時間,,如果建立的時間不滿足要求那么數據將不能在這個時鐘上升沿被穩(wěn)定的打入觸發(fā)器;保持時間(Th:hold TIme)是指數據穩(wěn)定后保持的時間,如果保持時間不滿足要求那么數據同樣也不能被穩(wěn)定的打入觸發(fā)器,。
建立時間和保持時間這兩個指標說明器件本身不是理想的(有時延等),,正是這個不理想的特性,,限制了FPGA的時鐘工作頻率。
首先我們都知道setup TIme 和holdup time是由器件決定的,,并不是說可以隨著你FPGA設計的改變而改變,。那么FPGA時鐘頻率是怎么計算的呢,在不考慮時鐘延時抖動等條件下,,一個信號從觸發(fā)器的D端到Q端的延時假設是Tcd,,從Q端出來之后會經過組合電路延時,這里注意即使沒有組合電路,,就單單經過導線也是有延時的,,這個延時稱作Tdelay,經過這個延時之后,,信號將要去下一個觸發(fā)器,,而且必須要滿足觸發(fā)器的建立時間tsetup,不然時鐘無法采樣到穩(wěn)定的數據,。
所以這三個時間加起來應該比時鐘周期要小,,否則數據無法打入下一個觸發(fā)器,那就會進入亞穩(wěn)態(tài),。Tcd+Tdelay+Tsetup
至于FPGA時鐘頻率與holdup time的關系,具體做設計的時候還是需要滿足Tcd+Tdelay+TsetupTholdup,,也就是說Tholdup 決定了最短路徑的下限,,也就是說組合邏輯是不能太大也不能太小的。這就是hold time 能起作用的地方吧,。其實一般都能滿足保持時間,,一般只要考慮都是要滿足建立時間。
建立時間與保持時間的簡單示意圖如下圖1所示,,在圖1中我們看到clk_r3的前后各有一條虛線,,前一條虛線(最左邊的虛線,左邊代表出現時間早,,與modelsim仿真時信號依次從左往右出現)到clk_r3上升沿的這段時間即為建立時間,,clk_r3上升沿到后一條虛線(最右邊的虛線)的這段時間即為保持時間。
前面對建立時間和保持時間下定義時提到過,,在這段時間內不能夠有數據的變化,,數據必須保持穩(wěn)定。而在這個波形中,,也確實沒有看到在建立時間和保持時間內,,reg3in的數據有任何的變化,因此我們可以穩(wěn)定的將reg3in的數據鎖存到reg3的輸出reg3out中,。
同樣的一些信號,,但我們發(fā)現reg3in在clk_r3的建立時間內發(fā)生了變化,這帶來的后果就是clk_r3上升沿鎖存到的reg3in數據不確定,那么隨后的reg3out值也會處于一個不確定狀態(tài),。比如第一個時鐘周期,,原本reg3in應該是穩(wěn)定的低電平,但是由于整個路徑上的延時時間(Tcd+Tdelay)過長,,導致了reg3in在clk_r3的建立時間內數據還未能穩(wěn)定下來,,在建立時間內信號出現了電平從高到低的變化,即不穩(wěn)定的狀態(tài),,那么導致的后果就是reg3out的最終輸出不是確定的狀態(tài),,很可能是忽高忽低的亞穩(wěn)態(tài),而不是原本期望的低電平,。
我們再來看看保持時間違規(guī)的情況,,這次是數據傳輸得太快了(不滿足Tcd+Tdelay>Tholdup,也就是Tcd+Tdelay時延太小),,原本應該下一個時鐘周期到達clk_r3的數據竟然在clk_r3的前一個時鐘周期的保持時間還未過去就來到了,。因此,它出現的最終危害也是后端輸出的reg3out處于不確定的狀態(tài),。