diff --git a/src/com/xilinx/rapidwright/router/VersalClockRouting.java b/src/com/xilinx/rapidwright/router/VersalClockRouting.java index 0046e341d..4cfc2add7 100644 --- a/src/com/xilinx/rapidwright/router/VersalClockRouting.java +++ b/src/com/xilinx/rapidwright/router/VersalClockRouting.java @@ -336,7 +336,6 @@ public static void routeToLCBs(Net clk, Map path = curr.getPrevPath(); allPIPs.addAll(RouterHelper.getPIPsFromNodes(path)); @@ -360,7 +359,7 @@ public static void routeToLCBs(Net clk, Map> getListOfNodesFromRoutes(Device device, M * for same net as we're routing), or unavailable (preserved for other net). */ public static void symmetricClkRouting(Net clk, Device device, Function getNodeStatus) { - if (device.getSeries() != Series.Versal) { + if (device.getSeries() == Series.UltraScale || device.getSeries() == Series.UltraScalePlus) { List clockRegions = getClockRegionsOfNet(clk); ClockRegion centroid = findCentroid(clk, device); @@ -227,12 +227,8 @@ public static void symmetricClkRouting(Net clk, Device device, Function clockRegions = getClockRegionsOfNet(clk); SitePinInst source = clk.getSource(); @@ -244,7 +240,6 @@ public static void symmetricClkRouting(Net clk, Device device, Function @@ -256,9 +251,9 @@ public static void symmetricClkRouting(Net clk, Device device, Function NODE_GLOBAL_BUFG -> NODE_GLOBAL_GCLK -> NODE_GLOBAL_HROUTE_HSR -> NODE_GLOBAL_VROUTE + // Assume that these source sites are located in the bottom of the device (Y=0). + // The path from the output pin to VROUTE matches the following pattern: + // NODE_GLOBAL_BUFG -> NODE_GLOBAL_BUFG -> NODE_GLOBAL_GCLK -> NODE_GLOBAL_HROUTE_HSR -> NODE_GLOBAL_VROUTE // which is similar to US/US+ clock routing. // Notice that we have to quickly reach a NODE_GLOBAL_HROUTE_HSR node, and if we allow the Y coordinate of centroid to be bigger than 1, // we may fail to do so. Thus, we need to force the Y-coordinate of centroid to be 1. @@ -268,12 +263,12 @@ public static void symmetricClkRouting(Net clk, Device device, Function> lcbMappings = VersalClockRouting.routeLCBsToSinks(clk, getNodeStatus); VersalClockRouting.routeDistributionToLCBs(clk, upDownDistLines, lcbMappings.keySet()); + } else { + throw new RuntimeException("ERROR: GlobalSignalRouting.symmetricClkRouting() does not support the " + device.getSeries() + " series."); } Set clkPIPsWithoutDuplication = new HashSet<>(clk.getPIPs());