Bináris számok összeadása

Néhány alapszabály: Az általános képlet a legnagyobb ábrázolható számra Max = 2n–1, ahol n az alkalmazott bitek száma. Például, ha három bitből álló jelsorozatot tekintünk, akkor az ábrázolható legnagyobb szám 23–1 alapján (8–1), vagyis 7. Tehát az 111 sorozatban a legnagyobb szám a 7. 8 bites ábrázolásban 255 a legnagyobb ábrázolható egész szám, egy 16 bitesben 65535, 32 bites ábrázolás esetén pedig 4 294 967 295.

A bináris számok összeadásának szabályait az alábbi táblázatban szemléltetjük. Ez is egyfajta igazságtábla, hiszen azt mondja meg, hogy az X és Y bemenetek lehetséges kombinációira milyen kimenetek adódnak az összeadás esetén. Csakhogy itt nemcsak a 2 összeadandó bit (X,Y) játszik szerepet egy-egy bit összeadásában, hanem, ahogy a tízes számrendszerben megszoktuk, lehet az előző oszlopban (jobbról) végrehajtott összeadásnak olyan eredménye, ami nagyobb, mint a lehetséges legnagyobb alaki érték, és ezért a következő oszlop összeadásakor ún. átvitelt (carry) kell figyelembe vennünk. Ezt a következő oszlopban egy „Átvitel be” oszlopban vesszük figyelembe. Persze ennek az oszlopnak az összeadásakor is keletkezhet a legnagyobb alaki értéknél nagyobb szám, ekkor az eredmény (Z) mellett lesz egy „Átvitel ki” kimenet is. A szemlélteti egy bit összeadásának bemeneti és kimeneti jeleit.

4-7. ábra -

kepek/2fejezet-4-7.jpg


Most már nagy gyakorlattal a bemeneteket ún. inkrementálisan (vagyis egyszerűen eggyel való növeléssel) felírjuk a bemeneti oldalra (kék oldal), és tudjuk, hogy a három bemeneti bit esetén ez éppen nyolc eset (0–7) Esetek = 2n alapján (lásd ).

A ot soronként úgy kell értelmezni, hogy ha például az első sorban az egyik összeadandó bit értéke 0, a másiké is 0, és az előző műveletből nincs átvitel, akkor az eredmény bit szintén 0 lesz, és nem keletkezik átvitel. Az átvitel ugyanaz a fogalom, mint amikor a tízes számrendszerben az összeadás során nagyobb szám keletkezik, mint tíz, vagyis a számrendszer alapszáma. Ilyenkor a balra következő oszlopban egy alaki érték növelést hajtunk végre („maradt az egy”). Ha tehát 2 bináris szám összeadását valósítjuk meg, akkor, ha a táblázat szerint járunk el:

 

14

  

0000 1110

+

29

 

+

0001 1101

 

43

  

0010 1011

Jobbról haladva az összeadandó bitpárosokat és az átviteleket a tartalmazza.

0.

0+1

mivel nincs hozott átvitel, 3. eset

1

1.

1+0

mivel nincs hozott átvitel, 5. eset

1

2.

1+1

nincs hozott átvitel, viszont itt keletkezik, 7. eset

0

3.

1+1

van hozott átvitel és keletkezik is, 8. eset

1

4.

0+1

van hozott átvitel és keletkezik is, 8. eset

0

5.

0+0

van hozott átvitel, 2. eset

1

6.

0+0

nincs hozott átvitel, 1. eset

0

7.

0+0

nincs hozott átvitel, 1. eset

0

A keletkezett bináris szám 001010112, ami éppen 4310, illetve 2B16.

Az világosan látszik az előbbi összeadásnál, hogy az egymás alá írt biteket sorban jobbról balra, „egyenként” adtuk össze, és ezekkel az „egyenkénti” összeadásokkal haladtunk balra mindaddig, amíg el nem fogytak az összeadandó bitek. Mikor digitális technikai megközelítésben tekintünk egy folyamatra, rögtön észre kell vennünk, ha az logikailag egy részfolyamat ismétlődéséből áll. Erre kis gyakorlattal később szinte rááll a szemünk. Például itt az egy bitpár összeadása sorban történő ismétléséről van szó.

