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())