xilinx fpga學習筆記7:時序約束原理

七、設計約束原理

設計約束文件直接影響設計性能和設計效率。xilinx的ISE軟件提供了實現不同類型約束的方法:
    1、用戶約束文件(User Constraints File,UCF)是一個ASCII文件,該文件指明瞭用於邏輯設計的約束。設計者可以使用文本編   輯器或約束編輯器來創建UCF文件。這些約  束影響邏輯設計在目標器件的實現方式。設計者可以使用UCF文件來覆蓋在設計   入口所聲明的約束。UCF文件是NGDBuild的輸入。UCF文件將成爲生成後的NGD文件的  一部分,對於FPGA芯片來說,當   設計被映射時,將使用這些約束中的一部分,並將其中的一部分約束寫入到MAP所生成的物理約束(Physical Constraints   File,PCF) 文件中。PCF文件被物理設計工具使用(比如PAR和時序分析工具),在設計映射後,將運行物理設計工具。
          在下面的文件中可以找到邏輯約束條件:
  (1)網表約束文件(Netlist Constraints File,NCF)是由綜合工具生成的ASCII文件。
  (2)UCF文件使由用戶生成的ASCII文件。
     NCF文件和UCF文件的通用規則包括:
  (1)UCF和NCF文件使大小寫敏感的。
  (2)每一個描述使用個“;”結束。
  (3)當描述超過一行時,不需要使用連接符進行連接(由於分號“;”表示結束)。
  (4)xilinx推薦設計者將相似的塊和元件構成一個組進行一個時序約束,而不需要分別進行約束。
  (5)UCF和NCF文件的註釋使用“#”符號開頭。       
     #file TEST.UCF
#net constraints for TEST design
NET"$SIG_0 MAXDELAY" = 10;
NET"$SIG_1 MAXDELAY" = 12 ns;
  (6)在UCF和NCF文件中,描述不需要規則先後順序。
  (7)將NET和INST名字用雙引號括住表示。
  (8)設計人員可以對一個給定的實例進行多個約束。
INST myInst LOC = P53 | IOSTANDARD = LVPECL33 | SLEW = FAST ;
          如果出現約束衝突時,UCF覆蓋NCF和原理圖/網表的約束。NCF覆蓋原理圖/網表約束。
    PCF文件使一個ASCII文件,其中包含兩部分:
  (1)由映射工具產生的物理約束。
  (2)由用戶輸入的物理約束。
     2、時序約束原理
xilinx軟件允許設計者爲設計指定精確的時序要求。使用全局或者路徑指定的約束,來指定這些要求。用於指定時序約束的   基本方法是在用戶約束文件中輸入這些約束,此外,能在源文件(HDL和原理圖)中輸入約束。一旦設計者定義了時序規範和   映射了設計,PAR基於這些要求佈局和佈線設計。使用命令行工具TRACE或者時序分析器來分析指定時序要求的結果。
  當一個網絡有多處時序約束時,XST以下面的順序來處理時序約束。
  a、信號上指定的約束。
  b、頂層模塊指定的約束。
  c、頂層模塊的全局約束。
  時序約束會對設計產生影響,所以要謹慎的使用時序約束的條件。
  在XST約束文件中,支持下面8中時序約束類型。
1)FROM-TO:定義了兩個羣組之間的時序約束。一個組可以使用戶定義或者是預定義的(FFS,PADS,RAMS)。下面給      該約束的文字描述:
TIMESPEC "TSname" = FROM "group1" TO "group2" value ;
       FROM-TO支持下面的預定義組:
(1)CPUS:PPC405處理器。
(2)DSPS:DPS45。
(3)FFS:所有的CLB和IOB沿觸發的觸發器、LUT移位寄存器、DDR寄存器。
(4)HSIOS:GT和GT10。
(5)LATCHES:所有CLB和IOB電平敏感的觸發器。
(6)MULTIS:所有的同步/異步乘法器。
(7)PADS:所有I/O引腳。
(8)RAMS:所有CLB LUT RAM。
(9)BRAMS_PORTA,BRAMS_PORTB:所有雙端口BRAM的端口A或B。
TIMESPEC "TS01" = FROM FFS TO FFS 30;
TIMESPEC "TS02" = FROM LATCHES TO LATCHES 25;
TIMESPEC "TS03" = FROM PADS TO RAMS 70;
TIMESPEC "TS04" = FROM FFS TO PADS 55;
TIMESPEC "TS05" = FROM BRAMS_PORTA TO BRAMS_PORTB(gork *);
       2)OFFSET:它指定了一個外部時鐘和相關的輸入/輸出數據引腳之間的時序關係。OFFSET只用於和引腳相關的信號,     不能用來對設計的內部信號進行擴展到達時間說明(即使用OFFSET約束)。該約束可以使設計者:計算來自外部網絡     時鐘和數據觸發器的建立時間是否衝突;並且指明瞭來自一個內部觸發器(該觸發器由芯片外部的時鐘引腳驅動)的Q     輸出的外部輸出網絡的延遲。