„Félösszeadó”

Ez a részfeladat pontosan az, hogy 2 bit összeadása megvalósul, és lesz egy eredmény, valamint egy átvitel. A szereplők tehát: X az egyik bit, Y a másik bit, Z az eredmény, és Cout (carry out) a keletkező átvitel. (Megjegyezzük, hogy a digitális technikában minden számba vett adat mindig létezik, például átvitel akkor is van, ha nem keletkezik, akkor ugyanis 0).

Úgy okoskodunk, hogy ha lenne egy olyan digitális gépünk, ami a 2 bemenet összeadását és átvitelképzését megvalósítaná, akkor ezeknek valamilyen soros kötésével tetszőleges szélességű bináris minták összeadhatóak lennének. Már csak azt kellene valahogy megoldani, hogy ezek az egyes bitpárkezelő egységek fogadják az előző (alacsonyabb helyi értéken) dolgozó ugyanolyan gépek keletkező átvitelét. Azt a rendkívül egyszerű és magától értetődő technikát, hogy egy bonyolultnak tűnő folyamatot kisebb, átlátható alfolyamatokra bontunk, elegánsan dekompozíciónak, vagy józan földművesi észjárásnak nevezzük, és a digitális technikai tervezésben gyakran használjuk.

Kell tehát egy olyan digitális gép, ami megoldja az X,Y fogadásának/kezelésének és Z, valamint Cout előállításának feladatait. Ezenkívül kell egy, nyilván ebből továbbfejlesztett (úgy mondjuk, hogy általánosított) gép, ami már tetszőlegesen sorba kapcsolható. A megmutatja a 2 bit összeadását megvalósító összeadó művünket, ami nagyjából a „fele” a teljes feladatnak, nevezzük is el „félösszeadó”-nak.

4-8. ábra -

kepek/2fejezet-4-8.jpg


A digitális technikai feladatok körében a tervezést majdnem mindig az igazságtáblázat kitöltésével kezdjük. Ismerjük a jelszereplőket a bemeneten, és pontosan tudjuk, mit akarunk az egyes bemenetekre a kimeneten látni. Ez éppen egy igazságtábla. Kell tehát egy táblázat, aminek van 2 bemenete és 2 kimenete. Azt is látjuk, hogy mivel csak 2 bemenet van, a lehetséges bemeneti esetek száma Esetek=2n alapján éppen 22= 4 (lásd ).

Most egy kicsit figyelmesebben kell megvizsgálnunk a bemenetre adandó válaszokat. Nincs véletlenül olyan elemi kapu vagy nem túl bonyolult kapcsolás, ami éppen ezt, vagy ennek a táblázatnak valamilyen oszlopát vagy oszlopait adná? Úgy kell tekintenünk a táblázatra, mintha a kimeneti oldalak oszlopai külön kapcsolási megvalósíthatóságúak lennének.

Vagyis kell egy-egy kapcsolás, ami a szerinti értékeket szolgáltatja.

Vegyük először az elsőt, azt, amelyik a bemenetek összegét állítja elő.

Ezt a kimeneti mintát már láttuk valahol! Kis keresgélés után rájövünk, hogy ez pontosan a xor kapu igazságtáblájának kimeneti oldala, hiszen: Z = XY (lásd ).

Vagyis az X és az Y bemenetek kezelése egy egyszerű xor kapuval megoldható.

Rajzoljuk fel, és őszintén remélem, hogy senkit nem zavar meg, hogy az adatlapon a bemeneteket A-val és B-vel jelöltük (lásd ).

4-9. ábra -

kepek/2fejezet-4-9.jpg


Ugyanakkor az is látszik, hogy az átvitel kezelése, mely szintén a bemenetek függvénye is, valószínűleg külön részáramköri megvalósítású lesz, ezért a át már most kiegészítjük a rajzunkat az X és Y további felhasználásának lehetőségével (lásd ).

