Skip to content
Ch 15 / 16 Chapter 15: ECO and incremental requalification
CHAPTER 15

ECO and incremental requalification

A late change is the most likely thing to damage a design that was already qualified. An engineering change order, or ECO, edits a placed and routed design and tries to keep the work around it. This chapter shows how to record the change, how to check that it did only what was intended, and how to decide which earlier checks must be run again.

15.1 Stage purpose

An ECO changes a design that already has its placement, clock tree and routing, and keeps as much of that work as it can. The reason is cost. A late change that restarts placement and routing discards every result that Chapters 1 to 14 qualified, while a small, controlled change keeps most of them. The price is that you must show which results are still true.

The reference describes three ways of making the change. ecoAddRepeater, ecoChangeCell and ecoDeleteRepeater edit one object at a time in the live database. ecoDesign takes a new netlist, restores the saved design and applies the netlist changes. loadECO applies a list of ECO directives to the design that is already in memory, so the baseline must be restored first. ecoPlace and ecoRoute then place the new cells and route the new and modified nets. A separate post-mask flow, used only after masks exist, changes metal and via layers and reuses spare cells. This chapter marks that flow as optional.

A small change touches more than the object you name. The figure below shows one buffer inserted on a routed net. The buffer needs row space, so two filler cells leave. The net is cut, so wires are deleted and new wires and vias are added, and every one of them must be checked again. The amber box is the changed area. The physical difference report, later in the chapter, gives you that box.

Before: net n1 from U1 to U2, routed M2 and M3After: buffer B1 inserted on n1U1U2U1B1U2changed areaP = 12 units, track pitch (illustrative)M2, horizontalM3, verticalV23 via, cut and enclosureM1 pinfiller cellremoved wire or viachanged areaLedger for this one buffer (illustrative, counted from the drawing)instances+1 (B1)filler cells2 removed, 0 addedwire segments2 deleted, 3 addedvias3 V23 added, 1 V23 deleted, 2 V1 addednetsn1 becomes 2 netschanged area8 x 7 pitches
Figure 22. What one buffer insertion changes on a routed net
Read it. The left panel is the routed net n1 from U1 to U2, using an M2 run, an M3 run and two vias. In the right panel, buffer B1 sits in row 2. Two filler cells are gone, two wire pieces are deleted and drawn as dashed outlines, and three wires and three vias are new. The amber dashed box bounds every changed shape. The ledger counts only what is drawn, and its values are illustrative.

The vocabulary of this chapter is short. The baseline is the saved design the ECO starts from. The manifest is your record of what the ECO was meant to do. The difference report is the tool's record of what changed. Incremental requalification means rerunning only the checks that the change can have invalidated, and keeping the evidence of the others.

Completion is not qualification

An ECO command that returns without an error tells you that the edit was applied. It does not tell you that placement is legal, that routing is clean or that timing improved. Three kinds of evidence close that gap: the manifest for intent, the difference report for what really changed, and the reruns chosen from the matrix in Section 15.7.

15.2 Entry prerequisites

Must already be trueWhy
The baseline design passed Chapters 1 to 14, with its reports keptThe ECO tries to keep that evidence valid. Without it, there is nothing to compare against.
The baseline is saved and has been restored once in a new sessionA failed ECO is undone by restoring, not by editing back. A save that never restored is not a rollback.
A written change request names the reason, the objects and the expected effectThe manifest, and the choice of row in the rerun matrix, come from it.
Project budgets exist for the ECO: how many instances may change, which layers may change, and the timing and DRC limitsThis book sets no numbers. The reviewer needs a limit to compare against.
Replacement cells exist in the loaded libraries and are not marked dont_useThe ECO commands honour dont_use by default and will not use such cells.
If a netlist file drives the ECO, the old and new netlists are uniquified, and the new one is the post-route baseline netlist with the change appliedThe reference flows assume that no module is instantiated more than once. They keep routing only if the design holds the antenna diode cells of the earlier routing, so a netlist from before routing would count them, and the clock tree cells, as deleted.

15.3 Relevant files and analysis context

An ECO session handles more files than a normal stage, and the order in which they are made matters. The baseline files must exist before the first change, because they cannot be recreated afterwards.

FileMade byUsed for
Baseline database (.enc and the .dat directory)saveDesignRollback, and the starting point of ecoDesign.
Baseline DEF with routingdefOut -routingThe reference for the physical difference report.
Baseline netlistsaveNetlistThe starting point of the new netlist (Section 15.2).
New netlistThe change author, from the baseline netlist.Input of ecoDesign.
ECO fileThe change author. It starts with FORMATVERSION 2.Input of loadECO.
ECO loginitECO and endECO, or writeEcoThe commands that were applied, kept for the manifest.
Tool reportsecoDefIn, ecoDesign, ecoCompareNetlist, defComp, the check commandsEvidence. Several have default names that a later run overwrites.

The context that shapes the result is setEcoMode. The reference states that it controls certain behaviours of ecoAddRepeater, ecoChangeCell and ecoDeleteRepeater: whether dont_touch, dont_use and fixed objects are honoured, whether the cell swap must keep the logic equal, whether placement is legalised after each change and whether timing is recomputed. It does not control ecoPlace or ecoRoute. The setting must therefore be read back with getEcoMode and stored with the manifest, because two runs of the same command under different settings can edit different objects.

Timing follows the same rule. The interactive commands recompute timing unless setEcoMode -updateTiming is false, and ecoRoute is timing-driven and SI-driven unless you set otherwise. If -updateTiming is false the commands do not recompute timing, and the reference says that report_timing can recompute it later. Card E-08 starts from extraction, so the post-ECO numbers do not depend on that setting.

15.4 Checks and command cards

