概要
マイクロコードは、多くのプロセッサ内部で機械命令セットを実現するために使われる、低レベルの制御情報の層です。各命令を個別に組み合わせ論理へ直接配線する代わりに、プロセッサはマイクロコード、つまり適切な内部回路やデータ経路を有効化するマイクロ命令や制御語の連続を参照します。この意味で、マイクロコードは抽象的な機械語と、それを実行する物理的なハードウェアの橋渡しをします。アーキテクチャ上の命令は、その結果として、マイクロコードで定義された複数のマイクロオペレーションに対応することがあります。
マイクロコードの動作
マイクロコードは通常、制御ストアと呼ばれる専用の高速メモリに格納されます。マイクロ命令には一般に、どの機能ユニットを有効にするか、どのレジスタを読み書きするか、即値、そして次のマイクロ命令のアドレスを指定するフィールドが含まれます。実装によってはリードオンリーメモリ(マイクロROM)を用い、別の実装では書き換え可能な制御ストアを用いて、製造後にマイクロコードを更新できるようにします。マイクロ命令はハードウェアの制御信号に直接影響するため、各機械語命令を完了するために必要な操作の詳細な順序を決定します。
種類と構成
- 水平マイクロコード: 多数の制御ビットを明示的に設定する幅広いマイクロ命令を用い、きめ細かな制御と並列性を得られますが、必要な記憶容量は大きくなります。
- 垂直マイクロコード: 制御情報をよりコンパクトにまとめ、デコードを必要とするため、追加のデコード段階と引き換えに記憶容量を抑えます。
- マイクロプログラム制御ストア: ROM、PROM、または書き換え可能メモリとして実装でき、書き換え可能なストアでは更新や修正が可能です。
- マイクロ命令形式と逐次化: 通常、演算フィールド、オペランド選択、次アドレス論理、ループや複雑な振る舞いのための条件分岐が含まれます。
歴史と発展
マイクロプログラミングの考え方は、複雑な命令セットの設計を सरलにする方法として20世紀半ばに登場しました。初期のコンピュータはハードワイヤード制御で構築され、各命令には専用の回路が必要でした。マイクロプログラミングは、その固定配線の多くを格納されたシーケンスに置き換え、設計の複雑さを減らし、複雑または可変的な命令セットを実装しやすくしました。多くの影響力ある設計がマイクロコードを採用し、こうした制御シーケンスを書く技術者は、しばしばマイクロプログラマやファームウェア開発者と呼ばれます。この役割は、マイクロプログラミングのノートのような入門資料でも説明されています。
用途、利点、例
マイクロコードにはいくつかの実用的な利点があります。CPU設計を簡素化し、開発期間を短縮し、1つのハードウェア基盤で別のシステムをエミュレートできるため互換性機能も実現しやすくなります。また、ベンダーはマイクロコードパッチを配布することで、シリコンを交換せずに更新やエラッタ修正を提供できます。歴史的にも現代においても、複雑命令セットコンピュータ(CISC)はマイクロコードを広く利用してきました。現在のx86プロセッサの多くも、マイクロコードから派生した内部マイクロオペレーションに依存しています。マイクロコードをデータ構造や表現として扱う資料については、制御のためのデータ構造を参照してください。
区別と現代の実践
すべてのプロセッサがマイクロコードを使うわけではありません。多くのRISCアーキテクチャは、最高速と予測しやすいタイミングを重視してハードワイヤード制御を採用し、命令を組み合わせ論理と制御FSMで直接実装します。ただし、ハイブリッドな手法も一般的です。高性能コアでは単純な演算をハードワイヤードで処理しつつ、複雑な命令や旧来の命令にはマイクロコードやマイクロオペレーション変換を用いることがあります。マイクロコードは、CPU設計、ファームウェア保守、そして抽象的な命令セットが物理的なハードウェアへどのように対応付けられるかを学ぶ上で、今も重要な概念です。