Skip to content

Commit 413cfbd

Browse files
committed
Make INODEs for inter-SLR connections accessible
Allowing INODE -> BOUNCE -> BNODE -> SLL_INPUT Signed-off-by: Eddie Hung <[email protected]>
1 parent fc15bcc commit 413cfbd

File tree

2 files changed

+24
-12
lines changed

2 files changed

+24
-12
lines changed

src/com/xilinx/rapidwright/rwroute/RouteNodeGraph.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1103,6 +1103,12 @@ public boolean isAccessible(RouteNode childRnode, RouteNode parentRnode, Connect
11031103
IntentCode childIntentCode = childRnode.getIntentCode();
11041104
switch (childIntentCode) {
11051105
case NODE_INODE:
1106+
if (connection.isCrossSLR() &&
1107+
childRnode.getSLRIndex(this) != sinkRnode.getSLRIndex(this)) {
1108+
// Allow INODEs needed for PINBOUNCE -> BNODE -> NODE_SLL_INPUT
1109+
// TODO: Only allow those that lead to a SLR crossing
1110+
return true;
1111+
}
11061112
// Block access to all INODEs outside the sink tile, since NODE_INODE -> NODE_IMUX -> NODE_PINFEED (or NODE_INODE -> NODE_PINBOUNCE)
11071113
assert(childTile != sinkTile);
11081114
return false;
@@ -1111,18 +1117,24 @@ public boolean isAccessible(RouteNode childRnode, RouteNode parentRnode, Connect
11111117
childTile.getTileTypeEnum() == TileTypeEnum.SLL &&
11121118
childRnode.getSLRIndex(this) != sinkRnode.getSLRIndex(this)) {
11131119
// Allow CLE BNODEs since these are used to reach NODE_SLL_INPUT nodes
1114-
// TODO: Only allow BNODEs into SLLs that contain SLR crossings
1120+
// TODO: Only allow those that lead to a SLR crossing
11151121
return true;
11161122
}
11171123
case NODE_INTF_BNODE:
11181124
case NODE_CLE_CNODE:
11191125
case NODE_INTF_CNODE:
1120-
// Allow [BC]NODEs that reach into the sink tile
1121-
return childTile.getTileYCoordinate() == sinkTile.getTileYCoordinate() &&
1122-
childRnode.getEndTileXCoordinate() == sinkTile.getTileXCoordinate();
1126+
if (childTile.getTileYCoordinate() != sinkTile.getTileYCoordinate() ||
1127+
childRnode.getEndTileXCoordinate() != sinkTile.getTileXCoordinate()) {
1128+
assert(parentRnode.getIntentCode() != IntentCode.NODE_INODE);
1129+
return false;
1130+
}
1131+
// Only allow [BC]NODEs that reach into the sink tile
1132+
return true;
11231133
case NODE_PINBOUNCE:
1124-
// BOUNCEs are only accessible through INODEs, so transitively this intent code is unreachable
1125-
break;
1134+
// PINBOUNCEs are only accessible through an INODE, so arriving here means that this must be an inter-SLR connection
1135+
assert(connection.isCrossSLR() &&
1136+
childRnode.getSLRIndex(this) != sinkRnode.getSLRIndex(this));
1137+
return true;
11261138
case NODE_IMUX:
11271139
// IMUXes that are not our target EXCLUSIVE_SINK will have been isExcluded() from the graph unless
11281140
// LUT routethrus are enabled (which would have already returned true above)

test/src/com/xilinx/rapidwright/rwroute/TestRWRoute.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -404,16 +404,16 @@ void testSingleConnectionHelper(String partName,
404404
// Versal
405405
// One SLR crossing
406406
// (Too) close
407-
"xcv80,SLICE_X54Y331,SLICE_X54Y332,500", // Source adjacent to crossing SLL (east)
408-
"xcv80,SLICE_X53Y332,SLICE_X53Y331,700", // Source adjacent to crossing SLL (west)
409-
"xcv80,SLICE_X51Y331,SLICE_X51Y332,300", // Close to crossing SLL
407+
"xcv80,SLICE_X54Y331,SLICE_X54Y332,1000", // Source adjacent to crossing SLL (east)
408+
"xcv80,SLICE_X53Y332,SLICE_X53Y331,900", // Source adjacent to crossing SLL (west)
409+
"xcv80,SLICE_X51Y331,SLICE_X51Y332,400", // Close to crossing SLL
410410
// Perfect
411411
"xcv80,SLICE_X54Y331,SLICE_X54Y406,700", // Source adjacent to crossing SLL (east, north)
412412
"xcv80,SLICE_X53Y331,SLICE_X53Y406,200", // Source adjacent to crossing SLL (west, north)
413-
"xcv80,SLICE_X54Y406,SLICE_X54Y331,1400", // Sink adjacent to crossing SLL (east, south)
413+
"xcv80,SLICE_X54Y406,SLICE_X54Y331,600", // Sink adjacent to crossing SLL (east, south)
414414
"xcv80,SLICE_X53Y406,SLICE_X53Y331,100", // Sink adjacent to crossing SLL (west, south)
415-
"xcv80,SLICE_X51Y331,SLICE_X51Y406,300", // Source close to crossing SLL
416-
"xcv80,SLICE_X0Y331,SLICE_X49Y406,2000", // Source far from crossing SLL
415+
"xcv80,SLICE_X51Y331,SLICE_X51Y406,400", // Source close to crossing SLL
416+
"xcv80,SLICE_X0Y331,SLICE_X49Y406,2700", // Source far from crossing SLL
417417

418418
// US+
419419
// One SLR crossing

0 commit comments

Comments
 (0)