Sei sulla pagina 1di 18

App.

1 – Richiami Sistemi digitali

APP. 1

RICHIAMI SUI SISTEMI DIGITALI

CODIFICA BINARIA
La codifica binaria (binary encoding) segue un criterio identico a quello della codifica decimale, solo che
anziché avere a disposizione 10 simboli 0,1,2,3,4,5,6,7,8,9 come la codifica in base 10, dispone di 2 simboli
soltanto, da cui il nome. Come per i numeri interi, anche per i numeri binari ogni cifra o bit (da binary digit)
ha un peso diverso in base alla posizione nel numero. Come il numero decimale
1024  1  103  0  102  2  101  4  100 , così il numero binario 1011  1  23  0  22  1  21  1  20  8  0  2  1  11 . In
un numero binario il bit più a sinistra (leftmost bit) è chiamato MSB (most significant bit), quello più a destra
(rightmost bit) è chiamato LSB (least significant bit). Con la regola dei pesi appena enunciata, è banale
trasformare un numero binario in un numero intero decimale. Inoltre, come ad esempio tre cifre decimali
rappresentano 103 numeri diversi (0999), così N cifre binarie rappresentano 2N numeri diversi (0  2N-1).
4-bit
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Binary
decimal 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15

Viceversa se si vuole trasformare un numero intero in un numero binario, bisogna tenere presente che detto I
il numero, occorrono un numero di cifre binarie pari alla parte intera Int 1  log 2 I . Le cifre binarie 0 ed 1
sono chiamati 0 ed 1 logico, per distinguerli dalle tensioni associate ad essi, che sono chiamati livelli logici.
Per esempio il livello logico 0V (ground) può essere associato allo 0 logico, ed il livello logico +5V può essere
associato all’1 logico, o viceversa. Una parola di 8 bit viene anche chiamata byte.
Per rappresentare anche i numeri negativi, si può usare una codifica di tipo sign-magnitude, in cui il bit
MSB rappresenta il segno (0 positivo, 1 negativo) e gli altri bit il modulo. Gli svantaggi di questa
rappresentazione sono che lo 0 ha due rappresentazioni, e che prima di fare operazioni matematiche bisogna
distinguere il segno degli operandi.
Invece nella rappresentazione in complemento a due, si usano i primi 2N-1 numeri per rappresentare i
positivi, gli altri per rappresentare i negativi sostituendone il modulo X con 2 N-X. Per esempio con N=3 cifre
binarie, il numero +3011, il numero 3233=5=101=101. In pratica la codifica dei numeri negativi si
ottiene codificando il modulo in binario, quindi si invertono uno a uno tutti i bit, e infine si aggiunge un LSB.
Per esempio:
binary bit inversion  LSB
3  011  100  100  001  101
I vantaggi di questa rappresentazione sono che lo zero ha un’unica codifica e soprattutto che le sottrazioni
possono essere operate come somme, senza discriminare il segno. Per esempio per effettuare l’operazione
+2-3=-1, è sufficiente effettuare la somma binaria 010+101=111.
Representations of signed numbers
Binary value 000 001 010 011 100 101 110 111
Sign and magnitude +0 +1 +2 +3 -0 -1 -2 -3
Two’s complement +0 +1 +2 +3 -4 -3 -2 -1

ALTRE CODIFICHE
Esistono altri tipi di codifica binaria, utilizzati da alcuni ADC, come la codifica decimale-binaria (binary
coded decimal BCD), in cui le singole cifre decimali sono codificate singolarmente con 4 cifre binarie. Per
esempio il numero 18 è codificato 0001-1000. È una codifica meno compatta di quella binaria, utilizzata per
applicazioni commerciali.

1
App.1 – Richiami Sistemi digitali

Un difetto della codifica binaria è che richiede un numero elevato di cifre per rappresentare numeri decimali.
Una codifica più compatta è la codifica esadecimale: si codifica un numero decimale in binario, si
raggruppano i bit in gruppi di 4, a partire da LSB, aggiungendo eventualmente degli 0 a sinistra, poi si
codifica ogni gruppo in base 16, con i simboli 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F, usando il prefisso “x” (linguaggi
C, Java ecc, “b” invece per la codifica binaria), preceduto da 0, perché tutti i numeri devono iniziare con una
cifra non un carattere, o il suffisso “h” (Pascal, Assembly ecc). Esempio:
0 2 D 1

0b0000 001011010001  0x02D1  02D1h  2  162  13  16  16  721


Decimal – Binary – Hexadecimal
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
0 1 2 3 4 5 6 7 8 9 A B C D E F

La codifica esadecimale viene usata soltanto a livello software per rappresentare in maniera compatta
numeri elevati. Per esempio, per codificare gli indirizzi delle celle di una memoria, con 16 linee di indirizzi è
possibile codificare 65536 locazioni diverse, che vanno dall’indirizzo 0000h all’indirizzo FFFFh.
Gli errori nella trasmissione dei bit vengono valutati attraverso il BER (Bit Error Rate). Per esempio, un
BER=10-7 significa che in media si commette un errore ogni 10 7 bit. Esistono allora codici che permettono di
rilevare la presenza di errori. Tra i più noti sono i codici a controllo di parità, che consistono nell’aggiungere
un bit alla parola di codice, all’inizio o alla fine in maniera prestabilita, che vale 1 o 0 in modo tale che il
numero totale di 1 sia pari (parità pari) o dispari (parità dispari). Se al ricevitore arriva una parola che non
soddisfa il criterio di parità scelto, manda una segnalazione di errore che implica la ritrasmissione della
parola. Ovviamente questo codice non può rilevare un errore doppio con effetti opposti.
Le informazioni di carattere testuale vengono rappresentate con la codifica ASCII (American Standard Code
for Interchange of Information). Originariamente la codifica era su 7 bit, per caratteri alfanumerici (cifre
decimali, lettere maiuscole e minuscole). In seguito è stata estesa ad 8 bit introducendo caratteri grafici e
caratteri speciali (accentati). In tempi più recenti è stata sviluppata la codifica Unicode, che, utilizzando 2
byte, può rappresentare 65536 caratteri diversi.

ASCII

RAPPRESENTAZIONE NUMERICA IN VIRGOLA FISSA


In generale, per trasformare un numero reale in codifica binaria occorre distinguere la parte intera (prima
della virgola) da quella decimale (dopo la virgola). L’aritmetica binaria in virgola fissa (fixed point) prevede
che siano assegnati un numero fisso M di bit alla parte intera I, che verrà rappresentata dalla sequenza di bit
b0 b1 b2 ...bM1 con significato
I  b0  b1 21  b2 22  bM1 2M1
ed un numero fisso N di bit alla parte decimale P, che verrà rappresentata dalla sequenza di bit b1 b2 ...b N
con significato
P  b1 21  b2 22  b N 2  N

2
App.1 – Richiami Sistemi digitali

Dato un numero in base 10, il valore di ciascun bit della parte intera coincide con il resto della divisione che
si ottiene dividendo successivamente per 2
I 2  b1  b2 21  bM1 2M2 (resto b0)  I 2  b0  2  b2  b3 21 b M 1 2 M  3

