Fixed Merger, Mux, Splitter: onedirectional again. Tests added.
[Mograsim.git] / era.mi / src / era / mi / logic / components / TriStateBuffer.java
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 (file)
index 0000000..4000ae6
--- /dev/null
@@ -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();
+       }
+
+}