通常从时钟区域中某个时钟缓冲器驱动到另一个时钟区域中的 MMCM 或 PLL 时会使用 CLOCK_DEDICATED_ROUTE 约束。默认情况下,CLOCK_DEDICATED_ROUTE 约束设置为 TRUE,并且缓冲器/MMCM 或 PLL 对必须布局在相同时钟区域内。
下表汇总了不同 CLOCK_DEDICATED_ROUTE 约束值、使用方式和行为。
值 | 用途 | 行为 |
---|---|---|
TRUE | 时钟信号线上的默认值 |
全局时钟缓冲器和 MMCM/PLL 必须位于相同的时钟。 该值用于确保仅使用全局时钟资源对信号线进行布线。 |
SAME_CMT_COLUMN (BACKBONE) |
全局时钟缓冲器驱动的信号线 示例:
|
MMCM/PLL 必须居于相同垂直列中的时钟中。 该值用于确保仅使用全局时钟资源对信号线进行布线。 为实现最佳结果,AMD 建议在 MMCM/PLL 上使用 LOC 约束控制相同垂直列中 MMCM/PLL 的布局。 |
ANY_CMT_COLUMN |
全局时钟缓冲器驱动的信号线 示例:
|
MMCM/PLL 可布局在任何有可用资源的时钟中。 该值用于确保仅使用全局时钟资源对信号线进行布线。 为实现最佳结果,AMD 建议在 MMCM/PLL 上使用 LOC 约束控制器件内 MMCM/PLL 的布局。 |
FALSE |
时钟信号线不受全局时钟缓冲器驱动,但受时钟信号线的一部分驱动(例如,受 IBUF 输出驱动的信号线,或直接连接到 MMCM 的输出时钟管脚的信号线) 示例:
|
信号线是使用互连结构和全局时钟资源完成布线的。 这会对时钟网络的时序和性能产生负面影响。 重要: 对于 UltraScale 器件,仅当正常情况下使用全局时钟资源布线的时钟因特殊设计原因而需采用互连结构资源进行布线时,才能使用 FALSE 值。
|
垂直相邻的时钟区域的约束示例
从某个时钟区域中的时钟缓冲器驱动到垂直相邻的时钟区域中的 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]
非垂直相邻时钟区域的约束示例
从时钟缓冲器驱动到另一个非垂直相邻的时钟区域时,必须将 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]