Salta al contenuto
Note per Studenti Sistemi digitali, segnali binari e livelli di astrazione

Sistemi digitali, segnali binari e livelli di astrazione

In questa pagina 7

Questa nota fissa il vocabolario con cui si legge tutto il resto del corso: che cosa vuol dire "digitale", perché si sceglie il sistema binario, come i due valori 0 e 1 diventano tensioni elettriche e perché si progetta a livelli.

Grandezze analogiche e digitali

Le grandezze fisiche che misuriamo (temperatura di una stanza, velocità, pressione, tensione di un microfono) variano in modo continuo: tra due valori qualsiasi ce ne sono infiniti altri. Un segnale analogico può assumere ogni valore in un intervallo.

Un insieme è discreto quando ogni elemento ha un intorno in cui non cadono altri elementi dell'insieme: le dita di una mano, i gradini di una scala, le dodici note della scala temperata, le lettere di un alfabeto. Un sistema digitale immagazzina, sposta ed elabora solo informazione fatta di elementi discreti. L'esempio classico: il piano inclinato è analogico (si può stare in qualunque punto), la scala è digitale (si sta solo su un gradino).

Per far entrare in un sistema digitale una grandezza continua bisogna digitalizzarla, cioè renderla discreta: un termometro digitale mostra la temperatura con una cifra decimale tra 0,00{,}0 e 40,0 ∘C40{,}0\,\mathrm{^\circ C}, quindi con 401401 valori possibili. Attenzione a non confondere i due aggettivi: tutte le grandezze, analogiche e digitali, si descrivono con numeri; "digitale" non vuol dire "numerico" ma "a valori discreti".

Perché binario

Un segnale che può assumere solo due valori si dice binario; i valori si indicano con 0 e 1 (oppure OFF/ON, FALSO/VERO, basso/alto). Una cifra binaria è un bitbinary digit: la quantità minima di informazione, vale 0 oppure 1.

Il motivo della scelta è la robustezza al rumore. Si prenda un intervallo di tensione di 1 V1\,\mathrm V:

  • con 2 valori (0 e 1) i livelli distano fra loro 1 V1\,\mathrm V: un disturbo di qualche centinaio di millivolt non fa scambiare uno 0 con un 1;
  • con 10 valori equispaziati (le cifre decimali) i livelli distano 19≈0,11 V\frac1{9}\approx0{,}11\,\mathrm V: lo stesso disturbo basta per leggere la cifra adiacente.

