首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Xilinx FPGA设计约束的分类(2)

Xilinx FPGA设计约束的分类(2)

一般的语法是:OFFSET
=
IN
value
VALID
value
BEFORE
clock
                 
OFFSET
=
OUT
value
VALID
value
AFTER
clock
[img]https://6eyzew.bay.livefilestore.com/y1mwSRTldcQ0hVkJmL489pmmByOEo_Sq2I8nuJEGMSMdpjONsqEYZ1X5EFWXPplAUn4Nq7Kuoue5E8oceEEI3P2X7ikvlMXw5NOL3mUaTMWbmD-S92Z4l7gZB7MtfEeowzCnzCfHUkbwlVGIfOv9aFcHw/image_thumb[5]%20655B4F81.png[/img]
图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.
[img]https://6eyzew.bay.livefilestore.com/y1mtWcRM-vI1dIPU-5PlTLCztFyL6LNw2K9D4CICPc7fWd1Ud7T86uxoRujIiumUYrN5jaEZ0Z-s5PWMjZCj3FfJyAwe-i-i9LrrnDAv9VxOuFM_IbCIRCtKnfBfgvc0HDJnxDeGGuFyZcyG5ucbvf22A/image_thumb[7]%201D60E179.png[/img]
图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的使用。
例如:
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;
继承事业,薪火相传
返回列表