8.7. Adunare binară


Un circuit de bază Binary Adder (sumator binar) poate fi realizat din porțile standard AND și Ex-OR permițându-ne să „adunăm“ împreună două numere binare de un singur bit, A și B.

Adunarea acestor două cifre produce o ieșire numită suma (SUM) adunării și o a doua ieșire numită bitul CARRY sau Carry-out (COUT) în conformitate cu regulile pentru adunarea binară. Una dintre principalele utilizări pentru Binary Adder este în circuitele aritmetice și de numărare. Considerați adunarea simplă a celor două numere denary (baza 10) de mai jos.

Din lecțiile noastre matematice de la școală, am aflat că fiecare coloană de numere este adunată pornind de la partea dreaptă și că fiecare cifră are o valoare ponderată în funcție de poziția sa în coloane.

Când fiecare coloană este adunată, se generează un transfer dacă rezultatul este mai mare sau egal cu 10, numărul bazei. Acest transfer este apoi adăugat la rezultatul adunării următoarei coloane în stânga și așa mai departe, simplă adunare matematică, adunarea numerelor și transferul (carry).

Adunarea de numere binare este exact pe aceeași idee ca și pentru adăugarea numerelor zecimale, dar de data aceasta un transport (carry) este generat doar atunci când rezultatul în orice coloană este mai mare sau egal cu "2", numărul bazei în binar. Cu alte cuvinte, 1 + 1 creează un transport (carry).

Adunare binară

Adunarea binară respectă aceleași reguli de bază ca și cele pentru adunarea zecimală de mai sus, cu excepția că în binar, fiind doar două cifre, cea mai mare cifră este "1". Deci, atunci când se adună numere binare, este generat un transport (carry out) atunci când suma "SUM" este egală sau este mai mare de doi (1+1) și acesta devine un bit "CARRY" pentru orice adunare următoare, fiind trecută în următoarea coloană pentru adunare, ș.a.m.d. Considerați adunarea cu un singur bit de mai jos.

Adunarea binară a doi biți

Atunci când cei doi biți, A și B sunt adunați, adunarea "0 + 0", "0 + 1" și "1 + 0" duce fie la "0", fie la "1" până la coloana finală de "1 + 1", când suma este egală cu "2". Dar numărul doi nu există în binar, însă 2 în binar este egal cu 10, cu alte cuvinte un zero pentru sumă plus un bit suplimentar de transport.

Atunci, operația unui adder simplu necesită două intrări de date care produc două ieșiri, suma (S) a ecuației și un bit Carry (C), așa cum se arată.

Diagrama bloc a unui Binary Adder

Pentru problema simplă de adunare pe un bit de mai sus, bitul de transport rezultat poate fi ignorat, dar este posibil să fi observat altceva în ceea ce privește adunarea acestor doi biți, suma adunării lor binare seamănă cu cea a unei Porți Exclusive-OR. Dacă etichetăm cei doi biți ca A și B, atunci tabelul de adevăr rezultat este suma celor doi biți dar fără carry final.

Poarta SAU-exclusiv (Ex-OR) cu 2 intrări

Putem vedea din tabelul de adevăr de mai sus că o poartă exclusiv-OR produce o ieșire "1" numai atunci când una dintre intrări este la logic "1", dar nu ambele la fel, ca în cazul adunării binare a celor doi biți precedenți. Dar, pentru a efectua adunarea a două numere, microprocesoarele și calculatoarele electronice necesită bit suplimentar de transport pentru a calcula corect ecuațiile, astfel încât trebuie să rescriem însumarea anterioară pentru a include doi biți de date de ieșire, așa cum se arată mai jos.

Din ecuațiile de mai sus știm acum că o poartă Exclusive-OR va produce o ieșire "1" doar când FIECARE intrare este la logic "1", deci avem nevoie de o ieșire suplimentară pentru a produce bitul de transport când AMBELE intrările A și B sunt la logic "1". O poartă digitală care se potrivește perfect, producând o ieșire "1" când ambele intrări A și B sunt "1" (HIGH) este poarta AND standard.