Quindi, a parità di intervallo di tensione e di rumore, un sistema a 2 livelli è più tollerante al rumore di uno a 10 livelli. Il prezzo è che servono più cifre per scrivere lo stesso numero (vedi Basi di numerazione e conversioni - binario, ottale ed esadecimaleUn numero in base $r$ vale $\sum a_i r^i$ (cifre $a_i\in{0,\dots,r-1}$). Conversioni: base $r\to$ decimale con la somma pesata; decimale $\to$ base $r$ per divisioni successive (parte intera, resti letti dal basso) e moltiplicazioni successive (parte frazionaria, parti intere lette dall'alto); binario $\leftrightarrow$ ottale/esadecimale a gruppi di 3/4 bit. Somma, differenza e prodotto binari seguono le regole decimali con cifre 0 e 1; la differenza ha prestiti, il prodotto somma prodotti parziali traslati.Basi di numerazione e conversioni - binario, ottale ed esadecimale →).

Due intervalli di tensione, e non due tensioni

Nei chip reali "0" e "1" non sono due tensioni esatte ma due intervalli separati da una zona proibita. Esempio numerico (alimentazione circa 1 V1\,\mathrm V):

basso (0) alto (1)
ingresso riconosciuto come −0,1 V<VIN<0,4 V-0{,}1\,\mathrm V<V_{IN}<0{,}4\,\mathrm V 0,6 V<VIN<1 V0{,}6\,\mathrm V<V_{IN}<1\,\mathrm V
uscita prodotta −0,1 V≤VOUT≤0,1 V-0{,}1\,\mathrm V\le V_{OUT}\le0{,}1\,\mathrm V 0,9 V≤VOUT≤1,1 V0{,}9\,\mathrm V\le V_{OUT}\le1{,}1\,\mathrm V

Tra 0,40{,}4 e 0,6 V0{,}6\,\mathrm V c'è la regione proibita: un segnale lì dentro non è riconosciuto né come 0 né come 1.

L'intervallo ammesso in ingresso è più ampio di quello prodotto in uscita. È una scelta di progetto voluta: una porta emette livelli "puliti" (stretti) ma accetta in ingresso livelli anche "sporchi" (larghi). Il rumore sovrapposto al cammino tra due porte non basta quindi a far riconoscere male il segnale. Si definiscono i margini di rumore:

NMH=VOH,min⁡−VIH,min⁡=0,9−0,6=0,3 V,NML=VIL,max⁡−VOL,max⁡=0,4−0,1=0,3 VNM_H=V_{OH,\min}-V_{IH,\min}=0{,}9-0{,}6=0{,}3\,\mathrm V,\qquad NM_L=V_{IL,\max}-V_{OL,\max}=0{,}4-0{,}1=0{,}3\,\mathrm V

Un disturbo fino a 0,3 V0{,}3\,\mathrm V è assorbito. La conseguenza è la proprietà rigenerativa: la porta in uscita restituisce un segnale ripulito dal rumore, e il rumore non si accumula di stadio in stadio, mentre in un circuito analogico ogni stadio lo somma al precedente.

Nel corso si semplifica ancora: le transizioni 0→1 e 1→0 sono considerate istantanee e si ragiona solo sui valori logici. I ritardi reali torneranno nella nota sui ritardi delle porteLe porte AND, OR, NOT realizzano le operazioni dell'algebra di Boole; NAND, NOR, XOR e XNOR ne derivano. Ogni funzione si descrive con la tabella di verità ($2^n$ righe). XOR a più ingressi = funzione di disparità (1 se gli 1 sono in numero dispari). Una porta reale ha ritardo di propagazione $t_G$ (diverso per 0→1 e 1→0): in un diagramma temporale l'uscita cambia $t_G$ dopo l'ingresso. NAND e NOR sono universali: bastano da sole a realizzare qualunque funzione. In VHDL: and, or, not, nand, nor, xor, xnor.Porte logiche, ritardi e porte universali → e nella Temporizzazione dei flip-flop - setup, hold e frequenza massima di clockUn flip-flop memorizza il dato corretto solo se l'ingresso è stabile per $t_s$ (setup) prima e $t_h$ (hold) dopo il fronte di clock; l'uscita cambia dopo il tempo di propagazione $t_{pd,FF}$ dal fronte. In un circuito sincrono il periodo deve soddisfare $T\ge t_{pd,FF}+t_{COMB}+t_{s,FF}+t_{slack}$, quindi $f_{max}=1/T_{min}$; abbassare la frequenza risolve le violazioni di setup. Il vincolo di hold $t_{pd,FF,min}+t_{COMB,min}\ge t_h$ non dipende dal clock (e non si risolve rallentandolo). Il clock skew modifica i vincoli.Temporizzazione dei flip-flop - setup, hold e frequenza massima di clock →.

Rappresentare informazione con i bit

Un gruppo di nn bit ha 2n2^n combinazioni distinte, quindi può rappresentare 2n2^n elementi:

bit 1 2 3 4 8 10 16
combinazioni 2 4 8 16 256 1024 65536

Si usano tre idee:

  1. informazione binaria (un bit): luce accesa/spenta, porta aperta/chiusa;
  2. elementi di un insieme (più bit): 8 colori si codificano con 3 bit; i caratteri con l'ASCII (Codici binari - BCD, ASCII, Unicode, parità e GrayUn codice binario a $n$ bit distingue $2^n$ elementi. BCD: una cifra decimale ogni 4 bit (1010–1111 non usati; 10 richiede 8 bit, non è il binario del numero). ASCII: 7 bit per 128 caratteri, la cifra ASCII è 011 seguito dal BCD. Unicode/UTF-8: da 1 a 4 byte, compatibile con ASCII. Bit di parità: rileva errori su un numero dispari di bit. Distanza di Hamming = numero di bit diversi. Codice Gray: numeri consecutivi differiscono di un solo bit (sensori di posizione); si costruisce per riflessione o con $g_i=b_i\oplus b_{i+1}$.Codici binari - BCD, ASCII, Unicode, parità e Gray →);
  3. grandezze continue quantizzate: la temperatura di prima (401401 valori) richiede 99 bit, perché 28=256<401≤29=5122^8=256<401\le2^9=512.

Precisione. La precisione con cui un sistema digitale rappresenta una grandezza dipende dal numero di bit usati: con più bit, passi più piccoli. Non dipende dall'ampiezza della tensione che rappresenta il bit (che influenza invece il rumore), né dalla frequenza di clock (che influenza la velocità).

Unità per la quantità di dati (sistema decimale, potenze di 10): 1 kB=103 B1\,\mathrm{kB}=10^3\,\mathrm B, 1 MB=1061\,\mathrm{MB}=10^6, 1 GB=1091\,\mathrm{GB}=10^9, 1 TB=10121\,\mathrm{TB}=10^{12} (un terabyte), 1 PB=10151\,\mathrm{PB}=10^{15}, 1 EB=10181\,\mathrm{EB}=10^{18}, 1 ZB=10211\,\mathrm{ZB}=10^{21}. Le potenze di 2 sono vicine ma non uguali: 210=1024≈1032^{10}=1024\approx10^3, 220≈1062^{20}\approx10^6, 230≈1092^{30}\approx10^9, 240≈10122^{40}\approx10^{12}.

Il calcolatore come sistema digitale

Un calcolatore digitale ha tre parti, collegate da bus:

  • memoria: contiene dati (di ingresso, di uscita, intermedi) e istruzioni;
  • CPU (Central Processing Unit), a sua volta divisa in unità di controllo, che gestisce il flusso di informazioni tra i blocchi, e datapath, che esegue le operazioni sui dati secondo il programma;
  • dispositivi di ingresso/uscita: tastiera, microfono, telecamera (ingresso); schermo, stampante, altoparlanti (uscita); chiavette USB (ingresso/uscita).

La stessa struttura si ritrova in versioni ridotte: microprocessori, microcontrollori, DSP, spesso integrati in un solo chip e incorporati (embedded) in sistemi più grandi (auto, smartphone, televisori, satelliti). Un'automobile contiene decine o centinaia di microcontrollori, ciascuno con una funzione (ABS, stabilità, motore, cambio, sterzo, illuminazione). Differenza CPU/GPU: la CPU coordina operazioni complesse, la GPU esegue operazioni semplici su grandi quantità di dati (grafica, intelligenza artificiale).

Tappe storiche da ricordare, perché compaiono nei quiz: primo transistor funzionante nel 1948 (Bell Laboratories, germanio); primo circuito integrato nel 1958 (Texas Instruments, germanio); primo microprocessore commerciale nel 1971 (Intel 4004).

Livelli di astrazione

Un sistema digitale si descrive a livelli, dal più astratto (meno dettagli fisici) al più concreto:

  1. algoritmi: sequenza finita di passi, indipendente dal linguaggio;
  2. linguaggi di programmazione (Python, C++, Java);
  3. sistemi operativi;
  4. ISA (Instruction Set Architecture): le istruzioni elementari del linguaggio macchina di un processore;
  5. microarchitettura: come un certo processore realizza l'ISA;
  6. trasferimento tra registri (RTL): micro-operazioni come spostamenti di gruppi di bit tra registri;
  7. porte logiche: operazioni elementari sui bit (livello logico, non elettrico);
  8. circuito a transistor: descrizione elettrica; i transistor funzionano da interruttori.

Ogni livello nasconde i dettagli di quello sotto: si può cambiare un livello lasciando invariati quelli sopra. Per una somma somma = A + B (livello 2) il livello 7 è il circuito di porte del sommatore con ingressi e uscite {0,1}\{0,1\}, il livello 8 il circuito in cui le correnti attraversano i transistor, con ingressi {VIL,VIH}\{V_{IL},V_{IH}\} e uscite {VOL,VOH}\{V_{OL},V_{OH}\}. Scegliere il livello giusto serve a trascurare i dettagli inutili e ottimizzare quelli che contano.

Il corso copre i livelli intermedi: porte logiche, trasferimento tra registri, microarchitettura e ISA. Gli algoritmi e i linguaggi sono nei corsi di informatica, i transistor nei corsi di elettronica.

Top-down e bottom-up

  • Top-down: si parte dalle specifiche ad alto livello, come scatola nera, e si scompone il sistema in blocchi sempre più piccoli fino a blocchi realizzabili. Si privilegia la visione d'insieme.
  • Bottom-up: si parte da componenti elementari specificati nel dettaglio e li si collega in componenti più grandi fino al sistema. Si possono collaudare i singoli blocchi, ma il sistema completo si può verificare solo alla fine.

In pratica si combinano: la comprensione del sistema (top-down) serve a progettare bene, ma conviene riusare blocchi già esistenti (bottom-up). Nel corso si procede bottom-up.

Flusso di progettazione

  1. Specifiche: che cosa deve fare il circuito (testo o codice HDL), non come.
  2. Formulazione: tabelle di verità, equazioni booleane o diagrammi degli stati.
  3. Ottimizzazione: meno porte, meno transistor, meno area di silicio, nel rispetto dei vincoli (numero massimo di ingressi per porta, ritardi, clock). È iterativa.
  4. Mappatura tecnologica: si sostituiscono i blocchi con i componenti disponibili nella tecnologia scelta.
  5. Verifica: simulazione e controllo della correttezza.

Per descrivere i circuiti si usa il VHDL, un linguaggio di descrizione dell'hardware: non è un linguaggio di programmazione. In un programma le istruzioni sono eseguite una alla volta da una CPU; in VHDL tutte le dichiarazioni sono attive nello stesso istante, perché descrivono blocchi di hardware che lavorano in parallelo (Introduzione al VHDL - entity, architecture, tipi e livelli di descrizioneVHDL è un linguaggio di descrizione dell'hardware (HDL), non di programmazione: le dichiarazioni sono concorrenti e descrivono blocchi di circuito; serve per documentare, simulare e sintetizzare. Un blocco ha una entity (nome e porte in/out) e almeno una architecture (cosa c'è dentro: structural con component e port map, dataflow con equazioni booleane, behavioral con comportamento). Tipi: std_logic (da 1164: '0','1','X','Z','U','-',...), std_logic_vector, bit, boolean, integer. Signal per i collegamenti interni, constant per i valori fissi.Introduzione al VHDL - entity, architecture, tipi e livelli di descrizione →).

Errori comuni

  • Dire che la precisione dipende dall'ampiezza della tensione del bit o dal clock: dipende dal numero di bit.
  • Capovolgere la relazione tra gli intervalli: è l'ingresso a essere più largo dell'uscita.
  • Confondere "digitale" con "numerico".
  • Credere che il rumore in un circuito digitale non esista: esiste, ma i margini di rumore lo assorbono.
  • Pensare che il VHDL sia un linguaggio sequenziale come Python.

Versione ripasso

Esercizi su questo argomento

Teoria collegata