IntermediateQuestion 189 of 192Source: Synopsys ICC2 Implementation User Guide: ECO Flow, Placing ECO Cells

How does ICC2 know which cells an ECO touched?

From PDVerse PnR Interview Handbook · pdVerse Mentor Guide

Short Answer

Each changed cell carries the eco_change_status (ICC2) attribute, and its value says what kind of edit touched it. place_eco_cells -eco_changed_cells (ICC2) works on cells whose status is create_cell, change_link, add_buffer, size_cell or add_buffer_on_route. After legalization the status becomes eco_legalized, so the same cells are not picked up again.

Technical Reference DiagramHow does ICC2 know which cells an ECO touched?
A table of eco_change_status values, create_cell, change_link, add_buffer, add_buffer_on_route, size_cell, eco_placed and eco_legalized, with which command sets each and how place_eco_cells treats it.

Technical Explanation

  • Values that mark a changed cell: create_cell, change_link, add_buffer, size_cell and add_buffer_on_route. The ICC2 guide lists the first four, and the command reference for place_eco_cells (ICC2) adds add_buffer_on_route.
  • Who sets it: eco_netlist (ICC2) sets it on the cells it changes, and the command reference says Tcl editing commands set it too. If the netlist was changed some other way, set it yourself with set_attribute (ICC2).
  • After placement: place_eco_cells (ICC2), with or without -legalize_only, resets the status of changed cells to eco_legalized. With -no_legalize it becomes eco_placed, and cells that were not changed keep their status.
  • Other commands read it too. report_cell_feasible_space (ICC2) ignores ECO cells unless they are eco_legalized, and place_freeze_silicon -cells (ICC2) maps only cells with is_fs_eco_add true and one of the changed values.
  • Why it matters: -eco_changed_cells lets you place only what the ECO touched, leaving the rest of the placement alone. If a changed cell is missing its status, it is never placed; if an old cell still shows a changed value, it is moved again.
  • This page is about how ICC2 tracks the change. Comparing an ECO netlist with the golden netlist, and deciding which differences become edits, is covered on the eco-netlist page. The two meet here: every edit that eco_netlist (ICC2) writes leaves a status value behind, and that value is what later placement steps select on.

What To Check

  • Count of cells with each value before place_eco_cells (ICC2).
  • That the count matches the number of edits in the change file.
  • All changed cells at eco_legalized after placement.
  • No unplaced cells left once placement finishes.

Command Checks & Actions

ICC2 (icc2_shell)get_attribute [get_cells U1] eco_change_status

Shows the ECO status of one cell.

ICC2 (icc2_shell)get_cells -filter eco_change_status==add_buffer

Collects all buffers added by ECO edits.

ICC2 (icc2_shell)set_attribute [get_cells ECO17] eco_change_status create_cell

Marks a cell as changed when it was edited outside eco_netlist.

ICC2 (icc2_shell)place_eco_cells -eco_changed_cells

Places and legalizes only the changed cells.

ICC2 (icc2_shell)report_cell_feasible_space

Reports remaining free space; counts only eco_legalized ECO cells as occupied.

Healthy, Suspicious & Hard-stop Results

  • Healthy (illustrative): The change file has 57 edits and 57 cells carry changed values; after placement all 57 are eco_legalized.
  • Suspicious (illustrative): More cells marked changed than the change file explains, often left over from an earlier round.
  • Hard stop: Changed cells with no status, which -eco_changed_cells will skip, leaving them unplaced.

Common Mistake

The Trap: Building new cells with a hand-written script that bypasses the normal edit path, then running place_eco_cells -eco_changed_cells (ICC2). Cells whose status was never set are not placed. They sit at the origin or unplaced, and route_eco (ICC2) routes to them or reports opens, which takes an hour to trace back.

What The Interviewer Is Testing

  • Knows the values that count as changed.
  • Knows how legalization resets the status.
  • Checks the attribute when the netlist was changed outside eco_netlist (ICC2).

Follow-up Question & Model Response

"What happens if you run place_eco_cells -no_legalize and then run it again with -legalize_only?"

Candidate Model Response: The first run places the changed cells and sets their status to eco_placed. The command reference for place_eco_cells (ICC2) says -eco_changed_cells, with or without -legalize_only, selects only cells whose status is create_cell, add_buffer, change_link, size_cell or add_buffer_on_route, so eco_placed cells are not selected. The second step must be -legalize_only -cells with an explicit collection of the cells you placed. Afterwards, check that every one of them ends at eco_legalized.

Practical Example

Tapeout Scenario: An ECO script adds 40 buffers with add_buffer (ICC2) and resizes 17 cells with size_cell (ICC2) (illustrative). After sourcing it, get_cells -filter (ICC2) finds 40 cells at add_buffer and 17 at size_cell, 57 in total, matching the 57 edits. place_eco_cells -eco_changed_cells (ICC2) places them and all 57 move to eco_legalized. A later round adds 6 more buffers, and only those 6 carry a changed value, so only they are placed.

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. →