Model analyser preserves the ff default values.

This commit is contained in:
hneemann 2019-06-30 18:07:04 +02:00
parent 285404dea9
commit 48a1e1fb0a
5 changed files with 38 additions and 5 deletions

View File

@ -70,6 +70,8 @@ public class ModelAnalyser {
outputs.add(i++, new Signal(label + "+1", ff.getDInput()));
modelAnalyzerInfo.setSequentialInitValue(label, ff.getDefault());
ObservableValue q = ff.getOutputs().get(0);
final Signal sig = new Signal(label, q);
if (inputs.contains(sig))
@ -229,10 +231,11 @@ public class ModelAnalyser {
String label = ff.getLabel();
if (label.length() == 0)
label = createOutputBasedName(ff);
long def = ff.getDefault();
for (int i = ff.getBits() - 1; i >= 0; i--) {
ObservableValue qn = new ObservableValue("", 1);
ObservableValue nqn = new ObservableValue("", 1);
FlipflopD newff = new FlipflopD(label + i, qn, nqn);
FlipflopD newff = new FlipflopD(label + i, qn, nqn, (def & (1L<<i))!=0 ?1:0);
spinput.addAtTop(qn);
model.add(newff);
newff.setInputs(new ObservableValues(insp.getOutputs().get(i), getClock()));

View File

@ -40,6 +40,7 @@ public class FlipflopD extends Node implements Element {
private ObservableValue qn;
private boolean lastClock;
private long value;
private long defaultValue;
/**
* Creates a new instance
@ -58,9 +59,13 @@ public class FlipflopD extends Node implements Element {
* @param label the label
* @param q output
* @param qn inverted output
* @param def the default value
*/
public FlipflopD(String label, ObservableValue q, ObservableValue qn) {
this(new ElementAttributes().set(Keys.LABEL, label).setBits(q.getBits()), q, qn);
public FlipflopD(String label, ObservableValue q, ObservableValue qn, long def) {
this(new ElementAttributes()
.set(Keys.LABEL, label)
.setBits(q.getBits())
.set(Keys.DEFAULT, def), q, qn);
if (qn.getBits() != q.getBits())
throw new RuntimeException("wrong bit count given!");
}
@ -73,7 +78,8 @@ public class FlipflopD extends Node implements Element {
isProbe = attributes.get(Keys.VALUE_IS_PROBE);
label = attributes.getLabel();
value = attributes.get(Keys.DEFAULT);
defaultValue = attributes.get(Keys.DEFAULT);
value = defaultValue;
q.setValue(value);
qn.setValue(~value);
}
@ -145,4 +151,11 @@ public class FlipflopD extends Node implements Element {
void setValue(long value) {
this.value = value;
}
/**
* @return the default value
*/
public long getDefault() {
return defaultValue;
}
}

View File

@ -19,6 +19,10 @@
<string>Inputs</string>
<int>1</int>
</entry>
<entry>
<string>generic</string>
<string>this.Default=orig.Default;</string>
</entry>
</elementAttributes>
<pos x="240" y="60"/>
</visualElement>

View File

@ -1,7 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<circuit>
<version>1</version>
<attributes/>
<attributes>
<entry>
<string>isGeneric</string>
<boolean>true</boolean>
</entry>
</attributes>
<visualElements>
<visualElement>
<elementName>D_FF</elementName>
@ -14,6 +19,10 @@
<string>Inputs</string>
<int>1</int>
</entry>
<entry>
<string>generic</string>
<string>this.Default=orig.Default;</string>
</entry>
</elementAttributes>
<pos x="240" y="60"/>
</visualElement>

View File

@ -19,6 +19,10 @@
<string>Inputs</string>
<int>1</int>
</entry>
<entry>
<string>generic</string>
<string>this.Default=orig.Default;</string>
</entry>
</elementAttributes>
<pos x="240" y="60"/>
</visualElement>