FPGA 靜態時序分析 STA(概念篇)

目錄

1、背景知識介紹:

1.1 啓動沿(launch)和鎖存沿(latch):

1.2 建立(setup)和保持(hold)時間​

1.3 數據到達時間(DAT:Data Arrival Time)

1.4 數據建立需要時間(DRTsu:Data Require Time (Setup))

1.5 數據保持需要時間(DRTh:Data Require Time (Hold))

1.6 建立時間裕量(Setup Slack)

1.7 保持時間裕量(hold slack)

2、小結


 

STA(Static Timing Analysis,即靜態時序分析)在實際FPGA設計過程中的重要性是不言而喻的,其作用是:

1. 幫助分析和驗證一個FPGA設計的時序是否符合要求;

2. 指導fitter(佈線綜合器)佈局佈線出符合要求的結果;

簡單地說,靜態時序分析(STA)告訴我們電路的實際表現如何;

時序路徑是兩個節點的連接,如一個寄存器的輸出到另一個寄存器的輸入。理解時序路徑的類型對定時分析和優化是非常重要的。TimeQuest通常使用如下幾種類型的時序路徑:

Edge paths(邊緣路徑):
從端口(port)到引腳(pin),引腳到引腳,以及引腳到端口之間的連接。

Clock paths(時鐘路徑):
從器件端口或內部產生的時鐘引腳到一個寄存器的時鐘引腳之間的連接。

Data paths(數據路徑):
從一個端口或一個時序電路的數據輸出引腳,到另一端口或者另一個時序電路的數據輸入引腳之間的連接。

Asynchronous paths(異步路徑):
從端口到另一個時序電路的異步引腳之間的連接,如異步置位或異步清除。

 

1、背景知識介紹:

1.1 啓動沿(launch)和鎖存沿(latch):

啓動沿(Launch Edge Time):數據被launch的時鐘邊沿;也就是說,每一個啓動沿,一般都會產生一個新的數據!

鎖存沿(Latch Edge Time):數據被latch的時鐘邊沿;也就是說,每一個鎖存沿,都會有一個新的數據被保存!

對於如上圖所示的級聯的寄存器電路而言(忽略上一級觸發器輸出到下一級觸發器輸入之間的邏輯關係),一般藍色的上升沿作爲第一個觸發器的啓動沿,而紅色的上升沿作爲第二個觸發器的鎖存沿(一般都是緊跟着啓動沿後的有效邊沿)。所以說:藍色的啓動沿之後由REG1輸出有效數據,並在紅色的邊沿被鎖存進REG2並輸出到下級。

 

1.2 建立(setup)和保持(hold)時間

上述的鎖存沿會將數據保存下來,但是必須要滿足一定的條件:

建立時間 Tsu:在時鐘有效沿之前,數據必須保持穩定的最小時間;

保持時間 Th:在時鐘有效沿之後,數據必須保持穩定的最小時間;

這就相當於一個窗口時間,在有效邊沿的窗口時間內,數據必須保持穩定;這裏的時鐘信號時序和數據信號時序,都是寄存器實際感受到的時序;

 

1.3 數據到達時間(DAT:Data Arrival Time)

所有的信號在FPGA內部傳播都會有延時,包括時鐘信號、數據信號(實際上不該如此可以的區分這兩種信號,在一定條件下,這兩個信號可能可以相互轉換,這個是題外話了),也就是說,從信號的發出點到信號的接收點,會存在一個延時,這個延時可能是因爲FPGA內部空間分佈所致,也有可能是因爲組合邏輯造成,這裏不再深究;

數據到達時間包括以下4部分時間之和:

1、啓動沿時間(Launch Edge Time)

2、從時鐘源到源寄存器的時鐘pin的延遲(Source Clock Delay)

3、時鐘源寄存器的micro clock-to-output延遲(utCO,這個時間指的是當時鐘有效沿變化後,將數據推倒同步時序路徑的輸出端的最小時間間隔。)

4、從源寄存器的數據輸出Q到目的寄存器的數據輸入D的延遲(Register-to-Register Delay)。

Data Arrival Time = Launch Edge + Source Clock Delay + μtCO + Register-to-Register Delay

例如:

正如上圖所示,在計算數據到達時間時,一般都會存在3個延時:

  • T_clk1(即從時鐘源到源寄存器的時鐘pin的延遲,Source Clock Delay)
    時鐘信號從起點(一般是PLL輸出或者外部時鐘輸入引腳)到達啓動寄存器(或說啓動觸發器)的相應clk端口所耗的時間;
    假如CLK是由PLL發出的時鐘信號(稱之爲源時鐘),這個信號經過FPGA內部的“連線”最終來到了REG1(啓動觸發器)的clk端,所以此時在REG1的clk端口處也會有周期性的時鐘信號REG1.CLK,如圖所示;可以看到,此時的CLK(源時鐘)和REG1.CLK實際上有個時間差(相位差),這個時間差就是Tclk1;
  • T_CO
    啓動寄存器內部延時,是寄存器REG1在接收到有效的上升沿後,到數據真正從從REG1的Q輸出之間延時,這是內部寄存器的固有屬性,一般取最小值,即文檔中的μtCO;請注意:上述所謂的有效的上升沿,就是REG1.CLK,而不是CLK;所以實際的有效數據輸出的時序如上圖的REG1.Q;
  • T_data(即Register-to-Register Delay)
    數據從上級寄存器輸出Q(經過所有其他組合邏輯以及FPGA內部走線)到下級寄存器的數據輸入D之間的延時;如圖所示,數據從從REG1的Q流向了REG2的D,所以REG2.D實際接收到的數據時序是REG2.D,注意這裏沒有涉及到REG2的鎖存;

