title: Hatfield Risc Processor
text: # Hatfield Risc Processor
  
  HARP (HAtfield Risc Processor) era un microprocessore sviluppato a scopo di ricerca dal Politecnico Hatfield (University of Hertfordshire) all'inizio degli anni novanta. Il processore era caratterizzato da un'architettura VLIW (legge blocchi di 128 bit formati da 4 istruzioni da 32 bit) e dall'esecuzione di tutte le istruzioni in modalità predicativa al fine di ridurre i salti condizionati e quindi migliorare il parallelismo. Il progetto prevedeva lo sviluppo anche di un apposito compilatore che ottimizzasse il codice.
  
  L'obiettivo del progetto era sviluppare un processore in grado di eseguire più di un'istruzione per ogni ciclo di clock durante l'esecuzione di codice generico.
  
  Al fine di minimizzare i tempi di attesa dovuti ai salti condizionati il compilatore fa una previsione statica sull'effettiva esecuzione del salto e provvede a far eseguire al processore l'istruzione successiva al salto. Nel caso in cui la previsione di salto si dimostri errata, il processore autonomamente provvede a eliminare l'istruzione eseguita. Il processore è dotato di quattro pipeline a quattro stadi; l fine di ridurre il numero di transistor utilizzati, le quattro pipeline non sono in grado di eseguire tutte le istruzioni: solo la prima è in grado di eseguire alcune istruzioni considerate non comuni. L'architettura segue il paradigma load/store, in cui ogni istruzione attende due registri di ingresso e un registro di uscita per i dati elaborati. Il processore è dotato di 32 registri ad uso comune. La presenza di quattro pipeline parallele rendeva molto oneroso realizzare registri in grado di fornire e accettare dati da tutte le pipeline contemporaneamente. Il processore prevede che solo due pipeline possano scrivere nei registri per ogni ciclo di clock. Per evitare di bloccare costantemente le pipeline in attesa delle scritture, il sistema prevede dei registri temporanei dove salvare i risultati in attesa di poterli scrivere nei registri generali. Il processore permette il trasferimento dei risultati prima del loro effettivo salvataggio nei registri temporanei (writeback) e fornisce dei bit appositi per gestire la coerenza tra le istruzioni.
  
  