Search in sources :

Example 11 with Value

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;
    }
}
Also used : BitWidth(com.cburch.logisim.data.BitWidth) Value(com.cburch.logisim.data.Value)

Example 12 with Value

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);
}
Also used : BitWidth(com.cburch.logisim.data.BitWidth) Value(com.cburch.logisim.data.Value)

Example 13 with Value

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;
    }
}
Also used : AttributeSet(com.cburch.logisim.data.AttributeSet) Value(com.cburch.logisim.data.Value)

Example 14 with Value

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);
    }
}
Also used : Value(com.cburch.logisim.data.Value)

Example 15 with Value

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);
}
Also used : BitWidth(com.cburch.logisim.data.BitWidth) Value(com.cburch.logisim.data.Value)

Aggregations

Value (com.cburch.logisim.data.Value)89 BitWidth (com.cburch.logisim.data.BitWidth)30 Graphics (java.awt.Graphics)15 Location (com.cburch.logisim.data.Location)9 Color (java.awt.Color)8 Bounds (com.cburch.logisim.data.Bounds)7 InstanceDataSingleton (com.cburch.logisim.instance.InstanceDataSingleton)7 AttributeSet (com.cburch.logisim.data.AttributeSet)6 InstanceState (com.cburch.logisim.instance.InstanceState)6 Direction (com.cburch.logisim.data.Direction)3 Instance (com.cburch.logisim.instance.Instance)3 Port (com.cburch.logisim.instance.Port)3 CircuitState (com.cburch.logisim.circuit.CircuitState)2 Component (com.cburch.logisim.comp.Component)2 FailException (com.cburch.logisim.data.FailException)2 TestException (com.cburch.logisim.data.TestException)2 Dimension (java.awt.Dimension)2 FontMetrics (java.awt.FontMetrics)2 ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2