ECO and incremental requalification
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.
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.
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 true | Why |
|---|---|
| The baseline design passed Chapters 1 to 14, with its reports kept | The 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 session | A 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 effect | The 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 limits | This book sets no numbers. The reviewer needs a limit to compare against. |
| Replacement cells exist in the loaded libraries and are not marked dont_use | The 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 applied | The 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.
| File | Made by | Used for |
|---|---|---|
| Baseline database ( | saveDesign | Rollback, and the starting point of ecoDesign. |
| Baseline DEF with routing | defOut -routing | The reference for the physical difference report. |
| Baseline netlist | saveNetlist | The starting point of the new netlist (Section 15.2). |
| New netlist | The change author, from the baseline netlist. | Input of ecoDesign. |
| ECO file | The change author. It starts with FORMATVERSION 2. | Input of loadECO. |
| ECO log | initECO and endECO, or writeEco | The commands that were applied, kept for the manifest. |
| Tool reports | ecoDefIn, ecoDesign, ecoCompareNetlist, defComp, the check commands | Evidence. 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
| Question it answers | Can you return to the state the ECO starts from, and compare against it afterwards? |
|---|---|
| Stage | Before the ECO |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | The 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> Verifiedwrite_netlist <file> Verifiedwrite_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. |
|---|---|
| Mapping | different 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 view | Whole design. |
| Side effect | saveDesign 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 session | updates the design database; writes files |
| Output | A 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 matter | The 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. |
| Healthy | All four files exist, the summary reads Routed, and the baseline has restored once in a new session. |
| Warning | The baseline was saved over an earlier checkpoint, because saveDesign overwrites a save in the same location. |
| Hard stop | No restorable baseline exists before the first ECO command, so a failed ECO cannot be undone. |
| Common misuse | Writing 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 fix | Restore the last qualified checkpoint and take the snapshots from it. |
| Rerun after a fix | Nothing to rerun. Repeat the snapshots whenever the baseline changes. |
| Verification | Legacy 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.
| Question it answers | Which objects will the interactive commands refuse to touch, and did each change do what the request asked, on the objects it named? |
|---|---|
| Stage | Apply the ECO |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | E-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 UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not 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 view | The named objects, and every wire the command cuts or merges. |
| Side effects | ecoAddRepeater 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 session | changes analysis configuration; updates the design database; writes files. Some commands in this card only read or report. |
| Output | The 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 matter | The 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. |
| Healthy | Settings match the request and are stored with the manifest, ecoAddRepeater returns the expected names, and the log matches the request. |
| Warning | A setting differs from the default without a recorded reason, or a warning says that a protected object blocked part of the change. |
| Hard stop | A honour setting is false without written approval, a command errors, or the log holds a change that the request does not list. |
| Common misuse | Setting -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 fix | Compare 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 fix | Rerun E-04 and cards E-05 to E-08. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Was the new netlist or ECO file applied completely, and does the comparison show only the intended changes? |
|---|---|
| Stage | Apply the ECO |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | The 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 UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not 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 view | Whole design. ecoDesign restores the saved design first. |
| What it leaves undone | loadECO 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 session | updates the design database; writes files; runs an expensive analysis |
| Output | A Load ECO Summary (loadECO) or an ecoDesign report, and a difference file from ecoCompareNetlist. |
| Fields that matter | The counts of new, changed and deleted nets, instances and ports in the Load ECO Summary, and the unconnected items listed with -verbose. |
| Healthy | The summary counts equal the counts in the request, and no net lacks a driver or input pin lacks a net. |
| Warning | The counts match, but ports or feedthroughs appear that the request did not mention. |
| Hard stop | The counts differ from the request, or loadECO stops at an error part way through the file. |
| Common misuse | Comparing against the wrong baseline, or reading the default report name after a later run has overwritten it. |
| Root cause and fix | Correct 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 fix | Rerun E-03, then E-04. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Are all new and changed cells placed and all new and modified nets routed, with the placed cells left where they were? |
|---|---|
| Stage | Apply the ECO |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | E-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 UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not 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 view | Whole 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 effect | The 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 session | updates the design database; runs an expensive analysis |
| Output | Placed cells and routed nets in the database, and router messages. |
| Fields that matter | Messages about cells that could not be placed, and about nets that remain open or violating after ecoRoute. |
| Healthy | No unplaced cell remains, and ecoRoute ends with no open net and no new violation marker. |
| Warning | ecoRoute needed a second run to clear violations. |
| Hard stop | An unplaced cell or an open net remains. |
| Common misuse | Running 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 fix | Place 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 fix | Rerun E-04, then E-05 to E-08. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Are the ECO cells legally placed, is every instance placed, and are the rows filled again? |
|---|---|
| Stage | After the ECO |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | E-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 UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not 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 view | Whole design. checkFiller accepts -area to limit the check to the changed area. |
| Why this comes before DRC | verify_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 session | adds GUI violation markers; updates the design database; writes files |
| Output | A summary or a detailed violation report with markers, and a count of sites that miss filler cells. |
| Fields that matter | The 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. |
| Healthy | Unplaced is zero, checkPlace lists no violation, and checkFiller finds no missing filler site, or only gaps approved in Chapter 13. |
| Warning | A pin access violation appears next to a changed cell that the baseline did not have. |
| Hard stop | Any unplaced instance, overlap, off-grid cell or row orientation violation, or a filler gap that the project does not allow. |
| Common misuse | Treating a clean violation list as complete. checkPlace checks FIXED and PLACED cells, so an unplaced cell shows only as a count. |
| Root cause and fix | Place 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 fix | Rerun E-04, then E-05 to E-08. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Is the ECO routing connected, free of design-rule violations and free of process antenna violations? |
|---|---|
| Stage | After the ECO |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | E-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 UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not 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 view | Whole design for the evidence run, and verifyConnectivity -type special too after a PG change. A rectangle for the fast loop. |
| Two kinds of antenna | verifyConnectivity 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 session | adds GUI violation markers; writes files |
| Output | Violation markers and report files. |
| Fields that matter | Opens, unconnected wires and pins, loops and unrouted nets from verifyConnectivity. DRC violations by rule. Antenna violations by net and layer. |
| Healthy | No open, no DRC marker and no antenna violation, in the area run and in the full run. |
| Warning | A dangling wire is reported near a cut net that the baseline did not have. |
| Hard stop | Any open net, short, DRC violation or antenna violation after the ECO. |
| Common misuse | Running 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 fix | Reroute or patch the area with ecoRoute, then rerun the same three checks. |
| Rerun after a fix | Rerun E-06, then E-08. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Did the ECO change only what the manifest lists? |
|---|---|
| Stage | After the ECO |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | The 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 UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not 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 view | Whole design, including routing and special routing. |
| Use of the change area | The 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 session | writes files |
| Output | A difference report and a text summary. |
| Fields that matter | ADDINST, DELINST, CHANGECELL and MOVEINST lines. ADDNET, DELNET, ADDPIN and DELPIN lines. CHANGEROUTE and POWERROUTE blocks. The CHANGEAREA box. |
| Healthy | Every added, deleted, changed and rerouted item maps to an entry in the manifest. |
| Warning | MOVEINST lines for neighbours that legalisation moved, not yet in the manifest. |
| Hard stop | POWERROUTE lines, or DELINST, CHANGECELL or CHANGEROUTE lines for objects the request did not name. |
| Common misuse | Reading 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 fix | Confirm 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 fix | Rerun E-07 and the rows of the matrix that the new items touch. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Do the views and path groups that were qualified before the ECO meet the project budget now, with parasitics on every changed net? |
|---|---|
| Stage | After the ECO |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | E-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 UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not 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 view | Every active view, setup and hold. |
| Cost | timeDesign -postRoute runs extraction and analysis. With multi-mode multi-corner analysis, -expandedViews writes a separate report directory for each active view. |
| Effect on session | changes analysis configuration; updates the design database; writes files; runs an expensive analysis. Some commands in this card only read or report. |
| Output | Timing report files by view and path group, a DRV report, and a parasitic annotation summary. |
| Fields that matter | WNS, TNS and violating paths per view and path group, for setup and for hold. Maximum transition, capacitance and fanout violations. The not-annotated nets. |
| Healthy | Setup and hold meet the project budget in every required view, and no ECO net lacks parasitics. |
| Warning | Setup improved but hold was not rerun, or the output directory differs so the sets cannot be compared. |
| Hard stop | Any required view misses the project budget, or an ECO net has no annotated parasitics. |
| Common misuse | Reading 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 fix | Rerun the missing view or analysis type, and fix the nets that lack parasitics before judging timing. |
| Rerun after a fix | Rerun E-08 in all views. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
15.5 Required reports, artefacts and how to read them
| Report | Fields that support qualification | Evidence class |
|---|---|---|
| ECO manifest (written by you) | ECO id, reason, change type, commands, settings, checkpoints, report names | implementation |
| Load ECO Summary and ecoDesign report (E-03) | new, changed and deleted nets, instances and ports | implementation |
| Baseline summary and post-ECO summary (E-01, E-07) | Design Status, instance counts, macro and standard-cell counts | implementation |
| checkPlace and checkFiller output (E-05) | Placed, Fixed and Unplaced counts, violation categories, filler gaps | implementation |
| verifyConnectivity, verify_drc and verify_antenna reports (E-06) | opens, DRC violations by rule, antenna violations by net | implementation |
| defComp report (E-07) | ADDINST, DELINST, CHANGECELL, MOVEINST, CHANGEROUTE, CHANGEAREA | implementation |
| timeDesign and parasitic annotation (E-08) | WNS, TNS, violating paths per view, not-annotated nets | implementation |
| ecoRoute -prototype result | a quick feasibility view, not DRC clean | preliminary |
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.
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 104760Let 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 field | What to record |
|---|---|
| ECO id, date and author | One id that appears in every file name this ECO produces. |
| Reason | The violation, request or review comment that caused the change. |
| Change type | The row letters of the rerun matrix in Section 15.7. Name every row that applies. |
| Objects, commands, settings | Instances and nets, the ECO log or ECO file name, and the getEcoMode output. |
| Checkpoints and evidence | Baseline 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, waivers | Timing, 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.
| Metric | Baseline | After the ECO | Reading |
|---|---|---|---|
| Setup WNS, worst view (ns) | -0.04 | 0.01 | Improved. Check every other view too. |
| Instance count | 28410 | 28411 | One buffer, as in the manifest. |
| DRC markers | 0 | 0 | Clean in the full run. |
| Open nets, antenna violations | 0 | 0 | Clean. |
15.6 Healthy, suspicious and hard-stop examples
| Finding | Status | Why |
|---|---|---|
| Baseline saved and restored once before the first change | PASS | Rollback exists and has been shown to work. |
| A changed object that the manifest does not list | HARD STOP | The ECO did more than planned. Explain it or undo it. |
| A command warns that a protected object blocked part of the change | WARN / REVIEW | The request was only partly applied. |
| New cells still unplaced after the ECO | HARD STOP | DRC skips unplaced cells, so every later check is blind to them. |
| DRC or open nets outside the changed area | HARD STOP | ecoRoute disturbed nets the ECO did not name. |
| Timing rerun in one view only | WARN / REVIEW | Other views are not covered. Rerun them before deciding. |
| Post-mask spare-cell checks in a pre-mask project | NOT APPLICABLE | No masks exist, so the post-mask flow does not apply. |
| Power-intent checks in a single-supply block | NOT APPLICABLE | No 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.
| Change | 1 Session | 2 Import | 3 SDC | 4 Floorplan | 5 Power | 6 Pre-place | 7 Place | 8 CTS ready | 9 CTS | 10 Global route | 11 Detail route | 12 Post-route | 13 Finish | 14 Extract |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| A Cell swap, same function | S | S | N | N | S | N | S | N | N | N | R | R | S | R |
| B Buffer or inverter added or deleted | S | S | N | N | S | N | S | N | N | S | R | R | S | R |
| C Netlist logic change | S | R | R | S | S | S | R | R | R | S | R | R | R | R |
| D SDC, mode or derate change: exceptions, I/O delays, uncertainty, case analysis | S | N | R | N | N | N | N | S | S | N | N | R | S | S |
| E Macro move | S | N | N | R | R | R | R | S | R | R | R | R | R | R |
| F PG change: stripes, rails, vias | S | N | N | S | R | S | S | N | N | R | R | S | R | R |
| G Route change on existing nets | S | N | N | N | N | N | N | N | N | S | R | R | S | R |
| H Clock change: definition, tree cells, CTS spec | S | S | R | N | S | N | R | R | R | S | R | R | S | R |
| I Filler or decap cell change | S | N | N | N | S | N | S | N | N | N | R | S | R | S |
| J Metal fill change | S | N | N | N | S | N | N | N | N | N | R | R | R | R |
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.
15.7.2 Common symptoms
| Symptom | Likely cause | Action |
|---|---|---|
| ecoChangeCell warns or changes nothing | The instance is fixed, dont_touch or dont_use, or the cell has different pins or function | Use -pinMap only for different pin names. A different function or pin count needs setEcoMode -LEQCheck false, with approval. |
| ecoAddRepeater changes nothing | The net is dont_touch, or its wires are FIXED or COVER | setEcoMode -honorFixedNetWire false changes the status of those wires, so it needs approval. |
| New cells unplaced, or filler gaps near the change | ecoDesign ran with -noEcoPlace, ecoPlace was not run, or fillers were removed and not replaced | Run ecoPlace, or addFiller with -ecoMode true, then E-05. |
| Open nets after ecoRoute, or DRC markers outside the changed area | Routing resource is tight, or ecoRoute or legalisation changed neighbours | Free 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.
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.
| Card | Check and when | Command | Healthy | Review | Hard stop |
|---|---|---|---|---|---|
| E-01 | Baseline checkpoint and snapshots Before the ECO | saveDesign <baseline>.encdefOut -routing <before>.defsaveNetlist <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-02 | ECO settings and interactive commands Apply the ECO | getEcoModesetEcoMode -honorDontTouch true -honorDontUse true -honorFixedStatus true -LEQCheck true -refinePlace true -updateTiming trueinitECO <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-03 | Netlist-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-04 | Place and route the ECO cells Apply the ECO | deleteFiller -area {<llx> <lly> <urx> <ury>} -prefix <prefix>ecoPlaceecoRoute | 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-05 | Placement 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-06 | Connectivity, 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-07 | Physical 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-08 | Timing coverage after the ECO After the ECO | timeDesign -postRoute -outDir <dir> -prefix <prefix>report_annotated_parasitics -list_not_annotatedtimeDesign -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. |
15.10 Command cheat sheet: ECO and requalification
Legacy UI commands. Angle brackets are placeholders, and values shown are examples, not project limits.
| Command | What it produces |
|---|
| ECO settings and logging | |
|---|---|
getEcoMode | Every setEcoMode parameter with its current value, type, and whether the value is the default or set by the user. |
getEcoMode -quiet | The current settings of all setEcoMode parameters as a Tcl list only, handy for a script that records them. |
setEcoMode -reset | Resets every setEcoMode parameter to its default. Changes the session. |
setEcoMode -batchMode true | Starts 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 false | Allows 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. |
endECO | Ends 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 -report | A 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.1 | A 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> -upsize | The 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 | |
|---|---|
ecoPlace | Unplaced standard cells placed without moving placed cells. Changes the database. |
ecoRoute | Incremental routing of modified and new nets, with opens and shorts detected. Changes the database and runs long. |
ecoRoute -fix_drc | Repairs only the DRC violations already marked in the database, and reverts if the count rises. Errors out if open nets exist. Changes the database. |
prepareForEcoRoute | Routed 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 true | Overlapping 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 true | Unplaced 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 -verbose | Constraint 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_annotated | The 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>.enc | A 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>.def | A DEF file with floorplan, cells and routing, for a later defComp. Writes a file. |
saveNetlist <before>.v | The logical Verilog netlist of the design. Writes a file. |