Architecture de la PlayStation Vita (partie 1)
(copetti.org)- La PSVita est un appareil né de la rencontre entre la console portable traditionnelle et l’essor rapide des SoC mobiles ; Sony a cherché à utiliser des circuits familiers tout en conservant une identité produit distincte de celle des smartphones
- La gamme se divise à l’origine entre la PSVita, la Slim qui remplace l’écran OLED par un LCD, et la PlayStation TV plus proche d’un appareil de salon ; la même analyse architecturale s’applique globalement aux trois variantes
- La puce centrale, Kermit, adopte l’approche SoC à puces empilées de Toshiba pour regrouper dans un même package le CPU, le GPU, environ 640 Mo de RAM, des accélérateurs et la logique de compatibilité PSP, améliorant la bande passante et l’encombrement au prix d’une dissipation thermique plus difficile
- Le CPU principal est un ARM Cortex-A9 MPCore quadricœur cadencé jusqu’à 500 MHz, avec ARMv7-A, 2 Mo de cache L2 partagé, compilation orientée Thumb-2, NEON/VFPv3, TrustZone et exécution hors ordre
- Les tâches multimédias sont prises en charge par l’accélérateur Venezia, tandis que la rétrocompatibilité PSP/PS1 repose sur un MIPS32 4k intégré à Kermit et sur une structure dédiée de CDRAM, Scratchpad et RPC
Marché visé par la PSVita et périmètre de l’analyse
- La PSVita est un produit à la croisée de l’industrie du jeu vidéo et du secteur mobile en pleine mutation
- Sony devait affronter des appareils bon marché offrant bien plus que la seule téléphonie
- La nouvelle console portable de Sony embarquait des technologies modernes pour l’époque, avec une organisation des circuits familière mais aussi une volonté de ne pas ressembler au marché des smartphones
- L’analyse des consoles de 8e génération étant plus complexe, elle est publiée par sections plutôt qu’en une seule fois
Les trois modèles de PSVita
- Sony a plusieurs fois fait évoluer sa stratégie produit au cours de la vie de la PSVita, lançant trois variantes
- La PSVita originale est le premier modèle de la série, parfois appelé modèle « Fat »
- La Slim conserve la même architecture tout en remplaçant l’écran OLED par un LCD afin de réduire les coûts, sans proposer de variante compatible 3G
- La Slim embarque une puce eMMC plus grande, mais le gain ne dépasse que 52 Mo, ce qui a néanmoins permis d’offrir une carte mémoire interne de 1 Go
- La PlayStation TV est une adaptation de la carte mère de la Fat pour un usage non portable, avec une configuration d’E/S différente
- La même description architecturale s’applique globalement aux trois modèles, tandis que les changements d’eMMC sur la Slim et la PlayStation TV feront l’objet d’explications séparées
Kermit : le SoC central de la PSVita
- Depuis la PlayStation d’origine, Sony avait largement adopté les technologies MIPS, mais avec la montée en puissance d’ARM sur le marché mobile et le recul de MIPS, la PSVita a finalement retenu un CPU ARM
- Toshiba, partenaire industriel proche de Sony, joue ici le rôle de licencié ARM
- La puce principale, Kermit, tire son nom de « The Muppets » et constitue le plus gros bloc logique contenant le CPU principal de la PSVita
- Kermit est un System-on-Chip, mais grâce au modèle de fabrication Stacked Chip SoC (SCS) de Toshiba, il combine beaucoup de mémoire et de processeurs dans un même package
- Le SCS empile les circuits verticalement au lieu de les relier latéralement vers l’extérieur
- L’effet direct est une hausse de la bande passante et une réduction de l’encombrement
- En contrepartie, la conception thermique devient plus complexe
- Les principaux composants de Kermit sont les suivants
- Un CPU principal ARM Cortex-A9 MPCore quadricœur
- Un GPU principal PowerVR SGX543MP4+ d’Imagination Technologies
- Plusieurs accélérateurs, dont un gros DSP, des contrôleurs DMA et des blocs de sécurité
- Environ 640 Mo de RAM répartis en plusieurs types
- Un CPU MIPS et une logique Graphics Engine pour la compatibilité PlayStation Portable
ARM Cortex-A9 MPCore
- Le CPU principal de la PSVita est un ARM Cortex-A9 MPCore, c’est-à-dire un cluster composé de quatre cœurs Cortex-A9
- Sa fréquence atteint 500 MHz au maximum, bien moins que les 1,4 GHz du Samsung Galaxy S III, lui aussi équipé d’un A9 quadricœur à la même époque
- Le Cortex-A9 succède au Cortex-A8, et la PSVita est arrivée quelques mois à peine après la Nintendo 3DS
- Ses fonctions de base communes sont les suivantes
- Jeu d’instructions ARMv7-A
- 64 Ko de cache L1
- Répartis entre 32 Ko de cache de données et 32 Ko de cache d’instructions
- La cohérence des caches de données entre les cœurs est gérée par la Snoop Control Unit
- Architecture superscalaire 2-issue
- En l’absence de conflit, deux instructions peuvent être exécutées dans deux pipelines afin d’augmenter le nombre d’instructions traitées par cycle
- Prédiction dynamique de branchement
- Deux tampons dédiés sont utilisés dès l’étape de fetch pour prédire la présence d’un branchement et son éventuelle prise
- Cette unité ne prédit que les instructions de branchement ; elle n’inclut pas des optimisations comme l’exécution conditionnelle ou l’instruction
IT
- MMU avec TLB
- TrustZone
- Au niveau matériel, les composants sont divisés entre groupes secure et non-secure
- Au niveau logiciel, un environnement d’exécution de confiance isole un système auxiliaire chargé des données sensibles
- Les transferts de données portent un tag indiquant s’il s’agit d’une transaction secure ou insecure
- NEON Media Processing Engine
- Un coprocesseur chargé des opérations vectorielles et en virgule flottante
- Les améliorations apportées par le Cortex-A9 sont les suivantes
- Prise en charge du multicœur
- C’est l’élément le plus visible dans le choix de Sony d’un package quadricœur
- C’est aussi ce qui a permis à l’iPad 2 et à l’iPhone 4s d’arriver avec des CPU double cœur
- Exécution hors ordre grâce au renommage de registres
- Une évolution majeure qui étend le parallélisme au niveau des instructions chez ARM
- Pipeline de longueur variable allant de 8 à 11 étages selon la charge
- Le nombre d’étages peut encore augmenter lorsque l’exécution se prolonge dans le coprocesseur multimédia
- Prise en charge du multicœur
- Sony a ajouté le Primelink Level 2 Cache Controller d’ARM ainsi qu’un cache L2 partagé de 2 Mo
- Primelink est un sous-système de cache configurable, du direct-mapped jusqu’au 16-way
- ARM a ensuite renommé la marque Primelink en CoreLink
ARMv7, Thumb-2, NEON/VFPv3
- L’ARMv7 du Cortex-A9 est un sur-ensemble de l’ISA ARMv6 ; ses principaux ajouts portent sur VFPv3, NEON, la Security Extension et le multiprocessing
- L’ISA Thumb a été profondément révisé en Thumb-2
- Thumb-2 ajoute des instructions 32 bits afin de combler les lacunes du Thumb 16 bits d’origine
- Par rapport à l’ISA ARM, la densité de code est meilleure ; l’exécution conditionnelle a disparu, mais une partie de cette fonctionnalité est compensée par l’instruction dédiée
IT
- Le Cortex-A9 de Kermit implémente aussi ThumbEE et Jazelle, mais il est peu probable que des applications en tirent réellement parti
- Même Dalvik, l’interpréteur Java d’Android, n’utilisait ni Jazelle ni Thumb-2EE
- ARM a introduit le Unified Assembler Language (UAL) pour réduire la confusion autour des ISA
- UAL vise une base de code unique pouvant cibler à la fois ARM et Thumb-2
- En pratique, il s’agit de l’union des opcodes ARM et Thumb-2, l’assembleur ignorant ceux qui ne correspondent pas au CPU visé
- Dans des langages comme C, Objective-C ou C++, les compilateurs émettent principalement du Thumb-2 comme assembleur de sortie par défaut
- La raison tient à une bonne densité de code et à une pénalité de performance rare
- Les applis smartphone comme les applications PSVita sont donc majoritairement compilées en Thumb-2 plutôt qu’en ARM
MPE, VFPv3 et NEON pour les traitements multimédias
- Sur le Cortex-A9, un composant particulièrement important pour la PSVita est le Media Processing Engine (MPE)
- Le MPE exécute deux jeux d’instructions liés
- Vector Floating-Point v3 (VFPv3)
- Il succède au VFPv2 pour les fonctions en virgule flottante
- Il est conforme à la norme IEEE-754
- Il fournit des instructions comme
VCVTetVMOV - La variante exacte du Cortex-A9 est VFPv3-D32, avec 32 registres 64 bits
- ARMv7 a abandonné l’usage des instructions vectorielles dans VFP, et le Cortex-A9 ne les inclut donc pas
- NEONv1
- Le véritable jeu d’instructions vectorielles, également appelé « ARMv7 Advanced SIMD »
- Il fournit 16 registres 128 bits, pouvant être découpés en 32 registres virtuels 64 bits ou 32 bits
- Les entiers peuvent aller jusqu’à 64 bits, tandis que les types flottants ne dépassent pas 32 bits
- Vector Floating-Point v3 (VFPv3)
- NEON et VFPv3 partagent le même fichier de registres, mais restent traités comme des ISA distinctes
- Cette séparation s’explique par le fait qu’aucune des deux ISA n’est fonctionnellement complète
- VFPv3 ne prend pas en charge le point fixe
- NEON n’est pas conforme à la norme IEEE 754
- NEON est généralement interprété comme une réponse rapide à Wireless MMX, l’extension SIMD propriétaire d’Intel XScale
- Des PDA haut de gamme comme le Dell Axim X51v utilisaient un CPU Intel XScale PXA270 compatible ARMv5, avec une extension SIMD propriétaire réservée à la gamme CPU d’Intel
- Cet appareil embarquait aussi un GPU PowerVR MBX, lié à la lignée graphique de la PSVita
Structure des bus
- La spécification AMBA d’ARM sert aussi à relier les composants du Cortex-A9
- Le protocole AXI de la troisième révision d’AMBA a été retenu pour les interfaces internes au cluster MPCore
- On retrouve ce même choix d’AXI sur l’ARM11 et sur la Nintendo 3DS
- La PSVita utilise aussi le Open Core Protocol (OCP) pour toutes les communications hors du MPCore
- C’est la même famille de protocoles que celle utilisée par la Nintendo 3DS pour communiquer avec le GPU PICA
L’évolution d’ARM après les Cortex-A
- Après le Cortex-A9, la famille Cortex-A s’est ramifiée en quatre catégories supplémentaires, des modèles les plus performants à ceux axés sur l’efficacité énergétique, rendant l’arbre de succession plus complexe
- La numérotation des modèles de CPU est devenue difficile à suivre, mais cela restait peu problématique puisque ces CPU n’étaient pas vendus séparément au grand public
- Le grand jalon suivant pour ARM a été ARMv8, apparu en 2011, qui sera davantage abordé dans l’analyse de la Nintendo Switch
Venezia : l’accélérateur multimédia de Sony
- À côté du cluster ARM, Sony a intégré un gros accélérateur chargé d’assister les tâches liées au jeu
- Comme l’ancien groupe Media Engine de la PSP, cet accélérateur est une boîte noire entièrement propriétaire ; les programmeurs n’y accèdent pas directement mais via le SDK officiel
- Son nom est Venezia
- Il s’agit d’un package CPU distinct conçu par Toshiba, partenaire proche de Sony
- Il a été créé pour le traitement de l’image et du son
- Sa fonction se rapproche de celle d’un Digital Signal Processor (DSP)
- Il est aussi commercialisé comme puce synthétisable pour des appareils multimédias tels que les lecteurs DVD
- Venezia s’inscrit dans la continuité du Media Engine de la PSP
Structure interne de Venezia
- Comme le MPCore, Venezia adopte une structure en cluster composée de 8 cœurs Media Processing Engine (MPE)
- Sa fréquence est de 266,7 MHz
- Le nom MPE utilisé par Toshiba entre en collision avec celui de l’accélérateur vectoriel d’ARM, mais il s’agit de deux blocs de silicium différents
- Chaque MPE comprend les éléments suivants
- Un CPU propriétaire Media-embedded Processor (MeP)
- Dans sa cinquième révision, le MeP-c5
- Une architecture 32 bits de type RISC
- 32 Ko de cache L1
- Séparés en 16 Ko d’instructions et 16 Ko de données
- 64 Ko de mémoire généraliste
- C’est l’espace dans lequel le CPU MeP exécute le programme principal
- Un contrôleur DMA pour les transferts de mémoire internes et externes
- Un coprocesseur de traitement d’image IVC2
- Il exécute des instructions SIMD 64 bits
- Il peut traiter des groupes de données allant de 8 entiers 8 bits à 2 entiers 32 bits
- Il fournit 2 registres accumulateurs 256 bits et peut, combiné à d’autres fonctions, calculer deux opérations simultanément
- Un CPU propriétaire Media-embedded Processor (MeP)
- Le cluster embarque aussi 256 Ko de cache L2
- Sa caractéristique essentielle est un jeu d’instructions basé sur le Very Long Instruction Word (VLIW)
- Plusieurs instructions peuvent être encodées simultanément sur une même ligne
- Venezia peut placer au total 3 instructions par ligne : 2 pour le coprocesseur d’image et 1 pour le CPU
- Pour empaqueter efficacement les instructions, il faut un excellent compilateur
- Le VLIW a connu une forte attention dans les années 1990 avec des implémentations comme Broadcom Firepath, Transmeta Crusoe ou Intel Itanium, mais il ne s’est pas imposé dans les CPU grand public en raison de résultats décevants en benchmark
- On n’accède à Venezia qu’au travers d’une API abstraite appelée Codec Engine
- Elle implémente des tâches d’encodage et de décodage d’image et d’audio
- Par exemple, une commande de décodage AVC décompresse des données vidéo encodées en Advanced Video Coding pour produire un flux non compressé compréhensible par le GPU
Organisation mémoire de la PSVita
- Au sommet de l’empilement de Kermit se trouvent 512 Mo de SDRAM LPDDR2, utilisés comme espace de travail principal
- SDRAM signifie Synchronous Dynamic RAM
- La DRAM coûte moins cher à produire que la SRAM, mais sa latence est plus élevée
- C’est pourquoi les caches CPU sont en SRAM, tandis que la mémoire externe à usage général est en DRAM
- La SDRAM synchronise les transferts avec l’horloge du CPU afin d’améliorer le débit
- LPDDR2 signifie Low Power Double Data Rate 2
- DDR transmet deux fois plus d’informations par cycle
- LP désigne la variante basse consommation, principalement adoptée dans les téléphones et les ordinateurs portables
- La spécification LPDDR2 a été publiée en 2009 et fonctionne à 1,2 V, contre 1,35 V pour la DDR3
- En complément, il y a 128 Mo de Custom DRAM (CDRAM), principalement reliés au GPU
- CDRAM est un nom interne qui désigne en réalité de la SDR SDRAM traditionnelle
- Contrairement à la DDR, il s’agit d’une mémoire Single Data Rate
- Cet espace dédié, proche du GPU, convient bien aux charges graphiques intensives
- Ce bloc semble connecté par deux bus de 512 bits
- Le SoC intègre aussi environ 2,18 Mo de SRAM répartis en plusieurs blocs
- 2 Mo de Camera SRAM
- 32 Ko de SPAD32K
- 128 Ko de SPAD128K
- 4 Ko de SceCompatSharedSram
- 16 Ko de Scratchpad
- Ces blocs de SRAM sont réservés au système d’exploitation
- Les 16 Ko de Scratchpad correspondent à la capacité SRAM déjà présente sur la PSP
MIPS32 4k et rétrocompatibilité
- Kermit intègre aussi un ancien CPU MIPS32 4k
- Il s’agit du même CPU que celui embarqué dans la PlayStation Portable
- Le but de ce CPU est d’assurer la rétrocompatibilité avec les jeux PlayStation Portable et PlayStation 1
- Officiellement, le CPU MIPS n’est utilisé qu’à cette fin et ne sert pas de coprocesseur auxiliaire
- Kermit n’intègre pas le Media Engine de la PSP
- Comme le Media Engine était une boîte noire, les logiciels n’avaient pas à se soucier de son implémentation interne
- Les fonctions de ce CPU compagnon sont reproduites à la place par Venezia
- Pour le reste des E/S, le MIPS n’est pas physiquement relié au reste du matériel ; seul le Cortex-A9 l’est
- Le logiciel d’émulation PSP exécuté sur le CPU MIPS demande des services au CPU ARM via un modèle RPC (Remote Procedure Call)
- Ce service de rétrocompatibilité se voit aussi réserver 64 Mo de CDRAM
- Le Scratchpad de 16 Ko mentionné plus haut se trouve en réalité dans le CPU MIPS et est alloué à l’émulateur PSP
- Il sert à reproduire l’organisation mémoire attendue par les jeux PSP d’origine
Suite
- La prochaine partie abordera le chemin qui a conduit VideoLogic à devenir un acteur majeur du GPU mobile, jusqu’au GPU PowerVR MBX
1 commentaires
Avis sur Hacker News
J’aimais vraiment la PSP d’origine et toute la scène homebrew/jailbreak qui en est sortie. J’ai récemment récupéré une PS Vita pour profiter de jeux natifs et de homebrew, et je suis surpris de voir que l’écosystème homebrew est encore assez actif
Il semble même y avoir un certain potentiel pour porter des jeux Android. J’aurais aimé que Sony ne laisse pas mourir la PS Vita : à l’époque, elle donnait vraiment l’impression d’être une machine au potentiel énorme
Aujourd’hui encore, le Steam Deck ne rentre pas dans la poche, donc je continue d’utiliser la Vita. Je suis d’accord : son potentiel a été gâché. J’imagine ce qu’auraient pu donner Shadow of the Colossus ou Demon's Souls sur Vita
Ils ont donc fini par croire que ses mauvais résultats n’étaient pas dus à des erreurs évitables de leur part, mais à une conséquence inévitable de l’évolution du marché
Avec le recul, je crois que c’est ce qui m’a donné envie de m’intéresser à l’électronique
Il y avait quelques bons titres, mais rien qui m’ait vraiment bluffé ; je crois que Risk of Rain est probablement celui auquel j’ai le plus joué
Aujourd’hui, elle est largement reconnue comme une machine d’émulation portable capable de rivaliser avec plusieurs petits SBC actuellement produits
https://docs.libretro.com/guides/install-psv/
Il y a quelques années, j’ai travaillé sur le Media Embedded Processor (MeP) de Toshiba mentionné dans cet article. Chez Red Hat, nous avons travaillé sur la toolchain pour prendre en charge l’architecture configurable de ce processeur, assez étonnante pour l’époque
Le MeP n’a pas conquis le monde, mais j’ai été content d’apprendre qu’il s’était retrouvé dans la PS Vita
Cet article n’est qu’un élément d’une longue série
https://www.copetti.org/writings/consoles/
Je ne comprends toujours pas que Sony ait abandonné le marché des consoles portables, alors qu’ils étaient dans une position unique avec aussi une gamme de téléphones
Le Xperia Play est arrivé trop tôt, mais maintenant que les gens sont habitués à dépenser beaucoup d’argent dans des téléphones ou un Steam Deck, Sony aurait pu faire un excellent successeur à la Vita et au Xperia Play en associant une boutique de jeux Sony à un appareil Android
Les différentes organisations étaient beaucoup trop cloisonnées. En tant que personne qui aimait pas mal leurs produits, avec ce qu’on sait aujourd’hui, on ne peut que trouver absurde que les choses aient aussi mal tourné
Il était en avance sur son temps à bien des égards, mais le marché du jeu de l’époque n’était sans doute pas aussi adapté aux appareils portables, ni aussi prêt pour eux, qu’aujourd’hui
C’est vraiment chouette, et la coïncidence a presque quelque chose de providentiel
La semaine dernière, j’ai ressorti ma Vita d’un tiroir et je joue à des portages portables de quelques jeux PS3 auxquels je ne pouvais pas jouer faute de pouvoir brancher ma PS3 : Ratchet & Clank, Sly Cooper, God of War 1 et 2, ainsi que quelques jeux indés
J’ai été surpris de voir que la boutique fonctionne encore, et j’ai acheté les jeux PS1 Armored Core. J’aime vraiment cette machine. Elle a été injustement traitée, aussi bien par le marché que par le support de Sony
Je suis tenté de la jailbreaker et de me lancer dans du homebrew
J’ai eu deux PS Vita, et j’ai aussi remplacé plusieurs fois des éléments comme les boutons
J’aimais le mélange de jeux casual et plus « sérieux » de la Vita, de jeux casual comme PixelJunk Monsters à Killzone Mercenary, qui était un FPS de niveau console sur une portable. Il y avait aussi énormément de contenu japonais comme Akiba's Trip: Undead and Undressed, Danganronpa ou Fate/Extella
Quand elle a été coupée du PS Network et que les jeux japonais que j’aimais ont commencé à sortir sur Steam, je me suis séparé de mon matériel Vita, mais honnêtement, PixelJunk Shooter me manque
J’ai encore téléchargé d’anciens achats récemment. Il faudra tout de même tout sauvegarder avant que ça ne disparaisse complètement
Je ne savais pas que la Vita embarquait du matériel PSP. Je pensais que la rétrocompatibilité était logicielle, même si Sony a une longue histoire de consoles livrées avec du matériel de rétrocompatibilité
Cela dit, à cette époque, il existait déjà la PS2 Slim et, plus tard, l’émulateur PS1 logiciel pour PS3
https://israpps.github.io/PPC-Monitor/docs/Architecture%20Ov...
Ce genre de livre entre dans la catégorie « je ne l’avais pas demandé et je ne m’y attendais pas, mais maintenant qu’il existe, je vais le lire du lever au coucher du soleil »
L’auteur a aussi écrit plusieurs autres livres sur les processeurs et les architectures embarquées, et franchement, c’est un travail vraiment nécessaire
Le monde de l’embarqué penche bien plus que celui du logiciel vers le démontage, la dissection, l’explication et l’inférence. Je ne sais pas pourquoi, mais les gens de ce milieu vont jusqu’à sonder et reconstruire les schémas, et fouillent presque tout. La scène du modding Nintendo récente en montre l’extrême
Les reverse engineers logiciel s’accrochent à leurs licences IDA et à leurs plugins comme à une mode en fin de vie. Il faudrait plus de gens comme Copetti
J’adore à la fois cette série d’articles et la Vita
Une question que je me posais depuis un moment était de savoir si, pour la rétrocompatibilité, la Vita incluait à la fois le CPU et le GPU de la PSP, ou seulement le CPU avec le GPU mappé côté Vita
L’article affirme que c’est la première option, mais j’espère en apprendre davantage avec des éléments à l’appui dans la prochaine partie
La Vita était en avance sur son temps