Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
PRIMO STADIO: INSTRUCTION FETCH
Operazione di fetch identica per qualunque istruzione venga eseguita
➢ PC è aggiornato ad ogni ciclo di clock per poter caricare un’istruzione ad ogni ciclo
➢ Informazioni in IF/ID (registro interstadio tra fetch e decode):
➢ Istruzione da decodificare ed eseguire
o PC+4 (può essere utilizzato per il calcolo dell’indirizzo nel caso della beq)
o
Il primo stadio è responsabile del fetch dell’istruzione, che contiene una memoria dedicata solo
alle istruzioni.
Lo stadio riceve i 32 bit usati come indirizzo e produce l’istruzione che dovrà essere scritta nel
registro interstadio successivo.
I 32 bit verranno sommati a 4, valore che serve per aggiornare il PC.
Si ha il parallelo fra il sommatore e la memoria: si calcola contemporaneamente l’indirizzo
dell’istruzione successiva e si accede alla memoria per quella corrente.
Sarà necessario un MUX con il quale possiamo decidere se far arrivare al PC l’indirizzo di PC + 4
(0) oppure un altro valore, utile nel caso dei salti (1) che vedremo in seguito.
Ogni stadio devono produrre i dati da utilizzare negli stadi successivi. Ad esempio, nel caso della beq, lo stadio di fetch
deve fornire a quello successivo anche il valore di PC+4 che farà riferimento non alla beq ma all’istruzione
immediatamente dopo di questa, ossia che è in esecuzione nello stadio precedente e a partire da tale indirizzo verrà
calcolato l’indirizzo di arrivo della beq. 113
Matilde Simonini Ingegneria Informatica anno 2021/2022
SECONDO STADIO: INSTRUCTION DECODE
Operazione di decode identica per qualunque istruzione venga eseguita
➢ Informazioni in IF/ID (input):
➢ Istruzione da decodificare ed eseguire
o PC+4 (può essere utilizzato per il calcolo dell’indirizzo nel caso della beq)
o
Informazioni prodotte in ID/EX (output):
➢ Valori registri rs e rt letti da Register File
o numero dei registri rt e rd (possibili destinazioni)
o Offset con estensione del segno (cfr. lw, sw, beq)
o beg
per
PC+4 (direttamente da IF/ID) che può servire in seguito
o
In questo stadio abbiamo l’istruzione e dobbiamo fare il prelievo degli operandi.
Si decodifica l’istruzione per comprendere ad esempio quali saranno i segnali di controllo
relativi.
Durante questo secondo stadio, le unità che sono presenti non sono comandate dall’unità di
controllo e quindi devono agire indipendentemente dall’istruzione stessa, perché altrimenti
violeremmo il vincolo che ci siamo imposti.
Ad esempio, nel caso della Tipo-R dovremmo sommare i valori di rs e rt (le 2 frecce in uscita dai registri), operazione
che non può essere fatta nello stesso stadio a causa dei vincoli posti e di conseguenza andranno salvati nel registro
interstadio. Oltre a questo, servirà conoscere in che posizione salvare il risultato, ossia il campo rd che viene salvato nel
registro interstadio.
Nel caso di lw e sw avremo bisogno anche di una costante di 16 bit, che verranno presi dall’istruzione e messi in
ingresso all’unità di estensione del segno per passare da 16 a 32 bit → questo implica che nel registro interstadio
abbiamo posto anche i 6 bit relativi al campo funct.
Fra le linee in basso portiamo anche il campo rt, ossia i 5 bit che indicano sostanzialmente l’indirizzo di rt (e non il suo
valore, che viene salvato nei registri).
Nel caso della sw è necessario prendere il valore d rt per poi scriverlo dentro la memoria all’indirizzo che abbiamo
appena posto nel registro intermedio.
Nel caso della beq: deve confrontare i valori di rs e rt che ha già a disposizione ed eventualmente saltare all’indirizzo
dato da (PC + 4) + (const * 4) → PC +4 lo abbiamo già in entrata, ossia è già presente nel registro intermedio precedente
mentre per quanto riguarda la costante * 4 viene calcolata attraverso il sign extended.
TERZO STADIO: EXECUTE
Utilizzo della ALU + determinazione del registro da usare come (eventuale)
➢ destinazione: ovviamente variano a seconda dell’istruzione ben
Informazioni in ID/EX (input):
➢ valori registri rs e rt letti da Register File
o numero dei registri rt e rd (possibili destinazioni)
o offset con estensione del segno (cfr. lw, sw, beq)
o PC+4 (direttamente da IF/ID)
o
Informazioni in EX/MEM (output):
➢ indirizzo utilizzato dal salto condizionato (beq)
o risultato della ALU (per lw e sw è l’indirizzo!) e zero (verrà utilizzato dalla beq)
o rt (se l’istruzione è sw, questo dato verrà scritto in memoria!)
o numero del registro destinazione, che ora può essere determinato (rd per
o TIPO-R, rt per lw)
In questo stadio, a differenza di quello precedente, possiamo avere dei segnali di controllo
che dipendono dall’istruzione stessa. 114
Matilde Simonini Ingegneria Informatica anno 2021/2022
Nel caso delle Tipo-R: deve calcolare un’operazione determinata dal campo funct su rt e rs.
Utilizziamo l’unità di controllo ALUControl, comandata dal segnale di controllo ALUOp, che riceve in ingresso i 6 bit del
capo funct. Attraverso il segnale di controllo è possibile stabilire se fare una somma (add), una sottrazione (sub) …
Il risultato viene scritto nel registro interstadio successivo.
Le istruzioni che utilizzano un registro di destinazione sono le Tipo-R e lw, che scrivono in rt o rd → possiamo mettere
un MUX che riceve in ingresso rt e rd e che seleziona il numero del registro destinazione ed è comandato da un segnale
di controllo RegDst (1 o 0).
Nel caso della lw sarà necessaria la somma fra rs e la costante, per trovare l’indirizzo, per poi usarlo per l’accesso in
memoria che verrà poi scritto in rt.
La costante ce l’abbiamo già in ingresso e possiamo utilizzare la ALU per fare la somma. Il MUX appena prima della ALU
consente di scegliere rt oppure la costante da 16 bit estesa di segno (offset), con segnale di controllo ALUSrc.
ALUScr = 1 nel caso della lw e ALUOp = 0 → in questo modo, in uscita dalla ALU si produce l’indirizzo al quale leggere in
memoria, che verrà salvato nel registro interstadio.
Per quanto riguarda la sw, deve fare l’operazione duale alla lw: deve prendere il valore di rt e scriverlo dentro la
memoria nello stadio successivo. Per farlo necessita del valore di rt, che si trova in ingresso → attraverso una linea
salviamo e portiamo avanti il valore nel registro interstadio successivo.
Nel caso della beq: deve confrontare rs e rt e per farlo utilizza la ALU per fare la sottrazione fra i due valori. Quello che
interessa è il bit di 0 che indica se saltare oppure no, valore che viene portato avanti.
Nel caso in cui si debba saltare, l’indirizzo è dato da PC + 4 + const * 4 (o shiftLeft di 2 dell’offset). Per questo viene
utilizzata un’altra ALU che calcola questo indirizzo.
QUARTO STADIO: MEMORY ACCESS
Utilizzo della memoria (lettura e scrittura) ed eventuale aggiornamento PC (beq con
➢ salto da eseguire)
Informazioni in EX/MEM (input):
➢ indirizzo utilizzato dal salto condizionato (beq)
o risultato della ALU (per lw e sw è l’indirizzo!) e zero
o rt
o numero del registro destinazione
o
Informazioni in MEM/WB (output):
➢ dato letto dalla memoria (per lw)
o risultato calcolo ALU effettuato nello stadio precedente riportato da EX/MEM
o (per TIPO-R)
# registro destinazione riportato da EX/MEM (per lw e TIPO-R)
o
Nel caso della sw: ha a disposizione il valore di rt che deve andare a scrivere nella memoria
che riceve come indirizzo il valore dato da rs + const in corrispondenza del quale deve
venire scritto il valore di rt.
Anche la lw deve leggere il valore di memoria, per andare a scrivere il valore corrispondente in rt. Dati i vincoli, il valore
va scritto nel registro successivo e quindi in questo stadio verrà portato avanti il valore #dest.
Le Tipo-R devono poter scrivere nel RF. Hanno a disposizione del risultato calcolato dalla ALU e anche l’indirizzo al
quale scriverlo. Siccome questo stadio non è dedicato alla scrittura ma solo all’accesso alla memoria, si ha che la Tipo-R
attraversa lo stadio senza fare nulla → si lixmita a portare avanti i dati che le serviranno successivamente (ALUOut e
indirizzo).
Questo perché abbiamo previsto che lo stadio di scrittura fosse l’ultimo.
Per beq (forma: rs, rt, destinazione) abbiamo già a disposizione della condizione (vera o falsa). Se il risultato è 1
dobbiamo poter sostituire PC + 4 con l’indirizzo di destinazione → si effettua la scrittura nel PC dell’indirizzo di
destinazione per effettuare il salto.
Se il valore fosse 0 allora non si salterebbe e si continuerebbe con PC + 4.
(le linee che vanno verso sinistra vanno in entrata al MUX che precede il PC).
115
Matilde Simonini Ingegneria Informatica anno 2021/2022
Si utilizza una porta di AND che consente di annullare il bit di 0 attraverso il segnale di controllo Branch → nel caso
della beq verrà posto a 1 così che nel caso in cui il valore di zero è 1 si possa saltare. Nel caso delle altre istruzioni il
valore di Branch sarà posto a 0 in modo da non saltare.
NB: nel caso del salto si va a scrivere nel PC il valore al quale bisogna saltare mentre sono già in esecuzione le istruzioni
che dovrebbero essere saltate e questo risulta un problema della pipeline!! → problema della criticità sui salti.
QUINTO STADIO: WRITE BACK
Scrittura del risultato nel register file
➢ Register File “in scrittura” fa parte di questo stadio!
⇒
informazioni in MEM/WB (input):
➢ dato letto dalla memoria (per lw)
o risultato calcolo ALU effettuato nello stadio precedente riportato da EX/MEM (per
o TIPO-R)
# registro destinazione riportato da EX/MEM (per lw e TIPO-R)
o
Operazione eseguita: se l’istruzione è lw o Tipo-R, scrive nel registro destinazione (#dest) il valore
calcolato dalla ALU (per Tipo-R) o letto dalla memoria (per lw).
deve essere utilizzato il segnale RegWrite ⇒ non occorre un registro interstadio di output: il
⇒
risultato è scritto nel register file!
Le uniche due istruzioni che devono ancora fare qualcosa in questo stadio sono la lw e la Tipo-R:
scrivere il dato letto dalla memoria (lw) oppure scrivere il dato prodotto dalla ALU (Tipo-R) entrambi nel registro
destinazione.
Per selezionare il valore che si deve utilizzare viene sfruttato un MUX comandato dal segnale di controllo MemToReg.
Le frecce uscenti verso sinistra vanno ad entrare nel RF presente al secondo stadio (#dest indica il registro
destinazione).
Datapath complessivo 116
Matilde Simonini Ingegneria Informatica anno 2021/2022
PIPELINE: IL CONTROLLO
NB: come visto, al datapath arrivano segnali di controllo, che dovranno essere imposta