Estensione di un numero:
aggiungere cifre a sinistra
A volte, vogliamo passare da una rappresentazione di un numero a n bit ad una rappresentazione a m bit, con m > n
Come si sa, aggiungere zeri a sinistra non modifica un numero:
|11011|2= 27
|00011011|2= ancora 27
Questa operazione si chiamaestensione (con zero)
Ma attenzione: per estendere un numero in CP2 senza cambiarlo occorre aggingere a sinistra: 0 se il MSB è 0, ma 1 se il MSB è 1:
|01101|2= +13
|00001101|2= ancora +13
|11001|2= -7
|11111001|2= ancora -7
Questa operazione si chiamaestensione in segno Quali circuiti implementano queste due operazioni?
Blocchi funzionali combinatori
Architettura degli elaboratori - 49 -
verificare!
Blocchi funzionali per estensione
Estensione con zero Estensione in segno Estensione a scelta
E xt
n m
E xt S ig n
n m
E xt
n m
se 0: con zero se 1: in segno
(con m>n)
Blocchi funzionali per estensione (qui, da 16 a 32 bit): implementazione
Estensione con zero
- 51 -
Estensione in segno
0
Estensione a scelta
0 : con zero 1: in segno i0
i15
o0
o31
i0
i15
o0
o31
i0
i15
o0
o31
Esempio
Come sommare un numero A a 16 bit con un numero B a 8 bit?
(senza sengo) Risposta:
E X T
8 16
16
S O M M A a 1 6 b it
16A
B
A+B
Left Shift
(moltiplicazione per 2, 4, 8 …)
Left-shift (di n): spostare le cifre binarie n posti a sinistra
n le cifre più a sinistra scompaiono, e da destra compaiono nzeri Ricorda:
uno shift a sinistra in base 2 di 1 = raddoppio del numero uno shift a sinistra in base 2 di n cifre = moltiplicazione per 2n Notazione: <<
Esempio:
|00011011|2= 27
|00011011|2<< 1 = |00110110|2= 54 ( = 27x2)
|00011011|2<< 2 = |01101100|2= 108 ( = 27x4)
|00011011|2<< 3 = |11011000|2= 216 ( = 27x8) Vale anche in CP2!
|11111011|2= -5
|11111011|2<< 1 = |11110110|2= -10
|11111011|2<< 2 = |11101100|2= -20
Blocchi funzionali combinatori
Architettura degli elaboratori - 53 -
analogo in base 10:
1320 =132x 10 13200 =132x 100
verificare!
Left Shift
(con secondo parametro costante)
Blocchi funzionale per shift: (usano…. zero porte!) Esempi per 4 bit:
X0 X1 X2 X3
Z0 Z1 Z2 Z3 0
4 4
<< 1
X Z = 2X
X0 X1 X2 X3
Z0 Z1 Z2 Z3 0
4 4
<< 2
X Z = 4X
Left-Shift
domande e esercizi
Tempo di commutazione?
quali sono i tempi dei blocchi funzionali visti (“<<1”, “<<2”) ? Overflow?
considerato come una moltiplicazione per 2n left-shift può generare overflow!
come accorgersi se “<<1” fa overflow, per naturali (no segno) ? come accorgersi se “<<2” fa overflow, per naturali (no segno) ? come accorgersi se “<<1” fa overflow, per CP2 ?
come accorgersi se “<<2” fa overflow, per CP2 ? per ciascun caso, realizza un blocco funzionale che prevede un bit ulteriore di uscita “overflow”, che vale 1 sse l’operazione ha generato un overflow.
Left shift a 2 parametri?
realizza un blocco funzionale che prende in input A (n bit), e B (2 bit), e dà in output A<<B
Blocchi funzionali combinatori
Architettura degli elaboratori - 55 -
prossimo lucido
Left Shift
(con secondo parametro variabile)
n n
A A << B
B
k<<
A
nB
2<<1
<<2
<<3
I0 I1
S
U
MUX
I2 I3 n n
n
n n
2 Realizzazione con K = 2
<<
Right Shift
(divisione per 2, 4, 8 …)
Right-shift (di n): spostare le cifre binarie n posti a destra
n le cifre più a destra scompaiono, e da sx compaiono nzeri Ricorda:
uno shift a dx in base 2 di 1 = dimezzamento del numero, per difetto uno shift a dx in base 2 di n cifre = divisione per 2n, per difetto Notazione: >>
Esempio: |00011011|2= 27
|00011011|2>> 1 = |00001101|2= 13 ( = 27 / 2)
|00011011|2>> 2 = |00000110|2= 6 ( = 27 / 4) Per il CP2: l’operazione equivalente è right shift in segno
da sx devono compaiono: zeri se MSB = 0, ma uni se MSB = 1 l’arrotondamento risultante è comunque per difetto
|11110011|2= -13
|11110011|2>> 1 = |11111001|2= -7
|11110011|2>> 2 = |11111100|2= -4
Blocchi funzionali combinatori
Architettura degli elaboratori - 57 -
verificare!
analogo in base 10:
132= 1327/ 10 13=1327/ 100
Circuito per moltiplicazione…
…con secondo termine a 1 bit
A3
A2
C3 N
A
NC = A×B B
MUL
N × 1
Realizzazione (banale!):
(qui, per N = 4)
B
C2
A1 C1
A0 C0
(è un circuito che annulla A quado B vale 0,
altrimenti lascia A inalterato) 1
Somme e prodotti :
quante cifre richiede il risultato?
Osservazioni:
sommandoun numero a n cifre con uno a n cifre, ottengo al massimo un numero a n+1 cifre.
(e la (n+1)-sima cifra è 1 oppure 0, in qualsiasi base) moltiplicandoun numero a n cifre con uno a m cifre, ottengo al massimo un numero a n+m cifre
Blocchi funzionali combinatori
Architettura degli elaboratori - 59 -
XXXX × YYYY = ZZZZZZZZ XXXX +
YYYY = 1ZZZZ al max
(è il possibile overflow!)
vale in in qualsiasi base!
Prodotto: algoritmo delle scuole elementari (ma in base 2)
11001 × 10110 = 0× 11001 + 1× 11001 + 1× 11001 + 0× 11001 + 1× 11001 = 1000100110 B
A B
A × B
1 1 1 1 1
Prodotto con left-shift, estensioni, somme.
Esempio.
Blocchi funzionali combinatori
Architettura degli elaboratori - 61 -
11001 × 10110 = 0× 0000011001 + 1× 0000110010 + 1× 0001100100 + 0× 0011001000 + 1× 0110010000 = 1000100110 B
A × (16+4+2) B A
B A A<<1 A<<2 A<<3 A<<4
= 16+8+4+2+1 A × 1 + A × 2 + A × 4 + A × 8 + A ×16 =
Un circuito per la moltiplicazione a 5 bit
B0 5
MUL 5x1
B1
A
B2
MUL 5x1
MUL B3 5x1
MUL 5x1 B4
MUL 5x1
A × B
10
B
MUL
5
5
5
5
5
5
10
10
10
10
10
<<1
<<2
<<3
<<4
SUM 10bit
SUM 10bit
SUM 10bit
SUM 10bit EXT
EXT
EXT
EXT EXT
Circuito per Moltiplicazione
(fra naturali senza segno) nella pratica
Moltiplicando 2 numeri a n bit, ottengo un numero a 2n bit (in generale) almeno, 2n cifre binarie bastano sempre: niente overflow ! Scomodo!
E’ poco pratico, per un’architettura, rappresentare il risultato di una operazione matematica con un numero di bit diverso dagli operandi Soluzione adottata (a volte):
considerare il risultato di una moltiplicazione come composto da due numeri da n bit ciascuno:
LOW: gli n bit meno significativi HIGH: gli n bit più significativi
Blocchi funzionali combinatori
Architettura degli elaboratori - 63 -
A
nB
n
n n
H L
A×B = H << n + L MUL
2nCircuiti per operazioni in virgola mobile (cenni)
Sono circuiti combinatori più complessi. Tipicamente:
sottocircuiti separati per calcolo di: segno, esponente, mantissa inoltre (per molte op): circuito finale per rinormalizzazione del risultato casi speciali per configurazioni speciali (es, attraverso MUX)
Cenni sulle operazioni più comuni:
Comparatore: possiamo ri-usare il comparatore dei CP2 (come mai?) (più gestione configurazioni speciali, compreso lo 0) Sommatore: exp: il maggiore dei 2 exp.
mantissa e segno: somma (con segno) delle 2 mantisse shiftate.
Rinormalizzazione necessaria alla fine
Moltiplicatore: exp: somma dei 2 exp (più costante).
mantissa: prodotto delle mantisse segno: XOR dei segni(come mai?)
Inverso (1/x): exp: -exp. segno: mantenuto. mantissa: inversione