《适用于FPGA和SOC的UlteraFast设计方法指南》(UG949)
《Vivado Design Suite 用户指南:设计分析与收敛技巧》(UG906)
《Vivado Design Suite 用户指南:使用约束》(UG903)
《Vivado Design Suite Tcl 命令参考指南》(UG835)
约束文件读取顺序,工程模式下,使用reorder_files的TCL命令来修改约束文件的顺序
时序约束总体应该遵循的顺序:
## Timing Assertions Section
# Primary clocks
# Virtual clocks
# Generated clocks
# Delay for external MMCM/PLL feedback loop
# Clock Uncertainty and Jitter
# Input and output delay constraints
# Clock Groups and Clock False Paths
## Timing Exceptions Section
# False Paths
# Max Delay / Min Delay
# Multicycle Paths
# Case Analysis
# Disable Timing
使用多个XDC文件时,必须特别留意时钟定义,并确认从属关系排序是否正确
综合约束使用的名称必须来自细化的网表(最好是端口和时序单元)。某些 RTL 信号会在细化过程中消失,并且无法为其赋予 XDC 约束。此外,由于细化后执行的各种最优化,信号线或逻辑单元将合并到各种技术原语(例如,LUT 或 DSP 块)中。要了解详细设计对象的名称,单击 Flow Navigator 中的Open Elaborated Design,然后浏览您感兴趣的层级。
所有经细化的网表对象或层级均可通过使用 DONT_TOUCH、KEEP、KEEP_HIERARCHY 或 MARK_DEBUG 约束来保留,但存在时序或面积 QoR 劣化的风险。
最后,某些约束可能存在冲突而不被综合所认可。例如,如果在跨多个层级的网表上设置 MAX_FANOUT 属性,并且使用 DONT_TOUCH 保留部分层级,那么将限制或完全阻止扇出最优化。
定义时序约束四个步骤:
前 2 个步骤与时序断言有效有关,期间将从时钟波形和 I/O 延迟约束中衍生出默认时序路径要求。
在第 3 个步骤中,将对至少共享 1 条逻辑路径的异步或专属时钟域之间的关系进行审核。根据关系的性质,可输入时钟组或伪路径约束以忽略这些路径上的时序分析。
最后一个步骤对应于时序例外,设计人员可在此判定如何更改默认时序路径要求,包括利用特定约束来忽略、放宽或收紧时序要求。
定义时钟约束
时钟必须首先完成定义,方可供其它约束使用。时序约束创建流程的第一步是明确必须定义哪些时钟,以及这些时钟必须定义为“primary clock”(基准时钟)还是“generated clock”(生成时钟)。使用特定名称定义时钟(-name 选项)时,必须验证该时钟名称未被任何其它时钟约束或现有自动生成时钟占用。赛灵思建议避免覆盖时钟定义。
在设计中可通过“Clock Networks”(时钟网络)报告和“Check Timing”(检查时序)报告来识别未约束的时钟源。
检查设计是否正确约束
在查看时序结果是否存在违例之前,应确保设计中的每个同步端点都已正确约束。
运行 check_timing 可识别未约束的路径。此命令可单独运行,但也可随 report_timing_summary 一起运行。此外,report_timing_summary 还包含“Unconstrained Paths”(未约束的路径)部分,其中已定义的源或目标时序时钟会列出不含时序要求的 N 条逻辑路径。N 由 -max_path 选项控制。
对设计实现完全约束后,请运行 report_methodology 命令并复查 TIMING 和 XDC 检查,以识别非最优化约束,此类约束可能导致时序分析不完全准确,并导致硬件中时序裕度 (timing margin) 发生变化。要识别并纠正不现实的目标时钟频率或者建立路径要求,请使用 report_qor_assessment 命令。
创建基准时钟:
基准时钟是指用于为设计定义时序参考的时钟,而时序引擎可利用基准时钟衍生出时序路径要求以及与其它时钟的相位关系。主时钟插入延迟的计算范围是从时钟源点(用于定义时钟的驱动管脚/端口)到时序单元(作为时钟扇出目标)的时钟管脚。
因此,重要的是在对应于设计边界的对象上定义基准时钟,以便准确计算其延迟并间接计算其偏差。
没有回复内容