Poarta ȘI (AND) cu 2 intrări

Prin combinarea porțiunii Exclusive-OR cu poarta AND rezultă un simplu circuit numeric binar digital cunoscut sub numele de circuit "Half Adder" (circuitul adună doi biți de intrare și scoate un bit SUM și un bit CARRY)

Circuit Half Adder

Tabelul de adevăr pentru Half Adder cu Carry-Out

Din tabelul de adevăr al Half Adder se poate observa că ieșirea SUM (S) este rezultatul porții Exclusive-OR, iar Carry-out (Cout) este rezultatul porții AND. Atunci, expresia Booleană pentru Half Adder este după cum urmează.

Pentru bitul SUM:

SUM = A XOR B = A ⊕ B

Pentru bitul CARRY :

CARRY = A AND B = A.B

Un dezavantaj major al circuitului Half Adder atunci când este folosit ca un sumator binar este că nu există nici-o prevedere pentru un "Carry-in" din circuitul precedent, când se adună împreună biți de date multiple.

De exemplu, să presupunem că dorim să adunăm împreună doi octeți de date pe 8 biți, orice bit de transport rezultat ar trebui să fie capabil să "se propage" sau să se deplaseze pe modelele de biți pornind de la bitul cel mai puțin semnificativ (LSB). Cea mai complicată operație pe care o poate face Half Adder este "1 + 1", dar, deoarece nu are nici o intrare de transport (carry), valoarea adunată rezultată ar fi incorectă. O modalitate simplă de a depăși această problemă este de a folosi un circuit de adunare binară de tip Full Adder.

Circuit Full Adder

Principala diferență între Full Addder și anteriorul Half Adder este că primul are trei intrări. Aceleași două intrări de date cu un singur bit A și B, ca mai înainte, plus o intrare suplimentară Carry-in (CIN) pentru a primi transportul dintr-un etaj anterior, după cum se arată mai jos.

Diagrama bloc a unui Full Adder

Deci, Full Adder este un circuit logic care efectuează o operație de adunare pe trei cifre binare și, la fel ca Half Adder, generează un bit de transport la următoarea coloană de adunare. Atunci, o intrare Carry-in este un transport posibil de la o cifră mai puțin semnificativă, în timp ce Carry-out reprezintă un transport către o cifră mai semnificativă.

În multe privințe, Full Adder poate fi considerat ca fiind două Half Adder conectate împreună, așa cum este arătat.

Diagrama logică a unui Full Adder

Deoarece circuitul Full Adder de mai sus este în mod obișnuit două Half Adder conectate împreună, tabelul de adevăr pentru Full Adder cuprinde o coloană suplimentară pentru a ține cont de intrarea Carry-in CIN, precum și de ieșirea sumă S și Carry-out, bitul COUT.

Tabel de adevăr pentru Full Adder cu Carry

Atunci, expresia Booleană pentru un Full Adder este după cum urmează.

Pentru bitul SUM (S):

SUM = (A XOR B) XOR CIN = (A ⊕ B) ⊕ CIN

Pentru bitul CARRY-OUT (Cout):

CARRY-OUT = A AND B OR CIN (A XOR B) = A.B + CIN(A ⊕ B)

Un Binary Adder pe n-biți

Am văzut mai sus faptul că sumatoarele binare de 1 bit pot fi construite din porți logice de bază. Dar dacă dorim să adunăm două numere de n-biți, atunci un număr n de Full Adder de 1-bit trebuie să fie conectate împreună pentru a produce ceea ce este cunoscut ca un Ripple Carry Adder.

Un "Ripple Carry Adder" este pur și simplu "n" Full Adder de 1-bit legate împreună, cu fiecare Full Adder reprezentând o singură coloană ponderată într-o adunare binară lungă. Se numește așa, datorită faptului că semnalele de transport generează un efect de "propagare" prin sumatorul binar de la dreapta la stânga (LSB la MSB).

