Adderare
En adderare Àr en grundlÀggande digital komponent för berÀkningar i digitala konstruktioner. I en dator sitter adderarna i ALU:n. En en-bits-adderare utan minnessiffra bestÄr bara av endast en xor-grind.

Det finns olika typer av adderare:
- Halvadderare - tar inte hÀnsyn till ingÄende minnessiffra, har tvÄ utgÄngar:
en minnessiffra, en summa. Kan realiseras med hjÀlp av en AND-grind (minnessiffran) och en XOR-grind.
- Heladderare - tar hÀnsyn till ingÄende minnessiffra och kan realiseras med hjÀlp av tvÄ halvadderare och en OR-grind.
Halvadderare
[redigera | redigera wikitext]En halvadderare (eng. half adder) Àr en digital krets som utför en addition av tvÄ binÀra siffror (bitar). Halvadderaren skiljer sig frÄn heladderaren i att halvadderaren inte har nÄgon ingÄng för en möjlig minnessiffra.
Logisk funktion
[redigera | redigera wikitext]
Halvadderaren har tvÄ ingÄngar, bit A och bit B, samt en bit för summan S och en bit för minnessiffran frÄn additionen, C (frÄn eng. carry).
Summabiten bestÀms genom XOR-funktionen medan carrybiten bestÀms genom AND-funktionen. FunktionsvÀrdena illustreras i tabellen nedan.
| IngÄng | UtgÄng | ||
|---|---|---|---|
| A | B | C | S |
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |
Ifall bÄda in-bitarna Àr 0, blir bÄde summan och minnessiffran 0. DÄ endast en av bitarna Àr 1, blir summan 1 och minnessiffran 0. Om bÄda in-bitarna Àr 1, blir summan 0 och minnessiffran 1. Situationen dÀr bÄda in-bitarna Àr 1 kan jÀmföras med en addition i talsystemet med basen 10, dÀr summan blir större Àn 10 och en minnessiffra tas i bruk.
Heladderare
[redigera | redigera wikitext]
En heladderare (kort FA, frÄn engelska Full Adder) Àr en digital komponent för addition av tvÄ (egentligen tre) bitar. Eftersom den Àr en digital komponent kan den bara arbeta med de diskreta vÀrdena 1 och 0. Heladderaren tar tre insignaler x, y och cin (carry in), som den adderar, och lÀmnar tvÄ utsignaler s ((entals)summan) och cout (carry out, minnessiffra (som Àr 2-vÀrd)).
Heladderaren kan kopplas ensam eller i kedja av flera adderare för att kunna addera tvÄ binÀra tal som bestÄr av fler Àn 1 bitar vardera. För att addera tvÄ tal med n stycken bitar, krÀvs n stycken heladderare. DÄ anvÀnds cin och cout för att hÄlla koll pÄ minnessiffrorna.
Logisk funktion
[redigera | redigera wikitext]Funktionstabell:
| in | ut | ||||
|---|---|---|---|---|---|
| x | y | cin | s | cout | |
| 0 | 0 | 0 | 0 | 0 | |
| 0 | 0 | 1 | 1 | 0 | |
| 0 | 1 | 0 | 1 | 0 | |
| 0 | 1 | 1 | 0 | 1 | |
| 1 | 0 | 0 | 1 | 0 | |
| 1 | 0 | 1 | 0 | 1 | |
| 1 | 1 | 0 | 0 | 1 | |
| 1 | 1 | 1 | 1 | 1 | |
Funktionen hos en heladderare kan beskrivas med funktionstabell (till höger) eller med de logiska uttrycken för utsignalerna:
Heladderare anvÀnds ofta för att addera tvÄ tal, lÀngre Àn en 1 bit vardera. För att addera talen X = <x1, x2, x3, ... , xn> och Y = <y1, y2, y3, ... , yn> behövs n stycken heladderare (FA1, FA2, FA3, ... , FAn), kopplade i en kedja.
Ripple-Carry-adderare
[redigera | redigera wikitext]För att addera stora tal mÄste lika mÄnga heladderare som talens lÀngd i bitar, kopplas i kedja. En minnessiffra mÄste dÄ rippla genom varje heladderare i tur och ordning. Eftersom kretsen Àr parallell betyder det att summorna för varje adderare förÀndras hela tiden. En tidsperiod mÄste dÀrför passera innan totalsumman kan kontrolleras.
Denna typ av adderare benÀmns Ripple-Carry-adderare.

Fördröjning
[redigera | redigera wikitext]X och Y kommer in parallellt (samtidigt) till kedjan av heladderare pÄ sÄ sÀtt att xi och yi kopplas till ingÄngarna x och y pÄ FAi. De ligger alltsÄ dÀr och vÀntar pÄ att carry-in ska sÀttas. NÀr carry-in har satts mÄste signalerna igenom tvÄ stycken grindar, man sÀger att heladderaren har grinddjup tvÄ.
Om det tar 5 ms för en signal att gÄ genom en grind, kommer det ta 5 ms * 2 * n för n stycken heladderare att berÀkna summan av tvÄ n-bitars tal. Detta Àr ofta för lÄngsamt för lÀngre tal, och dÀrför finns det tekniker för att snabba upp utrÀkningen.
Carry-Look-Ahead-adderare
[redigera | redigera wikitext]För att addera lÄnga tal utan att varje berÀkning mÄste utföras i sekvens anvÀnds ofta Carry-Look-Ahead-adderare. I denna berÀknar varje adderare om den ska emittera tvÄ signaler eller inte: Propagate-signalen, om en carrybit kommer in pÄ ingÄngen, kommer adderaren att skicka en carry-bit till nÀsta adderare. Den propagerar alltsÄ vidare en eventuellt inkommande carrybit. Detta realiseras med en XOR-grind mellan de tvÄ ingÄngarna.
Generate-signalen, om denna aktiveras kommer adderaren att skicka en carry-bit. Detta realiseras med en AND-grind.
Alla Propagate och Generate signalerna gÄr in i en carry-accelerator, som egentligen bara bestÄr av ett antal AND-grindar, dessa skickar tillbaka en carry-bit till varje adderare dÀr acceleratorn berÀknat att carry-biten ska gÄ hög. Detta sker parallellt och ökar hastigheten rejÀlt pÄ adderarkonstruktionen.
DubbelberÀkning
[redigera | redigera wikitext]En annan teknik för att berÀkna en addition snabbare Àr att man delar upp heladderarkedjan i tvÄ delar (förslagvis lika stora delar). Sedan börjar man addera bÄda delarna var för sig samtidigt. Den första och mindre signifikanta halva berÀknas som vanligt, men den andra halvan berÀknas bÄde som om carry-in vore 1 och som om den vore 0. PÄ detta sÀtt har man tvÄ versioner av halva utrÀkningen klar samtidigt som den första halvan av utrÀkningen Àr klar. DÄ kan man med hjÀlp av den Carry-out vÀlja vilken av de andra utrÀkningarna som ska anvÀndas, och vilken som var felaktig och ska kastas.