(resto b1) e così via, aggiungendo un “1” a sinistra, e completando con un numero sufficiente di “0”. Il valore
di ciascun bit della parte decimale coincide con la parte intera che si ottiene moltiplicando successivamente
per 2 le cifre decimali
2P  b1  b2 21  b N 2  N  1 2  2P  b1   b2  b3 2  b N 2  N  2 ecc.
Esempio: Numero=60.12 M=8 , N=8
Empiricamente: 60=32+16+8+4=2 5 +2 4 +2 3 +2 2 =111100  00111100
Parte intera: 60:2= 30:2= 15:2= 7:2= 3:2= 1
Resto 0 (b0 ) 0 (b1 ) 1 (b2 ) 1 (b3 ) 1 (b4 )  11100
Risultato 00 + 1 + 11100=00111100
Parte decimale: 0.12  2=0.24 0.24  2=0.48 0.48  2=0.96 0.96  2  1.92
Intero 0 (b-1 ) 0 (b-2 ) 0 (b-3 ) 1 (b-4 )
0.92  2=1.84 0.84  2=1.68 0.68  2=1.36 0.36  2  0.72
Intero 1 (b-5 ) 1 (b-6 ) 1 (b-7 ) 0 (b-8 )
Risultato 00011110

L’aritmetica in virgola fissa si implementa facilmente in poco spazio di memoria e si esegue velocemente, per
cui è adatta ad applicazioni in tempo reale (real-time signal processing), ovvero quelle applicazioni che
prevedono l’esecuzioni di operazioni su un flusso continuo di dati, su processori che non hanno un
coprocessore matematico in virgola mobile. Internamente l’unità aritmetica (Arithmetic Logic Unit, ALU)
riceve un valore intero, ma il programmatore separa la parte decimale da quella intera. Tuttavia, quando il
risultato di un’operazione eccede il range consentito dal numero di bit assegnati alla parte intera, l’aritmetica
in virgola fissa non consente di rappresentare correttamente il numero, ma tuttalpiù fornisce una
segnalazione di overflow. Nei microcontrollori che eseguono solo operazioni a 8 bit è necessario sviluppare
una serie di routine matematiche per eseguire operazioni con numeri più grandi o con più cifre decimali. Un
modo può essere quello di rappresentare i numeri con 4 bytes (32 bit), di cui se ne possono usare 20 per la
parte intera e 12 per la parte decimale, ottenendo una precisione alla terza cifra decimale.

RAPPRESENTAZIONE NUMERICA IN VIRGOLA MOBILE


La virgola mobile (floating point FLP) consente di risolvere i problemi connessi con la gestione della
posizione della virgola nella sequenza dei calcoli. La convenzione più recente quasi universalmente accettata
è la IEEE 754-2008. Tra i vari formati possibili quelli più usati sono singola precisione (32-bit) e doppia
precisione (64-bit), ma esistono anche mezza precisione (16-bit) e quadrupla precisione (128-bit).
Partendo da un numero composto da una base o mantissa con segno, suddivisa in una parte intera ed una
decimale, e un esponente (o caratteristica), si procede alla normalizzazione della mantissa, modificando
l’esponente in modo che la parte intera della mantissa sia sempre 1. Questo bit viene nascosto e quindi la
mantissa rappresenta sempre la sola parte frazionaria. L’esponente può risultare positivo o negativo. Per
evitare il segno, si usa un esponente con bias (offset) in modo che sia sempre positivo.
Nella rappresentazione in virgola mobile, l’MSB rappresenta il segno della mantissa, seguito dall’esponente.
La mantissa è rappresentata dai bit rimanenti. Il valore di un numero si calcola da:
 1s  2exponent exponent bias  mantissa
L'esponente Emin-1 (con bias=0) indica il valore ±0 (se M=0) e numeri de-normalizzati (se M0), mentre Emax+1
indica ± (se M=0) o NaN (not a number) (se M0).
Per esempio si voglia trasformare in binario a 32 bit il numero 14.235
La parte intera può essere convertita nel numero binario: 1110
La parte frazionaria nel numero binario: 0.00111100001010001111
La rappresentazione del numero è allora: 1110.00111100001010001111
La normalizzazione richiede che la virgola sia spostata a sinistra: 1.11000111100001010001111  2
3

3
App.1 – Richiami Sistemi digitali

Segno: 0 (numero positivo) Esponente: 127 + 3 = 130 = 10000010


Mantissa: 11000111100001010001111 (dopo la virgola)

Precisione Tipo Esp M Valore


s esp-127
normalizzato 0 < esp < 255 qualunque (-1) (1,M)2
denormalizzato esp = 0 M0 s
(-1) (0,M)2
-126

s
Singola Zero esp = 0 M=0 (-1) 0
s
Infinito esp = 255 M=0 (-1) 
NaN esp = 255 M0 NaN
s esp-1023
normalizzato 0 < esp < 2047 qualunque (-1) (1,M)2
denormalizzato esp = 0 M0 s
(-1) (0,M)2
1022

s
Doppia Zero esp = 0 M=0 (-1) 0
s
Infinito esp = 2047 M=0 (-1) 
NaN esp = 2047 M0 NaN

LOGICA COMBINATORIA

OPERAZIONI LOGICHE
Le principali operazioni logiche sono:
z  x AND y  x  y z  x OR y  x  y z  x XOR y  x  y y  NOT x  x
che hanno, rispettivamente, il significato:
AND: z è vero se sono veri sia x che y (o se sono tutti veri, o se nessuno è falso);
OR: z è vero se x o y sono veri (o se almenno è vero, o se non sono tutti falsi);
XOR: z è vero se x e y non sono entrambi veri (o non sono entrambi falsi, o x  y)
NOT: y è vero se non lo è x (o se x è falso).
Associando il simbolo “0” alla caratteristica “falso” ed il simbolo “1” alla caratteristica “vero”, si può ottenere
la seguente tabella di verità (truth table):

AND NAND OR NOR NOT XOR


x y
xy xy x+y x+y x x y  xy  xy
0 0 0 1 0 1 1 0
0 1 0 1 1 0 1 1
1 0 0 1 1 0 0 1
1 1 1 0 1 0 0 0

Ai simboli dell’alfabeto binario si possono associare altrettanti livelli di tensione, detti livelli logici, secondo
una logica positiva o una logica negativa. Si riportano i livelli logici secondo la logica standard CMOS e
TTL.

Positive Logic Negative Logic TTL standard CMOS standard


V V
VHmax VHmax VHmax 5 VHmax 3.3
logic “1” logic “0”
VHmin VHmin VHmin 2.2 VHmin 2.2
unspecified unspecified
VLmax VLmax VLmax 0.8 VLmax 0.8
logic “0” logic “1”
0 0 VLmin 0 VLmin 0
Alle operazioni logiche elementari suddette si possono associare altrettante porte logiche (logic gates). La
presenza di un “circoletto” all’uscita di una porta denota l’operazione di inversione logica (NOT).

