From 0caa24f9ba89d69860229d3d28a1b42bf9461598 Mon Sep 17 00:00:00 2001 From: Chris Lavin Date: Mon, 16 Dec 2024 16:11:00 -0700 Subject: [PATCH 1/3] Tests for Versal BEL flags and site unrouter Signed-off-by: Chris Lavin --- src/com/xilinx/rapidwright/edif/EDIFNet.java | 3 +- .../xilinx/rapidwright/device/TestBEL.java | 32 ++++++ .../xilinx/rapidwright/eco/TestECOTools.java | 103 ++++++++++++++++++ 3 files changed, 136 insertions(+), 2 deletions(-) diff --git a/src/com/xilinx/rapidwright/edif/EDIFNet.java b/src/com/xilinx/rapidwright/edif/EDIFNet.java index 50fdb16d1..226a33a0f 100644 --- a/src/com/xilinx/rapidwright/edif/EDIFNet.java +++ b/src/com/xilinx/rapidwright/edif/EDIFNet.java @@ -30,7 +30,6 @@ import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -241,7 +240,7 @@ public EDIFPortInst createPortInst(EDIFPort port, int index, EDIFCellInst cellIn * Gets the sorted ArrayList of EDIFPortInsts on this net as a collection. * @return The collection of EDIFPortInsts on this net. */ - public Collection getPortInsts() { + public List getPortInsts() { return portInsts == null ? Collections.emptyList() : portInsts; } diff --git a/test/src/com/xilinx/rapidwright/device/TestBEL.java b/test/src/com/xilinx/rapidwright/device/TestBEL.java index fb1d00364..fe8997634 100644 --- a/test/src/com/xilinx/rapidwright/device/TestBEL.java +++ b/test/src/com/xilinx/rapidwright/device/TestBEL.java @@ -84,4 +84,36 @@ public void testDIFFsAreNotFF(String partName, String siteName, String belName) Assertions.assertNotNull(b); Assertions.assertFalse(b.isFF()); } + + + @Test + public void testIMRFlags() { + Device d = Device.getDevice("xcv80"); + String[] siteNames = new String[] { "IRI_QUAD_X34Y8", "IRI_QUAD_X34Y9", "SLICE_X48Y0", + "SLICE_X49Y0" }; + + for (String siteName : siteNames) { + Site s = d.getSite(siteName); + for (BEL bel : s.getBELs()) { + Assertions.assertEquals(bel.isCEIMR(), bel.getBELType().endsWith("_IMC_FF") + && (bel.getName().contains("CE") || bel.getName().contains("WE")) + && bel.getName().contains("IMR")); + + Assertions.assertEquals(bel.isSRIMR(), bel.getBELType().endsWith("_IMC_FF_T") + && (bel.getName().contains("SR") || bel.getName().contains("RST")) + && bel.getName().contains("IMR")); + + Assertions.assertEquals(bel.isIMR(), bel.getBELType().startsWith("SLICE_IMI_FF") + && bel.getName().contains("IMR")); + + Assertions.assertEquals(bel.isSliceFFClkMod(), + bel.getBELType().equals("SLICE_FF_CLK_MOD") + && bel.getName().contains("CLK_MOD")); + + Assertions.assertEquals(bel.isSliceIMRClkMod(), + bel.getBELType().equals("SLICE_IMR_CLK_MOD") + && bel.getName().contains("CLK_MOD")); + } + } + } } diff --git a/test/src/com/xilinx/rapidwright/eco/TestECOTools.java b/test/src/com/xilinx/rapidwright/eco/TestECOTools.java index c8cb113ad..d1bb13014 100644 --- a/test/src/com/xilinx/rapidwright/eco/TestECOTools.java +++ b/test/src/com/xilinx/rapidwright/eco/TestECOTools.java @@ -27,6 +27,7 @@ import com.xilinx.rapidwright.design.DesignTools; import com.xilinx.rapidwright.design.Net; import com.xilinx.rapidwright.design.PinType; +import com.xilinx.rapidwright.design.SiteInst; import com.xilinx.rapidwright.design.SitePinInst; import com.xilinx.rapidwright.design.Unisim; import com.xilinx.rapidwright.device.BEL; @@ -488,4 +489,106 @@ public void testCreateNet() { Assertions.assertNotNull(design.getNet(netName)); } } + + @Test + public void testRemoveCellVersal() { + Design d = RapidWrightDCP.loadDCP("picoblaze_2022.2.dcp"); + + SiteInst si = d.getSiteInst("SLICE_X145Y0"); + + Assertions.assertNotNull(si.getUsedSitePIP("OUTMUXB2")); + Assertions.assertNotNull(si.getUsedSitePIP("OUTMUXA2")); + Assertions.assertNotNull(si.getUsedSitePIP("FFMUXB2")); + Assertions.assertNotNull(si.getUsedSitePIP("FFMUXA2")); + Assertions.assertEquals("in_port[0]", si.getNetFromSiteWire("BFF2_Q").getName()); + Assertions.assertEquals("in_port[0]", si.getNetFromSiteWire("BQ2").getName()); + + Assertions.assertEquals("in_port[1]", si.getNetFromSiteWire("AFF2_Q").getName()); + Assertions.assertEquals("in_port[1]", si.getNetFromSiteWire("AQ2").getName()); + Assertions.assertEquals("processor/D[0]", si.getNetFromSiteWire("FFMUXB2_OUT2").getName()); + Assertions.assertEquals("processor/D[1]", si.getNetFromSiteWire("FFMUXA2_OUT2").getName()); + + Assertions.assertEquals(Net.GND_NET, si.getNetFromSiteWire("SR_IMR_Q").getName()); + Assertions.assertEquals(Net.VCC_NET, si.getNetFromSiteWire("CE1_IMR_Q").getName()); + + Assertions.assertEquals("clk_IBUF", si.getNetFromSiteWire("FF_CLK_MOD_CLK_OUT").getName()); + + Cell rt = si.getCell("SR_IMR"); + Assertions.assertNotNull(rt); + Assertions.assertTrue(rt.isFFRoutethruCell()); + Assertions.assertEquals(Net.GND_NET, si.getNetFromSiteWire("RST").getName()); + Assertions.assertNotNull(si.getUsedSitePIP("RSTINV")); + + rt = si.getCell("CE1_IMR"); + Assertions.assertNotNull(rt); + Assertions.assertTrue(rt.isFFRoutethruCell()); + Assertions.assertEquals(Net.VCC_NET, si.getNetFromSiteWire("CKEN1").getName()); + + Assertions.assertEquals("clk_IBUF", si.getNetFromSiteWire("CLKINV_OUT").getName()); + Assertions.assertEquals("clk_IBUF", si.getNetFromSiteWire("CLK").getName()); + Assertions.assertNotNull(si.getUsedSitePIP("CLKINV")); + + Cell cell = d.getCell("in_port_reg[0]"); + ECOTools.removeCell(d, Collections.singletonList(cell.getEDIFHierCellInst()), null); + + Assertions.assertNull(si.getUsedSitePIP("OUTMUXB2")); + Assertions.assertNotNull(si.getUsedSitePIP("OUTMUXA2")); + Assertions.assertNotNull(si.getUsedSitePIP("FFMUXA2")); + Assertions.assertNull(si.getNetFromSiteWire("BFF2_Q")); + Assertions.assertNull(si.getNetFromSiteWire("BQ2")); + + Assertions.assertEquals("in_port[1]", si.getNetFromSiteWire("AFF2_Q").getName()); + Assertions.assertEquals("in_port[1]", si.getNetFromSiteWire("AQ2").getName()); + Assertions.assertEquals("processor/D[1]", si.getNetFromSiteWire("FFMUXA2_OUT2").getName()); + + Assertions.assertEquals(Net.GND_NET, si.getNetFromSiteWire("SR_IMR_Q").getName()); + Assertions.assertEquals(Net.VCC_NET, si.getNetFromSiteWire("CE1_IMR_Q").getName()); + + Assertions.assertEquals("clk_IBUF", si.getNetFromSiteWire("FF_CLK_MOD_CLK_OUT").getName()); + + rt = si.getCell("SR_IMR"); + Assertions.assertNotNull(rt); + Assertions.assertTrue(rt.isFFRoutethruCell()); + Assertions.assertEquals(Net.GND_NET, si.getNetFromSiteWire("RST").getName()); + Assertions.assertNotNull(si.getUsedSitePIP("RSTINV")); + + rt = si.getCell("CE1_IMR"); + Assertions.assertNotNull(rt); + Assertions.assertTrue(rt.isFFRoutethruCell()); + Assertions.assertEquals(Net.VCC_NET, si.getNetFromSiteWire("CKEN1").getName()); + + Assertions.assertEquals("clk_IBUF", si.getNetFromSiteWire("CLKINV_OUT").getName()); + Assertions.assertEquals("clk_IBUF", si.getNetFromSiteWire("CLK").getName()); + Assertions.assertNotNull(si.getUsedSitePIP("CLKINV")); + + cell = d.getCell("in_port_reg[1]"); + ECOTools.removeCell(d, Collections.singletonList(cell.getEDIFHierCellInst()), null); + + Assertions.assertNull(si.getUsedSitePIP("OUTMUXB2")); + Assertions.assertNull(si.getUsedSitePIP("OUTMUXA2")); + Assertions.assertNull(si.getNetFromSiteWire("BFF2_Q")); + Assertions.assertNull(si.getNetFromSiteWire("BQ2")); + + Assertions.assertNull(si.getNetFromSiteWire("AFF2_Q")); + Assertions.assertNull(si.getNetFromSiteWire("AQ2")); + + Assertions.assertNull(si.getNetFromSiteWire("SR_IMR_Q")); + Assertions.assertNull(si.getNetFromSiteWire("CE1_IMR_Q")); + + Assertions.assertNull(si.getNetFromSiteWire("FF_CLK_MOD_CLK_OUT")); + + rt = si.getCell("SR_IMR"); + Assertions.assertNull(rt); + Assertions.assertNull(si.getNetFromSiteWire("RST")); + Assertions.assertNull(si.getUsedSitePIP("RSTINV")); + + rt = si.getCell("CE1_IMR"); + Assertions.assertNull(rt); + Assertions.assertNull(si.getNetFromSiteWire("CKEN1")); + + Assertions.assertNull(si.getNetFromSiteWire("CLKINV_OUT")); + Assertions.assertNull(si.getNetFromSiteWire("CLK")); + Assertions.assertNull(si.getUsedSitePIP("CLKINV")); + + } } From be41b42eea5e1b98d88d8f84dfb7907f550601e3 Mon Sep 17 00:00:00 2001 From: Chris Lavin Date: Wed, 18 Dec 2024 12:30:25 -0700 Subject: [PATCH 2/3] rc2 compiled with this PR Signed-off-by: Chris Lavin --- .classpath | 4 ++-- .github/workflows/build.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.classpath b/.classpath index ec742a7af..c0160b587 100644 --- a/.classpath +++ b/.classpath @@ -33,9 +33,9 @@ - + - + diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6ffeab1d6..089e752dd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,7 +5,7 @@ on: pull_request: env: - RAPIDWRIGHT_VERSION: v2024.2.1-rc1-beta + RAPIDWRIGHT_VERSION: v2024.2.1-rc2-beta jobs: build: From 524d8a5d7629bda08fd953e040a6c69a6153b63f Mon Sep 17 00:00:00 2001 From: Chris Lavin Date: Fri, 3 Jan 2025 18:13:19 -0700 Subject: [PATCH 3/3] rc4, compiled with EDIFNet.getPortInsts() API change Signed-off-by: Chris Lavin --- .classpath | 4 ++-- .github/workflows/build.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.classpath b/.classpath index 7e1b11d34..fbb11329b 100644 --- a/.classpath +++ b/.classpath @@ -33,9 +33,9 @@ - + - + diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0f0fc5068..829d3c4fe 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,7 +5,7 @@ on: pull_request: env: - RAPIDWRIGHT_VERSION: v2024.2.1-rc3-beta + RAPIDWRIGHT_VERSION: v2024.2.1-rc4-beta jobs: build: