From fb5537dba834ce5c9ed0eafe6381550e3692dea0 Mon Sep 17 00:00:00 2001 From: "helmut.neemann" Date: Tue, 14 Mar 2017 09:31:08 +0100 Subject: [PATCH] fixed a bug in creating CUPL files for GAL16v8 --- .../builder/ATF1502/ATF1502CuplExporter.java | 5 +- .../digital/builder/BuilderInterface.java | 3 +- ...6v8CuplExporter.java => CuplExporter.java} | 78 ++++++++++++------- .../Gal22v10/Gal22v10CuplExporter.java | 4 +- .../gui/components/table/TableDialog.java | 8 +- .../Gal16v8/Gal16V8CuplExporterTest.java | 10 +-- 6 files changed, 68 insertions(+), 40 deletions(-) rename src/main/java/de/neemann/digital/builder/Gal16v8/{Gal16v8CuplExporter.java => CuplExporter.java} (77%) diff --git a/src/main/java/de/neemann/digital/builder/ATF1502/ATF1502CuplExporter.java b/src/main/java/de/neemann/digital/builder/ATF1502/ATF1502CuplExporter.java index 3d2a307c7..a711123d8 100644 --- a/src/main/java/de/neemann/digital/builder/ATF1502/ATF1502CuplExporter.java +++ b/src/main/java/de/neemann/digital/builder/ATF1502/ATF1502CuplExporter.java @@ -1,6 +1,6 @@ package de.neemann.digital.builder.ATF1502; -import de.neemann.digital.builder.Gal16v8.Gal16v8CuplExporter; +import de.neemann.digital.builder.Gal16v8.CuplExporter; import de.neemann.digital.builder.PinMap; import java.io.IOException; @@ -12,7 +12,7 @@ import java.util.Date; * * @author hneemann */ -public class ATF1502CuplExporter extends Gal16v8CuplExporter { +public class ATF1502CuplExporter extends CuplExporter { /** * Creates a new project name @@ -33,6 +33,7 @@ public class ATF1502CuplExporter extends Gal16v8CuplExporter { 18, 19, 20, 21, 24, 25, 26, 27, 28, 29, 31, 33, 34, 36, 37, 38, 39, 40)); setClockPin(43); + setCreateNodes(true); } @Override diff --git a/src/main/java/de/neemann/digital/builder/BuilderInterface.java b/src/main/java/de/neemann/digital/builder/BuilderInterface.java index d6dc56560..c8b6a0960 100644 --- a/src/main/java/de/neemann/digital/builder/BuilderInterface.java +++ b/src/main/java/de/neemann/digital/builder/BuilderInterface.java @@ -1,11 +1,12 @@ package de.neemann.digital.builder; import de.neemann.digital.analyse.expression.Expression; +import de.neemann.digital.builder.Gal16v8.CuplExporter; /** * Interface used to create a circuit * There are two implementations: the {@link de.neemann.digital.builder.circuit.CircuitBuilder} creates a circuit and the - * {@link de.neemann.digital.builder.Gal16v8.Gal16v8CuplExporter} creates a CUPL file + * {@link CuplExporter} creates a CUPL file * which contains the circuit. * * @param concrete Builder Type diff --git a/src/main/java/de/neemann/digital/builder/Gal16v8/Gal16v8CuplExporter.java b/src/main/java/de/neemann/digital/builder/Gal16v8/CuplExporter.java similarity index 77% rename from src/main/java/de/neemann/digital/builder/Gal16v8/Gal16v8CuplExporter.java rename to src/main/java/de/neemann/digital/builder/Gal16v8/CuplExporter.java index 58aad1862..6e8c73d76 100644 --- a/src/main/java/de/neemann/digital/builder/Gal16v8/Gal16v8CuplExporter.java +++ b/src/main/java/de/neemann/digital/builder/Gal16v8/CuplExporter.java @@ -21,11 +21,12 @@ import java.util.HashSet; import java.util.Map; /** - * Creates a CUPL file + * Creates a CUPL file. + * The default setting is usable for GAL16V8 chips. * * @author hneemann */ -public class Gal16v8CuplExporter implements ExpressionExporter { +public class CuplExporter implements ExpressionExporter { private final DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy"); private final String username; @@ -36,12 +37,13 @@ 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"); + if (createNodes) { + int p = pinMap.isAssigned(var); + if (p >= 0) + out.append("PIN ").append(Integer.toString(p)).append(" = ").append(var).append(";\r\n"); + else + out.append("NODE ").append(var).append(";\r\n"); + } else { + out.append("PIN ").append(Integer.toString(pinMap.getOutputFor(var))).append(" = ").append(var).append(";\r\n"); + } } try { if (!builder.getRegistered().isEmpty()) { out.append("\r\n/* sequential logic */\r\n"); for (Map.Entry c : builder.getRegistered().entrySet()) { - out - .append(c.getKey()) - .append(".D = ") - .append(FormatToExpression.FORMATTER_CUPL.format(c.getValue())) - .append(";\r\n"); + out.append(c.getKey()).append(".D = "); + breakLines(out, FormatToExpression.FORMATTER_CUPL.format(c.getValue())); + out.append(";\r\n"); sequentialWritten(out, c.getKey()); } } if (!builder.getCombinatorial().isEmpty()) { out.append("\r\n/* combinatorial logic */\r\n"); - for (Map.Entry c : builder.getCombinatorial().entrySet()) - out - .append(c.getKey()).append(" = ") - .append(FormatToExpression.FORMATTER_CUPL.format(c.getValue())) - .append(";\r\n"); - + for (Map.Entry c : builder.getCombinatorial().entrySet()) { + out.append(c.getKey()).append(" = "); + breakLines(out, FormatToExpression.FORMATTER_CUPL.format(c.getValue())); + out.append(";\r\n"); + } } } catch (FormatterException e) { throw new IOException(e); @@ -172,6 +185,19 @@ public class Gal16v8CuplExporter implements ExpressionExporter 80 && c == '#') { + out.append("\r\n "); + pos = 0; + } + out.append(c); + pos++; + } + } + @Override public void writeTo(OutputStream out) throws FuseMapFillerException, IOException, PinMapException { writeTo(new OutputStreamWriter(out, "ISO-8859-1")); 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 5747ebef0..1f11aa181 100644 --- a/src/main/java/de/neemann/digital/builder/Gal22v10/Gal22v10CuplExporter.java +++ b/src/main/java/de/neemann/digital/builder/Gal22v10/Gal22v10CuplExporter.java @@ -1,6 +1,6 @@ package de.neemann.digital.builder.Gal22v10; -import de.neemann.digital.builder.Gal16v8.Gal16v8CuplExporter; +import de.neemann.digital.builder.Gal16v8.CuplExporter; import de.neemann.digital.builder.PinMap; import java.io.IOException; @@ -12,7 +12,7 @@ import java.util.Date; * * @author hneemann */ -public class Gal22v10CuplExporter extends Gal16v8CuplExporter { +public class Gal22v10CuplExporter extends CuplExporter { /** * Creates a new project name diff --git a/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java b/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java index 9e1631788..e402d8b0b 100644 --- a/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java +++ b/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java @@ -15,7 +15,7 @@ import de.neemann.digital.analyse.format.TruthTableFormatterLaTeX; import de.neemann.digital.analyse.quinemc.BoolTableByteArray; import de.neemann.digital.builder.ATF1502.*; import de.neemann.digital.builder.*; -import de.neemann.digital.builder.Gal16v8.Gal16v8CuplExporter; +import de.neemann.digital.builder.Gal16v8.CuplExporter; import de.neemann.digital.builder.Gal16v8.Gal16v8JEDECExporter; import de.neemann.digital.builder.Gal22v10.Gal22v10CuplExporter; import de.neemann.digital.builder.Gal22v10.Gal22v10JEDECExporter; @@ -396,7 +396,7 @@ public class TableDialog extends JDialog { gal16v8.add(new ToolTipAction(Lang.get("menu_table_createCUPL")) { @Override public void actionPerformed(ActionEvent actionEvent) { - createCUPL(new Gal16v8CuplExporter()); + createCUPL(new CuplExporter()); } }.setToolTip(Lang.get("menu_table_createCUPL_tt")).createJMenuItem()); gal16v8.add(new ToolTipAction(Lang.get("menu_table_create_jedec")) { @@ -505,7 +505,7 @@ public class TableDialog extends JDialog { } } - private void createCUPL(Gal16v8CuplExporter cupl) { + private void createCUPL(CuplExporter cupl) { try { File cuplPath; if (filename == null) { @@ -534,7 +534,7 @@ public class TableDialog extends JDialog { throw new IOException(Lang.get("err_couldNotCreateFolder_N0", cuplPath.getPath())); File f = new File(cuplPath, "CUPL.PLD"); - cupl.setProjectName(f.getName()); + cupl.setProjectName(filename.getName()); cupl.getPinMapping().addAll(pinMap); new BuilderExpressionCreator(cupl.getBuilder(), ExpressionModifier.IDENTITY).create(lastGeneratedExpressions); try (FileOutputStream out = new FileOutputStream(f)) { 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 887326929..818af761b 100644 --- a/src/test/java/de/neemann/digital/builder/Gal16v8/Gal16V8CuplExporterTest.java +++ b/src/test/java/de/neemann/digital/builder/Gal16v8/Gal16V8CuplExporterTest.java @@ -24,7 +24,7 @@ public class Gal16V8CuplExporterTest extends TestCase { Expression y0s = not(y0); Expression y1s = or(and(not(y0), y1), and(y0, not(y1))); - Gal16v8CuplExporter ce = new Gal16v8CuplExporter("user", new Date(0)) + CuplExporter ce = new CuplExporter("user", new Date(0)) .setProjectName("test"); ce.getPinMapping().parseString("Y_0=12;Y_1=13;A=14"); ce.getBuilder() @@ -67,12 +67,12 @@ public class Gal16V8CuplExporterTest extends TestCase { Expression y0s = not(y0); try { - new Gal16v8CuplExporter("user", new Date(0)) + new CuplExporter("user", new Date(0)) .setProjectName("test") .getBuilder() .addSequential("Y_0", y0s); - assertTrue(false); + fail(); } catch (RuntimeException e) { assertTrue(true); } @@ -84,12 +84,12 @@ public class Gal16V8CuplExporterTest extends TestCase { Expression y0s = not(y0); try { - new Gal16v8CuplExporter("user", new Date(0)) + new CuplExporter("user", new Date(0)) .setProjectName("test") .getBuilder() .addCombinatorial("D", y0s); - assertTrue(false); + fail(); } catch (RuntimeException e) { assertTrue(true); }