<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Xilinx FPGA時序約束設計和分析

FPGA之家 ? 來源:FPGA之家 ? 2023-04-27 10:08 ? 次閱讀

在進行FPGA的設計時,經常會需要在綜合、實現的階段添加約束,以便能夠控制綜合、實現過程,使設計滿足我們需要的運行速度、引腳位置等要求。通常的做法是設計編寫約束文件并導入到綜合實現工具,在進行FPGA/CPLD的綜合、實現過程中指導邏輯的映射和布局布線。下面主要總結一下Xilinx FPGA時序約束設計和分析。

一、周期約束

周期約束是Xilinx FPGA 時序約束中最常見的約束方式。它附加在時鐘網線上,時序分析工具會根據周期約束來檢查時鐘域內所有同步元件的時序是否滿足需求。周期約束會自動的寄存器時鐘端的反相。如果相鄰的兩個元件的時鐘相位是相反的,那么它們之間的延遲將被默認的限制成周期約束的一半。

在進行周期約束之前,必須對電路的時鐘周期明了,這樣才不會出現約束過松或者過緊的現象。一般情況下,設計電路所能達到的最高運行頻率取決于同步元件本身的Setup Time 和 Hold Time,以及同步元件之間的邏輯和布線延遲。周期約束一般是使用下面的約束方法:

1、period_item PERIOD=period {HIGH|LOW} [high_or low_item]

其中,period_item可以是NET或TIMEGRP,分別代表時鐘線名稱net name或元件分組名稱group-name。用NET表示PERIOD約束作用到名為“net name”的時鐘網線所驅動的同步元件上,用TIMEGRP表示PERIOD約束作用到TIMEGRP所定義的分組(包括FFS、LATCH和 RAM等同步元件)上。period是目標時鐘周期,單位可以是ps、ns、μS和ms等。HIGH|LOW指出時鐘周期中的第1個脈沖是高電平還是低電平,high or low time為HIGH LOW指定的脈沖的持續時間,默認單位是ns。如果沒有該參數,時鐘占空比 是50%。例如, NET SYS_CLK PERIOD=10 ns HIGH 4ns

2、NET“clock net name”TNM_NET=“timing group name”;

TIMESPEC“TSidentifier”=PERIOD “TNM reference”period {HIGH | LOW} [high or low item]INPUT_JITTER value;

很多時候為了能夠定義比較復雜的派生關系的時鐘周期,就要使用該方法。其中TIMESPEC在時序約束中作為一個標識符表示本約束為時序規范;TSidentifier包括字母TS和一個標識符identifier共同作為一個TS屬性;TNM reference指定了時序約束是附加在哪一個組上,一般情況下加在TNM_NET定義的分組上。HIGH | LOW 指的是時鐘的初始相位表明第一個時鐘是上升沿還是下降沿;high or low item 表示的是時鐘占空比,即就是high或者low的時間,默認為1:1, INPUT_JITTER 表示的是時鐘的抖動時間,時鐘會在這個時間范圍內抖動,默認單元為ps。比如周期約束:

NET "ex_clk200m_p" TNM_NET = TNM_clk200_p;

TIMESPEC "TS_clk200_p" = PERIOD "TNM_clk200_p" 5.000 ns HIGH 50 %;

建立一個TNM_clk200_p的時序分組,包括時鐘網絡ex_clk200m_p驅動的所有同步元件,這些同步元件都將受到時序規范TS_clk200_p的約束。同步元件到同步元件有5ns的時間要求。占空比為1:1.

二、偏移約束

偏移約束包括OFFSET_IN_BEFORE、OFFSET_IN_AFTER、OFFSET_OUT_BEFORE和OFFSET_OUT_AFTER等4種約束。屬于基本的時序約束,它規定了外部時鐘和數據輸入輸出引腳之間的時序關系,只能用于與引腳相連接。其基本的語法為:

