Ein System von Ripple-Carry-Addierern ist eine Folge von Standard-Volladdierern, die es ermöglicht, Zahlen hinzuzufügen, die mehr Bits enthalten als die eines einzelnen Volladdierers. Jeder Volladdierer hat ein Übertrags- (Cin) und ein Übertragsbit (Cout), und die Addierer werden verbunden, indem Cout in Schritt k mit Cin in Schritt k + 1 verbunden wird (Cin in Schritt 0 ist C0 im Bild, Cout in Schritt 3) ist C4 im Bild)
Die Herausforderung bei Ripple-Carry-Addierern ist die Laufzeitverzögerung der Carry-Bits. Angenommen, die Werte von A und B ändern sich augenblicklich so, dass
A1 = 0
B1 = 1
A0 = 1
B0 = 1
Da A0 und B0 hoch sind, erzeugt der erste Volladdierer einen Übertrag, dh C1 = 1. Es dauert jedoch einige Zeit, bis sich die Logik beruhigt hat, sodass sich C1 erst kurz nach dem Wechsel von A1 und B1 ändert. Bevor C1 auftaucht, erzeugt der zweite Volladdierer keinen Übertrag, aber wenn C1 erscheint, berechnet der zweite Addierer neu und erzeugt einen Übertrag, dh C2 = 1. Im schlimmsten Fall wird C4 erst 4 korrekt berechnet * Ausbreitungsverzögerung, und Cn wird erst mit n * Ausbreitungsverzögerung berechnet.
Ein Carry-Lookahead-Addierersystem löst dieses Problem, indem berechnet wird, ob ein Carry generiert wird, bevor die Summe tatsächlich berechnet wird. Es gibt mehrere Schemata, um dies zu tun, so dass es keine "eine" Schaltung gibt, die einen Vorausschau-Addierer darstellt. Die Idee ist ungefähr so:
Die Berechnung von C4 ist nicht schneller als im obigen Ripple-Carry, ebenso wenig wie PG und GG - die Magie tritt nur auf, wenn Sie mehrere dieser Blöcke zusammenfügen, um noch größere Zahlen hinzuzufügen.
Der wichtige Teil des Bildes ist, dass der lila Block drei Werte erzeugt: C4, PG (Propagate) und GG (Generate). PG geht hoch, wenn dieser Block Cin an Cout weitergibt, und GG geht hoch, wenn der Block unabhängig von Cin einen Überlauf erzeugt. (Außerdem darf der Block weder übertragen noch einen Übertrag erzeugen. In diesem Fall sind sowohl PG als auch GG niedrig und Cout ist 0.) PG und GG können im violetten Block unabhängig vom Wert von C0 berechnet werden - also wenn C0 Wenn der lila Block schließlich eintrifft, kann er einfach sein zuvor berechnetes Ergebnis abrufen. Wenn das Ergebnis eine "Ausbreitung" ist, wird C0 direkt an C4 weitergegeben. Dies ist viermal schneller als die Ausbreitung durch alle vier Volladdierer.
Der Grund, warum der Block die Ausgänge PG und GG hat, ist, dass wir auf hierarchische Weise noch größere Ausbreitungsbeschleunigungen erzielen können.
Siehe auch: http://faculty.kfupm.edu.sa/COE/abouh/Lesson3_3.pdf