Sunteți pe pagina 1din 16

Unitatea aritmetico-logica (ALU)

a (32b)

b (32b)

?
?
@
@
- @
- Carry Out
(1b)
@ ALU
?
efectueaz
a: +, , AND, OR, slt
Overflow (1b)
?
Result (a op b) (32b)
?
ALU Op
(3b)

Zero (1b)

Unitatea aritmetico-logica (ALU)

ALU efectueaz
a operatii ntr-un ciclu.
In ALU sunt implementate c
ateva operatii simple (+, , AND, OR, slt), ceea ce
permite efectuarea de cicluri scurte.
Inmultirea si mp
artirea sunt operatii complexe.
Ele ar putea fi implementate ntr-un ciclu, n ALU, dar atunci structura acestuia s-ar
dezvolta foarte mult pe vertical
a, ceea ce ar duce la lungirea ciclului.
De aceea, nmultirea si mp
artirea sunt implementate ntr-o unitate separat
a, folosind
mai multe cicluri ALU, conform unor anumiti algoritmi.
Prezent
am n continuare c
ativa algoritmi de nmultire si mp
artire.

Inmultire - metoda 1

Reproduce metoda clasic


a, aplicat
a manual:

D
I
 P
De ex. pt. a calcula 100 101 = 11110 av
and dim. word-ului n = 4, efectu
am:
110
101
110  Parcurgem I dr. stg. si pentru fiecare 1 copiez D shiftat;
apoi adun.
110
11110  P are dim. max. 2n.

Reformulare cu actiuni mai apropiate de operatiile masin


a:
Shiftez de n ori I la dreapta si D la st
anga;
de fiecare dat
a c
and ultimul bit din I (adic
a I(0)) este 1, adun D la P
(n pozitia curent
a).

Inmultire - metoda 1
D64 , I32 , P64 := 0
repet
a de 32 :
dac
a I(0) = 1
P := P + D

D := D << 1
I := I >> 1



D

64

32

]
JJ
6

<<J >>  I(0)

?
? J 
 + J C
@ @
@


@ALU64

?


64
P

Aplicatie: Calculati 6 5 = 30, n = 4. Completati tabelul urm


ator,
ITUL unei etape:
fiecare coloan
a dubl
a contine valorile registrilor LA SFARS
>>
<<
+

Initial
0101
I
D 0000 0110
P 0000 0000

Iteratia 1
-

Iteratia 2
-

Iteratia 3
-

Iteratia 4
-

Inmultire - metoda 1

Analiza algoritmului:
Se efectueaz
a 32 pasi 3 operatii 100 cicluri pe instructiune.
Analizele statistice arat
a c
a +, sunt de 5 - 100 mai frecvente dec
at ?.
Atunci, cu regula execut
a rapid operatiile frecvente, rezult
a c
a aceast
a implementare
pentru nmultire este acceptabil
a.
Totusi, dorim si putem obtine implement
ari mai eficiente.

Inmultire - metoda 2

Obs. c
a prima jum
atate a lui D este nefolosit
a (e necesar
a ca s
a putem aduna pe 64b).
Solutia: facem D de 32b si n loc s
a deplas
am D deasupra lui P, deplas
am P pe sub D;
ntotdeauna vom aduna D cu prima jum
atate a lui P (adunare pe 32b).

Inmultire - metoda 2
D32 , I32 , P64 := 0
repet
a de 32 :
dac
a I(0) = 1
P[63 32] := P[63 32] + D

P := P >> 1
I := I >> 1


32

32

6


>>  I(0)


?
?

 +
@ @
C
@


@ALU32

>>, w


?
P

64

Aplicatie: Calculati 6 5 = 30, n = 4. Completati tabelul urm


ator,
ITUL unei etape:
fiecare coloan
a dubl
a contine valorile registrilor LA SFARS
>>
+
>>

Initial
0101
I
D 0110
P 0000 0000

Iteratia 1
-

Iteratia 2
-

Iteratia 3
-

Iteratia 4
-

Inmultire - metoda 3 (finala)

Obs. c
a jum
atatea inferioar
a (LO) a lui P se consum
a spre dreapta n acelasi ritm ca I.
Atunci putem pune I n jum
atatea inferioar
a a lui P; n rest este la fel.

Inmultire - metoda 3 (finala)


D32 , P64 := [0, . . . , 0, I32 ]
repet
a de 32 :
dac
a P(0) = 1
P[63 32] := P[63 32] + D

P := P >> 1


32

?
?

 +
@ @
C
@


6
@ALU32
>>,
w
P(0)


?
P

64

Aplicatie: Calculati 6 5 = 30, n = 4. Completati tabelul urm


ator,
ITUL unei etape:
fiecare coloan
a dubl
a contine valorile registrilor LA SFARS
+
>>

Initial
D 0110
P,I 0000 0101

Iteratia 1
-

Iteratia 2
-

Iteratia 3
-

Iteratia 4
-

Inmultirea cu semn

Inmultirea cu semn este asem


an
atoare, cu urm
atoarele diferente:
se lucreaz
a pe 31 biti, deci se fac 31 iteratii, neglij
and bitul de semn;
n final, semnul produsului este XOR ntre bitii de semn ai factorilor
(deci este 1 dac
a au semne diferite (-) si 0 dac
a au acelasi semn (+));
algoritmul 3 (final) functioneaz
a corect si pentru numere cu semn, dar la shiftare
trebuie extins semnul produsului (shiftare aritmetic
a).

Inmultire - algoritmul Booth


Face c
ateva mbun
at
atiri plec
and de la urm
atoarele observatii:
nmultirea cu un grup de 0 din I se reduce la shift
ari;
nmultirea cu un grup de 1 din I: 1 . . . 1 = 2k 1 = 1 0 . . . 0 0 . . . 01 se reduce la
| {z }
| {z }
k

adunarea lui D shiftat cu k pentru bitul 1 din grupul 10 . . . 0 si o sc


adere a lui D
pentru bitul 1 din grupul 0 . . . 01.
D
I
De ex. 0010 ? 0110 = 0010 ? 1000 0010 ? 0010
| {z }
= 1000 0010
Practic shift
am I la dreapta cu c
ate 1 si lu
am decizii n functie de cu ncep/continu
a/se
termin
a grupurile de 1 sau 0 (algoritmul si circuitul seam
an
a cu cel de la metoda 3):
01100 se adaug
a un bit fictiv 0, pentru a avea un context;
01100
00110
00011
00001
00000

se
se
se
se
se

shifteaz
a P;
scade D (ncepe un grup de 1 si se face nt
ai sc
aderea lui D);
shifteaz
a P (continu
a grupul de 1);
adun
a D (se termin
a grupul de 1 si se face adunarea lui D);
shifteaz
a P.

Inmultire - algoritmul Booth


32

z }| {
D32 , P[63, . . . , 1] := [0, . . . , 0, I32 , 0]
repet
a de 32 :
testeaz
a (P(0),P(1))
cazul 01: P[63 32] := P[63 32] + D
cazul 10: P[63 32] := P[63 32] D

P := P >> 1 (shift aritmetic)


Algoritmul si circuitul le adapteaz


a
pe cele de la metoda 3.
Algoritmul functioneaz
a corect si pentru
numere negative si e performant
(se poate folosi pe grupuri de biti pentru
a construi nmultitoare rapide.)

D
I
P
Aplicatie: Calculati 5 6 = 30 (101 110 = 11110), n = 4.
Completati tabelul urm
ator, fiecare linie contine valorile registrilor
ITUL unei etape:
LA SFARS
0000 0110 0
Initial 0101
Iteratia 1
Iteratia 2
Iteratia 3
Iteratia 4

Impartire - metoda 1
Trebuie efectuat D:I C,R

(D = I C + R, R < I).

Metoda 1 reproduce metoda clasic


a, aplicat
a manual, de exemplu:
D = 1001010 1000 = I
1000
1001 = C
10
101
1010
1000
10 = R
D.p.v al masinii:
a vedea dac
a I se cuprinde revine la a sc
adea D I si a compara cu 0 (i.e. a
testa bitul cel mai semnificativ);
dac
a d
a 0, ad
aug
am 1 la C;
dac
a d
a < 0, adun
am D + I la loc si ad
aug
am 0 la C;
ad
augarea unei cifre la C nseamn
a << 1 + cifr
a;
cobor
area cifrei urm
atoare nseamn
a shiftarea lui I pe sub D la dreapta (metoda 1)
sau a lui D pe deasupra lui I la st
anga (metodele 2,3), pentru a face alt
a suprapunere
la sc
adere.

Impartire - metoda 1
32

z }| {
R64 :=D, I64 :=[I, 0, . . . , 0], C32 := 0
repet
a de 33 :
R := R I
dac
a R 0 (i.e. R(63) = 0)
C := C << 1 + 1
altfel
R := R + I
C := C << 1 + 0

I := I >> 1



64

32

]
JJ
6
<<
>>J
?
? J 
 +, J Ctrl
@ @
@


6
@ALU64

R(63)
?


D,R
64


Aplicatie: Calculati 7:3 (adic


a 111:11), n = 4. Completati tabelul urm
ator,
ITUL unei etape:
fiecare coloan
a dubl
a contine valorile registrilor LA SFARS
Initial
0000
C
R,D 0000 0111
>> I 0011 0000

<<

Iteratia 1
-

Iteratia 2
-

Iteratia 3
-

Iteratia 4
-

Iteratia 5
-

Impartire - metoda 1

Obs. c
a doar jum
atate din I contine informatie util
a; atunci, putem folosi un ALU32 si
s
a shift
am R pe deasupra lui I la st
anga.
Apoi obs. c
a algoritmul nu poate produce un 1 n prima faz
a, c
aci rezultatul ar fi prea
lung pentru C si n-ar nc
apea ntr-un registru de 32b (avem n + 1 iteratii, deci am
avea un c
at de forma 1 . . . si nu ar nc
apea).
|{z}
33 cifre

Solutia: se permut
a operatiile de shiftare si sc
adere (se face nt
ai shiftarea si apoi
sc
aderea), elimin
andu-se o iteratie; la sf
arsit restul este n jum
atatea st
ang
a a lui R.
Se obtine metoda 2, dar nu o prezent
am, ci trecem direct la metoda 3, unde n plus
se pune C n jum
atatea dreapt
a alui R - cum R si C se shifteaz
a sincron cu 1 la
st
anga, nu se pierde nimic din R, C.
Singura problem
a este c
a la sf
arsit jum
atatea st
ang
a a lui R este prea shiftat
a si se
shifteaz
a la dreapta cu 1.

Impartire - metoda 3
R64 :=D, I32
R := R << 1
repet
a de 32 :
R[63 32] := R[63 32] I
dac
a R 0 (i.e. R(63) = 0)
R := R << 1 + 1
altfel
R[63 32] := R[63 32] + I
R := R << 1 + 0


R[63 32] := R[63 32] >> 1

32

?
?

 + Ctrl
@ @
@


6
@ALU32
>>,

<<, w
R(63)


?
D (R, C)

64


-

R[63 32] = restul, R[31 0] = c


atul
Aplicatie: Calculati 7:3 (adic
a 111:11), n = 4, complet
and tabelul urm
ator:
Initial 0000 0111
0011

Iteratia 3

R << 1

Iteratia 4

Iteratia 1

R[63 32] >> 1

Iteratia 2