AR# 2449

12.1 约束/时序 - 面向设计配置和时序约束的基础用户约束文件 (UCF) 语法范例

描述

以下为通用用户约束文件 (UCF) 指令的概要。如需了解完整描述,敬请查看 约束指南
http://www.xilinx.com/support/software_manuals.htm

了解更多信息,敬请查看 (Xilinx 答复 3416)(Xilinx 答复 3753)、 和 (Xilinx 答复 6662)

解决方案

时序规范的基础 UCF Syntax 实例

PERIOD TIME-SPEC

PERIOD 规范涵盖开始或终止于寄存器、锁存器或同步 RAM 并由参考网提供时钟控制的所有时序路径(管脚目的地除外)。 另外它还涵盖与其它元件有关的同步元件的设置要求(例如触发器等)。

注:时间的默认单位是十亿分之一秒。

NET clk20MHz PERIOD = 50 ;
NET clk50mhz TNM = registers_50mhz ;
TIMESPEC TS01 = PERIOD registers_50mhz 20 ;

FROM:TO TIME-SPECs

FROM:TO style time specs - 用于约束时间组间路径

注:RAMS、FFS、PADS 和 LATCHES 这几个关键字是预先定义的时间组,用来统一指代设计中的每类元件。


TIMESPEC TS02 = FROM : PADS : TO : FFS : 36 ;
TIMESPEC TS03 = FROM : FFS : TO : PADS : 36 ns ;
TIMESPEC TS04 = FROM : PADS : TO : PADS : 66 ;
TIMESPEC TS05 = FROM : PADS : TO : RAMS : 36 ;
TIMESPEC TS06 = FROM : RAMS : TO : PADS : 35.5 ;


注: 预定义的时间组 LATCHES 和 RAMS 不适用于 CPLD 设计。


OFFSET TIMESPEC

如欲了解有关 OFFSET 的更多详情,敬请查看 Xilinx WP237 “什么是 OFFSET 约束条件":
http://china.xilinx.com/xlnx/xweb/xil_publications_display.jsp?category=White+Papers

为了自动在 "PADS:TO:<synchronous element> 或 <synchronous element>:TO:PADS 时序规范中包含时钟缓冲器/布线延迟,应使用 OFFSET 约束而不是 FROM:TO 约束。


如果输入中驱动器件的最大 clock-to-out (Tco) 是 10 纳秒:

NET in_net_name OFFSET = IN : 10 : AFTER : clk_net_name ;


如果输出中被驱动器件的最小设定时间 (Tsu) 是 5 纳秒:

NET out_net_name OFFSET = OUT : 5 : BEFORE : clk_net_name ;


TIMING IGNORE

如果路径的时序可以被忽略,则使用 Timing Ignore (TIG)。

注:您可以使用 "*" 字符作为总线的通用名。您可使用一个 "?" 字符作为单字符的通用名。


如果忽略 net "reset_n" 的时序:

NET : reset_n : TIG ;


如果忽略实例 "mux_mem"中的 data_reg(7:0) net:

NET : mux_mem/data_reg* : TIG ;


如果忽略仅与名为 TS01 的TIMESPEC 相关的 "mux_mem" 实例的 data_reg(7:0) net:

NET : mux_mem/data_reg* : TIG = TS01 ;


如果忽略 "data1_sig" 和 "data2_sig" net:

NET : data?_sig : TIG ;


路径例外情况

如果您的设计中包含比其它输出更慢的输出,您可以为名为 "out_data(7:0)" 和 "irq_n"的输出网络创建与本例类似的特定 TIMESPEC:


TIMEGRP slow_outs = PADS(out_data* : irq_n) ;
TIMEGRP fast_outs = PADS : EXCEPT : slow_outs ;
TIMESPEC TS08 = FROM : FFS : TO : fast_outs : 22 ;
TIMESPEC TS09 = FROM : FFS : TO : slow_outs : 75 ;


如果存在多周期 FF-to-FF 路径,您可利用 TIMEGRP 或 TNM 声明创建一个时间组。


警告: 很多 VHDL/Verilog 综合器不会以预测的方式为触发器 Q 输出网络命名。 然而,大部分综合器会为触发器分配预测实例名。


TIMEGRP example:

TIMEGRP slowffs = FFS(inst_path/ff_q_output_net1* :
inst_path/ff_q_output_net2*);


附于实例的 TNM :

INST inst_path/ff_instance_name1_reg* TNM = slowffs ;
INST inst_path/ff_instance_name2_reg* TNM = slowffs ;


如果 FF clock-enable 用于多周期路径的所有触发器上, 您可将 TNM 附于时钟使能网络。

注:TNM 附于通到 FF、LATCH、RAM 的网络"前向迹线",或 PAD 附于网络。