The cards follow the order of work. One card comes before the change, three apply it, and four check the result. The apply cards are written in the same form as the checks, because an ECO command that is used without a question and a stop condition tends to leave no evidence.

15.4.1 Pre-stage checks

E-01Baseline checkpoint and snapshots
Question it answersCan you return to the state the ECO starts from, and compare against it afterwards?
StageBefore the ECO
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateThe baseline design is qualified through Chapter 14 and loaded in the session. The restore test runs in a second session.
Legacy UI
saveDesign <baseline>.enc
defOut -routing <before>.def
saveNetlist <before>.v
summaryReport -noHtml -outfile <f>
restoreDesign <baseline>.enc.dat <top>
Common UI
write_db <dir> Verified
write_netlist <file> Verified
write_db and write_netlist appear in the RAK lab in a synthesis flow only. The lab does not show them for a routed design, and their equivalence to saveDesign and saveNetlist is not verified.
Mappingdifferent command name, option equivalence not verified; different command, equivalence of saved content not verified
Options used
-routing with defOut, adds the routing to the NETS section, which the later difference report needs to see wire changes.
-noHtml with summaryReport, writes the text version only.
-outfile with summaryReport, names the text file.
Scope and viewWhole design.
Side effectsaveDesign overwrites an earlier save in the same location. Do not edit the saved directory afterwards, because a modified directory can corrupt a later restore.
Effect on sessionupdates the design database; writes files
OutputA restore file and database directory, a baseline DEF, a baseline netlist and a text summary. Keep the baseline timing, DRC and antenna reports of Chapters 11 to 14 with them.
Fields that matterThe Design Status line and the instance, macro and standard-cell counts in the summary. For the other three, that the file exists and has a plausible size.
HealthyAll four files exist, the summary reads Routed, and the baseline has restored once in a new session.
WarningThe baseline was saved over an earlier checkpoint, because saveDesign overwrites a save in the same location.
Hard stopNo restorable baseline exists before the first ECO command, so a failed ECO cannot be undone.
Common misuseWriting the DEF without -routing and then expecting the difference report to show wire changes. Or saving the baseline after the first ECO command.
Root cause and fixRestore the last qualified checkpoint and take the snapshots from it.
Rerun after a fixNothing to rerun. Repeat the snapshots whenever the baseline changes.
VerificationLegacy syntax checked against the Innovus Legacy text reference.

15.4.2 Post-stage checks

The first three cards apply the change. Use the interactive route (E-02) for a small change to named objects, and the netlist route (E-03) when the change is described by a new netlist or an ECO file. E-04 completes either one.

E-02ECO settings and interactive commands
Question it answersWhich objects will the interactive commands refuse to touch, and did each change do what the request asked, on the objects it named?
StageApply the ECO
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateE-01 is done. The design is routed and timed. The request names the nets and instances.
Legacy UI
getEcoMode
setEcoMode -honorDontTouch true -honorDontUse true -honorFixedStatus true -LEQCheck true -refinePlace true -updateTiming true
initECO <eco_log_file>
ecoAddRepeater -net <net> -cell <buffer_cell> -loc {<x> <y>}
ecoChangeCell -inst <inst> -cell <new_cell>
ecoDeleteRepeater -inst <inst>
endECO
writeEco -format innovus -output <file>
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot established in the provided documentation
Options used
-honorDontTouch, -honorFixedStatus, -LEQCheck with setEcoMode, protect dont_touch and fixed objects and keep cell swaps logically equivalent. All three are true by default.
-refinePlace, -updateTiming with setEcoMode, legalise placement after each change and recompute timing. Both are true by default.
-net, -cell, -loc with ecoAddRepeater, name the net, the buffer cell and the location. Without -loc the tool chooses a location.
-inst, -cell with ecoChangeCell, name the instance and the new cell. The output functions must match and the pin counts must be equal.
-inst with ecoDeleteRepeater, names a buffer or an inverter. An inverter is deleted together with its back-to-back partner.
-format, -output with writeEco, choose the file format and the file name.
Scope and viewThe named objects, and every wire the command cuts or merges.
Side effectsecoAddRepeater cuts wires by default and ecoDeleteRepeater merges wires. ecoChangeCell inside a multiply instantiated block applies to every instantiation. Batch mode (setEcoMode -batchMode true) postpones the timing update and refinePlace until it ends with -batchMode false, so do not judge placement or timing while it is on. deleteInst and attachTerm are not governed by setEcoMode.
Effect on sessionchanges analysis configuration; updates the design database; writes files. Some commands in this card only read or report.
OutputThe new instance and net names from ecoAddRepeater (three names for a buffer, six for an inverter pair), a timing update unless disabled, and an ECO log file.
Fields that matterThe source of each setting, default or user, the names ecoAddRepeater returns, warnings about fixed, dont_touch or dont_use objects, and the commands in the ECO log.
HealthySettings match the request and are stored with the manifest, ecoAddRepeater returns the expected names, and the log matches the request.
WarningA setting differs from the default without a recorded reason, or a warning says that a protected object blocked part of the change.
Hard stopA honour setting is false without written approval, a command errors, or the log holds a change that the request does not list.
Common misuseSetting -honorDontTouch false to force one change through and leaving it false. Or reading a silent return as proof that the change landed.
Root cause and fixCompare the ECO log with the request, correct the command, setting or cell, and reapply from the baseline if the database is no longer clean.
Rerun after a fixRerun E-04 and cards E-05 to E-08.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
E-03Netlist-driven ECO and netlist comparison
Question it answersWas the new netlist or ECO file applied completely, and does the comparison show only the intended changes?
StageApply the ECO
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateThe baseline is saved. A new netlist (ecoDesign) or an ECO file that starts with FORMATVERSION 2 (loadECO) comes from the request. Use one route: ecoDesign restores the saved design first, so do not combine it with loadECO. Run ecoCompareNetlist after either.
Legacy UI
loadECO -verbose <eco_file>
ecoDesign -noEcoPlace -noEcoRoute -reportFile <f> <session>.enc.dat <top> <new.v>
ecoCompareNetlist -def <ref.def> -outfile <f>
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot established in the provided documentation
Options used
-def, -outfile with ecoCompareNetlist, name the reference file and the file that receives the differences.
-verbose with loadECO, adds a report of nets without drivers and input pins with no net connection.
-noEcoPlace, -noEcoRoute with ecoDesign, stop before placement and routing so that you run them yourself. Without them ecoDesign places and routes.
-fillerPrefix, -noDeleteFiller, -noAddFiller with ecoDesign, choose which filler is removed, or skip removal or insertion. Without -fillerPrefix, filler is removed as setFillerMode says, and none if it was not set.
-reportFile with ecoDesign, names the report. The next run overwrites the default file.
Scope and viewWhole design. ecoDesign restores the saved design first.
What it leaves undoneloadECO directives do not affect routing, except that DELETENET deletes the routing of the net and DELETEINST leaves the attached wires dangling. New instances stay unplaced until ecoPlace runs. ecoCompareNetlist compares structure by default, and -logical asks for logical equivalence. An equivalence check on the written netlist is outside this book.
Effect on sessionupdates the design database; writes files; runs an expensive analysis
OutputA Load ECO Summary (loadECO) or an ecoDesign report, and a difference file from ecoCompareNetlist.
Fields that matterThe counts of new, changed and deleted nets, instances and ports in the Load ECO Summary, and the unconnected items listed with -verbose.
HealthyThe summary counts equal the counts in the request, and no net lacks a driver or input pin lacks a net.
WarningThe counts match, but ports or feedthroughs appear that the request did not mention.
Hard stopThe counts differ from the request, or loadECO stops at an error part way through the file.
Common misuseComparing against the wrong baseline, or reading the default report name after a later run has overwritten it.
Root cause and fixCorrect the ECO file or netlist, restore the baseline and apply again, because loadECO stops reading at the first error, so part of the file may already be applied.
Rerun after a fixRerun E-03, then E-04.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
E-04Place and route the ECO cells
Question it answersAre all new and changed cells placed and all new and modified nets routed, with the placed cells left where they were?
StageApply the ECO
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateE-02 or E-03 is applied. In the interactive route the filler in the way is removed, and metal fill near the change is removed or will be regenerated; record which.
Legacy UI
deleteFiller -area {<llx> <lly> <urx> <ury>} -prefix <prefix>
ecoPlace
ecoRoute
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot established in the provided documentation
Options used
-area, -prefix with deleteFiller, limit deletion to filler completely inside the box and to names that start with the prefix. The default prefix is FILLER.
Scope and viewWhole design. ecoPlace moves only unplaced cells. ecoRoute works on modified and new nets and on anything it must move to clear a violation.
Scope and side effectThe reference says deleteFiller removes end-cap and well-tap cells too unless -keepFixed applies, so compare the cell counts before and after, and use -area to keep the deletion local. Without a layer limit, ecoRoute may change any layer and any net. That is why E-07 reads the difference report. The reference says to run ecoDefIn and ecoPlace before ecoRoute. Whether ecoDefIn is needed after interactive edits alone is not established here.
Effect on sessionupdates the design database; runs an expensive analysis
OutputPlaced cells and routed nets in the database, and router messages.
Fields that matterMessages about cells that could not be placed, and about nets that remain open or violating after ecoRoute.
HealthyNo unplaced cell remains, and ecoRoute ends with no open net and no new violation marker.
WarningecoRoute needed a second run to clear violations.
Hard stopAn unplaced cell or an open net remains.
Common misuseRunning ecoRoute -fix_drc while open nets exist, which the reference says makes NanoRoute error out. Or treating ecoRoute -prototype routes as final, because they are not DRC clean.
Root cause and fixPlace the remaining cells, free routing resource, and rerun ecoRoute. Use -fix_drc only on a design without opens. With -include_antenna it also fixes antenna during ECO routing.
Rerun after a fixRerun E-04, then E-05 to E-08.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
E-05Placement legality and filler
Question it answersAre the ECO cells legally placed, is every instance placed, and are the rows filled again?
StageAfter the ECO
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateE-04 is done. Placement was legalised by the eco commands, or refinePlace has run.
Legacy UI
checkPlace <report_file>
refinePlace -inst {<inst_list>}
checkFiller -file <f>
addFiller -cell {<filler_cells>} -prefix <prefix> -ecoMode true
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot established in the provided documentation
Options used
violationReportFileName with checkPlace, names the detailed report. Without it only a summary prints.
-inst with refinePlace, legalises the listed instances and holds all other instances fixed.
-file with checkFiller, writes the output to a file.
-ecoMode true with addFiller, removes fillers that overlap standard cells and fills the gaps. After routing it also resolves DRC around fillers.
Scope and viewWhole design. checkFiller accepts -area to limit the check to the changed area.
Why this comes before DRCverify_drc checks only placed instances and skips unplaced ones. An unplaced ECO cell therefore hides from the DRC run in the next card.
Effect on sessionadds GUI violation markers; updates the design database; writes files
OutputA summary or a detailed violation report with markers, and a count of sites that miss filler cells.
Fields that matterThe Placed, Fixed and Unplaced counts, the violation categories such as overlap, placement grid, row orientation and pin access, and the number of gaps found by checkFiller.
HealthyUnplaced is zero, checkPlace lists no violation, and checkFiller finds no missing filler site, or only gaps approved in Chapter 13.
WarningA pin access violation appears next to a changed cell that the baseline did not have.
Hard stopAny unplaced instance, overlap, off-grid cell or row orientation violation, or a filler gap that the project does not allow.
Common misuseTreating a clean violation list as complete. checkPlace checks FIXED and PLACED cells, so an unplaced cell shows only as a count.
Root cause and fixPlace or legalise the cells that the report names, route again with E-04, then add filler again. If only filler-related DRC remains, ecoRoute -fix_filler_drc_with_patch_only clears it with patch metal.
Rerun after a fixRerun E-04, then E-05 to E-08.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
E-06Connectivity, DRC and antenna
Question it answersIs the ECO routing connected, free of design-rule violations and free of process antenna violations?
StageAfter the ECO
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateE-05 is clean. Every ECO cell is placed and routed. E-07 has run first if you use its box for the area run.
Legacy UI
verifyConnectivity -type regular -report <f>
verify_drc -limit 0 -report <f>
verify_antenna -report <f>
verify_drc -area {<llx> <lly> <urx> <ury>} -report <f>
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot established in the provided documentation
Options used
-type regular with verifyConnectivity, checks regular wires. Unconnected terminals of every kind are still reported.
-limit with verify_drc, caps the number of reported violations. The default is 1000, and 0 removes the cap, as the evidence run needs.
-area with verify_drc, restricts the check to the given rectangle.
-report writes the report file.
Scope and viewWhole design for the evidence run, and verifyConnectivity -type special too after a PG change. A rectangle for the fast loop.
Two kinds of antennaverifyConnectivity reports geometrical antennas, which are dangling wires. verify_antenna checks the process antenna effect against the LEF antenna rules. They are different checks and both are needed.
Effect on sessionadds GUI violation markers; writes files
OutputViolation markers and report files.
Fields that matterOpens, unconnected wires and pins, loops and unrouted nets from verifyConnectivity. DRC violations by rule. Antenna violations by net and layer.
HealthyNo open, no DRC marker and no antenna violation, in the area run and in the full run.
WarningA dangling wire is reported near a cut net that the baseline did not have.
Hard stopAny open net, short, DRC violation or antenna violation after the ECO.
Common misuseRunning verify_drc only in the changed area, or adding -noAntenna to verifyConnectivity to hide dangling wires. The first misses damage outside the box, and the second hides ECO leftovers.
Root cause and fixReroute or patch the area with ecoRoute, then rerun the same three checks.
Rerun after a fixRerun E-06, then E-08.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
E-07Physical difference against the baseline
Question it answersDid the ECO change only what the manifest lists?
StageAfter the ECO
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateThe baseline DEF from E-01 exists. The ECO is applied, placed and routed. The ECO log exists.
Legacy UI
defComp <before>.def -defAsGolden -reportFile <f>
summaryReport -noHtml -outfile <f>
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot established in the provided documentation
Options used
-defAsGolden reports the differences relative to the baseline DEF.
-reportFile names the report. The default is defPhyDiff.rpt.
-noHtml, -outfile with summaryReport, write the text summary for the instance counts.
Scope and viewWhole design, including routing and special routing.
Use of the change areaThe reference describes the CHANGEAREA box for added or deleted wires, vias and instances. It does not mention moved or swapped instances, so add the old and new positions of every MOVEINST and the placement box of every CHANGECELL instance before you use the box as the rectangle for the area run of verify_drc.
Effect on sessionwrites files
OutputA difference report and a text summary.
Fields that matterADDINST, DELINST, CHANGECELL and MOVEINST lines. ADDNET, DELNET, ADDPIN and DELPIN lines. CHANGEROUTE and POWERROUTE blocks. The CHANGEAREA box.
HealthyEvery added, deleted, changed and rerouted item maps to an entry in the manifest.
WarningMOVEINST lines for neighbours that legalisation moved, not yet in the manifest.
Hard stopPOWERROUTE lines, or DELINST, CHANGECELL or CHANGEROUTE lines for objects the request did not name.
Common misuseReading the default direction the wrong way round. Without -defAsGolden the differences are relative to the database, so ADDINST and DELINST swap meaning.
Root cause and fixConfirm the direction once on a known change, then use the same option every time. Add the unlisted items to the manifest, or undo them.
Rerun after a fixRerun E-07 and the rows of the matrix that the new items touch.
VerificationLegacy syntax checked against the Innovus Legacy text reference.
E-08Timing coverage after the ECO
Question it answersDo the views and path groups that were qualified before the ECO meet the project budget now, with parasitics on every changed net?
StageAfter the ECO
ProductInnovus Implementation. The reference entry names no separate licence requirement for this command.
Required stateE-05 and E-06 are clean. The views, extraction engine, effort level and fill treatment are the same as in the baseline run.
Legacy UI
timeDesign -postRoute -outDir <dir> -prefix <prefix>
report_annotated_parasitics -list_not_annotated
timeDesign -postRoute -hold -outDir <dir> -prefix <prefix>
check_timing -verbose
Common UINot yet verified No Common UI form is printed. The provided files do not document one.
MappingNot established in the provided documentation
Options used
-postRoute runs native detailed extraction and timing analysis, and sets the analysis mode to -clkSrcPath true and -clockPropagation sdcControl. Early global route is not run in this mode.
-hold reports hold violations only.
-outDir, -prefix keep the before and after report sets apart.
-list_not_annotated lists the nets that have no annotated parasitics.
Scope and viewEvery active view, setup and hold.
CosttimeDesign -postRoute runs extraction and analysis. With multi-mode multi-corner analysis, -expandedViews writes a separate report directory for each active view.
Effect on sessionchanges analysis configuration; updates the design database; writes files; runs an expensive analysis. Some commands in this card only read or report.
OutputTiming report files by view and path group, a DRV report, and a parasitic annotation summary.
Fields that matterWNS, TNS and violating paths per view and path group, for setup and for hold. Maximum transition, capacitance and fanout violations. The not-annotated nets.
HealthySetup and hold meet the project budget in every required view, and no ECO net lacks parasitics.
WarningSetup improved but hold was not rerun, or the output directory differs so the sets cannot be compared.
Hard stopAny required view misses the project budget, or an ECO net has no annotated parasitics.
Common misuseReading only the view that motivated the ECO. Or comparing overall TNS with the sum of path-group TNS, which the reference says need not agree because TNS is counted per endpoint.
Root cause and fixRerun the missing view or analysis type, and fix the nets that lack parasitics before judging timing.
Rerun after a fixRerun E-08 in all views.
VerificationLegacy syntax checked against the Innovus Legacy text reference.

