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

Post on 15-Feb-2019

220 views 0 download

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

168

Il processore

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

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

171

Risultato finale

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

173

Datapath della fetch

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

174

Componenti necessari

● Istruzioni di tipo R– lettura di due registri

– operazioni usando l'ALU

– scrittura di un registro

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

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)

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)

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)

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)

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

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

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”

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

184

Datapath combinatocon campi delle istruzioni

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

185

Significato dei segnali

186

Unità di controllo principale

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

X significa “don't care”

187

Datapath con unità di controllo

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

188

Datapath con unità di controlloIstruzioni R

189

Datapath con unità di controllo

190

Datapath con unità di controlloLoad

191

Datapath con unità di controllo

192

Datapath con unità di controlloBranch-on-equal