# Adder (elektronica)

In elektronica is een adder een logische schakeling die getallen in binaire vorm kan optellen. Bij computers worden berekeningen gedaan met een Aritmische Logische Eenheid (ALU) in de processor. Deze eenheid bevat een of meer adders.
Voor 1-bit adders zijn er twee types, een half-adder en een full-adder. Een half-adder heeft twee ingangen en twee uitgangen. De uitgang van een half-adder is de aritmetische som van twee 1-bit ingangen waarbij uitgang C de meest significante bit is. Het andere type adder is de full-adder. Deze heeft dezelfde werking als een half-adder maar heeft een extra ingang.

## Half-adders

Een half-adder wordt meestal voorgesteld door een blok met twee ingangen (A en B) en twee uitgangen (C en S). Hierbij zijn zowel A als B 1-bit groot. De uitgangen S en C zijn de aritmetische som van de twee ingangen waarbij C (=Carry) de meest significante bit is.
Aan de hand van de waarheidstabel van de half-adder kan er een logische schakeling worden gemaakt die dezelfde werking heeft als die van een half-adder.
    A B S = A ⊕ B Carry = AB 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1
Uitgang S is enkel 1 wanneer de ingangen A en B niet aan elkaar gelijk zijn. S kan hierdoor uitgedrukt worden als een exclusieve OF-poort(XOF). Uitgang C is enkel 1 wanneer beide ingangen 1 zijn en kan dus uitgedrukt worden als een logische EN-poort.

## Full-adders

Een full-adder heeft dezelfde werking als een half-adder maar heeft buiten ingangen A en B ook nog een Carry ingang. De uitgang hangt dus af van de ingangen A, B en C$_i$(Carry in).
De waarheidstabel van de full-adder is groter dan die van een half-adder. Dit komt door de extra ingang C$_i$.
    Ci A B S = A ⊕ B ⊕ Ci Carry = AB + (A ⊕ B)Ci 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
Het voordeel van een full-adder ten opzichte van een half-adder is dat de full-adder een extra ingang heeft die gebruikt wordt als “Carry in”. Dit maakt het mogelijk meerdere full-adders parallel te plaatsen om zo grotere getallen te kunnen optellen.

## Parallelle-adder

Een full-adder maakt het mogelijk twee 1-bit getallen en een Carry-ingang op te tellen. Om binaire getallen op te tellen groter dan 1 bit kan gebruik worden gemaakt van meerdere full-adders in serie.
Wanneer twee binaire getallen worden opgeteld, genereert elke kolom een som-bit en een Carry-bit, waarbij de Carry-bit naar de volgende kolom wordt geschoven.
    ${\begin{aligned}&&&&&\color {red}{1}&&\color {blue}{1}\\&{+}&&{\ }_{\color {red}{1}}&&\color {red}{0}\color {blue}{_{1}}&&\color {blue}{1}\\\hline &&&{1}&&{0}&&{0}\end{aligned}}$
    $_1$ = Carry van rechtse kolom
Als we deze techniek willen toepassen bij full-adders moet elke Carry verbonden worden met de C$_i$ van volgende full-adder. Op deze manier kunnen er meerdere bit getallen met elkaar worden opgeteld.
Voorbeeld:

## Look-ahead adder

Het grote nadeel van de parallelle adder is de snelheid waarmee deze een optelling volledig kan berekenen. Vooraleer full-adder 2 bij de parallelle adders een betrouwbare waarde kan krijgen moet de Carry-uitgang van de eerste full-adder berekend worden en dit geldt zo voor elke full-adder die gebruikt wordt tijdens de optelling.
Een methode om deze vertraging te reduceren is door gebruik te maken van de look-ahead-opstelling. De look-ahead-adder anticipeert de Carry-uitgang van elke vorige full-adder en produceert aan de hand van zijn ingangen een Carry-generatie(C$_g$) en een Carry-propagatie(C$_p$).
Carry-generatie gebeurt wanneer een Carry-uitgang wordt geproduceerd door de full-adder. Er wordt dus enkel een Carry gegenereerd wanneer beide ingangen van de full-adder 1 zijn.
    $Cg=AB$
Carry-propagatie gebeurt wanneer de Carry-ingang wordt doorgeschoven naar de Carry-uitgang. Een Carry-ingang wordt doorgeschoven wanneer minstens een van de twee ingangen, A of B, hoog is.
    $Cp=A+B$
De uitgang van een full-adder kan met behulp van deze formules gevormd worden met enkel C$_g$ en C$_p$. De Carry-uitgang(C$_{uit}$) is hoog als C$_g$ 1 is of wanneer C$_p$ en C$_{in}$ 1 zijn. Met andere woorden de Carry-uitgang is hoog als het gegenereerd wordt door de full-adder (A = 1 en B = 1) of wanneer de full-adder de Carry ingang-propageert (A = 1 of B = 1) en (C$_{in}$ = 1).
    $C_{uit}=C_{g}+C_{p}C_{in}$
Als deze formules worden toegepast op de parallelle adder stellen we vast dat de Carry-uitgang van elke full-adder afhangt van C$_p$, C$_g$ en C$_{in}$ waarbij C$_p$ en C$_g$ direct berekend kunnen worden aan de hand van de ingangen. De Carry-ingang van elke full-adder is de uitgang van zijn vorige full-adder.
Met deze formules kan C$_{uit}$ van elke full-adder uitgedrukt worden als een combinatie van enkel C$_p$, C$_g$ en C$_{in1}$.
Nu de formules volledig zijn afgeleid en uitgewerkt blijkt dat we de uitgang van elke adder kunnen schrijven door middel van C$_p$, C$_g$ en C$_{in1}$. Hierdoor moet er dus niet meer gewacht worden tot de Carry volledig door heel de schakeling is gegaan om een correct resultaat te krijgen aan de uitgang. C$_g$ en C$_p$ van elke full-adder kan onmiddellijk berekend worden (met enige vertraging van de adder zelf) doordat deze enkel afhangen van de ingangen A en B. Volgens de formules kan een logische schakeling worden gemaakt van de look-ahead -adder.