The path below is between 2 flip-flops that are enabled every two cycles. Define a multicycle path to skip the first destination edge and capture on the second.
The following constraint establishes a new setup relationship:
set_multicycle_path 2 -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]
Refer to Performing Timing Analysis in the Vivado Design Suite User Guide: Design Analysis and Closure Techniques (UG906) for hold derivation details. When you change setup, the tool also shifts the hold relationships to match the new edges.
As shown in the figure, when you move the setup check to the second capture edge, the tool shifts the hold check one period earlier.
The following figure shows the updated setup and hold after both constraints.
Holding data0_reg for one cycle is unnecessary because of the clock
enable. Restore the original hold relationship between the same launch and capture
edges. Add a second multicycle constraint that modifies only the hold check:
set_multicycle_path 1 -hold -end -from [get_pins data0_reg/C] \
-to [get_pins data1_reg/D]
The -end option with -hold moves capture edges
backward.
-end is optional. Moving capture edges backward
matches moving launch edges forward. To simplify, the next two examples omit
-end.The following figure shows the updated setup and hold after both constraints.
To summarize, use these constraints for a multicycle of two between
data0_reg/C and data1_reg/D:
set_multicycle_path 2 -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]
set_multicycle_path 1 -hold -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]
For a multicycle with a setup multiplier of four:
set_multicycle_path 4 -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]
set_multicycle_path 3 -hold -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]