ProcessoreP
ProcessoreP

Classe che implementa il concetto di processore scalare dotato di pipeline. Mantiene i riferimenti alla memoria e al banco di registri.

Variables
PC
int PC

Program counter.Punta all'indirizzo di memoria contenente l'istruzione

IR
String IR

Instruction register.Conserva il codice operativo dell'istruzione attualmente in esecuzione

Registri interstadi
RA

Registro interstadi tra la fase di decodifica e la fase di esecuzione

RB

Registro interstadi tra la fase di decodifica e la fase di esecuzione

RZ

Registro interstadi tra la fase di esecuzione e la fase di accesso a memoria

RM

Registro interstadi tra la fase di esecuzione e la fase di accesso a memoria

RY

Registro interstadio tra la fase di accesso alla memoria e la fase di scrittura nel banco dei registri

mem
Memoria mem

Usato come riferimento alla memoria del programma.

g_reg
Registro[] g_reg

Usato come riferimento al banco di registri di uso generale del processore

buffers
BufferInterstadio[] buffers

Buffers interstadi

controlSignals
boolean[] controlSignals

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

p_values
int[] p_values

Array di valori usato per la simulazione di pipeline

p_waiting
int[] p_waiting

Indica se c'è un'attesa dovuta a dipendenze e quali stati ne sono affetti

waiting
boolean waiting

Indica se una dipendenza è stata trovata

op_number
int op_number

Usato dalla pipeline per tenere traccia del numero di operazioni eseguite

clock
int clock

Usato per tenere conto dei cicli di clock

Forwarding degli operatori
alu_forwarding

Indica se viene utilizzata la tecnica di inoltro degli operandi dall'ALU

mem_forwarding

Indica se viene utilizzata la tecnica di inoltro degli operandi da memoria

op_phases;

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

deletedOp
int deletedOp

In caso di ritardo in un salto, conserva valore del PC dell'operazione da annullare

Functions
ProcessoreP
ProcessoreP(
Memoria m,
Registro[] reg
)

Costruttore della classe ProcessoreP

Parameters
m

Oggetto di tipo Memoria il quale riferimento verrà salvato nella variabile mem

reg

Array di oggetti di tipo Registro il quale riferimento verrà salvato nella variabile g reg

fetch
void fetch()

Fase di caricamento dell'istruzione

buffer1
void buffer1()

Salva IR,PC e array dei segnali di controllo nel primo buffer interstadi

decode
int decode(
boolean wait
)

Fase di decodifica.

Parameters
wait
boolean

Indica se la pipeline è attualmente in fase di stallo.In caso affermativo non viene eseguita nessuna operazione

buffer2
void buffer2()

Salva RA,RB,IR,PC e array dei segnali di controllo nel secondo buffer interstadi

buffer3
void buffer3()

Salva RM,RZ,IR,PC e array dei segnali di controllo nel terzo buffer interstadi

memoryAccess
void memoryAccess()

Fase di accesso alla memoria

buffer4
void buffer4()

Salva RM,RY,IR,PC e array dei segnali di controllo nel quarto buffer interstadi

pipeline
int pipeline(
int[] phases,
int pipe,
int waiting,
int instructions_N,
int clock
)

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.

Parameters
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"

p_exe
ArrayList<HashMap<Integer,Integer> > p_exe(
boolean execute,
int instructions_N
)

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

Parameters
execute
boolean

Flag per indicare se l'esecuzione è singola o consecutiva

instructions_N
int

Valore che indica il numero di istruzioni del programma

checkDependenciesExe
int checkDependenciesExe(
int opId
)

Funzione che rileva dipendenze tra la fase di decodifica e quella di esecuzione

Parameters
opId
int

Id dell'operazione

checkDependenciesMem
int checkDependenciesMem(
int opId
)

Funzione che rileva dipendenze tra la fase di decodifica e quella di lettura della memoria

Parameters
opId
int

Id dell'operazione

getBitsValue
int getBitsValue(
int startingBit,
int endingBit,
int buffer 
)

Ritorna il valore di una stringa di bit convertita in numero intero in base decimale.La stringa viene estratta da un codice operativo

Parameters
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.

resetControl
void resetControl()

Resetta i valori delle variabili di controllo

nextPipeline
void nextPipeline()

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.

setAluForwarding
void setAluForwarding(
boolean alu_f
)

Attiva/disattiva forwarding da RZ

setMemForwarding
void setMemForwarding(
boolean alu_m
)

Attiva/disattiva forwarding da RY

clearRegistries
void clearRegistries()

Resetta registri d'uso generale

getRegistries
String [] getRegistries()

Ritorna contenuto dei registri d'uso generale sotto forma di array di stringhe

resetPC
void resetPC()

Resetta il valore del PC

clearInterstateRegistries
void clearInterstateRegistries()

Resetta contenuto dei registri interstadi e dell'IR

getInterstateRegistries
String [] getInterstateRegistries()

Ritorna contenuto dei registri interstadi , del PC e IR sotto forma di array di stringhe

clearMemory
void clearMemory()

Resetta la parte della memoria non riservata alle istruzioni

resetProcessor
void resetProcessor()

Resetta il processore.Reinizializza tutte le variabili della classe