PlayStation Vitaアーキテクチャ(パート1)
(copetti.org)- PSVitaは、従来型の携帯ゲーム機と急成長したモバイルSoCの流れが交差して生まれた機器であり、Sonyは馴染みある回路を使いつつもスマートフォンとは異なる製品アイデンティティを保とうとしていた
- 製品群は、当初のPSVita、OLEDをLCDに置き換えたSlim、据え置き型に近いPlayStation TVに分かれ、3つの派生モデルにはおおむね同じアーキテクチャ分析が当てはまる
- 中心チップKermitは、ToshibaのStacked Chip SoC方式により、CPU、GPU、約640MBのRAM、アクセラレータ、PSP互換回路を1つのパッケージに積層し、帯域幅と面積を改善した一方で、放熱設計はより難しくなった
- メインCPUは最大500MHzのクアッドコアARM Cortex-A9 MPCoreで、ARMv7-A、2MB共有L2キャッシュ、Thumb-2中心のコンパイル、NEON/VFPv3、TrustZone、アウトオブオーダー実行を備える
- マルチメディア処理はToshibaのVeneziaアクセラレータが担い、PSP/PS1下位互換はKermit内のMIPS32 4kと、予約されたCDRAM・Scratchpad・RPC構造によって処理される
PSVitaが置かれた市場と分析範囲
- PSVitaは、ビデオゲーム業界と急速に変化したモバイル分野が交差する製品である
- Sonyは、電話機能を超えてさまざまな機能を提供する低価格デバイスと競争しなければならなかった
- Sonyの新しい携帯型コンソールには当時の現代的な技術が盛り込まれ、回路構成は見慣れたものに見える一方で、スマートフォン市場に似すぎないようにする設計意図も見える
- 第8世代コンソールの分析は複雑さが増しているため、全体を一度に公開せず、セクションごとの公開方式で進められる
3種類のPSVitaモデル
- SonyはPSVitaのライフサイクル中に製品戦略を何度も変更し、3つの派生モデルを発売した
- Original PSVitaはシリーズ最初のモデルで、ときに「Fat」モデルとも呼ばれる
- Slimは同じアーキテクチャを維持しつつ、OLED画面をLCDに変更してコストを下げ、3G対応モデルは提供しなかった
- SlimではeMMCチップが大型化したが、増加量は52MBにとどまり、それでも内蔵1GBメモリーカードの提供が可能になった
- PlayStation TVは非携帯環境向けにFatのメインボードを調整した形態で、異なるI/O構成を露出している
- 3モデルにはおおむね同じアーキテクチャ説明が適用され、SlimとPlayStation TVのeMMC変更点は別途説明対象となる
Kermit: PSVitaの中核SoC
- Sonyはもともと初代PlayStation以降MIPS技術を積極採用していたが、モバイル市場でARMが強まりMIPS採用が減る中、PSVitaではARM CPUを選択した
- ToshibaはSonyの近しい製造パートナーとして、ARMライセンシーの役割を担った
- メインチップKermitは『The Muppets』から名を借りたもので、PSVitaのメインCPUを含む最大の回路ブロックである
- KermitはSystem-on-Chipだが、Toshibaの**Stacked Chip SoC(SCS)**製造モデルにより、多くのメモリとプロセッサを同一パッケージ内に統合している
- SCSは回路を横方向に外部接続する代わりに、上下方向へ積み重ねる方式である
- 直接的な効果は帯域幅の向上と面積の削減である
- その代わり、放熱設計はより複雑になる
- Kermitの主な構成は以下の通り
- クアッドコアARM Cortex-A9 MPCoreメインCPU
- Imagination Technologiesの**PowerVR SGX543MP4+**メインGPU
- 大型DSP、DMAコントローラ、セキュリティブロックなどの各種アクセラレータ
- 種類の異なる約640MB RAM
- PlayStation Portable互換用のMIPS CPUとGraphics Engine回路
ARM Cortex-A9 MPCore
- PSVitaのメインCPUはARM Cortex-A9 MPCoreで、4基のCortex-A9コアで構成されたクラスターである
- 動作周波数は最大500MHzで、同時期にクアッドコアA9を採用したSamsung Galaxy S IIIの1.4GHzより低い
- Cortex-A9はCortex-A8の後継CPUであり、PSVitaはNintendo 3DSと数か月違いで登場した
- 共通基盤となる機能は以下の通り
- ARMv7-A命令セット
- 64KB L1キャッシュ
- 32KBデータキャッシュと32KB命令キャッシュに分かれる
- コア間のデータキャッシュ一貫性はSnoop Control Unitが処理する
- 2-issue superscalar構造
- ハザードがなければ2本のパイプラインで2命令を実行し、クロックあたりの実行命令数を増やす
- 動的分岐予測
- 命令フェッチ段階で専用バッファ2つを使い、分岐の有無と分岐採用の有無を予測する
- このユニットは分岐命令のみを予測し、条件付き実行や
IT命令のような最適化は含まない
- TLBを備えたMMU
- TrustZone
- ハードウェアレベルでは構成要素をsecureとnon-secureのグループに分ける
- ソフトウェアレベルでは機密データを扱う隔離された補助OS、Trusted Execution Environmentを実行する
- データ転送にはsecureまたはinsecureトランザクションであることを示すタグが付与される
- NEON Media Processing Engine
- ベクトルおよび浮動小数点演算を行う補助プロセッサである
- Cortex-A9で強化された点は以下の通り
- マルチコア対応
- Sonyがクアッドコアパッケージを選んだ点に最も明確に表れている
- iPad 2やiPhone 4sがデュアルコアCPUで登場できた背景でもある
- レジスタリネーミングによるアウトオブオーダー実行
- ARMの命令レベル並列性を拡張した大きな変化である
- 処理内容に応じて8〜11段階に変化する可変長パイプライン
- マルチメディア補助プロセッサへ実行が引き継がれると、段数がさらに増える場合がある
- マルチコア対応
- SonyはARMのPrimelink Level 2 Cache Controllerと2MB共有L2キャッシュを追加した
- Primelinkはダイレクトマップから16-wayまで多様なキャッシュ連想方式を設定できるキャッシュサブシステムである
- ARMは後にPrimelinkブランドをCoreLinkへ変更した
ARMv7、Thumb-2、NEON/VFPv3
- Cortex-A9のARMv7はARMv6 ISAの上位集合であり、主な追加領域はVFPv3、NEON、Security Extension、マルチプロセッシングである
- Thumb ISAはThumb-2として大幅に改訂された
- Thumb-2は32ビット命令を追加し、従来の16ビットThumbの隙間を埋めた
- ARM ISAと比べるとコード密度が高く、条件付き実行は削られたが、専用の
IT命令で一部機能を補っている
- KermitのCortex-A9はThumbEEとJazelleも実装しているが、アプリケーションがこれを活用しているとは考えにくい
- AndroidのJavaインタプリタであるDalvikもJazelle/Thumb-2EEを使用していなかった
- ARMはISAの混乱を減らすために**Unified Assembler Language(UAL)**を作った
- UALはARMとThumb-2の両方を対象にできる単一コードベースを目標としている
- 実際にはARMとThumb-2 opcodeの和集合であり、アセンブラが対象CPUに応じてopcodeをスキップする
- C、Objective-C、C++のような言語では、コンパイラは主にThumb-2をデフォルトのアセンブリ出力として用いる
- 理由は効率的なコード密度と、性能ペナルティがまれであるためである
- スマートフォンアプリやPSVitaアプリケーションは主にARMではなくThumb-2でコンパイルされる
メディア演算のためのMPE、VFPv3、NEON
- Cortex-A9でPSVitaに特に重要な構成要素は**Media Processing Engine(MPE)**である
- MPEは相互に関連する2つの命令セットを実行する
- Vector Floating-Point v3(VFPv3)
- 浮動小数点機能のためのVFPv2の後継である
- IEEE-754に準拠する
VCVT、VMOVのような命令を提供する- Cortex-A9の正確なバリアントはVFPv3-D32で、64ビットレジスタ32本を含む
- ARMv7はベクトル命令の使用を廃止しており、Cortex-A9には該当するベクトル命令はない
- NEONv1
- 「ARMv7 Advanced SIMD」とも呼ばれる実際のベクトル命令セットである
- 128ビットレジスタ16本を提供し、これを64ビットまたは32ビットの仮想レジスタ32本に分割できる
- 整数は最大64ビットまで扱え、浮動小数点型は32ビットを超えられない
- Vector Floating-Point v3(VFPv3)
- NEONとVFPv3は同じレジスタファイルを共有するが、別個のISAとして扱われる
- 2つのISAが分離されている理由は、どちらも機能的に完全ではないためである
- VFPv3は固定小数点をサポートしない
- NEONはIEEE 754標準に準拠しない
- NEONは、Intel XScaleの独自SIMD拡張であるWireless MMXに対抗するため急ぎで登場したものと解釈できる
- Dell Axim X51vのような高級PDAは、ARMv5 ISA互換のIntel XScale PXA270 CPUを採用し、Intel CPU系でのみ可能な独自SIMD拡張を含んでいた
- この機器は、PSVitaのグラフィックスチップとも関係のあるPowerVR MBX GPUも搭載していた
バス構造
- ARMのAMBA仕様は、Cortex-A9でも構成要素の接続に使われている
- AMBA第3改訂のAXIプロトコルがMPCoreクラスター内部のコアインターフェースに選ばれた
- 同じAXIの採用はARM11やNintendo 3DSでも見られる
- PSVitaはMPCore外のすべての通信に**Open Core Protocol(OCP)**も使用する
- Nintendo 3DSがPICA GPUと通信するときに使ったプロトコルと同系統である
Cortex-A以降のARMの流れ
- Cortex-A9以降、Cortex-A系統は高性能重視からエネルギー効率重視まで4つの追加カテゴリに分かれ、継承構造はさらに複雑になった
- 各CPUのモデル番号は追いにくくなったが、これらのCPUは一般の最終ユーザー向けに個別販売される製品ではなかったため、大きな問題ではなかった
- ARMの次の大きな節目は2011年に登場したARMv8であり、Nintendo Switchの分析でさらに扱う予定である
Venezia: Sonyのマルチメディアアクセラレータ
- SonyはARMクラスターの隣に、ゲーム関連処理を支援する大型アクセラレータを搭載した
- このアクセラレータは旧PSPのMedia Engine群と同様、完全な独自ブラックボックスであり、プログラマが直接扱うのではなく公式SDKを通じてアクセスする
- アクセラレータの名称はVeneziaである
- Sonyの近しいパートナーであるToshibaが設計した独立CPUパッケージである
- 画像と音声の処理向けに作られた
- 機能はDigital Signal Processor(DSP)に近い
- DVDプレーヤーのようなマルチメディア機器向けの合成可能チップとしても販売された
- VeneziaはPSPのMedia Engineを継承する性格を持つ
Veneziaの内部構造
- VeneziaはMPCoreのようにクラスター構造を取り、8基のMedia Processing Engine(MPE)コアで構成される
- 動作周波数は266.7MHzである
- ToshibaのMPEという名称はARMのベクトルアクセラレータ名と重なるが、両者は別のシリコンである
- 各MPEは以下の要素を含む
- 独自のMedia-embedded Processor(MeP) CPU
- 第5改訂のMeP-c5
- 32ビットRISCベースのアーキテクチャ
- 32KB L1キャッシュ
- 命令用16KB、データ用16KBに分かれる
- 64KB汎用メモリ
- MeP CPUが主プログラムを実行する領域である
- 内部・外部メモリ転送用DMAコントローラ
- IVC2画像処理補助プロセッサ
- 64ビットSIMD命令を実行する
- 8ビット整数8個から32ビット整数2個まで、さまざまなデータ束を処理できる
- 256ビット累算レジスタ2本を提供し、他機能と組み合わせて2演算を同時に計算できる
- 独自のMedia-embedded Processor(MeP) CPU
- クラスターには256KB L2キャッシュもある
- 中核的特徴は**Very Long Instruction Word(VLIW)**ベースの命令セットである
- 1行に複数命令を同時にエンコードできる
- Veneziaは画像補助プロセッサ用2命令とCPU用1命令、合計3命令を1行に格納できる
- 効率的に命令を詰め込むには優れたコンパイラが必要となる
- VLIWは1990年代にBroadcom Firepath、Transmeta Crusoe、Intel Itaniumなどの実装で注目されたが、主流CPUではベンチマーク結果が期待外れで広く定着しなかった
- VeneziaへはCodec Engineという抽象API経由でのみアクセスできる
- 画像・音声のエンコードおよびデコード処理を実装する
- たとえばAVCデコード命令は、Advanced Video Codingでエンコードされた映像データを展開し、GPUが理解できる非圧縮ストリームを出力する
PSVitaのメモリ構成
- Kermitの積層最上部には512MB LPDDR2 SDRAMがあり、メインの作業領域として使われる
- SDRAMはSynchronous Dynamic RAMを意味する
- DRAMはSRAMより製造コストが低いが、レイテンシは大きい
- そのためCPUキャッシュはSRAMで構成し、外部の汎用メモリはDRAMで構成する
- SDRAMは転送をCPUクロックと同期させ、スループットを改善する
- LPDDR2はLow Power Double Data Rate 2を意味する
- DDRは1サイクルあたり2倍の情報をエンコードして転送する
- LPは低消費電力版を意味し、携帯電話やノートPCが主な採用先である
- LPDDR2仕様は2009年に公開され、DDR3の1.35Vより低い1.2Vで動作する
- 別途**128MB Custom DRAM(CDRAM)**があり、主にGPUへ接続されている
- CDRAMは内部名称であり、従来型のSDR SDRAMを指す
- DDRとは異なりSingle Data Rateメモリである
- GPU近傍の専用領域であるため、高負荷のグラフィックス処理に適している
- このブロックは2本の512ビットバスで接続されているように見える
- SoCには約2.18MB SRAMも複数ブロックに分かれて搭載されている
- 2MB Camera SRAM
- 32KB SPAD32K
- 128KB SPAD128K
- 4KB SceCompatSharedSram
- 16KB Scratchpad
- これらのSRAMブロックはOS用に予約されている
- 16KB ScratchpadはPSPにも存在したSRAM容量と一致する
MIPS32 4kと下位互換
- Kermit内部には旧来のMIPS32 4k CPUも追加搭載されている
- PlayStation Portableに搭載されていたものと同じCPUである
- このCPUの目的はPlayStation PortableおよびPlayStation 1ゲームとの下位互換である
- MIPS CPUは公式にはこの用途専用で、補助プロセッサとしての機能は持たない
- KermitにはPSPのMedia Engineは含まれていない
- Media Engineはブラックボックスだったため、ソフトウェアは内部実装を意識しない
- その共同CPUの機能はVeneziaが代替して再現する
- 残りのI/Oに関して、MIPSはハードウェアの他部分へ物理的に接続されておらず、接続されているのはCortex-A9のみである
- MIPS CPU上で動作するPSPエミュレーションソフトウェアは、ARM CPUに**RPC(Remote Procedure Call)**モデルでサービスを要求する
- この下位互換サービスには64MB CDRAMも予約される
- 前述の16KB Scratchpadは実際にはMIPS CPU内にあり、PSPエミュレータへ割り当てられる
- 本来PSPゲームが想定するメモリ構成を合わせるための要素である
次の範囲
- 次回パートでは、VideoLogicがモバイル市場の主要GPUへ発展し、PowerVR MBX GPUへ至る過程を扱う予定である
1件のコメント
Hacker Newsのコメント
初代PSPと、そこから生まれたHomebrew・Jailbreakシーンが本当に好きだった。最近PS Vitaを手に入れてネイティブゲームやHomebrewを楽しんでいるが、今でもHomebrewエコシステムがかなり活発で驚いている。
Androidゲームの移植もある程度可能そうだ。SonyがPS Vitaを見捨てなければよかったのに。当時は本当に大きなポテンシャルを持った機器だったように感じる
今でもSteam Deckはポケットに入らないのでVitaを使い続けている。ポテンシャルが無駄になったという点には同意する。Shadow of the ColossusやDemon's SoulsがVitaにあったらどうだっただろうと想像してしまう
そのため、不振は自分たちが避けられたはずの失策ではなく、市場変化による必然的な結果だと信じ込んでしまったのだろう
振り返ると、それが電子工学に興味を持つきっかけだった気がする
いいタイトルはいくつかあったが、大きく驚かされるものはなく、おそらくRisk of Rainを一番長く遊んだと思う
今では、現在生産されている各種小型SBCに比べても遜色ない携帯エミュレーション機として十分認められるレベルになっている。
https://docs.libretro.com/guides/install-psv/
数年前、この記事で触れられているToshibaの**Media Embedded Processor(MeP)**の仕事に関わっていた。Red Hat側で、当時としては珍しかったプロセッサの設定可能な構造をサポートするためにツールチェーン作業をしていた。
MePが世界を席巻することはなかったが、PS Vitaに入っていたと知ってうれしかった
この記事は、長く続いている記事群の1つにすぎない。
https://www.copetti.org/writings/consoles/
Sonyは携帯電話ラインまで持っているという独特の立場にあったのに、携帯ゲーム機市場を捨てたことが今でも理解できない。
Xperia Playは早すぎたが、今のように人々が携帯電話やSteam Deckに大金を払うことに慣れている状況なら、SonyはAndroid端末にSonyのゲームストアを組み合わせて、VitaとXperia Playの素晴らしい後継機を作れたのではないかと思う
組織同士があまりにもサイロ化していた。製品をかなり好きだった身としては、今知っていることを前提に見ると、物事がそこまで悪い方向に進んだのが笑うしかない
いろいろな意味で時代を先取りしていたが、当時のゲーム市場は今ほど携帯機器に合っていたり、準備ができていたりはしなかったのだと思う
本当に素晴らしいし、偶然というより運命のように感じる。
先週、引き出しからVitaを取り出して、PS3を接続できずに遊べていなかったいくつかのPS3ゲームの携帯版をプレイしている。Ratchet & Clank、Sly Cooper、God of War 1・2、いくつかのインディーゲームだ。
ストアがまだ動いているのを見て驚き、PS1のArmored Core作品を買った。この機器が本当に好きだ。市場からもSonyのサポートからも不当に扱われた。
JailbreakしてHomebrewも作ってみようかと惹かれている
PS Vitaを2台使い、操作ボタンのような部品も何度か交換した。
PixelJunk Monstersのようなカジュアルゲームから、携帯機でコンソール級の一人称シューティングだったKillzone Mercenaryまで、Vitaのカジュアルと「本格派」ゲームの組み合わせが好きだった。Akiba's Trip: Undead and Undressed、Danganronpa、Fate/Extellaのような日本コンテンツも山ほどあった。
PS Networkから切り離され、好きだった日本ゲームがSteamに出始めたのでVita機材は手放したが、PixelJunk Shooterは正直恋しい
最近も以前の購入済みアイテムをダウンロードした。完全に閉じる前に全部バックアップしておく必要はある
VitaにPSPハードウェアが入っているとは知らなかった。後方互換はソフトウェアベースだと思っていたが、Sonyにはコンソールに後方互換ハードウェアを載せて出荷してきた長い歴史があるのは確かだ。
ただ、その頃にはPS2 Slimや、その後のPS3向けソフトウェアPS1エミュレータもすでにあった
https://israpps.github.io/PPC-Monitor/docs/Architecture%20Ov...
こういう本は「頼んだ覚えも予想もしていなかったが、いざ出ると日の出から日没まで読んでしまう」類に入る。
著者はプロセッサや組み込みアーキテクチャに関する他の本も何冊も書いていて、正直、本当に必要な仕事だ。
組み込みの世界はソフトウェアの世界よりもずっと分解、解剖、説明、推論寄りだ。理由は分からないが、この分野の人たちは回路図までプローブして再構成し、ほとんどあらゆるものを掘り下げる。最近のNintendoモッディングシーンはその極端な例だ。
ソフトウェアのリバースエンジニアたちは、IDAライセンスとプラグインを流行遅れの名残のように握りしめている。Copettiのような人がもっと必要だ
この連載もVitaもどちらも本当に好きだ。
しばらく気になっていたのは、Vitaが後方互換のためにPSPのCPUとGPUを両方含んでいるのか、それともCPUだけでGPUはVita側にマッピングされるのかという点だった。
この記事は前者だと主張しているが、次回で根拠とともにさらに分かるとうれしい
Vitaは時代を先取りしていた