Il 0% ha trovato utile questo documento (0 voti)
28 visualizzazioni19 pagine

Lez6 Alu Last

Il documento descrive la costruzione di un'Unità Logica Aritmetica (ALU) a 1 bit e la sua estensione a 64 bit, evidenziando le operazioni fondamentali come somma, sottrazione, confronto e test di uguaglianza. Viene spiegato come implementare la sottrazione utilizzando il complemento a due e come gestire il segnale di overflow. Infine, si discute il controllo delle operazioni attraverso segnali di controllo per ottimizzare le funzioni dell'ALU.

Caricato da

tuttialtri
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
28 visualizzazioni19 pagine

Lez6 Alu Last

Il documento descrive la costruzione di un'Unità Logica Aritmetica (ALU) a 1 bit e la sua estensione a 64 bit, evidenziando le operazioni fondamentali come somma, sottrazione, confronto e test di uguaglianza. Viene spiegato come implementare la sottrazione utilizzando il complemento a due e come gestire il segnale di overflow. Infine, si discute il controllo delle operazioni attraverso segnali di controllo per ottimizzare le funzioni dell'ALU.

Caricato da

tuttialtri
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

COSTRUZIONE DI UNA

ARITHMETIC LOGIC UNIT (ALU)


(V. PHRV1, APPENDICE A.5)

Roberto Giorgi, Università di Siena, C122L03, Slide 1


Full Adder a 1 bit

a Sum
b
CarryIn

sum = a Å b Å CarryIn = a Å (b Å CarryIn )


CarryOut = a × b + a × CarryIn + b × CarryIn CarryOut

Roberto Giorgi, Università di Siena, C122L03, Slide 2


Realizzazione di ALU a 1-bit
• AND e OR

Roberto Giorgi, Università di Siena, C122L03, Slide 3


Semplice ALU a 1-bit
Operation
CarryIn 2 ALU a 1-bit
Operation
a 2
0 a CarryIn
Result
b
1 Result CarryOut

b 2

CarryOut

Operation Function
0 AND
1 OR
2 ADD

Roberto Giorgi, Università di Siena, C122L03, Slide 4


Costruire una ALU a 64 bit
2
2
da 1 a 64 bit

Un sommatore costruito in questo modo e’ chiamato


“sommatore con riporto seriale”

Problema:
il risultato e’ disponibile solo dopo che ALU63
ha ricevuto il carry
Altre implementazioni “con riporto parallelo” o “Carry Look Ahead”
superano questo problema (v. Lezione-06 e PHRV1 appendice A.6)

Roberto Giorgi, Università di Siena, C122L03, Slide 5


Supporto per la sottrazione (a – b)
• Approccio: fare a + (-b)
• Usare la rappresentazione in complemento a due
semplifica la logica necessaria per fare la negazione: -b = ~b+1
(inverto il bit e sommo 1)

1
Binvert Operation
CarryIn 2

a
0

1
Result

b 0 2

CarryOut
Roberto Giorgi, Università di Siena, C122L03, Slide 6
(inverto tutti i bit e poi sommo 1)

(*) numero senza segno traslato di 2N-1 (es 1101-> 101=5 –> 5-8=-3)
Roberto Giorgi, Università di Siena, C122L03, Slide 7
Roberto Giorgi, Università di Siena, C122L03, Slide 8
Roberto Giorgi, Università di Siena, C122L03, Slide 9
Roberto Giorgi, Università di Siena, C122L03, Slide 10
Roberto Giorgi, Università di Siena, C122L03, Slide 11
Roberto Giorgi, Università di Siena, C122L03, Slide 12
Supporto per la slt e per il test di uguaglianza

• Funzione set-on-less-than (slt)


• Se a < b produce 1, altrimenti 0

• Idea: usare la sottrazione


(a-b) < 0 implica a < b

• Per vedere se (a-b) e’ negativo basta che verifico se il bit piu’ significativo vale 1

Supporto per il test di uguaglianza


• Ci servira’ per supportare le condizioni degli statement if/while/for
per decidere se devo eseguire quanto segue o «saltare» a un altro pezzo di codice

• Se a == b allora produco 1, altrimenti 0

• Idea: usare nuovamente la sottrazione


(a - b) = 0 implica a = b

à In entrambi i casi si puo’ si puo’ sfruttare la rete per fare la sottrazione

Roberto Giorgi, Università di Siena, C122L03, Slide 13


B in v e r t O p e r a tio n

2
Supporto alla slt nella ALU
C a r r y In

a
0

• Inserisco il caso “3” al multiplexer,


corrispondente a slt 1