15.5 Required reports, artefacts and how to read them

ReportFields that support qualificationEvidence class
ECO manifest (written by you)ECO id, reason, change type, commands, settings, checkpoints, report namesimplementation
Load ECO Summary and ecoDesign report (E-03)new, changed and deleted nets, instances and portsimplementation
Baseline summary and post-ECO summary (E-01, E-07)Design Status, instance counts, macro and standard-cell countsimplementation
checkPlace and checkFiller output (E-05)Placed, Fixed and Unplaced counts, violation categories, filler gapsimplementation
verifyConnectivity, verify_drc and verify_antenna reports (E-06)opens, DRC violations by rule, antenna violations by netimplementation
defComp report (E-07)ADDINST, DELINST, CHANGECELL, MOVEINST, CHANGEROUTE, CHANGEAREAimplementation
timeDesign and parasitic annotation (E-08)WNS, TNS, violating paths per view, not-annotated netsimplementation
ecoRoute -prototype resulta quick feasibility view, not DRC cleanpreliminary

The difference report is the most useful report of the chapter and the least familiar, so here is a short SYNTHETIC example. Its format follows the reference. The names and numbers are invented, and the numbers are database units of an invented DEF, not microns.

Reading a defComp report after a one-buffer ECOSynthetic report, not tool output
VERSION 1                                              ## illustrative excerpt
UNITS 2000
ADDINST u_core/eco_buf_1 BUFX4 120480 100800 N
MOVEINST u_core/i_412 COORD 118080 100800 116880 100800
MOVEINST u_core/i_413 COORD 130080 100800 131280 100800
CHANGEROUTE n1
    DELWIRE METAL2 180 112080 98400 128160 98760
    DELWIRE METAL3 180 128160 98400 128520 104400
    ADDWIRE METAL3 180 112080 98400 112440 101000
