由于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文件命名为<IP_NAME> _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查询。

【 Vivado 】XDC文件的约束顺序相关推荐

  1. Vivado XDC文件

    前言 可以参考<Xilinx FPGA权威设计指南>,还有Xilinx提供的手册,如下图所示.文后的参考文献也不错,值得阅读. 1.UCF/XDC常用命令 UCF约束到XDC命令之间的映射 ...

  2. FPGA Vivado XDC 约束文件编写方式语法笔记

    参考手册: UG625:https://china.xilinx.com/support/documentation/sw_manuals/xilinx14_7/cgd.pdf UG903:https ...

  3. vivado xdc时钟约束

    XDC是Xilinx Design Constraints的简写,但其基础语法来源于业界统一的约束规范SDC(最早由Synopsys公司提出,故名Synopsys Design Constraints ...

  4. VIVADO XDC约束注意事项

    原文地址:http://xilinx.eetrend.com/d6-xilinx/blog/2016-06/10241.html 在ISE时代,使用的是UCF约束文件.从Vivado开始,XDC成了唯 ...

  5. vivado路径最大时钟约束_Vivado使用误区与进阶系列(五)XDC约束技巧之I/O篇(下)...

    XDC约束技巧之CDC篇 继<XDC 约束技巧之 I/O 篇(上) >详细描述了如何设置 Input 接口约束后,我们接着来聊聊怎样设置 Output 接口约束,并分析 UCF 与 XDC ...

  6. (07)Vivado约束顺序

    (07)Vivado约束顺序 1 文章目录 1)文章目录 2)时序约束引言 3)FPGA时序约束课程介绍 4)Vivado约束顺序 5)技术交流 6)参考资料 2 时序约束引言 1)什么是静态时序分析 ...

  7. vivado 如何添加时序约束

    vivado 如何添加时序约束 一个 FPGA 设计除了管脚分配以外,还有一个重要的约束,那就是时序约束,这里通过向 导方式演示如果进行一个时序约束 点击"Run Synthesis&quo ...

  8. Vivado 不同文件的含义

    1..dcp文件:每个过程都会产生特定格式的文件,就是ise中的网表文件和约束文件的集合,只不过在vivado中被集合在了一个文件里. 2..xdc文件,这个是vivado的约束文件,vivado的约 ...

  9. vivado 亚稳态_VIVADO时序约束及STA基础

    一.前言 无论是FPGA应用开发还是数字IC设计,时序约束和静态时序分析(STA)都是十分重要的设计环节.在FPGA设计中,可以在综合后和实现后进行STA来查看设计是否能满足时序上的要求.本文阐述基本 ...

最新文章

  1. bzoj1854: [Scoi2010]游戏
  2. iBatis.Net实现返回DataTable和DataSet对象
  3. 常用函数式接口之Supplier
  4. 2017蓝桥c语言真题,[蓝桥杯][2017年第八届真题]发现环 (C语言代码)------------C语言——菜鸟级...
  5. 漫步最优化十八——点到集合的映射
  6. 计算机未来发展趋势四个字概括,授课教师-世界大学城.doc
  7. git使用git push 命令跳出remote: Permission to Aname denied to usernameB 的问题
  8. 什么是计算机嵌套分类汇总,excel嵌套分类汇总 Excel表格中创建嵌套分类汇总和查看嵌套分类汇总明细的方法...
  9. js的ctrl+s保存功能
  10. linux下巧用tail命令 创建自解压tar文件
  11. C语言课程设计学生考勤管理系统
  12. python合并大量ts文件_python合并ts视频
  13. npp++常用的匹配正则表达式
  14. Ae 入门系列之十二:形状动画
  15. 【读过的书】《蔡康永的说话之道》
  16. 清明出行之高德路况思考
  17. 第三人称计算机获奖感言,个人获奖感言50字第三人称
  18. 贵大计算机专业高考分数线,2020贵州大学录取分数线一览表
  19. JADE学习笔记2 :Agent的创建和运行
  20. python中的copy.deepcopy()

热门文章

  1. Redhat5.4 LAMP配置
  2. 小白重装系统教程_怎么一键重装系统:安装win10系统详细图文教程
  3. 四因素三水平正交试验表_机制砂中不同因素对混凝土性能影响研究
  4. 计算机伦理问题案例分析,基于网络环境的案例教学在《计算机伦理学》中的实践研究...
  5. 如何写sybase sql脚本文件_写一个删除lock文件的skill脚本
  6. 计算机中算术逻辑单元负责,算术逻辑单元
  7. java整形超过,Java整形溢出处理机制。
  8. python把nan值去掉_python – Keras Neural Nets,如何删除输出中的NaN值?
  9. python sanic_sanic中文文档
  10. 骑摩托的蒙娜丽莎 - 曼妙风骚的花式慢跑算法