Unità Aritmetico-Logica A ritmethic L ogic U nit E l unità che esegue le operazioni aritmetiche e le operazioni logiche AND e OR 1-bit ALU : è una componente dell ALU che produce un singolo bit sui 32 della parola del MIPS. Per le operazioni logiche la 1-bit ALU realizza i blocchi logici: AND-gate, OR-gate e NOT-gate. Un selettore (multiplexer) permette di operare la scelta tra le due operazioni logiche AND e OR. Operazione a 0 b 1 Quando il segnale di controllo Operazione è 0 viene eseguita la AND tra a e b, quando è 1 viene eseguita la OR.
Addizione Quandi si esegue l addizione bit-a-bit sulla parola di 32 bit, con l eccezione del bit0, si deve tener conto di un eventuale riporto 0000000000000000 0001 1 1 1 1 0 0 1 1 0 1 0 0 riporto 0000000000000000 0000 1 0 1 1 1 1 0 0 1 0 1 1 + 0000000000000000 0000 0 1 1 0 1 0 0 1 1 0 1 0 = 0000000000000000 0001 0 0 1 0 0 1 1 0 0 1 0 1 La 1-bit ALU che esegue l addizione ha in ingresso, oltre ai due bit da sommare, anche un bit che indica il riporto. R-in a b + Somma R-out Poiché il riporto dovrà essere propagato come input per la somma dei due bit successivi, si deve prevedere anche un secondo valore in uscita che rappresenta il riporto da propagare.
a b R-in R-out Somma 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 Le configurazioni in cui la funzione R-out vale 1 sono: 0 1 1 a b R-in 1 0 1 a b R-in b R-in 1 1 0 a b R-in a R-in 1 1 1 a b R-in a b R-out = a R-in + b R-in + a b R-in a R-out b
Le configurazioni in cui la funzione Somma vale 1 sono: 0 0 1 a b R-in 0 1 0 a b R-in 1 0 0 a b R-in 1 1 1 a b R-in Somma = a b R-in + a b R-in + a b R-in + a b R-in Per la funzione Somma, si può anche verificare che: Somma = R-out (a + b + R-in) + a b R-in Infatti Somma = R-out eccetto nelle configurazioni 000 in cui R-out = 0 = Somma 111 in cui R-out = 1 = Somma Nella configurazione: 000 (a + b + R-in) = 0 e a b R-in = 0 111 a b R-in =1 In tutte le altre configurazioni: (a + b + R-in) = 1 (c e sempre almeno un 1) e a b R-in = 0 (c e sempre almeno uno 0).
R-in Operazione a 0 1 b + 2 R-out R-in Operazione ALU0 Output-0 ALU1 Output-1 ALU31 Output-31
Sottrazione a - b = a + ( b + 1) Cosa accade se R-in per ALU0 viene posto uguale a 1? Anziché aumentare il numero di ingressi del multiplexer, possiamo aggiungere un selettore e un ingresso Binvert. Binvert R-in Operazione 0 1 0 1 + 2 Funzione Binvert R-in Operazione Sottrazione a - b 1 1 2
Set on Less Than Per eseguire questa istruzione si devono poter azzerare tutti i bit dal bit-1 al bit-31 ed assegnare al bit-0 il valore: 1 se A < B 0 altrimenti Nell ipotesi che NON ci sia overflow A < B A - B < 0 (A - B) è negativo bit-31 di (A - B) =1 ALU0 0 ALU1 0 ALU31
Test di overflow Casi di overflow: (A - B) > 0 e bit-31 di (A - B) = 1 oppure (A - B) < 0 e bit-31 di (A - B) = 0 Ovvero: bit-31(a) = 0, bit-31(b) = 1 bit-31(a - B) = 1 oppure bit-31(a) = 1, bit-31(b) = 0 bit-31(a - B) = 0 Per realizzare il controllo di overflow è sufficiente agire sulla componente ALU 31 e produrre l uscita overflow = a b output + a b output Ottenuto il valore della funzione overflow, è possibile correggere anche la realizzazione della funzione Set, tenendo conto del valore di overflow. a31 b31 out31 overflow Set 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 1 1 1 0 1 0 0 1 1 1 0 1 0 1 1 1 0 0 0 1 1 1 0 1 Set = overflow output + overflow output
0 1 0 1 + 2 3 a 31 b 31 operazione Output 31 Set Set Test di overflow Binvert R-in Operazione Funzione 0 0 0 AND 0 0 1 OR 0 0 2 addizione 1 1 2 sottrazione 1 1 3 less
Binvert R-in Bnegate Operazione Funzione Controllo 0 0 0 0 AND 0 00 0 0 0 1 OR 0 01 0 0 0 2 addizione 0 10 1 1 1 2 sottrazione 1 10 1 1 1 3 less 1 11
Test di uguaglianza A = B A B = 0
Operazione A B ALU R-out zero output overflow Problema del riporto Con lo schema precedente l ALU 31 deve aspettare il riporto calcolato dall ALU30, che deve aspettare quello calcolato dall ALU29, La propagazione dei riporti crea un ritardo. Teoricamente è possibile tener conto di tutte le configurazioni dei 32 bit e costruire una rete a due livelli, ma.
Addizionatore veloce Si noti prima che considerando le possibili configurazioni delle prime due coppie di bit, è possibile prevedere il valore del riporto in ingresso per ALU1 e ALU2 a0 b0 r0 r1 0 0 0 0 0 0 1 0 0 1 0 0 r1 = a0 r0 + b0 r0 + a0 b0 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 a1 b1 r1 r2 0 0 0 0 0 0 1 0 0 1 0 0 r2 = a1 r1 + b1 r1 + a1 b1 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 In generale: r(i+1) = ai ri + bi ri + ai bi = (ai + bi) ri + ai bi
r(i+1) = (ai + bi) ri + ai bi Siano pi = ai + bi fattore di propagazione gi = ai bi fattore di generazione Allora r(i+1) = pi ri + gi Si noti che se gi =1 allora r(i+1) =1, viene generato un riporto indipendentemente dal valore di pi ri. Se gi = 0 la generazione del riporto dipende invece dal fattore di propagazione pi, il riporto precedente viene propagato in avanti. I riporti r1, r2, r3, e r4 possono essere espressi come r1 = g0 + p0 r0 r2 = g1 + p1 r1 = g1 + p1 (g0 + p0 r0) = g1 + p1 g0 + p1 p0 r0 r3 = g2 + p2 r2 = g2 + p2 (g1 + p1 g0 + p1 p0 r0) = g2 + p2 g1 + p2 p1 g0 + p2 p1 p0 r0 r4 = g3 + p3 r3 = g3 + p3 (g2 + p2 g1 + p2 p1 g0 + p2 p1 p0 r0) = g3 + p3g2 + p3p2 g1 + p3 p2 p1 g0 + p3p2 p1 p0 r0 Si possono usare queste espressioni per operare sui primi 4 bit in modo piu veloce. Piu in generale, si potrebbe dividere la parola in blocchi di 4 bit, velocizzare ciascun blocco e poi comporre i blocchi come già visto precedentemente (composizione delle 1-bit ALU).
Output 0 3 R1 Output 4 7 R2 Output 8 11 R3 Output 12 15 R4 E chiaramente preferibile ripetere la stessa velocizzazione applicata ai 4 blocchi di 1-bit ALU associando i blocchi appena costruiti 4 a 4. Si tratta di esprimere R1, R2, R3, R4 in funzione di nuovo fattori di propagazione (Pi) e generazione (Gi) che possono essere calcolati dai singoli blocchi.
P0 G0 Output 0-3 R1 P3 G3 Output 12-15 R4 Il calcolo dei valori Pi e Gi è abbastanza complesso. Esempio R1 = r4 = g3 + p3 g2 + p3 p2 g1 + p3 p2 p1 g0 + p3 p2 p1 p0 r0 = G0 + P0 r0