4
App.1 – Richiami Sistemi digitali

X1 X1
X1+X2+…+Xn X2 .. X1X2…Xn
X2 .. .. AND
.. OR
. .
Xn Xn
X1
X2 .. X1X2…Xn X X
.. XOR NOT
.
Xn
X1 X1
X2 .. X1+X2+…+Xn X2 .. X1X2…Xn
.. NOR .. NAND
. .
Xn Xn

FAMIGLIE LOGICHE DIGITALI


Di seguito sono elencate, in ordine cronologico di comparsa sul mercato, le principali famiglie logiche:
 RTL: Resistor–Transistor Logic (obsoleta);
 DTL: Diode–Transistor Logic (obsoleta);
 TTL: Transistor–Transistor Logic (molto usata in passato, ma ancora impiegata);
 ECL: Emitter–Coupled Logic (costosa, usata solo per applicazioni dove è richiesta una velocità di
operazione molto alta);
 MOS: Metal–Oxide Semiconductor (usata per le sue doti di economicità e compattezza);
 CMOS: Complementary MOS (basso consumo di potenza, attualmente la tecnologia dominante);
 BiCMOS: Bipolar CMOS (tecnologia ibrida CMOS e TTL per ottenere maggiori prestazioni in
termine di velocità e corrente erogabile);
 GaAs: Gallium–Arsenide (per applicazioni ad altissima velocità).
Le principali caratteristiche che descrivono le diverse famiglie logiche sono:
 Fan-in, ovvero numero massimo di ingressi;
 Fan-out, ovvero numero massimo di carichi standard che l’uscita di una porta può pilotare (dipende
dalla corrente erogabile);
 Noise margin, ovvero massimo livello di rumore (esterno) tollerato;
 Power dissipation, ovvero consumo di potenza della porta;
 Propagation delay, ovvero tempo richiesto affinché una variazione sul segnale di ingresso sia
osservabile sulla linea di uscita. Determina la velocità della porta. Si distinguono i tempi di

propagazione High-Low e Low-High, da cui si ricava t pd = max t pHL ,t pLH . 

PORTE LOGICHE CMOS


La figura seguente mostra le tre porte logiche standard (NOT, NAND, NOR), con cui si possono realizzare
tutte le funzioni logiche. Ovviamente il numero di linee di ingresso può essere esteso facilmente.
NAND gate – Se X o Y sono al livello logico 0, il percorso dall’uscita Z verso V SS rimane disconnesso perché
l’NMOS corrispondente all’ingresso 0 si trova nello stato Off, mentre il PMOS corrispondente all’ingresso 0
si trova nello stato On, per cui l’uscita Z è connessa a V DD , ovvero al livello logico 1. Quando X=Y=1
entrambi gli NMOS sono nello stato On, mentre entrambi i PMOS sono nello stato Off, per cui l’uscita è
connessa a VSS , ovvero al livello logico 0.
NOR gate – Se X o Y sono al livello logico 1, l’NMOS corrispondente all’ingresso 1 si trova nello stato On,
mentre il PMOS corrispondente all’ingresso 0 si trova nello stato On, per cui l’uscita Z è connessa a V DD ,
ovvero al livello logico 1. Quando X=Y=0 entrambi i PMOS sono nello stato On, mentre entrambi gli NMOS
sono nello stato Off, per cui l’uscita è connessa a VDD , ovvero al livello logico 1.

5
App.1 – Richiami Sistemi digitali

VDD VDD
VDD

X YX Z  XY
Z XY
X

X
Y
VSS Y
NOT gate
(inverter) NAND gate VSS NOR gate VSS

Caratteristiche
 Bassissima dissipazione di potenza;
 Grande immunità al rumore;
 1 sola alimentazione;
 Facilità di interfacciamento (compatibilità dei livelli) variando la tensione di alimentazione;
 Eccellente stabilità in temperatura;
 Maggiore costo della tecnologia rispetto ai MOS con 1 solo tipo di canale;
 Altissima resistenza di ingresso che consente alti valori di fan-out nei circuiti digitali. Il fan-out è il
numero di stadi a FET pilotabili in parallelo contemporaneamente da un solo FET, data la corrente che
ognuno assorbe. La resistenza di ingresso è Ri=107108 , per cui in continua il fan-out è altissimo; in
alternata però ci sono gli effetti capacitivi in ingresso al FET per cui il fan-out diminuisce;
 Può funzionare come elemento di memoria dinamica, sfruttando la piccola carica interna che è in grado
di immagazzinare; il numero dei transistor è dell'ordine dei bit immagazzinati.
 non presenta tensioni di offset in corrispondenza di correnti di drain nulle;

LIVELLI DI INTEGRAZIONE
Le tecnologie hardware che realizzano le porte logiche si differenziano anche in base alla densità di
componenti attivi all’interno del chip in:
 Small-Scale Integration (SSI), quando il numero di porte indipendenti è inferiore a 10. Serve ad
implementare funzioni logiche elementari.
 Medium-Scale Integration (MSI), quando il numero di porte per chip è compreso nell’intervallo 10 –
100. Serve ad implementare funzioni logiche di base (adders, counters, multiplexer).
 Large-Scale Integration (LSI), numero di porte compreso tra 100 e poche migliaia. Serve ad
implementare sistemi digitali, come ad esempio piccoli processori e memorie.
 Very-Large Scale Integration (VLSI), numero di transistor per chip compreso tra diverse migliaia
fino ad oltre 100 milioni. Serve ad implementare ad esempio complessi microprocessori.

ALGEBRA BOOLEANA
Le operazioni logiche sono regolate dai teoremi dell’algebra booleana, che sono sintetizzati nella tabella
seguente. I più importanti sono quelli di De Morgan, che consentono di trasformare una rete OR in una rete
AND, e viceversa, utilizzando gli invertitori (NOT).

X1 X1 _ _ _
X2 .. X1+X2+…+Xn X2 .. X1 X2…Xn
.. NOR .. AND
. .
Xn Xn Leggi di
AND De Morgan
X1 _ _ _ X1
X2 .. X1+X2+…+Xn X2 .. X1X2…Xn
.. OR .. NAND
. NOR .
Xn Xn

NAND
6
OR
App.1 – Richiami Sistemi digitali

Teoremi dell’Algebra Booleana


x0 x x 1  x Identità
x 1 1 x0  0 elemento nullo
xx x x y  yx Idem potenza
x x 1 x x  0 Complementi
xx doppia negazione
xy  yx x y  yx Commutativa
x   y  z  x  y   z x   y  z  x  y   z Associativa
x  y   x  z  x  y  z x   y  z  x  y  x  z Distributiva
x1  x 2   xn  x1  x2   xn x1  x 2   xn  x1  x 2   xn leggi di De Morgan
F  x1 ,x2 , ,xn   x1  F 1,x2 , ,xn   x1 F  0,x2 , ,xn 
leggi di espansione di
F  x1 ,x2 , ,xn   x1  F  0,x2 , ,xn   x1  F 1,x2 , ,xn  Shannon

