Al igual que Nintendo, Sony diseñó un Sistema en Chip (SoC, del inglés System-on-Chip) extraordinariamente compacto que alberga la mayoría de los componentes de los que hablaremos a lo largo de este artículo. Entre ellos se encuentra la CPU principal, encargada de ejecutar los juegos y demás programas (a diferencia de las otras CPU, de las que hablaremos a su debido tiempo). El SoC recibe el nombre de Tachyon, elegido por la propia Sony.

El chip Tachyon en el modelo original de PSP.
La CPU principal es un diseño propio que mantiene la tradición de recurrir a la tecnología MIPS. Ahora bien, ya han pasado cuatro años desde el lanzamiento de la PlayStation 2, así que cabe preguntarse: ¿en qué situación se encontraba MIPS por aquel entonces?
MIPS tras el cambio de siglo
Me temo que los años dorados de MIPS quedaron en los 90, y nada indica que vayan a repetirse en un futuro próximo. Su empresa matriz, SGI, había perdido terreno frente a las estaciones de trabajo x86 de bajo coste y atravesaba graves dificultades económicas. Así que, en 1999, vendió su participación mayoritaria en MIPS . Con ello, MIPS volvió a ser una empresa independiente, aunque la competencia era mucho más feroz que en sus primeros tiempos.
La primera decisión de la compañía fue reconocer que las CPU MIPS ya no podían competir en el ámbito del alto rendimiento. En consecuencia, reorientó su enfoque hacia la informática de bajo consumo, disputando el terreno directamente a ARM y su abrumadora popularidad.
Para ordenar su fragmentada línea de CPU, MIPS la consolidó en torno a tres sets de instrucciones :
- MIPS32: Una actualización de MIPS II (la última ISA exclusivamente de 32 bits), que incorpora funcionalidades tomadas de arquitecturas posteriores sin abandonar el límite de 32 bits.
- MIPS64: La continuación de MIPS V, una ISA de 64 bits y la última antes de la renovación. MIPS V fue un superconjunto de todas las ISA anteriores, al igual que sus predecesoras.
- microMIPS: Disponible en las variantes 'microMIPS32' y 'microMIPS64', son superconjuntos de MIPS32 y MIPS64, respectivamente, con un grupo adicional de instrucciones de 16 bits (al estilo de Thumb). Sin embargo, microMIPS no es compatible a nivel binario con las otras ISA, por lo que las bases de código heredadas debían recompilarse para ejecutarse sobre microMIPS.
La gran diferencia fue que estos sets de instrucciones se desarrollarían de forma coordinada, en lugar de que MIPS abandonase la arquitectura anterior en cuanto llegase la siguiente. Las nuevas revisiones se identificarían con el sufijo 'Release x', como 'MIPS32 Release 6' o 'MIPS32R6', que es la última revisión hasta la fecha.
Junto con las ISA, MIPS también comenzó a comercializar una nueva línea de núcleos IP. Por ejemplo, el diseño MIPS32 4k implementaba la ISA MIPS32 R2, estaba disponible en distintas variantes y ofrecía amplias posibilidades de personalización.
Volviendo al tema, Sony adquirió presumiblemente una licencia del MIPS32 4k y lo personalizó ampliando la ISA e incorporando coprocesadores específicos . El fruto de este trabajo es Allegrex, que funciona a una velocidad variable entre 33 MHz y 333 MHz.
La nueva CPU portátil
Allegrex es un núcleo completo de 32 bits con las siguientes características :
- Una ISA MIPS personalizada: combina instrucciones de MIPS32R2 con instrucciones exclusivas para operaciones aritméticas (multiplicación, resta, mín/máx, desplazamientos de bits) y control de interrupciones. Estas se denominan 'Allegrex Extended Instructions'.
- Un bus de direcciones de 32 bits: esta CPU puede direccionar hasta 4 GB de memoria.
- 32 registros de uso general: todos almacenan valores de 32 bits; dos de ellos (el registro cero y el registro de enlace) están reservados para usos especiales. A estas alturas, esto no debería sorprender.
- Un pipeline de 7 etapas: una más que su hermana de sobremesa.
- 32 KB de caché L1: de los cuales 16 KB son para instrucciones y 16 KB para datos.
- Un write-back buffer de caché: la CPU puede escribir sobre la caché dando por sentado que la RAM ya ha sido actualizada. Mientras tanto, la caché se encarga de actualizar la memoria en cuanto su búfer interno se llena.
- Este diseño acelera las escrituras en memoria, pero no funciona de inmediato en sistemas multiprocesador como esta consola . Por ello, los desarrolladores debían vaciar manualmente el búfer cuando otros componentes dependían de los nuevos valores en memoria.
En general, esto supone una propuesta más competitiva que la competencia basada en ARM9, aunque aún no hemos terminado: queda revisar los coprocesadores que cooperan junto al núcleo.
Coprocesadores
Como en cualquier CPU MIPS, Allegrex dispone de tres ranuras para coprocesadores. Sony incorporó tres :
- El coprocesador de control del sistema como 'CP0': un componente indispensable en toda CPU MIPS. Este componente es el que habilita la protección de memoria, la coherencia de caché y el control de interrupciones en el propio núcleo .
- Una Unidad de Punto Flotante (FPU, del inglés Floating Point Unit) como 'CP1': acelera las operaciones aritméticas con números decimales de 32 bits (conforme al estándar IEEE 754). Dispone de treinta y dos registros de 32 bits y un pipeline independiente de 8 etapas, lo que añade mayor paralelismo a la CPU principal.
- Una Vector Floating Point Unit (VFPU) como 'CP2': un coprocesador diseñado para operaciones vectoriales, similar a un procesador SIMD tradicional. En comparación con la FPU, ofrece 128 registros de 32 bits, se basa en un set de instrucciones propietario e implementa un pipeline de longitud variable. La VFPU opera con valores en coma flotante de hasta 32 bits, que pueden agruparse en un vector de 4 componentes o incluso en una matriz 4×4. Esto resulta muy útil para calcular distintos tipos de operaciones geométricas sin necesidad de reorganizar los datos.
- Su eficiencia proviene de su bus de datos de 128 bits conectado al resto del sistema, lo que alivia la carga de tráfico de la CPU principal.
- A diferencia de la FPU, algunos comportamientos de la VFPU se apartan del estándar IEEE-754.
En definitiva, Allegrex es extraordinariamente rápida. Sin embargo, aún no sabemos qué puede hacerse con ella. Al fin y al cabo, puedes imaginar esta CPU como el director de una orquesta, y aún no hemos conocido a los músicos.
Una gestión de memoria enfocada
Detengámonos un momento en el sistema de memoria implementado en esta consola. Entre otras cosas, el coprocesador de control del sistema proporciona la funcionalidad de una Memory Protection Unit o 'MPU' (no confundir con una 'MMU'), que mapea el hardware físico sobre el espacio de memoria de la CPU con algunas particularidades intermedias. Aunque su modus operandi puede parecer algo primitivo a primera vista, veremos por qué resulta óptimo para las necesidades de esta consola.

