Összeadó (elektronika)

A Wikipédiából, a szabad enciklopédiából

Az elektronikában az összeadó (adder, summer) egy olyan digitális áramkör, ami számok összegzésére szolgál. Modern számítógépekben az összeadók az aritmetikai logikai egységben (ALU) találhatóak, ahol a többi operáció is végrehajtódik. Bár összeadókat építhetnek több számábrázolási formához, mint például a binárisan kódolt decimális (BCD, excess-3), de a legközönségesebb összeadók bináris számokkal dolgoznak. Azokban az esetekben, amikor kettes komplemenst használnak negatív számok ábrázolására, jelentéktelen módosítani egy összeadót összeadó-kivonóvá (adder-subtracter).

Összeadótípusok[szerkesztés | forrásszöveg szerkesztése]

Az egyszerű bit összeadóknak két alapvető típusa van.

Egy félösszeadónak (half adder) két bemenete van, amit általában A-nak és B-nek címkéznek, illetve két kimenete az összeg S (sum) és az átvitel C (carry). S az A és B bitek összege (kizáró-vagy = XOR), illetve C A-nak és B-nek konjunkciója (AND). Lényegében egy félösszeadó kimenetei két egy bites szám összege és átvitele, ami a nagyobb jelentőségű lesz a két kimenet közül.

A másik egyszerű bit összeadó a teljes összeadó (full adder). A teljes összeadó számításba vesz egy átvitel bemenetet, úgy mint többszörös összeadó nagyobb számok összegzéséhez is használható. A bemeneti és kimeneti átvitel szállak közti kétértelműség elkerülése végett, a bemenet Ci-nek vagy Cin-nek van címkézve, míg a kimenet Co vagy Cout-ként címkézett.

Félösszeadó[szerkesztés | forrásszöveg szerkesztése]

Félösszeadó áramkör ábrája

A félösszeadó egy logikai áramkör, ami összeadás műveletet valósít meg két bináris számjegy között. A félösszeadó egy összeg és egy átvitel értéket szolgáltat, melyek mind bináris számjegyek.

S = A \oplus B
C = A \cdot B

A félösszeadó logikai táblázata a következő:

Bemenet Kimenet
A B C S
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0

Teljes összeadó[szerkesztés | forrásszöveg szerkesztése]

Teljes összeadó áramkör ábrája
Bemenetek: {A, B, CarryIn} → Kimenetek: {Sum, CarryOut}
Sematikus jelölése az 1 bites teljes összeadónak

A teljes összeadó egy logikai áramkör, ami összeadás műveletet valósít meg három bináris számjegy között. A teljes összeadó egy összeg és egy átvitel értéket szolgáltat, melyek mind bináris számjegyek. Kombinálható más teljes összeadókkal (lásd lejjebb) vagy egymaga is dolgozhat.

S = (A \oplus B) \oplus C_i
C_o = (A \cdot B) + (C_i \cdot (A \oplus B)) = (A \cdot B) + (B \cdot C_i) + (C_i \cdot A)
Bemenet Kimenet
A B C_i C_o S
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1

A VAGY kapu a Cout kimenet előtt lecserélhető egy KIZÁRÓ-VAGY kapuval, anélkül, hogy az az eredményt megváltoztatná. Ez azért van, mert az egyetlen különbség a VAGY (OR) és a KIZÁRÓ-VAGY (XOR) kapuk között akkor lép fel, ha mindkét bemenet 1; az itt bemutatott összeadónál ez sohasem lehetséges. Két féle kapu használata alkalmazható, ha az összeadót közvetlen szeretnénk implementálni egy közönséges IC (integrált áramkör) chipbe.

Egy teljes összeadót létrehozhatunk két félösszeadóból, az "A"-t és "B"-t csatlakoztatva egy félösszeadó bemenetéhez, csatlakoztatva az összeget ebből a második összeadó egy bemenetéhez, csatlakoztatva Cin-t a másik bemenethez és a két átvitel kimenet logikai diszjunkcióját elvégezve. A kimenete a teljes összeadónak a két bitnyi aritmetikai összege három egy bites számnak.

Többszörös-bit összeadók[szerkesztés | forrásszöveg szerkesztése]

Ripple carry összeadó[szerkesztés | forrásszöveg szerkesztése]

Amikor több teljes összeadót használnak átvitel bemeneteikkel és kimeneteikkel összeláncolva, ezt nevezik ripple carry összeadónak, magyarul átvitel továbbterjesztő összeadónak. Az angol nyelvű kifejezés arra utal, hogy az egyik átvitel bit értéke hullámzóan (ripple: fodrozódik) tevődik (carry: szállít) át a következő bitre.

Több teljes összeadót felhasználva létrehozható olyan logikai áramkör, ami alkalmas több bites számok összeadására. Minden egyes összeadó átvitel bemenete (C_{in}), az előző összeadó átvitel kimenete (C_{out}). Ez az összeadó típus a ripple carry adder, mivel minden egyes átvitel bit az egyik teljes összeadótól a másikig "hullámzik". Vedd figyelembe, hogy az első (és csak is az első) teljes összeadó pótolható fél összeadóval.

4 bites ripple carry összeadó áramkör ábrája

A ripple carry adder szerkezete egyszerű,eltekintve a gyors tervezési időtől, a ripple carry adder relatív lassú. Mivel minden egyes teljes összeadónak az átvitel bitre kell várnia melyet az előző számít ki. A kapukésedelmet könnyen kiszámíthatjuk a teljes összeadó áramkör vizsgálatával. Követve az utat C_{in}-ből C_{out}-ba 2 kaput számíthatunk, amin át kell utazni. Ergo, egy 32 bites összeadó 31 átvitel számítást és egy végső összeg számítást igényel, ami összesen 31*2 + 1 = 63 kapukésedelmet (gate delay) jelent.

Carry look-ahead összeadók[szerkesztés | forrásszöveg szerkesztése]

Hogy csökkentsék a számítási időt, a mérnökök gyorsabb módokat kerestek két bináris szám összeadására carry look-ahead összeadók használatával. Továbbadó (Propagate, "P") és generáló (Generate, "G") jeleket hoztak létre minden bit pozícióra, ami azon alapult, hogy ha egy átvitel továbbítódik át egy kevésbé jelentős bitpozícióból (legalább egy bemenet '1'),akkor átvitel generálódik ebben a bitpozícióban (mindkét bemenet '1'), vagy akkor egy átvitel megszűnik ebben a bitpozícióban (mindkét bemenet '0'). A legtöbb esetben, "P" egyszerűen az összeg kimenete egy félösszeadónak és "G" az átvitel kimenete ugyanennek az összeadónak. Miután "P" és "G" legyártotta az átviteleket minden létrejött bitpozíciónak. Néhány fejlettebb carry lookahead architektúra a Manchester átvitel lánc és a Brent-Kung összeadó.

4 bites Carry Look Ahead összeadó

Néhány más több bites összeadó architektúra blokkokra töri az összeadót. Lehetséges az áramkörök propagáció késedelme alapján változtatni ezeknek a blokkoknak a hosszát hogy a kiszámítás időt optimalizáljuk. Ezek a blokk alapú összeadók tartalmazzák a carry bypass összeadót ami meghatározza "P" és "G" értékét minden blokk számára inkább mintsem minden bit számára, és a carry select összeadó mely elő-generálja az összeg és átvitel értékeket a lehetséges átvitel bemenetekhez a blokkokhoz.

Más összeadó tervek magukba foglalják a conditional sum összeadót, carry skip összeadót, és a carry complete összeadót.

Lookahead Carry Unit[szerkesztés | forrásszöveg szerkesztése]

Több carry look-ahead összeadót kombinálva még nagyobb összeadókat hozhatunk létre. Több szinten kell alkalmaznunk ezeket ahhoz, hogy még nagyobb összeadókat hozzunk létre . Például, a következő összeadó egy 64 bites összeadó, ami 16 4 bites CLA két szint Lookahead Carry Unittal.

Egy 64 bites összeadó

3:2 arányú tömörítők (3:2 compressors)[szerkesztés | forrásszöveg szerkesztése]

Szemlélhetünk 3:2 arányú tömörítőként is egy teljes összeadót: három egy bites bemenetet ad össze, és egy egyszerű eredménnyel tér vissza, ami egy két bites szám. Így például, a 101 bemenet a 1+0+1=10 kimenetet eredményezi. Az 1-es bit reprezentálja az átvitel kimenetet, a 0-s bit meg az összeget jelöli. Hasonlóképpen, a félösszeadó egy 2:2 arányú tömörítőként használható.

3:2 arányú tömörítők arra használhatóak, hogy három vagy több összeadandó összegzését felgyorsítsuk. Ha pontosan három az összeadandó, akkor az alaprajza carry-save összeadóként ismert. Ha az összeadandó négy vagy több, akkor egynél több rétege szükséges az összeadóknak és több lehetséges felépítése van az áramköröknek: a leg közönségesebbek a Dadda tree és a Wallace tree. Ez az áramkör típus leginkább a szorzóknál használatos, ezért van az, hogy ez áramköröket Dadda és Wallace szorzókként is ismerjük.

Lásd még[szerkesztés | forrásszöveg szerkesztése]

Jelenleg, csak angol nyelvű tartalom elérhető az összeadók témaköréhez

Külső hivatkozások[szerkesztés | forrásszöveg szerkesztése]