From b4c4b8787decc93f0d7674be32635b16d8ea97bc Mon Sep 17 00:00:00 2001 From: Eddie Hung Date: Mon, 16 Oct 2023 10:41:17 -0700 Subject: [PATCH 1/5] More Polynomial Generator improvements Signed-off-by: Eddie Hung --- .../examples/PolynomialGenerator.java | 29 ++++--------------- 1 file changed, 5 insertions(+), 24 deletions(-) diff --git a/src/com/xilinx/rapidwright/examples/PolynomialGenerator.java b/src/com/xilinx/rapidwright/examples/PolynomialGenerator.java index f7d87e2b5..57295fd41 100644 --- a/src/com/xilinx/rapidwright/examples/PolynomialGenerator.java +++ b/src/com/xilinx/rapidwright/examples/PolynomialGenerator.java @@ -388,34 +388,15 @@ public static Design generatePolynomial(String polynomial, String name, int widt d.addXDCConstraint(ConstraintGroup.LATE, "create_clock -name "+CLK_NAME+" -period 1.291 [get_ports "+CLK_NAME+"]"); d.addXDCConstraint(ConstraintGroup.LATE, "set_property HD.CLK_SRC BUFGCE_X0Y18 [get_ports "+CLK_NAME+"]"); - t.stop().start("Final Route"); - - - Map parentNetMap = n.getParentNetMapNames(); - for (Net net : new ArrayList<>(d.getNets())) { - if (net.getPins().size() > 0 && net.getSource() == null) { - if (net.isStaticNet()) continue; - String parentNet = parentNetMap.get(net.getName()); - if (parentNet.equals(EDIFTools.LOGICAL_VCC_NET_NAME)) { - d.movePinsToNewNetDeleteOldNet(net, d.getVccNet(), true); - continue; - } else if (parentNet.equals(EDIFTools.LOGICAL_GND_NET_NAME)) { - d.movePinsToNewNetDeleteOldNet(net, d.getGndNet(), true); - continue; - } - Net parent = d.getNet(parentNet); - if (parent == null) { - continue; - } - d.movePinsToNewNetDeleteOldNet(net, parent, true); - - } - } - if (invokeHandPlacer) { + t.stop().start("Hand Placer"); HandPlacer.openDesign(d); } + + t.stop().start("Final Route"); + if (route) { + d.flattenDesign(); RWRoute.routeDesignFullNonTimingDriven(d); } From 4aa5ce3fe5df23e2da52f7f7d6fa458ad24c405f Mon Sep 17 00:00:00 2001 From: Eddie Hung Date: Mon, 16 Oct 2023 10:47:09 -0700 Subject: [PATCH 2/5] Improve TestPolynomialGenerator Signed-off-by: Eddie Hung --- .../examples/TestPolynomialGenerator.java | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/test/src/com/xilinx/rapidwright/examples/TestPolynomialGenerator.java b/test/src/com/xilinx/rapidwright/examples/TestPolynomialGenerator.java index 169dd9943..bfdedae5b 100644 --- a/test/src/com/xilinx/rapidwright/examples/TestPolynomialGenerator.java +++ b/test/src/com/xilinx/rapidwright/examples/TestPolynomialGenerator.java @@ -25,6 +25,8 @@ import java.nio.file.Path; import java.util.stream.Stream; +import com.xilinx.rapidwright.util.ReportRouteStatusResult; +import com.xilinx.rapidwright.util.VivadoTools; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.io.TempDir; import org.junit.jupiter.params.ParameterizedTest; @@ -41,10 +43,10 @@ public class TestPolynomialGenerator { @ParameterizedTest @MethodSource - public void testPolynomialGenerator(String polynomial, int bitWidth, @TempDir Path dir) { + public void testPolynomialGenerator(String polynomial, int bitWidth, boolean route, @TempDir Path dir) { Path dcp = dir.resolve("polynomial.dcp"); - PolynomialGenerator.generatePolynomial(polynomial, "test", bitWidth, true, dcp.toString(), null, false); + PolynomialGenerator.generatePolynomial(polynomial, "test", bitWidth, route, dcp.toString(), null, false); Design d = Design.readCheckpoint(dcp); @@ -54,19 +56,25 @@ public void testPolynomialGenerator(String polynomial, int bitWidth, @TempDir Pa Assertions.assertTrue(c.isPlaced()); } - DesignTools.updatePinsIsRouted(d); - for (Net n : d.getNets()) { - for (SitePinInst spi : n.getPins()) { - Assertions.assertTrue(spi.isRouted()); - } + ReportRouteStatusResult rrs = VivadoTools.reportRouteStatus(d); + if (route) { + Assertions.assertTrue(rrs.isFullyRouted()); + } else { + Assertions.assertTrue(rrs.unroutedNets > 0); + Assertions.assertEquals(0, rrs.netsWithRoutingErrors); } } public static Stream testPolynomialGenerator() { return Stream.of( - Arguments.of("x^2+3*x+5", 16), - Arguments.of("8*x^4+43*x^3+7*x^2-14", 18), - Arguments.of("8*y^4+43*y*x^3+7*x^2-14", 18) + Arguments.of("x^2+3*x+5", 16, true), + Arguments.of("x^2+3*x+5", 16, false), + Arguments.of("8*x^4+43*x^3+7*x^2-14", 18, true), + Arguments.of("8*x^4+43*x^3+7*x^2-14", 18, false), + Arguments.of("8*y^4+43*y*x^3+7*x^2-14", 18, true), // Section 3: "More Complex Polynomial" + Arguments.of("8*y^4+43*y*x^3+7*x^2-14", 18, false), + Arguments.of("3*x^2+x-2 16", 16, true), // Section 2: "Simple Polynomial Circuit" + Arguments.of("3*x^2+x-2 16", 16, false) ); } } From ff22fbbc4400ad0691a5dc125afa8dc6527b8664 Mon Sep 17 00:00:00 2001 From: Eddie Hung Date: Mon, 16 Oct 2023 10:49:48 -0700 Subject: [PATCH 3/5] Rename segment name to RWRoute and move into if Signed-off-by: Eddie Hung --- src/com/xilinx/rapidwright/examples/PolynomialGenerator.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/com/xilinx/rapidwright/examples/PolynomialGenerator.java b/src/com/xilinx/rapidwright/examples/PolynomialGenerator.java index 57295fd41..f68c2730f 100644 --- a/src/com/xilinx/rapidwright/examples/PolynomialGenerator.java +++ b/src/com/xilinx/rapidwright/examples/PolynomialGenerator.java @@ -393,10 +393,8 @@ public static Design generatePolynomial(String polynomial, String name, int widt HandPlacer.openDesign(d); } - t.stop().start("Final Route"); - if (route) { - d.flattenDesign(); + t.stop().start("RWRoute"); RWRoute.routeDesignFullNonTimingDriven(d); } From 9ce85d2bc89e5b444129e7e0ff1e8c158035e14f Mon Sep 17 00:00:00 2001 From: Eddie Hung Date: Mon, 16 Oct 2023 11:23:21 -0700 Subject: [PATCH 4/5] Fix TestPolynomialGenerator tests Signed-off-by: Eddie Hung --- .../examples/TestPolynomialGenerator.java | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/test/src/com/xilinx/rapidwright/examples/TestPolynomialGenerator.java b/test/src/com/xilinx/rapidwright/examples/TestPolynomialGenerator.java index bfdedae5b..2905f2a3d 100644 --- a/test/src/com/xilinx/rapidwright/examples/TestPolynomialGenerator.java +++ b/test/src/com/xilinx/rapidwright/examples/TestPolynomialGenerator.java @@ -25,6 +25,7 @@ import java.nio.file.Path; import java.util.stream.Stream; +import com.xilinx.rapidwright.util.FileTools; import com.xilinx.rapidwright.util.ReportRouteStatusResult; import com.xilinx.rapidwright.util.VivadoTools; import org.junit.jupiter.api.Assertions; @@ -43,7 +44,7 @@ public class TestPolynomialGenerator { @ParameterizedTest @MethodSource - public void testPolynomialGenerator(String polynomial, int bitWidth, boolean route, @TempDir Path dir) { + public void testPolynomialGenerator(String polynomial, int bitWidth, boolean route, int expectedUnroutedPins, @TempDir Path dir) { Path dcp = dir.resolve("polynomial.dcp"); PolynomialGenerator.generatePolynomial(polynomial, "test", bitWidth, route, dcp.toString(), null, false); @@ -56,25 +57,28 @@ public void testPolynomialGenerator(String polynomial, int bitWidth, boolean rou Assertions.assertTrue(c.isPlaced()); } - ReportRouteStatusResult rrs = VivadoTools.reportRouteStatus(d); - if (route) { - Assertions.assertTrue(rrs.isFullyRouted()); - } else { - Assertions.assertTrue(rrs.unroutedNets > 0); - Assertions.assertEquals(0, rrs.netsWithRoutingErrors); + if (FileTools.isVivadoOnPath()) { + ReportRouteStatusResult rrs = VivadoTools.reportRouteStatus(d); + if (route) { + Assertions.assertTrue(rrs.isFullyRouted()); + } else { + Assertions.assertTrue(rrs.unroutedNets > 0); + Assertions.assertEquals(expectedUnroutedPins, rrs.netsWithRoutingErrors); + Assertions.assertEquals(expectedUnroutedPins, rrs.netsWithSomeUnroutedPins); + } } } public static Stream testPolynomialGenerator() { return Stream.of( - Arguments.of("x^2+3*x+5", 16, true), - Arguments.of("x^2+3*x+5", 16, false), - Arguments.of("8*x^4+43*x^3+7*x^2-14", 18, true), - Arguments.of("8*x^4+43*x^3+7*x^2-14", 18, false), - Arguments.of("8*y^4+43*y*x^3+7*x^2-14", 18, true), // Section 3: "More Complex Polynomial" - Arguments.of("8*y^4+43*y*x^3+7*x^2-14", 18, false), - Arguments.of("3*x^2+x-2 16", 16, true), // Section 2: "Simple Polynomial Circuit" - Arguments.of("3*x^2+x-2 16", 16, false) + Arguments.of("x^2+3*x+5", 16, true, 0), + Arguments.of("x^2+3*x+5", 16, false, 0), + Arguments.of("8*x^4+43*x^3+7*x^2-14", 18, true, 0), + Arguments.of("8*x^4+43*x^3+7*x^2-14", 18, false, 1), + Arguments.of("8*y^4+43*y*x^3+7*x^2-14", 18, true, 0), // Section 3: "More Complex Polynomial" + Arguments.of("8*y^4+43*y*x^3+7*x^2-14", 18, false, 1), + Arguments.of("3*x^2+x-2 16", 16, true, 0), // Section 2: "Simple Polynomial Circuit" + Arguments.of("3*x^2+x-2 16", 16, false, 0) ); } } From 51da476a81a4e5f34694f18ce9c3dce1471649b7 Mon Sep 17 00:00:00 2001 From: Chris Lavin Date: Mon, 16 Oct 2023 15:18:42 -0600 Subject: [PATCH 5/5] Flatten design before routing Signed-off-by: Chris Lavin --- src/com/xilinx/rapidwright/examples/PolynomialGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/xilinx/rapidwright/examples/PolynomialGenerator.java b/src/com/xilinx/rapidwright/examples/PolynomialGenerator.java index f68c2730f..32d23667b 100644 --- a/src/com/xilinx/rapidwright/examples/PolynomialGenerator.java +++ b/src/com/xilinx/rapidwright/examples/PolynomialGenerator.java @@ -34,7 +34,6 @@ import com.xilinx.rapidwright.design.Design; import com.xilinx.rapidwright.design.Module; import com.xilinx.rapidwright.design.ModuleInst; -import com.xilinx.rapidwright.design.Net; import com.xilinx.rapidwright.design.NetType; import com.xilinx.rapidwright.design.SiteInst; import com.xilinx.rapidwright.design.blocks.PBlock; @@ -395,6 +394,7 @@ public static Design generatePolynomial(String polynomial, String name, int widt if (route) { t.stop().start("RWRoute"); + d.flattenDesign(); RWRoute.routeDesignFullNonTimingDriven(d); }