4-10. ábra -

kepek/2fejezet-4-10.jpg


A kapcsolási rajzjel a fizikai összeköttetést jelöli 2 jelvezeték között a pedig azt, hogy a 2 jelvezeték nem érintkezik.

Nézzük most a másik kimenet előállítását, vagyis az átvitel (egy később gyakran használt kifejezéssel élve, a túlcsordulás bit) előállítását (lásd ).

Átvitel ki (Cout)

0

0

0

1

Erre meg azt találjuk, hogy pontosan azt csinálja, amit egy és kapunak kell (lásd ).

Vagyis

Cout = X∗Y

Ha tehát az eddigi kapcsolásunkat kiegészítenénk egy és kapuval, akkor a „félösszeadó”-t megvalósíthatnánk egy xor és egy and kapunak a bemenetekre történő párhuzamos kötésével. A szerint kiegészítettük kapcsolásunkat az átvitel kezelésének részáramkörével is:

4-11. ábra -

kepek/2fejezet-4-11.jpg


„Félösszeadó” megvalósítása integrált áramkörökkel

Megépítettünk egy „félösszeadó”-t, amivel 2 bit összeadása és azok átvitele megvalósítható. Ha komolyan gondoljuk, a most még csak rajzon létező kapcsolás fizikailag is kivitelezhető, akár házi eszközökkel is, egy 74LS136 jelű xor kapukat tartalmazó, és egy 74LS08, 4 db and kaput tartalmazó integrált áramkörrel.

Az áramkörök adatlapján (datasheet) általában van egy felülnézeti kép, ahol az ún. lábkiosztás látható. Készítsük el most ez alapján virtuálisan magát a fizikai kapcsolást.

4-12. ábra -

kepek/2fejezet-4-12.jpg


Nézzük a áramköreit és értelmezzük a látható jelöléseket. A VCC az áramkör működéséhez szükséges ún. tápfeszültséget jelöli, erre a „lábra” tehát a működtető tápfeszültség, az 5 volt kerül. A GND (ground) lábra a rendszer áramköreinek zárásához szükséges potenciál, az ún. „föld” kerül, ennek szintje 0 volt. Ezenkívül mindkét áramkörben, rövidítve IC-ben (integrated circuit), egy számmal és egy betűvel jelölt láb van. A szám az adott funkcionális kapu sorszáma, pl. 1 az 1-es kapu. Az A, B a bemeneteket, az Y pedig mindig a kimenetet jelöli. Tehát például a 74LS08 IC-n 1A az 1. és kapu A jelű bemenete, 1B az 1. és kapu B bemenete, 1Y pedig az 1. és kapu kimenete. Ugyanígy a 74LS136-os IC-n a jelölések ugyanezt jelentik, csak természetesen itt nem egy and funkció valósul meg, hanem egy xor.

Ha kapcsolási rajzunkat nézzük, akkor tehát kell nekünk egy xor kapu és egy and kapu, amit egymással párhuzamosan kötünk, és egy kicsit jobb elrendezésben az alább látható. A tápvezetéket pirossal, a bemeneti jeleket zölddel, a kimeneti jeleket pedig kékkel jelöltük (lásd ). Amikor digitális kapcsolást tervezünk vagy építünk, tulajdonképpen mindig a fenti lépéseket hajtjuk végre.

4-13. ábra -

kepek/2fejezet-4-13.jpg


Teljes összeadó

Most vagyunk félúton, hiszen már tudunk egy biten összeadni. De sajnos több biten kellene, mert ezzel a kapcsolással – lássuk be – még nem tudnánk magunkra vonni a digitális szakma harsogó elismerését. De hogyan is lássunk hozzá? Hát persze megint vesszük a jó öreg igazságtáblát, majd a kimenetek logikai függvényeit, ezután megtervezzük a kapukból a kapcsolási rajzot, végül huzalozzuk a fizikai IC-ket és megépítjük az áramkört.

4-14. ábra -

kepek/2fejezet-4-14.jpg


