You are on page 1of 13

DIGITALNE STRUKTURE

Zapiski predavanj

Branko Šter, Ljubo Pipan

4 Seštevalniki

Tukaj začnemo z obravnavo kombinacijskih vezij za aritmetiko. Le-ta prav


tako spadajo med kombinacijska vezja, vendar jih zaradi specifičnosti obrav-
navamo posebej.

Zapis števil

Za osvežitev znanja na kratko ponovimo predstavitve predznačenih binarnih


števil. Izmed različnih predstavitev omenimo:
- predznak-veličinsko
- eniški komplement,
- dvojiški komplement.

Vzemimo zaradi enostavnosti kar 3-bitna predznačena števila (n=3). V


Tabeli so vse tri predstavitve:

b2 b1 b0 SM 1’K 2’K
0 0 0 +0 +0 +0
0 0 1 1 1 1
0 1 0 2 2 2
0 1 1 3 3 3
1 0 0 -0 -3 -4
1 0 1 -1 -2 -3
1 1 0 -2 -1 -2
1 1 1 -3 -0 -1

1
DIGITALNE STRUKTURE 2

Kljub tem, da SM izgleda najbolj naravno, je zelo neroden za seštevanje/odštevanje.


V računalniških sistemih se najpogosteje uporablja dvojiški komplement (2’K),
ki je za seštevanje/odštevanje zelo primeren.

Dvojiški komplement

Z n-bitnim zapisom v dvojiškem komplementu (2’K) lahko predstavimo števila


v območju oz. rangu od -2n−1 do 2n−1 -1. Pri n=3 torej od -4 do 3; pri n=16
pa od -32768 do 32767. Če številu 32767 prištejemo 1, dobimo -32768, kar
je seveda neveljaven rezultat, ker je prišlo do preliva (“overflow”). Števila
lahko zapišemo v krogu. Na Sliki je krog za n=3:

Negativna števila dobimo tako, da eniškemu komplementu pozitivnega števila


prištejemo ena. Npr. število -2 pri 4-bitnih predznačenih številih v dvojiškem
komplementu dobimo takole:

0 0 1 0 (2)
1 1 0 1 (-2 v 1’K)
+ 1
1 1 1 0 (-2 v 2’K)

Na popolnoma enak način pretvarjamo tudi v drugo smer, npr. 2 iz -2.

Preliv pri dvojiškem komplementu:

Do preliva (“overflow”) pride, če vsota preseže rang. Potreben pogoj je enak
predznak obeh števil, zadosten pa, da ima “vsota” drugačen predznak kot
števili. Če označimo z an−1 , bn−1 , cn−1 in sn−1 oba operanda, vhodni prenos
DIGITALNE STRUKTURE 3

in vsoto zadnje stopnje ter z cn izhodni prenos zadnje stopnje, je signal OF,
ki označuje preliv, enak

OF = an−1 bn−1 sn−1 ∨ an−1 bn−1 sn−1

Glede na vhodni prenos cn−1 sta dve možnosti

OF (pri cn−1 = 1) = 0 ∨ an−1 bn−1 sn−1 = 0 ∨ cn = cn ,

in
OF (pri cn−1 = 0) = an−1 bn−1 sn−1 ∨ 0 = cn ∨ 0 = cn .
Zato je
OF = cn−1 cn ∨ cn−1 cn = cn ⊕ cn−1 .

Polovični seštevalnik

Osnovni enobitni seštevalnik je polovični seštevalnik (“Half Adder” - HA).


Sešteje 2 (enakovredna) bita ter vrne vsoto (S, “sum”) in prenos (C, “carry”):

A B C S
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0

C in S zapišemo v takem vrstnem redu, ker je C za eno mesto “težji”; zato


nam CS pomeni kar binarno vsoto vhodov A in B. Funkciji C in S sta

C = AB , S =A⊕B

Simbol polovičnega seštevalnika in realizacija z vrati:


DIGITALNE STRUKTURE 4

Polni seštevalnik

Enobitni seštevalnik, ki ga lahko uporabimo pri tvorbi večbitnega seštevalnika,


je polni seštevalnik (“Full Adder” - FA). Ima tri enakovredne (simetrične)
vhode, od katerih lahko enega uporabimo za vhodni prenos Cin iz prejšnje
stopnje:

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

Ravno tako nam zapis Cout S da kar binarno vsoto vseh treh vhodov. S in
Cout kot funkciji vhodov sta

S = A ⊕ B ⊕ Cin , Cout = AB ∨ ACin ∨ BCin

Polni seštevalnik v standardni IC izvedbi je 7480. Ima tudi vhode Ac in Bc za


komplement, kar lahko uporabimo pri odštevanju: A − B = A + B + 1(Cin ).

Oglejmo si še 1-bitni polni seštevalnik v jeziku VHDL:

library ieee;
use ieee.std_logic_1164.all;

