Ripple-carry-opteller versus carry-lookahead-opteller versus carry-save-opteller: vertraging, oppervlakte en toepassingen

Alle drie zijn optellers die uit volledige optellers zijn opgebouwd, maar ze behandelen carry's verschillend. Een ripple-carry-opteller schakelt volledige optellers in een keten, zodat de carry van de laagste naar de hoogste bit doorschuift, en de vertraging groeit evenredig met de bitbreedte n (O(n)). Een carry-lookahead-opteller berekent alle carry's parallel uit generate- en propagate-signalen per bit, en met een hiërarchische lookahead groeit de vertraging slechts als O(log n). Een carry-save-opteller reduceert drie getallen tot twee, een somwoord en een carrywoord, zonder carry's door te geven, dus de vertraging is die van één volledige opteller, ongeacht de breedte. Vermenigvuldigers reduceren partiële producten met bomen van carry-save-optellers (zoals Wallace-bomen) en tellen de laatste twee getallen op met een snelle opteller.

KenmerkRipple-carry-optellerCarry-lookahead-optellerCarry-save-opteller
Ingangen en uitgangenTelt twee getallen (en een carry-in) op tot één som en een carry-outTelt twee getallen (en een carry-in) op tot één som en een carry-outReduceert drie getallen tot twee, een somwoord S en een carrywoord Cy (A + B + C = S + Cy)
Behandeling van de carryElke volledige opteller wacht op de carry van de lagere bit en geeft die beurtelings naar boven doorGebruikt generate g = a·b en propagate p = a ⊕ b en werkt c(i+1) = g(i) + p(i)·c(i) uit om carry's parallel te berekenenCarry's gaan niet naar de naburige bit; ze gaan naar de volgende trap als een woord dat één bit naar links is verschoven
Groei van de vertragingO(n); in het slechtste geval loopt de carry van de laagste naar de hoogste bitO(log n) (met een hiërarchische lookahead)O(1); de vertraging van één volledige opteller, ongeacht de breedte
Cijfers voor 64 bitsDe carry gaat door 64 volledige optellersDrie niveaus van 4-bitblokken; in een Kogge-Stone-parallel-prefixopteller kost de carryberekening log₂64 = 6 trappenEén trap kost de vertraging van één volledige opteller; een Wallace-boom die 64 partiële producten tot twee reduceert, heeft 10 trappen nodig
OppervlakteHet kleinst: n volledige optellers voor n bitsGroter door de lookahead-logica; snellere ontwerpen gebruiken meer poorten en bedrading (ruwweg n log n voor Kogge-Stone)Eén trap bestaat uit n volledige optellers zonder carryketen; een volledige vermenigvuldigerboom schaalt met het aantal bits van de partiële producten (ongeveer n²)
ResultaatformaatGewoon binairGewoon binairRedundante vorm, gesplitst in een somwoord en een carrywoord; aan het eind is een gewone opteller nodig om één waarde te krijgen
Typische toepassingenKleine of zuinige schakelingen waarin snelheid niet kritisch is; in FPGA's vaak gebouwd op speciale carryketenlogicaALU's van CPU's, adresberekening, floating-point-eenheden, de laatste optelling in vermenigvuldigersReductie van partiële producten in vermenigvuldigers (Wallace- en Dadda-bomen), accumulatie in multiply-accumulate-eenheden, optellen van veel getallen
Verwante ontwerpenCarry-skip- en carry-select-optellers (qua snelheid en oppervlakte tussen beide in)Parallel-prefixoptellers (Kogge-Stone, Brent-Kung en andere)4:2-compressoren, combinatie met het algoritme van Booth om partiële producten te verminderen

De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.

Wanneer welke variant?

Ripple-carry-opteller
Gebruik hem bij kleine breedtes, of wanneer oppervlakte en vermogen belangrijker zijn dan snelheid. Zijn eenvoudige, regelmatige structuur past efficiënt op componenten met speciale snelle carrypaden, zoals FPGA's.
Carry-lookahead-opteller
Gebruik hem wanneer één optelling van twee operanden snel klaar moet zijn, zoals in ALU's van CPU's en optellers op het kritieke pad. De hiërarchie en de keuze van de parallel-prefixstructuur wegen het aantal trappen af tegen oppervlakte en bedrading.
Carry-save-opteller
Gebruik hem bij het optellen van drie of meer getallen. Hij vermindert het aantal getallen zonder op carry's te wachten en doet één laatste optelling met een carry-lookahead- of vergelijkbare opteller, dus hij loont in vermenigvuldigers die veel partiële producten optellen en in MAC-eenheden die herhaaldelijk accumuleren.

