Using the CLOCK_DEDICATED_ROUTE Constraint - 2024.1 English

Versal Adaptive SoC Hardware, IP, and Platform Development Methodology Guide (UG1387)

Document ID
UG1387
Release Date
2024-06-19
Version
2024.1 English

The CLOCK_DEDICATED_ROUTE constraint is typically used when driving from a clock buffer in one clock region to an MMCM/XPLL/DPLL in another clock region. By default, the CLOCK_DEDICATED_ROUTE constraint is set to TRUE, and the buffer-MMCM/XPLL/DPLL pair must be placed in the same clock region.

Important: The CLOCK_DEDICATED_ROUTE values of BACKBONE and ANY_CMT_COLUMN supported in previous architectures are not supported in Versal devices. In Versal devices, you can use the following CLOCK_DEDICATED_ROUTE values: SAME_CMT_ROW and ANY_CMT_REGION. Before updating your constraints, AMD recommends reviewing your clocking topology placement, because the clocking in previous architectures is strictly columnar.

The following table summarizes the different CLOCK_DEDICATED_ROUTE constraint values, use, and behavior.

Note: Apply the ANY_CMT_COLUMN and SAME_CMT_COLUMN constraints on the net of the global clock buffer only.
Table 1. Versal Device CLOCK_DEDICATED_ROUTE Constraint Summary
Value Use Behavior
TRUE Default value on clock nets

Global clock buffer and MMCM/XPLL/DPLLs must be placed in the same clock region.

This value ensures the net is routed using only global clock resources.

SAME_CMT_COLUMN

Net driven by a BUFG_GT global clock buffer or a global clock buffer in an HDIO bank

Examples:

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

DPLLs must be placed in a clock region in the same vertical column.

This value ensures the net is routed using only global clock resources.

For optimal results, AMD recommends using a LOC constraint on the DPLL to control placement of the DPLL within in the same vertical column.

SAME_CMT_ROW

Net driven by a global clock buffer

 

Examples:

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

MMCM/XPLL/DPLLs can be placed in any horizontal clock region row with available resources.

This value ensures the net is routed using only global clock resources.

For optimal results, AMD recommends using a LOC constraint on the MMCM/XPLL/DPLL to control placement of the MMCM/XPLL/DPLL within the horizontal clock region row of the device.

ANY_CMT_REGION

Net driven by a global clock buffer

 

Examples:

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

MMCM/XPLL/DPLLs can be placed in any clock region with available resources.

This value ensures the net is routed using only global clock resources.

For optimal results, AMD recommends using a LOC constraint on the MMCM/XPLL/DPLL to control placement of the MMCM/XPLL/DPLL within the device.

FALSE

Clock net not driven by a global clock buffer but part of the clock network (for example, nets driven by the output of an IBUF or nets directly connected to output clock pins of an MMCM)

 

Examples:

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

Net is routed using fabric and global clock resources.

This can adversely affect the timing characteristics of the clock network, such as jitter and skew.

Important: For Versal devices, FALSE must only be used when a clock normally routed with global clock resources needs to be routed with fabric resources for special design reasons.

Driving MMCMs/XPLLs/DPLLs Between Row-Aligned XPIO Clock Regions

When driving from a clock buffer in one XPIO clock region to an MMCM/XPLL/DPLL in a row-aligned XPIO clock region that is not adjacent, you must set the CLOCK_DEDICATED_ROUTE constraint to SAME_CMT_ROW. This prevents implementation errors and ensures that the clock is routed with global clock resources throughout the XPIO clock regions. The following example and figure show a clock buffer driving two DPLLs in non-adjacent XPIO clock regions.

set_property CLOCK_DEDICATED_ROUTE SAME_CMT_ROW [get_nets -of [get_pins BUFG_inst/O]]
set_property LOC DPLL_X4Y0 [get_cells DPLL_inst_1]
set_property LOC DPLL_X11Y0 [get_cells DPLL_inst_2]
Figure 1. CLOCK_DEDICATED_ROUTE Constraint Set to SAME_CMT_ROW

Driving DPLLs Between Clock Regions Not Row-Aligned

For devices in which the DPLL is available in the HDIO, you must set the CLOCK_DEDICATED_ROUTE constraint to ANY_CMT_REGION in the following cases:

  • When driving from a clock buffer in an XPIO clock region to a DPLL in an HDIO clock region
  • When driving from a clock buffer in an HDIO clock region to an MMCM/XPLL/DPLL in an XPIO clock region

This prevents implementation errors and ensures that the clock is routed with global clock resources throughout the device. The following example shows a clock buffer from an XPIO clock region driving two DPLLs where one DPLL is in an XPIO clock region and the other DPLL is in an HDIO clock region.

set_property CLOCK_DEDICATED_ROUTE ANY_CMT_REGION [get_nets -of [get_pins BUFG_inst/O]]
set_property LOC DPLL_X4Y2 [get_cells DPLL_inst_1]
set_property LOC DPLL_X12Y0 [get_cells DPLL_inst_2]
Figure 2. CLOCK_DEDICATED_ROUTE Constraint Set to ANY_CMT_REGION