Skip to content

fix(grt): generate via for co-located pins on different routing layers#10028

Closed
alokkumardalei-wq wants to merge 2 commits intoThe-OpenROAD-Project:masterfrom
alokkumardalei-wq:fix/grt-missing-via-colocated-pins
Closed

fix(grt): generate via for co-located pins on different routing layers#10028
alokkumardalei-wq wants to merge 2 commits intoThe-OpenROAD-Project:masterfrom
alokkumardalei-wq:fix/grt-missing-via-colocated-pins

Conversation

@alokkumardalei-wq
Copy link
Copy Markdown
Contributor

@alokkumardalei-wq alokkumardalei-wq commented Apr 1, 2026

Summary

Fixes #9919
In FastRouteCore::fillVIA(), the condition for generating a via on a zero-length Steiner tree edge (len == 0) only triggered when at least one endpoint had no other connections (hID == BIG_INT && lID == BIG_INT). For multi-pin nets where both co-located pins also connect to the rest of the tree via non-zero edges, layerAssignmentV4() sets their hID to actual edge IDs, causing the via generation to be silently skipped. The fix changes the condition to treeedge.len == 0, which correctly handles all zero-length edges.

Type of Change

  • Bug fix

Impact

When two pins in a net occupy the same global routing cell (gcell) but on different routing layers, GRT now correctly generates an inter-layer via between them. Previously, the missing via caused a disconnected route topology that manifested as RSZ-0074: failed to build load tree from global routes: found route to N pins, expected M.

Signed-off-by: alokkumardalei-wq <alokkumardalei2@gmail.com>
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request simplifies the conditional logic in FastRouteCore::fillVIA by replacing the complex check for BIG_INT node IDs with a direct check on treeedge.len. I have no further feedback to provide.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 1, 2026

clang-tidy review says "All clean, LGTM! 👍"

Signed-off-by: alokkumardalei-wq <alokkumardalei2@gmail.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 1, 2026

clang-tidy review says "All clean, LGTM! 👍"

&& treenodes[treeedge.n2].lID == BIG_INT)) {
&& treenodes[treeedge.n2].lID == BIG_INT)
|| (treeedge.len == 0 && treeedge.n1 < num_terminals
&& treeedge.n2 < num_terminals)) {
Copy link
Copy Markdown
Member

@eder-matheus eder-matheus Apr 1, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We did try a similar approach, but it wasn't enough. Unfortunately we don't have a public test case to test it, so we can't validate if your change works. But I'll leave your PR open, and once I have a test case, I'll try it with your branch.

@eder-matheus
Copy link
Copy Markdown
Member

@alokkumardalei-wq I've tried your PR, but it didn't fixed the issue. Here's the full fix for the issue: #10044.

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.

GRT route incomplete manifesting as resizer error

2 participants