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]