De exemplu, să presupunem că dorim să adunăm împreună două numere pe 4 biți, cele două ieșiri ale primului Full Adder vor furniza suma (S) cifrelor plasate primele, plus un bit carry-out care acționează ca o cifră carry-in în următorul sumator binar.

Cel de-al doilea sumator binar din lanț produce, de asemenea, o ieșire sumă (al doilea bit) plus un alt bit carry-out și putem continua să adăugăm mai mulți Full Adders la combinație pentru a aduna numere mai mari, legând ieșirea bitului carry de la primul sumator binar la următorul sumator, și așa mai departe. Un exemplu de sumator de 4 biți este dat mai jos.

Un Ripple Carry Adder pe 4 biți

Un dezavantaj principal al "legării" împreună a sumatoarelor binare de 1 bit pentru a aduna numere binare mari este că, dacă intrările A și B se schimbă, suma la ieșirea sa nu va fi validă până când orice intrare-carry nu a "propagat" prin fiecare sumator din lanț deoarece MSB (cel mai semnificativ bit) al sumei trebuie să aștepte orice modificare de la intrarea carry a LSB (cel mai puțin semnificativ bit). În consecință, va exista o întârziere finită înainte ca ieșirea sumatorului să răspundă oricărei modificări a intrărilor sale, rezultând o întârziere acumulată.

Atunci când numărul biților care sunt adunați nu este prea mare, de exemplu, 4 sau 8 biți sau viteza de însumare a sumatorului nu este importantă, această întârziere poate să nu fie importantă. Dar, atunci când numărul biților este mai mare, de exemplu, 32 sau 64 de biți folosit în sumatoare multi-bit, sau suma este necesară la o viteză foarte mare a ceasului, această întârziere poate deveni prohibitiv de mare cu procesele de adunare neterminate într-un ciclu de ceas.

Acest timp de întârziere nedorit se numește propagarea întârzierii. De asemenea, o altă problemă numită "overflow" apare atunci când un sumator de n-bit adună două numere paralele a căror sumă este mai mare sau egală cu 2n.

O soluție este de a genera semnale de intrare-carry direct de la intrările A și B mai degrabă decât folosind aranjamentul ripple de mai sus. Acest lucru produce un alt tip de circuit sumator binar, numit Carry Look Ahead Binary Adder, unde viteza sumatorului paralel poate fi îmbunătățită considerabil folosind o logică carry-look ahead.

Avantajul unui carry look ahead adder este acela că lungimea timpului pentru a produce SUM corect este independentă de numărul biților de date utilizat în operațiune, spre deosebire de timpul ciclului unui parallel ripple adder necesar să completeze SUM, care este o funcție de numărul total de biți de adunat.

Circuitele Full Adder cu 4 biți cu caracteristici carry look ahead sunt disponibile ca pachete IC standard, în forma unui TTL 4-bit binary adder 74LS83 sau 74LS283 și CMOS 4008, care pot aduna două numere binare pe 4 biți și pot genera o SUM și o ieșire CARRY după cum se arată.

Simbolul logic pentru 74LS83

Rezumat Binary Adder

Am văzut în acest tutorial despre Binary Adders că circuitele sumator pot fi folosite pentru a "aduna" două numere binare care produc un "carry-out". În forma sa cea mai de bază, se pot realiza sumatoare prin conectarea unei porți Exclusive-OR cu o poartă AND pentru a produce un circuit Half Adder. Două Half Adder pot fi combinate pentru a produce un Full Adder.

Există un număr de IC-uri Full-Adder cu 4 biți disponibile, cum ar fi 74LS283 și CD4008, care vor aduna două numere binare de 4 biți și vor oferi un bit suplimentar de transport de intrare, precum și un bit de transport de ieșire, astfel încât le puteți lega împreună pentru a produce sumatoare pe 8 biți, 12 biți, 16 biți, dar întârzierea de propagare a transportului poate fi o problemă majoră în marii Ripple Adders de n-biți.