SINTESI DI CIRCUITI LOGICI


Per circuito logico si intende un circuito in cui la configurazione di uscita dipende solo da quella di ingresso
nel medesimo istante (senza memoria). Esso è costituito dalla connessione di porte logiche, per
implementare una determinata funzione logica definita da una tabella di verità (Truth Table) detta anche
Look Up Table (LUT), dove, per ogni combinazione binaria degli ingressi, è data la configurazione binaria di
uscita, come nella tabella successiva, che descrive una particolare funzione booleana y=f(x 1,x2,x3).
Si definisce mintermine una funzione AND associata ad una particolare combinazione di ingresso, per la
quale il suo valore è 1, mentre per tutte le altre vale 0. Un maxtermine è invece una funzione OR associata ad
una particolare combinazione di ingresso, per la quale il suo valore è 0, mentre per tutte le altre vale 1. Nella
LUT sono specificati anche i mintermini e i maxtermini associati a tutte le possibili combinazioni di un
ingresso a tre linee.
Ne consegue che la funzione y vale 1 soltanto quando almeno uno dei suoi mintermini vale 1, o viceversa,
quando nessuno dei suoi maxtermini vale 0.
Pertanto, una determinata funzione logica si può allora esprimere come somma dei mintermini che
corrispondono a combinazioni di ingresso per cui essa vale 1, oppure come prodotto dei maxtermini che
corrispondono a combinazioni di ingresso per cui essa vale zero. Pertanto una funzione logica può essere
espressa in due forme canoniche equivalenti (grazie alle leggi di De Morgan):
 somma di prodotti o mintermini (SOP)
 prodotto di somme o maxtermini (POS)

Truth Table (Look Up Table, LUT)


row
x1 x2 x3 minterm maxterm Y
number
0 0 0 0 m0  x1 x2 x 3 M0  x1  x2  x3 1
1 0 0 1 m1  x1 x2x 3 M1  x1  x2  x 3 0
2 0 1 0 m2  x1x2 x 3 M2  x1  x2  x3 1
3 0 1 1 m3  x1x2x3 M3  x1  x2  x3 0
4 1 0 0 m4  x1 x2 x 3 M4  x1  x2  x3 0
5 1 0 1 m5  x1 x2x3 M5  x1  x2  x3 1
6 1 1 0 m6  x1x2 x 3 M6  x1  x2  x3 0
7 1 1 1 m7  x1x2x3 M7  x1  x2  x3 1

Nell’esempio riportato in tabella:


y  m0  m2  m5  m7  x1 x2 x3  x1x2 x3  x1 x2 x3  x1x2 x3

 
y  M1  M3  M4  M6  x1  x2  x3  x1  x2  x3  x1  x2  x3  x1  x2  x3   

7
App.1 – Richiami Sistemi digitali

Poiché ogni mintermine è implementato da una porta AND, ed ogni maxtermine da una porta OR, una
determinata funzione logica si può quindi implementare in maniera equivalente come AND di OR, oppure
OR di AND. In genere si propenderà verso quella soluzione che consente una semplificazione dell’hardware.
Nella figura successiva sono mostrati gli schemi hardware corrispondenti al SOP e al POS dell’esempio
precedente.
x1 x2 x3 x1 x2 x3

y y

La stessa funzione logica, espressa come SOP, e trasformata con il teorema di De Morgan, si può
implementare utilizzando soltanto porte NAND, così come la funzione espressa come POS, si può
implementare utilizzando solo porte NOR, utilizzando solo le porte standard della tecnologia CMOS.

y  x1 x2 x3  x1x2 x3  x1 x2 x3  x1x2 x3  x1 x2 x3  x1x2 x3  x1 x2 x 3  x1x 2 x 3

y   x1  x 2  x 3    x1  x 2  x 3    x1  x 2  x 3    x1  x 2  x 3  
       

      
 x1  x 2  x 3  x 1  x 2  x 3  x 1  x 2  x 3  x 1  x 2  x 3 
x1 x2 x3 x1 x2 x3

y y

ARRAY PROGRAMMABILI
Per realizzare circuiti logici, anziché progettare e realizzare un circuito “ad hoc”, con costi molto elevati, si
possono utilizzare gli array programmabili, che sono circuiti contenenti tutti i mintermini/maxtermini
associabili ad un dato numero di ingressi logici, mentre la porta di uscita si connette selettivamente ai
mintermini/maxtermini propri della funzione attraverso delle connessioni, indicate dai pallini neri nelle
figure precedenti, programmabili elettricamente dall’esterno (per es. da un PC con un software di
configurazione), che possono essere originariamente tutte aperte/chiuse, e si possono chiudere/aprire
inviando sulla connessione una corrente elevata, come descritto più avanti. Si possono anche realizzare
funzioni logiche a più uscite. Le connessioni possono essere programmate una sola volta, oppure un numero
limitato o illimitato di volte, a seconda della tecnologia.

8
App.1 – Richiami Sistemi digitali

x1

x3

x2

programmable y

MINIMIZZAZIONE
È tuttavia possibile operare una preventiva semplificazione di una funzione logica, e quindi dell’hardware
corrispondente, attraverso un’operazione di minimizzazione, utilizzando le regole dell’algebra booleana
(proprietà distributiva ovvero raccoglimento a fattore comune). Per esempio, nel caso proposto:

   
y  x1 x2 x3  x1x2 x3  x1 x2 x3  x1x2 x3  x1 x3 x2  x 2  x1 x3 x2  x2  x1  x3

L’operazione può essere condotta per ispezione visiva o attraverso ausili grafici come le mappe di
Karnaugh, composte da una tabella in cui ogni casella corrisponde ad un mintermine (2N per N ingressi), e
all’interno di esse è indicato il valore della funzione logica (0 omesso). Le caselle sono allocate in modo che
quelle adiacenti differiscano solo per un valore di ingresso. In tal modo, se la funzione contiene due caselle
adiacenti (stesso colore), si può operare una riduzione di due mintermini in uno solo, mantenendo solo la
parte comune. Lo stesso varrebbe per quattro caselle adiacenti (quadrato).

x1 x2
00 01 11 10
0 1 1
x3 Y
1 1 1
Gli algoritmi di minimizzazione sono tuttavia implementati all’interno dei programmi cad di progetto di reti
logiche, è pertanto vengono eseguiti automaticamente.
Come applicazione di sintesi di reti logiche si riporta la LUT ed un esempio di minimizzazione con mappa di
Karnaugh delle funzioni logiche corrispondenti ai sette segmenti di un display LCD o LED.
Si ricava facilmente la rappresentazione SOP o POS (0 spento, 1 acceso).
s1=m0+m2+m3+m5+m6+m7+m8+m9 s5=m0+m2+m6+m8 ecc.
s1=M1M4 s2=M1M2M3M7 s3=M4M5M6 ecc.

Truth Table (Look Up Table, LUT)


