vuoi
o PayPal
tutte le volte che vuoi
ALU
• Data Transfer
• Set
• Jump
• Branch
•
14) Quali sono le fasi del FETCH?
Ricordiamo che per nostra ipotesi un interrupt NON può interrompere un istruzione in corso!
Di conseguenza durante la fase di FETCH e dunque all’inizio di ogni nuova istruzione che viene
letta dalla memoria, viene anche verificato se è presente o meno un interrupt.
" Se l’interrupt è presente E può essere servito, ovvero Interrupt Enable (IEN) = true, si
esegue implicitamente l’istruzione di chiamata a procedura all’indirizzo 0, e si salva
l’indirizzo di ritorno nell’apposito registro Interrupt Address Register (IAR)
Inoltre si pone IEN = false, così da rendere l’elaboratore insensibile alle interruzioni.
Se arrivasse un’altra interruzione infatti il PC salvato in IAR verrebbe sovrascritto!
Fatto ciò si procede dall’inizio, però nel ramo sinistro in quanto IEN = false adesso!
" Se l’interrupt NON è presente O le interruzioni non sono abilitate, ovvero Interrupt Enable
(IEN) = false, si va a leggere in memoria la prossima istruzione da eseguire (il cui indirizzo
è in PC). Ovvero si procede normalmente!
!
IMPORTANTE Supporto HW nel DLX è per una sola interruzione. Per supportarne di più
bisogna agire via SW. ! Pagina!6
Calcolatori Elettronici – DLX sequenziale ! !
14 bis) Cosa ci sarà all’indirizzo 0 ?
Routine del SO che dovrà andare a vedere chi ha richiesto l’interrupt, scegliere il più prioritario e
servirlo!
15) Come si potrebbe ottimizzare il FETCH delle istruzioni nel DLX?
Per eseguire il FETCH dalla memoria è necessario recuperare il Program Counter (PC), inviarlo al
MAR, dal MAR inviarlo all’ingresso della memoria come indirizzo, attendere un certo tempo,
ottenere l’istruzione e inviarla all’unità di controllo.
Potrebbe dunque essere una buona idea collegare il PC agli ingressi della memoria attraverso un
MUX così da poter bypassare il MAR e risparmiare un ciclo di CK.
Il MUX si rivela necessario in quanto per gli accessi ai dati è necessario il passaggio attraverso il
MAR. Tale MUX sarà gestito dall’unità di controllo.
!
Osservazione importante Se effettuassimo la modifica di connettere con un MUX direttamente
#
PC alla memoria ci risparmieremmo un CK in quanto bypasseremmo il MAR: IR M [PC]
Bisogna però fare attenzione al fatto che l’introduzione del MUX dilaterebbe i tempi e questo
potrebbe comportare una diminuzione della frequenza di CK di tutto il sistema!
16) In un istruzione di Branch a cosa bisogna stare attenti?
Poiché PC + 4 viene fatto sempre prima dello svolgimento dell’istruzione si ha che l’offset del
branch dovrà essere relativo all’istruzione successiva al branch e non a quella corrente!
Dunque l’immediato inserito come offset dovrà essere relativo a PC +4 e dunque dovrà essere
Immediato - 4 !
17) Cosa si usa fare nei processori RISC per aumentarne la velocità?
Una cosa che si usa fare nei processori RISC è l’unità di controllo cablata su silicio. Questo
consente di andare molto velocemente!
L’unità di controllo cablata su silicio è una RSS nella quale in mezzo vi è una grande rete
combinatoria in grado di tenere un informazione dell’ordine di grandezza dei 40 Mbyte
17bis) Quali sono gli output e gli input dell’unità di controllo cablata su silicio?
Output
Segnali di controllo (Es. OE)
• Immediato a 26 bit (Considera anche il caso peggiore, in quanto solitamente l’immediato è a
• 16 bit)
RS1 (registro sorgente 1), RS2 (registro sorgente 2), RD (registro destinazione).
• Saranno 15 fili in quanto sono 15 bit!
Questi Output sono Input per il Datapath!
Input 32 bit di istruzione letti dalla memoria
• Segnali di INT e READY
• 12 bit di OPCODE (in quanto in alcune istruzioni ALU c’è un estensione del codice
• operativo di 6 bit)
3 bit che rientrano dal Datapath all’unità di controllo.
• Tali fili si rivelano essenziali in quanto permettono al Datapath di segnalare all’unità di
controllo se il risultato di un operazione è per esempio 0 oppure no.
Questi 3 fili sono dunque alla base dei salti condizionati! Se non ci fossero il calcolatore
farebbe una serie di operazioni cablata in quanto non sarebbe in grado di testare condizioni.
! Pagina!7
Calcolatori Elettronici – DLX sequenziale ! !
18) Quali sono i 5 passi in cui tutte le istruzioni DLX possono essere scomposte?
I passi sono: !
1. FETCH L’istruzione viene prelevata dalla memoria e posta in IR (Instruction Register)
!
2. DECODE L’istruzione in IR viene decodificata e nel frattempo vengono prelevati gli
operandi sorgente dal Register File e viene incrementato il PC (PC + 4)
!
3. EXECUTE Elaborazione aritmetica o logica mediante la ALU
!
4. MEMORY * Accesso alla memoria e, nel caso di BRANCH, aggiornamento del PC
!
5. WRITE-BACK Scrittura sul Register File (nel caso sia stato modificato il registro
destinazione)
* Ricorda: Solo due istruzioni prevedono accesso alla memoria e sono LOAD e STORE
18bis) Potrei invertire il passo 4 e il passo 5?
Non avrebbe senso in quanto se io facessi una LOAD , la LOAD carica dalla memoria e modifica
un registro! ! Pagina!8
Calcolatori Elettronici – DLX sequenziale ! !
Calcolatori Elettronici – DLX Pipelined
Descrizione DLX pipelined:
Nel DLX pipelined l’unità di controllo non sarà concentrata, ma sarà distribuita tra i vari stadi
della pipeline.
Al termine di ogni stadio vi è una “barra” che contiene dei registri edge triggered. Ognuno di questi
contiene le informazioni che è necessario trasferire da uno stadio a quello successivo.
Mano a mano che la pipeline procede, alcune informazioni ormai non più necessarie verranno
scartate. !
Stadio ID In questo stadio vengono estratti dal Register File due registri sorgente come
avveniva anche nel DLX sequenziale. In contemporanea viene effettuata l’estensione del segno e
la decodifica dell’istruzione.
La decodifica dell’istruzione viene effettuata da una rete combinatoria DEC molto veloce che deve
operare all’interno del ciclo di CK rispettando i tempi di SU del registro edge triggered a cui deve
inviare l’informazione al fine di evitare condizioni di metastabilità.
Se la rete di decodifica non fosse sufficientemente veloce bisognerebbe, infatti, inserire uno “stallo”
nella pipeline.
Tale rete di decodifica si occupa di prendere i primi 6 bit del codice operativo ed eventualmente i
bit di estensione dello stesso.
Importante: In tale stadio si fa tutto senza sapere minimamente di che istruzione stiamo parlando.
!
Stadio EX Tale stadio è il più critico da un punto di vista combinatorio tra i 5.
La cosa importante è che la ALU sia veloce così da avere una frequenza di CK più alta.
!
Stadio IF Nello stadio di IF vi è la cache del codice INSTR MEM da dove si andranno a
prelevare le istruzioni. Vi è poi PC, un registro edge triggered, che contiene il Program Counter.
Sempre in tale stadio vi è una ALU semplificata volta all’incremento del PC.
!
Stadio MEM Nello stadio di MEM vi è la cache dei dati DATA MEM.
In caso di salti incondizionati o BRANCH c’è una retroazione in questo stadio che dice al MUX
dello stadio di IF di non considerare il FETCH, ma di considerare l’indirizzo di destinazione del
salto, passato anch’esso da una retroazione della fase di MEM.
Questo indirizzo, andrà di fatto a finire in modo sincrono nel registro PC (ricordiamo che è edge
triggered ) ed è dunque importante osservare che, se il salto è preso, PC verrà aggiornato al
prossimo fronte del CK e dunque l’istruzione corrente deve essere resa “inoffensiva”. (NOP)
Lo stadio di MEM è uno stadio che potrebbe anche essere molto lento in quanto se la cache non
contiene il dato richiesto deve andarlo a recuperare in una cache di livello più basso o nel caso
peggiore dalla memoria. Ricordiamo che finché READY != 1 la memoria non è pronta!
Nel caso dunque di memoria !READY sarà dunque necessario bloccare i primi 4 stadi.
!
Stadio WB In tale stadio viene aggiornato il Register File.
Vi è un MUX finale che, in base al tipo di istruzione, decide se ad esempio, inviare o meno dati al
RF. Nel caso in cui i dati debbano essere inviati, allora l’unità di controllo dovrà abilitare il WE del
RF e il registro destinazione verrà identificato grazie ai 5 bit che mi sono portato lungo la pipeline.
! !
DLX$Pipelined$
! !
1) Che cosa intendiamo con pipelining?
Il pipelining è oggi la principale tecnica di base impiegata per rendere “veloce” una CPU e viene
utilizzata su tutti i processori moderni.
Nel nostro caso osserviamo che il DLX pipeline è molto più efficiente rispetto al DLX sequenziale.
1bis) È possibile avere più istruzioni per ciclo di clock?
Avere più istruzioni per ciclo di clock con una singola pipeline non è possibile! Ci vogliono più
pipeline!
2) Cosa intendiamo con latenza? E con throughput?
!
Latenza In generale è il tempo che intercorre fra l’inizio e il completamento di un’attività A.
!
Throughput Frequenza con cui vengono completate le attività.
Per quel che riguarda il nostro ambito l’attività è un istruzione.
3) Quali sono i maggiori problemi del DLX pipelined ?
I problemi maggiori del DLX pipelined sono:
Salti, in particolare BRANCH
• ALEE, ovvero dipendenze fra i dati
•
4) Perché è necessario introdurre un Adder nello stadio di Instruction FETCH (IF) ?
È necessario introdurre un Adder nello stadio di IF per evitare conflitti sul bus.
Infatti vi sono due stadi che necessitano di un’unità di calcolo: IF e EX.
Ciò comporterebbe che ad ogni ciclo di CK ci sarebbe un conflitto per ottenere la risorsa ALU!
IF vuole infatti fare PC+4, mentre EX vuole poter eseguire operazioni aritmetico-logiche.
Per risolvere il conflitto dobbiamo duplicare la risorsa ALU e in particolare aggiungere una ALU
semplificata nella fase di FETCH, e inserire una ALU ad hoc nella fase di EX.
5) Nella fase di IF sarebbe possibile sostituire l’adder che esegue il PC + 4 con un contatore?
SI, sarebbe possibile. L’adder che esegue PC + 4 potrebbe essere sostituito da un contatore in
quanto fare +4 sapendo che le istruzioni sono lunghe 4 byte (32 bit) è come fare +1 usando 30 bit!
Infatti il FETCH viene fatto a indirizzi allineati e