Xilinx 約束(ISE)

目錄

1、簡述

2、約束文件

2.1、概念

2.2、創建約束文件

3、UCF 文件語法

3.1、語法

3.2、通配符

3.3、定義設計層次

4、引腳和區域約束語法

4.1、LOC語句語法

4.2、LOC屬性說明

5、時序約束語法

5.1、週期約束

5.2、偏移約束

5.2.1、IN 偏移約束

5.2.2、OUT 偏移約束

5.3、分組約束

5.3.1、TNM 約束

5.3.2、TNM_NET 約束

5.3.3、TIMEGRP 約束

5.3.4、TPSYNC 約束

5.3.5、TPTHRU 約束

5.4、專門約束

5.4.1、FROM_TO 約束

5.4.2、MAXDELAY 約束

5.4.3、MAXSKEW 約束


 

1、簡述

約束是 FPGA 設計所不可或缺的部分,在 ISE 中有多種約束,可指定設計各個方面的設計要求,比如,引腳位置約束,區域約束,時序約束以及電平約束等等。其中,引腳約束將模塊的端口和 FPGA 的引腳對應起來;時序約束保證了設計在高速時鐘下的工作可靠。由於用戶約束文件(UCF)操作簡便而且功能強大,獲得了廣大設計人員的青睞。所有的位置、區域、以及時序約束不進可以用通過約束文件完成,還可以通過引腳和區域約束器(PACE)以及時序分析器 Timing Analyzer 等圖形化操作工具完成,二者的選取取決用用戶的喜好;ISE 支持 UCF 文件的添加,爲不同層次的模塊以及同一層次的模塊添加不同的用戶約束,極大的提高了約束的靈活性,因此各類約束圖形化編輯工具也發生了很大的變化。

 

2、約束文件

2.1、概念

FPGA設計中的約束文件有3類:用戶設計文件(.UCF文件)網表約束文件(.NCF文件)以及物理約束文件(.PCF文件),可以完成時序約束、管腳約束以及區域約束3類約束文件的關係爲:用戶在設計輸入階段編寫UCF文件,然後UCF文件和設計綜合後生成NCF文件,最後再經過實現後生成PCF 文件。

UCF文件是ASCII碼文件,描述了邏輯設計的約束,可以用文本編輯器和Xilinx約束文件編輯器進行編輯。NCF約束文件的語法和UCF文件相同,二者的區別在於:UCF文件由用戶輸入,NCF文件由綜合工具自動生成,當二者發生衝突時,以UCF文件爲準,這是因爲UCF的優先級最高。PCF文件可以分爲兩個部分:一部分是映射產生的物理約束,另一部分是用戶輸入的約束,同樣用戶約束輸入的優先級最高。一般情況下,用戶約束都應在UCF文件中完成,不建議直接修改 NCF文件和PCF文件。

 

2.2、創建約束文件

約束文件的後綴是.ucf,所以一般也被稱爲UCF文件。創建約束文件有兩種方法,一種是通過新建方式,另一種則是利用過程管理器來完成。
第一種方法:新建一個源文件,在代碼類型中選取“Implementation Constrains File”,在“File Name”中輸入約束文件的名稱。單擊“Next”按鍵進入模塊選擇對話框,選擇要約束的模塊,然後單擊“Next”進入下一頁,再單擊“Finish” 按鍵完成約束文件的創建;

第二種方法:在工程管理區中,將“Source for”設置爲“Synthesis/Implementation”。“Constrains Editor”是一個專用的約束文件編輯器,雙擊過程管理區中“User Constrains”下的“Create Timing Constrains”就可以打開“Constrains Editor”;

在“Ports”選項卡中可以看到,所有的端口都已經羅列出來了,如果要修改端口和FPGA管腳的對應關係,只需要在每個端口的“Location”列中填入管腳的編號即可。例如在UCF文件中描述管腳分配的語法爲:

 NET “端口名稱” LOC = 引腳編號;

需要注意的是,UCF文件是大小敏感的端口名稱必須和源代碼中的名字一致,且端口名字不能和關鍵字一樣。但是關鍵字NET是不區分大小寫的

 

3、UCF 文件語法

3.1、語法

UCF文件的語法爲:

{NET|INST|PIN} "signal_name" Attribute;

其 中,“signal_name”是指所約束對象的名字,包含了對象所在層次的描述;“Attribute”爲約束的具體描述;語句必須以分號“;”結束。 可以用“#”或“”添加註釋。需要注意的是:UCF文件是大小寫敏感的,信號名必須和設計中保持大小寫一致,但約束的關鍵字可以是大寫、小寫甚至大小寫混 合。

例如:NET "CLK" LOC = P30;“CLK”就是所約束信號名,LOC = P30;是約束具體的含義,將CLK信號分配到FPGA的P30管腳上。對於所有的約束文件,使用與約束關鍵字或設計環境保留字相同的信號名會產生錯誤信 息,除非將其用" "括起來,因此在輸入約束文件時,最好用" "將所有的信號名括起來。

 

3.2、通配符

在UCF文件中,通配符指的是 * 和 ? 。* 可以代表任何字符串以及空,? 則代表一個字符。在 編輯約束文件時,使用通配符可以快速選擇一組信號,當然這些信號都要包含部分共有的字符串。例如:

NET "*CLK?" FAST;

將包含“CLK”字符並以一個字符結尾的所有信號,並提高了其速率。在位置約束中,可以在行號和列號中使用通配符。例如:

INST "/CLK_logic/*" LOC = CLB_r*c7;

作用:把CLK_logic層次中所有的實例放在第7列的CLB中;

 

3.3、定義設計層次

在UCF文件中,通過通配符*可以指定信號的設計層次。其語法規則爲:

* 遍歷所有層次

Level1/* 遍歷level1及以下層次中的模塊

Level1/*/ 遍歷level1種的模塊,但不遍歷更低層的模塊

例4-5 根據圖4-75所示的結構,使用通配符遍歷表4-3所要求的各個模塊。

 

4、引腳和區域約束語法

LOC約束是FPGA設計中最基本的佈局約束和綜合約束,能夠定義基本設計單元在FPGA芯片中的位置,可實現絕對定位、範圍定位以及區域定位。此外, LOC還能將一組基本單元約束在特定區域之中。LOC語句既可以書寫在約束文件中,也可以直接添加到設計文件中。換句話說,ISE中的FPGA底層工具編輯器(FPGA Editor)、佈局規劃器(Floorplanner)和引腳和區域約束編輯器的主要功能都可以通過LOC語句完成。

4.1、LOC語句語法

基本的LOC語法如下:

INST "instance_name " LOC = location;

其中“location”可以是FPGA芯片中任一或多個合法位置。如果爲多個定位,需要用逗號“,”隔開,如下所示:

LOC = location1,location2,...,locationx;

目前,還不支持將多個邏輯置於同一位置以及將多個邏輯至於多個位置上。需要說明的是,多位置約束並不是將設計定位到所有的位置上,而是在佈局佈線過程中,佈局器任意挑選其中的一個作爲最終的佈局位置。

範圍定位的語法爲:

INST “instance_name” LOC=location:location [SOFT];

常用的LOC定位語句如表4-4所示。

使用LOC完成端口定義時,其語法如下:

NET "Top_Module_PORT" LOC = "Chip_Port";
其中,“Top_Module_PORT”爲用戶設計中頂層模塊的信號端口,“Chip_Port”爲FPGA芯片的管腳名。

LOC語句中是存在優先級的,當同時指定LOC端口和其端口連線時,對其連線約束的優先級是最高的。例如,在圖4-76中,LOC=11的優先級高於LOC=38。

 

4.2、LOC屬性說明

LOC語句通過加載不同的屬性可以約束管腳位置、CLB、Slice、TBUF、塊RAM、硬核乘法器、全局時鐘、數字鎖相環(DLL)以及DCM模塊等資源,基本涵蓋了FPGA芯片中所有類型的資源。由此可見,LOC語句功能十分強大,表4-5列出了LOC的常用屬性。

 

5、時序約束語法

時序約束的語法(也可通過constraint editor約束);

一般來講,添加約束的原則爲先添加全局約束,在補充局部約束,而且局部約束比較寬鬆;目的是在可能的地方儘量放寬鬆約束,提高佈線成功概率,減少 ISE 佈局佈線時間。典型的全局約束包括週期約束和偏移約束。

