1 package era.mi.logic.components;
\r
3 import java.util.List;
\r
5 import era.mi.logic.types.Bit;
\r
6 import era.mi.logic.wires.Wire.ReadEnd;
\r
7 import era.mi.logic.wires.Wire.ReadWriteEnd;
\r
9 public class TriStateBuffer extends BasicComponent
\r
14 public TriStateBuffer(int processTime, ReadEnd in, ReadWriteEnd out, ReadEnd enable)
\r
17 if (in.length() != out.length())
\r
18 throw new IllegalArgumentException(
\r
19 "Tri-state output must have the same amount of bits as the input. Input: " + in.length() + " Output: " + out.length());
\r
20 if (enable.length() != 1)
\r
21 throw new IllegalArgumentException("Tri-state enable must have exactly one bit, not " + enable.length() + ".");
\r
23 in.addObserver(this);
\r
24 this.enable = enable;
\r
25 enable.addObserver(this);
\r
30 protected void compute()
\r
32 if (enable.getValue() == Bit.ONE)
\r
33 out.feedSignals(in.getValues());
\r
39 public List<ReadEnd> getAllInputs()
\r
41 return List.of(in, enable);
\r
45 public List<ReadWriteEnd> getAllOutputs()
\r
47 return List.of(out);
\r