entity FA is
port ( a, b, cin: in std_logic;
cout, s: out std_logic);
DIGITALNE STRUKTURE 5

end;

architecture FA1 of FA is
begin
s <= a xor b xor cin;
cout <= (a and b) or (a and cin) or (b and cin);
end;

Večbitni seštevalnik z razširjanjem prenosa

S kaskadno vezavo enobitnih polnih seštevalnikov sestavimo večbitni seštevalnik,


pri katerem se prenos razširja serijsko (“ripple carry”). Na Sliki je 4-bitni
seštevalnik z razširjanjem prenosa (“ripple adder”):

Ker se prenos linearno razširja od stopnje do stopnje, sta v k-ti stopnji izhoda
veljavna šele po času kT , če je T zakasnitev posameznega FA. Celotna zakas-
nitev n-bitnega seštevalnika je torej nT . Časovni potek računanja (za npr.
4-bitni seštevalnik) si lahko predstavimo po korakih:

x x x x x x c s x c s x c s x x c s x x x
x x x x x x x x x x
x x x x

Z s in c označimo vsoto in prenos FA iz prejšnjega koraka. V tem primeru


potrebujemo seveda 4 korake.

Standardni IC izvedbi 4-bitnega seštevalnika sta


- 7483: 4-bitni seštevalnik (paralelni, ne “ripple carry”), ter
- 74283: isto, le novejše.
DIGITALNE STRUKTURE 6

Paralelni seštevalnik lahko realiziramo dvonivojsko (5 funkcij (s3..s0,cout ) 9-ih


spremenljivk (a3..a0,b3..b0,cin ), kar je hitro, pa tudi potratno z logiko).

Če večbitni seštevalnik razširimo še z dodatnimi funkcijami, dobimo arit-


metično-logično enoto.

Aritmetično-logična enota

Aritmetično-logična enota (ALE, “ALU”) je večnamensko kombinacijsko vezje,


ki je zmožno izvajanja različnih aritmetičnih in logičnih operacij.

ALE 74181

SLIKA ALE’181 (vhodi: A, B, cvh , S, M; izhodi: F, cizh , P, G, EQU)

74181 je najbolj standardna izvedba aritmetično-logične enote. Vhod M


določa tip operacije: M=0 za aritmetične in M=1 za logične operacije. Z
dodatnimi štirimi vhodi S3 ,..,S0 pa določimo konkretno operacijo. Tako je
na voljo okoli 40 različnih operacij (ki pa niso enako uporabne). Tabela
prikazuje operacije, ki jih lahko izvaja ’181:

Cn =0 Cn =1
S3 S2 S1 S0 M=1 (log. f.) M=0 (aritm. oper.)
0000 F = A’ F = A minus 1 F=A
0001 F = (AB)’ F = AB minus 1 F = AB
0010 F = A’∨B F = AB’ minus 1 F = AB’
0011 F=1 F = minus 1 (2’K) F=0
0100 F=(A∨B)’ F=A plus (A∨B’) F = A plus (A ∨ B’) plus 1
0101 F = B’ F=AB plus (A∨B’) F = AB plus (A ∨ B’) plus 1
0110 F=A≡B F=A minus B minus 1 F = A minus B
0111 F=A∨B’ F = A ∨ B’ F = (A ∨ B’) plus 1
1000 F = A’B F=A plus (A∨B) F = A plus (A ∨ B) plus 1
1001 F=A⊕B F = A plus B F = A plus B plus 1
1010 F=B F=AB’ plus (A∨B) F = AB plus (A ∨ B) plus 1
1011 F = A∨B F=A∨B F = (A ∨ B) plus 1
1100 F=0 F = A plus A F = A plus A plus 1
1101 F = AB’ F = AB plus A F = AB plus A plus 1
1110 F = AB F = AB’ plus A F = AB’ plus A plus
1111 F=A F=A F = A plus 1

Ker imamo 4 vhode S, lahko realiziramo 16 logičnih funkcij, kar so tudi vse
DIGITALNE STRUKTURE 7

funkcije dveh spremenljivk:


n 2
22 → 22 = 16 .
Na vseh 4 bitih je ista funkcija
Fi = f (Ai , Bi ) i = 0, .., 3 .

Izvedbi 74381 in 74382 pa imata samo 8 najbolj uporabnih funkcij.

74181 ima negirane vhode in izhode, kot kaže slika:

Uporabi dodatnih negatorjev na vhodih in izhodih se lahko izognemo na


sledeč način:

1. pri logičnih funkcijah uporabimo dualno funkcijo. Dualna funkcija (glej


Preklopna vezja) k funkciji f (x1 , x2 , ..., xn ) je fd = f (x1 , x2 , ..., xn ).
Npr., dualna funkcija konjunkciji je disjunkcija, in obratno. Podobno
velja za XOR in ekvivalenco. Pokaži.
2. pri aritmetičnih funkcijah negiramo Cn in Cn+4 . Npr., pri seštevanju
vzamemo S=1001, toda Cn =1, namesto 0.