5.1、週期約束

PERIOD 約束是一個基本時序和綜合約束,它附加在時鐘網線上,時序分析工具根據 PERIOD 約束檢查時鐘域內所有同步元件的時序是否滿足要求,它將檢查與同步時序約束端口相連接的所有路徑的延遲,但是不會檢查PAD到寄存器的路徑。

附加時鐘週期約束的首選方法(Preferred Method)語法如下:

TIMESPEC “TS_identifier” = PERIOD “TNM_reference” period {HIGH | LOW} [high_or_low_time]

其 中“[]”內爲可選項,“{}”爲必選項,參數period爲要求的時鐘週期,可以使用ps、ns、us或者ms等單位,大小寫都可以,缺省單位爲ns。 HIGH|LOW關鍵詞指出時鐘週期裏的第一個脈衝是高電平還是低電平,而high_or_low_time爲脈衝的延續時間,缺省單位也是ns,如果不 提供該項,則缺省佔空比爲50%。

TIMESPEC  是一個基本時序相關約束標識,表示本約束爲時序規範。TSidentifier 包括字母 TS 和一個標識符 identifier(爲ASCII碼字符串)共同組成一個時序規範。

例如定義時鐘週期約束時,首先在時鐘網線clk上附加一個TNM_NET約束,把clk驅動的所有同步元件定義爲一個名爲sys_clk的分組,然後使用TIMESPEC約束定義時鐘週期。

NET “clk” TNM_NET=”sys_clk”;                                             #定義clk驅動的所有同步元件爲sys_clk的分組

TIMESPEC “TS_sys_clk”= PERIOD “sys_clk” 50 HIGH 30;  #定義可引用的時序規範TS_sys_clk

這個規範規定 sys_clk 組的時鐘情況

而定義派生時鐘的語法如下:

TIMESPEC “TSidentifier_2”=PERIOD “timegroup_name” “TSidentifier_1” [* | /] factor PHASE [+  | -] phase_value [units];

定義第二個時序規範 TSidentifier_2,其內容是名爲  timegroup_name 的分組是第一個時序規範 TSidentifier_1 派生的其中TSidentifier_2爲要定義的派生時鐘,TSidentifier_1爲已經定義的時鐘,factor指出兩者週期的輩數關係,是一個浮點數。phase_value指出兩者之間的相位關係,爲浮點數。例如:

定義主時鐘clk0:

TIMESPEC “TS01” = PERIOD “clk0” 10.0 ns;

定義派生時鐘clk180,其相位與主時鐘相差180°:

TIMESPEC “TS02” = PERIOD “clk180” TS01 PHASE + 5.0 ns;

定義派生時鐘clk180_2,其週期爲主時鐘的1/2,並延遲2.5ns:

TIMESPEC “TS03” = PERIOD “clk180_2” TS01 /2 PHASE + 2.5 ns;

 

5.2、偏移約束

偏移約束規定了外部時鐘和數據輸入輸出引腳之間的時序關係,只用於與PAD相連的(端口)信號,不能用於內部信號。使用該約束可以爲綜合實現工具指出輸入數據到達的時刻,或者輸出數據穩定的時刻,從而在綜合實現中調整佈局佈線過程,使正在開發的FPGA/CPLD的輸入建立時間以及下一級電路的輸入建立時間滿足要求

包括:

OFFSET_IN_BEFORE

OFFSET_IN_AFTER

OFFSET_OUT_BEFORE

OFFSET_OUT_AFTER

s四類基本約束,基本的語法爲:

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

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

 

5.2.1、IN 偏移約束

IN 偏移約束是輸入偏移約束,由 OFFSET_IN_AFTER 和 OFFSET_IN_BEFORE 組成,前者定義了輸入數據在有效時鐘到達多長時間後,可以到達芯片輸入引腳,這樣可以得到芯片內部的延遲上限,從而對那些與輸入引腳相連的組合邏輯進行約束;後者定義數據比相應有效時鐘沿提前多少時間來到,是與其相連的組合邏輯的最大延時;如果偏移設置不合理,在時鐘沿到的時候,數據不穩定,發生採樣錯誤;輸入偏移的時序如下:

