DLX

DLX（「デラックス」と発音）は、ジョン・ヘネシーとデイビッド・パターソンが設計したRISCアーキテクチャ。ヘネシーはMIPS、パターソンは  の設計者である。

DLXは基本的にMIPSアーキテクチャを現代的に整理して単純化したものである。単純な32ビットのロード/ストア・アーキテクチャであり、現代の実際の MIPS CPU とはあまり似ていない。DLXは教育用を第一に意図しており、そのデザインは大学レベルのコンピュータアーキテクチャの教育に広く採用されている。

DLXをそのまま実装したハードウェアは存在しないし、DLX向けの最適化コンパイラも存在しない。DLXをハードウェアで実装した場合、現代の MIPS CPU と遜色ない性能を発揮するだろうと予想されている。しかし、アーキテクチャを集中管理する者がおらず、このCPUコアを実装したVHDLステートマシンも存在しない。

歴史 
本来のMIPSアーキテクチャでは、性能向上のために全命令を1クロックサイクルで実行するという手法を採用した。そのため、命令が1クロックサイクルで終わらない場合にコンパイラが "NOP" を挿入しなければならない。したがって入出力（メモリアクセスなど）では特にNOPが必要とされ、結果的にプログラムが肥大化する。一般にMIPS用プログラムは無駄なNOP命令を多数含んでいたが、これは意図した結果ではない。DLXアーキテクチャでは1クロックサイクルでの命令実行を強制しないので、この問題は生じない。

DLXでは長くかかる命令を許容するため、より現代的な技法であるデータフォワーディングと命令並べ替えを採用している。長い命令は機能ユニット内で「ストール」し、完了時に命令ストリームに再挿入される。外から見ると、命令実行が逐次的に行われているように見える。

詳細 
DLXの命令は、R-type、I-type、J-type の3種類に分類される。R-type 命令は純粋な「レジスタ」命令であり、32ビットワード内に3つのレジスタを指定するフィールドがある。I-type 命令では2つのレジスタを指定し、32ビットワードのうち16ビットを即値に使用する。最後に J-type 命令はジャンプ用であり、26ビットのアドレスを含む。

命令コードは6ビットで、全部で64種類の基本命令を指定できる。32本あるレジスタの指定には5ビットを必要とする。
 R-type 命令の場合、以上から21ビットを必要とし、残る11ビットのうち下位6ビットを拡張命令コードとして使用する。
 したがって、純粋にレジスタのみを使用する命令は64種類以上使用可能である。これはたとえばFPUサポートなどで便利である。

DLX と MIPS 
DLXはMIPSと同様、命令パイプラインの効率的使用を性能向上の基本としている。DLXは概念的には単純な古典的RISCを意図して設計されている。パイプラインは以下のような5段で構成されている。

 IF - 命令フェッチユニット/サイクル
 IR<-Mem(PC)
 NPC<-PC+4
 動作: PCをバスに出力し、そのアドレスの命令を Instruction Register (IR) に読み込む。PCに4を加え、後続の命令アドレスを指すようにする。IRには次のクロックサイクルで処理すべき命令が格納されている。
 ID - 命令デコードユニット
 動作: 命令をデコードし、レジスタファイルにアクセスして必要なレジスタを読み取る。処理すべき命令はIFから受け取り、その命令から命令コードとオペランドを展開する。必要に応じてレジスタの内容を取り出す。
 EX - 実行ユニット/実効アドレスサイクル
 動作: ALUが前サイクルで用意されたオペランドを使って実際の処理を行う。DLXの命令種別に応じて以下の4つのいずれかの処理を行う
 メモリ参照
 レジスタ-レジスタ ALU 命令
 レジスタ-即値 ALU 命令
 分岐
 MEM - メモリアクセスユニット
 動作: このユニットで処理されるのは、ロード/ストア命令と分岐命令である。必要に応じてメモリにアクセスする。ロード命令ならメモリから読み取ったデータが LMD (load memory data) レジスタに置かれる。
 WB - ライトバックユニット
 動作: ストアユニットとも呼ばれる。メモリまたはALUから来た処理結果をレジスタファイルに書き込む。

関連項目 
 MIX, MMIX
 MicroBlaze

参考文献

外部リンク 
 The DLX Processor
 DLX instructions
 WinDLX
 DLX Simulator (GNU GPL)
 ESCAPE DLX Simulator

抽象機械
コンピュータアーキテクチャ
教育ソフトウェア
命令セットアーキテクチャ