ENDCHANGEROUTE
CHANGEROUTE n_ctl_47
    DELWIRE METAL2 180 131040 104400 133200 104760
    ADDWIRE METAL2 180 131040 104400 134400 104760
ENDCHANGEROUTE
CHANGEAREA 111900 98100 134400 104760

Let us read it against the manifest, which lists one buffer on net n1. The ADDINST line is the buffer, and the first CHANGEROUTE block is the cut net, so both are expected. The two MOVEINST lines are not in the manifest. Legalisation moved two neighbours by a small amount to make room. The second CHANGEROUTE block is the real finding: net n_ctl_47 is a different net, and ecoRoute lengthened one of its wires. The excerpt leaves out the ADDNET, ADDPIN and DELPIN lines that cutting n1 produces. The moved cells are a warning until they are listed. Net n_ctl_47 is a hard stop until it is added to the manifest with a reason, a timing look and a DRC look. The CHANGEAREA box now reaches past the buffer, so the area run of verify_drc in card E-06 should use it, extended as card E-07 says.

Keep one short manifest per ECO.

Manifest fieldWhat to record
ECO id, date and authorOne id that appears in every file name this ECO produces.
ReasonThe violation, request or review comment that caused the change.
Change typeThe row letters of the rerun matrix in Section 15.7. Name every row that applies.
Objects, commands, settingsInstances and nets, the ECO log or ECO file name, and the getEcoMode output.
Checkpoints and evidenceBaseline and post-ECO save names, the baseline DEF and netlist, report names for E-03 to E-08, the CHANGEAREA box, and the matrix result for each stage.
Before and after, waiversTiming, DRC, connectivity and antenna counts side by side, for the same views and options. Any waiver, with an owner and a reason.

The before and after table is the last piece. Its numbers are SYNTHETIC. Take both columns from reports run with the same views, options and output naming, or the comparison means nothing.

MetricBaselineAfter the ECOReading
Setup WNS, worst view (ns)-0.040.01Improved. Check every other view too.
Instance count2841028411One buffer, as in the manifest.
DRC markers00Clean in the full run.
Open nets, antenna violations00Clean.

15.6 Healthy, suspicious and hard-stop examples

FindingStatusWhy
Baseline saved and restored once before the first changePASSRollback exists and has been shown to work.
A changed object that the manifest does not listHARD STOPThe ECO did more than planned. Explain it or undo it.
A command warns that a protected object blocked part of the changeWARN / REVIEWThe request was only partly applied.
New cells still unplaced after the ECOHARD STOPDRC skips unplaced cells, so every later check is blind to them.
DRC or open nets outside the changed areaHARD STOPecoRoute disturbed nets the ECO did not name.
Timing rerun in one view onlyWARN / REVIEWOther views are not covered. Rerun them before deciding.
Post-mask spare-cell checks in a pre-mask projectNOT APPLICABLENo masks exist, so the post-mask flow does not apply.
Power-intent checks in a single-supply blockNOT APPLICABLENo power domains exist.

15.7 Debugging, corrective action and reruns

15.7.1 What to rerun after this change