Na ta način lahko odmislimo, da so vhodi in izhodi negirani.

Primer.

Seštevanje 3 in 2 z ALE 74181. Na levi je običajna operacija, na desni pa


operacija, ki jo izvede ALE. Sešteje obe negirani števili (eniški komplement),
prišteje Cn = 1, izhod pa je spet negiran, tako da dobimo pravi rezultat.

1100
0011 3 + 1101
+ 0010 +2 + 1 Cn
0101 5 1 1010
(Cn+4 ) 0 0101 = 5
DIGITALNE STRUKTURE 8

Vidimo, da omenjeni princip deluje.

Seštevanje in odštevanje z ALE

Seštevanje z ALE ’181:

Odštevanje z ALE’181:

Večbitni seštevalnik v VHDL-u:

library ieee;
use ieee.std_logic_1164.all, ieee.numeric_std.all;
DIGITALNE STRUKTURE 9

entity NBitAdder is
generic (n: natural := 4);
port( A, B: in std_logic_vector(n-1 downto 0);
Cin: in std_logic;
Sum: out std_logic_vector(n-1 downto 0);
Cout: out std_logic);
end entity NBitAdder;

architecture unsgned of NBitAdder is -- unsigned je rezervirano


signal result: unsigned(n downto 0);
signal carry: unsigned(n downto 0);
begin
carry <= (0 => Cin, others => ’0’);
result <= (’0’ & unsigned(A)) + (’0’ & unsigned(B)) + carry;
Sum <= std_logic_vector(result(n-1 downto 0));
Cout <= result(n);
end architecture unsgned;

Carry Lookahead

To je tehnika seštevanja, ki je hitrejša kakor seštevanje s preprostim “ripple”


razširjanjem prenosa. Ideja je v tem, da z dodatno logiko paralelno tvorimo
bite prenosa; s tem povečamo hitrost na račun porabe elementov.

Princip: Vsi izhodi (sn−1 , .., s0 , cn , ..c1 ) so funkcije samo vhodov (an−1 , .., a0 , bn−1 , .., b0 , c0 ).
Prenos se ne razširja, ampak se izračuna direktno iz vhodov.

Če pogledamo enobitni seštevalnik:


DIGITALNE STRUKTURE 10

cizh = ab ∨ acvh ∨ bcvh = ab ∨ cvh (a ∨ b),

vidimo, da imamo izhodni prenos, kadar


- a = b = 1, (se generira) oz.
- cvh =1, in a = 1 ali b = 1 (se razširja)

Vpeljemo signala

Gi = ai bi (“generate”), ter

Pi = ai ∨ bi (“propagate”).

Prenos v i-ti stopnji je torej

ci+1 = ai bi ∨ ci (ai ∨ bi ) = Gi ∨ ci Pi .

Za n = 4 stopnje:

c1 = G0 ∨ P0 c0
c2 = G1 ∨ P1 c1
= G1 ∨ P1 (G0 ∨ P0 c0 )
= G1 ∨ P1 G0 ∨ P1 P0 c0
c3 = G2 ∨ P2 c2
= G2 ∨ P2 (G1 ∨ P1 G0 ∨ P1 P0 c0 )
= G2 ∨ P2 G1 ∨ P2 P1 G0 ∨ P2 P1 P0 c0
c4 = ...
= G3 ∨ P3 G2 ∨ P3 P2 G1 ∨ P3 P2 P1 G0 ∨ P3 P2 P1 P0 c0

Splošen zapis:

ci+1 = Gi ∨ Pi Gi−1 ∨ Pi Pi−1 Gi−2 ∨ ... ∨ Pi Pi−1 ..P0 c0


i−1
_
= Gi ∨ (&ik=j+1 Pk )Gj ∨ c0 &ik=0 Pk
j=0
DIGITALNE STRUKTURE 11

Carry look-ahead generator (CLG) 74182 je bil zasnovan za ALE’181 (vsi


signali P in G so invertirani).
DIGITALNE STRUKTURE 12

CLG:
P = P0 P1 P2 P3
G = G3 ∨ P3 G2 ∨ P3 P2 G1 ∨ P3 P2 P1 G0

Vmesni prenosi:
Cn+x = G0 ∨ P0 c0
Cn+y = G1 ∨ P1 G0 ∨ P1 P0 c0
Cn+z = G2 ∨ P2 G1 ∨ P2 P1 G0 ∨ P2 P1 P0 c0

Npr. Cn+x ima zakasnitev 4, ker ima G0 zakasnitev 3 ter P0 c0 zakasnitev 3


(P0 zakasnitev 2), tj. 3 + 1(ALI vrata).
DIGITALNE STRUKTURE 13

P in G služita za večnivojski “carry-lookahead”.

You might also like