From b15043edafce944dc55bb0ee9314854b161aa560 Mon Sep 17 00:00:00 2001 From: Eddie Hung Date: Mon, 18 Dec 2023 23:10:48 -0800 Subject: [PATCH 1/2] Add TestPhysNetlistWriter.testStaticSourceBELPin() Signed-off-by: Eddie Hung --- .../interchange/TestPhysNetlistWriter.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/test/src/com/xilinx/rapidwright/interchange/TestPhysNetlistWriter.java b/test/src/com/xilinx/rapidwright/interchange/TestPhysNetlistWriter.java index 6d3c15d08..6ee09d999 100644 --- a/test/src/com/xilinx/rapidwright/interchange/TestPhysNetlistWriter.java +++ b/test/src/com/xilinx/rapidwright/interchange/TestPhysNetlistWriter.java @@ -33,7 +33,6 @@ import com.xilinx.rapidwright.design.DesignTools; import com.xilinx.rapidwright.design.SiteInst; import com.xilinx.rapidwright.design.tools.LUTTools; -import com.xilinx.rapidwright.design.tools.TestLUTTools; import com.xilinx.rapidwright.device.BEL; import com.xilinx.rapidwright.device.BELPin; import com.xilinx.rapidwright.interchange.PhysicalNetlist.PhysNetlist; @@ -48,7 +47,6 @@ import com.xilinx.rapidwright.rwroute.TestRWRoute; import com.xilinx.rapidwright.support.LargeTest; import com.xilinx.rapidwright.support.RapidWrightDCP; -import com.xilinx.rapidwright.util.Utils; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -340,4 +338,19 @@ public void testSimulateSwappedLutPinsWithRWRoute(String path, @TempDir Path tem System.setProperty("rapidwright.physNetlistWriter.simulateSwappedLutPins", "false"); } } + + @Test + public void testStaticSourceBELPin(@TempDir Path tempDir) throws IOException { + Design inputDesign = RapidWrightDCP.loadDCP("picoblaze_ooc_X10Y235.dcp"); + Assertions.assertEquals(inputDesign.getGndNet(), + inputDesign.getSiteInst("SLICE_X15Y239").getNetFromSiteWire("A_O")); + + String interchangePath = tempDir.resolve("design.phys").toString(); + PhysNetlistWriter.writePhysNetlist(inputDesign, interchangePath); + + Design outputDesign = PhysNetlistReader.readPhysNetlist(interchangePath.toString(), inputDesign.getNetlist()); + inputDesign = null; + Assertions.assertEquals(outputDesign.getGndNet(), + outputDesign.getSiteInst("SLICE_X15Y239").getNetFromSiteWire("A_O")); + } } From 080d2c754872d817d351e8394b1096eac71e94b8 Mon Sep 17 00:00:00 2001 From: Eddie Hung Date: Mon, 18 Dec 2023 21:36:49 -0800 Subject: [PATCH 2/2] [PhysNetlistWriter] Recognize static source BELPins (e.g. LUT outputs) Signed-off-by: Eddie Hung --- .../interchange/PhysNetlistWriter.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/com/xilinx/rapidwright/interchange/PhysNetlistWriter.java b/src/com/xilinx/rapidwright/interchange/PhysNetlistWriter.java index 6c6615207..5e0817149 100644 --- a/src/com/xilinx/rapidwright/interchange/PhysNetlistWriter.java +++ b/src/com/xilinx/rapidwright/interchange/PhysNetlistWriter.java @@ -396,16 +396,21 @@ public static void extractIntraSiteRouting(Net net, List nodes, } else { if (bel.getBELClass() == BELClass.BEL) { if (cell == null) { - // Skip if nothing placed here - continue; - } + if (!net.isStaticNet()) { + // Skip if nothing placed here and not driving a static net + continue; + } + assert(bel.isLUT() || // LUTs can be a GND or VCC source + (net.isGNDNet() && bel.isGndSource()) || + (net.isVCCNet() && bel.isVccSource())); + } else { + if (cell.getType().equals(PORT)) { + continue; + } - if (cell.getType().equals(PORT)) { - continue; + routethru = cell.isRoutethru(); } - routethru = cell.isRoutethru(); - // Fall through } else if (bel.getBELClass() == BELClass.RBEL) { if (siteInst.getUsedSitePIP(belPin) != null) {