PREPSPRINT · SIGNOFF · PARASITIC EXTRACTION

SPEF generation and validation

From ICC2 physical design to StarRC extraction and STA

Most of us learn SPEF as the file StarRC writes and PrimeTime reads, and that part is easy, but the part that decides whether signoff numbers mean anything is showing that the file describes the layout you are actually signing off, at the corner you think it is, and that no net got left out along the way. This page walks the whole path from a routed ICC2 block to an annotated PrimeTime session, and at each step says what goes wrong and how you would notice.

10sections
12figures
58commands verified
10interview questions
IC Compiler IIrouted, savedStarRCper cornerPrimeTimeannotate, timewhat the SPEF describes, per netresistors along the wire, capacitors at each node
0
BEFORE YOU START

How to read this page

Every command below was checked before it went on this page, and anything that could not be confirmed is labelled so you know to look it up in your own install before you copy it.

Tool versions differ, and option names and defaults do move between releases, so treat every command here as something to confirm with man or the documentation that ships with your installed version.

LabelWhat it means
VerifiedThe command and every option shown were confirmed to exist, and the combination is used the way the tool intends.
Environment-specificReal, but whether it applies depends on your license, tool version, foundry kit or flow. The note says which.
Illustrative pseudocodeCould not be confirmed. Shown for shape only, so check the man page before you use it.
Illustrative valuesNumbers, corner names, file names and counts that were made up to teach the idea. They are not from a real run and they are not thresholds.

One more convention. When something is true of parasitic extraction in general, I say so plainly. When it is specific to StarRC, ICC2 or PrimeTime, the tool is named, and when it depends on your foundry, the text says the foundry decides.

1
SECTION 1

SPEF fundamentals

A SPEF is the extractor's description of one routed layout at one extraction corner. It carries RC and connectivity, not timing, and it is only as trustworthy as the layout and settings it came from.

SPEF is the Standard Parasitic Exchange Format, IEEE 1481. It is a text file that describes, net by net, the resistors and capacitors an extractor found in the routed layout, plus enough connectivity to hang them on the right pins. StarRC writes it, ICC2 can write its own version, and PrimeTime reads it with read_parasitics, which also accepts GPD, DSPF, RSPF and Milkyway parasitics.

AWhat is inside, and what is not

Inside a SPEFNot inside a SPEF
Units for time, capacitance, resistance and inductance (*T_UNIT, *C_UNIT, *R_UNIT, *L_UNIT)Cell delays, timing arcs or pin capacitance. Those come from the libraries, and PrimeTime ignores any pin capacitance in the SPEF by default
A name map that shortens long net and instance names to *n codesConstraints, clocks, modes or corners of the timing run. A SPEF header can say which extraction corner it came from, nothing more
One *D_NET per net with its total capacitancePower and ground net RC, unless extraction was asked for it. StarRC does not extract power nets by default
Connectivity (*CONN): ports, instance pins, internal nodesSwitching activity, so no power number comes from the SPEF alone
Ground and coupling capacitors (*CAP) and resistors (*RES)Any proof that the layout is free of shorts or opens. Section 9 explains why

BDistributed R, ground C, coupling C

A routed wire is not one resistor and one capacitor. It has resistance spread along its length and at every via, and it has capacitance spread along its length to everything around it. The extractor chops the wire into segments, and each segment becomes a resistor between two nodes with capacitance hanging off the nodes. That is the distributed RC model, and it is what timing and SI need, while a lumped total capacitance is enough for dynamic power estimation.

Capacitance splits two ways. Capacitance to a net held at a fixed potential, power and ground shapes and the substrate, becomes ground capacitance. Capacitance to another signal net becomes coupling capacitance, because the other net switches too and that is where crosstalk comes from. Whether a given coupling capacitor survives into the SPEF as coupling, or gets folded into ground capacitance, is a setting, and by default StarRC grounds all of them. Section 6 comes back to this.

Figure 1: Where ground and coupling capacitance come from
The victim wire sees ground capacitance to the VSS shape below and coupling capacitance to every signal net around it.
dielectricM1 shape on a ground net (VSS): capacitance to it is ground capacitancenet B on M3, a signal net crossing overheadnet Anet Nnet V (victim)Cc (V, A)Cc (V, N)Cc (V, B)Cg (V)M3M2M1coupling Cground CResistance runs along each wire into the page, plus one value per via. Values not to scale.
Read it. Net V sits on M2 between nets A and N. The amber capacitors go to signal nets (A, N on the same layer, B on M3 above) and become coupling capacitors. The navy one goes to an M1 shape of a ground net and becomes ground capacitance. Resistance is not drawn because it runs into the page along the wire and through each via.

CUnits and name mapping

Every number in the body of a SPEF is a multiple of the header units. If the header says *C_UNIT 1 FF, a capacitor of 0.84 is 0.84 fF, and the same value under *C_UNIT 1 PF would be a thousand times bigger. Tools read the header, so this only bites when someone hand-edits a file or merges files with different headers, but it is the first thing worth checking when two SPEFs disagree by a clean factor of 1000.

The name map replaces long hierarchical names with *n codes to keep the file small. StarRC maps names by default (NETLIST_NAME_MAP: YES) and turning it off greatly increases file size. ICC2 write_parasitics also maps by default and has -no_name_mapping to write real names. Mapping does not change matching. PrimeTime still needs the net and instance pin names in the SPEF to match the names in the netlist it loaded, and name matching is the most common reason nets end up not annotated.

DSPEF, TLUPlus and nxtgrd are different things

Figure 2: Technology files versus design parasitics
TLUPlus and nxtgrd describe the process. SPEF describes one layout. PrimeTime only ever reads the last one.
ITFprocess descriptiongrdgenxoStarRC utilityTLUPlusfor ICC2, FC, DC-Tnxtgrdfrom the foundryIC Compiler IIread_parasitic_tech -tluprouted designNDM or LEF/DEFStarRCTCAD_GRD_FILE+ MAPPING_FILEestimatefor optimisationGPD / SPEFdesign-specificPrimeTimeread_parasiticsPrimeTime never reads TLUPlus or nxtgrd. It reads what an extractor produced from them for this layout.
Read it. The foundry describes the interconnect stack in ITF. The grdgenxo utility turns it into TLUPlus for ICC2, Fusion Compiler and DC Topographical, and into an nxtgrd file for StarRC. Each extractor combines its model with the routed design. Only the result, the GPD or SPEF, goes to PrimeTime.
TLUPlusnxtgrd (StarRC)SPEF
PurposeFast RC models for extraction inside implementation toolsProcess characterisation data for signoff extractionRC of one specific layout at one corner
Produced bygrdgenxo from ITFgrdgenxo from ITF; for signoff, supplied by the foundryAn extractor run on a routed design (StarRC, or ICC2 write_parasitics)
Consumed byICC2 via read_parasitic_tech -tlup. Not used by StarRCStarRC via TCAD_GRD_FILE. ICC2 can also read a common nxtgrdPrimeTime read_parasitics
Depends on your design?NoNoYes, every wire
Position in the flowPlacement to postroute optimisationSignoff extractionHanded to STA, SI and power analysis

EWhich analyses consume parasitics

AnalysisWhat it needs from parasiticsWhat else it needs
Delay calculation and STADetailed RC per net, for the corner being timed. The RC network is used to compute effective capacitance during delay calculationNetlist that matches the SPEF names, libraries for the same PVT, SDC, the matching scenario setup
Crosstalk delay and noise (PrimeTime SI)Coupling capacitors kept as coupling. Without SI, PrimeTime splits coupling capacitors to groundsi_enable_analysis true and read_parasitics -keep_capacitive_coupling, plus the timing windows STA produces
Dynamic powerNet capacitance; a lumped value is enough for thisSwitching activity (SAIF, VCD or vectorless assumptions) and power libraries
Rail analysis (IR drop, EM)Power and ground network resistance, which is a separate extraction and not the signal SPEFCurrent information from power analysis, pad and package locations
2
SECTION 2

Where extraction fits in the PnR flow

The same design gets extracted several times, and what changes each time is the model, the engine and whether the layout is final, but only the last extraction on the final layout is a signoff input.

Figure 3: From routed block to signed-off parasitics
Three tools, one handoff each, and an ECO loop that makes the previous SPEF stale.
IC COMPILER II · IMPLEMENTATIONSTARRC · SIGNOFF EXTRACTIONPRIMETIME · SIGNOFF STARouted block (NDM)place, CTS, route, postroute optPhysical checkscheck_routes, check_lvsSave the design statesave_block, write_verilogImplementation extractionTLUPlus based, update_timingwrite_parasitics: estimateTechnology inputsnxtgrd per corner, mapping fileStarXtract cmd_filereads NDM or LEF/DEF directlyParasitic outputsGPD, plus SPEF per cornerRun reportsstar_sum, opens.sum,shorts_all.sum, vias.sumNetlist, libraries, SDCnetlist from the same saved blockread_parasitics-keep_capacitive_couplingfor SIAnnotation checkreport_annotated_parasitics-checkTiming and SI resultsupdate_timing, report_timingECO changes: re-extract and re-annotate, the old SPEF no longer describes the layout
Read it. ICC2 finishes the block, checks its routing, and saves it. StarRC reads that saved design with the nxtgrd and mapping files and writes a GPD, SPEF per corner and its own reports. PrimeTime reads the netlist and the parasitics, confirms annotation, and only then produces timing and SI numbers. The dashed box in the ICC2 lane is ICC2's own extraction, useful for optimisation but not a signoff result. Any ECO sends you back to the start.

AImplementation extraction and signoff extraction

ICC2 extracts parasitics all the time during implementation, using the TLUPlus models you load with read_parasitic_tech and attach to corners with set_parasitic_parameters. That extraction drives optimisation and it is good enough to steer the tool. ICC2 can write it out with write_parasitics, and you should run update_timing first so the parasitics are up to date. That file is an implementation estimate. Signoff extraction is StarRC with the foundry nxtgrd, and the two should correlate but they are not the same engine or the same model.

There is a middle option, In-Design StarRC, where ICC2 runs the StarRC engine itself through set_starrc_in_design. It brings implementation closer to signoff, but it is still implementation. RC scaling factors, which ICC2 can insert into an In-Design corners file for correlation, are not meant for final signoff runs.

ICC2: implementation parasitics, and how they compare to StarRCVerified
read_parasitic_tech -tlup <cmax.tluplus> -layermap <icc2_itf.map> -name cmax
read_parasitic_tech -tlup <cmin.tluplus> -layermap <icc2_itf.map> -name cmin
set_parasitic_parameters -corners <corner> -late_spec cmax -late_temperature 125 \
    -early_spec cmin -early_temperature 125
report_parasitic_parameters -corners <corner>
update_timing -full
write_parasitics -output <block> -format spef   ;# writes <block>.<tech>_<temp>.spef

# compare ICC2 extraction settings with a StarRC setup (reports CORR-8xx differences)
set_consistency_settings_options -exec_path <starrc_bin_dir> -tool starrc \
    -script <starrc_setup> -corner <corner>
check_consistency_settings -tool starrc

BWhich milestone is good for which analysis

Figure 4: Parasitics by milestone
The source of the parasitics changes as the design matures, and certain events retire the previous file.
PlacementCTSRoutePostroute optMetal fillSignoff ECOFinal dataany rerouteNDR or shield changefill added or changedECO cells or wiresestimated wires: trend onlyICC2 extraction: optimise on itStarRC signoff extractionRed arrows mark events after which an existing SPEF no longer matches the layout.Generic milestone view. Your flow may insert fill in ICC2 or in the signoff DRC tool, and the stage names differ between teams.
Read it. Before routing there are no real wires, so any parasitics are estimates and only show trends. Once routed, ICC2 extraction is good for optimisation decisions. After fill and final routing, StarRC signoff extraction is the one to trust. The red arrows are events that change the layout, after which an existing SPEF no longer describes it.
MilestoneParasitic sourceUse it forDo not use it for
Placement, CTSEstimated routes in ICC2Trends, early timing, congestion-driven decisionsAny signoff statement, hold fixing with real margins
Routed, postroute optimisationICC2 extraction (TLUPlus), or In-Design StarRCOptimisation, early SI look, correlation with StarRCFinal numbers. It is still an implementation estimate
Final routing with fill in placeStarRC with foundry nxtgrdSignoff STA, SI, the final ECO loopNothing, as long as the layout does not change again
After a signoff ECOStarRC again (full, or incremental ECO extraction)Re-timing the changed designReusing the pre-ECO SPEF on the post-ECO netlist

CRouting ECOs, metal fill and other physical changes

A SPEF describes the layout at the moment it was extracted. Any reroute, NDR or shielding change, cell swap with new wires, or fill change after that point means the file describes a layout that no longer exists. The case that catches people is a small ECO, where ten changed nets feel too few to matter and the old SPEF gets reused, but the nets next to those ten also changed their coupling, and the new nets have no parasitics at all, so PrimeTime falls back for them in ways that look fine in a report.

StarRC has an incremental ECO flow that re-extracts only the ECO-affected nets. It needs ECO_MODE with a GPD directory, and it requires EXTRACTION: RC, COUPLE_TO_GROUND: NO and POWER_EXTRACT: NO. It includes nets directly coupled to the changed nets, but not nets one step further away; PrimeTime adjusts those. Whether you use it or a full rerun, the rule does not change: after a physical change, you extract again.

3
SECTION 3

Inputs and prerequisites

StarRC will extract an old design at the wrong corner and still report success, so whether the output means anything is decided by the inputs, not by the run.

Most extraction problems turn out to be input problems, not StarRC problems. The tool did exactly what it was told with the files it was given. This is the checklist I would walk before a signoff extraction, with the failure each missing, stale or mismatched input causes.

1
Routed, saved physical design. The NDM library after save_block, or DEF written from the final block.If stale: StarRC extracts a layout older than the one you think you signed off. Nothing warns you; the run is clean. StarRC also does not need an LVS-clean layout to finish, it only warns about opens and shorts.
2
Matching netlist. Written from the same saved block state, for example with write_verilog.If mismatched: nets and pins in the SPEF do not exist in the netlist, or the reverse, and PrimeTime reports them as not annotated.
3
Consistent hierarchy and naming. Hierarchy divider, bus delimiter, escaped characters, flat versus hierarchical names.If inconsistent: partial annotation. StarRC's HIERARCHICAL_SEPARATOR defaults to /, and the SPEF header records *DIVIDER and *BUS_DELIMITER.
4
nxtgrd file for every RC corner. From the foundry for signoff.If wrong: the run completes and every number is for a different corner, and nothing in the log tells you.
5
StarRC mapping file. Every connected database layer mapped to an nxtgrd layer.If missing a layer: for LEF/DEF, an undefined layer stops the run. If mapped to the wrong layer: the run completes with wrong R and C, which is worse.
6
Corners file with temperatures. CORNER_NAME, TCAD_GRD_FILE, OPERATING_TEMPERATURE per corner.If wrong or missing: outside SMC the command-file default is 25 C; in SMC every corner must carry its own temperature. A 125 C scenario reading a 25 C extraction times the wires cold.
7
Library and macro views. LEF for the LEF/DEF flow; pin shapes for skip cells; a decision on which macros to extract inside.If wrong: by default all lower-level blocks are skip cells, so a macro without its own timing model has no internal parasitics unless you negate it from SKIP_CELLS.
8
Metal fill source and handling. FILL view, DEF FILLS, or a GDS/OASIS file, plus METAL_FILL_POLYGON_HANDLING.If not set: fill is ignored by default. A separate GDS also needs GDS_LAYER_MAP_FILE.
9
Power and ground scope. Which nets are power, and whether any are extracted.Know it: POWER_EXTRACT defaults to NO. Fine for signal timing; wrong if someone expects PG RC in the signal SPEF.
10
Output settings. NETLIST_FORMAT: SPEF and NETLIST_FILE.If missing: a gate-level run writes only the GPD and no SPEF at all.
11
Reference paths, versions and settings consistency. Tool versions that support your database version; the same nxtgrd and temperature in ICC2 and StarRC for correlation.If inconsistent: correlation gaps you then try to fix with margins. check_consistency_settings -tool starrc reports the differences. Database and tool version compatibility is release-specific; check your release notes.
12
Freshness. Output timestamps newer than the design save, and the corner name recorded in each file.If old: you time last week's layout. StarRC writes the corner name into each SMC netlist header, which makes this easy to check.
4
SECTION 4

ICC2-to-StarRC handoff

StarRC can read the ICC2 library directly, so on the direct route the handoff is a save, not an export. The other routes add files, and each file is a place for versions to disagree.

StarRC reads the design database directly. For gate-level extraction it accepts ICC2 and Fusion Compiler NDM libraries, Milkyway, and LEF/DEF. That gives you three practical routes out of ICC2, and they do not all need the same exports.

Figure 5: Three handoff routes from ICC2 to StarRC
Route A reads the saved library, route B goes through files, route C runs StarRC inside ICC2 for implementation.
A · NDM DIRECTStarRC reads the saved libraryB · LEF / DEFwhen the handoff must be filesC · IN-DESIGN (ICC2)implementation, not standalone signoffsave_blockon-disk library = sessionNDM design libraryFILL view read if presentStarRCNDM_DATABASE + BLOCKno export for extractionnetlist for STA still writtenwrite_def -version 5.8plus technology and cell LEFDEF + LEF filesfill in DEF FILLS or a GDSStarRCLEF_FILE + TOP_DEF_FILEStarRC reads DEF 5.2 to 5.8ICC2 can also write DEF 6.0set_starrc_in_design-config <file>check_starrc_in_design-effort medium writes a cmd fileStarRC engine run by ICC2RC annotated back into ICC2compare with standalone runcheck_consistency_settings
Read it. In A, save_block is the handoff, and StarRC opens the same library with NDM_DATABASE and BLOCK. In B, ICC2 writes DEF and you supply technology and cell LEF; StarRC 2022.12 reads DEF versions 5.2 to 5.8 while ICC2 can also write 6.0. In C, ICC2 drives the StarRC engine itself, which is for implementation and needs its settings checked against the standalone signoff run.

ARoute A: StarRC reads the ICC2 design library

Nothing needs to be exported for extraction. NDM_DATABASE is the library name you would give open_lib, and BLOCK is the block you would open, optionally as block/label. Only gate-level designs are supported this way. Metal fill in the block's FILL view is read from the database. You still write a netlist for PrimeTime, because PrimeTime reads Verilog, not NDM.

ICC2: make the on-disk design match the session, then write the STA netlistEnvironment-specific
save_block
write_verilog -exclude {physical_only_cells pg_objects} <block>.v

Both -exclude values are real options. Which constructs your STA netlist should drop is a flow decision, which is why this block is marked environment-specific rather than verified.

StarRC: design input for route AVerified
NDM_DATABASE: <design_lib>
BLOCK: <top_block>
MAPPING_FILE: <starrc_layer.map>

BRoute B: LEF and DEF

ICC2 writes DEF with write_def; the valid versions are 5.7, 5.8 and 6.0 with 5.8 as the default. StarRC 2022.12 reads LEF/DEF 5.2 through 5.8, so a DEF 6.0 file from a newer ICC2 is a mismatch to check against your StarRC version. On the StarRC side, LEF_FILE and TOP_DEF_FILE are mandatory, the technology LEF must come first, and BLOCK is not valid because the block name comes from the DEF. LEF parasitic capacitance is ignored.

ICC2 and StarRC: route BVerified
# ICC2
write_def -version 5.8 -compress gzip <block>.def.gz
write_gds -fill fill_only <block>_fill.gds      ;# only if fill goes to StarRC as GDS

* StarRC (tech LEF first)
LEF_FILE: <tech.lef>
LEF_FILE: <stdcell.lef>
LEF_FILE: <macros.lef>
TOP_DEF_FILE: <block>.def.gz
METAL_FILL_GDS_FILE: <block>_fill.gds
GDS_LAYER_MAP_FILE: <fill_layer.map>

CRoute C: In-Design StarRC

set_starrc_in_design loads a configuration file with the StarRC executable, the corner-to-nxtgrd list, the same mapping file standalone StarRC uses, and a command file. check_starrc_in_design -effort medium validates it and writes a StarRC command file you can review or run standalone, which is a good way to see what ICC2 actually asked StarRC to do.

ICC2: In-Design StarRC setup and checkEnvironment-specific
set_starrc_in_design -config <starrc_in_design.cfg>
check_starrc_in_design -effort medium

DOther tools only when the flow really needs them

For gate-level signoff extraction from an NDM or LEF/DEF design, you do not need an LVS tool in the loop or a GDS merge step. LVS-based inputs from IC Validator, Calibre or Hercules are for transistor-level extraction and for the connectivity-interface flows. A separate GDS or OASIS file appears only if your fill lives outside the design database. If someone tells you every flow needs a conversion step, ask which database format they are starting from.

Step skippedWhat happens
save_block before an NDM readStarRC reads the last saved state, not the session in memory
Netlist from a different block stateName mismatches, nets not annotated, partial annotation
Fill source or fill handlingFill ignored by default; capacitance underestimated
DEF version check in route BStarRC cannot read a DEF version outside what its release supports
Settings comparison for route CIn-Design and standalone results drift apart and nobody knows why
5
SECTION 5

Corners and MMMC scenarios

An extraction corner and a timing scenario are different objects. One SPEF per nxtgrd and temperature pair is the rule, not one SPEF per scenario.

An RC extraction corner is a process variant of the interconnect plus a temperature. StarRC defines a unique corner as an nxtgrd file combined with a pattern density specification, and each corner in the corners file carries its own OPERATING_TEMPERATURE. A timing scenario is bigger: a mode, a library PVT corner, and one parasitic corner. PrimeTime builds scenarios in DMSA with create_scenario and per-scenario scripts, and the parasitic file is one of the things a scenario script reads.

So one SPEF can serve many scenarios. Functional and scan mode at the same slow corner and 125 C can share one rcworst extraction, because the wires did not change between modes. You need a new SPEF when the nxtgrd or the temperature changes, not when the mode does.

Figure 6: RC corners feeding timing scenarios
Seven scenarios, five extractions. The mapping is many-to-one, not one-to-one.
RC EXTRACTION CORNERSone StarRC output per cornerTIMING SCENARIOS (mode · library · temp · check)each picks exactly one parasitic cornerC1 cworst nxtgrdOPERATING_TEMPERATURE: 125C2 rcworst nxtgrdOPERATING_TEMPERATURE: 125C3 cbest nxtgrdOPERATING_TEMPERATURE: -40C4 rcbest nxtgrdOPERATING_TEMPERATURE: -40C5 typical nxtgrdOPERATING_TEMPERATURE: 25func · ssg · 125 C · setup · cworstfunc · ssg · 125 C · setup · rcworstscan · ssg · 125 C · setup · rcworstfunc · ffg · -40 C · hold · cbestscan · ffg · -40 C · hold · cbestfunc · ffg · -40 C · hold · rcbestfunc · tt · 25 C · typicalCorner names, temperatures and pairings are illustrative. Your foundry and signoff methodology define the real set.
Read it. Each amber box is one StarRC corner, an nxtgrd plus a temperature. Each blue box is a timing scenario, and it picks exactly one parasitic corner. C2 and C3 each feed two scenarios. Names, temperatures and pairings are illustrative; your foundry defines which nxtgrd corners exist and your signoff methodology decides which pairings are required.
RC corner Illustrative valuesnxtgrdTempStarRC outputUsed by scenarios
cworst_125<kit>/cworst.nxtgrd125<blk>.spef.cworst_125func setup, C-sensitive paths
rcworst_125<kit>/rcworst.nxtgrd125<blk>.spef.rcworst_125func setup, scan setup
cbest_m40<kit>/cbest.nxtgrd-40<blk>.spef.cbest_m40func hold, scan hold
rcbest_m40<kit>/rcbest.nxtgrd-40<blk>.spef.rcbest_m40func hold, R-sensitive paths
typ_25<kit>/typical.nxtgrd25<blk>.spef.typ_25typical, power

AResistance, capacitance and temperature

Interconnect corners exist because metal width, thickness and dielectric vary, and those move R and C in different directions. A corner that makes wires fat and close pushes capacitance up and resistance down; one that makes them thin pushes resistance up. Which corner is worst for a path depends on whether the path is dominated by wire capacitance or wire resistance, which is why kits commonly ship separate C-worst and RC-worst style corners. The exact names and what each one varies are defined by your foundry, so read the kit documentation rather than a generic article, this one included.

Temperature is separate. Wire resistance changes with temperature, and StarRC applies the nxtgrd derating only if OPERATING_TEMPERATURE is set, recording it in the SPEF header. The extraction temperature should match the temperature of the scenarios that use it. A 125 C timing scenario reading a 25 C extraction is timing the wires colder than the cells.

BSimultaneous multicorner extraction

StarRC can extract up to 15 corners in one run. You define all corners in a CORNERS_FILE, pick the ones to run with SELECTED_CORNERS, and one netlist per selected corner comes out, named <NETLIST_FILE>.<corner> with CORNER_NAME in the header. In SMC mode the nxtgrd files and temperatures in the corners file win, and specifying the nxtgrd in both places is an error. All corners must share the same layer stack structure.

StarRC: corners file (corners.smc) and selectionVerified
CORNER_NAME: cworst_125
TCAD_GRD_FILE: <kit>/cworst.nxtgrd
OPERATING_TEMPERATURE: 125
CORNER_NAME: rcworst_125
TCAD_GRD_FILE: <kit>/rcworst.nxtgrd
OPERATING_TEMPERATURE: 125
CORNER_NAME: cbest_m40
TCAD_GRD_FILE: <kit>/cbest.nxtgrd
OPERATING_TEMPERATURE: -40
* rcbest_m40 and typ_25 are defined the same way

* in the main command file
SIMULTANEOUS_MULTI_CORNER: YES
CORNERS_FILE: corners.smc
SELECTED_CORNERS: cworst_125 rcworst_125 cbest_m40

CA practical naming convention

Let the tool name the corner and do not rename files by hand. StarRC already appends the corner name, and ICC2 write_parasitics names its files <base>.<parasitic_tech>_<temperature>.spef and writes a .spef_scenario file listing the scenarios each file belongs to. What I would add is a small manifest per run: block, design label, netlist file, corner, nxtgrd path, temperature, StarRC version and date. When a scenario script reads a SPEF, it should read it through that manifest, so a scenario cannot quietly pick up the wrong corner.

6
SECTION 6

What happens inside StarRC

StarRC turns shapes into conductors, conductors into R and C using the nxtgrd, then decides what to keep and how much to reduce. Two defaults in that chain matter more than the rest.

Figure 7: What StarRC does between reading and writing
Eight steps. Two of them, capacitance and the coupling decision, are where the technology file and your settings shape the numbers.
1 Read layoutnets, pins, skip cells2 Map layersdb layer to nxtgrd layer3 Build conductorsper net; opens, shorts4 Resistancesheet R, vias, temperature5 Capacitancepattern match to nxtgrd6 Coupling decisionkeep or ground each Cc7 Reductionkeeps P2P R and total C8 Write outputsGPD, SPEF, star_sum, .sumInputs: design database, mapping file, nxtgrd + temperature per corner, command fileAmber steps are the ones driven by the nxtgrd models and by the coupling settings in the command file.
Read it. StarRC reads the layout and its connectivity, maps every database layer to an nxtgrd layer, builds conductors per net, computes resistance, then computes capacitance by pattern matching the layout against structures pre-simulated in the nxtgrd. It decides which coupling capacitors to keep, reduces the network, and writes the GPD plus any netlists and reports.
StepWhat happensWhat you control
1 Read layoutShapes, nets, pins and skip cells come from the database. By default lower-level cells are skip cellsNDM_DATABASE/BLOCK or LEF_FILE/TOP_DEF_FILE, SKIP_CELLS, NETS
2 Map layersEach database layer is tied to an nxtgrd layer; unmapped layers are errors in LEF/DEFMAPPING_FILE with conducting_layers and via_layers
3 Build conductorsPer-net conductor groups. Shapes with the same net but no physical connection become separate resistively connected groups (opens); touching shapes of different nets are potential shortsReports: opens.sum, shorts_all.sum
4 ResistanceSheet resistance and via resistance from the nxtgrd, optionally overridden in the mapping file, derated for temperatureOPERATING_TEMPERATURE, mapping file rpsq / RPV
5 CapacitancePattern matching against the nxtgrd; fill handled per settingTCAD_GRD_FILE, METAL_FILL_POLYGON_HANDLING
6 Coupling decisionEach coupling capacitor is kept or grounded (Figure 8)COUPLE_TO_GROUND, COUPLING_ABS_THRESHOLD, COUPLING_REL_THRESHOLD
7 ReductionShrinks the network while preserving point-to-point resistance and total net capacitanceREDUCTION
8 Write outputsGPD by default; SPEF only if asked; summary and report filesNETLIST_FORMAT, NETLIST_FILE, STAR_DIRECTORY, SUMMARY_FILE
Figure 8: How StarRC decides whether a coupling capacitor survives
By default every coupling capacitor is grounded. For SI you have to turn that off, and then the thresholds decide.
Extracted Ccbetween nets X and YCOUPLE_TO_GROUND?default YESGrounded on both netsscaled by COUPLING_MULTIPLIER (default 1.0)Cc < ABS (3e-15 F) AND Cc / Ct < REL (0.03)Ct is each net's total C; defaults shownCOUPLING_THRESHOLD_OPERATION: ORturns the AND into ORyes: groundedno: kept as Cc in SPEFYESNO
Read it. With COUPLE_TO_GROUND: YES, the default, all coupling capacitors become ground capacitance, scaled by COUPLING_MULTIPLIER. With NO, a coupling capacitor is grounded only if it is smaller than COUPLING_ABS_THRESHOLD (default 3e-15 F) and its ratio to each net's total capacitance is below COUPLING_REL_THRESHOLD (default 0.03); otherwise it stays as a coupling capacitor.

Two defaults in this picture change what your SPEF can be used for. With COUPLE_TO_GROUND left at YES, the SPEF has no coupling capacitors, so PrimeTime SI has nothing to work with, however carefully you set it up. And REDUCTION defaults to YES, while StarRC recommends NO_EXTRA_LOOPS when PrimeTime is the consumer.

AAn illustrative run configuration

Every command in this file is a real StarRC command used the way the tool intends. The values in angle brackets are placeholders, and the fill setting has to match how fill was inserted in your flow, so treat this as a shape to start from, not a recipe. Lines starting with * are comments.

StarRC command file: star_cmdVerified
* design (route A)
NDM_DATABASE: <design_lib>
BLOCK: <top_block>
MAPPING_FILE: <starrc_layer.map>
* corners
SIMULTANEOUS_MULTI_CORNER: YES
CORNERS_FILE: corners.smc
SELECTED_CORNERS: cworst_125 rcworst_125 cbest_m40
* extraction
EXTRACTION: RC
COUPLE_TO_GROUND: NO
REDUCTION: NO_EXTRA_LOOPS
* fill: must match your fill methodology
METAL_FILL_POLYGON_HANDLING: FLOATING
* outputs
NETLIST_FORMAT: SPEF
NETLIST_FILE: <top_block>.spef
STAR_DIRECTORY: star
SUMMARY_FILE: ./reports/<top_block>.star_sum
NUM_CORES: 8
Running it, and useful companionsVerified
StarXtract star_cmd
StarXtract -tech_out star_cmd                        # list options with effective defaults
StarXtract -convert_gpd_to_spef <gpd_dir> <out.spef>  # SPEF later, from the GPD
StarXtract -compare_parasitics <test> <reference>     # compare two parasitic sets
Site-specific wrapperIllustrative pseudocode
# job submission, license queue and run directory layout are local choices
submit --cores 8 --mem <N>G -- StarXtract star_cmd
archive_manifest block=<blk> label=<label> netlist=<blk>.v corners=<list>
7
SECTION 7

Run-quality checks and summary reports

Successful completion is not proof of a correct extraction. The reports tell you what StarRC worked around without stopping, and you have to read them before the SPEF goes to STA.

A clean exit only tells you StarRC did not crash. StarRC does not need an LVS-clean layout for extraction to complete, open nets are bridged so timing tools can still calculate delays, fill is ignored unless you say otherwise, and coupling is grounded unless you say otherwise. Each of those produces a SPEF that looks perfectly normal.

AValidation checklist

1
Summary file. Read <block>.star_sum for every error and warning, plus elapsed time, CPU time and peak memory.Warnings are not noise here. Group them and explain every group.
2
Corner selection. Confirm each output file carries the intended CORNER_NAME and that the list matches SELECTED_CORNERS.A missing corner means a scenario is reading something else.
3
Input consistency. The block name and label, library path and save time match what was released for signoff.Same check for DEF and LEF dates in route B.
4
Extraction coverage. Net count against the netlist, the NETS setting, and translate.sum for skipped cells.Any NETS line restricts extraction to the listed nets.
5
Opens and shorts. opens.sum and shorts_all.sum in the star directory.Each entry needs a reason. See Section 9.
6
Via connectivity. vias.sum lists vias with one or no connection.Often the same root cause as an open.
7
Metal fill. With REPORT_METAL_FILL_STATISTICS: YES, check polygon counts per layer in mf_statistics.sum.Zero fill on a layer that should have fill is a finding. The report costs runtime.
8
Units. Header *T_UNIT, *C_UNIT, *R_UNIT as expected by whoever merges or compares files.Factor-of-1000 surprises start here.
9
Output freshness. SPEF timestamps later than the design save and the netlist.Check this in the scenario scripts, not in the run directory.
10
Suspicious values. Resistors of exactly 0.01 ohm, which is the value StarRC uses for shorting resistors, nets with near-zero total capacitance, and the worst entries of the coupling report.COUPLING_REPORT_FILE lists nets sorted by Cc/Ct. Use it to find outliers, not to set a pass line.
11
Correlation. Compare against ICC2 extraction or the previous run with StarXtract -compare_parasitics.A sudden jump between two runs of a stable design needs an explanation.

BRun-health summary, walked through

I do not have a real StarRC summary to show, and the layout of the summary file changes between releases, so this is a dashboard of the things worth pulling out of a run, not a copy of the real report. Every number in it is illustrative and none of them is a threshold; whether 3 bridged opens is acceptable depends on which nets they are.

Errors in star_sum
0
Clean

Warning sign: Any error at all. Some runs finish with errors in a sub-step.

Next: Open the summary, not just the exit status.

Warnings in star_sum
37
Review

Warning sign: Categories you have not seen before on this block.

Next: Group by message ID, compare with the last good run.

Corners written
5 / 5
Clean

Warning sign: Fewer files than selected corners.

Next: Check each header for CORNER_NAME.

Nets extracted
24,806
Clean

Warning sign: Count far from the netlist net count.

Next: Check NETS, skip cells, power nets.

Open nets bridged
3
Act

Warning sign: Any signal net, and all clock nets.

Next: Find each in opens.sum and fix the layout.

Shorts reported
1
Act

Warning sign: Signal to signal, or signal to fill.

Next: Find it in shorts_all.sum and in check_lvs.

Vias with 1 or 0 connections
12
Review

Warning sign: Vias on signal nets, not dummy structures.

Next: Cross-check vias.sum against opens.sum.

Fill polygons, M4
0
Review

Warning sign: Zero on a layer where fill was inserted.

Next: Check fill source and handling setting.

8
SECTION 8

Parasitic annotation and missing nets or pins

A good extraction does not guarantee a good annotation, and the check that matters is the one PrimeTime runs against its own netlist.

Extraction coverage and annotation coverage are two separate questions. The first is whether StarRC produced parasitics for every net it should have. The second is whether PrimeTime attached those parasitics to the nets and pins in the netlist it loaded. A perfect StarRC run can still give you a PrimeTime session with nets that have no RC at all.

Figure 9: Extraction coverage versus annotation coverage
Nets can drop out at two different boundaries, and each boundary has its own report.
EXTRACTION COVERAGE (StarRC side)ANNOTATION COVERAGE (PrimeTime side)signal nets in layout24,812extracted and written24,806bridged opens (0.01 ohm)3still written, look normalexcluded by NETS list6NETS restricts extractiondriver pins in netlist24,809RC network annotated24,797partially annotated5reverts to wire loadnot annotated7for example a name mismatchCounts are illustrative. A clean extraction summary says nothing about the right-hand column, and the reverse is also true.
Read it. On the left, StarRC writes parasitics for nearly every net, but three of them are bridged opens that look normal and six were excluded by a NETS list. On the right, PrimeTime annotates most driver pins, but five nets are only partly annotated and seven not at all. The counts are illustrative; the point is that the two columns are checked with different reports.

AChecking annotation in PrimeTime

read_parasitics checks the nets it annotates and runs report_annotated_parasitics -check by itself. When you read several files, for example block SPEFs plus a top-level SPEF, read them all and then run the check once explicitly, because that report covers the whole design and not just the last file. The report lists pin types with Total, RC pi, RC network and Not Annotated columns.

PrimeTime: read, check, and keep coupling for SIVerified
set_app_var si_enable_analysis true
# after search_path and link_path point at the libraries for this corner
read_verilog <block>.v
current_design <top>
link_design
read_parasitics -syntax_only -keep_capacitive_coupling <block>.spef.rcworst_125
read_parasitics -keep_capacitive_coupling -format spef <block>.spef.rcworst_125
report_annotated_parasitics -check
PrimeTime: hierarchical files, then one checkVerified
read_parasitics A.spef -path [all_instances -hierarchy BLKA]
read_parasitics top.spef
report_annotated_parasitics -check
PrimeTime: listing the nets that are not annotatedIllustrative pseudocode
report_annotated_parasitics -list_not_annotated

This option appears in scripts you may inherit, but I could not confirm it for this page, so check it with man report_annotated_parasitics in your version before you put it in a script. The -syntax_only read is the supported way to check that coupling capacitors are symmetric before the real read. Also check the parasitics log, parasitics_command.log by default, and remember that repeated messages are limited by sh_message_limit, so the count you see on screen is not always the full count.

BWhy nets and pins go missing

CauseWhat you seeWhere to look
Naming mismatchNets not annotated even though they are in the SPEFCompare the netlist name with the SPEF name map entry; escaping, bus brackets, VHDL versus Verilog naming
Hierarchy and stitchingBlock nets annotated, top-level nets partly annotated; annotations on terminal nodes rejected with PARA-114The -path used for each block file and the order of reads
Different netlistA cluster of not-annotated nets around ECO cellsThe netlist and the SPEF must come from the same block state
Excluded netsSpecific nets never appear in the SPEFNETS in the StarRC command file
Ideal netsNets you set ideal in the constraintsThey are timed ideal by your choice; do not count them as covered by parasitics
Incomplete extractionNet present but the RC network is incompletePrimeTime falls back to wire load models for such nets

CHow serious is a missing annotation

There is no blanket safe-to-ignore list. Here is how I would sort them, with the condition that has to be true before anything goes in the low column.

IssueRiskOnly lower risk ifInvestigation required
Clock net not annotated or partialHighNever lower. Clock RC sets skew and latencyFix the source and re-read
Data net on a critical or near-critical pathHighNever lower while it is near criticalFind the cause in the table above
Net with bridged open (0.01 ohm resistor)HighThe open is proven to be an extraction artefact, not a layout openSection 9 sequence
Scan or test-only net in functional timingMediumThe net is not timed in the scenario, and is covered in the test scenarioConfirm the scenario constraints
Tie-off or constant netLowIt really never switches and drives no timing arc that mattersConfirm in the netlist and constraints
Net inside a skip cell with its own timing modelLowThe model already includes its internal parasiticsConfirm the model source
9
SECTION 9

Shorts and opens

Extraction completes on broken layouts and bridges opens by default. Connectivity is proven by LVS and physical checks, never by inspecting a SPEF.

Opens and shorts are layout problems, and extraction sits downstream of layout. StarRC will still finish on a layout with opens or shorts; it just tells you about them. The risk is in what it does with an open by default.

Figure 10: An open and a short, and what each looks like downstream
In both cases the SPEF looks complete and the timing report looks normal.
1 OPEN: ONE NET, TWO PIECES2 SHORT: TWO NETS TOUCHINGU1/ZU2/Ano via hereRCG 1RCG 20.01 ohminserted by StarRCnet Anet Boverlap on M2M2, horizontalM3, verticalcell pinSPEF: N7 present, joined by a 0.01 ohm resistorSTA: a normal-looking delay on N7Report: opens.sum lists N7 with 2 RCGsSilicon: U2/A is not drivenSPEF: nothing in it is a reliable short flagSTA: the netlist has no short, so nothing failsReport: shorts_all.sum lists A and B on M2Silicon: two nets tied together
Read it. Panel 1: net N7 runs on M2 then M3, but the via between them is missing. StarRC finds two resistively connected groups for the same net and, by default, joins them with a 0.01 ohm shorting resistor so delays can still be calculated. It lists the net in opens.sum. Panel 2: net B jogs up on M2, against the M2 horizontal preferred direction, and lands on the track net A uses. StarRC lists the overlap in shorts_all.sum. The ledger under each panel is the point: the SPEF and STA look fine, the silicon does not.

AWhich check belongs in which tool

CheckToolCatchesDoes not prove
check_routesICC2Routing DRC, open nets, antenna, voltage-area violations; up to 200 opens reported by defaultSignoff DRC or LVS
check_lvsICC2Shorts, opens and floating routes in ICC2's own view of the layoutLayout versus the source schematic at signoff quality
Signoff LVSIC Validator, CalibreLayout against the netlist, device and connectivity levelAnything about parasitic values
opens.sum, shorts_all.sum, vias.sumStarRCWhat extraction noticed while building conductorsThat the layout is clean. It is a side report, not LVS
report_annotated_parasitics -checkPrimeTimeWhether parasitics are attached to the netlistThat the attached parasitics describe good metal

A SPEF cannot tell you the layout is free of opens and shorts, because a bridged open is written as a normal resistor and the SPEF has no concept of shapes touching that should not. The only question a SPEF answers is what RC the extractor built, and whether that is the RC of a correct chip is a question for LVS.

ICC2: connectivity checks before extractionVerified
check_routes -open_net true -drc true
check_lvs -checks {short open floating_routes} -max_errors 0
StarRC: make shorts reporting more completeVerified
ENHANCED_SHORT_REPORTING: YES
REPORT_METAL_FILL_STATISTICS: YES

BA practical debug sequence

  1. Start from the StarRC reports. List every net in opens.sum and shorts_all.sum, and every via in vias.sum.
  2. Run check_routes and check_lvs in ICC2 on the same saved block. If ICC2 sees the same open or short, it is a layout problem and you fix it in ICC2.
  3. If ICC2 does not see it, look at what StarRC read and ICC2 did not check the same way: fill shapes, blockages, skip-cell pins, layers that are mapped differently. ENHANCED_SHORT_REPORTING widens what the shorts report includes.
  4. For shorts to fill, check the fill source and the handling mode before touching routing.
  5. Fix, save_block, re-extract. Do not edit the SPEF.
  6. Re-run signoff LVS on the final layout. Extraction reports do not replace it.
  7. Re-annotate in PrimeTime and confirm the affected nets now annotate fully and carry no 0.01 ohm resistors.
10
SECTION 10

Reading a SPEF file

Once you can draw a SPEF as a schematic, most parasitic questions become arithmetic. The one convention to be careful with is where coupling capacitance is counted.

Here is a small SPEF I wrote by hand so every number can be traced. It has two nets. n_data is driven by u_drv/Z and fans out to two loads; sel comes in from a top-level input port and drives one load. The two nets run next to each other in one place, so there is one coupling capacitor between them. The header layout follows the form StarRC writes, and the values are illustrative.

spef_demo.spefIllustrative values
*SPEF "IEEE 1481-1999"
*DESIGN "spef_demo"
*DATE "illustrative"
*VENDOR "pdverse example"
*PROGRAM "hand-written"
*VERSION "1.0"
*DESIGN_FLOW "PIN_CAP NONE" "NAME_SCOPE LOCAL"
*DIVIDER /
*DELIMITER :
*BUS_DELIMITER []
*T_UNIT 1 NS
*C_UNIT 1 FF
*R_UNIT 1 OHM
*L_UNIT 1 HENRY

*NAME_MAP
*1 n_data
*2 sel
*3 u_drv
*4 u_ld1
*5 u_ld2
*6 u_agl

*PORTS
*2 I

*D_NET *1 2.51
*CONN
*I *3:Z O *C 12.60 40.20
*I *4:A I *C 88.40 40.20
*I *5:A I *C 60.10 22.80
*CAP
1 *3:Z 0.21
2 *1:1 0.84
3 *1:2 0.66
4 *4:A 0.18
5 *5:A 0.27
6 *1:2 *2:1 0.35
*RES
1 *3:Z *1:1 12.4
2 *1:1 *1:2 18.6
3 *1:2 *4:A 9.3
4 *1:1 *5:A 21.7
*END

*D_NET *2 1.53
*CONN
*P *2 I *C 0.00 55.00
*I *6:A I *C 92.00 55.00
*CAP
1 *2 0.30
2 *2:1 0.72
3 *6:A 0.16
4 *2:1 *1:2 0.35
*RES
1 *2 *2:1 15.2
2 *2:1 *6:A 11.8
*END
Figure 11: The SPEF above, drawn as an RC network
Every resistor and capacitor in the file is one symbol here, labelled with its SPEF line.
sel*2RES 1 15.2*2:1RES 2 11.8*6:Au_aglCAP 1 0.30CAP 2 0.72CAP 3 0.16u_drv*3:ZRES 1 12.4*1:1RES 2 18.6*1:2RES 3 9.3*4:Au_ld1RES 4 21.7*5:Au_ld2CAP 1 0.21CAP 2 0.84CAP 3 0.66CAP 4 0.18CAP 5 0.27n_data CAP 6 = sel CAP 40.35 fF, *1:2 to *2:1D_NET TOTALSn_data (*1)ground 2.16coupling 0.35total 2.51 fFsel (*2)1.18 + 0.35 = 1.53R in ohms, C in fF, from the illustrative SPEF above. A dot on a wire joins that element to the node the wire belongs to.
Read it. The top row is net sel (*2), the middle and bottom rows are net n_data (*1). Nodes written *1:1 and *1:2 are internal nodes of net 1; *3:Z means pin Z of instance *3, which the name map says is u_drv. The amber capacitor is the single coupling capacitor, listed once in each net.

ALine by line

LinesMeaning
*SPEF ... *VERSIONStandard version, design name and who wrote the file. Useful for provenance, ignored for numbers.
*DESIGN_FLOW "PIN_CAP NONE"Pin capacitance is not included in the capacitance values. PrimeTime takes pin capacitance from the libraries in any case.
*DIVIDER / *DELIMITER : *BUS_DELIMITER []Hierarchy separator, the pin delimiter used in *3:Z, and bus brackets. These must agree with how the netlist names things.
*T_UNIT 1 NS *C_UNIT 1 FF *R_UNIT 1 OHMEvery value below is in these units. 0.84 means 0.84 fF.
*NAME_MAP *1 n_dataIndex to real name. Nets and instances share the same map; *3 is an instance, *1 is a net.
*PORTS *2 ITop-level port sel, direction input.
*D_NET *1 2.51Start of net n_data and its total capacitance, 2.51 fF.
*CONN *I *3:Z O *C ...Connection points. *I is an instance pin with its direction (O output drives, I input loads) and optional *C coordinates. *P in net 2 is a port.
*CAP 1 *3:Z 0.21Ground capacitor: one node and a value.
6 *1:2 *2:1 0.35Coupling capacitor: two nodes on two different nets and a value.
*RES 1 *3:Z *1:1 12.4Resistor between two nodes of the same net, in ohms.
*ENDEnd of this net.

BCapacitance accounting and the coupling convention

The total on *D_NET is the sum of every capacitor listed under that net, ground and coupling together. For n_data that is 0.21 + 0.84 + 0.66 + 0.18 + 0.27 = 2.16 fF of ground capacitance plus 0.35 fF of coupling, 2.51 fF. For sel it is 1.18 + 0.35 = 1.53 fF. This follows the IEEE 1481 convention used in SPEF files; the *DESIGN_FLOW line of your own file tells you what is and is not in the totals, so read it before comparing numbers across tools.

Figure 12: Where the coupling capacitor is counted
The same 0.35 fF appears in both nets, so adding the two totals double counts it.
n_data *D_NET total2.51 fFground 2.16Cc 0.35sel *D_NET total1.53 fFground 1.18Cc 0.35adding both totals4.04 fFcounted twicereal capacitance3.69 fFonce
Read it. Each net's total is correct for that net, because the coupling capacitor loads both of them. But if you add the two totals to get "capacitance in the design" you get 4.04 fF, while only 3.69 fF of real capacitance exists. The capacitor is counted once per net that it touches.

The coupling capacitor appears twice by design, once as line 6 of n_data and once as line 4 of sel, with the same two nodes and the same value. PrimeTime expects this symmetry and can check it with a -syntax_only -keep_capacitive_coupling read. Without SI enabled, PrimeTime splits coupling capacitors to ground on each net, which is the same total but no crosstalk.

11
PANEL

Risk-ranked troubleshooting

Sorted by how much damage the problem does if nobody notices it, not by how often it happens.

SymptomLikely causeRiskWhat to do
SI enabled but crosstalk delta is zero everywhereSPEF written with COUPLE_TO_GROUND: YES (the default), or read without -keep_capacitive_couplingHighRe-extract with COUPLE_TO_GROUND: NO and read with -keep_capacitive_coupling
Setup looks better than the previous run after a small ECOOld SPEF reused, or a scenario picked up a best-case cornerHighCheck file dates and CORNER_NAME headers per scenario
Nets reported not annotatedNetlist and SPEF from different block states, or naming differencesHighRewrite both from one saved block; compare names
Net has a 0.01 ohm resistorStarRC bridged an openHighFind it in opens.sum; fix the layout; re-extract
Entries in shorts_all.sumReal short, fill short, or short to a blockage or skip cellHighCross-check with check_lvs; fix; re-run signoff LVS
No SPEF in the run directory, run was cleanOnly the GPD was writtenMediumAdd NETLIST_FORMAT: SPEF and NETLIST_FILE, or convert the GPD
Timing looks optimistic on long nets near dense fillFill ignored by defaultMediumSet METAL_FILL_POLYGON_HANDLING per your fill methodology
Wire delay looks low in hot scenariosExtraction at 25 C default temperatureMediumSet OPERATING_TEMPERATURE per corner
Macro-internal nets missingMacro treated as a skip cell by defaultMediumNegate it in SKIP_CELLS if it has no timing model of its own
StarRC stops on a LEF layer errorLayer in LEF not mapped to the nxtgrdLowComplete the mapping file. The run stopped, so nothing wrong was used
SPEF values differ from another tool by exactly 1000Different *C_UNIT in the headersLowCompare headers before comparing numbers
12
PANEL

Ready for signoff analysis?

If any line below is still open, the timing report is not signoff quality yet, however clean it looks.

1
The design that was extracted is the design being signed off.Same saved block and label for StarRC and for the netlist PrimeTime reads.
2
Every scenario reads the corner it should.Checked from the CORNER_NAME header of the file actually loaded.
3
Every RC corner used the right temperature.OPERATING_TEMPERATURE per corner matches the scenarios that use it.
4
Fill was extracted the way it was inserted.Fill source present, handling mode set, statistics non-zero on filled layers.
5
Coupling was kept where SI needs it.COUPLE_TO_GROUND: NO in StarRC, -keep_capacitive_coupling and SI enabled in PrimeTime.
6
No unexplained entries in opens.sum, shorts_all.sum or vias.sum.And no 0.01 ohm resistors left on signal or clock nets.
7
Signoff LVS is clean on the same layout.Extraction reports do not replace it.
8
Annotation is complete.report_annotated_parasitics -check run once after all files are read, with every not-annotated entry explained.
9
Nothing was completed or scaled to hide a gap.No complete_net_parasitics on nets with errors; no correlation scaling left in a signoff run.
10
No physical change since extraction.If there was, extract again before you believe the timing.
13
PANEL

Interview questions

Short answers with the follow-up that usually comes next, plus the common wrong answer to avoid.

Q1BASICWhat is in a SPEF file, and what is not?
Per-net RC and connectivity for one extraction corner: units, name map, ports, and for each net the total capacitance, connection points, ground and coupling capacitors and resistors. No cell delays, no library pin capacitance, no constraints and no activity.
Follow-up. Where does PrimeTime take pin capacitance from? The libraries. By default it assumes the SPEF excludes pin capacitance and ignores any that is there.
The trap. Saying the SPEF contains delays. It contains what the delay calculator needs to compute them.
Q2BASICWhy can't you use TLUPlus instead of a SPEF for STA?
TLUPlus is a process model with no wires in it. You get parasitics only by applying a model to a specific layout. PrimeTime needs the design-specific result.
Follow-up. Which file does StarRC read instead? The nxtgrd, and for signoff it should be the one supplied by the foundry.
The trap. Mixing up TLUPlus and nxtgrd. TLUPlus is for ICC2 and similar tools; StarRC uses nxtgrd and does not read TLUPlus.
Q3BASICWhat is the difference between ground and coupling capacitance?
Ground capacitance is to fixed-potential nets and substrate. Coupling capacitance is to other signal nets, and it is what crosstalk analysis needs.
Follow-up. What happens to coupling capacitors when PrimeTime reads them without SI enabled? They are split to ground.
The trap. Forgetting that StarRC grounds all coupling by default, so SI has nothing to work with unless you change it.
Q4FLOWWhy is ICC2's write_parasitics output not a signoff SPEF?
It is ICC2's implementation extraction using TLUPlus. Signoff uses StarRC with the foundry nxtgrd. They should correlate but they are different engines and models.
Follow-up. What must you run in ICC2 before write_parasitics? update_timing, so the extraction is current.
The trap. Saying they are identical because the file format is the same.
Q5FLOWWhat does StarRC need to read an ICC2 design directly?
NDM_DATABASE with the library name and BLOCK with the block name, plus the mapping file and nxtgrd. The block must be saved first. Only gate-level is supported this way.
Follow-up. What is the fallback when NDM cannot be used? LEF/DEF, with DEF versions 5.2 to 5.8 supported by StarRC 2022.12.
The trap. Assuming DEF export is always required.
Q6MMMCDo you need one SPEF per timing scenario?
No. One per extraction corner, meaning nxtgrd plus temperature. Scenarios with different modes at the same corner share it.
Follow-up. How does StarRC name the files in a multi-corner run? <NETLIST_FILE>.<corner>, with CORNER_NAME in each header.
The trap. Forgetting that the extraction temperature must match the scenario temperature.
Q7DEBUGStarRC finished with no errors. Is the SPEF correct?
Not proven. It completes on non-LVS-clean layouts, bridges opens with 0.01 ohm resistors, ignores fill and grounds coupling by default. You check the summary and the .sum reports, the corners and the annotation.
Follow-up. Which reports do you open first? The <block>.star_sum summary, then opens.sum and shorts_all.sum.
The trap. Treating exit status as validation.
Q8DEBUGPrimeTime says some nets are not annotated. What do you check?
Whether the netlist and SPEF came from the same block state, naming and hierarchy rules, the read order and -path for block files, whether the nets were excluded from extraction, and whether they are ideal by constraint.
Follow-up. Which command lists the annotation status per net? report_annotated_parasitics -check.
The trap. Using complete_net_parasitics to make the report clean.
Q9DEBUGHow do you find opens using extraction?
opens.sum in the star directory, and resistors of exactly 0.01 ohm in the netlist. Then confirm in ICC2 check_routes and check_lvs and fix in layout.
Follow-up. Why 0.01 ohm? It is easy to recognise in the netlist, and it lets timing tools still compute delays on the open net, which is exactly why the SPEF alone hides the open.
The trap. Believing the SPEF proves the net is connected because it has an RC network.
Q10SPEFNet A has total 2.51 fF, net B has 1.53 fF, and they share a 0.35 fF coupling capacitor. What is the real capacitance of the pair?
3.69 fF. The coupling capacitor is listed in both nets and counted in both totals, so the sum 4.04 fF counts it twice.
Follow-up. Where in the SPEF do you see the coupling capacitor twice? In the *CAP section of each D_NET, once with each net's node first.
The trap. Adding the D_NET totals.

Free interview practice

Practise interview questions on this topic

Premium libraries

Go deeper with the pdVerse libraries

Complete pdVerse LibraryAll eight collections: every library above plus the Low Power Tool Guide, in one purchase.₹1,237