Reti logiche
Circuiti aritmetici
Capitolo 5: Circuiti aritmetici
Reti Logiche
Contemporary Logic Design
Randy H. Katz
University of California, Berkeley
May 1993
Trasparenze tradotte da:
Luciano Lavagno
Universita’ di Udine
Settembre 1998
© R.H. Katz 5-1
Motivazioni
Reti logiche
Circuiti aritmetici
Circuiti aritmetici sono un’ottimo esempio di progetto di reti logiche
• Decisioni di progetto sull’asse spazio/tempo
Calcolare velocemente richiede reti piu’ complesse e
quindi piu’ spazio
Esempio: circuito di carry lookahead
• Unita’ logico-aritmetica
Componente fondamentale di processori moderni
Usata nel ciclo principale di quasi tutte le istruzioni
© R.H. Katz 5-2
Riassunto del capitolo
Reti logiche
Circuiti aritmetici
• Rappresentazione dei numeri binari
Modulo e segno, complemento ad uno, complemento a due
• Somma binaria
Rivediamo il full-adder...
• Progetto di ALU
• Circuiti BCD
• Circuito moltiplicatore combinatorio
• Esempio di progetto: moltiplicatore ad 8 bit
© R.H. Katz 5-3
Numerazione binaria
Reti logiche
Circuiti aritmetici
Rappresentazione dei numeri negativi
La rappresentazione dei numeri positivi e’ la stessa in tutti i casi
La differenza fondamentale e’ come sono rappresentati i numeri
negativi
Tre metodi principali:
modulo e segno
complemento ad uno
complemento a due
In questo capitolo:
supporremo una parola a 4 bit
si possono rappresentare 16 valori
circa meta’ sono positivi e meta’ sono negativi
© R.H. Katz 5-4
Reti logiche
Circuiti aritmetici
Numerazione binaria
Rappresentazione in modulo e segno
-7
-6
-5
1111
1110
+0
+1
0000
0001
1101
0010
+2
+
-4
1100
0011
+3
0 100 = + 4
-3
1011
0100
+4
1 100 = - 4
-2
1010
0101
1001
-1
+5
-
0110
1000
-0
0111
+6
+7
Bit piu’ significativo (MSB) e’ il segno:
0 = positivo (o zero), 1 = negativo
Tre bit meno significativi sono il modulo: da 0 (000) a 7 (111)
Intervallo per n bit = +/-2n-1 -1
Due rappresentazioni per lo 0!!
© R.H. Katz 5-5
Reti logiche
Circuiti aritmetici
Numerazione binaria
Modulo e segno
Somma e sottrazione sono difficili
Bisogna confrontare i moduli per decidere il segno
Complemento ad uno
Se N e’ un numero positivo, allora N e’ l’opposto,
ottenuto complementando ad 1
n
N = (2 - 1) - N
2 4 = 10000
-1
= 00001
Esempio: complemento ad 1 di 7
1111
-7
=
Metodo piu’ rapido:
0111
1000
= -7 in cpl. ad 1
basta calcolare il complemento bit a bit
0111 -> 1000
© R.H. Katz 5-6
Reti logiche
Circuiti aritmetici
Numerazione binaria
Complemento ad uno
-0
-1
-2
1111
1110
+0
+1
0000
0001
1101
0010
+2
+
-3
1100
0011
+3
0 100 = + 4
-4
1011
0100
+4
1 011 = - 4
-5
1010
0101
1001
-6
+5
-
0110
1000
-7
0111
+6
+7
Sottrazione realizzata con complemento ad 1 e somma
Ci sono ancora due rappresentazioni dello 0!
Cio’ causa ancora dei problemi
Complessita’ aggiuntiva per la somma
© R.H. Katz 5-7
Reti logiche
Circuiti aritmetici
Numerazione binaria
Complemento a due
-1
-2
-3
Come il
complem. ad 1
ma spostato
di una posizione
in senso orario
1111
1110
+0
+1
0000
0001
1101
0010
+2
+
-4
1100
0011
+3
0 100 = + 4
-5
1011
0100
+4
1 100 = - 4
-6
1010
0101
1001
-7
+5
-
0110
1000
-8
0111
+6
+7
Solo una rappresentazione dello 0
Un numero negativo in piu’ dei positivi
© R.H. Katz 5-8
Reti logiche
Circuiti aritmetici
Numerazione binaria
Numeri in complemento a due
n
N* = 2 - N
4
2 = 10000
Esempio: complemento a 2 di 7
sub 7 =
0111
1001 = repr. of -7
Esempio: complemento a 2 di -7
4
2 = 10000
sub -7 =
1001
0111 = repr. of 7
Metodo abbreviato:
Complemento a 1 = complemento ad 1 (bit a bit) + 1
0111 -> 1000 + 1 -> 1001 (rappresentazione di -7)
1001 -> 0110 + 1 -> 0111 (rappresentazione di 7)
© R.H. Katz 5-9
Reti logiche
Circuiti aritmetici
Numerazione binaria
Somma e sottrazione binarie
Modulo e segno
Quando i segni sono
uguali, basta sommare
ed il segno del risultato
e’ uguale a quelli degli
operandi
Quando i segni sono
diversi, bisogna sottrarre
ed il segno del risultato
dipende da quello
del numero
con il modulo piu’ grande
4
0100
-4
1100
+3
0011
+ (-3)
1011
7
0111
-7
1111
4
0100
-4
1100
-3
1011
+3
0011
1
0001
-1
1001
© R.H. Katz 5-10
Reti logiche
Circuiti aritmetici
Numerazione binaria
Somma e sottrazione binarie
Calcoli in complemento ad uno
4
0100
-4
1011
+3
0011
+ (-3)
1100
7
0111
-7
10111
“Riporto all’inizio”
1
1000
4
0100
-4
1011
-3
1100
+3
0011
1
10000
-1
1110
“Riporto all’inizio”
1
0001
© R.H. Katz 5-11
Numerazione binaria
Reti logiche
Circuiti aritmetici
Somma e sottrazione binarie
Calcoli in complemento ad uno
Perche’ il riporto all’inizio funziona?
E’ come sottrarre 2n e sommare 1
n
n
M - N = M + N = M + (2 - 1 - N) = (M - N) + 2 - 1
n
n
-M + (-N) = M + N = (2 - M - 1) + (2 - N - 1)
n
n
= 2 + [2 - 1 - (M + N)] - 1
(M > N)
M+N<2
n-1
dopo il riporto all’inizio:
n
= 2 - 1 - (M + N)
questa e’ la rappresentazione corretta di -(M + N)
in complemento ad uno!
© R.H. Katz 5-12
Reti logiche
Circuiti aritmetici
Numerazione binaria
Somma e sottrazione binarie
Calcoli in complemento a due
4
0100
-4
1100
+3
0011
+ (-3)
1101
7
0111
-7
11001
Se il riporto sul segno e’
uguale al riporto in uscita,
ignorare il riporto
Se il riporto sul segno e’
diverso dal riporto in uscita,
overflow!
4
0100
-4
1100
-3
1101
+3
0011
1
10001
-1
1111
Questo meccanismo piu’ semplice di somma rende il complemento
a due la rappresentazione piu’ usata nei calcolatori
© R.H. Katz 5-13
Reti logiche
Circuiti aritmetici
Numerazione binaria
Somma e sottrazione binarie
Calcoli in complemento a due
Perche’ possiamo ignorare il riporto in uscita?
-M + N se N > M:
M* + N = (2
n
- M) + N = 2
n
+ (N - M)
Ignorare il riporto in uscita e’ come sottrarre 2n
-M + -N se N + M < = 2n-1
n
n
-M + (-N) = M* + N* = (2 - M) + (2 - N)
n
n
= 2 - (M + N) + 2
Ignorando il riporto, questa e’ la rappresentazione corretta
in complemento a due di -(M + N)!
© R.H. Katz 5-14
Reti logiche
Circuiti aritmetici
Numerazione binaria
Condizioni di overflow
Sommare due numeri negativi ed ottenerne uno positivo
oppure due positivi ed ottenerne uno negativo
-1
-2
1111
0001
-4
1101
0010
1100
-5
0100
1010
0101
1001
-7
0110
1000
-8
0111
+6
+7
5 + 3 = -9
-3
+2
0011
1011
-6
-2
+1
0000
1110
-3
-1
+0
+3
-4
1111
+1
0000
1110
0001
1101
0010
1100
-5
1011
+4
+5
+0
1010
-6
0110
1000
-8
0011
+3
0100
+4
0101
1001
-7
+2
0111
+5
+6
+7
-7 - 2 = +7
© R.H. Katz 5-15
Reti logiche
Circuiti aritmetici
Numerazione binaria
Condizioni di overflow
5
0111
0101
-7
1000
1001
3
0011
-2
1100
-8
1000
7
10111
Overflow
Overflow
5
0000
0101
-3
1111
1101
2
0010
-5
1011
7
0111
-8
11000
Non e’ overflow
Non e’ overflow
Overflow quando il riporto sul segno e’ diverso
dal riporto in uscita
© R.H. Katz 5-16
Reti logiche
Circuiti aritmetici
Reti per somma binaria
Half Adder
In complemento a due, basta la somma
Ai Bi Sum Carry
0 0
0
0
0 1
1
0
1 0
1
0
1 1
0
1
Ai
0
Bi
0 0
1
1
1
1
0
Sum = Ai Bi + Ai Bi
Ai
0
Bi
0
0
1
0
1
0
1
Carry = Ai Bi
= Ai + Bi
Ai
Sum
Schema dell’half-adder
Bi
Carry
© R.H. Katz 5-17
Reti logiche
Circuiti aritmetici
Reti per somma binaria
Full Adder
A3 B3
Sommatore multi-bit
in cascata
A2 B2
A1 B1
+
+
S3
C3
A0 B0
+
S2
C2
+
S1
C1
S0
di solito si sommano numeri con piu’ di un bit
quindi serve il full adder (con riporto)
© R.H. Katz 5-18
Reti logiche
Circuiti aritmetici
Reti per somma binaria
Full Adder
A
0
0
0
0
1
1
1
1
B
0
0
1
1
0
0
1
1
CI
0
1
0
1
0
1
0
1
S
0
1
1
0
1
0
0
1
CO
0
0
0
1
0
1
1
1
AB
CI 00 01 11 10
S
0
0
1
0
1
1
1
0
1
0
AB
CI 00 01 11 10
CO
0
0
0
1
0
1
0
1
1
1
S = CI xor A xor B
CO = B CI + A CI + A B = CI (A + B) + A B
© R.H. Katz 5-19
Reti logiche
Circuiti aritmetici
Reti per somma binaria
Full Adder/Half Adder
Metodo standard: 6 porte
A
B
A
B
S
CI
CI
CO
A
B
Realizzazione con half-adder: 5 porte
A
B
S
A+B
Half
AdderCO A B
S
A + B + CI
Half
Adder CO CI (A + B)
S
CI
+
CO
A B + CI (A xor B) = A B + B CI + A CI
© R.H. Katz 5-20
Reti logiche
Circuiti aritmetici
Reti per somma binaria
Sommatore/sottrattore
A 3 B 3 B3
A 2 B2 B2
0 1 Sel
A
B
CO +
CI
A 1 B1 B1
0 1 Sel
0 1 Sel
A
B
CO +
CI
A 0 B 0 B0
A
B
CO +
CI
0 1 Sel
A
B
CO +
S
S
S
S
S3
S2
S1
S0
CI
Add/Subtrac t
Overflow
A - B = A + (-B) = A + B + 1
© R.H. Katz 5-21
Reti logiche
Circuiti aritmetici
Reti per somma binaria
Circuito di carry lookahead
Ritardo critico: propagazione del riporto dagli stadi precedenti
segnale
che si
stabilizza
piu’ tardi
@0
@0
A
B
@1
@N+1
@N CI
@0
@0
CO
@N+2
A
B
@1
ritardo di
due porte per
calcolare CO
C0
A0
sommatore
a 4 stadi
B0
S0 @2
0
C1 @2
A1
B1
S1 @3
1
C2 @4
A2
B2
2
S2 @5
C3 @6
A3
B3
3
S3 @7
C4 @8
somma e riporto
finali
© R.H. Katz 5-22
Reti per somma binaria
Reti logiche
Circuiti aritmetici
Circuiti di carry lookahead
Ritardo critico: propagazione del riporto dagli stadi precedenti
1111 + 0001
caso peggiore
per somma
T0: ingressi del sommatore validi
T2: riporto in uscita stadio 0 (C1)
T4: riporto in uscita stadio 1 (C2)
T6: riporto in uscita stadio 2 (C3)
T8: riporto in uscita stadio 3 (C4)
2 ritardi per calcolare
la somma
ma l’ultimo riporto e’ valido
solo dopo 6 ritardi
© R.H. Katz 5-23
Reti logiche
Circuiti aritmetici
Reti per somma binaria
Circuiti di carry lookahead
Carry Generate Gi = Ai Bi
generare il riporto se A = B = 1
Carry Propagate Pi = Ai xor Bi
riporto in uscita = riporto in ingresso
Sum e Carry possono essere espressi in funzione di Gi e Pi
Si = Ai xor Bi xor Ci = Pi xor Ci
Ci+1 = Ai Bi + Ai Ci + Bi Ci
= Ai Bi + Ci (Ai + Bi)
= Ai Bi + Ci (Ai xor Bi)
= Gi + Ci Pi
© R.H. Katz 5-24
Reti per somma binaria
Reti logiche
Circuiti aritmetici
Circuiti di carry lookahead
Riscriviamo la logica del riporto come segue:
C1 = G0 + P0 C0
C2 = G1 + P1 C1 = G1 + P1 G0 + P1 P0 C0
C3 = G2 + P2 C2 = G2 + P2 G1 + P2 P1 G0 + P2 P1 P0 C0
C4 = G3 + P3 C3 = G3 + P3 G2 + P3 P2 G1 + P3 P2 P1 G0 + P3 P2 P1 P0 C0
Ogni equazione puo’ essere rappresentata su due livelli
Le variabili di ingresso sono gli addendi ed il riporto di ingresso
allo stadio 0!
© R.H. Katz 5-25
Reti logiche
Circuiti aritmetici
Reti per somma binaria
Carry Lookahead Implementation
Ai
Bi
Pi @ 1 ritardo
Ci
Si @ 2 ritardi
Sommatore con uscite
Generate e Propagate
Gi @ 1 ritardo
Logica di lookahead
sempre piu’ complicata!
C0
P0
C1
G0
C2
G1
P2
G2
G1
C0
P0
P1
P2
P3
G0
P1
P2
C0
P0
P1
G0
P1
C0
P0
P1
P2
C3
G0
P1
P2
P3
G1
P2
P3
G2
P3
C4
G3
© R.H. Katz 5-26
Reti logiche
Circuiti aritmetici
Reti per somma binaria
Circuiti di carry lookahead
Carry lookahead in cascata
La logica di
lookahead genera
tutti i riporti
C0
A0
S0 @ 2
B0
C1 @ 3
Le somme possono
essere calcolate
molto piu’ in fretta!
A1
S1 @ 4
B1
C2 @ 3
A2
S2 @ 4
B2
C3 @ 3
A3
S3 @ 4
B3
C4 @ 3
© R.H. Katz 5-27
Reti logiche
Circuiti aritmetici
Reti per somma binaria
Circuiti di carry lookahead
Carry lookahead in cascata
4
4
4
C16 A [15-12] B[15-12] C12
4-bit Adder
P G
4 @8
S[15-12]
@2 @3
C16
@5
P3
C4
G3
4
4
A [11-8] B[1 1-8] C
8
4-bit Adder
P G
4 @8
S[1 1-8]
@5
C3
@2 @3
P2
G2
4
A [7-4]
B[7-4]
4-bit Adder
P G
4 @7
S[7-4]
@5
C2
A [3-0]
B[3-0]
4-bit Adder
P G
C4
4
C0
@0
@4
S[3-0]
@4
@2 @3
P1 G1
4
4
C1
@2 @3
P0
G0
C0
Lookahead Carry Unit
P3-0 G3-0
@3
C0
@0
@5
sommatori a 4 bit con lookahead interno
unita’ di lookahead di secondo livello estende il
calcolo del riporto a 16 bit
© R.H. Katz 5-28
Reti logiche
Circuiti aritmetici
Reti per somma binaria
Sommatore a selezione del riporto
Logica ridondante per calcolare il riporto piu’ in fretta
C8
C4
C8
4¥
2:1 Mux
C8
4-Bit Adder
[7:4]
0
Adder
Low
4-Bit Adder
[7:4]
1
Adder
High
1 0 1 0 1 0
S7
S6
S5
1 0
S4
C4
C0
4-Bit Adder
[3:0]
S3
S2
S1
S0
Calcolare le somme degli MSB in parallelo
una somma suppone riporto = 0
l’altra suppone riporto = 1
© R.H. Katz 5-29
Progetto di unita' logico-aritmetica (ALU)
Reti logiche
Circuiti aritmetici
Esempio di ALU
M = 0, operazioni logiche bit-a-bit
S1 S0
0 0
0 1
1 0
1 1
Funzione
Fi = Ai
Fi = not Ai
Fi = Ai xor Bi
Fi = Ai xnor Bi
Commento
Copiare ingresso A in uscita
Copiare complemento di A in uscita
Calcolare XOR di A, B
Calcolare XNOR di A, B
M = 1, C0 = 0, operazioni aritmetiche
0 0
F=A
Copiare ingresso A in uscita
0 1
F = not A
Copiare complemento di A in uscita
1 0
F = A piu’ B
Sommare A e B
1 1
F = (not A) piu’ B
Sommare B ed il cpl. ad 1 di A
M = 1, C0 = 1, operazioni aritmetiche
0
0
1
1
0
1
0
1
F = A piu’ 1
F = (not A) piu’ 1
F = A piu’ B piu’ 1
F = (not A) piu’ B piu’ 1
Incrementare A
Complemento a due di A
Sommadi A piu’ B piu’ 1
B meno A
Operazioni aritmetiche e logiche
Non tutte le operazioni servono, ma sono il “risultato automatico”
della logica interna
© R.H. Katz 5-30
Reti logiche
Circuiti aritmetici
Progetto di unita' logico-aritmetica (ALU)
M
0
Esempio di ALU
Progetto tradizionale
S1
0
S0
0
0
1
1
0
1
1
0
0
0
1
1
0
1
1
0
0
0
1
1
0
1
1
Tavola di verita’ ed espresso
.i 6
.o 2
m
23 termini prodotto! .ilb
.ob fi
.p 23
111101
110111
1-0100
Equivalente a
1-1110
25 porte
1001010111-10001
010-01
-11011
011-11
--1000
0-1-00
--0010
0-0-10
-0100001-0-0001000-1-1-1-1
--1-01
--0-11
--110--011.e
s1 s0 ci ai bi
co
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
01
01
01
01
01
1
1
Ci
X
X
X
X
X
X
X
X
X
X
X
X
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
Ai
0
1
0
1
0
0
1
1
0
0
1
1
0
1
0
1
0
0
1
1
0
0
1
1
0
1
0
1
0
0
1
1
0
0
1
1
Bi
X
X
X
X
0
1
0
1
0
1
0
1
X
X
X
X
0
1
0
1
0
1
0
1
X
X
X
X
0
1
0
1
0
1
0
1
Fi
0
1
1
0
0
1
1
0
1
0
0
1
0
1
1
0
0
1
1
0
1
0
0
1
1
0
0
1
1
0
0
1
0
1
1
0
Ci+1
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
0
0
0
1
0
1
0
0
0
1
1
0
0
1
1
1
1
1
0
1
© R.H. Katz 5-31
Reti logiche
Circuiti aritmetici
Progetto di unita' logico-aritmetica (ALU)
Esempio di ALU
Realizzazione multi-livello
.model alu.espresso
.inputs m s1 s0 ci ai bi
.outputs fi co
.names m ci co [30] [33] [35] fi
110--- 1
-1-11- 1
--01-1 1
--00-0 1
\S1
.names m ci [30] [33] co
\Bi
-1-1 1
--11 1
M
S1
111- 1
Bi
.names s0 ai [30]
01 1
S0
10 1
Ai
.names m s1 bi [33]
111 1
.names s1 bi [35]
0- 1
-0 1
.end
[35]
[33]
Ci
[33]
[30]
[33]
Co
M
Ci
[30]
[30]
M
Ci
\Co
Ci
[30]
[33]
\Co
[30]
[35]
\Co
\[30]
\[35]
Fi
12 porte
© R.H. Katz 5-32
Progetto di unita' logico-aritmetica (ALU)
Reti logiche
Circuiti aritmetici
Esempio di ALU
Realizzazione piu’ “intelligente” multi-livello
S1 Bi
S0
Ai
M
X1
A1
A2
Ci
S1 = 0 blocca Bi
Serve nelle operazioni su Ai
Lo stesso succede a Ci se M = 0
Esegue somma se M = 1
Bi, Ci vanno alle porte XOR X2, X3
X2
S0 = 0, X1 passa A
S0 = 1, X1 passa A
A3
A4
Modo aritmetico:
Gli ingressi della porta OR sono
Ai Ci e Bi (Ai xor Ci)
O1
Ci+1
X3
Modo logico:
Fi
8 porte (ma 3 sono XOR)
Gli XOR in cascata generano
l’uscita da Ai e Bi
© R.H. Katz 5-33
Progetto di unita' logico-aritmetica (ALU)
Reti logiche
Circuiti aritmetici
74181 ALU TTL
S3
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
Selection
S2 S1 S0
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
M=1
Logic Function
F = not A
F = A nand B
F = (not A) + B
F=1
F = A nor B
F = not B
F = A xnor B
F = A + not B
F = (not A) B
F = A xor B
F=B
F = A+ B
F=0
F = A (not B)
F = AB
F=A
M = 0, Arithmetic Functions
Cn = 0
Cn = 1
F = A minus 1
F=A
F = A B minus 1
F = AB
F = A (not B) minus 1
F = A (not B)
F = minus 1
F = zero
F = A plus (A + not B)
F = A plus (A + not B) plus 1
F = A B plus (A + not B)
F = A B plus (A + not B) plus 1
F = A minus B minus 1
F = (A + not B) plus 1
F = A + not B
F = A minus B
F = A plus (A + B)
F = (A + not B) plus 1
F = A plus B
F = A plus (A + B) plus 1
F = A (not B) plus (A + B)
F = A (not B) plus (A + B) plus 1
F = (A + B)
F = (A + B) plus 1
F=A
F = A plus A plus 1
F = A B plus A
F = AB plus A plus 1
F= A (not B) plus A
F = A (not B) plus A plus 1
F=A
F = A plus 1
© R.H. Katz 5-34
Reti logiche
Circuiti aritmetici
Progetto di unita' logico-aritmetica (ALU)
74181 ALU TTL
Notate che il tipo dei riporti di ingresso ed uscita (attivo alto)
e’ OPPOSTO rispetto agli ingressi (attivi bassi)
19
21
23
2
18
20
22
1
A3
A2
A1
A0
B3
B2
B1
B0
7 Cn
8 M
181
F3
F2
F1
F0
13
11
10
9
A=B 14
Cn+4 16
G 17
P 15
S3 S2 S1 S0
3 4 5 6
6
15
2
4
5
14
1
3
182
P3
P2
P1
P0
G3
G2
G1
G0
P
G
7
10
Cn+z 9
Cn+y 11
Cn+x 12
13 Cn
Per fortuna il generatore di carry lookahead
usa anch’esso riporti attivi alti
© R.H. Katz 5-35
Reti logiche
Circuiti aritmetici
Progetto di unita' logico-aritmetica (ALU)
ALU a 16 bit con carry lookahead
19 A3
21 A2 181 F3
23 A1
F2
2 A0
F1
18 B3
F0
20 B2
A=B
22 B1
Cn+4
1 B0
G
7 Cn
P
8M
S3S2S1S0
3 4 5 6
19
21
23
2
18
20
22
1
7
8
A3
A2
A1
A0
B3
B2
B1
B0
Cn
M
13
11
10
9
14
16
17
15
F3 13
F2 11
F1 10
F0 9
A=B 14
Cn+4 16
G 17
P 15
181
S3S2S1S0
3 4 5 6
19 A3
21 A2
23 A1
2 A0
18 B3
20 B2
22 B1
1 B0
7 Cn
8M
C16
181 F3
F2
F1
F0
A=B
Cn+4
G
P
13
11
10
9
14
16
17
15
6 P3182
15 P2
2 P1
P
4 P0
G
5 G3
14 G2 Cn+z
1 G1 Cn+y
3 G0 Cn+x
13 Cn
7
10
9
11
12
S3 S2S1S0
3 4 5 6
C0
19
21
23
2
18
20
22
1
7
8
A3
A2
A1
A0
B3
B2
B1
B0
Cn
M
181 F3
F2
F1
F0
A=B
Cn+4
G
P
13
11
10
9
14
16
17
15
S3S2S1S0
3 4 5 6
© R.H. Katz 5-36
Reti logiche
Circuiti aritmetici
Somma BCD
Rappresentazione BCD
Cifre da 0 a 9 rappresentate come numeri da 0000 a 1001 in binario
Somma:
5 = 0101
3 = 0011
1000 = 8
5 = 0101
8 = 1000
Problema
quando la somma
di una cifra e’ piu’ di 9
1101 = 13!
Soluzione: sommare 6 (0110) se la somma e’ piu’ di 9!
5 = 0101
9 = 1001
8 = 1000
7 = 0111
1101
6 = 0110
1 0011 = 1 3 in BCD
1 0000 = 16 in binario
6 = 0110
1 0110 = 1 6 in BCD
© R.H. Katz 5-37
Reti logiche
Circuiti aritmetici
Somma BCD
Progetto di un sommatore
A3
B3
CO FA
CI
S
A1
11XX
A2
1X1X
A2
B2
CO FA
S3
B1
CO FA
CI
A0
CI
CO FA
S
S
S2
S1
B0
CO FA
S
S
CO FA
Cout
CI
A1
CI
Cin
S
CI
0
S0
Sommare 0110 alla somma quando e’ maggiore di 1001 (11XX o 1X1X)
© R.H. Katz 5-38
Reti logiche
Circuiti aritmetici
Moltiplicatore combinatorio
Idea base
moltiplicando
moltiplicatore
1101 (13)
* 1011 (11)
prodotto di 2 numeri a 4 bit
e’ un numero ad 8 bit
1101
1101
prodotti parziali
0000
1101
10001111
(143)
© R.H. Katz 5-39
Reti logiche
Circuiti aritmetici
Moltiplicatore combinatorio
Accumulazione prodotti parziali
S7
A3
A2
A1
A0
B3
B2
B1
B0
A2 B0
A2 B0
A1 B0
A0 B0
A3 B1
A2 B1
A1 B1
A0 B1
A3 B2
A2 B2
A1 B2
A0 B2
A3 B3
A2 B3
A1 B3
A0 B3
S6
S5
S4
S3
S2
S1
S0
© R.H. Katz 5-40
Reti logiche
Circuiti aritmetici
Moltiplicatore combinatorio
Accumulazione prodotti parziali
A 3 B3 A 3 B2 A 2 B3 A 3 B1 A 2 B2 A 1 B3 A 3 B0 A 2 B1 A 1 B2 A 0 B3 A 2 B0 A 1 B 1 A 0 B 2 A 0 B 1 A 1 B 0 A 0 B0
FA
FA
S7
HA
FA
FA
FA
FA
HA
FA
S6
S5
S4
S3
HA
HA
FA
S2
S1
S0
Notare l’uso dei carry-out in parallelo
per le somme di ordine piu’ elevato
12 sommatori: se sono full adder, servono 6 porte ciascuno = 72 porte
16 porte formano i prodotti parziali
totale = 88 porte!
© R.H. Katz 5-41
Reti logiche
Circuiti aritmetici
Moltiplicatore combinatorio
Un’altra rappresentazione del circuito
Sum In
X
Blocco base: full adder + and
Cin
Y
FA
A B
CO CI
S
Cout
Sum Out
A3
B0
A3 B0
C
B1
A3 B1
C
B2
A3 B2
C
B3
C
A2 B2
C
S
S
S
A2 B3
A1 B3
A0 B3
S
S
S
S
P6
P5
P4
P3
A0
A2 B0
A1 B0
A0 B0
S
C
A1 B1
C
A1 B2
C
A1
C
A2 B1
A3 B3
C
P7
S
S
S
A2
S
S
C
S
A0 B1
C
S
A0 B2
C
S
P2
P1
P0
Matrice 4 x 4 di blocchi base
© R.H. Katz 5-42
Reti logiche
Circuiti aritmetici
Esempio di progetto: moltiplicatore 8 x 8
Moltiplicatore TTL
A0
A1
A2
A3
B0
B1
B2
B3
14
2
8
4
G
A
13
4 7 6 5 15 1 2 3
A A A A B B B B G
3 2 1 0 3 2 1 0 B
14
2
8
5
Y Y Y Y
7 6 5 4
9 10 11 12
Y6
Y7
Y4
Y5
Y2
Y3
G
A
13
4 7 6 5 15 1 2 3
A A A A B B B B G
3 2 1 0 3 2 1 0 B
Y Y Y Y
3 2 1 0
9 10 11 12
Y0
Y1
Realizzazione con 2 integrati di un moltiplicatore 4 x 4
© R.H. Katz 5-43
Reti logiche
Circuiti aritmetici
Esempio di progetto: moltiplicatore 8 x 8
Decomposizione del problema
Come realizzare la moltiplicazione 8 x 8 usando moltiplicatori 4 x 4?
*
A7-4
A3-0
B7-4
B3-0
A3-0 * B3-0
prodotti ad 8 bit
A7-4 * B3-0
= PP1
A3-0 * B7-4
= PP2
A7-4 * B7-4
P15-12
= PP0
P11-8
= PP3
P7-4
P3-0
P3-0 = PP0 3-0
P7-4 = PP0 3-0 + PP1
+ PP2
+ Carry-in
3-0
3-0
P11-8 = PP1 7-4 + PP2 7-4 + PP3 3-0 + Carry-in
+ Carry-in
P15-12 = PP3 7-4
© R.H. Katz 5-44
Reti logiche
Circuiti aritmetici
Esempio di progetto: moltiplicatore 8 x 8
Calcolo dei prodotti parziali
A6
A7
A4
A5
B6 B4
B7 B5
4 x 4 Multiplier
74284/285
PP3
7-4
PP3
3-0
A2
A3
A0
A1
B6 B4
B7 B5
4 x 4 Multiplier
74284/285
PP2
7-4
PP2
3-0
A6
A4
A5
A7
B2 B0
B3 B1
4 x 4 Multiplier
74284/285
PP1
7-4
PP1
3-0
A2
A0
A1
A3
B2 B0
B3 B1
4 x 4 Multiplier
74284/285
PP0
7-4
PP0
3-0
Usare 4 coppie di 74284/285 per creare i 4 prodotti parziali
© R.H. Katz 5-45
Reti logiche
Circuiti aritmetici
Esempio di progetto: moltiplicatore 8 x 8
Sommatore tre-per-volta
Uso intelligente dei riporti in ingresso
Sommare A[3-0], B[3-0], C[3-0]:
FA
C3
FA
A0 B0
A1 B1
A2 B2
A3 B3
C2
FA
C1
FA
FA
FA
S3
S2
S1
FA
C0
0
S0
Circuito di somma a due livelli
Nota: si puo’ usare anche carry lookahead!
© R.H. Katz 5-46
Esempio di progetto: moltiplicatore 8 x 8
Sommatore tre-per-volta con componenti TTL
Reti logiche
Circuiti aritmetici
C3 B3 A3 C2 B2 A2 C1 B1 A1 C0 B0 A0
Cn B A Cn B A
74 183
74 183
Cn+1 S Cn+1 S
Cn B A Cn B A
74 183
74 183
Cn+1 S Cn+1 S
Full Adder
(2 per integrato)
+
B3 A3
G
P
Cn+4
F3
B2 A2
B1 A1
74 181
B0 A0
ALU standard configurata
come sommatore di
secondo livello a 4 bit
(con carry lookahead interno)
Cn
F2
F1
F0
S
3
S
2
S
1
S
0
Notare lo spostamento delle uscite!
© R.H. Katz 5-47
Reti logiche
Circuiti aritmetici
Esempio di progetto: moltiplicatore 8 x 8
Accumulazione dei prodotti parziali
PP1
PP2
PP3
PP3
7
6
PP3
5
PP3
4
PP3
7
7
PP3
PP1
2
PP2
PP2
2
PP1 PP3
6
1
3
Cn B A Cn B A
74183
74183
Cn +1 S Cn +1 S
5
PP3
5
PP0
0
PP2
4
PP1
PP1
4
Cn B A Cn B A
74183
74183
Cn +1 S Cn +1 S
PP2
3
7
PP2
PP0
2
PP1
PP1
2
PP0 PP2
6
1
3
Cn B A Cn B A
74183
74183
Cn +1 S Cn +1 S
5
PP2
1
0
PP1
0
PP0
4
Cn B A Cn B A
74183
74183
Cn +1 S Cn +1 S
+
B3 A3
G
P
Cn +4
F3
B2 A2
B1 A1
74181
B0 A0
Cn
F2
F1
F0
P
15
P
14
P
13
B3 A3
G
P
Cn +4
F3
B2 A2
B1 A1
F2
F1
F0
B3 A3
G
P
Cn +4
F3
P
12
P
11
P
10
P
9
P
8
74181
B0 A0
Cn
B2 A2
B1 A1
74181
B0 A0
Cn
F2
F1
F0
P
7
P
P
5
6
P
4
Basta una cascata di sommatori tre-per-volta
© R.H. Katz 5-48
Reti logiche
Circuiti aritmetici
Esempio di progetto: moltiplicatore 8 x 8
Il sistema completo
A7-0
B7-0
8
8
Partia l Product Calcula tion
4 x 74 284, 742 85
4
4
PP3
7-4
PP3
PP2
3-0
4
4
7-4
PP2
PP1
3-0
4
0
G
P
Cn+4
P
15
P
14
Cn
P
13
7-4
4
PP1
3-0
G
P
Cn+4
P
12
74 181
P
11
P
10
4
4
PP0
PP0
7-4
4
4
2 x 74 183
PP3 PP3 PP3 PP3
7
4
6
5
74 181
4
4
4
3-0
4
2 x 74 183
Cn
P
9
P
8
74 181
P
7
P
6
Cn
P
5
P
4
P
3-0
+
G3 P3 G2 P2 G1 P1 G0 P0
74 182
Cn
Cn+z
Cn+y Cn+x
G
P
Cn+4
+
© R.H. Katz 5-49
Esempio di progetto: moltiplicatore 8 x 8
Calcolo dei circuiti integrati e prestazioni
Reti logiche
Circuiti aritmetici
4 coppie 74284/74285 = 8 integrati
4 74183, 3 74181, 1 74182 = 8 integrati
16 integrati in totale
Calcolo prodotti parziali (74284/285) = 40 ns typ, 60 ns max
Somme intermedie74183) = 9 ns/20ns = 15 ns typ, 33 ns max
Somme di secondo livello con carry lookahead
74LS181: carry G e P = 20 ns typ, 30 ns max
74182: carry di secondo livello = 13 ns typ, 22 ns max
74LS181: formazione delle somme = 15 ns typ, 26 ns max
Totale: 103 ns typ, 171 ns max
© R.H. Katz 5-50
Riassunto del capitolo
Reti logiche
Circuiti aritmetici
Abbiamo esaminato:
• Rappresentazioni dei numeri binari
per i numeri positivi e’ sempre la stessa
la differenza e’ nella rappresentazione dei numeri negativi
complemento a due e’ il piu’ semplice:
una sola rappresentazione per lo zero,
complementazione (sottrazione) un po’ complicata
somma facile
• Reti per somma ad un bit
HA, FA di base
circuiti di carry lookahead
• Progetto di una ALU
specifica e realizzazione
• Sommatori BCD
semplice estensione di sommatori binari
• Moltiplicatori
moltiplicatore 4 x 4: accumulazione prodotti parziali
estensione al caso 8 x 8
© R.H. Katz 5-51
Scarica

Capitolo 5