1 package era.mi.logic;
\r
3 import java.util.Arrays;
\r
6 * stdlogic according to IEEE 1164
\r
11 public static Bit and(Bit a, Bit b) {
\r
15 public Bit and(Bit other) {
\r
16 return fromTable(AND_TABLE, this, other);
\r
19 public static Bit or(Bit a, Bit b) {
\r
23 public Bit or(Bit other) {
\r
24 return fromTable(OR_TABLE, this, other);
\r
27 public static Bit xor(Bit a, Bit b) {
\r
31 public Bit xor(Bit other) {
\r
32 return fromTable(XOR_TABLE, this, other);
\r
48 public Bit[] makeArray(int length) {
\r
49 Bit[] bits = new Bit[length];
\r
50 Arrays.fill(bits, this);
\r
54 public Bit combineWith(Bit other) {
\r
55 return fromTable(JOIN_TABLE, this, other);
\r
58 public static Bit combine(Bit a, Bit b) {
\r
59 return a.combineWith(b);
\r
62 private static Bit fromTable(Bit[][] table, Bit a, Bit b) {
\r
63 return table[a.ordinal()][b.ordinal()];
\r
67 private static Bit[][] JOIN_TABLE =
\r
68 { { U, U, U, U, U },
\r
70 { U, X, ZERO, X, ZERO },
\r
71 { U, X, X, ONE, ONE },
\r
72 { U, X, ZERO, ONE, Z } };
\r
74 private static Bit[][] AND_TABLE =
\r
75 { { U, U, ZERO, U, U },
\r
76 { U, X, ZERO, X, X },
\r
77 { ZERO, ZERO, ZERO, ZERO, ZERO },
\r
78 { U, X, ZERO, ONE, X },
\r
79 { U, X, ZERO, X, X } };
\r
81 private static Bit[][] OR_TABLE =
\r
82 { { U, U, U, ONE, U },
\r
83 { U, X, X, ONE, X },
\r
84 { U, X, ZERO, ONE, X },
\r
85 { ONE, ONE, ONE, ONE, ONE },
\r
86 { U, X, X, ONE, X } };
\r
88 private static Bit[][] XOR_TABLE =
\r
89 { { U, U, U, U, U },
\r
91 { U, X, ZERO, ONE, X },
\r
92 { U, X, ONE, ZERO, X },
\r
93 { U, X, X, X, X } };
\r