Was sind Carry-Lookahead-Addierer und Ripple-Carry-Addierer?

8

Ich sehe, dass häufig Carry-Lookahead-Addierer und Ripple-Carry-Addierer verwendet werden. Ich habe keine Ahnung, was das bedeutet (und welche Art von Architektur sie beschreiben).

Kann jemand bitte erklären, was jeder ist, warum einer schneller sein kann als der andere und wofür jeder verwendet wird?

Gibt es auch externe Quellen, die in dieser Angelegenheit hilfreich sein könnten?

Bob John
quelle
Verwenden Sie den üblichen Bleistift-Papier-Ansatz, um 1 zum Wert 9999 hinzuzufügen. Das ist ein Wellenschlag.
Pete Becker

Antworten:

7

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)

Ripple-Carry-Addierer - Bild aus Wikipedia

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:

Look-Ahead-Addierer

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

tor
quelle
Der eine Punkt, der zu dieser hervorragenden Antwort hinzugefügt werden sollte, ist, dass Xilinx und wahrscheinlich andere, wenn Sie sich zwischen Addiererarchitekturen für ein FPGA-Projekt entscheiden, eine dedizierte Fast-Carry-Logik für den Ripple-Carry-Addierer verwenden, sodass für die meisten FPGA-Designs der einfachere Ripple-Carry-Addierer ist praktisch so schnell wie der Carry Lookahead.
Brian Drummond
Was die einzelnen Funktionen betrifft, verwendet der Ripple-Carry weniger Logik (Fläche, dynamische und statische Leistung) und kann daher bevorzugt werden, wenn er schnell genug ist (Cortex-M0?). Die schnelle Addierer-Beschleunigung nimmt mit der Bitanzahl zu, so dass ein breiterer Addierer solche Beschleunigungstechniken attraktiver macht. Wie üblich ist Wikipedia eine anständige Quelle: en.wikipedia.org/wiki/Carry-lookahead_adder
Paul A. Clayton