Chip finishing and handoff
QR code to pdverse.netexplore more at pdverse.net
Innovus PNR Mentor Guide

Chip Finishing and Signoff Handoff: finish, measure, verify and export

By the end of this chapter you will be able to finish a routed design and measure what finishing changed. You will verify the finished layout question by question. You will export it with a record tied to exactly that layout.

Why this chapter matters in a real project

The routed design from Routing, Post-Route Optimization, Checks and Handoff connects, obeys the router's rules and meets timing. A foundry will still not manufacture it. The cell rows have gaps, and large areas of the metal layers are nearly empty. Both are manufacturing problems, not logic problems.

Finishing fixes them, and that changes the layout the timing numbers described. Finishing is not cosmetic. It changes the physical design and can change its electrical behavior. So it must end with fresh evidence tied to the exact layout being handed off.

Getting this wrong costs in two directions:

Prerequisites

Learning objectives

  1. Explain what finishing adds to a routed database, and why a clean routed candidate is not yet a finished one.
  2. Restore the incoming candidate in a fresh session with its analysis setup, and record which layout it is.
  3. Inspect the physical-only cells, complete only what is missing, and verify the result without deleting what the design needs.
  4. Explain why metal fill exists and what it costs, and tell native fill, integrated signoff fill and external signoff tools apart.
  5. Compute a window density by hand, then configure, insert and inspect signoff fill.
  6. Re-extract with the fill present, compare against a controlled baseline, and attribute a timing change to its cause.
  7. Repair a fill-related regression with a scoped, measured edit that does not break density.
  8. Verify the finished layout with separate questions, export it, and write a handoff record. Every check in it is run, or marked not run.

Figure 1 shows the whole chapter as one flow. Come back to it whenever you lose your place.

Chip finishing on one page
From the accepted routed candidate to a packaged, recorded layout
Chip finishing on one page
Figure 1 The finishing flow of this chapter, with the candidate names and the illustrative numbers of the worked example.

What to notice: Phase A ends with F2 saved but not yet measured. Phase B measures it, repairs it into F3, and verifies and exports F3 only.

Before you start: the example design

The starting point is the accepted routed candidate, saved as handoff_route.enc. We call it C2. Its numbers are:

Routing is not repeated here. The note that came with C2 is the handoff note. In this chapter, "the routed handoff" means C2 and that note together.

The worked example is the invented design stream_acc:

Time is in ns, distances in µm and capacitance in fF unless a table says pF. Cell names, layer names, rule files, map files, window sizes and every limit are example values. Use the ones from your technology and your project.

Honest status of the examples

The commands use the Innovus Legacy UI, as in Routing, Post-Route Optimization, Checks and Handoff. Every command form was checked, but nothing was run in a licensed Innovus session.

  • The command blocks are templates to adapt, not a script to run from top to bottom.
  • Some blocks restore a checkpoint and start a new session, and some are alternatives.
  • Report excerpts, layouts and numbers are invented teaching illustrations. Report layouts differ between releases.
  • Check each option in your installed release before you rely on it.

1  Scope and the incoming candidate

The routed layout is legal for the router, but not yet for the foundry. Every step in this chapter follows from one sentence. Finishing changes the layout, so it must end with fresh evidence tied to the layout handed off.

1.1  What finishing adds, and where the chapter stops

Finishing makes three kinds of change, each with a different risk:

  1. Physical-only cells. Filler, well-tap and end-cap cells. They carry no logic. They keep the rows continuous, the wells connected and the cell boundaries legal.
  2. Metal fill. Extra metal shapes in empty areas, so every region of a layer holds a similar amount of metal. They carry no signal, but they sit next to signal wires and couple to them.
  3. Checks and exports. Checks show the new layout is legal. Exports are the files that carry it to the next team.

All three change the layout, so each needs its own evidence. Metal fill is the one most likely to move timing, because it adds coupling next to your wires.

The chapter produces a finished layout and evidence tied to it. Signoff verification belongs to the receiving team's tools. Examples are a foundry-deck design-rule check, a layout-versus-schematic comparison and a full signoff timing run. Where this chapter runs a native check, the text says what that check does not prove.

1.2  Which layout is which

Each step starts from a named candidate. The names separate five different things. They are the incoming layout, a new layout, a restored copy of an old layout, a measurement condition, and a failed experiment. The list is in Table 1.

Table 1 The candidate names used in this chapter
NameWhat it isKindMade in
C2The accepted routed candidate, handoff_route.encIncoming layoutRouting, Post-Route Optimization, Checks and Handoff
F0C2 restored in a fresh session and measured again; same layout as C2Restored checkpointScope and the incoming candidate
F1F0 with the physical-only cells complete; saved even when nothing was addedNew layoutComplete the physical-only cells
F1xF1 timed with the finishing extraction setup, no fillMeasurement conditionExtract and measure the filled design
F2F1 with signoff metal fill insertedNew layoutInsert and inspect the fill
X1F2 with all fill near the path deletedRejected experimentRepair without breaking density
F3F2 with a local fill trimNew layoutRepair without breaking density

A rejected experiment is never a parent. If an idea fails, return to the last accepted candidate in a fresh session. Start the next idea from there. The section "Verify the finished candidate" draws this lineage together with the reports each candidate owns.

1.3  Restore the incoming candidate

Finishing edits a design that somebody else accepted. A mistake in the incoming candidate costs more after fill than before it. So we restore first, then verify.

Command card - restore and verify

Start a new session for every restore. A restored database is not the same thing as a restored analysis setup.

START - RESTORE THE ACCEPTED ROUTED CANDIDATE, FRESH SESSION
innovus> restoreDesign handoff_route.enc.dat stream_acc ;# load C2 into a new session

Now replay the site setup and read the configuration back. The site script is the same example script as in Routing, Post-Route Optimization, Checks and Handoff. It holds your analysis views, derates and tool modes.

QUERY - REPLAY THE SITE SETUP, READ THE CONFIGURATION BACK
innovus> source site_setup.tcl ;# views, derates and tool modes (example name)
innovus> getAnalysisMode ;# show the timing analysis mode
innovus> getExtractRCMode ;# show the extraction settings
innovus> getDelayCalMode -SIAware ;# show whether delay calc is signal-integrity-aware
innovus> all_analysis_views -type setup ;# list the active setup views
innovus> all_analysis_views -type hold ;# list the active hold views
innovus> getFillerMode ;# show how filler will be added
innovus> get_verify_drc_mode ;# show what the rule check will look at
innovus> get_metal_fill_signoff_mode ;# show the fill settings, empty for now

Three of those getters are new to you:

A setting you did not expect is a finding, not a detail.

Now run the same analysis as for the routed handoff, with a prefix that names the candidate. From here on every report carries a candidate prefix. A report can then always be matched to a layout.

VERIFY - FRESH BASELINE EVIDENCE FOR F0 (ANALYSIS, NO DESIGN EDIT)
innovus> timeDesign -postRoute -expandedViews -numPaths 200 \
    -outDir timing_F0 -prefix F0 ;# setup timing of F0
innovus> timeDesign -postRoute -hold -expandedViews -numPaths 200 \
    -outDir timing_F0 -prefix F0 ;# hold timing of F0
innovus> report_constraint -drv_violation_type {max_transition max_capacitance} \
    -all_violators > F0_electrical.rpt ;# transition and capacitance violators
innovus> verifyConnectivity -type all -error 50 -warning 50 ;# opens and unrouted nets
innovus> verify_drc -report F0_drc.rpt ;# native rule check
ILLUSTRATIVE OUTPUT - F0 BASELINE (INVENTED VALUES)
Setup               WNS +0.012   TNS 0.000   Violating endpoints 0
Hold                WNS +0.025   TNS 0.000   Violating endpoints 0
Electrical          max_transition 0         max_capacitance 0
verifyConnectivity  Open 0       Unrouted 0
verify_drc          Total 0

If a number differs, stop. Compare the active views with the project's required views first. A different view set is a more common cause than a different layout.

What the evidence proves, and what it does not

Proves: the restored session reproduces the numbers of the handoff note. That supports the incoming baseline.

Does not prove: that F0 is the same layout as C2. Equal WNS, TNS (total negative slack) and counts can come from different layouts. Identity comes from provenance:

  • record the checkpoint name and the files it was restored from;
  • record a checksum of handoff_route.v and of the site script;
  • compare them with the handoff note.

Nor does it prove that the layout has the physical-only cells finishing needs, or that fill will leave these slacks alone. Those are the next two questions.

Save the verified state under a new name and write the numbers down. Table 2 is the reference for every later comparison.

SAVE - THE VERIFIED INCOMING CANDIDATE (WRITES A CHECKPOINT)
innovus> saveDesign fin_F0.enc ;# checkpoint F0
Table 2 The F0 baseline record
ItemF0 valueWhere it is recorded
Checkpoint and input identitiesfin_F0.enc, restored from handoff_route.enc.dat; checksums of the netlist and site scriptBaseline record
Setup WNS / TNS / endpoints+0.012 / 0.000 / 0timing_F0, prefix F0
Hold WNS / TNS / endpoints+0.025 / 0.000 / 0timing_F0, prefix F0
Transition / capacitance violators0 / 0F0_electrical.rpt
Open / unrouted nets0 / 0log of verifyConnectivity
Rule violations from verify_drc0F0_drc.rpt
Untested checks (setup / hold)18 / 12, carried from the routed handoffhandoff note
Acceptance gate

Continue when F0 reproduces the routed handoff numbers in a fresh session, with the required views active. The baseline record must also be complete. If it does not, the incoming handoff is not what it said it was. Do not start finishing until that is settled with its owner.

