« ニンテンドーDSのアーキテクチャ (index)

ニンテンドーDSのアーキテクチャ

Chapter 3: CPU


目次

  1. ARMの新境地
    1. 転換点
  2. ニンテンドー製SoCのデビュー
    1. ARM7TDMI
    2. ARM946E-S
  3. インターコネクション
  4. メインメモリ
  5. 後方互換性
  6. 未知の力

任天堂の 従来の携帯機と同様に、 CPU NTR という名前の大きなチップを中心にシステムが構築されています。 'NTR' は、初代ニンテンドーDSのコードネームであるNitro(ニトロ)の略です。 このSoCは、ゲームボーイアドバンスから始まった ニンテンドー & ARMパートナーシップの後継作でもあります。

さて、新しいCPUを説明する前に、ニンテンドーDSの要素技術に影響を与えた、90年代後半におけるARMの進化を見てみましょう。

ARMの新境地

90年代半ば、ARMはモバイル市場 (携帯電話が「スマート」になる前) でのビジネスを急拡大していました。 しかし、ハイパフォーマンスコンピューティング の領域ではあまり上手くいかなかったようです。 ARM7は多くのモバイル機器で採用されていましたが、性能面ではApple (の個人用端末『Newton』) とAcorn (のRiscPC) が搭載する高速なCPUとソフトウェアには及びませんでした。 これは40Mhz以上の速度で動作するCPUを生産できないこと(MIPSは既に商用化していた) に加えて、64ビットに対応していないことも問題でした。 ビジネス全体にボトルネックが積み重なり始めていました。

Image
DECの「デジタル パーソナル ワークステーション」モデル 433au(1997年)、Alpha 21164A CPUを搭載。

それでも、ARM7ラインの商業化の間に、ARMは高性能市場への最初の試みとしてARM8という後継機の開発をすでに開始していました。 偶然にも、Digital Equipment Corporation (DEC)は、PDPやVAXシリーズ(いわゆる『ミニコンピュータ』)および高度なVMSオペレーティングシステムで歴史的に有名なアメリカの企業ですが、彼らは逆の問題を抱えていました。それは、高性能なソリューションに基づいた低消費電力のCPUを提供することに苦労しているということです。

そこで、DECはARMのライセンスモデルに目を付け、ARMから資料(命令セットとマイクロアーキテクチャ) を借りて新しいCPUを開発することにしました。

最終的に、DECはRISCベースのAlphaプロセッサのデータパス設計を採用し、ARMの助けを借りて、ARMのマイクロアーキテクチャと組み合わせました 。 このコラボレーションは、1996年にリリースされたパフォーマンスを重視したStrongARMCPUにつながりました。

Image
Acorn RiscPCのアップグレード版CPUの一部である233MHzのStrongARM CPU

StrongARMはARMベースの新しいCPUで、 を搭載します:

このチップは、以前のARMチップと同様に 3.3 Vの電源で動作できます。 実際、StrongARMは2ボルトを必要とし、消費電力はわずか1ワットです 。 対照的に、インテルの200 MHzペンティアムチップは3.5Vを引き、消費電力は最大で15.5Wです 。

予想通り、Acorn と Apple はこの新しいチップに感銘を受け、すぐに各端末のCPUアップグレード版と、さらなるNewtonモデルを出荷しました。 もちろん、DECの発明を利用して。

同じ年に、ARMは約束していたARM8ベースのCPUであるARM810をリリースしました。 それは比較的遅く、StrongARMに対して実用的な利点を提供しませんでした。 なので、このCPUが顧客の関心を惹くことはありませんでした。 この結果をうけて、ARMはモバイル市場向けのARM7ラインの改良に移行しました。 しかし、DECのCPUの可能性は非常に革新的であったため、ARM HoldingsはStrongARMの設計を吸収し 、次のCPUラインであるARM9を製造しました(これをニンテンドーDSが搭載しています)。

転換点

StrongARMのおかげで、ARMはハンドヘルド市場での地位を固め、MIPSSuperHを完全に置き換える有力な代替手段となりました。 それ以来、ARMはモバイルデバイス向けで最も採用されるアーキテクチャへの道を歩んでいました 。

DECにとって残念なことに、このCPUは1998年にCompaq社に買収されるまでの最後の成果となりました。 StrongARMの運命はインテルに委ねられ、その後インテルは新しい「Intel XScale」ラインの下で開発を継続しましたが、インテルは時折「低電力」x86 CPU(つまりIntel Atom)に集中するために部門を清算しました 。 15年後、インテルはモバイル市場でのチャンスを失っただけでなく、今やデスクトップ市場でARMと激しく競り合うことになりました。

ニンテンドー製SoCのデビュー

前述の進歩に加えて、CPU NTRはARM7TDMIARM946E-Sの2つの異なるARM CPUを使用した興味深いマルチプロセッサアーキテクチャをバンドルしています。 このデザインはARM ホールディングスが正式に マルチプロセッサソリューションをリリースする前に設計されました。 そのため、この二つのCPUの機能は少し風変わりと言えるかもしれない(現在の技術と比べると) 。

Image
CPU NTR チップ

このシステムは本シリーズで分析する最初の並列システムではありませんが、その設計は他のものとは大きく異なります。 例えば、 セガサターン が実装した"実験的"なマスタースレーブの仕組みや、 PS1 または N64 での"コプロセッサー"のアプローチとは異なります。 ニンテンドーDSには、専用のバスを持つ2台の独立したコンピュータが使われています。 この設計方法は 非対称マルチプロセシング と呼ばれ、結果としてこの CPU の依存関係は、このシステムの全体的な性能を左右します。

