Static Timing Analysis (STA) & Timing Closure Cheatsheet
The definitive silicon engineering handbook for static timing analysis: Liberty (.lib) models, NLDM tables, setup/hold silicon math, clock skew, OCV/CRPR, clock domain crossing (CDC), and physical design ECO timing closure across PrimeTime, Tempus, AMD Vivado, and OpenSTA.
STA Foundations & Core Mental Model
Why static timing analysis replaced gate-level dynamic simulation, the 4 timing path categories, vector-independent mathematical guarantees, and arrival vs required timing slack definitions.
STA vs Dynamic Simulation
In early VLSI design, circuits were verified using dynamic gate-level simulation by applying test vectors and simulating waveforms. For modern systems-on-chip with 50+ billion transistors, dynamic simulation requires $2^N$ input vectors—an astronomical impossibility.
Static Timing Analysis (STA) solves this by being completely input-vector independent. Instead of exercising logic functions, STA breaks the netlist into graph segments, identifies all possible signal paths, and calculates the mathematical worst-case maximum delay (for setup) and best-case minimum delay (for hold) across all operating corners in minutes.
| Characteristic | Dynamic Gate-Level Simulation | Static Timing Analysis (STA) |
|---|---|---|
| Vector Dependency | Strictly dependent on testbench stimulus vectors | Vector-independent (checks 100% of topological paths) |
| Coverage | Only paths exercised by simulation vectors | Exhaustive (100% path coverage guaranteed) |
| Execution Speed | Extremely slow (days to weeks for full SoC) | Very fast (minutes to hours for 50B transistors) |
| Functional Verification | Verifies Boolean logic correctness & timing simultaneously | Does NOT verify logic correctness; only checks propagation delay |
| False Path Risk | Naturally ignores logically impossible paths | Pessimistic: flags logically impossible paths unless constrained |
The 4 Timing Path Categories
Every timing path in a digital integrated circuit has a defined Startpoint where data is launched and an Endpoint where data is captured. Every path in the design falls into exactly one of four categories:
1. In-to-Reg: [Primary Input Port] ──(ext delay + logic)──> [FF2 / D Pin]
2. Reg-to-Reg: [FF1 / CLK Pin] ─────(C-to-Q + logic)───────> [FF2 / D Pin]
3. Reg-to-Out: [FF1 / CLK Pin] ─────(C-to-Q + logic)───────> [Primary Output Port]
4. In-to-Out: [Primary Input Port] ──(pure comb logic)────> [Primary Output Port]
| Path Type | Startpoint | Endpoint | Governing SDC Constraints |
|---|---|---|---|
| Reg-to-Reg (Core) | Clock pin of sequential cell (Flip-Flop / Latch) | Data input pin (D pin) of sequential cell | create_clock, create_generated_clock |
| In-to-Reg (Input) | Primary chip input port | Data pin of sequential cell | set_input_delay -clock ... |
| Reg-to-Out (Output) | Clock pin of sequential cell | Primary chip output port | set_output_delay -clock ... |
| In-to-Out (Feedthrough) | Primary chip input port | Primary chip output port | set_input_delay & set_output_delay |
CDN or RSTB) acts as a timing endpoint during Recovery/Removal analysis, not a clock startpoint!
Max vs Min Timing Analysis
STA decomposes all temporal checks into two complementary mathematical extremes:
- MAX Timing Analysis (Setup Check): Evaluates the slowest possible propagation of data. The signal must reach the capture element before the setup time window closes. If data takes too long, setup is violated.
- MIN Timing Analysis (Hold Check): Evaluates the fastest possible propagation of data. The newly launched data must not arrive so fast that it corrupts the previous cycle's data currently being captured. If data arrives too quickly, hold is violated.
Crucial Insight: Setup violations can be avoided in the lab by simply lowering the clock frequency ($T_{period} \to \infty$). Hold violations cannot be salvaged by changing the clock frequency because the launch and capture edges are identical ($T_{period}$ cancels out)!
Path Delay Accumulation & Segments
A complete register-to-register timing path consists of three distinct physical segments. The STA engine calculates delays along these paths independently before comparing them:
[Clock Source]
│
├─── Launch Clock Tree (T_launch_clk) ──> [FF1 / CLK]
│ │
│ └──> [FF1 / Q] ── Data Path (T_dp) ──> [FF2 / D]
│ │
└─── Capture Clock Tree (T_capture_clk) ─────────────────────────────────> [FF2 / CLK] ─┘
- 1. Launch Clock Path: The latency from the clock source (PLL or port) through clock buffers/inverters to the clock pin of the launching register (FF1).
- 2. Data Path: The time from the clock edge arriving at FF1, through the internal clock-to-Q delay of FF1 ($T_{cq}$), plus the propagation delay through all intervening combinational logic gates ($T_{logic}$) and interconnect wires ($T_{net}$).
- 3. Capture Clock Path: The latency from the clock source through the clock distribution network to the clock pin of the capturing register (FF2).
Slack Metrics: WNS, TNS & FEP
Slack represents the timing margin of a path. A positive slack indicates that the timing constraint is met with room to spare; a negative slack indicates a timing violation.
Notice the inversion: For Setup, data must arrive before it is required ($Arrival \le Required \implies Slack \ge 0$). For Hold, data must arrive after the hold window ($Arrival \ge Required \implies Slack \ge 0$).
| Metric Name | Full Name | Significance in Timing Signoff |
|---|---|---|
| WNS | Worst Negative Slack | The single worst slack across the entire design (e.g., -185 ps). Sets the maximum clock frequency deficit. Signoff requirement: $\text{WNS} \ge 0.00\text{ ps}$. |
| TNS | Total Negative Slack | The sum of all negative slacks across all failing endpoints. Indicates the magnitude of design effort required to close timing. |
| FEP | Failing Endpoints | The raw count of distinct register data pins or output ports that have slack < 0. |
| WHS / THS | Worst / Total Hold Slack | The worst and cumulative hold slack across all fast corners. Must strictly be $\ge 0.00\text{ ps}$ for fabrication signoff. |
Cell Characterization & Liberty (.lib) Modeling
How SPICE simulations are distilled into industrial Liberty standard cell models: Non-Linear Delay Models (NLDM), 2D lookup tables, CCS/ECSM current sources, timing arcs, and unateness.
Anatomy of a Liberty (.lib) File
A Liberty file (.lib) is the industry standard ASCII database characterizing the timing, power, noise, and functional behavior of standard cells. It does not contain geometric transistor layouts (which live in GDSII/LEF); instead, it records thousands of pre-simulated SPICE measurements.
library (typical_1v0_25c) {
delay_model : table_lookup;
time_unit : "1ps";
voltage_unit : "1V";
current_unit : "1mA";
capacitive_load_unit : (1, ff);
slew_upper_threshold_pct_rise : 80.0;
slew_lower_threshold_pct_rise : 20.0;
slew_derate_from_library : 1.0;
/* Standard Inverter Cell */
cell (INV_X1) {
area : 0.864;
pin (A) {
direction : input;
capacitance : 0.85; /* fF */
}
pin (Y) {
direction : output;
function : "!A";
max_capacitance : 45.0; /* DRC max load */
timing () {
related_pin : "A";
timing_sense : negative_unate;
cell_rise (delay_template_7x7) { ... }
cell_fall (delay_template_7x7) { ... }
rise_transition (delay_template_7x7) { ... }
fall_transition (delay_template_7x7) { ... }
}
}
}
}
NLDM & 2D Lookup Tables
Under the Non-Linear Delay Model (NLDM), gate propagation delay and output slew are modeled as 2D lookup tables indexed by two physical parameters:
- Input Transition Time (Input Slew, $S_{in}$): How fast the input signal switches.
- Output Load Capacitance ($C_{load}$): The sum of all driven fanout pin capacitances and interconnect wire capacitance.
When actual operating parameters fall between characterized table indices, the STA engine performs bilinear interpolation. When values exceed table limits, it performs linear extrapolation (which introduces severe pessimism or error).
lu_table_template(delay_template_3x3) {
variable_1 : input_net_transition;
variable_2 : total_output_net_capacitance;
index_1 ("10.0, 30.0, 80.0"); /* Input Slew (ps) */
index_2 ("1.0, 5.0, 20.0"); /* Output Load (fF) */
}
/* Inside cell pin timing arc: */
cell_rise(delay_template_3x3) {
/* Values: delay in ps for (Slew, Load) grid */
values ( \
"15.2, 24.8, 52.1", \
"19.4, 29.1, 56.7", \
"28.5, 38.6, 67.2" \
);
}
Composite Current Source (CCS) & ECSM
At technologies $\le 40\text{nm}$ and especially FinFET nodes ($\le 16\text{nm}$), NLDM becomes inaccurate because interconnect wires exhibit significant resistance (distributed RC), making the load non-purely capacitive.
Modern signoff relies on advanced current-source driver models:
- CCS (Composite Current Source - Synopsys): Models the driver as a time-varying current source $I(t)$ dependent on input slew and output voltage, including receiver pin capacitance modeled as split $C_{pin1}$ and $C_{pin2}$ across the waveform.
- ECSM (Effective Current Source Model - Cadence): Represents the cell as a dynamic voltage source driving a non-linear driver resistance $R_d(V)$ with multi-segment receiver capacitance.
Timing Arcs & Unateness
A timing arc represents the path a signal takes from an input pin to an output pin of a cell. Unateness defines the mathematical polarity relationship between input transitions and output transitions:
| Unateness Type | Input Transition → Output Transition | Typical Gates |
|---|---|---|
Positive Unate (positive_unate) |
Rise at In → Rise at Out Fall at In → Fall at Out |
AND gates, OR gates, Buffers |
Negative Unate (negative_unate) |
Rise at In → Fall at Out Fall at In → Rise at Out |
Inverters, NAND gates, NOR gates |
Non-Unate (non_unate) |
Transition at Out depends on the state of other inputs | XOR gates, XNOR gates, Multiplexers |
Sequential Cell Liberty Characterization
Sequential cells (D-Flip-Flops, Latches) contain both propagation arcs (Clock to Q) and constraint arcs (Setup and Hold requirements on the D pin relative to the Clock pin).
/* Setup Constraint Arc on Pin D */
timing () {
related_pin : "CLK";
timing_type : setup_rising;
rise_constraint(constraint_template_3x3) {
/* 2D table indexed by (Data Slew, Clock Slew) */
values ( ... );
}
}
/* Hold Constraint Arc on Pin D */
timing () {
related_pin : "CLK";
timing_type : hold_rising;
rise_constraint(constraint_template_3x3) {
values ( ... );
}
}
/* Clock-to-Q Propagation Arc on Pin Q */
timing () {
related_pin : "CLK";
timing_type : rising_edge;
cell_rise(delay_template_3x3) { ... }
}
Slew, Transition Time & Delay Calculation
How voltages transition in physical silicon, standard threshold conventions (20%-80% vs 10%-90%), propagation delay measurement, interconnect RC models, and Max Slew DRC fixing.
Slew & Transition Thresholds
In ideal digital theory, voltages switch instantaneously. In real silicon, gate capacitance and channel resistance cause finite charging/discharging curves. Slew (or transition time) measures how quickly a waveform transitions between specified voltage thresholds.
VDD ─── 1.0V ───────────────────────────────────────────────
/│
80% ─── 0.8V ──────/ │ \
/ │ \
/ │ \
20% ─── 0.2V ───/ │ \
/ │ \│
0V ─── 0.0V ─/──────┴───────────────────────────┴──────────
|<-- Slew_rise -->| |<-- Slew_fall -->|
t_20% t_80% t_80% t_20%
Threshold Derating: Many libraries characterize between 20% and 80% $V_{DD}$ (a $60\%$ delta), but normalize values to a $10\%-90\%$ range ($80\%$ delta). The library defines slew_derate_from_library : 0.6 or 1.0 to instruct the STA engine how to scale values.
Rising vs Falling Slew Asymmetry
In CMOS technology, pull-up networks use PMOS transistors while pull-down networks use NMOS transistors. Because electron mobility in silicon is $2\times$ to $3\times$ higher than hole mobility ($\mu_n \approx 2.5 \mu_p$), an NMOS transistor of identical width can discharge a load significantly faster than a PMOS transistor can charge it.
Even after sizing PMOS up to balance drive strength, rising slew ($S_{rise}$) and falling slew ($S_{fall}$) rarely match identically. This asymmetry causes:
- Duty Cycle Distortion (DCD): As a symmetric clock pulse propagates through multiple inverter stages, mismatched rise/fall delays shrink or expand high/low pulse widths.
- Path Delay Divergence: Launching a '0' vs launching a '1' results in different arrival times at the capture flop. STA always analyzes the worst direction.
Propagation Delay (50%-to-50%)
The standard definition of gate propagation delay ($t_{pd}$) across any digital cell is the time elapsed between the input crossing the 50% $V_{DD}$ switching threshold and the output crossing its 50% $V_{DD}$ switching threshold:
Interconnect RC Models & SPEF Parasitics
In deep submicron processes, wire delay dominates cell gate delay. Interconnects cannot be treated as ideal equipotential nets. Parasitic extraction tools (e.g., StarRC, Quantus) output SPEF (Standard Parasitic Exchange Format) files containing distributed resistance ($R$), ground capacitance ($C_g$), and cross-coupling capacitance ($C_c$).
Driver Out ───[ R1 ]───┬───[ R2 ]───┬───[ R3 ]───> Receiver Pin
│ │
[ C1 ] [ C2 ]
│ │
GND GND
STA engines reduce complex distributed RC networks into effective drive load models ($C_{eff}$) to query NLDM/CCS driver tables with high precision.
Max Slew / Max Cap DRC Violations
Before reviewing setup and hold slack, an engineer must clear all Design Rule Check (DRC) timing violations:
- Max Transition (Max Slew): Set by library characterization limits (e.g.
max_transition : 200ps) or user SDC. Slow transitions burn excessive dynamic short-circuit power ($I_{sc}$) and increase susceptibility to crosstalk noise. - Max Capacitance: The maximum capacitive load a pin can safely drive without causing physical electromigration or severe table extrapolation.
Clock Skew, Jitter & Tree Topologies
Physical clock arrival variations: spatial skew vs temporal jitter, positive vs negative skew impacts on setup and hold, useful skew exploitation, and modern CTS tree architectures.
Physical Definition of Clock Skew
Clock Skew is the spatial difference in arrival times of the same clock edge at two different sequential registers in the design:
Where $T_{launch\_clk}$ is the total insertion latency from the clock source to Launch FF1, and $T_{capture\_clk}$ is the insertion latency from the clock source to Capture FF2.
{
"title": "Clock skew: the capture clock edge arrives 35 ps after the launch edge",
"tickStart": 80, "tickStep": 5, "tickEvery": 2, "tickUnit": "ps",
"signals": [
{ "name": "FF1/CLK (launch, 100 ps latency)", "wave": "0...1............" },
{ "name": "FF2/CLK (capture, 135 ps latency)", "wave": "0..........1....." },
{ "name": "skew", "wave": "0...=......0.....", "data": ["+35 ps"] }
]
}
Both flip-flops share one clock source; the different insertion latencies (100 ps vs 135 ps) make the capture edge arrive later, so T_skew = 135 − 100 = +35 ps.
Positive vs Negative Skew Impact
The sign of the clock skew fundamentally alters the available timing margins:
| Skew Polarity | Physical Meaning | Impact on Setup Timing | Impact on Hold Timing |
|---|---|---|---|
| Positive Skew ($T_{capture} > T_{launch}$) |
Clock arrives at capture register later than launch register | HELPS SETUP: Increases available clock period window ($T + T_{skew}$) | HURTS HOLD: Capturing edge is delayed, demanding larger min datapath delay |
| Negative Skew ($T_{capture} < T_{launch}$) |
Clock arrives at capture register earlier than launch register | HURTS SETUP: Steals available time from combinational datapath ($T - |T_{skew}|$) | HELPS HOLD: Capturing edge arrives early, preventing fast data race corruption |
Useful Skew & Cycle Borrowing
Traditionally, Clock Tree Synthesis (CTS) aimed for zero skew ($T_{skew} = 0$). Modern physical synthesis uses Useful Skew (Clock Concurrent Optimization - CCOpt):
If Path A has -120 ps setup slack (violating) and downstream Path B has +350 ps slack (excess margin), the tool intentionally delays the clock buffer driving Path A's capture register by 150 ps. This shifts timing margin from Path B into Path A without adding pipeline stages or changing the master clock frequency!
Clock Jitter vs Uncertainty Budget
It is vital to distinguish between Skew and Jitter:
- Skew (Spatial): Variation in arrival time between different physical points at the same time instance. Deterministic and static.
- Jitter (Temporal): Variation in arrival time at the same physical point across different clock cycles. Caused by thermal noise, PLL phase noise, and power rail fluctuations.
Prior to CTS (Pre-CTS), uncertainty includes expected CTS skew (e.g. 150 ps) + jitter (50 ps) = 200 ps. After CTS (Post-CTS), skew is physically propagated, so uncertainty is reduced to pure jitter + margin (e.g. 50 ps).
Clock Tree Synthesis (CTS) Topologies
The choice of clock distribution network topology dictates achievable skew and dynamic power dissipation:
| CTS Architecture | Description | Advantages | Disadvantages |
|---|---|---|---|
| H-Tree | Recursive geometric branching with identical branch lengths | Near-zero structural skew by symmetry | Rigid layout requirements; blocks routing channels |
| Clock Mesh / Grid | Pre-routed global metal grid driven by array of parallel drivers | Extremely low skew; highly immune to on-chip variation (OCV) | Very high dynamic clock power; difficult to gate branches |
| Multisource CTS (MSCTS) | Coarse global H-tree driving local tap drivers and short leaf trees | Optimal balance of low skew and acceptable power consumption | Complex CAD tool optimization setup |
Setup & Hold Silicon Math & Derivations
Rigorous mathematical derivations of setup and hold inequalities, numeric slack walkthroughs, recovery and removal analysis for resets, and glitch-free integrated clock gating (ICG) checks.
Setup (Max) Timing Mathematical Derivation
Setup time ($T_{setup}$) is the minimum time data must remain stable at the register input before the capturing clock active edge.
Launch CLK: ___|‾‾‾‾‾|____________________________________ (Edge @ 0 ns)
│
└──> T_launch_latency + T_cq_max + T_data_max ────> Data Arrives @ FF2/D
│
Capture CLK: _______________________________|‾‾‾‾‾|________ (Edge @ T_period)
│
└──> T_capture_latency - T_setup - T_unc (Required Time)
Setup Slack Worked Numeric Walkthrough
Consider a $1.0\text{ GHz}$ design ($T_{period} = 1000\text{ ps}$) with the following extracted parameters:
- Launch clock network latency ($T_{launch\_clk}$): $120\text{ ps}$
- Capture clock network latency ($T_{capture\_clk}$): $160\text{ ps}$ (Skew = $+40\text{ ps}$)
- Flip-Flop Clock-to-Q max delay ($T_{cq}$): $95\text{ ps}$
- Combinational datapath delay ($T_{logic} + T_{net}$): $710\text{ ps}$
- Flip-Flop Setup time requirement ($T_{setup}$): $45\text{ ps}$
- Clock Uncertainty budget ($T_{unc}$): $50\text{ ps}$
Hold (Min) Timing Mathematical Derivation
Hold time ($T_{hold}$) is the minimum time data must remain stable at the register input after the capturing clock active edge. The data launched by clock edge $N$ must not reach the capture register before the hold window of clock edge $N$ expires.
Crucial Observation: The clock period $T_{period}$ does NOT appear anywhere in the hold equation! Launch and capture occur on the same clock edge.
Hold Slack: Why Hold Kills Silicon
In production silicon testing, if a chip has a setup violation, engineers can reduce the operating clock frequency from $1\text{ GHz}$ down to $800\text{ MHz}$ ($T_{period}$ increases from $1.0\text{ ns}$ to $1.25\text{ ns}$), making setup slack positive and enabling the chip to operate at a derated speed grade.
If a chip has a hold violation, the fast data destroys the current state before the flip-flop can capture it. Because $T_{period}$ is absent from the hold equation:
Even at $1\text{ Hz}$ or single-stepped on a testbench, the hold violation will corrupt data on every active clock edge. A hold violation renders the physical silicon completely dead.
Recovery & Removal Timing for Asynchronous Resets
Asynchronous reset pins (e.g. RST_N) can be asserted at any time. However, when the reset is de-asserted (released), the transition must not occur too close to the active clock edge, or internal flip-flop nodes may enter metastability.
- Recovery Check (Setup Equivalent): The minimum time an asynchronous control signal must remain stable at its inactive state before the active clock edge.
- Removal Check (Hold Equivalent): The minimum time an asynchronous control signal must remain asserted after the active clock edge before it is allowed to de-assert.
Clock Gating Checks & Glitch Prevention
Clock gating disables the clock to idle registers to save dynamic power ($P_{dyn} = \alpha C V^2 f$). If an ordinary combinational AND gate is used to gate a clock with an asynchronous enable signal, glitches on the enable can create spurious clock pulses (chopping or runt pulses) that cause state corruption.
Signoff STA enforces Clock Gating Checks:
- For an AND-gate clock gate (active-high clock), the enable must switch only while the clock is LOW.
- For an OR-gate clock gate (active-low clock), the enable must switch only while the clock is HIGH.
Process Variations: OCV, CRPR, AOCV & POCV
Modeling physical manufacturing deviations across the die: On-Chip Variation (OCV) derates, Common Path Pessimism Removal (CRPR), depth-based AOCV, and statistical Parametric OCV (POCV/LVF).
On-Chip Variation (OCV) Flat Derates
Within a single silicon die, variations in oxide thickness ($t_{ox}$), dopant atom concentrations (RDF), metal track etching, and local voltage/temperature gradients mean two identical buffers will not have identical delays.
Traditional OCV models this by applying flat percentage derate factors:
This deliberately widens the worst-case spread: the launching path is assumed to be as slow as possible while the capturing clock is assumed to be as fast as possible.
Clock Reconvergence Pessimism Removal (CRPR)
When applying early/late OCV derates, clock trees frequently share common buffers from the clock root up to a divergence point. Under basic OCV, the shared segment is derated as "late" for the launch path and "early" for the capture path!
Physically, a single gate on a single piece of silicon cannot be simultaneously fast and slow at the exact same moment. This artificial error is called Clock Reconvergence Pessimism (CRP).
Clock Source ──[BUF1]──[BUF2]── (Divergence Point) ──┬──[BUF3_L]──> FF1 / CLK (Launch)
|=============| │
Shared Common Path └──[BUF3_C]──> FF2 / CLK (Capture)
Enabling CRPR (set_timing_derate -crpr or report_timing -cpr) restores tens to hundreds of picoseconds of legitimate margin back into both setup and hold paths.
Advanced OCV (AOCV)
Flat OCV derates (e.g. 15%) are overly pessimistic for long timing paths. Random variations average out across a chain of multiple logic gates (by the Central Limit Theorem: $\sigma_{total} \propto \frac{1}{\sqrt{N}}$).
Advanced OCV (AOCV) replaces flat derates with two-dimensional tables indexed by:
- Logic Depth ($N$): Number of gates in the timing path. Deeper paths get smaller derates.
- Physical Bounding Box Distance ($D$): Spatial distance across the chip floorplan. Gates physically close to each other share identical thermal/voltage domains and get lower derates.
Parametric OCV (POCV) & Statistical STA
At sub-10nm FinFET and GAA nodes, AOCV is insufficient. Standard cell libraries provide Liberty Variation Format (LVF) data modeling gate delay as a Gaussian distribution with a nominal mean ($\mu$) and standard deviation ($\sigma$).
Where $C$ is the signoff yield sigma target (typically $C = 3.0$ for a $3\sigma$ yield or $99.73\%$ confidence). Because independent gate sigmas add in quadrature ($\sqrt{\sum \sigma^2}$), POCV eliminates massive false timing pessimism.
Dynamic IR Drop Impact on Timing
When millions of clock network leaf buffers switch simultaneously on a clock edge, peak current transients ($I(t)$) flowing through the power delivery network (PDN) create localized voltage droop ($\Delta V = I \cdot R + L \frac{dI}{dt}$).
A $10\%$ drop in supply voltage ($V_{DD}$) typically increases gate propagation delay by $15\%$ to $25\%$. Modern signoff couples vectorless power analysis (e.g. RedHawk, Voltus) into STA via dynamic IR-drop aware delay derating.
Clock Domain Analysis & Classification
Classifying clock domains in physical silicon: synchronous vs asynchronous relationships, logically and physically exclusive clocks, harmonic frequencies, and the catastrophic danger of false paths without synchronizers.
Synchronous Clock Domains
Two clocks are strictly synchronous if they share a common root source (such as the same master Phase-Locked Loop) and have a deterministic, constant phase and frequency relationship.
Because edge alignments between synchronous clocks are completely bounded, STA engines can compute the exact launch-to-capture timing requirements across the domains. Standard setup ($T_{period} - T_{setup}$) and hold checks apply without requiring special CDC synchronizers.
[Master PLL 800 MHz] ──┬──> CLK_A (800 MHz, Period = 1.25 ns)
└───[/2 Divider]──> CLK_B (400 MHz, Period = 2.50 ns)
Asynchronous Clock Domains
Clocks driven by separate crystal oscillators (e.g. PCIe 100 MHz, DDR 1600 MHz, USB 480 MHz) are asynchronous. Because their oscillators drift independently due to manufacturing tolerances and thermal differences, their relative phase relationship varies continuously from $0^\circ$ to $360^\circ$ over time.
At some arbitrary point in real-world operation, active edges of the two clocks will occur simultaneously, causing the receiving flip-flop to sample during a data transition.
set_clock_groups -asynchronous) and insert verified hardware CDC synchronizers.
Logically & Physically Exclusive Clocks
When a multiplexer selects between different clock sources driving the same logic tree:
- Logically Exclusive: Clocks that share the same physical routing wires downstream of a clock multiplexer (e.g.
CLK_FASTvsCLK_SLOW, orSCAN_CLKvsFUNC_CLK). They can exist simultaneously in the design, but only one active clock pulse can pass through the mux pin at any given instant. - Physically Exclusive: Clocks that cannot physically exist on the chip at the same time (e.g., bond-pad configuration pins tied off to select between differential oscillator modes).
# Prevent false cross-clock timing paths between multiplexed clocks
set_clock_groups -logically_exclusive \
-group {clk_func_fast clk_func_slow} \
-group {clk_test_scan}
Multi-Frequency Synchronous Clocks ($f, 2f$)
When data transfers between synchronous clocks of harmonic frequencies (e.g., $10\text{ ns}$ period and $5\text{ ns}$ period), STA expands the timing timeline over the Least Common Multiple (LCM) of the two periods.
Fast CLK (5 ns): |‾|_|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_
Slow CLK (10 ns): |‾|_____|‾|_____|‾|_____|‾|_____
0 5 10 15 20 ns
^ ^
LCM Common Base Period = 10 ns
STA computes every possible (Launch, Capture) edge pair within the common base period:
- Fast → Slow: Launch at $t=5\text{ ns}$, capture at $t=10\text{ ns}$. Available setup window is $5\text{ ns}$. Hold is checked between launch at $t=0\text{ ns}$ and capture at $t=0\text{ ns}$.
- Slow → Fast: Launch at $t=0\text{ ns}$, capture at $t=5\text{ ns}$. Available setup window is $5\text{ ns}$.
False Paths Between Unrelated Domains
A catastrophic error in timing closure is applying set_false_path between two clock domains before confirming that a verified CDC circuit is instantiated in RTL.
When an engineer sees thousands of violating paths between asynchronous domains, applying set_false_path -from [get_clocks A] -to [get_clocks B] eliminates all reports, showing clean zero-slack closure.
Clock Domain Crossing (CDC) & Metastability
The physics of flip-flop metastability, mathematical Mean Time Between Failures (MTBF) derivations, 2-FF/3-FF synchronizers, pulse handshakes, multi-bit bus reconvergence skew, and async FIFO pointers.
Physics of Metastability
A CMOS flip-flop consists of two cross-coupled inverters forming a bistable latch. When data violates the setup or hold window, the internal storage node is caught at an intermediate voltage near the inverter switching threshold ($V_{DD}/2$).
Metastable Peak (Unstable Equilibrium @ VDD/2)
● (Ball balanced on knife-edge)
/ \
/ \
/ \
Stable State '0' (0V) <──── ────> Stable State '1' (VDD)
In this intermediate state, small thermal noise voltages determine whether the node resolves to '0' or '1'. The resolution time ($t_{resolve}$) is non-deterministic. If the node fails to resolve before the next clock cycle, metastable voltages propagate into downstream combinational logic, causing different gates to interpret the signal differently (some see '0', others see '1')—destroying state machine integrity.
Mean Time Between Failures (MTBF) Formula
The statistical probability of a synchronizer experiencing a metastable failure is quantified by the classic MTBF formula:
Where:
• $t_{resolve}$: Settling time available for the flip-flop to exit metastability ($t_{resolve} \approx T_{clk} - T_{cq} - T_{setup}$)
• $\tau$: Technology-dependent resolution time constant of the cross-coupled inverter (smaller in advanced FinFET nodes)
• $T_0$: Technology parameter representing the temporal setup/hold aperture window
• $f_{clk}$: Clock frequency of the receiving clock domain
• $f_{data}$: Transition frequency of the incoming asynchronous data signal
2-Flip-Flop & 3-Flip-Flop Synchronizers
The standard industry defense for single-bit asynchronous signals is a 2-Flip-Flop Synchronizer (2-FF):
Async Input ────> [ FF_Meta (Stage 1) ] ────> [ FF_Sync (Stage 2) ] ────> Safe Output
│ │
Receiving CLK ────────────┴───────────────────────────────┴───────────────
- Stage 1 (FF_Meta): Absorbs the asynchronous timing violation. It may become metastable, but has a full clock period ($T_{clk}$) to resolve.
- Stage 2 (FF_Sync): Samples the settled, clean logic level from Stage 1 and outputs a glitch-free signal to downstream core logic.
- 3-FF Synchronizer: Used in ultra-high frequency designs ($f_{clk} > 1.5\text{ GHz}$) where a single clock period is too short for $\tau$ decay, adding an extra stage to guarantee MTBF > $10^6$ years.
FF_Meta and FF_Sync immediately adjacent in the floorplan (or use specialized dual-rank standard cells) to minimize net delay and eliminate routing capacitance between stages.
Pulse Synchronizers & Toggle Handshakes
If a single-cycle pulse is sent from a fast clock domain (e.g. $1\text{ GHz}$) to a slow clock domain (e.g. $100\text{ MHz}$), the slow domain may completely miss the pulse because its duration ($1\text{ ns}$) is shorter than the slow clock period ($10\text{ ns}$).
The Solution: Toggle-Based Handshake:
- The transmitter converts the pulse into a state transition (toggle: $0 \to 1$ or $1 \to 0$).
- The toggle signal crosses the 2-FF synchronizer into the destination slow domain.
- The destination domain detects the transition using an XOR edge detector, reconstructing a single-cycle destination pulse.
- An acknowledge toggle is returned to the transmitter before a new pulse can be accepted.
Multi-Bit Bus CDC: Re-convergence Glitches
Never pass multi-bit data buses through parallel 2-FF synchronizers!
Consider a 4-bit counter value changing from 0111 (7) to 1000 (8). Because interconnect routing delays and buffer variations are not identical across bits, Bit 3 might arrive in cycle $N$ while Bits 2, 1, and 0 arrive in cycle $N+1$.
The receiving domain samples a transient intermediate value: 1111 (15) or 0000 (0)! This catastrophic error is called CDC Data Reconvergence.
Asynchronous FIFO Architecture
An Asynchronous FIFO (Dual-Clock FIFO) is the industry gold standard for streaming multi-bit data between unrelated clock domains.
[Write Domain (CLK_W)] [Read Domain (CLK_R)]
Write Data ────────────> [ Dual-Port RAM ] ─────────────> Read Data
Binary WPTR ──[Bin2Gray] Binary RPTR ──[Bin2Gray]
│ │ │ │
│ Gray WPTR ───[2-FF Sync]───> Gray WPTR_sync │ Gray RPTR ───[2-FF Sync]───> Gray RPTR_sync
│ │ │ │
└──[Full Logic] <────────────────────────────┘ └──[Empty Logic] <───────────────────────────┘
- Gray-Coded Pointers: Write pointer (
wptr) and Read pointer (rptr) are converted to Gray code so that only one bit changes per address increment, eliminating reconvergence skew. - Safe Pessimistic Flags: Due to synchronizer latency, the write domain sees an older read pointer (causing early Full indication), and the read domain sees an older write pointer (causing early Empty indication). The FIFO may be slightly under-utilized, but underflow and overflow are physically impossible.
Multi-Corner Multi-Mode (MCMM) Signoff
Signoff scenario matrix construction: PVT corners, the nanoscale Temperature Inversion phenomenon, interconnect extraction extremes (Cworst/RCworst), operational modes, and cross-corner ECO trade-offs.
PVT Corners & Temperature Inversion Effect
Silicon must function across three environmental axes: Process (Slow-Slow, Typical, Fast-Fast), Voltage ($V_{nom} \pm 10\%$), and Temperature ($-40^\circ\text{C}$ to $+125^\circ\text{C}$).
Legacy Nodes (> 65 nm): Higher Temp (+125°C) → Lower Carrier Mobility (μ) → SLOWER (Worst Setup)
FinFET Nodes (≤ 16 nm): Lower Temp (-40°C) → Higher Threshold Voltage (V_th) → SLOWER at Low VDD!
Why Temperature Inversion Occurs: Gate delay depends on $(V_{DD} - V_{th})^\alpha / \mu(T)$. At modern ultra-low voltages ($V_{DD} \le 0.75\text{V}$), the increase in threshold voltage ($V_{th}$) at $-40^\circ\text{C}$ dominates over carrier mobility improvement. Consequently, cold temperatures can become the slowest corner for setup timing!
Interconnect Extraction Corners (RC Corners)
Metal chemical-mechanical polishing (CMP) and lithography variations cause metal track width, thickness, and dielectric spacing to vary independently of transistors:
| RC Corner | Physical Metal Geometry | Timing Impact |
|---|---|---|
| Cworst / Cmax | Wider metal tracks, thinner inter-layer dielectric | Max total capacitance; worst-case for short, capacitive nets |
| RCworst / RCmax | Narrower metal tracks, thinner dielectric | High resistance and capacitance; worst-case for long RC-dominated interconnects |
| Cbest / Cmin | Narrower tracks, thicker dielectric | Minimum wire capacitance; critical for fast hold time signoff |
| RCbest / RCmin | Wider metal, thicker dielectric | Minimum resistance; fastest signal propagation (dangerous for hold) |
Operating Modes (Functional, Scan, BIST)
Modern chips operate under multiple distinct functional regimes controlled by pin states or internal registers:
- Functional Mode (
func): Normal mission mode with high-speed mission clocks and functional SDC constraints. - Scan Shift Mode (
scan_shift): Manufacturing test mode where all flip-flops are chained into serial shift registers running at a low frequency (e.g. $50\text{ MHz}$). Hold violations between scan chain flip-flops are rampant! - Scan Capture Mode (
scan_capture): At-speed launch-off-capture testing to detect transitional delay defects in silicon. - Sleep / Deep Power Down Mode: Only retention registers and power management units remain clocked.
Scenario Matrix Construction
In Multi-Corner Multi-Mode (MCMM) engines (PrimeTime, Tempus), a Scenario is defined as:
# 1. Define Modes
create_mode func_mode
create_mode scan_mode
# 2. Define Corners
create_corner slow_corner
set_operating_conditions -corner slow_corner SS_0V75_125C
read_parasitics -corner slow_corner -spef routed_rcworst.spef
create_corner fast_corner
set_operating_conditions -corner fast_corner FF_0V95_M40C
read_parasitics -corner fast_corner -spef routed_rcbest.spef
# 3. Create Scenarios
create_scenario -name func_slow -mode func_mode -corner slow_corner
create_scenario -name func_fast -mode func_mode -corner fast_corner
set_analysis_view -setup {func_slow} -hold {func_fast}
Cross-Corner Timing Optimization Trade-offs
Fixing a timing violation in one scenario often degrades another scenario:
- The Hold Fix Hazard: Inserting delay buffers to fix a hold violation in the Fast Corner (
func_fast) adds capacitance and delay that directly degrades setup slack in the Slow Corner (func_slow). - The Leakage Trade-off: Swapping a cell to Low-$V_{th}$ (LVT) to fix setup increases exponential subthreshold leakage power by $5\times$ to $10\times$ in standby mode.
Timing Analysis Reports & Path Anatomy
Deconstructing industrial PrimeTime and Tempus timing reports line-by-line: arrival vs required path arithmetic, hold reports, global WNS/TNS/FEP metrics, clock network insertion latency, and signoff debug commands.
Setup Report Line-by-Line Breakdown
A standard signoff setup timing report (report_timing -delay_type max) is organized into three major sections: Path Metadata Header, Data Arrival Path, and Data Required Path:
Startpoint: u_core/u_alu/reg_a_reg[3] (rising edge-triggered flip-flop clocked by clk_core)
Endpoint: u_core/u_alu/reg_res_reg[3] (rising edge-triggered flip-flop clocked by clk_core)
Path Group: clk_core
Path Type: max
Scenario: func_slow_ss_0p75v_125c
Point Incr Path
---------------------------------------------------------------
clock clk_core (rise edge) 0.000 0.000
clock network delay (propagated) 0.185 0.185 <-- Launch Clock Insertion Latency
u_core/u_alu/reg_a_reg[3]/CK (DFF_X2) 0.000 0.185 r
u_core/u_alu/reg_a_reg[3]/Q (DFF_X2) 0.092 & 0.277 f<-- Clock-to-Q Delay
u_core/u_alu/U45/Y (NAND2_X1) 0.048 & 0.325 r<-- Combinational Gate Delay
u_core/u_alu/U89/Y (AOI22_X2) 0.086 & 0.411 f
u_core/u_alu/reg_res_reg[3]/D (DFF_X1) 0.034 & 0.445 f<-- Net + Pin Arrival
data arrival time 0.445 <-- Total Data Arrival Time
clock clk_core (rise edge) 1.000 1.000 <-- Capture Clock Active Edge (T_period)
clock network delay (propagated) 0.210 1.210 <-- Capture Clock Insertion Latency
clock reconvergence pessimism 0.025 1.235 <-- CRPR Adjustment (+CRP)
clock uncertainty -0.040 1.195 <-- Jitter & Uncertainty Derate
u_core/u_alu/reg_res_reg[3]/CK (DFF_X1) 0.000 1.195 r
library setup time -0.038 1.157 <-- Library Setup Requirement (T_setup)
data required time 1.157 <-- Total Data Required Time
---------------------------------------------------------------
data required time 1.157
data arrival time -0.445
---------------------------------------------------------------
slack (MET) 0.712 <-- Positive Slack (+712 ps)
r/f flag designates rising or falling transitions. The & symbol indicates that distributed RC interconnect delay is included from extracted SPEF.
Hold Report Line-by-Line Breakdown
In a hold report (report_timing -delay_type min), the active clock edge occurs at $t = 0.000\text{ ns}$ for both launch and capture:
Point Incr Path
---------------------------------------------------------------
clock clk_core (rise edge) 0.000 0.000
clock network delay (propagated) 0.110 0.110 <-- Fast Launch Clock Latency
u_pipe/stage1_reg/CK (DFF_X2) 0.000 0.110 r
u_pipe/stage1_reg/Q (DFF_X2) 0.045 & 0.155 r<-- Fast Min Clock-to-Q
u_pipe/stage2_reg/D (DFF_X1) 0.012 & 0.167 r<-- Very Short Wire
data arrival time 0.167 <-- Data Arrives at 167 ps
clock clk_core (rise edge) 0.000 0.000 <-- Same Clock Edge (0.000 ns!)
clock network delay (propagated) 0.135 0.135 <-- Capture Clock Latency
clock reconvergence pessimism 0.015 0.150 <-- CRPR Adjustment
clock uncertainty 0.025 0.175 <-- Uncertainty Added
u_pipe/stage2_reg/CK (DFF_X1) 0.000 0.175 r
library hold time 0.022 0.197 <-- Library Hold Requirement
data required time 0.197 <-- Data Required at 197 ps
---------------------------------------------------------------
data arrival time 0.167
data required time -0.197
---------------------------------------------------------------
slack (VIOLATED) -0.030 <-- Hold Violation (-30 ps!)
stage2_reg/D in only 167 ps, but the hold window required stability until 197 ps. A hold buffer (delay cell) adding at least $30\text{ ps} + 20\text{ ps margin} = 50\text{ ps}$ must be inserted.
Global Timing Slack Metrics (WNS, TNS, FEP)
Timing signoff teams track three primary quantitative metrics across every design iteration:
| Metric | Formula | Physical Meaning | Signoff Target |
|---|---|---|---|
| WNS (Worst Negative Slack) | $\min_i (\text{Slack}_i)$ for $\text{Slack}_i < 0$ | The single critical path with maximum violation. Dictates the operating clock frequency. | $\ge 0.000\text{ ns}$ |
| TNS (Total Negative Slack) | $\sum_{i \in \text{failing}} \text{Slack}_i$ | Cumulative negative slack over all endpoints. Indicates how broadly broken the design timing is. | $0.000\text{ ns}$ |
| FEP (Failing Endpoints) | $\text{Count}(\text{Endpoints with Slack} < 0)$ | Total number of unique registers/ports failing timing. Measures ECO engineering effort. | $0$ endpoints |
Clock Network Latency & Sinks
Timing reports separate clock latency into two components:
- Source Latency: Delay from the primary oscillator pin or crystal input pad to the on-chip clock definition pin (e.g., PLL input or output). Specified in SDC via
set_clock_latency -source. - Network Latency (Insertion Delay): Delay from the clock definition point through the synthesized on-chip clock tree buffers down to the register clock pin. Measured automatically when clocks are set to
set_propagated_clock.
Advanced Report Commands & Debugging
Essential command options for senior STA debugging:
# Comprehensive setup timing report with full clock trees and CRPR
report_timing \
-delay_type max \
-path_type full_clock_expanded \
-max_paths 10 \
-nworst 1 \
-cpr \
-derate \
-input_pins \
-nets \
-significant_digits 4 \
-nosplit > reports/setup_critical_paths.rpt
# Summary of Worst Slack across all clock path groups
report_qor
Timing Closure & ECO Fix Strategy
The systematic physical design timing closure loop: setup violation ECO playbooks, hold fix buffer strategies, DRC clearing, crosstalk delta-delay remedies, and post-mask spare cell engineering change orders.
The Timing Closure Flowchart
Timing closure is an iterative convergence loop between physical layout tools (Innovus, ICC2) and signoff STA engines (Tempus, PrimeTime):
[Synthesized Netlist + SDC]
│
▼
[Placement & Optimization] ─────> (Pre-CTS STA: estimated clock latency)
│
▼
[Clock Tree Synthesis (CTS)] ───> (Post-CTS STA: propagated clocks, skew checked)
│
▼
[Detail Routing] ───────────────> [Parasitic Extraction (StarRC / Quantus SPEF)]
│
▼
[Signoff Post-Route STA]
│
┌──────────────────────┴──────────────────────┐
▼ ▼
[Violations Exist?] [WNS ≥ 0, THS ≥ 0, DRC=0]
│ YES │
▼ ▼
[Generate ECO Changes] [TAPE-OUT SIGNED OFF ✓]
(Size, Swap VT, Buffers)
│
└───────> [Incremental ECO Route] ──────┘
Setup Violation ECO Playbook
When resolving setup violations (data path too slow), apply the following hierarchy of interventions from lowest risk to highest:
| Priority | Optimization Technique | Mechanism | Trade-off / Risk |
|---|---|---|---|
| 1 (Lowest Risk) | VT Swapping (HVT → SVT → LVT) | Swaps threshold voltage of cells on critical datapath; reduces cell delay by 25–40% without modifying layout placement. | Exponentially increases static subthreshold leakage power. |
| 2 | Cell Upsizing (e.g. AND2_X1 → AND2_X4) |
Increases output driver transistor width, reducing gate delay and improving output transition. | Increases input pin capacitance (can hurt upstream gate delay); increases area. |
| 3 | Buffer Insertion / Relocation | Breaks long resistive RC metal tracks into shorter segments; restores degraded slew. | Consumes routing tracks and placement whitespace. |
| 4 | Pin Swapping | Swaps functionally symmetric inputs (e.g. Pin A vs Pin B on NAND2) so critical signal connects to the fastest internal transistor arc. | Zero area/power penalty; only applicable to symmetric Boolean functions. |
| 5 (High Impact) | Logic Restructuring / Cloning | Clones heavy-fanout drivers or restructures Boolean logic trees to reduce logic depth. | Requires local re-routing; modifies netlist connectivity. |
Hold Violation ECO Playbook
Hold violations occur when data arrives too quickly. To fix hold without causing setup violations:
- Insert Delay Cells Near the Capture Register: Always insert hold delay buffers as close as possible to the endpoint (capture flop D pin). Placing them near the launch flop increases the risk of degrading branching paths that may already be setup-critical.
- Downsize Fast Drivers: Downsize aggressively oversized drivers on short datapaths.
- Swap to High-VT (HVT): Swapping cells from LVT to HVT increases delay while simultaneously saving static leakage power—a double win!
- Avoid Adding Buffers into Shared Clock Branches: Modifying clock tree nets alters downstream skew everywhere; only touch the datapath.
Max Slew & Max Cap DRC Fixing
Electrical Design Rule Checks (DRC) must be 100% clean prior to final signoff:
- Fixing Max Capacitance: Occurs when a single driver drives too many fanout pins or an extremely long wire. Fix by buffer tree insertion (splitting the fanout into balanced clusters) or driver upsizing.
- Fixing Max Slew (Transition): Caused by weak drivers or long RC interconnects. Insert repeater buffers every $200\text{--}400\,\mu\text{m}$ along long metal tracks to restore sharp switching edges.
Crosstalk & Noise-Induced Delta Delay
In sub-20nm nodes, adjacent parallel metal wires have high cross-coupling capacitance ($C_c$). When a neighboring wire (Aggressor) switches simultaneously with the signal wire (Victim):
Aggressor Net ───────────[ C_coupling ]───────────
│
Victim Net ─────────────────┴──────────────────
1. Opposite Direction Switching (Aggressor Rise, Victim Fall):
Effective C_c = 2 * C_c (Miller Effect) → HUGE DELAY INCREASE (Δt > 0) → SETUP VIOLATION!
2. Same Direction Switching (Both Rise Together):
Effective C_c = 0 → FASTER DELAY (Δt < 0) → HOLD VIOLATION!
Remedies for Signal Integrity (SI) Violations:
- Shielding: Route sensitive clock or critical nets flanked on both sides by grounded $V_{SS}$ shield wires.
- Spacing: Double-space routing tracks to reduce $C_c$ by > 60%.
- Upsizing Victim Driver: A stronger driver lowers output impedance, holding the net firmly against capacitive noise injection.
Spare-Cell & Tcl ECO Automation
After silicon masks are fabricated, manufacturing defects or critical bugs can cost \$5M+ for a full re-spin. To allow Post-Mask Metal-Only ECOs, designers scatter unconnected Spare Cells (NAND, NOR, DFF, Inverters) uniformly across the base silicon layers.
A metal-only ECO modifies only the top metal routing masks to reconnect existing spare cells, fixing functional or timing defects without touching base diffusion layers—saving 80% of mask costs.
# 1. Automatic Hold Fixing with buffer insertion
fix_eco_timing -type hold -methods {insert_buffer} -buffer_list {BUF_X2 BUF_X4}
# 2. Automatic Setup Fixing via cell sizing and VT swapping
fix_eco_timing -type setup -methods {size_cell}
# 3. Fixing Max Transition and Max Capacitance DRCs
fix_eco_drc -type {max_transition max_capacitance}
# 4. Export ECO changes to Physical Design tool (Innovus/ICC2)
write_changes -format eco_tcl -output eco_fixes.tcl
Tool Comparison, Signoff Checklists & Real-World Cheatsheets
EDA tool command translation matrix, pre-CTS vs post-route differences, complete signoff checklists, production batch scripts, formula quick reference cards, and senior interview drills.
EDA Tool Command Translation Matrix
Cross-platform command reference for the four major STA engines used in industry:
| Function | Synopsys PrimeTime | Cadence Tempus | AMD Vivado STA | OpenSTA (OpenROAD) |
|---|---|---|---|---|
| Report Setup Timing | report_timing -delay max |
report_timing -late |
report_timing -delay_type max |
report_checks -path_delay max |
| Report Hold Timing | report_timing -delay min |
report_timing -early |
report_timing -delay_type min |
report_checks -path_delay min |
| Read Parasitics | read_parasitics top.spef |
read_spef top.spef |
read_spef top.spef |
read_spef top.spef |
| Check Constraints | check_timing |
check_timing -verbose |
check_timing |
check_setup |
| Report Clock Skew | report_clock_timing -type skew |
report_clock_timing -skew |
report_clock_interaction |
report_clock_skew |
| Report DRC Violations | report_constraint -all_violators |
report_constraint -drv |
report_drc |
report_check_types -max_slew -max_cap |
Pre-CTS vs Post-CTS vs Post-Route STA
Timing models evolve as physical implementation progresses from logic synthesis to silicon tape-out:
| Feature | Pre-CTS (Placement) | Post-CTS (Clock Tree Built) | Post-Route (Tape-out Signoff) |
|---|---|---|---|
| Clock Network | Ideal (0 latency, 0 skew) | Propagated real buffers | Propagated real buffers + routed RC wires |
| Clock Latency | Virtual estimation (set_clock_latency) |
Propagated (set_propagated_clock) |
Propagated (set_propagated_clock) |
| Clock Uncertainty | Large (Jitter + Expected Skew, ~200 ps) | Small (Jitter only, ~50 ps) | Small (Jitter + Signoff margin, ~30 ps) |
| Interconnect Delays | Wire Load Model (WLM) or Steiner RC | Global routed estimated RC | Extracted 3D signoff SPEF with coupling $C_c$ |
| Hold Violations | Ignored (premature to fix) | Initial coarse hold fix | Mandatory zero-violation hold signoff |
Signoff DRC & Quality Checklist
Prior to tape-out mask freezing, signoff engineers must review and satisfy the following checklist across all defined scenarios:
- ✓ Setup Timing: $\text{WNS} \ge 0.000\text{ ps}$ across all Slow/Cworst scenarios.
- ✓ Hold Timing: $\text{WHS} \ge 0.000\text{ ps}$ across all Fast/Cbest scenarios.
- ✓ Max Transition (Slew): Zero violations against library threshold limits.
- ✓ Max Capacitance: Zero pin overload violations.
- ✓ Max Fanout: No unbuffered nets exceeding library fanout rules.
- ✓ Clock Gating: No active-low/active-high gating glitch hazards.
- ✓ Min Clock Pulse Width: High/low clock phase durations satisfy sequential library limits.
- ✓ Asynchronous Recovery/Removal: 100% clean on all reset distribution trees.
- ✓ No Unconstrained Endpoints:
check_timingreports 0 unconstrained register pins or ports.
Golden Signoff Tcl Script Template
#################################################################
# Golden PrimeTime Signoff Batch Execution Script
#################################################################
set sh_continue_on_error false
set_host_options -max_cores 16
# 1. Setup Search Paths & Libraries
set_app_var search_path ". ./lib ./netlist ./spef"
set_app_var link_path "* sc_ss_0p75v_125c.db sc_ff_0p95v_m40c.db ram_ss.db"
# 2. Read Gate-Level Routed Netlist
read_verilog post_route_chip.v
current_design chip_top
link
# 3. Read SDC Timing Intent
read_sdc chip_top_signoff.sdc
# 4. Propagated Clocks & Parasitic SPEF
set_propagated_clock [all_clocks]
read_parasitics -format spef -keep_capacitive_coupling post_route_rcworst.spef
# 5. Advanced Variation & CRPR Settings
set_timing_derate -early 0.90
set_timing_derate -late 1.10
set_app_var timing_remove_clock_reconvergence_pessimism true
# 6. Verify Design Timing Integrity
check_timing -verbose > reports/check_timing.rpt
# 7. Generate Golden Signoff Reports
report_timing -delay_type max -max_paths 100 -significant_digits 3 > reports/signoff_setup.rpt
report_timing -delay_type min -max_paths 100 -significant_digits 3 > reports/signoff_hold.rpt
report_constraint -all_violators -significant_digits 3 > reports/signoff_all_violators.rpt
report_analysis_coverage > reports/signoff_coverage.rpt
puts "=== STA SIGNOFF EXECUTION COMPLETE ==="
Common STA Traps & Pitfalls
Beware of these frequent high-impact pitfalls during STA reviews:
set_false_path -to [get_pins u_reg/*] masks every data input pin, including critical internal control loops you intended to check.
set_input_delay is treated as having 0 ps external delay and zero transition time, giving false confidence to paths that fail miserably on the PCB.
Formula Quick Reference Card
Senior STA Interview & Knowledge Drills
Q1: Why do hold violations often appear on scan shift chains during test mode?
Answer: In scan chains, flip-flops are connected directly FF1/Q → FF2/SI with zero combinational logic between them. If clock skew between adjacent scan flops exceeds $T_{cq}$, a hold race occurs. Physical synthesis tools insert dedicated scan hold delay buffers during scan stitching.
Q2: Why does useful skew help setup but hurt hold?
Answer: Positive skew delays the capturing clock edge, effectively granting the launching data an extra $T_{skew}$ of time ($T_{period} + T_{skew}$) to complete logic evaluation. However, the capturing flop now holds its window open longer for the same clock edge, demanding that the newly launched data arrive later ($T_{arrival} \ge T_{capture} + T_{hold}$).
Q3: How does temperature inversion affect STA signoff in 5nm FinFET?
Answer: At low supply voltages ($< 0.75\text{V}$), $V_{th}$ shift at cold temperature ($-40^\circ\text{C}$) reduces gate overdrive $(V_{DD} - V_{th})$ so severely that gates switch slower than at $+125^\circ\text{C}$. Therefore, signoff engineers must check setup timing at both $-40^\circ\text{C}$ and $+125^\circ\text{C}$.