Phase A - complete the layout

The next four sections complete the physical-only cells and insert fill. Phase A ends with the filled candidate F2 saved.

2  Complete the physical-only cells

Fill and checks both read the layout as it is. Suppose the rows still have gaps when you insert metal fill, and a later step fills the gaps. Then the layout you measured is not the layout you ship. Settle the cells first.

2.1  What physical-only cells are, in plain English

They are cells that hold no logic. Three kinds matter here:

Figure 2 shows one row before and after filler.

One cell row before and after filler
Same row, same cells, same coordinates
One cell row before and after filler
Figure 2 Eight sites of one row: top, two empty gaps; bottom, the same gaps filled. Schematic, not to scale.

What to notice: The rails and the well stripe break at both gaps in the top row and run unbroken in the bottom row. The tap and the end caps were already there.

2.2  Inspect first

Flows differ. Some add filler before routing, some after, and some leave it to the receiving team. The only reliable way to know is to look. Three questions need three checks, and none of them edits the layout.

QUERY - WHAT PHYSICAL-ONLY CELLS DOES F0 HAVE?
innovus> checkFiller -file F0_filler_gaps.rpt ;# count core gaps that have no filler
innovus> verifyEndCap -report F0_endcap.rpt ;# end caps present and of the right type
innovus> verifyWellTap -report F0_welltap.rpt ;# well taps present and within spacing

What each check does:

ILLUSTRATIVE OUTPUT - PHYSICAL-ONLY CELLS OF F0 (INVENTED VALUES)
checkFiller     Total number of gaps found: 118750
verifyEndCap    Violations 0   (end-cap cells 1280)
verifyWellTap   Violations 0   (well-tap cells 9840)

Read the result by what it shows, not by what it implies. End caps and taps are complete, so there is nothing to add there. Now the gaps:

Those gaps need filler, if the project's policy is to add filler in finishing. If the project leaves filler to the receiving team, record the gap count in the handoff note. Save F1 anyway, as shown later, so every later step has one checkpoint name to restore.

Common beginner mistake

Deleting all physical-only cells and adding them again "to be safe". deleteFiller removes filler, end-cap and well-tap cells from the rows. End caps and taps are deleted by default, unless they are fixed and you ask to keep them. A routine delete risks removing cells that the floorplan placed on purpose. If you must remove only filler you added, give the command a prefix that only your filler has.

2.3  Complete the filler

Command card - addFiller

Before you add filler, make sure the filler cells will connect to the supply nets. addFiller uses the global power connection rules of the session to decide that. The rules come from the floorplan, and the recommended order is globalNetConnect before addFiller.

A restored database normally carries the rules. A missing rule would show up as filler with unconnected power pins. Confirm with the floorplan script's owner, or rerun the rules, before you rely on it.

CONFIGURE - NAME THE FILLER CELLS, THEN READ THE MODE BACK
innovus> setFillerMode -core {FILLER8 FILLER4 FILLER2 FILLER1} ;# example cell names
innovus> getFillerMode ;# read the filler settings back

List the filler cells from the largest to the smallest. The cell names belong to your library. setFillerMode is persistent and is saved with the database.

BUILD - ADD THE FILLER (ADDS LAYOUT OBJECTS)
innovus> addFiller -prefix FIN_FILL -markFixed ;# fill every gap, lock the new filler
innovus> verify_drc -report F1_drc_first.rpt ;# first rule check after filler
Mentor's tip

Give your filler its own prefix. Then deleteFiller -⁠prefix FIN_FILL removes exactly this filler later, and nothing else.

Run the next block only if F1_drc_first.rpt shows violations between filler and neighboring cells. In the example it shows none, so the block is skipped.

BUILD - ONLY IF THE RULE CHECK ABOVE SHOWS FILLER VIOLATIONS
innovus> addFiller -fixDRC -prefix FIN_FILL ;# replace the filler cells that cause them

-⁠fixDRC replaces the filler cells that cause the marked violations. It does not repair violations that belong to routed nets. Reroute those nets instead.

Stop and investigate

If checkFiller still reports gaps, read the gap widths with checkFiller -⁠reportGap 0.2, one width at a time. Compare the narrowest cell in getFillerMode with the narrowest gap. The usual causes are:

  • a filler list with no cell narrow enough;
  • a blockage or halo over the gap;
  • a gap where a filler would break a rule.

Add the missing width with setFillerMode -⁠core, or combine cells with addFiller -⁠fitGap. Do not reach for deleteFiller.

2.4  Verify the cells

VERIFY - F1 PHYSICAL-ONLY CELLS AND RULES (ANALYSIS, NO DESIGN EDIT)
innovus> checkFiller -file F1_filler_gaps.rpt ;# gaps left after filler
innovus> verifyEndCap -report F1_endcap.rpt ;# end caps still legal
innovus> verifyWellTap -report F1_welltap.rpt ;# taps still legal
innovus> verifyConnectivity -type all -error 50 -warning 50 ;# opens and unrouted nets
innovus> verify_drc -report F1_drc.rpt ;# native rule check of F1
ILLUSTRATIVE OUTPUT - PHYSICAL-ONLY CELLS OF F1 (INVENTED VALUES)
checkFiller         Total number of gaps found: 0
verifyEndCap        Violations 0
verifyWellTap       Violations 0
verifyConnectivity  Open 0    Unrouted 0
verify_drc          Total 0
Instances           std 128610  tap 9840  endcap 1280  filler 213750  total 353480

The numbers reconcile:

These checks say the rows are complete in the checked area, and that no new rule violation appeared. They do not say the supply connections of the filler are right. That is a separate connectivity question. Nor do they say the implant and well rules of the foundry deck pass, which is a signoff question. Filler has no logic, but it changes the layout, so timing is read again later.

SAVE - THE PHYSICAL-ONLY-CELL-COMPLETE CANDIDATE (WRITES A CHECKPOINT)
innovus> saveDesign fin_F1_cells.enc ;# checkpoint F1

F1 is now the parent of everything that follows. If nothing was added, F1 has the layout of F0, and the save still gives later steps one name to restore.

Takeaway Inspect before you add, add only what is missing with your own prefix, and save F1 even when nothing changed.

3  Metal fill: manufacturing and electrical effects

A layer of metal wiring is built by depositing metal over a patterned surface and then polishing it flat. How flat it ends up depends on how much metal each area holds. Fill exists to reduce that difference.

Fill is real metal, though. It couples to your wires, and capacitance is delay. You are adding something to a design whose timing you just accepted. So you need to know why it is there and what it does.

3.1  Why a layer needs metal that carries no signal

After metal is deposited, the surface is ground flat by chemical-mechanical polishing (CMP). A pad rubs the surface and removes material. How fast it removes it depends on how much of each material is under it.

The pad also bridges short distances. So the result in one spot depends on the pattern around it, over tens of microns or more. Two effects follow in processes that use polished copper wiring:

The word to keep in mind is thickness. Where the metal is thinner, a wire is more resistive. Where the surface is uneven, the next layer starts from an uneven base. Extreme dishing or erosion can cause shorts or opens. Each effect's size depends on the process, so the numbers below are invented.

Let us consider a wire on M3 with a nominal thickness of 0.200 µm. In a region that polishes thin, it comes out at 0.180 µm.

The difference is 1.9 ps. That is 15.8% of the +0.012 ns slack of C2 on P1, from one net and one cause. It is a scale estimate, not a delay model. It shows why a thin slack and a manufacturing effect belong together. Figure 3 shows both effects in a side view.

A cross-section of polishing results
Side view of metal layer M3 over dielectric, along one cut line
A cross-section of polishing results
Figure 3 Top: no fill, with dishing under the wide line and erosion over the dense array. Bottom: the same cut with fill in the empty regions. Schematic, vertical scale exaggerated.

What to notice: The dashed line is the ideal flat level. Without fill, the wide line and the dense array sit below it; with fill, both sit much closer to it.

Fill is a manufacturing requirement:

The rule values, window size, and minimum and maximum density come from the foundry deck for your technology. The values in this chapter are examples.

3.2  What a fill shape is, and what it costs

A fill shape is a small metal rectangle drawn in empty space on a metal layer. It is not part of any signal net. It is usually one of two kinds:

Figure 4 compares the two, with an idealized equivalent circuit under each.

Wires, floating fill and connected fill
Top view of a fill shape between two wires, with an idealized equivalent circuit below each panel
Wires, floating fill and connected fill
Figure 4 Left: floating fill F is the middle node of two capacitors in series between net A and net B. Right: fill tied to the VSS rail turns it into one capacitor to a known rail. Schematic, not to scale.

What to notice: Cwf is net A to fill, and Cfb is fill to net B. Real extraction reduces many coupled conductors, so these circuits only show the idea.

Both kinds add capacitance. Floating fill adds it in a way that depends on where the other conductors are. That is why a fill tool and an extraction tool must agree on the geometry. Connected fill adds a more predictable capacitance, but it uses wiring resources to reach its rail. Most signoff fill is floating, but your technology's rule deck decides. Table 3 lists what fill costs.

Table 3 What metal fill costs
CostWhat happensWhere you see it
CapacitanceWires couple to nearby fill, so delay and noise changeTiming, in "Extract and measure the filled design"
Data volumeMillions of shapes; files and runs growRuntime, disk, export size
ECO fragilityMoving a wire invalidates the fill beside itIncremental fill after any edit
Check scopeChecks that ignore fill hide its effect; checks that include it take longer"Verify the finished candidate"
KeepoutsFill must stay away from some nets and shapesRules and trim, in the density and repair sections

3.3  Three different things called "fill"

