Addizionatori: metodo Carry-Lookahead
Costruzione di circuiti combinatori
Standard IEEE754
Addizionatori
Il circuito combinatorio che implementa l’addizionatore a n bit si basa su1-bit adder collegati in sequenza
- il circuito usa lo stesso metodo usato dall ’algoritmo carta e penna- il segnale deve attraversare più livelli di logica- porte con fan-in limitato
Addizionatori
" La tabella di verità dell ’addizionatore a singolo bit
A B CarryIn Sum CarryOut 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1
1
1 1 1
ABCarryIn 00 01 11 10
0
1
CarryOut
1 1
1 1
ABCarryIn 00 01 11 10
0
1
Sum
Sum = (~A ~B CarryIn) + (~A B ~CarryIn) + (A B CarryIn) + (A ~B ~CarryIn)
CarryOut = (B CarryIn) + (A CarryIn) + A B
1-bit ALU
" 1-bit ALU usata per eseguire le istruzioni macchina seguenti:
– and $2, $3, $4– or $2, $3, $4– add $2, $3, $4
– Operation è un segnale di controlloa 2 bit
" determina il ti po di operazione chel’ALU deve eseguire
– l’ALU ? la tipica componente che faparte del Datapath (Parte operativa)del processore
– La Parte Controllo comanda l’esecuzionedelle varie istruzioni
" settando opportunamente i segnalidi controllo dell ’ALU (e dellealtre componenti della Parteoperativa)
0
2
Operation
1Result
CarryIn
CarryOut
b
a
32-bit ALU
- catena di 1-bit ALU con propagazione del Carry
- segnale di controllo per determinare l’operazione che l’ALU deve eseguire: Operation propagato a tutte le 1-bit ALU
- Il segnale CarryIn di ogni ALU viene propagato sulla ALU successiva
ALU & somma veloce
Considerazioni sulla velocità dell ’ALU nell ’eseguire la somma:
" l’ ingresso CarryIn dipende dal funzionamento dell ’adiacente sommatore a 1 bit
" se si risale lungo la catena delle dipendenze, si nota che il bit più significativo della somma è legato a quello meno significativo
" il bit più significativo della somma deve attendere la valutazione sequenziale di 32 sommatori a 1 bit ==> LENTO
... ci sono metodi per velocizzare il calcolo del riporto, cercando di far passare il segnale per un numero minore di porte. Uno di questi metodi è il Carry Lookahead
Carry Lookahead
L’equazione generale per il calcolo di CarryOut è
CarryOut = (B•CarryIn) + (A•CarryIn) + A•B
Il CarryOut di un 1-bit adder è il CarryIn del 1-bit adder successivo:
CarryIn1 = (b0•CarryIn0) + (a0•CarryIn0) + a0•b0CarryIn2 = (b1•CarryIn1) + (a1•CarryIn1) + a1•b1.....In forma più compatta si può scrivere:
c1 = (b0c0) + (a0c0) + a0b0c2 = (b1c1) + (a1c1) + a1b1......Sostituendo in c2 l’espressione relativa a c1 si ottienec2 = (b1a0b0)+(b1a0c0) +(b1b0c0)+(a1a0b0)+(a1a0c0)+(a1b0c0)+(a1b1)
L’equazione si espande in modo esponenziale a mano a mano chesi passa a bit di ordine più elevato ==> hardware costoso
Carry Lookahead
Come semplificare il calcolo di ci+1?
ci+1 = (bici) + (aici)+(aibi) = (aibi) + (ai+bi)ci = gi + pi ci
gi = GENERAZIONE se gi = 1 allora ci+1 = gi + pici = 1 + pici = 1 cio? il sommatore genera 1 indipendentemente dal valore di cipi = PROPAGAZIONE se gi = 0 e pi = 1 allora ci+1 = 0 + 1ci = ci cioè il sommatore propaga il CarryIn sul CarryOut
Quindi:
ci+1 = 1 se gi = 1 oppure pi = 1 e ci = 1ci+1 = 0 altrimenti
Carry Lookahead
Per un sommatore a 4 bit si ha:
c1 = g0 + p0c0c2 = g1 + p1c1 = g1 + (p1g0) + (p1p0c0)c3 = g2 + p2c2 = g2 + (p2g1) + (p2p1g0) + (p2p1p0c0)c4 = g3 + p3c3 = g3 + (p3g2) + (p3p2g1) + (p3p2p1g0) + (p3p2p1p0c0)
Il segnale CarryIn vale 1 se qualchesommatore precedente ha generatoun riporto e tutti i sommatori intermedilo propagano
Carry Lookahead
Il sommatore con Carry Lookahead visto alla pagina precedente genera comunquelunghe equazioni. . . non è pensabile realizzarlo per blocchisuperiori a 4 bit
Allora si considera il sommatore a 4 bit con logica di Carry Lookaheadcome blocco elementare
" attraverso il riporto si collegano blocchi simili i n cascata
" per 16bit la somma sarà più veloce rispetto alla versione senza Carry Lookahead: vediamo come viene realizzato ...
Carry Lookahead
Per eseguire il Carry Lookahead con i sommatori a 4bit è necessario considerare isegnali genera e propaga di “ordine superiore”
Il segnale di propagazione uscente da un sommatore a 4bit è vero solo se ciascunodei bit del gruppo propaga un riporto
P0 = p3p2p1p0P1 = p7p6p5p4P2 = p11p10p9p8P3 = p15p14p13p12
Il segnale di generazione uscente da un sommatore a 4bit è vero se" genera è vero per il bit più significativo o" un precedente genera è vero e tutti i segnali propaga intermedi, incluso quello del bit più significativo, sono anch’essi veri
G0 = g3 + (p3g2) + (p3p2g1) + (p3p2p1g0)G1 = g7 + (p7g6) + (p7p6g5) + (p7p6p5g4)G2 = g11 + (p11g10) + (p11p10g9) + (p11p10p9g8)G3 = g15 + (p15g14) + (p15p14g13) + (p15p14p13g12)
Carry Lookahead
Ecco come vengono generati i segnali P0 e G0:
Carry Lookahead
Le equazioni per il riporto in ingresso ad ogni gruppo di sommatori a 4bitall ’ interno di un sommatore a 16 bit sono:
C1 = G0 + P0c0C2 = G1 + (P1G0) + (P1P0c0)C3 = G2 + (P2G1) + (P2P1G0) + (P2P1P0c0)C4 = G3 + (P3G2) + (P3P2G1) + (P3P2P1G0) + (P3P2P1P0c0)
Il meccanismo del Carry Lookahead rende il calcolo dei riporti più veloceperchè prevede l’uso di un numero minore di porte logiche per trasmettere il segnaledi riporto in ingresso ==> il tempo di risposta è minore
Carry Lookahead
Sommatore a 16bit composto di quattroALU a 4bit con logica di Carry-Lookahead
Si osservi che i riporti provengonodall’unità di Carry-Lookahead e nondalle ALU a 4 bit
Carry Lookahead
Esempio: calcolare i segnali gi, pi, Gi, Pi per i seguenti due numeri
a 0010 1011 1111 1000b 0001 0100 1101 0110gi = aibi 0000 0000 1101 0000pi = ai + bi 0011 1111 1111 1110
I segnali Pi per gruppi di 4bit sono dati dall ’AND dei relativi piP3 = 0•0•1•1 = 0P2 = 1•1•1•1 = 1P1 = 1•1•1•1 = 1P0 = 1•1•1•0 = 0
I segnali Gi sono dati da:G0 = g3+(p3g2)+(p3p2g1)+(p3p2p1g0) = 0+(1•0)+(1•1•0) +(1•1•1•0)=0G1 = g7+(p7g6)+(p7p6g5)+(p7p6p5g4) = 1+(1•1)+(1•1•0) +(1•1•1•1)=1G2 = g11+(p11g10)+(p11p10g9)+(p11p10p9g8)=0+(1•0)+(1•1•0) +(1•1•1•0)=0G3 = g15+(p15g14)+(p15p14g13)+(p15p14p13g12)=0+(0•0)+(0•0•0) +(0•0•1•0)=0
Carry Lookahead
Esempio (continua): la somma a+b genera riporto?
E' suff iciente calcolare il riporto dell’ultimo sommatore a 4bit:
C4 = G3 + (P3G2) + (P3P2G1) + (P3P2P1G0) + (P3P2P1P0c0) = 0 + (0•0) + (0•1•1) + (0•1•1•0) + (0•1•1•0•0) = 0 + 0 + 0 + 0 + 0 = 0
Realizzazione di circuiti combinatori
Esercizio: Dati tre ingressi A, B, C realizzare un circuito chefornisca in uscita tre segnaliD è vera se almeno uno degli i ngressi è veroE è vera se esattamente due input sono veriF è vera se tutti e tre gli input sono veri
A B C D E F Somme di Prodotti
0 0 0 0 0 0 D = (∼A∼BC)+(∼AB∼C)+(∼ABC)+0 0 1 1 0 0 (A∼B∼C)+(A∼BC)+(AB∼C)+(ABC)0 1 0 1 0 00 1 1 1 1 0 E = (∼ABC)+(A∼BC)+(AB∼C)1 0 0 1 0 01 0 1 1 1 0 F = ABC1 1 0 1 1 01 1 1 1 0 1
Realizzazione di circuiti combinatori
Esercizio: (continua) Realizzare le uscite D, E, F mediante PLA(Programming Logic Array)D = (∼A∼BC)+(∼AB∼C)+(∼ABC)+ (A∼B∼C)+(A∼BC)+(AB∼C)+(ABC)E = (∼ABC)+(A∼BC)+(AB∼C)F = ABC
Realizzazione di circuiti combinatori
Esercizio: Realizzare l’ uscita E dell ’esercizio precedenteE = (∼ABC)+(A∼BC)+(AB∼C) nei seguenti casi:
1. utilizzando porte AND e OR a due ingressi
2. utilizzando porte NAND a tre ingressi
Realizzazione di circuiti combinatori
Esercizio: (continua) E = (~ABC)+(A∼BC)+(AB∼C)Realizzazione util izzando porte AND e OR a due ingressi
Realizzazione di circuiti combinatori
Esercizio: (continua) E = (∼ABC)+(A∼BC)+(AB∼C)Realizzazione util izzando porte NAND a tre ingressi
E = (∼ABC)+(A∼BC)+(AB∼C) = [applico De Morgan] ∼[∼(∼ABC) • ∼(A∼BC) • ∼(AB∼C)]
Realizzazione di circuiti combinatoriEsercizio: (continua)
Realizzare il circuito usando porte AND e OR a due soli ingressi
E = ∼A∼B∼C + ∼A∼C∼D + ∼B∼C∼D + ∼A∼B∼D + BCD + ABC + ABD + ACD
Realizzazione di circuiti combinatori
Esercizio: (continua) E = ∼A∼B∼C + ∼A∼C∼D + ∼B∼C∼D + ∼A∼B∼D + BCD + ABC + ABD + ACD
Provate asemplificarloraggruppandoopportunamentei segnali di ingresso
Rappresentazione dei numeri razionaliin virgola mobile (floating point)
Un numero reale R può essere scritto come R = ±m•Be
m = mantissae = caratteristicaB = base
Esempi: B = 10
R1 = 3.1569 x 103
R2 = 2054.00035 x 10-6
R3 = 0.1635 x 102
R4 = 0.0091 x 10-12
" notazione scientifica: m = 0 . d-1...d-k" notazione scientifica normalizzata: m = d0 . d-1...d-k con d0 ≠ 0 (per B=2 si ha d0 = 1 fisso!!)
Rappresentazione dei numeri razionaliin virgola mobile (floating point)
Una volta fissato il numero di bit totale per la rappresentazione deinumeri razionali rimane da decidere
" quanti bit assegnare per la mantissa ?(maggiore ? il numero di bit e maggiore ? l’accuratezza con cui si riescono a rappresentare i numeri)
" quanti bit assegnare per l’esponente ?(aumentando i bit si aumenta l’ intervallo dei numeri rappresentabili )
OVERFLOW: si ha quando l’esponente positivo è troppo grande per poter essere rappresentato con il numero di bit assegnato all ’esponente
UNDERFLOW: si ha quando l’esponente negativo è troppo grande per poter essere rappresentato con il numero di bit assegnato all ’esponente
Standard IEEE754
" Standard IEEE754: Singola precisione (32 bit)
si riescono a rappresentare numeri 2.010 • 2-38 ÷ 2.010 •
238
" Standard IEEE754: Doppia precisione (64 bit)
si riescono a rappresentare numeri 2.010 • 2-308 ÷ 2.010 •
2308
Standard IEEE754
Si osservi che m = d0 . d-1...d-k con d0 = 1 fisso.Lo standard IEEE754 sceglie di rendere d0 = 1 implicito, mettendo uncircuito che somma automaticamente 1 alla cifra espressa dalla mantissa.Così si guadagna un bit per la rappresentazione della mantissa e si aumental’accuratezza dei numeri razionali espressi
Il numero espresso ? quindi: (-1)S• (1 + m) • 2e
Ma .... come si rappresenta lo zero?m = 00...0 ma non si deve sommare 1 ==> si usa l’esponente nullo comevalore riservato per indicare al circuito di non sommare 1Quindi lo zero viene rappresentato come:
Standard IEEE754
Come rappresentare i numeri in modo che sia facile realizzare il confrontotra interi (pensando soprattutto all ’ordinamento)?Lo standard IEEE754 ha scelto:" la posizione del segno in modo che sia facile il test >0 , <0, =0" la posizione dell ’esponente (prima della mantissa) per sempli ficare l’ordinamento dei numeri rappresentati ==> per esponenti con lo stesso segno il confronto è facile
Però gli esponenti negativi rappresentano un problema per l’ordinamento.Infatti, usando il complemento a due,
esponente negativo ==> bit più significativo a 1e quindi un esponente negativo appare come un numero grande(leggendolo come semplice numero binario)Esempio: 1.0 • 2-1
Esempio: 1.0 • 21
Standard IEEE754
Una buona rappresentazione deve denotare l’esponente “più negativo”come 00...02 e quello “più positivo” come 11...12
Lo standard IEEE754 utili zza la notazione polarizzata
" Singola precisione: polarizzazione pari a 127 = 011111112" Doppia precisione: polarizzazione pari a 1023 = 011111111112
Allora, ad esempio:
" esponente -125 rappresentato come -125+127 = 000000102" esponente -1 rappresentato come -1+127 = 126 = 011111102" esponente 0 rappresentato come 0 + 127 = 127 = 011111112" esponente +1 rappresentato come 1+127 = 128 = 100000002" esponente +125 rappresentato come 125+127=252=111111002
Standard IEEE754
Per leggere un numero in notazione polarizzata si usa la regola:
(-1)S•(1+m)•2(e - polazizzazione)
Per scrivere un numero in notazione polarizzata bisogna:" non rappresentare la parte intera della mantissa (il bit 1 prima della virgola)" aggiungere all ’esponente la polarizzazione
Con la notazione polarizzata gli esponenti variano" da -126 a +127 per la singola precisione" da -1022 a +1023 per la doppia precisione
Si noti che:
" l’esponente 00...0 è riservato per lo zero" l’esponente 11...1 è riservato per casi particolari (fuori dall ’ insieme dei valori rappresentabili )
Standard IEEE754
Esempio: scrivere - 0. 2510 in notazione floating point, usando lo standardIEEE754
- 0. 2510 = - 0. 012 = - 1. 0 • 2-2 = (-1)1 • (1 + 0.0) • 2(-2+127)
Esempio: Quale numero decimale rappresenta la seguente sequenza di bit,letta secondo lo standard IEEE754?
esponente: 000010112 = 1310mantissa: 0.012 = 0. 2510Il numero rappresentato è: (-1)1•(1+ 0.25)•2(13-127) = - 1. 25 •2(-114)