约束的类型:
- 时序约束:主要用于规范设计的时序行为,表达设计者期望满足的时序要求,知道综合和布局布线截断的优化算法等;
- 布局布线约束:主要指定芯片I/O引脚位置和知道软件正在芯片特定的物理区域进行布局布线;
- 其他约束:指的是目标芯片型号,接口位置和电气特性等约束属性。
约束的作用:
- 减少逻辑和布线的延迟,提高工作效率;
- 获得正确的时序分析报告,静态时序分析工具以约束作为判断时序是否满足设计要求的标准;
- 指定FPGA引脚位置和电气标准
- 利于模块化设计
ISE通过综合工具XST的约束文件XCF,布局布线阶段UCF(用户约束文件),UCF支持XCF的所有约束语言和命令;综合时,仅仅通过综合属性设置来设置全局的综合策略与参数,细化的约束通过UCF完成。
时序约束:
1、周期约束:NET “usr_clk” TNM_NET= “usr_clk”;
TIMESPEC “TS_usr_clk” = PERIOD “usr_clk” 5.0ns
2、I/O时序约束:定义了时钟和IO接口之间的关系,只能用于I/O接口相连的信号,不能用于内部信号,可以约束输入数据、输出数据相对于时钟的时序关系,从而在综合实现中调整布局布线,是正在开发的FPGA的输入简历时间、输出保持时间保持系统要求。
INST “io_emif_data<0~7>” TNM=TS_emif_data;
NET “IO_emif_clk” TNM_NET= I_emif_clk;
TIMEGRP “TS_emif_data” OFFSET = OUT 7ns AFTER “I_emif_clk”;
约束定义了TS_emif_data寄存器组与时钟I_emif_clk的关系为时钟有效后7ns输出TS_emif_data寄存器的可靠数据。
3、分组约束:将一些具有相同时序要求的器件归为一组,进行相同的时序约束。
INST “io_emif_data<0>” TNM=TS_emif_data;
INST “io_emif_data<0~7>” TNM=TS_emif_data;
4、专门约束:通常比整体约束宽松,通过在可能的地方尽量放松约束可以提高布局布线的通过率,减少布局布线的时间。
From_to约束:约束在两个定义的组之间进行时序约束,对两者之间的逻辑和布线延迟进行控制:
TIMESPEC “TS_name”= FROM “group1” TO “group2” value;
其中value为延迟时间,可以使具体数值或表达式。
MAXDELAY约束:定义了特定路径上的最大延迟
布局布线约束:
1、引脚约束: NET “sys_rst_n” LOC= “J12”;
2、位置约束:通过约束语法将设计之中的某些硬件结构约束到指定的位置
(1) INST “instance_name” LOC=location;
对设计中的硬件约束到具体位置,可以约束的硬件结构包括:寄存器、IOB、LUT、BRAM、乘法器、PLL等。
(2) INST “instance_name” RLOC= location;
对设计中的硬件约束到相对位置, 可约束的硬件结构包括:寄存器、IOB、LUT、BRAM、乘法器、PLL等。必须与RLOC_ORIGIN配套使用。
(3) INST “instance_name” RLOC_ORIGIN =location;
与RLOC对应,指定RLOC的起始位置约束,与RLOC配套使用。
(4) INST “instance_name“ HU_SET=value;
高级属性定义约束,定义独立的组,与RLOC配套使用,以保持结构的完整性