Sei sulla pagina 1di 19

ALU

17 / 10 / 2017
[PH] Appendice B.5
Punto della situazione
Oggi possiamo cominciare a «costruire» il nostro
primo componente del calcolatore!
Modello di calcolo
Il nostro obiettivo finale
Alla fine del corso saprete come funziona una versione semplificata
del processore MIPS
ALU
ALU (Arithmetic Logic Unit):
circuito combinatorio all’interno del processore
per l’esecuzione di istruzioni macchina di tipo
aritmetico/logiche:
• Funzioni logiche (AND, OR, NOR)
• Somme (add)
• Sottrazioni (sub)
• Istruzioni di confronto (slt, beq, bne)
La ALU
La ALU (a 32 bit) prende in ingresso 2 stringhe
a 32 bit:

a = a31… ai…a2 a1a0

b = b31… bi…b2 b1b0

e un segnale di controllo ALU operation a 4


bit, per decidere l’operazione da effettuare.

Fornisce in uscita:
La stringa Result a 32 bit e due singoli bit:
Zero, Overflow (e eventualmente CarryOut).
Una ALU (Arithmetic Logic Unit)
• Costruiremo una ALU ad 1 bit e ne utilizzeremo Binvert CarryIn Operation

32 copie in catena per gestire parole di 32 bit a0 CarryIn

• Useremo un opportuno Multiplexer per scegliere


b0 ALU0 Result0
Less
CarryOut

quale operazione eseguire. Sarà l’unità di


controllo a settare opportunamente i segnali di a1
b1
CarryIn
ALU1 Result1

controllo 0 Less
CarryOut

• Partiamo da una ALU che supporti le operazioni a2 CarryIn

di AND e OR b2
0
ALU2
Less
Result2

CarryOut

CarryIn

a31 CarryIn Result31


b31 ALU31 Set
0 Less Overflow
Aggiungiamo la somma
I numeri sono rappresentati in complemento a 2
Il sommatore ad un bit /1-bit adder è il seguente:

CarryIn

Sum

CarryOut
CarryOut

CarryOut = abCarryIn + abCarryIn + abCarryIn + abCarryIn =


= abCarryIn + abCarryIn + abCarryIn +abCarryIn + abCarryIn
+ abCarryIn =
Sum

L’espressione non può essere semplificata: ci vorrebbero 4 porte AND


e 12 letterali!
Però: Sum è vera quando una sola variabile è vera, oppure tutt’e 3.

Sum = a  b  CarryIn (verificare)


1-bit adder con porte XOR
Sum = a  b  CarryIn

= ( a  b)  CarryIn + (a  b)
CarryIn
Verificare per
esercizio
a
Sum
b

CarryOut
Addizione di stringhe a 32 bit
ALU i
ci
c32 c31 ci c2 c1
a31… ai…a2 a1a0 + ai si
ALU i
b31… bi…b2 b1b0 = bi

s31 … si … s2 s1 s0
ci+1
si bit di somma
ci bit di riporto / carry
Implementazione della ALU a 32 bit
Operation CarryIn Operation
CarryIn

a0 CarryIn
a Result0
ALU0
0 b0
CarryOut

1
Result a1 CarryIn
Result1
ALU1
b1
CarryOut
2
b
a2 CarryIn
Result2
ALU2
b2
CarryOut CarryOut

1-bit adder

a31 CarryIn
Result31
ALU31
b31
Sottrazione con la ALU (dalle slide 6)
Per eseguire A − B, la ALU eseguirà A + (− B).
A= an-1an-2 … a1 a0 e B= bn-1bn-2 … b1 b0

− B = bn-1bn-2 … b1 b0 + 1
cn cn-1 cn-2 c1 cn cn-1 cn-2 c1 1 c0=1
an-1an-2 … a1 a0 + an-1an-2 … a1 a0 +
bn-1bn-2 … b1 b0 + bn-1bn-2 … b1 b0 +
1=
sn-1 sn-2 … s1 s0
sn-1 sn-2 … s1 s0
e poi controlla l’overflow
E per la differenza (a – b) ?
• La differenza si ottiene a+ (-b).
• Per le proprietà del Complemento a 2, per ottenere l’opposto
di b, possiamo
– invertire i bit di b e
– sommare 1
Binvert Operation
• Una buona soluzione: CarryIn

– Binvert e
a
– Porre a 1 CarryIn di ALU0 0

(ricordiamolo quando
1
collegheremo le ALU) Result

b 0 2

CarryOut
Riepilogo e riferimenti
• Abbiamo costruito una componente che può
eseguire le seguenti operazioni: AND, OR,
somma, sottrazione.
• La completeremo in modo da supportare
anche: confronto <, test per l’uguaglianza e
NOR.
[PH] Appendice B.5
Esercizi
• Realizzare un multiplexer 4:1 utilizzando solo
multiplexer 2:1 e porte NOT (svolto)
• Esercizi da svolgere da [P]: 3.1, 3.5, 3.9, 3.10,
3.11; 4.1, 4.2, 4.3, 4.13 (vedi Domanda 2
appello febbraio 16 che segue), 4.19.
• Esercizi da svolgere da [PH], appendice B (C
nella terza edizione): B.7, B.8, B.9, B.10, B.11,
B.12, B. 14, B.24.
Appello 19 febbraio 2016
Domanda 2.
Un semi-addizionatore (o half-adder) è una rete logica con due
ingressi a e b e due uscite s e c, in cui s è il bit di somma di a con
b, e c il relativo riporto (in uscita). In altre parole, un semi-
addizionatore differisce da un addizionatore (completo) per il
fatto che non riceve un riporto in ingresso.
a. Mostrare la tavola di verità di un semi-addizionatore.
b. Costruire un circuito logico che realizzi un semi-addizionatore
utilizzando soltanto porte AND, OR, NOT, nel minor numero.
c. Costruire un circuito logico che realizzi un semi-addizionatore
utilizzando soltanto due multiplexer e una porta NOT.

Variante c. Costruire un circuito logico che realizzi un semi-


addizionatore utilizzando soltanto 3 multiplexer.
Appello 20 giugno 2016
Domanda 2. (17 punti)
Un semi-addizionatore (o half-adder) è una rete logica con due ingressi
a e b e due uscite s e c, in cui s è il bit di somma di a con b, e c il
relativo riporto (in uscita). In altre parole, un semi-addizionatore
differisce da un addizionatore (completo) (full-adder) per il fatto che
non riceve un riporto in ingresso.
a. Mostrare la tavola di verità di un semi-addizionatore e quella di un
addizionatore (completo).
b. Supponendo di avere a disposizione un circuito logico HA che
realizza un semi-addizionatore (di cui non ci interessa la
realizzazione interna!), costruire un circuito logico che realizza un
addizionatore (completo) utilizzando come elementi combinatori i
semi-addizionatori e le porte logiche AND, OR, NOT, nel minor
numero possibile. Una realizzazione classica è ottenuta con 2 semi-
addizionatori (in cascata) e 1 porta OR. Giustificare la risposta.

Potrebbero piacerti anche