mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-25 14:08:27 -04:00
added backtracking. Is needed to determine the input signals, a output signal depends on.
This commit is contained in:
parent
59e3d8d211
commit
b593cf1c72
@ -0,0 +1,69 @@
|
||||
package de.neemann.digital.analyse;
|
||||
|
||||
import de.neemann.digital.core.*;
|
||||
import de.neemann.digital.draw.elements.PinException;
|
||||
import de.neemann.digital.lang.Lang;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static de.neemann.digital.core.Model.MAX_LOOP_COUNTER;
|
||||
|
||||
/**
|
||||
* Used to analyse on which inputs a given output depends.
|
||||
* So you only have to take into account the inputs, a given outputs
|
||||
* depends on.
|
||||
* Created by hneemann on 11.06.17.
|
||||
*/
|
||||
public class DependencyAnalyser {
|
||||
|
||||
private final HashMap<Signal, Set<ObservableValue>> sigMap;
|
||||
|
||||
/**
|
||||
* Creates a new instance
|
||||
*
|
||||
* @param modelAnalyser the model analyser
|
||||
* @throws BackTracException BackTracException
|
||||
* @throws PinException PinException
|
||||
*/
|
||||
public DependencyAnalyser(ModelAnalyser modelAnalyser) throws BackTracException, PinException {
|
||||
sigMap = new HashMap<>();
|
||||
for (Signal s : modelAnalyser.getInputs()) {
|
||||
Set<ObservableValue> effected = new HashSet<>();
|
||||
backTrac(s.getValue(), effected, MAX_LOOP_COUNTER);
|
||||
sigMap.put(s, effected);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all inputs the given output depends on
|
||||
*
|
||||
* @param output the output to analyse
|
||||
* @return the list of inputs which effect the given output
|
||||
*/
|
||||
public ArrayList<Signal> getInputs(Signal output) {
|
||||
ArrayList<Signal> list = new ArrayList<>();
|
||||
for (Map.Entry<Signal, Set<ObservableValue>> e : sigMap.entrySet()) {
|
||||
if (e.getValue().contains(output.getValue())) {
|
||||
list.add(e.getKey());
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
private void backTrac(ObservableValue value, Set<ObservableValue> effected, int depth) throws PinException, BackTracException {
|
||||
effected.add(value);
|
||||
|
||||
if (depth < 0)
|
||||
throw new BackTracException(Lang.get("err_backtracLoopFound"));
|
||||
|
||||
for (de.neemann.digital.core.Observer o : value) {
|
||||
if ((o instanceof NodeInterface)) {
|
||||
ObservableValues outputs = ((NodeInterface) o).getOutputs();
|
||||
for (ObservableValue co : outputs)
|
||||
backTrac(co, effected, depth - 1);
|
||||
} else
|
||||
throw new BackTracException(Lang.get("err_backtracOf_N_isImpossible", o.getClass().getSimpleName()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -84,7 +84,12 @@ public class ModelAnalyser {
|
||||
inputs.add(sig);
|
||||
|
||||
ObservableValue notQ = ff.getOutputs().get(1);
|
||||
q.addObserver(() -> notQ.setValue(~q.getValue()));
|
||||
q.addObserver(new NodeWithoutDelay(notQ) {
|
||||
@Override
|
||||
public void hasChanged() {
|
||||
notQ.setValue(~q.getValue());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (inputs.size() == 0)
|
||||
@ -167,10 +172,13 @@ public class ModelAnalyser {
|
||||
final ObservableValue qout = ff.getOutputs().get(0);
|
||||
final ObservableValue nqout = ff.getOutputs().get(1);
|
||||
ObservableValue spq = outsp.getOutputs().get(0);
|
||||
spq.addObserver(() -> {
|
||||
final long value = spq.getValue();
|
||||
qout.setValue(value);
|
||||
nqout.setValue(~value);
|
||||
spq.addObserver(new NodeWithoutDelay(qout, nqout) {
|
||||
@Override
|
||||
public void hasChanged() {
|
||||
final long value = spq.getValue();
|
||||
qout.setValue(value);
|
||||
nqout.setValue(~value);
|
||||
}
|
||||
});
|
||||
|
||||
} catch (NodeException e) {
|
||||
@ -216,7 +224,12 @@ public class ModelAnalyser {
|
||||
try {
|
||||
Splitter sp = Splitter.createNToOne(bits);
|
||||
final ObservableValue out = sp.getOutputs().get(0);
|
||||
out.addObserver(() -> s.getValue().setValue(out.getValue()));
|
||||
out.addObserver(new NodeWithoutDelay(s.getValue()) {
|
||||
@Override
|
||||
public void hasChanged() {
|
||||
s.getValue().setValue(out.getValue());
|
||||
}
|
||||
});
|
||||
out.fireHasChanged();
|
||||
|
||||
ObservableValues.Builder builder = new ObservableValues.Builder();
|
||||
@ -338,5 +351,17 @@ public class ModelAnalyser {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the models inputs
|
||||
*/
|
||||
public ArrayList<Signal> getInputs() {
|
||||
return inputs;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the models outputs
|
||||
*/
|
||||
public ArrayList<Signal> getOutputs() {
|
||||
return outputs;
|
||||
}
|
||||
}
|
||||
|
17
src/main/java/de/neemann/digital/core/BackTracException.java
Normal file
17
src/main/java/de/neemann/digital/core/BackTracException.java
Normal file
@ -0,0 +1,17 @@
|
||||
package de.neemann.digital.core;
|
||||
|
||||
/**
|
||||
* Indicates an error backtracking a value to all affected values
|
||||
* Created by hneemann on 11.06.17.
|
||||
*/
|
||||
public class BackTracException extends Exception {
|
||||
|
||||
/**
|
||||
* Creates a new instance
|
||||
*
|
||||
* @param message the message
|
||||
*/
|
||||
public BackTracException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
@ -41,7 +41,7 @@ public class Model implements Iterable<Node> {
|
||||
/**
|
||||
* Maximal number of calculation loops before oscillating behaviour is detected
|
||||
*/
|
||||
private static final int MAX_COUNTER = 1000;
|
||||
public static final int MAX_LOOP_COUNTER = 1000;
|
||||
|
||||
private final ArrayList<Clock> clocks;
|
||||
private final ArrayList<Break> breaks;
|
||||
@ -191,7 +191,7 @@ public class Model implements Iterable<Node> {
|
||||
int counter = 0;
|
||||
if (needsUpdate()) {
|
||||
while (needsUpdate()) {
|
||||
if (counter++ > MAX_COUNTER) {
|
||||
if (counter++ > MAX_LOOP_COUNTER) {
|
||||
throw new NodeException(Lang.get("err_seemsToOscillate")).addNodes(nodesToUpdateNext);
|
||||
}
|
||||
doMicroStep(noise);
|
||||
|
@ -16,7 +16,7 @@ import java.io.File;
|
||||
*
|
||||
* @author hneemann
|
||||
*/
|
||||
public abstract class Node implements Observer {
|
||||
public abstract class Node implements NodeInterface {
|
||||
|
||||
private final boolean hasState;
|
||||
private Model model;
|
||||
|
19
src/main/java/de/neemann/digital/core/NodeInterface.java
Normal file
19
src/main/java/de/neemann/digital/core/NodeInterface.java
Normal file
@ -0,0 +1,19 @@
|
||||
package de.neemann.digital.core;
|
||||
|
||||
import de.neemann.digital.draw.elements.PinException;
|
||||
|
||||
/**
|
||||
* The simplest possible node
|
||||
* Created by hneemann on 11.06.17.
|
||||
*/
|
||||
public interface NodeInterface extends Observer {
|
||||
|
||||
/**
|
||||
* returns the outputs effected by this node
|
||||
*
|
||||
* @return the outputs
|
||||
* @throws PinException PinException
|
||||
*/
|
||||
ObservableValues getOutputs() throws PinException;
|
||||
|
||||
}
|
35
src/main/java/de/neemann/digital/core/NodeWithoutDelay.java
Normal file
35
src/main/java/de/neemann/digital/core/NodeWithoutDelay.java
Normal file
@ -0,0 +1,35 @@
|
||||
package de.neemann.digital.core;
|
||||
|
||||
import de.neemann.digital.draw.elements.PinException;
|
||||
|
||||
/**
|
||||
* A node which has no delay
|
||||
* Created by hneemann on 11.06.17.
|
||||
*/
|
||||
public abstract class NodeWithoutDelay implements NodeInterface {
|
||||
|
||||
private ObservableValues outputs;
|
||||
|
||||
/**
|
||||
* Creates a new instance
|
||||
*
|
||||
* @param outputs the nodes outputs
|
||||
*/
|
||||
public NodeWithoutDelay(ObservableValue... outputs) {
|
||||
this(new ObservableValues(outputs));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new instance
|
||||
*
|
||||
* @param outputs the nodes outputs
|
||||
*/
|
||||
public NodeWithoutDelay(ObservableValues outputs) {
|
||||
this.outputs = outputs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObservableValues getOutputs() throws PinException {
|
||||
return outputs;
|
||||
}
|
||||
}
|
@ -8,7 +8,7 @@ import java.util.Iterator;
|
||||
*
|
||||
* @author hneemann
|
||||
*/
|
||||
public class Observable {
|
||||
public class Observable implements Iterable<Observer> {
|
||||
private final ArrayList<Observer> observers;
|
||||
|
||||
/**
|
||||
@ -75,4 +75,9 @@ public class Observable {
|
||||
public boolean hasObserver(Observer observer) {
|
||||
return observers.contains(observer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<Observer> iterator() {
|
||||
return observers.iterator();
|
||||
}
|
||||
}
|
||||
|
@ -104,7 +104,7 @@ public class ObservableValue extends Observable implements PinDescription {
|
||||
* @return this for chained calls
|
||||
*/
|
||||
public ObservableValue addObserverToValue(Observer observer) {
|
||||
super.addObserver(observer);
|
||||
addObserver(observer);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@ public interface Element {
|
||||
void setInputs(ObservableValues inputs) throws NodeException;
|
||||
|
||||
/**
|
||||
* When the connections between the elements are build all outputs a collected
|
||||
* When the connections between the elements are build, all outputs are collected
|
||||
* by calling this method. After the interconnection they are set to the inputs
|
||||
* by calling <code>setInputs()</code>
|
||||
*
|
||||
|
@ -10,7 +10,7 @@ import de.neemann.digital.core.element.Keys;
|
||||
* A diode needed to create wired elements
|
||||
* Used to build a wired OR or AND.
|
||||
*/
|
||||
public class Diode implements Element, Observer {
|
||||
public class Diode implements Element, NodeInterface {
|
||||
|
||||
/**
|
||||
* The diodes description
|
||||
|
@ -11,7 +11,7 @@ import static de.neemann.digital.core.element.PinInfo.input;
|
||||
* A diode needed to pull a wire to VDD.
|
||||
* Used to build a wired OR.
|
||||
*/
|
||||
public class DiodeForward implements Element, Observer {
|
||||
public class DiodeForward implements Element, NodeInterface {
|
||||
|
||||
/**
|
||||
* The diodes description
|
||||
|
@ -12,7 +12,7 @@ import de.neemann.digital.lang.Lang;
|
||||
/**
|
||||
* A simple switch
|
||||
*/
|
||||
public class Switch implements Element, Observer {
|
||||
public class Switch implements Element, NodeInterface {
|
||||
|
||||
/**
|
||||
* The switch description
|
||||
|
@ -141,14 +141,22 @@ public class Splitter implements Element {
|
||||
final ObservableValue inValue = inputs.get(in.number);
|
||||
final ObservableValue outValue = outputs.get(out.number);
|
||||
if (highZIn)
|
||||
inValue.addObserverToValue(() -> {
|
||||
if (inValue.isHighZ())
|
||||
outValue.set(0, true);
|
||||
else
|
||||
outValue.set(inValue.getValue() >> bitPos, false);
|
||||
inValue.addObserverToValue(new NodeWithoutDelay(outValue) {
|
||||
@Override
|
||||
public void hasChanged() {
|
||||
if (inValue.isHighZ())
|
||||
outValue.set(0, true);
|
||||
else
|
||||
outValue.set(inValue.getValue() >> bitPos, false);
|
||||
}
|
||||
});
|
||||
else
|
||||
inValue.addObserverToValue(() -> outValue.setValue(inValue.getValue() >> bitPos));
|
||||
inValue.addObserverToValue(new NodeWithoutDelay(outValue) {
|
||||
@Override
|
||||
public void hasChanged() {
|
||||
outValue.setValue(inValue.getValue() >> bitPos);
|
||||
}
|
||||
});
|
||||
break; // done!! out is completely filled!
|
||||
}
|
||||
|
||||
@ -163,10 +171,13 @@ public class Splitter implements Element {
|
||||
final long mask = ~(((1L << in.bits) - 1) << bitPos);
|
||||
final ObservableValue inValue = inputs.get(in.number);
|
||||
final ObservableValue outValue = outputs.get(out.number);
|
||||
inputs.get(in.number).addObserverToValue(() -> {
|
||||
long in1 = inValue.getValue();
|
||||
long out1 = outValue.getValue();
|
||||
outValue.setValue((out1 & mask) | (in1 << bitPos));
|
||||
inputs.get(in.number).addObserverToValue(new NodeWithoutDelay(outValue) {
|
||||
@Override
|
||||
public void hasChanged() {
|
||||
long in1 = inValue.getValue();
|
||||
long out1 = outValue.getValue();
|
||||
outValue.setValue((out1 & mask) | (in1 << bitPos));
|
||||
}
|
||||
});
|
||||
continue; // done with this input, its completely copied to the output!
|
||||
}
|
||||
@ -180,10 +191,13 @@ public class Splitter implements Element {
|
||||
final int shift = out.getPos() - in.getPos();
|
||||
final ObservableValue inValue = inputs.get(in.number);
|
||||
final ObservableValue outValue = outputs.get(out.number);
|
||||
inputs.get(in.number).addObserverToValue(() -> {
|
||||
long in12 = inValue.getValue();
|
||||
long out12 = outValue.getValue();
|
||||
outValue.setValue((out12 & mask) | (in12 >> shift));
|
||||
inputs.get(in.number).addObserverToValue(new NodeWithoutDelay(outValue) {
|
||||
@Override
|
||||
public void hasChanged() {
|
||||
long in12 = inValue.getValue();
|
||||
long out12 = outValue.getValue();
|
||||
outValue.setValue((out12 & mask) | (in12 >> shift));
|
||||
}
|
||||
});
|
||||
continue;
|
||||
}
|
||||
@ -194,10 +208,13 @@ public class Splitter implements Element {
|
||||
final long mask = ~(((1L << bitsToCopy) - 1) << shift);
|
||||
final ObservableValue inValue = inputs.get(in.number);
|
||||
final ObservableValue outValue = outputs.get(out.number);
|
||||
inputs.get(in.number).addObserverToValue(() -> {
|
||||
long in13 = inValue.getValue();
|
||||
long out13 = outValue.getValue();
|
||||
outValue.setValue((out13 & mask) | (in13 << shift));
|
||||
inputs.get(in.number).addObserverToValue(new NodeWithoutDelay(outValue) {
|
||||
@Override
|
||||
public void hasChanged() {
|
||||
long in13 = inValue.getValue();
|
||||
long out13 = outValue.getValue();
|
||||
outValue.setValue((out13 & mask) | (in13 << shift));
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package de.neemann.digital.draw.model;
|
||||
|
||||
import de.neemann.digital.core.NodeWithoutDelay;
|
||||
import de.neemann.digital.core.ObservableValue;
|
||||
|
||||
import java.util.HashSet;
|
||||
@ -51,7 +52,12 @@ public class InverterConfig {
|
||||
return orig;
|
||||
|
||||
ObservableValue out = new ObservableValue("~" + orig.getName(), orig.getBits());
|
||||
orig.addObserver(() -> out.set(~orig.getValue(), orig.isHighZ()));
|
||||
orig.addObserver(new NodeWithoutDelay(out) {
|
||||
@Override
|
||||
public void hasChanged() {
|
||||
out.set(~orig.getValue(), orig.isHighZ());
|
||||
}
|
||||
});
|
||||
out.set(~orig.getValue(), orig.isHighZ());
|
||||
return out;
|
||||
}
|
||||
|
@ -82,7 +82,7 @@ public class ExpressionCreator {
|
||||
TableReducer tr = new TableReducer(vars, boolTable);
|
||||
List<Variable> localVars = vars;
|
||||
if (tr.canReduce()) {
|
||||
LOGGER.debug(resultName + " reduced from " + vars.size() + " to " + tr.getVars().size() + " variables");
|
||||
LOGGER.debug(resultName + " reduced from " + vars.size() + " to " + tr.getVars().size() + " variables ("+tr.getVars()+")");
|
||||
boolTable = tr.getTable();
|
||||
localVars = tr.getVars();
|
||||
}
|
||||
|
@ -539,6 +539,8 @@ Sind evtl. die Namen der Variablen nicht eindeutig?</string>
|
||||
<string name="err_invalidTransmissionGateState">Die Steuereingänge eines Transmission-Gates müssen invertiert beschaltet werden!</string>
|
||||
<string name="err_nameUsedTwice_N">Signal {0} wurde mehrfach verwendet!</string>
|
||||
<string name="err_errorParsingTestdata">Fehler beim Einlesen der Testdaten.</string>
|
||||
<string name="err_backtracLoopFound">Das Model enthält zirkuläre Abhängigkeiten.</string>
|
||||
<string name="err_backtracOf_N_isImpossible">Die Modelkomponente {0} kann nicht analysiert werden.</string>
|
||||
|
||||
<string name="key_AddrBits">Adress-Bits</string>
|
||||
<string name="key_AddrBits_tt">Anzahl der Adress-Bits die verwendet werden.</string>
|
||||
|
@ -529,6 +529,8 @@ The names of the variables may not be unique.</string>
|
||||
<string name="err_invalidTransmissionGateState">The two control inputs of a transmission gate must be inverted!</string>
|
||||
<string name="err_nameUsedTwice_N">Signal {0} is used twice!</string>
|
||||
<string name="err_errorParsingTestdata">Error parsing the test data.</string>
|
||||
<string name="err_backtracLoopFound">Thes model contains circular dependencies.</string>
|
||||
<string name="err_backtracOf_N_isImpossible">The model component {0} can not be analysed.</string>
|
||||
|
||||
<string name="key_AddrBits">Address Bits</string>
|
||||
<string name="key_AddrBits_tt">Number of address bits used.</string>
|
||||
|
@ -0,0 +1,62 @@
|
||||
package de.neemann.digital.analyse;
|
||||
|
||||
import de.neemann.digital.core.*;
|
||||
import de.neemann.digital.draw.elements.PinException;
|
||||
import de.neemann.digital.integration.ToBreakRunner;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author hneemann
|
||||
*/
|
||||
public class DependencyAnalyserTest extends TestCase {
|
||||
|
||||
private static final int[] VAL = new int[]{1, 1, 1, 2, 6, 5, 5, 3, 8, 7, 7, 5, 10, 9, 9, 7, 2, 14, 14, 14, 14, 14, 14, 14, 2, 2};
|
||||
|
||||
public void testAnalyzer() throws Exception {
|
||||
Model model = new ToBreakRunner("dig/backTrac/Plexer.dig").getModel();
|
||||
ModelAnalyser m = new ModelAnalyser(model);
|
||||
DependencyAnalyser da = new DependencyAnalyser(m);
|
||||
|
||||
assertEquals(17, m.getInputs().size());
|
||||
assertEquals(26, m.getOutputs().size());
|
||||
for (int i = 0; i < m.getOutputs().size(); i++)
|
||||
assertEquals("" + i, VAL[i], da.getInputs(m.getOutputs().get(i)).size());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
ExpressionCreator - p0n+1 reduced from 17 to 1 variables ([Count])
|
||||
ExpressionCreator - p1n+1 reduced from 17 to 1 variables ([p0n])
|
||||
ExpressionCreator - Q_1n+1 reduced from 17 to 1 variables ([Q_0n])
|
||||
ExpressionCreator - Q_0n+1 reduced from 17 to 2 variables ([Q_1n, Q_0n])
|
||||
ExpressionCreator - C0Q_3n+1 reduced from 17 to 6 variables ([p0n, p1n, C0Q_3n, C0Q_2n, C0Q_1n, C0Q_0n])
|
||||
ExpressionCreator - C0Q_2n+1 reduced from 17 to 5 variables ([p0n, p1n, C0Q_2n, C0Q_1n, C0Q_0n])
|
||||
ExpressionCreator - C0Q_1n+1 reduced from 17 to 5 variables ([p0n, p1n, C0Q_3n, C0Q_1n, C0Q_0n])
|
||||
ExpressionCreator - C0Q_0n+1 reduced from 17 to 3 variables ([p0n, p1n, C0Q_0n])
|
||||
ExpressionCreator - C1Q_3n+1 reduced from 17 to 8 variables ([p0n, p1n, C0Q_3n, C0Q_0n, C1Q_3n, C1Q_2n, C1Q_1n, C1Q_0n])
|
||||
ExpressionCreator - C1Q_2n+1 reduced from 17 to 7 variables ([p0n, p1n, C0Q_3n, C0Q_0n, C1Q_2n, C1Q_1n, C1Q_0n])
|
||||
ExpressionCreator - C1Q_1n+1 reduced from 17 to 7 variables ([p0n, p1n, C0Q_3n, C0Q_0n, C1Q_3n, C1Q_1n, C1Q_0n])
|
||||
ExpressionCreator - C1Q_0n+1 reduced from 17 to 5 variables ([p0n, p1n, C0Q_3n, C0Q_0n, C1Q_0n])
|
||||
ExpressionCreator - C2Q_3n+1 reduced from 17 to 10 variables ([p0n, p1n, C0Q_3n, C0Q_0n, C1Q_3n, C1Q_0n, C2Q_3n, C2Q_2n, C2Q_1n, C2Q_0n])
|
||||
ExpressionCreator - C2Q_2n+1 reduced from 17 to 9 variables ([p0n, p1n, C0Q_3n, C0Q_0n, C1Q_3n, C1Q_0n, C2Q_2n, C2Q_1n, C2Q_0n])
|
||||
ExpressionCreator - C2Q_1n+1 reduced from 17 to 9 variables ([p0n, p1n, C0Q_3n, C0Q_0n, C1Q_3n, C1Q_0n, C2Q_3n, C2Q_1n, C2Q_0n])
|
||||
ExpressionCreator - C2Q_0n+1 reduced from 17 to 7 variables ([p0n, p1n, C0Q_3n, C0Q_0n, C1Q_3n, C1Q_0n, C2Q_0n])
|
||||
ExpressionCreator - s2 reduced from 17 to 2 variables ([Q_1n, Q_0n])
|
||||
ExpressionCreator - d0 reduced from 17 to 14 variables ([Q_1n, Q_0n, C0Q_3n, C0Q_2n, C0Q_1n, C0Q_0n, C1Q_3n, C1Q_2n, C1Q_1n, C1Q_0n, C2Q_3n, C2Q_2n, C2Q_1n, C2Q_0n])
|
||||
ExpressionCreator - c0 reduced from 17 to 14 variables ([Q_1n, Q_0n, C0Q_3n, C0Q_2n, C0Q_1n, C0Q_0n, C1Q_3n, C1Q_2n, C1Q_1n, C1Q_0n, C2Q_3n, C2Q_2n, C2Q_1n, C2Q_0n])
|
||||
ExpressionCreator - b0 reduced from 17 to 14 variables ([Q_1n, Q_0n, C0Q_3n, C0Q_2n, C0Q_1n, C0Q_0n, C1Q_3n, C1Q_2n, C1Q_1n, C1Q_0n, C2Q_3n, C2Q_2n, C2Q_1n, C2Q_0n])
|
||||
ExpressionCreator - a0 reduced from 17 to 14 variables ([Q_1n, Q_0n, C0Q_3n, C0Q_2n, C0Q_1n, C0Q_0n, C1Q_3n, C1Q_2n, C1Q_1n, C1Q_0n, C2Q_3n, C2Q_2n, C2Q_1n, C2Q_0n])
|
||||
ExpressionCreator - e0 reduced from 17 to 14 variables ([Q_1n, Q_0n, C0Q_3n, C0Q_2n, C0Q_1n, C0Q_0n, C1Q_3n, C1Q_2n, C1Q_1n, C1Q_0n, C2Q_3n, C2Q_2n, C2Q_1n, C2Q_0n])
|
||||
ExpressionCreator - f0 reduced from 17 to 14 variables ([Q_1n, Q_0n, C0Q_3n, C0Q_2n, C0Q_1n, C0Q_0n, C1Q_3n, C1Q_2n, C1Q_1n, C1Q_0n, C2Q_3n, C2Q_2n, C2Q_1n, C2Q_0n])
|
||||
ExpressionCreator - g0 reduced from 17 to 14 variables ([Q_1n, Q_0n, C0Q_3n, C0Q_2n, C0Q_1n, C0Q_0n, C1Q_3n, C1Q_2n, C1Q_1n, C1Q_0n, C2Q_3n, C2Q_2n, C2Q_1n, C2Q_0n])
|
||||
ExpressionCreator - s1 reduced from 17 to 2 variables ([Q_1n, Q_0n])
|
||||
ExpressionCreator - s0 reduced from 17 to 2 variables ([Q_1n, Q_0n])
|
||||
|
||||
*/
|
569
src/test/resources/dig/backTrac/Plexer.dig
Normal file
569
src/test/resources/dig/backTrac/Plexer.dig
Normal file
@ -0,0 +1,569 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<circuit>
|
||||
<version>1</version>
|
||||
<attributes>
|
||||
<entry>
|
||||
<string>Width</string>
|
||||
<int>5</int>
|
||||
</entry>
|
||||
</attributes>
|
||||
<visualElements>
|
||||
<visualElement>
|
||||
<elementName>Clock</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>runRealTime</string>
|
||||
<boolean>true</boolean>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>C</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Frequency</string>
|
||||
<int>20</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="240" y="100"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Multiplexer</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Selector Bits</string>
|
||||
<int>2</int>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Bits</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="480" y="180"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Splitter</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Input Splitting</string>
|
||||
<string>4</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Output Splitting</string>
|
||||
<string>1*4</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="560" y="220"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Decoder</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Selector Bits</string>
|
||||
<int>2</int>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>flipSelPos</string>
|
||||
<boolean>true</boolean>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="480" y="420"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Splitter</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Input Splitting</string>
|
||||
<string>1,1</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Output Splitting</string>
|
||||
<string>2</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="400" y="460"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Ground</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Bits</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="460" y="260"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Description</string>
|
||||
<string>Pin 18</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>s2</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<int>18</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="700" y="460"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>dif.dig</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="300" y="60"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>counter2Bit3.dig</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="300" y="460"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>decoder.dig</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="600" y="220"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>counter.dig</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>C0</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="300" y="180"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>counter.dig</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>C1</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="300" y="280"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>counter.dig</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>C2</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="300" y="380"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Description</string>
|
||||
<string>Pin 14</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>d0</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<int>8</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="700" y="220"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Description</string>
|
||||
<string>Pin 12</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>c0</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<int>6</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="860" y="240"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Description</string>
|
||||
<string>Pin 11</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>b0</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<int>5</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="700" y="260"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Description</string>
|
||||
<string>Pin 9</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>a0</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="860" y="280"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Description</string>
|
||||
<string>Pin 8</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>e0</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<int>9</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="700" y="300"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Description</string>
|
||||
<string>Pin 6</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>f0</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<int>11</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="860" y="320"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Description</string>
|
||||
<string>Pin 5</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>g0</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<int>12</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="700" y="340"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Description</string>
|
||||
<string>Pin 17</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>s1</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<int>19</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="860" y="440"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Description</string>
|
||||
<string>Pin 16</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>s0</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<int>20</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="700" y="420"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Description</string>
|
||||
<string>Pin 26</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>Count</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<int>26</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="240" y="60"/>
|
||||
</visualElement>
|
||||
</visualElements>
|
||||
<wires>
|
||||
<wire>
|
||||
<p1 x="380" y="480"/>
|
||||
<p2 x="400" y="480"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="680" y="320"/>
|
||||
<p2 x="860" y="320"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="520" y="420"/>
|
||||
<p2 x="700" y="420"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="580" y="260"/>
|
||||
<p2 x="600" y="260"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="680" y="260"/>
|
||||
<p2 x="700" y="260"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="240" y="100"/>
|
||||
<p2 x="260" y="100"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="260" y="100"/>
|
||||
<p2 x="300" y="100"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="380" y="200"/>
|
||||
<p2 x="400" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="420" y="200"/>
|
||||
<p2 x="480" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="260" y="200"/>
|
||||
<p2 x="300" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="520" y="460"/>
|
||||
<p2 x="700" y="460"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="260" y="460"/>
|
||||
<p2 x="300" y="460"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="420" y="460"/>
|
||||
<p2 x="460" y="460"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="380" y="460"/>
|
||||
<p2 x="400" y="460"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="280" y="140"/>
|
||||
<p2 x="400" y="140"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="380" y="300"/>
|
||||
<p2 x="400" y="300"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="260" y="300"/>
|
||||
<p2 x="300" y="300"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="680" y="300"/>
|
||||
<p2 x="700" y="300"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="260" y="400"/>
|
||||
<p2 x="300" y="400"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="280" y="240"/>
|
||||
<p2 x="400" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="580" y="240"/>
|
||||
<p2 x="600" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="460" y="240"/>
|
||||
<p2 x="480" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="680" y="240"/>
|
||||
<p2 x="860" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="380" y="80"/>
|
||||
<p2 x="400" y="80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="280" y="340"/>
|
||||
<p2 x="400" y="340"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="460" y="340"/>
|
||||
<p2 x="500" y="340"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="680" y="340"/>
|
||||
<p2 x="700" y="340"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="280" y="180"/>
|
||||
<p2 x="300" y="180"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="380" y="180"/>
|
||||
<p2 x="480" y="180"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="280" y="280"/>
|
||||
<p2 x="300" y="280"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="380" y="280"/>
|
||||
<p2 x="420" y="280"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="580" y="280"/>
|
||||
<p2 x="600" y="280"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="680" y="280"/>
|
||||
<p2 x="860" y="280"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="520" y="440"/>
|
||||
<p2 x="860" y="440"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="580" y="220"/>
|
||||
<p2 x="600" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="520" y="220"/>
|
||||
<p2 x="560" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="440" y="220"/>
|
||||
<p2 x="480" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="680" y="220"/>
|
||||
<p2 x="700" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="280" y="380"/>
|
||||
<p2 x="300" y="380"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="380" y="380"/>
|
||||
<p2 x="440" y="380"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="240" y="60"/>
|
||||
<p2 x="300" y="60"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="400" y="200"/>
|
||||
<p2 x="400" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="400" y="300"/>
|
||||
<p2 x="400" y="340"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="400" y="80"/>
|
||||
<p2 x="400" y="140"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="260" y="100"/>
|
||||
<p2 x="260" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="260" y="400"/>
|
||||
<p2 x="260" y="460"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="260" y="300"/>
|
||||
<p2 x="260" y="400"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="260" y="200"/>
|
||||
<p2 x="260" y="300"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="420" y="200"/>
|
||||
<p2 x="420" y="280"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="500" y="260"/>
|
||||
<p2 x="500" y="340"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="500" y="340"/>
|
||||
<p2 x="500" y="420"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="280" y="140"/>
|
||||
<p2 x="280" y="180"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="280" y="240"/>
|
||||
<p2 x="280" y="280"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="280" y="340"/>
|
||||
<p2 x="280" y="380"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="440" y="220"/>
|
||||
<p2 x="440" y="380"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="460" y="340"/>
|
||||
<p2 x="460" y="460"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="460" y="240"/>
|
||||
<p2 x="460" y="260"/>
|
||||
</wire>
|
||||
</wires>
|
||||
</circuit>
|
1058
src/test/resources/dig/backTrac/counter.dig
Normal file
1058
src/test/resources/dig/backTrac/counter.dig
Normal file
File diff suppressed because it is too large
Load Diff
277
src/test/resources/dig/backTrac/counter2Bit3.dig
Normal file
277
src/test/resources/dig/backTrac/counter2Bit3.dig
Normal file
@ -0,0 +1,277 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<circuit>
|
||||
<version>1</version>
|
||||
<attributes>
|
||||
<entry>
|
||||
<string>Width</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
</attributes>
|
||||
<visualElements>
|
||||
<visualElement>
|
||||
<elementName>Tunnel</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>1</int>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>NetName</string>
|
||||
<string>Q_1n</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="220" y="0"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>D_FF</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>Q_1n</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>1</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="140" y="0"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Tunnel</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>1</int>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>NetName</string>
|
||||
<string>Q_0n</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="220" y="100"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>D_FF</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>Q_0n</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>1</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="140" y="100"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>And</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="20" y="80"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>Q1</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>1</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="220" y="180"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>Q0</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>1</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="220" y="220"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Tunnel</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="1"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>NetName</string>
|
||||
<string>Q_0n</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="-80" y="-100"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Not</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="3"/>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="-60" y="-60"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Tunnel</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="1"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>NetName</string>
|
||||
<string>Q_1n</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="-40" y="-100"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Not</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="3"/>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="-20" y="-60"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Clock</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>runRealTime</string>
|
||||
<boolean>true</boolean>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="3"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>C</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="120" y="-60"/>
|
||||
</visualElement>
|
||||
</visualElements>
|
||||
<wires>
|
||||
<wire>
|
||||
<p1 x="200" y="0"/>
|
||||
<p2 x="220" y="0"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-80" y="0"/>
|
||||
<p2 x="140" y="0"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-60" y="80"/>
|
||||
<p2 x="20" y="80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="200" y="100"/>
|
||||
<p2 x="220" y="100"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="80" y="100"/>
|
||||
<p2 x="140" y="100"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-40" y="180"/>
|
||||
<p2 x="220" y="180"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="120" y="20"/>
|
||||
<p2 x="140" y="20"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-20" y="120"/>
|
||||
<p2 x="20" y="120"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="120" y="120"/>
|
||||
<p2 x="140" y="120"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-80" y="220"/>
|
||||
<p2 x="220" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-80" y="-80"/>
|
||||
<p2 x="-60" y="-80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-40" y="-80"/>
|
||||
<p2 x="-20" y="-80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-20" y="-80"/>
|
||||
<p2 x="-20" y="-60"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-20" y="-20"/>
|
||||
<p2 x="-20" y="120"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-20" y="120"/>
|
||||
<p2 x="-20" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-40" y="-100"/>
|
||||
<p2 x="-40" y="-80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-40" y="180"/>
|
||||
<p2 x="-40" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-40" y="-80"/>
|
||||
<p2 x="-40" y="180"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="120" y="-60"/>
|
||||
<p2 x="120" y="20"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="120" y="20"/>
|
||||
<p2 x="120" y="120"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-60" y="-80"/>
|
||||
<p2 x="-60" y="-60"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-60" y="-20"/>
|
||||
<p2 x="-60" y="80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-60" y="80"/>
|
||||
<p2 x="-60" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-80" y="-100"/>
|
||||
<p2 x="-80" y="-80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-80" y="0"/>
|
||||
<p2 x="-80" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-80" y="220"/>
|
||||
<p2 x="-80" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-80" y="-80"/>
|
||||
<p2 x="-80" y="0"/>
|
||||
</wire>
|
||||
</wires>
|
||||
</circuit>
|
1660
src/test/resources/dig/backTrac/decoder.dig
Normal file
1660
src/test/resources/dig/backTrac/decoder.dig
Normal file
File diff suppressed because it is too large
Load Diff
129
src/test/resources/dig/backTrac/dif.dig
Normal file
129
src/test/resources/dig/backTrac/dif.dig
Normal file
@ -0,0 +1,129 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<circuit>
|
||||
<version>1</version>
|
||||
<attributes>
|
||||
<entry>
|
||||
<string>Width</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
</attributes>
|
||||
<visualElements>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>Count</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="320" y="180"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>D_FF</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>p0</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="380" y="180"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>D_FF</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>p1</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="380" y="280"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>And</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="480" y="260"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Clock</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>C</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="320" y="240"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>Out</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="560" y="280"/>
|
||||
</visualElement>
|
||||
</visualElements>
|
||||
<wires>
|
||||
<wire>
|
||||
<p1 x="360" y="240"/>
|
||||
<p2 x="460" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="320" y="240"/>
|
||||
<p2 x="340" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="320" y="180"/>
|
||||
<p2 x="380" y="180"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="440" y="180"/>
|
||||
<p2 x="460" y="180"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="460" y="260"/>
|
||||
<p2 x="480" y="260"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="340" y="200"/>
|
||||
<p2 x="380" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="360" y="280"/>
|
||||
<p2 x="380" y="280"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="540" y="280"/>
|
||||
<p2 x="560" y="280"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="340" y="300"/>
|
||||
<p2 x="380" y="300"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="440" y="300"/>
|
||||
<p2 x="480" y="300"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="340" y="200"/>
|
||||
<p2 x="340" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="340" y="240"/>
|
||||
<p2 x="340" y="300"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="360" y="240"/>
|
||||
<p2 x="360" y="280"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="460" y="180"/>
|
||||
<p2 x="460" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="460" y="240"/>
|
||||
<p2 x="460" y="260"/>
|
||||
</wire>
|
||||
</wires>
|
||||
</circuit>
|
Loading…
x
Reference in New Issue
Block a user