Classe che implementa il concetto di processore scalare dotato di pipeline. Mantiene i riferimenti alla memoria e al banco di registri.
Program counter.Punta all'indirizzo di memoria contenente l'istruzione
Instruction register.Conserva il codice operativo dell'istruzione attualmente in esecuzione
Array contenente tutti i segnali di controllo.Sono undici in totale.
| [0]:isImmediate | L'operazione contiene un valore immediato |
| [1]:saveInMemory | L'operazione richiede scrittura in memoria |
| [2]:saveRegister | L'operazione richiede scrittura nei registri d'uso generale |
| [3]:add_nsub | Usata per distinguere operazioni di somma da operazioni di sottrazione |
| [4]:doOperation | L'operazione richiede l'utilizzo dell'ALU |
| [5]:fetchInMemory | L'operazione richiede lettura della memoria |
| [6]:doCompare | L'operazione richiere di comparare due valori |
| [7]:compResult | Risultato della comparazione |
| [8]:RA_forward | Ad RA è stato passato un valore tramite forwarding di operatori |
| [9]:RB_forward | Ad RB è stato passato un valore tramite forwarding di operatori |
| [10]:no_op | Nessuna operazione da svolgere |
Array di valori usato per la simulazione di pipeline
Indica se c'è un'attesa dovuta a dipendenze e quali stati ne sono affetti
Indica se una dipendenza è stata trovata
Usato dalla pipeline per tenere traccia del numero di operazioni eseguite
Usato per tenere conto dei cicli di clock
Array espandibile di HashMaps che hanno come chiave e contenuto un'intero.Usato per contenere , per ogni ciclo di clock , le operazioni attive e la fase in cui esse si trovano
In caso di ritardo in un salto, conserva valore del PC dell'operazione da annullare
Fase di caricamento dell'istruzione
Salva IR,PC e array dei segnali di controllo nel primo buffer interstadi
| int decode( |
| ) |
Fase di decodifica.
| wait boolean | Indica se la pipeline è attualmente in fase di stallo.In caso affermativo non viene eseguita nessuna operazione |
Salva RA,RB,IR,PC e array dei segnali di controllo nel secondo buffer interstadi
Salva RM,RZ,IR,PC e array dei segnali di controllo nel terzo buffer interstadi
Fase di accesso alla memoria
Salva RM,RY,IR,PC e array dei segnali di controllo nel quarto buffer interstadi
| int pipeline( |
| ) |
Il programma usa un array di interi di dimensione 5 per simulare il comportamento di una pipeline a cinque stadi. Il valore contenuto in un certo spazio dell'array in un certo momento indica una delle fasi attualmente in esecuzione. La funzione gestisce il valore di un singolo spazio dell'array.Tiene conto di vari fattori come il numero di istruzioni e l'eventuale presenza di una bolla di attesa.
| phases int[] | Con pipe funge da contatore per la selezione della fase da eseguire |
| pipe int | Con phases funge da contatore per la selezione della fase da eseguire |
| waiting int | Permette di avvisare la funzione se è necessaria la creazione di una bolla |
| instructions_N int | E' usato dalla funzione per capire quando l'ultima istruzione del programma è stato raggiunta |
| clock int | Viene utilizzato come indice per la selezione della corretta HashMap dall'ArrayList "op_phases" |
| ArrayList<HashMap<Integer,Integer> > p_exe( |
| ) |
Richiama la funzione p_waiting su ogni spazio dell'array p_values.Se una dipendenza è stata rilevata si occupa di modificare i valori dell'array delle attese
| execute boolean | Flag per indicare se l'esecuzione è singola o consecutiva |
| instructions_N int | Valore che indica il numero di istruzioni del programma |
| int checkDependenciesExe( |
| ) |
Funzione che rileva dipendenze tra la fase di decodifica e quella di esecuzione
| opId int | Id dell'operazione |
| int checkDependenciesMem( |
| ) |
Funzione che rileva dipendenze tra la fase di decodifica e quella di lettura della memoria
| opId int | Id dell'operazione |
| int getBitsValue( |
| ) |
Ritorna il valore di una stringa di bit convertita in numero intero in base decimale.La stringa viene estratta da un codice operativo
| startingBit int | Posizione del bit iniziale della sequenza da estrarre |
| endingBit int | Posizione del bit finale della sequenza da estrarre |
| buffer int | Indice del buffer dal quale verrà estratto il codice operativo. |
Resetta i valori delle variabili di controllo
Shifta i valori del vettore delle attese e delle fasi della pipeline quando un'operazione viene completata. Questa funzione viene richiamata ogni volta che una istruzione arriva al termine della pipeline e.Gli array si comportano come delle queues.L'operazione che è stata completata viene portata fuori dall'array , facendo così spazio ad una nuova operazione.
| void setAluForwarding( |
| ) |
Attiva/disattiva forwarding da RZ
| void setMemForwarding( |
| ) |
Attiva/disattiva forwarding da RY
Resetta registri d'uso generale
Ritorna contenuto dei registri d'uso generale sotto forma di array di stringhe
Resetta il valore del PC
Resetta contenuto dei registri interstadi e dell'IR
Ritorna contenuto dei registri interstadi , del PC e IR sotto forma di array di stringhe
Resetta la parte della memoria non riservata alle istruzioni
Resetta il processore.Reinizializza tutte le variabili della classe