Part 9 of the Tcl command reference covering ECO (Engineering Change Order) commands used to make incremental modifications to a routed design without disrupting the existing routing. ECOs are essential for late-stage timing fixes, functional patches, and metal-only spins that minimize mask cost and turnaround time.
The complete physical design flow follows this order:
- Design & Database Setup
- Floorplanning
- Power Planning
- Placement
- Clock Tree Synthesis
- Routing
- Optimization
- Signoff & Reports
Quick Reference: ECO Commands for EDA Tools
ECO commands allow you to add, delete, move, or modify cells and nets after the design is fully placed and routed. In ICC2 and Innovus, ECO routing preserves existing routing as much as possible. Metal-only ECOs change only specific metal layers, reducing mask costs and fabrication turnaround time significantly.
| Command | Description |
|---|---|
eco_add_cell | Adds a cell to the design during ECO |
eco_delete_cell | Deletes a cell from the design during ECO |
eco_move_cell | Moves a cell to a new location during ECO |
eco_change_cell | Changes cell type or size during ECO |
eco_add_buffer | Adds a buffer during ECO for timing fix |
eco_connect_cell | Connects a cell pin to a net during ECO |
eco_disconnect_cell | Disconnects a cell pin from a net during ECO |
eco_route | ECO routing for incremental net changes |
eco_optimize | ECO optimization for timing or power |
eco_check | Checks ECO validity and potential violations |
report_eco | Reports ECO changes and impact summary |
Typical ECO Implementation Script
# === Typical ECO Implementation Flow ===
# Add a buffer for timing fix
eco_add_buffer -cell BUF_X4 -location {100 200} \
-input_net net1 -output_net net2
# Connect the buffer
eco_connect_cell -pin buffer/Z -net net2
# Delete an unused cell
eco_delete_cell -cell unused_cell_inst
# Move a cell to fix congestion
eco_move_cell -cell inst_123 -location {150 250}
# ECO routing
eco_route -modified_nets_only
# ECO optimization
eco_optimize -effort high
# Check and report ECO
eco_check -verbose > reports/eco_check.rpt
report_eco > reports/eco_summary.rpt
Command Deep-Dive: Understanding Each Command
What it is: eco_add_cell inserts a new standard cell instance into a routed design for ECO fixes. The cell is placed at a specified location and its pins are available for connection with eco_connect_cell. Common uses include adding buffers for timing, clamp cells for ESD, or level shifters for voltage domains.
Where we use it: During timing closure when extra buffering is needed. Also used for functional ECOs where new logic gates are required. The cell is placed at a specific coordinate and must not overlap existing cells or violate placement legality.
Syntax: eco_add_cell -cell <cell_type> -location {x y} [-input_net <net>] [-output_net <net>]
# Add a buffer cell
eco_add_cell -cell BUF_X8 -location {120 340} \
-input_net data_net -output_net buffered_net
# Add a tie-high cell
eco_add_cell -cell TIEH_X1 -location {50 50}
# Add a level shifter
eco_add_cell -cell LS_X4 -location {200 150} \
-input_net core_signal -output_net io_signal
What it is: eco_delete_cell removes a cell instance from the design. The cell's output pins are disconnected and the fanout nets are left floating. You must reconnect the fanout using eco_connect_cell or remove the floating nets.
Where we use it: When a cell is no longer needed due to logic changes or when replacing a cell with a different type via eco_change_cell. Deleting unused cells frees up area and reduces leakage power.
Syntax: eco_delete_cell -cell <inst_name>
# Delete a single cell
eco_delete_cell -cell inst_123
# Delete multiple cells
eco_delete_cell -cell {inst_123 inst_124 inst_125}
# Verify deletion
report_eco > reports/eco_impact.rpt
What it is: eco_route routes only the nets that have been modified during the ECO without disturbing existing routing on unchanged nets. It supports metal-only ECO where only specific metal layers are rerouted.
Where we use it: After all ECO cell changes are made. ECO routing is critical for minimizing mask cost in late-stage designs. Metal-only ECOs limit changes to a subset of metal layers, drastically reducing fabrication cost.
Syntax: eco_route [-modify_via_only] [-modified_nets_only] [-timing_driven <bool>]
# Route only modified nets
eco_route -modified_nets_only
# Via-only ECO (cheapest mask change)
eco_route -modify_via_only
# Timing-driven ECO route
eco_route -timing_driven true -effort high
What it is: eco_optimize performs incremental optimization on the design after ECO changes. It can resize cells, rebuffer nets, and fix setup or hold violations introduced by the ECO without a full re-optimization.
Where we use it: After ECO cell changes and routing to clean up any timing or power degradation caused by the ECO. It runs with lower effort than the main optimization to minimize runtime and routing changes.
Syntax: eco_optimize [-effort <effort>] [-focus <focus>]
# Basic ECO optimization
eco_optimize -effort medium
# ECO optimization for timing only
eco_optimize -focus timing -effort high
# ECO optimization for DRC cleanup
eco_optimize -focus drc
What it is: report_eco summarizes all ECO modifications made to the design including cells added, deleted, moved, and nets rerouted. It is used to verify that the ECO was applied correctly and to document changes for tape-out.
Where we use it: After all ECO operations to verify and document the changes. The ECO report is important for revision control and for the mask team to understand which layers are affected by metal-only ECOs.
Syntax: report_eco [-verbose] [-output <file>]
# Basic ECO report
report_eco > reports/eco.rpt
# Detailed ECO report
report_eco -verbose > reports/eco_detailed.rpt
# ECO validity check
eco_check -verbose > reports/eco_check.rpt
Mastering these ECO commands is essential for efficient late-stage design changes. A well-executed ECO can save weeks of turnaround time and significant mask costs by limiting changes to only the necessary layers and cells. Continue to Part 10: Verification Commands →