X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=era.mi%2Fsrc%2Fera%2Fmi%2Flogic%2Fcomponents%2FTriStateBuffer.java;fp=era.mi%2Fsrc%2Fera%2Fmi%2Flogic%2Fcomponents%2FTriStateBuffer.java;h=4000ae66e1778fbc506a61def85d0ce19ce681c7;hb=49f569b513c36e8ad421fd5a547bf34bd830652a;hp=0000000000000000000000000000000000000000;hpb=670a82cafe6435b2cdaf02e86701fedd14970c1c;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 new file mode 100644 index 00000000..4000ae66 --- /dev/null +++ b/era.mi/src/era/mi/logic/components/TriStateBuffer.java @@ -0,0 +1,33 @@ +package era.mi.logic.components; + +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 + "."); + this.in = in; + in.addObserver(this); + this.enable = enable; + enable.addObserver(this); + outI = out.createInput(); + } + + @Override + protected void compute() + { + if(enable.getValue() == Bit.ONE) + outI.feedSignals(in.getValues()); + else + outI.clearSignals(); + } + +}