Università degli Studi dell’Insubria Dipartimento di Scienze Teoriche e Applicate
Architettura degli elaboratori
Memoria
Marco Tarini
Dipartimento di Scienze Teoriche e Applicate marco.tarini@uninsubria.it
Banco di Memoria
Un blocco funzionale capace di memorizzare un certo numero m di parole di un certo numero n di bit ciascuna
quindi nessuna differenza con un banco di registri… ma, m molto più grande!
Capacità totale (in bits): m × n
Più spesso, espressa in byte: basta dividere per 8 Indirizzamento:
serviranno k bit per esprimere un indirizzo, con minimo k tale che 2k≥ m
cioè k = log2n
Le due operazioni eseguibili sul banco sono:
lettura, ovvero si prelevano i m bit memorizzati in una parola scrittura, ovvero si memorizzano in una parola m bit
Banco di memoria: considerazioni
Le strutture interne delle memorie sono molto varie; sono disponibili numerose tecnologie di memoria
Il modo più naturale per realizzare una memoria è costruire una matrice di bistabili, completandola con reti combinatorie di controllo per gestire l’accesso alle parole (come già visto per il register file)
Funzionalmente, un banco di memoria è molto simile ad un register file Detto altrimenti, un register file è un banco di memoria
di capienza piccolissima, es 32x32 = 1024 bit
Le capienze tipiche di un banco di memoria sono molto superiori:
da 105a 1011bit – o anche superiori (molte migliaia o milioni di bit)
Avremo bisogno di ottimizzare e semplificare i circuiti
(spesso, sacrificando efficienza e semplificando le funzionalità) Poi, costruiamo banchi di memoria ancora più capienti
assemblando componenti di memoria più semplici
Memoria
Architettura degli elaboratori - 20 -
Banco di memoria: considerazioni
Prima semplificazione: riduciamo il numero di bus il banco di registri visto aveva tre «bus»:
due di uscita (da cui leggere i contenuti attuali)
e uno di ingresso (da cui immettere i contenuti da memorizzare) Un componente di un banco di memoria più semplice ha due soli bus:
uno di ingresso e uno di uscita
Es: un componente di memoria da 32x64 bit con 1 bus di uscita e 1 bus di entrata
Memoria
Architettura degli elaboratori - 22 -
Porta di accesso (in lettura e scrittura) al banco di momoria
indirizzo Dato in
CK (clock)
componente
32x64 bits
64 5
Dato out 64
Banco di memoria da 32 x 64 bit possibile implementazione
CK
64 64
R0 U
L I
R1 U
L I
64
R2 U
L I
64
R3 U
L I
…
64
R30 U
L I
64
R31 U
L I
D E C
32 31 30
64
64
29 28 2
ind 5
MUX
dato in
dato out
Banco di memoria ad un bus solo (Bus bidirezionale)
Il tipico banco di memoria ha uno solo bus, usato sia in lettura che in scrittura.
Quindi si può eseguire una sola operazione alla volta, lettura oppure scrittura
Come implementare un bus di questo tipo (detto «bidirezionale»)?
E’ necessaria un nuovo tipo di porta che consenta la NON interferenza fra le uscite e le entrate nel bus: il tri-state buffer
Altro uso del tri-state buffer,
unire le uscite di 2 o più componenti in un unico bus, per costruire banchi di memoria grandi
Come garantire la non interferenza fra le uscite dei vari componenti?
Stessa soluzione: il tri-state buffer
Memoria
Architettura degli elaboratori - 24 -
Tri-State Buffer (buffer a tre stati)
È un dispositivo elementare modellabile come un contatto in una di tre condizioni:
in stato di bassa impedenza consente di avere in uscita o il livello alto (1) o il livello basso (0)
in stato di alta impedenza (Z) isola elettricamente l’uscita quando un apposito ingresso di controllo E (Enable) vale 0, il gate forza lo stato di alta impedenza
I U
E
E I U
0 0 Z
0 1 Z
1 0 0
1 1 1
Funzionamento
Memoria
Architettura degli elaboratori - 26 -
I U
E
I U
1
1 1 1 1
I U
E
I U
0
0 o1 Z 0 o1 Z
I U
E
I U
1
0 0 0 0
interruttore chiuso
interruttore chiuso
interruttore aperto
stato di alta impedenza 0 oppure 1
ingresso di controllo
Nota: un tri-state buffer
è molto diverso da una porta AND
A 0
0
B 1
B
$!&@£$!
Circuito non corretto!
A 0
Z
B 1
B
B
Circuito corretto
(fintantochè uno solo dei due bit di controllo vale 1)
A e B valgono 0 oppure 1
non leggibile!
Nota: il valore Z (alta impedenza) è molto diverso da valore 0
1: passa corrente a (relativamente) bassa tensione 0: passa corrente a (relativamente) alta tensione Z: non passa (quasi) corrente (è isolato)
Per misurare la tensione, devo avere corrente se faccio confluire due cavi con 0 e 1 in un cavo, ottengo un cavo illeggibile / rumoroso / casuale se faccio confluire due cavi con 0 e Z in un cavo, ottengo un cavo con 0
se faccio confluire due cavi con 1 e Z in un cavo, ottengo un cavo con 1
se faccio confluire due cavi con Z e Z in un cavo, ottengo un cavo con Z
Memoria
Architettura degli elaboratori - 28 -
Usi di un Tri-state buffer:
per un MUTEX
Un’implementazione di MUTEXmolto scalabile ma non necessariamente veloce
Questo:
E’ un modo di implementare questo:
DEC
…
…
MUX
bus
Usi di un Tri-state buffer:
OE (Output Enable)
Memoria
Architettura degli elaboratori - 30 -
DISPOSITIVO A input
output
bus di input
bus di output
DISPOSITIVO B input
output
DISPOSITIVO C input
output
OE (C)
OE (B)
OE (A)
CORE
Usi di un Tri-state buffer:
CS (Chip Select)
DISPOSITIVO A input
output
bus di input
bus di output
DISPOSITIVO B input
output
DISPOSITIVO C input
output
OE (C)
OE (B)
OE (A)
CS (C)
CS (B)
CS (A)
CORE
CS (Chip Select) e OE (Output Enable)
Memoria
Architettura degli elaboratori - 32 -
DISPOSITIVO A input
output
bus di input
bus di output
DISPOSITIVO B input
output
DISPOSITIVO C input
output CORE
Usi di un Tri-state buffer:
Bus bidirezionali, di input/output
bus di input / output
CORE
DISPOSITIVO A input output
DISPOSITIVO B input output
DISPOSITIVO C input output
Tri-State Buffer : uso tipico bus bidirezionali, di input/output
Memoria
Architettura degli elaboratori - 34 -
bus di input / output
CORE
DISPOSITIVO A input output
DISPOSITIVO B input output
DISPOSITIVO C input output
Tri-State Buffer : uso tipico bus bidirezionali, di input/output
bus di input / output
CORE
DISPOSITIVO A input output
DISPOSITIVO B input output
DISPOSITIVO C input output
lettura da B
Tri-State Buffer : uso tipico bus bidirezionali, di input/output
Memoria
Architettura degli elaboratori - 36 -
bus di input / output
CORE
DISPOSITIVO A input output
DISPOSITIVO B input output
DISPOSITIVO C input output
scrivere in C
CS e OE
Due nomi standard per i segnali che controllano le periferiche CS - Chip Select:
isola elettricamente il dispositivo, quando non è selezionato
quando si manda il segnale sul bus, solo il dispositivo con CS=1 ascolta, gli altri è come se non ci fossero
per il dispositivo con CS a 1 è come essere l’unico sul bus per i dispositivi con CS a 0 è come essere isolati dal bus OE - Output Enable:
isola elettricamente le uscite del dispositivo
quando OE = 1, il dispositivo riversa il suo output sul buffer quando OE = 0, l’output del dispositivo è ignorata
(quadno CS = 0, allora anche OE = 0)
utile per usare lo stesso bus sia in uscita che in entrata
utile per condividere tanti dispositivi in uscita su uno stesso bus;
(in pratica, per implementare un MUTEX con le usite dei dispositivi) CS = 0 , OE = 0 NON USATO.
CS e OE
Se il bus è bidiezionale, posso usare CS e OE con questo significato:
CS = 0 PERIFERICA NON USATA (completamente isolata) CS = 1, OE = 0 PERIFERICA USATA IN LETTURA.
CS = 1, OE = 1 PERIFERICA USATA IN SCRITTURA
Memoria
Architettura degli elaboratori - 38 -
Un banco di memoria
con un solo bus di input/output
Porta di accesso (in lettura e scrittura) al banco di memoria
RD e WR = comandi di lettura e scrittura
RD = 1 e WR = 0: eseguiamo una lettura RD = 0 e WR = 1: eseguiamo una scrittura RD = 0 e WR = 0: il banco di memoria è inattivo RD = 1 e WR = 1: non consentito
k
m
indirizzo
dato
RD (lettura)
CK (clock)
2
kx m bits
WR (scrittura)
Un Memory Bank (da 32x64 bit)
con un bus di uscite ingressi unificato
Memoria
Architettura degli elaboratori - 41 -
bus data
componente memoria 32x64 bit
in out
indirizzo RD + WR
64
ind
5 bus indirizzoRD∙WR RD∙WR
Quando RD = 0 WR = 0 : componente isolato Quando RD = 1 WR = 0 : bus funziona in Quando RD = 0 WR = 1 : bus funziona in
Un Memory Bank (da 32x64 bit)
con un bus di uscite ingressi unificato
bus
componente memoria 32x64 bit
in out
indirizzo CS
64
ind RD WR
5
control
CS = RD + WR OE = RD
bus indirizzo
CS∙OE CS∙OE
Quando CS = 0 : componente isolato Quando CS = 1 OE = 1 : bus funziona in dir Quando CS = 1 OE = 0 : bus funziona in dir
Costruire memorie grandi
N componenti di memoria possono essere assemblati per ottenere banchi di memoria più grandi
O per ottenere memorie con parole più lunghe. Per es:
2 Componenti da 32x64in un banco da 32x128
una componente fornisce i 64 bit HIGH, e l’altra i 64 LOW della parola finale (HIGH = most significant, LOW = least significant) O per ottenere memorie con più parole. Per es:
4 Componenti da 32x64 in un banco da 128x64
una componente memorizza tutte le parole di indirizzo 00…..
una componente memorizza tutte le parole di indirizzo 01…..
una componente memorizza tutte le parole di indirizzo 10…..
una componente memorizza tutte le parole di indirizzo 11…..
CS a 1 solo per la componente attiva.
OE a 1 solo su quella componente, e se lettura.
O entrambe le cose contemporaneamente. Per es: …
Memoria
Architettura degli elaboratori - 43 -
128
componente HIGH 32x64 bit
in out
componente LOW 32x64 bit
in out
Un Memory Bank da 32x128 bit
implementato con 2 componenti da 32x64 bit
bus data
ind ind
128
ind
5 bus indirizzoCS∙OE
CS∙OE CS∙OE
64 64
128
64 64
RD
WR
controlCS = RD + WR OE = RD
CS∙OE
Un Memory Bank da 128x64 bit
implementato con 4 componenti da 32x64 bit
Memoria
Architettura degli elaboratori - 45 -
bus data
componente 00 32x64 bit
in out
ind
componente 01 32x64 bit
in out
ind
componente 10 32x64 bit
in out
ind
componente 11 32x64 bit
in out
ind
CS00 CS01 CS10 CS11
7
64
ind RD WR
5 2
control 4 4
CS00,01,10,11
OE00,01,10,11
bus indirizzo
CS00 OE00
CS00
∙OE00
CS01 OE01
CS01
∙OE01
CS10 OE10 CS10
∙OE10 CS11
OE11 CS11
∙OE11
Un Memory Bank da 128x64 bit
implementato con 4 componenti da 32x64 bit
bus
componente 00 32x64 bit
in out
ind
componente 01 32x64 bit
in out
ind
componente 10 32x64 bit
in out
ind
componente 11 32x64 bit
in out
ind
0 1 0
7
ind RD WR
5 2
control 4 4
CS00,01,10,11
OE00,01,10,11
bus indirizzo
01 1 0
10111
= 0,1,0,0
= 0,1,0,0
0
0 1 0 0
0 0 0 0
ESEMPIO:
lettura all’indirizzo0110111
Un Memory Bank da 128x64 bit
implementato con 4 componenti da 32x64 bit
Memoria
Architettura degli elaboratori - 47 -
bus data
componente 00 32x64 bit
in out
ind
componente 01 32x64 bit
in out
ind
componente 10 32x64 bit
in out
ind
componente 11 32x64 bit
in out
ind
0 1 0
7
64
ind RD WR
5 2
control 4 4
CS00,01,10,11
OE00,01,10,11
bus indirizzo
01 1 0
10111
= 0,1,0,0
= 0,0,0,0
0
0 0 0 0
0 1 0 0
ESEMPIO:
scrittura all’indirizzo0110111
componente 0 - HIGH 32x64 bit
in out
componente 0 - LOW 32x64 bit
in out
componente 1 - HIGH 32x64 bit
in out
componente 1 – LOW 32x64 bit
in out
Un Memory Bank da 64x128 bit
implementato con 4 componenti da 32x64 bit
bus data
ind ind ind ind
CS0 CS0 CS1 CS1
6
128
ind RD WR
5 1
control 2 2
CS0,1 OE0,1
bus indirizzo
CS0
∙OE0 CS0
∙OE0
CS0
∙OE0 CS0
∙OE0 CS1
∙OE1 CS1
∙OE1
CS1
∙OE1 CS1
∙OE1
Un Memory Bank da 128x64 bit
implementato con 4 componenti da 32x64 bit
Note e spiegazioni:
per indicizzare una delle 128 parole, mi servono 7 bit
i 2 bit più significativi = l’indice del blocco in cui cercare la parola i 5 bit meno significativi = l’indice della parola in di quel blocco Analogia intuitiva (in base 10):
Ho un hotel composto da 10 piani (da 0 a 9), e 100 stanze in ogni piano (da 00 a 99)
L’hotel ha quindi 10x100 = 1000 stanze, (da 000 a 999) La stanza 749 sarà la stanza 49 del piano 7
Memoria
Architettura degli elaboratori - 49 -
Un Memory Bank da 128x64 bit
implementato con 4 componenti da 32x64 bit
Note e spiegazioni (continua):
Oppure (ancora in base 10):
Ho un hotel composto da 100 piani (da 00 a 99), e 1000 stanze in ogni piano (da 000 a 999)
L’hotel ha quindi 100.000 stanze (wow), (da 00000 a 99999) La stanza 15249 sarà la stanza 249 del piano 15
Piani: 10^2 cifre per identificare un piano: 2.
Stanze per piano: 10^3cifre per identificare un piano: 3.
Stanze: 10^2 x 10^3 = 10^(2 + 3)
Cifre per indicizzare una stanza: 2+3= 5.
249 = le tre cifre meno significative di 15249 = 15249 MOD 10^3 15 = le tre cifre più significative di 15249 = 15249 DIV 10^3 (questo trucco richiede di avere 10^n, n intero, stanze per piano!) Lo stesso principio vale usando la base due invece che dieci
Esercizio
Costruire le parti che negli esempi producono i bit di CS e OE
Hint: usare i blocchi funzionali combinatorinoti
Memoria
Architettura degli elaboratori - 51 -
control
C O R E
PERIFERICA O DISPOSITIVOinput output
Bus: note
m n
p
m, n e p: larghezze dei componenti del BUS.
Il BUS di controllo è quello meno omogeneo .
BUS dei dati
BUS degli indirizzi
BUS di controllo
Il bus: note
Un bus che connette un core
(es, l’unità centrale di un computer, o CPU) ad una periferica
(nel nostro caso, un banco di memoria o un insieme di banchi) è costituito da una serie di connessioni su cui viaggiano segnali tipicamente divisi in:
data
(nel nostro caso: la parola da leggere o da scrivere) (nel nostro caso: su cavi bidirezionali)
segnali di indirizzo
(nel nostro caso: l’indirizzo del dato dal leggere o da scrivere) (nel nostro caso: monodirezionali, verso la periferica)
alcuni segnali di controllo
(nel nostro caso: CS e OE per ogni banco di memoria) (nel nostro caso: monodirezionali, verso la periferica)
Memoria
Architettura degli elaboratori - 53 -
Banco di memoria realizzati in un chip:
(chip di memoria)
Negli esempi abbiamo visto memory bank ancora molto piccoli.
La dimensione di memory bank realizzato in un chip è limitata da quante porte (e quindi transistor) riesco ad alloggiare nel chip Un memory bank reale può essere ad esempio:
1 M 32
cioè 2^(20) 32
cioè ~un milione di parole da 32 bit bit per l’indirizzo: 20
bit per ogni parola: 32 Oppure per es
64 K 8, 1 M 8, 1 M 1, 256 M 1 Prossimamente:
e aggregando più chip di memoria nei modi visti si ottengono memory bank su più chip ancora più capienti