inputs (binary code) outputs (7 segments)
cifra mi Mi
x0 x1 x2 x3 s1 s2 s3 s4 s5 s6 s7
0 0 0 0 0 m0 M0 1 1 1 0 1 1 1
1 0 0 0 1 m1 M1 0 0 1 0 0 1 0
2 0 0 1 0 m2 M2 1 0 1 1 1 0 1
3 0 0 1 1 m3 M3 1 0 1 1 0 1 1 1
4 0 1 0 0 m4 M4 0 1 0 1 0 1 0 2 3
5 0 1 0 1 m5 M5 1 1 0 1 0 1 1 4
6 0 1 1 0 m6 M6 1 1 0 1 1 1 1 5 6
7 0 1 1 1 m7 M7 1 0 1 0 0 1 0 7
8 1 0 0 0 m8 M8 1 1 1 1 1 1 1
9 1 0 0 1 m9 M9 1 1 1 1 0 1 1

9
App.1 – Richiami Sistemi digitali

x1 x2
00 01 11 10
00 1 1
01 1 1
x3 x4
11 1 1
s1  x1x3  x2 x3 x4  x1x2 x3 x4  x1 x2 x3 x4
10 1 1

CIRCUITI LOGICI STANDARD


Il decodificatore binario (binary decoder) è un blocco costituito da un certo numero di linee digitali, pari al
numero di bit della parola binaria da decodificare, e un numero di linee di uscita pari a tutte le possibili
configurazioni di ingresso, che si attivano alternativamente a seconda del codice binario di ingresso.
L’operazione viene abilitata tramite un comando esterno (Enable). Un tale blocco serve a decodificare una
parola di n bit, frutto di una precedente codifica binaria, ad esempio per scegliere un comando (command
decoder) o istruzione (es. linee di uscita: load, store, jump, add, ecc), oppure per decodificare l’indirizzo (address
decoder) di una determinata allocazione di memoria RAM, attivando una sola linea di uscita connessa alla
cella corrispondente all’indirizzo di memoria.

En x2 x1 x0 x y7 y6 y5 y4 y3 y2 y1 y0
1 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 1 1 0 0 0 0 0 0 1 0
1 0 1 0 2 0 0 0 0 0 1 0 0 En
1 0 1 1 3 0 0 0 0 1 0 0 0 xi yi
decoder
1 1 0 0 4 0 0 0 1 0 0 0 0
1 1 0 1 5 0 0 1 0 0 0 0 0
1 1 1 0 6 0 1 0 0 0 0 0 0
1 1 1 1 7 1 0 0 0 0 0 0 0
0 - - - - 0 0 0 0 0 0 0 0

Il codificatore binario (binary encoder) esegue l’operazione opposta. Serve per codificare determinati livelli
analogici in una parola binaria. Viene utilizzato ad esempio all’interno di un convertitore ADC.
Il multiplexer analogico (AMUX) è un selettore di ingresso, ovvero un dispositivo in grado di selezionare
elettronicamente un input analogico tra una molteplicità di input in base ad un codice binario applicato agli
input selettori. La sua funzione è quella di collegare alla propria uscita una ed una sola delle linee di ingresso
(routing), in funzione del valore assunto dal comando di selezione. Lo schema di un multiplexer analogico è
quello della figura successiva, valido nel caso in cui la frequenza dei segnali da trattare non è elevata. S0, S1,
S2, S3 sono quattro interruttori (switch) analogici che vengono selezionati (aperti o chiusi) per mezzo del
decodificatore degli indirizzi provenienti dall'unità di controllo e temporizzazione. Per il teorema di
Shannon la frequenza di campionamento deve essere almeno 2 KHz, ma siccome l'indirizzo che fa chiudere
un singolo interruttore arriva ogni 4 impulsi di CK, la frequenza di quest'ultimo dovrà essere 2×4 = 8 KHz.

10
App.1 – Richiami Sistemi digitali

Il multiplexer digitale (MUX) funziona secondo lo stesso principio, ma seleziona un input digitale. Nel caso
di 4 input implementa la funzione logica
y  s0 s1x0  s0 s1x1  s0 s1x2  s0 s1x3
Un multiplexer digitale può essere usato anche per realizzare qualunque funzione logica (LUT), i cui
ingressi sono rappresentati dai selettori, mentre gli input (xi) del MUX sono costanti, a cui si assegna il valore
che deve assumere la funzione y per la corrispondente configurazione dei selettori.

4-input MUX 4-output DEMUX


En s1 s0 y En En s1 s0 s y3 y2 y1 y0 En y0
x0
1 0 0 x0 x1 y 1 0 0 0 0 0 0 x x DE y1
MUX y2
1 0 1 x1 x2 1 0 1 1 0 0 x 0 MUX
x3 y3
1 1 0 x2 1 1 0 2 0 x 0 0
1 1 1 x3 1 1 1 3 x 0 0 0 s0 s1
s0 s1
0 - - 0 0 - - - 0 0 0 0

L’operazione inversa, cioè il selettore di uscita, ovvero la divisione (splitting) di un segnale (analogico o
digitale) su linee parallele, attivate dai selettori, è eseguita dal demultiplexer (DEMUX), che quando il
segnale di enable è attivo corrisponde ad un decoder.
Un altro esempio di circuito logico è rappresentato dal sommatore (full adder), che opera la somma binaria
tra due bit di input ed un riporto (carry) di ingresso, seguendo gli stessi principi della somma decimale, e
generando il risultato ed il riporto di uscita. Costituisce il blocco fondamentale di ogni sommatore ad n bit.
Un’altra operazione logica tra due parole di n bit è quella realizzata dal comparatore, che opera un confronto
bit a bit, con una struttura modulare come il sommatore, per determinare quale input rappresenta il numero
binario più grande. Le comparazioni parziali possono essere eseguite in serie o in parallelo.
Un circuito logico più complesso è rappresentato dal moltiplicatore, che opera la moltiplicazione binaria tra
due parole di n bit, seguendo gli stessi principi della moltiplicazione decimale, con una struttura modulare
come il sommatore.
Va detto, tuttavia, che la sintesi dei blocchi logici può essere fatta in maniera software, utilizzando un
linguaggio di progettazione digitale ad alto livello (es. Verilog, VHDL), sia per la sintesi diretta
dell’hardware (ASIC), sia per la configurazione di hardware già realizzato (vedi dispositivi programmabili).

Full Adder
xi yi ci zi ci+1 xi yi x0 y0
xn yn
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0 Full Full Full
cout cn … ci+1 ci … c1 cin
Adder Adder Adder
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1 zn zi z0
1 1 1 1 1

ELEMENTI DI MEMORIA (Storage Elements)

