From 273cfa9361a3ba2634ab034d0af0d609ce864288 Mon Sep 17 00:00:00 2001 From: Eddie Hung Date: Thu, 14 Nov 2024 11:05:38 -0800 Subject: [PATCH] [RWRoute] Preserve nodes of Laguna sinks Signed-off-by: Eddie Hung --- src/com/xilinx/rapidwright/rwroute/RWRoute.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/com/xilinx/rapidwright/rwroute/RWRoute.java b/src/com/xilinx/rapidwright/rwroute/RWRoute.java index 687ad948f..e6722052b 100644 --- a/src/com/xilinx/rapidwright/rwroute/RWRoute.java +++ b/src/com/xilinx/rapidwright/rwroute/RWRoute.java @@ -56,6 +56,7 @@ import com.xilinx.rapidwright.util.Pair; import com.xilinx.rapidwright.util.RuntimeTracker; import com.xilinx.rapidwright.util.RuntimeTrackerTree; +import com.xilinx.rapidwright.util.Utils; import java.util.ArrayList; import java.util.Arrays; @@ -660,6 +661,16 @@ protected NetWrapper createNetWrapperAndConnections(Net net) { sinkRnode.setType(sinkType); connection.setSinkRnode(sinkRnode); + if (sinkINTNode.getTile() != sink.getTile()) { + TileTypeEnum sinkTileType = sink.getTile().getTileTypeEnum(); + if (Utils.isLaguna(sinkTileType)) { + // Sinks in Laguna tiles must be Laguna registers (but will be projected into the INT tile) + // however, it's possible for another net to use the sink node as a bounce -- prevent that here + assert(sinkINTNode.getTile().getTileTypeEnum() == TileTypeEnum.INT); + routingGraph.preserve(sink.getConnectedNode(), net); + } + } + // Where appropriate, allow all 6 LUT pins to be swapped to begin with char lutLetter = sink.getName().charAt(0); int numberOfSwappablePins = (lutPinSwapping && sink.isLUTInputPin())