La
DRAM è stata creata con l'intenzione di archiviare
più memoria possibile anche a discapito della velocità.
La cella elementare di memoria DRAM è costituita da
un condensatore e un transitori. Il condensatore accumula
una certa carica se nella cella deve essere presente il valore
logico 1 altrimenti risulta scarico. Per caricare, scaricare
e mantenere la carica del condensatore viene usato il transitor.
Una configurazione tipica permette di sovrapporli per poter
occupare il minor spazio possibile. Il problema di questo
tipo di cella è che, essendo molto piccola, i fenomeni
di dispersione determinano lo scaricamento del condensatore
in pochi millisecondi.
Per ovviare a ciò, ogni chip di memoria contiene un
circuito di refresh che centinaia di volte al secondo fa il
"refresh" delle locazioni di memoria, ossia legge
il valore contenuto, lo rigenera elettricamente e quindi lo
riscrive. La necessità del refresh rende queste memorie
intrinsecamente più lente. In realtà non è
il refresh preriodico che rallenta le DRAM ma quello necessario
ad ogni lettura. Infatti la lettura dello stato del condensatore
ne determina lo scaricamento. Il valore dovrà quindi
essere riscritto subito dopo (lavoro comunque svolto dalla
circuiteria interna ma che richiede tempo).
Le memorie DRAM sono ottime per costituire la memoria
centrale del sistema. Questa ha una velocità inferiore
alle memorie interne ai processori, o alle cache ma permette
di immagazzinare ampie quantità di dati a costi contenuti.
Inoltre, anche se l'accesso risulta più lento delle
SRAM la banda al contrario può essere molto alta grazie
a startegie di parallellizzazione degli accessi interni. Gli
sviluppi recenti delle memorie dinamiche (SDRAM, DDR, Rambus)
sono infatti tutti versati alla massimizzazione della banda
mentre le latenze di accesso rimangono tipicamente su livelli
medio-alti.
Essendo la DRAM una memoria di grande capacità,
i progettisti per risparmiare linee hanno deciso di spezzare
la trasmissione dell'indirizzo in due parti Column Address
e Row Address. Questi rappresentano la riga e la colonna dove
si trova il bit nelle matrici interne di memoria. Per accedere
ad una locazione di memoria è quindi necessario prima
specificare il Row Address (che viene memorizzato dal chip
in un buffer interno) quindi, terminata questa operazione
segue la trasmissione del Column Address usando le stesse
linee. Se gli accessi successivi sono nella stessa "pagina"
(ossia hanno lo stesso row address) non è necessario
specificare di nuovo il Row Addrerss ma solo il Column Address.
Vediamo lo schema di accesso alla memoria:


Fase
1
1. Si immette sul bus indirizzi il Row Address
2. Si attiva il segnale RAS (Row Address Strobe) che
agendo su un apposito Latch memorizza il Row Address ad uso
interno.
3. Il valore memorizzato nel Latch viene decodificato
ed identifica una specifica riga (Row) nella matrice di memoria.
4. I segnali ed il bus vendono disasseriti, è
finita la prima fase dell'accesso
Fase 2
5. Si immette sul bus indirizzi il Column Address.
6. Si attiva il segnale CAS (Column Address Strobe)
che agendo su un apposito Latch memorizza il Column Address.
7. Il valore immagazzinato permette di individuare
la colonna dove si trova il dato. L'incrocio tra colonna e
riga individua univocamente la cella di memoria ed il suo
contenuto viene inviato sul bus dati in caso di lettura, altrimenti
il contenuto del bus dati viene scritto nella cella in caso
di scrittura.
Vediamo
adesso alcuni tipi di DRAM:
FP
DRAM, EDO RAM e BEDO RAM
Fast Page DRAM, Extended Data-Out DRAM e Burst EDO
RAM si basano tutti sul modello classico di funzionamento
dei moduli DRAM asincroni. In pratica non esiste un segnale
che "guida" e sincronizza i segnali di controllo,
i segnali di controllo vengono interpretati appena arrivano.
Queste memorie erano tipicamente presenti nei moduli SIMM
di qualche anno fa e sono state del tutto soppiantate dalle
memorie DRAM di tipo sincrono che hanno indubbi vantaggi.
Synchronous
DRAM (SDRAM)
La
SDRAM è una memoria dinamica sincrona che utilizza
un segnale di clock esterno per la sincronizzazione delle
operazioni di I/O. Analogamente a quanto visto per le SRAM
questo permette un incremento delle prestazioni e una maggiore
efficienza. La natura sincrona del chip fa si che si possano
implementare complessi modi operativi, pipeline interne
e trasferimenti burst. I chip di SDRAM in commercio hanno
frequenze di funzionamento dai 66MHz fino ai 200MHz. I corrispondenti
moduli di memoria per PC non hanno tuttavia mai superato
i 133-150MHz. I moduli di memoria che utilizzano la SDRAM
hanno il formato DIMM, la banda massima teorica delle memorie
DIMM PC100 è di 800MB/s e 1064MB/s per le PC133.
Direct Rambus DRAM (RDRAM)
Sviluppate da Rambus Inc. e inizialmente patrocinate
da Intel, questo tipo di DRAM utilizza soluzioni
originali per ottenere un'elevata banda di trasferimento
dati. L'ampiezza del bus si riduce a 16bit e i dati vengono
trasferiti su entrambi i fronti di una segnale di clock
a 400MHz per una banda complessiva di 1600MB/s; il ridotto
numero di segnali permette anche la creazione di sistemi
multi canale. Internamente si discostano un pò dal
modello tradizionale delle DRAM ed utilizzano accorgimenti
originali tra cui un notevole aumento del numero di banchi
interni e una diversa gestione del multiplexing.
Double Data Rate SDRAM (DDR-SDRAM)
E' la naturale evoluzione della memoria SDRAM. Di
fatto internamente pochi sono i cambiamenti mentre l'interfaccia
con l'esterno si evolve e permette il trasferimento dei
dati su entrambi i fronti del clock. Le memorie DDR si trovano
a frequenze anche molto elevate (300MHz x 2) e il loro uso
è stato lanciato più dalle scede grafiche
3D che non dai processori. Attualmente tuttavia reppresentano
lo standard de facto nel campo delle memorie di sistema
con frequenze di 133, 166MHz (x2) e si trovano in moduli
DIMM capaci di fornire una banda di 2100-2700MB/s.
Embedded DRAM (eDRAM)
Si tratta di comune memoria DRAM o SDRAM integrata direttamente
sul die di silicio che contiene la logica del chip che ne
fa uso. Questo approccio è molto spesso usato nelle
console per massimizzare la banda nella comunicazione chip-memoria,
ridurre gli spazi e quindi i costi. Attualmente è
possibile raggiungere un quantitativo di circa 8-10MByte
integrati con un core logico di media potenza. Il bus che
collega la logica alla memoria può essere ampio anche
512-1024 bit il che garantisce una banda altissima.
Cenni alle memorie ECC
ECC sta per Error Correction Code, in pratica si tratta
di memorie di tipo tradizionale (quindi SRAM, o DRAM o altro)
che dedicano una porzione aggiutiva di bit alla gestione
di eventuali errori di memorizzazione. Per esempio si può
memorizzare 1 bit di parità aggiuntivo ogni 8 bit
di dati. Il bit di parità sarà 0 se il numero
di bit settati nella word è pari e sarà 1
altrimenti. Il controllo di parità permette di individuare
condizioni di errore ed intraprendere strategie per risolverle
o aggirarle. Le memorie ECC vengono utilizzate in contesti
dove la massima affidabilità è un imperativo.