Example Two: Setup=3 / Hold=2 (-end) - 2023.2 English

Vivado Design Suite User Guide: Using Constraints (UG903)

Document ID
Release Date
2023.2 English

To relax the hold requirement for the previous example, the capture clock edge for the hold relationship must be moved backward by two (2) clock cycles. This is done by specifying the -end option with the set_multicycle_path -hold command:

set_multicycle_path 3 -setup -from [get_clocks CLK1] -to [get_clocks CLK2] 
set_multicycle_path 2 -hold -end -from [get_clocks CLK1] -to [get_clocks CLK2]
Tip: If -end is not specified with set_multicycle_path -hold, then the launch clock edge is instead moved forward. This does not result in the intended hold requirement.

As in Example One: Setup=3 / Hold Moved Accordingly, the setup multiplier moves the edge of the capture clock used for setup check forward by two (2) cycles (that is, 3-1 cycles).

The setup and hold relationships after the two Multicycle constraints are shown in the following figure.

Figure 1. Setup=3, Hold=2 (-end)

Important: For a SLOW-to-FAST clock domain crossing, when a setup multiplier of N is defined, define a hold multiplier of N-1 against the capture clock (-end) (most common case) as shown in the following code example.
set_multicycle_path N -setup -from [get_clocks CLK1] -to [get_clocks CLK2] 
set_multicycle_path N-1 -hold -end -from [get_clocks CLK1] -to [get_clocks CLK2]