使用约束

Posted zhugeanran

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用约束相关的知识,希望对你有一定的参考价值。

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以指示如何路由时钟信号。

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]中的此链接。

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]。

以上是关于使用约束的主要内容,如果未能解决你的问题,请参考以下文章

使用约束

关于MySQL的检查约束不生效的问题

约束以及数据库的修改

什么是列级约束

使用代码创建约束 - 出现错误“无法同时满足约束”[重复]

以编程方式添加约束会破坏自动布局约束