R3000は、MIPS I命令セットアーキテクチャを採用した
マイクロプロセッサです。1988年6月にMIPS社によって発表され、R2000に続くMIPSアーキテクチャの重要な実装として、コンピューティング業界に大きな影響を与えました。
R3000の構成と特徴
R3000は、
CPUコアと、メモリ管理や例外処理を担うCP0から構成されていました。浮動小数点演算ユニット(
FPU)は、R3010という別チップとして提供され、R3000と連携して動作しました。オンチップ
キャッシュメモリは搭載されていませんでしたが、命令キャッシュとデータキャッシュのコントローラを備え、最大256KBの外部
キャッシュメモリとの接続をサポートしていました。動作周波数は20MHz~40MHzで、主に30MHzや33MHzで運用されることが多かったようです。1.2μm
CMOSプロセスで製造され、チップサイズは56mm²、トランジスタ数は11万5千個でした。
MIPS社はR3000の設計に特化し、製造はIDT、LSIロジック、NEC、
シーメンス、
東芝などの半導体メーカーに委託しました。そのため、様々なメーカーからR3000プロセッサが提供されていました。
アーキテクチャ詳細
R3000は、最大4つのコプロセッサをサポートするアーキテクチャでしたが、一般的にはCP0とCP1が使用されました。CP0はメモリ管理ユニットと例外処理ユニットを統合し、CP1は
FPUの制御を担っていました。命令長は32ビット固定で、命令フェッチとデコードをシンプルにする設計でした。5段パイプラインを採用し、ALUに加えて乗除算ユニットなどを備えた
実行ユニットを持っていました。汎用レジスタは32ビット×32本、乗除算結果格納用レジスタを32ビット×2本備えていました。また、プログラムカウンタも備えています。
PlayStationでは、未使用だったCP2にジオメトリエンジン(GTE)としてベクトル演算ユニットを割り当てて使用していました。これは、ゲーム処理における3Dグラフィックスの高速化に貢献しました。
CP0の機能
CP0は、以下の重要な機能を備えていました。
ユーザモードとカーネルモードの切り替え
例外発生時の原因情報の保持
メモリ管理機能:仮想物理アドレス変換のためのTLB(Translation Lookaside Buffer)を直接ソフトウェアで制御する機能を備えていました。64エントリのCAM(連想メモリ)で構成され、各エントリは4KBのページをマップします。そのうち8エントリは固定エントリとしてOSが使用し、残りはランダムエントリとして動的に使用されます。TLBミスが発生した場合は、カーネルがソフトウェアで処理を行います。これは、他のアーキテクチャではハードウェアで処理されることが多い機能です。
TLBを使用しないメモリアクセス:kseg1領域をメモリマップドI/Oとして使用することで、TLBを使用せずにメモリアクセスを行うことができました。
キャッシュメモリ管理:キャッシュメモリはTLBの外側に位置し、物理アドレスタグで管理されていました。ダイレクトマップ方式のため、スラッシングに注意が必要でした。
FPU (R3010) の特徴
FPU (R3010)は、以下の特徴を持っていました。
IEEE 754規格への準拠
32ビット×32本のレジスタ(倍精度演算時は64ビット×16本として使用)
6段パイプライン
加減算、乗算、除算ユニットを備えた実行ユニット
CPUとは別にステータスレジスタを持つ
命令セットの概要
R3000の命令セットは、R、I、Jの3種類のフォーマットに分類されます。Rフォーマットは3つのレジスタと
オペコード、Iフォーマットは2つのレジスタと16ビットのイミディエート値と
オペコード、Jフォーマットは6ビットの
オペコードと26ビットのイミディエート値で構成されています。
算術演算命令、ロード・ストア命令、分岐・ジャンプ命令、そしてlui命令など、基本的な命令セットが用意されていました。MIPSはロード・ストア型アーキテクチャのため、メモリへのアクセスはlw (load word)とsw (store word)命令で行われます。分岐命令には、beq (branch if equal)などがあり、ジャンプ命令にはj (jump)とjal (jump and link)命令があります。lui命令は、32ビット定数をレジスタに格納する際に使用されます。
R3000の汎用レジスタには、いくつかの制約がありました。レジスタ$0は常に0、レジスタ$31はリンクレジスタとして使用されます。HIとLOレジスタは乗除算の結果を格納するために使用されます。MIPS
コンパイラは、レジスタ割り当てに呼出規約を適用します。この呼出規約に従うことで、サブルーチンの呼び出しにおけるレジスタの保存と復元が効率的に行われます。
採用事例
R3000は、ワークステーション、サーバ、ゲーム機、
組み込みシステムなど、幅広い分野で採用されました。代表的な例として、SGIのワークステーション、ソニーのPlayStation、様々なメーカーの
組み込みシステムなどがあります。
派生機種
R3000は、様々な派生機種が開発されました。性能向上を目指したR3000A、R3000とR3010を1チップ化したR3500、VR3600などがあります。また、
組み込みシステム向けに、
東芝のTX3900、PhilipsのPR31700、IDTの
RISControllerシリーズなどが開発されました。宇宙空間での使用を想定した放射線対策済みのMongoose-Vも存在します。
R3000は、その高い性能と汎用性から、当時のコンピューティング業界に大きな貢献を果たした
マイクロプロセッサと言えるでしょう。