Search in sources :

Example 11 with Wire

use of de.neemann.digital.draw.elements.Wire in project Digital by hneemann.

the class CircuitBuilder method checkForOutputBus.

private int checkForOutputBus(int splitterXPos, Circuit circuit) {
    StringBuilder pinString = new StringBuilder();
    int y = 0;
    for (Map.Entry<String, ArrayList<String>> e : mis.getOutputBusMap().entrySet()) {
        pinString.setLength(0);
        int found = 0;
        final ArrayList<String> outputs = e.getValue();
        for (String n : outputs) {
            if (combinatorialOutputs.containsKey(n)) {
                found++;
                String p = mis.getPins().get(n);
                if (p != null) {
                    if (pinString.length() != 0)
                        pinString.append(",");
                    pinString.append(p);
                }
            }
        }
        if (found == outputs.size()) {
            circuit.add(new VisualElement(Splitter.DESCRIPTION.getName()).setAttribute(Keys.OUTPUT_SPLIT, "" + outputs.size()).setAttribute(Keys.INPUT_SPLIT, "1*" + outputs.size()).setPos(new Vector(splitterXPos, y)).setShapeFactory(shapeFactory));
            circuit.add(new VisualElement(Out.DESCRIPTION.getName()).setAttribute(Keys.LABEL, e.getKey()).setAttribute(Keys.BITS, outputs.size()).setAttribute(Keys.PINNUMBER, pinString.toString()).setPos(new Vector(splitterXPos + 3 * SIZE, y)).setShapeFactory(shapeFactory));
            circuit.add(new Wire(new Vector(splitterXPos + 3 * SIZE, y), new Vector(splitterXPos + SIZE, y)));
            for (int i = 0; i < outputs.size(); i++) {
                circuit.add(new VisualElement(Tunnel.DESCRIPTION.getName()).setAttribute(Keys.NETNAME, outputs.get(i)).setRotation(2).setPos(new Vector(splitterXPos - SIZE, y + i * SIZE)).setShapeFactory(shapeFactory));
                circuit.add(new Wire(new Vector(splitterXPos - SIZE, y + i * SIZE), new Vector(splitterXPos, y + i * SIZE)));
                FragmentVisualElement frag = combinatorialOutputs.get(outputs.get(i));
                frag.setVisualElement(new VisualElement(Tunnel.DESCRIPTION.getName()).setShapeFactory(shapeFactory).setAttribute(Keys.NETNAME, outputs.get(i)));
            }
            y += (outputs.size() + 2) * SIZE;
        }
    }
    return y;
}
Also used : VisualElement(de.neemann.digital.draw.elements.VisualElement) Wire(de.neemann.digital.draw.elements.Wire) Vector(de.neemann.digital.draw.graphics.Vector)

Example 12 with Wire

use of de.neemann.digital.draw.elements.Wire in project Digital by hneemann.

the class CircuitBuilder method addClockToFlipFlops.

private void addClockToFlipFlops(Circuit circuit) {
    int x = Integer.MAX_VALUE;
    int yMin = Integer.MAX_VALUE;
    int yMax = Integer.MIN_VALUE;
    for (FragmentVisualElement ff : flipflops) {
        Vector p = ff.getVisualElement().getPos();
        if (p.x < x)
            x = p.x;
        if (p.y < yMin)
            yMin = p.y;
        if (p.y > yMax)
            yMax = p.y;
    }
    x -= SIZE;
    if (useJKff)
        x -= SIZE;
    int yPos = yMin - SIZE * 3;
    if (useJKff)
        yPos = -SIZE;
    circuit.add(new Wire(new Vector(x, yPos), new Vector(x, yMax + SIZE)));
    for (FragmentVisualElement ff : flipflops) {
        Vector p = ff.getVisualElement().getPos();
        circuit.add(new Wire(new Vector(x, p.y + SIZE), new Vector(p.x, p.y + SIZE)));
    }
    VisualElement clock = new VisualElement(Clock.DESCRIPTION.getName()).setShapeFactory(shapeFactory).setPos(new Vector(x, yPos));
    clock.getElementAttributes().set(Keys.LABEL, "C").set(Keys.ROTATE, new Rotation(3)).set(Keys.FREQUENCY, 2).set(Keys.RUN_AT_REAL_TIME, true);
    circuit.add(clock);
}
Also used : VisualElement(de.neemann.digital.draw.elements.VisualElement) Wire(de.neemann.digital.draw.elements.Wire) Vector(de.neemann.digital.draw.graphics.Vector) Rotation(de.neemann.digital.core.element.Rotation)

Example 13 with Wire

use of de.neemann.digital.draw.elements.Wire in project Digital by hneemann.

the class CircuitBuilder method addNetConnections.

private void addNetConnections(Circuit circuit, int xPos, int y) {
    for (Variable name : sequentialVars) {
        String oName = name.getIdentifier();
        if (oName.endsWith("n")) {
            oName = oName.substring(0, oName.length() - 1);
            if (oName.endsWith("_") || oName.endsWith("^"))
                oName = oName.substring(0, oName.length() - 1);
        }
        if (!combinatorialOutputs.containsKey(oName)) {
            VisualElement t = new VisualElement(Tunnel.DESCRIPTION.getName()).setShapeFactory(shapeFactory);
            t.getElementAttributes().set(Keys.NETNAME, name.getIdentifier());
            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));
            checkPinNumber(o);
            circuit.add(o);
            circuit.add(new Wire(new Vector(xPos, y), new Vector(xPos + SIZE, y)));
            y += SIZE * 2;
        }
    }
}
Also used : VisualElement(de.neemann.digital.draw.elements.VisualElement) Wire(de.neemann.digital.draw.elements.Wire) Vector(de.neemann.digital.draw.graphics.Vector)

Example 14 with Wire

use of de.neemann.digital.draw.elements.Wire in project Digital by hneemann.

the class ModifySplitWire method modify.

@Override
public void modify(Circuit circuit, ElementLibrary library) {
    Wire w = getWire(circuit);
    Vector p = w.p2;
    w.setP2(newPoint);
    circuit.add(new Wire(newPoint, p));
}
Also used : Wire(de.neemann.digital.draw.elements.Wire) Vector(de.neemann.digital.draw.graphics.Vector)

Aggregations

Wire (de.neemann.digital.draw.elements.Wire)14 Vector (de.neemann.digital.draw.graphics.Vector)13 VisualElement (de.neemann.digital.draw.elements.VisualElement)6 Circuit (de.neemann.digital.draw.elements.Circuit)4 Rotation (de.neemann.digital.core.element.Rotation)2 ObservableValue (de.neemann.digital.core.ObservableValue)1 DataBus (de.neemann.digital.core.wiring.bus.DataBus)1 Movable (de.neemann.digital.draw.elements.Movable)1 Pin (de.neemann.digital.draw.elements.Pin)1 PinException (de.neemann.digital.draw.elements.PinException)1 Transform (de.neemann.digital.draw.graphics.Transform)1 TransformRotate (de.neemann.digital.draw.graphics.TransformRotate)1 VectorFloat (de.neemann.digital.draw.graphics.VectorFloat)1 ArrayList (java.util.ArrayList)1