diff --git a/src/main/dig/74xx/lib/74116.dig b/src/main/dig/74xx/lib/74116.dig index 0a324aba2..033194b9b 100644 --- a/src/main/dig/74xx/lib/74116.dig +++ b/src/main/dig/74xx/lib/74116.dig @@ -6,6 +6,10 @@ isDIL true + + Description + Dual 4-bit D-type latches + lockedMode true diff --git a/src/main/dig/74xx/lib/74138.dig b/src/main/dig/74xx/lib/74138.dig index 058bd6c8d..9a50b5c8a 100644 --- a/src/main/dig/74xx/lib/74138.dig +++ b/src/main/dig/74xx/lib/74138.dig @@ -8,7 +8,7 @@ Description - 3-line to 8-line decoder/demultiplexer + 3-line to 8-line decoder/demultiplexer, inverted out lockedMode diff --git a/src/main/dig/74xx/lib/74139.dig b/src/main/dig/74xx/lib/74139.dig index ab3f28194..5f2ff6907 100644 --- a/src/main/dig/74xx/lib/74139.dig +++ b/src/main/dig/74xx/lib/74139.dig @@ -8,7 +8,11 @@ Description - 3-line to 8-line decoder/demultiplexer + Dual 2-line to 4-line decoder/demultiplexer + + + lockedMode + true diff --git a/src/main/dig/74xx/lib/74147.dig b/src/main/dig/74xx/lib/74147.dig new file mode 100644 index 000000000..4d23aae37 --- /dev/null +++ b/src/main/dig/74xx/lib/74147.dig @@ -0,0 +1,1016 @@ + + + 1 + + + isDIL + true + + + pinCount + 16 + + + Description + 10-line to 4-line priority encoder + + + lockedMode + true + + + + + Or + + + Inputs + 5 + + + + + + And + + + Inputs + 5 + + + + + + And + + + Inputs + 5 + + + + + + And + + + Inputs + 4 + + + + + + And + + + Inputs + 3 + + + + + + And + + + + + Or + + + Inputs + 5 + + + + + + And + + + Inputs + 4 + + + + + + And + + + Inputs + 3 + + + + + + And + + + Inputs + 3 + + + + + + Or + + + Inputs + 3 + + + + + + And + + + Inputs + 4 + + + + + + And + + + + + Not + + + rotation + + + + + + + Not + + + rotation + + + + + + + Not + + + rotation + + + + + + + Not + + + rotation + + + + + + + Not + + + rotation + + + + + + + Not + + + rotation + + + + + + + In + + + rotation + + + + Label + I9 + + + pinNumber + 10 + + + + + + In + + + rotation + + + + Label + I8 + + + pinNumber + 5 + + + + + + In + + + rotation + + + + Label + I7 + + + pinNumber + 4 + + + + + + In + + + rotation + + + + Label + I6 + + + pinNumber + 3 + + + + + + In + + + rotation + + + + Label + I5 + + + pinNumber + 2 + + + + + + In + + + rotation + + + + Label + I4 + + + pinNumber + 1 + + + + + + In + + + rotation + + + + Label + I3 + + + pinNumber + 13 + + + + + + In + + + rotation + + + + Label + I2 + + + pinNumber + 12 + + + + + + In + + + rotation + + + + Label + I1 + + + pinNumber + 11 + + + + + + Out + + + Label + A + + + pinNumber + 9 + + + Inputs + 1 + + + + + + Out + + + Label + B + + + pinNumber + 7 + + + Inputs + 1 + + + + + + Out + + + Label + C + + + pinNumber + 6 + + + Inputs + 1 + + + + + + Out + + + Label + D + + + pinNumber + 14 + + + Inputs + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/dig/74xx/lib/74162.dig b/src/main/dig/74xx/lib/74162.dig index d1205aab9..96cf0947f 100644 --- a/src/main/dig/74xx/lib/74162.dig +++ b/src/main/dig/74xx/lib/74162.dig @@ -20,6 +20,10 @@ counter; synchronous reset 255 + + lockedMode + true + diff --git a/src/main/dig/74xx/lib/74198.dig b/src/main/dig/74xx/lib/74198.dig index 271408898..67c4e0f8d 100644 --- a/src/main/dig/74xx/lib/74198.dig +++ b/src/main/dig/74xx/lib/74198.dig @@ -6,6 +6,10 @@ isDIL true + + Description + 8-BIT SHIFT REGISTERS + lockedMode true diff --git a/src/main/dig/74xx/lib/74238.dig b/src/main/dig/74xx/lib/74238.dig index 62e65c628..470f6c82c 100644 --- a/src/main/dig/74xx/lib/74238.dig +++ b/src/main/dig/74xx/lib/74238.dig @@ -10,6 +10,10 @@ Description 3-line to 8-line decoder/demultiplexer + + lockedMode + true + diff --git a/src/main/dig/74xx/lib/74260.dig b/src/main/dig/74xx/lib/74260.dig index 5de240591..921c10dda 100644 --- a/src/main/dig/74xx/lib/74260.dig +++ b/src/main/dig/74xx/lib/74260.dig @@ -10,6 +10,10 @@ Description DUAL 5-INPUT NOR GATE + + lockedMode + true + diff --git a/src/main/dig/74xx/lib/7447.dig b/src/main/dig/74xx/lib/7447.dig index 3e943de81..3825f1fa4 100644 --- a/src/main/dig/74xx/lib/7447.dig +++ b/src/main/dig/74xx/lib/7447.dig @@ -8,7 +8,11 @@ Description - BCD to 7-segment decoder + BCD to 7-segment decoder, active high + + + lockedMode + true diff --git a/src/main/dig/74xx/lib/7448.dig b/src/main/dig/74xx/lib/7448.dig index aa01ba894..5f3ab38bd 100644 --- a/src/main/dig/74xx/lib/7448.dig +++ b/src/main/dig/74xx/lib/7448.dig @@ -8,7 +8,11 @@ Description - BCD to 7-segment decoder + BCD to 7-segment decoder, active low + + + lockedMode + true diff --git a/src/main/dig/74xx/lib/7451.dig b/src/main/dig/74xx/lib/7451.dig index 8234f5d40..930d12a0c 100644 --- a/src/main/dig/74xx/lib/7451.dig +++ b/src/main/dig/74xx/lib/7451.dig @@ -10,6 +10,10 @@ Description 2-Input/3-Input And-Or invert Gate + + lockedMode + true + diff --git a/src/main/dig/74xx/lib/7476.dig b/src/main/dig/74xx/lib/7476.dig index 467556888..a5c778af6 100644 --- a/src/main/dig/74xx/lib/7476.dig +++ b/src/main/dig/74xx/lib/7476.dig @@ -10,6 +10,10 @@ Description DUAL J-K FLIP-FLOPS WITH PRESET AND CLEAR + + lockedMode + true + diff --git a/src/test/java/de/neemann/digital/integration/FileScanner.java b/src/test/java/de/neemann/digital/integration/FileScanner.java index b90a8b482..462f13e75 100644 --- a/src/test/java/de/neemann/digital/integration/FileScanner.java +++ b/src/test/java/de/neemann/digital/integration/FileScanner.java @@ -44,7 +44,7 @@ public class FileScanner { if (f.getName().endsWith(".dig")) { try { test.check(f); - } catch (Exception e) { + } catch (Throwable e) { errors.add(new Error(f, e)); } count++; @@ -62,9 +62,9 @@ public class FileScanner { private static class Error { private final File f; - private final Exception e; + private final Throwable e; - private Error(File f, Exception e) { + private Error(File f, Throwable e) { this.f = f; this.e = e; } diff --git a/src/test/java/de/neemann/digital/integration/Test74xx.java b/src/test/java/de/neemann/digital/integration/Test74xx.java new file mode 100644 index 000000000..e376719f5 --- /dev/null +++ b/src/test/java/de/neemann/digital/integration/Test74xx.java @@ -0,0 +1,79 @@ +package de.neemann.digital.integration; + +import de.neemann.digital.core.NodeException; +import de.neemann.digital.core.element.Keys; +import de.neemann.digital.core.io.In; +import de.neemann.digital.core.io.Out; +import de.neemann.digital.draw.elements.Circuit; +import de.neemann.digital.draw.elements.PinException; +import de.neemann.digital.draw.elements.VisualElement; +import de.neemann.digital.draw.library.ElementNotFoundException; +import junit.framework.TestCase; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; + +/** + * Tests the files in the 74xx/lib folder for consistency. + * Created by hneemann on 13.05.17. + */ +public class Test74xx extends TestCase { + private HashMap descrMap; + + public void test74xx() throws Exception { + File examples = new File(Resources.getRoot().getParentFile().getParentFile(), "/main/dig/74xx/lib"); + descrMap = new HashMap<>(); + new FileScanner(this::check).scan(examples); + } + + private void check(File dig) throws PinException, NodeException, ElementNotFoundException, IOException { + System.out.println(dig); + Circuit circuit = new ToBreakRunner(dig).getCircuit(); + assertTrue("is not DIL", circuit.getAttributes().get(Keys.IS_DIL)); + assertTrue("is not locked", circuit.getAttributes().get(Keys.LOCKED_MODE)); + + final String descr = circuit.getAttributes().get(Keys.DESCRIPTION); + assertTrue("missing description", descr.length() > 0); + + File f = descrMap.get(descr); + if (f != null) + fail("duplicate description '"+descr+"' in " + f + " and " + dig); + descrMap.put(descr, dig); + + PinChecker pc = new PinChecker(); + for (VisualElement e : circuit.getElements()) { + if (e.equalsDescription(In.DESCRIPTION)) + pc.checkPin(e); + if (e.equalsDescription(Out.DESCRIPTION)) + pc.checkPin(e); + } + } + + + private class PinChecker { + private final HashSet pinMap; + private final HashSet nameMap; + + private PinChecker() { + pinMap = new HashSet<>(); + nameMap = new HashSet<>(); + } + + private void checkPin(VisualElement e) { + int pn = e.getElementAttributes().get(Keys.PINNUMBER); + final String label = e.getElementAttributes().getLabel(); + assertTrue("missing pin number: " + label, pn != 0); + + assertFalse("non unique pin number: " + pn, pinMap.contains(pn)); + pinMap.add(pn); + + assertFalse("non unique pin name: " + label, nameMap.contains(label)); + nameMap.add(label); + + assertTrue("missing pin label", label.length() > 0); + } + + } +} diff --git a/src/test/java/de/neemann/digital/integration/TestExamples.java b/src/test/java/de/neemann/digital/integration/TestExamples.java index ce1026515..15e9eae83 100644 --- a/src/test/java/de/neemann/digital/integration/TestExamples.java +++ b/src/test/java/de/neemann/digital/integration/TestExamples.java @@ -28,7 +28,7 @@ public class TestExamples extends TestCase { */ public void testDistExamples() throws Exception { File examples = new File(Resources.getRoot().getParentFile().getParentFile(), "/main/dig"); - assertEquals(144, new FileScanner(this::check).scan(examples)); + assertEquals(145, new FileScanner(this::check).scan(examples)); assertEquals(74, testCasesInFiles); }