What is a virtual clock, and why would you create one that doesn't drive any pin?
From PDVerse STA Mentor Guide · pdVerse Mentor Guide
Short Answer
A virtual clock is a clock the designer defines with create_clock (SDC) but never attaches to any real port or pin in the design. It exists only so the tool has a timing reference for signals that talk to an off-chip device on a clock the chip itself does not generate.
Technical Explanation
Every I/O delay needs a clock to be relative to, even when that clock is not really inside the chip.
- Why a normal clock will not do:
set_input_delayandset_output_delay(SDC) both require a-clockargument, and that clock must already exist somewhere in the design before you can reference it. - What makes a clock virtual: you call
create_clock(SDC) with a name but noget_ports/get_pinsargument, so the clock has a period and a waveform, but no real source anywhere in the netlist. - Where it is used: a chip talking to an external memory or another chip over a shared bus often needs its I/O timed against the sender's clock edge, which physically lives off-chip and was never brought onto this design's clock tree.
- It never gets skew or latency from real hardware: because nothing in the design drives it, a virtual clock has no clock tree, so any latency it needs must be typed in by hand with
set_clock_latency(SDC). - It behaves like any other clock for I/O timing: once created,
set_input_delay -clock vclk(SDC) andset_output_delay -clock vclk(SDC) work exactly the same as they would against a real, physical clock.
Common Mistake
The Trap: assuming a virtual clock must be missing from the design because report_clock_timing (PT) shows no propagation for it.
- A designer sees no clock tree data for the virtual clock and assumes the SDC file has an error, when the missing tree is expected — the clock was never meant to have one.
- Trying to "fix" it by attaching the virtual clock to a real pin breaks the intent, since that pin then gets treated as an actual clock source it was never meant to be.
Follow-up Question & Model Response
If a virtual clock has no source pin, how does the tool know its edges even exist? Candidate Model Response: The tool takes the period and waveform values given to create_clock (SDC) at face value — it does not need a physical source to compute edge times, only the numbers the designer supplies. Those edges are then used purely as a reference for comparing against I/O delay values on real ports. The virtual clock never appears anywhere else in the design, so it never contributes to internal setup or hold checks, only to the I/O interface it was created for.
Practical Example
A chip's output bus is captured by an external ASIC on a 200MHz clock the external device generates. The designer writes create_clock -name vclk -period 5 with no port argument, then set_output_delay 1.2 -clock vclk [get_ports DATA_OUT*] to constrain the interface against that off-chip edge.
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.

Continue practising