diff --git a/src/com/xilinx/rapidwright/examples/PolynomialGenerator.java b/src/com/xilinx/rapidwright/examples/PolynomialGenerator.java index f7d87e2b5..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; @@ -388,34 +387,14 @@ 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); } + if (route) { + t.stop().start("RWRoute"); + d.flattenDesign(); RWRoute.routeDesignFullNonTimingDriven(d); } diff --git a/test/src/com/xilinx/rapidwright/examples/TestPolynomialGenerator.java b/test/src/com/xilinx/rapidwright/examples/TestPolynomialGenerator.java index 169dd9943..2905f2a3d 100644 --- a/test/src/com/xilinx/rapidwright/examples/TestPolynomialGenerator.java +++ b/test/src/com/xilinx/rapidwright/examples/TestPolynomialGenerator.java @@ -25,6 +25,9 @@ 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; import org.junit.jupiter.api.io.TempDir; import org.junit.jupiter.params.ParameterizedTest; @@ -41,10 +44,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, int expectedUnroutedPins, @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 +57,28 @@ 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()); + 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), - 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, 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) ); } }