Codifica e aritmetica binaria Corso ACSO prof. Cristina Silvano, Politecnico di Milano Codifica binaria dell informazione Il calcolatore utilizza un alfabeto binario: usiamo dispositivi elettronici digitali in grado di assumere due solo stati: acceso/spento, ON/OFF, 1/0, VERO/FALSO. Un alfabeto binario non limita le funzionalità di un calcolatore. Il simbolo o cifra binaria si indica con bit (da Binary digit): ) quantità d informazione che si ottiene selezionando una configurazione da un insieme che ne contiene due. La risposta SI oppure NO a una domanda porta 1 bit di informazione. 2 Corso ACSO prof. C. Silvano Politecnico di Milano 1
Codifica binaria dell informazione Quanti oggetti diversi posso codificare con parole binarie composte da k bit? 1 bit: 2 1 = 2 stati (0, 1) 2 oggetti 2 bit: 2 2 = 4 stati (00, 01, 10, 11) 4 oggetti 3 bit: 2 3 = 8 stati (000, 001, 010, 011, 100, 101, 110, 111) 8 oggetti k bit: 2 k stati 2 k oggetti 3 Codifica binaria dell informazione Se passiamo da una parola binaria di k bit ad una parola di k+1 bit si raddoppia il numero di oggetti che si possono rappresentare (2 k+1 ). 4 Corso ACSO prof. C. Silvano Politecnico di Milano 2
Codifica binaria dell informazione Quanti bit mi servono per codificare N oggetti: N 2 k k log 2 N k = log 2 N Ipotesi implicita: le parole di un codice hanno tutte la stessa lunghezza. 5 Definire un codice Identificare due insiemi: Insieme delle configurazioni ammissibili; Insieme degli oggetti da rappresentare. Associare gli elementi dei due insiemi 6 Corso ACSO prof. C. Silvano Politecnico di Milano 3
Esempio Associare una codifica binaria ai giorni della settimana. Quanti bit devono avere le parole binarie usate per identificare i giorni della settimana (7 oggetti diversi)? k= log 2 7 =3 7 Esempio 111 010 Insieme delle configurazioni ammissibili 110 011 001 101 100 000 LUN MAR Insieme degli oggetti da codificare VEN SAB GIO DOM MER 8 Corso ACSO prof. C. Silvano Politecnico di Milano 4
Esempio 111 010 110 011 001 Codice 101 100 000 VEN LUN MAR GIO MER SAB DOM 9 Byte bit rappresenta 2 stati: 0 oppure 1. Byte rappresenta 8 bit 2 8 = 256 stati KiloByte [KB] = 2 10 Byte = 1024 Byte 10 3 Byte MegaByte [MB] = 2 20 Byte = 1048576 Byte 10 6 Byte GigaByte [GB] = 2 30 Byte 10 9 Byte TeraByte [TB] = 2 40 Byte 10 12 Byte 10 Corso ACSO prof. C. Silvano Politecnico di Milano 5
Notazione posizionale Consideriamo i numeri interi assoluti (numeri naturali più lo zero). Notazione posizionale in base b: Alfabeto: c i {0 b-1} c k c k-1 c 1 c 0 rappresenta: N = c k x b k + c k-1 x b k-1 + + c 0 x b 0 = Σ xb i (i=0 k) c i c 0 bit meno significativo c k bit più significativo 11 Notazione posizionale Basi più frequentemente utilizzate: base 2 : c i {0, 1} base 8: c i {0, 1, 2, 3, 4, 5, 6, 7} base 10: c i {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} base 16: c i { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} 12 Corso ACSO prof. C. Silvano Politecnico di Milano 6
Codifica binaria Numeri binari: base b = 2 Alfabeto binario: cifre c i {0, 1} (c k c 1 c 0 ) 2 rappresenta: N = Σ (i=0 k) c i x 2 i 13 Conversione binario decimale Dato il numero N espresso in base 2, basta riscriverlo i secondo la notazione posizionale i utilizzando cifre e potenze della base 10. Esempi: N = 1101 2 N = 1 x 2 3 + 1 x 2 2 + 0 x 2 1 + 1 x 2 0 = 13 10 N = 100101 2 N = 1 x 2 5 + 0 x 2 4 + 0 x 2 3 + 1 x 2 2 + 0 x 2 1 + 1 x 2 0 = 37 10 14 Corso ACSO prof. C. Silvano Politecnico di Milano 7
Conversione decimale binario Si calcolano i resti della divisione per due finché il risultato t di una divisione i i diventa zero: Esempio: N = 23 10 23 : 2 = 11 resto R 0 = b 0 = 1 11 : 2 = 5 resto R 1 = b 1 = 1 5 : 2 = 2 resto R 2 = b 2 = 1 2 : 2 = 1 resto R 3 = b 3 = 0 1 : 2 = 0 resto R 4 = b 4 = 1 23 10 = 10111 2 15 Conversione decimale binario Esempio: N = 18 10 18 : 2 = 9 resto R 0 = b 0 = 0 9 : 2 = 4 resto R 1 = b 1 = 1 4 : 2 = 2 resto R 2 = b 2 = 0 2 : 2 = 1 resto R 3 = b 3 = 0 1 : 2 = 0 resto R 4 = b 4 = 1 18 10 = 10010 2 16 Corso ACSO prof. C. Silvano Politecnico di Milano 8
Codifica ottale Utile per rappresentare sinteticamente i valori binari. Numeri ottali: base b = 8 Alfabeto ottale: cifre c i {0, 1, 2, 3, 4, 5, 6, 7} (c k c 1 c 0 ) 8 rappresenta: N = Σ (i=0 k) c i x 8 i 17 Conversione ottale decimale Dato il numero N espresso in base 8, basta riscriverlo secondo la notazione posizionale i utilizzando cifre e potenze della base 10. Esempi: N = 354 8 N = 3 x 8 2 + 5 x 8 1 + 4 x 8 0 = 192 + 40 + 4 = 236 10 N = 1461 8 N = 1 x 8 3 + 4 x 8 2 + 6 x 8 1 + 1 x 8 0 = 512 + 256 + 48 +1 = 817 10 18 Corso ACSO prof. C. Silvano Politecnico di Milano 9
Conversione decimale ottale Si calcolano i resti della divisione per otto finché il risultato di una divisione diventa zero: Esempio: N = 1492 10 1492 : 8 = 186 resto R 0 = b 0 = 4 186 : 8 = 23 resto R 1 = b 1 = 2 23 : 8 = 2 resto R 2 =b 2 =7 2 : 8 = 0 resto R 3 = b 3 = 2 1492 10 = 2724 8 19 Conversione ottale binario Ogni cifra ottale corrisponde a tre cifre binarie: 0 [000], 1 [001], 2 [010], 3 [011] 4 [100], 5 [101], 6 [110], 7 [111] E sufficiente ricordarsi (o derivare) la rappresentazione binaria dei numeri da 0 a 7. Esempio: N = 354 8 [011] [101] [100] = 011101100 2 20 Corso ACSO prof. C. Silvano Politecnico di Milano 10
Conversione binario ottale Suddividere le cifre binarie (partendo da destra verso sinistra) tenendo conto che tre cifre binarie corrispondono a una cifra ottale N = 011101100 2 [011] [101] [100] = 354 8 N = 1100111001 2 [1] [100] [111][001]= 1471 8 21 Codifica esadecimale Utile per rappresentare sinteticamente i valori binari. Numeri esadecimali: base b = 16 Alfabeto esadecimale: cifre c i {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} (c Σ x16 k c 1 c 0 ) 16 rappresenta: N=Σ (i=0 k) c i i 22 Corso ACSO prof. C. Silvano Politecnico di Milano 11
Conversione esadecimale decimale Dato il numero N espresso in base 16, basta riscriverlo i secondo la notazione posizionale i utilizzando cifre e potenze della base 10. Esempi: N = EC 16 N = 14 x 16 1 + 12 x 16 0 = 224 + 12 = 236 10 N = 331 16 N = 3 x 16 2 + 3 x 16 1 + 1 x 16 0 = 768 + 48 + 1 = 817 10 23 Conversione decimale esadecimale Si calcolano i resti della divisione per sedici finché il risultato di una divisione diventa zero: Esempio: N = 1492 10 1492 : 16 = 93 resto R 0 = b 0 = 4 93 : 16 = 5 resto R 1 = b 1 = 13 (D) 5:16 = 0 resto R 2 = b 2 = 5 1492 10 = 5D4 16 24 Corso ACSO prof. C. Silvano Politecnico di Milano 12
Conversione esadecimale binario Ogni cifra esadecimale corrisponde a quattro cifre binarie: 0 [0000], 1 [0001], 2 [0010], 3 [0011] 4 [0100], 5 [0101], 6 [0110], 7 [0111] 8 [1000], 9 [1001], A[1010], B [1011] C [1100], D [1101], E [1110], F [1111] E sufficiente ricordarsi (o derivare) la rappresentazione binaria su 4 bit dei numeri da 0 a 15. N = 354 16 [0011] [0101] [0100] = 001101010100 2 25 Conversione binario esadecimale Suddividere le cifre binarie (partendo da destra verso sinistra) tenendo conto che quattro cifre binarie corrispondono a una cifra esadecimale. N = 001101010100 2 [0011] [0101] [0100] = 354 16 N = 1100111001 2 [11] [0011] [1001]= 339 16 26 Corso ACSO prof. C. Silvano Politecnico di Milano 13
Codifica binaria su n bit Con una sequenza di n bit si possono rappresentare 2 n numeri interi assoluti da 0 a 2 n -1. Esempio: n = 4 bit 2 4 = 16 numeri interi assoluti da 0 a 15. La lunghezza delle sequenze di bit adottate stabilisce il massimo numero che può essere rappresentato. 27 Rappresentazione dei numeri interi assoluti da 0 a 15 per diverse basi Base 2 Base 8 Base 10 Base 16 0000 0 0 0 0001 1 1 1 0010 2 2 2 0011 3 3 3 0100 4 4 4 0101 5 5 5 0110 6 6 6 N b 0111 7 7 7 1000 10 8 8 1001 11 9 9 1010 12 10 A 1011 13 11 B 1100 14 12 C 1101 15 13 D 1110 16 14 E 1111 17 15 F 28 Corso ACSO prof. C. Silvano Politecnico di Milano 14
Codifica binaria su n+1 bit Se passiamo da una sequenza di lunghezza n bit ad una sequenza di n+1 bit si raddoppiano i numeri che si possono rappresentare (2 n+1 ). Esempio: n = 4 bit 2 4 = 16 numeri da 0 a 15. n=5bit 2 5 =32numeri da 0 a 31. 29 Codifica binaria su 2n bit Se raddoppiamo la lunghezza di una sequenza da nbita a 2n bit i numeri che si possono rappresentare aumentano esponenzialmente (2 2n ) Esempio: n = 4 bit 2 4 = 16 numeri da 0 a 15. n = 8 bit 2 8 = 256 numeri da 0 a 255. Esempio: Con 32 bit si possono rappresentare 2 32 numeri naturali da 0 a 2 32-1= 4 294 967 295 4 x 10 9. Con 64 bit si possono rappresentare 2 64 numeri naturali da 0 a 2 64-1= 16 x 10 18 = 1,6 x 10 19 30 Corso ACSO prof. C. Silvano Politecnico di Milano 15
Aritmetica binaria 31 Addizione binaria Addizione binaria tra due bit (a + b): oltre al bit di somma S occorre memorizzare il bit di riporto R (carry): a b S R 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 32 Corso ACSO prof. C. Silvano Politecnico di Milano 16
Addizione binaria su n bit Addizione binaria tra due numeri interi assoluti di lunghezza n bit: si allineano i due numeri in colonne da destra verso sinistra (cioè partendo dal bit meno significativo); si eseguono le somme bit a bit da destra verso sinistra considerando per ogni colonna (successiva alla colonna corrispondente al bit meno significativo) il riporto generato dalla colonna alla sua destra 33 Addizione binaria tra due bit ai e bi con riporto in ingresso Ri ai bi Ri Si Ri+1 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 34 Corso ACSO prof. C. Silvano Politecnico di Milano 17
Esempio 4 bit: A = 0101 B = 0011 R 1 1 1 A 0 1 0 1 5 10 B 0 0 1 1 3 10 A+B 1 0 0 0 8 10 35 Overflow Se si considerano due numeri interi assoluti rappresentati su nbit si verifica la condizione di overflow ogni volta che il risultato supera 2 n -1 Esempio: 4 bit: A = 0101 B = 1011 R 1 1 1 1 A 0 1 0 1 5 10 B 1 0 1 1 11 10 A+B 1 0 0 0 0 16 10 36 Corso ACSO prof. C. Silvano Politecnico di Milano 18
Rappresentazione dei numeri interi relativi (o con segno) Codifica modulo e segno Codifica in complemento a due 37 Codifica modulo e segno Soluzione: indicare il segno seguito dal valore assoluto. 1 bit per indicare il segno (convenzione: 0 positivo e 1 negativo) Restanti(n-1) bit per rappresentare il modulo (o valore assoluto) del numero Indispensabile indicare il numero n di bit utilizzati Esempio: 4 bit +6 10 = 0110 ms 6 10 = 1110 ms Problema: ci sono 2 rappresentazioni dello zero: Esempio: 4 bit +0 10 = 0000 ms 0 10 = 1000 ms 38 Corso ACSO prof. C. Silvano Politecnico di Milano 19
Codifica modulo e segno Con una sequenza di n bit si possono rappresentare 2 n numeri iinteri iassoluti tida 0 a 2 n -1. Con una sequenza di n bit si possono rappresentare con la codifica modulo e segno 2 n-1 numeri interi relativi compresi nell intervallo da (2 n-1 1) a 2 n-1-1. Esempio: 4 bit 16 numeri interi assoluti da 0 a 15 4 bit 15 numeri interi relativi da 7 a 7 39 Diverse interpretazioni della codifica binaria su 4 bit Rappres. numeri interi assoluti Rappr. numeri interi relativi (modulo e segno) 0000 0 0 0001 1 1 0010 2 2 0011 3 3 0100 4 4 0101 5 5 0110 6 6 0111 7 7 1000 8-0 1001 9-1 1010 10-2 1011 11-3 1100 12-4 1101 13-5 1110 14-6 1111 15-7 40 Corso ACSO prof. C. Silvano Politecnico di Milano 20
Modulo e segno: somma comparatore Operazione: A + B NO Segno A = Segno B SÌ sommatore sottrattore NO A > B SÌ RIS = A + B RIS = B A RIS = A B Segno RIS = Segno A Segno RIS = Segno B Segno RIS = Segno A Codifica in complemento a due Alfabeto binario: Anche il segno è rappresentato da 0 o 1 Indispensabile indicare il numero n di bit utilizzati Complemento a due: Date le sequenze di n bit, per rappresentare il numero X si utilizza il valore binario corrispondente a 2 n +x Esempio: 4 bit +6 10 2 4 + 6 = 22 [1] 0110 0110 C2 4 bit -6 10 2 4-6 = 10 [0] 1010 1010 C2 42 Corso ACSO prof. C. Silvano Politecnico di Milano 21
Codifica in complemento a due Con una sequenza di n bit si possono rappresentare con la codifica in complemento a due 2 n numeri interi relativi compresi nell intervallo da 2 n-1 a 2 n-1-1. Esempio: 4 bit 16 numeri interi relativi da 8 a 7 Notare: c è una sola rappresentazione dello zero: 4 bit: +0 10 = 0000 C2 (mentre 1000 C2 = -8 10) ) Ciò impedisce il bilanciamento tra numeri positivi e negativi: 4 bit: zero + 7 numeri positivi (fino a 7) + 8 numeri negativi (fino a 8). 43 Codifica in complemento a due Primo metodo pratico per calcolare la rappresentazione di X a partire da quella di X: Effettuare il complemento di ogni bit di X e aggiungere 1. Esempio: 4 bit +6 10 = 0110 C2 Complemento di tutti i bit: 1001 C2 Aggiungere 1: (1001 + 0001) = 1010 C2 =-6 10 44 Corso ACSO prof. C. Silvano Politecnico di Milano 22
Codifica in complemento a due Secondo metodo pratico per calcolare la rappresentazione di X a partire da quella di X: Partendo da destra verso sinistra, lasciare invariati tutti i bit fino al primo 1 compreso, e complementare tutti gli altri bit. Esempio: 4 bit +6 10 = 0110 C2 Gli ultimi due bit rimangono invariati 10 Complementare gli altri 2 bit: 1010 C2 =-6 10 45 Diverse interpretazioni della codifica binaria su 4 bit Rappres. numeri interi assoluti Rappr. numeri interi relativi (MS) Rappr. numeri interi relativi (C2) 0000 0 0 0 0001 1 1 1 0010 2 2 2 0011 3 3 3 0100 4 4 4 0101 5 5 5 0110 6 6 6 0111 7 7 7 maxint 1000 8-0 -8 minint 1001 9-1 -7 1010 10-2 -6 1011 11-3 -5 1100 12-4 -4 1101 13-5 -3 1110 14-6 -2 1111 15-7 -1 46 Corso ACSO prof. C. Silvano Politecnico di Milano 23
Codifica in complemento a due Data la rappresentazione di un numero su n bit, la rappresentazione dello stesso numero su n+1 bit si ottiene aggiungendo a sinistra un bit uguale al bit più significativo (operazione di estensione del segno sign extension) in modo da rispettare il valore del numero. Esempio: Rappresentazione di 6 su 4 bit = 1010 C2 Rappresentazione di 6 su 5 bit = 11010 C2 Rappresentazione di 6 su 8 bit = 11111010 C2 Rappresentazione di 6 su 16 bit = 1111111111111010 C2 47 Codifica in complemento a due Operazione di estensione del segno (sign extension) Propagazione a sinistra del MSB (rispetta il valore del numero) Operazione di estensione di zero (zero extension) Riempimento con 0 dei bit più significativi (può non rispettare il valore del numero). Es.: da 4 a 8 bit: 0011 0000 0011 (da 3 a 3) Es.: da 4 a 8 bit: 1010 0000 1010 (da 6 a 10) Nella costruzione di costanti su 32 bit (superiori a 65535) può servire il riempimento con 0. 48 Corso ACSO prof. C. Silvano Politecnico di Milano 24
Numeri in C2 su 32 bit 0000 0000 0000 0000 0000 0000 0000 0000 2 = 0 10 0000 0000 0000 0000 0000 0000 0000 0001 2 = 1 10 0000 0000 0000 0000 0000 0000 0000 0010 2 = 2 10. 0111 1111 1111 1111 1111 1111 1111 1101 2 = 2 147 483 645 10 0111 1111 1111 1111 1111 1111 1111 1110 2 = 2 147 483 646 10 0111 1111 1111 1111 1111 1111 1111 1111 2 = 2 147 483 647 maxint 10 1000 0000 0000 0000 0000 0000 0000 0000 2 = -2 147 483 648 10 minint 1000 0000 0000 0000 0000 0000 0000 0001 2 = -2 147 483 647 10 1000 0000 0000 0000 0000 0000 0000 0010 2 = -2 147 483 646 10. 1111 1111 1111 1111 1111 1111 1111 1101 2 = -3 10 1111 1111 1111 1111 1111 1111 1111 1110 2 = -2 10 1111 1111 1111 1111 1111 1111 1111 1111 2 = -1 10 49 Osservazioni In entrambe le rappresentazioni (MS e C2) i numeri positivi iniziano con 0, quelli negativi con 1 (è come se il primo bit rappresentasse il segno del numero). Nella rappresentazione C2: 1000 0000 è minint 1111 1111 è -1 50 Corso ACSO prof. C. Silvano Politecnico di Milano 25
Osservazioni Principale vantaggio della notazione in complemento a due: la sottrazione tra due numeri (a b) si effettua come somma algebrica a + (-b) C2 Esempi: 4 6=4+(-6) C2 = 0100 + 1010 = 1110 = (-2) C2 7 3 = 7 + (-3) C2 = 0111 + 1101 = [1]0100 = +4 51 Somma algebrica Si consideri l operazione di somma algebrica di due numeri interi di n bit dotati di segno e rappresentati in complemento a due Il risultato dell addizione è corretto, a patto che cada nel campo dei valori rappresentabili (-2 n-1 N 2 n-1 1) 1), pur di trascurare l eventuale riporto in uscita dal bit più significativo. 52 Corso ACSO prof. C. Silvano Politecnico di Milano 26
Esempi su n=4 bit 2 + 3 = 0010 + 0011 = 0101 = 5-5 - 2 = (-5)+ (-2) = 1011 + 1110 = [1]1001 = -7-3 (-7) = (-3)+ 7 = 1101 + 0111 = [1]0100 = +4-7 1 = (-7)+ (-1) = 1001 + 1111 = [1]1000 = -8 +2 (-3) = 2 + 3 = 0010 + 0011 = 0101 = +5 53 Overflow/underflow Il segnale di riporto in uscita non è sufficiente per indicare un overflow/underflow di una somma algebrica di numeri interi con segno. Sommando 2 numeri di n bit, la somma può eccedere gli n bit (il bit di segno prende il valore del risultato anziché il valore del segno corretto). Si ha superamento di capacità se: Sommando due numeri positivi si ottiene un risultato negativo (generazione di overflow) Sommando due numeri negativi si ottiene un risultato positivo (generazione di underflow) 54 Corso ACSO prof. C. Silvano Politecnico di Milano 27
Esempi su n=4 bit 7 + 4 = 0111 + 0100 = 1011 = -5 NO! OVERFLOW! -4-6 = (-4)+ (-6) = 1100 + 1010 = [1]0110 = 6 NO! UNDERFLOW! 55 Caratteristiche dei numeri in C2 Una sola rappresentazione dello 0 Intervallo di rappresentazione asimmetico -2 31 ; 2 31 1 MSB rappresenta il bit di segno Occorre fare attenzione tra la rappresentazione di numeri signed e unsigned La sottrazione tra due numeri si effettua come somma algebrica 56 Corso ACSO prof. C. Silvano Politecnico di Milano 28
Caratteristiche dei numeri in C2 Signed vs. unsigned Gli indirizzi di memoria sono solo positivi (sfruttano tutti e 32 i bit): (2 32 1) mandirizzo di memoria possibile MSB = 1 in un numero unsigned più grande di 0111 1111 (maxint) MSB = 0 non c è differenza tra unsigned e signed. Nel processore MIPS ci sono istruzioni apposite che operano con numeri unsigned 57 Circuiti Aritmetici Corso ACSO prof. C. Silvano Politecnico di Milano 29
Half Adder Addizionatore binario tra due bit ( + y i ) con uscite il bit di somma s i e il bit di riporto c i+1 (carry): HALF ADDER s i y i s i c i+1 0 0 0 0 y i c i+1 0 1 1 0 1 0 1 0 1 1 0 1 Half Adder s i = xor y i c i+1 = and y i s i y i c i+1 Corso ACSO prof. C. Silvano Politecnico di Milano 30
Full Adder Addizionatore binario tra due bit ( + y i ) con riporto in ingresso c i (carry in) e con uscite il bit di somma s i e il bit di riporto c i+1 (carry out): FULL ADDER xi yi ci si ci+1 0 0 0 0 0 0 0 1 1 0 s i 0 1 0 1 0 y 0 1 1 0 1 i 1 0 0 1 0 c i c i+1 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 Full Adder: Implementazione Calcoliamo la prima forma canonica di s i e c i+1 s i = y i c i + y i c i + y i c i + y i c i c i+1 = y i c i + y i c i + y i c i + y i c i Possiamo semplificare c i+1 : c i+1 = y i c i + y i c i + y i c i + y i c i + y i c i + y i c i =( + )y i c i +(y i +y i ) c i +(c i +c i ) y i = 1 y i c i + 1 c i + 1 y i = y i c i + c i + y i Corso ACSO prof. C. Silvano Politecnico di Milano 31
Full Adder: Implementazione AND-OR (2 livelli) s i = y i c i + y i c i + y i c i + y i c i c i+1 = y i + c i + y i c i Full Adder: Implementazione con Half Adder Oppure possiamo riscrivere s i e c i+1 come: s i = y i c i + y i c i + y i c i + y i c i = c i ( y i + y i ) + c i ( y i + y i ) = c i ( xor y i ) + c i ( xor y i ) = ( xor y i ) xor c i c i+1 = y i c i + y i c i + y i c i + y i c i = c i ( y i + y i )+ y i (c i + c i ) = c i ( xor y i )+ y i Corso ACSO prof. C. Silvano Politecnico di Milano 32
Full Adder: Implementazione con Half Adder HALF ADDER s i FULL ADDER y i y i c i+1 HALF ADDER s i s i c i y i c i+1 y i c i+1 c i+1 Full Adder: Generico stadio i di un addizionatore su n bit y i c i+1 FA c i si Ogni stadio i possiede un bit di riporto in ingresso c i (carry in) dallo stadio precedente (i-1) e un bit di riporto in ingresso c i+1 (carry out) verso lo stadio successivo (i+1). Corso ACSO prof. C. Silvano Politecnico di Milano 33
Full Adder su n-bit Per realizzare un addizionatore binario tra due vettori da n bit (X + Y) con riporto in ingresso c i (carry in) e con uscite il vettore somma S e il bit di riporto c i+1 (carry out): Si devono sommare le coppie di bit dei 2 vettori partendo dal bit meno significativo (a destra) e propagando il riporto verso le posizioni più significative (a sinistra) Esempio: 4-bit Ripple Carry Adder x 3 y 3 x 2 y 2 x 1 y 1 x 0 y 0 c 4 y i c y y 3 i c i 2 c 1 c i+1 FA c c i+1 FA c c i+1 FA i i c i si si si y i c i+1 HA si s 3 s 2 4-bit RCA Addizionatore a propagazione di riporto per numeri binari su 4 bit s 1 s 0 Corso ACSO prof. C. Silvano Politecnico di Milano 34
Esempio: 4-bit Ripple Carry Adder Quando c 4 =1: Condizione di overflow cioè il risultato non può essere rappresentato su 4 bit. Oppure c 4 può rappresentare il riporto verso un successivo stadio nel caso di implementazione a cascata di addizionatori da 4 bit Esempio: 4-bit Ripple Carry Adder x 3 y 3 x 2 y 2 x 1 y 1 x 0 y 0 c 4 y i c y y y 3 i c i i 2 c 1 c 0 c i+1 FA c c i+1 FA c c i+1 FA c c i+1 FA i i i c i si si si si s 3 s 2 4-bit RCA Addizionatore a propagazione di riporto per numeri binari su 4 bit con c0 s 1 s 0 Corso ACSO prof. C. Silvano Politecnico di Milano 35
8-bit Ripple Carry Adder x 74 y 74 x 30 y 30 c 8 x 3 0 y 3 0 c 4 4RCA s 3 0 c 0 c 4 x 3 0 y 3 0 c 4 4RCA s 3 0 c 0 c 0 s 74 8-bit RCA s 30 Addizionatore a propagazione di riporto per numeri binari su 8 bit realizzato con 2 stadi da 4 bit collegati in cascata. 32-bit Ripple Carry Adder x 31 28 y 31 28 x 30 y 30 c 32 x 3 0 y 3 0 c 4 4RCA s 3 0 c 0 c 4 x 3 0 y 3 0 c 4 4RCA s 3 0 c 0 c 0 s 31 28 32-bit RCA s 30 Addizionatore a propagazione di riporto per numeri binari su 32 bit realizzato con 8 stadi da 4 bit collegati in cascata. Corso ACSO prof. C. Silvano Politecnico di Milano 36
32-bit Ripple Carry Adder x 31 24 y 31 24 x 70 y 70 c 32 x 70 c 8 8RCA s 70 y 70 c 0 c 8 x 70 c 8 8RCA s 70 y 70 c 0 c 0 s 31 24 32-bit RCA s 70 Addizionatore a propagazione di riporto per numeri binari su 32 bit realizzato con 4 stadi da 8 bit collegati in cascata. Numeri in C2 su n-bit Si considerino i numeri interi con segno rappresentati in complemento a 2 su n bit. Per sommare due numeri X e Y occorre fornire la loro rappresentazione in C2 all addizionatore e ignorare il riporto in uscita dal bit più significativo. La somma in uscita costituisce il valore algebrico corretto del risultato in C2 per risultati compresi tra -2 n-1 N 2 n-1 1 Corso ACSO prof. C. Silvano Politecnico di Milano 37
Numeri in C2 su n-bit Per sottrarre due numeri (X Y) occorre calcolare il C2 di Y e sommarlo ad X come nel caso precedente. La somma in uscita costituisce il valore algebrico corretto del risultato in C2 per risultati compresi tra -2 n-1 N 2 n-1 1. L operazione di sottrazione richiede il calcolo del C2 del sottraendo. 4-bit Ripple Carry Adder/Sub y 3 y 2 y 1 y 0 x 3 x 2 x 1 x 0 c 4 y i c y i y i y i c 0 3 c 2 c 1 c i+1 FA c c i+1 FA c c i+1 FA c c i+1 FA i i i c i si si si si ADD/ SUB 4-bit RCA s s s s s 3 s 2 Addizionatore/Sottrattore a propagazione di riporto per numeri interi con segno in C2 su 4 bit s 1 s 0 Corso ACSO prof. C. Silvano Politecnico di Milano 38
4-bit Ripple Carry Adder/Sub Il segnale di controllo ADD/SUB è c 0 : c 0 =0 per ADD (Applicati gli ingressi y i ) c 0 =1 per SUB (Applicati gli ingressi y i con incremento di 1 per calcolare il C2 di Y). Seconda soluzione: posso sostituire gli xor con dei mux2 e degli inverter nel seguente modo. Anche in questo caso il segnale di controllo ADD/SUB è c 0 4-bit Ripple Carry Adder/Sub y 3 y 2 y 1 y 0 x 3 0 1 x 2 0 1 x 1 0 1 x 0 0 1 c 4 y i c y i y i y i c 0 3 c 2 c 1 c i+1 FA c c i+1 FA c c i+1 FA c c i+1 FA i i i c i si si si si ADD/ SUB 4-bit RCA s 3 s 2 s 1 s 0 Addizionatore/Sottrattore a propagazione di riporto per numeri interi con segno in C2 su 4 bit Corso ACSO prof. C. Silvano Politecnico di Milano 39
Rappresentazione in C2 La rappresentazione dei numeri interi con segno in C2 viene scelta nei calcolatori per la semplicità e velocità delle operazioni aritmetiche di somma e sottrazione. Overflow Per le somme di numeri interi senza segno, il riporto in uscita indica la condizione di overflow oppure il riporto verso uno stadio successivo. Per le somme di numeri interi con segno in C2, l overflow(underflow) si verifica quando si sommano due numeri dello stesso segno e il segno della somma non è concorde con il segno dei due numeri. Corso ACSO prof. C. Silvano Politecnico di Milano 40
Overflow per numeri in C2 su 4-bit x 3 y 3 s 3 x 3 y 3 s 3 V = x 3 y 3 s 3 + x 3 y 3 s 3 V Ripple Carry Adder La commutazione dei circuiti combinatori non è it istantanea, t ma richiede ihid un tempo di propagazione del segnale elettrico che dipende dal numero di livelli logici attraversati dal segnale. Per esempio un implementazione di tipo AND-OR richiede 2 livelli logici. Problema: L addizionatore i con propagazione di riporto è lento: Il riporto si propaga sequenzialmente Corso ACSO prof. C. Silvano Politecnico di Milano 41
4-bit Ripple Carry Adder Rivediamo il calcolo del riporti e dei ritardi associati: c 1 = x 0 y 0 + x 0 c 0 + y 0 c 0 2li livellilli c 2 = x 1 y 1 + x 1 c 1 + y 1 c 1 = = x 1 y 1 + x 1 (x 0 y 0 + x 0 c 0 + y 0 c 0 ) + + y 1 (x 0 y 0 + x 0 c 0 + y 0 c 0 ) 4 livelli c 3 = x 2 y 2 + x 2 c 2 + y 2 c 2 = = x 2 y 2 + x 2 (x 1 y 1 +.) + y 2 (x 1 y 1 + ) 6 livelli c 4 = x 3 y 3 + x 3 c 3 + y 3 c 3 = = x 3 y 3 + x 3 (x 2 y 2 +.) + y 3 (x 2 y 2 + ) 8 livelli 4-bit Ripple Carry Adder Il ritardo nel calcolo del riporto incide sul ritardo associato ai bit di somma: s 0 = x 0 y 0 c 0 + x 0 y 0 c 0 + x 0 y 0 c 0 + x 0 y 0 c 0 s 1 = x 1 y 1 c 1 + x 1 y 1 c 1 + x 1 y 1 c 1 + x 1 y 1 c 1 s 2 = x 2 y 2 c 2 + x 2 y 2 c 2 + x 2 y 2 c 2 + x 2 y 2 c 2 s 3 =x 3 y 3 c 3 +x 3 y 3 c 3 +x 3 y 3 c 3 +x 3 y 3 c 3 2 livelli 4 livelli 6 livelli 8 livelli Corso ACSO prof. C. Silvano Politecnico di Milano 42
Ripple Carry Adder Si consideri un RCA su 16-bit. Calcolare i ritardi associati ai bit c 16, s 15. Si consideri un RCA su 32-bit. Calcolare i ritardi associati ai bit c 32, s 31. Corso ACSO prof. C. Silvano Politecnico di Milano 43