What does set_output_delay do?
From PDVerse STA Mentor Guide, part of the pdVerse Mentor Guide
Short Answer
set_output_delay (SDC) tells the tool how much time must be left over, after a signal leaves the chip's output port, for the board and the receiving device's own setup or hold needs. Like set_input_delay, it's a timing assertion the tool uses for its math, not a delay it physically inserts.
Technical Explanation
This command constrains the far end of the chip boundary, the mirror image of what set_input_delay does at the near end.
- What it models. A downstream chip on the board needs the signal to arrive before its own capturing clock edge, and to stay stable a bit after.
set_output_delayreserves that needed time on the far side, so the internal path budget shrinks by exactly that amount. - Basic syntax:
# [SDC] constraints.sdc
set_output_delay -max 1.4 -clock EXT_CLK [get_ports data_out]
set_output_delay -min -0.2 -clock EXT_CLK [get_ports data_out]- -max feeds the setup check on the reg2out path โ it's the time the downstream device needs before its own clock edge, subtracted from the internal budget.
- -min feeds the hold check and can legitimately be negative, if the interface specification calls for it โ the sign has to match how the downstream device's own hold requirement was defined.
- A virtual clock covers a receiver with no on-chip clock reference. If the downstream device runs off its own separate oscillator, defining a virtual clock with
create_clock(no port or pin attached) and referencing it here gives the tool a timing frame for that interface without pretending the external clock is part of this design.
Common Mistake
- The trap: entering a positive value for the minimum output delay when the receiving device's interface spec actually calls for a negative hold requirement.
- Positive numbers feel like the natural default, since most delay values in a constraint file are positive.
- Getting the sign wrong makes the tool's hold check either too strict or, worse, silently too lenient โ it's worth checking the interface specification's sign convention directly instead of guessing.
Follow-up Question & Model Response
How does set_output_delay interact with a virtual clock?
Candidate Model Response: The virtual clock stands in for a clock that exists on the receiving device but has no pin or port anywhere in this design. Defining it with create_clock and no attached object gives the tool a named timing reference with a period and phase, and referencing that virtual clock's name in set_output_delay lets the tool compute a correct required time at the output port โ exactly as if the real external clock had been visible to the design, without ever pretending the design actually contains it.
Practical Example
On a high-speed SPI master interface, set_output_delay -max 1.8 -clock SPI_CLK [get_ports spi_mosi] reserves 1.8 ns of setup margin for an external flash memory chip reading that same signal, ensuring the internal path driving spi_mosi finishes early enough to meet the flash's own timing requirement.
Complete STA Handbook
Master Signoff-Ready Static Timing Analysis
Get the complete 10-chapter STA handbook covering setup/hold margins, clock modeling, OCV/POCV, crosstalk noise, and PrimeTime closure.
Offline PDF Bundle
Want all 1109 questions offline?
Get the complete 4-book PDF bundle (PnR, STA, MMMC, Low Power) with a clickable table of contents - no ads, no internet needed.

Continue practising