IntermediateQuestion 190 of 192Source: Synopsys PrimeTime User Guide: Distributed Multi-Scenario Analysis and ECO Flow

Why is hold checked at several corners, and how do you fix it across all of them at once?

From PDVerse PnR Interview Handbook · pdVerse Mentor Guide

Short Answer

Each corner scales cell and wire delays differently, so hold slack, which depends on the difference between data delay and clock skew, can be worst in more than one corner. A delay cell that fixes hold in the fast corner adds even more delay in the slow corner and can break setup there. Run the fix in DMSA with every signoff scenario in focus, current_scenario -all (PT) then fix_eco_timing -type hold (PT), so each change is checked against all of them.

Technical Reference DiagramWhy is hold checked at several corners, and how do you fix it across all of them at once?
A corner matrix of one hold path and its setup path across fast, typical and slow corners, showing slack before fixing, after a fix chosen in the fast corner alone, and after a DMSA fix that sees every scenario.

Technical Explanation

  • Hold is usually worst in the fast corner, where data paths are shortest. It is not only there: paths with large clock skew or long wires can be worst elsewhere, which is why hold is signed off in several corners.
  • Hold fixing adds delay to the data path. The same cell adds more delay in the slow corner, so every hold fix eats into slow-corner setup margin.
  • In a single scenario the fixer sees only that scenario, so it can pick a cell that is right there and wrong in another corner.
  • In DMSA the manager runs fix_eco_timing (PT) against every scenario in command focus. Hold fixing avoids new setup and DRC violations, and with all scenarios in focus that holds in every one of them. Before committing a netlist change, PrimeTime checks it can succeed in all scenarios in focus.
  • Set up scenarios with create_scenario (PT), hosts with set_host_options (PT) and start_hosts (PT), then current_scenario -all (PT) restores focus to all scenarios before fixing.
  • For violations of about 5 ps or less, -load_cell_list adds load cells, which fix small hold violations without the larger delay of a buffer.
  • When scenarios outnumber hosts, eco_enable_more_scenarios_than_hosts (PT) lets the ECO swap scenarios through hosts, at a runtime cost.

What To Check

  • Hold slack for each violating path in every hold scenario, not only the worst.
  • Setup slack in the slow scenarios on the same paths.
  • All signoff scenarios in command focus before fixing.
  • Unfixable reasons for any path left failing.

Command Checks & Actions

PrimeTime (pt_shell)create_scenario -name ff_m40 -specific_data ff_m40.tcl

Defines one scenario for the manager.

PrimeTime (pt_shell)set_host_options -num_processes 8

Sets up worker processes.

PrimeTime (pt_shell)start_hosts

Starts the worker processes.

PrimeTime (pt_shell)current_scenario -all

Puts every scenario in command focus.

PrimeTime (pt_shell)report_timing -delay_type min -max_paths 50

Merged hold report across all scenarios in focus.

PrimeTime (pt_shell)fix_eco_timing -type hold -buffer_list {DLY1X2 DLY2X2} -load_cell_list {LOAD1 LOAD2}

Fixes hold once, checked against every scenario.

Healthy, Suspicious & Hard-stop Results

  • Healthy (illustrative): Hold clean in every scenario, and slow-corner setup on the fixed paths still +20 ps or better.
  • Suspicious (illustrative): Paths fixed in one corner that now fail by a few ps in another hold scenario.
  • Hard stop: Hold fixes that push slow-corner setup negative, or paths the tool marks unfixable in all scenarios.

Common Mistake

The Trap: Fixing hold in the fast scenario on its own, then checking setup later. The tool picks the delay cell that best fixes the fast corner, and in the slow corner it adds enough delay to break setup on 30 paths. The next round has to undo half the hold fixes to recover setup.

What The Interviewer Is Testing

  • Knows why a single-corner hold fix is unsafe.
  • Knows how DMSA puts every scenario in front of the fixer.
  • Chooses fixes that are small in the slow corner, such as load cells.

Follow-up Question & Model Response

"What do you do when a path cannot be fixed in all corners at once?"

Candidate Model Response: First confirm it: the tool's unfixable reasons say whether any cell satisfied hold in one corner without breaking setup in another. Then look for a different fix point, such as a pin on the hold path shared with paths that have more setup margin, or a load cell that adds less delay. If none exists, the problem is in the clock, where skew differs between corners, so a clock-side change or a structural change is needed. Treat it as a design issue, not something to force with more buffers.

Practical Example

Tapeout Scenario: One path fails hold by -25 ps in the fast corner and -5 ps in typical, with slow-corner setup at +80 ps (illustrative). A fast-corner-only run picks a cell adding 45 ps fast and 90 ps slow, leaving slow setup at -10 ps. The DMSA run sees the slow scenario and picks a cell adding 30 ps fast, about 40 ps typical and 55 ps slow. Fast hold ends at +5 ps, typical hold at +35 ps, and slow setup at +25 ps.

PnR Flow Mentor Guide

Read the complete 8-chapter PnR Flow Mentor Guide free on the web — library setup through placement, clock tree synthesis, routing, chip finishing, hierarchical implementation, and ECO, all the way to stream-out.

PnR Flow Physical Design Mentor Guide — eight chaptersPnR Flow Mentor GuideEight chapters, library setup through to stream-out. →