由于xdc约束是按顺序应用的,并且基于明确的优先级规则进行优先级排序,因此必须仔细检查约束的顺序。
如果多个物理约束发生冲突,则最新约束将获胜。 例如,如果通过多个xdc文件为i / o端口分配了不同的位置(loc),则分配给该端口的最新位置优先。
vivado ide可全面了解您的设计。 要逐步验证您的约束:
1.运行相应的报告命令。
2.查看tcl控制台或“消息”窗口中的消息。
推荐的约束顺序
建议:无论是为设计使用一个还是多个xdc文件,都按以下顺序组织约束。
## timing assertions section
# primary clocks
# virtual clocks
# generated clocks
# clock groups
# bus skew constraints
# input and output delay constraints
## timing exceptions section
# false paths
# max delay / min delay
# multicycle paths
# case analysis
# disable timing
## physical constraints section
# located anywhere in the file, preferably before or after the timing constraints
# or stored in a separate constraint file
从时钟定义开始。 必须先创建时钟,然后才能将它们用于任何后续约束。 声明之前对时钟的任何引用都会导致错误,并忽略相应的约束。 在单个约束文件中以及设计中的所有xdc文件(或tcl脚本)中都是如此。
约束文件的顺序很重要。 您必须确保每个文件中的约束不依赖于另一个文件的约束。 如果是这种情况,则必须最后读取包含约束依赖项的文件。 如果两个约束文件具有相互依赖关系,则必须将它们手动合并到一个包含正确序列的文件中,或者将文件分成几个单独的文件并正确排序。
编辑约束顺序
vivado ide约束管理器将任何已编辑的约束保存回xdc文件中的原始位置,但不会保存在tcl脚本中。 任何新约束都保存在标记为目标的xdc文件的末尾。 在许多情况下,当约束集包含多个xdc文件时,目标约束文件不是列表中的最后一个文件,并且在打开或重新加载设计时不会最后加载。 因此,保存在磁盘上的约束序列可能与之前在内存中的约束序列不同。
重要信息:您必须验证存储在约束文件中的最终序列是否仍按预期工作。 如果必须修改序列,则必须通过直接编辑约束文件来修改它。 这对时序约束尤为重要。
约束文件顺序
在没有任何ip的项目流程中,所有约束都位于约束集中。 默认情况下,vivado ide中显示的xdc文件(或tcl脚本)的顺序定义了将elaborated design或synthesized design加载到内存时工具使用的读取顺序。 首先读取列表顶部的文件,最后读取底部的文件。 您只需在ide中选择文件并将其移动到列表中的所需位置即可更改顺序。
例如,在图1中,使用拖放操作将文件wave_gen_pin.xdc移动到文件wave_gen_timing.xdc之前。
figure 1: changing xdc file order in the vivado ide example
the equivalent tcl command is:
reorder_files -fileset constrs_1 -before [get_files wave_gen_timing.xdc] [get_files wave_gen_pins.xdc]
在非项目模式下,read_xdc调用的顺序决定了约束文件的计算顺序。
constraint files order with ip cores
许多ip内核随附一个或多个xdc文件。 在rtl项目中生成此类ip内核时,还会在各种设计编译步骤中使用其xdc文件。
例如,图2显示项目中的一个ip核带有一个xdc文件。
figure 2: xdc files in the ip sources
默认情况下,在用户xdc文件之前读入ip xdc文件。 以这种方式处理它允许ip创建可在xdc中引用的时钟对象。 它还允许您覆盖由ip内核设置的物理约束,因为在ip之后评估用户约束。 对于依赖于由用户或其他ip创建的时钟对象的ip核,此顺序有一个例外(例如,get_clocks -of_objects [get_ports clka])。 在这种情况下,在用户文件之后读取ip xdc。
此行为由processing_order属性控制,为每个xdc文件设置:
•early:必须先读取的文件
•normal:默认
•late:必须最后读取的文件
ip xdc将其processing_order属性设置为early或late。 没有哪个ip提供属于normal约束组的xdc文件。 对于属于同 一processing_order组的用户xdc(或tcl)文件,vivado ide中显示的相对顺序决定了它们的读取顺序。 可以通过移动vivado ide约束集中的文件或使用reorder_files命令来修改组中的顺序。
对于属于同一processing_order组的ip xdc文件,顺序由ip内核的导入或创建顺序确定。 创建项目后,无法更改此顺序。
最后,用户组和ip xdc processing_order组之间的相对顺序如下:
1.标记为early的用户约束
2.标记为early的ip约束(默认)
3.标记为normal的用户约束
4.标记为late的ip约束(包含时钟依赖性)
5.标记为late的用户约束
注意:将其processing_order设置为late(以便在用户约束后进行处理)的ip xdc文件命名为 _clocks.xdc。
下图显示了如何设置processing_order属性的示例:
figure 3: setting the xdc file processing_order example
the equivalent tcl command is:
set_property processing_order early [get_files wave_gen_pins.xdc]
建议:使用tcl控制台中的report_compile_order -constraints命令报告由工具根据上述属性确定的xdc文件读取顺序,包括is_enabled,used_in_synthesis和used_in_implementation。
changing read order
要在约束集中更改xdc文件或非托管tcl脚本的读取顺序,请执行以下操作:
1. 在“源”窗口中,选择要移动的xdc文件或tcl脚本。
2. 将文件拖放到约束集中的所需位置。
对于图1中所示的示例,等效的tcl命令是:
reorder_files -fileset constrs_1 -before [get_files wave_gen_timing.xdc] [get_files wave_gen_pins.xdc]
在非项目模式下,read_xdc或source命令的顺序决定了约束文件的读取顺序。
如果使用带有约束的ip内核,则会自动处理两组约束,如下所示:
•不依赖于时钟的约束被分组到xdc文件中,processing_order设置为early,
•依赖于时钟的约束在processing_order设置为late的xdc文件中分组。
默认情况下,用户xdc文件属于processing_order normal组。 它们在early xdc文件之后和late xdc文件之前加载。 对于每个processing_order组,ip xdc文件的加载顺序与ip sources窗口中ip核的列表顺序相同。 例如,下图显示了xdc文件附带的项目ip内核之一。
figure 4: xdc files in the ip sources
打开设计时,日志文件显示最后加载了ip xdc文件:
parsing xdc file
[c:/project_wave_gen_hdl.srcs/sources_1/ip/clk_core/clk_core.xdc] for cell 'clk_gen_i0/clk_core_i0/inst'
finished parsing xdc file
[c:/project_wave_gen_hdl.srcs/sources_1/ip/clk_core/clk_core.xdc] for cell 'clk_gen_i0/clk_core_i0/inst'
parsing xdc file
[c:/project_wave_gen_hdl.srcs/sources_1/ip/char_fifo/char_fifo/char_fifo.xdc] for cell 'char_fifo_i0/u0'
finished parsing xdc file
[c:/project_wave_gen_hdl.srcs/sources_1/ip/char_fifo/char_fifo/char_fifo.xdc] for cell 'char_fifo_i0/u0'
parsing xdc file
[c:/project_wave_gen_hdl.srcs/constrs_1/imports/verilog/wave_gen_timing.xdc]
finished parsing xdc file
[c:/project_wave_gen_hdl.srcs/constrs_1/imports/verilog/wave_gen_timing.xdc]
parsing xdc file
[c:/project_wave_gen_hdl.srcs/sources_1/ip/char_fifo/char_fifo/char_fifo_clocks.xdc ] for cell 'char_fifo_i0/u0'
finished parsing xdc file
[c:/project_wave_gen_hdl.srcs/sources_1/ip/char_fifo/char_fifo/char_fifo_clocks.xdc ] for cell 'char_fifo_i0/u0'
completed processing xdc constraints
与用户xdc文件不同,您无法直接更改属于同一processing_order组的ip xdc文件的读取顺序。 如果必须修改订单,请执行以下操作:
1. 禁用相应的ip xdc文件(is_enabled设置为false)。
2. 复制他们的内容。
3. 将内容粘贴到约束集中包含的一个xdc文件中。
4. 在需要的地方使用完整的分层网表对象路径名更新复制的ip xdc命令。 这样做是必需的,因为ip xdc约束以这样的方式编写,即它们可以作用于ip实例。
5. 查看以特殊方式处理范围约束的get_ports查询。
什么是保险丝?保险丝的种类、工作原理以及选用标准
IGBT漏电流增加有哪些原因
iPhone贴膜加壳实属多余:装饰作用大过保护
汽车控制器气密性检测,直压气密性检测设备技术
经典的滤波算法:Madgwick滤波算法
Vivado IDE全面了解XDC文件的约束顺序
开关电源中的"电流互感器"电路如何定参数?
闪迪推出全新嵌入式闪存驱动器,供给中国的OEM,容量高达64GB
放大电路中耦合电容和旁路电容如何判别?
关于Intel的量子计算计划的分析和介绍
2020打响第一枪 百度AI体系开始进行组织架构升级
解决方案 | 3D视觉引导胶管无序抓取上下料
新品 | 联讯仪器 PXIe 精密源表S2013C,高速高精度测量!
为高音质而研制,应用于英飞凌EVAL_MA5302MS参考设计中的数字功放电感
加速国产 扎根开源丨中软国际多款国产应用产品精彩亮相
光伏发电智能诊断系统的研究
可解释人工智能(XAI)在军事领域的作用
轰轰烈烈国际化,中国家电各大巨头开始崛起
无人机为我国大气治理提供重要支撑
以色列科学家正进行电子芯片首次植入老鼠大脑实验