Keep them apart, because they use different commands and different databases.

  1. Native fill. Innovus computes the shapes itself. setMetalFill sets rules, addMetalFill inserts shapes, verifyMetalDensity checks the density, and trimMetalFillNearNet trims shapes around critical nets. The shapes are ordinary objects in the database. Check setMetalFill -⁠help and addMetalFill -⁠help in your installation before you rely on an option.
  2. Integrated signoff fill. Innovus calls a signoff fill engine from inside the session. set_metal_fill_signoff_mode configures it and add_metal_fill_signoff runs it. The result is a hierarchical metal fill (HMF) database stored beside the design. Innovus can show it, trim it, flatten it into the database, and hand it to extraction and stream-out.
  3. External signoff tools. You write the layout out, and the receiving team runs its own fill and checks. Innovus is not in the loop for the fill.
Stop and investigate

Decide the path before you insert any fill. Mixing paths puts two sets of shapes in one layout. This chapter follows path 2. The signoff flow is the recommended one, and its rules come from the same deck that signoff will use. Native fill is described in a box at the end of "Insert and inspect the fill". External tools are a boundary, covered in "Export and hand off".

3.4  What the fill does to one net

Let us consider n_4412, an M3 net of P1, about 300 µm long. Before fill it has 28.0 fF to ground and 6.0 fF of coupling to neighboring wires, 34.0 fF in total. After fill, the extraction would report three changes on this net:

So C after = 28.0 + (6.0 - 0.4) + 3.6 = 37.2 fF.

The change is ΔC = 3.6 - 0.4 = +3.2 fF, which is +3.2 / 34.0 = +9.4%.

To turn capacitance into delay, take the resistance the net sees. It is the effective driver resistance of 1 800 Ω plus half the wire resistance of 300 Ω. We take half because the wire capacitance is spread along the wire.

This is a sensitivity estimate, not an exact split of timing-analysis delay. It does not show that every net gains 9%, or that a coupling change always slows a path. It becomes large when it adds to the same change on every other net of the path, as the measurement section shows.

Takeaway Fill is required for manufacturing, and it always adds capacitance. Choose one fill path, and expect to measure its timing cost.

4  Density rules and fill configuration

Fill has a target to hit and zones to avoid. The target is a density rule, and the zones are keepouts. Configure both before the first run. A fill run can take a long time, and a wrong rule wastes it.

4.1  What density is, exactly

Metal density is the area of metal in a window divided by the area of the window, as a percentage. The rule has four parts:

The checker slides the window across the layer, and every position must stay between the minimum and the maximum.

In this chapter the invented rule for M3 is: window 100 x 100 µm, step 50 µm, minimum 20%, maximum 70%. The checked region is the 1000 x 1000 µm core, and the windows lie fully inside it. These are examples. The foundry deck of your technology holds the real values, including how it treats the region boundary.

4.2  Worked example: where is the layer too empty?

Let us consider a strip of five overlapping windows along x, from 200 to 500 µm. The windows are 100 µm wide, so each overlaps its neighbor by half. A window has an area of 100 x 100 = 10 000 µm². Cut the strip into six tiles 50 µm wide. Table 4 gives the routed M3 metal in each tile.

Table 4 Routed M3 metal per 50 µm tile (illustrative)
Tile (x range, µm)T1 (200-250)T2 (250-300)T3 (300-350)T4 (350-400)T5 (400-450)T6 (450-500)
M3 metal, µm²7007442 3563 194926964

Each window is two adjacent tiles. Add them, then divide by 10 000, as in Table 5.

Table 5 Density of the five windows
WindowTilesMetal, µm²Density
W1 (200-300)T1 + T2700 + 744 = 1 44414.4%
W2 (250-350)T2 + T3744 + 2 356 = 3 10031.0%
W3 (300-400)T3 + T42 356 + 3 194 = 5 55055.5%
W4 (350-450)T4 + T53 194 + 926 = 4 12041.2%
W5 (400-500)T5 + T6926 + 964 = 1 89018.9%

The mean of the five is (14.4 + 31.0 + 55.5 + 41.2 + 18.9) / 5 = 161.0 / 5 = 32.2%. That mean is above 20%, so a check on the average would pass. The rule is on every window, and W1 and W5 both fail it. Figure 5 draws the same numbers.

Local windows against the average
Density of each window, with the rule limits and the mean
Local windows against the average
Figure 5 The five overlapping windows of the worked example as bars. Lines mark the 20% minimum, the 70% maximum and the 32.2% mean. Invented values.

What to notice: The mean sits well above the minimum, yet W1 and W5 are below it. The rule is checked per window, not on the mean.

Common beginner mistake

Judging density from an average or from a color map. A heat map shows the picture, and an average hides the worst window. Only a per-window report is evidence.

How much fill does W1 need?

The windows overlap, so fill placed in T2 helps both W1 and W2.

4.3  Where fill must stay away

Fill is allowed only where it does no harm. The keepout rules come from three places:

Figure 6 shows the kinds side by side.

The zones where fill must stay out
Plan view of one region with several layers overlaid: a macro, a clock net, a critical net, a blockage and the die edge
The zones where fill must stay out
Figure 6 Each wire, the blockage, the macro and the die edge carry a keepout band; fill sits only outside the bands. Spacings in µm are invented; schematic, not to scale.

What to notice: Ordinary fill-to-wire spacing is the smallest, and the trim around n_4412 is wider. The clock keepout is wider still, and the macro and die edge have their own margins.

The ordinary fill-to-wire spacing of the rule is the smallest, 0.3 µm in this example. A trim around a critical net is wider than that rule. Its width is set in multiples of the layer pitch, as the configuration below shows. The 1.2 µm clock band in the figure is an example project keepout. It is separate from the -⁠clock trim, which clears fill at the -⁠trim_effort distance.

4.4  Configure the fill

Command card - set_metal_fill_signoff_mode
START - RESTORE F1 IN A FRESH SESSION
innovus> restoreDesign fin_F1_cells.enc.dat stream_acc ;# load F1
innovus> source site_setup.tcl ;# replay the site setup
CONFIGURE - SIGNOFF FILL RULES, WINDOWS AND TRIM (EXAMPLE FILE NAMES)
innovus> set_metal_fill_signoff_mode -rule_file fill/fill_rules.rul \
    -layer_map_file fill/streamOut.map \
    -fill_layer {M2 M3 M4 M5 M6} \
    -min_density {20 {M2 M3 M4 M5 M6}} \
    -window_size 100 -window_step 50 \
    -trim_effort med -clock ;# rules, layers, windows and trim for the fill engine
innovus> get_metal_fill_signoff_mode ;# read every setting back

What each option does:

This example has an M3 pitch of 0.4 µm. So low is 0.4 µm, med is 0.6 µm and high is 0.8 µm. -⁠trim_effort and -⁠spacing cannot be used together.

It is not settled what the tool does when a requested clearance and -⁠min_density conflict. So treat the minimum as an input to the trim. Always confirm the result with an independent density check, as the repair section does.

The settings are saved with the design when you run saveDesign. A mismatch between what you passed and what is read back is a finding, so fix it before the run. Continue when two things hold:

5  Insert and inspect the fill

This step changes the metal layers. It can take a long time and produce a very large database. Inspect it before you save and measure. That keeps a defective fill from becoming the parent of everything that follows.

First measure what fill has to fix. The native density check reads the density values in the session's technology data. Run it on F1, before any fill, to get a count.

VERIFY - NATIVE DENSITY CHECK BEFORE FILL (F1)
innovus> verifyMetalDensity -report F1_density.rpt -detailed ;# per-window density of F1
ILLUSTRATIVE OUTPUT - DENSITY OF F1, BEFORE FILL (INVENTED VALUES)
Layer   Windows checked   Below minimum   Above maximum
M2      361               31              0
M3      361               47              0
M4      361               38              0
M5      361               12              0
M6      361                6              0
Total below minimum       134

Under this example's checked region and window placement, each layer has (1000 - 100) / 50 + 1 = 19 positions along each axis. So it has 19 x 19 = 361 windows. A report that lists another count is a reason to investigate.

Mentor's tip

Read the window count first, before the violation count: 361 per layer here. A wrong count means the check did not look where you think.

If the count differs, the rule, the region, the boundary handling or the layer set may differ from what you meant.

The total is 31 + 47 + 38 + 12 + 6 = 134. W1 of the worked example is one of the 47 on M3.

Command card - add_metal_fill_signoff -fill
BUILD - INSERT SIGNOFF METAL FILL (ADDS LAYOUT OBJECTS)
innovus> add_metal_fill_signoff -fill ;# run the signoff fill engine

-⁠fill is one primary action of this command, and you choose one per call. The others used in this chapter are -⁠view_fills, -⁠flatten, -⁠delete_flatten_fills, -⁠trim and -⁠delete_fill.

For a long run, -⁠bg computes the fill in the background without holding the license. Every add_metal_fill_signoff action you want to run in the background must carry -⁠bg. The run stores the fill as the HMF database. It does not make the shapes editable in the session, which keeps a session with millions of shapes responsive.

ILLUSTRATIVE OUTPUT - FILL RUN LOG (INVENTED VALUES)
Fill generation complete.
Layers filled: M2 M3 M4 M5 M6
M3   shapes added 41204   fill area 82408 µm²
HMF database written next to the design.

5.1  Look at the fill, then measure it

QUERY - LOAD THE EXISTING FILL FOR VIEWING, READ ONLY
innovus> add_metal_fill_signoff -view_fills ;# show the HMF fill, read only

-⁠view_fills loads the HMF database in read-only form. Look at three things in the layout view:

