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;
}
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);
}
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;
}
}
}
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));
}
Aggregations