Salta al contenuto
Note per Studenti Rappresentazione dei numeri e dell'informazione

Rappresentazione dei numeri e dell'informazione

In questa pagina 7

Un sistema digitale manipola solo bit (Segnali digitali, livelli logici e margini di rumoreUn segnale digitale assume un insieme finito di valori (di solito due: bit, tipicamente 0 V e V_DD); con N bit si distinguono 2^N livelli. Il valore logico di un'uscita è garantito sopra V_OH (uno) e sotto V_OL (zero); un ingresso è letto come uno sopra V_IH e come zero sotto V_IL, con intervalli di ingresso più larghi di quelli di uscita. I margini di rumore sono NM_H = V_OH − V_IH e NM_L = V_IL − V_OL. La caratteristica di trasferimento statica (VTC) ha la soglia logica V_M (V_out = V_in); V_IL e V_IH sono i punti a pendenza −1. La proprietà rigenerativa (pendenza alta nella zona di transizione, guadagno maggiore di 1) ripulisce il segnale a ogni stadio ed è legata alla bistabilità della coppia di inverter in retroazione. Altre figure di merito: fan-in, fan-out, tempi di propagazione, potenza, costo.Segnali digitali, livelli logici e margini di rumore →): ogni informazione (un numero, una lettera, un colore) deve essere tradotta in una stringa di bit con una convenzione condivisa. Il programma prevede la rappresentazione di dati numerici e di informazioni complesse; qui si raccolgono le codifiche che servono in tutto il corso (sommatori, ALU, display, convertitori VHDL).

Numeri senza segno

Definizione (numeri senza segno su N bit). Con NN bit bN−1…b1b0b_{N-1}\dots b_1b_0 il valore è ∑i=0N−1bi2i\sum_{i=0}^{N-1}b_i2^i e l'intervallo rappresentabile è 0,…,2N−10,\dots,2^N-1. Il bit bN−1b_{N-1} è il più significativo (MSB), b0b_0 il meno significativo (LSB).

Esempio. Con N=8N = 8: 1101 10102=128+64+16+8+2=2181101\,1010_2 = 128 + 64 + 16 + 8 + 2 = 218, nell'intervallo 00–255255.

  • Conversione in binario: divisioni successive per 22, leggendo i resti dall'ultimo al primo. 13=8+4+1=1101213=8+4+1=1101_2.
  • Esadecimale: 16 simboli 00–99, AA–FF; ogni cifra equivale a un gruppo di 44 bit (nibble). 1101 10102=DA16=2181101\,1010_2=DA_{16}=218. Compare ovunque (indirizzi, display a 7 segmenti, VHDL: X"B35").
  • Quantità: N=8N=8: 00–255255; N=13N=13: 00–81918191 (quattro cifre decimali bastano); N=16N=16: 00–6553565535.

Numeri con segno: complemento a due

Definizione (complemento a due). Nel complemento a due su NN bit il bit più significativo ha peso negativo: v=−bN−12N−1+∑i=0N−2bi2i,−2N−1≤v≤2N−1−1.v=-b_{N-1}2^{N-1}+\sum_{i=0}^{N-2}b_i2^i,\qquad-2^{N-1}\le v\le2^{N-1}-1.

Esempio. Su N=8N = 8 bit: 1111 00112=−128+64+32+16+2+1=−131111\,0011_2 = -128 + 64 + 32 + 16 + 2 + 1 = -13.

Con N=8N=8: da −128-128 a +127+127. Il motivo per cui è la scelta universale è che somma e sottrazione usano lo stesso sommatore degli interi senza segno, ignorando il riporto finale.

Proprietà (negazione, estensione di segno, sottrazione e overflow nel complemento a due).

Esempio. +13=0000 1101+13 = 0000\,1101; invertendo i bit si ha 1111 00101111\,0010 e sommando 11 si ottiene 1111 0011=−131111\,0011 = -13.

BCD (Binary Coded Decimal)

Nel BCD ogni cifra decimale è codificata con 44 bit (valori 00000000–10011001; gli altri sei non sono ammessi). 101010_{10} diventa 0001 00000001\,0000 (cifra 11 e cifra 00), 15610=0001 0101 0110156_{10}=0001\,0101\,0110: occupa più bit del binario puro (1212 contro 88), ma ogni gruppo si manda direttamente a un decoder per display a 7 segmenti.

Proprietà (conversione da binario a BCD, double dabble). Conversione binario →\to BCD (double dabble). Si scorre il binario a sinistra un bit alla volta nel registro BCD; prima di ogni shift, se un gruppo di 44 bit del BCD è maggiore di 44, gli si somma 33. Il motivo: un gruppo che vale 55 raddoppiato darebbe 10=1010210=1010_2 (non ammesso in BCD), mentre (5+3)⋅2=16=1 00002(5+3)\cdot2=16=1\,0000_2, cioè una decina e zero unità; per un gruppo ≤4\le4 il doppio è ≤8\le8 e non crea problemi. Per 156=1001 11002156=1001\,1100_2 (8 passi):

Esempio. Per 156=1001 11002156 = 1001\,1100_2 servono 88 passi e si ottiene 0001 0101 0110BCD0001\,0101\,0110_{BCD} (cifre 11, 55, 66); un gruppo che vale 55 prima dello shift diventa 5+3=85 + 3 = 8 e raddoppiato dà 1616, cioè una decina.

passo BCD (centinaia, decine, unità) binario che resta
1 0000 0000 0001 0011 1000
2 0000 0000 0010 0111 0000
3 0000 0000 0100 1110 0000
4 0000 0000 1001 1100 0000
5 0000 0001 1001 1000 0000
6 0000 0011 1001 0000 0000
7 0000 0111 1000 0000 0000
8 0001 0101 0110 0000 0000

Dopo kk passi il registro BCD contiene il valore decimale dei primi kk bit del numero (dopo 66 passi 1001112=39100111_2=39, dopo 77 passi 10011102=781001110_2=78). Al passo 44 le unità valgono 44 e non si correggono; al passo 66 valgono 9>49>4 e prima dello shift diventano 9+3=12=11009+3=12=1100, da cui 0011 1001=390011\,1001=39. All'ultimo passo unità 8→118\to11 e decine 7→107\to10 prima dello shift, che produce 0001 0101 0110=1560001\,0101\,0110=156. Per convertire 1313 bit servono 44 gruppi BCD (213=81922^{13}=8192) e 1313 passi: nel laboratorio si usa per mostrare un numero su quattro display.

Codice Gray

Definizione (codice Gray). Nel codice Gray due valori consecutivi differiscono per un solo bit: g=b⊕(b≫1)g=b\oplus(b\gg1). Per 33 bit: 000,001,011,010,110,111,101,100000,001,011,010,110,111,101,100. Serve dove un conteggio potrebbe essere letto durante una transizione (codificatori ottici, contatori che attraversano domini di clock diversi): in binario il passaggio 011→100011\to100 cambia tre bit, e con tempi diversi si potrebbe leggere 111111 o 000000; in Gray si legge sempre o il vecchio o il nuovo valore.

Esempio. Con b=011b = 011: g=011⊕001=010g = 011 \oplus 001 = 010; con b=100b = 100: g=100⊕010=110g = 100 \oplus 010 = 110. Il passaggio 3→43 \to 4 cambia tre bit in binario (011→100011 \to 100) e uno solo in Gray (010→110010 \to 110).

Numeri frazionari: virgola fissa

In virgola fissa il punto decimale ha posizione stabilita a priori: con FF bit frazionari il numero rappresentato è l'intero diviso 2F2^F. Un sensore di temperatura che restituisce un dato a 1313 bit (segno, 88 bit di parte intera, 44 bit di parte frazionaria) ha una risoluzione di 1/24=0,0625 ∘C1/2^4=0{,}0625\ ^\circ\mathrm C. Il dato 0 0001 1001 10100\,0001\,1001\,1010 ha parte intera 0001 1001=250001\,1001=25 e parte frazionaria 10102=101010_2=10, cioè 10/16=0,62510/16=0{,}625: 25,625 ∘C25{,}625\ ^\circ\mathrm C. Per mostrarla in decimale la parte frazionaria va rimappata su 00–9999 (moltiplicando per 100/16=6,25100/16=6{,}25: 10⋅6,25=62,5≈6210\cdot6{,}25=62{,}5\approx62) e poi convertita in BCD.

Altre codifiche

Errori comuni

  • Dimenticare che nel complemento a due l'intervallo è asimmetrico (−128-128 esiste, +128+128 no su 88 bit) e che −(−128)-(-128) dà ancora −128-128.
  • Applicare la correzione +3+3 dopo lo shift invece che prima.
  • Leggere un BCD come binario: 0001 0101 01100001\,0101\,0110 è 156156 (BCD) ma 342342 come binario.
  • Confondere LSB e MSB (nel testo di alcune prove il vettore ha l'LSB a sinistra).

Versione ripasso

Esercizi su questo argomento

Teoria collegata