Emotion Engine
# Emotion Engine

Emotion Engine (lett. "Motore delle emozioni") è un microprocessore sviluppato da Sony e prodotto in collaborazione con Toshiba per la console da gioco PlayStation 2. La produzione del processore iniziò nel 1999, un anno prima della commercializzazione della console, e si concluse nel 2012, con la fine della produzione della console.

Le prime versioni di PlayStation 3, del 2006, erano dotate di un Emotion Engine integrato sulla scheda madre per raggiungere un livello hardware di emulazione e retrocompatibilità con i videogiochi PlayStation 2. Tuttavia nelle versioni dal 2007 in poi, a cominciare dalla versione Europea, Emotion Engine è stato eliminato per abbassare i costi. Al suo posto, per consentire la retrocompatibilità è stata utilizzata un tipo di emulazione a livello software, ma solo con la prima PlayStation.

## Caratteristiche

Emotion Engine è un microprocessore complesso. Ricopre sia il ruolo di processore general purpose sia di processore vettoriale che assiste l'unità di elaborazione grafica.

Il nucleo principale è sostanzialmente un'unità superscalare R5900 – versione modificata dell'R5000 – a 295 MHz a istruzioni ridotte basato su architettura MIPS e che implementa il set di istruzioni "MIPS IV". La CPU cache di primo livello è larga 24 kB: 16 kB per le istruzioni con associatività per la memoria a 2 vie (2-way set-associative), e 8 kB per i dati con associatività analoga. Non è propriamente dotato di una memoria cache di secondo livello, elemento che però viene sostanzialmente sostituito da una RAM scratchpad larga 16 kB.

Sullo stesso die, l'R5900 è affiancato anche da una unità di calcolo in virgola mobile (FPU) dedicata e da due "unità vettoriali" VLIW a 128 bit in grado di funzionare come processori indipendenti. Sul blocco principale di elaborazione risiede la prima unità vettoriale insieme all'R5900 e all'FPU, detta "Unità Vettoriale 0", che può opzionalmente funzionare in modo indipendente (modalità "micro") o come coprocessore dell'R5900 (modalità "macro"). La matrice di registro della unità 0, è costituita da 32 registri in virgola mobile a 128 bit, che possono essere divisi in quattro campi a precisione singola a 32 bit. La memoria cache microcodice dedicata a questa unità raggiunge i 4 kB.

Sul blocco secondario di elaborazione geometrica risiede la seconda unità vettoriale, detta "Unità Vettoriale 1", simile all'unità 0, ma più specializzata in quanto è un'unità totalmente indipendente destinata alla trasformazione di geometria computazionale per l'unità di elaborazione grafica, Graphics Synthesizer. A tal fine, l'unità 1 si collega alla "GIF", un'interfaccia grafica dedicata anch'essa presente sul blocco secondario e con un bus a 64 bit e frequenza a 150 MHz, che a sua volta è collegata al "GS". L'unità 1 presenta anche una cache microcodice dedicata più grande, rispetto all'unità 0, pari a 16 kB.

Esterni al blocco primario e secondario, ma giacenti sempre sul die, sono presenti anche un controller DMA programmabile a 10 canali e un coprocessore per immagini (IPU) con supporto per la decodifica di formati JPEG e MPEG.

Considerando la totalità degli elementi che lo costituiscono, Emotion Engine può raggiungere un picco di performance complessiva in virgola mobile pari a 6,2 GFLOPS. Secondo il benchmark "Dhrystone 2.1" la performance complessiva in MIPS, può raggiungere le 450 MIPS.

Non possedendo proprietà di esecuzione fuori ordine o una vera CPU cache di secondo livello (così come neanche di una cache di primo livello più larga), le prestazioni dell'R5900 possono risentire pesantemente della mancanza di istruzioni, ma soprattutto dati, nella cache; mentre la modalità "micro" che rende indipendente l'unità 0 è generalmente prossima al non-utilizzo. Nonostante ciò, alcuni sviluppatori al lavoro su PlayStation 2, avrebbero affermato che almeno il 60% delle performance di picco, fossero realizzabili con prestazioni sostenute.

Emotion Engine si collega ai 32 MB di memoria Rambus DRAM principale con frequenza a 400 MHz – due moduli a 16 bit, amplificati in dual channel – raggiungendo una velocità di trasmissione di circa 3,2 GB/s.

