From d79c5c80e958a1ffc425d3aabda921fbd841554c Mon Sep 17 00:00:00 2001 From: hneemann Date: Mon, 12 Apr 2021 21:27:23 +0200 Subject: [PATCH 1/2] adds a text case, see #707 --- .../Gal16v8/Gal16V8CuplExporterTest.java | 27 ++- src/test/resources/dig/GAL/Names.dig | 154 ++++++++++++++++++ 2 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 src/test/resources/dig/GAL/Names.dig 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 5f45e0054..968fa5a91 100644 --- a/src/test/java/de/neemann/digital/builder/Gal16v8/Gal16V8CuplExporterTest.java +++ b/src/test/java/de/neemann/digital/builder/Gal16v8/Gal16V8CuplExporterTest.java @@ -209,8 +209,32 @@ public class Gal16V8CuplExporterTest extends TestCase { "X = A;\r\n", cupl); } + public void testCuplNames() throws IOException, ElementNotFoundException, PinException, NodeException, AnalyseException, BacktrackException, PinMapException, ExpressionException, FormatterException { + String cupl = createCupl("dig/GAL/Names.dig", 1, 2, 3, 4, 5); + assertEquals("Name test ;\r\n" + + "PartNo 00 ;\r\n" + + "Date unknownDate ;\r\n" + + "Revision 01 ;\r\n" + + "Designer nn ;\r\n" + + "Company unknown ;\r\n" + + "Assembly None ;\r\n" + + "Location unknown ;\r\n" + + "Device g16v8a ;\r\n" + + "\r\n" + + "/* inputs */\r\n" + + "PIN 5 = A;\r\n" + + "PIN 2 = A1;\r\n" + + "PIN 3 = B2;\r\n" + + "PIN 4 = C_2;\r\n" + + "\r\n" + + "/* outputs */\r\n" + + "PIN 1 = Y;\r\n" + + "\r\n" + + "/* combinatorial logic */\r\n" + + "Y = (A & C_2) # (A1 & B2);\r\n", cupl); + } - private String createCupl(String filename) throws IOException, PinException, NodeException, ElementNotFoundException, BacktrackException, AnalyseException, ExpressionException, FormatterException, PinMapException { + private String createCupl(String filename, int... pins) throws IOException, PinException, NodeException, ElementNotFoundException, BacktrackException, AnalyseException, ExpressionException, FormatterException, PinMapException { File f = new File(Resources.getRoot(), filename); ElementLibrary library = new ElementLibrary(); Circuit c = Circuit.loadCircuit(f, new ShapeFactory(library)); @@ -221,6 +245,7 @@ public class Gal16V8CuplExporterTest extends TestCase { new ExpressionCreator(t).create(expressions); CuplExporter cuplExporter = new CuplExporter("nn", null); + cuplExporter.getPinMapping().setAvailBidirectional(pins); cuplExporter.setProjectName("test"); final ModelAnalyserInfo modelAnalyzerInfo = t.getModelAnalyzerInfo(); if (modelAnalyzerInfo != null) diff --git a/src/test/resources/dig/GAL/Names.dig b/src/test/resources/dig/GAL/Names.dig new file mode 100644 index 000000000..8a68a95c9 --- /dev/null +++ b/src/test/resources/dig/GAL/Names.dig @@ -0,0 +1,154 @@ + + + 1 + + + + And + + + wideShape + true + + + + + + And + + + wideShape + true + + + + + + Or + + + wideShape + true + + + + + + Out + + + Label + Y + + + pinNumber + 1 + + + + + + In + + + Label + A-1 + + + pinNumber + 2 + + + + + + In + + + Label + B^2 + + + pinNumber + 3 + + + + + + In + + + Label + C_2 + + + pinNumber + 4 + + + + + + In + + + Label + A + + + pinNumber + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 51b4ed90f44989fc5a3b46765c15b76013bf0d09 Mon Sep 17 00:00:00 2001 From: hneemann Date: Tue, 13 Apr 2021 16:22:41 +0200 Subject: [PATCH 2/2] fixes a cupl export bug, see #707 --- .../builder/ATF150x/ATF150xCuplExporter.java | 6 +++--- .../neemann/digital/builder/CleanNameBuilder.java | 11 ++++++++++- .../digital/builder/Gal16v8/CuplExporter.java | 15 ++++++++------- .../builder/Gal22v10/Gal22v10CuplExporter.java | 6 +++--- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/main/java/de/neemann/digital/builder/ATF150x/ATF150xCuplExporter.java b/src/main/java/de/neemann/digital/builder/ATF150x/ATF150xCuplExporter.java index 3905d3b17..f0f5acfa6 100644 --- a/src/main/java/de/neemann/digital/builder/ATF150x/ATF150xCuplExporter.java +++ b/src/main/java/de/neemann/digital/builder/ATF150x/ATF150xCuplExporter.java @@ -6,7 +6,6 @@ package de.neemann.digital.builder.ATF150x; import de.neemann.digital.builder.Gal16v8.CuplExporter; -import de.neemann.digital.builder.PinMap; import java.io.IOException; import java.io.Writer; @@ -38,8 +37,9 @@ public class ATF150xCuplExporter extends CuplExporter { * @param pins the bidirectional pins */ public ATF150xCuplExporter(String username, Date date, String devName, int clockPin, int[] pins) { - super(username, date, devName, new PinMap() - .setAvailBidirectional(pins)); + super(username, date, devName); + getPinMapping() + .setAvailBidirectional(pins); setClockPin(clockPin); setCreateNodes(true); } diff --git a/src/main/java/de/neemann/digital/builder/CleanNameBuilder.java b/src/main/java/de/neemann/digital/builder/CleanNameBuilder.java index 2343ad4f9..6f3cf5412 100644 --- a/src/main/java/de/neemann/digital/builder/CleanNameBuilder.java +++ b/src/main/java/de/neemann/digital/builder/CleanNameBuilder.java @@ -16,7 +16,7 @@ import java.util.HashMap; */ public class CleanNameBuilder implements BuilderInterface { - private final BuilderInterface parent; + private BuilderInterface parent; private final Filter filter; private final HashMap nameMap; @@ -93,6 +93,15 @@ public class CleanNameBuilder implements BuilderInterface { }; } + /** + * Sets the parent builder. + * + * @param parent the parents builder + */ + public void setParent(BuilderInterface parent) { + this.parent = parent; + } + /** * Filter interface */ diff --git a/src/main/java/de/neemann/digital/builder/Gal16v8/CuplExporter.java b/src/main/java/de/neemann/digital/builder/Gal16v8/CuplExporter.java index 4b8ab8043..6ad7377a3 100644 --- a/src/main/java/de/neemann/digital/builder/Gal16v8/CuplExporter.java +++ b/src/main/java/de/neemann/digital/builder/Gal16v8/CuplExporter.java @@ -34,7 +34,7 @@ public class CuplExporter implements ExpressionExporter { private final String username; private final Date date; private final BuilderCollector builder; - private final BuilderInterface cleanNameBuilder; + private final CleanNameBuilder cleanNameBuilder; private final PinMap pinMap; private final String devName; @@ -57,9 +57,10 @@ public class CuplExporter implements ExpressionExporter { * @param date date */ public CuplExporter(String username, Date date) { - this(username, date, "g16v8a", new PinMap() + this(username, date, "g16v8a"); + getPinMapping() .setAvailInputs(2, 3, 4, 5, 6, 7, 8, 9) - .setAvailOutputs(12, 13, 14, 15, 16, 17, 18, 19)); + .setAvailOutputs(12, 13, 14, 15, 16, 17, 18, 19); } /** @@ -77,15 +78,15 @@ public class CuplExporter implements ExpressionExporter { * @param username user name * @param date creation date * @param devName device name - * @param pinMap the pin map to use */ - protected CuplExporter(String username, Date date, String devName, PinMap pinMap) { + protected CuplExporter(String username, Date date, String devName) { this.username = username; this.date = date; this.devName = devName; - this.pinMap = pinMap; + cleanNameBuilder = new CleanNameBuilder(null); + this.pinMap = cleanNameBuilder.createPinMap(); builder = new CuplBuilder(pinMap); - cleanNameBuilder = new CleanNameBuilder(builder); + cleanNameBuilder.setParent(builder); } /** diff --git a/src/main/java/de/neemann/digital/builder/Gal22v10/Gal22v10CuplExporter.java b/src/main/java/de/neemann/digital/builder/Gal22v10/Gal22v10CuplExporter.java index 35b7bd3e4..d73c36c31 100644 --- a/src/main/java/de/neemann/digital/builder/Gal22v10/Gal22v10CuplExporter.java +++ b/src/main/java/de/neemann/digital/builder/Gal22v10/Gal22v10CuplExporter.java @@ -6,7 +6,6 @@ package de.neemann.digital.builder.Gal22v10; import de.neemann.digital.builder.Gal16v8.CuplExporter; -import de.neemann.digital.builder.PinMap; import java.io.IOException; import java.io.Writer; @@ -31,9 +30,10 @@ public class Gal22v10CuplExporter extends CuplExporter { * @param date date */ public Gal22v10CuplExporter(String username, Date date) { - super(username, date, "g22v10", new PinMap() + super(username, date, "g22v10"); + getPinMapping() .setAvailInputs(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13) - .setAvailOutputs(14, 15, 16, 17, 18, 19, 20, 21, 22, 23)); + .setAvailOutputs(14, 15, 16, 17, 18, 19, 20, 21, 22, 23); } @Override