OFFSET = {IN | OUT} “offset_time” [units] {BEFORE | AFTER} “clk_name” [TIMEGRP “group_name”];

其中,[IN | OUT] 說明約束是輸入還是輸出,”offset_time”為FPGA引腳數據變化與有效時鐘之間的時間差,[BEFORE | AFTER]說明該時間差在有效時鐘沿的前面還是后面,”clk_name”時鐘名,[TIMEGRP “group_name”]定義約束的觸發器組,缺省時約束clk_name驅動的所有觸發器。

1、OFFSET_IN_BEFORE、OFFSET_IN_AFTER約束

OFFSET_IN_BEFORE和OFFSET_IN_AFTER都是輸入偏移約束。OFFSET_IN_BEFORE說明了輸入數據比有效時鐘沿提前多長時間準備好。于是芯片內部與輸入引腳相連的,組合邏輯的延遲不能大于這個時間,否則會發生數據采樣錯誤。OFFSET_IN_AFTER是輸入數據在有效時間沿之后多久到達芯片的輸入引腳。

OFFSET_IN_BEFORE對芯片內部的輸入邏輯的約束,約束如下:

NET data_in OFFSET = IN Time BEFORE CLK;

2、OFFSET_OUT_AFTER、OFFSET_OUT_BEFORE約束

這兩個都是輸出約束,OFFSET_OUT _AFTER規定了輸出數據在有效沿之后多久穩定下來,芯片內部的輸出延遲必須小于這個數值。OFFSET_OUT_BEFORE是指下一級芯片的輸入數據應該在有效時鐘沿之前多久準備好。從下一級的輸入端的延遲可以計算出當前設計輸出的數據必須在何時穩定下來。其基本的語法規則為:“NET data_out” OFFSET=OUT

Time AFTER CLK“;

三、專門約束

附加約束的一般策略是首先附加整天約束,比如PERIOD、OFFSET等約束,然后對局部的電路進行約束。專門約束包括以下幾個:

1、FROM_TO約束

FROM_TO在兩個組之間定義的約束,對二者之間的邏輯和布線延遲進行控制,這兩個組可以是用戶自定義的,也可以預定義的,可以使用TNM_NET、TNM和TIMEGRP定義組。其語法如下:

TIMESPEC “TSname“ = FROM ”group1“ TO ”group2“ value ;

其中group1和group2分別是路徑的起點和終點,value為延遲時間,可以是具體的數值或者表達式。比如:TIMESPEC TS_CLK = PERIOD CLK 30ns; TIMESPEC T1_T3 = FROM T1 TO T3 60ns;

2、MAXDELAY約束

MAXDELAY約束定義了特定的網絡線的最大延遲,其語法如:

NET “net_name“ MAXDELAY = value units ;value 為延遲時間。

3、MAXSKEW約束

MAXSKEW是高級時序約束,通過MAXSKEW約束附加在某一網線上,可以約束該網線上的最大SKEW。MAXSKEW語法如下:

NET “net_name“ MAXSKEW = allowable_skew units;

比如,NET “Singal“ MAXSKEW = 3ns;

四、分組約束

在FPGA設計當中,往往包含大量的觸發器、寄存器和RAM等元件,為了方便附加約束需要把他們分成不同的組,然后根據需要對某些組分別約束。

1、TNM約束。

使用TNM約束可以選出一個構成分組的元件,并且賦予一個名字,以便添加約束。如:{NET | INST | PIN} “object_name“ TNM= “identifier“;

其中object_name為NET、INST或PIN的名稱,identifier為分組名稱。

2、TNM_NEY約束

TNM_NET約束只加在網線上,其作用與TNM約束加在網線時基本相同,即把該網線所在路徑上的所有有效同步元件作為一組命名。不同之處在于TNM是加在引腳上的,而不是該網線所在路徑上的同步元件,也就是說TNM約束不能穿過IBUF,用TNM_NET約束就不出現這種情況。

NET “net_name“ TNM_NET = [predefined_group:] identifier;

TNM_NET只能用在網線上,否則會出現警告,或者同時該約束被忽略。

2、TIMEGRP約束

可以通過TIMEGRP約束使已有的分組約束構成新的分組,已經有的預定義和用TNM/TIMEGRP定義。使用TIMEGRP約束可以使多個分組合并組成一個新分組。

TIMEGRP “big_group1“ = ”small_group“ ”medium_group“

將”small_group“ ”medium_group“合并一個新分組big_group1。

五、簡單的避免時序違規和補救的方法

PERIOD 約束定義的是觸發器等同步元件的時鐘周期??墒褂脮r序分析器來驗證同步元件之間的所有路徑是否滿足設計的建立和保持時序要求。PERIOD 約束違例將以負的時序裕量顯示在在時序報告,并說明到底是建立時間還是保持時間要求出現違例。應找出兩個所分析的同步元件間一條較快路徑,如果是多周期路徑,應該采樣多周期約束,或至少是某種方法來確保數據在合適時間內到達并保持足夠長的時間,以便時鐘脈沖邊沿能夠正確采樣。若布局布線軟件無法找到更快的路徑,則可從 FPGA Editor 工具中手動進行布線。不過一般不推薦使用手工布局布線。首先應該試試重構電路來滿足時序要求。比如用寄存器打一拍,有點邏輯復制的意思,這樣可以增加了信號的延遲,但是卻可以使電路正確的采樣數據。

若外部信號值在時鐘脈沖邊沿之前發生變化,則需使用 DCM 或 PLL 延遲時鐘脈沖邊沿,這樣數據才能由新的延遲時鐘正確采樣。有一種替代方法,就是在輸入/ 輸出模塊中使用 IDELAY 元件,將數據移到時鐘有效的位置上。

一般情況下,提高電路的運行速度可以盡量減少時序違規的問題。具體總結如下:

1、通過設置Xilinx ISE軟件在“Implement Design“點擊右鍵,選擇”屬性“選擇”“Optimization Strategy”欄中選擇”speed“以及點擊右鍵選擇”Design Goals and Strategies“選擇”Timing performance“。

2、盡量使用Xilinx公司提高的專用資源,FPGA廠商都提高了一些專用的,比如進位鏈MUX、SRL等。

3、重新分配關鍵路徑

(1) 關鍵路徑在同一Module,這樣綜合時可以獲得最佳的時序效果。

(2) 對關鍵路徑近LOC約束,如果發現關鍵路徑相關的LUT距離太遠,可以使用floorplanner手工布線。

(3) 復制電路,減少關鍵路徑的扇出。當一個信號網絡所帶的負載越多的時候,他的路徑也會相應的增加,所以通過復制電路,可以有效的減少甚至消除時序違規的問題。

(4) 在關鍵路徑網絡上插入buffer減少扇出,提高速度,消除時序違規。

4、 進行特殊約束,通過設置Multi_Cycle_Path意義不大,因為它不會直接對關鍵路徑產生影響,這樣想法顯然不對,因為它可以對非關鍵路徑散開的作用,給關鍵路徑節約了空間,間接的達到壓縮關鍵路徑延遲的問題,有點“曲線救國“的味道。

5、 通過修改代碼減少邏輯級數和分割組合邏輯。

注:一般情況下,使用比較多的都是周期約束,專門約束只是針對部分器件可能需要,一般高端FPGA是不需要這個的。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1610

    文章

    21374

    瀏覽量

    595033
  • 電路
    +關注

    關注

    171

    文章

    5513

    瀏覽量

    170183
  • Xilinx
    +關注

    關注

    70

    文章

    2129

    瀏覽量

    119692
  • 布線
    +關注

    關注

    9

    文章

    735

    瀏覽量

    84093
  • 時序約束
    +關注

    關注

    1

    文章

    113

    瀏覽量

    13366

