R4000

64ビット・アーキテクチャ

64ビットモードでは、汎用レジスタが全て64ビット幅となり、アドレスに関連する情報を格納するCP0レジスタも64ビット化された。各種演算は64ビット版が用意されている。メモリ管理ユニット (MMU) は48エントリのTLBを使って仮想アドレスから物理アドレスへの変換を行う。仮想アドレス空間は64ビットとなっているが、実はフラットではない（右図参照）。実際には40ビット、すなわち1TBの仮想記憶空間しか実装していない。それ以外のビットはゼロであることを確認するだけとなっている。物理アドレスは36ビットで、物理メモリ空間は64GBまでとなっている。また、特筆すべきは特権モードとしてカーネルモードとユーザモードの中間のスーパーバイザモードが導入された点である。この図の中で xkphys は説明が必要であろう。xkphys は物理空間をTLBを使わずにマップしているが、サイズは物理空間 64GBよりもずっと大きい。これは、従来の kseg0 と kseg1 を拡張したものであり、キャッシュコヒーレンシ（後述）をどういう方式で保つかによって物理空間を多重にマップしているためである。xkphysにカーネルをおく場合、キャッシュコヒーレンシの方式（プロトコル）によってアクセスすべきアドレスが異なる。

詳細

R4000の整数パイプラインは8段となっている。第1段 (IF) で実行すべき命令の仮想アドレスを生成し、TLBで仮想アドレスから物理アドレスへの変換を開始する。第2段 (IS) では変換が完了して8KBの命令キャッシュから命令をフェッチ（読み込み）する。この命令キャッシュはダイレクトマップ方式で仮想インデックス・物理タグ方式である。ラインサイズは16バイトまたは32バイト。アーキテクチャ上は32KBまで拡張可能になっている。
第3段 (RF) では命令が解釈され、レジスタファイルを読み込む。MIPS III ではレジスタファイルが2つ定義されており、1つは整数演算用、もう1つは浮動小数点演算用である。どちらも64ビット幅で32エントリある。整数レジスタファイルには2つの読み込みポートと1つの書き込みポートがあり、浮動小数点レジスタファイルには2つの読み込みポートと2つの書き込みポートがある。命令実行は第4段 (EX) から開始される。レジスタファイルへの書き込みは第8段 (WB) で行われる。

整数演算

R4000の整数演算部には、演算論理装置 (ALU)、シフタ、乗算器、除算器、ロードアドレス生成器がある。ALUには64ビットの桁上げ選択式加算器と論理ユニットがあり、パイプライン化されている。シフタは32ビットのバレルシフタで、64ビットのシフト命令を2サイクルで実行するため、1サイクルだけパイプラインをストールさせる。チップサイズを削減するためこのような設計を選択した。乗算器と除算器はパイプライン化されておらず、大きなレイテンシがある。乗算は10サイクル（32ビットの場合）または20サイクル（64ビットの場合）のレイテンシがあり、除算は69サイクル（32ビット）または133サイクル（64ビット）のレイテンシがある。ほとんどの整数演算命令は1サイクルしかかからない。ALUの加算器はメモリのロードまたはストア、分岐先アドレスなどの計算にも使われる。

浮動小数点演算

R4000は IEEE 754-1985 準拠のFPUを同じチップ上に搭載しており、その部分を R4010 と呼ぶこともある。FPUはCP1のコプロセッサとして動作する（MIPS ISA ではCP0からCP3まで4つのコプロセッサを利用できるよう定義している）。CPUのステータスレジスタのFRビットの設定により、FPUの32ビットモードと64ビットモードを切り替えることができる。32ビットモードでは32本の浮動小数点レジスタはそれぞれ32ビット幅となり、32個の単精度浮動小数点数を格納するか、2本のレジスタを1組として16個の倍精度浮動小数点数を格納する。
FPUはデータやリソースの依存関係がなければALUと同時に動作可能で、依存関係があればストールが発生する。FPUには3つのサブユニットがあり、それぞれ加算器、乗算器、除算器である。乗算器と除算器は加算器と並行に命令を実行できるが、乗算も除算も最終段で加算器を使用するため、並行実行にも制限がある。したがってFPUでは最大3個の命令（加算、乗算、除算）を並行実行でき、1サイクルに1命令を実行に移すことができる。
加算器と乗算器はパイプライン化されている。乗算器は4段のパイプラインになっており、性能向上のため dynamic logic を使ってマイクロプロセッサのクロックの2倍の周波数で駆動される。除算には23サイクル（単精度）または36サイクル（倍精度）かかり、平方根の計算にはそれぞれ54サイクルまたは112サイクルのレイテンシが生じる。除算と平方根計算には、SRT除算アルゴリズムを使っている。

