Memorie

Memoria a nuclei magnetici - Fotigrafia di Dennis van Zuijlekom (https://flickr.com/photos/dvanzuijlekom/)

In fase di sviluppo In preparazione In fase di sviluppo

In questa pagina sono mostrate le caratteristiche principali delle memorie a semiconduttori.

Il riferimento è alle memorie attualmente utilizzate nei computer ordinari e nei microcontrollori odierni e nulla o quasi fa riferimento a tecnologie superate. Mi sia permessa come eccezione la fotografia di apertura, opera di Dennis van Zuijlekom, che rappresenta una memoria a nuclei magnetici risalente agli anno '50 del secolo passato: bellissima!

Memorie volatili e non volatili

Una memoria si indica come volatile se il suo contenuto è mantenuto solo in presenza di una adeguata alimentazione, non volatile nel caso contrario.

In realtà tale confine non è così netto come potrebbe sembrare dalla definizione:

Struttura di una memoria

Le memorie, come tutti i circuiti digitali, sono dotate di un certo numero di ingressi e di uscite, in funzione dei bit che possono essere memorizzati in esse.

Data bus

Tutte le memorie sono organizzate come un insieme ordinato di parole, ciascuna costituita da un numero fisso di bit, in genere una potenza di due; la singola parola può tipicamente essere costituita da 1 solo bit, da quattro bit, da 8 bit (un byte), 16 bit, 32 bit, 64 bit. Non mancano eccezioni:

In genere una memoria necessita di un numero di ingressi dati pari alla dimensione di una parola. Inoltre necessita di un numero di uscite dati, anch'esso pari al numero di bit che costituiscono una parola. In molti casi gli stessi pinn svolgono, in istanti diversi, entrambe le funzioni.

Address bus

Ciascuna parola è individuata da un indirizzo. Normalmente il numero di parole è una potenza di due e quindi il numero di bit che costituisce l'indirizzo può essere calcolato come logaritmo in base due del numero di parole. Forse qualche esempio chiarisce meglio questa relazione; vediamoli in una tabella:

Numero di parole Bit di indirizzo Come formula
1K 1024 10 210
4K 4096 12 212
1M 1048576 20 220
2M 2097152 21 221
1G 1073741824 30 230
8G 8589934592 33 233

Una memoria deve essere dotata di un numero di ingressi di indirizzi pari al numero di bit di indirizzo indicati nella tabella. Tale numero cresce abbastanza velocemente e quindi si sono adottate tecniche per ridurne il numero.

Capacità di una memoria

La capacità di una memoria indica quanti bit  (o quanti byte) contiene, indicando il numero di parole e la loro dimensione. La sintassi spesso usata è Capacità = Numero parole x Dimensioni Parola, esprimento il tutto in bit

Vediamo alcuni esempi:

Control bus

Oltre agli ingressi/uscite dati e agli ingressi di indirizzo sono presenti numerosi altri segnali piuttosto eterogenei che, normalmente, sono ingressi. Di seguito alcuni esempi, normalmente non presenti contemporaneamente:

Attività

Una memoria è descritta come 2K x 8 bit. Quanti sono gli ingressi e le uscite? Disegnare lo schema a blocchi corrispondente

Una memoria è descritta come 2M x 1 bit. Quanti sono gli ingressi e le uscite? Disegnare lo schema a blocchi corrispondente

Una memoria è descritta come 32G x 4 bit. Quanti sono gli ingressi e le uscite? Disegnare lo schema a blocchi corrispondente

Descrivere la struttura delle seguenti memorie:

Memoria 1

Memoria 3

Memoria

Memoria 4

Memoria non volatili

Un tempo ormai lontano le memorie non volatili usavano le seguenti tecnologie:

Attualmente tutte le memorie non volativi sono di tipo EEPROM (dette anche E2PROM, Electrically Erasable PROM) e Flash. La tecnologie di entrambe queste memorie è concettualmente simile a quella delle EPROM, ma sia la scrittura che la lettura è possibile usando tensioni relativamente piccole e senza l'uso di apparecchi esterni alla memoria.

Questa tecnologia ha però diversi limiti:

Tipicamente le memorie Flash sono classificate come:

Spesso le memorie Flash vengono classificate anche in base al comportamento e alla struttura interna:

Memorie volatili

Memorie statiche

Nelle memorie statiche (SRAM, nota 4) un singolo bit è memorizzato in un Flip Flop. In sostanza si tratta di un insieme molto esteso di registri PIPO, ciascuno dei quali memorizza una parola e può essere letto o scritto indipendentemente dagli altri attraverso il bus dati, comune a tutti.

Le SRAM possono oggi essere costruite con due obbiettivi, in contrasto tra di loro:

Una memoria statica difficilmente supera oggi la dimensione di 16 MB.

Memorie dinamiche

Le memorie dinamiche (DRAM) utilizzano un condensatore per memorizzare un bit.

Il vantaggio è la dimensione della singola cella enormemente minore rispetto a quella di una cella SRAM e quindi la possibilità di realizzare memorie molto più capienti a parità di costo. Oggi è per esempio normale usare singoli circuiti integrati con capacità di 16 Gbit, organizzati come 1G x 16 oppure 4Gb x 4.

Lo svantaggio è che un condensatore tende a scaricarsi col passare del tempo e quindi le singole celle devono periodicamente essere sottoposte a refresh del contenuto, cioè alla riscrittura del contenuto, operazione gestita normalmente dal controller della memoria. Tipicamente il ciclo di refresh si misura in decine di millisecondi.

Due osservazioni in merito al numero di piedini fisici che costituiscono l'address bus:

La scelta naturale è quindi quella di fornire l'indirizzo diviso in due metà, prima l'indirizzo della riga (segnalato da un apposito piedino di Row Address Select, RAS), quindi quello della colonna (Column Address Select, CAS). Questa tecnica permette inoltre di ottimizzare i tempi di accesso quando le celle da leggere o scrivere appartengono alla stessa riga: in questo caso basta fornire solo l'indirizzo della colonna e quindi la lettura del dato è più veloce rispetto alla lettura di una cella appartenente ad un'altra riga.

Memorie dinamiche sincrone

Le attuali DRAM sono in genere sincronizzate da un clock (Synchronous Dynamic Random Access Memory, SDRAM, nota 4). In linea di massima più alto è il clock, più veloce è la lettura o la scrittura della memoria. Per esempio una memoria con clock (massimo) pari 3200 MHz ha una velocità doppia di una memoria con clock (massimo) a 1600 MHz.

In realtà le operazioni di lettura e scrittura sono piuttosto articolate e richiedono numerosi cicli di clock per essere completate; questo fatto viene spesso espresso da alcuni numeri (latenza) che rappresentano il numero di cicli di clock necessari per completare vari tipi di operazioni (per esempio lettura di una cella qualunque oppure lettura di più celle consecutive oppure scritture...).

Rimane un dubbio: meglio una memoria con clock elevato oppure con latenza inferiore? Non esiste una risposta univoca...

A differenza dei Flip Flop che sono attivati dal fronte di salita oppure da quello di discesa del clock, le SDRAM moderne sono attivate da entrambi i fronti, dando origine a memorie che, a parità di clock, sono due volte più veloci (DDR SDRAM, Double Data Rate SDRAM).

Esistono varie famiglie, tra di loro incompatibili di DDR; DDR(1), DDR2, DDR3, DDR4 (la versione attualmente più diffusa). DDR5... Normalmente tra una generazione di DDR e l'altra si assiste ad un aumento della frequenza di clock, ad un aumento della latenza (aspetto negativo ampiamente compensato dall'aumento della frequenza di clock), ad una diminuzione del consumo di energia e ad aumento della capacità massima.

Banchi di memoria

Spesso un singolo circuito integrato non è sufficiente per garantire la necessaria capacità di memoria necessaria ad una determinata applicazione. La soluzione è riunire più integrati al fine di aumentare il numero e/o la dimensione delle parole, costruendo un banco di memoria.

L'esempio più familiare è costituito dalla memoria dei PC. Di seguito qualche esempio... storico.

SIMM 72

DIMM-168

DIMM 168

SO-DIMM 200

Attività 2

Simulare con Deeds il funzionamento delle memorie contenute nel file memoria.zip, nell'ordine della numerazione:

Attività 3

Analizzare la struttura della memoria del proprio PC, tramite osservazione diretta, ricerca di documentazione oppure software dedicato; in alternativa, analizzare un banco di memoria commerciale.

Memorie seriali

Queste memorie hanno lo scopo di ridurre al minimo il numero piedini di ingresso ed uscita, permettendo di realizzare memorie con capacità relativamente elevata in contenitori con pochi pin, tipicamente otto, inclusa l'alimentazione.

L'organizzazione è quella tipica delle memorie appena descritte, ma i bit dati vengono letti o scritti serialmente, attraverso un solo pin di ingresso ed un solo pin di uscita (oppure un solo pin di input/output). Analogamente i bit di indirizzo sono impostanti sfruttando un solo pin di ingresso, in genere coincidente con l'ingresso dati.