A teljes összeadó () jelszereplőinek listája a „félösszeadó”-hoz képest (ha emlékszünk még a kézzel elvégzett összeadásra) abban különbözik, hogy képes fogadni az alacsonyabb helyi értékeken keletkezett átviteleket is. Ezt jelöltük Cin-el. Vagyis a bemenetek száma nem 2, mint a „félösszeadó”-nál, hanem 3, tehát az igazságtábla bal oldala három oszlopos, és emiatt (23=8) nyolc soros, hiszen a bemeneti jelek különböző eseteinek száma nyolc (lásd ).

Na, ez már bonyolultabb kissé, mint a „félösszeadó”, de mi lenne, ha a már megépített „félösszeadó”-ra úgy gondolnánk, mint egy már kész és zárt kapcsolásra, amit csak felhasználunk a teljes összeadó tervezésénél. Vegyük észre, hogy az eredmény, Z, nem más, mint a félösszeadó Z1 = XY eredményének „félösszeadás”-a a harmadik bemenettel, Cin-el, úgy, hogy előbb elvégezzük a „félösszeadás”-t, majd az eredményt bevezetjük egy másik „félösszeadó”-ba az egyik bemenetként (lásd ).

Ez logikai egyenlettel írva ezt jelentené:

Z =(X⊕Y) ⊕ Cin

Na, ezzel gyorsan megvoltunk, de mi lesz a kimeneti átvitel kezelésével? Beláthatjuk, hogy ha az előbbiekben szükségessé vált 2 félösszeadó átvitelei közül bármelyikben keletkezik átvitel, akkor az egész összeadásnak is van átvitele (lásd ).

Az átvitel igaz akkor és csak akkor, ha legalább az egyik átvitel igaz. Ezt pedig egy or kapu tökéletesen megvalósítja. A 2 „félösszeadó” átviteleire használt vagy kapcsolat adja a teljes összeadó átvitelének logikai értékét:

Cout = (X∙Y)+(Cin∙(X⊕Y))

Az átvitelt kezelő fenti egyenlet elsőre talán nem tűnik könnyen áttekinthetőnek, de ha részenként vizsgáljuk, könnyebben boldogulunk. Vizsgáljuk két külön részletben, melyet egymással egy vagy kapcsolat köt össze. Az (X∙Y) egyenletrészlet (lévén egy egyszerű és kapcsolat) akkor és csak akkor ad igaz eredményt, ha mindkét bemenet igaz. Ez tulajdonképpen az első „félösszeadó”-nk átvitele.

A másik zárójeles kifejezésben az (XY) kifejezés az eredeti bemenetek összege, mely igaz, ha a bemenetek különbözőek. Ennek eredménye és kapcsolatban van a bejövő átvitellel, így ez a kifejezés pontosan akkor ad igaz értéket, ha X és Y különböző, és van bejövő átvitel.

Mivel a két egyenletrészlet egymással vagy kapcsolatban van, ez azt jelenti, hogy a kimeneten akkor jelenik meg átvitel, ha az eredmény képzésénél, az átvitelek között, illetve ha mindkettőnél átvitel keletkezik.

A megmutatja a 2 „félösszeadó”-ból megépíthető kapcsolást.

4-15. ábra -

kepek/2fejezet-4-15.jpg


Látszik, hogy bemeneteknek az első félösszeadóval történő feldolgozásának eredményét (Z1) bevezetjük a másik félösszeadó egyik bemenetére, míg a másik bemenetre a kapott átvitel kerül (Cin). A második félösszeadó által szolgáltatott eredmény a teljes összeadó eredménye (Z), míg a 2 félösszeadó átviteleinek vagy kapcsolata adja a teljes összeadó átvitelét (C1+C2).

Ha leltárt készítünk, látjuk, hogy 2 kizáró vagy kapu, 2 és kapu, és sajnos 1 vagy kapu kell a megépítéshez. Milyen jó lenne, ha csak 2 típusú kapuval megoldható lenne a kapcsolás, mert akkor a fentebb használt 74ls08 és 74ls136 IC-kkel 2 tok felhasználásával megépíthetnénk. Gondoljuk hát át, hogy az átviteleket a végén vagy kapcsolatba hozó kapu helyett nem alkalmazhatnánk-e egy xor kaput, amiből 4 is van a 74ls136 IC-ben. Vagyis a kapcsolásunk a szerint módosulna.

4-16. ábra -

kepek/2fejezet-4-16.jpg


A és a összevetéséből láthatjuk, hogy a xor és a vagy kapu működése csak a mindkét bemenet igaz értéke esetében különbözik egymástól.

Ha biztosak lehetnénk abban, hogy ebben a kapcsolásban az az eset, amikor minkét „félösszeadó” átvitelének értéke 1, sohasem fordul elő, bátran használhatnánk xor kaput az eredeti vagy kapu helyett.

Tételezzük fel, hogy az első „félösszeadó” átvitele (C1) 1. Ez pontosan akkor van, ha mindkét bemenet 1, ekkor az utolsó or kapu egyik bemenetére biztosan 1 kerül, az eredmény (Z1) pedig 0 lesz. A másik bemenetet egy és kapu táplálja, amely az első „félösszeadó” eredményét (Z1) kapja, ami esetünkben biztosan egy 0, az és kapu másik bemenete a kapott átvitel (Cin), ami akár 1, akár 0, az és kapu kimenetén biztosan 0 jelenik meg. Ebből következik, hogy az utolsó or kapu bemenetein sohasem lesz 2 db 1-es, vagyis kicserélhető egy xor kapura.

Lehetnek olyanok, akik most rosszalló fejcsóválással veszik tudomásul a cserét, de a gyakorlatban a jól átgondolt egyszerűsítésnek komoly szerepe van (mondhatnánk se szeri se száma), mert a megbízható funkcionalitás mellett a gazdaságosság a legfőbb szempont, és ha még egy tokot kell terveznünk az összeadónkra, akkor annak beültetése, férőhelye, huzalozása, fogyasztása, sőt, megnövekedett meghibásodási valószínűsége nagyobb darabszámnál komoly hátrány lehet. Vagyis a digitális technika terén frissen szerzett tervezési tudásunkat kiegészítjük a kapcsolás egyszerűsítésének fázisával, melyet, ha lehet, mindig alkalmazzunk, persze lehetőleg még a sorozatgyártás megkezdése előtt.

A teljes összeadó áramköri megvalósítása

Miután a logikai kapcsolással és a mindig kötelező ellenőrzéssel készen vagyunk, elkezdhetjük „virtuálisan” megépíteni az áramkörünket. Az első lépés, hogy a fenti, készen kapható integrált áramkörök lábait a kapcsolási rajz szerint összekössük. Ez az ún. huzalozás, ami, mint kifejezés, abból az időből ered, amikor még valóban huzalokkal, sőt, huzalerdőkkel kapcsolták össze az egyes részkapcsolásokat. Ma azonban nyomtatott áramköröket használunk. Ez valójában egy vékony vezető réteg egy szigetelő lemezen, amiről egyszerű esetben az áramkörök összeköttetésein kívül eltávolítanak mindent. A lemez mindkét oldalán van egy-egy vezető fólia, ezért az összeköttetéseket szétoszthatjuk a lemez 2 oldalára úgy, hogy egy-egy jelvezetéket a lemezbe fúrt lyukakon is átvezethetünk, mivel a lyukak belső palástja a galvanizálás (felületbevonó kémiai eljárás) miatt szintén vezet.

4-17. ábra -

kepek/2fejezet-4-17.jpg


