@Override
protected TimelineEventHandler compute()
{
- if (!address.hasNumericValue())
+ if (!address.getValues().isBinary())
{
if (read.equals(rWBit.getValue()))
return e -> data.feedSignals(Bit.U.toVector(data.width()));// TODO don't always feed U, but decide to feed X or U.
return e -> data.clearSignals();
}
- long addressed = address.getUnsignedValue();
+ long addressed = address.getValues().getUnsignedValueLong();
if (read.equals(rWBit.getValue()))
{
BitVector storedData = memory.getCell(addressed);
return e -> data.feedSignals(storedData);
- } else
- {
- BitVector transData = data.getValues();
- return e ->
- {
- data.clearSignals();
- memory.setCell(addressed, transData);
- };
}
+ BitVector transData = data.getValues();
+ if (transData.equals(memory.getCell(addressed)))
+ return null;
+ return e ->
+ {
+ data.clearSignals();
+ memory.setCell(addressed, transData);
+ };
}
@Override