Datapath

Transcript

Datapath
Elementi base per la realizzazione dell’unità di calcolo
Memoria istruzioni
elemento di stato dove le istruzioni
vengono memorizzate e recuperate
tramite un indirizzo.
ind.
istruzione
Memoria
istruzioni
istruzione
Contatore di programma (program counter) PC
elemento di stato dove viene memorizzato l’indirizzo
dell’istruzione corrente.
PC
segnale di controllo
per la scrittura
ALU la rete combinatoria per le operazioni aritmetico-logiche
Addizionatore (ALU semplificata)
rete combinatoria per incrementare il program counter
(di 4 byte ogni volta).
Add
4
Banco di registri (register file) elemento di stato, contiene tutti i
registri.
registro
lettura #1
numero
registro
registro
lettura #2
dato #1
registro
scrittura
dato
dato in
scrittura
dati
dato #2
segnale di controllo scrittura
Lettura da un registro
Per leggere il contenuto di un registro deve essere dato in input il
numero del registro (che sara' codificato con 5 bit per identificare
uno dei 32 registri: 25 = 32), l’output sarà il dato contenuto nel
registro.
# reg1
Registro 0
Registro 1
… … … .
Registro n
M
u
x
dato1
M
u
x
dato2
# reg2
Scrittura in un registro
Per la scrittura viene utilizzato un decodificatore che trasforma il
segnale in ingresso (5 bit che rappresentano il numero del registro)
in 25 segnali d’uscita, uno solo dei quali è asserito per ogni
configurazione in input.
write
C
# registro
dato
d
e
c
o
d
e
r
D
C
D
C
D
Nucleo istruzioni MIPS
- istruzioni di riferimento a memoria: lw, sw
- istruzioni aritmetico logiche: add, sub, and, or, slt
- istruzioni di salto: condizionato beq ed incondizionato j (jump).
Il primo passo per la realizzare una di queste istruzioni consiste
- nell’inviare il contenuto del PC alla memoria istruzioni per
leggere l’istruzione corrente; ed aggiornare il PC sulla
successiva istruzione da eseguire (il cui indirizzo di norma si
ottiene sommando 4 (byte) all’indirizzo dell’istruzione
corrente).
4
PC
Memoria
istruzioni
I passi successivi dipendono dalla classe di istruzioni che si
considera.
Consideriamo prima le istruzioni aritmetico logiche: add, sub,
and, or, slt la cui forma generale è
codice-istruzione n-reg1, n-reg2, n-reg3
0
rs
rt
rd
6 bit
5 bit
5 bit
5 bit
funct
5 bit
6 bit
Per queste istruzioni i passi successivi consistono nel
- leggere dai registri n-reg2 e n-reg3 i dati su cui operare;
- inviare i dati all’ALU
- scrivere nel registro di scrittura (n-reg1) il dato calcolato
dall’ALU.
5
Registro
lettura 1
5
Registro
lettura 2
controllo ALU
Lettura
dati 1
5
Zero
Registro
scrittura
Scrittura
dati
Lettura
dati 2
write
Il segnale di write deve essere opportunamente sincronizzato per abilitare
la scrittura al momento giusto: non deve essere permessa la scrittura finchè
tutti i dati non sono stati letti.
Ammettendo la transizione solo durante i fronti attivi del clock verrà
sempre letto il dato scritto durante il precedente fronte attivo.
Istruzioni di riferimento a memoria: lw, sw
La forma generale per le istruzioni load-word e store-word è:
codice-istruzione
op
6 bit
n-reg1,
offset (n-reg2)
rs
rt
ind
5 bit
5 bit
16 bit
Per realizzare queste istruzioni si deve
- calcolare l’indirizzo di memoria sommando l’offset al
contenuto del registro base. Poiché l’offset è contenuto in 16 bit
serve un’ulteriore componente: unità di estensione del segno.
16
32
- leggere il dato in memoria e caricarlo sul registro indicato
oppure scrivere in memoria il dato registrato nel registro
indicato.
write
Indirizzo
dato (lettura)
Memoria
Dato (scrittura)
read
Istruzione di salto condizionato: beq
La forma dell’istruzione è:
beq
4
6 bit
n-reg1, n-reg2, label
rs
rt
offset
5 bit
5 bit
16 bit
La realizzazione di questa istruzione richiede una modifica
all’aggiornamento del PC sviluppato per le istruzioni nelle altre
due classi.
Ricordiamo che se i registri rs ed rt contengono lo stesso dato
l’istruzione che deve seguire quella corrente si trova calcolando
PC + 4 (= istruzione successiva a quella attuale) + offset × 4.
offset × 4
PC + 4
si calcola applicando uno shift di due bit a sinistra
è il valore già calcolato per le altre istruzioni
Per verificare se i registri rs ed rt contengono lo stesso dato si
inviano all’ALU i due dati con la richiesta dell’operazione di
sottrazione e si utilizza poi l’uscita ‘Zero’.
Istruzione di salto incondizionato: j
La forma dell’istruzione è:
2
6 bit
j
indirizzo
ind
26 bit
Come per il salto condizionato l’indirizzo deve essere moltiplicato
per 4.
Composizione delle diverse parti dell’unità di calcolo
Alcune delle unità sviluppate per le varie classi di istruzioni
possono essere condivise da piu’classi anche se ci sono delle
differenze sulla provenienza degli input.
Per dirottare i segnali in modo opportuno si utilizzano i selettori
(multiplexor).
Esempio.
L’ALU viene utilizzata sia dalle istruzioni di tipo R (add, sub,
etc.) che dalle istruzioni di riferimento a memoria.
Le prime passano all’ALU i contenuti di due registri; le seconde
il contenuto di un registro ed il dato ottenuto estendendo a 32 bit
l’offset.
Registri
M
u
x
16
32