Chip finishing and post-fill qualification
13.1 Stage purpose
Finishing adds four groups of objects. Filler cells fill the gaps between standard cells so that the power rails and the n-wells run without a break. End-cap and well-tap cells close the ends of the rows and tie the wells to the supply at a set distance. Decap cells add decoupling capacitance. Metal fill is a set of dummy metal shapes, and via fill the equivalent for cut layers. Both exist to make the density of each layer more even, which helps manufacturing.
Metal fill is useful and not free. The added metal increases the coupling capacitance to neighbouring signal wires, so each window of the layout trades a better density for a little more delay. Figure 18 shows this on one small region: before fill, the four windows hold between 8 and 14 percent metal; after fill they are closer together, and the ledger lists what that cost in shapes and in added capacitance. The numbers are illustrative.
Three different densities appear in the reports of this stage, and they are easy to confuse. Placement density is the share of row sites occupied by cells, and checkPlace and reportDensityMap report it. Metal density is the share of a window covered by metal on one routing layer, and verifyMetalDensity reports it. Cut density is the same idea for via layers, and verifyCutDensity reports it. A clean result for one says nothing about the others.
The order of the steps matters, and Figure 19 gives the sequence this chapter follows. A later step can invalidate an earlier check, which is why the loop on the right returns to the density and timing checks. The last card, H-10, covers the export of the finished database to stream, OASIS, DEF and a physical netlist, which happens after the loop has settled. Antenna repair is not a step in the figure. It reroutes metal, so close it before filler and fill where you can, and see card H-08 for the reruns if it happens late.
This chapter keeps four things apart. Tool completion means a command ran. Analysis coverage means the check looked at every layer, window and cell it needed to. Stage qualification means the evidence supports leaving chip finishing. Signoff is the final verification in the project signoff tools, which this chapter does not replace. An empty report is not a pass, and a fill run that finishes does not show that any density rule is met.
13.2 Entry prerequisites
| Must already be true | Why |
|---|---|
| Chapters 1 to 12 passed, with detailed routing complete and post-route timing closed | Fill and filler are added to final metal. Any later routing change invalidates them. |
| The last ECO has been made, and its route is DRC clean before filler is added | A clean baseline lets you attribute later violations to filler or fill. |
| Global net connection rules exist for the supply pins of the filler cells | The reference states that the built-in DRC checks of addFiller are not accurate without them. |
| The filler, end-cap, well-tap and decap cell lists and rules come from the library documentation | This book does not name cells or distances. |
| Density rules are available, either in the LEF or in a project rule file | Without them the density check uses internal default values, which are not your rules. |
| The signoff fill engine and its licence are available if signoff fill is used | add_metal_fill_signoff runs through an external fill engine. |
| A pre-fill timing baseline from timeDesign -postRoute is stored | The cost of fill is the difference between two runs, so one of them must exist first. |
13.3 Relevant files and analysis context
The inputs are the filler list, the tap and end-cap rules, the density rules, and the layer map that connects Innovus layer names to stream layer numbers for the fill data. The outputs are the filler and tap instances in the database, the fill data, and the report files that each card names.
Three settings are stored with the design and therefore change what a later run does: setFillerMode, set_metal_fill_signoff_mode and set_verify_drc_mode. The reference states that parameters given directly to addFiller apply to that run only and supersede setFillerMode. Thus, record the stored values with each report, because two runs with different stored values check different things.
Signoff fill is kept as a hierarchical fill database. The reference lists -auto_load_fills, -view_fills and -flatten for bringing it into the session, and describes flattening as the editable mode for DRC, density and timing. Confirm that the fill is loaded or attached before you read a density, DRC or trim result as complete. Whether each check sees fill that is not loaded is not verified here.
The timing views for the post-fill comparison are the same views used for post-route signoff preparation in Chapter 12. Use the same views, the same analysis mode and the same constraint set before and after fill, or the difference you measure is not the effect of fill.
13.4 Checks and command cards
13.4.1 Pre-stage checks
Before any filler is added, store four baselines. Each one makes a later number meaningful.
| Baseline | Where it comes from | Used later for |
|---|---|---|
| DRC and connectivity result of the routed design | Card H-07 before filler | Deciding whether a violation is caused by filler or fill |
| Placed instance count, and any FIXED count your checkPlace summary prints (the reference documents no FIXED count: not verified) | Card H-04 before filler | Detecting cells that moved or were lost |
| Setup and hold summary of the routed design | Card H-09 before fill | Pricing the timing cost of fill |
| Stored filler, fill and DRC settings | getFillerMode, get_metal_fill_signoff_mode, get_verify_drc_mode | Explaining differences between runs |
13.4.2 Post-stage checks
| Question it answers | Which filler list and settings fill the rows, and was the insertion DRC aware? |
|---|---|
| Stage | After last ECO |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Routing complete and final ECOs done. Global net connection rules set for the filler supply pins. Filler cell list taken from the library documentation. |
| Legacy UI | getFillerMode
addFiller -cell {<filler cells>} -prefix FILLER |
| 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 | -cell names the filler cells. Take the list from the library documentation, not from this book.-prefix sets the instance prefix, FILLER by default. Later delete and check steps depend on it.-markFixed places the new fillers in FIXED status. Use it only if your project wants them locked.-check_signal_drc checks fillers against existing routing after routing. The reference gives true as the default.-fixDRC replaces fillers that cause DRC violations marked by verify_drc, and leaves a gap if no replacement is legal. |
| Scope and view | Whole core, or boxes given with -area. A power domain is selected with -powerDomain only if the block uses UPF. |
| Chip-finish order | The reference recommends ecoRoute for the last ECO, then addFiller with the full set of filler cells including decap cells, then ecoRoute -fix_filler_drc_with_patch_only. The reference also describes inserting filler before detailed routing in most flows. This card follows the post-route sequence. |
| Effect on session | updates the design database. Some commands in this card only read or report. |
| Output | Console messages with the filler summary and the final number of filler gaps. Filler instances in the database. |
| Fields that matter | The gap count printed at the end of the run. Any DRC message between a filler and a wire. The getFillerMode values, which must match the project filler list. |
| Healthy | Filler list matches the project; zero gaps. |
| Warning | Fillers inserted with DRC markers, or a few explained gaps. |
| Hard stop | Wrong filler list, or filler DRC left. |
| Common misuse | Running addFiller before the global net connection rules exist, so its built-in checks are inaccurate. A later ECO that moves cells over existing fillers. |
| Root cause and fix | Set the list with setFillerMode, remove the old fillers with deleteFiller and the same prefix (it removes every instance whose name starts with the prefix), and insert again. |
| Rerun after a fix | Rerun H-02, H-03 and H-04, then the density and timing cards. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Does every site that needs a filler have one? |
|---|---|
| Stage | After filler insertion |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Filler inserted. For the stack length checks, the limits are set with setFillerMode. |
| Legacy UI | checkFiller -file <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 | -file writes the console output of the check to a file.-horizontal_max_length checks the horizontal stack length against its limit. The setFillerMode defaults are 100 um horizontal and 50 um vertical, so record the limits in force.-vertical_stack_max_length checks the vertical stack length against its limit. |
| Scope and view | Whole core unless -area limits the box. |
| Effect on session | writes files |
| Output | A count of the sites that are missing filler cells, and a file if requested. |
| Fields that matter | The total number of gaps found. The width of any gap, which -reportGap can isolate. Stack length violations. |
| Healthy | Zero gaps, no stack violation. |
| Warning | A few gaps beside halos, each listed and approved. |
| Hard stop | Gaps between standard cells. |
| Common misuse | Reading a result from a run limited with -area as a whole-core result. |
| Root cause and fix | Add a filler that fits the narrowest gap to the list, then run addFiller again. Gaps next to blockages need a project decision. |
| Rerun after a fix | Rerun H-02 and H-04. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Are well taps, end caps and decap cells present as the project specified? |
|---|---|
| Stage | After filler and decap |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | End caps and well taps inserted at the floorplan stage. Decap cells inserted if the power plan calls for them. |
| Legacy UI | verifyWellTap -rule <um> -report <f> reportDeCap -area <llx> <lly> <urx> <ury> |
| 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 | -rule sets the well-tap distance rule. The reference says the spacing between two taps should be twice the -rule value and the distance from a tap to the row end equal to it. Derive the value from your technology rule and do not copy the addWellTap -cellInterval value.-report names the report file.-area limits reportDeCap to a box.getEndCapMode is a read-only query of the end-cap settings. It is in the cheat sheet. |
| Scope and view | verifyWellTap checks the whole design but skips row areas under blocks, halos and placement blockages. reportDeCap reports one box. |
| What has no command | The reference documents no dedicated end-cap verification command. Compare the end-cap instance count with the count your floorplan specification implies, and use H-04 for the rest. The reference describes check_design -type place as a check run before placement, so it does not confirm the finished database. |
| Effect on session | adds GUI violation markers; writes files. Some commands in this card only read or report. |
| Output | Markers and a report for taps, the end-cap settings as a value list, and a list of the decap cells in the box. |
| Fields that matter | Missing taps. Tap pairs further apart than the rule. The areas the check skips. The decap cell count against the power plan. |
| Healthy | No missing taps, and end caps and decap match the plan. |
| Warning | Rows under halos or blockages are skipped. |
| Hard stop | Missing taps, or taps further apart than the rule. |
| Common misuse | Treating getEndCapMode as a completeness check. It shows what would be inserted, not what is in the database. |
| Root cause and fix | Missing taps or end caps usually send you back to the floorplan stage, because the reference places addEndCap after floorplan and before addWellTap. After any change, rerun the check and compare against H-04. |
| Rerun after a fix | Rerun H-03 and H-04. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Are all cells still legal, and has the set of placed instances changed unexpectedly? |
|---|---|
| Stage | After filler and decap |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Filler, tap, end-cap and decap cells inserted. The pre-filler baseline from the pre-stage checks stored. |
| Legacy UI | checkPlace <report_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 | -honorPrerouteForFiller also checks physical cells placed under preroutes. By default filler under preroutes is not reported.-ignoreFillerInUtil leaves filler cells out of the utilisation figure. |
| Scope and view | Whole design. Preplaced instances and macros count as FIXED, and the reference says fixed macros are not checked. |
| Objects that must not move | After fill, any command that moves cells changes the metal that the fill was computed against. Section 13.7.1 lists the commands. |
| Effect on session | adds GUI violation markers; writes files |
| Output | A violation report with markers, the number of placed instances, the number of unplaced macros and the placement density lines. |
| Fields that matter | Violation counts by type. The placed count against the baseline. Placement density with and without filler. Any FIXED count the summary prints (not verified). |
| Healthy | No violations, and the counts equal the baseline plus the cells you added. |
| Warning | Violations unchanged from the baseline. |
| Hard stop | Overlaps, cells off row or core, or a placed count below the baseline. |
| Common misuse | Comparing the utilisation printed by checkPlace with the density printed by timeDesign. The reference notes that only checkPlace counts cell padding. |
| Root cause and fix | Remove the cause: re-insert the physical cells, or declare an ECO and repeat the finishing sequence. |
| Rerun after a fix | Rerun H-01 to H-04, then the density and timing cards. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Which layers received fill, how much, and with which settings? |
|---|---|
| Stage | After metal fill |
| Product | Innovus Implementation. The signoff fill run calls the Pegasus or PVS application, so that product and its licence must be available for add_metal_fill_signoff. The report commands read the result. |
| Required state | Detailed routing complete. add_metal_fill_signoff -fill has completed. The rule file and window settings are recorded. |
| Legacy UI | get_metal_fill_signoff_mode report_metal_fill -fill_area -file <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 | -fill_area reports the area of the fill shapes for each layer.-fill_length is the companion option that reports the length of the fill shapes for each layer.-file names the report file. |
| Scope and view | Whole design, per layer and per net class (floating or connected). |
| Via fill | add_metal_fill_signoff generates via fill by default and -no_via_fills turns it off. The reference sample of the summary lists metal layers only, so check via fill with the cut density check in H-06. |
| Effect on session | writes files. Some commands in this card only read or report. |
| Output | A Metal Fill Summary table by layer, with the number of shapes and their area, and the stored fill options as a value list. |
| Fields that matter | Shapes and area per layer. The floating share per layer. The stored window size, window step, minimum density and rule file. |
| Healthy | Every required layer has fill, with the recorded settings. |
| Warning | A required layer has few shapes, or the floating share changed. |
| Hard stop | No report, empty summary, or the wrong rule file. |
| Common misuse | Treating a report that lists shapes as proof that the density rules are met. Shape counts are not densities. |
| Root cause and fix | Correct the stored settings or the rule file, delete the fill, and run add_metal_fill_signoff -fill again. |
| Rerun after a fix | Rerun H-05, H-06, H-07 and H-09. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Is metal density and via density within the window rules on every layer? |
|---|---|
| Stage | After metal fill and after any trim |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Fill added, loaded into the session where the check needs it (see 13.3), and, if used, trimmed. Density values available from the LEF or from the project rule file. |
| Legacy UI | verifyMetalDensity -report <f>
verifyCutDensity -layer {<cut layers>} -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 | -report names the report file. The default is a design-name file.-layer limits the check to named layers. Name every layer in the fill rule.-detailed writes a more detailed report.-ignoreLEFDensity ignores the LEF macro density table. Use it only if your project says so. |
| Scope and view | Every routing layer and macro for verifyMetalDensity. The named cut layers for verifyCutDensity. |
| Effect on session | adds GUI violation markers; writes files |
| Output | Report files that list violating windows with their layer, window and density, and markers in the design window. |
| Fields that matter | Layer, window coordinates and density value of each violation. Whether the limits came from the LEF or from internal defaults. |
| Healthy | No density violation against LEF or project values. |
| Warning | Clean only against internal defaults. |
| Hard stop | Violating windows, or fill-rule layers never checked. |
| Common misuse | Confusing metal density with placement density, or checking only a few layers and reading the result as complete. |
| Root cause and fix | Add fill in the failing windows, or reduce trimming there. Rerun both density checks after any trim. |
| Rerun after a fix | Rerun H-05, H-06, H-07 and H-09. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Does the finished layout, fill and filler included, pass DRC and connectivity checks in the database? |
|---|---|
| Stage | After fill and trim |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Filler and fill present. The baseline from the pre-stage checks stored. |
| Legacy UI | verify_drc -limit 0 -report <f> verifyConnectivity -type all -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 | -limit sets the maximum number of reported errors. The reference gives 1000 as the default, and 0 removes the limit.-report names the report file.-ignore_fill_wire makes verify_drc ignore fill wires. Run once with and once without it to separate fill effects.-noFill makes verifyConnectivity ignore metal fill. Record which setting you used. |
| Scope and view | Whole design. verify_drc checks placed instances only. |
| Evidence class | Both checks are implementation evidence. The final DRC verdict comes from the project signoff verification flow. |
| Effect on session | adds GUI violation markers; writes files |
| Output | Markers in the design window and report files with violations by type. |
| Fields that matter | Violation count by type, and whether the count equals the limit. Opens, shorts, unrouted nets and unconnected pins. |
| Healthy | Zero DRC with no limit, and no opens or unrouted nets. |
| Warning | Floating-metal entries with a recorded reason. |
| Hard stop | Any DRC on fill or filler, any open or short, or a count at the limit. |
| Common misuse | Reading a report that stops at the default limit as complete. Reading verifyConnectivity antenna entries as process antenna results. |
| Root cause and fix | Filler violations: addFiller -fixDRC, then ecoRoute -fix_filler_drc_with_patch_only. Net violations: reroute, because addFiller cannot repair them. Fill violations: trim or delete that fill. |
| Rerun after a fix | Rerun H-07, and the density and timing cards if fill changed. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Do the routed nets satisfy the process antenna rules, and how were violations repaired? |
|---|---|
| Stage | After repair |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Signal nets routed. The LEF contains process antenna or maximum floating area keywords. Repairs are best finished before filler and fill, because they reroute metal. |
| Legacy UI | verify_antenna -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 | -report names the report file. The default is a design-name file.-detailed lists the antenna value of every layer of every net, including nets with no violation.-use selects signal, power, clock or all nets. |
| Scope and view | All nets by default, or the nets named with -nets. |
| Why filler is rechecked | getNanoRouteMode -route_antenna_diode_insertion returns whether the router inserts diodes. The reference states that the router can insert antenna diodes even when filler is already placed, and can swap filler for diode cells. |
| Effect on session | adds GUI violation markers; writes files |
| Output | Markers and a report file with the process antenna violations. With -detailed, a star marks the point of violation. |
| Fields that matter | Net, layer and antenna value of each violation. Whether diode insertion is enabled and which diode cell is named. |
| Healthy | No antenna violation, and the LEF carries antenna rules. |
| Warning | Repaired with diodes, placement to recheck. |
| Hard stop | Antenna violations remain after repair. |
| Common misuse | Running the check on a LEF without antenna keywords, so that the clean report covers nothing. Using the verifyConnectivity antenna count, which reports dangling wires. |
| Root cause and fix | Enable diode insertion and name the diode cell with setNanoRouteMode, then repair the routing. The reference states that layer changes are the default repair. |
| Rerun after a fix | Rerun H-08, then H-01 to H-07 and H-09, because repair reroutes metal and diodes can replace fillers. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Did extraction see the fill, and how much did fill change the parasitics and the timing? |
|---|---|
| Stage | After fill and trim |
| Product | Innovus Implementation. Signoff Quantus extraction or Tempus timing are separate products if you use them. |
| Required state | Fill present. The pre-fill timing baseline stored. The same analysis views and constraints as the baseline. |
| Legacy UI | timeDesign -postRoute -outDir <dir> -prefix <prefix> |
| 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 | -assumeMetFill is a setExtractRCMode option, not a timeDesign option. Only effort level low supports it. At postRoute the value is ignored and native extraction uses the LEF fill active spacing, or 0.6 um if the LEF gives none.-pvs_fill is also a setExtractRCMode option. It sends attached fill data to signoff Quantus extraction and has no effect on TQuantus or IQuantus inside Innovus. It needs a stream layer map.-outDir names the report directory. The default is timingReports.-prefix sets the report file prefix, so before and after runs do not overwrite each other. |
| Scope and view | All active views. The reference says timeDesign -postRoute runs native detailed extraction by default, while its example says TQuantus by default. Read the engine with getExtractRCMode first. |
| How fill reaches extraction | getExtractRCMode shows the engine and fill settings in force, and extractRC, which is in the cheat sheet, rebuilds the RC database on its own. Four routes appear in the reference: an assumed fill with -assumeMetFill, imported fill wires with setNanoRouteMode -extract_keep_fill_wires true, attached signoff fill with setExtractRCMode -pvs_fill true for signoff Quantus, and the metal_fill setting of the Quantus extra command file for TQuantus and IQuantus. In that file TQuantus supports only advanced virtual metal fill, and IQuantus extracts floating fill by default. |
| Effect on session | updates the design database; writes files; runs an expensive analysis |
| Output | An RC database and timing reports in the output directory, with a summary per run. |
| Fields that matter | The extraction settings in force. Setup and hold WNS, TNS and violating endpoints per view, before and after fill. |
| Healthy | Slack within budget, with fill-aware extraction. |
| Warning | Slack worse but inside budget, or fill only assumed. |
| Hard stop | Fill unseen by extraction, or timing beyond budget. |
| Common misuse | Running timeDesign -postRoute -reportOnly after adding fill. It reuses the extraction already in memory. |
| Root cause and fix | Make the fill visible to extraction. If timing is worse, trim fill near the failing nets, then rerun the density checks. |
| Rerun after a fix | Rerun H-06, H-07 and H-09 after every trim. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Is the finished database ready to be written as GDS or OASIS and DEF, with the fill included in the stream and every layer mapped? |
|---|---|
| Stage | Before hand-off |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | H-01 to H-09 passed on this database. The project layer map file, the macro stream files and, if signoff fill is used, the attached fill data are available. |
| Legacy UI | streamOut <name>.gds -mapFile <map> defOut -floorplan -routing <name>.def getStreamOutMode setStreamOutMode -check_map_file true streamOut <name>.gds -mapFile <map> -signoff_fill streamOut <name>.oas -mapFile <map> -format oasis saveNetlist <name>.v -includePhysicalInst -includePowerGround |
| 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 | -check_map_file prints the objects that exist in the database but are not mapped in the map file. Only the main objects are checked.-mapFile names the layer map file. The reference calls it required for a successful stream out and states that layers it omits are not written.-mode ALL writes every layer in the map file. FILLONLY writes only fill layers, NOFILL only non-fill layers, NOINSTANCES wiring without component instances.-units sets the resolution of the stream file. The default is the unit in the LEF file.-merge merges external GDS or OASIS files for macros and checks them for name collisions. Without -uniquifyCellNames the reference says duplicate cell names in the merge files are ignored, so check the names yourself.-reportFile writes the cells whose names were changed. Add it to the streamOut line when you merge macro files, and use -units and -merge as the project requires.-signoff_fill merges the attached signoff fill into the stream and places the signoff top fill cell at 0,0 R0. The fill format must be GDS, so how fill is carried into an OASIS tape-out is not verified here.-format selects stream or oasis as the tape-out format.-includePhysicalInst puts physical instances such as fillers into the saved netlist, which is a physical netlist for tools that need it. |
| Scope and view | The whole current database. The area options of streamOut limit the output, and the cards use none of them. |
| Evidence limit | This card shows that the right database was written with the right map. The project signoff DRC and LVS runs on the written file are the signoff evidence, and they are outside this chapter. The reference does not state that defOut carries the fill: not verified. |
| Effect on session | changes analysis configuration; writes files. Some commands in this card only read or report. |
| Output | The stream or OASIS file, a DEF file, a physical netlist, a name-change report and a log summary of errors and warnings. |
| Fields that matter | Errors and warnings in the log. Objects reported as unmapped. Renamed cells. The units against the LEF. Whether the fill layers and the signoff top fill cell are present. |
| Healthy | No errors, every layer mapped, and no unexpected renames. |
| Warning | Renamed merged cells, or fill written to a separate file. |
| Hard stop | An unmapped routing or fill layer, or a wrong unit. |
| Common misuse | Treating a written file as a verified one. If no map file is given, the reference states that a generic map is created that you must customise. |
| Root cause and fix | Fix the map file, add the missing layers, then write the file again. Resolve cell-name collisions in the merge list. |
| Rerun after a fix | Rerun H-10 after any change to the database, and rerun H-06 and H-07 if the change touched fill. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
13.5 Required reports, artefacts and how to read them
| Report | Fields that support qualification | Evidence class |
|---|---|---|
| Filler settings and run log (H-01) | stored settings; final gap count; filler DRC messages | implementation |
| checkFiller output (H-02) | total gaps; gap widths; stack violations | implementation |
| Tap report and decap list (H-03) | missing taps; distance violations; skipped areas; decap count | implementation |
| checkPlace report (H-04) | violations; placed count; density lines | implementation |
| Metal fill report (H-05) | shapes and area per layer; floating share; stored settings | implementation |
| Density reports (H-06) | violating windows per layer; source of the limits | implementation |
| DRC and connectivity reports (H-07) | violations by type; count against the limit | implementation |
| Antenna report (H-08) | violating nets and layers; diode settings | implementation |
| Before and after timing runs (H-09) | WNS, TNS, violating endpoints per view; extraction settings | implementation, or preliminary if fill is only assumed |
| Streamout log and name-change report (H-10) | errors and warnings; unmapped objects; renamed cells; units; fill layers present | implementation |
checkFiller ## illustrative excerpt *INFO: Total number of gaps found: 0 report_metal_fill -fill_area -file fill_area.rpt Metal Fill Summary <numFillShapes>=<fillArea>squm(<percentTotal>) |floating |total ------------------------------------------------------ M2| 1820= 24960.40 (100.00%) | 1820= 24960.40 M3| 1764= 24102.15 (100.00%) | 1764= 24102.15 M4| 1530= 21876.80 (100.00%) | 1530= 21876.80 M5| 1105= 15432.55 (100.00%) | 1105= 15432.55 ------------------------------------------------------ sum| 6219= 86371.90 (100.00%) | 6219= 86371.90
The filler check reports zero gaps, which answers one question only: no site is missing a filler. It says nothing about the DRC state of those fillers, and the plain form does not check stack length, which needs -horizontal_max_length and -vertical_stack_max_length. In the fill summary, the floating column and the total column agree on every layer, so all fill is floating and none is connected to a net. That may be exactly what your project wants, since the reference notes that floating fill adds less capacitance than connected fill. Check the choice against the project record.
Next, compare the layers listed with the layers in your fill rule. This sample shows no fill on M1 or M6, which is correct only if the rule excludes them. Finally, add up the shapes: the sum row of 6,219 shapes equals the total of the four layers, so the report is internally consistent. Consistency is not density. The density result comes from card H-06. All numbers here are illustrative and are not from a tool run.
13.6 Healthy, suspicious and hard-stop examples
| Finding | Status | Why |
|---|---|---|
| Zero filler gaps and no filler DRC | PASS | Rails and wells are continuous and the fillers are legal. |
| A few gaps beside a macro halo, listed and approved | WARN / REVIEW | Explained and recorded, but not a clean count. |
| Gaps between standard cells | HARD STOP | The rail and n-well continuity is broken. |
| Tap check clean, but rows under halos are skipped | WARN / REVIEW | The check did not look at those rows. |
| Density clean only against internal default values | WARN / REVIEW | Not a check against your rule values. |
| DRC violation on fill or filler | HARD STOP | The finished layout is not legal. |
| Antenna check on a LEF without antenna keywords | NOT EVALUATED | The report covers nothing, so it is not evidence. |
| Post-fill WNS beyond the project budget of the baseline | HARD STOP | Fill costs more timing than the project allows. |
| Fill or routing layer missing from the layer map | HARD STOP | The layer is not written, so signoff never sees it. |
| Stream file written but its log was not read | WARN / REVIEW | A written file is tool completion, not readiness. |
| -powerDomain options in a single-supply block | NOT APPLICABLE | No power domains exist. |
13.7 Debugging, corrective action and reruns
Fix finishing problems in the order of the chip-finish flow, because each later check depends on the earlier objects. A filler DRC violation comes first, since fill is computed around the filler. Next come density problems, then timing. A timing repair by trimming removes metal, so it can reopen a density problem, and the density check follows every trim.
13.7.1 What must not move after fill
Fill is generated against the metal that exists when it runs. After it, treat the following as frozen unless you declare an ECO and repeat the finishing sequence.
| Object | What the reference says | Consequence of moving it |
|---|---|---|
| Standard cells and macros | addFillerGap moves cells and by default deletes routing. It is meant for use after placement and before routing. | Metal moves, so filler, fill and routing are all invalid. |
| Filler cells | addFiller -markFixed places them FIXED. deleteFiller removes physical cells including end-cap and well-tap cells, even when FIXED, unless -keepFixed is given. | A broad deleteFiller can strip taps and end caps along with filler. |
| Decap cells | addDeCap -addFixAttr places them FIXED. | A later filler run can replace decap cells to satisfy stack rules. |
| ECO commands | For the commands that resize or buffer instances, FIXED instances are left alone unless setEcoMode -honorFixedStatus false is set. Its default is true. Whether ecoRoute follows it is not verified. | Keep the default, so fixed filler, taps and decap are not edited by those commands. |
| Metal fill | saveDesign -noFill omits fill shapes, for runs where the fill is regenerated. | Saving without fill is correct only if you will regenerate it. |
After a justified ECO, use addFiller -ecoMode true to remove fillers that overlap moved cells and refill the new gaps, and use add_metal_fill_signoff -incremental to update the fill. Then rerun every card in this chapter.
13.7.2 Worked example: fill that costs timing
Suppose the routed design had a setup WNS of +0.031 ns in the worst view before fill. After signoff fill, the same views give -0.012 ns. Every density and DRC card is clean, and H-09 is the first card to fail. Your project requires non-negative setup slack, so the status is HARD STOP. All values here are illustrative.
| Run | Setup WNS (ns) | Violating endpoints | Fill shapes in the failing window |
|---|---|---|---|
| Before fill | +0.031 | 0 | 0 |
| After fill | -0.012 | 3 | 12 |
| After trim near the critical net | +0.004 | 0 | 8 |
The failing endpoints all sit behind the net clk_a of Figure 18. The cause is known: fill shapes within a few tracks of that net add coupling capacitance. The reference describes this exact usage model for trimMetalFillNearNet: time the design before fill, add fill, time it again, and then trim the fill that made timing worse. The command takes a slack threshold, spacings on the same layer, the layer above and the layer below, and a minimum density that stops the trimming. It does not check DRC rules, so run H-07 after every trim, and add -createFillBlockage so that a later fill run does not refill the trimmed area.
In the figure, the trim removes four fill shapes from window W4 (the figure assumes -remove, which deletes whole shapes instead of cutting them back to the halo edge). The added coupling for that window falls from 2.08 to 1.12 fF in the ledger, and the window density drops from 17 to 15 percent. That drop is why the sequence ends with the density checks. A window that loses metal can fall below its minimum, and the minimum-density argument of the trim command is there to prevent that. The decision after the trim is therefore two decisions: H-09 passes when the slack is back inside budget, and H-06 must still pass on the trimmed layout. Rerun H-06, H-07 and H-09.
13.8 Exit criteria and stage checklist
- Filler. Settings recorded, zero gaps or approved gaps, and no filler DRC.
- Physical cells. Well taps, end caps and decap match the specification, with the skipped areas listed.
- Placement. checkPlace clean, and the placed count explained against the baseline.
- Metal and via fill. Fill report present for every required layer, with settings equal to the project record.
- Density. Metal and cut density clean against LEF or project rule values, not only internal defaults.
- DRC and connectivity. Zero violations with the limit removed, and the fill treatment recorded.
- Antenna. Process antenna check run on a LEF with antenna rules, with no violation left.
- Timing. Extraction saw the fill, and post-fill slack is inside the project budget of the baseline.
- Streamout. Map file reviewed, every layer and fill layer mapped, log read, and the written files handed to signoff DRC and LVS.
Thus, chip finishing is qualified when the finished layout is complete, legal, connected, dense enough and still on time, with evidence for each, and written out in the formats the signoff tools read. A finished fill run is only the start of that evidence. In the next chapter, Chapter 14 sets up RC extraction and compares the implementation timing with the signoff results.
13.9 Sanity check cheat sheet: Chip finishing and post-fill
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 |
|---|---|---|---|---|---|
| H-01 | Filler settings After last ECO | getFillerModeaddFiller -cell {<filler cells>} -prefix FILLER | Filler list matches the project; zero gaps. | Fillers inserted with DRC markers, or a few explained gaps. | Wrong filler list, or filler DRC left. |
| H-02 | Filler gaps After filler insertion | checkFiller -file <f> | Zero gaps, no stack violation. | A few gaps beside halos, each listed and approved. | Gaps between standard cells. |
| H-03 | Tap, end-cap, decap After filler and decap | verifyWellTap -rule <um> -report <f>reportDeCap -area <llx> <lly> <urx> <ury> | No missing taps, and end caps and decap match the plan. | Rows under halos or blockages are skipped. | Missing taps, or taps further apart than the rule. |
| H-04 | Placement with fill After filler and decap | checkPlace <report_file> | No violations, and the counts equal the baseline plus the cells you added. | Violations unchanged from the baseline. | Overlaps, cells off row or core, or a placed count below the baseline. |
| H-05 | Metal fill record After metal fill | get_metal_fill_signoff_modereport_metal_fill -fill_area -file <f> | Every required layer has fill, with the recorded settings. | A required layer has few shapes, or the floating share changed. | No report, empty summary, or the wrong rule file. |
| H-06 | Metal and cut density After metal fill and after any trim | verifyMetalDensity -report <f>verifyCutDensity -layer {<cut layers>} -report <f> | No density violation against LEF or project values. | Clean only against internal defaults. | Violating windows, or fill-rule layers never checked. |
| H-07 | DRC and connectivity after fill After fill and trim | verify_drc -limit 0 -report <f>verifyConnectivity -type all -report <f> | Zero DRC with no limit, and no opens or unrouted nets. | Floating-metal entries with a recorded reason. | Any DRC on fill or filler, any open or short, or a count at the limit. |
| H-08 | Antenna status After repair | verify_antenna -report <f> | No antenna violation, and the LEF carries antenna rules. | Repaired with diodes, placement to recheck. | Antenna violations remain after repair. |
| H-09 | Post-fill timing After fill and trim | timeDesign -postRoute -outDir <dir> -prefix <prefix> | Slack within budget, with fill-aware extraction. | Slack worse but inside budget, or fill only assumed. | Fill unseen by extraction, or timing beyond budget. |
| H-10 | Streamout readiness Before hand-off | streamOut <name>.gds -mapFile <map>defOut -floorplan -routing <name>.defgetStreamOutMode | No errors, every layer mapped, and no unexpected renames. | Renamed merged cells, or fill written to a separate file. | An unmapped routing or fill layer, or a wrong unit. |
13.10 Command cheat sheet: Chip finishing and post-fill
Legacy UI commands. Angle brackets are placeholders, and values shown are examples, not project limits.
| Command | What it produces |
|---|
| Filler cells | |
|---|---|
getFillerMode | The current setFillerMode settings: filler list, prefix, gap fitting, DRC checking, stack limits. Record it with the filler run. |
checkFiller | The total number of gaps found in the core, meaning sites that are missing filler cells. |
checkFiller -horizontal_max_length -vertical_stack_max_length | Violations of the horizontal and vertical stack length limits. |
setFillerMode -core {{<filler cells>}} -corePrefix FILLER | Stores the filler list and prefix for later addFiller runs. Changes the session and is saved with the design. |
addFiller -cell {<filler cells>} -prefix FILLER | Filler instances in the gaps between standard cells, then a count of the gaps that remain. Changes the database. |
addFiller -fixDRC | Replaces fillers that cause DRC violations with adjacent cells found by verify_drc. It leaves a gap if no replacement is legal. Changes the database. |
addFillerGap <um> -effort low | Moves placed cells to open gaps of at least the given size, and by default deletes routing. For use before routing only. |
deleteFiller -prefix FILLER | Removes every physical instance whose name starts with the prefix, and by default also end-cap and well-tap cells. Changes the database. |
| Tap, end-cap and decap cells | |
|---|---|
verifyWellTap -rule <um> -report <f> | Markers and a report for missing well taps and for taps that break the distance rule. |
reportDeCap -area <llx> <lly> <urx> <ury> | The decoupling capacitance cells placed in the area. |
addEndCap -prefix ENDCAP | End-cap instances at the ends of the site rows. Changes the database. |
addWellTap -cell <tap cell> -cellInterval <um> -prefix WELLTAP | Well-tap instances in every row at the given maximum interval. Changes the database. |
addDeCap -totCap <fF> -cells <cell> -addFixAttr | Decoupling cells totalling the requested capacitance, placed FIXED. The cells must first be defined with addDeCapCellCandidates. Changes the database. |
| Placement and density of cells | |
|---|---|
checkPlace <report_file> | A violation report, markers, the number of placed instances and unplaced macros, and the placement density. |
check_design -type place -out_file <f> | Placement prerequisite findings, including misaligned well taps and missing termination cells. Documented as a check run before placement, so it does not verify the finished database. |
| Metal fill and via fill | |
|---|---|
get_metal_fill_signoff_mode | The stored signoff metal fill options. They are saved with the design. |
report_metal_fill -fill_area -file <f> | Per layer, the number and area of fill shapes, split into floating and total. |
report_metal_fill -fill_length -file <f> | Per layer, the number and length of fill shapes. |
add_metal_fill_signoff -fill | The signoff metal fill database, through Pegasus or PVS. Needs routed metal and a rule file or technology setting. Load it with -auto_load_fills, -view_fills or -flatten before checks that need the shapes. |
add_metal_fill_signoff -incremental | Incremental fill after an ECO. |
trimMetalFillNearNet -slackThreshold <ns> -spacing <um> -spacingAbove <um> -spacingBelow <um> | Trims fill to a halo around nets whose slack is below the threshold; -remove deletes whole shapes. The spacings default to 0. Does not check DRC. Changes the database. Run verifyMetalDensity afterwards. |
streamOut <gds> -mapFile <map> -signoff_fill | A GDS file that includes the signoff fill data attached to the database. Writes a file. |
| Density verification | |
|---|---|
verifyMetalDensity -report <f> | A metal density report for every routing layer and macro, and markers for violations. |
verifyCutDensity -layer {<cut layers>} -report <f> | A density report for the listed cut layers. |
| DRC and connectivity after fill | |
|---|---|
verify_drc -limit 0 -report <f> | Every DRC violation with no limit on the count, plus markers. |
verifyConnectivity -type all -report <f> | Opens, unconnected wires, unconnected pins, loops and unrouted nets, plus markers. |
ecoRoute -fix_filler_drc_with_patch_only | Patch metal that clears filler-related DRC without rerouting. Changes the database. |
| Antenna | |
|---|---|
verify_antenna -report <f> | Process antenna violations, with markers and a report. |
getNanoRouteMode -route_antenna_diode_insertion | Whether the router inserts antenna diodes, and with which settings. |
setNanoRouteMode -route_antenna_diode_insertion true | Lets the router add antenna diodes, even where filler already sits. Changes the session. |
| Post-fill extraction and timing | |
|---|---|
getExtractRCMode -engine -effortLevel -assumeMetFill -pvs_fill | The extraction engine and fill settings in force. |
setExtractRCMode -engine postRoute -effortLevel low -assumeMetFill 1 | Makes native extraction account for fill. At postRoute the value is ignored and the LEF fill active spacing is used (0.6 um if absent). Changes the session. |
setNanoRouteMode -extract_keep_fill_wires true | Imports fill wires so that extraction can see them. Changes the session. |
setExtractRCMode -pvs_fill true -signoff_stream_layer_map <f> | Sends the attached fill data to signoff Quantus extraction. Changes the session. |
extractRC | The RC database for the current routing and fill. Changes the database. |
timeDesign -postRoute -outDir <dir> -prefix <prefix> | Extraction, timing analysis and reports saved to the directory. Run once before and once after fill. |
| Streamout and export readiness | |
|---|---|
getStreamOutMode | The current setStreamOutMode settings, such as cell naming, OASIS and via-cell options. |
setStreamOutMode -check_map_file true | Makes the stream-out print objects that exist in the database but are not mapped in the map file. Changes the session. |
streamOut <name>.gds -mapFile <map> -mode ALL -units <n> -merge {<macro gds files>} -reportFile <f> | A GDSII file of the database, a log summary of errors and warnings, and a report of renamed cells. Writes files. |
streamOut <name>.oas -mapFile <map> -format oasis | The same content in OASIS format. Writes a file. |
defOut -floorplan -routing <name>.def | A DEF file with floorplan, cells and routing in the NETS section. Writes a file. |
saveNetlist <name>.v -includePhysicalInst -includePowerGround | A physical netlist including fillers and physical-only PG connections. Writes a file. |