use of com.cburch.logisim.data.Value in project logisim-evolution by reds-heig.
the class ShiftRegisterData method setDimensions.
public void setDimensions(BitWidth newWidth, int newLength) {
Value[] v = vs;
BitWidth oldWidth = width;
int oldW = oldWidth.getWidth();
int newW = newWidth.getWidth();
if (v.length != newLength) {
Value[] newV = new Value[newLength];
int j = vsPos;
int copy = Math.min(newLength, v.length);
for (int i = 0; i < copy; i++) {
newV[i] = v[j];
j++;
if (j == v.length)
j = 0;
}
Arrays.fill(newV, copy, newLength, Value.createKnown(newWidth, 0));
v = newV;
vsPos = 0;
vs = newV;
}
if (oldW != newW) {
for (int i = 0; i < v.length; i++) {
Value vi = v[i];
if (vi.getWidth() != newW) {
v[i] = vi.extendWidth(newW, Value.FALSE);
}
}
width = newWidth;
}
}
use of com.cburch.logisim.data.Value in project logisim-evolution by reds-heig.
the class BitExtender method propagate.
@Override
public void propagate(InstanceState state) {
Value in = state.getPortValue(1);
BitWidth wout = state.getAttributeValue(ATTR_OUT_WIDTH);
String type = getType(state.getAttributeSet());
Value extend;
if (type.equals("one")) {
extend = Value.TRUE;
} else if (type.equals("sign")) {
int win = in.getWidth();
extend = win > 0 ? in.get(win - 1) : Value.ERROR;
} else if (type.equals("input")) {
extend = state.getPortValue(2);
if (extend.getWidth() != 1)
extend = Value.ERROR;
} else {
extend = Value.FALSE;
}
Value out = in.extendWidth(wout.getWidth(), extend);
state.setPort(0, out, 1);
}
use of com.cburch.logisim.data.Value in project logisim-evolution by reds-heig.
the class Clock method tick.
//
// package methods
//
public static boolean tick(CircuitState circState, int ticks, Component comp) {
AttributeSet attrs = comp.getAttributeSet();
int durationHigh = attrs.getValue(ATTR_HIGH).intValue();
int durationLow = attrs.getValue(ATTR_LOW).intValue();
ClockState state = (ClockState) circState.getData(comp);
if (state == null) {
state = new ClockState();
circState.setData(comp, state);
}
boolean curValue = ticks % (durationHigh + durationLow) < durationLow;
if (state.clicks % 2 == 1) {
curValue = !curValue;
}
Value desired = (curValue ? Value.FALSE : Value.TRUE);
if (!state.sending.equals(desired)) {
state.sending = desired;
Instance.getInstanceFor(comp).fireInvalidated();
return true;
} else {
return false;
}
}
use of com.cburch.logisim.data.Value in project logisim-evolution by reds-heig.
the class Clock method propagate.
@Override
public void propagate(InstanceState state) {
Value val = state.getPortValue(0);
ClockState q = getState(state);
if (!val.equals(q.sending)) {
// ignore if no change
state.setPort(0, q.sending, 1);
}
}
use of com.cburch.logisim.data.Value in project logisim-evolution by reds-heig.
the class Register method propagate.
@Override
public void propagate(InstanceState state) {
BitWidth dataWidth = state.getAttributeValue(StdAttr.WIDTH);
Object triggerType = state.getAttributeValue(StdAttr.TRIGGER);
RegisterData data = (RegisterData) state.getData();
if (data == null) {
data = new RegisterData(dataWidth);
state.setData(data);
}
boolean triggered = data.updateClock(state.getPortValue(CK), triggerType);
if (state.getPortValue(CLR) == Value.TRUE) {
data.value = Value.createKnown(dataWidth, 0);
} else if (triggered && state.getPortValue(EN) != Value.FALSE) {
Value in = state.getPortValue(IN);
data.value = in;
}
state.setPort(OUT, data.value, DELAY);
}
Aggregations