No coração deste console encontramos um potente conjunto encapsulado chamado Emotion Engine ou 'EE' desenvolvido pela Sony e rodando a ~294,91 MHz . Este chipset contém múltiplos componentes, um deles sendo a CPU principal. O restante dos componentes está à disposição da CPU para acelerar algumas tarefas.
O líder
O núcleo principal é uma CPU compatível com MIPS R5900 com vários aperfeiçoamentos. Este é o primeiro chip que começa a executar instruções quando o console é ligado. O processador fornece os seguintes recursos:
- MIPS III ISA: um conjunto de instruções RISC 64 bits. Calma, sou eu ou isso é o mesmo conjunto de instruções encontrado em um console da concorrência? Não exatamente, a Sony aprimorou o conjunto de instruções adicionando algumas instruções do MIPS IV (prefetch e move condicional) junto com sua própria extensão SIMD chamada instruções multimídia.
- 32 registradores extras de 128 bits: outra melhoria. Eles são melhor gerenciados utilizando instruções multimídia e são muito úteis para o processamento de vetores.
- Estes registradores são acessados através de um barramento de 128 bits, enquanto o resto da CPU usa um barramento interno de 64 bits.
- Superescalar de duas vias: até duas instruções podem ser executadas em paralelo.
- Cache L1 com 24 KB: dividido em 16 KB para instruções e 8 KB para dados.
- Ela também implementa uma função de prefetch para guardar instruções e dados antes que eles sejam requisitados. Isso é feito incluindo circuitos adicionais que conseguem identificar quais lugares da memória são mais frequentemente requisitados.
- 16 KB de Scratchpad RAM: também conhecido como 'Fast RAM'.
- Unidade de gerenciamento de memória: faz a interface entre o acesso à memória e o resto do sistema.
O núcleo é complementado com uma unidade de ponto flutuante dedicada (identificada como 'COP1') que acelera operações com números de ponto flutuante de 32 bits (também conhecidos como floats em C). É um bloco peculiar visto que ele não obedece ao padrão IEEE 754, mais evidente com sua falta de infinity (computado como 0 no lugar) .
Uma escolha de memória reconhecida
Próximo ao Emotion Engine estão dois blocos de 16 MB de RAM, dando um total de 32 MB de memória principal. O tipo de memória usado é RDRAM (déjà vu!) que é acessado por um barramento de 16 bits.

Design da memória do Emotion Engine. Você consegue adivinhar onde o congestionamento vai surgir.
À primeira vista, isso pode parecer um pouco decepcionante, considerando que o barramento interno do Emotion Engine tem uma largura de até 128 bits. Porém, os chips de RAM foram estrategicamente posicionados seguindo a arquitetura dual-channel, que consiste em conectar ambos os chips usando dois barramentos independentes de 16 bits (um barramento por chip) para melhorar a vazão de dados. A configuração resultante fornece uma vazão teórica de 3,2 GB/sec, portanto pode ter certeza que latência de memória não é um problema neste console!
Em um canto do Emotion Engine há um poderoso Controlador DMA ou 'DMAC' que transfere dados entre a memória principal e o Scratchpad (memória de rascunho); ou entre a memória principal e qualquer componente dentro do EE.
Transferências de dados são feitas em lotes de 128 bits, mas aqui fica a parte interessante: a cada oito lotes, o barramento principal é temporariamente desbloqueado. Isso deixa uma pequena janela de tempo para realizar outras transferências DMA em paralelo (até dez) ou deixar a CPU usar o barramento principal. Esse modus operandi é chamado slice mode e é um dos vários modos disponíveis nesta unidade DMA. Tenha em mente que enquanto o slice mode reduz paradas no barramento principal, ele o faz ao custo de desacelerar a transferência geral do DMA.
Prevenindo contratempos passados
Quer queiramos ou não, com a quantidade de tráfego ocorrendo dentro do Emotion Engine, esse design vai eventualmente sofrer as consequências da arquitetura de memória unificada ou 'UMA' (Unified Memory Architecture). Isto é: múltiplos componentes independentes tentando acessar a memória principal ao mesmo tempo, causando congestionamento. Bem, para corrigir esses problemas, a Sony aliviou o uso constante de memória com os seguintes métodos:
- Envolvendo seus processadores com bastante cache. Assim, apenas pedindo acesso à memória principal se for absolutamente necessário.
- 99% das menções de cache/scratchpad neste artigo serão por esta razão.
- Adicionando um Write Back Buffer de 128 bits: muito similar ao Write Gather Pipe, mas ao invés de esperar até que fique 25% cheio, ele vai antes verificar o estado do barramento (i.e. congestionado ou livre).
Isso soa muito conveniente em aplicações que podem se beneficiar da cache, mas e em certas tarefas, como a manipulação de Display Lists, que não devem usar a cache de forma alguma? Por sorte, a CPU fornece um modo de acesso alternativo chamado UnCached, que usa apenas o Write Back Buffer. Portanto, ciclos não serão desperdiçados corrigindo a cache (resultados de cache misses).
Além disso, o modo UnCached accelerated também está disponível. Este adiciona um buffer para acelerar a leitura de endereços contínuos na memória.
Outras partes interessantes
Dentro do mesmo encapsulamento do Emotion Engine, há ainda um outro processador chamado Unidade de Processamento de Imagem ou 'IPU' (Image Processing Unit), desta vez feito para descompressão de imagens. Como sucessor do MDEC, a IPU pode ser útil quando um jogo precisa decodificar um filme MPEG2 sem travar a CPU principal.
De forma resumida, o jogo envia fluxos de imagens comprimidas para a IPU (com sorte utilizando DMA) os quais são então decodificados em um formato que a GPU pode exibir. O sistema operacional do PS2 também depende da IPU para fornecer reprodução de DVDs.
Finalmente, a IPU também opera em texturas de alta resolução comprimidas, o que economiza uso de CPU e reduz grandes transferências.