Jump to content
v_parrello

[TUTORIAL] Guida su RAM DDR, DDR2 e relativi timings

Recommended Posts

La guida che segue nasce dall'esigenza personale di fugare i dubbi sul funzionamento delle RAM di tipo SDRAM DDR e DDR2 (che sono quelle attualmente utilizzate) e dei principali timings associati.

La guida è stata scrita cercando di fare un compendio delle varie informazioni trovate qua e la in giro sulla rete e soprattutto studiando i datasheet dei costruttori di memorie che sono sull'argomento una miniera di informazioni. C'e' da dire che per leggere i datasheet ho dovuto rispolverare tutte le vecchie nozioni di elettronica ormai abbandonate dai tempi dell'università (che ahimè sono lontani), e quindi ho cercato di mettere in maniera più semplice possibile le cose capite ed elaborate a partire dai datasheet.

La guida cerca di spiegare il funzionamento delle DDR SDRAM (anche per le DDR2 valgono tutti i ragionamenti fatti) e dei principali timings che si trovano nei bios delle schede madri più evolute (per es. DFI). Chi avrà tempo e voglia di leggere i datasheet dei costruttori delle memorie e quelli dei controller di memoria (io mi sono basato sul controller AMD integrato nel processore) vedrà che i timings che regolano il funzionamento delle RAM e del controller di AMD nella realtà sono un miriade e che solo i principali sono presenti nei bios delle motherboard.

 

Naturalmente nello spirito del forum sono a disposizione per recepire osservazioni/precisazioni/commenti, e naturalmente sono a disposizione di tutti coloro che hanno bisogno di chiarimenti e vorrebbero reperire del materiale per studiare in maniera più approfondita quanto riassunto in questa guida.

 

 

INIZIO DELLA GUIDA

 

 

1. Introduzione

 

Lo scopo del presente tutorial è quello di comprendere i timings che regolano il funzionamento delle moderne memorie DDR SDRAM. Per raggiungere questo scopo è necessario capire le modalità di funzionamento della memoria e in particolare come sono effettuate le operazioni elementari come la lettura e la scrittura dei dati.

Saranno presi in considerazione dei modelli semplificati di funzionamento che sono adatti a descrivere compiutamente i timings delle memorie. Verrà utilizzato un linguaggio che sia il più semplice possibile e dei modelli semplificati che se da una parte consentiranno ad un numero maggiore di persone di comprendere gli argomenti trattati, dall'altra faranno storcere il naso agli utenti maggiormente esperti e a quelli più puristi: mi scuso anticipatamente con questi utenti.

Tutte le considerazione fatte sui timings sono valide anche per le memorie DDR2 SDRAM visto che la loro architettura interna è comunque quella di una memoria SDRAM. L'unica differenza tra DDR e DDR2 consiste nella banda di uscita e verrà chiarita meglio nel seguito.

 

 

2. Indirizzamento in un modulo di memoria DDR SDRAM

 

Logicamente i chip che costituiscono le memorie sono organizzati come degli array bidimensionali (matrici) che vengono acceduti specificando un indirizzo di riga ed un indirizzo di colonna. Ciascun elemento della matrice contiene una cella elementare di memorizzazione.

Pertanto per accedere un dato contenuto in una data cella di memoria bisogna fornire due indirizzi uno di riga ed uno di colonna, e quindi se suppongo di avere una memoria che è composta da un array bidimensionale (matrice) di 8192 righe e 1024 colonne avrò bisogno di:

• 2^13=8192 di un indirizzo di13 bit per indirizzare ciascuna delle righe presenti nella matrice

• 2^10=1024 un indirizzo di 10 bit per indirizzare ciascuna delle colonne presenti nella matrice

In totale avrò bisogno di un indirizzo composto da 13+10=23 bit per indirizzare correttamente il contenuto di una cella di memoria.

In altre parole questo significa che dovrei fornire al chip di memoria 23 linee che consentano di trasportare l'indirizzo con cui si individua una cella elementare di memoria.

 

immagine13vm.jpg

 

Primo espediente che viene utilizzato nelle moderne memorie DDR SDRAM invece di utilizzare 23 linee che consentano di trasportare l'indirizzo, se ne utilizzeranno solo 13 che rappresentano le linee necessarie per poter indirizzare le righe. Per indirizzare le colonne utilizzerò le stesse linee ma in tempi diversi: prima sarà trasferito l'indirizzo della riga da cui si vuole leggere il dato e subito dopo sarà trasferito l'indirizzo della colonna utilizzando (nell'esempio fatto) solo 10 delle 13 linee di indirizzo disponibili.

Ecco il motivo per cui ho bisogno il segnale di RAS (Row Address Select) e il segnale di CAS (Column Address select), questi segnali servono per far capire al controller della memoria che quello che sto passando è un indirizzo di riga oppure di colonna. Pertanto qualsiasi accesso alla memoria per fare una qualsiasi operazione prevede in sequenza il segnale di RAS seguito dall'indirizzo di riga ed il segnale di CAS seguito dall'indirizzo di colonna.

Ma perchà© si è complicato il meccanismo di indirizzamento della memoria passando l'indirizzo completo in due tempi? La spiegazione è molto più semplice di quanto si creda: si vogliono risparmiare delle linee di indirizzo per consentire una miniaturizzazione più spinta e quindi per consentire di avere maggiori quantità di memoria in parità di spazio. Nella microelettronica quando si deve portare qualche linea elettrica al di fuori del chip sorgono sempre grossi problemi, infatti questo costituisce uno dei maggiori impedimenti da superare nella progettazione di un qualsiasi chip miniaturizzato.

A questo punto facciamo un accenno alla metodologia utilizzata per memorizzare i dati all'interno di una cella di memoria. Sostanzialmente viene utilizzato un circuito elettrico che può essere schematizzato come un condensatore che può essere caricato o scaricato, attribuendo ai due stati elettrici del condensatore i valori binari 0 ed 1 ecco fatto che avrò un circuito in grado di memorizzare dei dati al proprio interno. Il tutto può essere schematizzato nel seguente modo:

 

immagine24mu.jpg

 

Questo circuito rappresenta un buon risultato dal punto di vista della miniaturizzazione perchè utilizza un numero minimo di componenti, però ha un inconveniente che è quello di tutti i condensatori e cioè che passato un certo tempo tende a perdere la sua carica elettrica di fatto perdendo il contenuto informativo contenuto in esso.

Per ovviare a questo inconveniente si ricorre al refresh che consiste nell'accedere (dando quindi tensione alla cella elementare), ad intervalli di tempo regolari (refresh time), il contenuto di ogni cella mantenendo inalterati i dati originali. Così è possibile mantenere i dati all'interno della DRAM per un tempo indeterminato.

Il refresh viene anche effettuato in corrispondenza di ciascuna operazione di lettura/scrittura in memoria.

 

3. Densità e banchi in un chip di memoria

 

I chip di memoria più diffusi sono quelli da 4, 8, e 16 bit (più raramente 32 bit). Quindi un chip di 512 Mbit di memoria può essere composto fino a 128M con celle a 4 bit, 64M con celle a 8 bit, oppure 32M con celle a 16 bit, le corrispondenti notazioni sono 128M * 4, 64M * 8, e 32M * 16.

La prima cifra è chiamata depth (profondità ) di un chip di memoria ed è una quantità adimensionale, la seconda è chiamata width (ampiezza) ed è espressa in bit. Ciascun chip di memoria è caratterizzato da una densità (profondità * ampiezza) ed è organizzato in banchi (di solito 4 e più raramente 2).

Quindi la densità indica la quantità di celle elementari memoria presenti in un chip e le linee dati in uscita (I/O) del chip, per esempio:

• 64 Mbit * 8 significa che il chip di memoria è da 512 Mbit (densità ) e che in uscita vengono utilizzate linee dati di I/O con ampiezza di 8 bit ;

• 32 Mbit * 16 significa che il chip di memoria è da 512 Mbit (come prima) e che in uscita vengono utilizzate linee dati di I/O con ampiezza di 16 bit;

Se il chip è organizzato in 4 banchi avrò all'interno del chip 4 matrici di 128 Mbit ciascuna ovvero utilizzando gli stessi esempi di prima:

• avrò 4 matrici di 8192 * 1024 * 16

• avrò 4 matrici di 8192 * 512 * 32

Dagli esempi fatti si nota che se l'uscita del chip è di n bit allora ogni elemento delle matrici di memoria conterrà 2 * n bit, questo è dovuto al fatto che l'architettura delle memorie DDR SDRAM utilizza un'architettura del tipo Double Data Rate (DDR appunto), che è essenzialmente un'architettura con un tipo d'interfaccia progettata per trasferire due data words per ogni ciclo di clock nei pin di I/O. In una memoria DDR SDRAM un singolo accesso in lettura/scrittura consiste effettivamente di un trasferimento interno al chip di un singolo dato che contiene 2n-bit per ciascun ciclo di clock, e corrisponde sui pin di I/O a due dati che contengono ciascuno n-bit, in cui ciascun dato viene trasferito ogni mezzo ciclo di clock (un dato viene trasferito sul fronte di salita del clock e un altro dato sul fronte di discesa).

In altre parole con un unico ciclo di clock vengono accedute e rese disponibili due data words, mentre nelle vecchia memorie SDRAM con un ciclo di clock veniva acceduto e reso disponibile un solo data word, quindi in generale a parità di frequenza di clock la banda delle DDR SDRAM è doppia rispetto a quella delle normali SDRAM.

L'organizzazione in banchi implica che avrò bisogno di ulteriori bit di indirizzo per indirizzare uno dei quattro banchi presenti in ciascun chip, che vengono chiamati segnali di Bank Address (BA). Per riassumere quanto detto si può considerare il seguente schema logico di un chip di memoria:

 

immagine38wb.jpg

 

Nella realtà le cose sono molto più complicate, però questo schema riassume i concetti principali che concorrono alla lettura/scrittura di valori all'interno di un chip di memoria. Sono presenti i seguenti elementi:

1) i segnali di indirizzamento:

a) i segnali di Bank Address BA0 e BA1 che servono a indirizzare uno dei 4 banchi di memoria presenti all'interno del chip;

b) i segnali di Address da A0 a A12 che consentono di indirizzare le celle di memoria all'interno di ciascun banco.

2) i segnali di controllo:

a) CS (Chip Select) che serve a selezionare/deselezionare il chip di memoria;

b) WE (Write Enabled) che serve ad abilitare/disabilitare la scrittura in questo chip di memoria;

c) CAS (Columns Address Select) che è il segnale che precede gli indirizzi di colonna;

d) RAS (Row Address Select) che è il segnale che precede gli indirizzi di riga.

3) DQ0-DQ7 che sono le linee di I/O del chip di memoria.

 

L'organizzazione di un array di memoria SDRAM in banchi è stato introdotto principalmente per aumentare le performance, anzi per essere più precisi, per minimizzare le latenze del sistema. Infatti, il fatto di avere più banchi può consentire, per esempio, di accedere una riga in un banco mentre contemporaneamente si sta eseguendo un refresh un'altra riga in un altro banco. Oppure di organizzare i dati nella memoria in modo tale che il prossimo dato che sarà acceduto sarà nell'altro banco e nella riga di memoria che è stata appena refreshata ed è pronta per essere letta/scritta, risparmiando un ciclo di refresh (ricordiamo che tutte le operazioni di lettura/scrittura sono associate ad un ciclo di refresh). Questo metodo di accesso è detto bank interleaving.

Per i più puristi e quelli più esperti riporto di seguito come nella realtà è l'architettura di un chip di memoria da 512 Mbit con densità 64 Mbit * 8:

 

immagine48sf.jpg

 

Lo schema è tratto da un data sheet di un chip di memoria commerciale di un noto produttore, chi vuole può divertirsi a capirlo in dettaglio. Comunque i concetti fondamentali sono quelli descritti nello schema semplificato prima presentato.

 

4. Granularità in un modulo di memoria

 

Il concetto di granularità si riferisce al fatto che più chip di memoria con una qualsiasi densità possono essere collegati assieme in un layout di un PCB per formare un modulo di memoria di una capacità qualsiasi.

Come già visto l'ampiezza di un chip è la capacità della sua interfaccia con il bus dati di I/O (un chip 64 Mbit * 8 ha ampiezza di 8 ovvero è capace a veicolare in I/O 8 bit alla volta). Considerando che i moderni controller di memoria hanno bus dati a 64 bit, bisogna assemblare assieme tanti chip di memoria tali che l'ampiezza totale veicolata in I/O corrisponda a quella dell'ampiezza del bus dati del controller. Quindi la composizione di un banco SDRAM di 64 bit richiede 16 chip con ampiezza * 4, 8 chip con ampiezza * 8, 4 chip con ampiezza * 16 cioè viene fatta riempiendo il bus dati del controller.

Il rimanente parametro di capacità che è la profondità viene utilizzato per determinare la capacità totale del modulo fisico di memoria SDRAM. Per esempio un tipico modulo di 1GB di SDR/DDR/DDR2 SDRAM ha profondità di 1GB * 8 (bit/byte) / 64 bits = 128M. Quindi in questo caso il modulo è denotato come 128M * 64.

C'è da dire che in un banco fisico di memoria posso ottenere la stessa capacità utilizzando chip che hanno profondità che è la metà di quella massima utilizzabile, così per esempio posso ottenere un modulo di 1GB utilizzando 8 chip 64M * 16 oppure utilizzando 16 chip 64M * 8. Nel primo caso si parla di memoria singl-bank (o single-rank), nel secondo caso di memoria dual-bank (o dual-rank). Le memorie dual-bank sono rappresentate con configurazioni che utilizzano 16 chip con ampiezza * 8, docve il primo banco è formato dai primi otto chip nel lato frontale del modulo e gli altri otto chip nel lato posteriore nel modulo di memoria. Naturalmente i moduli di memoria dual-bank di solito hanno maggiori latenze di accesso rispetto a quelli single-bank.