Mapeado de memoria con la MPU.
Una Memory Management Unit o 'MMU' tradicional gestiona el acceso de la CPU a los componentes que la rodean. Esto implica que todas las líneas de direcciones de la CPU se conectan a la MMU; y es esta última la única conectada al resto del sistema.
Esto ofrece ventajas notables para funciones como la 'memoria virtual' y la 'protección de memoria'. Para implementar memoria virtual, una MMU debe incluir un componente llamado Translation Lookaside Buffer (TLB) con el fin de evitar degradación del rendimiento. Pues bien, la MMU de Allegrex carece de TLB , de modo que se centra exclusivamente en la protección de memoria. Por este motivo, la MMU de Allegrex se denomina en realidad MPU (Memory Protection Unit). Una MPU es una versión reducida de la MMU sin memoria virtual. En cualquier caso, la protección de memoria otorga al sistema la capacidad de decidir a qué zonas de memoria puede acceder un programa.
Gracias a ello, Allegrex no tendrá que gestionar situaciones en las que programas de usuario (como los juegos) intenten acceder a zonas restringidas (como las claves de cifrado). Para aplicar esta restricción, las direcciones de memoria se agrupan en cinco segmentos con distintos niveles de privilegio. Además, la MPU de Allegrex cuenta con tres modos de operación: modo usuario, modo supervisor y modo kernel.
Si un proceso sin privilegios (operando en modo usuario) intenta acceder a una dirección de memoria en una zona restringida, la MPU solicitará al sistema operativo (mediante 'excepciones') si debe concederle permiso.
En definitiva, esto permite a Sony, como desarrolladora del sistema operativo, implementar un sistema de seguridad respaldado por el hardware.
Memoria disponible
Hasta aquí hemos analizado la CPU principal de la PSP y sus aceleradores. Veamos ahora la memoria física disponible en este sistema.

