Xilinx®Vivado®集成设计环境(IDE)经过设置对象属性的值,能够对设计对象进行物理约束。 例子包括:
•I / O约束,例如位置和I / O标准
•放置约束,例如单元格位置
•路由约束,例如固定路由
•配置约束,例如配置模式
与时序约束相似,物理约束必须保存在Xilinx设计约束(XDC)文件或Tcl脚本中,以便在打开设计时可使用网表加载它们。 将设计加载到内存后,您可使用Tcl控制台或使用Vivado Design Suite IDE编辑工具以交互方式输入新约束。
大多数物理约束是经过对象上的属性定义的:
set_property <property> <value> <object list>
例外是使用Pblock命令的区域约束。编程
严重警告
针对XDC文件中的无效约束发出严重警告,包括应用于设计中没法找到的对象的约束警告。
有关属性定义和用法,请参阅“Vivado设计套件属性参考指南”
(UG912)[参考文献11]。网络
网表约束
网表限制是在网表对象(如端口,引脚,网络或单元)上设置的,要求编译工具以特殊方式处理它们。
重要信息:确保您了解使用这些约束的影响。 它们可能会致使设计面积增长,设计性能下降,或二者兼而有之。工具
网表限制包括:
•CLOCK_DEDICATED_ROUTE
•MARK_DEBUG
•DONT_TOUCH
•LOCK_PINS性能
CLOCK_DEDICATED_ROUTE优化
在网络上设置CLOCK_DEDICATED_ROUTE以指示如何路由时钟信号。ui
CLOCK_DEDICATED_ROUTE属性用于时钟网络以覆盖默认路由。这是一种先进的控制,须要极其谨慎,由于它可能会影响时间可预测性和可路由性。例如,当专用时钟路由不可用时,CLOCK_DEDICATED_ROUTE能够设置为FALSE。值FALSE容许Vivado工具使用通用路由将时钟从输入端口路由到全局时钟资源,例如BUFG或MMCM资源。这仅应用做器件封装引脚分配被锁定时的最后手段,而且时钟输入不能分配给适当的时钟输入引脚(CCIO)。除非用于,不然路由将是次优和不可预测的编码
与FIXED_ROUTE结合。
有关此属性的更多信息,请参阅Vivado设计套件(UG949)[参考文献5]的UltraFast设计方法指南中的时钟约束。设计
MARK_DEBUG
在RTL中的网络上设置MARK_DEBUG以保留它并使其在网表中可见。 这容许它在编译流程中的任何位置链接到逻辑调试工具。
有关更多信息,请参阅“Vivado Design Suite用户指南:编程和调试”(UG908)[参考12]中的此连接。3d
DONT_TOUCH
在叶子单元格,分层单元格或网络对象上设置DONT_TOUCH以在网表优化期间保留它。 DONT_TOUCH最经常使用于:
•防止网络被优化掉。
带有DONT_TOUCH的网络没法经过综合或实施来吸取。 这有助于逻辑探测或调试设计中的意外优化。 要保留具备多个分层段的网络,请将DONT_TOUCH放在净PARENT(get_property PARENT $ net)上,该网络是最接近其驱动程序的网段。
•防止合并手动复制的逻辑。
有时最好手动复制逻辑,例如跨越大范围的高扇出驱动程序。 将DONT_TOUCH添加到手动复制的驱动程序(以及原始驱动程序)可防止合成和实现优化这些单元格。
注意:使用reset_property重置DONT_TOUCH属性。 将DONT_TOUCH属性设置为0不会重置该属性。调试
避免在分层单元上使用DONT_TOUCH来实现,由于Vivado IDE实现不会使逻辑层次结构变平。 在综合中使用KEEP_HIERARCHY来维护应用XDC约束的逻辑层次结构。
LOCK_PINS
LOCK_PINS是一个单元属性,用于指定逻辑LUT输入(I0,I1,I2,...)和LUT物理输入引脚(A6,A5,A4,...)之间的映射。
常见的用途是强制将时序关键的LUT输入映射到最快的A6和A5
物理LUT输入。
Vivado集成设计环境(IDE)支持许多与集成软件环境(ISE®)设计套件相同的I / O约束。 如下I / O属性列表并不是详尽无遗
有关I / O属性的完整列表,有关I / O端口和I / O单元属性的更多信息,以及具备正确语法的编码示例,请参阅“Vivado设计套件属性参考指南”(UG912)[参考11]。
注意:除非另有说明,不然全部属性都应用于端口对象。
°有关这些属性背后的应用和方法的更多信息,
请参阅器件SelectIO文档,例如7系列FPGA SelectIO资源
用户指南(UG471)[参考13]。
重要提示:ISE Design Suite和Vivado Design Suite之间存在显着差别
在处理IOB时。 Vivado工具容许在两个端口和链接到端口的寄存器单元上设置IOB。 若是在端口及其寄存器上设置了冲突值,则以寄存器上的值为准。 Vivado工具仅使用值TRUE和FALSE。 值FORCE被解释为TRUE,而且忽略值AUTO。 与ISE不一样,若是没法遵照IOB设置,Vivado工具会生成严重警告,而不是错误。
重要信息:将BEL和LOC属性分配给单元格时,必须在LOC以前分配BEL。
路由约束
路由约束应用于网络对象以控制其路由资源。
固定路由
固定路由是锁定路由的机制,相似于ISE中的定向路由。
锁定网络路由资源涉及三个网络属性。 见表8-1。
在内存中加载实现的设计后,您能够查询任何网络的路由信息:
路由被定义为一系列相对路由节点名称,扇出使用嵌入式花括号表示。 经过在网络上设置如下属性来修复路由:
% set_property IS_ROUTE_FIXED TRUE $net
要对XDC文件中的约束进行反向注释以供未来运行,还必须保留链接到固定网络的全部单元的放置。 您能够经过选择原理图或设备视图中的单元格来查询此信息,并查看其LOC / BEL属性
“属性”窗口中的值。 或者,您能够直接从Tcl控制台查询这些值:
% get_property LOC [get_cells {a0 L0 L1}]
SLICE_X0Y47 SLICE_X0Y47 SLICE_X0Y47
% get_property BEL [get_cells {a0 L0 L1}]
SLICEL.CFF SLICEL.A6LUT SLICEL.B6LUT
因为固定路由一般是时序关键的,所以还必须在LUT的LOCK_PINS属性中捕获LUT引脚映射,以防止路由器交换引脚。
一样,您能够从Tcl控制台查询每一个逻辑引脚的站点引脚:
% get_site_pins -of [get_pins {L0/I1 L0/I0}]
SLICE_X0Y47/A4 SLICE_X0Y47/A2
% get_site_pins -of [get_pins {L1/I1 L1/I0}]
SLICE_X0Y47/B3 SLICE_X0Y47/B2
修复net netA路由所需的完整XDC约束是:
set_property BEL CFF [get_cells a0]
set_property BEL A6LUT [get_cells L0]
set_property BEL B6LUT [get_cells L1]
set_property LOC SLICE_X0Y47 [get_cells {a0 L0 L1}]
set_property LOCK_PINS {I1:A4 I0:A2} [get_cells L0]
set_property LOCK_PINS {I1:A3 I0:A2} [get_cells L1]
set_property FIXED_ROUTE { CLBLL_LL_CQ CLBLL_LOGIC_OUTS6 FAN_ALT5 FAN_BOUNCE5 {
IMUX_L17 CLBLL_LL_B3 } IMUX_L11 CLBLL_LL_A4 } [get_nets netA]
若是使用交互式Tcl命令而不是XDC,则可使用place_cell命令一次指定多个放置约束,以下所示:
place_cell a0 SLICE_X0Y47 / CFF L0 SLICE_X0Y47 / A6LUT L1 SLICE_X0Y47 / B6LUT
有关place_cell的更多信息,请参阅Vivado Design Suite Tcl命令参考
指南(UG835)[参考文献10]。
配置约束
配置约束是应用于当前设计的比特流生成的全局约束。 这包括诸如配置模式之类的约束。
有关比特流生成属性和定义的列表,请参阅Vivado中的此连接Design Suite用户指南:编程和调试(UG908)[参考12]。