OFFSET = {IN|OUT}"offset_time"[units]{BEFORE|AFTER}"clk_name"[TIMEGRP"group_name"];
    如圖所示:通過一個例子來說明該約束條件:
    (1)OFFSET IN BEFORE:該約束定義了對數據從引腳傳輸到同步元件的可用時間。這個時間就是在下個時鐘沿到  達芯片前,數據與這個沿的時間差。
  從該例子中可以看出時序有如下關係:
Tdata + Tsu - Tclk ≤ Tin_before
其中:Tsu爲內在的觸發器建立時間;Tclk爲到觸發器的總的時鐘路徑延遲;Tdata爲從觸發器的總的數據    路徑延遲;Tin_before爲整個建立要求。
        當Tin_before = 20ns,可以作如下定義:
NET "DATA_IN" OFFSET = IN 20.0 BEFORE "CLK_SYS" ;

    (2)OFFSET IN AFTER:OFFSET減去時鐘的週期PERIOD確定了數據從引腳和在元件上建立可用的時間。
        根據前面的圖很容易得到這個時序關係:
Tdata + Tsu - Tclk ≤ Tp - Tin_after
其中:Tsu爲內在的觸發器的建立時間;Tclk爲到觸發器的總的時鐘路徑延遲;Tdata爲從觸發器的總的路    徑延遲;Tp爲單個週期要求;Tin_after爲整個建立要求;
        當Tin_after = 30ns,可以作如下定義:
NET "DATA_IN" OFFSET = IN 30.0 AFTER "CLK_SYS" ;

    (3)OFFSET OUT AFTER:該約束定義對數據從同步元件到引腳可用的時間。這個時間可以看成是當前時候沿到達  芯片後數據離開芯片的時間差。 
  根據上圖所示,很容易得到下面的時序關係:
Tq + Tco + Tclk ≤ Tout_after
其中:Tco爲內在的觸發器時鐘到輸出的時間;Tclk爲到觸發器的總的時鐘路徑延遲;Tq爲從觸發器的總的    數據路徑延遲;Tin_after爲整個時鐘到輸出的要求;
  當Tout_after = 35ns時,可以作如下定義:
NET "Q_OUT" OFFSET = OUT 35.0 AFTER "CLK_SYS";

    (4)OFFSET OUT BEFORE:該約束定義了達到FPGA的外部數據的時間。OFFSET從時鐘週期PERIOD減去這個時  間確定了對從同步元件到引腳數據可用的時間。 
  根據前面所示,很容易得到下面的時序關係:
Tq + Tco + Tclk ≤ Tp - Tout_before
其中:Tco爲內在的觸發器時鐘到輸出的時間;Tclk爲到觸發器的總的時鐘路徑延遲;Tq爲從觸發器的總的    數據路徑延遲;Tp爲單個週期要求;Tin_before爲整個時鐘到輸出的要求;
  當Tout_before = 15ns時,可以作如下定義:
NET "Q_OUT" OFFSET = OUT 15.0 BEFORE "CLK_SYS";

3)TIG:TIG約束引起貫穿指定網絡的路徑被時序分析和優化忽略。該約束能用於所影響信號的名字。
Net "netname" TIG ;
TIMESPEC "TSidentifier" = FROM "source_group" TO "dest_group" TIG ;

4)TIMEGRP:是一個基本的組約束。除組命名使用TNM標識符外,設計中可以從其他組來定義自己的組。通過定義       TIMEGRP約束,設計者可以定義與已存在組的關聯的組。
TIMEGRP "netgroup" = "existing_grp1" "existing_grp2" ["existing_grp3"...];
TIMEGRP "big_group" = "small_group" "medium_group";

5)TNM:是一個基本的組約束。使用TNM來識別組成組的元素,這些元素FFS、RAMs、LATCHES、PADS、           BRAMS_PORTA、BRAMS_PORTB、CPUS,HSIOS和MULTS。
{NET|INST|PIN} "net_or_pin_inst_name" TNM = [predefined_group] identifier;

6)TNM Net:除了輸入引腳網絡外,和TNM是一樣的。XST爲時序分析的時序模型考慮了邏輯延遲和網絡延遲。這些延遲    的大小取決於芯片的速度等級。這些延遲也取決於所選擇的技術(比如Virtex和Virtex-E芯片)。邏輯延遲數據和    Trace(佈局佈線後的時序分析程序)報告一致。網絡延遲模型是基於負載而評估出來的。

