Il processore 168
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 169
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 170
Risultato finale 171
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 172
Datapath della fetch NB: non è detto che PC + 4 sia il valore definitivo con cui aggiornare il PC 173
Componenti necessari Istruzioni di tipo R lettura di due registri operazioni usando l'alu scrittura di un registro 174
Componenti necessari Istruzioni di load/store Lettura di uno (lettura) o due (scrittura) registri Calcolo dell'indirizzo usando l'offset di 16 bit (signextended a 32 bit) usando l'alu Load: lettura dalla memoria e scrittura di un registro Store: scrittura in memoria del valore di un registro 175
Datapath combinato per istruzioni R e load/store 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) I segnali di controllo (in blu) vengono settati dalla logica di controllo (vedi oltre) 176
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) 177
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) 178
Datapath combinato: istruzioni R, load/store e branch 0: usa PC+4 1: usa indirizzo calcolato (branch) I segnali di controllo (in blu) vengono settati dalla logica di controllo (vedi oltre) 179
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 180
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 181
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 182
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 183
Datapath combinato con campi delle istruzioni 0: usa rt per scrivere (load) 1: usa rd per scrivere (istruzione R) 184
Significato dei segnali 185
Unità di controllo principale L'input è costituito esclusivamente dall'opcode dell'istruzione X significa don't care 186
Datapath con unità di controllo Il segnale PCSrc dipende sia da un segnale di controllo che dall'output dell'alu 187
Datapath con unità di controllo Istruzioni R 188
Datapath con unità di controllo 189
Datapath con unità di controllo Load 190
Datapath con unità di controllo 191
Datapath con unità di controllo Branch-on-equal 192