ISE约束文件*.ucf的写法 | 您所在的位置:网站首页 › iseucf文件如何生成 › ISE约束文件*.ucf的写法 |
之前一直相不明白,为什么从官网下载的AC97的IP不能跑起来,整个IP就像空壳一样,bit_clk输进去,没有任何信号输出来。从IP的RTL来看,即使是IP不连到CPU的BUS上,只要是综合进FPGA了,当BIT_CLK信号输进IP时,SD_OUT,SYNC就应该有数据和信号输出,但奇怪的是,它们不是为高就是为低,跳都不跳一下,很显然,IP的输出信号并没有成功的输出到管脚上。 后来才发现,原来是约束的问题,看来对于FPGA设计来说,约束真的很重要啊。 下面介绍几种常用的约束语句,以备查阅。 NET "clk0" TNM_NET = "sys_clk_grp"; #在时钟网线clk上附加一个TNM_NET约束,把clk0驱动的所有同步元件定义为一个名为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用于说明同一点驱动的时钟信号经过路径传播后,到达两个或多个终点的时间差 NET “AC97_Bit_Clk” MAXSKEW =10ns; NET tft_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上拉和下拉设置 NET sys_rst_in TIG;# TIG(Timing Ignore)不进行时序约束 NET SYNC DRIVE = 8 | SLEW = SLOW;# DRIVE :最小驱动电流,单位mA,可以有2,4,6,8,12,16这几种模式,SLEW ={FAST|SLOW|QUIETIO}, QUIETIO仅用在Spartan-3A。SLEW是压摆 ,如果slew=fast 会出现过冲,此时DRIVE如果很大(12mA)会导致输出功率的失真很厉害,有可能会不满足外接的器件的要求。 #通配符 NET gpio_char_lcd LOC = AE13; NET gpio_char_lcd LOC = AC17; NET gpio_char_lcd LOC = AB17; NET gpio_char_lcd LOC = AF12; NET gpio_char_lcd LOC = AE12; NET gpio_char_lcd LOC = AC10; NET gpio_char_lcd LOC = AB10; NET gpio_char_lcd IOSTANDARD = LVCMOS33; NET gpio_char_lcd TIG; NET gpio_char_lcd PULLDOWN; # *表示任意字符串 #区域约束 # 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; 区域的约束相当于将布局过程中指定特定型号的器件的位置,这完全可以通过FloorPlanner的GUI界面进行设置,用图形界面设置完后,配置信息会放到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是对应的是寄存器。现在想把它们放在一个指定的区域中,我可以这样写, INST “X” AREA_GROUP = reg; INST “X” AREA_GROUP = reg; INST “X” AREA_GROUP = reg; AREA_GROUP reg RANGE = SLICE_X1Y1 :SLICE_X1Y6; 注:如何查看INST中的名称呢?在ISE中 Timing constraints editor中可以查看。 参考:1 . http://www.eefocus.com/yq000cn/blog/10-03/185475_6dce2.html2. http://bbs.ednchina.com/BLOG_ARTICLE_144140.HTM
转载自:心的微笑的博客 转载自 :http://blog.sina.com.cn/s/blog_8200ad9b0101ordv.html |
CopyRight 2018-2019 实验室设备网 版权所有 |