NET data_in OFFSET = IN Time BEFORE CLK

例如:

NET "DATA_IN" OFFSET = IN 10.0 BEFORE "CLK_50MHz";

表面在時鐘信號 CLK_50MHz 上升沿到達之前的 10ns 之內,輸入信號的 DATA_IN 必須達到數據輸入引腳。

NET "DATA_IN" OFFSET = IN 10.0 AFTER "CLK_50MHz";

表面在時鐘信號 CLK_50MHz 上升沿到達之後的 10ns 之內,輸入信號的 DATA_IN 必須達到數據輸入引腳。

 

5.2.2、OUT 偏移約束

和 IN 約束類似,OUT 偏移約束由 OFFSET_OUT_AFTER 和 OFFSET_OUT_BEFORE 組成,前者定義了輸出數據在有效時鐘之後多長時間穩定下來,是芯片內部輸出延時的上限;後者定義了在下一個時鐘信號來到之前,多長時間必須輸出數據,是下一級邏輯建立時間的上限,時序關係如下所示:

例如:

NET "DATA_OUT" OFFSET = OUT 10.0 BEFORE "CLK_50MHz";

表明,在時鐘信號 CLK_50MHz 上升沿到達之前的 10ns 內,輸出信號 DATA_OUT 信號必須離開數據輸出引腳;

NET "DATA_OUT" OFFSET = OUT 10.0 AFTER "CLK_50MHz";

表明,在時鐘信號 CLK_50MHz 上升沿到達之後的 10ns 內,輸出信號 DATA_OUT 信號必須一致保持在數據輸入引腳;

 

5.3、分組約束

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

5.3.1、TNM 約束

使用TNM約束可以選出一個構成分組的元件,並且賦予一個名字,以便添加約束。如:

{NET | INST | PIN} “object_name“ TNM= “identifier“;

其中object_name爲NET、INST或PIN的名稱,identifier爲分組名稱;也支持通配符 * 和 ?;

5.3.2、TNM_NET 約束

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

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

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

5.3.3、TIMEGRP 約束

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

TIMEGRP “big_group1“ = ”small_group“ ”medium_group“

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

5.3.4、TPSYNC 約束

TPSYNC 用於將那些不是引腳和同步元件的組件定義成同步元件,以便可以利用任意點來作爲時序規範的終點和起點;語法如下:

{NET | INST | PIN} “object_name“ TPSYNC= “New_part“;

將 TPSYNC 約束附加在網線上,則該網線的驅動源爲同步點;如附加在同步元件的輸出引腳上,則同步元件中驅動該引腳的源爲同步點;如股價在同步元件上,則輸出引腳爲同步點;如附加在同步元件的輸入引腳上,則該引腳被定義爲同步點;

5.3.5、TPTHRU 約束

TPTHRU 用於定義一個或一組路徑上的關鍵點,可使用戶定義出任意期望的路徑。語法如下:

{NET | INST | PIN} “object_name“ TPTHRU= “New_name“;

 

5.4、專門約束

專門約束包括以下幾個:

5.4.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;

5.4.2、MAXDELAY 約束

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

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

5.4.3、MAXSKEW 約束

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

NET “net_name“ MAXSKEW = allowable_skew units;

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

參考文獻:

Xilinx FPGA 時序約束:

http://xilinx.eetrend.com/d6-xilinx/blog/2014-10/7778.html

ISE 時序分析:

https://blog.csdn.net/yuan1164345228/article/details/38541677

FPGA 管腳約束:

https://www.cnblogs.com/xingshansi/p/7102027.html

ucf文件編寫:

https://wenku.baidu.com/view/7194b215f18583d0496459a2.html

FPGA 時序約束—理論:

https://www.cnblogs.com/rouwawa/p/7716393.html

靜態時序分析:

https://blog.csdn.net/u012176730/article/details/54412323

時序約束原理:

https://blog.csdn.net/dnfestivi/article/details/52290235

ISE約束--UCF編輯的入門介紹:

https://blog.csdn.net/sxlwzl/article/details/10183083

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章