• Nelle ALU 0,1, ..., N-1 R e s u lt

questo ingresso e’ collegato


b 0 2

a un filo “Less” che costituisce 1

un “bypass” ingresso-uscita L ess 3


ALU 0
• Nella ALU N-1 inoltre • C a r ryO u t

(bit piu’ significativo), • B in v e r t O p e r a tio n


controllo il valore di uscita ‘set’ • C a r ryIn 2
che indica come e’ andato
l’esito del confronto a<b a
0
ALU N-1

R e s u lt

• Mentre per gli interi in complemento a b 0 2

due e’ semplice sapere quando il


risultato e’ negativo (segnale ‘set’), in
1

generale per rivelare l’overflow L e ss 3

ho bisogno di una rete logica Set


un poco piu’ complessa ([Link] finale)
O v e rf lo w
O v e r flo w
d e te c tio n

Roberto Giorgi, Università di Siena, C122L03, Slide 14


Supporto alla slt fuori dalla ALU
Binvert O peration
• Se il confronto ha esito positivo 2
il filo less, manda sul bit meno
significativo il risultato (1) a0
b0
C arryIn
ALU0 R esult0
Less
CarryO ut

• Aggiustiamo il CarryIn0: a1
b1
C arryIn
ALU1 R esult1
0 Less
CarryO ut
Operation Function CarryIn0 BInvert
0 AND 0 0
a2 C arryIn
1 OR 0 0 b2 ALU2 R esult2
0 Less
2 ADD 0 0 CarryO ut

2 SUB 1 1
3 SLT 1 1
CarryIn

a63 C arryIn R esult63


b63 ALU 63 S et
à CarryIn0 = BInvert 0 Less O verflow

Roberto Giorgi, Università di Siena, C122L03, Slide 15


Test per l’uguaglianza (eq)

• La rete fornisce
Binvert Operation

il valore 1 quando
tutti i bit del risultato a0 CarryIn Result0
sono a zero, in quanto:
b0 ALU0
Less
(a-b)==0 --> a==b CarryOut

• Chiameremo tale
segnale “Zero” e ci serve
a1 CarryIn Result1
b1 ALU1
per decidere se l’esito del 0 Less
Zero
confronto e’ positivo o
CarryOut

meno
a2 CarryIn Result2
b2 ALU2
0 Less
CarryOut

Result63
a63 CarryIn
b63 ALU31 Set
0 Less Overflow
•Nota: “Zero” vale 1
quando il risultato e’ zero!

Roberto Giorgi, Università di Siena, C122L03, Slide 16


ALUcontrol

• Aggiungiamo quindi la funzione «EQ» che sfrutta la sottrazione


e produce un ulteriore filo di uscita dalla ALU («Zero»)
• I fili di ingresso {Operation,Binvert} possono essere raggruppati
nei fili chiamati «ALUcontrol» come mostrato in tabella

Operation Function BInvert ALUcontrol Function

0 AND 0 Binvert à ALUcontrol2 0 00 AND


Operation1 à ALUcontrol1 0 01 OR
1 OR 0
Operation0 à ALUcontrol0
2 ADD 0 0 10 ADD
2 SUB 1 1 10 SUB
3 SLT 1 1 11 SLT
2 EQ 1 1 10 EQ

Roberto Giorgi, Università di Siena, C122L03, Slide 17


Blocco “ALU a 64-bit” – situazione finale
Binvert Operation

ALUcontrol
3
a0 CarryIn Result0 64
b0 ALU0
Less a
CarryOut
Zero
64
ALU ALU Result
a1 CarryIn Result1 64
b1 ALU1 Overflow
0 Less b
CarryOut Zero

CarryOut
Result
a2 CarryIn Result2
b2 ALU2
0 Less
CarryOut

Result63
a63 CarryIn
b63 ALU63 Set
0 Less Overflow

CarryOut
Overflow lo possiamo dare
Roberto Giorgi, Università di Siena, C122L03, Slide 18 per implicito nel blocco ALU
Rete di Overflow
• Nella somma o differenza di due interi con segno
in complemento a due, ho OVERFLOW se:
• I due operandi hanno lo stesso segno MA il risultato ha segno opposto
a31 b31 Result31
Binvert Cout31

a31 b31 Result31


Binvert Cout31

Overflow
O v e rf lo w Overflow
d e te c tio n

• Le istruzioni add, addi, sub causano overflow:


pero’ l’approccio RISC-V e’ di lasciare al software questa verifica

Roberto Giorgi, Università di Siena, C122L03, Slide 19

Potrebbero piacerti anche