The New C++ Standard - unife.it · Cosa fa un processore ... XXXXXX nella tabella significa...
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