Most generated clocks are automatically derived by the Vivado timing engine which recognizes the clock modifying blocks (CMB) and the transformation they perform on the master clocks.
In the AMD 7 series device family, the CMBs are:
- MMCM*/ PLL*
- BUFR
- PHASER*
In the AMD UltraScale device family, following are the CMBs:
- MMCM* / PLL*
- BUFG_GT / BUFGCE_DIV
- GT*_COMMON / GT*_CHANNEL / IBUFDS_GTE3
- BITSLICE_CONTROL / RX*_BITSLICE
- ISERDESE3
For any other combinatorial cell located on the clock tree, the timing clocks propagate through them and do not need to be redefined at their output, unless the waveform is transformed by the cell. In general, you must rely on the auto-derivation mechanism as much as possible as it provides the safest way to define the generated clocks that correspond to the actual hardware behavior.
create_generated_clock
command without specifying the waveform transformation. This constraint should be
located right after the constraint that defines the master clock in the constraint file.
For example, if the default name of a clock generated by a MMCM instance is net0, you
can add the following constraint to force your own name (fftClk
in the given
example):create_generated_clock -name fftClk [get_pins mmcm_i/CLKOUT0]
To avoid any ambiguity, the constraint must be attached to the source pin of the clock. For more information, see Vivado Design Suite User Guide: Using Constraints (UG903).