vuoi
o PayPal
tutte le volte che vuoi
Indicare quali metodologie è possibile adottare per gestire le alee di
controllo.
A seconda che la retroazione del BTA a PC sia fatta dalla barriera EX/MEM alla IF/ID, direttamente
da EX a IF/ID oppure da EX direttamente a PC si hanno rispettivamente 3, 2 e 1 istruzione errate
nella pipeline, a patto che il salto sia preso (BRANCH). Per eliminare queste istruzioni errate è
possibile usare il dalayed branch e a tempo di compilazione spostare dopo l’istruzione di salto/
branch 1÷3 istruzioni che devono essere eseguite a prescindere dal fatto che il salto sia preso o
no, se ciò non è possibile si useranno delle NOP. Una soluzione a livello hardware prevede un
meccanismo che registra se i salti sono stati presi e dove hanno portato e se gli stessi salti ven-
gono rieseguiti può prevedere se questa volta verrano presi o no e caricare le istruzioni di con-
seguenza, se la previsione è sbagliata sarà necessario eliminare alcune istruzioni dalla pipeline
prima che scrivano i dati in memoria. Una terza soluzione, sempre hardware, consiste nel ri-
conoscere e calcolare la destinazione del salto già nella fase IF, quindi nessuna istruzione sbaglia-
ta entrerà mai nella pipeline, questo però richiede la duplicazione di molti componenti.
Descrivere sinteticamente in cosa consiste il delayed branch e quali
vantaggi può apportare.
A seconda che la retroazione del BTA a PC sia fatta dalla barriera EX/MEM alla IF/ID, direttamente
da EX a IF/ID oppure da EX direttamente a PC si hanno rispettivamente 3, 2 e 1 istruzione errate
nella pipeline, a patto che il salto sia preso (BRANCH). Per eliminare queste istruzioni errate è
possibile usare il dalayed branch, questo non comporta alcun hardware particolare, ma una riorga-
nizzazione del codice a tempo di compilazione. In base alle scelte hardware descritte prima dopo
l’istruzione di salto avremo da 1 a 3 istruzioni che verranno eseguite sempre, che il salto sia preso
o no, il compilatore cercherà di riempire questi delay slot con istruzioni precedenti a quella di salto
(che quindi devono essere eseguite a prescindere), se ciò non è possibile verranno usate delle
NOP.
Indicare quale è la funzione del Branch Target Buffer e descrivere sin-
teticamente il principio di funzionamento.
Il Branch Target Buffer è una rete di predizione dei salti: tiene traccia di tutti i salti, se questi sono
stati presi o no e della loro destinazione, quando lo stesso salto/istruzione viene incontrata di nuo-
vo il BTB usa i dati passati per predire se ora il salto sarà preso. Nel caso più semplice viene sal-
vato un bit che rappresenta cosa è successo l’ultima volta e questo corrisponde alla previsione.
Una versione più avanzata e che sbaglia meno prevede due bit: se una salto per più volte consec-
utive viene preso serviranno due volte consecutive in cui non viene preso per cambiare la previ-
sione da preso a non-preso, e viceversa.
Indicare come potrebbe essere la struttura ai morsetti di un register file
del DLX evidenziando e descrivendo sinteticamente il significato di tutti
i segnali.
Indipendentemente dall’architettura del DLX il RF ha due uscite e un’entrata quindi avremo 32 + 32
bit in uscita, detti A e B, con 5 + 5 bit in ingresso (RS1 e RS2) per scegliere i registri da caricare in
A e B oltre a un OE per ciascuno. Per quanto riguarda la scrittura avremo un segnale di WE, 5 bit
(RD) per scegliere dove scrivere e 32 bit di dati da salvare. A questi segnali si aggiunge il piedino
di CK per il campionamento e il cambiamento delle uscite.
Come noto il DLX non emette i segnali d’indirizzo BA1 e BA0. Se non
fosse così, sarebbe possibile generare i segnali BE3, BE2, BE1 e BE0
utilizzando esclusivamente i segnali BA1 e BA0? Esplicitare chiara-
mente le motivazioni della risposta.
I segnali BA[1..0] portano informazioni soltanto sul primo indirizzo da cui leggere in memoria quindi
avendo solo quelli sarebbe possibile fare letture a lunghezze fissate, sempre 8, 16 o 32 bit. I seg-
2