Skip to content

fix(ista): restore timing checks and refine parasitic delay analysis - #343

Merged
yipeix merged 1 commit into
mainfrom
sta_main
Nov 8, 2026
Merged

yipeix merged 1 commit into
mainfrom
sta_main

Conversation

@yipeix

@yipeix yipeix commented Nov 8, 2026

Copy link
Copy Markdown
Collaborator

What Changed

Timing analysis could omit combinational clock-gating checks and asynchronous endpoints, and stale SPEF connectivity could replace the linked netlist's loads. This change restores those checks and retains netlist loads when an extracted net has incompatible terminals.

  • Infer clock-gating checks for internal and exported/generated clocks, preserve check identity through path search and exports, and select applicable conditional Liberty checks after derating.
  • Match exact SDC options before abbreviations, reject ambiguous prefixes, accept negative numeric arguments, and prevent an invalid set_false_path -from selector from becoming an unrestricted exception.
  • Validate SPEF connectivity and port aliases; refine RC normalization, missing-response fallback, and Arnoldi response reuse/convergence. Expose -small_rc_fanout_reduction and -check_constant_capacitance through native, Tcl, and Python configuration, preserving their default values of 1 and 0.
  • Add regressions for gating, exception matching, parasitic import, electrical checks, and numerical response behavior.

Scope

  • C++ core/database/EDA integration
  • Python API or native bindings
  • Geometry, placement, timing, DRC, or evaluation behavior
  • Build/package - CMake, wheel, manylinux, or dependencies
  • CI/release - GitHub Actions, version checks, or release automation
  • Tests/docs only

Runtime And Packaging Impact

  • No runtime or packaging impact
  • C++ runtime behavior or native ABI changed
  • Python API or extension module behavior changed
  • Wheel contents or supported platform changed
  • CMake, compiler, dependency, or toolchain requirement changed
  • Release artifact or version metadata changed

New check types and graph state require native consumers to rebuild. CMake registers the checker and its tests; dependency and toolchain requirements are unchanged. Python method signatures are unchanged, with two additional validated configuration options. Local documentation and generated benchmark artifacts are intentionally excluded from this PR.

Validation

  • C++ formatting: clang-format 18.1.8 --dry-run --Werror --style=file on all 53 changed/new C++ files (equivalent to the repository formatting hook).
  • Native build: cmake --build build/release -j 8 --target ecc_bin ecc_py <all 69 test_ista_* executable targets>; all 275 build steps completed.
  • Wheel build: not run.
  • Complete Python API integration: not run.
  • Focused unit/scenario tests: ctest --test-dir build/release -R '^ista_' --output-on-failure -j 8 — 123/123 passed after the final rebuild.
  • Python smoke: imported the rebuilt extension and checked invalid values for both new options through dict and JSON configuration — 8/8 passed.
  • Other: git diff --check, independent code review, and an explicit 55-file code/build/test allowlist; documentation hashes remained unchanged.

Skipped checks and remaining limitations:

  • The all-target build fails in the unchanged upstream iCTS test FastSTAInputFactsTest.cc:385: icts::SdcClockReader is not declared. This file matches the main-branch base; the error is outside the changed files.
  • Wheel packaging and the complete Python data/operations integration suite were not run. This validation covers the native CLI, Python extension, iSTA suite, and focused Python configuration checks.
  • The earlier same-input, SI-disabled comparison of this calculation revision covered 20 designs and 100 SPEF scenarios. Current inputs had no missing/extra endpoints or violation-sign differences, but the maximum endpoint slack difference was 3.508048117 ps; the strict 0.01 ps target remains unmet. That comparison explicitly used small_rc_fanout_reduction=0 and check_constant_capacitance=1, rather than defaults. The historical William bridge inputs still have 62 cross-corner sign differences, and ord_000038 lacks the required reference inputs. This PR does not claim complete PrimeTime equivalence or SI support.

Checklist

  • I kept the change scoped to ecc-tools.
  • I updated user-facing API text where behavior changed (configuration options and compatibility impact described above; repository documents intentionally excluded).
  • I updated uv.lock or version metadata when dependencies changed (N/A: no dependency or version change).
  • I documented any CMake, compiler, ABI, or platform compatibility impact.
  • I did not include local caches, virtual environments, or generated build outputs.
  • I explained skipped validation and remaining risk.

@yipeix
yipeix merged commit c736737 into main Nov 8, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant