mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-26 22:41:59 -04:00
removed not working backtrack loop detection
This commit is contained in:
parent
553cba9d25
commit
6c5ff1cd92
@ -7,8 +7,6 @@ import de.neemann.digital.lang.Lang;
|
|||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static de.neemann.digital.core.Model.MAX_LOOP_COUNTER;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to analyse on which inputs a given output depends.
|
* Used to analyse on which inputs a given output depends.
|
||||||
* So you only have to take into account the inputs, a given outputs
|
* So you only have to take into account the inputs, a given outputs
|
||||||
@ -30,7 +28,7 @@ public class DependencyAnalyser {
|
|||||||
dependencyMap = new HashMap<>();
|
dependencyMap = new HashMap<>();
|
||||||
for (Signal s : modelAnalyser.getInputs()) {
|
for (Signal s : modelAnalyser.getInputs()) {
|
||||||
Set<ObservableValue> effected = new HashSet<>();
|
Set<ObservableValue> effected = new HashSet<>();
|
||||||
backtracking(s.getValue(), effected, MAX_LOOP_COUNTER);
|
backtracking(s.getValue(), effected);
|
||||||
dependencyMap.put(s, effected);
|
dependencyMap.put(s, effected);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -50,20 +48,19 @@ public class DependencyAnalyser {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void backtracking(ObservableValue value, Set<ObservableValue> effected, int depth) throws PinException, BacktrackException {
|
private void backtracking(ObservableValue value, Set<ObservableValue> effected) throws PinException, BacktrackException {
|
||||||
|
if (!effected.contains(value)) {
|
||||||
effected.add(value);
|
effected.add(value);
|
||||||
|
|
||||||
if (depth < 0)
|
|
||||||
throw new BacktrackException(Lang.get("err_backtrackLoopFound"));
|
|
||||||
|
|
||||||
for (Observer o : value) {
|
for (Observer o : value) {
|
||||||
if ((o instanceof NodeInterface)) {
|
if ((o instanceof NodeInterface)) {
|
||||||
ObservableValues outputs = ((NodeInterface) o).getOutputs();
|
ObservableValues outputs = ((NodeInterface) o).getOutputs();
|
||||||
for (ObservableValue co : outputs)
|
for (ObservableValue co : outputs)
|
||||||
backtracking(co, effected, depth - 1);
|
backtracking(co, effected);
|
||||||
} else
|
} else
|
||||||
throw new BacktrackException(Lang.get("err_backtrackOf_N_isImpossible", o.getClass().getSimpleName()));
|
throw new BacktrackException(Lang.get("err_backtrackOf_N_isImpossible", o.getClass().getSimpleName()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -284,9 +284,6 @@ public class ModelAnalyser {
|
|||||||
tt.addResult(s.getName(), e);
|
tt.addResult(s.getName(), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// for now only checks for circular dependencies
|
|
||||||
new DependencyAnalyser(this);
|
|
||||||
|
|
||||||
model.init();
|
model.init();
|
||||||
for (int row = 0; row < rows; row++) {
|
for (int row = 0; row < rows; row++) {
|
||||||
bitsetter.fill(row);
|
bitsetter.fill(row);
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
package de.neemann.digital.core.wiring.bus;
|
package de.neemann.digital.core.wiring.bus;
|
||||||
|
|
||||||
|
import de.neemann.digital.core.NodeInterface;
|
||||||
import de.neemann.digital.core.ObservableValue;
|
import de.neemann.digital.core.ObservableValue;
|
||||||
import de.neemann.digital.core.Observer;
|
import de.neemann.digital.core.ObservableValues;
|
||||||
|
import de.neemann.digital.draw.elements.PinException;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This observer is added to all outputs connected together
|
* This observer is added to all outputs connected together
|
||||||
*/
|
*/
|
||||||
public final class CommonBusValue extends ObservableValue implements Observer {
|
public final class CommonBusValue extends ObservableValue implements NodeInterface {
|
||||||
private final BusModelStateObserver obs;
|
private final BusModelStateObserver obs;
|
||||||
private final PullResistor resistor;
|
private final PullResistor resistor;
|
||||||
private final ObservableValue[] inputs;
|
private final ObservableValue[] inputs;
|
||||||
@ -76,4 +78,9 @@ public final class CommonBusValue extends ObservableValue implements Observer {
|
|||||||
+ "inputs=" + Arrays.toString(inputs)
|
+ "inputs=" + Arrays.toString(inputs)
|
||||||
+ "', -->" + super.toString() + " }";
|
+ "', -->" + super.toString() + " }";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ObservableValues getOutputs() throws PinException {
|
||||||
|
return new ObservableValues(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -539,7 +539,6 @@ 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_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_nameUsedTwice_N">Signal {0} wurde mehrfach verwendet!</string>
|
||||||
<string name="err_errorParsingTestdata">Fehler beim Einlesen der Testdaten.</string>
|
<string name="err_errorParsingTestdata">Fehler beim Einlesen der Testdaten.</string>
|
||||||
<string name="err_backtrackLoopFound">Die Schaltung enthält ungepufferte zirkuläre Abhängigkeiten.</string>
|
|
||||||
<string name="err_backtrackOf_N_isImpossible">Die Modelkomponente {0} kann nicht analysiert werden.</string>
|
<string name="err_backtrackOf_N_isImpossible">Die Modelkomponente {0} kann nicht analysiert werden.</string>
|
||||||
|
|
||||||
<string name="key_AddrBits">Adress-Bits</string>
|
<string name="key_AddrBits">Adress-Bits</string>
|
||||||
|
@ -529,7 +529,6 @@ 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_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_nameUsedTwice_N">Signal {0} is used twice!</string>
|
||||||
<string name="err_errorParsingTestdata">Error parsing the test data.</string>
|
<string name="err_errorParsingTestdata">Error parsing the test data.</string>
|
||||||
<string name="err_backtrackLoopFound">The circuit contains unbuffered circular dependencies.</string>
|
|
||||||
<string name="err_backtrackOf_N_isImpossible">The model component {0} can not be analysed.</string>
|
<string name="err_backtrackOf_N_isImpossible">The model component {0} can not be analysed.</string>
|
||||||
|
|
||||||
<string name="key_AddrBits">Address Bits</string>
|
<string name="key_AddrBits">Address Bits</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user