Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
UNIVERSITÀ DEGLI STUDI DI BOLOGNA
FACOLTÀ DI INGEGNERIA Corso di Laurea Magistrale in Ingegneria Informatica Calcolatori Elettronici M – Prof. Giovanni Neri, Prof. Stefano Mattoccia Progetto di Calcolatori Elettronici M “Progettazione di un branch target buffer per processore DLX Pipelined nel linguaggio VHDL” Realizzato da: Enrico Baioni Raffaele Luca Iannario Simone Tallevi Diotallevi
2
Architettura Il BTB è stato realizzato mediante una cache set-associative a due vie da 64 slot. TAG: 24 bit (30 del PC meno 6 per l’INDEX) SLOT o INDEX a 6 bit, 64 slot (log2 64 = 6) DESTINAZIONE: 30 bit PREDIZIONE: 2 bit RIMPIAZZAMENTO: 1 bit STATO: 1 bit che indica la validità della linea TAG DESTINAZIONE PREDIZIONE RIMPIAZZAMENTO STATO Linea di cache Quindi ogni via è composta da 58 bit e di conseguenza ogni slot da 116 bit. La dimensione totale della cache è di 116*64/8 = 928 Byte.
3
Algoritmo di predizione
Nel progetto è stato implementato un algoritmo di predizione che prevede l’utilizzo di quattro stati al fine di memorizzare la storia relativa ad un’istruzione. Basandosi sulla correttezza della predizione, comunicata dal mondo esterno al BTB, è possibile eseguire una transizione di stato seguendo la logica rappresentata in figura. In caso di MISS in scrittura lo stato iniziale è determinato staticamente e quindi portato in uno stato forte (“11” o “00”) in base alla predizione iniziale, la quale, in caso di MISS in lettura, è sempre UNTAKEN.
4
Politica di rimpiazzamento
Come politica di rimpiazzamento è stata scelta una di tipo Least Recently Used (LRU), la quale prevede la sostituzione della linea di cache utilizzata meno recentemente. Le situazioni che portano all’applicazione della politica LRU sono essenzialmente due: HIT in lettura: occorre marcare la linea trovata come più giovane, portando il bit di rimpiazzamento al valore logico zero e settando il bit relativo all’altra via MISS in scrittura: sono possibili due situazioni Una delle due vie (o entrambe) dello slot corrente sia invalida. Entrambe le linee siano valide e quindi occorra rimpiazzare la via più vecchia; dopo la scrittura si agisce su tale linea come se ci fosse stato un HIT in lettura
5
Scenario Lettura Flusso principale
Lo stato IF invia al BTB il PC corrente attivando il segnale RD Il BTB ricerca il PC al suo interno Il PC è presente e la linea è valida Il BTB aggiorna i bit di rimpiazzamento Il BTB emette i 30 bit relativi all’indirizzo di destinazione del branch e contemporaneamente emette il valore determinato dall’algoritmo di predizione sulla relativa uscita. Lo stadio di IF, al clock successivo, esegue il fetch dell’istruzione successiva in base alla predizione Flusso alternativo 3a. Il PC non è presente (o la corrispondente linea è invalida) 4a. Il BTB emette sempre come predizione UNTAKEN 5a. Lo stadio di IF considera l’indirizzo di destinazione ricevuto dal BTB come non significativo ed esegue il fetch all’indirizzo PC+1 (idealmente +4)
6
Scenario Scrittura Flusso principale
Lo stadio di EX invia al BTB il proprio PC (se esso è associato ad un’istruzione di branch), l’indirizzo di destinazione calcolato e la correttezza della predizione Il BTB ricerca il PC al suo interno Il PC è presente Il BTB aggiorna i bit di predizione della via identificata dal PC Il BTB sovrascrive l’indirizzo di destinazione Flusso alternativo 3a. Il PC non è presente 4a. Il BTB applica la politica di rimpiazzamento per lo slot identificato dal PC 5a. Il BTB sovrascrive l’indirizzo di destinazione 6a. Il BTB inizializza lo stato della predizione
7
Implementazione del componente
8
Pin in/out logico BTB RD: settato dallo stadio di IF per la lettura del BTB WR: settato dallo stadio di EX per la scrittura sul BTB PC_IF: PC dell’istruzione, inviato dallo stadio di IF PC_EX: PC dell’istruzione, inviato dallo stadio di EX, di cui si vuole aggiornare o aggiungere il record sul BTB PC_DEST_EX: PC di destinazione relativo all’istruzione di branch che si trova all’indirizzo PC EX PRED_OK_EX: indica se la predizione effettuata è corretta RESET: resetta il BTB invalidando tutte le linee TKN_IF: predizione relativa all’istruzione che si trova all’indirizzo PC_IF PC_DEST_IF: PC di destinazione dell’istruzione all’indirizzo PC_IF
9
Pin in/out logico BTB in VHDL
Definizione del componente BTB in VHDL, contenente tutti i segnali in ingresso e in uscita. I segnali sono definiti utilizzando i tipi di dato forniti dalla libreria IEEE: STD_LOGIC e STD_LOGIC_VECTOR. PC_BITS costante con valore pari a 30 Definizione della struttura dati WAY_TYPE, contenente tutte le informazioni relative ad un linea di cache. Inoltre definizione del tipo di dato BTB_CACHE
10
BTB Implementazione VHDL
Fase di lettura. Durante la prima fase abbiamo l’estrazione dei dati dal PC inviato dallo stadio di IF. Durante la seconda fase abbiamo la ricerca della corrispondente linea di cache In caso di HIT vengono emessi i bit di predizione e il PC di destinazione Come ultima operazione abbiamo l’aggiornamento dei bit di rimpiazzamento
11
BTB Implementazione VHDL
Fase di Scrittura. Una prima fase di estrazione dei dati e di ricerca della linea di cache non riportata. In caso di HIT andiamo ad aggiornare i bit di predizione, secondo le modalità precedentemente citate In caso di MISS in scrittura e se non ci sono linee invalide, occorrerà rimpiazzare una linea di cache secondo le modalità descritte dall’algoritmo di rimpiazzamento LRU
12
Integrazione con DLX Pipeline
Segnali aggiunti al progetto del DLX necessari per il collegamento del nuovo componente Port map del BTB con i segnali del DLX, necessario per l’effettivo collegamento del componente al DLX
13
Visione schematica dell’integrazione con il sistema DLX Pipeline
14
Test e simulazione
15
Test Bench 1/2 In questa fase si è verificato il corretto comportamento del componente, sono stati eseguiti numerosi test per verificare, tutte le possibili casistiche e testare il BTB isolato dal resto del sistema DLX. Come prima cosa si è verificata la fase di reset, in cui il componente deve portare tutte le sue linee di cache allo stato logico invalid Inoltre si è deciso di azzerare tutti i valori contenuti nel BTB, per facilitare la lettura dei successivi test.
16
Test Bench 2/2 Una secondo fase del test si compone di una sezione legata all’ inizializzazione del BTB, realizzata grazie al codice qui riportato. In tale fase si assegnano dei valori determinati alle varie linee di cache, validando ogni linea e assegnando una predizione iniziale alle stesse. L’ulteriore fase di test mira a verificare sia la corretta scrittura e lettura dei dati contenuti nel BTB ma anche il corretto aggiornamento del suo stato interno. Il test in particolare mira a verificare la modifica dei bit di predizione. Vengono eseguite due scritture consecutive all’indirizzo alla linea contente il PC pari a 64, specificando una predizione non corretta. Successivamente una lettura verifica l’effettivo cambiamento della predizione.
17
Simulazione Test Bench
Fino a che il segnale di reset è alto tutti i valori sono portati a zero Segue la fase d’inizializzazione che è eseguita interamente in un unico ciclo di CLK. Dopo due successive scritture con PC_EX pari a ’64’ con PRED_OK uguale a ‘0’ possiamo notare che il segnale TKN_IF passa dalla condizione Untaken Forte alla condizione Taken Debole. Durante la simulazione il segnale RD effettua numerose letture, in cui e possibile verificare la predizione per ogni singola istruzione (ipotizzando che siano tutte istruzioni di Branch), TKN_IF infatti diviene valido quando il segnale RD va a livello logico ‘1’ e in questa fase specifica le predizioni per ogni istruzione.
18
Risultati sperimentali
Le simulazioni sono state effettuate eseguendo programmi che presentano loop innestati in modo da testare l’effettiva efficacia del componente aggiunto. Al fine di raccogliere dati statistici sono stati inseriti nella simulazione due contatori che indicano il numero di predizioni corrette ed errate (BTB_EXE_NUM_BRANCH_PRED_OK e BTB_EXE_NUM_BRANCH_PRED_NOT_OK). Questi due contatori hanno evidenziato un comportamento previsto: maggiore è il numero d’iterazioni del loop e maggiore è il guadagno in periodi di clock. l1: addi r2, r0, R2 <= l2: addi r1, r0, R1 <= l3: subi r2, r2, R2 <= R l4: addi r3, r0, R3 <= l5: addi r1, r1, R1 <= R1 + 0 l6: bnez r2, l salta a L2 se R2 /= 0 l7: addi r2, r2, R2 <= R2 + 1 l8: subi r1, r1, R1 <= R1 - 1 l9: addi r3, r0, R3 <= l10: bnez r1, l salta a L3 se R1 /= 0
19
Simulazione
20
Conclusioni Analizzando i dati delle simulazioni è emerso un incremento delle prestazioni, in termini di tempo medio di esecuzione, del 12% circa. Dato che il sistema DLX è dotato di un’unità J&B, siamo in grado di guadagnare un solo un clock per Branch predetta TAKEN in modo corretto e di perderne uno in caso di predizione errata. Dati statistici, confermano che l’algoritmo di predizione garantisce predizioni corrette in più dell’80% dei casi.
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.