Model analyser ignores signals named "VCC" and "GND".

This commit is contained in:
hneemann 2020-01-01 11:16:36 +01:00
parent e56963dc9e
commit 06a3c1fd9d

View File

@ -180,44 +180,50 @@ public class ModelAnalyser {
private ArrayList<Signal> checkBinaryInputs(ArrayList<Signal> list) throws AnalyseException { private ArrayList<Signal> checkBinaryInputs(ArrayList<Signal> list) throws AnalyseException {
ArrayList<Signal> inputs = new ArrayList<>(); ArrayList<Signal> inputs = new ArrayList<>();
for (Signal s : list) { for (Signal s : list) {
final int bits = s.getValue().getBits(); if (!ignoreSignal(s)) {
if (bits == 1) final int bits = s.getValue().getBits();
inputs.add(s); if (bits == 1)
else { inputs.add(s);
try { else {
Splitter sp = Splitter.createNToOne(bits); try {
final ObservableValue out = sp.getOutputs().get(0); Splitter sp = Splitter.createNToOne(bits);
out.addObserver(new NodeWithoutDelay(s.getValue()) { final ObservableValue out = sp.getOutputs().get(0);
@Override out.addObserver(new NodeWithoutDelay(s.getValue()) {
public void hasChanged() { @Override
s.getValue().setValue(out.getValue()); public void hasChanged() {
s.getValue().setValue(out.getValue());
}
});
out.fireHasChanged();
SplitPinString pins = SplitPinString.create(s);
ObservableValues.Builder builder = new ObservableValues.Builder();
String name = s.getName();
if (!name.contains("_"))
name += "_";
for (int i = bits - 1; i >= 0; i--) {
ObservableValue o = new ObservableValue(name + i, 1);
builder.add(o);
inputs.add(new Signal(name + i, o).setPinNumber(pins.getPin(i)));
} }
}); final ObservableValues inputsList = builder.reverse().build();
out.fireHasChanged(); sp.setInputs(inputsList);
SplitPinString pins = SplitPinString.create(s); modelAnalyzerInfo.addInputBus(s.getName(), inputsList.getNames());
ObservableValues.Builder builder = new ObservableValues.Builder();
String name = s.getName(); } catch (NodeException e) {
if (!name.contains("_")) throw new AnalyseException(e);
name += "_";
for (int i = bits - 1; i >= 0; i--) {
ObservableValue o = new ObservableValue(name + i, 1);
builder.add(o);
inputs.add(new Signal(name + i, o).setPinNumber(pins.getPin(i)));
} }
final ObservableValues inputsList = builder.reverse().build();
sp.setInputs(inputsList);
modelAnalyzerInfo.addInputBus(s.getName(), inputsList.getNames());
} catch (NodeException e) {
throw new AnalyseException(e);
} }
} }
} }
return inputs; return inputs;
} }
private boolean ignoreSignal(Signal s) {
return s.getName().equals("VCC") || s.getName().equals("GND");
}
private void checkClock(Node node) throws AnalyseException { private void checkClock(Node node) throws AnalyseException {
if (!getClock().hasObserver(node)) if (!getClock().hasObserver(node))
throw new AnalyseException(Lang.get("err_ffNeedsToBeConnectedToClock")); throw new AnalyseException(Lang.get("err_ffNeedsToBeConnectedToClock"));