This example assumes the following:
- A setup multiplier of three (3) is defined against the launch clock (-start).
- A hold multiplier of one (1) is defined.
Example:
set_multicycle_path 3 -setup -start -from [get_clocks CLK1] -to [get_clocks CLK2] set_multicycle_path 2 -hold -from [get_clocks CLK1] -to [get_clocks CLK2]
The consequence of defining the setup multiplier against the launch
clock (-start
) is to move the edge of the launch
clock used for setup check backward by two (2) cycles (that is, 3-1 cycles).
However, because a hold multiplier is defined against the launch clock (default
-start
option with -hold
), the edge of the launch clock that is used for the hold
relationship is moved forward by two (2) cycles.
For both setup and hold checks, the capture clock edge does not change. See the following figure.
Figure 1. Setup=3 (-start), Hold=2
Important: For a FAST-to-SLOW clock
domain crossing, define a setup multiplier of N against the launch clock (-start)
with a hold multiplier of N-1 (most common case). See the following example:
set_multicycle_path N -setup -start -from [get_clocks CLK1] -to [get_clocks CLK2]
set_multicycle_path N-1 -hold -from [get_clocks CLK1] -to [get_clocks CLK2]
The following table summarizes the previous results.
Scenario | Multicycle Constraints |
---|---|
Same clock domain or between synchronous clock domains with same period and no phase-shift |
|
Between SLOW-to FAST synchronous clock domains |
|
Between FAST-to SLOW synchronous clock domains |
|
Note: The
get_clocks
command has been omitted in the previous table to simplify
the expressions.