Mivel a 74LS136-os áramkörben 4 db xor kapu van, a 74LS08-ban pedig 4 db és kapu (), ezért el kell döntenünk, hogy a kapcsolásban jelzett áramköri szerepeket melyik belső integrált kapura osztjuk. Általánosan mindkét IC-nél a bemenetek jelölése egy szám és egy betű kombinációjából áll. A szám a kapu száma a tokon belül, a betű pedig ha A, akkor ez az egyik bemenet, ha B, akkor a másik bemenet, ha pedig Y, akkor az adott sorszám ú kapuhoz tartozó kimenet. A következő ábrába beírtuk a tervezett kapusorszámokat. Vagyis az első félösszeadó xor műveletére a 74LS136-os első kapuját használjuk, majd a második „félösszeadó”-hoz a második kaput, és a keletkező átvitelhez a negyediket. Ugyanúgy, az és kapuk felhasználása is a szerint történik.

4-18. ábra -

kepek/2fejezet-4-18.jpg


A következő lépés, hogy valamilyen áramköri huzalozást segítő programmal megtervezzük a nyomtatot áramköri huzalozás rajzát. Ilyenkor kiindulhatunk a kapcsolási rajzból és nagyon sok jó program van, ami automatikusan elkészíti a nyomtatott áramköri tervet, vagy használhatunk (jóval) egyszerűbb tervezőt, ahol nekünk kell az összeköttetéseket bejelölni. Az áramkörök és más alkatrészek „beültetésére” olyan átmenő furatokat helyezünk el a panelen, amelyekbe pontosan illeszkednek az integrált áramköreink lábkiosztásai. A 74LS136 és a 74LS08 IC-k egy-egy 14 lábú tokban nyertek elhelyezést, amit a 2-szer 2 függőleges furatoszlop jelez.

Kövessük végig a huzalozást a következőképpen, figyelemmel arra, hogy a nyomtatott áramköri lap 2 oldalán futó összeköttetéseket más-más színnel ábrázoltuk. Azt az oldalt, ahol az áramköri elemek lesznek, „alkatrészoldalnak” nevezzük, és a huzalozást ezen az oldalon zölddel jeleztük. A másik oldal az ún. „forrasztási oldal”, itt az összeköttetések színe piros. Szokás még a tervezéskor az ún. „feliratoldal”-t is figyelembe venni, ahol a szerelést vagy a későbbi tesztelést segítő feliratok vannak, ez most kék színnel ábrázolt. A furatok és az alkatrészoldalon a fóliából kialakított feliratok, jelzések színe sárga.

4-19. ábra -

kepek/2fejezet-4-19.jpg


A alapján nyomon követhető, hogy az X-szel és az Y-nal jelölt bemenetek közvetlenül a 74LS136-os első xor kapujának 1A és 1B bemeneteire kerülnek, illetve onnan tovább, az első félösszeadó átvitelének előállításához a 74LS08 első kapujának 1A és 1B bemenetére.

A 74LS136-os első xor kapujának kimenete az 1Y jelű, közvetlenül a mellette lévő második xor kapu 2A bemenetére van kötve, ennek a kapunak a második bemenetére, a 2B-re csatlakozik a hozott átvitel Cin jel.

A 74LS136-os második xor kapujának kimenetén keletkezik a teljes összeadó eredmény kimenete, a Z, amit kivezetünk egy csatlakozó pontra.

Az első félösszeadónak a 74LS08-as első kapujára kötött X és Y jelek 1Y kimenete visszacsatlakozik a 74LS136-os negyedik kapujának 4B bemenetére, amivel a Cout kimeneti átvitelt állítjuk elő.

A második félösszeadó átvitelkezelése úgy valósul meg, hogy egyrészt a Cin, másrészt az első félösszeadó kimenete (a 74LS136-os első xor kapu 1Y kimenete) csatlakozik a 74LS08 második 2A és 2B bemenetére, majd a kimenete, 2Y a kapcsolási rajznak megfelelően a 74LS136-os tok negyedik xor kapujának 4A bemenetére köt. Az itt keletkező kimeneti átvitel pedig maga a Cout jel, amit szintén kivezetünk (lásd ).

4-20. ábra -

kepek/2fejezet-4-20.jpg


Ha a kapcsolást kiegészítjük néhány, a bemenet és a kimenet állapotát jelző leddel, valamint a három bemenetet vezérlő kétállású kapcsolóval, akkor a működő kapcsolásunk a szerint néz ki.

4-21. ábra - http://gate575.hu/ITMagister/Adder

kepek/2fejezet-4-21.jpg


Összeadás 4 vagy több biten

Hullámzó átviteles (ripple carry) összeadó

Most, hogy már tudunk összeadni három bitet, könnyen elképzelhető, hogy ezeket a kis összeadó műveket sorba vagy párhuzamosan kapcsolva, tetszőleges szélességű bitcsoportok összeadására is készíthetünk kapcsolásokat. Persze felmerül az egyes bitek átvitelkezelésénél az a probléma, hogy a magasabb helyi értékű bitek összeadás-kezelése például soros kötésnél csak akkor valósulhat meg, ha már az alacsonyabb bitek átvitelképzése befejeződött. Ezért a soros illesztésű összeadók mindig lassabbak, viszont egyszerűbbek, mint a párhuzamos kötésűek. Ezeket a soros kötésben a helyi értékeken hullámzó átvitelterjedés miatt „ripple carry” (hullámzó átviteles) összeadónak nevezik.

4-22. ábra -

kepek/2fejezet-4-22.jpg


Ha a teljes összeadóját egy egységnek tekintjük és azt egy „dobozzal” szemléltetjük, akkor a egy négybites „ripple carry” összeadót mutat.

4-23. ábra -

kepek/2fejezet-4-23.jpg


A négybites RC (ripple carry) összeadó tehát egy teljes kapcsolásban úgy működik, hogy a legalacsonyabb helyi értékű bit készül el először az összeadással (ha itt nincs hozott átvitel, akkor ez és csak ez kiváltható egy „félösszeadó”-val), majd a keletkező átvitel és a két következő bitpár összeadását végzi el a következő teljes összeadó. Vagyis már a második bitpár esetén is van egy bizonyos késlekedés, jelesül az az idő, amíg az első összeadó az eredményével elkészül. Figyelemmel arra, hogy egy teljes összeadón áthaladó Cin -> Cout jelfeldolgozás 2 kapunyi időt vesz igénybe, ez egy n darab bitszélességű összeadó esetén 2n+1 kapu feldolgozási idejét jelenti.

A leghosszabb utat bejáró Cin → Cout minden bit feldolgozásánál 2 kapunyi várakozást jelent ( - sárgával jelölve). Ha egy kapunyi várakozás - az egyszerűbb számolás kedvéért - 1 nanosecundum (ns), akkor egy 32 bites összeadásnál a Cin → Cout feldolgozás 64 ns időt vesz igénybe. Az utolsó ( - enciánnal jelölve) összeadás eredményképzése szintén igényel egy-egy kapunyi időt, így már 2n+1 a kapott képlet. Tehát kapunként 1 ns-os késleltetéssel számolva 32 bit feldolgozása az eredmény stabil felhasználhatóságáig 65 ns. Persze az csak rózsaszín álom, hogy egy kapu késleltetése 1 ns legyen, és általában 90 ns körül van, tehát 5760 ns a körülbelüli teljes késleltetés.

4-24. ábra -

kepek/2fejezet-4-24.jpg


Persze fontos értenünk, hogy ez a képlet csak a fenti kapcsolással megvalósított esetben ad pontos értéket, hiszen éppen ezt a kapuelrendezést vettük figyelembe.

Párhuzamos kötésű (look ahead carry) összeadó

Más probléma merül fel a jóval gyorsabb párhuzamos kötésű összeadókon, ahol előre kellene látni, hogy ez egyes bitpozíciókon keletkezik-e átvitel, vagy sem. Ha kicsit alaposabban megvizsgálunk egy teljes összeadót, találunk benne 2 olyan „belső használatú” jelet, mellyel sikeresen megjósolhatnánk a keletkező átvitelt ( P és Q).

4-25. ábra -

kepek/2fejezet-4-25.jpg


