1. 程式人生 > >FPGA STA(靜態時序分析)---ALTERA FPGA

FPGA STA(靜態時序分析)---ALTERA FPGA

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官方例程


轉載地址:https://www.cnblogs.com/zfyouxi/p/5183903.html

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_