假如將上圖中的launch Edge作爲時間0點,將一些列的延時累加,所得結果稱之爲數據到達時間,DAT:

數據到達時間 DAT = 啓動沿 + T_clk1 + T_CO + T_data

 

1.4 數據建立需要時間(DRTsu:Data Require Time (Setup))

包括以下3部分時間:

1、鎖存沿時間(Latch Edge)

2、時鐘端口到目的寄存器的時鐘引腳之間的所有延遲(這包括時鐘端口所有緩衝的延遲,Destination Clock Delay)

3、目標寄存器的最小建立時間(μt_SU,這是FPGA內部寄存器的固有屬性)。

1. Tclk2,不同於上述的Tclk1,這個延時是時鐘從起點(一般是PLL或者時鐘輸入引腳)到鎖存觸發器之間的延時;如上圖所示,REG2實際感受到的時鐘來自於其本身的clk引腳,而不是源時鐘CLK,他們之間存在一個延時,即Tclk2;所以REG2實際感受到的時鐘,實際上是上圖的REG2.CLK;

2. Tsu:上面分析過了,每一個數據被鎖存都要滿足建立時間和保持時間,Tsu就是建立時間,也就是在REG2實際感受到Latch Edge時,數據如果需要被正確鎖存,就必須提前Tsu的時間來到REG2的D;

綜合時鐘走線延時Tclk2以及Tsu,我們得到了數據建立時間DRTsu:

DRTsu=鎖存沿+Tclk2-Tsu。

也就是說在DRTsu時刻之前,數據必須已經有效且穩定

 

1.5 數據保持需要時間(DRTh:Data Require Time (Hold))

DRTh=鎖存沿+Tclk2+Th;

也就是說,數據在DRTh時間之前必須保持住不變

 

1.6 建立時間裕量(Setup Slack)

裕量是表示是否滿足設計需求的時序餘量。建立時間裕量指的是數據到達時間和數據建立時間之間的關係,裕量爲正,表示餘量滿足設計需求。爲負,則表示餘量不滿足設計需求。

如上圖所示:

1、在0時刻(Launch edge),源時鐘CLK說,“啊,我要產生一個新的數據”,但是這個命令(啓動沿)並沒有馬上傳達到REG1,而是有個延時Tclk1。

2、在Tclk1時刻,REG1終於聽到了(感受到了有效的時鐘上升沿,就是啓動沿)老大的命令,就開始準備,他憋了一會兒,又延時了Tco,終於產生了數據(REG1.Q上有了valid data);

3、這個有效數據也是慢吞吞的來到了他的終點,又浪費了Tdata。最終在Tclk1+Tco+Tdata時間後,REG2得到了這個數據;

4、別以爲REG2得到這個數據就完事了,REG2也是個傲嬌的娃,怎麼個傲嬌法,下面繼續分析;

5、老大CLK在0時刻發送了啓動沿之後,休息了一個時鐘週期,在Latch edge時突然想起來,剛纔讓REG1發出的數據,REG2要接受啊,不然就浪費了,於是乎他又對REG2下達了命令,新數據要來了,準備好接受!但是這個命令也不是馬上就到了REG2的耳中,而是經過了Tclk2的時間。

6、等到REG2接收到命令後(實際感受到了有效的Latch Edge),他就看看自己家門口沒有數據已經來了(檢查REG2.D是否有數據),同時要看看這個數據是不是符合他的胃口的(滿足鎖存的條件),他要求數據必須在他接收到老大命令的時候已經等了Tsu時間(數據建立時間);

7、由要求這個數據在他家門口不能早退,必要再保持Th時間(數據保持),如果都滿足了,REG2就開心的接受了這個數據,反之,他就會覺得,REG1準備的數據太懶惰了(沒有提前Tsu時間到達),又或者性子太急(沒有多逗留th),一概不收!

所以這裏涉及到兩個要求,第一個就是建立時間裕量:

Setup Slack =(鎖存沿+T_clk2-T_su) – ( T_clk1+T_co+T_data)

即:

Setup Slack = DRTsu – DAT。

如果Clock Setup Slack爲正,則說明數據在規定的時間內達到了目標。反之,則認爲數據並沒有在規定的時間達到目標,此時REG2鎖存的數據很有可能是亞穩態;

 

1.7 保持時間裕量(hold slack)

在分析時鐘保持裕量的時候要注意到,之前在分析時鐘建立裕量時的鎖存沿(latch edge)恰好又是下一個數據的啓動沿(launch edge),所以要求新的數據到達REG2之前,REG2要有足夠時間將上一個數據Data_Valid正確鎖存,這個時間即爲時鐘保持時間裕量:

Clock Hold Slack = (T_clk1+T_co+T_data)-(鎖存沿+T_clk2+T_h)

也就是:

Hold Slack = DAT – DRTh

如果爲正,則認爲數據在被鎖存的時候有足夠多的穩定時間,是有效的。反之則認爲數據有誤或者數據可能是亞穩態;

 

2、小結

理解了上面的7個概念,就明白了:如果時鐘頻率過快或者數據延時太大,都會導致錯誤的時序。在FPGA內部寄存器到內部寄存器之間,所有的延時都是建立在時序模型上的,如slow和fast,這些模型從兩個極端工作情況來分析FPGA能否正常工作;只要滿足這兩個情況,則FPGA在其他環境下都能滿足時序!

 

參考文獻:

轉自:

https://blog.csdn.net/u012176730/article/details/54412323

https://www.cnblogs.com/rouwawa/p/7716393.html

黑金時序分析:

https://www.cnblogs.com/alinx/p/3405972.html

其他:

https://blog.csdn.net/Reborn_Lee/article/details/84990766

https://www.cnblogs.com/zfyouxi/p/5183903.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章