Az egyik akkor keletkezik, amikor az első félösszeadó átvitel megjelenik az első and kapu kimenetén. Ez magunk közt szólva éppen azt jelenti, hogy ha mindkét összeadandó bit 1-es, vagyis az and kapu bemenetei ponáltak, akkor bizonyosan lesz átvitel. Ezt a jelet a G-vel jelöltük, ami az angol „generate”, vagyis generált átvitel szóból ered. Ha tehát a G jel 1-es, akkor ez már a bemeneti bitek összeadásának pillanatában rendelkezésre áll, és nem kell még 2 kapu késleltetését kivárni. Mi a helyzet a másik belső jelünkkel? Az meg akkor lesz 1-es, ha legalább az egyik összeadandó 1-es. Vagyis lehet, hogy lesz átvitel, de ez már csak a Cin jeltől függ. Logikai függvényekkel leírva ez az alábbi:

Gi = HiYi

Pi = Xi⊕Yi

fenti Gi és Pi felhasználásával pedig az eredmény és a kimeneti átvitel logikai függvényei:

Z = Ci ⊕ Pi

Ci+1 = Gi + CiPi

Mivel a G és a P előállítása is egy-egy, egy időben lezajló kapukésleltetést jelent, valójában csak egy kapunyi idő veszik el. Ha az egyes átvitelek kiszámításának függvényeit folyamatosan behelyettesítve felírjuk az egyes kapuk logikai függvényeit, akkor látható, hogy ez a módszer könnyen megvalósítható mondjuk négybites blokkokra osztva. Látható, hogy minden első egyenlet egy vagy kaput reprezentál, amely mögött 1,2, vagy 3, szintén vagy kapus kapcsolat áll. Ezért az első logikai rétegben elő kellene állítani az egyes bitpárok G és P jeleit, majd ezeket egy olyan második rétegnek átadni, ahol az alábbiak szerint keletkeznek az átvitelek:

C1 = G0 + P0C0

C2 = G1 + P1C1 = G1 + P1 (G0 + P0C0) = G1 + P1G0 + P1P0C0

C3 = G2 + P2C2 = G2 + P2G1 + P2P1G0 + P2P1P0C0

C4 = G3 + P3C3 = G3 + P3G2 + P3P2G1 + P3P2P1G0 + P3P2P1P0C0

Végül a harmadik rétegben létrehozni az eredményt és a kimeneti átvitelt.

A párhuzamos, ún. „look ahead carry” tipusú 4 bites összeadók műveleti ideje 4. Összehasonlítva ezt a „ripple carry” összeadóval, aminél 2n+1= 9 kapunyi idő alatt kapjuk meg a végeredményt, látható, hogy ez a módszer jóval gyorsabb.

4-26. ábra -

kepek/2fejezet-4-26.jpg


Persze felmerül a kérdés, hogy mi van zöldessárga blokkokkal jelölt második rétegben. () Erre mutatunk egy példát, amit a Texas cég egyik termékének, a 74LS83 négy bites összeadónak az adatlapjáról másoltunk ide. A mellékelt kapcsolási rajzon () jól elkülöníthetők az egyes logikai feldolgozó rétegek, ugyanúgy, mint azt a korábbiakban leírtuk. Az is jól látható, hogy az egyes emelkedő helyi értékeken egyre több kapu valósítja meg a korábban a logikai képletekkel leírt átvitelképzés kezelését.

4-27. ábra -

kepek/2fejezet-4-27.jpg


Kövessük a jelterjedést egy, a valóságos viszonyokat pontosan tükröző animációban, mely a DM74LS38 négy bites gyors összeadó IC logikai blokkvázlata alapján készült ()

4-28. ábra - http://gate575.hu/ITMagister/Adder4

kepek/2fejezet-4-28.jpg


Annak, hogy az összeadást a kettes számrendszerben, illetve a digitális technikában ilyen részletesen körbejártuk, nemcsak az az oka, hogy önmagában is szép feladat, hanem elsősorban az, hogy ennek a műveletnek a számítógépek működésében különleges jelentősége van. Látni fogjuk, hogy bináris számok összeadására vezethető vissza egy sor gyakran használt operáció, még a kivonás is.