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

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).

  • 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

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. 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.

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.

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):

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

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.

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

  • Senza segno: NN bit →0…2N−1\to0\ldots2^N-1; esadecimale = gruppi di 44 bit (1101 1010=DA=2181101\,1010=DA=218).
  • Complemento a due: v=−bN−12N−1+∑bi2iv=-b_{N-1}2^{N-1}+\sum b_i2^i, range −2N−1…2N−1−1-2^{N-1}\ldots2^{N-1}-1; negazione = inverti + 11 (+13→−13=1111 0011+13\to-13=1111\,0011); estensione di segno = replica dell'MSB; A−B=A+B‾+1A-B=A+\overline B+1; overflow se due operandi dello stesso segno danno segno opposto (100+50→−106100+50\to-106 su 88 bit).
  • BCD: 4 bit per cifra (0…90\ldots9); 156=0001 0101 0110156=0001\,0101\,0110. Double dabble: shift a sinistra; prima di ogni shift ogni gruppo >4>4 riceve +3+3; NN bit →N\to N passi (13 bit: 4 gruppi).
  • Gray: g=b⊕(b≫1)g=b\oplus(b\gg1), un solo bit cambia; evita letture errate durante le transizioni.
  • Virgola fissa: intero/2F/2^F (4 bit frazionari: 0,06250{,}0625; 10102=0,6251010_2=0{,}625, mappato su 00–9999: 6262); ASCII (7 bit), bit di parità.
  • Errori: asimmetria del range, correzione +3+3 dopo lo shift, BCD letto come binario, LSB/MSB scambiati.

Esercizi su questo argomento

Teoria collegata