X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=era.mi%2Fsrc%2Fera%2Fmi%2Flogic%2Fcomponents%2FTriState.java;fp=era.mi%2Fsrc%2Fera%2Fmi%2Flogic%2Fcomponents%2FTriState.java;h=2bddbf1c3fd84de67857f9ccd9e1d3061377b5eb;hb=fa95c348b3b8fb9681e4bf5c8284c5ac8eeed518;hp=0000000000000000000000000000000000000000;hpb=b8eed971607b7f60e44ec37a5ec066afa07172e1;p=Mograsim.git diff --git a/era.mi/src/era/mi/logic/components/TriState.java b/era.mi/src/era/mi/logic/components/TriState.java new file mode 100644 index 00000000..2bddbf1c --- /dev/null +++ b/era.mi/src/era/mi/logic/components/TriState.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 TriState extends BasicComponent{ + WireArray in, enable; + WireArrayInput outI; + + public TriState(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(); + } + +}