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());
+ }
+ }
}