Example: Setup=3 (-start) / Hold=2 - 2022.1 English

Vivado Design Suite User Guide: Using Constraints (UG903)

Document ID
UG903
Release Date
2022-06-01
Version
2022.1 English

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.

Table 1. To define a multicycle path with a Setup of N
Scenario Multicycle Constraints
Same clock domain or between synchronous clock domains with same period and no phase-shift
set_multicycle_path N -setup -from CLK1 -to CLK2 
set_multicycle_path N-1 -hold -from CLK1 -to CLK2
Between SLOW-to FAST synchronous clock domains
set_multicycle_path N -setup -from CLK1 -to CLK2 
set_multicycle_path N-1 -hold -end -from CLK1 -to CLK2
Between FAST-to SLOW synchronous clock domains
set_multicycle_path N -setup -start -from CLK1 -to CLK2 
set_multicycle_path N-1 -hold -from CLK1 -to CLK2
Note: The get_clocks command has been omitted in the previous table to simplify the expressions.