How do you detect and undo an ECO that displaced too much?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
After an ECO change list is applied and legalized, run report_eco_physical_changes (ICC2) to see how far each sized or added cell moved and how much its nets grew. Cells that landed far from their connections usually cost more delay than they saved. Undo them with revert_eco_changes -cells (ICC2), which removes the added buffer or inverter pair, or restores the original cell, location and orientation.
Technical Explanation
- Scope:
report_eco_physical_changes(ICC2) covers changes made withsize_cell(ICC2),add_buffer(ICC2) andadd_buffer_on_route(ICC2). Changes from other editing commands, includinginsert_buffer(ICC2), are not reported. Synopsys recommends running it after ECO legalization or ECO routing. - Without options it prints only a global summary: total ECO cells, maximum and average displacement, the number of cells outside their connection bounding box, and the ratio of ECO net route length to estimated length.
-type cell_displacementlists each cell's original location, current location and displacement. The original location is where the cell was inserted or sized, or its pre-legalization location ifplace_eco_cells(ICC2) placed it. An asterisk marks a cell outside its connection box, and those cells are listed first.-min_displacementfilters the list and defaults to 5.0 times the site height.-type net_lengthreports estimated length, actual route length and their ratio for each ECO net.-min_net_length_ratiodefaults to 1.1, a real length 110% of the estimate.-type estimated_cell_displacementpredicts displacement before legalization using placement resource feasibility analysis. Cells over-min_estimated_displacementgo into the collection eco_estimated_large_displacement_cells. The default threshold is infinity, so the collection stays empty until you set one, and the prediction is optimistic.revert_eco_changes(ICC2) handles the same three commands. A new buffer is removed and the original connections restored; inverters are removed as a pair so the logic stays the same; a sized cell returns to its original reference, location and orientation.- Reverting brings the original violation back. Fix it again another way: a smaller cell, a different pin, or physically aware fixing in PrimeTime that only uses space that exists.
What To Check
- Global summary: maximum and average displacement, and the count outside the connection box.
- The per-cell list above your threshold, starting with the asterisked cells.
- Net length ratio on ECO nets, especially on critical paths.
- Timing on the endpoints the reverted cells were fixing, after the revert.
Command Checks & Actions
report_eco_physical_changesPrints the global displacement and net length summary for ECO cells.
report_eco_physical_changes -type cell_displacement -min_displacement 10Lists cells that moved 10 um or more, cells outside their connection box first.
report_eco_physical_changes -type net_length -min_net_length_ratio 1.5Lists ECO nets whose routed length is 1.5 times the estimate or more.
report_eco_physical_changes -type estimated_cell_displacement -min_estimated_displacement 10Before legalizing, collects cells predicted to move 10 um or more.
revert_eco_changes -cells [get_cells $revert_cells]Undoes the buffer, inverter pair or resize on the listed cells.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): Maximum displacement 3 um, no cells outside their connection box, net length ratios under 1.1.
- Suspicious (illustrative): A few asterisked cells, or displacement above five site heights clustered in one dense region.
- Hard stop: ECO buffers 50 um or more from their driver-load box, or length ratios above 2 on critical nets. Revert and re-plan before routing.
Common Mistake
The Trap: Reading only the average displacement in the summary, say 2 um, and moving on. The average hides the seven buffers that went 45 um away because their region was full. Those seven add wire delay on paths they were meant to fix, and the next signoff run shows new violations the team then chases for another round.
What The Interviewer Is Testing
- Knows which ECO commands the report and the revert cover.
- Reads the per-cell list and the asterisk, not only the average.
- A strong answer plans a different fix for the reverted endpoints instead of stopping at the revert.
Follow-up Question & Model Response
"Why revert with the command instead of moving the cell back by hand?"
Candidate Model Response: Moving a cell only changes its location, while the buffer or resize stays in the netlist. revert_eco_changes (ICC2) undoes the logical change too: it removes the buffer and reconnects the net, removes inverter pairs together, and restores the original reference. After the revert, the layout netlist no longer matches the edited netlist PrimeTime still holds. Write the netlist out again and reload it in PrimeTime so the next round starts from what is really in the layout.
Practical Example
Tapeout Scenario: A physically aware PrimeTime change list adds 180 buffers with add_buffer_on_route (ICC2) and resizes 95 cells (illustrative). After place_eco_cells (ICC2), the summary shows 275 ECO cells, maximum displacement 48 um, average 2.1 um and 7 cells outside their connection box. The cell displacement report above 10 um lists 9 cells, the 7 asterisked ones all beside one macro, and their nets route at 2.4 to 3.1 times the estimate. The 7 are reverted, and their 7 endpoints go back to between -6 and -11 ps. A second PrimeTime pass fixes them with sizing only, and the new summary shows maximum displacement 6 um and none outside the box.
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