NET ff_clock_enable_net TNM = slowffs ;


以下实例通过上述三个时间组方法中的任意一个使用 FROM:TO TIMESPEC 中的"slowffs" 时间组

TIMESPEC TS10 = FROM : slowffs : TO : FFS : 100 ;


偏移控制

为了约束与网络有关的偏移或延迟:

NET any_net_name MAXSKEW = 7 ;
NET any_net_name MAXDELAY = 20 ns;


优先

如欲了解更多详情,敬请访问 (Xilinx 答复 5747)

请提供反馈,让我们了解本答复记录如何解决您的需求。


指定逻辑或 I/O 的布局约束

分配或禁止 I/O 引脚数

分配 I/O 引脚数:

PLCC/PQFP 封装:

NET io_net_name LOC = P111 ;
NET HIERARCHY_BLOCK/io_net_name LOC = P44 ;


PGA/BGA 封装:

NET io_net_name LOC = A11 ;
NET HIERARCHY_BLOCK/io_net_name LOC = C12 ;

注: "P" 只与 PLCC/PQFP 封装一起使用。


将一个 I/O 引脚指定给若干个选定的引脚位置:

下面的实例将 "io_net_name" 分配给 P4、P5 或 P6:

NET io_net_name LOC = P4, P5, P6 ;


为了禁止 I/O 引脚 C26 或 CLBR5C3 被使用:

CONFIG PROHIBIT = C26 ;
CONFIG PROHIBIT = CLB_R5C3 ;


注:模式引脚 (MD0, MD1, MD2) 和边界扫描引脚 [TCK, TDI, TDO, TMS] 不能被禁止或分配;如果这些位置在 UCF 文件中被禁止,就会发生错误。这些属于保留位置,只有在设计中指定的情况下才能使用。


配置特定逻辑区域

置 0。

特定 CLB 中的基础元件 (BEL)。BEL = FF, LUT, RAM, etc.:

INST io_buf_name LOC = P110 ;
INST instance_path/BEL_name LOC = CLB_R17C36 ;

分配区域约束

XC3000 - 将 CLB 逻辑置于 F 行 F 列所在器件的左上方:

INST logic_name LOC=AA:FF ;


XC4000 - 将逻辑置于5 行5列5x5区域所在器件的左上方:

INST logic_name LOC=CLB_R1C1:CLB_R5C5 ;


XC4000, XC5200 - 将 BUFT 置于 1 行 1 列和 2 行 8 列区域的任何地方:

INST logic_name LOC=TBUF_R1C1:TBUF_R2C8 ;


XC5200 - 将逻辑置于 4 行 4 列所在器件左上方的任何片上


INST logic_name LOC=CLB_R1C1.LC3:CLB_R4C4..LC0 ;

多个 LOC 约束实例:

XC4000 - 在顶部或底部边缘放置一个解码器:

INST logic_name LOC=T,B ;


XC4000, Virtex, Spartan - 将 CLB 逻辑放置在器件 5x5 区域的左上角(但不在 CLB 中),第 5 行,第 5 列:

INST logic_name LOC=CLB_R1C1:CLB_R5C5 ;
INST logic_name PROHIBIT=CLB_R5C5 ;


XC4000, Virtex, Spartan - 将逻辑放置在第 8 列的任意 CLB 中:

INST logic_name LOC=CLB_R*C8;


为逻辑或 I/O 设定其它约束

Fast 或 Slow 属性

将 OBUF 指定为 FAST 或 SLOW,应使用如下语法:

INST obuf_name FAST ; #Alternate: NET pad_net FAST;
INST obuf_name SLOW ; #Alternate: NET pad_net SLOW;


MEDDELAY 和 NODELAY

要声明一个 IOB 输入 FF 延迟(默认 = MAXDELAY),应使用如下语法:

注:您可以将 MEDDELAY/NODELAY 附于 CLB FF;该 CLB FF 被 "map -pr i" 选项推入到 IOB。


INST input_ff_name MEDDELAY ;
INST input_latch_name NODELAY ;


在版本 3.1i 中,IOB 输入 FF 延迟被改变;这些选项为 IOBDELAY= NONE,IFD,IBUF,或者 BOTH,如下所示:


INST input_ff_name IOBDELAY = Both;
INST input_latch_name IOBDELAY = IFD;


KEEP

为防止网络被吸到逻辑块中,应使用如下语法:

NET net_name KEEP ;


Net Flag(S 属性)

为防止未连接的逻辑从设计中优化出局(仅 FPGA),应使用如下语法:

NET net_name S;


INIT

为了初始化 ROM、RAM 和寄存器,应使用如下语法:

INST ROM_name INIT = 5555;
INST FF_name INIT = S;
AR# 2449
日期 04/02/2014
状态 Active
Type 综合文章
Tools More Less