# DRAM

In informatica ed elettronica una DRAM (acronimo dell'inglese Dynamic Random Access Memory, lett. "memoria ad accesso casuale dinamica") è un tipo di RAM che immagazzina ogni bit in un diverso condensatore. Il numero di elettroni presenti nel condensatore determina se il bit è 1 o 0. Se il condensatore perde la carica, l'informazione è perduta: nel funzionamento la ricarica avviene periodicamente. Da qui la definizione di memoria dinamica, opposta alle memorie statiche come la SRAM. Per la caratteristica di perdere le informazioni in mancanza di energia, la DRAM viene definita anche volatile.

## Principio di funzionamento

Le moderne DRAM sono organizzate in un insieme di matrici quadrate di condensatori allo stato solido, la cui dimensione minima è tipicamente 1024 x 1024 bit cioè 1 megabit, ma nelle memorie recenti è anche maggiore. Di fatto, le prime DRAM (fino ad una capacità di qualche megabit), erano costituite da una sola matrice di elementi; l'aumento esponenziale della capacità della memoria ha reso necessaria l'adozione di una struttura multipla per ottimizzare le prestazioni e le capacità di recovery delle memorie. Durante l'operazione di lettura si vuole acquisire il valore di un bit della matrice, identificato dal suo numero di riga e di colonna. Tuttavia per ottenere la lettura di questa cella, in realtà vengono letti e riscritti tutti gli elementi della riga della matrice a cui appartiene la cella. L'operazione di riscrittura è necessaria perché durante l'operazione di lettura la carica elettrica contenuta nelle celle viene degradata; così i dati devono essere ricaricati riscrivendoli. Dai dati così ottenuti viene poi selezionato, per l'uscita, un unico bit, cioè quello relativo alla colonna della cella indirizzata. L'operazione di scrittura di una cella avviene in modo simile; l'unica differenza è che nell'operazione di riscrittura viene inviato sulla colonna della cella da modificare il valore del bit che si vuole scrivere sulla cella. Ciascuna cella di una DRAM richiede un condensatore allo stato solido per memorizzare il bit di informazione e un transistore MOS per controllare l'accesso alla cella. Per questo motivo le celle DRAM sono più piccole e più economiche delle celle utilizzate per le RAM statiche SRAM, le quali usano latch che richiedono l'uso di quattro o sei transistori MOS, due o quattro per la realizzazione di un doppio inverter logico, e altri due per controllare l'accesso alla cella. Ciò significa che a parità di tecnologia e di anno di produzione le memorie DRAM disponibili hanno tipicamente una capacità quadrupla rispetto alle SRAM disponibili.
Questo vantaggio ha però un prezzo. Infatti, come visto, nelle DRAM le operazioni di lettura sono distruttive, richiedono cioè la riscrittura del dato; questo non è necessario nelle SRAM in cui le operazioni di lettura non alterano il valore memorizzato. Inoltre, purché la memoria sia alimentata elettricamente, la cella SRAM può mantenere il dato memorizzato per un tempo indefinito. Ciò non accade per la cella DRAM; poiché il bit di informazione è memorizzato come carica (presente o assente) su un condensatore e poiché il transistore della cella non isola completamente il condensatore dalla sua colonna, il risultato è che, anche se non letta, la carica del condensatore si degrada rapidamente e diventa inutilizzabile in tempi dell'ordine delle decine di millisecondi.
Quindi, indipendentemente dalle operazioni di lettura-scrittura, è necessario effettuare periodicamente (a frequenze dell'ordine dei kHz) un'operazione di lettura+riscrittura fittizia di ogni riga della matrice (refreshing). Da questa necessità deriva il termine dinamica che caratterizza questo tipo di memoria. Mentre nelle prime memorie DRAM questa operazione doveva essere comandata esternamente, attualmente questa operazione è comunemente automatizzata direttamente all'interno del circuito integrato della memoria utilizzando un'unità logica dedicata; questo complica il circuito e ne diminuisce la capacità.
Un'alternativa alla DRAM è la memoria flash. La memoria flash disponibile attualmente costa leggermente meno della DRAM, non è volatile, ma è più lenta della DRAM in lettura e decisamente non paragonabile in scrittura.
Può accadere che, per interferenze interne al computer, un singolo bit della DRAM cambi spontaneamente stato, passando a quello opposto. Alcune ricerche hanno dimostrato che la maggior parte degli errori della DRAM contenuti in un singolo bit sono causati da raggi cosmici, che possono cambiare il contenuto di una o più celle della memoria, o interferire col circuito di lettura/scrittura. C'è la preoccupazione che con la miniaturizzazione di questa memoria e la diminuzione della tensione dei suoi circuiti, questi eventi possano accadere con frequenza sempre più alta, dato che particelle con minore energia potrebbero riuscire a interferire e provocare errori. D'altro canto la miniaturizzazione rende le celle "bersagli" meno facili per queste particelle, e la tecnologia SOI potrebbe renderle meno suscettibili agli urti con queste e quindi compensare questo fenomeno.
Nei sistemi cui è richiesta altissima affidabilità (per esempio server) o che sono esposti in modo particolare a radiazioni (satelliti) vengono usati moduli speciali di DRAM, che includono bit extra di memoria: i controllori ECC possono così scansionare e quindi correggere gli errori che possono capitare. Le versioni per PC di questi programmi possono in genere correggere errori di un bit in una parola di 64 bit, e trovare, ma non correggere, errori di più bit in una parola di tali dimensioni.

## Interfaccia

Una caratteristica importante della DRAM è chiamata address multiplexing. Questa tecnica divide l'indirizzo delle celle in due parti e le manda in successione al chip agli stessi pin, minimizzando in questo modo il numero di segnali di ingresso. Molti microprocessori includono il controllo logico della DRAM, evitando la necessità di un controllo dedicato nella memoria.
Il chip possiede un gran numero di condensatori organizzati in righe e colonne. Per leggere una cella dell'insieme, il circuito di controllo calcola per prima cosa il numero di riga del dato, che manda ai pin del circuito di ingresso della memoria, quindi attiva il segnale RAS (Row Address Strobe o Row Address Select), che ordina al circuito di leggere l'indirizzo presente in entrata. Internamente, la DRAM collega la fila a una serie di amplificatori chiamati sense amplifier, che leggono il contenuto di tutti i condensatori della fila e ne effettuano il refresh. Il circuito di controllo manda quindi il numero di colonna agli stessi pin del circuito, ed attiva il segnale CAS (Column Address Strobe o Column Address Select), facendo leggere al circuito l'indirizzo di colonna del dato. La DRAM lo usa per identificare il dato necessario all'interno dell'output degli amplificatori. Dopo un intervallo di tempo chiamato CAS access time, il dato viene trasmesso all'esterno tramite il pin I/O della DRAM.
Per la scrittura il procedimento è lo stesso, ma il controllo invece di ricevere dalla DRAM il dato alla fine, lo fornisce all'inizio.
Dopo un'operazione di lettura o scrittura, il controllo riporta i pin della memoria allo stato di riposo, per prepararla all'operazione successiva. La DRAM necessita di un intervallo di riposo tra un'operazione e la successiva, chiamato precharge interval.
Una volta che il circuito ha selezionato una riga, può scegliere vari dati in successione comunicandone l'indirizzo di colonna ed attivando il CAS. Questo metodo è più veloce del processo intero, e può essere usato soprattutto per le istruzioni del processore, che tendono ad essere immagazzinate consecutivamente.
La descrizione fatta sopra riguarda le DRAM a singolo bit. Molte DRAM sono multibit (spesso a quattro od otto), dato che possiedono più insiemi di celle che operano contemporaneamente, ognuno fornito di un pin I/O, e permettono il trasferimento di più bit contemporaneamente. Questo è grossomodo equivalente ad avere più DRAM che operano insieme, ma permette di risparmiare spazio dato che condividono i pin di indirizzo e di controllo.

## Tipologie
### Fast Page Mode (FPM) DRAM

La FPM DRAM (acronimo di Fast Page Mode DRAM) è anche chiamata Page mode DRAM, Fast page mode memory, o Page mode memory.
In page mode una riga può essere mantenuta aperta, in modo da non dover soffrire di precharge interval se il sistema torna su quella riga. Questo velocizza i procedimenti che comportano grossi trasferimenti di dati.
La Static column è una variante della page mode in cui l'indirizzo di colonna non necessita di essere introdotto.
La Nibble mode è un'altra variante con cui si può accedere a quattro indirizzi consecutivi della stessa riga.

### Extended Data Out (EDO) DRAM

La EDO DRAM è simile alla FPM DRAM, con l'aggiunta che l'indirizzo di riga può essere introdotto mentre il dato precedente viene comunicato in output. Questo permette un accavallarsi delle operazioni (pipelining) che migliora le prestazioni. Era più veloce della FPM DRAM del 5% circa quando cominciò a rimpiazzarla nel 1993.
Le memorie EDO sono una stretta evoluzione delle memorie FP alle quali aggiungono una "funzione" in grado di mantenere validi i dati anche dopo la fine dell'impulso di richiesta. In questo modo il processore ottimizza il suo lavoro prelevando i dati nella memoria dopo che sono stati resi disponibili dalla RAM senza aver tempi morti per la ricerca dei dati nella memoria stessa.
Le memorie con tecnologia EDO sono state costruite sia nel formato di SIMM a 72 contatti, sia che nel formato DIMM a 168 contatti; hanno entrambi un tempo di accesso che va dai 60 ns ai 45 ns e un'alimentazione di 5,0 V. Le memorie EDO su zoccolo SIMM hanno un bus di 32 bit e una frequenza di lavoro di 8 MHz per una banda passante di 32 milioni di Byte/s (32 MB/s). Le memorie EDO su zoccolo DIMM hanno un bus di 64 bit e una frequenza di lavoro di 66 MHz per una banda passante di 528 milioni di Byte/s (528 MB/s).

### Burst EDO (BEDO) DRAM

Evoluzione della precedente, la BEDO DRAM poteva elaborare quattro indirizzi in un'operazione, per un massimo di 5-1-1-1, risparmiando tre ulteriori cicli di clock rispetto a un'EDO DRAM in condizioni ottimali. Ciò era ottenuto inserendo un contatore di indirizzo che teneva traccia dell'indirizzo successivo. Inoltre introdusse una specie di pipeline che permetteva di scomporre il ciclo di accesso in due stadi. Durante un'operazione di lettura il primo componente trasferiva il dato dalla memoria allo stadio di output. Questo lo mandava all'appropriato livello logico. Dato che il dato è già nel buffer di output, il processo avviene più velocemente (fino al 50% per grandi quantità di dati rispetto alla EDO DRAM).
Nonostante la BEDO DRAM fosse migliorata rispetto alla EDO, nel momento in cui si rese disponibile il mercato si stava muovendo significativamente verso la SDRAM.

### DRAM sincrone (SDRAM)

La DRAM sincrona o SDRAM è un tipo aggiornato di DRAM. Mentre la DRAM ha un'interfaccia asincrona, cioè risponde immediatamente agli input, la SDRAM è sincrona, cioè attende il segnale di clock successivo per rendere effettivi i cambiamenti ordinati. Il clock è usato per guidare una macchina a stati finiti che ha capacità di pipelining sui comandi in ingresso. Questo le permette di avere un modo di operare più complesso rispetto alla semplice DRAM.
Grazie alla pipeline la memoria può accettare un comando in arrivo prima di aver completato lo svolgimento del precedente. Così possono essere trasmessi in sequenza più comandi di scrittura senza aspettarne il completamento. In lettura il dato compare dopo un determinato numero di cicli di clock rispetto al comando, ma non è necessario aspettare che appaia prima di mandare il comando successivo. Questo intervallo è definito latenza ed è un fattore molto importante per le prestazioni della memoria.
La SDRAM fu introdotta nel 1997, e per il 2000 aveva sostituito la DRAM nei personal computer grazie alle sue migliori prestazioni. Il consorzio di produttori JEDEC sta sviluppando lo standard per le memorie DDR SDRAM, le quali risultano al giorno d'oggi il migliore compromesso fra prezzo e prestazioni.

### Double Data Rate (DDR) SDRAM

La DDR SDRAM è un ulteriore miglioramento della SDRAM, usata nei PC a partire dal 2000. Tutti i tipi di SDRAM usano come segnale di clock un'onda quadra: ciò significa che il segnale cambia alternativamente tra due valori logici di tensione (0 e 1), generalmente milioni di volte al secondo. La tradizionale SDRAM, come la maggior parte dei circuiti sincroni, si attiva sul fronte di salita del segnale ed ignora quello di discesa. La DDR opera in entrambi gli istanti, a volte raddoppiando la quantità di dati trasferiti nello stesso tempo.
Lo standard DDR si sta evolvendo, da DDR a DDR2 a DDR3 a DDR4 a DDR5. Lo standard DDR2 è il più usato dal 2005, mentre il DDR3 è largamente utilizzato nelle schede video di fascia medio-alta dal 2008, e dal 2010 utilizzato nelle memorie centrali, non solo in sistemi di fascia alta. La differenza tra DDR, DDR2, e DDR3 è soprattutto nelle tensioni di alimentazione, nella gamma di velocità e in alcune particolarità nell'interfaccia.
| | DDR | DDR2 | DDR3 | DDR4 | DDR5 |
| Produzione | 2002 | 2004 | 2007 | 2013 | 2020 |
| Dimensione | 133.35 x 31.75 mm | 133.35 x 30.00 mm | 133.35 x 30.00 mm | 133.35 x 31.25 mm | 133.35 mm x 34.9 mm |
| PIN | 184 | 240 | 240 | 288 | 288 |
| Capacità | da 128 MB a 1 GB | da 256 MB a 4 GB | da 1 GB a 8 GB | da 4 GB a 32 GB | da 8 GB a 512 GB |
| Prefetch | 2 bit | 4 bit | 8 bit | 8 bit | 16 bit |

#### DDR

| JEDEC | Modulo | Clock della memoria | Clock del bus I/O | Data Rate | Bandwidth | Tensione |
| DDR-200 | PC-1600 | 100 MHz | 100 MHz | 200 MT/s | 1.600 MB/s | 2.5V |
| DDR-266 | PC-2100 | 133 MHz | 133 MHz | 266 MT/s | 2.133 MB/s | 2.5V |
| DDR-333 | PC-2700 | 166 MHz | 166 MHz | 333 MT/s | 2.666 MB/s | 2.5V |
| DDR-400 | PC-3200 | 200 MHz | 200 MHz | 400 MT/s | 3.200 MB/s | 2.6V |

#### DDR2

| JEDEC | Modulo | Clock della memoria | Clock del bus I/O | Data Rate | Bandwidth | Tensione |
| DDR2-400 | PC2-3200 | 100 MHz | 200 MHz | 400 MT/s | 3.200 MB/s | 1.8V |
| DDR2-533 | PC2-4200 | 133 MHz | 266 MHz | 533 MT/s | 4.267 MB/s | 1.8V |
| DDR2-667 | PC2-5300 | 167 MHz | 333 MHz | 667 MT/s | 5.333 MB/s | 1.8V |
| DDR2-800 | PC2-6400 | 200 MHz | 400 MHz | 800 MT/s | 6.400 MB/s | ~ 2.0V |
| DDR2-1066 | PC2-8500 | 267 MHz | 533 MHz | 1.066 MT/s | 8.533 MB/s | ~ 2.2V |

#### DDR3

| JEDEC | Modulo | Clock della memoria | Clock del bus I/O | Data Rate | Bandwidth | Tensione |
| DDR3-800 | PC3-6400 | 100 MHz | 400 MHz | 800 MT/s | 6.400 MB/s | 1.5V |
| DDR3-1066 | PC3-8500 | 133 MHz | 533 MHz | 1.066 MT/s | 8.533 MB/s | 1.5V |
| DDR3-1333 | PC3-10600 | 167 MHz | 667 MHz | 1.333 MT/s | 10.667 MB/s | 1.5V |
| DDR3-1600 | PC3-12800 | 200 MHz | 800 MHz | 1.600 MT/s | 12.800 MB/s | 1.5V |
| DDR3-1866 | PC3-14900 | 233 MHz | 933 MHz | 1.866 MT/s | 14.933 MB/s | ~ 1.65V |
| DDR3-2133 | PC3-17000 | 266 MHz | 1.066 MHz | 2.133 MT/s | 17.067 MB/s | ~ 1.65V |
| DDR3-2400 | PC3-19200 | 300 MHz | 1.200 MHz | 2.400 MT/s | 19.200 MB/s | ~ 1.65V |
| DDR3-2666 | PC3-21300 | 333 MHz | 1.333 MHz | 2.666 MT/s | 21.333 MB/s | ~ 1.65V |

#### DDR4

| JEDEC | Modulo | Clock della memoria | Clock del bus I/O | Data Rate | Bandwidth | Tensione |
| DDR4-1600 | PC4-12800 | 200 MHz | 800 MHz | 1.600 MT/s | 12.800 MB/s | 1.25V |
| DDR4-1866 | PC4-14900 | 233 MHz | 933 MHz | 1.966 MT/s | 14.933 MB/s | 1.25V |
| DDR4-2133 | PC4-17000 | 266 MHz | 1.066 MHz | 2.133 MT/s | 17.067 MB/s | 1.25V |
| DDR4-2400 | PC4-19200 | 300 MHz | 1.200 MHz | 2.400 MT/s | 19.200 MB/s | 1.25V |
| DDR4-2666 | PC4-21300 | 333 MHz | 1.333 MHz | 2.666 MT/s | 21.333 MB/s | 1.2 ~ 1.35V |
| DDR4-3000 | PC4-23400 | 366 MHz | 1.467 MHz | 2.934 MT/s | 23.472 MB/s | 1.2 ~ 1.35V |
| DDR4-3200 | PC4-25600 | 400 MHz | 1.600 MHz | 3.200 MT/s | 25.600 MB/s | 1.2 ~ 1.35V |
| DDR4-4266 | PC4-34100 | - | 2.133 MHz | 4.266 MT/s | 34.000 MB/s | 1.2 ~ 1.35V |

### Direct Rambus DRAM (DRDRAM)

La Direct Rambus DRAM, spesso chiamata DRDRAM, è internamente simile alla DDR SDRAM, ma usa per il segnale una speciale tecnologia sviluppata da Rambus che permette velocità di clock maggiori. I chip RDRAM sono divisi in moduli chiamati Rimm, non compatibili con i DIMM della SDRAM. Intel ha ottenuto la licenza per la tecnologia e ha sviluppato dei chipset con supporto per la RDRAM. I primi sistemi con Pentium 4 potevano usare solo RDRAM ma, dato che i prezzi della memoria rimanevano alti, alla fine fu introdotto il supporto anche per la DDR (la VIA Technologies aveva già sviluppato un chipset per Pentium 4 con supporto DDR ma ne fu impedito l'utilizzo per vie legali, così VIA decise di costruirci schede madri proprie, ma non ebbero molto successo). La RDRAM quasi scomparì dai nuovi sistemi nel 2003 per la presenza del supporto di DDR da parte del Pentium 4 e per il minor costo della SDRAM. Sony ha usato le memorie RDRAM per la sua PlayStation 2 mentre ha usato le memorie XDR DRAM di Rambus nella PlayStation 3.

### Video DRAM (VRAM)

La VRAM è una memoria DRAM con doppio ingresso, prima usata nelle schede video. Al momento è praticamente obsoleta, sostituita da SDRAM e SGRAM. La VRAM possiede due ingressi alla memoria che possono essere usati contemporaneamente. La prima porta può essere usata come una normale DRAM. La seconda è di sola lettura e serve a fornire al display un flusso continuo di dati. Per usarla, il controllo video usa per prima cosa la porta DRAM per selezionare una riga, che viene interamente copiata in un registro principale. Il controllo può quindi continuare ad usare la porta DRAM per disegnare oggetti sullo schermo. Nel frattempo fornisce alla porta video un segnale di clock chiamato shift clock (SCLK). Ad ogni impulso di questo la VRAM fornisce i dati contenuti nel registro alla porta video. Per semplicità, le schede video sono programmate per fare in modo che una linea contenuta nella memoria, e quindi nel registro, corrisponda ad una linea di pixel completa nel display.

### Synchronous Graphics RAM (SGRAM)

La SGRAM è un tipo di SDRAM adattata per le schede video. Include funzioni quali quella di bit masking (dà la possibilità di scrivere un bit specifico senza influire sugli altri) e quella di block writing (permette di riempire un intero blocco di memoria con un solo colore).

### Pseudostatic RAM (PSRAM)

La PSRAM è una DRAM con circuiti di controllo degli indirizzi e del ricaricamento integrati, in modo tale da risultare analoga a una SRAM. Essa combina l'alta capacità della DRAM con la semplicità d'uso della SRAM. Alcune DRAM possiedono sia la modalità di auto-ricaricamento che quella normale con controllo esterno.

## Legge di crescita delle DRAM

Dal 1977, questo componente ha avuto una notevole e costante crescita sia in termini di capacità che (in misura minore) di velocità di accesso. L'industria delle DRAM ha quadruplicato la capacità di memoria ogni 3 anni, con un incremento che si aggira attorno al 60% annuo, in pratica "quattro volte ogni tre anni"; questa affermazione viene chiamata la legge di crescita delle DRAM.
Questo rapporto è molto simile alla legge di Moore, l'osservazione empirica che l'evoluzione elettronica porta a un raddoppio della capacità elaborativa (dei computer) ogni 18 mesi. Tale "legge" si è mantenuta vera fino ad oggi, ma arriverà un momento in cui si andrà incontro al limite fisico dei materiali.
La crescita delle memorie è in parte dovuta all'utilizzo del silicio. Considerato come un cattivo conduttore in forma grezza, il silicio, sottoposto a speciali processi chimici, può comportarsi in 3 diversi modi:
* Come un eccellente conduttore elettrico,
* Come un eccellente isolante elettrico,
* Come un'area che può condurre oppure non condurre sotto particolari condizioni (drogaggio).
Sviluppando sempre più intensamente questo materiale, si sono raggiunti risultati sempre maggiori, aumentando la densità di memoria del singolo chip.
Bisogna tener presente che nella valutazione generale delle prestazioni, anche il costo del prodotto finito ha un peso molto importante: senza una diminuzione costante dei prezzi, non si sarebbe registrata la crescita nel tempo.
Prendendo in esame il costo di 1 MB di memoria DRAM si ottiene un fattore di:
* 5000 nel 1977
* 32 nel 1990
* 0,25 nel 2000
* 0,125 nel 2001
Il costo sta via via diminuendo, quasi a dimezzarsi ogni anno.
Se il progresso tecnologico è stato rapido, si deve anche al fatto che è stato incentivato dalle richieste del mercato: sono aumentati i linguaggi di programmazione, gli stessi programmi sono diventati più complessi e richiedono una CPU veloce, ma anche una memoria in grado di caricare velocemente il codice in esecuzione.
Anche se la crescita della capacità di memoria è andata di pari passo con l'incremento delle prestazioni dei processori, un problema grave è rimasto nel tempo di accesso: in origine le CPU funzionavano a frequenze simili a quelle delle memorie, ma negli ultimi anni il loro aumento di velocità è stato molto più rapido. Il risultato è che un processore moderno funziona a frequenze anche 10 volte più elevate di quelle della RAM che gli fornisce i dati, creando un ovvio collo di bottiglia nell'esecuzione dei programmi. Lo sviluppo di grandi memorie cache ha permesso di risolvere, sebbene solo in parte, questo problema.
Prendendo in considerazione questo aspetto, l'aumento delle prestazioni cala portandosi a una crescita complessiva del 9% annuo, ovvero le prestazioni (intese come spazio della memoria e velocità) raddoppiano ogni 10 anni. Considerando questo nuovo punto di vista, ogni anno il divario tra prestazioni della CPU e memoria RAM s'incrementa del 50%.