A picture is for finding problems. It is not evidence that a rule passes, because a picture has no per-window numbers.

It is not settled whether the native checks read HMF fill that has not been flattened. The conservative procedure, used throughout this chapter, has three steps:

  1. Flatten the fill into the database. -⁠flatten brings the fill in for the native rule and density checks.
  2. Run the check.
  3. Remove the flattened copy afterwards.

Timing does not use the flattened copy. It reads the fill through the extraction setting in "Extract and measure the filled design".

Figure 7 shows where the signoff fill lives and how each command reaches it. Keep it in view for the rest of the chapter.

Where the signoff fill lives
The HMF database beside the design, and the commands that read or copy it
Where the signoff fill lives
Figure 7 The fill engine writes the HMF database. Viewing reads it, flattening copies it into the design database for the native checks, and extraction and stream-out read it directly.

What to notice: The flattened copy is temporary: it exists only between -flatten and -delete_flatten_fills, and the checkpoint carries the HMF database alone.

BUILD - LOAD THE FILL INTO THE DATABASE FOR THE NATIVE CHECKS
innovus> add_metal_fill_signoff -flatten ;# copy the HMF fill into the design database
VERIFY - NATIVE DENSITY CHECK WITH THE FILL INCLUDED (F2)
innovus> verifyMetalDensity -report F2_density.rpt -detailed ;# per-window density of F2
ILLUSTRATIVE OUTPUT - DENSITY OF F2, WITH FILL (INVENTED VALUES)
Layer   Windows checked   Below minimum   Above maximum
M2      361               0               0
M3      361               0               0
M4      361               0               0
M5      361               0               0
M6      361               0               0
BUILD - REMOVE THE FLATTENED COPY; THE HMF DATABASE STAYS
innovus> add_metal_fill_signoff -delete_flatten_fills ;# drop the copy, keep the HMF

-⁠delete_flatten_fills removes the flattened shapes without updating the HMF database. Run it when the native checks are done, so the checkpoint carries one representation of the fill. It is not settled whether a flattened copy would be written into the checkpoint, so avoid the question.

W1 now holds 1 444 + 1 156 = 2 600 µm² in 10 000, which is 26.0%. It was 14.4%.

What the evidence proves, and what it does not

Proves: with the fill present, the native density check finds no window outside the rule on any filled layer. It uses the session's rules.

Does not prove:

  • that the foundry's density rules pass, because the signoff deck decides;
  • that fill is clear of every keepout, which you read in the layout view and the rule check;
  • that timing is unchanged, which is the next section.
Stop and investigate

If windows remain below the minimum, count the windows per layer first. Then read get_metal_fill_signoff_mode for the layers and rule, look at the fill with -⁠view_fills, and confirm that you flattened before the check. The usual causes are:

  • a layer missing from -⁠fill_layer or from the layer map;
  • keepouts that leave too little room;
  • a rule in the session that is not the rule the fill used;
  • a check that ran without the fill in the database.

Fix the setting, and run -⁠fill again from the saved F1 in a fresh session. After an ECO, -⁠incremental fills only the changed region.

SAVE - THE FILLED CANDIDATE (WRITES A CHECKPOINT)
innovus> saveDesign fin_F2_fill.enc ;# checkpoint F2, with its HMF database

saveDesign stores the design with its HMF under fin_F2_fill.enc.dat, and restoreDesign restores a design that is aware of the HMF. F2 is a new layout, and none of the reports of F0 or F1 describes it.

F2 is ready to measure when three things hold:

It is not yet accepted.

Alternative path - native fill, not part of the main run

If the project does not use signoff fill, Innovus can place fill by itself:

  • setMetalFill sets the rules and can override the metal-fill rules of the technology LEF (Library Exchange Format) file;
  • addMetalFill inserts the shapes;
  • verifyMetalDensity checks them;
  • trimMetalFillNearNet trims fill around critical nets after timing is measured.

The shapes are ordinary objects in the database, so every native check sees them without a flatten step. Two limits apply. First, the signoff deck is not involved, so the density that signoff computes may differ. Second, the options of setMetalFill and addMetalFill are not described here in detail. Confirm each one with -⁠help in your installation. Do not mix this path with signoff fill in one layout. The rest of the chapter assumes signoff fill.

Phase B - measure, verify and hand off

The next four sections measure the filled candidate with the fill present and repair a regression if one exists. Then they verify the result, export it, and decide. Phase B ends with a final candidate and its record.

6  Extract and measure the filled design

Every timing number in the F0 reports describes a layout without fill. The F2 database holds fill, but nothing has yet looked at the capacitance it adds. Until a new extraction reads the fill, a timing report of F2 describes F1. So measure again, in a way that tells you which change caused which difference.

6.1  Which extraction can see the fill

This depends on the engine. Three facts decide the plan:

  1. The native extraction at low effort, used for the routed handoff, does not read the fill shapes. Its parameter -⁠assumeMetFill assumes fill in a defined way, for example full fill at the minimum spacing. That is an approximation, not the shapes you inserted.
  2. The setting -⁠pvs_fill true sends the fill database to Quantus so its effect is extracted. It affects only the signoff extraction in Quantus, the standalone signoff extraction tool. It has no effect on TQuantus or IQuantus, the built-in extraction engines of Innovus. It also needs a stream layer map for the fill.
  3. -⁠effortLevel signoff selects the standalone Quantus engine. It takes its commands from a file given with -⁠qrcCmdFile (the Quantus command file).

So the plan uses the signoff effort level with -⁠pvs_fill true. The cost is a Quantus license and a run that takes longer than the native one. If you cannot run Quantus, the native -⁠assumeMetFill is a labeled alternative, and its numbers are an estimate.

6.2  Why the baseline needs to be measured again

Two things change at once. The routed handoff timed C2 with the native engine. The finishing flow times F2 with a different engine, and with the fill. If P1 gets worse, you could not tell which change did it.

The fix is a controlled baseline. Extract F1, which has no fill, with exactly the settings you will use for F2. Call that measurement F1x. The difference between F1x and F2 is then the fill and its reading. The cells, the routing and every other setting stay the same. F1x is the same layout as F1. It is a measurement condition, not a candidate. Figure 8 lays out the three measurements.

A controlled baseline separates two changes
Three measurements of P1, each with its layout and its extraction
A controlled baseline separates two changes
Figure 8 C2 to F1x changes the cells and the extraction together; F1x to F2 changes only the fill and its reading. Illustrative slacks.

What to notice: Only the second step isolates the fill. The first step is a baseline shift that cannot be split without a third measurement.

Command card - setExtractRCMode, extractRC, timeDesign
START - RESTORE F1 IN A FRESH SESSION FOR THE F1X MEASUREMENT
innovus> restoreDesign fin_F1_cells.enc.dat stream_acc ;# load F1
innovus> source site_setup.tcl ;# replay the site setup
CONFIGURE - FINISHING EXTRACTION FOR F1X, NO FILL (EXAMPLE FILE NAMES)
innovus> setExtractRCMode -engine postRoute -effortLevel signoff \
    -qrcCmdFile qrc/finish.cmd -coupled true -pvs_fill false ;# signoff engine, no fill
innovus> getExtractRCMode ;# read the extraction settings back
innovus> extractRC ;# extract F1 with the finishing setup
VERIFY - TIMING OF F1X (ANALYSIS, NO DESIGN EDIT)
innovus> timeDesign -postRoute -expandedViews -numPaths 200 \
    -outDir timing_F1x -prefix F1x ;# setup timing of F1x
innovus> timeDesign -postRoute -hold -expandedViews -numPaths 200 \
    -outDir timing_F1x -prefix F1x ;# hold timing of F1x

Now repeat in a fresh session on F2. Only the checkpoint and the fill settings differ.

START - RESTORE F2 IN A FRESH SESSION
innovus> restoreDesign fin_F2_fill.enc.dat stream_acc ;# load F2 with its HMF
innovus> source site_setup.tcl ;# replay the site setup
CONFIGURE - THE SAME EXTRACTION, WITH THE FILL READ (EXAMPLE FILE NAMES)
innovus> setExtractRCMode -engine postRoute -effortLevel signoff \
    -qrcCmdFile qrc/finish.cmd -coupled true -pvs_fill true \
    -signoff_stream_layer_map fill/fill_extract.map ;# same setup, fill read
innovus> getExtractRCMode -pvs_fill ;# must read true
innovus> extractRC ;# extract F2 with the fill

The map file converts the stream layer and datatype numbers of the fill into Quantus layers, one line per fill layer. Without it, -⁠pvs_fill true is not valid. A missing or wrong line means that layer's fill is not extracted, and no timing error tells you.

VERIFY - TIMING OF F2, WITH FILL (ANALYSIS, NO DESIGN EDIT)
innovus> timeDesign -postRoute -expandedViews -numPaths 200 \
    -outDir timing_F2 -prefix F2 ;# setup timing of F2
innovus> timeDesign -postRoute -hold -expandedViews -numPaths 200 \
    -outDir timing_F2 -prefix F2 ;# hold timing of F2
innovus> report_constraint -drv_violation_type {max_transition max_capacitance} \
    -all_violators > F2_electrical.rpt ;# transition and capacitance violators
innovus> report_analysis_coverage -verbose {violated untested} -sort reason \
    > F2_coverage.rpt ;# met, violated and untested checks

6.3  What changed

Table 6 reads each measurement with its layout and its extraction. In every run, P1 is the worst setup path of this invented example.

Table 6 Three measurements of the same path (illustrative)
MeasurementLayout and extractionP1 slackSetup WNS / TNSViolating endpointsHold WNS
C2Routed layout, native extraction, no fill+0.012+0.012 / 0.0000+0.025
F1xF1 layout, finishing extraction, no fill+0.006+0.006 / 0.0000+0.021
F2F2 layout, finishing extraction, fill read-0.009-0.009 / -0.0091+0.027

There are two differences, with different meanings:

Hold moves the other way. The fill slows the data wires, so the hold slack grows from +0.021 to +0.027. Do not assume that; read it. Wires on a clock net would behave differently, and the clock net has a keepout.

The electrical report for F2 shows 0 transition and 0 capacitance violators. Coverage counts checks that met, violated or were untested:

The 18 and 12 untested checks are the same ones as in the routed handoff.

6.4  Where P1 lost 0.015 ns

Ask the path. Time P1 again with the net names and loads, then read the capacitance of the nets.

REPORT - P1 WITH NET AND LOAD COLUMNS (EXAMPLE PIN NAMES)
innovus> report_timing -late -from u_acc/acc_reg_12/CK -to u_out/res_reg_3/D \
    -format {hpin net cell load slew delay arrival} > F2_P1_detail.rpt ;# P1 in detail
innovus> report_net -net n_4412 > F2_n_4412.rpt ;# wire and total capacitance of one net

report_net -⁠net lists the wire capacitance and the total capacitance of the net. Compare the F2 value with the F1x value. Table 7 shows the three nets of P1 that gain the most.

Table 7 Where the 15.0 ps went (sensitivity estimates, illustrative)
NetΔC from fill, fFR eff, ΩΔdelay ≈ R x ΔC, ps
n_4412+3.21 800 + 300 / 2 = 1 9506.2
n_4417+2.11 9504.1
n_4420+1.22 0002.4
slew carryresidual: the remainder of the path loss2.3
Total15.0 ps = 0.015 ns

The three net rows are sensitivity estimates, the same kind as for n_4412 earlier. The slew carry is not measured on its own. It is what is left of the 15.0 ps after the three estimates, and the path report shows it as slower transitions. Treat it as a residual.

P1's arrival moves from 3.014 ns to 3.029 ns against a required time of 3.020 ns. That is the -0.009 ns slack. Both times exceed the 2.5 ns period because, in this invented example, they include clock network latency.

What the evidence proves, and what it does not

Proves: with the fill read by the extraction, P1 loses 15.0 ps from F1x to F2. About 12.7 ps is traced to three nets by estimate, and 2.3 ps is a residual.

Does not prove: that the signoff timing tool will see the same numbers, because it extracts with its own settings. Nor that the three net estimates are exact.

Stop and investigate

Stop if F2 shows no capacitance change on any net, or if the extraction log does not mention the fill. Also stop if getExtractRCMode -⁠pvs_fill does not read true. Then the extraction did not see the fill, and the timing report describes F1.

Also compare the fill layers in the layout with the lines of the map file, one line per layer and datatype. A true setting and some capacitance change do not exclude a map that misses one layer. Fix the setting or the map, extract again, and discard the timing reports made before.

7  Repair without breaking density

F2 fails setup by 0.009 ns. The cause is capacitance from fill that the design has no reason to keep close to P1. You want the smallest change that restores the slack, with the density rule intact. The smallest change is local, so it must be aimed.

7.1  What could be wrong, and how to tell

Four causes would each produce a worse P1 after fill. They need different repairs, so separate them first. Table 8 lists them.

Table 8 Four competing causes of a worse P1 after fill
Competing causeWhat the evidence looks likeDistinguishing checkScoped repair
The baseline movedP1 already moved between C2 and F1x, with no fillC2 against F1xNone from fill; agree which setup's number the project accepts
Fill capacitance on the path's netsF1x to F2 changes ΔC on P1's netsreport_net on the nets of P1, F1x against F2Trim fill around those nets (below)
The extraction did not match the fillCapacitance unchanged, or log silent about fill, or a layer missing from the mapgetExtractRCMode -⁠pvs_fill, the log, the map linesFix the setting or the map, extract again
Fill sits closer than the keepout rule saysFill beside a net the rule marks as sensitiveThe layout view of the fill, the rule fileFix the keepout in the rule, then regenerate

In the example:

So the loss from F1x to F2 comes from fill capacitance, and fill capacitance is what the repair targets.

7.2  A rejected experiment: delete the fill near the path

The tempting move is to remove all fill near the path. You would use add_metal_fill_signoff -⁠delete_fill with a -⁠delete_area over the region.

As an experiment from F2 in a fresh session, P1 returns to +0.006 ns, the F1x value. But the cleared area includes W1. W1 falls back to its routed density of 14.4%. The native density check finds six M3 windows below the minimum. The verdict is in Table 9.

Table 9 Experiment X1
ExperimentP1 setup slackM3 windows below 20%Verdict
X1, delete all fill in the box+0.0066 (W1 at 14.4%)Rejected; it trades a timing failure for a density failure

X1 is saved as fin_X1_rejected.enc for the record. It is not a parent, and F3 starts again from F2.

7.3  Trim only around the nets that matter

Command card - add_metal_fill_signoff -trim
START - F2 IN A FRESH SESSION, SETTINGS REPLAYED
innovus> restoreDesign fin_F2_fill.enc.dat stream_acc ;# load F2 with its HMF
innovus> source site_setup.tcl ;# replay the site setup
innovus> get_metal_fill_signoff_mode ;# the fill settings must be back

If the readback is empty, the fill settings were not saved or not restored. Run the set_metal_fill_signoff_mode block of "Configure the fill" again, and read it back before you trim.

BUILD - TRIM THE FILL AROUND THE THREE NETS OF P1 (CHANGES LAYOUT OBJECTS)
innovus> add_metal_fill_signoff -trim \
    -net {n_4412 n_4417 n_4420} \
    -trim_layer {M2 M3 M4} -trim_effort med ;# clear fill around three nets

The timing-aware variant is -⁠slack_threshold. It trims around every net whose slack is below a value. That is wider than a named list, so it is the wrong tool when only three nets are known.

This option combination has no known worked example, so read the run log.

7.4  What each clearance costs

Pick the clearance by measuring. Make three runs from F2, one per effort level. Follow each with a new extraction and an independent density check.

In this invented design, n_4412 and n_4417 pass through W1, so the trim removes fill from it. Each level clears fill out to a distance larger than the ordinary 0.3 µm rule. The results are in Table 10. Its Option column is the -⁠trim_effort value.

Table 10 Three trim levels against timing and density (illustrative)
OptionClearance, µmFill removed in W1, µm²W1 densityTiming recovered, psP1 setup slackVerdict
none (F2)-026.0%0-0.009Fails timing
low0.415024.5%6.0-0.003Fails timing
med0.633022.7%12.0+0.003Meets both
high0.870019.0%14.0+0.005Fails the density rule

The high option wins on timing and loses on density, so it is rejected. Figure 9 shows the trade-off.

The trade-off between timing and density
Left: the three trim clearances around a net. Right: P1 slack and W1 density for each option
The trade-off between timing and density
Figure 9 Each step of trim effort buys timing and costs density; the bars use the illustrative values of the trim table.

What to notice: Only med clears both limits: P1 slack at or above 0.000 ns and W1 density at or above 20%.

W1 is the window that limits the choice. Its density after fill is (1 444 + 1 156) / 10 000 = 26.0%. After each trim it is (2 600 - removed) / 10 000: 24.5%, 22.7% and 19.0%. The last is below the 20% minimum.

The configuration passed a minimum of 20% to the engine. Still, in this invented run the independent check found W1 at 19.0%. It is not settled whether the tool stops short of the clearance or only warns in that case. That is why the density check after the trim is part of the procedure, not an extra.

7.5  Re-extract, re-measure, save

Run the same extraction as for F2 in the same session, then time and check again.

VERIFY - EXTRACT AND TIME F3 (ANALYSIS, NO DESIGN EDIT)
innovus> setExtractRCMode -engine postRoute -effortLevel signoff \
    -qrcCmdFile qrc/finish.cmd -coupled true -pvs_fill true \
    -signoff_stream_layer_map fill/fill_extract.map ;# same setup as for F2
innovus> getExtractRCMode -pvs_fill ;# must read true
innovus> extractRC ;# extract the trimmed layout
innovus> timeDesign -postRoute -expandedViews -numPaths 200 \
    -outDir timing_F3 -prefix F3 ;# setup timing of F3
innovus> timeDesign -postRoute -hold -expandedViews -numPaths 200 \
    -outDir timing_F3 -prefix F3 ;# hold timing of F3
innovus> report_constraint -drv_violation_type {max_transition max_capacitance} \
    -all_violators > F3_electrical.rpt ;# transition and capacitance violators
innovus> report_analysis_coverage -verbose {violated untested} -sort reason \
    > F3_coverage.rpt ;# met, violated and untested checks
VERIFY - DENSITY OF F3 WITH THE FILL FLATTENED IN
innovus> add_metal_fill_signoff -flatten ;# bring the fill in for the density check
innovus> verifyMetalDensity -report F3_density.rpt -detailed ;# per-window density
innovus> add_metal_fill_signoff -delete_flatten_fills ;# drop the flattened copy

The extraction runs before the flatten step, so the flattened copy never takes part in it. Save only after all of this is read, and without any further edit.

SAVE - THE REPAIRED CANDIDATE, A CHILD OF F2 (WRITES A CHECKPOINT)
innovus> saveDesign fin_F3_repair.enc ;# checkpoint F3
Table 11 The repaired candidate against F2 and the rejected experiment (illustrative)
CandidateP1 slackSetup WNS / TNSViolating endpointsHold WNSM3 windows below min
F2-0.009-0.009 / -0.0091+0.0270
X1 (rejected)+0.006+0.006 / 0.0000+0.0216
F3+0.003+0.003 / 0.0000+0.0250

After the trim, the delay added on P1's nets is 0.8 + 0.6 + 0.8 ps, plus 0.8 ps of slew residual. That is 3.0 ps in total, against 15.0 ps in F2. The trim recovered 12.0 ps. Check: -0.009 + 0.012 = +0.003.

Coverage for F3 is 4 002 + 0 + 18 = 4 020 for setup. For hold it is 4 008 + 0 + 12 = 4 020. The 18 and 12 untested checks are the same as before. Figure 10 puts the four measurements side by side.

P1 slack in four measurements
Left: P1 setup slack against the stage target. Right: the delay added on P1, by cause
P1 slack in four measurements
Figure 10 The fill costs 15.0 ps in F2; the trim leaves 3.0 ps in F3. Invented values that match the tables.

What to notice: The trim gives back 12.0 ps. The final slack of +0.003 ns is positive but thin.

Acceptance gate

F3 is accepted as the finished candidate when three things hold:

  • the setup and hold slacks meet the stage target in the required views;
  • no density window is outside the rule;
  • its reports describe F3 and not F2.

In the example, F3 meets a stage target of 0.000 ns with +0.003 ns on P1. That margin is thin, so it is recorded as an exception in the handoff record. Expect the signoff tool, which extracts with its own settings, to disagree by a similar amount.

8  Verify the finished candidate

F3 is the candidate you intend to hand off. Before it leaves, ask what is true of exactly this layout, one question at a time. Different checks answer different questions, and a pass on one tells you nothing about another. The commonest finishing mistake is to read one clean report as "the layout is fine". Examples are a clean connectivity report or a green density map.

8.1  Six questions, kept separate

Table 12 pairs each question with its check and with what the check cannot tell you.

Table 12 Six questions, six checks, six limits
QuestionCheck in this sessionWhat it cannot tell you
Are the wires and pins connected as the database says?verifyConnectivityWhether the layout matches the schematic. That is layout-versus-schematic comparison, which compares devices and nets extracted from the layout
Does the geometry meet the rules this session knows?verify_drcWhether it meets the foundry deck. The session knows the technology data it was given, not the signoff deck
Is every density window inside the rule?verifyMetalDensity with the fill includedWhether the signoff deck agrees, and whether a picture of density is a pass. A heat map has no per-window limit
Are the physical-only cells complete and legal?checkFiller, verifyEndCap, verifyWellTapWhether the implant and well rules of the deck pass
Is antenna excess within limits?verify_antennaWhether the receiving team's antenna rules agree
Does timing meet the target, with the fill extracted?timeDesign, report_analysis_coverage, report_constraintWhether the signoff timing tool agrees, and what the untested checks would show

Each check may pass while the layout still fails a question that check does not ask.

8.2  Check the scope before you read the result

An empty report is a result only if the check looked at what you meant. A check can look at less than you think in three ways:

A density report has a built-in plausibility test. Under this example's checked region and window placement, each layer reports 361 windows. A different count does not prove the run is bad. It tells you to look at the rule, the region and the layer set before you trust the result. The three traps and the test are summed up in Figure 11.

Three ways a check looks at less than you think
Read the scope before you read the result
Three ways a check looks at less than you think
Figure 11 A narrowed scope, ignored fill and unflattened fill each make a clean report say less than it seems to. The window count is a quick plausibility test.

What to notice: Each trap has its own readback: the rule-check mode, the fill-wire setting, and whether you flattened.

8.3  Run the checks on F3

The order matters, because a setting only counts in the session that runs the check. The order is:

  1. Restore F3 and replay the site setup.
  2. Set the verification scope and read it back.
  3. Bring the fill in and run the checks.

The F3 timing, electrical and coverage reports came from the session that saved F3, at the end of the repair. No edit followed them, so they belong to the F3 checkpoint. If you cannot show that, run them again here.

START - RESTORE THE FINISHED CANDIDATE IN A FRESH SESSION
innovus> restoreDesign fin_F3_repair.enc.dat stream_acc ;# load F3 with its HMF
innovus> source site_setup.tcl ;# replay the site setup
innovus> get_metal_fill_signoff_mode ;# confirm the fill settings came back
CONFIGURE - SET THE RULE-CHECK SCOPE, THEN READ IT BACK
innovus> set_verify_drc_mode -ignore_fill_wire false -limit 1000 ;# include fill wires
innovus> get_verify_drc_mode ;# read the scope back

The readback must show no -⁠area or -⁠layer_range narrower than the core, and the limit you meant. Compare it with the project's required scope and write it down. Then load the fill and run the checks.

BUILD - LOAD THE FILL FOR THE NATIVE CHECKS
innovus> add_metal_fill_signoff -flatten ;# copy the HMF fill into the database
VERIFY - CONNECTIVITY, RULES, DENSITY AND ANTENNA OF F3
innovus> verifyConnectivity -type all -error 50 -warning 50 ;# opens and unrouted nets
innovus> verify_drc -report F3_drc.rpt ;# rule check, fill included
innovus> verifyMetalDensity -report F3_density.rpt -detailed ;# per-window density
innovus> verify_antenna -report F3_antenna.rpt ;# antenna check
VERIFY - PHYSICAL-ONLY CELLS OF F3
innovus> checkFiller -file F3_filler_gaps.rpt ;# gaps left
innovus> verifyEndCap -report F3_endcap.rpt ;# end caps
innovus> verifyWellTap -report F3_welltap.rpt ;# well taps
BUILD - REMOVE THE FLATTENED COPY AGAIN
innovus> add_metal_fill_signoff -delete_flatten_fills ;# keep only the HMF fill
ILLUSTRATIVE OUTPUT - CHECKS OF F3 (INVENTED VALUES)
verifyConnectivity   Open 0   Unrouted 0
verify_drc           Total 0
verifyMetalDensity   M2..M6: 361 windows each, 0 below, 0 above
verify_antenna       Total 0
checkFiller          Total number of gaps found: 0
verifyEndCap         Violations 0
verifyWellTap        Violations 0
What the evidence proves, and what it does not

Proves: in this session, with the settings read back, F3 has no open or unrouted net. It has no rule violation in the checked scope, fill included. It has no density window outside the rule, no antenna violation and no unfilled gap.

Does not prove: layout-versus-schematic equivalence, signoff rule or density compliance, signoff timing, or power integrity. None of those was run in this session.

Stop and investigate

If connectivity reports floating metal after the fill is loaded, look at where the markers sit. Floating fill is not connected by design. Run verifyConnectivity -⁠noFill -⁠type all and compare: a real open stays, and floating fill disappears. For floating fill, use the option and record it. For a real open, go back to Routing, Post-Route Optimization, Checks and Handoff.

8.4  Which report belongs to which layout

Every report in this chapter carries a candidate prefix, and a prefix is only a label. A report describes a candidate when four things hold:

  1. It was run on that candidate's checkpoint, or on the session state saved as that checkpoint.
  2. The settings of that candidate were read back.
  3. It ran to completion.
  4. No relevant layout or setting change followed it.

A file's age is a warning sign, not a test. Saving an unchanged layout does not make its reports stale, and a copied file gets a new time. The deciding record is provenance: which checkpoint, which session, which settings, all in the manifest.

Table 13 lists the checks by what each run actually covered. "Run" means a run exists on that layout. Only the F3 column supports the F3 handoff, and every other cell describes an earlier layout.

Figure 12 draws the facts of Table 13 on the lineage of the candidates.

Candidates, a measurement, a rejected experiment and their reports
The lineage C2 to F3, with one report chip per check under each candidate
Candidates, a measurement, a rejected experiment and their reports
Figure 12 Five checkpoints sit on one line, with the package after F3. F1x measures F1, and X1 is a dead-end branch of F2. Chips follow the table of checks.

What to notice: F3 descends from F2, not from X1. Only the filled chips under F3 support the handoff; antenna ran on F3 alone.

Table 13 Which checks ran on which layout
CheckF0F1F2F3
Timing, setup and holdRunRun as F1xRunRun
Electrical limitsRunNot runRunRun
Analysis coverageNot run, carried from the routed handoffNot runRunRun
ConnectivityRunRunNot runRun
Rule checkRunRunNot runRun
DensityNot runRun, before fillRun, with fillRun
AntennaNot runNot runNot runRun
Physical-only cellsRunRunNot runRun
Stop and investigate

Stop if a report cannot be tied to the checkpoint you are shipping. Stop if a report named for F3 was produced in a session that held another candidate. Stop if the scope in the mode readback differs from the project's required scope. In each case, run it again in a fresh session on the checkpoint.

9  Export and hand off

The receiving team will never see your session. It sees files and a record. Whatever the files do not carry does not exist for them. Examples are a layer that was not mapped and a cell that was not merged. So export from the exact candidate you verified, check what you wrote, and write a record. The record says which checks ran, which did not, and who owns the rest.

9.1  What stream-out needs before it runs

streamOut writes a GDSII (Graphic Data System II, the stream format) file of the current database. It has four prerequisites, listed in Table 14 with what happens when each is missing.

Table 14 Stream-out prerequisites
PrerequisiteIf it is missing
A map file with every layer to write, its stream number and datatype, fill layers includedUnmapped layers are not written; fill can vanish without an error
Macro and library cell layouts, merged with -⁠merge or written with -⁠outputMacrosCells are empty or missing. Use one of the two per cell, not both
The units (-⁠units) that the receiving flow expects. The default is the units of the LEFA mismatch scales the whole layout
The HMF database. The fill option merges the fill data and places the signoff top fill cell at 0,0, unrotated, in the top cellThe file carries no fill, or an old fill

