Skip to content

Extracted RC timing

The detailed RC subset of IEEE 1481 SPEF uses an explicit extraction corner, grounded coupling (factor 1), physical pin capacitances and bounded tree reductions; version 0.4.3 solves resistor loops on the nodal conductance system and joins components without a resistor path to their driver (STA-REQ-0730 to STA-REQ-0732). Version 0.3 replaces the original lumped/first-moment-only timing interpretation with effective-load and threshold/slew models. No crosstalk, CCS or propagated-clock signoff claim is made. Internal units are ns, pF and kOhm. Version 0.4 binds one source per corner in a PARASIT v2 table (RCLI-REQ-0075, STA-REQ-0820); version 1 tables remain readable.

STA-REQ-0700: rusteda import --spef FILE --spef-corner NAME atomically commits a PARASIT v1 mmap container, source identity and parser budgets. It requires a netlist and libraries for that corner. All mutations retain workspace locking and --base-rev conflict checks. Changing the netlist drops its parasitics; changing parasitics invalidates timing and check tables. STA-REQ-0701: Parse detailed D_NET, name maps, escaped names, port/pin connections, ground/coupling capacitances and resistors. Convert explicit units to engine units. Reject unknown semantic sections, non-finite/negative values, value triplets, duplicate records, unresolved names and malformed structure. Coordinate, date, vendor and driving-cell metadata do not affect this model. A connection load attribute is rejected to avoid double counting Liberty pins. STA-REQ-0702: Ground each inter-net coupling capacitor once on the local endpoint in each net's section, report this approximation, and verify declared total capacitance against the sum within max(1e-8 pF, 1e-4 relative). Reject same-net coupling, inductance and reduced-net sections. STA-REQ-0732: Bind every SPEF connection to the imported design and verify its direction and net (replaces STA-REQ-0703). Require complete annotation of driven, loaded signal nets and exactly one driver. Contract zero-resistance edges; solve resistor loops (STA-REQ-0730) and join components without a resistor path to the driver (STA-REQ-0731) instead of rejecting the net. Never substitute ideal or estimated wires for missing extracted data, and never drop a connection or a capacitance of the net. STA-REQ-0704: Add transition/bound-specific pin and port capacitances at physical RC nodes. Compute first moments by iterative subtree/postorder and preorder reduction, then evaluate the current RC waveform model. Report wire_model=spef_rc, parasitics=spef, delay_calculator=nldm_ceff_ramp and coupling=grounded_factor_1. Report physical clock source identities; a flow may refuse ideal-clock results for sequential timing. STA-REQ-0705: Enforce configurable input, net, node, element and name-byte caps before allocation. Tree passes are O(V+E) after bounded canonical sorting and zero-R union-find; no paths are enumerated, and the RC state is included in the corner state budget. Arithmetic overflow and non-finite RC products are structured input errors. Share parsed immutable parasitics across analysis corners using Arc. STA-REQ-0706: Full and incremental analyses use identical parasitic data; changed parasitics force a full update. An independent-checker mode without RC support returns undecided. Full-recompute checks and an external black-box benchmark on both baseline PDKs gate acceptance of extracted timing.

STA-REQ-0707: Path reports count the final net hop into an output port as wire delay and label it net. Its port handle remains a port handle. The input port seed is not a wire arc. Cell plus wire delay equals the path arrival minus its first data point arrival (within floating-point rounding).

STA-REQ-0708: Before RC indexing, validate typed parasitic objects and derive memory bounds from actual vectors. Reject malformed connection/resistor indices or nonfinite capacitances with a diagnostic. Guard zero-resistance component reductions and subtree sums against floating-point overflow.

STA-REQ-0730: Resistor loops. After zero-resistance contraction, a breadth-first spanning tree of each net from its driver node decides the topology. A net without further resistors is reduced by the tree passes of STA-REQ-0704 and STA-REQ-0720, bit for bit as before. Every further resistor between two distinct contracted nodes closes one independent loop (two parallel resistors are a loop). For k loops the first moments solve the nodal conductance system G tau = C with the driver node grounded, in f64, for the four transition/bound capacitance vectors: G = T + A D A^T with T the matrix of the spanning tree, A the incidence and D the conductances of the loop-closing resistors. T^-1 is one postorder and one preorder pass; by the Woodbury identity the rest is the k x k loop resistance matrix D^-1 + A^T T^-1 A, symmetric positive definite, factored once by Cholesky [@woodbury1950inverting; @golub2013matrix, sec. 4.2]. Each solution is checked against Kirchhoff's current law at every node and refined at most twice; a residual above 1e-9 of the net's total capacitance, a non-positive pivot or a negative moment beyond 1e-9 of the largest is error T0070. The driving-point admittance magnitudes A = sum C, B = sum C*tau, C = sum C*tau^2 (on a tree they equal the recursion of STA-REQ-0720) give the pi of STA-REQ-0720, and the sinks' first moments enter STA-REQ-0729 unchanged. A resistor whose two ends contract to one node carries no current and has no effect. The scratch of one net, 8 (k^2 + k + 5 n) bytes for n RC nodes, must fit in the state budget left after the binding estimate, and its work 4 m (k + 24) + k^3 + 32 k^2 for m contracted nodes in eight units per permitted state byte (--max-state-gib); otherwise T0070 names the net, its loops and nodes. No loop, cycle or path is enumerated. Note T0152, once per corner, counts the loops, their nets and the shorted resistors and names the first net. Against operating points of an external nodal simulator on planted networks with loops, the bound first moments and pi agree to a relative 3e-15, and a transient of the STA-REQ-0728 driver into the full network agrees with the pi and single-pole model to 0.08 ps, as on a tree; behind the default PDKs' buf_1 (transistor-level transients) the wire delays of planted loops are within 0.2 ps of the circuit (0.26 ps on the same network without its loops). A reference timing tool, observed black-box, times such a network as a tree without some of its resistors (wire delay errors of 4 to 29 ps on the same planted loops); it agrees with this rule to 0.0001 ps on an extracted net whose only loop is a pair of parallel 0.12 Ohm resistors. STA-REQ-0731: Components without a resistor path to the driver. A connected component of a net's RC network (resistors of any value) that does not contain the driver node is joined to the driver node with zero resistance. Its ground and grounded coupling capacitance and the pin and port capacitance of its connections load the driver at the root of its pi, and its sinks have a zero first moment: no wire delay, the driver pin's waveform. The connection section declares those pins part of the net while the extraction gives no resistance to them, so zero is a lower bound of their wire delay; nothing is dropped. Warning T0151, once per corner, counts the nets, components, RC nodes, pins and extracted capacitance and names the first net with up to eight members. Observed: a reference extractor left the via node of one sink pin unconnected on a routed sky130 net; a reference timing tool, black-box, also gives such a sink zero wire delay (it agrees with this rule to 0.0001 ps on that net) but removes the component's capacitance, including the sink's pin capacitance, from the driver's load, which this rule keeps. The suite's own extraction of the same net gives that sink 0.83 ps of wire delay.

Default parser caps: 32 MiB source, 100,000 nets, 500,000 RC nodes, 1,000,000 RC elements, 16 MiB interned names. Absolute caps are eight times these values. The importer records the chosen caps; reopening cannot remove them. Names have a 4096-byte individual cap. No recursion is needed.

Memory preflight: two source copies (64 MiB), name strings/index (<64 MiB), node/index records (80 MiB), elements (64 MiB), CSR/parent/postorder and four capacitance/delay components (<80 MiB): <512 MiB parasitic overhead at defaults. Add Liberty/STA state and retained corner records separately. Builds use two jobs; tests two threads. Tiny one-corner dual-PDK scenarios have <1000 timing pins and <10000 RC nodes (<4 MiB RC state); guarded PDK process ceiling 8 GiB, standard tests 2 GiB, wall deadline 180 seconds, measured with time -v. A net with k resistor loops adds 8 (k^2 + k + 5 n) bytes of scratch while it is reduced (STA-REQ-0730); one loop over 10,000 nodes adds 0.4 MiB, 1,000 loops 8 MiB. Only one net is reduced at a time.

Reference: IEEE 1481-1999, Standard for Integrated Circuit (IC) Delay and Power Calculation System, detailed parasitic exchange syntax; W. C. Elmore, The Transient Response of Damped Linear Networks with Particular Regard to Wideband Amplifiers, Journal of Applied Physics 19, 55–63 (1948).