原文標題:Xilinx FPGA的約束設計和時序分析總結

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FPGA的IO口時序約束分析

      在高速系統中FPGA時序約束不止包括內部時鐘約束,還應包括完整的IO時序約束
    發表于 09-27 09:56 ?1518次閱讀

    FPGA I/O口時序約束講解

    前面講解了時序約束的理論知識FPGA時序約束理論篇,本章講解時序
    發表于 08-14 18:22 ?1062次閱讀
    <b class='flag-5'>FPGA</b> I/O口<b class='flag-5'>時序</b><b class='flag-5'>約束</b>講解

    Xilinx FPGA編程技巧之常用時序約束詳解

    今天給大俠帶來Xilinx FPGA編程技巧之常用時序約束詳解,話不多說,上貨。 基本的約束方法為了保證成功的設計,所有路徑的
    發表于 04-12 17:39

    Xilinx FPGA編程技巧之常用時序約束詳解

    今天給大俠帶來Xilinx FPGA編程技巧之常用時序約束詳解,話不多說,上貨。 基本的約束方法 為了保證成功的設計,所有路徑的
    發表于 05-06 15:51

    Xilinx_fpga_設計:全局時序約束及試驗總結

    Xilinx_fpga_設計:全局時序約束及試驗總結
    發表于 08-05 21:17

    FPGA時序分析如何添加其他約束

    你好: 現在我使用xilinx FPGA進行設計。遇到問題。我不知道FPGA設計是否符合時序要求。我在設計中添加了“時鐘”時序
    發表于 03-18 13:37

    FPGA約束設計和時序分析

    FPGA/CPLD的綜合、實現過程中指導邏輯的映射和布局布線。下面主要總結一下Xilinx FPGA時序約束設計和
    發表于 09-21 07:45

    時序約束時序分析 ppt教程

    時序約束時序分析 ppt教程 本章概要:時序約束時序
    發表于 05-17 16:08 ?0次下載

    FPGA時序約束方法

    FPGA時序約束方法很好地資料,兩大主流的時序約束都講了!
    發表于 12-14 14:21 ?19次下載

    Xilinx時序約束設計

    Xilinx時序約束設計,有需要的下來看看
    發表于 05-10 11:24 ?18次下載

    Xilinx時序約束培訓教材

    FPGA學習資料教程之Xilinx時序約束培訓教材
    發表于 09-01 15:27 ?0次下載

    Xilinx FPGA編程技巧常用時序約束介紹

    Xilinx FPGA編程技巧常用時序約束介紹,具體的跟隨小編一起來了解一下。
    的頭像 發表于 07-14 07:18 ?4254次閱讀
    <b class='flag-5'>Xilinx</b> <b class='flag-5'>FPGA</b>編程技巧常用<b class='flag-5'>時序</b><b class='flag-5'>約束</b>介紹

    xilinx時序分析約束

    詳細講解了xilinx時序約束實現方法和意義。包括:初級時鐘,衍生時鐘,異步時終域,多時終周期的講解
    發表于 01-25 09:53 ?6次下載

    正點原子FPGA靜態時序分析時序約束教程

    時序分析結果,并根據設計者的修復使設計完全滿足時序約束的要求。本章包括以下幾個部分: 1.1 靜態時序
    發表于 11-11 08:00 ?60次下載
    正點原子<b class='flag-5'>FPGA</b>靜態<b class='flag-5'>時序</b><b class='flag-5'>分析</b>與<b class='flag-5'>時序</b><b class='flag-5'>約束</b>教程

    FPGA設計之時序約束

    上一篇《FPGA時序約束分享01_約束四大步驟》一文中,介紹了時序約束的四大步驟。
    發表于 03-18 10:29 ?1428次閱讀
    <b class='flag-5'>FPGA</b>設計之<b class='flag-5'>時序</b><b class='flag-5'>約束</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>