IntermediateQuestion 46 of 112Source: Synopsys PrimeTime User Guide: Clock Source Latency

How do you model early and late clock source latency with set_clock_latency?

From PDVerse STA Mentor Guide · pdVerse Mentor Guide

Short Answer

Source latency is the travel time from a clock's true origin — often an off-chip PLL — to the point in the design where you defined it with create_clock, and the tool cannot see that part of the path on its own. The set_clock_latency -source command with -early and -late lets you enter that travel time as a range, so setup and hold checks can each use whichever end of the range is worse for that specific check.

Technical Reference DiagramHow do you model early and late clock source latency with set_clock_latency?
A clock path diagram showing an off-chip PLL feeding a clock port, with a labeled range from 1.1ns (early) to 1.9ns (late) source latency, and setup/hold checks each pulling from a different end of that range.

Technical Explanation

Clock latency is the time it takes the clock signal to travel from its true origin to where it enters the design being analyzed, and early/late values let you model that travel time as a range instead of one fixed number.

  • Source latency covers the part of the clock path the tool cannot see. Anything before the clock reaches the port or pin named in create_clock (SDC) — an off-chip PLL, a board trace, a clock buffer chip — is outside the netlist, so the tool needs it typed in by hand.
  • set_clock_latency -source (SDC) is how that number gets entered. Without it, the tool assumes the clock reaches its defined point with zero extra delay, which is rarely true once you count real board and PLL delay.
  • -early and -late model the range that latency can actually take. A PLL's output delay is never a single fixed number in silicon — it varies with voltage, temperature, and process — so the tool lets you bound it instead of forcing one estimate.
  • The setup check uses the late value and the hold check uses the early value, or the reverse, depending on which edge is being stressed — the tool picks whichever combination of early and late latency produces the worst-case result for each specific check, the same way it does for on-chip variation.
  • Skipping the range and entering only one flat latency value hides exactly the variation the split is meant to model — a single number can't represent a PLL whose output delay swings by tens of picoseconds across corners.
  • Why it matters: on a design with a real external clock source, an unrealistic single-value latency can make a marginal path look safely positive in one direction and quietly starve it in the other.

Common Mistake

The Trap: entering a single flat source latency value instead of an early/late range, because it seems simpler.

  • A single value looks fine in a quick setup check, but it silently assumes the PLL's delay never varies, which is not true across voltage and temperature corners.
  • A hold check run against that same flat value can miss a real failure mode, since hold needs the early-side estimate and setup needs the late-side estimate, and one flat number cannot supply both correctly.

Follow-up Question & Model Response

Your board team says the PLL's output delay is 1.5ns typical but can vary by plus or minus 0.4ns across conditions. How would you enter that?

Candidate Model Response: I would set the early value to 1.1ns and the late value to 1.9ns using set_clock_latency -source -early 1.1 [get_clocks CLK] and set_clock_latency -source -late 1.9 [get_clocks CLK] (SDC), rather than entering 1.5ns once. That way the setup check, which wants the worst-case largest delay, picks up the 1.9ns late value, while the hold check, which wants the worst-case smallest delay, uses the 1.1ns early value. Using only 1.5ns for both would understate the setup risk and overstate the hold margin at the same time.

Practical Example

An off-chip PLL feeds CLK into the design at a nominal 1.5ns source latency, with the board team specifying plus or minus 0.4ns variation. The team runs set_clock_latency -source -early 1.1 [get_clocks CLK] and set_clock_latency -source -late 1.9 [get_clocks CLK] (SDC). A setup-critical path that looked fine at 1.5ns shows a 220ps tighter margin once the late value of 1.9ns is applied, catching a real risk that the flat single-value model had hidden.

Complete STA Handbook

Get the complete 10-chapter STA handbook covering setup/hold margins, clock modeling, OCV/POCV, crosstalk noise, and PrimeTime closure.

Timing Constraints (SDC) Handbook — nine chaptersSDC ConstraintsNine chapters on clocks, exceptions, and constraint linting. →