同步 CDC - 2023.2 简体中文

适用于 FPGA 和 SoC 的 UltraFast 设计方法指南 (UG949)

Document ID
UG949
Release Date
2023-11-29
Version
2023.2 简体中文

当设计的时钟之间包含同步 CDC 路径,并且这些时钟源自相同 MMCM/PLL 时,您可使用如下技巧来更好地控制时钟插入延迟和偏差,从而控制这些路径上的裕量。

重要: 如果 CDC 路径位于源自不同 MMCM/PLL 的时钟之间,那么跨 MMCM/PLL 的时钟插入延迟更难以控制。在此情况下,AMD 建议您将这些时钟域交汇作为异步时钟来处理并执行相应的设计更改。

如果 2 个时钟源自相同 MMCM/PLL 的不同输出管脚,那么对这 2 个时钟之间的路径进行时序约束时,MMCM/PLL 相位误差会导致路径的时钟不确定性增加。对于使用高时钟频率的设计,相位误差可能导致建立时间和保持时间的时序收敛出现问题。

下图显示了含相位误差和不含相位误差的路径示例。路径 1 为 CDC 路径,此路径由连接到相同 MMCM 输出的 2 个缓冲器进行时钟设置,并且不含相位误差。路径 2 由源自 2 个不同 MMCM 输出的 2 个时钟进行时钟设置,并且包含相位误差。

图 1. MMCM 和相位误差

当源自相同 MMCM/PLL 的 2 个同步时钟具有简单的周期比 (/2 /4 /8) 时,可以使用连接到 2 个 BUFGCE_DIV 缓冲器的单个 MMCM/PLL 输出来防止 2 个时钟域之间出现相位误差。BUFGCE_DIV 缓冲器执行时钟分频 (/1 /2 /4 /8)。虽然可采用其他比率 (/3 /5 /6 /7),但这需要修改时钟占空比,导致混合时钟沿时序路径变得更为困难。

注释: 由于 BUFGCE 和 BUFGCE_DIV 没有相同的单元延迟,因此 AMD 建议针对 2 个同步时钟使用相同的时钟缓冲器(2 个均采用 BUFGCE 缓冲器或 2 个均采用 BUFGCE_DIV 缓冲器)。

下图显示了 2 个 BUFGCE_DIV,这 2 个缓存分别将 CLKOUT0 时钟除以 1 和 2。

重要: 如果并行 BUFGCE_DIV 单元中设置的 BUFGCE_DIVIDE 属性值大于 1,那么为确保此类单元之间的时序约束安全,这 2 个缓冲器必须使用相同使能信号 (CE) 和相同复位信号 (RST)。否则,在硬件中分频后的时钟之间可能出现相移,而 Vivado 工具不会报告此现象。
图 2. MMCM 同步 CDC,其中 BUFGCE_DIV 已连接到 1 个 MMCM 输出

要在源自相同 MMCM 或 PLL 的多个时钟之间自动实现平衡,请在需平衡的时钟缓冲器所驱动的信号线上设置相同的 CLOCK_DELAY_GROUP 属性值。以下是提供的附加建议:

  • 避免在过多时钟上设置 CLOCK_DELAY_GROUP 约束,因为这会给时钟布局器施压,导致出现次优解决方案或误差。
  • 复查“Timing Summary Report”(时序汇总报告)中的关键同步 CDC,以判定哪些时钟必须匹配延迟以满足时序约束要求。
  • 对于具有完全相同的时序拓扑结构并且时序要求较为严格的同步时钟组,请限制使用 CLOCK_DELAY_GROUP。
    重要: AMD 建议使用 Clocking Wizard 来创建最优化时钟结构,此结构将配合相关时钟分组约束混用 BUFGCE 和 BUFGCE_DIV。