8a414244c26cf1f4a716a39b930b39c388586c05
[Mograsim.git] / era.mi / src / era / mi / logic / components / TriStateBuffer.java
1 package era.mi.logic.components;\r
2 \r
3 import java.util.Arrays;\r
4 import java.util.Collections;\r
5 import java.util.List;\r
6 \r
7 import era.mi.logic.Bit;\r
8 import era.mi.logic.wires.WireArray;\r
9 import era.mi.logic.wires.WireArray.WireArrayEnd;\r
10 \r
11 public class TriStateBuffer extends BasicComponent\r
12 {\r
13         WireArray in, enable;\r
14         WireArrayEnd outI;\r
15 \r
16         public TriStateBuffer(int processTime, WireArray in, WireArray out, WireArray enable)\r
17         {\r
18                 super(processTime);\r
19                 if (in.length != out.length)\r
20                         throw new IllegalArgumentException(\r
21                                         "Tri-state output must have the same amount of bits as the input. Input: " + in.length + " Output: " + out.length);\r
22                 if (enable.length != 1)\r
23                         throw new IllegalArgumentException("Tri-state enable must have exactly one bit, not " + enable.length + ".");\r
24                 this.in = in;\r
25                 in.addObserver(this);\r
26                 this.enable = enable;\r
27                 enable.addObserver(this);\r
28                 outI = out.createInput();\r
29         }\r
30 \r
31         @Override\r
32         protected void compute()\r
33         {\r
34                 if (enable.getValue() == Bit.ONE)\r
35                         outI.feedSignals(in.getValues());\r
36                 else\r
37                         outI.clearSignals();\r
38         }\r
39 \r
40         @Override\r
41         public List<WireArray> getAllInputs()\r
42         {\r
43                 return Collections.unmodifiableList(Arrays.asList(in, enable));\r
44         }\r
45 \r
46         @Override\r
47         public List<WireArray> getAllOutputs()\r
48         {\r
49                 return Collections.unmodifiableList(Arrays.asList(outI.owner));\r
50         }\r
51 \r
52 }\r