Distribución de la memoria desde la perspectiva de la CPU principal.
La PSP incorpora dos bloques de memoria accesibles desde la CPU :
- 16 KB de SRAM: es lo que en artículos anteriores denominamos Scratchpad. Es poca RAM, pero muy rápida, así que corresponde a los desarrolladores sacarle el máximo partido, aunque documentos no oficiales la han tachado de 'inútil' .
- 32 MB de DDR SDRAM: una cantidad considerablemente mayor, aunque con una tasa de acceso inferior. A lo largo del artículo la llamaremos 'memoria principal'.
- Las siglas 'DDR' significan 'Double Data Rate' y denotan una evolución respecto a la SDRAM tradicional, con un protocolo de transferencia más rápido. La Xbox original utilizaba el mismo tipo.
Diseño de buses
Pronto descubrirás que la PSP alberga numerosos componentes, cada uno con una función muy concreta. Para organizarlos sin caer en los errores del pasado, los ingenieros de Sony los distribuyeron en buses dedicados: así, solo los componentes con funciones afines comparten el mismo bus. Estos buses se comunican entre sí mediante árbitros dedicados, en forma de 'controladores de memoria' o unidades de Acceso Directo a Memoria (DMA, del inglés Direct Memory Access).
Todos los buses del Tachyon implementan un diseño ampliamente conocido llamado Advanced High-performance Bus (AHB), una solución desarrollada por ARM para gestionar la congestión en sus chips y SoC. Si te genera curiosidad, el AHB también fue adoptado en la Wii.

Esquema básico de los tres buses principales de este sistema.
Aplicando estos principios, se construyeron los siguientes buses para la PSP :
- El bus del sistema: conecta la CPU, el Scratchpad y la GPU. Tiene 128 bits de ancho.
- El bus del Media Engine: conecta otro grupo de componentes (que se explican en la siguiente sección). Tiene las mismas características que el bus del sistema.
- El bus periférico: conecta los componentes de E/S y almacenamiento. Tiene 32 bits de ancho.
Los tres buses se conectan al controlador DDR, que es donde se aloja la memoria principal.
Gestión del tráfico en el bus
Dentro de cada bus conviven varios componentes que trabajan de forma independiente y almacenan los datos procesados en un espacio compartido (como la memoria principal). Lo que no queremos es que la CPU tenga que intervenir cada vez que un módulo necesite leer o escribir en memoria. Tradicionalmente, se incluía una unidad DMA en el bus para ofrecer esta función, pero una única DMA tiene un rendimiento limitado. La PSP contiene un número considerable de componentes, lo que puede derivar en cuellos de botella.
La solución es sencilla: bus mastering. En pocas palabras, cada componente dispone de su propio controlador DMA. Esto le permite convertirse en el 'bus master' y tomar el control del bus para acceder a la ubicación que necesite. Para evitar conflictos (varios 'bus masters' simultáneos), los componentes adyacentes reconocen este evento y esperan a que la operación concluya.
El fin de una era
La revolución RISC produjo innumerables diseños de CPU a lo largo de los años 80 y 90, pero solo unos pocos pervivieron más allá del cambio de siglo. Al igual que concluí mi análisis del SuperH en el artículo sobre la Dreamcast, la PlayStation Portable será el último artículo de esta serie en presentar una CPU MIPS.
Tras múltiples transformaciones, lo que queda de MIPS es hoy una empresa que diseña CPU RISC-V. A decir verdad, se trata de una estrategia interesante que le proporciona mayor margen para competir contra ARM.
Al repasar mis análisis anteriores, sin embargo, cuesta entender cómo una empresa de tanto talento pudo perder su cuota de mercado. En el segmento de las estaciones de trabajo, el x86 de Intel se impuso pese a todas las críticas: abarató el equipamiento gracias a la línea Pentium y los 'clones', y lo volvió atractivo mediante su software compatible, exclusivo de Windows. Por último, la arquitectura P6 dotó a Intel de la escalabilidad que hasta entonces solo disfrutaban los diseños RISC.

En 2011, el Computer History Museum (Mountain View, California) realizó una entrevista con los cofundadores y antiguos directivos de MIPS , en la que hablaron de los orígenes de la empresa, su impacto en la industria y su posterior reorganización.
En el segmento de bajo consumo, en cambio, me resultó más difícil entender su declive: MIPS y ARM compartían modelos de negocio similares, basados ambos en la concesión de licencias de IP. Por fortuna, la entrevista del Computer History Museum de 2011 abordó esta misma pregunta, y la respuesta fue:
Cometimos un error: no comprendimos la importancia del mercado de los teléfonos móviles. Al principio no había dinero que ganar (...) pero ARM lo consiguió invirtiendo en él. Fue una jugada muy inteligente que resultó ser un punto de apoyo extraordinario. Nosotros nos fijamos en el margen bruto y dijimos: "¡No es una gran rentabilidad! Más vale que pongamos nuestra atención en otro lado." Pero, claro, resultó que los teléfonos móviles se convirtieron en smartphones [y luego] se volvieron algo gigantesco.
- John Hennessy, cofundador de MIPS Computer Systems
En cualquier caso, en lo que respecta a este tema, creo que, aunque sea poco probable que veamos una nueva CPU MIPS, sí veremos a sus antiguos ingenieros trasladar las tecnologías distintivas de MIPS a nuevos proyectos.
Dicho esto, continuemos con el análisis de la PSP.