LATCH
Un dispositivo elementare di memoria, che memorizza un bit, è costituito da un circuito bistabile, che ha due
stati stabili tra cui può commutare in seguito a stimoli di ingresso. Nella figura successiva (sinistra) è
rappresentato un latch SR. Questo circuito cambia stato in seguito ad una variazione di livello (level

11
App.1 – Richiami Sistemi digitali

sensitive) sugli ingressi S (Set) ed R (Reset). In pratica quando diventa alto il livello sull’ingresso S, l’uscita Q
si porta nello stato di Set, ovvero a livello alto, quando diventa alto il livello sull’ingresso R, l’uscita Q si
porta nello stato di Reset, ovvero a livello basso. Se i livelli di ingresso sono entrambi bassi, rimane nello
stato in cui si trova (memoria), se sono entrambi alti, entrambe le uscite si azzerano. È disponibile anche una
terminazione di uscita Q di valore opposto a Q. Il circuito appena descritto ha un funzionamento
asincrono.

FLIP-FLOP
Nella configurazione di destra, realizzata solo con porte NAND, il funzionamento è invece di tipo sincrono, in
quanto i cambiamenti di stato sono sincronizzati da un clock, definito da una forma d’onda rettangolare
periodica dotata di una determinata frequenza e duty-cycle, che li abilita solo per la durata di ogni impulso.
Si possono definire tabelle caratteristiche, analoghe delle tabelle di verità dei circuiti logici.
Un latch di tipo D è un elemento che memorizza il dato di ingresso. Si ricava facilmente da uno SR unendo
gli ingressi e aggiungendo una negazione su R.
Un latch di tipo JK si ottiene da uno SR premettendo due porte AND come in figura. Il funzionamento è
identico a quello SR, eccetto nel caso di ingressi entrambi alti, per cui l’uscita, anziché commutare a 0, si
inverte. Questa modalità è detta toggle. I latch di tipo toggle possono mantenere il dato, oppure invertirlo ad
ogni impulso di clock.
Latch SR (asynchronous) Flip-Flop SR (synchronous)
R R’
R
Q Q

CLK AND
AND
_ _
Q S’ Q
S NOR
S

AND
S R Q Q S R CLK Q
AND D
S Q S Q - - 0 Q S Q D CLK Q
NOR - 0 Q
0 0 Q Q CLK 0 0 1 Q CLK
_
R Q 0 1 0 1 _ 0 1 1 0 _ 0 1 D
R Q R Q 1 1 D
1 0 1 0 1 0 1 1
1 1 0 0 1 1 1 0

J K CLK Q
S Q - - 0 Q T J Q T CLK Q
J
0 0 1 Q - 0 Q
CLK CLK
K _ 0 1 1 0 _ 0 1 Q
R Q 1 0 1 1 K Q Q
1 1
1 1 1 Q

Il problema degli elementi di memoria sensibili ai livelli di ingresso è che l’uscita può variare durante
l’intervallo in cui il clock è attivo. Per risolvere questo problema esistono dispositivi, detti Flip-Flop (FF),
caratterizzati da due tipi di funzionamento: uno detto “pulse-triggered” ed uno detto “edge-triggered”.
I FF di tipo “pulse-triggered” si possono realizzare con un’architettura di tipo Master-Slave composta da due
latch, di cui in figura è mostrato un esempio con FF D. Il latch “master” memorizza il dato di ingresso
mentre il clock è basso. Quando il clock diventa alto, il dato viene trasferito al latch “slave”, ovvero è
disponibile in uscita, ma contemporaneamente il latch master viene disabilitato (fase di “hold”). Serve a
prevenire che l’instabilità sul dato di ingresso possa trasferirsi in uscita, che si mantiene stabile durante
l’intervallo di clock, e può commutare soltanto ad ogni nuovo impulso di clock. È uno schema simile a quello
del Sample and Hold negli ADC.

12
App.1 – Richiami Sistemi digitali

Per impedire che il dato di ingresso venga letto dai latch interni durante un intero semiperiodo di clock,
causando possibili instabilità, l’architettura Master-Slave è stata in gran parte sostituita dai FF di tipo “edge-
triggered”, in cui il dato di ingresso viene registrato solo durante il fronte di salita positivo (positive edge
transition) o negativo (negative edge transition) del clock. L’architettura in figura mostra un esempio di FF di
tipo D.

Master Slave
D QM D QS _
S
CLK CLK AND Q

CLK
_ _
AND R Q
AND

Edge-triggered D Flip-Flop 
AND
D AND

Il simbolo circuitale dei FF edge-triggered si distingue da quello dei circuiti sensibili al livello per un
triangolino posto all’ingresso del clock. AND
Un FF può prevedere anche due ulteriori input asincroni: Preset, che quando attivo pone l’uscita ad 1
indipendentemente dal valore degli altri ingressi, e Clear, che quando attivo pone l’uscita a 0 qualunque sia
il valore degli altri ingressi. Non ha senso porre ad 1 contemporaneamente questi ingressi.

REGISTRI
Con una serie di n FF D si ottiene un registro a n bit, che memorizza una parola (word), affinché i singoli bit
non varino istantaneamente durante l’elaborazione, come ad esempio in un DAC. In figura è rappresentato
un registro ad 8 bit.
R7 R6 R0 R
8
D Q D Q …….. D Q
clock Register
CLK CLK CLK

8
Q7 Q6 Q0 Q

SHIFT REGISTER
I registri a scorrimento, o “shift register”, servono a caricare un dato in maniera seriale o parallela, a seconda
della modalità programmata. Sono possibili quattro modalità: input seriale e output seriale, input seriale e
output parallelo, input parallelo e output parallelo, input parallelo e output seriale. La figura illustra le varie
modalità di funzionamento di uno shift register a 4 bit.
La figura successiva mostra la realizzazione pratica di uno shift register universale a 4 bit. Una linea di
Preset enable serve a caricare simultaneamente un dato di input in modalità parallela. Le linee Q i sono gli
output paralleli. Dopo che il dato è memorizzato nel registro, un segnale di controllo, applicato alle porte di
uscita (non mostrato), abilita il trasferimento dal registro alla linea del bus parallelo.

13
App.1 – Richiami Sistemi digitali

Data Data Data Data


in out in out

Serial in/shift right/serial out Serial in/shift left/serial out

Data in Serial in/parallel out

Data Data
out in

Parallel in/serial out Data out


Data in

Data out
Parallel in/parallel out Rotate right Rotate left
PRE3 PRE2 PRE1 PRE0

Preset
enable

Q3 Q2 Q1 Q0

PRE
AN PRE
AN PRE
AN PRE
AN
Serial
input D D Q D D Q D D Q D D Q
Serial
CLK CLK CLK CLK output
Shift CLR CLR CLR CLR
pulse
Clear

SISTEMI SEQUENZIALI