7)Timing THRU Point:(TPTHRU)定義了在路徑上的中間點。
INST "instace_name" TPTHRU = identifier;
NET "netname" TPTHRU = identifier ;

8)ASYNC_REG:該約束只能用於連接到寄存器和鎖存器。只用於當寄存器或鎖存器有異步輸入的情況。
INST "instance_name" ASYNC_REG = {TRUE|FALSE};

    3、引腳和麪積約束原理
1)面積約束:AREA_GROUP是設計實現約束,將設計分配到物理區域用於映射、打包、佈局和佈線。面積約束與設計 中的邏輯塊連接,約束的字符串的值表示了邏輯組塊的名字。該約束將設計的邏輯塊佈局到指定的FPGA的面積區域中, 與面積約束相關的UCF描述爲:
AREA_GROUP "groupname" RANGE = range;
AREA_GROUP "groupname" COMPRESSION = percent ;
AREA_GROUP "groupname" IMPLEMENT = {FORCE|AUTO};
AREA_GROUP "groupname" GROUP = {OPEN|CLOSED};
AREA_GROUP "groupname" PLACE = {OPEN|CLOSED};
AREA_GROUP "groupname" MODE = {RECONFIG};
下面對這些約束條件進行簡單的說明:
(1)RANGE:定義了對放置包含在區域組內可用的芯片邏輯資源的範圍。下面給出這些定義的文字描述:
 RANGE = SLICE_X# Y# : SLICE_X# Y#
 RANGE = RAMB16_X# Y# : RAMB16_X# Y#
 RANGE = MULT18X18_X# Y# : MULT18X18_X# Y#
(2)COMPRESSION:爲區域組定義了壓縮因子。其範圍0~100。如果沒有RANGE,則只可選擇0(無壓縮)  1(最大壓縮)。映射器從RANGE計算在AREA_GROUP內的CLB數量,並試圖將其壓縮到指定的百分比範  圍。對於TBUF,BRAM,乘法器不能使用該約束條件。
(3)IMPLEMENT:使用FORCE和AUTO字符串選項。FORCE將迫使重新實現AREA_GROUP內的邏輯。AUTO確  定如果AREA_GROUP內的邏輯改變了,則重新實現邏輯。
(4)GROUP:控制邏輯打包(packing of logic)到物理元件(比如slice)。選擇CLOSED時,不允許  AREA_GROUP組外的邏輯和AREA_GROUP內的邏輯結合;選擇OPEN(默認設置)時,允許  AREA_GROUP組外的邏輯和AREA_GROUP組內的邏輯結合。
(5)PLACE:控制在RANGE內的資源分配情況。選擇CLOSED時,不允許不是AREA_GROUP組內的元件放在  RANGE範圍內;選擇OPEN(默認設置)時,允許不是AREA_GROUP組內的元件放在RANGE範圍內。
(6)MODE:用於定義可配置的區域組,比如:MODE = RECONFIG。

2)引腳約束:用來確定IO引腳的工作特性,其約束主要包括以下幾個方面:
(1)位置約束:用來定義設計的I/O在器件上的位置。
NET "name" LOC = "A23" ;
(2)IO標準約束:用來定義I/O引腳的電氣標準。
NET "name" IOSTANDARD = "LVTTL";
(3)IO驅動能力約束:用來定義輸出引腳的驅動能力(以電流mA表示)。
INST "instance_name" DRIVE = {2|4|6|8|12|16|24};
(4)IO抖動率約束:用來定義輸出引腳的抖動率。可選擇的參數包括SLOW和FAST。
(5)IO延遲約束:用來定義輸入路徑的延遲元件。可選的參數包括NONE(關閉所有的IBUF和IFD路徑延遲)、  BOTH(打開所有的IBUF和IFD路徑延遲)、IBUF(設置關閉在I/O元件內的任何寄存器的延遲,同時如果輸入  緩衝區驅動I/O元件外的一個寄存器的D引腳則打開元件外的寄存器延遲)、IFD(打開任何I/O元件外的寄存  器,同時如果寄存器佔用了I/O元件的輸入側則關閉元件外的寄存器的延遲)(不考慮IOB=TRUE約束)。
INST "instance_name" IOBDELAY = {NONE|BOTH|IBUF|IFD};
(6)IO端接約束:是用於映射約束。可選擇的參數:PULLDOWN(當I/O無驅動時,保證其爲邏輯低,避免三  態)、PULLUP(當I/O無驅動時,保證其爲邏輯高,避免三態)、KEEPER(包含輸出引腳的值)。
NET "pad_net_name" {KEEPER|PULLUP|PULLDOWN};


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