| 88 | } |
| 89 | |
| 90 | func (d *Decoder3x8) Update(inputA, inputB, inputC bool) { |
| 91 | d.inputA.Update(inputA) |
| 92 | d.inputB.Update(inputB) |
| 93 | d.inputC.Update(inputC) |
| 94 | |
| 95 | d.notGates[0].Update(d.inputA.Get()) |
| 96 | d.notGates[1].Update(d.inputB.Get()) |
| 97 | d.notGates[2].Update(d.inputC.Get()) |
| 98 | |
| 99 | d.andGates[0].Update(d.notGates[0].Output(), d.notGates[1].Output(), d.notGates[2].Output()) |
| 100 | d.andGates[1].Update(d.notGates[0].Output(), d.notGates[1].Output(), d.inputC.Get()) |
| 101 | d.andGates[2].Update(d.notGates[0].Output(), d.inputB.Get(), d.notGates[2].Output()) |
| 102 | d.andGates[3].Update(d.notGates[0].Output(), d.inputB.Get(), d.inputC.Get()) |
| 103 | |
| 104 | d.andGates[4].Update(d.inputA.Get(), d.notGates[1].Output(), d.notGates[2].Output()) |
| 105 | d.andGates[5].Update(d.inputA.Get(), d.notGates[1].Output(), d.inputC.Get()) |
| 106 | d.andGates[6].Update(d.inputA.Get(), d.inputB.Get(), d.notGates[2].Output()) |
| 107 | d.andGates[7].Update(d.inputA.Get(), d.inputB.Get(), d.inputC.Get()) |
| 108 | |
| 109 | for i, _ := range d.outputs { |
| 110 | d.outputs[i].Update(d.andGates[i].Output()) |
| 111 | } |
| 112 | } |
| 113 | |
| 114 | type Decoder4x16 struct { |
| 115 | notGates [4]circuit.NOTGate |