The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa...

25
168 Il processore

Transcript of The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa...

Page 1: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

168

Il processore

Page 2: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

169

Implementazione semplificata

● Copre un sottoinsieme limitato di istruzioni rappresentative dell'ISA MIPS– aritmetiche/logiche: add, sub, and, or, slt

– accesso alla memoria: lw, sw

– trasferimento di controllo: beq, j

● Ogni ciclo di clock viene eseguita una istruzione completa– il ciclo di clock è sufficientemente lungo da permettere

l'esecuzione dell'istruzione con latenza più alta

– più avanti introdurremo una implementazione basata su pipeline

● Assumiamo che la memoria che tiene le istruzioni (read-only) e la memoria che tiene i dati (read/write) siano separate– possiamo leggere e scrivere nello stesso ciclo di clock

Page 3: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

170

Cosa fa un processore

● Per ogni istruzione:– legge (fetch) dalla memoria l'istruzione il cui indirizzo è nel

PC

– legge dei registri in base a quanto specificato nell'istruzione

● A seconda dell'istruzione:– usa la ALU per calcolare

● un risultato aritmetico/logico● un indirizzo di memoria (registro + offset)● l'indirizzo di un branch target

– accede alla memoria per load/store

– aggiorna il PC con PC + 4 o con un indirizzo target

Page 4: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

171

Risultato finale

Page 5: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

172

Componenti necessari

● Fetch dell'istruzione a partire dal Program Counter– PC è un registro a 32 bit (indirizzo in memoria)

– nella fase di fetch è utile anche calcolare PC + 4

Page 6: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

173

Datapath della fetch

NB: non è detto che PC + 4 sia il valoredefinitivo con cui aggiornare il PC

Page 7: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

174

Componenti necessari

● Istruzioni di tipo R– lettura di due registri

– operazioni usando l'ALU

– scrittura di un registro

Page 8: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

175

Componenti necessari

● Istruzioni di load/store– Lettura di uno (lettura) o due (scrittura) registri

– Calcolo dell'indirizzo usando l'offset di 16 bit (sign-extended a 32 bit) usando l'ALU

– Load: lettura dalla memoria e scrittura di un registro

– Store: scrittura in memoria del valore di un registro

Page 9: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

176

Datapath combinato peristruzioni R e load/store

I segnali di controllo (in blu) vengono settati dalla logica di controllo (vedi oltre)

0: usa valore registro rt (istruzione R)1: usa offset nell'istruzione (load/store)

0: usa output dell'ALU (istruzione R)1: usa dati letti da memoria (load)

Page 10: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

177

Componenti necessari

● Istruzioni di branch– Lettura degli operandi dai registri

– Confronto usando l'ALU (sottrazione e controllo dello Zero)

– Calcolo dell'indirizzo di destinazione● sign-extend e shift left di due bit dell'etichetta● addizione con PC + 4 (già calcolato nella fase di fetch)

Page 11: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

178

Datapath per confronti e branch

● L'ALU viene usata per il confronto● Sign-extend, Shift left 2 e Add vengono usati per il calcolo dell'indirizzo● I segnali di controllo (in blu) vengono settati dalla logica di controllo (vedi oltre)

Page 12: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

179

Datapath combinato:istruzioni R, load/store e branch

I segnali di controllo (in blu) vengono settati dalla logica di controllo (vedi oltre)

0: usa PC+41: usa indirizzo calcolato (branch)

Page 13: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

180

Controllo

● Il datapath che abbiamo costruito ha 7 segnali di controllo– RegWrite, ALUSrc, PCSrc, MemWrite, MemtoReg, MemRead a

1 bit

– ALU Operation a 4 bit

● L'unità di controllo del processore ha il compito di generare, direttamente o indirettamente, quei segnali

● Logica combinatoria– l'input è dato dall'istruzione

– in output genera i segnali di controllo

● Implementata in modo gerarchico– una unità di controllo specifica per la ALU

– una unità di controllo principale

Page 14: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

181

Controllo della ALU

● L'unità di controllo della ALU deve generare in output i segnali di controllo per la ALU

● Per le istruzioni R la funzione è data dal codice funct nell'istruzione

● Per le istruzioni load/store la funzione è sempre add● Per la funzione beq la funzione è sempre subtract

Page 15: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

182

Controllo della ALU

● L'input al circuito che costituisce l'unità di controllo della ALU è quindi dato da:– due bit che indicano a che categoria appartiene l'istruzione

– il codice funct dell'istruzione per le istruzioni R

● I primi due bit (chiamati ALUOp) sono settati dall'unità di controllo principale

XXXXXX nella tabella significa “don't care”

Page 16: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

183

Simplicity favors regularity

opcode sempre in lettura

in lettura, tranne che per la read

in scrittura per istruzioni R e

per la read

sign-extend e somma

Page 17: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

184

Datapath combinatocon campi delle istruzioni

0: usa rt per scrivere (load)1: usa rd per scrivere (istruzione R)

Page 18: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

185

Significato dei segnali

Page 19: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

186

Unità di controllo principale

L'input è costituito esclusivamente dall'opcode dell'istruzione

X significa “don't care”

Page 20: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

187

Datapath con unità di controllo

Il segnale PCSrc dipende sia da un segnale di controllo che dall'output dell'ALU

Page 21: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

188

Datapath con unità di controlloIstruzioni R

Page 22: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

189

Datapath con unità di controllo

Page 23: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

190

Datapath con unità di controlloLoad

Page 24: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

191

Datapath con unità di controllo

Page 25: The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa “don't care” 183 Simplicity favors regularity opcode sempre in lettura in lettura,

192

Datapath con unità di controlloBranch-on-equal