Per i più esperti di seguito viene riportato un diagramma funzionale a blocchi di un layout PCB standard, preso da un datasheet di un noto costruttore, che rende l'idea di come i chip di memoria a 66 pin vengono collegati assieme per ottenere un modulo di memoria DDR SDRAM da 1 GB unbuffered a 184 pin:

 

immagine52ym.jpg

 

Notate come le linee dati di I/O sono 64 e il segnale di chip select consente di selezionare 8 banchi per volta.

Share this post


Link to post
Share on other sites


5. Comandi impartiti ad un chip di RAM e timings associati

 

Un chip di memoria RAM può ricevere un set di comandi elementari che vengono impartiti utilizzando i segnali che arrivano al chip di memoria. Più precisamente l'invio combinato di questi segnali si traduce in un comando che viene impartito al chip di memoria. Il tutto è riassunto nella tabella seguente:

 

immagine69wa.jpg

 

Nelle righe della tabella sono riportati i comandi ed i corrispondenti segnali di controllo che bisogna "alzare" (H sta per High ed L sta per Low) per eseguire il comando stesso. Tenendo conto che il segnale si attiva nella transizione del fronte di clock da alto a basso Low corrisponde a segnale attivato.

Per indirizzare una riga dovrò impartire un comando di ACTIVE che corrisponde al segnale di CS (Chip Select) e di RAS (Row Address Select) attivi seguiti dagli indirizzi di banco e di riga. Per leggere il contenuto di una riga precedentemente attivata dovrò "alzare" i segnali di CS e CAS (Column Address Select).

Una volta capito come vengono impartiti i comandi ad un chip di memoria è facile capire come avviene un ciclo di lettura e di scrittura sulla memoria e quali siano i timings associati.

 

5.1. Attivazione di una riga di memoria

 

Facendo riferimento al modello semplificato di chip di memoria già riportato precedentemente proviamo ad immaginare le operazioni elementari che vanno fatte per leggere e scrivere un elemento all'interno delle celle elementari presenti in un chip di memoria.

 

immagine38wb.jpg

 

Prima di fare una qualsiasi operazione sui dati immagazzinati in una riga di memoria, è necessario attivare la riga corrispondente nel banco di memoria. A questo scopo viene utilizzato il comando ACTIVE associato ad un indirizzo di banco presente sui pin BA0-BA1 e un indirizzo di riga presente sui pin A0-A12 del chip di memoria (fare riferimento al modello di chip semplificato presentato precedentemente).

La riga attivata rimane disponibile per operazioni susseguenti alla prima fino a quando non viene inviato un comando di PRECHARGE che disattiva la riga e la rende indisponibile a successive operazioni (fino ad un nuovo comando di ACTIVE). Il periodo minimo di disponibilità della riga dalla sua attivazione fino al segnale di precharge è determinato dal Row Active Time (tRAS).

Altro concetto è che è impossibile attivare un'altra riga nello stesso banco di memoria fino a quando la riga precedente nello stesso banco di memoria è disponibile. Questo è dovuto al fatto che tutta l'architettura fisica e il principio di funzionamento all'interno dello stesso chip è condiviso per tutte le righe contenute nello stesso banco di memoria. Per esempio all'interno dello stesso chip di memoria è presente lo stesso buffer di dati per ciascun banco, se si attivasse un'altra riga prima di avere disattivato quella attivata precedentemente, si otterrebbe la riscrittura dei dati nel buffer con quelli dell'ultima riga attivata. Quindi, il minimo periodo di tempo tra l'attivazione di due righe nello stesso banco di memoria di un chip è determinato dal Row Cycle Time (tRC).

Inoltre dopo aver attivato una riga prima di dare il successivo comando che indirizza la colonna bisogna attendere un sempre un tempo che è il RAS to CAS Delay (tRCD).

Contemporaneamente, essendo attiva una riga in un dato banco, è possibile attivare un‘altra riga in un altro banco del chip (questo è uno dei vantaggi di suddividere la memoria in più banchi) al successivo ciclo di clock, riducendo l'overhead totale legato all'accesso delle righe. Il minimo intervallo di tempo tra due accessi successivi su due differenti banchi è chiamato Row-to-Row Delay (tRRD). La ragione per introdurre questa ulteriore latenza non ha nulla a che vedere con le operazioni fatte sul chip di memoria, ma viene introdotta solamente per limitare i consumi elettrici indotti dalla frequente esecuzione di questo comando, la cui troppo frequente esecuzione potrebbe portare a effetti non desiderabili di eccessivo carico elettrico.

Di seguito un diagramma che spiega il significato del tRCD e del tRRD:

 

immagine70im.jpg

 

5.2. Lettura in memoria

 

Per quanto detto i passi necessari per leggere un elemento all'interno del chip di memoria sono i seguenti:

1) L'indirizzo di riga è inviato sui pin di indirizzo A0-A12 attraverso l'address bus;

2) Il pin che trasporta il segnale di RAS è attivato cosicché viene individuata la riga di memoria da cui leggere il valore.

3) La riga è copiata nel buffer interno al chip.

4) Il segnale di Write Enable è disattivato cosicché non sarà possibile scrivere un dato sulla stessa riga mentre questa viene letta.

5) L'indirizzo di colonna è inviato sui pin di indirizzo A0-A10 attraverso l'address bus.

6) E' individuata nel buffer interno la cella elementare di memoria da mandare in output.

7) Il segnale di CAS abilità l'output cosicché il valore letto è propagato sui pin di I/O DQ0-DQ7 e quindi può viaggiare sul data bus verso il sistema.

8) I segnali di RAS e CAS sono disattivati così il ciclo può ricominciare.

 

Pertanto seguendo lo schema logico precedente, dopo aver attivato una riga in un banco di memoria bisogna inviare l'indirizzo di colonna. Tra l'invio dell'indirizzo di riga e l'indirizzo di colonna è necessario aspettare un tempo minimo chiamato RAS#-to-CAS# Delay (tRCD). Questo tempo è uno dei parametri di funzionamento della memoria fissati dal costruttore e che dipende strettamente dalla qualità del processo costruttivo e dalla qualità dei materiali impiegati.

Pertanto dopo un tempo tRCD è inviato al chip di memoria il comando di READ che contiene l'indirizzo di colonna e di banco. La lettura nelle memorie DDR SDRAM avviene in burst mode nel senso che con un unico comando di READ in effetti vengono lette più celle elementari di memoria (2, 4 oppure 8). Tra parametri impostabili per il funzionamento della memoria esiste un parametro detto Burst Lenght (nel bios DFI questo parametro è chiamato 32 byte granularity) che specifica proprio la lunghezza del burst da leggere.

C'è da dire che esistono due tipi di comandi di lettura:

• READ che consente di leggere da una riga di memoria lasciandola disponibile per successive operazioni;

• READ+AP (Auto Precharge) che alla fine dell'operazione di lettura, dopo che il burst di dati è stato trasferito, "chiude" la riga di memoria non consentendo di effettuare si di essa successive operazioni.

Dopo il commando di READ ( o READ+AP) la prima porzione di dati (detta anche chunk di dati) non è immediatamente disponibile sui pin di uscita del chip di memoria (DQ0-DQ7), ma diventa disponibile dopo un certo intervallo di tempo che è chiamato CAS# Latency (tCL). Pertanto il ritardo tra il comando di READ e la disponibilità della prima porzione dei dati è la CAS# Latency (tCL), le porzioni di dati successive alla prima sono disponibili in uscita senza ulteriori latenze.

Lo schema successivo rappresenta la sequenza temporale delle operazioni:

 

immagine83ow.jpg

 

Dopo l'attivazione della riga (che non è mostrata nel diagramma) viene inviato il comando di READ con l'indirizzo di banco e di colonna (BA a, COL n), si aspettano 2.5 cicli di clock (= CAS Latency) dopodiché il burst di dati (4 porzioni o chunk presi dal banco a colonna n DOa-n) comincia ad essere disponibile sulle linee di uscita DQ. Sul diagramma è da notare che il burst di dati in uscita è sincronizzato con un altro segnale che viene detto DQS che serve a sincronizzare l'I/O di dati dal chip di memoria con il controller della memoria esterno. Più precisamente i dati in uscita (letti dalla memoria) sono allineati con i fronti (di salita e discesa) di questo segnale di clock, i dati in ingresso (scritti sulla memoria) sono centrati rispetto al segnale. Per i dati in uscita questo segnale è usato per "catturare" i dati.

Il tempo che intercorre tra il comando di READ e il primo fronte di salita del segnale DQS, corrispondente all'output del primo chunk del burst di dati in ingresso, è detto read preamble time (tDQSCK). In questo caso il read preable time è inglobato nella CAS latency e quindi non ha ulteriore impatto sull'operazione di lettura.

 

 

5.3. Scrittura in memoria

 

Per quanto detto i passi necessari per scrivere un elemento all'interno del chip di memoria sono i seguenti:

1) L'indirizzo di riga è inviato sui pin di indirizzo A0-A12 attraverso l'address bus;

2) Il pin che trasporta il segnale di RAS è attivato cosicché viene individuata la riga di memoria su cui scrivere il valore.

3) La riga è copiata nel buffer interno al chip.

4) Il segnale di Write Enable è attivato cosicché non sarà possibile leggere un dato sulla stessa riga mentre questa viene scritta.

5) L'indirizzo di colonna è inviato sui pin di indirizzo A0-A10 attraverso l'address bus.

6) E' individuata nel buffer interno la cella elementare di memoria da scrivere.

7) Il segnale di CAS abilità l'input cosicché il valore presente sui pin di I/O DQ0-DQ7 viene scritto e quindi può aggiornare il contenuto della memoria.

8) I segnali di RAS e CAS sono disattivati così il ciclo può ricominciare.

Analogamente alla scrittura, seguendo lo schema logico precedente, dopo aver attivato una riga in un banco di memoria bisogna inviare l'indirizzo di colonna. Tra l'invio dell'indirizzo di riga e l'indirizzo di colonna è necessario aspettare il tempo minimo chiamato RAS#-to-CAS# Delay (tRCD). Pertanto dopo un tempo tRCD è inviato al chip di memoria il comando di WRITE che contiene l'indirizzo di colonna e di banco sul quale scrivere. Anche la scrittura nelle memorie DDR SDRAM avviene in burst mode nel senso che con un unico comando di WRITE vengono scritte più celle elementari di memoria (2, 4 oppure 8). Tra parametri impostabili per il funzionamento della memoria esiste un parametro detto Burst Lenght che specifica proprio la lunghezza del burst da scrivere.

Anche in questo caso esistono due comandi di scrittura:

• WRITE che consente di leggere da una riga di memoria lasciandola disponibile per successive operazioni;

• WRITE+AP (Auto Precharge) che alla fine dell'operazione di scrittura, dopo che il burst di dati è stato trasferito, "chiude" la riga di memoria non consentendo di effettuare si di essa successive operazioni.

Ci sono due differenze tra le operazioni di READ e WRITE:

• la prima porzione del dato da scrivere dovrà essere fornita contemporaneamente al comando di WRITE/WRITE+AP, al numero di banco e all'indirizzo di colonna. La successiva porzione di dato sarà inviata al successivo ciclo di clock e così via fino all'ultima porzione di dato il cui numero è specificato nel burst lenght;

• in questo caso, diventa di fondamentale importanza il Write Recovery Time (tWR), invcece della CAS# Latency (tCL). Questo valore rappresenta il minimo intervallo di tempo tra la ricezione dell'ultima porzione di dati da scrivere e la disponibilità della riga indirizzata ad essere "chiusa" con il comando di PRECHARGE. Ma qualora fosse necessario leggere dei dati dalla stessa riga "aperta" invece di chiuderla allora interviene un'altra latenza che è il tempo di Write-to-Read Delay (tWTR).

Lo schema successivo rappresenta la sequenza temporale delle operazioni che avvengono durante una scrittura in memoria. In particolare il diagramma si riferisce ad una scrittura seguita da una lettura sulla stessa riga di memoria ma su colonne diverse:

 

immagine97cr.jpg

 

Dopo l'attivazione della riga (che non è mostrata in questo diagramma), viene dato il comando di WRITE assieme all'indirizzo del banco di memoria BAa e della colonna COLb. A questo punto al contrario della lettura che bisognava aspettare un tempo pari alla CAS Latency, bisogna aspettare il tempo necessario affinché il segnale DQS che sincronizza l'input sia nel fronte di salita. Il tempo che intercorre tra il comando di WRITE e il primo fronte di salita del segnale DQS, corrispondente all'input del primo chunk del burst di dati in ingresso, è detto write preamble time (tDQSS). Dopo aver aspettato questo tempo il burst di dati presente sui pin DQ (4 chunk nell'esempio) comincia ad essere scritto in memoria. Nel diagramma dei tempi si vede anche la presenza di un segnale DM che è detto Data Mask che nella scrittura è sincrono con il DQ.

Nel diagramma dei tempi si vede che dopo avere scritto i dati nella memoria prima di fare qualsiasi altre operazione sulla stessa riga di memoria bisogna attendere un tempo pari al Write-to-Read Delay (tWTR). Subito dopo nel diagramma di esempio è fatta un'operazione di READ sul banco BAa e sulla colonna COLn.

Share this post


Link to post
Share on other sites

6. Latenze associate alle operazioni di interfaccia e alle operazioni di funzionamento

 

Le operazioni precedentemente viste si possono susseguire in un ordine qualsiasi durante il normale funzionamento di un computer e sono necessari per accedere la memoria e fare delle operazioni di lettura e di scrittura. Ci sono alcune operazioni che vengono fatte in memoria che non riguardano direttamente la lettura o la scrittura di un dato, ma riguardano operazioni necessarie per garantire il corretto funzionamento della RAM e per consentire ad essa di interfacciarsi con il controller che è il mezzo attraverso il quale la memoria comunica con il resto del sistema.

Il diagramma seguente riassume in maniera sintetica quelle che sono i possibili stati in cui si può trovare un modulo di memoria:

 

immagine107or.jpg

 

Per esempio è possibile specificare il Command Rate che può valere 1T oppure 2T e indica se i comandi vengono impartiti alla memoria ogni ciclo di clock oppure ogni due cicli di clock.

Inoltre come già visto la memoria SDRAM per conservare i dati memorizzati ha bisogno di un'operazione di refresh,tipicamente l'intera DRAM deve avere ogni riga refreshata almeno una volta ogni 64 ms (pena la perdita dei dati in essa memorizzati). Entrano in gioco due timings:

• Il Row Refresh Cycle Time (tRFC) (anche detto (Auto-Refresh-to-Active/Auto-Refresh Command Period) che rappresenta il tempo tra due successive comandi di auto refresh oppure self refresh. Dipende dalla dimensione del chip di memoria e dalla sua frequenza di funzionamento (per esempio valori tipici a 200 MhZ di frequenza sono 70 ns ovvero 14 colpi di clock per chip a 512Mbit o più piccoli e 120 ns ovvero 24 colpi di clock per chip a 1 Gbit).

• Il Refresh Period (tREF) che rappresenta il tempo medio tra due refresh sulla stessa riga di memoria che dipende dal numero di righe totali presenti nella memoria e sulla frequenza di clock. Tipicamente l'intero modulo di memoria deve avere ogni riga refreshata al massimo ogni 64 ms. Quindi per memorie aventi pagine di 4k il tREF è pari a 64ms/4096=15.6 µs medi per refreshare ciascuna riga, per memorie con pagine di 8k è richiesto un tempo medio di refresh delle righe di 7.8 µs, e per memorie con pagine 16k è richiesto un tempo medio di refresh delle righe di 3.9 µs.

Un altro tempo che impatta sulla banda della memoria è la Maximum Asynchronous Latency che va settata in funzione del round trip loop time tra il processore e la DIMM più lontana. Il round trip loop è influenzato dalla lunghezza delle tracce del circuito del bus utilizzate per raggiungere la DIMM, dal carico della memoria e dalla frequenza di funzionamento del bus. Quindi si capisce ce questo è una latenza che riguarda i diversi ritardi di propagazione dei segnali dovuti proprio ala geometria e alla progettazione della motherboard, dei moduli di memoria. Questo diverso ritardo di propagazione dei segnali si traduce in un non perfetto sincronismo tra il clock della memoria e il FSB, con tale parametro si imposta il massimo asincronismo tollerabile.

Sono presenti tutta una serie di settaggi che agiscono sul segnale DQS che come abbiamo visto è quello che sincronizza l'I/O dei dati del chip di memoria. Potrebbero nascere dei problemi quando si crea un ritardo tra il segnale DQS e il segnale vero e proprio di input/output dei dati DQ. Il fenomeno è ben descritto dal seguente schema:

 

immagine110qi.jpg

 

Nel disegno soprastante si vede che c'e' un piccolo slittamento tra il segnale DQ (che porta i dati di input(output) ed il segnale DQS. Questo ritardo è detto DQ-DQS Skew ed i parametri di funzionamento che consentono di correggerlo sono:

• il DQS Skew Control che specifica se attivare o meno al correzione di questo errore e se bisogna incrementare o decrementare il ritardo;

• il DQS Skew Value che specifica il valore entro il quale ricondurre la correzione.

Nel disegno sottostante si vede una situazione in cui il ritardo è stato corretto e i due segnali sono perfettamente sincronizzati. Il parametro DQ-DQS Skew è un parametro di funzionamento dei chip di memoria e viene specificato dal costruttore qual'è la massima deriva sopportabile dal chip di memoria (valori tipici sono 0,40-0,80 ns), in funzione della frequenza di lavoro e della qualità del processo produttivo e dei materiali impiegati. E' ovvio che se tale deriva supera quella massima prevista per il chip di memoria in fase di progettazione allora ci potrebbero essere dei problemi.

Esistono altri due parametri che consentono di intervenire sui segnali DQ (linee dati in I/O dal chip di memoria) e DQS che è il segnale che serve a sincronizzare l'I/O con il bus dati del controller. In particolare questi parametri intervengono sull'intensità del segnale elettrico con il quale vengono generati questi segnali e sono i seguenti:

• DRAM Drive Strength che permette di controllare la potenza del segnale DQS;

• DRAM Data Drive Strength che permette di controllare la Potenza del segnale DQ.

Altri timings che riguardano il funzionamento del controller o meglio come il controller si inteerfaccia con i moduli di memoria sono:

• Read/Write Queue Bypass Count che specifica il numero di volte che la più vecchia operazione accodata nel DCI (Device Control Interface) può essere bypassata prima che venga forzata la sua esecuzione.

• Bypass Max specifica il numero di volte che la più vecchia operazione presente nel DCQ può essere bypassata prima che venga forzata la sua esecuzione.

• Idle Cycle Limit specifica il numero Massimo di cicli di clock che passeranno prima di chiudere forzatamente una riga di memoria aperta.

• Dynamic Idle Cycle Counter Enable quando settato ad 1 indica che ogni entry nella riga di memoria aggiusta dinamicamente l'Idle Cicle Limit secondo l'agoritmo basato sul Page Conflict/Page Miss. Cioè il contatore viene incrementato in corrispondenza di un evento di PM (Page Miss) ovvero quando viene richiesta una riga di memoria non aperta, e decrementato in corrispondenza di un evento di PC (Page Conflict) ovvero quando viene richiesta una riga che è in uno stato di idle (non aperta).

 

 

7. Osservazioni pratiche sui timings di memoria

 

Nei paragrafi precedenti abbiamo visto che il tempo minimo di disponibilità di una riga di memoria una volta attivata è dato dal tRAS, e tenendo conto che per leggere un valore devo aspettare un tempo minimo tRCD tra l'indirizzo di riga e colonna, un altro tempo minimo tCL tra l'indirizzo di colonna e la disponibilità della prima porzione di dati, avrò che

 

tRAS > tRCD + tCL

Inoltre visto che l'intero ciclo per leggere un burst di dati è dato dal tempo tRC e che il tempo necessario dall'attivazione all'uscita del primo chunk di dati è pari al massimo a tRAS e che per disattivare la riga avrò bisogno di un tempo pari al precharge tRP avrò che:

tRC= tRAS+ tRP

E' da notare che di solito i tempi tRAS e tRC sono impostabili separatamente da BIOS allora potrebbe risultare qualche violazione delle equazioni prima descritte, e tuttavia non sarebbenulla di grave perché il controller di memoria aggiusterebbe autonomamente i valori tRAS e tRC per soddisfare le equazioni prima descritte.

Altra considerazione che si potrebbe fare è sul Refresh Period (tREF),infatti si è visto che dipende sostanzialmente dall'architettura dei chip di memoria e dalla frequenza di funzionamento, e quindi se si possiedono memorie che utilizzano dei chip di memoria che hanno un'architettura interna con 4 banchi di memoria e che funzionano a 200 MhZ, il valore del refresh andrebbe settato a 15.6 µs.

 

Sul settaggio dei vari timings di memoria si troverà materiale abbondante sui vari forum che parlano dell'argomento, lo scopo di questo tutorial era quello di cercare di far capire e applicare questi timings in maniera più "scientifica" e non affidandosi completamente a dei concetti spiegati senza capirne i motivi, o addirittura solamente accennati, quando addirittura non vengano inventati sulla base delle impressioni pratiche di funzionamento.

 

8. Differenze principali tra DDR e DDR2

 

Come già detto precedentemente tutto quanto detto per le memorie DDR (modalità di funzionamento e timings) vale in gran parte anche per le memorie DDR2, quindi si procederà evidenziando le differenze introdotte dalle memorie DDR2 rispetto a quanto già presente sulle memorie DDR.

Le differenze sono ben riassunte nella tabella successiva:

 

immagine125ca.jpg

 

Nei paragrafi successivi saranno ripresi e rispiegate le caratteristiche più significative introdotte con le memorie DDR2 che hanno un impatto sulla logica di funzionamento della memoria e sui timings, che sono le seguenti:

• Prefetch 4n-bit

• Posted CAS e Additive Latency

• ODT (On Die Termination)

• OCD (Off Chip Driver)

 

8.1. Architettura con Prefetch 4n-bit

 

Come già detto precedentemente le memorie DDR hanno un architettura di tipo prefetch 2n-bit nel senso che ad ogni colpo di clock vengono effettuate due operazioni di I/O con una quantità di dati pari a 2n-bit.

Le memorie DDR2 hanno un'architettura di tipo prefetch 4n-bit nel senso che ad ogni colpo di clock vengono fatte quattro operazioni di I/O. Quindi questo significa che il bus interno delle memorie è quattro volte più veloce di quello esterno. Andremo a vedere come viene realizzata questa caratteristica delle memorie DDR2.

Come è facile intuire all'aumentare della frequenza di funzionamento aumentano le correnti interne che circolano nei microcircuiti che compongono il chip di memoria, con conseguente aumento del calore generato e con problemi di interferenze elettromagnetiche, questo comportamento limita fortemente l'aumento della frequenza di funzionamento. La più alta velocità di funzionamento delle RAM DDR2 è stata ottenuta "sdoppiando" la velocità all'interno dell'array di memoria rispetto alla velocità nel buffer di I/O, consentendo cosଠdi avere una maggiore banda in I/O senza aumentare la velocità interna dell'array di memoria RAM.

La differenza tra RAM DDR e DDR2 è ben schematizzata nella seguente figura:

 

immagine137fm.jpg

 

Quindi all'interno di un chip di memoria DDR2 avrò due frequenze di funzionamento: una per quanto riguarda la logica di indirizzamento e i banchi di memoria, un'altra per quanto riguarda lo stadio di I/O che opererà alla stessa frequenza del bus esterno che è doppia rispetto alla precedente.

Con questi accorgimenti di fatto avrò che la memoria DDR2 opererà con una banda doppia rispetto alla memoria DDR bypassando i problemi legati all'aumento della frequenza di funzionamento dei banchi di memoria.

Per i più puristi uno schema logico di funzionamento tratto da un datasheet di un noto costruttore che mette in evidenza quanto descritto precedentemente. Si nota che sono presenti due coppie di segnali (CK, CK negato) uno per la logica di controllo/comando della memoria e un'altra coppia (CK, CK negato) per lo stadio di I/O.

 

immagine147xv.jpg

 

8.2. Posted CAS e Additive Latency

 

Nelle memorie DDR esiste un problema legato all'efficienza del bus di comandi che a sua volta si riflette sull'efficienza del bus dati di I/O e quindi sulla banda della memoria. Questo problema si verifica quando si inviano verso la memoria comandi di lettura/scrittura in rapida successione.

Nella figura successiva è riportato un esempio in cui vengono eseguiti tre comandi di write successivi, in corrispondenza del terzo comando di activation della riga do memoria arriva il primo comando di write, i due comandi vanno in conflitto e viene spostato il comando di activation di un ciclo di clock. Questo provoca un buco temporale nel bus dati a causa alla posticipazione del terzo comando di activation, e quindi di write, che si traduce in una perdita di efficienza del bus dati.

 

immagine156nu.jpg

 

Per ovviare a comportamenti di questo tipo si è introdotto il concetto di Posted CAS che consiste nel rendere attivi i comandi di write/read dopo un tempo pari al tempo di Additive Latency (AL). In altre parole i comandi di write/read vengono accettati a partire dal ciclo di clock successivo a quello di activation ed al massimo entro il RAS#-to-CAS# Delay (tRCD), i comandi vengono "conservati" e vengono eseguiti dopo un tempo aggiuntivo pari all'Additive Latency (AL).

La differenza tra una normale operazione e una operazione "posted" (differita) è schematizzata nel diagramma temporale seguente:

 

immagine166bl.jpg

 

Si vede la stessa sequenza di operazioni eseguita senza utilizzare le nuove funzionalità di Posted CAS e Additive Latency, e con le nuove funzionalità .

Grazie all'introduzione delle nuove funzionalità si evita il conflitto dei comandi sul bus e si migliora l'efficienza del bus dati riducendo al minimo i periodi di inattività . I comandi di Read inviati il clock successivo a quelli di Activation vengono eseguiti dopo il tempo AL.

In virtù di questo nuovo tempo nelle memorie DDR2 vengono definite altre due gradezze che sono le seguenti:

• Read Latency (RL) defnita come tRCD + AL quando AL=0 la read latency è uguale a quella delle RAM DDR. Questo valore rappresenta il tempo da quando è stato dato il comando di posted read fino a quando è disponibile il primo chunck di dati in output;

• Write Latency (WL) definita come RL-1 e rappresenta il tempo da quando è stato dato il comando di posted write fino a quando è disponibile il primo chunck di dati in input.

 

8.3. ODT (On Die Termination)

 

Questa funzionalità è stata introdotta per la prima volta con le memorie DDR2 e serve a ridurre il fenomeno della riflessione del segnale presente in tutti i circuiti elettronici. Questo fenomeno causa "rumore" e quindi disturbi indesiderati nei circuiti in cui è presente, e la sua riduzione consente di ottenere una migliore qualità dei segnali elettrici con un conseguente miglioramento nel trasferimento dei dati ad alta velocità .

In particolare il contenimento di questo fenomeno viene fatto negli stadi di uscita dei chip di memoria DDR2 consentendo di avere un migliore transfer rate dei dati alle alte frequenze.

Un raggio di sole che colpisce un vetro di una finestra in parte si propaga all'interno dell'abitazione, in parte viene riflesso causando un fastidioso effetto di abbagliamento per chi ne viene colpito. Analogamente un segnale elettrico che viaggia in un circuito viene riflesso quando raggiunge la fine della pista del circuito, causando un fastidioso rumore nei circuiti elettronici che attraversa.

Nelle memorie DDR veniva utilizzato uno schema detto Motherboard Termination che consiste nel connettere una resistenza alla fine di ogni circuito di trasmissione dei segnali. Tuttavia questo metodo non consente di ridurre adeguatamente il fenomeno nel range di frequenze utilizzate dalle memorie DDR2.

Per comprendere il fenomeno e capire come si è evoluta la soluzione per le memorie DDR2 lo schema di funzionamento della Motherboard Termination è riportato nella seguente figura, in cui si vede che i segnali riflessi vanno ad inficiare la qualità dei segnali che il memory controller invia verso il modulo di RAM attivo:

 

immagine178cy.jpg

 

Con lo schema precedente non si riesce a controllare in maniera precisa la riflessione dei segnali, e quindi si è deciso di adottare nelle RAM DDR2 lo schema ODT (On Die Termination) nel quale la resistenza è direttamente collocata all'interno dei chip di memoria.

Lo schema ODT consente di eliminare quasi totalmente il fenomeno della riflessione dei segnali e consente di semplificare il layout della motherboard che non deve prevedere le resistenze per la terminazione dei segnali riflessi (che sono direttamente a bordo dei chip di memoria).

Lo schema ODT utilizzato nelle memorie DDR2 è il seguente:

 

immagine182yv.jpg

 

E' possibile settare diversi parametri di funzionamento sul bios della motherboard per configurare la modalità di funzionamento dell'ODT, ma per capire il loro significato bisogna capire meglio come viene implementato l'ODT. Un circuito di principio che chiarisce come è implementato l'ODT all'interno del chip di memoria è il seguente:

 

immagine193qn.jpg

 

Anzitutto bisogna osservare che l'ODT agisce sugli Input Pin cioè nei pin che collegano il chip di memoria con il bus dati. Infatti è il bus dati, a causa della sua elevata frequenza di funzionamento, ad essere il componente più sensibile al fenomeno della riflessione dei segnali. Quindi l'ODT tende a ridurre il fenomeno della riflessione sugli I/O pin del chip di memoria (DQ) e sui segnali che sono utilizzati a sincronizzare l'Input dei dati (DQS ed RDQS).

Come si vede dal semplice circuito utilizzato è possibile aprire o chiudere l'interruttore, impostare i tempi di apertura e chiusura dell'interruttore, e impostare il valore della resistenza. Questi settaggi avranno effetto contemporaneamente su tutti i segnali che vengono utilizzati nell'I/O dei dati verso e dal chip di memoria.

Quindi via bios è possibile configurare tutta una serie di parametri/timings che regolano il funzionamento dell'ODT, come per esempio (i nomi dei settaggi variano a seconda del bios e del costruttore della scheda madre) i valori della resistenza di terminazione:

• ODT not selected ( 8 O)

• ODT selected (50O)

• ODT selected (75O)

• ODT selected (150O)

• ODT selected (300O)

Inoltre è possibile impostare i timings di apertura e chiusura dell'interruttore che regola l'inserimento/disinserimento della resistenza, i timings variano a seconda che il modulo di memoria si trovi in modalità power-down, modalità active oppure modalità standby. I principali timings sono i seguenti:

• ODT turn-on delay (tAONPD) che rappresenta il ritardo necessario per chiudere l'interruttore, ovvero per settare ad ON la resistenza di terminazione, quando si è in modalità power-down;

• ODT turn-on delay time (tAOFPD) che rappresenta il ritardo necessario per aprire l'interruttore, ovvero per settare ad OFF la resistenza di terminazione, quando si è in modalità power-down;

• ODT turn-on delay time (tAOND) che rappresenta il ritardo necessario per chiudere l'interruttore, ovvero per settare ad ON la resistenza di terminazione, quando si è in modalità active o standby;

• ODT turn-on delay time (tAOFD) che rappresenta il ritardo necessario per aprire l'interruttore, ovvero per settare ad OFF la resistenza di terminazione, quando si è in modalità active o standby.

Anche se con nomi diversi (come già detto, dipendenti dal modello/versione di bios e dal costruttore della scheda madre) i timings fondamentali a cui fare riferimento per configurare l'ODT sono quelli sopra riportati ed il loro significato è quello che è stato prima spiegato.

 

8.4. OCD (Off Chip Driver)

 

La funzionalità ODT è una nuova funzionalità che è stata introdotta con le RAM DDR2. Questa funzionalità ha lo scopo di minimizzare il DQ-DQS Skew (che abbiamo visto in precedenza essere presente anche per le memorie DDR) consentendo di ottenere una migliore qualità nei segnali di I/O presenti sul chip di memoria. Questo si traduce in una maggiore stabilità di funzionamento della memoria alle frequenze più alte.

La seguente figura, presa da un datasheet di un costruttore, chiarisce la natura del problema introdotto dal DQ-DQS Skew:

 

immagine206ru.jpg

 

I segnali DQS, /DQS che sono utilizzati per sincronizzare l'I/O dei dati sulla linea DQ, non sono perfettamente simmetrici ma hanno un fronte di salita e di discesa che non si incontra nel punto mediano dei segnali come chiarito meglio dalla seguente figura:

 

immagine211er.jpg

 

Il fatto di non incontrarsi nel punto mediano ovvero esattamente in corrispondenza del livello VREF della tensione di riferimento, produce uno slittamento dei segnali DQS, /DQS rispetto al segnale DQ (dove viaggiano i dati in I/O). Il fenomeno è molto chiaro nella prima delle due figure precedenti, dove si vede che lo slittamento è pari al DQ-DQS Skew. Questo riduce la finestra temporale entro la quale i dati di I/O possono essere considerati validi, e questo è un problema molto serio all'aumentare della frequenza, che può anche portare alla corruzione dei dati che viaggiano sulle line dati DQ (più alta è la frequenza e più diventa problematico riconoscere i livelli del segnale soprattutto quando diminuisce la finestra temporale di validità dei dati).

La funzionalità OCD è utilizzata per calibrare l'impedenza interna dei circuiti di trasmissione dei segnali in modo da minimizzare il DQ-DQS Skew, e migliorare la qualità dei segnali di output alle alte frequenze, ottenendo dei benefici diretti sul transfer rate da e verso i chip di memoria.

Per fare queste operazioni di calibrazione è necessario misurare queste impedenze e fare una comparazione tra i vari valori rilevati. Le RAM DDR2 non consentono di fare operazioni di comparazione e misurazione, e quindi queste funzioni devono essere supportate dal controller di memoria. Quindi la memoria DDR2 consente di effettuare la calibrazione per minimizzare il DQ-DQS Skew, ma il controller deve supportare questa funzionalità integrando al suo interno la logica di misurazione e comparazione dei vari valori di impedenza misurati.

Esiste una sequenza di operazioni da eseguire per effettuare l'operazione di calibrazione e diverse modalità di esecuzione in cui i timings principali coinvolti sono i seguenti:

• OCD Drive Mode Output Delay (tOIT) è il tempo necessario affinché i segnali DQS, /DQS e DQ vengano predisposti per entrare/uscire nella/dalla modalità di calibrazione delle latenze;

• DQ Input Setup Time (tDS) è il tempo necessario ad inviare il comando di setup sulla linea dati DQ per un dato chunk di dati;

• DQ Input Hold Time (tDH) è il tempo entro il quale viene eseguito il setup sulla linea dati per un dato chink di dati.

Il valore di impedenza può essere calibrato sulla base della scelta di sedici differenti valori, cosicché può essere eseguito un tuning fine sui valori delle tensioni dei segnali di I/O e della loro sincronizzazione riducendo al massimo il DQ-DQS Skew.

Quindi nelle motherboard con controller a bordo compatibili con l'OCD, vi sono una serie di timings e di impostazioni che regolano la configurazione ed il livello di tuning fine per ottenere la riduzione del DQ-DQS Skew desiderata.

 

 

BIBLIOGRAFIA

 

Per una guida abbastanza completa su come si è evoluta la tecnologia sulle RAM è possibile utilizzare i seguenti link:

Ars Technica RAM Guide: Part I DRAM and SRAM Basics by Jon "Hannibal" Stokes

http://arstechnica.com/paedia/r/ram...de.part1-1.html

Ars Technica RAM Guide, Part II: Asynchronous and Synchronous DRAM by Jon "Hannibal" Stokes

http://arstechnica.com/paedia/r/ram...de.part2-1.html

Ars Technica RAM Guide, Part III: DDR DRAM and RAMBUS by Jon "Hannibal" Stokes

http://arstechnica.com/paedia/r/ram...de.part3-1.html

 

Per una guida molto sintentica sulle moderne RAM SDRAM si puo' consultare (sullo stesso sito sono presenti altre guide su DDR e DDR2):

RAM FAQ 1.0 by Dmitri Besedin

http://www.digit-life.com/articles2...6.html#pt1_head

 

La vera miniera di informazioni sulle RAM DDR è sui datasheet dei costruttori. Quelli che ho utilizzato che si trovano qui:

Datasheet Infineon

http://www.qimonda.com/consumer-dram/ddr/index.html

Datasheet Micron

Micron DDR SDRAM Products

 

In particolare per scrivere la guida ho utilizzato i seguenti datasheet che danno informazioni su timings, cicli di funzionamento, assemblaggio dei chip in moduli, logica generale di funzionamento:

Infinenon, Data Sheet, Rev. 1.10, Oct. 2005, HYB25DC512800C[E/F] HYB25DC512160C[E/F]512-Mbit Double-Data-Rate SDRAM DDR SDRAM RoHS Compliant Products

http://www.infineon.com/upload/Docu...xxCx_rev110.pdf

Micron, Double Data Rate (DDR) SDRAM MT46V256M4 – 64 Meg x 4 x 4 banks MT46V128M8 – 32 Meg x 8 x 4 banks MT46V64M16 – 16 Meg x 16 x 4 banks

http://download.micron.com/pdf/data...bDDRx4x8x16.pdf

Micron, DDR SDRAM UNBUFFERED DIMM MT16VDDT3264A – 256MB MT16VDDT6464A – 512MB MT16VDDT12864A – 1GB MT16VDDT25664A – 2GB (ADVANCE)‡

http://download.micron.com/pdf/data...64_128x64AG.pdf

 

Per capire come le memorie si interfacciano con i controller, i principali parametri di funzionamento, ho utilizzato un documento tecnico di AMD rivolto agli sviluppatori del bios e del kernel per i processori AMD Athlon e Opteron 64:

BIOS and Kernel Developer's Guide for AMD AthlonTM 64 and AMD OpteronTM Processors

http://www.amd.com/us-en/assets/con..._docs/26094.PDF

 

Per avere un modello semplificato di chip di memoria (che ho ripreso ed arricchito) ho utilizzato:

AN501: Latency Settings & Impact on Memory Performance

Welcome to Corsair :: Sorry, Page Not Found

 

Inoltre per ricavare qualche informazione addizionale sui settaggi e sui significati di qualche timings e qualche grafico che spiega il concetto del DQ-DQS Skew ho utilizzato:

DFI NF4 BIOS Memory Guide

http://www.dfi-street.com/forum/sho...179&postcount=4

THE DEFINITIVE DFI A64 OVERCLOCKING GUIDE

Other - "THE" Definitive DFI AMD Overclocking guide! (merged all the overclocking stickies into one guide!) - DIY-Street Forums

 

 

Per approfondire le la differenze tra DDR e DDR2 si posono utilizzare i seguenti riferimenti:

 

Micron, TN-47-02: DDR2 Offers New Features and Functionality

http://download.micron.com/pdf/technotes/ddr2/TN4702.pdf

 

Micron, Comparison of DDR to DDR2

http://download.micron.com/pdf/flyers/ddr_to_ddr2.pdf

 

Dmitri Besedin ,DDR2: a Soon-to-be DDR Replacement. Theoretical Basis and First Low-level Test Results

DDR2: a Soon-to-be DDR Replacement. Theoretical Basis and First Low-level Test Results

 

Corsair, DDR2 unbuffered pinout and signal descriptions for XMS2

Welcome to Corsair :: Sorry, Page Not Found

 

Corsair, DDR2 PRIMER

Welcome to Corsair :: Sorry, Page Not Found

 

Infineon data sheet, HYB18T512160BF-25F 512M, 32Mx16, DDR2-800 5-5-5

http://www.infineon.com/upload/Document/Memory%20Products/DS/DDR2/components/DS_512M_T90/HYB18T512xxxBF_rev104.pdf

 

Elpida, E0678E10 - DDR2 SDRAM TECHNOLOGY

http://www.elpida.com/pdfs/E0678E10.pdf

 

Elpida, E0437E20 - HOW TO USE DDR2 SDRAM - User's Manual

http://www.elpida.com/pdfs/E0437E20.pdf

 

Elpida, E0593E10 - New Function of DDR2 SDRAM On Die Termination (ODT)

http://www.elpida.com/pdfs/E0593E10.pdf

 

Elpida, E0594E10 - New Function of DDR2 SDRAM Off-Chip Driver (OCD)

http://www.elpida.com/pdfs/E0594E10.pdf

 

FINE DELLA GUIDA (ALMENO PER ORA.....)

Share this post


Link to post
Share on other sites

Grazie mille di aver raccolto il mio invito... ti metto subito questa guida in rilievo xkè com già ti ho detto è fatta benissimo!

 

Ciao e grazie, spero che continuerai a frequentare questo forum e che ti troverai bene qui con noi!

 

Marco

Share this post


Link to post
Share on other sites

Grazie ragazi è un piacere essere con voi.

 

e che ci hai fatto... la tesi di laurea?

 

In effetti non ci sei andato molto lontano ... ho ripreso molte delle cose che avevo studiato tanto tempo fa nell'esame di "macchine per l'elaborazione dell'informazione" (così si chiamava all'epoca: ma non mi chiedere quale epoca!)

 

Adesso aspetto dei commenti per tentare di migliorare la guida e per trovarne un'applicazione pratica (vedere se la teoria si sposa in qualche modo con il nostro amato vizio dell'overclock).

 

A presto

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×