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.
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:
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.
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.
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:
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.
Comment