同步 CDC - 2023.2 简体中文

Versal 自适应 SoC 硬件、IP 和平台开发方法指南 (UG1387)

Document ID
UG1387
Release Date
2023-11-15
Version
2023.2 简体中文

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

重要: 对于位于源自不同 MMCM/XPLL/DPLL 的时钟之间的 CDC 路径,MMCM/XPLL/DPLL 之间的时钟插入延迟更难以控制。在此情况下,AMD 建议您将这些时钟域交汇作为异步时钟来处理并执行相应的设计更改。
重要: 如果 CDC 路径位于输入时钟和输出时钟之间,或者位于两个或两个以上 MMCM 或 XPLL 原语的输出时钟之间,请访问此链接以参阅 Versal 自适应 SoC 时钟资源架构手册(AM003) 中的相应内容,确保原语配置允许时钟间的安全定时。如需了解 DPLL 的信息,请访问此链接以参阅 Versal 自适应 SoC 时钟资源架构手册(AM003) 中的相应内容。

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

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

图 1. MMCM 和相位误差

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

下图显示了单个 MBUFGCE 单元,此单元在 O1 管脚上将 CLKOUT0 时钟除以 1,在 O2 管脚上将此时钟除以 2。MBUFGCE 单元无需在逻辑输出信号线上增加时钟约束,因为此信号线在单一时钟轨道上布线,直至达到叶级分频器为止。

图 2. 同步 CDC,其中 MBUFGCE 连接到 1 个 MMCM 输出

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

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

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

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