# Emotion Engine

L'Emotion Engine est le processeur principal de la PlayStation 2. Il est basé sur un cœur MIPS R5900i, un processeur 64 bits (techniquement, l'Emotion Engine n'est pas un processeur 128 bits proprement dit). Il s'agit d'un microprocesseur VLSI produit en collaboration par Sony Computer Entertainment et Toshiba dès 1999 pour la console PlayStation 2.

## Description

L’Emotion Engine se compose de huit « unités » distinctes, chacune effectuant une tâche spécifique, intégrées sur la même puce. Ces unités sont : un cœur de processeur (CPU), deux unités de traitement vectoriel (VPU), une unité DMA à 10 canaux, un contrôleur mémoire et une unité de traitement d'image (IPU). Il existe trois interfaces : une interface d’entrée-sortie vers le processeur d’E/S, une interface graphique (GIF) vers le synthétiseur graphique et une interface mémoire vers la mémoire système.
Le CPU est étroitement lié à la première VPU, VPU0. Ensemble, ils sont chargés de l'interprétation du code et du calcul de haut niveau. La seconde VPU, VPU1, est consacrée aux transformations géométriques et à l'éclairage et fonctionne indépendamment, parallèlement au processeur. Le VPU0, lorsqu'il n'est pas utilisé, peut également être utilisé pour les transformations géométriques (polygones).s. Les listes d'affichage générées par CPU/VPU0 et VPU1 sont envoyées au GIF, qui les hiérarchise avant de les envoyer au synthétiseur graphique pour le rendu.

### CPU

Le processeur principal est un processeur RISC bidirectionnel, superscalaire, in-order. Il implémente les instructions MIPS-III et une grande partie du MIPS-IV.
Le CPU contient deux ALU et une FPU. Les ALU sont 64 bits mais la FPU est en 32 bits.

### Unités vectorielles

La raison majeure des performances en virgule flottante de l'Emotion Engine se situe dans les unités vectorielles, présentes en double (VU0 et VU1). Chacun d'entre eux possède 32 registres 128 bits, 16 registres 16 bits, 4 unités Multiply-accumulate, une unité de division flottante et une mémoire locale. Le VU0 contient 4 kb tandis que le VU1 contient 16 kb.

### Unité de traitement d’image (IPU)

L’IPU permettait le décodage d’images compressées MPEG-2, permettant la lecture de DVD et de FMV de jeux. Il a également permis la quantification vectorielle des données graphiques 2D.

### Bus interne

La communication entre le CPU, les deux unités vectorielles, l'unité mémoire et les autres composants est gérée par un bus interne de largeur 128 bits cadencé à la moitié de la vitesse d'horloge de l'Emotion Engine. À 300 MHz, le bus de données interne fournit une bande passante théorique maximale de 2,4 Go/s.

### Interface externe

La communication entre l'Emotion Engine et la RAM passe par deux canaux de DRDRAM et par le contrôleur mémoire, qui s'interface avec le bus de données interne. Chaque canal est de largeur 16 bits et fonctionne à 400 MHz DDR. Combinés, les deux canaux atteignent une bande passante théorique maximale de 3,2 Go/s, environ 33 % de plus que le bus interne. C'est pourquoi le contrôleur mémoire stocke les données envoyées par les canaux DRDRAM, si bien que la bande passante supplémentaire peut être utilisée par le CPU.
L’Emotion Engine s’interface directement avec le synthétiseur graphique via le GIF avec un bus dédié 64 bits, 150 MHz qui a une bande passante théorique maximale de 1,2 Go/s.
Pour assurer les communications entre l’Emotion Engine et le processeur d’entrée-sortie (IOP), l’interface d’entrée-sortie interface un bus d’entrée-sortie large de 32 bits à 37,5 MHz avec une bande passante théorique maximale de 150 Mo/s avec le bus de données interne. L’interface fournit suffisamment de bande passante pour le connecteur d’extension PCMCIA qui a été utilisé pour la carte réseau, avec interface P-ATA intégrée pour un accès plus rapide aux données et aux fonctionnalités en ligne. L’un des avantages de la bande passante élevée était qu’elle pouvait être facilement utilisée pour introduire des extensions matérielles telles que la carte réseau avec prise en charge intégrée des disques durs IDE ou d’autres extensions pour étendre les fonctionnalités et la durée de vie du produit, ce qui peut être considéré comme un avantage concurrentiel. Dans les variantes plus récentes (comme l'édition mince), l’interface offrait cependant beaucoup plus de bande passante que ce qui est requis par les périphériques d’entrée et de sortie de la PlayStation, car le support du disque dur a été supprimé et le connecteur PCMCIA a été abandonné au profit d'un connecteur plus mince.

## Fabrication

L'Emotion Engine contient 10,5 millions de transistors, la die a une surface de 240 mm$^2$.

## Boîtier

Le boîtier de l'Emotion Engine possède 540 contacts en matrice de billes (BGA).

## Utilisation

La principale utilisation de l'Emotion Engine est en tant que processeur principal de la PlayStation 2. La première PlayStation 3 contenait également ce processeur accompagné du Graphics Synthesizer afin d'assurer une rétrocompatibilité parfaite avec les jeux PlayStation 2. La deuxième révision de la PlayStation 3 ne contenait plus l'Emotion Engine, mais pouvait émuler avec le Cell et le Graphics Synthesizer. La compatibilité a été rompue avec la version slim de la console, à cause de l'absence du Graphics Synthesizer, pour des raisons de coûts.

## Spécifications

* Fréquence d'horloge : 294,912 MHz, 299 MHz (versions ultérieures)
* Jeu d'instructions : MIPS-III, avec un sous-ensemble du MIPS-IV, 107 instructions vectorielles
* Base du cœur MIPS : 2 unités 64 bits en virgule fixe, une unité en virgule flottante, pipeline de 6 étages
* Cache d'instructions : 16 Ko
* Cache mémoire : 8 Ko
* Mémoire vive embarquée : 16 Ko
* Unités vectorielles : 4 unités Multiply-accumulate, une unité de division flottante.
* Registres vectoriels : 32 entrées, 128 bits de largeur
* Unité de traitement d'image : MPEG-2 Macrobloc
* DMA : 10 canaux
* Tension nominale : 1,8 V
* Consommation électrique : 15 W à 1,8 V

## Performances théoriques

* Virgule flottante : 6,2 GFlops (simple précision)
* Polygones nus : 66 millions de polygones par seconde.
* Avec éclairage et brouillard : 36 millions de polygones par seconde.
* Avec Bézier : 16 millions de polygones par seconde.
* Affichage : 150 millions de pixels par seconde.