Repository navigation
est: a design knows its parasitics, so estimate_parasitics needs no flag - #11788
Conversation
A global route that finished congested, and was not accepted with global_route -allow_congestion, leaves routes that have_routes does not count. estimate_parasitics -global_routing then failed with EST-0005, "Run global_route before estimating parasitics for global routing", after global_route had run. grt::have_congested_routes reports such routes, and estimate_parasitics -global_routing fails with EST-0008, which names the congestion and the flag that accepts it. Both are still errors. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
A flow that times a design has to say -placement or -global_routing, so every flow script that loads a design re-derives which one applies: from a stage number, from grt::have_routes, from whether a .spef file is on disk. Each copy can get it wrong, and a missing piece fails quietly: estimate_parasitics -placement without wire RC only warns (EST-0018) and estimates nothing. OpenROAD knows which applies. Without a flag, estimate_parasitics estimates from the global routes when there are any, else from placement, and does nothing once read_spef has read parasitics, until an estimate with a flag replaces them. An unplaced design (EST-0009), global routes that are congested and were not accepted (EST-0020) and a placement estimate without wire RC (EST-0014) are errors. -placement and -global_routing behave as before. grt::design_is_placed lets a flow ask before it estimates, and est::parasitics_source says where the parasitics came from: spef, placement, global_routing or none. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
There was a problem hiding this comment.
Code Review
This pull request introduces a more robust mechanism for estimating parasitics by allowing the system to automatically determine the source (placement or global routing) and properly handling SPEF-annotated parasitics. It adds logic to detect congested global routes and ensures that parasitics are not incorrectly estimated when SPEF data is present. The reviewer identified several issues: a potential Tcl runtime error in the trace callback due to incorrect boolean evaluation, the need to support resetting the SPEF read state when parasitics are cleared, and a Tcl string matching issue where literal asterisks were being treated as wildcards.
In double quotes "\*DATE*" is *DATE*, which skips any line containing DATE. Braces keep the backslash, so only the *DATE header line is skipped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
|
@jfgava @maliberty This whole thing started with Gemini suggesting things that would have lead to sucker-punch bugs... Less iffy ORFS code and fewer choices where the only thing that ORFS can do with that choice is to get it wrong: The-OpenROAD-Project/OpenROAD-flow-scripts#4691 |
|
@codex review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ef355feed4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
😌 |
A design now knows which parasitics apply to it, so
estimate_parasiticscan pick them itself. The-placement/-global_routingflag was needed when a design loaded from a database couldn't tell whether it had global routes. Now it can: the guides load from the database, and whether their congestion was accepted is saved with them. So a flow can just say when to estimate,estimate_parasitics, and OpenROAD says what. The choice is made in one place, the same for every flow, and a script no longer carries its own copy of it.ORFS uses this to drop the per-script choice in
open.tcl,generate_abstract.tcl, its endpoint-slack writer andfinal_outputs.tcl, and to read a SPEF only where its configuration says one was extracted (The-OpenROAD-Project/OpenROAD-flow-scripts#4691, a draft that depends on this one). On ORFS's gcd (asap7 and nangate45), the two changes together reproduce today's flow byte for byte: every.odbfrom place through final, the abstract's.liband.lef, and the SPEF apart from its date (The-OpenROAD-Project/bazel-orfs#1284).estimate_parasiticsread_spefhas read parasitics-placementand-global_routingbehave as before.grt: tell congested routes from no routes:grt::have_congested_routes. With congested routes that weren't accepted,estimate_parasitics -global_routingnow fails with EST-0008, which names the congestion andglobal_route -allow_congestion.est: estimate_parasitics without a flag picks the source: the table above, plusgrt::design_is_placedandest::parasitics_source(spef,placement,global_routingornone), so a flow can ask.test: the SPEF comparisons skip the *DATE line literally: from review.The tests are pass/fail checks, with no new
.okfiles:est/test/estimate_parasitics_source: no wire RC, placement chosen (its SPEF equals-placement's), parasitics kept afterread_spef, an explicit estimate afterwards, and an unplaced design.grt/test/congested_routes_are_reported: congested routes that weren't accepted (EST-0008 and EST-0020), then accepted ones the flagless call estimates from (its SPEF equals-global_routing's and differs from-placement's).The grt, rsz, cts, est, gpl and dpl suites and
//:dup_id_testpass: 785 tests, 4 skipped.🤖 Generated with Claude Code