Veelgestelde vragen

Hoe groot is het verschil tussen O(n) en O(log n) in de praktijk?

Bij 64 bits gaat de carry van een ripple-carry-opteller door 64 volledige optellers, terwijl een Kogge-Stone-parallel-prefixopteller de carry's in log₂64 = 6 trappen berekent. De vertraging per trap verschilt tussen schakelingen, dus dit is geen eenvoudige verhouding, maar het verschil wordt groter naarmate de breedte groeit, en een ripple-carry-opteller is te traag voor 64-bitoptelling in een processor in de GHz-klasse.

Hoe kan de carry-save-opteller met getallen worden gecontroleerd?

Voer de 4-bitwaarden 5 (0101), 6 (0110) en 7 (0111) in. Het woord S uit de som van elke bit is 0100 (4), en het woord Cy uit de carry van elke bit, één bit naar links verschoven, is 1110 (14). 4 + 14 = 18, gelijk aan 5 + 6 + 7. Elke bit is een onafhankelijke volledige opteller, dus niets wacht op een carry.

Hoe wordt het aantal trappen van een Wallace-boom bepaald?

Elke trap van carry-save-optellers maakt van drie getallen er twee, dus het aantal krimpt per trap tot ongeveer twee derde. Met h partiële producten laat één trap 2⌊h/3⌋ + (h mod 3) over; 8 hebben 4 trappen nodig, 16 hebben er 6 nodig, 32 hebben er 8 nodig en 64 hebben er 10 nodig om op twee uit te komen. Het aantal trappen groeit ruwweg met de logaritme van de breedte, en het optellen van de laatste twee getallen met een snelle opteller voltooit het product.

Waarom wordt de volledig uitgeschreven carry-lookahead-vergelijking niet direct gebruikt voor brede optellers?

Het volledig uitwerken van de carryvergelijkingen voegt voor elke hogere bit meer termen toe en vraagt al snel poorten met te veel ingangen. In plaats daarvan maken groepen van ongeveer 4 bits een groeps-generate G en een groeps-propagate P, en het volgende niveau past dezelfde lookahead-logica daarop toe. Parallel-prefixoptellers veralgemenen dit idee.

Test uw begrip

Welk nadeel van de ripple-carry-opteller, waarin volledige optellers in serie zijn geschakeld, is juist?

  1. ANegatieve getallen kunnen niet worden verwerkt
  2. BDoordat de carry van laag naar hoog achter elkaar doorloopt, neemt de vertraging evenredig met het aantal bits toe
  3. CDe schakelingsgrootte verandert niet als het aantal bits toeneemt
Antwoord en toelichting tonen

Antwoord: B. Doordat de carry van laag naar hoog achter elkaar doorloopt, neemt de vertraging evenredig met het aantal bits toe

Bij een ripple-carry-opteller wacht elke volledige opteller op de carry van de lagere positie, dus de carry loopt achter elkaar van de laagste naar de hoogste positie en de vertraging neemt evenredig met het aantal bits toe. Bij 64 bits is dat de vertraging van 64 volledige optellers, te traag voor een CPU die op GHz werkt. Het circuit is klein en eenvoudig en wordt gebruikt waar snelheid er niet toe doet. Voor hogere snelheid worden carry-lookahead-, carry-select- en parallel-prefix-optellers (zoals Kogge-Stone) gebruikt.

Wat is de juiste reden dat een carry-lookahead-opteller snel is?

  1. AOmdat het aantal bits van de optelling kleiner wordt
  2. BOm de klokfrequentie te verdubbelen
  3. COmdat de carry van elk bit parallel uit de ingangen wordt berekend zonder te wachten op doorgifte van lagere posities
Antwoord en toelichting tonen

Antwoord: C. Omdat de carry van elk bit parallel uit de ingangen wordt berekend zonder te wachten op doorgifte van lagere posities

Een carry-lookahead-opteller gebruikt per bit generate G = A·B (geeft altijd een carry) en propagate P = A⊕B (geeft de carry van de lagere positie door), en berekent de carry van elke positie parallel uit de ingangen, zoals C1 = G0 + P0·C0 en C2 = G1 + P1·G0 + P1·P0·C0 … De vertraging neemt dan alleen evenredig met de logaritme van het aantal bits toe. Omdat de uitdrukkingen lang worden, worden blokken van ongeveer 4 bits hiërarchisch gecombineerd.

Welke combinatie van de definities van het generatiesignaal g en het propagatiesignaal p per bitpositie (a en b zijn de ingangen van die positie) en de formule voor de overdracht c(i+1) naar het hogere bit, zoals gebruikt in een carry-lookahead-opteller, is juist?

  1. Ag = a + b, p = a·b, c(i+1) = p + g·c(i)
  2. Bg = a·b, p = a ⊕ b, c(i+1) = g + p·c(i)
  3. Cg = a ⊕ b, p = a·b, c(i+1) = g·p·c(i)
Antwoord en toelichting tonen

Antwoord: B. g = a·b, p = a ⊕ b, c(i+1) = g + p·c(i)

Als a en b op die positie beide 1 zijn, ontstaat altijd een overdracht, ongeacht de overdracht van onderaf, dus het generatiesignaal is g = a·b. Als slechts één van a en b 1 is, wordt de overdracht van onderaf ongewijzigd doorgegeven, dus het propagatiesignaal is p = a ⊕ b (soms wordt OR gebruikt). Hieruit volgt c(i+1) = g(i) + p(i)·c(i); wordt dit uitgewerkt, dan kunnen de overdrachten van alle posities parallel in twee logische niveaus worden bepaald uit uitsluitend de g en p van de ingangen en de laagste overdracht. Formules waarin generatie en propagatie zijn verwisseld, rekenen niet juist.

  1. Wat is de belangrijkste reden dat een carry-save-opteller wordt gebruikt om veel partiële producten in een vermenigvuldiger op te tellen?
  2. Welke uitspraak over de Wallace-boom, die in snelle vermenigvuldigers wordt gebruikt, is juist?
  3. Welke combinatie van ingangen van een volledige opteller is juist?

Oefenvragen over Computerarithmetiek

Belangrijke termen uitgelegd

Volledige opteller (full adder)
Schakeling die drie ingangen optelt (twee bits en de carry van de lagere positie) en een som en een carry naar de hogere positie levert. Een variant zonder carry-ingang is een halve opteller. In serie geschakeld vormen ze een opteller voor meerdere bits.
Carry-lookahead-opteller
Opteller die de overdracht (carry) parallel bepaalt uit het generatiesignaal g = a·b en het propagatiesignaal p = a ⊕ b van elke positie, zonder te wachten op doorgifte van lagere posities. De vertraging blijft klein, ook bij veel bits.
Carry-save-opteller (CSA)
Opteller die drie getallen zonder carry-doorgifte samenvat tot twee getallen, een 'som' en een 'carry'. Het is simpelweg een rij volledige optellers per cijfer, dus de vertraging is constant; gebruikt in vermenigvuldigers om veel partiële producten op te tellen.
Wallace-tree
Opzet in een vermenigvuldiger waarbij veel partiële producten parallel worden gereduceerd met een boom van carry-save-optellers. Het aantal trappen is ongeveer logaritmisch in het aantal bits, dus wordt het gebruikt voor snelle vermenigvuldigers. Ten slotte worden twee getallen met een gewone opteller opgeteld.
Booth-algoritme
Vermenigvuldigingsmethode waarbij de bitreeks van de vermenigvuldiger in groepjes van bijvoorbeeld 2 bits wordt verdeeld en door cijfers met teken wordt vervangen, om het aantal partiële producten te verminderen. Bij radix-4-Booth wordt het aantal partiële producten ongeveer gehalveerd.
Kritiek pad
Pad met de grootste vertraging in een schakeling, dat de maximale klokfrequentie bepaalt. In STA is het het pad met de kleinste slack, en een ontwerp versnellen begint met het verkleinen van de vertraging ervan.

Verwante vergelijkingen