Professional Documents
Culture Documents
Zapiski predavanj
4 Seštevalniki
Zapis števil
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
Dvojiški komplement
0 0 1 0 (2)
1 1 0 1 (-2 v 1’K)
+ 1
1 1 1 0 (-2 v 2’K)
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
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
A B C S
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0
C = AB , S =A⊕B
Polni seštevalnik
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
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;
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
Aritmetično-logična enota
ALE 74181
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
Primer.
1100
0011 3 + 1101
+ 0010 +2 + 1 Cn
0101 5 1 1010
(Cn+4 ) 0 0101 = 5
DIGITALNE STRUKTURE 8
Odštevanje z ALE’181:
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;
Carry Lookahead
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.
Vpeljemo signala
Gi = ai bi (“generate”), ter
Pi = ai ∨ bi (“propagate”).
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:
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