二次キャッシュ

R4000SC/MCは128KBから4MBまでの二次キャッシュをサポートしている。二次キャッシュには専用の128ビットのデータバスでアクセスする。二次キャッシュは命令用とデータ用を分離して実装することもできるし、統合して実装することもできる。後に命令キャッシュとデータキャッシュをそれぞれ128KBから2MBの範囲で実装可能となった。二次キャッシュは物理インデックス・物理タグ方式で、ラインサイズは128/256/512/1024バイトのいずれかを選択できる。キャッシュコントローラはR4000本体内にある。二次キャッシュには普通のSRAMを使える。データバスとタグバスはECCで保護されている。

システムバス

R4000のシステムバスは64ビット幅で、SysADバスと呼ばれる。SysADバスはアドレスとデータを多重化しており、同じ線をアドレス転送とデータ転送で共用する。そのため帯域幅が狭くなるが、アドレスとデータに別々のバスを用意するより安価で構築でき、システムの複雑さも低減できる。SysADバスの駆動周波数はプロセッサの内部周波数の半分、3分の1、4分の1のいずれかに設定可能である。SysADバスはシステムクロックを分周することで駆動クロックを生成する。

トランジスタ数、チップサイズ、プロセス

R4000は120万個のトランジスタを集積している。1.0μmCMOSプロセスで製造することを意図して設計された。ミップス社はファブレス企業であるため、パートナー半導体企業にライセンス提供することで製造され、中には0.8μmプロセスで製造した企業もある。

クロック

R4000は外部から供給される主クロック信号を元にして様々なクロック信号を生成する。動作周波数のクロック信号を生成するため、R4000は内蔵の位相同期回路 (PLL) を使って主クロック信号の2倍のクロック信号を生成している。

パッケージ

R4000PCのパッケージは179ピンのCPGA (ceramic pin grid array) である。R4000SC/MCは447ピンのSPGA (staggered pin grid array) である。R4000MCのピン配置とR4000SCのピン配置は異なり、R4000SCでは使われていないピンがR4000MCではキャッシュコヒーレンシの実装に使われている。R4000PCのピン配置は同じPGAパッケージのR4200やR4600とほぼ同じである。そのためこの3種のマイクロプロセッサを使ったシステムは設計を共通化しやすい。

R4400

R4400は、R4000の改良版である。1992年11月初めに発表された。一部の主要顧客にサンプル出荷した後、1993年1月に一般に出荷し始めた。動作周波数が高くなり、100MHz、133MHz、150MHz、200MHz、250MHz という版が出荷された。R4000からの強化は一次キャッシュ容量増だけで、命令・データともに16KBとなった。230万個のトランジスタを集積している。
R4400は、IDT、LSI Logic、NEC、Performance Semiconductor、シーメンス、東芝がライセンス生産した。IDT、NEC、シーメンス、東芝は自社ブランドでも販売している。LSI Logic はカスタム製品に使った。Performance Semiconductor はR4400を製造していた部門を Cypress Semiconductor に売却し、そちらではMIPSのマイクロプロセッサ生産をしなくなった。
NECはこれをVR4400として発売。最初の150MHz版は1992年11月に発表した。当初は0.6μmプロセスで製造していた。1995年中ごろには250MHz版のサンプル出荷を開始。こちらは0.35μmプロセスで製造している。NECはまた、MR4401というマルチチップモジュール (MCM) を開発している。これはVR4400SCと1MビットSRAM10個を集積したもので、SRAMは1MBの二次キャッシュとなっている。このMCMはR4400PCとピン配置が同じになっていた（つまりR4x00PC用のシステム設計で二次キャッシュによる高速化が可能）。150MHz版が1994年に発表され、1995年には200MHz版が発表された。
東芝は TC86R4400 として発売。1994年中ごろに0.3μmプロセスで製造した200MHz版を発売した。1万個単位で購入した場合の価格は、R4400PCが1600ドル、R4400SCが1950ドル、R4400MCが2150ドルだった。

コアロジック・チップセット

R4000/R4400はシステムとのインタフェースにコアロジックを外付けする必要がある。一般にも販売されたが、各社が独自開発したものもある。例えばSGIは独自開発したものを使っていた。一般に販売されたチップセットとしてはエイサー、NEC、東芝などのものがある。エイサーのチップセットは PICA、東芝のチップセットは Tiger Shark と称した。Tiger Shark はSysADバスをi486互換バスに変換する方式だった。