mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-26 14:31:02 -04:00
minor refactoring of comparator
Now it also uses new getValueSIgned() method.
This commit is contained in:
parent
7ea2f89ec0
commit
edc114f2a7
@ -31,8 +31,6 @@ public class Comparator extends Node implements Element {
|
||||
private final ObservableValue aklb;
|
||||
private final ObservableValue equals;
|
||||
private final ObservableValue agrb;
|
||||
private final int maskAnd;
|
||||
private final int maskOr;
|
||||
private ObservableValue a;
|
||||
private ObservableValue b;
|
||||
private long valueA;
|
||||
@ -46,8 +44,6 @@ public class Comparator extends Node implements Element {
|
||||
public Comparator(ElementAttributes attributes) {
|
||||
signed = attributes.get(Keys.SIGNED);
|
||||
bits = attributes.get(Keys.BITS);
|
||||
this.maskAnd = 1 << (bits - 1);
|
||||
this.maskOr = ~((1 << bits) - 1);
|
||||
|
||||
this.agrb = new ObservableValue(">", 1).setPinDescription(DESCRIPTION);
|
||||
this.equals = new ObservableValue("=", 1).setPinDescription(DESCRIPTION);
|
||||
@ -56,8 +52,13 @@ public class Comparator extends Node implements Element {
|
||||
|
||||
@Override
|
||||
public void readInputs() throws NodeException {
|
||||
valueA = a.getValue();
|
||||
valueB = b.getValue();
|
||||
if (signed) {
|
||||
valueA = a.getValueSigned();
|
||||
valueB = b.getValueSigned();
|
||||
} else {
|
||||
valueA = a.getValue();
|
||||
valueB = b.getValue();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -68,25 +69,12 @@ public class Comparator extends Node implements Element {
|
||||
agrb.setValue(0);
|
||||
} else {
|
||||
equals.setValue(0);
|
||||
|
||||
if (signed) {
|
||||
valueA = signeExtend(valueA);
|
||||
valueB = signeExtend(valueB);
|
||||
}
|
||||
|
||||
boolean kl = valueA < valueB;
|
||||
aklb.setBool(kl);
|
||||
agrb.setBool(!kl);
|
||||
}
|
||||
}
|
||||
|
||||
private long signeExtend(long v) {
|
||||
if ((v & maskAnd) != 0)
|
||||
return v | maskOr;
|
||||
else
|
||||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInputs(ObservableValues inputs) throws BitsException {
|
||||
a = inputs.get(0).addObserverToValue(this).checkBits(bits, this, 0);
|
||||
|
@ -211,8 +211,8 @@ Es können sowohl komplette Takte als auch einzelne Gatter-Veränderungen angeze
|
||||
<string name="elem_Mul_pin_a">Eingang a für Multiplikation.</string>
|
||||
<string name="elem_Mul_pin_b">Eingang b für Multiplikation.</string>
|
||||
<string name="elem_Mul_pin_mul">Ausgang mit dem Ergebnis der Multiplikation.</string>
|
||||
<string name="elem_BarrelShifter">Verschieber</string>
|
||||
<string name="elem_BarrelShifter_tt">Ein Baustein zum Bitschieben. Verschiebt einen Wert um die am Eingang shift angegebene Anzahl von Bits.</string>
|
||||
<string name="elem_BarrelShifter">Bit-Schieber</string>
|
||||
<string name="elem_BarrelShifter_tt">Ein Baustein zum Schieben von Bits. Verschiebt einen Wert um die am Eingang shift angegebene Anzahl von Bits.</string>
|
||||
<string name="elem_BarrelShifter_pin_in">Eingang mit zu verschiebenden Bits.</string>
|
||||
<string name="elem_BarrelShifter_pin_shift">Eingang mit Weite der Verschiebung.</string>
|
||||
<string name="elem_BarrelShifter_pin_out">Ausgang mit dem Ergebnis der Verschiebeoperation.</string>
|
||||
@ -616,7 +616,7 @@ Sind evtl. die Namen der Variablen nicht eindeutig?</string>
|
||||
<string name="key_barrelSigned">Verschiebeweite hat Vorzeichen</string>
|
||||
<string name="key_barrelSigned_tt">Verschiebeweite verwendet Zweierkomplement</string>
|
||||
<string name="key_barrelShifterMode">Modus</string>
|
||||
<string name="key_barrelShifterMode_tt">Modus des Verschiebung.</string>
|
||||
<string name="key_barrelShifterMode_tt">Modus der Verschiebung.</string>
|
||||
<string name="key_barrelShifterMode_normal">Normal</string>
|
||||
<string name="key_barrelShifterMode_rotate">Rotation</string>
|
||||
<string name="key_barrelShifterMode_arithmetic">Arithmetisch</string>
|
||||
|
@ -53,6 +53,9 @@ public class ComparatorTest extends TestCase {
|
||||
sc.check(8, 2, 0, 0, 1);
|
||||
sc.check(15, 2, 0, 0, 1);
|
||||
sc.check(13, 15, 0, 0, 1);
|
||||
|
||||
sc.check(-2, -3, 1, 0, 0);
|
||||
sc.check(-7, -8, 1, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user