新聞中心

ISE 約束文件 *.ucf的寫法

作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
之前一直相不明白,為什么從官網(wǎng)下載的AC97的IP不能跑起來(lái),整個(gè)IP就像空殼一樣,bit_clk輸進(jìn)去,沒(méi)有任何信號(hào)輸出來(lái)。從IP的RTL來(lái)看,即使是IP不連到CPU的BUS上,只要是綜合進(jìn)FPGA了,當(dāng)BIT_CLK信號(hào)輸進(jìn)IP時(shí),SD_OUT,SYNC就應(yīng)該有數(shù)據(jù)和信號(hào)輸出,但奇怪的是,它們不是為高就是為低,跳都不跳一下,很顯然,IP的輸出信號(hào)并沒(méi)有成功的輸出到管腳上。

后來(lái)才發(fā)現(xiàn),原來(lái)是約束的問(wèn)題,看來(lái)對(duì)于FPGA設(shè)計(jì)來(lái)說(shuō),約束真的很重要啊。

本文引用地址:http://m.butianyuan.cn/article/201611/319314.htm

下面介紹幾種常用的約束語(yǔ)句,以備查閱。


NET "clk0" TNM_NET = "sys_clk_grp";#在時(shí)鐘網(wǎng)線clk上附加一個(gè)TNM_NET約束,把clk0驅(qū)動(dòng)的所有同步元件定義為一個(gè)名為sys_clk的分組


#使用TIMESPEC約束sys_clk_grp的周期


TIMESPEC "TS_ sys_clk_grp " = PERIOD " sys_clk_grp " 9.9 ns HIGH 50 %;#周期9.9ns,HIGH指出時(shí)鐘周期里的第一個(gè)脈沖是高電平,如果是LOW表示是低電平,占空比50%


# FROM_TO用來(lái)定義兩個(gè)邏輯組之間的時(shí)序約束


#語(yǔ)法:TIMESPEC "TS_name " = FROM "group1" TO " group2" value;


TIMESPEC "TS_p2s" = FROM "pads" TO "ffs" 10; # pads到ffs延遲10ns


#最大偏移約束MAXSKEW用于說(shuō)明同一點(diǎn)驅(qū)動(dòng)的時(shí)鐘信號(hào)經(jīng)過(guò)路徑傳播后,到達(dá)兩個(gè)或多個(gè)終點(diǎn)的時(shí)間差


NET “AC97_Bit_Clk” MAXSKEW =10ns;


NETtft_wr LOC=C11 | IOSTANDARD = LVCMOS33;


NET clk0 IOSTANDARD = LVCMOS33;#IO電平標(biāo)準(zhǔn)有LVCMOS25、LVTTL、SSTL2_I、LVDCI_33等


NET sys_rst_in LOC = D6;


NET sys_rst_in PULLUP;# PULLUP、 PULLDOWN上拉和下拉設(shè)置


NET sys_rst_in TIG;# TIG(Timing Ignore)不進(jìn)行時(shí)序約束


NET SYNC DRIVE = 8 | SLEW = SLOW;# DRIVE :最小驅(qū)動(dòng)電流,單位mA,可以有2,4,6,8,12,16這幾種模式,SLEW ={FAST|SLOW|QUIETIO}, QUIETIO僅用在Spartan-3A。SLEW是壓擺 ,如果slew=fast 會(huì)出現(xiàn)過(guò)沖,此時(shí)DRIVE如果很大(12mA)會(huì)導(dǎo)致輸出功率的失真很厲害,有可能會(huì)不滿足外接的器件的要求。


#通配符


NET gpio_char_lcd<6> LOC = AE13;


NET gpio_char_lcd<5> LOC = AC17;


NET gpio_char_lcd<4> LOC = AB17;


NET gpio_char_lcd<3> LOC = AF12;


NET gpio_char_lcd<2> LOC = AE12;


NET gpio_char_lcd<1> LOC = AC10;


NET gpio_char_lcd<0> LOC = AB10;


NET gpio_char_lcd<*> IOSTANDARD = LVCMOS33;


NET gpio_char_lcd<*> TIG;


NET gpio_char_lcd<*> PULLDOWN;# *表示任意字符串


#區(qū)域約束


# Locate DCM/BUFG - Tools can probably figure them out automatically


# but just LOC them down to be safe


INST dcm_0/dcm_0/DCM_ADV_INST LOC = DCM_ADV_X0Y1;


INST dcm_1/dcm_1/DCM_ADV_INST LOC = DCM_ADV_X0Y2;


INST dcm_2/dcm_2/DCM_ADV_INST LOC = DCM_ADV_X0Y0;


INST dcm_0/dcm_0/CLK0_BUFG_INST LOC = BUFGCTRL_X0Y0;


INST dcm_0/dcm_0/CLK90_BUFG_INST LOC = BUFGCTRL_X0Y1;


INST dcm_0/dcm_0/CLKDV_BUFG_INST LOC = BUFGCTRL_X0Y2;


INST dcm_1/dcm_1/CLK0_BUFG_INST LOC = BUFGCTRL_X0Y31;


INST dcm_1/dcm_1/CLK90_BUFG_INST LOC = BUFGCTRL_X0Y30;


區(qū)域的約束相當(dāng)于將布局過(guò)程中指定特定型號(hào)的器件的位置,這完全可以通過(guò)FloorPlanner的GUI界面進(jìn)行設(shè)置,用圖形界面設(shè)置完后,配置信息會(huì)放到UCF中,這里只介紹UCF的使用。


例如:


INST"Done"LOC= "SLICE_X32Y163" ;#Done映射為一個(gè)寄存器,映射到SLICE_X32Y163的位置上。(32,163)相當(dāng)于一個(gè)坐標(biāo),可以用FloorPlanner進(jìn)行查看。INST"BRAM4/BU2/U0/blk_mem_generator/valid.cstr/ramloop[0].ram.r/v4_init.ram/TRUE_DP.SINGLE_PRIM.TDP"LOC= "RAMB16_X2Y22" ;#RAM16的一個(gè)映射。


又例如,X,Y,Z是對(duì)應(yīng)的是寄存器?,F(xiàn)在想把它們放在一個(gè)指定的區(qū)域中,我可以這樣寫,


INST“X”AREA_GROUP= reg;


INST“X”AREA_GROUP= reg;


INST“X”AREA_GROUP= reg;


AREA_GROUPregRANGE= SLICE_X1Y1 :SLICE_X1Y6;



關(guān)鍵詞: ISE約束文件*.uc

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