Skip to content

[PartialRouter] Preserve LUT routethru arcs when unpreserving nets - #1404

Merged
eddieh-xlnx merged 2 commits into
masterfrom
partialrouter_routethru_fix
Aug 25, 2026
Merged

[PartialRouter] Preserve LUT routethru arcs when unpreserving nets#1404
eddieh-xlnx merged 2 commits into
masterfrom
partialrouter_routethru_fix

Conversation

@eddieh-xlnx

@eddieh-xlnx eddieh-xlnx commented Aug 17, 2026

Copy link
Copy Markdown
Collaborator

Previously, arcs leaving the INT tile were dropped when collecting the PIPs of a preserved net, since the router projects pins to their INT tile and would never explore them. For a net containing a LUT routethru this broke the prev pointer chain at the CLE, so finishRouteConnection() could not recover the existing routing once the net was unpreserved under softPreserve.

Keep routethru PIPs in all three PIP loops so the chain stays intact. With lutRoutethru disabled, mark the IMUX feeding such a routethru as INACCESSIBLE: RWRoute does not normally explore non-sink PINFEED nodes, and this one is only present because it was on a previously-preserved net, so no other connection may claim a pin the routethru physically occupies. Such nodes are skipped when resetting children lists, and RouteNode.setType() gains a LOCAL_{EAST,WEST} -> INACCESSIBLE demotion.

Previously, arcs leaving the INT tile were dropped when collecting the
PIPs of a preserved net, since the router projects pins to their INT
tile and would never explore them. For a net containing a LUT routethru
this broke the prev pointer chain at the CLE, so finishRouteConnection()
could not recover the existing routing once the net was unpreserved
under softPreserve.

Keep routethru PIPs in all three PIP loops so the chain stays intact.
With lutRoutethru disabled, mark the IMUX feeding such a routethru as
INACCESSIBLE: RWRoute does not normally explore non-sink PINFEED nodes,
and this one is only present because it was on a previously-preserved
net, so no other connection may claim a pin the routethru physically
occupies. Such nodes are skipped when resetting children lists, and
RouteNode.setType() gains a LOCAL_{EAST,WEST} -> INACCESSIBLE demotion.

Signed-off-by: Eddie Hung <eddie.hung@amd.com>
Signed-off-by: Eddie Hung <eddie.hung@amd.com>
@eddieh-xlnx
eddieh-xlnx merged commit 4772be1 into master Aug 25, 2026
14 checks passed
@eddieh-xlnx
eddieh-xlnx deleted the partialrouter_routethru_fix branch August 25, 2026 00:18
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.

2 participants