Some installations spell the fill option -⁠signoff_fill and others -⁠pvs_fill. Run streamOut -⁠help and use the spelling it prints. The block below uses -⁠signoff_fill.

Command card - streamOut
START - RESTORE F3 FOR EXPORT, FRESH SESSION
innovus> restoreDesign fin_F3_repair.enc.dat stream_acc ;# load F3 with its HMF
innovus> source site_setup.tcl ;# replay the site setup
innovus> get_metal_fill_signoff_mode ;# confirm the fill settings came back
EXPORT - THE LAYOUT, WITH SIGNOFF FILL AND MERGED MACROS (EXAMPLE NAMES)
innovus> streamOut stream_acc_F3.gds -mapFile fill/streamOut.map \
    -libName DesignLib -structureName stream_acc -units 1000 \
    -mode ALL -signoff_fill \
    -merge {gds/u_buf_a.gds gds/u_buf_b.gds gds/u_coef.gds \
    gds/stdcells.gds} \
    -reportFile stream_acc_F3_streamout.rpt ;# write the GDSII of F3 with its fill

What each option does:

Export from a restored F3, not from the session where you ran the density check or the trial trims. A session that has run experiments may hold a flattened copy, an edited setting or a different candidate.

Figure 13 shows the whole export: inputs, the files written, and the three levels of checking that follow.

What leaves the session, and how you check it
The restored F3 feeds stream-out and the other writers; three checks of increasing strength follow
What leaves the session, and how you check it
Figure 13 streamOut combines the map, the merged macro layouts, the units and the HMF fill into one stream file. The other writers add the netlists and the DEF file.

What to notice: Each validation level proves more than the one before it. Only the receiving side's readback compares the file against the manifest.

Stop and investigate

If the receiving tool finds no fill datatype, or reports renamed or empty cells, check four things:

  • the option spelling, with streamOut -⁠help;
  • that the map lists every layer and datatype;
  • get_metal_fill_signoff_mode in the restored session;
  • the log, for renames.

A rename means a -⁠merge name collision picked one cell. List the colliding cells and decide with their owner which is right. Restore F3, correct the cause, export again and take a new checksum.

9.2  What else the receiving team needs

The package depends on the project's agreement. Table 15 shows a typical set, each item with the command that writes it.

Table 15 A typical handoff package
ItemCommandNotes
The checkpointsaveDesign (already done: fin_F3_repair.enc)Restores the design with its HMF
Logical netlistsaveNetlist stream_acc_F3.vDefault: logical cells only
Netlist with physical instances and power connectionssaveNetlist stream_acc_F3_phys.v -⁠includePhysicalInst -⁠includePowerGroundFor flows that compare layout against a netlist; the receiving team decides. A netlist made with the different option -⁠includePhysicalCell should not be read back into Innovus
Routed wires as DEF (Design Exchange Format)defOut -⁠routing stream_acc_F3.defCarries the routing. defOut has no option for the signoff fill, so the fill travels in the stream file
Parasitics as SPEF (Standard Parasitic Exchange Format)rcOut -⁠spef stream_acc_F3.spefOnly if the receiving team asks; they normally extract with their own settings
Reports and recordThe files with prefix F3_ and the record belowProvenance in the manifest
EXPORT - NETLISTS AND ROUTED DEF OF F3 (WRITES FILES)
innovus> saveNetlist stream_acc_F3.v ;# logical netlist
innovus> saveNetlist stream_acc_F3_phys.v -includePhysicalInst \
    -includePowerGround ;# netlist with physical instances and power
innovus> defOut -routing stream_acc_F3.def ;# routed wires as DEF

9.3  Validate what you wrote

There are three levels, in order of how much they can prove.

  1. The log. Open stream_acc_F3_streamout.rpt and the session log. Look for unmapped layers, renamed cells, empty cells and warnings about the fill data. A warning you cannot explain is a finding.
  2. The files. Check that each file exists and is not empty. Record each one in the manifest with its size and a checksum. The checksum supports integrity when you compare it with a value recorded at a trusted point, such as receipt. It does not show that the content is right.
  3. A readback on the receiving side. The tool that reads the stream file reports what it found. Ask for the facts in Table 16 and compare each with the manifest.
QUERY - SIZE AND CHECKSUM OF THE LAYOUT (TCL AND SHELL)
innovus> file size stream_acc_F3.gds ;# Tcl file size in bytes
innovus> exec md5sum stream_acc_F3.gds ;# shell checksum for the manifest

Both commands above run at the Innovus prompt but are not Innovus commands. file size is plain Tcl, and exec md5sum calls the Linux shell.

Reference counts depend on the hierarchy. A raw count can include library internals and fill structure. So compare against the count the manifest recorded for the intended hierarchy, read with the same tool.

Table 16 Readback facts for F3
FactExpected for F3If it differs
Top structure namestream_accThe wrong file or the wrong -⁠structureName
Database units1000 per µmThe wrong -⁠units; everything is scaled
Layout bounding boxThe die of the design, with the macros and the core insideA missing macro, a missing boundary or an offset
Layers presentEvery layer and datatype of the map, including the fill datatypes of M2 to M6An unmapped layer; the fill is missing
Library cell instances in the top design353 480 (128 610 + 9 840 + 1 280 + 213 750), as the manifest recordsMissing filler, taps or end caps
Macro references3 (u_buf_a, u_buf_b, u_coef)A macro not merged, or empty
Signoff top fill cell references1, at the origin without rotationThe fill was not merged, or merged twice
Cell-name renamesNone unexplainedA name collision in -⁠merge; the wrong cell may have won

9.4  The handoff record

The record is a decision with evidence. It separates two decisions that are easy to merge:

Figure 14 shows the split between the two decisions on the record of F3.

Handoff readiness against signoff readiness
The fifteen rows of the record, split by who owns each check
Handoff readiness against signoff readiness
Figure 14 Rows 1 to 10 ran on F3 and decide handoff readiness. Rows 11 to 14 are pending with the receiving team, and row 15 is outside this chapter.

What to notice: NOT RUN is written as words, never as a 0, and it never counts as a pass.

Table 17 defines the three handoff states.

Table 17 Handoff states
Handoff stateMeansRule
ReadyEvery check required of the producer ran on this layout, with the right scope, and passedNo exception
Ready with documented exceptionsEvery required check ran. Some results carry an exception that someone with authority approved, with a recordEach exception has a scope, an owner, an approval reference and a recheck trigger
Not readyA required check failed, did not run, or describes another layoutState which, and what would change it

A check has three outcomes, not two: it passed, it failed, or it did not run. A table with a 0 for a check that never ran reads as "no violations". It really means "nobody looked".

So the record uses words in the status column, and a number only where a tool produced it. A check that belongs to the receiving team is recorded as NOT RUN with its owner. That is a pending responsibility, not an exception to the producer's handoff. It is never counted as a pass. The record for F3 is in Table 18 and Table 19.

Table 18 The handoff record of F3, rows 1 to 10
#CheckStatusResultEvidence file
1Setup timing, fill extractedPASS with exception (E2)WNS +0.003, TNS 0.000, 0 endpointstiming_F3/, prefix F3
2Hold timingPASSWNS +0.025, 0 endpointstiming_F3/
3Transition, capacitancePASS0 / 0 violatorsF3_electrical.rpt
4Analysis coveragePASS with exception (E1)Setup 4 002 + 0 + 18 = 4 020, hold 4 008 + 0 + 12 = 4 020F3_coverage.rpt
5ConnectivityPASSOpen 0, unrouted 0session log of verifyConnectivity
6Rule check, fill includedPASSTotal 0, limit 1000F3_drc.rpt
7Native densityPASS361 windows per layer, 0 below, 0 above. Tightest M3 window 22.7%F3_density.rpt
8AntennaPASSTotal 0F3_antenna.rpt
9Physical-only cellsPASSGaps 0, end-cap 0, well-tap 0F3_filler_gaps.rpt, F3_endcap.rpt, F3_welltap.rpt
10Stream-out writtenPASSLog read, checksum recordedstream_acc_F3_streamout.rpt

The remaining rows belong to the receiving team or lie outside this chapter.

Table 19 The handoff record of F3, rows 11 to 15
#CheckStatusResultEvidence file
11Readback on the receiving sideNOT RUNPending, receiving teamnone yet
12Signoff rule and density checkNOT RUNPending, receiving teamnone
13Layout-versus-schematic comparisonNOT RUNPending, receiving teamnone
14Signoff timing, own extractionNOT RUNPending, receiving teamnone
15Power integrity, electromigrationNOT RUNOutside this chapternone

Rows 1 to 10 ran on F3 and are tied to its checkpoint in the manifest. Rows 11 to 15 have no file.

9.5  The exceptions

Two exceptions go with the record. The approval references below are invented examples. A real record carries the project's owner and reference, and an exception without them is not approved.

Table 20 Documented exceptions
ExceptionScope and evidenceOwnerApprovalRecheck when
E1. 18 setup and 12 hold checks have no resultSame objects and reasons as the routed handoff record, F3_coverage.rpt. Capture clocks are tied off in this mode, and other modes cover the functionConstraint owner (role)APPR-0412 (example)A mode or constraint changes
E2. P1 slack is +0.003, and the finishing setup differs from the routed handoff by -0.006 ns on P1timing_F3/ and the F1x comparison. Meets the stage target of 0.000 nsTiming owner (role)APPR-0413 (example)Signoff timing disagrees by more than the margin, or any edit follows

