...

Lezione 7 ALU: Moltiplicazione e divisione Sommario Sommatori ad

by user

on
Category: Documents
30

views

Report

Comments

Transcript

Lezione 7 ALU: Moltiplicazione e divisione Sommario Sommatori ad
Architettura degli Elaboratori e delle Reti
Lezione 7
ALU: Moltiplicazione e divisione
F. Pedersini
Dipartimento di Scienze dell’Informazione
Università degli Studi di Milano
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 1/34
Sommario
!
Sommatori ad anticipazione di riporto
!
Addizionatori modulari
!
Moltiplicatori – approccio hardware
!
Moltiplicatori – approccio firmware
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 2/34
Addizionatori modulari
!
Moduli elementari, collegabili in cascata.
"
!
Complessità del circuito tollerata per piccoli n
(es. n=4)
r0,in
Cammino critico C:
"
"
M moduli da 4 bit: C = 6·M
N = 16 bit # M = N/4
# C = 6·N/4 = 24
A propagazione di riporto:
N = 16 bit
# C = 3·N = 48
A.A. 2008/09
s
a
FA4
b
r3,out
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 3/34
Struttura sommatore a blocchi
!
Vogliamo 32 bit ! 8 sommatori elementari
"
Come collegarli tra loro?
r3 = g3 + p3r2 =
= g3 + p3(g2 + p2g1 + p2p1g0 + p2p1p0r0) =
= (g3+ p3g2+ p3p2g1+ p3p2p1g0) + p3p2p1p0·r0 =
= G0 + P0·r0
r0,in
s
a
dove:
P 0 = p 3 p2 p 1 p 0
G0 = g3 + p3g2 + p3p2g1 + p3p2p1g0
FA4
b
P0 G0
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 4/34
Struttura di un sommatore su 16 bit
C1 = G0 + P0·r0
C2 = G1 + P1·C1 =
= G1 + P1·G0 + P1·P0·r0
C3 = G2 + P2·C2 =
= G2 + P2·G1 + P2·P1·G0 +
+ P2·P1·P0·r0
rout = C4 = G3 + P3·C3 =
= G3 + P3·G2 + P3·P2·G1 +
+ P3·P2·P1·G0 + P3·P2·P1·P0·r0
Cammino critico = 6+6 = 12
• CLA + prop: 6M = 24
• Prop: 3N = 48
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 5/34
Sommario
!
Sommatori ad anticipazione di riporto
!
Addizionatori modulari
!
Moltiplicatori – approccio hardware
!
Moltiplicatori – approccio firmware
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 6/34
Moltiplicazione binaria
Moltiplicando
1 1 0 1 1 x (2710)
1 1 1 = (710)
___________________
111111
1 1 0 1 1 Moltiplicatore
11011–
11011––
___________________
1 0 1 1 1 1 0 1 (18910)
!
Come fare il calcolo
con circuiti logici ?
"
Possiamo scomporre
l’operazione in due stadi:
"
Primo stadio: prodotti
parziali
!
"
Secondo stadio: somme
!
Prodotto
A.A. 2008/09
si mette in AND ciascun bit
del moltiplicatore con i bit
corrispondenti del
moltiplicando
si effettuano le somme (full
adder) dei bit sulle righe
contenenti i prodotti parziali
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 7/34
La matrice dei prodotti parziali
In binario i prodotti parziali sono degli AND
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 8/34
Il circuito che effettua i prodotti
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 9/34
Somma – prime 2 righe dei prodotti parziali
1011 x
0111 =
___________
111
1011 +
1011–
___________
1
100001 +
1011––
___________
1101101
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 10/34
Somma della terza riga
11011 x
111 =
___________
11111
11011 +
11011–
___________
1
1010001 +
11011–
___________
10111101
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 11/34
Somma prodotti parziali – circuito completo
Overflow: A e B su: N bit # P su: 2N bit
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 12/34
Valutazione del cammino critico
!
N=4
"
Ritardo AND = 1
"
Ritardo HA = 1
Ritardo FA = 3
"
!
1
Cammino critico
= 20
2
5
8
14
17
11
17
20
A.A. 2008/09
20
20
17
12
© A. Borghese, F. Pedersini – DSI, UniMI
6
2
1
L 7 – 13/34
Sommario
!
Sommatori ad anticipazione di riporto
!
Addizionatori modulari
!
Moltiplicatori – approccio hardware
!
Moltiplicatori – approccio firmware
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 14/34
Approcci tecnologici alla ALU
Approcci tecnologici alla costruzione di ALU:
! Hardware
"
!
Ad ogni operazione corrisponde un circuito combinatorio specifico
Firmware o microprogrammato
"
"
"
Circuiti specifici solamente per alcune operazioni elementari
Le operazioni complesse vengono sintetizzate mediante combinazione di
operazioni elementari, eseguendo uno specifico algoritmo (implementato
mediante microprogrammazione)
Approccio “controllore-datapath”
!
!
La ALU contiene una unità di controllo e dei registri
FIRMWARE vs. HARDWARE:
"
Hardware: più veloce ma più costosa per complessità dei circuiti
!
"
La soluzione HW conviene per le operazioni frequenti
Firmware: meno veloce ma più flessibile. Potenzialmente adatta a modificare o
inserire nuove procedure.
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 15/34
Presentazione seriale/parallela
!
Presentazione parallela
"
an
Tipico dell’approccio HW
!
Viene utilizzata un’unica copia del circuito aritmetico
Il tempo di calcolo cresce linearmente con il numero
di bit
non si possono utilizzare tecniche di carry look-ahead
Presentazione seriale a gruppi
s0
s1
sn
..
.
!
"
b0
b1
Gli operandi vengono presentati 1 bit alla
volta, del quale viene eseguita l’operazione e
fornito il risultato
!
ALU
..
.
Presentazione seriale
"
!
..
.
!
!
a0
a1
Tutti i bit vengono presentati
simultaneamente;
La ALU genera tutti i bit del risultato
bn
a0 a1 …an
I bit vengono presentati a gruppi di k bit (es.
k=8: bytes)
ALU
s0 s1…sn
b0 b1 …bn
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 16/34
Operazione di SHIFT (scorrimento)
Dato A={an an-1 … a1 a0} ! sk(A)=A! , a!j = aj–k
"
k: shift amount
!
!
Tempo comparabile con quello della somma
Effettuato al di fuori delle operazioni selezionate dal MUX della ALU, da un
circuito denominato Barrel Shifter
an
an-1
an-2
a1
a0
an-1
an-2
an-3
a0
0
0
an
an-1
a2
!"#$%&'&!(&)#&*
a1
!"#$%&'&)(&)#&*
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 17/34
La moltiplicazione firmware
Algoritmo della moltiplicazione – firmware
Si analizzano sequenzialmente i
bit del moltiplicatore
se il bit è = 1
! moltiplicando in posizione
opportuna
se il bit è = 0
! 0 in posizione opportuna
A.A. 2008/09
11011x
101=
_______________
11011+
00000–
11011––
_______________
10000111
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 18/34
Moltiplicazione firmware
!
Utilizzo un
registro prodotto da
2n bit, inizializzato a 0
!
Ciclo iterativo: per ogni bit
del moltiplicatore
Se bit = 1 ! sommo il
moltiplicando al prodotto
shift a SX di 1 bit del
moltiplicando
"
"
A.A. 2008/09
11011x
111=
_______________
11111
11011+
110110
_______________
1
1010001+
1101100
_______________
10111101
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 19/34
L’algoritmo
Inizio (P = 0, k = 0)
A
B
P
11011x
111=
_______________
11111
11011+
110110
_______________
1
1010001+
1101100
_______________
10111101
no
bk=1 ?
sì
P"A+P
shift A a sx ,
k=k+1
k=n ?
no
sì
Fine
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 20/34
Implementazione circuitale
A (moltiplicando) + shift sx – 64 bit
B (moltiplicatore) – 32 bit
ALU 64
add
shift
P (prodotto) – 64 bit
scrivi
32
Controllo
UC riceve 32
bit ma ne legge
1 alla volta
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 21/34
Implementazione circuitale – modifica
A (moltiplicando) + shift a sx – 64 bit
ALU 64
P (prodotto) – 64 bit
A.A. 2008/09
B (moltiplicatore)
+ shift a dx – 32 bit
1
add
shift dx
shift sx
scrivi
Controllo
© A. Borghese, F. Pedersini – DSI, UniMI
Ad ogni iterazione:
B " shift_dx(B)
UC riceve sempre
LSB
L 7 – 22/34
Esempio
A,B: 4 bit – P: 8 bit
2x3=6
0010 x 0011 = 0110
0000 0100
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 23/34
Implementazione alternativa: idea
P0
!
Soltanto metà dei bit del
registro moltiplicando vengono
utilizzati ad ogni iterazione
"
shift
Ad ogni iterazione si aggiunge 1 bit al
registro prodotto
P1
!
IDEA
Si caricano i risultati parziali in P
nella metà SINISTRA
" Si sposta la somma dei prodotti
parziali (in P) verso destra ad ogni
iterazione
"
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
shift
P2
L 7 – 24/34
Seconda implementazione
A – moltiplicando, 32 bit
B – moltiplicatore
+ shift dx – 32 bit
add
ALU 32
shift dx
P – prodotto + shift dx – 64 bit
A.A. 2008/09
scrivi
shift dx
Controllo
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 25/34
Implementazione ottimizzata
Numero di bit del prodotto corrente
+
Numero di bit da esaminare di B
=
64 bit: costante ad ogni iterazione
$
elimino il registro moltiplicatore: B
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
11011x
111=
_______________
11111
11011+
11011_______________
1
1010001+
11011- _______________
10111101
L 7 – 26/34
Circuito ottimizzato
!
Situazione alla prima iterazione
A – moltiplicando, 32 bit
ALU 32
P – prodotto –
64 bit
add
scrivi
Moltiplicatore
B – 32 bit
shift dx
Controllo
+ shift dx
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 27/34
L’algoritmo ottimizzato
Inizio (P = 0, k = 0)
P
A
11011x
B
111=
_______________
11111
11011+
110110
_______________
1
1010001+
1101100
_______________
10111101
sì
bk=0?
no
P"A+P
shift [P|B] a dx
k=k+1
k=n ?
no
sì
Fine
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 28/34
Esempio di esecuzione alg. ottimizzato
A, B: 4 bit – P: 8 bit
2x3=6
0010 x 0011 = 0000 0110
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 29/34
Divisione intera - n bit (unsigned)
!
Algoritmo: n+1 iterazioni
1.
2.
3.
4.
5.
K=n
Sottraggo il divisore moltiplicato per 2K dal dividendo
Se differenza > 0 ! dividendo = dividendo – divisore x 2K
K=K–1
Se K > 0, torna a 2 altrimenti FINE
7 : 2 = 3, resto 1
00000111 –
00100000 =
bit4 quoz.: 0
"
"
00000111 –
00100 =
bit1 quoz.: 1
A.A. 2008/09
"
0111 : 0010 = 0011, resto 0001
00000111 –
0010000 =
bit3 quoz.: 0
"
"
00000011 –
0010 =
bit0 quoz.: 1
© A. Borghese, F. Pedersini – DSI, UniMI
00000111 –
001000 =
bit2 quoz.: 0
"
quoz: 00011
resto: 1
L 7 – 30/34
Divisione intera (unsigned) : n=32 bit
!
Dividendo, divisore, quoziente, resto: 32 bit
"
Remainder: inizializzato con divisore x 232
A.A. 2008/09
" servono 64 bit
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 31/34
Divisione intera (unsigned) : n=32 bit
!
Esempio di funzionamento:
divisore x 24
dividendo
resto
quoziente
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 32/34
Divisione intera (unsigned) : n=32 bit
!
Progetto ottimizzato:
"
"
"
Allineo il dividendo senza shiftare il divisore " ALU a soli 32 bit
Se differenza < 0 ! ripristina di Remainder (+= divisor),
SLL remainder, R0 = 0
altrimenti:
! SLL remainder, R0 = 1
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
L 7 – 33/34
Divisione intera (unsigned) : n=32 bit
!
Esempio, struttura ottimizzata:
divisore
resto
A.A. 2008/09
© A. Borghese, F. Pedersini – DSI, UniMI
dividendo
quoziente
L 7 – 34/34
Fly UP