This stage covers ECO and incremental requalification: saving a baseline, setting ECO mode, spare cell inventory, netlist-driven edits, placing and legalising ECO cells, freeze-silicon mapping, incremental routing, post-ECO DRC and fill, and the timing impact.
Sanity check cheat sheet
One row per command card. Read left to right: the check, the command that answers it, then what a healthy result, a result to review and a hard stop look like.
| Card | Check and when | Command | Healthy | Review | Hard stop |
|---|---|---|---|---|---|
| E-01 | Baseline saved Before the ECO |
save_blocksave_lib <lib> |
The block and library are saved under a named baseline, and the reports from it are kept. | A baseline is saved, but its reports were regenerated later. | There is no baseline to compare with or roll back to. |
| E-02 | ECO mode Before edits |
set_app_options -name design.eco_freeze_silicon_mode -value true |
The mode matches the plan: a metal-only ECO uses freeze mode, and other ECOs leave it off. | The mode was changed mid-ECO, with a recorded reason. | The plan is metal-only, but the mode is not set. |
| E-03 | Spare cell inventory Before tape-out |
add_spare_cells -cell_name spare -lib_cell {AND2 OR2} -num_instances <n> |
Spare types and counts are spread across the block as planned. | Spares are clustered by cell density only, and the owner has reviewed them. | Spare types or counts are missing for the planned ECOs. |
| E-04 | Netlist-driven ECO After logic change |
eco_netlist -by_verilog_file eco.v -write_changes eco_changes.tclsource eco_changes.tcl |
The change script was reviewed and applied once, and physical-only cells were compared where relevant. | Timing ECO changes are included deliberately. | The script was applied unreviewed, or run twice. |
| E-05 | ECO cell placement After edits |
place_eco_cells -eco_changed_cellslegalize_eco_cells -cells $ecoCells -displacement_tolerance_level lowcheck_legality |
All ECO cells are placed and legal, and displacement is small. | Existing cells were moved, and each move is listed. | ECO cells are unplaced or illegal. |
| E-06 | Freeze silicon mapping Metal-only ECO |
place_freeze_silicon -cells {ECO1 ECO2}check_freeze_silicon |
Every ECO cell maps to a matching spare cell. | A script that replaces cells with logically equivalent ones was used and reviewed. | An ECO cell has no matching spare. |
| E-07 | Incremental routing After placement |
route_eco -nets {net1 net2} -reroute modified_nets_onlycheck_routes |
Only the modified nets were rerouted, with zero DRC, opens or shorts. | Nets outside the ECO changed, with a recorded reason. | Opens, shorts or DRC remain after routing. |
| E-08 | DRC and fill after ECO After routing |
signoff_check_drc -auto_eco truesignoff_create_metal_fill -remove_by_rule drc_auto |
Only the changed areas were rechecked, and fill shapes in conflict were removed. | The change exceeds the incremental threshold, so a full run is used. | Full signoff DRC was never rerun before hand-off. |
| E-09 | Timing and ECO impact After DRC clean |
update_timing †report_timingreport_eco_physical_changes |
Slack is within the project budget, and physical changes are small. | A few cells show large displacement, and each is reverted or approved. | Timing was not refreshed after the ECO. |
Command cheat sheet
ICC2 commands. Angle brackets are placeholders, and values shown are examples, not project limits. A dagger (†) marks a command the notes behind this book do not fully cover; it is shown without options, so confirm it with man or help in your release.
| Checkpoints | |
|---|---|
save_block | Saves the block to disk. Changes the session; record it. |
save_lib <lib> | Saves the design library, since changes are in memory until saved. |
save_block -as <block>/<label> | Saves a labelled version to roll back to. |
| ECO settings and spares | |
set_app_options -name design.eco_freeze_silicon_mode -value true | Enables freeze silicon ECO mode. Changes the session; record it. |
add_spare_cells -cell_name spare -lib_cell {AND2 OR2} -num_instances <n> | Spare cells of each type spread over the placement area. Changes the session; record it. |
add_spare_cells -cell_name spare -num_cells {NAND2 20 NOR 15} | Spare cells with different counts per type. Changes the session; record it. |
| Netlist-driven ECO | |
eco_netlist -by_verilog_file eco.v -write_changes eco_changes.tcl | Tcl editing commands from the difference against a golden netlist. |
source eco_changes.tcl | Applies the reviewed edits. Changes the session; record it. |
size_cell <cell> -lib_cell <lib_cell> | Resizes one cell. Changes the session; record it. |
add_buffer -object_list {net1} -lib_cell <buf> | Buffers inserted on the listed nets. Changes the session; record it. |
| Place the ECO | |
place_eco_cells -eco_changed_cells | Places cells changed by ECO operations on free sites near connectivity. |
legalize_eco_cells -cells $ecoCells -displacement_tolerance_level low | Legalises ECO cells with little movement. |
place_freeze_silicon -cells {ECO1 ECO2} | Places ECO cells and maps them to spare cells. |
check_freeze_silicon | Lists ECO cells without a matching spare cell. |
| Route and check | |
route_eco -nets {net1 net2} -reroute modified_nets_only | Incremental routing of modified nets. Changes the session; record it. |
check_routes | Routing DRC, opens and antenna findings. |
check_legality | Placement legality after the ECO. |
signoff_check_drc -auto_eco true | IC Validator DRC on changed areas only. |
report_eco_physical_changes | Shows displacement caused by sizing and buffering ECOs. |