Multicycle Paths and Clock Phase-Shift - Multicycle Paths and Clock Phase-Shift - 2026.1 English - UG903

Vivado Design Suite User Guide: Using Constraints (UG903)

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

Sometimes you can define a timing constraint between two clock domains that share a period but include a phase shift. In these cases, understand the default setup and hold relationships the timing engine uses. If you do not adjust them carefully, the phase shift can over-constrain logic between the two domains.

Figure 1. Multicycle Paths and Clock Phase-Shift

For example, assume the following:

  • The two clocks, CLK1 and CLK2, share the same waveform.
  • CLK2 shifts by +0.3 ns.

The timing engine evaluates all edges on both waveforms. It selects launch and capture edges that produce the stricter setup constraint. Because of the phase shift, the engine’s chosen setup and hold edges can differ from your intent.

Figure 2. Default Scenario of Phase-Shift Without Multicycle Path

In this example, the phase shift creates a 0.3 ns setup requirement. Achieving timing closure becomes nearly impossible. The hold check is −3.7 ns, which is too lenient.

The setup and hold edges must be adjusted to match your intent. This is done by adding a multicycle constraint with a setup multiplier of two:

set_multicycle_path 2 -setup -from [get_clocks CLK1] -to [get_clocks CLK2]

This moves the setup capture edge forward by one cycle. The hold edge derives from the setup change. You do not need to specify it.

Figure 3. Default Scenario of Positive Phase-Shift: Setup 2 (-end), Hold Moved Accordingly

With a negative phase shift, launch and capture edges for setup and hold resemble the single-domain case.

Figure 4. Default Scenario of Negative Phase-Shift

For a negative phase shift, you typically do not need a multicycle constraint. Use one only if the shift is large and edges require adjustment to keep realistic requirements.