1 FPGA設計過程中所遇到的路徑有輸入到觸發器,觸發器到觸發器,觸發器到輸出,例如以下圖所看到的:
這些路徑與輸入延時輸出延時,建立和保持時序有關。
2. 應用背景
靜態時序分析簡稱STA,它是一種窮盡的分析方法。它依照同步電路設計的要求。依據電路網表的拓撲結構,計算並檢查電路中每個DFF(觸發器)的建立和保持時間以及其它基於路徑的時延要求是否滿足。
STA作為FPGA設計的主要驗證手段之中的一個,不須要設計者編寫測試向量,由軟件自己主動完畢分析,驗證時間大大縮短,測試覆蓋率可達100%。
靜態時序分析的前提就是設計者先提出要求,然后時序分析工具才會依據特定的時序模型進行分析,給出正確是時序報告。
進行靜態時序分析。主要目的就是為了提高系統工作主頻以及添加系統的穩定性。
對非常多數字電路設計來說,提高工作頻率非常重要,由於高工作頻率意味着高處理能力。通過附加約束能夠控制邏輯的綜合、映射、布局和布線,以減小邏輯和布線延時。從而提高工作頻率。
3. 理論分析
3.1 靜態時序分析的理論基礎知識
在進行正確的時序分析前。我們必須具備主要的靜態時序的基本知識點,不然看着編譯器給出的時序分析報告宛如天書。如圖3.1所看到的,為libero軟件給出的寄存器到寄存器模型的時序分析報告的截取。接下來我們會弄清楚每一個欄目的數據變量的含義。以及計算方法。
圖3.1 libero靜態時序分析報告
3.1.1 固定參數launch edge、latch edge、Tsu、Th、Tco概念
1. launch edge
時序分析起點(launch edge):第一級寄存器數據變化的時鍾邊沿,也是靜態時序分析的起點。
2. latch edge
時序分析終點(latch edge):數據鎖存的時鍾邊沿,也是靜態時序分析的終點。
3. Clock Setup Time (Tsu)
建立時間(Tsu):是指在時鍾沿到來之前數據從不穩定到穩定所需的時間,假設建立的時間不滿足要求那么數據將不能在這個時鍾上升沿被穩定的打入觸發器。如圖3.2所看到的:
圖3.2 建立時間圖解
4. Clock Hold Time (Th)
保持時間(Th):是指數據穩定后保持的時間。假設保持時間不滿足要求那么數據相同也不能被穩定的打入觸發器。保持時間示意圖如圖3.3所看到的:
圖3.3 保持時間圖解
5. Clock-to-Output Delay(tco)
數據輸出延時(Tco):這個時間指的是當時鍾有效沿變化后,數據從輸入端到輸出端的最小時間間隔。
3.1.2 Clock skew
時鍾偏斜(clock skew):是指一個時鍾源到達兩個不同寄存器時鍾端的時間偏移。如圖3.4所看到的:
圖3.4 時鍾偏斜
時鍾偏斜計算公式例如以下:
Tskew = Tclk2 - Tclk1 (公式3-1)
3.1.3 Data Arrival Time
數據到達時間(Data Arrival Time):輸入數據在有效時鍾沿后到達所須要的時間。
主要分為三部分:時鍾到達寄存器時間(Tclk1),寄存器輸出延時(Tco)和傳輸數據延時(Tdata),如圖3.5所看到的
圖3.5 數據到達時間
數據到達時間計算公式例如以下:
Data Arrival Time = Launch edge + Tclk1 +Tco + Tdata (公式3-2)
3.1.4 Clock Arrival Time
時鍾到達時間(Clock Arrival Time):時鍾從latch邊沿到達鎖存寄存器時鍾輸入端所消耗的時間為時鍾到達時間,如圖3.6所看到的
圖3.6 時鍾到達時間
時鍾到達時間計算公式例如以下:
Clock Arrival Time = Lacth edge + Tclk2 (公式3-3)
3.1.5 Data Required Time(setup/hold)
數據需求時間(Data Required Time):在時鍾鎖存的建立時間和保持時間之間數據必須穩定,從源時鍾起點達到這樣的穩定狀態須要的時間即為數據需求時間。如圖3.7所看到的:
圖3.7 數據需求時間
(建立)數據需求時間計算公式例如以下:
Data Required Time = Clock Arrival Time - Tsu (公式3-4)
(保持)數據需求時間計算公式例如以下:
Data Required Time = Clock Arrival Time + Th (公式3-5)
3.1.6 Setup slack
建立時間余量(setup slack):當數據需求時間大於數據到達時間時,就說時間有余量,Slack是表示設計是否滿足時序的一個稱謂。
圖3.8 建立時間余量
如圖3.8所看到的,建立時間余量的計算公式例如以下:
Setup slack = Data Required Time - Data Arrival Time (公式3-6)
由公式可知。正的slack表示數據需求時間大於數據到達時間,滿足時序(時序的余量)。負的slack表示數據需求時間小於數據到達時間,不滿足時序(時序的欠缺量)。
3.1.7 時鍾最小周期
時鍾最小周期:系統時鍾能執行的最高頻率。
1. 當數據需求時間大於數據到達時間時,時鍾具有余量;
2. 當數據需求時間小於數據到達時間時,不滿足時序要求,寄存器經歷亞穩態或者不能正確獲得數據。
3. 當數據需求時間等於數據到達時間時。這是最小時鍾執行頻率。剛好滿足時序。
從以上三點能夠得出最小時鍾周期為數據到達時間等於數據需求時間,的運算公式例如以下:
Data Required Time = Data Arrival Time (公式3-7)
由上式推出例如以下公式:
Tmin + Latch edge + Tclk2 - Tsu = Launch edge + Tclk1 + Tco + Tdata
終於推出最小時鍾周期為:
Tmin = Tco + Tdata + Tsu - Tskew (公式3-8)
4. 應用分析
4.1 設置時鍾主頻約束
全部的靜態時序分析都是在有約束的情況下編譯器才給出分析報告,所以進行時序分析的第一步就是設置約束。
Libero軟件設置時鍾約束的途徑三種,單時鍾約束,多時鍾約束和在Designer里面進行約束。
4.1.1 單時鍾約束
有時我們系統全部模塊都採用同一個時鍾,這樣的方式最為簡單,直接在Synplify主界面上有個設置時鍾約束的。如圖4.1中紅框所看到的:
圖4.1 單時鍾設置
設置完畢后,編譯。通過Synplify時鍾報告看初步時鍾執行頻率是否能達到要求,時鍾報告如圖4.2所看到的,設定100Mhz,能執行102.7Mhz。滿足時序。
圖4.2 時序報告
4.2 多時鍾約束
當系統內部模塊採用了多個時鍾時。那就須要進行多時鍾約束了。
首先須要打開設置界面。在Synplify中選擇:File->New->Constraint File建立SDC文件,選擇時鍾約束如圖4.3所看到的:
圖4.3 多時鍾約束
對時鍾進行例如以下約束后保存SDC文件,約束如圖4.4所看到的
圖4.4 多時鍾約束完畢
4.3 Designer SmartTime時鍾約束
時鍾約束除了在Synplify中能夠約束外。還能夠在Designer SmartTime中設置時鍾約束,打開Designer Constraint,選擇Clock進行針對每一個使用時鍾的設置,如圖4.5所看到的:
圖4.5 Designer時序約束
4.4 時序報告分析
4.4.1 Synplify時序報告
當約束了時序后,須要觀察時序報告,看時鍾是否能達到我們須要的時鍾,首先觀察Synplify綜合報告。以多時鍾約束為樣例,從Synplify得到的時序報告如圖4.6所看到的:
圖4.6 多時鍾約束時序報告
由上圖可知時序都滿足約束,未出現違規。能夠在以下的報告中查看最差路徑,如圖4.7所看到的是clk2的最差路徑。
圖4.7 最差路徑
4.4.2 Designer SmartTime時序分析報告
當設計經過Synplify綜合給出網表文件后,還須要Designer進行布局布線,通過布局布線優化后的時序會有變化,因此,還須要分析布局布線后的時序,打開Designer->Timing Analyzer查閱總體時序分析報告如圖4.8所看到的:
圖4.8 布局布線后時序報告
由Synplify綜合后的報告和Designer進行布局布線后的報告能夠看出。布局布線后優化了一些時序。特別是clk2時鍾,通過布局布線后優化到了184Mhz,全然滿足時序。
4.4.3 具體時序報告圖
通過Synplify綜合后的和Designer進行布局布線都僅僅是看到了一個大體的時序報告。當我們須要分析時序時候必須觀察細致的時序報告,在SmartTime中提供這樣的報告功能,以clk2分析為例,在Timing Analyzer找到例如以下區域。
圖4.9 時序報告選擇
如圖4.9所看到的,選擇寄存器到寄存器進行分析時鍾主頻。
圖4.10 寄存器到寄存器分析
如圖4.10所看到的。時序報告中給出了數據延時。時序余量,數據到達時間,數據需求時間。數據建立時間,以及最小周期和時鍾偏斜等信息,有了上一節的時序分析基礎知識,我們全然能看懂這些數據代表的意義。這樣對我們時序分析就知己知彼,進一步雙擊當中一條路徑,還會給出這條路徑的硬件電路圖,如圖4.11所看到的。有了這些具體的時序報告。對設計進行調整更加清晰。
圖4.11 硬件路徑
1.1 概述
在快速系統中FPGA時序約束不止包含內部時鍾約束,還應包含完整的IO時序約束和時序例外約束才干實現PCB板級的時序收斂。因此。FPGA時序約束中IO口時序約束也是一個重點。
僅僅有約束正確才干在快速情況下保證FPGA和外部器件通信正確。
1.2 FPGA總體概念
因為IO口時序約束分析是針對於電路板整個系統進行時序分析,所以FPGA須要作為一個總體分析,當中包含FPGA的建立時間、保持時間以及傳輸延時。傳統的建立時間、保持時間以及傳輸延時都是針對寄存器形式的分析。
可是針對整個系統FPGA的建立時間保持時間能夠簡化。
圖1.1 FPGA總體時序圖
如圖1.1所看到的,為分解的FPGA內部寄存器的性能參數:
(1) Tdin為從FPGA的IO口到FPGA內部寄存器輸入端的延時;
(2) Tclk為從FPGA的IO口到FPGA內部寄存器時鍾端的延時;
(3) Tus/Th為FPGA內部寄存器的建立時間和保持時間;
(4) Tco為FPGA內部寄存器傳輸時間;
(5) Tout為從FPGA寄存器輸出到IO口輸出的延時。
對於整個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系統參數
1.3 輸入最大最小延時
外部器件發送數據到FPGA系統模型如圖1.3所看到的。
對FPGA的IO口進行輸入最大最小延時約束是為了讓FPGA設計工具可以盡可能的優化從輸入port到第一級寄存器之間的路徑延遲,使其可以保證系統時鍾可靠的採到從外部芯片到FPGA的信號。
圖1.3 FPGA數據輸入模型
輸入延時即為從外部器件發出數據到FPGA輸入port的延時時間。
當中包含時鍾源到FPGA延時和到外部器件延時之差、經過外部器件的數據發送Tco。再加上PCB板上的走線延時。如圖1.4所看到的,為外部器件和FPGA接口時序。
圖1.4 外部器件和FPGA接口時序
1. 最大輸入延時
最大輸入延時(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)
2. 最小輸入延時
最小輸入延時(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板到達FPGAport的最大值和最小值Tpcb,PCB延時經驗值為600mil/ns。1mm = 39.37mil;
(2) 外部器件接收到時鍾信號后輸出數據延時的最大值和最小值Tco。
(3) 時鍾源到達外部器件的最大、最小時鍾偏斜Tclk1;
(4) 時鍾源到達FPGA的最大、最小時鍾偏斜Tclk2;
當外部器件時鍾為FPGA提供的時候。Tclk1和Tclk2即合成Tshew,如圖1.5所看到的:
圖1.5 FPGA輸出時鍾模型
1.4 輸出最大最小延時
FPGA輸出數據給外部器件模型如圖1.6所看到的。對FPGA的IO口進行輸出最大最小延時約束是為了讓FPGA設計工具可以盡可能的優化從第一級寄存器到輸出port之間的路徑延遲。使其可以保證讓外部器件能准確的採集到FPGA的輸出數據。
圖1.6 FPGA輸出延時模型
輸出延時即為從FPGA輸出數據后到達外部器件的延時時間。
當中包含時鍾源到FPGA延時和到外部器件延時之差、PCB板上的走線延時以及外部器件的數據建立和保持時間。
如所看到的,為FPGA和外部器件接口時序圖。
圖1.7 FPGA輸出延時
1. 最大輸出延時
由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最大值為多少。依據這個值做出正確的綜合結果。
2. 輸出最小延時
由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板到達外部器件輸入port的最大值和最小值Tpcb,PCB延時經驗值為600mil/ns,1mm = 39.37mil。
(2) 時鍾源到達外部器件的最大、最小時鍾偏斜Tclk2;
(3) 時鍾源到達FPGA的最大、最小時鍾偏斜Tclk1;
(4) 外部器件的建立時間Tsu和保持時間Th;
當外部器件時鍾為FPGA提供的時候,Tclk1和Tclk2即合成Tshew。如圖1.8所看到的:
圖1.8 FPGA提供時鍾模型
1.5 使用范圍
通過作者使用總結情況,IO口時序約束主要使用在下面情況:
1. 數據交換頻率較高
因為IO時序約束一般計算值都是在幾納秒。當FPGA和外部數據交換頻率較低,如FPGA操作640*480的TFT液晶進行刷屏,傳輸數據頻率只24Mhz,一個數據時鍾都有41.666ns,全然不用約束都能滿足時序要求。
可是當操作SDRAM執行到120M時候,因為一個數據變換周期才8ns。因此IO口的少量延時都會影響到SDRAM數據。因此這樣的情況下須要對輸入輸出進行完整的IO口時序約束。而且分析正確,才干消除傳輸數據不穩定過的情況。
2. 代碼已經比較優化
當數據交換頻率較高。可是時序約束還是不滿足時序要求的時候。我們都須要對代碼進行分析,好的時序都是設計出來的,不是約束出來的。如程序清單 1.1所看到的。首先hcount_r 和vcount_r 都為10位計數器,這種代碼TFT的三色輸出的port就會有非常大的延時。由於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;
1.6 總結
本文檔主要是對FPGA的IO口時序約束進行對應的分析,並未做實際的使用分析,在興許文檔中將會結合軟件,以及實際案例對IO口時序約束進行具體的使用介紹。最后附上一個Altera官方的IO時序約束分析樣例。如圖1.9所看到的。
圖1.9 Altera官方例程