Arquitectura de PlayStation Vita (Parte 1)
(copetti.org)- La PSVita es un dispositivo donde se cruzan las consolas portátiles tradicionales y la rápida expansión de los SoC móviles; Sony buscó usar circuitos familiares sin perder una identidad de producto distinta a la de los smartphones
- La familia de productos se divide entre la PSVita original, la Slim que reemplazó la pantalla OLED por LCD, y la PlayStation TV más cercana a un equipo de sobremesa; en general, el mismo análisis de arquitectura aplica a las tres variantes
- El chip central, Kermit, usa el enfoque de SoC de chip apilado de Toshiba para colocar en un solo paquete la CPU, la GPU, unos 640 MB de RAM, aceleradores y circuitería de compatibilidad con PSP, mejorando el ancho de banda y el uso de espacio, aunque complicando la disipación térmica
- La CPU principal es una ARM Cortex-A9 MPCore de cuatro núcleos y hasta 500 MHz, con ARMv7-A, 2 MB de caché L2 compartida, compilación centrada en Thumb-2, NEON/VFPv3, TrustZone y ejecución fuera de orden
- Las tareas multimedia quedan a cargo del acelerador Venezia de Toshiba, mientras que la retrocompatibilidad con PSP/PS1 se maneja mediante un MIPS32 4k dentro de Kermit y una estructura reservada de CDRAM, Scratchpad y RPC
El mercado de PSVita y el alcance del análisis
- La PSVita es un producto ubicado en la intersección entre la industria del videojuego y el cambiante sector móvil
- Sony tuvo que competir con dispositivos baratos que ofrecían muchas funciones además de llamadas telefónicas
- La nueva consola portátil de Sony incorporó tecnología moderna de su época, y aunque su diseño de circuitos resulta familiar, también deja ver una intención de no parecerse al mercado de smartphones
- El análisis de las consolas de octava generación tiene mayor complejidad, así que en lugar de publicarlo todo de una vez se presenta por secciones
Los tres modelos de PSVita
- Durante el ciclo de vida de PSVita, Sony cambió varias veces su estrategia de producto y lanzó tres variantes
- La PSVita original fue el primer modelo de la serie y a veces se le llama el modelo “Fat”
- La Slim mantuvo la misma arquitectura, pero cambió la pantalla OLED por una LCD para reducir costos, y no ofreció una variante con soporte 3G
- La Slim aumentó el tamaño del chip eMMC, pero el incremento fue de apenas 52 MB; aun así, eso permitió ofrecer una tarjeta de memoria interna de 1 GB
- La PlayStation TV es una adaptación de la placa base del modelo Fat para un entorno no portátil, con una configuración de I/O distinta expuesta al usuario
- En términos generales, la misma explicación arquitectónica aplica a los tres modelos; los cambios de eMMC en Slim y PlayStation TV se tratarán por separado
Kermit: el SoC central de PSVita
- Sony había adoptado activamente tecnología MIPS desde la PlayStation original, pero como ARM se fortaleció en el mercado móvil y el uso de MIPS fue disminuyendo, en PSVita eligió una CPU ARM
- Toshiba, como socio cercano de fabricación de Sony, asumió el papel de licenciatario de ARM
- El chip principal, Kermit, toma su nombre de ‘The Muppets’ y es el bloque de circuitería más grande que contiene la CPU principal de PSVita
- Kermit es un System-on-Chip, pero gracias al modelo de fabricación Stacked Chip SoC (SCS) de Toshiba combina gran cantidad de memoria y procesadores dentro de un mismo paquete
- SCS apila los circuitos verticalmente en lugar de conectarlos externamente uno al lado del otro
- El efecto directo es mayor ancho de banda y menor área ocupada
- A cambio, el diseño térmico se vuelve más complejo
- La composición principal de Kermit es la siguiente
- CPU principal ARM Cortex-A9 MPCore de cuatro núcleos
- GPU principal PowerVR SGX543MP4+ de Imagination Technologies
- Varios aceleradores, como un DSP grande, controladores DMA y bloques de seguridad
- Aproximadamente 640 MB de RAM divididos en varios tipos
- Una CPU MIPS y circuitería Graphics Engine para compatibilidad con PlayStation Portable
ARM Cortex-A9 MPCore
- La CPU principal de PSVita es una ARM Cortex-A9 MPCore, un clúster compuesto por cuatro núcleos Cortex-A9
- Su velocidad de operación llega hasta 500 MHz, menor que los 1.4 GHz del Samsung Galaxy S III, que en la misma época usaba un A9 de cuatro núcleos
- El Cortex-A9 fue el sucesor del Cortex-A8, y PSVita apareció con apenas unos meses de diferencia respecto al Nintendo 3DS
- Sus funciones base comunes son las siguientes
- Conjunto de instrucciones ARMv7-A
- 64 KB de caché L1
- Divididos en 32 KB de caché de datos y 32 KB de caché de instrucciones
- La coherencia de caché de datos entre núcleos la gestiona la Snoop Control Unit
- Estructura superscalar de 2 emisiones
- Si no hay riesgos, ejecuta dos instrucciones en dos pipelines para aumentar la cantidad de instrucciones por ciclo
- Predicción dinámica de saltos
- En la etapa de obtención de instrucciones usa dos búferes dedicados para predecir si habrá salto y si ese salto será tomado
- Esta unidad solo predice instrucciones de salto, y no incluye optimizaciones como ejecución condicional o la instrucción
IT
- MMU con TLB
- TrustZone
- A nivel de hardware divide los componentes en grupos secure y non-secure
- A nivel de software ejecuta un Trusted Execution Environment, un sistema operativo auxiliar aislado que maneja datos confidenciales
- Las transferencias de datos llevan etiquetas que indican si la transacción es secure o insecure
- NEON Media Processing Engine
- Un coprocesador que realiza operaciones vectoriales y de punto flotante
- Los aspectos reforzados en Cortex-A9 son los siguientes
- Soporte multinúcleo
- Es lo más evidente en la elección de Sony de un paquete de cuatro núcleos
- También fue parte del contexto que permitió que iPad 2 y iPhone 4s aparecieran con CPU de doble núcleo
- Ejecución fuera de orden mediante renombrado de registros
- Fue un cambio importante para ampliar el paralelismo a nivel de instrucción de ARM
- Pipeline de longitud variable de entre 8 y 11 etapas según la tarea
- Si la ejecución continúa hacia el coprocesador multimedia, el número de etapas puede aumentar aún más
- Soporte multinúcleo
- Sony añadió el Primelink Level 2 Cache Controller de ARM y una caché L2 compartida de 2 MB
- Primelink es un subsistema de caché que puede configurarse con distintos esquemas de asociatividad, desde mapeo directo hasta 16-way
- Más adelante ARM cambió la marca Primelink por CoreLink
ARMv7, Thumb-2, NEON/VFPv3
- El ARMv7 del Cortex-A9 es un superconjunto del ISA ARMv6, y sus principales adiciones son VFPv3, NEON, Security Extension y multiprocesamiento
- El ISA Thumb fue revisado a fondo como Thumb-2
- Thumb-2 agregó instrucciones de 32 bits para cubrir los huecos del Thumb original de 16 bits
- Frente al ISA ARM, ofrece mayor densidad de código y pierde la ejecución condicional, aunque compensa parte de eso con la instrucción dedicada
IT
- El Cortex-A9 de Kermit también implementa ThumbEE y Jazelle, pero es difícil pensar que las aplicaciones les dieran uso
- Incluso Dalvik, el intérprete de Java de Android, no usaba Jazelle/Thumb-2EE
- Para reducir la confusión del ISA, ARM creó Unified Assembler Language (UAL)
- UAL busca una sola base de código que pueda apuntar tanto a ARM como a Thumb-2
- En la práctica, es la unión de los opcodes de ARM y Thumb-2, y el ensamblador omite opcodes según la CPU de destino
- En lenguajes como C, Objective-C y C++, el compilador normalmente usa Thumb-2 como salida principal de ensamblado
- La razón es su buena densidad de código y la escasa penalización de rendimiento
- Las apps de smartphones y las aplicaciones de PSVita solían compilarse principalmente para Thumb-2 y no para ARM
MPE, VFPv3 y NEON para operaciones multimedia
- Dentro del Cortex-A9, el componente especialmente importante para PSVita es el Media Processing Engine (MPE)
- El MPE ejecuta dos conjuntos de instrucciones relacionados entre sí
- Vector Floating-Point v3 (VFPv3)
- Es el sucesor de VFPv2 para funciones de punto flotante
- Cumple con IEEE-754
- Ofrece instrucciones como
VCVTyVMOV - La variante exacta del Cortex-A9 es VFPv3-D32, con 32 registros de 64 bits
- ARMv7 eliminó el uso de instrucciones vectoriales y el Cortex-A9 no incluye esas instrucciones vectoriales antiguas
- NEONv1
- Es el verdadero conjunto de instrucciones vectoriales, también llamado ‘ARMv7 Advanced SIMD’
- Ofrece 16 registros de 128 bits, que pueden dividirse en 32 registros virtuales de 64 o 32 bits
- Los enteros pueden manejarse hasta 64 bits, pero los tipos de punto flotante no pueden superar los 32 bits
- Vector Floating-Point v3 (VFPv3)
- NEON y VFPv3 comparten el mismo archivo de registros, pero se tratan como ISA separados
- La razón de esta separación es que ninguno de los dos es funcionalmente completo por sí solo
- VFPv3 no soporta punto fijo
- NEON no cumple con el estándar IEEE 754
- Se interpreta que NEON apareció rápidamente como respuesta a Wireless MMX, la extensión SIMD propietaria de Intel XScale
- PDA avanzadas como la Dell Axim X51v usaban una CPU Intel XScale PXA270 compatible con ARMv5 ISA e incluían una extensión SIMD propietaria exclusiva de esa línea de CPU de Intel
- Ese dispositivo también incorporaba una GPU PowerVR MBX, relacionada con el chip gráfico de PSVita
Estructura de buses
- La especificación AMBA de ARM también se usa en el Cortex-A9 para conectar componentes
- El protocolo AXI de la tercera revisión de AMBA fue elegido para las interfaces internas de núcleo dentro del clúster MPCore
- La misma elección de AXI también puede verse en ARM11 y en Nintendo 3DS
- PSVita también usa Open Core Protocol (OCP) para toda la comunicación fuera del MPCore
- Es de la misma familia de protocolos que usó Nintendo 3DS al comunicarse con la GPU PICA
La evolución de ARM después de Cortex-A
- Después del Cortex-A9, la familia Cortex-A se dividió en cuatro categorías adicionales, desde máximo rendimiento hasta eficiencia energética, y la estructura de sucesión se volvió más compleja
- La numeración de modelo de cada CPU pasó a ser más difícil de seguir, pero no fue un gran problema porque esas CPU no eran productos vendidos por separado al usuario final común
- El siguiente gran hito de ARM fue ARMv8, que apareció en 2011 y se tratará más a fondo en el análisis de Nintendo Switch
Venezia: el acelerador multimedia de Sony
- Sony colocó junto al clúster ARM un gran acelerador para apoyar tareas relacionadas con juegos
- Este acelerador, al igual que el grupo Media Engine del PSP anterior, es una caja negra totalmente propietaria; en vez de manipularlo directamente, los programadores acceden a él a través del SDK oficial
- El acelerador se llama Venezia
- Es un paquete de CPU separado diseñado por Toshiba, socio cercano de Sony
- Fue creado para procesar imagen y sonido
- Su función se acerca a la de un Digital Signal Processor (DSP)
- También se vendía como chip sintetizable para dispositivos multimedia como reproductores de DVD
- Venezia tiene un carácter continuista respecto al Media Engine del PSP
Estructura interna de Venezia
- Venezia, al igual que el MPCore, tiene una estructura de clúster y está compuesto por 8 núcleos Media Processing Engine (MPE)
- Su velocidad de operación es de 266.7 MHz
- El nombre MPE de Toshiba coincide con la denominación del acelerador vectorial de ARM, pero se trata de silicio distinto
- Cada MPE incluye los siguientes elementos
- CPU propietaria Media-embedded Processor (MeP)
- MeP-c5, la quinta revisión
- Arquitectura basada en RISC de 32 bits
- 32 KB de caché L1
- Separados en 16 KB de instrucciones y 16 KB de datos
- 64 KB de memoria de propósito general
- Es el espacio donde la CPU MeP ejecuta el programa principal
- Controlador DMA para transferencias de memoria interna y externa
- Coprocesador de procesamiento de imagen IVC2
- Ejecuta instrucciones SIMD de 64 bits
- Puede procesar distintos grupos de datos, desde 8 enteros de 8 bits hasta 2 enteros de 32 bits
- Ofrece 2 registros acumuladores de 256 bits y, combinados con otras funciones, permite calcular dos operaciones al mismo tiempo
- CPU propietaria Media-embedded Processor (MeP)
- El clúster también incluye 256 KB de caché L2
- Una característica clave es su conjunto de instrucciones basado en Very Long Instruction Word (VLIW)
- Permite codificar varias instrucciones al mismo tiempo en una sola línea
- Venezia puede poner 3 instrucciones por línea: 2 para el coprocesador de imagen y 1 para la CPU
- Para empaquetar instrucciones con eficiencia se necesita un compilador excelente
- VLIW llamó la atención en los años 90 con implementaciones como Broadcom Firepath, Transmeta Crusoe e Intel Itanium, pero en las CPU de uso general no se consolidó por resultados decepcionantes en benchmarks
- Solo se puede acceder a Venezia mediante una API abstracta llamada Codec Engine
- Implementa tareas de codificación y decodificación de imagen y audio
- Por ejemplo, una instrucción de decodificación AVC descomprime datos de video codificados en Advanced Video Coding y produce un flujo sin comprimir que la GPU puede entender
Configuración de memoria de PSVita
- En la parte superior del apilado de Kermit se encuentra 512 MB de LPDDR2 SDRAM, usados como espacio de trabajo principal
- SDRAM significa Synchronous Dynamic RAM
- La DRAM cuesta menos de producir que la SRAM, pero tiene mayor latencia
- Por eso la caché de CPU se fabrica con SRAM, mientras que la memoria externa de propósito general se fabrica con DRAM
- La SDRAM sincroniza las transferencias con el reloj de la CPU para mejorar el rendimiento
- LPDDR2 significa Low Power Double Data Rate 2
- DDR transmite codificando el doble de información por ciclo
- LP indica una variante de bajo consumo, pensada sobre todo para teléfonos y laptops
- La especificación LPDDR2 se publicó en 2009 y opera a 1.2 V, menos que los 1.35 V de DDR3
- Por separado, hay 128 MB de Custom DRAM (CDRAM), conectados principalmente a la GPU
- CDRAM es una denominación interna y se refiere a SDR SDRAM tradicional
- A diferencia de DDR, es memoria Single Data Rate
- Como es un espacio dedicado cercano a la GPU, resulta adecuado para cargas gráficas intensivas
- Este bloque parece estar conectado por dos buses de 512 bits
- El SoC también incluye alrededor de 2.18 MB de SRAM distribuidos en varios bloques
- 2 MB Camera SRAM
- 32 KB SPAD32K
- 128 KB SPAD128K
- 4 KB SceCompatSharedSram
- 16 KB Scratchpad
- Estos bloques de SRAM están reservados para el sistema operativo
- Los 16 KB de Scratchpad coinciden con la misma capacidad de SRAM que ya existía en PSP
MIPS32 4k y retrocompatibilidad
- Dentro de Kermit también hay una CPU antigua MIPS32 4k
- Es la misma CPU que equipaba al PlayStation Portable
- El propósito de esta CPU es la retrocompatibilidad con juegos de PlayStation Portable y PlayStation 1
- Oficialmente, la CPU MIPS solo se usa para ese fin y no cumple funciones de coprocesador
- Kermit no incluye el Media Engine del PSP
- Como Media Engine era una caja negra, el software no necesitaba preocuparse por su implementación interna
- Venezia replica en su lugar la función de esa CPU conjunta
- En cuanto al resto del I/O, MIPS no está conectado físicamente al resto del hardware; solo lo está el Cortex-A9
- El software de emulación de PSP que corre en la CPU MIPS solicita servicios a la CPU ARM mediante un modelo RPC (Remote Procedure Call)
- Para este servicio de retrocompatibilidad también se reservan 64 MB de CDRAM
- Los 16 KB de Scratchpad mencionados antes están en realidad dentro de la CPU MIPS y se asignan al emulador de PSP
- Esto ayuda a igualar la configuración de memoria que esperan los juegos originales de PSP
Próximo alcance
- La siguiente parte abordará cómo VideoLogic evolucionó hasta convertirse en una GPU clave del mercado móvil y conducir a la GPU PowerVR MBX
1 comentarios
Opiniones en Hacker News
Siempre me encantaron la PSP original y la escena de homebrew y jailbreak que surgió de ella. Hace poco conseguí una PS Vita y estoy disfrutando juegos nativos y homebrew; me sorprende que el ecosistema homebrew siga siendo bastante activo.
También parece haber cierto potencial para portar juegos de Android. Ojalá Sony no hubiera dejado morir la PS Vita; en su momento se sentía como un dispositivo con muchísimo potencial.
Todavía sigo usando la Vita porque la Steam Deck no cabe en el bolsillo. Coincido en que se desperdició su potencial. Me hace imaginar cómo habría sido tener Shadow of the Colossus o Demon's Souls en Vita.
Así que parece que terminaron creyendo que su mal desempeño no se debía a errores evitables propios, sino al resultado inevitable de un cambio de mercado.
Pensándolo bien, creo que eso fue lo que me llevó a interesarme por la electrónica.
Había algunos títulos decentes, pero ninguno me voló la cabeza, y creo que al que más jugué fue Risk of Rain.
Hoy ya está suficientemente reconocida como un dispositivo portátil de emulación comparable con varias SBC pequeñas que se fabrican actualmente.
https://docs.libretro.com/guides/install-psv/
Hace unos años trabajé en el Media Embedded Processor (MeP) de Toshiba mencionado en este artículo. En Red Hat trabajamos en el toolchain para soportar la arquitectura configurable del procesador, que en ese momento era algo llamativo.
MeP no terminó dominando el mundo, pero me alegró enterarme de que estuvo dentro de la PS Vita.
Este artículo es solo uno dentro de una colección de textos de larga data.
https://www.copetti.org/writings/consoles/
Todavía no entiendo que Sony haya abandonado el mercado de consolas portátiles pese a estar en una posición única, incluso con una línea de teléfonos propia.
El Xperia Play llegó demasiado pronto, pero con la gente de hoy ya acostumbrada a gastar mucho dinero en teléfonos o en una Steam Deck, Sony podría haber creado un excelente sucesor de la Vita y el Xperia Play combinando un dispositivo Android con una tienda de juegos de Sony.
Sus organizaciones estaban demasiado aisladas entre sí. Como alguien a quien le gustaban bastante sus productos, viendo lo que sabemos hoy, no queda otra que reírse de lo mal que terminó todo.
En muchos sentidos estaba adelantado a su época, pero creo que el mercado de juegos de entonces no estaba tan listo ni tan bien adaptado a dispositivos portátiles como ahora.
Es realmente genial, y como coincidencia se siente casi destinado.
La semana pasada saqué mi Vita de un cajón y estoy jugando algunos ports portátiles de juegos de PS3 que no podía jugar porque no puedo conectar la PS3: Ratchet & Clank, Sly Cooper, God of War 1 y 2, y algunos indies.
Me sorprendió ver que la tienda todavía funciona, y compré los juegos de Armored Core de PS1. Me encanta este dispositivo. Fue tratado injustamente tanto por el mercado como por el soporte de Sony.
Me tienta hacerle jailbreak y probar crear algo de homebrew.
Tuve dos PS Vita y también reemplacé varias veces cosas como los botones.
Me gustaba la mezcla de juegos casuales y “serios” de la Vita, desde títulos casuales como PixelJunk Monsters hasta Killzone Mercenary, que era un shooter en primera persona de nivel consola en un dispositivo portátil. También tenía muchísimo contenido japonés como Akiba's Trip: Undead and Undressed, Danganronpa y Fate/Extella.
Me desconecté de PS Network, y como los juegos japoneses que me gustaban empezaron a salir en Steam, terminé deshaciéndome del equipo de Vita, pero sinceramente extraño PixelJunk Shooter.
Hace poco descargué compras antiguas. Eso sí, tengo que respaldar todo antes de que lo cierren por completo.
No sabía que la Vita incluía hardware de PSP. Pensaba que la retrocompatibilidad era por software, aunque Sony tiene una larga historia de enviar consolas con hardware de retrocompatibilidad.
Aunque para ese entonces ya existían la PS2 Slim y, más tarde, el emulador de PS1 por software para PS3.
https://israpps.github.io/PPC-Monitor/docs/Architecture%20Ov...
Este tipo de libro entra en la categoría de “nunca lo pedí ni lo esperaba, pero ahora que existe lo voy a leer de sol a sol”.
El autor también escribió varios otros libros sobre procesadores y arquitecturas embebidas y, sinceramente, es un trabajo muy necesario.
El mundo embebido está mucho más orientado a desarmar, diseccionar, explicar y razonar que el mundo del software. No sé por qué, pero la gente de este ámbito indaga casi todo, hasta sondear y reconstruir esquemas de circuitos. La escena reciente de modding de Nintendo muestra ese extremo.
Los ingenieros de reversa de software se aferran a licencias de IDA y plugins como si fueran una moda que ya se está apagando. Necesitamos más gente como Copetti.
Me encanta tanto esta serie de artículos como la Vita.
Algo que me pregunté durante un tiempo era si la Vita incluye tanto la CPU como la GPU de la PSP para la retrocompatibilidad, o si solo tiene la CPU y la GPU se mapea al lado de Vita.
Este artículo afirma lo primero, pero espero que en la siguiente parte se pueda saber más con fundamentos.
La Vita se adelantó a su época