diff --git a/src/com/xilinx/rapidwright/design/DesignTools.java b/src/com/xilinx/rapidwright/design/DesignTools.java index 3a4d89cdf..44a2f9d95 100644 --- a/src/com/xilinx/rapidwright/design/DesignTools.java +++ b/src/com/xilinx/rapidwright/design/DesignTools.java @@ -4014,6 +4014,10 @@ public static void prepareShellBlackBoxForRouting(Design design) { if (net != null) { SitePinInst spi = si.getSitePinInst(sitePinName); if (spi == null || (spi != null && !spi.getNet().equals(net))) { + // Check for rare instance of FF driven by GND post inside SLICE + if (letter == 'A' && net.isGNDNet() && isUsingSLICEGND(input, si)) { + continue; + } BELPin lutInput = si.getBEL(letter + "6LUT").getPin("A6"); EDIFHierPortInst ffInput = c.getEDIFHierCellInst().getPortInst("D"); Cell lut1 = ECOTools.createAndPlaceInlineCellOnInputPin(design, ffInput, @@ -4077,6 +4081,12 @@ public static void prepareShellBlackBoxForRouting(Design design) { addProhibitConstraint(design, bels); } + private static boolean isUsingSLICEGND(BELPin input, SiteInst si) { + BEL bel = input != null ? input.getSourcePin().getBEL() : null; + SitePIP usedSitePIP = bel == null ? null : si.getUsedSitePIP(bel.getName()); + return usedSitePIP != null && usedSitePIP.getInputPinName().equals("F7F8"); + } + private static boolean isFFQOutputBlocked(Site site, BEL bel, Set used) { String sitePinName = bel.getPin("Q").getConnectedSitePinName(); Node n = site.getConnectedNode(sitePinName);