From 7c9d656c91d8609fac1fa81fc53927923c2949ed Mon Sep 17 00:00:00 2001 From: hneemann Date: Sat, 1 Apr 2017 14:20:08 +0200 Subject: [PATCH] Added outputs for state variables if a circuit is created only if there is no combinatorial outputs with the same name. --- .../builder/circuit/CircuitBuilder.java | 43 ++++++++++++------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/neemann/digital/builder/circuit/CircuitBuilder.java b/src/main/java/de/neemann/digital/builder/circuit/CircuitBuilder.java index d932b6862..3b358b2c9 100644 --- a/src/main/java/de/neemann/digital/builder/circuit/CircuitBuilder.java +++ b/src/main/java/de/neemann/digital/builder/circuit/CircuitBuilder.java @@ -37,12 +37,13 @@ public class CircuitBuilder implements BuilderInterface { private final VariableVisitor variableVisitor; private final ShapeFactory shapeFactory; + private final ArrayList fragmentVariables; + private final ArrayList fragments; + private final HashSet combinatorialOutputs; + private final HashSet createdNets; + private final ArrayList flipflops; + private final boolean useJKff; private int pos; - private ArrayList fragmentVariables; - private ArrayList fragments; - private HashSet createdNets = new HashSet<>(); - private ArrayList flipflops; - private boolean useJKff; /** * Creates a new builder. @@ -67,6 +68,8 @@ public class CircuitBuilder implements BuilderInterface { fragmentVariables = new ArrayList<>(); fragments = new ArrayList<>(); flipflops = new ArrayList<>(); + combinatorialOutputs = new HashSet<>(); + createdNets = new HashSet<>(); } /** @@ -83,6 +86,9 @@ public class CircuitBuilder implements BuilderInterface { name = ((NamedExpression) expression).getName(); expression = ((NamedExpression) expression).getExpression(); } + + combinatorialOutputs.add(name); + Fragment fr = createFragment(expression); fragments.add(new FragmentExpression(fr, new FragmentVisualElement(Out.DESCRIPTION, shapeFactory).setAttr(Keys.LABEL, name))); expression.traverse(variableVisitor); @@ -346,17 +352,22 @@ public class CircuitBuilder implements BuilderInterface { ArrayList list = new ArrayList<>(createdNets); Collections.sort(list); for (String name : list) { - VisualElement t = new VisualElement(Tunnel.DESCRIPTION.getName()).setShapeFactory(shapeFactory); - t.getElementAttributes().set(Keys.NETNAME, name); - t.setPos(new Vector(xPos, y)); - t.setRotation(2); - circuit.add(t); - VisualElement o = new VisualElement(Out.DESCRIPTION.getName()).setShapeFactory(shapeFactory); - o.getElementAttributes().set(Keys.LABEL, name); - o.setPos(new Vector(xPos + SIZE, y)); - circuit.add(o); - circuit.add(new Wire(new Vector(xPos, y), new Vector(xPos + SIZE, y))); - y += SIZE * 2; + String oName = name; + if (name.endsWith("n")) oName = name.substring(0, name.length() - 1); + if (!combinatorialOutputs.contains(oName)) { + VisualElement t = new VisualElement(Tunnel.DESCRIPTION.getName()).setShapeFactory(shapeFactory); + t.getElementAttributes().set(Keys.NETNAME, name); + t.setPos(new Vector(xPos, y)); + t.setRotation(2); + circuit.add(t); + VisualElement o = new VisualElement(Out.DESCRIPTION.getName()).setShapeFactory(shapeFactory); + + o.getElementAttributes().set(Keys.LABEL, oName); + o.setPos(new Vector(xPos + SIZE, y)); + circuit.add(o); + circuit.add(new Wire(new Vector(xPos, y), new Vector(xPos + SIZE, y))); + y += SIZE * 2; + } } }