Posts Tagged ‘Adderare’

Den Binära adderaren

september 10, 2009

Den binära adderaren är en relativt simpel krets som ligger som idag finns i oräkneliga mängder i olika processorer, FPGAer eller implementerade av diskreta komponenter.

Den binära adderaren räknar i princip som en människa gör i decimalsystemet

ex 17 + 25:Steg 1Steg 2Steg 3fast istället för att summor på tio eller mer leder till att en rest skickas till spalten till vänster så skickar summor på två en etta åt vänster (mer signifikanta bitar)

Ex 17+25:

Steg 1Steg 2

Steg 3

En en bits adderare behöver då ta Tal A, Tal B och sedan generera resultatet R samt Resten Cout enligt sanningstabellen

A B | R Cout
0 0 | 0 0
0 1 | 1 0
1 0 | 1 0
1 1 | 0 1

Utifrån denna sanningstabell kan vi konstruera ”halvadderaren”

HalfadderFör att utöka denna1-bits adderare (som inte är så praktisk i sig själv eftersom de flesta kan räkna till två) till en fler-bitars adderare vill man ställa flera adderare bredvid varandra där varje adderare tar hand om en av talets bitar. För att detta ska fungera måste Cout skickas som indata till adderaren för nästa bit. Dvs. adderaren för bit n i talet utför operationen An + Bn + Coutn-1 => Rn, Coutn. Som synes så klarar inte halv-adderaren av detta själv utan en ingång för rest-biten måste tas in och adderas till A och B. Sanningstabellen för detta blir då

Cin A B | R 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

Den digitala kretsen som utför denna operation kallas för fullständig adderare (full adder).

Fullständig adderare

Denna en-bits-adderare går nu att länka samman genom att skicka Cout till Cin i adderarenför biten till höger om nuvarande (mer signifikanta) bit.

4-bit adder

Ovanstående skiss visar en 4-bitars adderare, där Cin för bit 0 alltid är 0 (det finns ingen mindre signifikant bit som kan skicka data). Ifall vi vill utföra operationen 3 (0011) + 2 (0010) får vi alltså att

A[0] + B[0] + 0 = 1 + 0 + 0 => R[0] = 1, Cout[0] = 0

A[1] + B[1] + Cout[0] = 1 + 1 + 0 => R[1] = 0, Cout[1] = 1

A[2] + B[2] + Cout[1] = 0 + 0 + 1 => R[2] = 1, Cout[2] = 0

A[3] + B[3] + Cout[2]  = 0 + 0 + 0 => R[3] , Cout[3] = 0

R = 0101 = 5

Restbiten för den mest signifikanta biten används ofta för att ange ifall beräkningen gick över vad resultatet kan visa.

Planen var att gå igenom addition med teckenbitar också men det här inlägget är nog långt som det är så det blir framöver. efter det har jag också tänkt gå igenom hur binära multiplikatorer och divisionskretsar arbetar.

Keep Watching the Sky!