1   /**
2    * 183.592 Programmierpraxis TU Wien WS2014/15 H.Moritsch
3    * Digitale Schaltungen
4    * Halbaddierer
5    */
6   public class HalfAdder implements Component {
7   
8       // ein Halbadierer besteht aus 6 Gattern
9       private Gate[] gate = new Gate[6];
10  
11      public HalfAdder(Signal x, Signal y) {
12  
13          // Aufbau des Halbadierers aus den Gattern
14          gate[0] = new Not(x);                           // NOT x
15          gate[1] = new Not(y);                           // NOT y
16          gate[2] = new And(gate[0].out(), y);            // (NOT x) AND y
17          gate[3] = new And(x, gate[1].out());            // x and (NOT y)
18          gate[4] = new Or(gate[2].out(), gate[3].out()); // s = ((NOT x) AND y) OR (x and (NOT y))
19          gate[5] = new And(x, y);                        // c = x AND y  
20      }
21  
22      // Halbadierer schaltet: Durchführung der Operationen aller Gatter (Reihenfolge!)
23      public void operate() {
24          for (int i=0; i<gate.length; i++) 
25              gate[i].operate();
26      }
27  
28      // Ausgang Summe des Halbaddierers    
29      public Signal getSum() {
30          return gate[4].out();
31      }
32  
33      // Ausgang Übertrag des Halbaddierers 
34      public Signal getCarry() {
35          return gate[5].out();
36      }
37  
38  }
39