TIMING-47:同步时钟之间的伪路径、异步时钟组或仅最大延迟数据路径约束
在 <clock_group> 与 <clock_group> 这两个时钟之间设置了 <message_string> 时序约束(请参阅 VivadoIDE 的“Timing Constraint”窗口中的约束位置 <message_string>)。使用 set_false_path、
set_clock_groups 或 set_max_delay -datapath_only 屏蔽整个同步时钟域可能导致硬件故障。
描述
在同步时钟域交汇上不应存在 false_path、set_clock_group -asynchronous 或 set_max_delay -
datapath_only 约束。如果存在此类约束,将无法正确完成路径定时,验收时间将不准确,并且设计在硬件中可能失败。
解决方案
移除同步时钟之间应用的 false_path、set_clock_group -asynchronous 或 set_max_delay -
datapath_only 约束。如果时钟应为异步时钟,请添加具有适当同步电路的异步时钟约束,用于异步时钟域交汇。要了解哪个时钟域交汇属于同步或异步,请参阅时钟交互报告。
示例
在以下示例中,使用 2 项 MMCM 输出来生成时钟。BUFGCE_DIV 输出具有可分频时钟 clk1,它具有来自 CLKOUT0 的主时钟。CLKOUT1 具有生成时钟 clk2。如果添加诸如 set_clock_groups -asynchronous -group [get_clocks clk1] -group [get_clocks clk2] 之类的约束,那么其中将包含 TIMING-47 警告。

由于 clk1 和 clk2 都来自相同 MMCM,因此被视为彼此同步。跨这些域的数据也被视为位于同步 CDC 下。因此,无需添加 set_clock_groups -asynchronous。
TIMING-48:在锁存器输入上存在“仅最大延迟数据路径”约束
在锁存器 <pin_name> 的输入上检测到“仅最大延迟数据路径”约束(请参阅 Vivado IDE 的“Timing Constraint” (时序约束)窗口中的约束位置 <position>)。此约束通常用于异步时钟域交汇,可能触发不现实的锁存器时间借用,从而影响下游时序路径的 QoR。
描述
最大延迟约束不应应用于锁存器的输入,因为约束会更改路径的要求,可能导致不现实的锁存器时间借用,与硬件中的行为不符。这将导致的硬件故障。
解决方案
对照硬件行为验证时序约束,如果锁存器输入上应用的仅最大延迟数据路径与硬件行为不匹配,则将其移除。
TIMING-49:来自并行 BUFGCE_DIV 的使能或复位拓扑结构不安全
如果并行 BUFGCE_DIV 单元的 BUFGCE_DIVIDE 属性均设为大于 1 的值,并且这两个单元共同驱动时钟,那么为了确保此类时钟路径上的时序安全,缓冲器 <buffer> 和 <buffer> 必须使用相同使能信号 (CE) 和相同清除信号 (CLR)。 清除信号不得连接到电源,也不得接地。否则,硬件中的分频时钟之间可能出现相移。建议使用安全时钟启动复位电路来同时复位这两个 BUFGCE_DIV 缓冲器。
描述
如果时钟拓扑结构包含并行 BUFGCE_DIV 缓冲器,并且这些缓冲器的 BUFGCE_DIVIDE>1,那么这些时钟拓扑结构必须采用公用的控制信号来防止 BUFGCE_DIV 内部状态中发生相位不明确。此类情况可能导致在不同时钟周期内发生时钟缓冲器复位,且 BUFGCE_DIV 输出存在未知的时钟关系。此设置在硬件中可能失败。下图显示了电路的正确实现。

解决方案
各并行 BUFGCE_DIV 缓冲器的 CLR 管脚都应绑定到相同信号或者由相同信号驱动。使用安全的时钟启动复位电路在硬件上执行无缝操作。在 Clocking Wizard IP 中可启用该操作。