1.1 概述html
在高速系統中FPGA時序約束不止包括內部時鐘約束,還應包括完整的IO時序約束和時序例外約束才能實現PCB板級的時序收斂。所以,FPGA時序約束中IO口時序約束也是一個重點。只有約束正確才能在高速狀況下保證FPGA和外部器件通訊正確。工具
因爲IO口時序約束分析是針對於電路板整個系統進行時序分析,因此FPGA須要做爲一個總體分析,其中包括FPGA的創建時間、保持時間以及傳輸延時。傳統的創建時間、保持時間以及傳輸延時都是針對寄存器形式的分析。可是針對整個系統FPGA的創建時間保持時間能夠簡化。post
圖1.1 FPGA總體時序圖性能
如圖1.1所示,爲分解的FPGA內部寄存器的性能參數:優化
(1) Tdin爲從FPGA的IO口到FPGA內部寄存器輸入端的延時;spa
(2) Tclk爲從FPGA的IO口到FPGA內部寄存器時鐘端的延時;設計
(3) Tus/Th爲FPGA內部寄存器的創建時間和保持時間;code
(4) Tco爲FPGA內部寄存器傳輸時間;htm
(5) Tout爲從FPGA寄存器輸出到IO口輸出的延時;blog
對於整個FPGA系統分析,能夠從新定義這些參數:FPGA創建時間能夠定義爲:
(1) FPGA創建時間:FTsu = Tdin + Tsu – Tclk;
(2) FPGA保持時間:FTh = Th + Tclk;
(3) FPGA數據傳輸時間:FTco = Tclk + Tco + Tout;
由上分析當FPGA成爲一個系統後便可進行IO時序分析了。FPGA模型變爲如圖1.2所示。
圖1.2 FPGA系統參數
外部器件發送數據到FPGA系統模型如圖1.3所示。對FPGA的IO口進行輸入最大最小延時約束是爲了讓FPGA設計工具可以儘量的優化從輸入端口到第一級寄存器之間的路徑延遲,使其可以保證系統時鐘可靠的採到從外部芯片到FPGA的信號。
圖1.3 FPGA數據輸入模型
輸入延時即爲從外部器件發出數據到FPGA輸入端口的延時時間。其中包括時鐘源到FPGA延時和到外部器件延時之差、通過外部器件的數據發送Tco,再加上PCB板上的走線延時。如圖1.4所示,爲外部器件和FPGA接口時序。
圖1.4 外部器件和FPGA接口時序
最大輸入延時(input delay max)爲當從數據發送時鐘沿(lanuch edge)通過最大外部器件時鐘偏斜(Tclk1),最大的器件數據輸出延時(Tco),再加上最大的PCB走線延時(Tpcb),減去最小的FPGA時鐘偏移(FTsu)的狀況下還能保證時序知足的延時。這樣才能保證FPGA的創建時間,準確採集到本次數據值,即爲setup slack必須爲正,如圖1.1的所示,計算公式以下式所示:
Setup slack =(Tclk + Tclk2(min))–(Tclk1(max) +Tco(max) +Tpcb(max) +FTsu)≥0
推出以下公式:
Tclk1(max) + Tco(max) + Tpcb(max) –Tclk2(min) ≤ Tclk + FTsu
由Altera官方數據手冊得知:
input delay max = Board Delay (max) – Board clock skew (min) + Tco(max)
結合本系統參數公式爲:
input delay max = Tpcb(max) – (Tclk2(min)–Tclk1(max)) + Tco(max)
最小輸入延時(input delay min)爲當從數據發送時鐘沿(lanuch edge)通過最小外部器件時鐘偏斜(Tclk1),最小器件數據輸出延時(Tco),再加上最小PCB走線延時(Tpcb),此時的時間總延時值必定要大於FPGA的最大時鐘延時和創建時間之和,這樣才能不破壞FPGA上一次數據的保持時間,即爲hold slack必須爲正,如圖1.1的所示,計算公式以下式所示:
Hold slack = (Tclk1(min) + Tco(min) + Tpcb(min))–(FTh + Tclk2(max))≥ 0
推出以下公式:
Tclk1(min) + Tco(min) + Tpcb(min) – Tclk2(max) ≥ FTh
由Altera官方數據手冊得知:
input delay max = Board Delay (min) - Board clock skew (min) + Tco(min)
結合本系統參數公式爲
input delay max = Tpcb(min) – (Tclk2(max)–Tclk1(min)) + Tco(min)
由公式4和公式8得知,進行輸入最大最小延時的計算,咱們須要估算4個值:
(1) 外部器件輸出數據經過PCB板到達FPGA端口的最大值和最小值Tpcb,PCB延時經驗值爲600mil/ns,1mm = 39.37mil;
(2) 外部器件接收到時鐘信號後輸出數據延時的最大值和最小值Tco;
(3) 時鐘源到達外部器件的最大、最小時鐘偏斜Tclk1;
(4) 時鐘源到達FPGA的最大、最小時鐘偏斜Tclk2;
當外部器件時鐘爲FPGA提供的時候,Tclk1和Tclk2即合成Tshew,如圖1.5所示:
圖1.5 FPGA輸出時鐘模型
FPGA輸出數據給外部器件模型如圖1.6所示。對FPGA的IO口進行輸出最大最小延時約束是爲了讓FPGA設計工具可以儘量的優化從第一級寄存器到輸出端口之間的路徑延遲,使其可以保證讓外部器件能準確的採集到FPGA的輸出數據。
圖1.6 FPGA輸出延時模型
輸出延時即爲從FPGA輸出數據後到達外部器件的延時時間。其中包括時鐘源到FPGA延時和到外部器件延時之差、PCB板上的走線延時以及外部器件的數據創建和保持時間。如所示,爲FPGA和外部器件接口時序圖。
圖1.7 FPGA輸出延時
由Altera官方數據手冊得知:
Output delay max = Board Delay (max) – Board clock skew (min) + Tsu
由公式得知,最大輸出延時(output delay max)爲當從FPGA數據發出後通過最大的PCB延時、最小的FPGA和器件時鐘偏斜,再加上外部器件的創建時間。約束最大輸出延時,是爲了約束IO口輸出,從而使外部器件的數據創建時間,即爲setup slack必須爲正,計算公式以下式所示:
Setup slack =(Tclk + Tclk2(min))–(Tclk1(max) +FTco(max) +Tpcb(max) +Tsu)≥0
推導出以下公式:
FTco(max) + Tpcb(max) –(Tclk2(min) – Tclk1(max))+Tsu ≤Tclk
再次推導,獲得以下公式:
FTco(max) + Output delay max ≤Tclk
因而可知,約束輸出最大延時,即爲通知編譯器FPGA的FTco最大值爲多少,根據這個值作出正確的綜合結果。
由Altera官方數據手冊得知:
Output delay min = Board Delay (min) – Board clock skew (max) –Th
由公式得知,最小輸出延時(output delay min)爲當從FPGA數據發出後通過最小的PCB延時、最大的FPGA和器件時鐘偏斜,再減去外部器件的創建時間。約束最小輸出延時,是爲了約束IO口輸出,從而使IO口輸出有個最小延時值,防止輸出過快,破壞了外部器件上一個時鐘的數據保持時間,致使hlod slack爲負值,不能正確的鎖存到數據,最小輸出延時的推導計算公式以下式所示:
Hold slack = (Tclk1(min) + FTco(min) + Tpcb(min))–(Th + Tclk2(max))≥ 0
推導出以下公式:
FTco(min) + Tpcb(min) – (Tclk2(max) – Tclk1(min))– Th ≥ 0
再次推導,得出以下公式:
FTco(min) + Output delay min ≥ 0
由公式得知,約束輸出最大延時,即爲通知編譯器FPGA的FTco最小值爲多少,根據這個值作出正確的綜合結果。
由公式10和公式14得知,進行輸出最大最小延時的計算,咱們須要估算4個值:
(1) FPGA輸出數據經過PCB板到達外部器件輸入端口的最大值和最小值Tpcb,PCB延時經驗值爲600mil/ns,1mm = 39.37mil;
(2) 時鐘源到達外部器件的最大、最小時鐘偏斜Tclk2;
(3) 時鐘源到達FPGA的最大、最小時鐘偏斜Tclk1;
(4) 外部器件的創建時間Tsu和保持時間Th;
當外部器件時鐘爲FPGA提供的時候,Tclk1和Tclk2即合成Tshew,如圖1.8所示:
圖1.8 FPGA提供時鐘模型
經過做者使用總結狀況,IO口時序約束主要使用在如下狀況:
因爲IO時序約束通常計算值都是在幾納秒,當FPGA和外部數據交換頻率較低,如FPGA操做640*480的TFT液晶進行刷屏,數據傳輸頻率僅僅24Mhz,一個數據時鐘都有41.666ns,徹底不用約束都能知足時序要求。可是當操做SDRAM運行到120M時候,因爲一個數據變換週期才8ns,所以IO口的少許延時都會影響到SDRAM數據,所以這種狀況下須要對輸入輸出進行完整的IO口時序約束,而且分析正確,才能消除數據傳輸不穩定過的狀況。
當數據交換頻率較高,可是時序約束仍是不知足時序要求的時候,咱們都須要對代碼進行分析,好的時序都是設計出來的,不是約束出來的。如程序清單 1.1所示,首先hcount_r 和vcount_r 都爲10位計數器,這樣的代碼TFT的三色輸出的端口就會有很大的延時,由於dat_act的膠合邏輯太多,輸出路徑太長致使。這種狀況下應該不是首先作時序約束,應該修改代碼,儘可能作到寄存器直接輸出。只有當代碼比較優化的狀況,再作時序約束這樣才能獲得較好的結果。
程序清單 1.1 示例程序
1 assign dat_act = ((hcount_r >= hdat_begin) && (hcount_r < hdat_end))
2 && ((vcount_r >= vdat_begin) && (vcount_r < vdat_end));
3 assign tft_r = (dat_act) ? {rgb16_dat[15:11], 3'b111} : 8'h00;
4 assign tft_g = (dat_act) ? {rgb16_dat[10:5], 3'b111} : 8'h00;
5 assign tft_b = (dat_act) ? {rgb16_dat[4:0], 3'b111} : 8'h00;
本文檔主要是對FPGA的IO口時序約束進行相應的分析,並未作實際的使用分析,在後續文檔中將會結合軟件,以及實際案例對IO口時序約束進行詳細的使用介紹。最後附上一個Altera官方的IO時序約束分析例子,如圖1.9所示。
圖1.9 Altera官方例程
http://www.360doc.com/content/12/0925/16/8729276_238113677.shtml