Relaxing Setup While Maintaining Hold - Relaxing Setup While Maintaining Hold - 2026.1 English - UG903

Vivado Design Suite User Guide: Using Constraints (UG903)

Document ID
UG903
Release Date
2026-07-01
Version
2026.1 English

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.

Figure 1. Registers Enabled Every Two Cycles

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.

Important: If new hold requirements become too aggressive, timing closure gets harder. Relax the hold requirement if it is safe for the design.

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.

Figure 2. Multicycle Path: Relaxing Setup Only

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.

Note: When launch and capture clocks share identical waveforms, -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.

Figure 3. Multicycle Path: Relaxing Setup and Hold

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]
Figure 4. Multicycle Path with Setup Multiplier of Four (4)