本文主要通過一個(gè)實(shí)例具體介紹ISE中通過編輯UCF文件來對(duì)FPGA設(shè)計(jì)進(jìn)行約束,主要涉及到的約束包括時(shí)鐘約束、群組約束、邏輯管腳約束以及物理屬性約束。
Xilinx定義了如下幾種約束類型:
? “Attributes and Constraints”
? “CPLD Fitter”
? “Grouping Constraints”
? “Logical Constraints”
? “Physical Constraints”
? “Mapping Directives”
? “Placement Constraints”
? “Routing Directives”
? “Synthesis Constraints”
? “Timing Constraints”
? “Configuration Constraints”
通過編譯UCF(user constraints file)文件可以完成上述的功能。
還是用實(shí)例來講UCF的語(yǔ)法是如何的。
圖1 RTL Schematic
圖1 是頂層文件RTL圖,左側(cè)一列輸入,右側(cè)為輸出,這些端口需要分配相應(yīng)的FPGA管腳。
表1. UCF example對(duì)上面的UCF文件進(jìn)行一些注釋:
?
該UCF文件主要是完成了管腳的約束、時(shí)鐘的約束,以及組的約束。
第一、二行:主要定義了時(shí)鐘以及對(duì)應(yīng)的物理管腳。
第一行,端口pin_sysclk_i 分配到FPGA管腳AD12,并放到了 pin_sysclk_i group中。那如何得知是AD12的管腳呢,請(qǐng)看圖2,F(xiàn)PGA管腳AD12 是一個(gè)66MHz的外部時(shí)鐘。FPGA的開發(fā)板肯定有電路原理圖供你分配外部管腳。
圖2,電路原理圖第二行:時(shí)鐘說明:周期15ns,占空比50%。關(guān)鍵詞TIMESPEC(Timing Specifications),即時(shí)鐘說明。一般的語(yǔ)法是:
TIMESPEC "TSidentifier"=PERIOD "timegroup_name" value [units];
其中TSidentifier用來指定TS(時(shí)鐘說明)的唯一的名稱。
第七行:pin_plx_lholda_o 連接至物理管腳 D17,并配置該管腳電平變化的速率。關(guān)鍵詞:SLEW,用來定義電平變化的速率的,一般語(yǔ)法是:
NET "top_level_port_name" SLEW="value";
其中value = {FAST|SLOW|QUIETIO}, QUIETIO僅用在Spartan-3A。
第十行:定義pin_plx_ads_n_i 輸入跟時(shí)鐘的關(guān)系。OFFSET IN和OFFSET OUT的約束。OFFSET IN 定義了數(shù)據(jù)輸入的時(shí)間和接收數(shù)據(jù)時(shí)鐘沿(capture Edge)的關(guān)系。
一般的語(yǔ)法是:OFFSET = IN value VALID value BEFORE clock
OFFSET = OUT value VALID value AFTER clock
圖3 時(shí)序圖(OFFSET IN)例子:
?
NET "SysCLk" TNM_NET = "SysClk";
TIMESPEC "TS_SysClk" = PERIOD "SysClk" 5 ns HIGH 50%;
OFFSET = IN 5 ns VALID 5 ns BEFORE "SysClk";
上面的定義了基于SysClk的全局OFFSET IN的屬性。時(shí)序可看圖3.
圖4 時(shí)序圖(OFFSET OUT)例子:
?
NET "ClkIn" TNM_NET = "ClkIn";
OFFSET = OUT 5 ns AFTER "ClkIn";
上面設(shè)置主要是定了了時(shí)鐘跟數(shù)據(jù)的時(shí)間關(guān)系,時(shí)序圖4??梢钥吹竭@時(shí)一種全局定義,Data1 和Data2輸出時(shí)間都受到 OFFSET = OUT 5 ns AFTER "ClkIn" 的約束。如果需要單獨(dú)定義輸出端口的OFFSET OUT的,需要制定相應(yīng)的NET,可參考表1中的第57行。
第18至49行:pin_plx_lad_io<*> 被歸到了名稱為L(zhǎng)AD的TMN(Timing name),這個(gè)可以說是GROUP的約束。這樣往往給約束帶來方便,不用一個(gè)一個(gè)的NET 或者INST進(jìn)行約束。
第50至51行:對(duì)TIMEGRP 是LAD進(jìn)行OFFSET IN和OUT的定義。
在時(shí)序約束中,在這里還未提及FROM TO的約束。FROM TO的約束主要是用來兩個(gè)同步模塊之間的時(shí)間關(guān)系的約束。在這里不做深入的討論。
至此,基本上把一般的UCF文件的作用進(jìn)行了注釋。
注:一般的時(shí)間的約束需要通過靜態(tài)的時(shí)序分析,然后再設(shè)定相應(yīng)PERIOD,OFFSET IN 以及OFFEET OUT等的時(shí)間參數(shù)。
當(dāng)然在例子中還沒有涉及到區(qū)域的約束。下面會(huì)試圖說一下。
ISE進(jìn)行綜合后會(huì)將設(shè)計(jì)代碼生成相應(yīng)的邏輯網(wǎng)表,然后經(jīng)過translate過程,轉(zhuǎn)換到Xilinx特定的底層結(jié)構(gòu)和硬件原語(yǔ),MAP過程就是將映射到具體型號(hào)的器件上,最后就是就是布線和布局的操作了。
區(qū)域的約束相當(dāng)于將布局過程中指定特定型號(hào)的器件的位置,這完全可以通過FloorPlanner的GUI界面進(jìn)行設(shè)置,用圖形界面設(shè)置完后,配置信息會(huì)放到UCF中,這里只介紹UCF的使用。
例如:
評(píng)論