当设计在源自相同 MMCM/XPLL/DPLL 的时钟之间包含同步 CDC 路径时,可使用以下技巧来更好地控制这些路径上的时钟插入延迟和偏差,从而控制时序裕量。
如果 2 个时钟源自相同 MMCM/XPLL/DPLL 的不同输出管脚,那么对这 2 个时钟之间的路径进行时序约束时,MMCM/XPLL/DPLL 相位误差会导致路径的时钟不确定性增加。对于使用高时钟频率的设计,相位误差可能导致建立时间和保持时间的时序收敛出现问题。
下图显示了含相位误差和不含相位误差的路径示例。路径 1 为 CDC 路径,此路径由连接到相同 MMCM 输出的 2 个缓冲器进行时钟设置,并且不含相位误差。路径 2 由源自 2 个不同 MMCM 输出的 2 个时钟进行时钟设置,并且包含相位误差。
当源自相同 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 个 BUFGCE_DIV,这 2 个缓存分别将 CLKOUT0 时钟除以 1 和 2。
要在源自相同 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。