X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=era.mi%2Fsrc%2Fera%2Fmi%2Flogic%2Fcomponents%2FTriStateBuffer.java;h=123e2c54a709e6b52de375f4075e5fae151ab8ef;hb=6c67a9ff8361cd9fc082f40e2676f2c8b5911fe4;hp=c21c47687d3589934ac81b5ba209dfe3838166c0;hpb=bcf8d773c7a836c2ee17e17a49c296ebf31d2777;p=Mograsim.git diff --git a/era.mi/src/era/mi/logic/components/TriStateBuffer.java b/era.mi/src/era/mi/logic/components/TriStateBuffer.java index c21c4768..123e2c54 100644 --- a/era.mi/src/era/mi/logic/components/TriStateBuffer.java +++ b/era.mi/src/era/mi/logic/components/TriStateBuffer.java @@ -1,49 +1,51 @@ package era.mi.logic.components; -import java.util.Arrays; -import java.util.Collections; import java.util.List; -import era.mi.logic.Bit; -import era.mi.logic.wires.WireArray; -import era.mi.logic.wires.WireArray.WireArrayInput; - -public class TriStateBuffer extends BasicComponent{ - WireArray in, enable; - WireArrayInput outI; - - public TriStateBuffer(int processTime, WireArray in, WireArray out, WireArray enable) { - super(processTime); - if(in.length != out.length) - throw new IllegalArgumentException("Tri-state output must have the same amount of bits as the input. Input: " + in.length + " Output: " + out.length); - if(enable.length != 1) - throw new IllegalArgumentException("Tri-state enable must have exactly one bit, not " + enable.length + "."); +import era.mi.logic.timeline.Timeline; +import era.mi.logic.types.Bit; +import era.mi.logic.wires.Wire.ReadEnd; +import era.mi.logic.wires.Wire.ReadWriteEnd; + +public class TriStateBuffer extends BasicComponent +{ + ReadEnd in, enable; + ReadWriteEnd out; + + public TriStateBuffer(Timeline timeline, int processTime, ReadEnd in, ReadWriteEnd out, ReadEnd enable) + { + super(timeline, processTime); + if (in.length() != out.length()) + throw new IllegalArgumentException( + "Tri-state output must have the same amount of bits as the input. Input: " + in.length() + " Output: " + out.length()); + if (enable.length() != 1) + throw new IllegalArgumentException("Tri-state enable must have exactly one bit, not " + enable.length() + "."); this.in = in; in.addObserver(this); this.enable = enable; enable.addObserver(this); - outI = out.createInput(); + this.out = out; } - + @Override protected void compute() { - if(enable.getValue() == Bit.ONE) - outI.feedSignals(in.getValues()); + if (enable.getValue() == Bit.ONE) + out.feedSignals(in.getValues()); else - outI.clearSignals(); + out.clearSignals(); } @Override - public List getAllInputs() + public List getAllInputs() { - return Collections.unmodifiableList(Arrays.asList(in, enable)); + return List.of(in, enable); } @Override - public List getAllOutputs() + public List getAllOutputs() { - return Collections.unmodifiableList(Arrays.asList(outI.owner)); + return List.of(out); } }