Il processore PD32
Macchina di von Neumann
Unità di
Ingresso
Memoria di
lavoro
Unità di
Calcolo
Unità di
Controllo
Unità di
Uscita
Suddivisione SCA-SCO
Unità di
Ingresso
Memoria di
lavoro
Unità di
Calcolo
Unità di
Controllo
Segnali di controllo/condizione
Flusso dati
Unità di
Uscita
SCA
SCO
Modifica macchina di Von Neumann
con CPU
Unità di
Ingresso
Memoria di
lavoro
Unità di
Calcolo
Unità di
Controllo
CPU
Unità di
Uscita
Dal linguaggio ad alto livello al
linguaggio macchina
Non dipende dalla
macchina HW
Programma in
Linguaggio alto Livello
a=b+c
Compilatore
• Insieme istruzioni che
dipendono dalla
macchina hw (simboliche)
• Commenti
• Riferimenti simbolici
• Insieme Istruzioni della
macchina hw
• Riferimenti indirizzi fisici
Programma in
Linguaggio Assembly
movw b,R1
movw c,R2
addw R2,R1
movw R1,a
Assemblatore
Programma in
Linguaggio Macchina
Macchina HW
000101..010100
1011101..010100
01011..11101010
010..1110101010
PD32
• Processore “virtuale” dotato di registri da 32 bit
• Non esiste nella realtà, ma le sue funzionalità sono
simulate tramite un programma
• Nel seguito sarà usato per approfondire alcuni
aspetti legati alle architetture dei calcolatori
• Sistema multiciclo
• No pipeline, no memoria cache
R0,R1...
registri
..
.
R1
R7
MDR
memoria
di lavoro
R0
MAR
I/ODR
TEMP1
ALU,
shifter
unità di
calcolo
I/OAR
TEMP2
PC
ALU
SR
SHIFTER
IR
UNITA' DI
CONTROLLO
CPU
N.B.
non sono indicati i segnali di controllo che dal SCO vanno verso i
registri interni, le unità di calcolo e la struttura di interconnessione
dispositivi
ingresso/uscita
struttura di
interconnessione
Collegamenti
con
memoria
e I/O
PD32-
Sottosistema di Calcolo (SCA)
• Registri (basati su Flip-Flop D con segnale
di Enable)
– speciali
– generali
• Dispositivi di calcolo
– Shifter
– ALU (somma e sottrazione)
• MUX
• Decodificatori
• Struttura di interconnessione: BUS
Esecuzione dell’istruzione
L’esecuzione dell’istruzione prevede tre fasi
fetch, decodifica e esecuzione
-La decodifica è fatta dal sistema di controllo
(SCO); le altre da SCA
-SCA utilizza le risorse del processore
-La fase di esecuzione di un ciclo istruzione consiste
in un numero variabile (dipende dall’istruzione) di
operazioni elementari (cicli macchina)
- Ciascun ciclo esegue un’operazione elementare (ad
esempio trasferimento di un dato da un registro)
Un semplice esempio
Consideriamo l’istruzione a=a+b, espressa in un
linguaggio di alto livello
• “Memorizza nella variabile di nome a, la somma dei
valori contenuti nelle variabili di nome a e b”
• Nota: Le variabili sono individuate da un nome
simbolico deciso precedentemente nel programma..
a
15
b
9
Prima
a =a+b
a
24
b
9
Dopo
Un semplice esempio (2)
Per eseguire questa istruzione è necessario
– Stabilire dove sono memorizzati i valori da sommare
– Stabilire dove va scritto il risultato dell’operazione
– Quale operazione svolgere
• Nel PD32, gli operandi sono memorizzati nei registri
interni alla CPU (registri visibili al programmatore)
• Il formato dell’istruzione è (s può essere B,W,L)
ADDs <sorgente><destinazione>
Il campo destinazione è un registro che contiene il
valore iniziale di un operando e che sarà modificato
ADDW R2,R1
#somma R1 con R2 (32 bit) e poni il risultato in R1
Esecuzione istruzione
Indirizzo
PC
100
adds R2,R1
.
.
PC=Program Counter
contatore di programma
(memorizza indirizzo
dell’ istruzione
in esecuzione)
MEMORIA
100
Istruzione: fase di fetch
Indirizzo
PC
100
IR
adds R2,R1
PC=Program Counter
IR= Instruction Register
(memorizza istruzione
in esecuzione)
adds R2,R1
.
.
MEMORIA
100
Istruzione: decodifica
Indirizzo
PC
100
IR
adds R2,R1
adds R2,R1
.
.
MEMORIA
Controllo
Decodifica istruzione:
predispone i comandi
per la sua esecuzione
100
Istruzione: fase di esecuzione
Indirizzo
PC
100
IR
adds R2,R1
adds R2,R1
100
.
.
MEMORIA
Controllo
Risorse di
calcolo
Esecuzione
dell’istruzione (consiste
di diversi passi)
CPU come interprete
La CPU può essere specificato come la ripetizione
continua del seguenti passi (Ciclo Istruzione) che
interpretano le istruzioni di un programma
contenuto in memoria.
La notazione
fetch: (PC)IR
incrementa PC
esegui istruzione in IR
vai al passo fetch
•
•
(PC) indica il
contenuto
della
locazione di
memoria con
indirizzo PC
La CPU interpreta le istruzioni che man mano sono presenti nel suo
Instruction Register (nota che l’esecuzione istr. puo’ modificare PC)
Tale schema è semplificato poiché per interagire con l’esterno, o
gestire situazioni anomale, tale ciclo deve poter essere interrotto.
PD32- BUS interno
• Usato per il collegamento dei registri interni
• Operazioni che caratterizzano il bus
– Ricezione dati
• i bit presenti sul bus sono memorizzati in un registro
– Trasmissione dati
• Il contenuto di un registro è posto sul bus
• Al più un solo registro può scrivere sul bus
– segnali di controllo opportunamente generati
• Il segnale di abilitazione alla scrittura di un registro
corrisponde alla ricezione dei dati presenti sul bus in
quel momento
• Il segnale di abilitazione sul buffer three-state
permette di trasferire sul bus il contenuto del registro
PD32- BUS interno, segnali di controllo
Una sola scrittura per volta (controllo mediante Bi)
2n segnali di controllo (n numero dei registri)
WR0
WR1
R0
BR0
Wi=1, leggi dal bus
Bi =1 scrivi sul bus
WR7
R1
BR1
R7
BR7
32 bit
PD32- BUS interno, esempio R1 -> R0
Per eseguire il trasferiemento da R1 ad R0
(simbolicamente (R1)->R0) devono essere affermati
solamente i seguenti segnali: BR1 = 1, WR0 = 1
WR0
WR1
R0
BR0
WR7
R1
BR1
R7
BR7
32 bit
PD32- Banco dei registri
• Insieme di 8 registri generali indicati da R0 ad R7
• Sono controllati mediante
– Segnali di abilitazione per
• scrittura del registro (WM)
• lettura e conseguente invio sul bus interno del
contenuto del registro (RM)
Indirizzo
WM
RM
BUS interno
PD32- Banco dei registri
Decoder
Indirizzo registro
WM
RM
w0
R0
w1
R1
B0
wi =1, scrivi valore sul bus in Ri
Bi = 1, invia sul bus valore di Ri
w7
B1
R7
B7
BUS
PD32- esempio: R7 ->BUS
Indirizzo registro
Address=111, RM=1
Decoder
1
1
1
Address
WM
RM
w0
R0
w1
B0
R1
w7
B1
nota: non si può leggere e scrivere
contemporaneamente
R7
B7
BUS
PD32-
ALU
• Esegue le operazioni aritmetiche e logiche dei
valori memorizzati in due registri tampone (non
visibili al programmatore) Temp1 e Temp2
• Il risultato è posto in un registro generale Ri
32
TEMP1
WT1
TEMP2
ALU
BA
WT2
OpCode
(specifica operazione
da eseguire)
PD32- ALU, esempio:
esecuzione addw R2,R1
WM
RM
TEMP1
WT1
3
Address
TEMP2
WT2
REGISTRI
OpCode
ALU
BA
32
PD32- ALU, esempio:
esecuzione addw R2,R1
1.
R1 -> Temp1
WM
RM=1, Address = 001, WT1=1
RM
TEMP1
WT1
3
Address
TEMP2
WT2
REGISTRI
OpCode
ALU
BA
32
PD32- ALU, esempio:
esecuzione addw R2,R1
1.
2.
R1 -> Temp1
R2 -> Temp2
WM
RM=1, Address = 001, WT1 = 1
RM=1, Address = 010, WT2 = 1
RM
TEMP1
WT1
3
Address
TEMP2
WT2
REGISTRI
OpCode
ALU
BA
32
PD32- ALU, esempio: esecuzione addw R2,R1
1.
2.
3.
R1 -> Temp1
RM=1, Address = 001, WT1 = 1
R2 -> Temp2
RM=1, Address = 010, WT2 = 1
ALU-OUT(Temp1+Temp2)->R1
WM=1, Address
= 001, OpCode = addw, BA=1
WM
RM
TEMP1
WT1
3
Address
TEMP2
WT2
REGISTRI
OpCode
ALU
BA
32
Osservazioni
•
•
•
•
Per l’esecuzione dell’istruzione (senza
considerare la fase di fetch) sono state
necessarie 3 operazioni elementari
Ogni operazione viene eseguita durante un ciclo
di clock
In generale il numero di cicli di clock richiesti
per completare una istruzione è variabile e
dipende dall’istruzione. Tale paramentro viene
indicato con CPI (Clock per Instruction)
La velocità di esecuzione di un programma
dipende anche dal numero medio di CPI
PD32- Shifter
Usato per eseguire operazioni di scorrimento di posizioni,
nonché per lo spostamento di dati tra registri interni (i
registri tampone non possono scrivere sul bus mentre i
segnali di controllo valgono per tutti i registri)
32 bit
TEMP1
WT1
TEMP2
OpCode
ALU
BA
WT2
SHIFTER
OpCode
BS
Shifter (background)
Spostamento logico a destra di k posti.
bn-i = 0 (per 0 ≤ i < k)
bi = ai+k (per 1≤ i ≤ n - k)
C = ak
0 . . .0
a . .a
n
b
n
a
a . .. a
k+2 k+1 k
b
b
n-k+1 n-k
b
2
b
1
1
C
Barrel shifter
an
a n-1
an-2
a
a1
n-3
d
1
. . .
c
1
2
. . .
c
2
reg istro
di
. . .
3
c
3
contro llo
.
.
.
.
.
.
...
lo g n -1
...
.
.
.
.
.
.
c
c
lo g n
...
bn
...
bn/2
b1
lo g n -1
lo g n
Schema di una cella
Ci
d
PD32- Status Register
Contiene informazioni sull’esito dell’ultima operazione
(ex. zero, overflow). Usato anche come ingresso
per alcune operazioni (ex. Salti condizionati)
32
TEMP1
WT1
TEMP2
OpCodeALU
WT2
SHIFTER
ALU
BA
OpCodeSHIFTER
BS
SR
BSR
Wt1
R0
Wt2
TEMP1
TEMP2
singola linea
AND
opcode
AND
opcode
linee multiple
shifter
B
B
BA
R1
.
.
decoder
...
.
M
U
X
S
R7
AND
BS
SR
B SR
AND
AND
ALU
IR
W
MUX
IR
AND
INC(N=1,2,4)
PC
W
R
M
PC
W
M
R
PC
N.B. non sono evidenziate le variabili di condizione che da SR e IR vanno al SCO
Incremento PC
INC2
INC1
WPC
PC
R
PC
Il PC deve essere
incrementato (se
non si eseguono
istruzione di salto)
NOTA: le
istruzioni PD-32
possono avere
lunghezza diversa;
quindi incremento
PC è variabile
PD32- Interazione con la memoria
• La memoria contiene sia i dati che le istruzioni e
può essere sia letta che scritta.
• E’ necessario quindi:
– Prelevare istruzioni
– Leggere dati
– Scrivere dati
• Le operazioni di lettura/scrittura avvengono fra
una locazione di memoria e un registro (registro
dati, RI, PC)
• E’ necessario quindi instradare opportunamente i
dati ricevuti dalla memoria verso i registri e
viceversa.
Memoria: organizzazione logica
a a a a
3 2 1 0
0 0 00
0 0 01
0 0 10
0 0 11
0 1 00
0 1 01
0 1 10
0 1 11
1 0 00
1 0 01
1 0 10
1 0 11
1 1 00
1 1 01
1 1 10
1 1 11
Organizzazione logica a vettore
di 16 celle di memoria
a a a a
3 2 1 0
001
011
101
111
1
1
1
1
a a a a
3 2 1 0
001
011
101
111
0
0
0
0
a a a a
3 2 1 0
000
010
100
110
1
1
1
1
a a a a
3 2 1 0
000
010
100
110
0
0
0
0
Un’organizzazione a 4 moduli
di 16 celle di memoria
Memoria RAM
RD
1
2
de cod er di
ri ga
al DB
am plifica tore
di uscita
.
.
.
CS
ma trice m x m
bit
da l DB
m
am plifica tore
di scrittu ra
1 2
. ..
de cod er di
col onna
in dirizzi
da ll'AB
linea
singola
linee
multiple
WR
m
Memoria
comportamento esterno
Funzionalmente è caratterizzata dai seguenti segnali
–
–
–
–
–
Indirizzo della parola da leggere/scrivere
MR, affermato se si vuole leggere
MW, affermato se si vuole scrivere
CS, Abilita l’intero modulo (Chip Select)
Dati
Tempo di accesso
n bit
Indirizzo valido
Dati
MR
MR
MW
CS
Indirizzo
m bit
Dato valido
Memoria organizzazione in moduli
Data BUS (32 bit)
d31…d24
d15…d8
d7…d0
MR
MW
MR
MW
MR
MW
MR
MW
CS
CS
CS
CS
a2…a31
Mb3
Mb2
Mb1
Mb0
d23…d16
a2…a31
a2…a31
a2…a31
Address BUS (30 bit)
Memoria: spazio di indirizzamento
Locazione
00000000
Lo spazio di indirizzamento del PD32 e’
monodimensionale e
Composto da 232 locazioni (byte)
Byte (8 bit)
Word (16 bit)
Locazione
FFFFFFFF
Longword (32 bit)
Memoria: disallineamento
a a a a
3 2 1 0
001
011
101
111
1
1
1
1
a a a a
3 2 1 0
001
011
101
111
0
0
0
0
a a a a
3 2 1 0
000 1
010 1
100 1
110 1
a a a a
3 2 1 0
000 0
010 0
100 0
110 0
Esempio di memorizzazione di una informazione di quattro byte allineati sullo stesso indirizzo di riga.
a a a a
3 2 1 0
001
011
101
111
1
1
1
1
a a a a
3 2 1 0
001
011
101
111
0
0
0
0
a a a a
3 2 1 0
000 1
010 1
100 1
110 1
a a a a
3 2 1 0
000 0
010 0
100 0
110 0
Esempio di memorizzazione di una informazione di quattro byte disallineati
a a a a
3 2 1 0
001
011
101
111
1
1
1
1
a a a a
3 2 1 0
001
011
101
111
0
0
0
0
a a a a
3 2 1 0
000 1
010 1
100 1
110 1
a a a a
3 2 1 0
000 0
010 0
100 0
110 0
Esempio di memorizzazione di una informazione di due byte
disallineati
Memoria: byte allineati
Data BUS (32 bit)
d31…d24
d15…d8
d7…d0
MR
MW
MR
MW
MR
MW
MR
MW
CS
CS
CS
CS
a2…a31
Mb3
Mb2
Mb1
Mb0
d23…d16
a2…a31
a2…a31
a2…a31
Address BUS (30 bit)
Memoria: byte non allineati (1)
Data BUS (32 bit)
d31…d24
d15…d8
d7…d0
MR
MW
MR
MW
MR
MW
MR
MW
CS
CS
CS
CS
a2…a31
Mb3
Mb2
Mb1
Mb0
d23…d16
a2…a31
a2…a31
a2…a31
Address BUS (30 bit)
Memoria: byte non allineati (2)
Data BUS (32 bit)
d31…d24
d15…d8
d7…d0
MR
MW
MR
MW
MR
MW
MR
MW
CS
CS
CS
CS
a2…a31
Mb3
Mb2
Mb1
Mb0
d23…d16
a2…a31
a2…a31
a2…a31
Address BUS (30 bit)
Memoria: interfaccia del PD32
•
•
•
Registro Memoria Dati (MDR)
Registro Indirizzo (MAR)
Segnali di Controllo (MR,MW, Mb3, Mb2, Mb1, Mb0)
WMDR
dati
BMDR
SCO
Memoria
Di
Lavoro
Segnali di
Controllo
indirizzi
Bus interno
WMAR
Bus Interno del PD32
Memoria: interfaccia SCA del PD32
M
D
R
Data Bus
DIR
B
MDR
B
W MDR
DB
M
A
R
W
Address Bus
MAR
B
AB
SCA del PD32
PD32- Interazione con l’esterno
• Ogni fase che comporta l’interazione con le
unità esterne viene detta ciclo macchina.
• Ogni ciclo macchina può essere costituito
da uno o due cicli di bus; per esempio la
lettura di una parola memorizzata su due
byte non allineati sullo stesso indirizzo di
riga necessita di due accessi in memoria
(cioè di due cicli di bus).
Interfaccia dispositivi di I/O
INTERFACCIA
Indipendente dal
dispositivo
Dipendente dal
dispositivo
indirizzi
Decoder
segnali di
controllo
Registro
segnali di
Device controllo
Control
dati
dati
BUS
Dispositivi di I/O: interfaccia del PD32
• Registro Dati (I/ODR)
• Registro Indirizzo (I/OAR)
• Segnali di Controllo (I/OR,I/OW, Start, ……….)
WMDR
dati
BI/ODR
SCO
Dispositivo
di I/O
Segnali di Controllo
indirizzi
Bus interno
WMAR
I/O: interfaccia SCA del PD32
Bus Interno del PD32
I/O
D
R
I/O
Data
Bus
DIR
B
I/ODR
B
W I/ODR
I/ODB
I/O
A
R
W
I/O
Address
Bus
I/OAR
B
I/OAB
SCA del PD32
Interconnesione del PD32
30
PD32
32
Interfaccia
I/O
Interfaccia
I/O
32
8
Modulo di
memoria
I/O address bus
I/O control bus
I/O data bus
Modulo di
memoria
dispositivo
di I/O
dispositivo
di I/O
Memory address bus
Memory control bus
Memory data bus
Sottosistema di controllo (SCO)
Data In
Data Out
SCA
(SLAVE)
Stato o variabili di
condizionamento
Variabili
Condizionamento
esterne
TASK
SCO
(MASTER)
Uscite
esterne
Sottosistema
di controllo (SCO)
start
microprogramma
relativo alla fase di
fetch
Decodifica
codice della
classe dell'
istruzione
XXX
microprogramma
relativo
alle istruzione
la cui classe è
XXX
YYY
microprogramma
relativo
alle istruzione
la cui classe è
YYY
ZZZ
. ..
microprogramma
relativo
alle istruzione
la cui classe è
ZZZ
SCO: schema di Mealy
variabili di
condizione
circuito di
selezione
reg. SEL
CK
micro ordini
ROM
codice
classe
load
CK
spostamento
base
reset
SCO: schema di Moore
Reset: azzera cod.
classe (inizia fetch)
variab. di cond.:
influenzano
esecuzione istr. (ad
es. var. in SR)
Micrordini:
comandi per SCA
CK: clock
codice classe
reset
base
Load: segnale di
caricamento nuova
istruzione (a fine
fetch)
load
spostamento
Cod. Classe: codice
istruzione
micro ordini
ROM
SEL
CK
SS1 SS2
SSm
...
multiplexer
circuito di
selezione
variabili di
condizione
Interazione con la memoria: ciclo di scrittura
T1
T2
CLOCK
BUS
INDIRIZZI
indirizzo
MWR
BUS
DATI
dato
T3
Interazione con la memoria: ciclo di lettura
T1
T2
T3
CLOCK
BUS
INDIRIZZI
indirizzo
MRD
BUS
DATI
dato
Passi elementari per eseguire il Fetch
(ipotesi: 4 byte allineati in memoria)
1.
PC -> MAR; /* trasferimento del contenuto del PC nel MAR */
WMDR
WPC
PC
RPC
Data Bus
INC4
BMDR
WIR
Memoria
Di
Lavoro
DIR BDB
IR
Address Bus
WMAR
BAB
Fetch
1.
2.
PC -> MAR; /* trasferimento del contenuto del PC nel MAR */
(MAR)->MDR /* trasferimento istruzione da eseguire in MDR*/
WMDR
WPC
PC
RPC
Data Bus
INC4
BMDR
WIR
Memoria
Di
Lavoro
DIR BDB
IR
Address Bus
WMAR
BAB
Fetch
1.
2.
3.
PC -> MAR; /* trasferimento del contenuto del PC nel MAR */
(MAR) -> MDR /* trasferimento istruzione da eseguire in MDR*/
MDR -> IR /* trasferimento istruzione da eseguire nell’IR*/
PC+4->PC /* e predisposizione PC per prelievo prossima
istruzione*/
WMDR
WPC
PC
RPC
Data Bus
INC4
BMDR
WIR
Memoria
Di
Lavoro
DIR BDB
IR
Address Bus
WMAR
BAB
Fetch: micro-ordini
1.
PC -> MAR; /* trasferimento del contenuto del PC sul
MAR */
1. RPC = 1, WMAR = 1
2. (MAR) -> MDR /* trasferimento istruzione da eseguire in MDR*/
1. BAB = 1
/* T1 */
2. BAB = 1, MRD = 1
/* T2 */
3. BAB = 1, MRD = 1, WMDR = 1
/* T3*/
3. MDR -> IR /* trasferimento istruzione da eseguire in IR e
predisposizione PC per prelievo prossima istruzione*/
1. BMDR = 1, WIR = 1, INC4 = 1
Ciclo Istruzione - Decode
fetch5: decodifica istr. utilizzando
IR e dopo esecuzione delle diverse
istruzioni, add, mov, sub, jump...
RESET
reset
fetch1
fetch2
fetch3
fetch4
I = MOV
fetch5
IR
add1
I = ADD
add2
SCO
addx
Ciclo Istruzione
Ciclo Istruzione - Fetch
Il registro “Program Counter” contiene l’indirizzo
da cui prelevare l’istruzione da eseguire.
Il SCO lo incrementa di 4 ad ogni fetch
Fetch
1)
2)
3)
MEMORIA
PC
PC -> MAR
(MAR) -> MDR
MDR -> IR, PC + 4 -> PC
Istruzione 1
Istruzione 2
IR = Instruction Register
Segnali di comando per la SCA e per lo SCO Bus memoria
Istruzione 3
Si assume
che ogni
istruzione
sia di 4
byte
Esecuzione dell’istruzione
Nel PD32 la fase di esecuzione di un ciclo istruzione
consiste in un numero variabile di cicli macchina dipendente
dal numero di accessi in memoria necessari (oltre al fetch)
ADDW R1, R2
Entrambi gli operandi sono contenuti
in registri interni del PD32
(indirizzamento a registro)
ADDW #20h, R2
Uno degli operandi (0x20) è memorizzato
nei due byte successivi a quelli contenente
l’istruzione (indirizzamento immediato)
1.
PC -> MAR;
1.
PC -> MAR;
2.
(MAR) -> MDR
2.
(MAR) -> MDR
3.
MDR -> IR , PC+4->PC
3.
MDR -> IR , PC+4->PC
4.
R2 -> Temp1
4.
R1 -> Temp1
5.
PC -> MAR
5.
R2 -> Temp2
6.
(MAR) ->MDR
6.
OUT_ALU -> R2
7.
MDR -> Temp2, PC+2->PC
8.
OUT_ALU -> R2
Esercizi
Con riferimento alla parte SCA della CPU, rispondere
• Cosa succede se elimino il buffer temp2? discutere
l’efficienza del sistema (vantaggi e svantaggi)
• Modificare la struttura SCA inserendo due bus dati
• Se ci sono due bus dati come migliora l’efficienza
del sistema? su quali operazioni?
• Nel PD32 ci sono 8 registri dati; discutere vantaggi
e svantaggi di avere molti registri dati (ad es. cento)
• Nel fetch si incrementa il PC per tutte le istruzioni.
Perché è corretto anche per i salti; migliora
l’efficienza?
• Dare il microdice per le istruzioni di salto del PD32