grt: fixes and optimizations on incremental CUGR#10797
Conversation
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
…asitics rebuild Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
…uting Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
…uting Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
There was a problem hiding this comment.
Code Review
This pull request implements incremental routing support in the CUGR global router. It introduces an incremental routing mode that bypasses global parasitics re-estimation, global slack demotions, and full route rebuilding, focusing instead on rerouting only dirty nets and patching their routes and pin access points. The review feedback highlights several locations in CUGR.cpp where net_index is used to access the gr_nets_ vector without bounds checking, which could lead to out-of-bounds access. Adding bounds checks against gr_nets_.size() in these loops is recommended to prevent potential crashes.
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 10ee2a6986
ℹ️ 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".
| patternRoute(net_indices); | ||
| net_indices = dirty_nets; | ||
| mazeRoute(net_indices); |
There was a problem hiding this comment.
Preserve congestion recovery during incremental CUGR
For incremental CUGR runs where a dirty net is rerouted onto an already-full edge, this branch only reroutes the dirty set with pattern+maze and never recomputes the overflow set or reroutes neighboring nets sharing the congested edge; patternRoute/mazeRoute also suppress updateCongestedNets while incremental_routing_ is true. The previous routeIncremental added overflow nets back into the reroute set, so repair_timing/repair_design can now silently leave new global-route congestion until a full route is run.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
This is a deliberate decision - CUGR shouldn't not touch nets outside of the dirty nets set in the incremental iterations. We plan to implement a mechanism similar to what FastRoute have, where in the case of congestion not solved, more nets are added to the dirty nets set in the GlobalRouter side, in order to have more control of what is being rerouted.
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
|
@jfgava FYI, I've turned it into a draft because a few more fixes are required. You don't need to review this PR yet. |
Summary
Fix incremental-routing support to the CUGR global router so it works through the
estimate_parasitics -global_routing→updateDirtyRoutesloop (repair_design/repair_timing). Reroute only dirty nets, patch only their routes/slacks/pin-access, and skip the global parasitics rebuild and congestion scan during incremental runs.Type of Change
Impact
CUGR can now drive the incremental repair flow: it reroutes only the resizer/placer-modified nets and preserves untouched routes and slacks, fixing incorrect post-repair timing and cutting runtime. The default FastRoute path is unchanged (all new behavior is gated behind CUGR being selected).
Verification
./etc/Build.sh).Related Issues
N/A