I circuiti logici digitali possono essere classificati come combinatori o sequenziali. Nei circuiti combinatori,
l’uscita del circuito è funzione solamente dei suoi ingressi correnti e il loro comportamento può essere
descritto usando tabelle di verità o espressioni booleane. Nei circuiti sequenziali l’uscita è funzione, oltre che
dei suoi ingressi correnti, anche di variabili di stato, che dipendono dagli ingressi precedenti. Il
comportamento di un circuito sequenziale può essere descritto utilizzando tabelle o diagrammi di stato o le
funzioni di transizione di stato e di uscita. Lo stato di un circuito sequenziale può essere pensato come la
condizione nella quale il circuito si è portato, partendo da determinate condizioni iniziali, a seguito della
sequenza di ingressi ricevuta. I sistemi sequenziali con un numero finito di stati vengono detti FSM (Finite
state machine).
L’elemento distintivo dei circuiti sequenziali nei confronti di quelli combinatori è la presenza di elementi di
memoria, che registrano lo stato attuale. Si memorizza lo stato di partenza.
I circuiti sequenziali possono esseri asincroni o sincroni. Nei circuiti asincroni gli ingressi modificano il
valore delle uscite del circuito in qualsiasi istante questi vengano applicati. Nei circuiti sincroni, invece, il
cambiamento di uno o più ingressi ha effetto sulle uscite solamente in corrispondenza di alcuni istanti
significativi, identificati attraverso un segnale solitamente indicato come “clock”. Questo è un ingresso
particolare del circuito, dall’andamento temporale tipicamente periodico, che non altera la funzione logica
realizzata, il cui compito è quello di segnare gli intervalli di tempo durante il quale il circuito può evolvere,
modificando la sua uscita ed il suo stato in funzione dei suoi ingressi. I circuiti sincroni sono pensati in modo
che l’uscita degli elementi di memoria subisca al più una singola transizione per ogni periodo di clock.
Il modello che descrive un circuito sequenziale può essere di due tipi:
 modello di Mealy: l’output è funzione sia dello stato presente che dell’input esterno;
 modello di Moore: l’output è funzione solo dello stato presente.

14
App.1 – Richiami Sistemi digitali

La sintesi di un circuito sequenziale non è molto diversa da quella di un circuito logico, perché, dopo avere
determinato, rispettivamente, il numero di stati e le possibili configurazioni di ingresso e uscita, ognuno con
una propria codifica, occorre individuare i circuiti logici che implementano le funzioni logiche:
Output  f  Input,Pr esent state  Next state  f  Input,Pr esent state 

CONTATORI
Un esempio di circuito sequenziale è il contatore binario (binary counter), un dispositivo che fornisce
un’uscita binaria uguale al numero di impulsi (hits) che ha ricevuto in ingresso. Il numero di impulsi che può
contare dipende dal numero di bit di cui dispone, per cui un contatore ad N bit può contare 2 N-1 impulsi,
dopodiché si azzera (reset) e ricomincia a contare. In genere può contare in ambedue i versi (up-down
counter).

a) Contatore asincrono a 4 bit b) Diagramma temporale

Contatore asincrono avanti-indietro

Contatore sincrono a 4 bit con riporto in serie

15
App.1 – Richiami Sistemi digitali

LOGICA “TRI-STATE”
Nei sistemi di elaborazione digitale più complessi, diversi moduli, sia logici che sequenziali, devono essere
connessi fra loro per scambiare informazioni. Questo avviene attraverso linee di connessione parallele,
chiamate sinteticamente bus. Tuttavia quando diversi circuiti si affacciano sullo stesso bus, sorgono
problemi di compatibilità, in quanto lo stato dell’output di un circuito può condizionare quello degli altri
circuiti che si affacciano sul medesimo bus. Per esempio un output di valore basso può forzare a 0V la linea a
cui è connesso, indipendentemente dallo stato di output degli altri dispositivi. È chiaro quindi che la
connessione di più circuiti ad uno stesso bus non può essere fatto in questo modo.
Uno dei modi comunemente usati per risolvere questo problema consiste nell’introdurre nei circuiti logici un
terzo stato, il cosiddetto stato di “alta impedenza”. Allora l’uscita del circuito può essere in tre stati: 0 logico,
1 logico e “alta impedenza” H, dove quest’ultimo significa che l’output presenta un’alta impedenza verso
massa, ovvero è come se fosse sconnesso dal circuito da cui proviene. Questo risolve il problema del bus:
occorre fare in modo che uno ed uno solo dei dispositivi connessi al bus presenti un output logicamente
valido; tutti gli altri devono essere nello stato di alta impedenza.
Ogni circuito logico avrà perciò un ulteriore ingresso di abilitazione (Enable), che consente di porre gli output
in questo terzo stato di alta impedenza H. Ad esempio la tavola della verità di un flip-flop di tipo D sarà

Enable Dn Qn+1
1 0 0
1 1 1
0 X H

MEMORIE
Tra i vari tipi di memoria, le memorie elettroniche, ovvero a stato solido (semiconduttori), hanno accessi
veloci, ma sono più costose. Possono essere permanenti o volatili. Le memorie magnetiche (hard disk,
microdrive) hanno accessi più lenti, ma sono economiche e permanenti. Sfruttano le proprietà di
magnetizzazione permanente dei materiali ferromagnetici. Le memorie ottiche (CD, DVD, ecc) sono molto
economiche, ma lente e più difficilmente modificabili. Nei sistemi di elaborazione si ha spesso una
combinazione di queste tecnologie, attraverso una gerarchia di memoria, al fine di ottenere
un’ottimizzazione dei costi e delle prestazioni, come velocità di accesso e capacità di memoria. Parametri
caratteristici delle memorie sono i tempi di accesso, distinti in tempo di lettura, scrittura e cancellazione.
In generale la memoria si rappresenta come una matrice di parole (word), ciascuna identificata da un
indirizzo che ne seleziona la cella corrispondente. L’indirizzo (memory address) della parola viene codificato
e trasportato da un bus, per poi essere decodificato per selezionare la riga di memoria. Se N sono le parole,
la codifica dell’indirizzo richiede K  log 2 N bit. Si possono avere parole di 1 bit, oppure parole di 1, 2 o 4
byte.

MEMORIE ELETTRONICHE
Le memorie elettroniche o a semiconduttore, dette anche a stato solido (Solid State Memory), si possono
classificare principalmente in base a tre caratteristiche:
1) accesso, da cui si hanno quelle ad accesso casuale come le RAM (Random Access Memory), che significa
che si può accedere direttamente ad ogni locazione di memoria con uguali tempi di accesso, e quelle ad
accesso seriale, caratterizzate da limitazioni nella modalità di accesso, per ottenere velocità superiori o
risparmi di area, in cui i dati sono accessibili secondo un ordine prestabilito, come le memorie FIFO
(First In First Out) e LIFO (Last In Last Out), usate per realizzare stack e registri a scorrimento, in
applicazioni in cui i dati sono trasmessi sequenzialmente.
2) lettura/scrittura, da cui si hanno memorie a sola lettura (Read Only Memory, ROM) e quelle riscrivibili
(Read/Write Memory, RWM).
3) latenza, ovvero permanenza o meno del dato in memoria quando viene staccata l’alimentazione, per cui
si hanno memorie non volatili e memorie volatili.

16
App.1 – Richiami Sistemi digitali

Vengono ora esaminati i principali tipi di memoria:


SRAM (Static RAM) – Memorie volatili dette statiche perché mantengono il dato finché sono alimentate;
possono essere rese permanenti con l’aggiunta di una batteria al litio. Per le loro elevate prestazioni, piccole
porzioni di questa memoria vengono usate nei processori per contenere le informazioni cui si accede con
maggiore frequenza. I tempi di lettura e scrittura sono paragonabili. In combinazione con le CAM
costituiscono le cosiddette memorie cache. Hanno costi elevati, perché richiedono sei transistor per ogni cella
di memoria. Vengono usate soprattutto nei microcontrollori.
DRAM (Dynamic RAM) – Memorie volatili che mantengono il dato solo per un breve periodo. Sono presenti
circuiti che eseguono operazioni di refresh per mantenere il dato (dopo un certo numero di microsecondi),
ma durante il refresh i dati non sono disponibili. Hanno elevata densità, e bassi costi, perché richiedono un
solo transistor per cella, pertanto vengono usate nelle memorie centrali di grande capacità dei computer,
anche PC. Tuttavia i tempi di accesso sono variabili, per cui non sono adatte nelle applicazioni ad elevate
prestazioni.
SDRAM (Synchronous DRAM) – Le operazioni sono scandite da un segnale di sincronizzazione generato dal
sistema, eliminando i segnali di controllo: ciò ha consentito di migliorare ulteriormente la velocità di
trasferimento, in conseguenza della richiesta di sempre più elevate prestazioni. Esistono versioni ancora più
performanti alloggiate nella scheda madre (motherboard) dei PC dette DIMM.
CAM (Context Addressable Memory) – Dette anche memorie associative, confrontano una parola di ingresso
con tutte le parole contenute in memoria, fornendo un segnale (match) e l’indirizzo della parola in caso di
riscontro positivo. Questo tipo di accesso viene usato nelle memorie Cache.
CACHE – Combinazione di memoria SRAM e CAM, in cui il dato è memorizzato nella SRAM, l’indirizzo è
fornito dalla CAM, per aumentare la velocità di accesso. Viene utilizzata per velocizzare l'accesso alle
posizioni di memoria RAM usate più frequentemente e ridurre il traffico del bus di sistema e della memoria
principale. Si tratta di una piccola quantità di memoria veloce installata direttamente sul processore o nelle
sue immediate vicinanze, usata per memorizzare le prossime istruzioni di un programma, i dati su cui opera
più frequentemente, e i dati web (pagine, dns, ecc). Compensa la differenza di velocità tra CPU e RAM.
ROM (Read Only Memory) – Memorie di tipo permanente programmabili una sola volta, o in fase di
produzione (masked ROM), o le PROM (Programmable ROM) direttamente dagli utenti, tramite applicazione
di una tensione elettrica superiore a quella del normale funzionamento, che brucia dei fusibili. Per essere
cancellate, il package contiene una finestra per l’esposizione a raggi UV. Consentono elevate densità, bassi
costi e alta affidabilità. Venivano usate in fase di sviluppo, quando non erano ancora disponibili le memorie
flash. Le memorie OTP sono programmabili una volta, ma non hanno la finestra per essere cancellate.
EPROM (Erasable PROM) – Memorie di tipo permanente ad elevata densità, cancellabili dall’utente tramite
esposizione del chip a raggi ultravioletti (UV), per poter essere riprogrammate.
EEPROM (Electrically Erasable PROM, o E2PROM) – Memorie di tipo permanente, sia programmabili che
cancellabili, sono modificabili direttamente dal sistema digitale (in-system programmable). Possono subire fino
a 105 cicli di programmazione. Hanno media affidabilità, bassi costi e bassa densità.
FLASH – Memoria di tipo permanente, per le sue prestazioni può anche essere usata come memoria a
lettura-scrittura. La tecnologia Flash ha reso possibile il salvataggio o la cancellazione di dati in un unico
passo, introducendo quindi un incredibile guadagno in velocità. Ha sostituito le EEPROM, perché raggiunge
densità e velocità superiori. La differenza principale è che, mentre nelle EEPROM può essere cancellato un
singolo byte, nelle flash si deve cancellare un intero blocco (es. 64 o 128 byte). È costituita da un array di
Floating Gate MOSFET. Ogni transistor costituisce una "cella di memoria" che conserva il valore di un bit. Le
nuove flash utilizzano celle multilivello che permettono di registrare il valore di più bit attraverso un solo
transistor. Esistono principalmente due tipologie di memorie flash, dette NOR flash e NAND flash, che
differiscono per l'architettura ed il procedimento di programmazione. Vi è anche una tipologia ibrida, la
AND flash, che sfrutta le caratteristiche di entrambe le NOR e NAND. I microcontrollori usano la tecnologia
NOR, più lenta in scrittura, ma permette l’accesso random, i dispositivi di memoria di massa (bulk storage
device) usano la NAND, che consente solo l’accesso seriale per righe. Tuttora in evoluzione, ha bassi costi,
elevata densità, bassi consumi, discreta affidabilità. Grazie alla non-volatilità è usata in fotocamere digitali,
lettori mp3, cellulari, pendrive (USB), memory card (SD), computer portatili ecc.

17
App.1 – Richiami Sistemi digitali

FRAM – La Ferroelectric RAM è una tecnologia che combina il meglio della Flash e della SRAM. È non-
volatile come la Flash, ma permette scritture veloci e a basso consumo fino a 10 15 cicli, possibilità di
criptazione dei dati per maggiore invulnerabilità rispetto alle Flash/EEPROM, resistenza a radiazioni e
campi EM. Le FRAM memorizzano i dati attraverso la polarizzazione di un materiale ferroelettrico, il
Piombo-Zirconato di Titanio (PZT).
Altri tipi di memorie stanno emergendo sul mercato (es. nanocristalli di Silicio, ecc.). In tabella è riportata
una classificazione sintetica delle memorie a semiconduttore.

MEMORIE a Semiconduttore (solid-state memory)


Latenza Volatili Permanenti
Lettura/Scrittura R/W programmabili read only
FIFO, LIFO, CAM SRAM EPROM, EEPROM mask ROM
Nome
Shift Register DRAM Flash, FRAM PROM
Accesso non casuale Casuale

MEMORIE DI MASSA EMBEDDED


Si tratta essenzialmente di due tipi di memorie:
 microdrive con tecnologia magnetica (8–16 GB), ma di dimensioni ridotte (1-3 pollici), sono stati usati in
molte applicazioni embedded portabili, soprattutto relativi ad elettronica di consumo come fotocamere,
videocamere, riproduttori multimediali. Oggi praticamente scomparsi con l’affermarsi della tecnologia
Flash;
 memorie a stato solido, costituite da memorie Flash con interfacce compatibili con quelle degli hard disk
(es. Serial ATA, SATA). Hanno tempi di accesso e consumi di potenza dimezzati rispetto ad un hard disk.
I fattori cruciali dello sviluppo di questa tecnologia sono la riduzione dei costi, delle dimensioni, del
consumo di potenza, sebbene sia inferiore l’affidabilità, che determinano la prevalenza sugli hard disk a
tecnologia magnetica.

18

Potrebbero piacerti anche