Technische Informatik

Addiernetzwerke

Addiert zwei 4-Bit-Zahlen mit dem von-Neumann-, Parallel- oder Serienaddierer und zeigt die Bit-/Dezimal-Schritttabelle mit Übertrag/Überlauf u.

Ergebnis · von-Neumann-Addierer

9 + 6 = 15

Übertrag/Überlauf u: 0

Rechenweg

TaktuAkku (binär)Akku (dezimal)Puffer (binär)Puffer (dezimal)
000000000000
101001901106
2011111500000

Erklärung

Motivation

Ein Rechner addiert ganze Zahlen letztlich bitweise in Hardware. Schon die Addition zweier 4-Bit-Zahlen wirft die zentrale Frage der Digitaltechnik auf: Wie wird der Übertrag (engl. carry) von einer Bitstelle zur nächsten weitergereicht? Verschiedene Addiernetzwerke beantworten das mit unterschiedlichen Kompromissen zwischen Schaltungsaufwand, Anzahl der Taktzyklen und Verzögerung. Dieser Rechner stellt drei klassische Varianten gegenüber — den von-Neumann-Addierer, den Paralleladdierer und den Serienaddierer — und zeigt für jede die Bit-/Dezimal-Schritttabelle samt Übertrags-/Überlaufbit uu.

Alle drei berechnen dieselbe Summe

s=a+p,s = a + p,

mit a,p{0,,15}a, p \in \{0, \dots, 15\}. Das Ergebnis kann den 4-Bit-Bereich verlassen: Ist a+p16a + p \ge 16, so entsteht ein Überlauf, der im fünften Bit u=(a+p)/16u = \lfloor (a+p)/16 \rfloor festgehalten wird. Der Akkumulator enthält dann (a+p)mod16(a + p) \bmod 16, und der volle Wert ist u16+Akkuu \cdot 16 + \text{Akku}.

So arbeiten die drei Netzwerke

von-Neumann-Addierer

Der von-Neumann-Addierer trennt Summe ohne Übertrag und Übertrag und iteriert, bis kein Übertrag mehr übrig ist. In jedem Schritt gilt für den aktuellen Akkumulator aa und Puffer pp:

a=ap,p=(ap)1.a' = a \oplus p, \qquad p' = (a \wedge p) \ll 1.

Dabei ist \oplus das bitweise XOR (die übertragsfreie Summe) und (ap)1(a \wedge p) \ll 1 schiebt die an jeder Stelle entstandenen Überträge um eine Position nach links. Sobald ein Übertrag die Bitstelle 44 erreicht, wird das Überlaufbit gesetzt:

u  =  [(ap)1]4.u \;\mathrel{|}=\; \big[(a \wedge p) \ll 1\big]_4 .

Die Iteration endet, wenn p=0p = 0 ist (Spalte ss wird dann 00). Die Zahl der nötigen Schritte hängt davon ab, wie weit sich Überträge fortpflanzen.

Paralleladdierer

Der Paralleladdierer bildet die Summe in einem kombinatorischen Schritt (Ripple-Carry-Kette, hier als ein Takt dargestellt). Die unteren vier Bit landen im Akkumulator, das fünfte Bit ist der Übertrag heraus:

Akku=(a+p)mod16,u=a+p16.\text{Akku} = (a + p) \bmod 16, \qquad u = \left\lfloor \frac{a + p}{16} \right\rfloor .

Er braucht die wenigsten Takte, dafür die meiste Logik gleichzeitig.

Serienaddierer

Der Serienaddierer verwendet einen Volladdierer, der pro Takt ein Bit verarbeitet — von der niedrigstwertigen Stelle (LSB) aufwärts. Für die aktuellen Bits a0,p0a_0, p_0 und den Übertrag uu gilt die Volladdierer-Gleichung

s0=a0p0u,u=(a0p0)    (u(a0p0)).s_0 = a_0 \oplus p_0 \oplus u, \qquad u' = (a_0 \wedge p_0) \;\vee\; \big(u \wedge (a_0 \oplus p_0)\big).

Das Summenbit s0s_0 wird in das höchstwertige Bit des Akkumulators hineingeschoben, aa und pp werden um eine Stelle nach rechts geschoben. Nach vier Takten steht die Summe im Akkumulator und uu ist der Übertrag heraus. Der Serienaddierer braucht am wenigsten Logik, dafür vier Takte.

Durchgerechnetes Beispiel

Wir addieren a=9=10012a = 9 = 1001_2 und p=6=01102p = 6 = 0110_2 mit dem von-Neumann- Addierer — die Vorbelegung des Rechners oben.

ap=10010110=11112=15,(ap)1=(10010110)1=00001=00002=0.\begin{aligned} a \oplus p &= 1001 \oplus 0110 = 1111_2 = 15, \\ (a \wedge p) \ll 1 &= (1001 \wedge 0110) \ll 1 = 0000 \ll 1 = 0000_2 = 0. \end{aligned}

Da ap=0a \wedge p = 0 ist, gibt es keinen Übertrag: bereits nach einem Schritt ist der Puffer 00, das Überlaufbit bleibt u=0u = 0, und der Akkumulator enthält 11112=151111_2 = 15. Tatsächlich ist 9+6=15<169 + 6 = 15 < 16, passt also gerade noch in vier Bit.

Häufige Fehler

  • Akku ohne Übertrag gelesen: Der Akkumulator hält nur (a+p)mod16(a + p) \bmod 16. Bei Überlauf muss das Bit uu als 1616er-Stelle hinzugenommen werden, sonst fehlt der Übertrag im Endergebnis.
  • XOR mit Addition verwechselt: Beim von-Neumann-Schritt ist apa \oplus p die übertragsfreie Summe — nicht a+pa + p. Der Übertrag steckt separat in (ap)1(a \wedge p) \ll 1.
  • Falsche Bit-Reihenfolge beim Serienaddierer: Er beginnt beim LSB und schiebt nach rechts. Wer beim MSB anfängt, propagiert den Übertrag in die falsche Richtung.
  • Übertrag uu zwischen Takten vergessen: Beim Serienaddierer wird uu von Takt zu Takt mitgeführt; nur so entsteht eine korrekte mehrstellige Addition.