When a timing path shows a large negative slack, what are the two canonical fixes, and how do you choose between them?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
For a violating R2R path, the two canonical fixes are: swap to faster cells along the path (if faster library variants exist), or split the path by inserting a register partway through, creating a new, shorter R2R endpoint. Either fix requires re-running LEC between the modified netlist and the golden RTL to confirm functional equivalence -- this same swap-vs-split methodology is the core approach used in post-PD ECO timing closure generally, not just this one worked example.
Technical Explanation
- Fix 1: swap to faster cells -- replace cells on the violating path with faster library variants if available. Simple, but limited by what the library actually offers.
- Fix 2: split the path (register insertion) -- register the output partway through the path, creating a new, shorter R2R endpoint out of what was one long path.
- Splitting genuinely changes the pipeline structure (adds a cycle of latency at that point), while swapping cells does not -- this is a real architectural tradeoff, not just a timing-closure detail.
- Either fix requires re-running LEC (logic equivalence checking) between the modified netlist and the golden RTL to confirm functional equivalence -- a timing fix that silently breaks function is not actually a fix.
What To Check
- Warning sign: a reported R2R path has large negative slack (well beyond what cell swapping alone is likely to recover).
- Inspect: check whether faster library variants for the path's cells actually exist and would recover enough slack, or whether the gap is too large for sizing alone.
- Correct: if sizing can't close the gap, consider path splitting -- but confirm the added pipeline latency is architecturally acceptable before committing to it, and re-run LEC after either fix.
Command Checks & Actions
size_cellSwaps a cell on the violating path to a faster (or slower) library variant, the simpler of the two canonical fixes.
report_timingConfirms whether the swap or split actually recovered positive slack on the path in question.
Healthy, Suspicious & Hard-stop Results
- Expected: the chosen fix (swap or split) recovers positive slack, and LEC confirms the modified netlist remains functionally equivalent to the golden RTL.
- Investigate: cell swapping alone doesn't close the gap even with the fastest available library variant -- this is the signal to consider path splitting instead of continuing to search for a bigger swap.
- Stop: a timing fix (either type) is applied without a subsequent LEC re-run -- a timing-passing but functionally-broken netlist is not a real fix.
Common Mistake
The Trap: Choosing to split a path (adding real pipeline latency) when a simple cell swap would have closed the gap, or the reverse -- exhausting sizing options on a path that genuinely needs restructuring.
What The Interviewer Is Testing
Whether you know both canonical fixes and the real tradeoff between them (added latency vs. limited by library speed), and that LEC re-verification is mandatory after either one.
Practical Example
Worked Example: A path through a D-flip-flop, a NAND2, and an XNOR2 shows -284ps slack. Cell swapping alone can't close a gap that large given the available library variants, so the fix splits the path by registering the NAND2's output -- the new, shorter path closes at +98ps slack, at the cost of one added pipeline cycle at that point.
Physical Design & Planning Handbook
Master ASIC Physical Design Planning & Floorplanning
Dive into 14 comprehensive chapters covering netlist sanity, FinFET grids, macro placement, power grids, CTS, and timing budgeting.
Continue practising