Calcolatori elettronici/Le memorie ad accesso casuale
Per le memorie ad accesso casuale vale:
- ogni cella può essere indirizzata indipendentemente;
- i tempi di accesso sono uguali e costanti per ogni cella.
Segnali di controllo e linee di stato
[modifica | modifica sorgente]Il funzionamento della memoria è temporizzato: occorrono un certo tempo minimo per stabilizzare i segnali di dato e di indirizzo, un certo tempo minimo per accedere a quei segnali, un certo tempo minimo tra un accesso e l'altro, ecc. Il progettista può scegliere semplicemente di affidarsi ai tempi stabiliti dalle specifiche, oppure aggiungere dei circuiti appositi per valutare dinamicamente i segnali di controllo. I segnali di controllo servono per esempio:
- per informare la memoria sul tipo di operazione corrente (lettura o scrittura);
- per informare la memoria quando sono stabili e possono essere campionati i segnali di indirizzo sull'Abus e di dato sul Dbus (in scrittura);
- per informare il processore quando sono stabili e possono essere campionati i segnali di dato sul Dbus (in lettura);
- per informare il processore quando è possibile procedere con un nuovo ciclo di accesso alla memoria;
- per informare il processore se la memoria sta effettuando le operazioni di refreshing e i dati in lettura non sono stabili.
Accanto ai segnali di controllo vi sono le linee di stato, che sono dei segnali per informare l'esterno sullo stato corrente della memoria. Si usano generalmente per informare che si è verificato un guasto. Non comprendono l'MFC, perché esso non viene generato dalla memoria ma dal controllore della memoria.
Struttura interna
[modifica | modifica sorgente]I bit effettivi che memorizzano le informazioni sono contenuti nella matrice di memoria. Il circuito di controllo riceve tramite il bus di controllo i segnali di controllo del processore (ad esempio i segnali di read e write), quindi pilota vari moduli all'interno della memoria, garantendo che i segnali caricati nei registri siano sempre stabili. Due registri di dato permettono la comunicazione con il bus di dati; ci può anche essere un transceiver che permette la bidirezionalità del segnale.
Organizzazione a vettore
[modifica | modifica sorgente]![](http://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Struttura_interna_RAM.png/220px-Struttura_interna_RAM.png)
La memoria è vista come un vettore di parole: l'indirizzo proveniente dal bus di indirizzi, di parallelismo log2n, viene stabilizzato da un registro degli indirizzi, pilotato tramite segnali di controllo dal circuito di controllo, e viene decodificato da un decoder degli indirizzi in n segnali di enable che selezionano la parola corretta all'interno della matrice di memoria. È semplice da implementare se il numero delle parole è ragionevole, altrimenti il decoder diventerebbe troppo complesso.
Organizzazione a matrice bidimensionale
[modifica | modifica sorgente]La memoria è vista come una matrice organizzata in righe e colonne i cui elementi sono delle parole, ognuna delle quali ha un segnale di selezione di riga e uno di colonna, provenienti da due decoder. La parola viene attivata solamente se entrambi i segnali di selezione sono attivi. Due decoder di selezione risultano molto più semplici di un singolo decoder. Si può inoltre dimezzare il numero di segnali di indirizzo grazie a due registri: prima si salva l'indirizzo di riga in un registro, poi si salva l'indirizzo di colonna nell'altro registro, e infine si attivano i decoder.
I segnali di strobe RAS
e CAS
sono segnali di controllo che specificano se gli indirizzi devono essere caricati sul registro delle righe o delle colonne.
Si possono perciò velocizzare gli accessi sequenziali a blocchi di memoria (bit consecutivi), che sono statisticamente molto frequenti: la possibilità di attivare separatamente i registri di caricamento degli indirizzi permette di mantenere lo stesso indirizzo di riga al variare degli indirizzi di colonna (Page Mode).
Memorie non volatili
[modifica | modifica sorgente]Memorie ROM
[modifica | modifica sorgente]![](http://upload.wikimedia.org/wikipedia/commons/thumb/e/e3/Cella_ROM.png/220px-Cella_ROM.png)
Il contenuto delle memorie ROM è definito solamente al momento della costruzione e successivamente può essere acceduto solo in lettura. Applicazioni:
- librerie di procedure frequentemente usate;
- programmi di sistema;
- tavole di funzioni: sono gli elenchi dei risultati di funzioni che sarebbero troppo complessi da calcolare sul momento.
In fase di costruzione della memoria si agisce sul punto P che si trova tra ogni transistor e la massa: la cella assume il valore 1 se il punto P diventa un circuito aperto, e assume il valore 0 se P è un cortocircuito.
La variazione del costo è trascurabile al variare del numero di chip all'interno del singolo dispositivo rispetto al numero di dispositivi prodotti; si somma il costo di progetto. La memoria ROM è non volatile: il contenuto non viene cancellato all'assenza dell'alimentazione.
Memorie PROM
[modifica | modifica sorgente]Nelle memorie PROM, agli incroci delle linee vi sono dei diodi che possono essere bruciati selettivamente tramite delle correnti e trasformati in circuiti aperti. Possono essere programmate una sola volta, prima di metterle sulla piastra.
Memorie EPROM
[modifica | modifica sorgente]Le memorie EPROM possono essere riprogrammate più volte, anche se la cancellazione avviene grazie a raggi ultra-violetti. La programmazione può essere effettuata anche sulla piastra, poiché le correnti necessarie sono compatibili con la piastra stessa.
Memorie EEPROM
[modifica | modifica sorgente]Le memorie EEPROM possono essere riprogrammate senza raggi ultra-violetti, ma la programmazione è lenta e sono costose.
Memorie flash
[modifica | modifica sorgente]Le memorie flash richiedono delle operazioni di scrittura a blocchi, e il blocco deve essere ogni volta cancellato prima di poter essere riscritto.
Memorie RAM
[modifica | modifica sorgente]Le memorie RAM possono essere di due tipi:
- memorie statiche: ogni bit richiede un flip-flop SR (6 transistor CMOS);
- memorie dinamiche: ogni bit richiede un condensatore e un transistor → più densa.
Memorie RAM statiche
[modifica | modifica sorgente]![](http://upload.wikimedia.org/wikipedia/commons/thumb/c/c6/Cella_RAM_statica.png/220px-Cella_RAM_statica.png)
Ogni cella di una memoria RAM statica richiede 6 transistor: 4 costituiscono una combinazione di porte logiche, equivalente a un flip-flop SR avente due uscite Y1 e Y2 opposte tra loro, e 2 collegano il flip-flop a due linee di dato parallele:
- operazione di lettura: il flip-flop forza sulle linee di dato una coppia di bit opposti che viene poi elaborata dalla circuiteria associata alla colonna;
- operazione di scrittura: la circuiteria converte il bit nella corretta coppia di bit opposti che viene forzata sul flip-flop.
Memorie RAM dinamiche
[modifica | modifica sorgente]![](http://upload.wikimedia.org/wikipedia/commons/thumb/7/76/Cella_RAM_dinamica.png/220px-Cella_RAM_dinamica.png)
Le celle di una memoria RAM dinamica contengono dei condensatori collegati alle linee di dato tramite transistor:
- operazione di scrittura: il condensatore viene caricato o scaricato alla tensione della linea di dato;
- operazione di lettura: un sensore rileva se la linea di dato rimane a un valore basso perché il condensatore è scarico (valore 0) o se sale a un valore alto perché è carico (1) → la memoria RAM dinamica è caratterizzata dal Destructive Readout: se il condensatore è carico, si scarica e perde il bit '1' memorizzato → al termine di ogni ciclo di lettura è necessario riscrivere il dato appena letto.
- Svantaggio
- le memorie dinamiche sono più lente delle memorie statiche a causa dei processi di carica e scarica del condensatore
- Vantaggio
- le memorie dinamiche sono meno costose perché ogni cella richiede un solo transistor
I condensatori hanno una capacità infinitesima → qualunque minuscola particella carica (es. radiazione) può modificare il valore del condensatore (bit flip) → meno affidabilità.
Le memorie dinamiche richiedono quindi il refreshing: il contenuto deve essere periodicamente letto e riscritto, altrimenti i condensatori carichi lentamente si scaricherebbero per via delle inevitabili piccole correnti di dispersione che comunque scorrono. Gli accessi che capitano durante le operazioni di rinfresco richiedono quindi più tempo.
Il codice di parità è un codice di protezione che aumenta l'affidabilità della memoria: ogni parola ha un bit in più, che indica se il numero di bit pari a 1 dev'essere pari o dispari, permettendo di verificare se c'è stato un errore e quindi un bit è stato modificato.
I codici di Hamming sono codici SECDED che permettono sia di rilevare sia di correggere gli errori singoli, ma si limitano a rilevare gli errori doppi (molto più rari). Questi codici richiedono log2m bit, con m parallelismo.
Memorie SDRAM
[modifica | modifica sorgente]Le memorie SDRAM sono delle RAM sincrone temporizzate da un certo segnale di clock. Il processore quindi sa esattamente quanto tempo è richiesto per l'accesso ai dati.
Memorie interlacciate
[modifica | modifica sorgente]Le memorie dinamiche spesso sono più lente rispetto alla velocità del processore, perché il tempo di accesso è più lungo dell'inverso del clock del processore. Con le memorie interlacciate, il processore può accedere contemporaneamente, tramite indirizzi di blocco, a un blocco di n · m parole distribuite su ognuna delle n memorie affiancate con parallelismo m bit.