← Home Design Constraints (SDC)
34 Design Constraints (SDC)

Multicycle Paths — Edge Mechanics

Timing constraints — clocks, generated clocks, I/O delays, exceptions, OCV and MCMM setup

Multicycle Paths — Edge Mechanics (Deep)

Most paths must finish in one clock cycle. Some do not. Some paths are allowed more time on purpose, because the design only uses their result every few cycles. A multicycle path tells the tool to give such a path extra cycles. The idea is simple. The edge mechanics behind it are not. This chapter goes deep on which edge moves, why, and the famous hold-edge trap. We keep the format generic. We call it SDC. We never name a tool or product. We say "the timing tool" for the engine that checks paths.

The Default One-Cycle Assumption

By default, the tool assumes data launched on one edge must be captured on the very next edge. Launch on edge zero, capture on edge one. That is a single-cycle path. The setup check uses the next capture edge. The hold check uses the edge just before that capture edge, which is the launch edge itself. A multicycle path changes this assumption for a chosen path. The command set_multicycle_path tells the tool how many cycles the path is allowed. The number you give is the new capture-edge count for setup. If you say four, the capture edge moves to edge four instead of edge one.

Technical diagram

This is only legal when the design truly uses the data that slowly. Perhaps an enable fires once every four cycles. Perhaps the result feeds a register that only samples every fourth beat. If you claim multicycle on a path that is actually used every cycle, the chip fails.

Setup Multicycle Moves the Capture Edge

The setup multicycle number tells the tool how many cycles to allow. The tool pushes the capture edge later by that many cycles. A multicycle of three means the capture edge sits at edge three rather than edge one. The path now has roughly three cycles to settle instead of one. The command form is direct. The -setup keyword marks the number as the setup multiplier. The number is the new capture-edge index.

# standard SDC — portable across compliant tools
# Allow this slow path four cycles to meet setup.
set_multicycle_path 4 -setup \
-from [get_cells slow_src_reg] \
-to   [get_cells slow_dst_reg]

A worked feel with a period of 2.15 ns. A single-cycle setup would require the data 2.15 ns after launch. With a setup multicycle of four, the capture edge sits at 4 times 2.15, which is 8.60 ns after launch. The path gains 6.45 ns of room. That is the whole point of the constraint.

Setup multicycle valueCapture edge indexTime allowed (period 2.15 ns)
1 (default)12.15 ns
224.30 ns
448.60 ns

The Hold-Edge Default Trap

Here is the part that trips everyone. When you move the setup capture edge later, the hold check moves with it. By default, the hold check is measured one cycle before the new capture edge. If you

only set the setup multicycle, the hold check lands far away from the launch edge. It becomes a brutal, wrong requirement. Why does this happen? The hold check protects against data racing through too soon. By default it references the edge just before the capture edge. Move the capture edge to edge four, and the default hold edge moves to edge three. Now the hold check demands that data launched at edge zero hold valid until edge three, which is absurd and impossible.

Technical diagram

The fix is a second constraint. You must also set a hold multicycle that pulls the hold edge back to where it belongs, normally one edge before the original launch reference. For a setup multicycle of N, the matching hold multicycle is almost always N minus one.

Why Hold Multicycle Is Usually N Minus One

The logic is mechanical. Setup multicycle N pushes the capture edge N cycles out. The default hold check sits one cycle before that, at edge N minus one. You want the effective hold check to sit back at the original launch reference, edge zero. To pull the hold edge back by N minus one cycles, you set the hold multicycle to N minus one. So the pair is almost always: setup N, hold N minus one. If setup is four, hold is three. If setup is two, hold is one. This is the canonical pattern. Memorize it.

# standard SDC — portable across compliant tools
# The matching hold constraint. Setup was 4, so hold is 3.
set_multicycle_path 3 -hold \
-from [get_cells slow_src_reg] \
-to   [get_cells slow_dst_reg]
Setup multicycle (N)Matching hold multicycle (N-1)
21
32
43
65

A worked feel. Setup is four, so the capture edge is at edge four and the default hold edge is at edge three. The hold multicycle of three pulls the hold edge back by three cycles, from edge three to edge zero. Now the hold check references the launch edge, exactly as it should. The path is correctly relaxed for setup and correctly protected for hold.

-start Versus -end and Multiple Clocks

The cycle count is measured in clock cycles. But which clock? The launch clock and the capture clock may differ in period. The options -start and -end choose which clock the multicycle count is measured against. -end measures the cycles in the capture clock. This is the default for setup. -start measures the cycles in the launch clock. The choice matters only when the two clocks have different periods. With a single clock on both ends, -start and -end give the same answer.

OptionCounts cycles inDefault for
-endCapture clockSetup
-startLaunch clockHold (commonly)

For hold, the natural reference is often the launch clock, so -start is common on the hold constraint. The reason is that hold protects the launching data against the launch domain. Choosing the wrong reference clock when the periods differ shifts the edges and breaks the relaxation you intended.

# standard SDC — portable across compliant tools
# Cross-period multicycle: count setup in the capture clock, hold in the launch
clock.
set_multicycle_path 3 -setup -end \
-from [get_clocks clk_fast] -to [get_clocks clk_slow]
set_multicycle_path 2 -hold -start \
-from [get_clocks clk_fast] -to [get_clocks clk_slow]

A worked illustration of the trap avoided. Capture period is 3.40 ns. Setup multicycle three puts the capture edge at 10.20 ns. Without a hold multicycle, the default hold edge sits at 6.80 ns, demanding the launch data hold valid for two extra cycles. The hold multicycle of two pulls the hold reference back to the launch edge at 0 ns. Setup is relaxed to 10.20 ns of room, and hold is checked against the correct edge. Both checks are now sane.

Interview Q&A

Q
What does a setup multicycle path actually change? It moves the capture edge later by the

number of cycles you specify. A setup multicycle of N places the capture edge at edge N instead of edge one, giving the path roughly N cycles to meet setup instead of one.

Q
Why must a multicycle path reflect real design behavior? The relaxation is only valid if the

design genuinely uses the data that slowly, such as a result sampled only every few cycles. If you claim multicycle on a path used every cycle, the tool stops checking timing that the chip actually needs, and the chip fails.

Q
What is the hold-edge default trap? When you move the setup capture edge later, the default

hold check moves with it to one cycle before the new capture edge. That places the hold requirement far from the launch edge, creating an impossible hold check unless you add a matching hold multicycle.

Q
Why is the hold multicycle usually the setup value minus one? Setup multicycle N pushes the

default hold edge to edge N minus one. To pull the hold reference back to the original launch edge, you set the hold multicycle to N minus one. This restores the correct hold check while keeping the setup relaxation.

Q
What do -start and -end select? They choose which clock the cycle count is measured in. -

end counts cycles in the capture clock and is the default for setup. -start counts cycles in the launch clock and is common for hold. The choice only matters when launch and capture clocks have different periods.

Q
What happens if you set only the setup multicycle and forget the hold one? The hold check

is dragged to one cycle before the new capture edge, demanding the launched data stay valid for many extra cycles. This is an impossible requirement and produces a large false hold violation, so the matching hold multicycle is mandatory.

Key Takeaways

  • Setup multicycle moves the capture edge. A value of N gives the path N cycles to settle instead of the default one.
  • The hold edge follows by default. Moving setup later drags the hold check to one edge before capture, creating an impossible requirement.
  • Hold multicycle is almost always N minus one. This pulls the hold reference back to the launch edge and restores a sane hold check.
  • Always set both constraints. A setup multicycle without its matching hold constraint produces a large, false hold violation.
  • -start and -end pick the reference clock. They matter when launch and capture clocks differ in period, and choosing wrong breaks the relaxation.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

Replying to