From c459bc6bf5e6a737449567087a3671b6e758c4f8 Mon Sep 17 00:00:00 2001 From: hneemann Date: Mon, 13 Mar 2017 19:59:18 +0100 Subject: [PATCH] Added nodes to CUPL and TT2 export to allow a better fitting. --- .../builder/Gal16v8/Gal16v8CuplExporter.java | 13 ++++-- .../de/neemann/digital/builder/PinMap.java | 12 ++++++ .../digital/builder/tt2/TT2Exporter.java | 41 +++++++++++-------- .../ATF1502/ATF1502CuplExporterTest.java | 1 + .../Gal16v8/Gal16V8CuplExporterTest.java | 1 + .../Gal22v10/Gal22V10CuplExporterTest.java | 1 + .../digital/builder/tt2/TT2ExporterTest.java | 3 ++ 7 files changed, 52 insertions(+), 20 deletions(-) diff --git a/src/main/java/de/neemann/digital/builder/Gal16v8/Gal16v8CuplExporter.java b/src/main/java/de/neemann/digital/builder/Gal16v8/Gal16v8CuplExporter.java index 31d0fb526..58aad1862 100644 --- a/src/main/java/de/neemann/digital/builder/Gal16v8/Gal16v8CuplExporter.java +++ b/src/main/java/de/neemann/digital/builder/Gal16v8/Gal16v8CuplExporter.java @@ -121,22 +121,27 @@ public class Gal16v8CuplExporter implements ExpressionExporter= 0) + out.append("PIN ").append(Integer.toString(p)).append(" = ").append(var).append(";\r\n"); + else + out.append("NODE ").append(var).append(";\r\n"); + } try { if (!builder.getRegistered().isEmpty()) { diff --git a/src/main/java/de/neemann/digital/builder/PinMap.java b/src/main/java/de/neemann/digital/builder/PinMap.java index 4848407ec..9d3976387 100644 --- a/src/main/java/de/neemann/digital/builder/PinMap.java +++ b/src/main/java/de/neemann/digital/builder/PinMap.java @@ -227,6 +227,18 @@ public class PinMap { return getPinFor(in, PinDescription.Direction.input); } + /** + * gets the assigned pin. + * + * @param in the pins name + * @return the pin number or -1 if not assigned + */ + public int isAssigned(String in) { + Integer p = searchPinWithAlias(in); + if (p == null) return -1; + else return p; + } + private int getPinFor(String in, PinDescription.Direction direction) throws PinMapException { Integer p = searchPinWithAlias(in); if (p == null) diff --git a/src/main/java/de/neemann/digital/builder/tt2/TT2Exporter.java b/src/main/java/de/neemann/digital/builder/tt2/TT2Exporter.java index 42453d440..3a51f8581 100644 --- a/src/main/java/de/neemann/digital/builder/tt2/TT2Exporter.java +++ b/src/main/java/de/neemann/digital/builder/tt2/TT2Exporter.java @@ -106,7 +106,8 @@ public class TT2Exporter implements ExpressionExporter { line("#$ MODULE " + projectName); line("#$ JEDECFILE " + projectName); line("#$ DEVICE " + device); - line("#$ PINS " + getPins()); + assignPinsAndNodes(); + //line("#$ PINS " + getPins()); line(".i " + inputs.size()); line(".o " + outputs.size()); line(".type f"); @@ -249,30 +250,38 @@ public class TT2Exporter implements ExpressionExporter { return sb.toString(); } - private String getPins() throws PinMapException { - StringBuilder sb = new StringBuilder(); - int numPins = builder.getInputs().size() + builder.getOutputs().size(); - if (!builder.getRegistered().isEmpty()) - numPins++; - - sb.append(numPins); - + private void assignPinsAndNodes() throws IOException, PinMapException { + int pinNum = 0; + StringBuilder pin = new StringBuilder(); + int nodeNum = 0; + StringBuilder node = new StringBuilder(); for (String i : builder.getInputs()) { int p = pinMap.getInputFor(i); - sb.append(" ").append(i).append("+:").append(p); + pin.append(" ").append(i).append("+:").append(p); + pinNum++; } - if (!builder.getRegistered().isEmpty()) - sb.append(" CLK+:").append(clockPin); + if (!builder.getRegistered().isEmpty()) { + pin.append(" CLK+:").append(clockPin); + pinNum++; + } for (String o : builder.getOutputs()) { - int p = pinMap.getInputFor(o); - sb.append(" ").append(o).append("+:").append(p); + int p = pinMap.isAssigned(o); + if (p >= 0) { + pin.append(" ").append(o).append("+:").append(p); + pinNum++; + } else { + node.append(" ").append(o); + nodeNum++; + } } - - return sb.toString(); + if (pinNum > 0) + line("#$ PINS " + pinNum + pin.toString()); + if (nodeNum > 0) + line("#$ NODES " + nodeNum + node.toString()); } private static class StateSet implements Comparable { diff --git a/src/test/java/de/neemann/digital/builder/ATF1502/ATF1502CuplExporterTest.java b/src/test/java/de/neemann/digital/builder/ATF1502/ATF1502CuplExporterTest.java index a2e54815d..71316f4d7 100644 --- a/src/test/java/de/neemann/digital/builder/ATF1502/ATF1502CuplExporterTest.java +++ b/src/test/java/de/neemann/digital/builder/ATF1502/ATF1502CuplExporterTest.java @@ -25,6 +25,7 @@ public class ATF1502CuplExporterTest extends TestCase { Expression y1s = or(and(not(y0), y1), and(y0, not(y1))); ATF1502CuplExporter ce = new ATF1502CuplExporter("user", new Date(0), "f1502ispplcc44"); + ce.getPinMapping().parseString("Y_0=4;Y_1=5;A=6"); ce.setProjectName("test"); ce.getBuilder() .addSequential("Y_0", y0s) diff --git a/src/test/java/de/neemann/digital/builder/Gal16v8/Gal16V8CuplExporterTest.java b/src/test/java/de/neemann/digital/builder/Gal16v8/Gal16V8CuplExporterTest.java index 54cba605a..887326929 100644 --- a/src/test/java/de/neemann/digital/builder/Gal16v8/Gal16V8CuplExporterTest.java +++ b/src/test/java/de/neemann/digital/builder/Gal16v8/Gal16V8CuplExporterTest.java @@ -26,6 +26,7 @@ public class Gal16V8CuplExporterTest extends TestCase { Gal16v8CuplExporter ce = new Gal16v8CuplExporter("user", new Date(0)) .setProjectName("test"); + ce.getPinMapping().parseString("Y_0=12;Y_1=13;A=14"); ce.getBuilder() .addSequential("Y_0", y0s) .addSequential("Y_1", y1s) diff --git a/src/test/java/de/neemann/digital/builder/Gal22v10/Gal22V10CuplExporterTest.java b/src/test/java/de/neemann/digital/builder/Gal22v10/Gal22V10CuplExporterTest.java index c2a0c109f..7a92d7423 100644 --- a/src/test/java/de/neemann/digital/builder/Gal22v10/Gal22V10CuplExporterTest.java +++ b/src/test/java/de/neemann/digital/builder/Gal22v10/Gal22V10CuplExporterTest.java @@ -25,6 +25,7 @@ public class Gal22V10CuplExporterTest extends TestCase { Expression y1s = or(and(not(y0), y1), and(y0, not(y1))); Gal22v10CuplExporter ce = new Gal22v10CuplExporter("user", new Date(0)); + ce.getPinMapping().parseString("Y_0=14;Y_1=15;A=16"); ce.setProjectName("test"); ce.getBuilder() .addSequential("Y_0", y0s) diff --git a/src/test/java/de/neemann/digital/builder/tt2/TT2ExporterTest.java b/src/test/java/de/neemann/digital/builder/tt2/TT2ExporterTest.java index 85cfb40a8..735c610fb 100644 --- a/src/test/java/de/neemann/digital/builder/tt2/TT2ExporterTest.java +++ b/src/test/java/de/neemann/digital/builder/tt2/TT2ExporterTest.java @@ -19,6 +19,7 @@ public class TT2ExporterTest extends TestCase { tt2.getPinMapping().setAvailBidirectional(4,5,6,8,20,21); tt2.getBuilder().addCombinatorial("Y", and(v("A"), v("B"))); tt2.getBuilder().addCombinatorial("X", or(v("A1"), v("B1"))); + tt2.getPinMapping().parseString("X=21;Y=20"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); tt2.writeTo(baos); @@ -46,6 +47,7 @@ public class TT2ExporterTest extends TestCase { TT2Exporter tt2 = new TT2Exporter(); tt2.getPinMapping().setAvailBidirectional(4,5,6,8,20,21); tt2.getBuilder().addSequential("Yn", and(v("A"), not(v("Yn")))); + tt2.getPinMapping().parseString("Yn=5"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); tt2.writeTo(baos); @@ -74,6 +76,7 @@ public class TT2ExporterTest extends TestCase { tt2.getPinMapping().setAvailBidirectional(4,5,6,8,20,21); tt2.getBuilder().addSequential("Yn", and(v("A"), not(v("Yn")))); tt2.getBuilder().addSequential("Xn", or(v("B"), not(v("Xn")))); + tt2.getPinMapping().parseString("Xn=8;Yn=6"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); tt2.writeTo(baos);