The stage target of 0.000 ns is an invented value of the example. The receiving project's number is the one that counts.

9.6  Decision

F3 is ready for handoff with documented exceptions E1 and E2. It is not signoff-ready, and this record does not claim that. Rows 11 to 14 are pending with the receiving team, and row 15 is outside this chapter.

Anything that edits the layout, even one wire or one fill shape, makes F3 a new candidate. It returns you to "Extract and measure the filled design". The lineage is C2, F0, F1, F2, F3. F1x is a measurement of F1, and X1 is a rejected experiment that parents nothing. The handoff note carries the items in Table 21.

Table 21 The handoff note for F3
Part of the handoff noteContent for F3
CandidateF3, checkpoint fin_F3_repair.enc, restore command, lineage
What changed213 750 filler cells; signoff fill trimmed (med) around n_4412, n_4417, n_4420
SettingsFill, extraction (-⁠pvs_fill true, layer map) and rule-check readbacks
EvidenceThe files of the record, with their folders and the checkpoint each was run on
ExceptionsE1 and E2
PendingRows 11 to 14 (receiving team); row 15 (outside this chapter)
FilesThe stream file with its checksum, netlists, DEF, reports
Verify againRestore fin_F3_repair.enc.dat, replay the site setup, rerun the checks. A rebuild from F2 is the trim and re-extraction only

Takeaway F3 is packaged with its record. The receiving team now runs the checks that are theirs, and the record lists them.

10  Debug index and open caveats

Finishing failures are expensive to guess at, because each rerun of fill or extraction takes a long time. The sections above carry the detail. This section is the index: find the symptom, run the first check, and go to the section that repairs it.

Use the same order every time. Start from the symptom and its evidence, then list the competing causes. Run a check that tells them apart, make a scoped repair, and measure the repaired candidate again.

10.1  Open caveats to settle in your installation

These points are not settled for every release. Note them before you rely on a result.

10.2  Common mistakes and how to catch them

Table 22 maps each symptom to its likely cause, its first check and its repair.

Table 22 Debug index
SymptomLikely causeFirst checkFix, and where
checkFiller still reports gapsNo filler cell narrow enough, or a blockage or halo over the gapcheckFiller -⁠reportGap, getFillerModeAdd the missing filler width ("Complete the physical-only cells")
Windows below the minimum after fillLayer missing from -⁠fill_layer or the map, tight keepouts, wrong rule, or fill not flattenedWindow count, get_metal_fill_signoff_mode, -⁠view_fillsFix the setting, run -⁠fill again from F1 ("Insert and inspect the fill")
Timing worse after fillFill capacitance on the path's netsF1x against F2, then report_net on the path's netsTrim around the confirmed nets and measure density ("Repair without breaking density")
Timing after fill equals timing beforeThe extraction did not read the fillgetExtractRCMode -⁠pvs_fill, the log, the map linesFix the setting or the map, extract again ("Extract and measure the filled design")
Rule check is clean and silent about fillFill ignored by the mode, or fill not flattenedget_verify_drc_modeSet the scope, flatten, run again ("Verify the finished candidate")
Floating metal after the fill is loadedFloating fill is unconnected by designverifyConnectivity -⁠noFill against a run without itRecord the option for floating fill ("Verify the finished candidate")
No fill, or renamed cells, in the stream fileWrong option spelling, missing map datatype, or a -⁠merge name collisionstreamOut -⁠help, the map, the logCorrect, restore F3, export again ("Export and hand off")
A clean report that may belong to another candidateThe report ran in a session that held another layoutThe manifest: checkpoint, session, settingsRun it again on the shipped checkpoint ("Verify the finished candidate")

11  Interview preparation

Beginner
Q1. Why is a routed design that meets timing not yet ready for the foundry?

Because the rows still have gaps and the metal layers have empty areas, which are manufacturing problems.

What is being tested: whether you see finishing as a real layout change, not cosmetics.
Beginner
Q2. What are the three kinds of physical-only cells, and what does each do?

End caps give a row a legal boundary, well taps tie the wells to the supply, and fillers close the gaps.

What is being tested: basic vocabulary of the finished row.
Intermediate
Q3. Why is "delete all physical-only cells and add them again" a bad idea?

Because deleteFiller also removes end caps and well taps, which the floorplan placed on purpose.

What is being tested: whether you protect cells the design needs.
Beginner
Q4. Why does a metal layer need fill, and what does fill cost?

CMP removes material at a rate that depends on local metal density, so empty or dense areas end up uneven.

What is being tested: whether you connect a manufacturing rule to a timing cost.
Intermediate
Q5. A layer's average density is 32.2% and the minimum is 20%. Does it pass?

Not necessarily, because the rule applies to every window, not to the average.

What is being tested: whether you know how a density rule is checked.
Intermediate
Q6. What is the difference between floating fill and connected fill?

Floating fill is an unconnected island; connected fill is tied to a net such as VSS.

What is being tested: the electrical model of a fill shape.
Intermediate
Q7. Why do we flatten the signoff fill before the native checks, and delete the copy afterwards?

Because it is not settled whether native checks read unflattened HMF fill, and the checkpoint should carry one copy of the fill.

What is being tested: whether you know where the signoff fill lives.
Advanced
Q8. Why time F1 with the finishing extraction (F1x) before timing F2?

Because the extraction engine and the fill change together, so without F1x you cannot attribute a slack change.

What is being tested: controlled comparison, one variable at a time.
Advanced
Q9. Timing after fill is identical to timing before fill. What do you suspect?

That the extraction did not read the fill.

What is being tested: skepticism toward a result that looks too good.
Advanced
Q10. Deleting all fill near P1 recovers the slack. Why reject it?

Because it drops W1 back to 14.4% and leaves six M3 windows below the minimum.

What is being tested: whether a repair respects every rule, not only timing.
Intermediate
Q11. How do you know a report describes the layout you ship?

By provenance: the checkpoint, the session and the settings it ran with, recorded in the manifest.

What is being tested: evidence discipline at handoff.
Intermediate
Q12. What must be true before streamOut writes a usable layout?

A complete layer map with fill datatypes, merged macro layouts, the expected units, and the HMF fill included.

What is being tested: export prerequisites and their failure modes.
Advanced
Q13. What is the difference between handoff readiness and signoff readiness?

Handoff readiness is the producer's decision on its own checks; signoff readiness needs the receiving team's checks.

What is being tested: honest scope of a handoff record.

Compact glossary

Table 23 Glossary
TermMeaning
FinishingThe steps after routing that complete physical-only cells, add metal fill, check and export the layout
CandidateA named, saved layout state, such as F1 or F3
Physical-only cellA cell with no logic: end cap, well tap or filler
End-cap cellA cell at the end of a row segment that gives the row a legal boundary
Well-tap cellA cell that connects the wells to the supply at a regular spacing
Filler cellA cell that closes a gap so the rails and wells continue
Metal fillExtra metal shapes in empty areas that carry no signal
CMPChemical-mechanical polishing, which grinds each metal layer flat
DishingA wide metal line polished lower than its neighbors
ErosionA dense array polished thinner than the area around it
Floating fillA fill shape connected to nothing
Connected fillA fill shape tied to a net, usually power or ground
Metal densityMetal area in a window divided by the window area, in percent
Density windowThe square area, moved by a fixed step, in which density is checked
KeepoutA zone where fill must not be placed
TrimRemoving fill near named nets to recover timing
HMFHierarchical metal fill database, where signoff fill is stored beside the design
FlattenCopying the HMF fill into the design database for native checks
Controlled baselineA measurement of the unfilled layout with the same extraction as the filled one (F1x)
ProvenanceThe record of which checkpoint, session and settings produced a report
Stream-outWriting the layout as a GDSII (stream) file
Layer mapThe file that relates layer names to stream numbers and datatypes
Documented exceptionAn approved deviation with scope, owner, approval reference and recheck trigger

Chip finishing on one page

Table 24 is the whole flow as a cheat sheet. The numbers are those of the worked example.

Table 24 The finishing flow at a glance
StepCandidateMain commandsContinue if
Restore and re-measureF0restoreDesign, source, timeDesign, verify_drcNumbers equal the handoff note; provenance recorded
Complete the cellsF1checkFiller, setFillerMode, addFiller -⁠prefix FIN_FILL0 gaps, no new violation
Configure the fillF1set_metal_fill_signoff_mode, get_metal_fill_signoff_modeReadback matches intent; map covers every fill datatype
Insert the fillF2add_metal_fill_signoff -⁠fill, -⁠flatten, verifyMetalDensity0 windows outside the rule (was 134 below)
MeasureF1x, F2setExtractRCMode -⁠pvs_fill, extractRC, timeDesignFill read; effect attributed (-0.015 ns on P1)
RepairF3add_metal_fill_signoff -⁠trim -⁠trim_effort medP1 +0.003 ns; W1 at 22.7%
VerifyF3verifyConnectivity, verify_drc, verifyMetalDensity, verify_antennaEvery question answered with scope read back
Export and recordF3streamOut, saveNetlist, defOutLog clean; record lists PASS and NOT RUN rows

Where the next chapter goes, and why

F3 is handed off with a record. That record lists what is still open: signoff timing with its own extraction, and a thin +0.003 ns margin on P1.

The next chapter, Signoff Preparation and Timing ECO Closure, picks up exactly there. It prepares the signoff timing run and closes the paths that fail there with ECOs. Every ECO edits the layout, so the habits of this chapter come with you. Each edit means a new candidate name, incremental fill and a fresh extraction. The evidence is again tied to the exact layout.