新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > ISE 約束文件 *.ucf的寫法

        ISE 約束文件 *.ucf的寫法

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

        后來才發(fā)現(xiàn),原來是約束的問題,看來對于FPGA設(shè)計來說,約束真的很重要啊。

        本文引用地址:http://www.104case.com/article/201611/319314.htm

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


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


        #使用TIMESPEC約束sys_clk_grp的周期


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


        # FROM_TO用來定義兩個邏輯組之間的時序約束


        #語法:TIMESPEC "TS_name " = FROM "group1" TO " group2" value;


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


        #最大偏移約束MAXSKEW用于說明同一點驅(qū)動的時鐘信號經(jīng)過路徑傳播后,到達兩個或多個終點的時間差


        NET “AC97_Bit_Clk” MAXSKEW =10ns;


        NETtft_wr LOC=C11 | IOSTANDARD = LVCMOS33;


        NET clk0 IOSTANDARD = LVCMOS33;#IO電平標準有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)不進行時序約束


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


        #通配符


        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ū)域的約束相當于將布局過程中指定特定型號的器件的位置,這完全可以通過FloorPlanner的GUI界面進行設(shè)置,用圖形界面設(shè)置完后,配置信息會放到UCF中,這里只介紹UCF的使用。


        例如:


        INST"Done"LOC= "SLICE_X32Y163" ;#Done映射為一個寄存器,映射到SLICE_X32Y163的位置上。(32,163)相當于一個坐標,可以用FloorPlanner進行查看。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的一個映射。


        又例如,X,Y,Z是對應的是寄存器。現(xiàn)在想把它們放在一個指定的區(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

        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 中超| 长垣县| 隆化县| 太和县| 峨眉山市| 安国市| 海宁市| 砀山县| 江阴市| 历史| 潞西市| 仙游县| 永德县| 锡林郭勒盟| 金寨县| 孟州市| 四川省| 孟连| 交城县| 庆元县| 镇远县| 耿马| 长寿区| 保康县| 怀宁县| 深州市| 玉门市| 永顺县| 郧西县| 阳泉市| 兴海县| 渝北区| 松江区| 西藏| 缙云县| 阳曲县| 三门县| 金塔县| 满洲里市| 全州县| 本溪市|