大俠好,歡迎來到FPGA技術江湖,江湖偌大,相見即是緣分。大俠可以關注FPGA技術江湖,在“闖蕩江湖”、"行俠仗義"欄里獲取其他感興趣的資源,或者一起煮酒言歡。
今天給大俠帶來FPGA STA(靜態(tài)時序分析),話不多說,上貨。
一、概述
1.1? 概述
在快速系統(tǒng)中FPGA時序約束不止包含內部時鐘約束,還應包含完整的IO時序約束和時序例外約束才能實現(xiàn)PCB板級的時序收斂。因此。FPGA時序約束中IO口時序約束也是一個重點。僅僅有約束正確才能在快速情況下保證FPGA和外部器件通信正確。
1.2? FPGA總體概念
因為IO口時序約束分析是針對于電路板整個系統(tǒng)進行時序分析,所以FPGA需要作為一個總體分析,當中包含F(xiàn)PGA的建立時間、保持時間以及傳輸延時。傳統(tǒng)的建立時間、保持時間以及傳輸延時都是針對寄存器形式的分析。針對整個系統(tǒng)FPGA的建立時間保持時間能夠簡化。下圖為FPGA總體時序圖:
如圖上圖所示,分解的FPGA內部寄存器的性能參數(shù):
(1) Tdin為從FPGA的IO口到FPGA內部寄存器輸入端的延時;
(2) Tclk為從FPGA的IO口到FPGA內部寄存器時鐘端的延時;
(3) Tus/Th為FPGA內部寄存器的建立時間和保持時間;
(4) Tco為FPGA內部寄存器傳輸時間;
(5) Tout為從FPGA寄存器輸出到IO口輸出的延時。
對于整個FPGA系統(tǒng)分析,能夠又一次定義這些參數(shù):FPGA建立時間能夠定義為:
(1) FPGA建立時間:FTsu = Tdin + Tsu – Tclk;
(2) FPGA保持時間:FTh = Th + Tclk。
(3) FPGA傳輸數(shù)據(jù)時間:FTco = Tclk + Tco + Tout;
由上分析當FPGA成為一個系統(tǒng)后就可以進行IO時序分析了。FPGA模型變?yōu)槿缦聢D所示,為FPGA系統(tǒng)參數(shù):
1.3?輸入最大最小延時
外部器件發(fā)送數(shù)據(jù)到FPGA系統(tǒng)模型如圖1.3所看到的。
對FPGA的IO口進行輸入最大最小延時約束是為了讓FPGA設計工具可以盡可能的優(yōu)化從輸入port到第一級寄存器之間的路徑延遲,使其可以保證系統(tǒng)時鐘可靠的採到從外部芯片到FPGA的信號。下圖為FPGA數(shù)據(jù)輸入模型:
輸入延時即為從外部器件發(fā)出數(shù)據(jù)到FPGA輸入port的延時時間。
當中包含時鐘源到FPGA延時和到外部器件延時之差、經過外部器件的數(shù)據(jù)發(fā)送Tco。再加上PCB板上的走線延時。如圖1.4所看到的,為外部器件和FPGA接口時序。下圖為外部器件和FPGA接口時序:
(1). 最大輸入延時
最大輸入延時(input delay max)為當從數(shù)據(jù)發(fā)送時鐘沿(lanuch edge)經過最大外部器件時鐘偏斜(Tclk1),最大的器件數(shù)據(jù)輸出延時(Tco),再加上最大的PCB走線延時(Tpcb)。減去最小的FPGA時鐘偏移(FTsu)的情況下還能保證時序滿足的延時。這樣才能保證FPGA的建立時間,準確采集到本次數(shù)據(jù)值,即為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官方數(shù)據(jù)手冊得知:
input delay max = Board Delay?(max)?– Board clock skew?(min)?+ Tco(max)
結合本系統(tǒng)參數(shù)公式為:
input delay max = Tpcb(max)?– (Tclk2(min)–Tclk1(max)) + Tco(max)
(2).?最小輸入延時
最小輸入延時(input delay min)為當從數(shù)據(jù)發(fā)送時鐘沿(lanuch edge)經過最小外部器件時鐘偏斜(Tclk1),最小器件數(shù)據(jù)輸出延時(Tco),再加上最小PCB走線延時(Tpcb),此時的時間總延時值一定要大于FPGA的最大時鐘延時和建立時間之和。這樣才能不破壞FPGA上一次數(shù)據(jù)的保持時間。即為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官方數(shù)據(jù)手冊得知:
input delay max = Board Delay?(min)?- Board clock skew?(min)?+ Tco(min)
結合本系統(tǒng)參數(shù)公式為
input delay max=Tpcb(min)?– (Tclk2(max)–Tclk1(min)) + Tco(min)
進行輸入最大最小延時的計算,我們需要估算4個值:
- 外部器件輸出數(shù)據(jù)通過PCB板到達FPGAport的最大值和最小值Tpcb,PCB延時經驗值為600mil/ns。1mm = 39.37mil;外部器件接收到時鐘信號后輸出數(shù)據(jù)延時的最大值和最小值Tco。時鐘源到達外部器件的最大、最小時鐘偏斜Tclk1;時鐘源到達FPGA的最大、最小時鐘偏斜Tclk2;
當外部器件時鐘為FPGA提供的時候。Tclk1和Tclk2即合成Tshew,如圖下圖所示,為FPGA輸出時鐘模型:
1.4? 輸出最大最小延時
FPGA輸出數(shù)據(jù)給外部器件模型如下圖所示。對FPGA的IO口進行輸出最大最小延時約束是為了讓FPGA設計工具可以盡可能的優(yōu)化從第一級寄存器到輸出port之間的路徑延遲。使其可以保證讓外部器件能準確的採集到FPGA的輸出數(shù)據(jù)。下圖為FPGA輸出延時模型:
輸出延時即為從FPGA輸出數(shù)據(jù)后到達外部器件的延時時間。
當中包含時鐘源到FPGA延時和到外部器件延時之差、PCB板上的走線延時以及外部器件的數(shù)據(jù)建立和保持時間。如圖所看到的,為FPGA和外部器件接口時序圖。下圖為FPGA輸出延時:
(1). 最大輸出延時
由Altera官方數(shù)據(jù)手冊得知:
Output delay max = Board Delay (max) – Board clock skew (min) + Tsu
由公式得知。最大輸出延時(output delay max)為當從FPGA數(shù)據(jù)發(fā)出后經過最大的PCB延時、最小的FPGA和器件時鐘偏斜,再加上外部器件的建立時間。約束最大輸出延時,是為了約束IO口輸出,從而使外部器件的數(shù)據(jù)建立時間。即為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最大值為多少。依據(jù)這個值做出正確的綜合結果。
(2).?輸出最小延時
由Altera官方數(shù)據(jù)手冊得知:
Output delay min = Board Delay (min) – Board clock skew (max) –Th
由公式得知,最小輸出延時(output delay min)為當從FPGA數(shù)據(jù)發(fā)出后經過最小的PCB延時、最大的FPGA和器件時鐘偏斜,再減去外部器件的建立時間。約束最小輸出延時,是為了約束IO口輸出。從而使IO口輸出有個最小延時值,防止輸出過快,破壞了外部器件上一個時鐘的數(shù)據(jù)保持時間。導致hlod slack為負值。不能正確的鎖存到數(shù)據(jù)。最小輸出延時的推導計算公式例如以下式所看到的:
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最小值為多少。依據(jù)這個值做出正確的綜合結果。
由公式得知,進行輸出最大最小延時的計算,我們需要估算4個值:
- FPGA輸出數(shù)據(jù)通過PCB板到達外部器件輸入port的最大值和最小值Tpcb,PCB延時經驗值為600mil/ns,1mm = 39.37mil。時鐘源到達外部器件的最大、最小時鐘偏斜Tclk2;時鐘源到達FPGA的最大、最小時鐘偏斜Tclk1;外部器件的建立時間Tsu和保持時間Th;
當外部器件時鐘為FPGA提供的時候,Tclk1和Tclk2即合成Tshew。如下圖所示,為FPGA提供時鐘模型:
1.5 使用范圍
通過作者使用總結情況,IO口時序約束主要使用在下面情況:
1.?數(shù)據(jù)交換頻率較高
因為IO時序約束一般計算值都是在幾納秒。當FPGA和外部數(shù)據(jù)交換頻率較低,如FPGA操作640*480的TFT液晶進行刷屏,傳輸數(shù)據(jù)頻率只24Mhz,一個數(shù)據(jù)時鐘都有41.666ns,全然不用約束都能滿足時序要求。
可是當操作SDRAM執(zhí)行到120M時候,因為一個數(shù)據(jù)變換周期才8ns。因此IO口的少量延時都會影響到SDRAM數(shù)據(jù)。因此這樣的情況下需要對輸入輸出進行完整的IO口時序約束。而且分析正確,才干消除傳輸數(shù)據(jù)不穩(wěn)定過的情況。
2.代碼已經比較優(yōu)化
當數(shù)據(jù)交換頻率較高,可是時序約束還是不滿足時序要求的時候。我們都需要對代碼進行分析,好的時序都是設計出來的,不是約束出來的。如程序清單 1.1所看到的。首先hcount_r 和vcount_r 都為10位計數(shù)器,這種代碼TFT的三色輸出的port就會有非常大的延時。由于dat_act的膠合邏輯太多。輸出路徑太長導致。
這種情況下應該不是首先做時序約束,應該改動代碼,盡量做到寄存器直接輸出。僅僅有當代碼比較優(yōu)化的情況,再做時序約束這樣才干得到較好的結果。
演示樣例程序如下:
assign dat_act = ((hcount_r >= hdat_begin) && (hcount_r < hdat_end))
?&&?((vcount_r?>=?vdat_begin)?&&?(vcount_r?<?vdat_end));
assign tft_r = (dat_act) ? {rgb16_dat[15:11], 3'b111} : 8'h00;
assign tft_g = (dat_act) ?
{rgb16_dat[10:5], 3'b111} : 8'h00;
assign tft_b = (dat_act) ? {rgb16_dat[4:0], 3'b111} : 8'h00;
1.6? 總結
本篇主要是對FPGA的IO口時序約束進行對應的分析,并未做實際的使用分析,興許以后將會結合軟件,以及實際案例對IO口時序約束進行具體的使用介紹。最后附上一個Altera官方的IO時序約束分析樣例。如圖下圖所示,為Altera官方例程:
FPGA設計過程中所遇到的路徑有輸入到觸發(fā)器,觸發(fā)器到觸發(fā)器,觸發(fā)器到輸出,例如下圖所示,下圖就是典型的同步時序路徑:
二、 應用背景
靜態(tài)時序分析簡稱STA,它是一種窮盡的分析方法。它依照同步電路設計的要求。依據(jù)電路網(wǎng)表的拓撲結構,計算并檢查電路中每個DFF(觸發(fā)器)的建立和保持時間以及其它基于路徑的時延要求是否滿足。
STA作為FPGA設計的主要驗證手段之中的一個,不需要設計者編寫測試向量,由軟件自己主動完畢分析,驗證時間大大縮短,測試覆蓋率可達100%。
靜態(tài)時序分析的前提就是設計者先提出要求,然后時序分析工具才會依據(jù)特定的時序模型進行分析,給出正確是時序報告。
進行靜態(tài)時序分析。主要目的就是為了提高系統(tǒng)工作主頻以及添加系統(tǒng)的穩(wěn)定性。
對非常多數(shù)字電路設計來說,提高工作頻率非常重要,由于高工作頻率意味著高處理能力。通過附加約束能夠控制邏輯的綜合、映射、布局和布線,以減小邏輯和布線延時。從而提高工作頻率。
三、理論分析
1. 靜態(tài)時序分析的理論基礎知識
在進行正確的時序分析前。我們必須具備主要的靜態(tài)時序的基本知識點,不然看著編譯器給出的時序分析報告宛如天書。如圖所示,為libero軟件給出的寄存器到寄存器模型的時序分析報告的截取,接下來我們會弄清楚每一個欄目的數(shù)據(jù)變量的含義以及計算方法。
下圖為libero靜態(tài)時序分析報告:
1.1 固定參數(shù) launch edge、latch edge、Tsu、Th、Tco概念
(1). launch edge
時序分析起點(launch edge):第一級寄存器數(shù)據(jù)變化的時鐘邊沿,也是靜態(tài)時序分析的起點。
(2). latch edge
時序分析終點(latch edge):數(shù)據(jù)鎖存的時鐘邊沿,也是靜態(tài)時序分析的終點。
(3). Clock Setup Time (Tsu)
建立時間(Tsu):是指在時鐘沿到來之前數(shù)據(jù)從不穩(wěn)定到穩(wěn)定所需的時間,假設建立的時間不滿足要求那么數(shù)據(jù)將不能在這個時鐘上升沿被穩(wěn)定的打入觸發(fā)器。如 下圖所示,下圖為建立時間圖解:
(4). Clock Hold Time (Th)
保持時間(Th):是指數(shù)據(jù)穩(wěn)定后保持的時間。假設保持時間不滿足要求那么數(shù)據(jù)相同也不能被穩(wěn)定的打入觸發(fā)器。保持時間示意圖如下圖所示,下圖為保持時間圖解:
(5). Clock-to-Output Delay(tco)
數(shù)據(jù)輸出延時(Tco):這個時間指的是當時鐘有效沿變化后,數(shù)據(jù)從輸入端到輸出端的最小時間間隔。
1.2?Clock skew
時鐘偏斜(clock skew):是指一個時鐘源到達兩個不同寄存器時鐘端的時間偏移。如下圖所示,下圖為時鐘偏斜:
時鐘偏斜計算公式如下:Tskew = Tclk2 -Tclk1
1.3?Data Arrival Time
數(shù)據(jù)到達時間(Data Arrival Time):輸入數(shù)據(jù)在有效時鐘沿后到達所需要的時間。主要分為三部分:時鐘到達寄存器時間(Tclk1),寄存器輸出延時(Tco)和傳輸數(shù)據(jù)延時(Tdata),如下圖所示,為數(shù)據(jù)到達的時間:
數(shù)據(jù)到達時間計算公式如下:Data Arrival Time = Launch edge?+ Tclk1 +Tco + Tdata
1.4?Clock Arrival Time
時鐘到達時間(Clock Arrival Time):時鐘從latch邊沿到達鎖存寄存器時鐘輸入端所消耗的時間為時鐘到達時間,如下圖所示,為時鐘到達時間:
時鐘到達時間計算公式如下:Clock Arrival Time = Lacth edge + Tclk2
1.5?Data Required Time(setup/hold)
數(shù)據(jù)需求時間(Data Required Time):在時鐘鎖存的建立時間和保持時間之間數(shù)據(jù)必須穩(wěn)定,從源時鐘起點達到這樣的穩(wěn)定狀態(tài)需要的時間即為數(shù)據(jù)需求時間。如下圖所示,為數(shù)據(jù)需求時間:
(建立)數(shù)據(jù)需求時間計算公式例如以下:Data Required Time = Clock Arrival Time - Tsu
(保持)數(shù)據(jù)需求時間計算公式例如以下:Data Required Time = Clock Arrival Time?+ Th
1.6 Setup slack
建立時間余量(setup slack):當數(shù)據(jù)需求時間大于數(shù)據(jù)到達時間時,就說時間有余量,Slack是表示設計是否滿足時序的一個稱謂。下圖為建立時間余量:
建立時間余量的計算公式例如以下:Setup slack = Data Required Time - Data Arrival Time
由公式可知。正的slack表示數(shù)據(jù)需求時間大于數(shù)據(jù)到達時間,滿足時序(時序的余量)。負的slack表示數(shù)據(jù)需求時間小于數(shù)據(jù)到達時間,不滿足時序(時序的欠缺量)。
1.7 時鐘最小周期
時鐘最小周期:系統(tǒng)時鐘能執(zhí)行的最高頻率。
- 當數(shù)據(jù)需求時間大于數(shù)據(jù)到達時間時,時鐘具有余量;當數(shù)據(jù)需求時間小于數(shù)據(jù)到達時間時,不滿足時序要求,寄存器經歷亞穩(wěn)態(tài)或者不能正確獲得數(shù)據(jù)。當數(shù)據(jù)需求時間等于數(shù)據(jù)到達時間時。這是最小時鐘執(zhí)行頻率。剛好滿足時序。
從以上三點能夠得出最小時鐘周期為數(shù)據(jù)到達時間等于數(shù)據(jù)需求時間的運算公式如下:Data Required Time?= Data Arrival Time
由上式推出如下公式:
Tmin + Latch edge + Tclk2 - Tsu = Launch edge + Tclk1 + Tco + Tdata
最后推出最小時鐘周期為:
Tmin = Tco + Tdata + Tsu - Tskew
四、應用分析
1. 設置時鐘主頻約束
全部的靜態(tài)時序分析都是在有約束的情況下編譯器才給出分析報告,所以進行時序分析的第一步就是設置約束。
Libero軟件設置時鐘約束的途徑三種,單時鐘約束,多時鐘約束和在Designer里面進行約束。
1.1 單時鐘約束
有時我們系統(tǒng)全部模塊都採用同一個時鐘,這樣的方式最為簡單,直接在Synplify主界面上有個設置時鐘約束的。如下圖紅框所看到的,下圖為單時鐘設置:
設置完畢后,編譯。通過Synplify時鐘報告看初步時鐘執(zhí)行頻率是否能達到要求,時鐘報告如圖4.2所看到的,設定100Mhz,能執(zhí)行102.7Mhz。滿足時序。下圖為時序報告:
1.2?時鐘約束
當系統(tǒng)內部模塊採用了多個時鐘時。那就需要進行多時鐘約束了。
首先需要打開設置界面。在Synplify中選擇:File->New->Constraint File建立SDC文件,選擇時鐘約束如下圖所示,為多時鐘約束:
對時鐘進行例如以下約束后保存SDC文件,約束如下圖所示,為多時鐘約束完畢:
1.2?Designer SmartTime時鐘約束
時鐘約束除了在Synplify中能夠約束外。還能夠在Designer SmartTime中設置時鐘約束,打開Designer Constraint,選擇Clock進行針對每一個使用時鐘的設置,如下圖所示,為Designer時序約束:
1.3?時序報告分析
(1)Synplify時序報告
當約束了時序后,需要觀察時序報告,看時鐘是否能達到我們需要的時鐘,首先觀察Synplify綜合報告。以多時鐘約束為樣例,從Synplify得到的時序報告如下圖所示,為多時鐘約束時序報告:
由上圖可知時序都滿足約束,未出現(xiàn)違規(guī)。能夠在以下的報告中查看最差路徑,如圖4.7所看到的是clk2的最差路徑。下圖為最差路徑:
(2)Designer SmartTime時序分析報告
當設計經過Synplify綜合給出網(wǎng)表文件后,還須要Designer進行布局布線,通過布局布線優(yōu)化后的時序會有變化,因此,還須要分析布局布線后的時序,打開Designer->Timing Analyzer查閱總體時序分析報告如下圖所示,為布局布線后時序報告:
由Synplify綜合后的報告和Designer進行布局布線后的報告能夠看出。布局布線后優(yōu)化了一些時序。特別是clk2時鐘,通過布局布線后優(yōu)化到了184Mhz,全然滿足時序。
(3)具體時序報告圖
通過Synplify綜合后的和Designer進行布局布線都僅僅是看到了一個大體的時序報告。當我們需要分析時序時候必須觀察細致的時序報告,在SmartTime中提供這樣的報告功能,以clk2分析為例,在Timing Analyzer找到例如以下區(qū)域,下圖為?時序報告選擇。
如上圖所示,選擇寄存器到寄存器進行分析時鐘主頻。寄存器到寄存器分析。
如上圖所示,時序報告中給出了數(shù)據(jù)延時。時序余量,數(shù)據(jù)到達時間,數(shù)據(jù)需求時間。數(shù)據(jù)建立時間,以及最小周期和時鐘偏斜等信息,有了上一節(jié)的時序分析基礎知識,我們全然能看懂這些數(shù)據(jù)代表的意義。這樣對我們時序分析就知己知彼,進一步雙擊當中一條路徑,還會給出這條路徑的硬件電路圖,如下圖硬件電路圖所示。有了這些具體的時序報告。對設計進行調整更加清晰。