mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-18 01:14:42 -04:00
allows fsm dc values
This commit is contained in:
parent
71e638c98f
commit
fb7a2cbe73
@ -28,6 +28,7 @@ public class State extends Movable<State> {
|
|||||||
private int radius;
|
private int radius;
|
||||||
private boolean isInitial;
|
private boolean isInitial;
|
||||||
private int initialAngle = 12;
|
private int initialAngle = 12;
|
||||||
|
private boolean defaultDC;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new state
|
* Creates a new state
|
||||||
@ -46,6 +47,7 @@ public class State extends Movable<State> {
|
|||||||
this.number = other.number;
|
this.number = other.number;
|
||||||
this.isInitial = other.isInitial;
|
this.isInitial = other.isInitial;
|
||||||
this.initialAngle = other.initialAngle;
|
this.initialAngle = other.initialAngle;
|
||||||
|
this.defaultDC = other.defaultDC;
|
||||||
setValues(other.getValues());
|
setValues(other.getValues());
|
||||||
setPos(other.getPos());
|
setPos(other.getPos());
|
||||||
}
|
}
|
||||||
@ -277,4 +279,12 @@ public class State extends Movable<State> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isDefaultDC() {
|
||||||
|
return defaultDC;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultDC(boolean defaultDC) {
|
||||||
|
this.defaultDC = defaultDC;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,8 +115,9 @@ public class TransitionTableCreator {
|
|||||||
int row = s.getNumber();
|
int row = s.getNumber();
|
||||||
int col = stateBits * 2;
|
int col = stateBits * 2;
|
||||||
for (String name : results) {
|
for (String name : results) {
|
||||||
|
int def = s.isDefaultDC() ? 2 : 0;
|
||||||
Integer val = getValues(s).get(name);
|
Integer val = getValues(s).get(name);
|
||||||
int v = val == null ? 0 : val;
|
int v = val == null ? def : val;
|
||||||
truthTable.setValue(row, col, v);
|
truthTable.setValue(row, col, v);
|
||||||
col++;
|
col++;
|
||||||
}
|
}
|
||||||
@ -129,7 +130,10 @@ public class TransitionTableCreator {
|
|||||||
int m = row;
|
int m = row;
|
||||||
for (int j = 0; j < stateBits; j++) {
|
for (int j = 0; j < stateBits; j++) {
|
||||||
c--;
|
c--;
|
||||||
truthTable.setValue(row, c, m & 1);
|
int aValue = 2;
|
||||||
|
if (!s.isDefaultDC())
|
||||||
|
aValue = m & 1;
|
||||||
|
truthTable.setValue(row, c, aValue);
|
||||||
m >>= 1;
|
m >>= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,7 @@ import static de.neemann.digital.gui.components.CircuitComponent.ICON_DELETE;
|
|||||||
public class FSMComponent extends JComponent {
|
public class FSMComponent extends JComponent {
|
||||||
private static final Key<Integer> KEY_NUMBER = new Key.KeyInteger("stateNum", 0);
|
private static final Key<Integer> KEY_NUMBER = new Key.KeyInteger("stateNum", 0);
|
||||||
private static final Key<Boolean> KEY_INITIAL = new Key<>("isInitialState", false);
|
private static final Key<Boolean> KEY_INITIAL = new Key<>("isInitialState", false);
|
||||||
|
private static final Key<Boolean> KEY_DEFAULT_DC = new Key<>("defaultsDC", false);
|
||||||
private static final Key<String> KEY_VALUES = new Key<>("stateValues", "");
|
private static final Key<String> KEY_VALUES = new Key<>("stateValues", "");
|
||||||
private static final Key<String> KEY_CONDITION = new Key<>("transCond", "");
|
private static final Key<String> KEY_CONDITION = new Key<>("transCond", "");
|
||||||
private static final Key<Integer> KEY_RADIUS = new Key.KeyInteger("transRad", 70)
|
private static final Key<Integer> KEY_RADIUS = new Key.KeyInteger("transRad", 70)
|
||||||
@ -179,7 +180,7 @@ public class FSMComponent extends JComponent {
|
|||||||
setPreferredSize(new Dimension(600, 600));
|
setPreferredSize(new Dimension(600, 600));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Key<?>[] STATE_EDIT_KEYS = {Keys.LABEL, KEY_NUMBER, KEY_INITIAL, KEY_VALUES, KEY_RADIUS};
|
private static final Key<?>[] STATE_EDIT_KEYS = {Keys.LABEL, KEY_NUMBER, KEY_INITIAL, KEY_VALUES, KEY_RADIUS, KEY_DEFAULT_DC};
|
||||||
|
|
||||||
private void createNewState(Vector posVector, Point point) {
|
private void createNewState(Vector posVector, Point point) {
|
||||||
ElementAttributes attr = new ElementAttributes();
|
ElementAttributes attr = new ElementAttributes();
|
||||||
@ -207,6 +208,7 @@ public class FSMComponent extends JComponent {
|
|||||||
ElementAttributes attr = new ElementAttributes()
|
ElementAttributes attr = new ElementAttributes()
|
||||||
.set(KEY_NUMBER, state.getNumber())
|
.set(KEY_NUMBER, state.getNumber())
|
||||||
.set(KEY_INITIAL, state.isInitial())
|
.set(KEY_INITIAL, state.isInitial())
|
||||||
|
.set(KEY_DEFAULT_DC, state.isDefaultDC())
|
||||||
.set(KEY_VALUES, state.getValues())
|
.set(KEY_VALUES, state.getValues())
|
||||||
.set(KEY_RADIUS, state.getVisualRadius())
|
.set(KEY_RADIUS, state.getVisualRadius())
|
||||||
.set(Keys.LABEL, state.getName());
|
.set(Keys.LABEL, state.getName());
|
||||||
@ -218,6 +220,7 @@ public class FSMComponent extends JComponent {
|
|||||||
if (newAttr != null) {
|
if (newAttr != null) {
|
||||||
state.setNumber(newAttr.get(KEY_NUMBER));
|
state.setNumber(newAttr.get(KEY_NUMBER));
|
||||||
state.setInitial(newAttr.get(KEY_INITIAL));
|
state.setInitial(newAttr.get(KEY_INITIAL));
|
||||||
|
state.setDefaultDC(newAttr.get(KEY_DEFAULT_DC));
|
||||||
state.setValues(newAttr.get(KEY_VALUES));
|
state.setValues(newAttr.get(KEY_VALUES));
|
||||||
state.setRadius(newAttr.get(KEY_RADIUS));
|
state.setRadius(newAttr.get(KEY_RADIUS));
|
||||||
state.setName(newAttr.get(Keys.LABEL));
|
state.setName(newAttr.get(Keys.LABEL));
|
||||||
|
@ -2426,6 +2426,8 @@ Sie dürfen jedoch nicht oberhalb der Kopfzeile mit den Signalnamen verwendet we
|
|||||||
<string name="key_isInitialState_tt">Wenn gesetzt, ist dies der Initialzustand, in welchem der Automat gestartet
|
<string name="key_isInitialState_tt">Wenn gesetzt, ist dies der Initialzustand, in welchem der Automat gestartet
|
||||||
wird.
|
wird.
|
||||||
</string>
|
</string>
|
||||||
|
<string name="key_defaultsDC">Nicht definierte Werte auf DC setzen</string>
|
||||||
|
<string name="key_defaultsDC_tt">Setzt alle nicht definierten Werte (Folgezustand und Ausgänge) auf "Don't care"</string>
|
||||||
<string name="key_stateValues">Ausgänge</string>
|
<string name="key_stateValues">Ausgänge</string>
|
||||||
<string name="key_stateValues_tt">Legt Ausgangswerte fest.
|
<string name="key_stateValues_tt">Legt Ausgangswerte fest.
|
||||||
Mit einfachen Zuweisungen wie "A=1, B=0" können Ausgänge gesetzt werden.
|
Mit einfachen Zuweisungen wie "A=1, B=0" können Ausgänge gesetzt werden.
|
||||||
|
@ -2401,6 +2401,8 @@ However, they must not be used above the header line listing the signal names.</
|
|||||||
<string name="key_stateNum_tt">The number which represents this state.</string>
|
<string name="key_stateNum_tt">The number which represents this state.</string>
|
||||||
<string name="key_isInitialState">Initial State</string>
|
<string name="key_isInitialState">Initial State</string>
|
||||||
<string name="key_isInitialState_tt">If set, this state is the initial state.</string>
|
<string name="key_isInitialState_tt">If set, this state is the initial state.</string>
|
||||||
|
<string name="key_defaultsDC">Set undefined values to DC</string>
|
||||||
|
<string name="key_defaultsDC_tt">Sets all undefined values (following state and outputs) to "Don't Care".</string>
|
||||||
<string name="key_stateValues">Outputs</string>
|
<string name="key_stateValues">Outputs</string>
|
||||||
<string name="key_stateValues_tt">Defines the output values.
|
<string name="key_stateValues_tt">Defines the output values.
|
||||||
With simple assignments like "A=1, B=0" outputs can be set.
|
With simple assignments like "A=1, B=0" outputs can be set.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user