それでは2つのCPUを見てみましょう。

ARM7TDMI

Image
ARM7の構造とコンポーネント

より身近なものから説明しましょう。ARM7TDMIゲームボーイアドバンスで採用されているCPUですが、ニンテンドーDSでは34MHz以上(オリジナルの2倍) で動作します。 このプロセッサはオリジナルの特徴(特にThumb 命令セット) をすべて備えます。

この変更は、任天堂の技術者がI/Oポートの脇にI/Oの調停を担うためのARM7を設置したことに由来します。 実際、他のプロセッサはI/Oに直接接続されていません。 ご覧のとおり、これはシステムを担当する"メイン"プロセッサではなく、多くのコンポーネントにデータを渡すことによってメインの CPU をオフロードする"サブプロセッサ"です

ARM946E-S

Image
ARM9の構造とコンポーネント

これがニンテンドーDSの'メイン'CPU、ARM946E-Sです。 "StrongARM"ほどの速度ではありませんが、~ 67MHzで動作します。 ARM9シリーズの一部であるこのコアは、ARM7TDMIStrongARM の全ての特徴を継承しつつ、以下のような興味深い変更が施されています。

また、任天堂は以下のコンポーネントを追加しました。

このようなハードウェアですから、子供たちがこのコンソールをとても気に入るのも分かりますよね?

インターコネクション

ここまでで、2つのCPUが個別にどのように動作するかについてお話しました。 しかし、全体の動作には二つのCPUが常に協調して動作する必要があります。 そのために両方のCPUは、専用の FIFOユニット を使用して互いに直接"会話"します。このデータブロックは、双方向通信のために、2 つの 64 バイト キュー (16 エレメントまで) を保持します。

Image
FIFOユニットの表現

これは以下のように動作します: 送信側のCPU (効果的に他のメッセージを送信する必要があります) は 32 ビットのデータブロックをキューに入れ、受信側のCPUは、そのブロックをキューから引き出して必要な操作を行います。

キューに置かれている値は、いつでもCPU が手動で取得することができます (ポーリング) 。 この際には常に新しい値をチェックする必要があります(この動作はコストが高い)。 または、 割込みユニット を有効にして、キューに新しい値がある場合に受信側に通知することもできます。

メインメモリ

以前のRAMと同様に、さまざまな場所にRAMが配置されているため、アクセス速度別にメモリにアクセスすることができます。 まとめると、以下の汎用メモリが使用されています。

Image
本コンソールのRAMモデル

後方互換性

アーキテクチャはゲームボーイアドバンスとは大きく異なりますが、ネイティブ互換性を持っています。

DSがGBAとして振舞うために、 AGB互換モード でコンソールを設定するソフトウェアルーチンのセットが含まれています。 これによりARM9は停止し、ほとんどの'固有'ハードウェアを無効にし、16.78MHzに低下したスピードでARM7にリダイレクトされます。 最後に、ARM7は(オリジナルのゲームボーイアドバンスのように) GamePakカートリッジをブートストラップするオリジナルのAGBBIOSを起動します。 このモードには、元のコンソールにはない特徴もあります。 例えば、オリジナルの方が画面解像度が大きいため、ゲームを黒い余白付きで表示します。(解像度の話は次のセクションで説明します)。 また、GBAのゲームをDSの二つの画面の内のどちらに表示するかをユーザが設定できます。

一度GBAモードになったら元のモードに戻ることはありません。ハードウェア全体を再起動するには、コンソールをリセットする必要があります。

未知の力

非常に多くの洗練されたコンポーネントが、単一の安価なチップに取り付けられていますが、この複雑さが問題を引き起こす可能性があります。

ARM9の説明から始めましょう。このCPUはARM7の2倍の速度で動作しますが、ほとんど(全てではない) のI/OはARM7に依存しています。 そのため、ARM9はARM7からの応答を待つ間はずっと停止していなければなりません。 さらに、ARM9の外部バスは、その半分の速度で動作するため、これらが大きなボトルネックになります。

また、メインメモリバスは 16ビット幅です。 したがって、CPUが1ワード(32ビット幅) をメモリからフェッチする必要がある場合、 インターフェイスは、1ワードが揃うまで最大3サイクル"待機"することでCPUを停止します。 最悪の場合、つまりメモリアクセスがシーケンシャルではない場合には、1回のアクセスごとに待機が発生することになってしまいます。 この問題は、命令がフェッチされたときにも発生します(残念ながら、ARM はシーケンシャルなオペコードのフェッチをサポートしていません)。しかも、Thumbコードにも影響します(16ビットのフェッチはすべて32ビットブロックのフェッチとして行われるため) 。 一方、いくつかのソースがそれを呼び出すことでキャッシュとTCMを最大限に活用することによって、この「ペナルティ」を軽減することができます。

要するに、最悪の場合にはARM9の動作クロック66MHzが実質的にわずか8MHzに制限されます。 つまり、プログラムがキャッシュとTCMを全く有効に動かさない場合です。

詳細については、Martin Korthのドキュメント、具体的には'DS Memory Timings'セクションをチェックすることをお勧めします。


Previous: 2. クイックスタート

Next: 4. グラフィックス


Rodrigo Copetti © 2026 RSS Feed

モダン版に切り替え

ホーム · 文章 · サポート · 著者について · ウェブサイトについて