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