# Volladdierer

Ein Volladdierer (englisch full adder) ist ein Schaltnetz, das üblicherweise als digitale Schaltung realisiert wird. Es besteht aus drei Eingängen ($x$, $y$ und $c_{\mathrm {in} }$) und zwei Ausgängen ($s$ und $c_{\mathrm {out} }$). Mit einem Volladdierer kann man drei einstellige Binärzahlen addieren. Dabei liefert der Ausgang $s$ (engl. sum – Summe) die niederwertige Stelle des Ergebnisses, der Ausgang $c_{\mathrm {out} }$ (engl. carry (output) – Übertrag (Ausgang)) die höherwertige. Die Bezeichner $c_{\mathrm {in} }$ und $c_{\mathrm {out} }$ legen hierbei eine Möglichkeit zur Übertragsbehandlung in Addiernetzen nahe.

## Eingänge und Ausgänge

Die folgende Wahrheitstabelle zeigt die Eingangswerte und Ausgangswerte eines Volladdierers:
| $x$ | $y$ | $c_{\mathrm {in} }$ | $c_{\mathrm {out} }$ | $s$ |
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 |

## Realisierungen

Daraus ergeben sich folgende Gleichungen, indem man zunächst die disjunktive Normalform aus den Wahrheitswerten der Tabelle bildet und dann vereinfacht:
    ${\begin{aligned}c_{\mathrm {out} }&=\left({\overline {x}}\wedge y\wedge c_{\mathrm {in} }\right)\vee \left(x\wedge {\overline {y}}\wedge c_{\mathrm {in} }\right)\vee \left(x\wedge y\wedge {\overline {c_{\mathrm {in} }}}\right)\vee \left(x\wedge y\wedge c_{\mathrm {in} }\right)\\&=(c_{\mathrm {in} }\wedge (x\oplus y))\vee \left(x\wedge y\right)\end{aligned}}$
und
    $s=x\oplus y\oplus c_{\mathrm {in} }$
Die linke Abbildung zeigt den Aufbau eines Volladdierers mittels Halbaddierern und einem Oder-Gatter.
Die rechte Abbildung zeigt ebenfalls den Aufbau eines Volladdierers, wobei die Halbaddierer jeweils in ein Und-Gatter und ein Exklusiv-Oder-Gatter aufgetrennt wurden. Hierbei ist zu beachten, dass in beiden Abbildungen die Summenausgänge $s$ jeweils unten und die Übertragsausgänge der Halbaddierer $c_{\mathrm {out} }$ jeweils oben dargestellt sind. Ein Halbaddierer kann auch aus 2 Invertern, 3 Und-Gattern und 1 Oder-Gatter aufgebaut werden. Für einen Volladdierer bräuchte man dann 4 Inverter, 6 Und-Gatter und 3 Oder-Gatter.
Optimiert man den Ausdruck für den Volladdierer weiter, ohne den Carry-Pfad zu verlangsamen, ergeben sich weitere Vereinfachungen:
    ${\begin{aligned}I&=x\wedge y\\J&=x\vee y\\c_{\text{out}}&=I\vee (x\wedge c_{\text{in}})\vee (y\wedge c_{\text{in}})\\c_{\text{out}}&=I\vee ((x\vee y)\wedge c_{\text{in}})\\c_{\text{out}}&=I\vee (J\wedge c_{\text{in}})\\s&=(x\wedge {\overline {c_{\text{out}}}})\vee (y\wedge {\overline {c_{\text{out}}}})\vee (c_{in}\wedge {\overline {c_{\text{out}}}})\vee (I\wedge c_{\text{in}})\\s&=((J\vee c_{\text{in}})\wedge {\overline {c_{\text{out}}}})\vee (I\wedge c_{\text{in}})\end{aligned}}$
Auf diese Weise kann ein Volladdierer mit 4 Und-Gattern, 4 Oder-Gattern und 1 Inverter realisiert werden.
Stattdessen kann ein Volladdierer auch aus 9 NAND-Gattern oder 9 NOR-Gattern aufgebaut werden.
Ein zweistufiger und damit schnellerer Volladdierer kann durch Optimierung direkt aus der Wertetafel, zum Beispiel nach dem KV-Verfahren, konstruiert werden.
Der Volladdierer wird zum Aufbau von Addierwerken und Multiplizierern verwendet, oft mit einem Halbaddierer am Anfang der Übertragkette.
Bei der Invertierung aller Eingänge eines Volladdierers invertieren sich alle Ausgänge, dies kann zur Laufzeitoptimierung von Addierwerken verwendet werden, indem auf die Invertierung von $c_{\text{out}}$ verzichtet wird.