Arithmetik-Schaltungen: Addierer und Multiplizierer

Abschnittsübersicht

1. Der Volladdierer als Grundbaustein

Der einfachste arithmetische Baustein ist der Halbaddierer, der zwei einzelne Bits addiert und dabei eine Summe (XOR der Eingänge) und einen Übertrag (AND der Eingänge) liefert. Da beim Verketten mehrerer Bitstellen jedoch auch ein Übertrag aus der vorherigen Stelle berücksichtigt werden muss, verwendet man in der Praxis den Volladdierer, der drei Eingänge (die beiden zu addierenden Bits A und B sowie den Übertrag Cin aus der vorherigen Stelle) zu einer Summe und einem Übertrag Cout verrechnet. Ein Volladdierer lässt sich aus zwei Halbaddierern und einem zusätzlichen OR-Gatter aufbauen und benötigt in einer typischen CMOS-Standardzelle etwa 20 bis 28 Transistoren.

Die Boolesche Gleichung Cout = (A AND B) OR (Cin AND (A XOR B)) lässt sich anschaulich als Mehrheitsentscheid lesen: Cout wird genau dann 1, wenn mindestens zwei der drei Eingänge (A, B, Cin) auf 1 liegen – ganz unabhängig davon, welche zwei das sind. Bei A=1, B=1, Cin=0 etwa liefert bereits A AND B den Übertrag; bei A=1, B=0, Cin=1 sind A und B unterschiedlich (A XOR B = 1), und Cin AND (A XOR B) liefert ihn stattdessen. Die Summe dagegen ist 1, wenn eine ungerade Anzahl der drei Eingänge 1 ist (1 oder 3 von 3) – exakt das Verhalten einer dreifachen XOR-Verknüpfung.

Volladdierer aus zwei Halbaddierern

Reiht man mehrere Volladdierer aneinander, wobei der Übertragsausgang jeder Stelle zum Übertragseingang der nächsthöheren Stelle wird, entsteht der einfachste Mehrbit-Addierer: der Carry-Ripple-Addierer.

2. Carry-Ripple- vs. Carry-Lookahead-Addierer

Beim Carry-Ripple-Addierer muss der Übertrag nacheinander durch alle Bitstellen "durchsickern" (daher der Name), bevor das Endergebnis feststeht. Ein konkretes Beispiel verdeutlicht das: Bei der 4-Bit-Addition 0111 + 0001 entsteht an Stelle 0 zunächst Cout,0=1 (da A0=B0=1); dieser Übertrag muss an Stelle 1 ankommen, bevor dort Sum1 und Cout,1 feststehen, dieser wiederum an Stelle 2, und so weiter – erst wenn der Übertrag alle vier Stufen durchlaufen hat, liegt das korrekte Endergebnis 1000 vollständig an. Bei einem 32-Bit-Addierer durchläuft das Übertragssignal im ungünstigsten Fall alle 32 Volladdiererstufen nacheinander, wodurch die Verzögerung linear mit der Bitbreite wächst.

Verzögerung: Carry-Ripple vs. Carry-Lookahead

Der Carry-Lookahead-Addierer löst dieses Problem, indem er für jede Bitstelle i im Voraus zwei Hilfssignale berechnet: Generate Gi = Ai AND Bi (an dieser Stelle entsteht immer ein Übertrag, unabhängig vom Eingangsübertrag) und Propagate Pi = Ai XOR Bi (ein eingehender Übertrag würde durchgereicht). Daraus lässt sich jeder Übertrag direkt als Summe von Produkttermen ausdrücken, etwa C1 = G0 + P0C0, C2 = G1 + P1G0 + P1P0C0, C3 = G2 + P2G1 + P2P1G0 + P2P1P0C0 – jeder Übertrag hängt also nur noch von den Eingangsbits selbst ab, nicht mehr vom sequenziell berechneten Vorgänger-Übertrag, und lässt sich mit einer festen, kleinen Gatterlaufzeit parallel für alle Stellen berechnen. Da die Anzahl der UND-Eingänge (Fan-in) mit jeder weiteren Bitstelle wächst, werden reale Lookahead-Addierer meist in Blöcken von 4 Bit aufgebaut und die Blocküberträge auf einer zweiten Lookahead-Ebene kombiniert, um den Fan-in begrenzt zu halten – ein Kompromiss, der die logarithmische statt konstante Verzögerung erklärt, aber auf Kosten eines deutlich höheren Flächen- und Verdrahtungsaufwands, wie er in vielen Bereichen des digitalen Schaltungsentwurfs auftritt.

Kapitel weiterlesen

Die weiteren Abschnitte dieses Kapitels sind Teil der einmaligen Freischaltung. Du erhältst Zugang zu allen Wissenskapiteln und sämtlichen PDF-Downloads.

1,99 € einmalig · kein Abo

Alle Inhalte freischalten

Bereits gekauft? Zugang wiederherstellen