How do you try an ECO in PrimeTime before committing to it?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
PrimeTime lets you edit its in-memory netlist, see the timing effect, and only then write the change out for ICC2. Use estimate_eco (PT) to rank the options quickly, commit the one you like with size_cell (PT) or insert_buffer (PT), and check it with report_timing (PT). The timing update stays incremental, and therefore fast, only while you stick to the edit commands PrimeTime supports for what-if analysis.
Technical Explanation
- The edit changes PrimeTime's in-memory netlist, and an incremental update re-times only the part of the design it touches.
- The incremental update works for
size_cell(PT),insert_buffer(PT),remove_buffer(PT),set_coupling_separation(PT),remove_coupling_separation(PT),connect_net(PT),disconnect_net(PT),remove_net(PT),create_cell(PT) andremove_cell(PT). Use any other netlist editing command and the nextupdate_timing(PT) becomes a full update. - The update covers the affected nets, their aggressors and a fanout cone limited by where slew stops changing. Crosstalk results can differ slightly from a full analysis, so signoff still needs a full run.
estimate_eco(PT) is faster again. It computes one stage from its current timing: incoming transition, load, parasitics if present, and each candidate cell's drive. The numbers are not guaranteed exact, so use it to explore andreport_timing(PT) to decide.estimate_eco -type size_cell(PT) lists each alternative cell with area, stage delay, arrival and slack, the current cell marked by an asterisk. The-type insert_bufferform with-verbosecompares current and estimated delays.eco_estimation_output_columns(PT) adds more columns.- Same-name trap:
size_cell(PT) edits PrimeTime's copy of the netlist, whilesize_cell(ICC2) edits the layout and has freeze-silicon spare-cell awareness. PrimeTime inserts buffers withinsert_buffer(PT); ICC2 scripts normally useadd_buffer(ICC2) oradd_buffer_on_route(ICC2), though ICC2 also acceptsinsert_buffer(ICC2). - Manual edits ignore dont_use settings; PrimeTime only warns (NED-076), so read the log before
write_changes -format icctcl(PT). - The update cannot include parasitic changes from the new placement and routing; those arrive after ICC2 implements the change and the block is extracted again.
What To Check
- Every edit in the plan uses a command that keeps the update incremental.
- The gap between the
estimate_eco(PT) number and the committedreport_timing(PT) slack. - Hold slack on other paths through the edited stage, not only the setup path you targeted.
- Any NED-076 dont_use warning in the log.
Command Checks & Actions
estimate_eco -type size_cell -max -rise CPU2/U93Lists alternative library cells for the stage with estimated stage delay, arrival and slack.
estimate_eco -type insert_buffer -inverter_pair -max -rise -verbose -lib_cells {INVD2} CPU2/U25/YEstimates the stage change from inserting an inverter pair at a pin, before touching the netlist.
size_cell CPU2/U93 mylib90/INVD3Commits the chosen resize to PrimeTime's netlist.
insert_buffer {u3/A u4/A} class/B1ICommits a buffer at the listed load pins.
update_timingRuns the incremental timing update for the committed edits.
report_timing -delay_type min -through CPU2/U93/YChecks hold on paths through the edited stage.
write_changes -format icctcl -output eco_changes.tclWrites the accepted edits as a Tcl change list for ICC2.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): The estimate said +8 ps, the committed report says +6 ps, and hold through the stage moved by 3 ps or less.
- Suspicious (illustrative): Estimate and committed slack differ by 20 ps or more, or the log shows a full rather than incremental update.
- Hard stop: The setup fix leaves a hold check through the same net negative, or the chosen cell carries an unapproved dont_use warning.
Common Mistake
The Trap: Picking a cell straight from the estimate_eco (PT) table and writing the change list without committing it and running report_timing (PT). The estimate ignores what happens beyond the stage, so a hold path through the same net can go negative unseen. It then shows up in the next signoff run, and the round trip through ICC2 and extraction is wasted.
What The Interviewer Is Testing
- Knows which edit commands keep the what-if update incremental.
- Can explain why
estimate_eco(PT) is for exploring andreport_timing(PT) is for deciding. - Does the candidate remember that PrimeTime cannot see the parasitic change ICC2 will make?
Follow-up Question & Model Response
"Why might a fix that looked clean in PrimeTime come back worse after ICC2 implements it?"
Candidate Model Response: PrimeTime times the edit on the parasitics it already has, and the guide says the update does not account for changes caused by new placement and routing. ICC2 then places the new cell where there is room and ECO-routes its nets, so real wire length and coupling differ from the assumption. That is why you extract again and re-run PrimeTime after every implemented ECO, and why physically aware ECO, which only makes changes where space exists, narrows the gap.
Practical Example
Tapeout Scenario: A setup path fails by -14 ps at CPU2/U93, an INVD2 (illustrative). estimate_eco -type size_cell (PT) shows INVD3 at +8 ps and INVD8 at +31 ps for three times the area, so INVD3 is chosen. After size_cell (PT) and update_timing (PT), report_timing (PT) shows +6 ps, and a hold path through the same net moves from +18 ps to +15 ps. After ICC2 implements it and the block is extracted again, the path signs off at +4 ps.
PnR Flow Mentor Guide
Master the Physical Design Implementation Flow
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.

Continue practising