A change invalidates some of the earlier evidence and leaves the rest alone. The matrix below says which. Rows are the kind of change. Columns are the chapters of this book, numbered 1 to 14: 1 session, 2 import, 3 SDC and MMMC, 4 floorplan, 5 power plan, 6 pre-placement, 7 placement, 8 CTS readiness, 9 CTS, 10 global route, 11 detailed route, 12 post-route optimisation, 13 finishing and 14 extraction.

R means rerun the checks of that stage on the whole design. In the pre-route columns 4 and 6 to 10 it means: confirm on the routed database that the stage's static conditions still hold, such as counts, legality and clock specification. Do not rerun commands that rebuild estimates on a routed design, such as earlyGlobalRoute, optDesign -preCTS or ccopt_design. In column 12, rerun the timing checks, and optDesign -postRoute only to repair what they show. S means spot check: run the stage's checks on the changed objects or the changed area only, for example verify_drc -area, checkFiller -area or verify_antenna -nets, or confirm that the existing report still describes the design. N means not needed: the earlier evidence stays valid, provided the difference report shows that the change did not touch what that stage reads.

Change1 Session2 Import3 SDC4 Floorplan5 Power6 Pre-place7 Place8 CTS ready9 CTS10 Global route11 Detail route12 Post-route13 Finish14 Extract
A Cell swap, same functionSSNNSNSNNNRRSR
B Buffer or inverter added or deletedSSNNSNSNNSRRSR
C Netlist logic changeSRRSSSRRRSRRRR
D SDC, mode or derate change: exceptions, I/O delays, uncertainty, case analysisSNRNNNNSSNNRSS
E Macro moveSNNRRRRSRRRRRR
F PG change: stripes, rails, viasSNNSRSSNNRRSRR
G Route change on existing netsSNNNNNNNNSRRSR
H Clock change: definition, tree cells, CTS specSSRNSNRRRSRRSR
I Filler or decap cell changeSNNNSNSNNNRSRS
J Metal fill changeSNNNSNNNNNRRRR

The matrix is a recommendation, not tool behaviour, for a routed, flat, single-supply block. A project may tighten it, and should loosen it only with a reason in the manifest. In row E, column 9 is S if no clock pin or clock sink moved. In column 1, the spot check records the release and the setEcoMode settings. Six rules govern its use.

  • Choose the row by what the change did. Not by the command used. An ecoRoute that rerouted a neighbouring net is also row G.
  • Take the union of rows. When a change fits several rows, each stage takes the strongest letter in its column: R above S above N.
  • Send a cell or a wire on a clock net to row H. A swap, a buffer or a route change on the clock network is a clock change, not a data change.
  • Restart at Chapter 2 for a library or LEF change. ecoDesign can load replacement LEF files, and a changed abstract can alter every later stage.
  • Read column 12 as the gate. Timing is rerun for every row except PG and filler or decap changes. There the spot check covers every view, but only the nets that ecoRoute touched, as defComp lists them. If none, record N.
  • Rewrite every deliverable. A change makes the files written before it stale. Write them again through Chapter 16.
1Session2Import3SDC4Floorplan5Power6Pre-place7Place8CTS ready9CTS10Global route11Detail route12Post-route13Finish14Extract15ECOA cell swap, B buffer, G route, I filler, J metal fillF PG changeE macro moveD SDC or mode change, H clock changeC netlist logic changeEach arrow lands on the earliest stage marked R in that row of the matrix. Later stages follow the matrix too.
Figure 23. Where an ECO re-enters the stage flow
Read it. The boxes are Chapters 1 to 14 and the ECO stage. Each dashed arrow goes back to the earliest stage marked R for that kind of change: Chapter 2 for netlist logic, 3 for SDC and clock, 4 for a macro move, 5 for PG, and 11 for cell swaps, buffers, routes and fill. Later stages still follow the matrix.

15.7.2 Common symptoms

SymptomLikely causeAction
ecoChangeCell warns or changes nothingThe instance is fixed, dont_touch or dont_use, or the cell has different pins or functionUse -pinMap only for different pin names. A different function or pin count needs setEcoMode -LEQCheck false, with approval.
ecoAddRepeater changes nothingThe net is dont_touch, or its wires are FIXED or COVERsetEcoMode -honorFixedNetWire false changes the status of those wires, so it needs approval.
New cells unplaced, or filler gaps near the changeecoDesign ran with -noEcoPlace, ecoPlace was not run, or fillers were removed and not replacedRun ecoPlace, or addFiller with -ecoMode true, then E-05.
Open nets after ecoRoute, or DRC markers outside the changed areaRouting resource is tight, or ecoRoute or legalisation changed neighboursFree resource or widen the layers and rerun ecoRoute. Read the difference report, extend the area, rerun E-06.

15.7.3 Worked example: a hold fix that looked clean

Suppose one buffer on net n1 fixes a hold violation, as in the figure of Section 15.1. ecoAddRepeater returns the new names, the area run of verify_drc reports nothing, and the hold slack in the motivating view is positive. By the narrow reading, the work is done.

The difference report of card E-07, shown in Section 15.5, says otherwise. Two neighbours moved, and net n_ctl_47 was rerouted. Both belong in the manifest, and they change the reruns. The change is row B, plus row G for the second net. Column 11 is R, so the full-design DRC and connectivity runs are required, not only the area run. Column 12 is R, so setup and hold are rerun in every view, because n_ctl_47 may have a new setup slack. Column 14 is R, so extraction is repeated. Column 13 is S, so filler and antenna are checked in the changed area. The stop decision comes from the union of what changed (rule 2), and the difference report tells you the union.

