使用 CLOCK_DEDICATED_ROUTE 约束 - 2023.2 简体中文

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

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

通常从时钟区域中某个时钟缓冲器驱动到另一个时钟区域中的 MMCM 或 PLL 时会使用 CLOCK_DEDICATED_ROUTE 约束。默认情况下,CLOCK_DEDICATED_ROUTE 约束设置为 TRUE,并且缓冲器/MMCM 或 PLL 对必须布局在相同时钟区域内。

注释:UltraScale 器件上针对 7 系列 CLOCK_DEDICATED_ROUTE 值使用 BACKBONE 会导致产生与 SAME_CMT_COLUMN 相同的行为。

下表汇总了不同 CLOCK_DEDICATED_ROUTE 约束值、使用方式和行为。

注释: 仅在全局时钟缓冲器的信号线上应用 ANY_CMT_COLUMN 约束和 SAME_CMT_COLUMN 约束。
表 1. UltraScale 器件 CLOCK_DEDICATED_ROUTE 约束汇总
用途 行为
TRUE 时钟信号线上的默认值

全局时钟缓冲器和 MMCM/PLL 必须位于相同的时钟。

该值用于确保仅使用全局时钟资源对信号线进行布线。

SAME_CMT_COLUMN

(BACKBONE)

全局时钟缓冲器驱动的信号线

示例:

set_property CLOCK_DEDICATED_ROUTE SAME_CMT_COLUMN \
[get_nets -of [get_pins BUFGCE_inst/O]]

MMCM/PLL 必须居于相同垂直列中的时钟中。

该值用于确保仅使用全局时钟资源对信号线进行布线。

为实现最佳结果,AMD 建议在 MMCM/PLL 上使用 LOC 约束控制相同垂直列中 MMCM/PLL 的布局。

ANY_CMT_COLUMN

全局时钟缓冲器驱动的信号线

示例:

set_property CLOCK_DEDICATED_ROUTE ANY_CMT_COLUMN \
[get_nets -of [get_pins BUFGCE_inst/O]]
set_property CLOCK_DEDICATED_ROUTE ANY_CMT_COLUMN \
[get_nets -of [get_pins BUFGCE_DIV_inst/O]]
set_property CLOCK_DEDICATED_ROUTE ANY_CMT_COLUMN \
[get_nets -of [get_pins BUFGCTRL_inst/O]]

MMCM/PLL 可布局在任何有可用资源的时钟中。

该值用于确保仅使用全局时钟资源对信号线进行布线。

为实现最佳结果,AMD 建议在 MMCM/PLL 上使用 LOC 约束控制器件内 MMCM/PLL 的布局。

FALSE

时钟信号线不受全局时钟缓冲器驱动,但受时钟信号线的一部分驱动(例如,受 IBUF 输出驱动的信号线,或直接连接到 MMCM 的输出时钟管脚的信号线)

示例:

set_property CLOCK_DEDICATED_ROUTE FALSE \
[get_nets -of [get_pins MMCME4_ADV_inst/CLKOUT0]]
set_property CLOCK_DEDICATED_ROUTE FALSE \
[get_nets -of [get_pins IBUF_inst/O]]

信号线是使用互连结构和全局时钟资源完成布线的。

这会对时钟网络的时序和性能产生负面影响。

重要: 对于 UltraScale 器件,仅当正常情况下使用全局时钟资源布线的时钟因特殊设计原因而需采用互连结构资源进行布线时,才能使用 FALSE 值。
注释: 处理 UltraScale 器件时,请将 CLOCK_DEDICATED_ROUTE 属性应用于端口直接驱动的信号线。而是改为将 CLOCK_DEDICATED_ROUTE 属性应用于 IBUF 的输出。

垂直相邻的时钟区域的约束示例

从某个时钟区域中的时钟缓冲器驱动到垂直相邻的时钟区域中的 MMCM 或 PLL 时,将 CLOCK_DEDICATED_ROUTE 设置为 BACKBONE(针对 7 系列器件)或设置为 SAME_CMT_COLUMN(针对 UltraScale 器件)即可实现最佳结果。这样可防止出现实现错误,并确保仅使用全局时钟资源对时钟进行布线。在某些情况下,布局器可以在垂直相邻时钟区域内合规布局不超过 2 个 MMCM 或 PLL,而无需设置 CLOCK_DEDICATED_ROUTE 约束。如果布局器能找到合规的解决方案以在垂直相邻时钟区域内布局 MMCM 或 PLL 而无需设置 CLOCK_DEDICATED_ROUTE 约束,那么找到的解决方案对于您的设计而言可能只是次优解决方案。以下示例和图示显示的中央时钟缓冲器在其上方或下方垂直相邻时钟区域内驱动 2 个 PLL。

set_property CLOCK_DEDICATED_ROUTE SAME_CMT_COLUMN [get_nets -of [get_pins BUFG_inst_0/O]]
set_property LOC PLLE3_ADV_X0Y0 [get_cells PLLE3_ADV_inst_0]
set_property LOC PLLE3_ADV_X0Y4 [get_cells PLLE3_ADV_inst_1]
图 1. CLOCK_DEDICATED_ROUTE 约束设置为 SAME_CMT_COLUMN

非垂直相邻时钟区域的约束示例

从时钟缓冲器驱动到另一个非垂直相邻的时钟区域时,必须将 CLOCK_DEDICATED_ROUTE 设置为 FALSE(针对 7 系列器件)或设置为 ANY_CMT_COLUMN(针对 UltraScale 器件)。这样可防止出现实现错误,并确保仅使用全局时钟资源对时钟进行布线。以下示例和图示显示了驱动与输入缓冲器不在同一个时钟区域列中的 2 个 PLL 的 BUFGCE。

set_property CLOCK_DEDICATED_ROUTE ANY_CMT_COLUMN [get_nets -of [get_pins BUFG_inst_0/O]]
set_property LOC PLLE3_ADV_X1Y0 [get_cells PLLE3_ADV_inst_0]
set_property LOC PLLE3_ADV_X1Y4 [get_cells PLLE3_ADV_inst_1]
图 2. CLOCK_DEDICATED_ROUTE 设置为 ANY_CMT_COLUMN