Import detailed parasitics¶
Import a signal-net extraction with its matching mapped netlist, Liberty corner and constraints. The extraction corner is explicit; missing annotation never falls back to ideal wires.
rusteda init --workspace work --format json
rusteda import --workspace work --base-rev rev0 \
--lib cells.lib --corner tt --netlist routed.v --sdc timing.sdc \
--spef routed.spef.gz --spef-corner tt --format json
ruststa run --workspace work --base-rev rev1 --corner tt \
--precision f64 --max-paths 8 --max-state-gib 1 --format json
ruststa report --workspace work --rev rev2 --section summary \
--section checks --section unconstrained --format json
ruststa check --workspace work --base-rev rev2 --method full --format json
Use each returned revision for the next mutation. Plain .spef and gzip input
are accepted. Gzip is detected by its bytes; CRC, truncation and decoded-size
errors reject the import. PARASIT v2 stores the canonical decoded source of
every corner with its budgets and source identity.
Several corners take one extraction each. Pair --spef and --spef-corner in
order; a later import adds or replaces corners and keeps the others while the
netlist is unchanged. Each analyzed corner uses its own extraction, and a corner
without one is an error (T0070):
rusteda import --workspace work --base-rev rev0 \
--lib tt.lib --corner tt --lib ss.lib --corner ss --lib ff.lib --corner ff \
--netlist routed.v --sdc timing.sdc \
--spef nom.spef --spef-corner tt --spef max.spef --spef-corner ss \
--spef min.spef --spef-corner ff --format json
ruststa run --workspace work --base-rev rev1 --require-wire-model spef_rc \
--max-state-gib 1 --format json
--require-wire-model spef_rc rejects a revision that lost its parasitics, for
example after a netlist-only import, instead of timing it with ideal wires
(T0135). spef_compression,
spef_source_bytes and spef_decoded_bytes describe the transport.
Supported data¶
The reader supports detailed D_NET, NAME_MAP, port/pin connections, scalar
ground and coupling capacitances, and resistances. It converts NS/PS, PF/FF and
OHM/KOHM to the engine's ns, pF and kOhm. Dividers, bus delimiters and escaped
names are resolved against the netlist. Names, directions and all required
connections must agree.
Reduced nets, inductance, value triplets, included pin capacitances and unknown
semantic attributes are explicit errors. The timing consumer contracts
zero-resistance edges, solves resistor loops (parallel resistors included) on the
nodal conductance system and notes them (T0152), and joins a part of a net
that has no resistor path to its driver to the driver with zero resistance:
its capacitance stays on the net, its sinks get no wire delay, and warning
T0151 names the net and the part. Symlinks, FIFOs and devices are not accepted as source files.
The default budgets are:
| Resource | Default |
|---|---|
| Encoded and decoded source, each | 32 MiB |
| Nets | 100,000 |
| RC nodes / name-map entries | 500,000 |
| Elements | 1,000,000 |
| Name storage | 16 MiB |
The import options are --max-spef-mib, --max-rc-nets, --max-rc-nodes,
--max-rc-elements and --max-rc-name-mib. Each has an absolute ceiling of
eight times its default. Raising parser caps does not remove the independent
ruststa run --max-state-gib limit. Estimate actual memory before larger runs.
Timing interpretation¶
The reported model is wire_model=spef_rc, parasitics=spef,
delay_calculator=nldm_ceff_ramp. It includes physical pin and explicit
port capacitances, a three-moment driving-point pi, charge-matched effective
load and a finite-ramp Thevenin driver. The driver resistance is an explicit
NLDM sensitivity proxy. Receiver threshold delay and slew use the Elmore
moment as a one-pole approximation. Raw first moments are not voltage crossing
times. Coupling is grounded at factor 1; this is not CCS or crosstalk analysis.
See the waveform definition.
The deterministic CPU waveform pass prepares 128-byte per-arc records for both CPU and CUDA propagation. --max-state-gib bounds these arrays and conservative numeric work; excess is T0078. All numeric iterations have fixed ceilings and charge residuals are checked. Effective-load charge is averaged over the full linearized output transition; the source ramp used by the wires is fitted separately at that load. A changed load re-evaluates neighboring arcs.
Explicit set_propagated_clock on primary clocks uses cell and wire delay in
the clock network. Generated clocks, unsupported internal clock sources and
clock meshes are not silently treated as ideal. Scope reports clock_model
and keeps CPPR off.
The independent checker has no extracted-RC implementation and therefore
reports undecided for that scope. --method full checks consistency with a
full engine run. The verification report
separates independent transient equations, real-PDK input coverage and the unchanged
1 ps gate against a reference tool's default model. A successful import or run
does not mean the design meets setup/hold or signoff requirements.
Extracted waveform timing uses explicit port transitions or the compiled
set_driving_cell model, including its input-transition annotations. Driving-cell
ports follow the same characterized driver and physical-sink threshold model;
their displayed time reference can differ from a reference tool's pre-driver
input-delay row. Physical sink arrivals remain compared.
Topology edits after extraction¶
whatif can resize a cell while retaining the routed net topology and its SPEF.
Inserting a buffer creates a new net and moves sink pins. The original SPEF no
longer describes those connections, so the candidate is rejected with T0070;
the disk workspace and its parasitics remain unchanged. Other independent
candidates, such as a resize, can still be evaluated in the same request.
To evaluate a physical buffer insertion, apply the netlist edit in the physical
flow, place and route it, re-extract the changed topology, and import the new
netlist and matching SPEF together. No inferred split of the old RC network or
silent ideal-wire fallback is supplied by whatif.