Per esempio 48L512 è una memoria RAM statica 64 K x 8 bit. Dati ed indirizzi vengono scritti utilizzando l'ingresso condiviso SI (Serial Input) e letti dall'uscita SO (Serial Output). Di seguito il pin-out, 8 pin in totale, inclusa l'alimentazione:

Nelle ultime due fotografie è visibile sia sulla DIMM che sulla SO-Dimm una memoria di questo tipo, di tipo EEPROM: ha il compito di memorizzare i parametri di funzionamento della memoria DRAM (tipo, quantità, velocità...) e permettere così al PC di configurarsi autonomamente all'avvio. Quando ha questa funzione viene indicata some Serial Presence Detect EEPROM (SPD), in genere con interfaccia Inter Integrated Circuit.

Memorie FIFO

Le memorie FIFO (First In, First Out) sono memorie volatili ad accesso non casuale: i dati sono scritti attraverso i pin di ingresso e letti attraverso i pin di uscita senza specificare alcun indirizzo: semplicemente la prima parola scritta sarà la prima ad essere letta e, una volta letta, viene "distrutta".

Di seguito i pin di un registro IDT 7208 con organizzazione interna 32 K x 9 bit. Si possono vedere i nove pin di ingresso dati (D0...D8), le nove uscite (Q0... Q9) ed i pin di scrittura W e di lettura R. Quando il pin W è attivo la parola in ingresso viene scritta nell'ultima cella libera, quando R è attivo viene letta la prima cella occupata.

Registro FIFO

L'uso tipico di queste memorie è la funzione di buffer tra un generatore di dati occasionalmente molto veloce ed un ricevitore non sempre in grado di ricevere dati troppo velocemente.

Note

  1. Si noti la presenza o meno del trattino sopra il nome dell'ingresso: se presente, significa  che "fa quello che deve fare" nel momento in cui assume valore logico basso, cioè è attivo basso. In assenza del trattino l'ingresso è attivo alto
  2. Nei dischi SSD, basati si Flash, il problema viene affrontato mantenendo alcune celle "di scorta" (over-provisioning) per sostituire quelle che con il tempo si usurano. Questo meccanismo in genere non è implementato sulle schede SD e sulle "chiavette" USB
  3. Questo tempo diminuisce di molto con temperature molto alte oppure negli apparati presenti al di fuori dell'atmosfera terrestre. Memorie progettate per poter funzionare in condizioni estreme sono spesso indicate come Radiation-Hardened
  4. Purtroppo la "S" significa sia Static che Synchronous, lasciando il dubbio sul significato di SRAM (ma non per SDRAM)
  5. Per inciso: una memoria veloce consuma tanto ed una a basso consumo è lenta...
  6. Per la precisione indica il numero di cicli di clock che deve trascorrere tra l'attivazione del comandi di lettura/scrittura e l'effettiva disponibilità del dato in uscita. Questa descrizione implica che si sta effettuando un'operazione sulla stessa riga già precedentemente selezionata, l'operazione in assoluto più comune nell'uso delle RAM.


Data di creazione di questa pagina: aprile 2021
Ultima modifica: 29 aprile 2021


Licenza "Creative Commons" - Attribuzione-Condividi allo stesso modo 3.0 Unported


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima