Core capabilities
Multi-model delay calculation
iSTA supports three industry-standard delay models: NLDM (Non-Linear Delay Model) for fast estimation, Elmore for first-moment delay on RC trees, and CCS (Composite Current Source) for signoff-level accuracy. Agents pick models by flow stage—NLDM for early placement exploration, CCS for signoff verification. All intermediate results (cell delay, net delay, slew) export as structured vectors via AiEDA Library.
Incremental timing analysis (dirty cone)
This is iSTA's most valuable capability for Agent workflows. When upstream tools (e.g. iPL) move cells or iTO optimizes local paths, Agents need not rerun full-chip STA. With dirty_only=true, iSTA tracks dirty cells and nets in their fan-in/fan-out cones only, updating delay and slack in that region. Incremental runs typically take 5–15% of full-chip time, giving second-scale timing feedback.
Typed Timing Report
iSTA produces structured, typed timing reports—not text dumps. Agents set the number of critical paths via the paths parameter; results group by endpoint with per-stage detail (cell, delay, slew, slack). Reports include coverage (share of endpoints analyzed) and provenance (corner, parasitics files, constraints)—so Agents understand timing state without parsing logs.
Multi-scenario parallel analysis
A single iSTA.analyze call can analyze multiple PVT scenarios (Process, Voltage, Temperature), e.g. ["func_typical", "func_worst", "func_best"]. Results return grouped by scenario so Agents can compare WNS/TNS and worst paths across corners. Multi-scenario analysis runs in parallel threads inside the engine.
Agent calling patterns
iSTA exposes three equivalent calling protocols.
Python SDK
from ieda import Client client = Client("http://localhost:9099") # Full timing analysis across multiple scenarios timing = client.call( "iSTA.analyze", design_ref="snap_7f3a", scenarios=["func_typical", "func_worst"], paths=100, ) # Structured access print(timing.wns) # -0.032 (ns, negative = violation) print(timing.tns) # -0.45 (total negative slack) for p in timing.critical_paths[:3]: print(p.slack, p.startpoint, p.endpoint) print(timing.endpoint_slacks.keys()) # Incremental: only re-analyze dirty cones incr = client.call( "iSTA.analyze", design_ref="snap_7f3a_v2", scenarios=["func_worst"], dirty_only=True, endpoints=timing.dirty_set, # from upstream tool ) print(incr.coverage) # CoverageReport: what was analyzed
Input / output contract
Request Schema — iSTA.analyze
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
design_ref | string | Yes | — | Design snapshot reference with netlist, parasitics, and constraints |
scenarios | string[] | Yes | — | List of PVT scenarios, e.g. ["func_typical", "func_worst"] |
paths | int | No | 100 | Number of worst critical paths to return |
endpoints | string[] | No | [] (all) | Endpoint list to scope analysis to specific paths |
dirty_only | bool | No | true | Run incremental analysis on dirty cone only |
Result Schema
| Field | Type | Description |
|---|---|---|
wns | float | Worst negative slack; positive means no violation |
tns | float | Total negative slack (TNS) |
critical_paths | Path[] | Critical path list with startpoint, endpoint, slack, and stage detail |
endpoint_slacks | map[string]float | Slack map for all analyzed endpoints |
coverage | CoverageReport | Coverage report: analyzed vs. total endpoints and skip reasons |
provenance | ProvenanceInfo | Provenance: corner, parasitics file version, constraint files |
Role in the flow
iSTA is flow-wide infrastructure—not only at timing signoff. RTL ↓ iMap (Synth) ←→ iSTA (post-synth timing check) ↓ iFP (Floorplan) ←→ iSTA (early timing estimate) ↓ iPDN (Power grid) ←→ iSTA (IR-drop-aware timing) ↓ iPL (Place) ←→ iSTA (post-place annotation → incremental) ↓ iCTS (Clock tree) ←→ iSTA (clock delay + skew) ↓ iTO (Timing opt) ←→ iSTA (incremental verify after each opt step) ↓ iRT (Route) ←→ iSTA (post-route signoff with parasitics) ↓ iECO (ECO) ←→ iSTA (local incremental verify) ↓ Signoff ←→ iSTA (multi-corner full-chip signoff)