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
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. 最大輸出延時
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. 輸出最小延時
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 總結