90+ free Static Timing Analysis questions, from the setup and hold equations to OCV, CPPR, MCMM and real debugging scenarios. Includes 18 worked answers, 8 solved numericals, a hold-report walkthrough and a live slack calculator.
621 questions with interview-ready answers and tips, 25 solved numericals, an annotated timing report and 30 debugging scenarios.
STA comes up in almost every physical design, STA, synthesis and ASIC interview. Interviewers rarely stop at "what is setup time?". They give you numbers, a timing report or a failing path, and listen to how you reason.
This page is built around that. Start with the formula sheet and the calculator, browse 50 questions across ten topics, then work through the worked answers, numericals and the report walkthrough. Try each one aloud before opening the answer.
Setup and hold, skew, slack and the four path types, then at least one calculation: fmax, slack with skew, or a half-cycle path. Freshers are judged mostly here.
Write create_clock and set_input_delay, explain false vs multicycle paths, generated clocks, OCV derates, CPPR and why setup and hold are checked at different corners.
Common from 2–3 years of experience: "walk me through this report", "hold exploded after CTS", "a false path suddenly fixed WNS". They're testing your method more than any single answer.
Before any number, write the setup or hold slack formula. It shows method, and it catches the most common mistake: using the setup formula for hold.
Skew, half-cycle, multicycle and clock-ratio questions get easy once you sketch launch and capture edges. Interviewers like a quick waveform.
Setup: late launch, late data, early capture, slow corner. Hold: the reverse, at the fast corner. Naming this unprompted shows you understand OCV.
Scenario, path type (max or min), start and end clocks, then the numbers. Many debugging mistakes come from reading the wrong scenario or check.
A setup multicycle path without its hold partner, or a false path without design intent behind it, can hide a real silicon failure. Say so.
For any debug question: confirm the data and settings, find the source (constraint, clock, data path, SI), propose ranked fixes, re-check every scenario.
T = clock period. Positive skew means the capture clock arrives later than the launch clock: it helps setup and hurts hold.
All values in ns. Change any number and the results update.
Try raising the period: setup slack grows, hold slack doesn't move.
| CHECK | LAUNCH CLOCK | DATA PATH | CAPTURE CLOCK | WORST WHEN |
|---|---|---|---|---|
| Setup | late (max) | late (max) | early (min) | Slow corners, opposite-direction crosstalk, negative skew |
| Hold | early (min) | early (min) | late (max) | Fast corners, same-direction crosstalk, positive skew |
A sample of what interviewers draw from most. The full 621-question ebook covers each topic in much more depth, with every question answered.
What STA is, what it needs and what it can't do.
The two checks every synchronous path must pass.
How real clocks differ from the ideal waveform.
set_clock_uncertainty model before CTS, and how should it change after?Turning a report into a decision.
Telling the tool what the clocks really are.
create_clock for a 500 MHz clock with a 40% duty cycle.create_generated_clock on a divider output? What breaks without it?-asynchronous, -logically_exclusive and -physically_exclusive clock groups?Budgeting time across the chip boundary.
set_input_delay -max and -min from a datasheet?set_driving_cell and set_load model, and what happens if they're missing?Where correct constraints and dangerous ones look alike.
-setup multicycle path normally be paired with a -hold one?-start and -end mean on a multicycle path between clocks of different frequency?set_max_delay -datapath_only instead of a false path?Variation: the topic that separates junior and senior answers.
Checks beyond plain setup and hold.
Fixing violations without creating new ones.
621 questions across 28 chapters, all answered: 25 solved numericals, an annotated setup report, 30 debugging scenarios, plus SDC, Tcl and low-power STA.
Try each one out loud first, then open it. Every answer shows what a strong reply covers, what the interviewer is really listening for, and the mistake that costs candidates the most.
STA checks that every timing path in a synchronous design meets its requirements without input vectors. The tool breaks the design into paths, computes the latest and earliest arrival at each endpoint from library and parasitic data, compares them with the required times set by the clocks and constraints, and reports a slack for every check.
.lib) timing models for every cell, one set per PVT corner.Outputs are timing reports, WNS/TNS summaries, design-rule violations, unconstrained-path reports, and optionally an SDF for gate-level simulation.
Setup time is the minimum time data must be stable before the active clock edge. Hold time is the minimum time it must stay stable after the edge. Together they define a window around the edge where the D input must not change.
Inside the flop, the master latch needs time to settle the new value before it closes (setup), and the old value must not be disturbed while the slave takes over (hold). If data changes inside the window, the flop can capture the wrong value or go metastable: its output hangs between 0 and 1 for an unpredictable time before resolving.
Setup (data must arrive before the next capture edge):
Arrival = T_launch + T_clk→q(max) + T_comb(max) Required = T + T_capture − T_setup − T_uncertainty Setup slack = Required − Arrival
Hold (data must not arrive before the hold window of the same edge closes):
Arrival = T_launch + T_clk→q(min) + T_comb(min) Required = T_capture + T_hold + T_uncertainty(hold) Hold slack = Arrival − Required
T_launch and T_capture are the clock latencies to the two flops. Positive slack passes; negative fails. Note that the period T appears only in setup.
Skew is the difference in clock arrival time between the capture and launch flops: skew = capture latency − launch latency.
That trade-off is exactly what useful skew exploits: delaying a capture clock to rescue a failing setup path, as long as the hold check on that flop pair and the setup of the next stage still pass.
The hold check compares data launched by a clock edge with the capture flop's hold window on that same edge. Both sides of the equation move together with the edge, so the period never appears in it. Slowing the clock gives setup more room but leaves hold slack exactly where it was.
That's why hold is treated as a functional failure: a chip with a hold violation fails at any frequency, while a setup failure can at least be recovered by running slower.
Hold is fixed by adding delay to the data path (buffers or delay cells, usually near the capture flop), using slower cells on that path, or reducing harmful positive skew.
There are also clock paths, clock-gating check paths and asynchronous (reset) paths checked with recovery and removal.
Startpoints are clock pins of sequential cells and input ports. Endpoints are data pins of sequential cells (D, enable, async set/reset, scan enable), clock-gating enable pins and output ports.
A false path is one that never needs to be timed: it can't be sensitised functionally, or it crosses between clocks that are handled by synchronisers. STA stops checking it completely.
A multicycle path is real and must be timed, but the design guarantees it has more than one cycle, e.g. data that's only sampled every second cycle using an enable.
set_multicycle_path 2 -setup -from [get_cells src_reg*] -to [get_cells dst_reg*] set_multicycle_path 1 -hold -from [get_cells src_reg*] -to [get_cells dst_reg*]
The setup MCP moves the capture edge out to the 2nd edge. By default the hold check then moves to the edge just before it (one cycle after launch), which would demand that data stay stable for a whole cycle. The -hold 1 moves the hold check back to the launch edge, as in a normal single-cycle path.
Two identical cells on the same die don't have identical delays because of local process, voltage and temperature variation. OCV models this pessimistically within one corner:
Flat OCV applies one derate everywhere, which is overly pessimistic for long paths. AOCV indexes the derate by logic depth and distance, since random variation partly cancels over many stages. POCV/SOCV models each cell's delay as a mean plus N·sigma (sigma usually from LVF tables in the Liberty) and combines them statistically along the path.
Launch and capture clock paths usually share a common segment from the clock source down to where the tree branches. With OCV, the tool derates that segment late on the launch side and early on the capture side, which is physically impossible: the same buffers can't be slow and fast at the same moment.
Clock path pessimism removal adds that difference back to the slack:
CPPR credit = late delay − early delay of the common clock segment
Example: a common segment of 0.84 ns late and 0.76 ns early gives 80 ps of credit, enough to turn a −50 ps path into +30 ps. Deeper branching points mean more shared buffers and more credit.
A divider, multiplier or clock-gating output creates a new clock whose waveform is derived from a master. create_generated_clock tells the tool that relationship:
create_clock -name CLK -period 1.0 [get_ports clk]
create_generated_clock -name CLK_DIV2 -source [get_ports clk] \
-divide_by 2 [get_pins u_div/q_reg/Q]Without it, the tool doesn't see the flop output as a clock source. Flops clocked by it may be unclocked (unconstrained), the tool may time the clock net itself as data, and paths between the master and divided domains are timed with wrong or missing edge relationships. Source latency through the divider is also lost.
With both clocks defined, the tool finds the tightest edge pair, e.g. a 1 GHz master to a divide-by-2 clock gives a 1 ns setup relationship.
Input and output delays describe how much of the cycle is used outside your block, relative to a clock (often a virtual clock).
set_input_delay -clock VCLK -max 2.0 [get_ports din*] set_input_delay -clock VCLK -min 0.8 [get_ports din*] set_output_delay -clock VCLK -max 1.6 [get_ports dout*] set_output_delay -clock VCLK -min -0.2 [get_ports dout*]
Multi-corner multi-mode analysis times the design in every combination that matters: modes (functional, scan shift, scan capture, low-power states), each with its own clocks and constraints, and corners (process, voltage, temperature and RC extraction corner). A mode + corner pair is a scenario.
At advanced nodes, temperature inversion means cells can be slower at low temperature at low voltage, so setup must also be checked at the cold slow corner.
Then fix with an MCMM-aware tool so the fix doesn't break hold in the fast corner.
First check the report is realistic: are the aggressors' timing windows actually overlapping with the victim, and are any aggressors on a clock that's asynchronous or mutually exclusive? Filtering infeasible aggressors can remove much of the delta.
If it's real, fix the coupling or the victim:
Opposite-direction switching slows the victim (setup); same-direction switching speeds it up (hold). Re-extract and rerun SI-aware STA after the fix.
No. Unconstrained endpoints aren't checked at all, so the clean report says nothing about them. Real violations can be hiding there.
create_clock or create_generated_clock), ports with no input or output delay, clocks blocked by set_case_analysis or a disabled arc, or a too-broad false path.The path has a narrow setup–hold window: delay cells add a little at the fast corner (where hold is checked) and a lot more at the slow corner (where setup is checked). Example: hold needs +120 ps at the fast corner, a delay cell adds 40 ps fast and 90 ps slow, setup has +200 ps. Three cells fix hold but cost 270 ps of setup, so setup fails by 70 ps.
Graph-based analysis propagates the worst slew and worst derate seen at each pin, even if they come from different paths, so it's pessimistic. Path-based analysis recomputes the specific path with its own slews (and, with AOCV/POCV, its own depth), so it's more accurate and usually shows better slack.
If your signoff methodology accepts PBA for final checks, yes: a PBA pass on that path is a real pass. Two cautions:
-nworst setting); the worst GBA path isn't always the worst PBA path.Almost every STA interview has at least one calculation. Work each one on paper first, then tap to check. Units are ns unless stated.
Tmin = Tclk→q + Tcomb + Tsetup + Tunc − Tskew
= 0.12 + 1.60 + 0.08 + 0.05 − 0.10 = 1.75 ns
fmax = 1 / 1.75 ns ≈ 571 MHzNote: positive skew helps setup here, but the same 0.10 ns comes straight off this pair's hold margin.
Arrival = 0.60 + 0.15 + 1.10 = 1.85 Required = 2.00 + 0.55 − 0.07 − 0.10 = 2.38 Slack = 2.38 − 1.85 = +0.53 ns (met) Skew = 0.55 − 0.60 = −0.05 ns
Note: the 50 ps of negative skew cost 50 ps of setup margin. These are the default values in the calculator above.
Arrival = 0.60 + 0.12 + 0.02 = 0.74 Required = 0.55 + 0.04 + 0.03 = 0.62 Slack = 0.74 − 0.62 = +0.12 ns (met)
Note: the 2 ns period wasn't used. Interviewers often include it to see if you'll wrongly add it in.
Capture edge = falling edge at T/2 = 1.5 ns Tcomb(max) = 1.5 − 0.2 − 0.1 = 1.2 ns
Note: hold is checked against the previous falling edge at −1.5 ns, so it gains half a cycle of margin. Duty-cycle distortion shrinks the 1.5 ns window directly.
input delay -max = 0.9 + 1.1 = 2.0 input delay -min = 0.5 + 0.3 = 0.8 Internal budget = 5.0 − 2.0 − 0.1 = 2.9 ns
Note: the min value drives the hold check at the input flop. Leaving it out is a classic gap.
set_multicycle_path 2 -setup -from A -to B set_multicycle_path 1 -hold -from A -to B Capture edge moves to 2 ns: Slack = 2.00 − 0.05 − 1.70 = +0.25 ns
Note: without the -hold 1, hold is checked against the 1 ns edge, so any path faster than about 1 ns fails hold.
CPPR credit = 0.84 − 0.76 = 0.08 ns Slack = −0.05 + 0.08 = +0.03 ns (met)
Note: the shared buffers can't be slow for launch and fast for capture in the same cycle, so the difference was never real.
Common period = LCM(5, 3) = 15 ns CLKA edges: 0, 5, 10 CLKB edges: 0, 3, 6, 9, 12, 15 Launch 0 → capture 3 = 3 ns Launch 5 → capture 6 = 1 ns ← tightest Launch 10 → capture 12 = 2 ns
Note: both clocks are slow, but the path only gets 1 ns. If the crossing is really asynchronous, it needs synchronisers and a clock group instead.
"Walk me through this report" is a standard round. Most practice material shows setup reports; this is a hold report, which reads in the opposite direction. Generic signoff-tool format, units in ns.
Startpoint: u_ctrl/cnt_reg_3_ (rising edge-triggered flip-flop clocked by CLK) Endpoint: u_ctrl/st_reg_0_ (rising edge-triggered flip-flop clocked by CLK) Path Group: CLK Path Type: min Scenario: func_ff_0p88v_m40c_cbest Point Incr Path ------------------------------------------------------------ clock CLK (rise edge) 0.000 0.000 clock network delay (propagated) 0.284 0.284 (1) u_ctrl/cnt_reg_3_/CK (DFFRQX1) 0.000 0.284 r u_ctrl/cnt_reg_3_/Q (DFFRQX1) 0.061 0.345 f (2) u_ctrl/U58/Y (INVX1) 0.018 0.363 r u_ctrl/st_reg_0_/D (DFFQX1) 0.004 0.367 r data arrival time 0.367 (3) clock CLK (rise edge) 0.000 0.000 (4) clock network delay (propagated) 0.331 0.331 (5) clock reconvergence pessimism -0.009 0.322 (6) clock uncertainty 0.030 0.352 u_ctrl/st_reg_0_/CK (DFFQX1) 0.352 r library hold time 0.027 0.379 (7) data required time 0.379 ------------------------------------------------------------ data arrival time 0.367 data required time -0.379 ------------------------------------------------------------ slack (VIOLATED) -0.012 (8)
A very short data path (83 ps) meets 47 ps of positive clock skew, so the data changes before the capture flop's hold window, pushed later by the skew, has closed.
Insert a small delay cell or buffer on the D input of st_reg_0_ (near the capture flop, so other fan-outs aren't slowed), sized to give at least 12 ps plus margin at this fast corner. Then check this pair's setup at the slow corners and confirm no other endpoint shares the delayed segment. If the 47 ps skew isn't intentional useful skew, reducing it is the cleaner fix.
No. The capture edge in this report is the same edge as launch, at 0 ns. Nothing here depends on the period.
Path type is min, the scenario is a fast corner, capture uses the same edge rather than the next one, uncertainty and the library check add to the required time instead of subtracting, and slack is arrival minus required. The ebook walks through a full setup report with ten callouts.
Screening rounds often open with fast checks like these. Aim to answer each in under ten seconds, then tap to check.
No. Hold is checked on the same edge, so the period cancels out.
Setup. It hurts hold by the same amount.
Max (late) data arrival, and early capture clock.
Min (early) data arrival, and late capture clock.
0.8 ns (800 ps).
Worst Negative Slack and Total Negative Slack.
SPEF.
SDF.
Input transition (slew) and output load capacitance.
set_clock_groups -asynchronous.
set_clock_uncertainty.
set_multicycle_path N-1 -hold.
Clock Path Pessimism Removal (also CRPR: Clock Reconvergence Pessimism Removal).
Setup. It slows the victim.
Setup: reset must de-assert early enough before the clock edge. Removal is hold-like.
A latch can, while it's transparent. A flop can't.
Flop-to-flop shift paths with almost no logic between them, plus clock skew.
No. It only stops timing checks. Synchronisers and CDC verification make a crossing safe.
PBA uses the real slews and depth of one path instead of worst-case values merged at each pin.
check_timing (plus the log warnings): find unclocked, unconstrained and looping paths before trusting any slack.
For the night before the interview.
| SETUP | HOLD | |
|---|---|---|
| Question it answers | Does data arrive early enough for the next edge? | Does data stay stable long enough after this edge? |
| Capture edge | Next edge (one period later) | Same edge as launch |
| Depends on period? | Yes | No |
| Data delay used | Max (late) | Min (early) |
| Worst corner (traditional) | Slow process, low V, high T, RC-worst | Fast process, high V, low T, RC-best |
| Positive skew | Helps | Hurts |
| Typical fixes | Upsize, low-Vt, buffer long nets, restructure, useful skew, pipeline | Delay cells near capture, high-Vt or downsize, reduce harmful skew |
| If it fails in silicon | Run the chip slower | Fails at any frequency |
Hold slack is arrival minus required, with min delays, on the same edge. Writing the setup form, or adding the period, is the fastest way to lose a numerical.
Skew is capture latency minus launch latency. Positive skew helps setup and hurts hold. Say the definition before you use it.
It doesn't, at all. Interviewers ask this specifically to find candidates who memorised without understanding.
The default hold check moves along with the setup edge. Without -hold N-1 you get large, fake hold violations, and over-fixing them hurts setup.
A false path removes checks entirely. Without documented design intent it can hide a real failure, and it never proves a clock crossing is safe.
ps vs ns slips are common in live numericals. Write the given values with units, then the formula, then substitute.
Usually two or three: a fundamentals round with setup/hold equations and a numerical or two, a constraints and concepts round (SDC, exceptions, OCV, MCMM), and for experienced candidates a report-reading or debugging round.
Often yes. PD interviews usually include a dedicated timing section, and STA or signoff roles go much deeper into constraints, variation and timing reports than a general PD round. See our Physical Design questions for the rest of the flow.
Almost always. Expect at least one calculation: maximum frequency, setup or hold slack with skew, a half-cycle path, I/O delay budgets or a multicycle path. Write the formula first, substitute step by step and state units.
No. Interviewers test concepts that transfer across tools: equations, SDC, exceptions, OCV, reports. Mention the tools you actually used, including open-source ones like OpenSTA, and focus on what you did with them.
Master the setup and hold equations, skew and slack first, then practise numericals until they are automatic. After that, learn basic SDC, how to read a timing report, and OCV and MCMM at a conceptual level.
No. The hold check compares launch and capture on the same clock edge, so the clock period does not appear in the hold equation. Hold is fixed by adding data-path delay or adjusting clock skew.
Book a 1:1 mock interview with a mentor working in this exact domain.
Book a mock interview