diff --git a/.classpath b/.classpath index b25e3983a..96d551ea9 100644 --- a/.classpath +++ b/.classpath @@ -33,9 +33,9 @@ - + - + diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5c52e554a..e837122ee 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,7 +5,7 @@ on: pull_request: env: - RAPIDWRIGHT_VERSION: v2022.2.0-beta + RAPIDWRIGHT_VERSION: v2022.2.1-beta jobs: build: diff --git a/RELEASE_NOTES.TXT b/RELEASE_NOTES.TXT index 0fbd8d97b..10a88c309 100644 --- a/RELEASE_NOTES.TXT +++ b/RELEASE_NOTES.TXT @@ -1,3 +1,18 @@ +============= RapidWright 2022.2.1-beta released on 2023-01-19 ================ +Notes: + - Preserves hwdef information in DCP (#597) + - Adds APIs to access BELAttr information in design (#598) + - Many improvements to RWRoute to cleanup code and improves both quality and runtime performance + - Fixes a bug with 2022.2 DCPs where hierarchical names were getting mangled in RapidWright (#603) + - Adds support for reading gzipped EDIF files + - Fixes an issue with Design.updateDesignWithCheckpointPlaceAndRoute() on more recent version DCPs (#601) + +- API Additions: + - com.xilinx.rapidwright.design.Design "public Map getBELAttrs()" + - com.xilinx.rapidwright.design.Design "public BELAttr addBELAttr(Net net, Site site, SiteTypeEnum type, BEL bel, String name, String value)" + - com.xilinx.rapidwright.device.Device "public BEL getBEL(SiteTypeEnum type, String belName)" + - com.xilinx.rapidwright.device.Device "public BEL[] getBELs(SiteTypeEnum type)" + ============= RapidWright 2022.2.0-beta released on 2022-11-16 ================ Notes: - Support for Vivado 2022.2 devices and DCPs diff --git a/test/src/com/xilinx/rapidwright/design/TestDCPLoad.java b/test/src/com/xilinx/rapidwright/design/TestDCPLoad.java index 48b2d4168..256db010b 100644 --- a/test/src/com/xilinx/rapidwright/design/TestDCPLoad.java +++ b/test/src/com/xilinx/rapidwright/design/TestDCPLoad.java @@ -27,17 +27,19 @@ import java.nio.file.Files; import java.nio.file.Path; -import com.xilinx.rapidwright.edif.EDIFTools; -import com.xilinx.rapidwright.support.RapidWrightDCP; -import com.xilinx.rapidwright.tests.CodePerfTracker; -import com.xilinx.rapidwright.util.FileTools; -import com.xilinx.rapidwright.util.Installer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +import com.xilinx.rapidwright.edif.EDIFHierCellInst; +import com.xilinx.rapidwright.edif.EDIFTools; +import com.xilinx.rapidwright.support.RapidWrightDCP; +import com.xilinx.rapidwright.tests.CodePerfTracker; +import com.xilinx.rapidwright.util.FileTools; +import com.xilinx.rapidwright.util.Installer; + /** * Tests the EDIF auto-generate mechanism when reading DCPs * @@ -125,6 +127,30 @@ public void testDCPFromVivado2022_1(String dcp) { @ParameterizedTest @ValueSource(strings = {"picoblaze_2022.2.dcp"}) public void testDCPFromVivado2022_2(String dcp) { - RapidWrightDCP.loadDCP(dcp); + Design design = RapidWrightDCP.loadDCP(dcp); + for (Cell c : design.getCells()) { + // Exclude PAD cells (port cells) as they don't have a corresponding + // EDIFHierCellInst, all cells with 'processor' are hierarchical + if (c.getName().contains("processor")) { + EDIFHierCellInst inst = c.getEDIFHierCellInst(); + Assertions.assertNotNull(inst); + Assertions.assertEquals(inst.toString(), c.getName()); + } + } + } + + @ParameterizedTest + @ValueSource(strings = { "bnn.dcp", "picoblaze_2022.2.dcp" }) + public void testUpdatePlaceAndRouteOfDesign(String dcp) { + boolean skipLoadingPlaceAndRoute = true; + Path dcpPath = RapidWrightDCP.getPath(dcp); + Design design = Design.readCheckpoint(dcpPath, skipLoadingPlaceAndRoute); + Assertions.assertEquals(0, design.getSiteInsts().size()); + design.updateDesignWithCheckpointPlaceAndRoute(dcpPath); + + Design origDesign = Design.readCheckpoint(dcpPath); + + Assertions.assertEquals(origDesign.getSiteInsts().size(), design.getSiteInsts().size()); + Assertions.assertEquals(origDesign.getNets().size(), design.getNets().size()); } } diff --git a/test/src/com/xilinx/rapidwright/design/TestNet.java b/test/src/com/xilinx/rapidwright/design/TestNet.java index 687d394e5..87b77a824 100644 --- a/test/src/com/xilinx/rapidwright/design/TestNet.java +++ b/test/src/com/xilinx/rapidwright/design/TestNet.java @@ -24,6 +24,7 @@ package com.xilinx.rapidwright.design; import com.xilinx.rapidwright.device.Device; +import com.xilinx.rapidwright.support.RapidWrightDCP; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; @@ -153,4 +154,26 @@ public void testRemovePinOnStaticNet() { gndNet.removePin(b6, true); Assertions.assertEquals(gndNet.getPIPs().size(), 0); } + + @Test + public void testGetLogicalHierNetDetachedNetlist() { + String dcpPath = RapidWrightDCP.getString("bnn.dcp"); + Design design = Design.readCheckpoint(dcpPath); + design.detachNetlist(); + + String[] hierPortNets = new String[]{ + "dmem_mode_V[0]", + "n_inputs_V[13]", + "n_inputs_V[1]", + "n_inputs_V[3]", + "n_inputs_V[5]", + "n_inputs_V[7]", + "n_inputs_V[9]", + }; + for (String name : hierPortNets) { + Net net = design.getNet(name); + Assertions.assertNotNull(net); + Assertions.assertNull(net.getLogicalHierNet()); + } + } }