15.8 Exit criteria and stage checklist

  • Baseline. Saved, restored once, with baseline DEF and netlist.
  • Settings and application. getEcoMode output stored with every non-default value explained, and the ECO log or Load ECO Summary matches the request.
  • Completeness. No unplaced cell, no open net, filler restored, and metal fill and density rechecked where touched (Chapter 13).
  • Integrity and difference. Connectivity, DRC and antenna clean in the full run, and every item in the defComp report maps to a manifest entry.
  • Rerun set. Every R stage of the matrix is rerun, and every S stage spot checked, with the report named.
  • Timing. All required views, setup and hold, meet the project budget, with parasitics on every ECO net.
  • Record. Manifest complete, the post-ECO checkpoint saved under a new name, and every earlier deliverable written again through Chapter 16.

An ECO is qualified when the design after the change has the same standing as before it, for every stage the change could touch.

CHAPTER 15 SANITY CHECKS

15.9 Sanity check cheat sheet: ECO and requalification

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. Judge every row against your project budgets, because this book sets no universal limits.

CardCheck and whenCommandHealthyReviewHard stop
E-01Baseline checkpoint and snapshots
Before the ECO
saveDesign <baseline>.enc
defOut -routing <before>.def
saveNetlist <before>.v
All four files exist, the summary reads Routed, and the baseline has restored once in a new session.The baseline was saved over an earlier checkpoint, because saveDesign overwrites a save in the same location.No restorable baseline exists before the first ECO command, so a failed ECO cannot be undone.
E-02ECO settings and interactive commands
Apply the ECO
getEcoMode
setEcoMode -honorDontTouch true -honorDontUse true -honorFixedStatus true -LEQCheck true -refinePlace true -updateTiming true
initECO <eco_log_file>
Settings match the request and are stored with the manifest, ecoAddRepeater returns the expected names, and the log matches the request.A setting differs from the default without a recorded reason, or a warning says that a protected object blocked part of the change.A honour setting is false without written approval, a command errors, or the log holds a change that the request does not list.
E-03Netlist-driven ECO and netlist comparison
Apply the ECO
loadECO -verbose <eco_file>
ecoDesign -noEcoPlace -noEcoRoute -reportFile <f> <session>.enc.dat <top> <new.v>
ecoCompareNetlist -def <ref.def> -outfile <f>
The summary counts equal the counts in the request, and no net lacks a driver or input pin lacks a net.The counts match, but ports or feedthroughs appear that the request did not mention.The counts differ from the request, or loadECO stops at an error part way through the file.
E-04Place and route the ECO cells
Apply the ECO
deleteFiller -area {<llx> <lly> <urx> <ury>} -prefix <prefix>
ecoPlace
ecoRoute
No unplaced cell remains, and ecoRoute ends with no open net and no new violation marker.ecoRoute needed a second run to clear violations.An unplaced cell or an open net remains.
E-05Placement legality and filler
After the ECO
checkPlace <report_file>
refinePlace -inst {<inst_list>}
checkFiller -file <f>
Unplaced is zero, checkPlace lists no violation, and checkFiller finds no missing filler site, or only gaps approved in Chapter 13.A pin access violation appears next to a changed cell that the baseline did not have.Any unplaced instance, overlap, off-grid cell or row orientation violation, or a filler gap that the project does not allow.
E-06Connectivity, DRC and antenna
After the ECO
verifyConnectivity -type regular -report <f>
verify_drc -limit 0 -report <f>
verify_antenna -report <f>
No open, no DRC marker and no antenna violation, in the area run and in the full run.A dangling wire is reported near a cut net that the baseline did not have.Any open net, short, DRC violation or antenna violation after the ECO.
E-07Physical difference against the baseline
After the ECO
defComp <before>.def -defAsGolden -reportFile <f>
summaryReport -noHtml -outfile <f>
Every added, deleted, changed and rerouted item maps to an entry in the manifest.MOVEINST lines for neighbours that legalisation moved, not yet in the manifest.POWERROUTE lines, or DELINST, CHANGECELL or CHANGEROUTE lines for objects the request did not name.
E-08Timing coverage after the ECO
After the ECO
timeDesign -postRoute -outDir <dir> -prefix <prefix>
report_annotated_parasitics -list_not_annotated
timeDesign -postRoute -hold -outDir <dir> -prefix <prefix>
Setup and hold meet the project budget in every required view, and no ECO net lacks parasitics.Setup improved but hold was not rerun, or the output directory differs so the sets cannot be compared.Any required view misses the project budget, or an ECO net has no annotated parasitics.
CHAPTER 15 CHEAT SHEET

15.10 Command cheat sheet: ECO and requalification

Legacy UI commands. Angle brackets are placeholders, and values shown are examples, not project limits.

CommandWhat it produces
ECO settings and logging
getEcoModeEvery setEcoMode parameter with its current value, type, and whether the value is the default or set by the user.
getEcoMode -quietThe current settings of all setEcoMode parameters as a Tcl list only, handy for a script that records them.
setEcoMode -resetResets every setEcoMode parameter to its default. Changes the session.
setEcoMode -batchMode trueStarts batch mode. Timing initialisation runs once at the first ECO command and the timing update runs when batch mode is exited. Changes the session.
setEcoMode -honorDontTouch falseAllows the eco commands to modify dont_touch nets and instances. Use only with a written reason. Changes the session.
initECO <eco_log_file>Starts logging the ECO operations into the named file. Writes a file.
endECOEnds the ECO logging that initECO started.
writeEco -format innovus -output <file>The ECO commands logged in the session, written as an Innovus format file you can source later. Writes a file.
Interactive ECO edits
ecoRemoveTiedInputs -reportA report of the gates that already have inputs tied together, with no fixing. Reads only.
ecoAddRepeater -net <net> -cell <buffer_cell> -loc {<x> <y>}A buffer on the net at the given location. Returns the new instance name and the input and output net names. Changes the database.
ecoAddRepeater -net <net> -cell <buffer_cell> -relativeDistToSink 0.1A buffer near the receiver. Values near 0.9 put it near the driver. Works for a one-sink net or one named term. Changes the database.
ecoChangeCell -inst <inst> -upsizeThe instance replaced by the next stronger cell of the same footprint. Changes the database.
ecoChangeCell -inst <inst> -cell <new_cell>The instance mapped to the named cell. The output functions must match and the pin counts must be equal. Changes the database.
ecoChangeCell -inst <inst> -cell <new_cell> -pinMap {<old_pin> <new_pin>}A cell swap where the new cell uses different pin names, with each old pin connected to its mapped new pin. Changes the database.
ecoDeleteRepeater -inst <inst>The buffer deleted, or the back-to-back inverter pair that contains the named inverter. Wires are merged. Changes the database.
ecoRemoveTiedInputs -insts {<insts>}The listed gates that have inputs tied to one net remapped into equivalent logic without tied inputs. Changes the database.
Interactive netlist edits
deleteInst <inst>The instance removed, logical or physical, with wildcards allowed. Not governed by setEcoMode: -honorDontTouch skips dont_touch instances, and deleting a constrained instance deletes the timing graph. Changes the database.
attachTerm <inst> <term> <net>The terminal moved to the net, detaching it from any other net first. Hierarchical ports are created as needed. Not governed by setEcoMode. Changes the database.
Netlist-driven ECO
ecoCompareNetlist -def <ref.def> -outfile <f>A file of the differences between the reference and the design in the database. Writes a file.
loadECO -verbose <eco_file>The ECO directives applied to the netlist, a Load ECO Summary, and a report of nets without drivers and input pins without nets. Changes the database.
ecoDefIn -reportFile <f> <old.def>Old placement and routing restored onto the new netlist, with a report of added, deleted and modified cells and nets. Changes the database.
ecoDesign -noEcoPlace -noEcoRoute -reportFile <f> <session>.enc.dat <top> <new.v>The saved design restored and the netlist changes applied, stopping before placement and routing so you can run them yourself. Changes the database.
Place and route the ECO
ecoPlaceUnplaced standard cells placed without moving placed cells. Changes the database.
ecoRouteIncremental routing of modified and new nets, with opens and shorts detected. Changes the database and runs long.
ecoRoute -fix_drcRepairs only the DRC violations already marked in the database, and reverts if the count rises. Errors out if open nets exist. Changes the database.
prepareForEcoRouteRouted special nets converted to equivalent regular nets so the router may modify them. Does not work for PG nets. Changes the database.
refinePlace -inst {<inst_list>}Legal locations for the listed instances, with all other instances held fixed. Changes the database.
addFiller -cell {<filler_cells>} -prefix <prefix> -ecoMode trueOverlapping fillers removed and new fillers inserted into the gaps. Changes the database.
Post-mask ECO (only if masks exist and spare cells are used)
specifySpareGate -inst <pattern>The named instances registered as spare gates. Run before placement. Changes the database.
ecoDefIn -postMask -reportFile <f> <old.def>Post-mask restore: deleted cells are kept as spare cells with the suffix, and unplaced cells wait for mapping. Changes the database.
ecoPlace -useSpareCells trueUnplaced cells mapped to spare cells of the same type. Post-mask only. Changes the database.
ecoSwapSpareCell <inst> <spare_inst>The cell swapped with a cell in the spare list, after specifySpareGate. Changes the database.
ecoRoute -modifyOnlyLayers <bottom>:<top>ECO routing limited to the layer range. The range may be too small for the change. Not supported at 10 nm and below. Changes the database.
Checks after an ECO
checkPlace <report_file>Placed, fixed and unplaced counts, density, and placement violations by category. Adds markers and writes a file.
checkFiller -file <f>The number of sites missing filler cells in the core, written to a file.
verifyConnectivity -type regular -report <f>Opens, unconnected wires and pins, loops and unrouted nets on regular nets. Adds markers and writes a file.
verify_drc -limit 0 -report <f>DRC violations on placed instances, with markers. The default cap is 1000 errors, and 0 removes the cap. Adds markers and writes a file.
verify_drc -area {<llx> <lly> <urx> <ury>} -report <f>DRC limited to the given rectangle, for the changed area. Adds markers and writes a file.
verify_antenna -report <f>Process antenna violations on routed nets. The default report name is <design>.antenna.rpt. Writes a file.
defComp <before>.def -defAsGolden -reportFile <f>Added, deleted, changed and moved instances, net and wire changes, and the change area, against the baseline DEF. Writes a file.
timeDesign -postRoute -outDir <dir> -prefix <prefix>Post-route extraction and setup timing reports in the output directory. Changes the analysis mode and the database. Runs long and writes files.
timeDesign -postRoute -hold -outDir <dir> -prefix <prefix>The same for hold. Runs long and writes files.
timeDesign -postRoute -expandedViews -outDir <dir>A separate report directory for every active view in a multi-mode multi-corner session. Runs long and writes files.
check_timing -verboseConstraint consistency and completeness warnings. With -verbose they are listed in detail, grouped by type; without it only a count per type is printed.
report_annotated_parasitics -list_not_annotatedThe annotated parasitics summary by net type, and the nets that have no annotation.
Checkpoints and snapshots
summaryReport -noHtml -outfile <f>A text summary with design status, instance counts, macro and standard cell tables. Writes a file.
saveDesign <name>.encA restore file and the database directory. Saving to the restore location overwrites the earlier data. Writes files.
restoreDesign <name>.enc.dat <top>The saved design in memory. Do not edit the saved directory, because a modified one can corrupt the restore.
defOut -routing <before>.defA DEF file with floorplan, cells and routing, for a later defComp. Writes a file.
saveNetlist <before>.vThe logical Verilog netlist of the design. Writes a file.