1 / 20

UNIVERSITÀ DEGLI STUDI DI BOLOGNA

UNIVERSITÀ DEGLI STUDI DI BOLOGNA. FACOLTÀ DI INGEGNERIA Corso di Laurea Magistrale in Ingegneria Informatica Calcolatori Elettronici M – Prof. Giovanni Neri, Prof. Stefano Mattoccia.

desma
Download Presentation

UNIVERSITÀ DEGLI STUDI DI BOLOGNA

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 TalleviDiotallevi

  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 INDEXa 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 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 LeastRecentlyUsed (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 • Portmap 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, 8 --R2 <= 0 + 8l2: addi r1, r0, 8 --R1 <= 0 + 8 l3: subi r2, r2, 1 --R2 <= R2 - 1 l4: addi r3, r0, 1 --R3 <= 0 + 1l5: addi r1, r1, 0 --R1 <= R1 + 0l6: bnez r2, l2 --salta a L2 se R2 /= 0l7: addi r2, r2, 1 --R2 <= R2 + 1l8: subi r1, r1, 1 --R1 <= R1 - 1l9: addi r3, r0, 1 --R3 <= 0 + 1l10: bnez r1, l3 --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.

More Related