| プログラム実行 |
|---|
| 一般的な概念 |
| コードの種類 |
| コンパイル戦略 |
| 注目すべき実行時間 |
| 注目すべきコンパイラとツールチェーン |
|
プロセッサ設計において、マイクロコードは中央処理装置(CPU)ハードウェアとコンピュータのプログラマが認識可能な命令セットアーキテクチャの間に位置する中間層として機能します。 [ 1 ]マイクロコードは、高水準マシンコード命令を実装したり、多くのデジタル処理コンポーネントにおける内部有限状態マシンシーケンスを制御したりするハードウェアレベル命令のセットで構成されています。マイクロコードは、現代のデスクトップおよびラップトップに搭載されているIntelおよびAMDの汎用CPUで使用されていますが、より高速なハードワイヤード制御ユニットが対応できないシナリオに対するフォールバックパスとしてのみ機能します。[ 2 ]
マイクロコードは、特殊な高速メモリに格納され、機械命令、ステートマシンデータ、またはその他の入力を、詳細な回路レベルの演算シーケンスに変換します。機械命令を基盤となる電子回路から分離することで、命令の設計と変更における柔軟性を高めます。さらに、複雑なマルチステップ命令の構築を容易にすると同時に、コンピュータ回路の複雑さを軽減します。マイクロコードの記述は、しばしばマイクロプログラミングと呼ばれ、特定のプロセッサ実装におけるマイクロコードは、マイクロプログラムと呼ばれることもあります。
広範なマイクロプログラミングにより、小規模かつシンプルなマイクロアーキテクチャでも、より広いワード長や追加の実行ユニットなどを備えた、より堅牢なアーキテクチャをエミュレートできます。このアプローチは、プロセッサファミリ内の異なる製品間のソフトウェア互換性を比較的容易に確保する方法を提供します。
概要
命令セット
ハードウェアレベルでは、プロセッサは複数の独立した回路領域、つまり「ユニット」で構成され、それぞれ異なるタスクを実行します。一般的なユニットには、 2つの数値の加算や比較などの命令を実行する算術論理ユニット(ALU)、外部メモリへのデータの読み書きを行う回路、そして処理中の値を格納するためのオンボードメモリの小さな領域などがあります。ほとんどの設計では、追加の高性能メモリであるレジスタファイルが、現在の命令に必要な値だけでなく、一時的な値を格納するために使用されます。[ 3 ]
命令を正しく実行するには、様々な回路を順番に起動させる必要がある。例えば、メモリからロードされていない2つの数値を加算することはできない。RISC設計では、これらの命令の適切な順序は、主にプログラマ、あるいは少なくとも使用しているプログラミング言語のコンパイラに委ねられている。したがって、例えばメモリ内の2つの数値を加算し、その結果をメモリに格納する場合、コンパイラは、一方の値を1つのレジスタにロードし、もう一方の値を別のレジスタにロードし、ALUで加算機能を実行して結果をレジスタに格納し、そのレジスタをメモリに格納する命令を出力する。[ 3 ]
この高レベルの概念「メモリ内の2つの数値を加算する」を実行するために必要な命令列は複数の命令を必要とする場合があり、これらの命令がメインメモリに格納されている場合、パフォーマンスのボトルネックとなる可能性があります。これらの命令を1つずつ読み出すには、実際のデータの読み書きに使用できる時間を消費します。このため、非RISC設計では、データの格納場所が大きく異なる多くの異なる命令が用意されているのが一般的です。例えば、MOS 6502にADCは、2つのオペランドを検索する場所のみが異なる加算命令の8つのバリエーションがあります。 [ 4 ]
最終的な操作に最も近い命令のバリエーション、すなわち「オペコード」を使用することで、命令の数を1つに減らすことができます。これにより、プログラムコードが使用するメモリが節約され、データバスを他の操作のために空けておくことでパフォーマンスが向上します。しかし、内部的には、これらの命令は独立した操作ではなく、ユニットが実際に実行する操作のシーケンスです。メモリから読み取った単一の命令を内部動作のシーケンスに変換するのは、プロセッサ内の別のユニットである制御ユニットの役割です。[ 5 ]
マイクロコード
マイクロコードの基本的な考え方は、命令シーケンスを実装するカスタムハードウェアロジックを、プロセッサ内の「マイクロコードエンジン」で実行される一連の単純な命令に置き換えることです。カスタムロジックシステムでは、様々な制御線に一連の電圧を出力するダイオードやゲートが複数ある場合がありますが、マイクロコードエンジンはこれらの制御線に接続され、エンジンがマイクロコード命令を順番に読み取る際にこれらの線をオン/オフします。マイクロコード命令は多くの場合、これらの制御線にビットエンコードされています。例えば、ビット8が真であれば、ALUはデータを待機するために一時停止する必要があることを意味します。この点で、マイクロコードは自動ピアノの紙巻き器に似ています。紙巻き器では、穴が押すべき鍵盤を表しています。
カスタムロジックとマイクロコードの違いは小さいように思えるかもしれません。一方はダイオードとゲートのパターンを用いて命令をデコードし、信号シーケンスを生成します。一方、もう一方は信号をマイクロ命令としてエンコードし、それらを順番に読み出すことで同じ結果を生成します。重要な違いは、カスタムロジック設計では個々のステップを変更するにはハードウェアの再設計が必要になることです。一方、マイクロコードでは、変更されるのはマイクロコードを含むメモリに格納されたコードだけです。そのため、マイクロコードシステムにおける問題の修正がはるかに容易になります。また、命令の複雑さには実質的な制限がなく、使用できるメモリ量によってのみ制限されることを意味します。
コンピュータのソフトウェアスタックの最下層は、伝統的にプロセッサ用の生の機械語命令です。マイクロコードプロセッサでは、これらの命令のフェッチ、デコード、そして実行はマイクロコードによって行われます。混乱を避けるため、マイクロプログラムに関連する各要素は、マイクロ命令、マイクロアセンブラ、マイクロプログラマなど、マイクロという接頭辞で区別されます。 [ 6 ]
複雑なデジタルプロセッサでは、基本的に非同期で並列に実行する必要があるサブタスクを委譲するために、複数の(場合によってはマイクロコードベースの)制御ユニットが採用されることもあります。例えば、 VAX 9000は、命令のフェッチとデコードを行うハードワイヤードのIBoxユニットを備えており、命令はマイクロコード化されたEBoxユニットに渡されて実行されます[ 7 ]。また、 VAX 8800は、マイクロコード化されたIBoxとマイクロコード化されたEBoxの両方を備えています[ 8 ] 。
高水準プログラマー、あるいはアセンブリ言語プログラマーでさえ、通常、マイクロコードを見たり変更したりすることはありません。マシンコードが同一ファミリ内の異なるプロセッサ間である程度の後方互換性を保持していることが多いのに対し、マイクロコードは特定のプロセッサ設計自体に固有の一部を構成するため、設計された電子回路上でのみ動作します。
デザイン
技術者は通常、プロセッサの設計段階でマイクロコードを作成し、それを読み取り専用メモリ(ROM) またはプログラマブル ロジック アレイ(PLA) [ 9 ]構造、もしくはその両方の組み合わせに格納します。[ 10 ]ただし、マイクロコードの一部またはすべてを静的ランダム アクセス メモリ(SRAM) またはフラッシュ メモリに格納するマシンも存在します。これは、読み取り専用または読み書き可能なメモリである可能性があるコンピュータのコンテキストでは、伝統的に書き込み可能な制御ストアと呼ばれます。後者の場合、CPU 初期化プロセスは、別の記憶媒体からマイクロコードを制御ストアにロードし、命令セットのバグを修正するため、または新しいマシン命令を実装するためにマイクロコードを変更する可能性があります。
マイクロプログラム
マイクロプログラムは、CPUのハードウェア回路の非常に基本的なレベルで制御する一連のマイクロ命令で構成されています。例えば、典型的な水平マイクロ命令1つで、以下の操作を同時に指定することができます。
- レジスタ1をALUのA側に接続します
- レジスタ7をALUのB側に接続します
- ALUを2の補数加算を実行するように設定する
- ALUのキャリー入力をゼロに設定する
- ALU出力をレジスタ8に接続します
- ALUステータスフラグ(負、ゼロ、オーバーフロー、キャリー)から条件コードを更新します。
- 次のマイクロ命令のために指定されたμPCアドレスにマイクロジャンプする
プロセッサのすべての機能を1サイクルで同時に制御するために、マイクロ命令は50ビットよりも広い場合が多く、例えばエミュレータ機能を備えた360/85では128ビットになります。マイクロプログラムは、可能な限り高速に実行できるように慎重に設計・最適化されています。遅いマイクロプログラムは、マシン命令の実行速度を低下させ、そのような命令を使用する関連アプリケーションプログラムのパフォーマンスを低下させるからです。
正当化
マイクロコードはもともと、コンピュータの制御ロジックをより簡便に開発する方法として開発されました。当初、CPUの命令セットはハードワイヤードでした。機械命令のフェッチ、デコード、実行に必要な各ステップ(オペランドアドレスの計算、読み取り、書き込みを含む)は、組み合わせ論理と、比較的最小限のシーケンシャルステートマシン回路によって直接制御されていました。このようなハードワイヤードプロセッサは非常に効率的でしたが、マルチステップのアドレッシングと複雑な演算(下記参照)を備えた強力な命令セットが必要だったため、設計とデバッグが困難でした。高度にエンコードされた命令や可変長の命令も、特に非常に不規則なエンコードが使用されている場合に、設計とデバッグを困難にする要因となりました。
マイクロコードは、プロセッサの動作とプログラミングモデルの多くを専用回路ではなくマイクロプログラムルーチンで定義できるようにすることで、設計作業を簡素化しました。マイクロコードは設計プロセスの最終段階であっても容易に変更できましたが、ハードワイヤードCPUの設計では変更が非常に面倒でした。そのため、CPU設計は大幅に容易化されました。
1940年代から1970年代後半にかけて、プログラミングの大部分はアセンブリ言語で行われていました。高水準命令はプログラマの生産性向上を意味し、マイクロコードの重要な利点は、強力な機械語命令を比較的容易に定義できることでした。この究極の発展形が「直接実行可能高水準言語」設計です。これは、PL/Iなどの高水準言語の各文がコンパイルなしにマイクロコードによって完全に直接実行されるものです。IBM Future SystemsプロジェクトとData General Fountainheadプロセッサがその例です。1970年代には、CPU速度がメモリ速度よりも急速に向上し、メモリブロック転送、メモリプリフェッチ、マルチレベルキャッシュなどの多くの技術がこれを緩和するために使用されました。マイクロコードによって可能になった高水準機械語命令は、より少ない複雑な機械語命令がメモリ帯域幅を必要とするため、さらに役立ちました。例えば、文字列に対する演算は単一の機械語命令で実行できるため、複数の命令フェッチを回避できます。
複雑なマイクロプログラムで実装された命令セットを持つアーキテクチャには、IBM System/360やDigital Equipment CorporationのVAXなどがある。マイクロコードで実装された命令セットがますます複雑になるアプローチは、後に複合命令セットコンピュータ(CISC)と呼ばれるようになった。多くのマイクロプロセッサで使用されている別のアプローチは、主に命令のデコードに1つ以上のプログラマブルロジックアレイ(PLA)または読み取り専用メモリ(ROM)(組み合わせロジックの代わりに)を使用し、シーケンス処理のほとんどを単純なステートマシン(マイクロコードがほとんどまたは全くない)に行わせるというものである。MOS Technology 6502は、命令のデコードとシーケンス処理にPLAを使用するマイクロプロセッサの例である。PLAはチップの顕微鏡写真で見ることができ、[ 11 ]その動作はトランジスタレベルのシミュレーションで見ることができる。
マイクロプログラミングは、現代のCPU設計においても依然として使用されています。場合によっては、マイクロコードをシミュレーションでデバッグした後、制御ストアの代わりにロジック関数が使用されることがあります。ロジック関数は、同等のマイクロプログラムメモリよりも高速で安価であることが多いです。
利点
プロセッサのマイクロプログラムは、通常のプログラマが認識できるアセンブリ命令とは比べ物にならないほど原始的で、全く異なる、ハードウェア指向のアーキテクチャ上で動作します。マイクロコードはハードウェアと連携して、プログラマが認識できるアーキテクチャを実装します。基盤となるハードウェアは、認識できるアーキテクチャと必ずしも固定的な関係を持つ必要はありません。そのため、特定の命令セットアーキテクチャを、様々なハードウェアマイクロアーキテクチャ上に実装することが容易になります。
IBM System/360 は 16 個の汎用レジスタを備えた 32 ビット アーキテクチャを備えていますが、System/360 の実装のほとんどでは、はるかに単純な基礎となるマイクロアーキテクチャを実装するハードウェアが使用されています。たとえば、System /360 モデル 30 には算術論理ユニット (ALU) とメイン メモリへの 8 ビットのデータ パスがあり、汎用レジスタを高速コア メモリの専用ユニットに実装しています。また、System/360 モデル 40には ALU への 8 ビットのデータ パスとメイン メモリへの 16 ビットのデータ パスがあり、汎用レジスタを高速コア メモリの専用ユニットに実装しています。モデル50 には完全な 32 ビットのデータ パスがあり、汎用レジスタを高速コア メモリの専用ユニットに実装しています。[ 12 ]モデル 65 からモデル 195 には、より大きなデータ パスがあり、汎用レジスタをより高速なトランジスタ回路で実装しています。このようにマイクロプログラミングにより、IBMは、ハードウェアが大きく異なり、価格と性能の幅が広いSystem/360モデルを多数設計しながら、アーキテクチャ上の互換性を維持することができました。これにより、モデルごとに作成する必要のある独自のシステムソフトウェアプログラムの数は劇的に削減されました。
デジタル・イクイップメント・コーポレーション(DEC)のPDP-11は、8つの汎用レジスタを備えた16ビット・アーキテクチャです。1970年に発売され、基本的なアーキテクチャは1990年代まで変更されていませんでした。このシリーズの最初のマシンのみがマイクロコード化されていませんでした。1972年から1976年にかけて、PDP-11の基盤となるマイクロプログラムの幅は22ビットから64ビットまで変化しました。マイクロプログラムの長さは256ワードから1,024ワードまで変化し、マイクロプログラムの長さが長いほど、一般的に幅は狭くなりました。[ 13 ]マイクロプログラムの幅の多様性は、わずか4年間で少なくとも7つの異なるPDP-11の実装があったことを示しています。
同様のアプローチは、DEC(Digital Equipment Corporation)のVAXファミリーコンピュータでも採用されています。その結果、異なるVAXプロセッサは異なるマイクロアーキテクチャを採用していますが、プログラマが認識できるアーキテクチャは変わりません。
マイクロプログラミングにより、プロセッサの欠陥 (バグ)を修正するための現場での変更コストも削減されます。バグは、ハードウェア ロジックや配線を変更するのではなく、マイクロプログラムの一部を置き換えることによって修正できる場合が多くあります。
歴史
初期の例
1946年にアラン・チューリングによって設計されたACEコンピュータはマイクロプログラミングを使用していました。[ 14 ]
1947年、 MIT Whirlwindの設計において、コンピュータ設計を簡素化し、アドホックな手法から脱却するための方法として、制御ストアの概念が導入されました。制御ストアはダイオード・マトリクス、つまり2次元格子で、一方の次元はCPUの内部クロックから「制御時間パルス」を受け取り、もう一方の次元はゲートやその他の回路の制御信号に接続されます。「パルス分配器」はCPUクロックによって生成されたパルスを受け取り、8つの独立した時間パルスに分割します。各パルスは格子の異なる列をアクティブにします。列がアクティブになると、それに接続された制御信号もアクティブになります。[ 15 ]
1951年、モーリス・ウィルクス[ 16 ]は、条件付き実行という、コンピュータソフトウェアの条件文に似た概念を追加することで、この概念を拡張しました。彼の最初の実装は、一対のマトリックスで構成されていました。最初のマトリックスは、Whirlwind制御ストアの方法で信号を生成し、2番目のマトリックスは、次のサイクルで呼び出す信号行(いわゆるマイクロプログラム命令語)を選択します。条件文は、制御ストアの1行が2番目のマトリックスの選択肢から選択できる方法を提供することで実装されました。これにより、検出された内部信号に応じて制御信号が条件付きになりました。ウィルクスは、この機能を説明し、単純な制御ストアと区別するために、 「マイクロプログラミング」という用語を造りました。
360度
マイクロコードは、コードを格納するROMのコストがカスタム制御ロジックのコストとそれほど変わらないため、コンピュータ設計において比較的稀な存在でした。しかし、1960年代初頭に大量生産されたコアメモリとコアループが導入されたことで状況は一変しました。これらは、ダイオードアレイなどの専用ロジックよりもはるかに安価でした。この利点を初めて活用したのは、IBMの1964年発売のSystem/360シリーズでした。これにより、マシンは非常に複雑な命令セットを持つことが可能になり、バイナリ値を10進文字列としてフォーマットするといった高水準言語構造に対応する操作や、このタスクに必要な複雑な内部処理を低コストのメモリにエンコードする操作などが可能になりました。[ 17 ]
しかし、360シリーズの真の価値は、内部的には全く異なるマシンを複数開発しながらも、同じISAを実行できることでした。ローエンドマシンでは、32ビットの加算を1回実行するのに複数サイクルを要する8ビットALUを使用する一方で、ハイエンドマシンでは、同じ加算を1サイクルで実行する完全な32ビットALUを搭載するといった具合です。こうした違いは制御ロジックで実装できますが、各マシンに全く異なるデコーダを実装するにはコストがかかりすぎます。マイクロコードを使用することで、変更されるのはROM内のコードだけです。例えば、あるマシンには浮動小数点ユニットが搭載されており、2つの数値を乗算するマイクロコードはわずか数行で済むかもしれません。一方、同じマシンではFPUを搭載していないため、同じ演算を複数回の加算で実行するプログラムで済み、変更されるのはROMだけです。[ 17 ]
この設計の結果、顧客はファミリーのローエンドモデルを使ってソフトウェアを開発することができ、さらなるパフォーマンスが必要になった場合はより高速なバージョンに移行すればよく、それ以外の変更は一切必要ありません。これにより参入障壁が低くなり、360は大成功を収めました。1990年代末までに、メインフレーム業界全体で マイクロコードの使用が必須となりました。
ラインを上へ
初期のミニコンピュータはマイクロコードを必要とするほど単純ではなく、命令セットとそのデコード方法は初期のメインフレームに似ていました。しかし、設計者はすぐにより強力な集積回路を使用し始め、より複雑なISAを実現しました。1970年代半ばまでに、PDP-11のほとんどのモデルや、特にVAXのほとんどのモデルなど、ほとんどの新しいミニコンピュータとスーパーミニコンピュータもマイクロコードを使用するようになりました。VAXには、360に見られるものと似たような高水準命令が含まれていました。[ 18 ]
マイクロプロセッサにも同様の基本的な進化が起こった。初期の設計は非常にシンプルで、1970年代半ばのZilog Z80のようなより強力な8ビット設計でさえ、命令セットは専用ロジックで実装できるほど単純だった。この頃には、制御ロジックをCPUと同じダイにパターン化できるようになり、ROMとロジックのコスト差はそれほど問題ではなくなった。しかし、これらの企業は間もなく、より高性能な設計を導入しながらも下位互換性を維持するという問題に直面するようになった。マイクロプロセッサにおけるマイクロコードの初期の例としては、Intel 8086が挙げられる。[ 5 ]
マイクロプロセッサにおけるマイクロコードの究極の実装の一つに、モトローラ68000があります。このプロセッサは、多様なアドレッシングモードを備えた高度に直交した命令セットを提供し、すべてマイクロコードで実装されていました。これにはコストがかかり、初期の論文によると、チップ面積(つまりコスト)の約20%がマイクロコードシステムで占められていました[ 19 ]。その後の推定では、プロセッサの68,000個のトランジスタのうち 約23,000個がマイクロコードシステムの一部であったとされています。
RISCの登場
各社が命令セットの複雑さを競い合い、マイクロコードによる実装が当然視されていた1970年代半ば、IBM社内プロジェクトにおいて、マイクロコードの概念そのものに深刻な疑問が投げかけられていた。高性能全デジタル電話交換機の開発プロジェクトの一環として、ジョン・コック率いるチームは、顧客のSystem/360(およびSystem/370)プログラムから膨大な量のパフォーマンスデータを取得し始めた。その結果、彼らは奇妙なパターンに気づいた。ISAが命令の複数のバージョンを提示した場合、コンパイラはほとんどの場合、コードを最も直接的に表現する命令ではなく、最も単純な命令を使用するのだ。これは、これらの命令が常にハードウェアで実装され、最も高速に実行されるためであることがわかった。他の命令を使用すると、一部のマシンではより高いパフォーマンスが得られるかもしれないが、どのマシンで実行されているかを知る術がなかった。これは、これらの違いを隠すというマイクロコード使用の本来の目的を損なっていた。[ 20 ]
研究チームは「コンピュータとユーザーの間にマイクロコードを強制すると、最も頻繁に実行される命令を実行する際にコストのかかるオーバーヘッドが発生する」という根本的な結論に達した。[ 20 ]
この発見の結果、今日RISCコンセプトとして知られるものが生まれました。複雑なマイクロコードエンジンとそれに関連するROMは縮小または完全に排除され、それらの回路は追加レジスタやより広いALUなどに専用化され、すべてのプログラムのパフォーマンスが向上します。複雑な命令シーケンスが必要な場合はコンパイラに委ねられます。これがそもそもコンパイラを使用する目的です。この基本コンセプトはすぐにカリフォルニアの大学の研究者によって取り上げられ、シミュレーションでは、このような設計は従来の最速設計をはるかに上回る性能になることが示唆されました。RISCという用語を導入したのは 、カリフォルニア大学バークレー校でのそのようなプロジェクトの一つでした。
RISCのコンセプトに対して、業界は混乱と敵意をもって反応した。その中には、Digital社のVAXチームによる有名な否定的な記事も含まれている。[ 21 ]主な論点は、プロセッサの外部で命令を実装すると、メモリから命令を読み出すのに多くの時間がかかり、CPU自体がどれだけ高速に動作しても全体的なパフォーマンスが低下するというものだった。[ 21 ]支持者たちは、シミュレーションでは命令の数はそれほど多くないことが明確に示されており、特にコンパイルされたコードを考慮するとその差は歴然としていると指摘した。[ 20 ]
この論争は 1980 年代後半に最初の商用 RISC 設計が登場するまで続き、他の企業の最も複雑な設計をはるかに上回る性能を発揮しました。1980 年代後半にはこの論争は終結しました。DEC ですらDEC Alpha設計でマイクロコードを放棄し、CISC プロセッサは多くの機能を実行するためにマイクロコードではなくハードワイヤード回路を使用するようになりました。たとえば、Intel 80486 は命令のフェッチとデコードにはハードワイヤード回路を使用し、マイクロコードは命令の実行にのみ使用しています。レジスタ間移動および算術命令には 1 つのマイクロ命令しか必要ないため、1 クロック サイクルで完了できます。[ 22 ] Pentium Proのフェッチおよびデコード ハードウェアは命令をフェッチして一連のマイクロ操作にデコードし、実行ユニットに渡します。実行ユニットはマイクロ操作をスケジュールして実行しますが、場合によっては順序どおりに実行しません。複雑な命令は、事前に定義されたマイクロ操作のシーケンスで構成されるマイクロコードによって実装されます。[ 23 ]
一部のプロセッサ設計では、特別なモードで実行されるマシンコードと、そのモードでのみ利用可能なプロセッサ依存ハードウェアにアクセスできる特別な命令を使用して、命令セットの低レベル機能を実装しています。純粋なRISC設計であるDEC Alphaは、PALcodeを使用して、トランスレーションルックアサイドバッファ(TLB)ミス処理や割り込み処理などの機能を実装しました。 [ 24 ]また、OpenVMSを実行するAlphaベースのシステム向けに、 VAXアーキテクチャで提供される命令に類似したインターロックメモリアクセスを必要とする命令を提供しました。[ 24 ] CMOS IBM System/390 CPU(G4プロセッサ以降)およびz/Architecture CPUは、一部の命令を実装するためにミリコードを使用しています。[ 25 ]
例
- チャールズ・バベッジが構想した解析エンジンは、回転ドラムに挿入されたペグを使用して内部手順を保存します。
- EMIDEC 1100 [ 26 ]は、フェライトコアに通されたワイヤー(通称「レース」)で構成される有線制御ストアを使用していると言われています。
- IBM System/360 シリーズのほとんどのモデルはマイクロプログラム化されています。
- モデル25は、 System/360モデルの中では唯一、コアストレージの上位16KBをマイクロプログラムの制御ストレージとして使用している点が特徴です。2025は、7つの制御ワード(マイクロ命令)を持つ16ビットのマイクロアーキテクチャを採用しています。システムメンテナンス後や動作モードの変更時には、マイクロコードはカードリーダー、テープ、その他のデバイスからロードされます。[ 27 ]このモデルのIBM 1410エミュレーションもこの方法でロードされます。
- モデル30は、ハードウェアレジスタがわずかしかない8ビットマイクロアーキテクチャを採用しており、プログラマが認識できるものはすべてマイクロプログラムによってエミュレートされます。このモデルのマイクロコードは、専用のパンチカードにも格納されており、マシン内部のカードごとに専用のリーダー(「CROS」ユニット(Capacitor Read-Only Storage))に格納されます。[ 28 ]:2~5 1401/1440/1460エミュレーション搭載機[ 28 ]:4~29 および1620エミュレーション搭載機[ 28 ]:4~75
- モデル40は56ビットの制御ワードを使用します。2040ボックスは、System/360メインプロセッサとマルチプレックスチャネル(I/Oプロセッサ)の両方を実装しています。このモデルは、CROSユニットに類似したTROS専用リーダーを使用しますが、誘導ピックアップ(Transformer Read-only Store)を備えています。
- モデル50には、並列動作する2つの内部データパスがあります。算術演算に使用される32ビットデータパスと、一部の論理演算に使用される8ビットデータパスです。制御ストアは90ビットのマイクロ命令を使用します。
- モデル85は、高性能を実現するために、命令フェッチ(Iユニット)と実行(Eユニット)を独立して搭載しています。Iユニットはハードウェア制御です。Eユニットはマイクロプログラム方式で、制御ワードは基本360/85では108ビット幅、エミュレータ機能を搭載している場合はさらに広くなります。
- NCR 315は、条件付き実行機能を備えたシーケンサによってパルス駆動される、手配線のフェライトコア(ROM)でマイクロプログラムされています。コアを通る配線は、プロセッサ内の様々なデータおよびロジック要素に有効です。
- デジタル・イクイップメント・コーポレーションのPDP-9プロセッサ、KL10およびKS10 PDP-10プロセッサ、およびPDP-11/20を除くPDP-11プロセッサはマイクロプログラム化されている。 [ 29 ]
- Data General Eclipseミニコンピュータのほとんどはマイクロプログラム化されています。Eclipse MV/8000用のマイクロコードの作成手順については、ピューリッツァー賞を受賞した著書『The Soul of a New Machine』に詳しく記載されています。
- Burroughsの多くのシステムはマイクロプログラムされています。
- B700「マイクロプロセッサ」は、メインメモリに格納された16ビットのマイクロ命令のシーケンスを用いて、アプリケーションレベルのオペコードを実行します。これらの命令はそれぞれ、レジスタロード操作、または読み出し専用メモリに格納された単一の56ビット「ナノコード」命令にマッピングされます。これにより、比較的シンプルなハードウェアを、メインフレームの周辺コントローラとして、あるいはスタンドアロンコンピュータとしてパッケージ化することが可能になります。
- B1700は、ビットアドレス指定可能なメインメモリを含む根本的に異なるハードウェアで実装されていますが、同様の多層構造を備えています。オペレーティングシステムは、必要な言語に対応するインタープリタをプリロードします。これらのインタープリタは、COBOL、Fortranなど、それぞれ異なる仮想マシンを提供します。
- Microdataは、ユーザーがマイクロコードにアクセスできるコンピューターを開発しました。これにより、アセンブラレベルのカスタム命令の作成が可能になりました。MicrodataのRealityオペレーティングシステムの設計では、この機能が広く活用されています。
- Xerox Altoワークステーションはマイクロコード設計を採用していましたが、多くのコンピュータとは異なり、マイクロコードエンジンは階層化設計によってプログラマーから隠蔽されていません。アプリケーションはこれを利用してパフォーマンスを向上させます。
- IBM System/38は、水平型と垂直型の両方のマイクロコードを備えていると説明されている。[ 30 ]実際には、プロセッサは水平型マイクロコード形式を用いた内部マイクロプログラム・インターフェース(IMPI)と呼ばれる命令セット・アーキテクチャを実装している。いわゆる垂直型マイクロコード層は、MIコードをIMPIコードに変換して実行することにより、System/38のハードウェアに依存しないマシン・インターフェース(MI)命令セットを実装する。IBM RS64プロセッサ・ラインの導入以前は、初期のIBM AS/400システムでも同じアーキテクチャが使用されていた。[ 31 ]
- ニンテンドー64のリアリティ・コプロセッサ(RCP)は、ゲーム機のグラフィック処理ユニットとオーディオプロセッサとして機能し、マイクロコードを採用しています。これにより、新しいエフェクトを実装したり、プロセッサを調整して目的の出力を実現したりすることが可能になります。カスタムRCPマイクロコードの注目すべき例としては、ファクター5の『インディ・ジョーンズ/インフェルナル・マシン』、『スター・ウォーズ ローグ・スコードロン』 、『スター・ウォーズ バトル・フォー・ナブー』に見られる高解像度グラフィック、パーティクルエンジン、無制限の描画距離などが挙げられます。[ 32 ] [ 33 ]また、エンジェルスタジオの『バイオハザード2』に見られるフルモーションビデオ再生機能も挙げられます。[ 34 ]
- Sony PlayStation 2の VU0 および VU1 ベクトル ユニットはマイクロプログラム可能です。実際、SDK の最初の数世代では、VU1 はマイクロコード経由でのみアクセスできます。
- MicroCore Labs MCL86 ( 2016 年 11 月 3 日にアーカイブ)、MCL51 ( 2017 年 2 月 2 日にアーカイブ)、およびMCL65 ( 2018 年 12 月 21 日にアーカイブ) は、Intel 8086/8088、8051、および MOS 6502 の高度にエンコードされた「垂直」マイクロシーケンサー実装の例です。
- デジタルサイエンティフィック社のMeta 4シリーズ16コンピュータシステムは、1970年に初めて発売されたユーザーによるマイクロプログラミングが可能なシステムでした。マイクロコードは主に垂直形式で、32ビットのマイクロ命令で構成されていました。[ 35 ]命令はビット位置のグリッドを持つ交換可能なプログラムボードに格納されていました。1ビットは小さな金属の四角で表され、増幅器によって感知され、0ビットは四角がないことで表されました。[ 36 ]システムは最大4Kワードの16ビットマイクロストアで構成できました。デジタルサイエンティフィック社の製品の一つに、 IBM 1130用のエミュレータがありました。[ 37 ] [ 38 ]
- MCP -1600は、1975年から1980年代初頭にかけてWestern Digital社によって製造されたマイクロプロセッサです。このプロセッサは、 Pascal MicroEngine、WD16、そしてコスト削減されたPDP-11であるDEC LSI-11という3つの異なるコンピュータアーキテクチャをマイクロコードで実装するために使用されました。 [ 39 ]
- 初期のx86プロセッサは完全にマイクロコード化されています。x86プロセッサは、Intel P6マイクロアーキテクチャおよびAMD K7マイクロアーキテクチャ以降、パッチ適用可能なマイクロコード( BIOSまたはオペレーティングシステムによるパッチ適用)を実装しています。これらのプロセッサは、シリコン内にマイクロコードROMとマイクロコードSRAMを実装しています。
- 多くのグラフィックアダプタ、ネットワークインターフェースコントローラ、ホストアダプタはマイクロコードで実装されています。初期のISA拡張カードは通常ハードコードされていましたが、PCI、AGP、そしてそれ以降のPCIeバスの登場により、後期の拡張カードはパッチ適用可能なマイクロコードを実装できるようになりました。
実装
マイクロプログラム内の各マイクロ命令は、CPU内部を構成する機能要素を制御するビットを提供します。ハードワイヤードCPUに対する利点は、CPU内部の制御がコンピュータプログラムの特殊な形態となることです。マイクロコードは、複雑な電子設計上の課題(CPUの制御)を、より単純なプログラミング課題へと変換します。この利点を活用するために、CPUは複数の部分に分割されています。
- Iユニットはハードウェアで命令をデコードし、 E ユニットと並行して命令を処理するためのマイクロコード アドレスを決定します。
- マイクロシーケンサは、制御ストアの次のワードを選択します。シーケンサは基本的にカウンターですが、通常は命令レジスタのデータと制御ストアの一部からのデータに応じて、制御ストアの別の部分にジャンプする手段も備えています。最も単純なシーケンサは、制御ストアの数ビットをロードするレジスタです。
- レジスタセットは、中央処理装置(CPU)のデータを格納する高速メモリです。汎用レジスタやプログラムカウンタなど、アプリケーションプログラムから参照可能なレジスタが含まれる場合もあれば、アプリケーションプログラマが容易にアクセスできないレジスタが含まれる場合もあります。レジスタセットは、多くの場合、トリプルポートレジスタファイルです。つまり、2つのレジスタの読み取りと、3つ目のレジスタの書き込みを同時に行うことができます。
- 算術論理演算ユニットは、通常、加算、論理否定、右シフト、論理積といった計算を実行します。また、他の機能も実行することがよくあります。
メモリアドレスレジスタとメモリデータレジスタもあり、これらはコンピュータのメインストレージにアクセスするために使われます。これらの要素が一緒になって「実行ユニット」を形成します。最近のCPUのほとんどは複数の実行ユニットを持っています。単純なコンピュータでも、メモリの読み書きを行うユニットと、ユーザーコードを実行するユニットが1つずつあります。これらの要素は、多くの場合、1つのチップにまとめられます。このチップは固定幅で、実行ユニットを「スライス」します。これらは「ビットスライス」チップとして知られています。AMD Am2900ファミリーは、ビットスライス要素の最もよく知られた例の1つです。[ 40 ]実行ユニットの各部分と全体は、バスと呼ばれる配線の束によって相互接続されています。
プログラマーは、基本的なソフトウェアツールを使用してマイクロプログラムを開発します。マイクロアセンブラを使用すると、プログラマーはビットテーブルをシンボリックに定義できます。マイクロコードは、基盤となるアーキテクチャと密接な関係にあるため、「コンパイラを用いた生成を困難にするいくつかの特性があります。」[1] シミュレータプログラムは、電子回路と同じようにビットを実行することを目的としており、マイクロプログラムのデバッグをより自由に行うことができます。マイクロプログラムが完成し、徹底的にテストされた後、同じデータを生成するロジックを構築するコンピュータプログラムの入力として使用されることがあります。このプログラムは、プログラマブルロジックアレイを最適化するために使用されるプログラムに似ています。完全に最適化されたロジックがなくても、ヒューリスティックに最適化されたロジックを使用することで、読み取り専用メモリ(ROM)制御ストアに必要なトランジスタ数を大幅に削減できます。これにより、CPUの製造コストと消費電力が削減されます。
マイクロコードは水平型と垂直型に分類され、主に各マイクロ命令がCPU要素をほとんどあるいは全くデコードせずに制御するか(水平型マイクロコード)[ a ] 、あるいは組み合わせロジックによる広範なデコードを経て制御するか(垂直型マイクロコード)によって特徴付けられます。したがって、水平型マイクロ命令は垂直型マイクロ命令よりも幅が広く(より多くのビットを含む)、より多くの記憶領域を占有します。
水平マイクロコード
「水平マイクロコードは、複数の個別のマイクロオペレーションを単一のマイクロ命令に統合することで、同時動作を実現します。」[ 1 ]水平マイクロコードは通常、かなり広い制御ストアに格納されます。各ワードが108ビット以上になることも珍しくありません。シーケンサークロックの1ティックごとに、マイクロコードワードが読み取られ、デコードされ、CPUを構成する機能要素の制御に使用されます。
典型的な実装では、水平方向のマイクロプログラムワードは、かなり厳密に定義されたビットのグループで構成されます。例えば、単純な構成は次のようになります。
| レジスタソースA | レジスタソースB | 宛先レジスタ | 算術および論理演算ユニットの演算 | ジャンプの種類 | ジャンプアドレス |
このタイプのマイクロマシンで、オペコードの後にアドレスを指定するJUMP命令を実装するには、マイクロコードに2クロックティックかかる場合があります。これを設計するエンジニアは、次のようなマイクロアセンブラのソースコードを作成します。
# 番号記号で始まる行はすべてコメントです。# これは単なるラベルで、アセンブラがメモリ アドレスを記号的に表す通常の方法です。 命令 JUMP : # 次の命令の準備として、命令デコード マイクロコードはすでにプログラム カウンタをメモリ アドレス レジスタに移動しています。この命令は、ジャンプ オペコードの次のメモリ ワードからジャンプ命令のターゲット アドレスをフェッチします。これは、メモリ データ レジスタからメモリ アドレス レジスタにコピーすることによって行われます。# これにより、メモリ システムは、命令デコードで使用するために次の命令をメモリ データ レジスタにフェッチするための 2 クロック ティックを獲得します。 # シーケンサ命令 "next" は、制御ワード アドレスに 1 を加算するだけです。MDR 、 NONE 、 MAR 、 COPY 、 NEXT 、 NONE # これにより、次の命令のアドレスが PC に配置されます。 # これにより 、メモリ システムは、前のマイクロ命令で開始されたフェッチを完了するための 1 クロック ティックを獲得します。# シーケンサ命令は、命令デコードの先頭にジャンプするためのものです。 MAR 、1 、 PC 、 ADD 、 JMP 、命令デコード # 命令デコードは、エミュレート対象のプロセッサに特有の複雑な処理となるため、ここでは示していません。この例も簡略化されています。 # 多くのCPUは、オペコードに続くワードからアドレスを取得するだけでなく、複数の方法でアドレスを計算します。そのため、これらのCPUは、単一のジャンプ命令ではなく、関連するジャンプ命令群を備えています。各ティックではCPUの一部のみが使用され、マイクロ命令の残りのビット群は何も実行されないことがよくあります。ハードウェアとマイクロコードを慎重に設計することで、この特性を利用してCPUの異なる領域を使用する演算を並列化できます。例えば、上記のケースでは、最初のティックではALUは必要ないため、それより前の算術命令を完了するために使用できる可能性があります。
垂直マイクロコード
垂直マイクロコードでは、各マイクロ命令は明確にエンコードされています。つまり、ビットフィールドは通常、中間組み合わせロジックを通過し、CPU内部要素(ALU、レジスタなど)への制御信号とシーケンス信号を生成します。これは、ビットフィールドが制御信号とシーケンス信号を直接生成するか、最小限のエンコードのみを行う水平マイクロコードとは対照的です。その結果、垂直マイクロコードは命令長が短く、必要なストレージ容量も少なくなりますが、デコードに時間がかかり、CPUクロックが遅くなります。[ 41 ]
一部の垂直マイクロコードは、より複雑なコンピュータをエミュレートする単純な従来型コンピュータのアセンブリ言語に過ぎません。DEC Alphaプロセッサや、後期のIBMメインフレームSystem/390およびz/Architectureに搭載されたCMOSマイクロプロセッサなどのプロセッサは、特別なモードで実行されるマシンコードを使用します。このマシンコードは、通常のマシンコードでは利用できない特別な命令、特別なレジスタ、その他のハードウェアリソースにアクセスして、一部の命令やその他の機能を実装します。[ 42 ] [ 43 ]例えば、Alphaプロセッサのページテーブルウォークなどです。[ 44 ]これは、AlphaプロセッサではPALコード、IBMメインフレームプロセッサではミリコードと 呼ばれます。
垂直マイクロコードの別の形式には、次の 2 つのフィールドがあります。
| フィールド選択 | フィールド値 |
フィールド選択は、制御ストアのこのワードによってCPUのどの部分を制御するかを選択します。フィールド値は、CPUのその部分を制御します。このタイプのマイクロコードでは、設計者は制御ストア内の未使用ビットを減らすことでコストを削減するために、CPUの速度を低下させることを明示的に選択します。ただし、複雑さが軽減されるとCPUのクロック周波数が上昇し、命令あたりのサイクル数の増加による効果が薄れる可能性があります。
トランジスタが安価になるにつれて、マイクロコードを使用する CPU の設計では水平マイクロコードが主流となり、垂直マイクロコードの使用頻度は低下しました。
垂直マイクロコードと水平マイクロコードの両方が使用される場合、水平マイクロコードはナノコードまたはピココードと呼ばれることもあります。[ 45 ]
書き込み可能なコントロールストア
書き込み可能なマイクロコードを使用して構築されたコンピュータもいくつかありました。この設計では、マイクロコードをROMやハードワイヤードロジックに格納するのではなく、書き込み可能な制御ストア(WCS)と呼ばれるRAMに格納します。このようなコンピュータは、書き込み可能な命令セットコンピュータ(WISC)と呼ばれることもあります。[ 46 ]
多くの実験的なプロトタイプコンピュータは書き込み可能な制御ストアを使用しています。また、書き込み可能なマイクロコードを使用している商用マシンもあります。例としては、バローズ・スモール・システム、初期のゼロックス・ワークステーション、DEC VAX 8800(ノーチラス)ファミリー、シンボリックスLマシンとGマシン、IBM System/360とSystem/370の実装の一部、一部のDEC PDP-10マシン、[ 47 ]、およびデータジェネラルEclipse MV/8000などがあります。[ 48 ]
IBMシステム/370には、初期マイクロプログラムロード(IMLまたはIMPL)[ 49 ]と呼ばれる機能が含まれており、これはコンソールから、パワーオンリセット(POR )の一部として、または密結合マルチプロセッサ複合体内の別のプロセッサから呼び出すことができます。
IBM 360/85などの一部の商用マシンには、[ 50 ] [ 51 ]マイクロコード用の読み取り専用ストレージと書き込み可能な制御ストアの両方が搭載されています。
WCSには、マイクロプログラムのパッチ適用が容易であることや、特定のハードウェア世代においてはROMよりも高速なアクセスが可能であることなど、いくつかの利点があります。ユーザーがプログラム可能なWCSにより、ユーザーは特定の用途に合わせてマシンを最適化できます。
1995年のPentium Pro以降、いくつかのx86 CPUには書き込み可能なIntelマイクロコードが搭載されている。[ 52 ] [ 53 ]これにより、例えばIntel Core 2およびIntel Xeonのマイクロコードのバグは、チップ全体を交換するのではなく、マイクロプログラムにパッチを当てることで修正できるようになった。2つ目の顕著な例は、 2018年初頭に公表された自社の設計で発見されたセキュリティ上の脆弱性(SpectreおよびMeltdown )に対抗するため、Intelが最大10年前のプロセッサアーキテクチャの一部に提供したマイクロコードパッチのセットである。 [ 54 ] [ 55 ]マイクロコードのアップデートは、Linux、 [ 56 ] FreeBSD、[ 57 ] Microsoft Windows、[ 58 ]またはマザーボードのBIOSによってインストールできる。 [ 59 ]
HP 2100、DEC PDP-11/60、TI-990 /12、[ 60 ] [ 61 ] 、 Varian Data Machines V-70シリーズミニコンピュータなど、一部のマシンでは、ユーザーによるプログラムが可能な書き込み可能な制御ストアをオプションで提供しています。WCSオプションはマイクロプロセッサにも拡張されています。DEC LSI-11には、内部の8ビットマイクロマシンをプログラミングして、アプリケーション固有の命令セット拡張を作成できるオプションがあります。[ 62 ]
一部のマイクロコード周辺機器およびアダプタには書き込み可能なマイクロコードが搭載されており、通常はオペレーティングシステムのデバイスドライバによって読み込まれます。このようなマイクロコードは、デバイスのSRAMまたはDRAM(例えば、ビデオカードの GDDR SDRAM)に読み込まれます。
VLIWとRISCとの比較
このセクションは更新が必要です。理由は次のとおりです。現在、多くのCISCプロセッサは命令のフェッチとデコードをハードウェアで実行し、ほとんど、あるいはすべての命令をハードウェアで実行しています。また、RISCプロセッサとCISCプロセッサはどちらもクロックサイクルごとに複数の命令を実行します。(2023年12月) |
複雑な命令を多用するマイクロコード化されたプロセッサの設計トレンドは1960年代初頭に始まり、1980年代半ば頃まで続きました。この時点で、RISC設計哲学がより顕著になり始めました。
マイクロコードを使用するCPUは、通常、1つの命令を実行するのに数クロックサイクルかかります。これは、その命令のマイクロプログラムの各ステップに1クロックサイクルずつかかるためです。一部のCISCプロセッサには、実行に非常に長い時間を要する命令が含まれています。このような変動は、割り込みレイテンシと、現代のシステムでははるかに重要なパイプライン処理の両方に影響を与えます。
新しいプロセッサを設計する場合、ハードワイヤード制御RISC にはマイクロコード CISC に比べて次のような利点があります。
- プログラミングはアセンブリ レベルから大きく移行したため、生産性上の理由から複雑な指示を提供する価値はなくなりました。
- よりシンプルな命令セットにより、ハードウェアによる直接実行が可能になり、マイクロコード実行によるパフォーマンスの低下を回避できます。
- 分析により、複雑な命令はほとんど使用されないため、それらに割り当てられるマシン リソースの大部分が無駄になっていることがわかりました。
- めったに使用されない複雑な命令に割り当てられるマシン リソースは、より単純でよく使用される命令のパフォーマンスを高速化するために使用する方が効果的です。
- 複雑なマイクロコード化された命令は、変化する多くのクロック サイクルを必要とする可能性があり、パフォーマンスを向上させるためにパイプライン化することが困難です。
反論もあります:
- マイクロコードが多用された実装における複雑な命令は、マイクロコード空間を除けば、マシンリソースをそれほど消費しない場合があります。例えば、オリジナルのZ80、8086などでは、実効アドレスの計算とオペランドからの結果の計算に同じALUが使用されることがよくあります。
- より単純な非RISC命令(すなわち、直接メモリオペランドを扱う命令)は、現代のコンパイラで頻繁に使用されます。即値からスタック(すなわち、メモリ結果)への算術演算でさえ、一般的に用いられています。このようなメモリ操作は、しばしば可変長のエンコードを伴うため、パイプライン化がより困難ですが、それでも十分に実現可能です。i486 、 AMD K5、Cyrix 6x86、Motorola 68040などがその好例です。
- 非 RISC 命令は本質的に命令あたりの作業量が多く (平均して)、通常は高度にエンコードされているため、同じプログラムの全体的なサイズが小さくなり、限られたキャッシュ メモリをより有効に活用できます。
多くのRISCおよびVLIWプロセッサは、キャッシュ内にあるすべての命令を1サイクルで実行するように設計されています。これは、マイクロコードを搭載したCPUが1サイクルごとに1マイクロ命令を実行する方法と非常に似ています。VLIWプロセッサの命令は、非常に幅の広い水平マイクロコードと同様に動作しますが、通常、マイクロコードが提供するようなハードウェアに対するきめ細かな制御は備えていません。RISC命令は、幅の狭い垂直マイクロコードに類似している場合があります。
マイクロオペレーション
NexGen Nx586以降のx86ファミリー、Intel Pentium Pro、AMD K5などの最新のCISC実装では、 RISCや従来のマイクロコードに類似した命令エンコーディングを用いて、命令を動的バッファリングされたマイクロオペレーションにデコードします。ハードワイヤードの命令デコードユニットは、一般的なx86命令についてはマイクロオペレーションを直接出力しますが、より複雑な命令や使用頻度の低い命令については、マイクロオペレーションを含むより従来型のマイクロコードROMにフォールバックします。[ 2 ]
たとえば、x86 は、ループや文字列命令、浮動小数点ユニットの超越関数や非正規化数などの異常な値、 CPUIDなどの特殊用途の命令などの複雑なマルチステップ操作を処理するために、マイクロコードからマイクロ操作を検索する場合があります。
「マイクロコード」の別の意味
PDP-8
PDP -8は、 1965年にDigital Equipment Corporation(DEC)によって発売された12ビットミニコンピュータのファミリーです。OPR (OPeRate)命令は「マイクロコード化」されていました。これは今日の言葉の意味とは異なり、命令ワードの各ビットが特定の動作を指定することを意味していました。プログラマは複数のビットを設定することで、1つの命令サイクルで複数の動作を実行できました。これらの動作の例としては、アキュムレータのクリア、アキュムレータの補数、右回転、右回転2回、バイトスワップなどがあります。
組み込みファームウェア
一部のハードウェアベンダー、特にIBMとLenovoは、 「マイクロコード」という用語を「組み込みファームウェア」と互換的に使用しています。この文脈では、デバイス内のすべてのコードは、マイクロコードであれマシンコードであれ、マイクロコードと呼ばれます。例えば、ハードディスクドライブのマイクロコードの更新は、マイクロコードとファームウェアの両方の更新を含む場合があります。[ 63 ]組み込みファームウェアは、ネットワークプロセッサ、デジタル信号プロセッサ、チャネルコントローラ、ディスクコントローラ、ネットワークインタフェースコントローラ、フラッシュメモリコントローラ、グラフィックスプロセッシングユニットなどの特定用途向けプロセッサやその他のハードウェアで普及しています。
参照
注記
- ^ IBM の水平マイクロコード プロセッサには、デコードを必要とする複数のマイクロ オーダーとレジスタ選択フィールドがありました。
参考文献
- ^ a b cケント, アレン; ウィリアムズ, ジェームズ・G. (1993年4月5日).コンピュータサイエンスとテクノロジー百科事典: 第28巻 - 補足13.ニューヨーク: マルセル・デッカー社. p. 34. ISBN 978-0-8247-2281-4. 2016年11月20日時点のオリジナルよりアーカイブ。2016年1月17日閲覧。
- ^ a b Fog, Agner (2017-05-02). Intel、AMD、VIA CPUのマイクロアーキテクチャ(PDF) (レポート). デンマーク工科大学. 2017年3月28日時点のオリジナルよりアーカイブ(PDF) . 2024年8月21日閲覧。
- ^ a b Both, David (2020年7月23日). 「中央処理装置(CPU):その構成要素と機能」 . Red Hat .
- ^ Pickens, John. 「NMOS 6502 オペコード」 . 6502.org .
- ^ a b Shirriff, Ken. 「8086プロセッサのマイクロコードエンジンの仕組み」 Ken Shirriffのブログ.
- ^ 「ISO/IEC/IEEE 24765:2017(en) システムおよびソフトウェアエンジニアリング — 語彙」 www.iso.org . 2024年6月23日閲覧。
- ^ VAX 9000システム技術説明(PDF) . Digital Equipment Corporation . 1990年5月. pp. 3-5 – 3-32 . EK-KA90S-TD-001.
- ^ VAX 8800システム技術解説書 第2巻(PDF) . Digital Equipment Corporation . 1986年7月. EK-KA882-TD-PRE.
- ^ Manning, BM; Mitby, JS; Nicholson, JO (1979年11月). 「PLA制御ストアを備えたマイクロプログラムプロセッサ」 . IBM Technical Disclosure Bulletin . 22 (6). 2012年10月1日時点のオリジナルよりアーカイブ。 2011年7月10日閲覧。
- ^ CPUでの使用においては、ROM/PLA制御ストアを指すことが多い。Supnik , Bob (2008年2月24日). 「J-11: DECの4番目で最後のPDP-11マイクロプロセッサ設計…機能…ROM/PLA制御ストア」。2011年7月9日時点のオリジナルよりアーカイブ。 2011年7月10日閲覧。
- ^ “6502 Images” . 2016年3月4日時点のオリジナルよりアーカイブ。2015年1月22日閲覧。
- ^ IBM System/360 モデル50 機能特性(PDF) . IBM . 1967. p. 7. A22-6898-1 . 2021年10月29日閲覧。
- ^ Bell, Gordon ; Strecker, WD 「PDP-11から学んだこと – VAXとAlphaから学んだこと」(PDF)(レポート)。p. 30。2025年6月26日閲覧。
- ^現代数学インフォベース 2006年ISBN 978-0-7910-9720-5。
- ^ Everett, RR; Swain, FE (1947). Whirlwind I コンピュータブロックダイアグラム(PDF) (技術レポート). MIT サーボメカニズム研究所. R-127. 2012年6月17日時点のオリジナル(PDF)からアーカイブ。 2006年6月21日閲覧。
- ^
- ウィルクス、モーリス(1951)「自動計算機の設計における最良の方法(技術報告書)」マンチェスター大学
- ウィルクス、モーリス (1989). 「自動計算機を設計する最良の方法」(PDF) . キャンベル=ケリー, M. (編). 『初期の英国コンピュータ会議』 . MIT Press. pp. 182–4 . ISBN 978-0-262-23136-7。
- ^ a b Shirriff, Ken. 「マイクロコードからIBM 360/50メインフレームをシミュレートする」 Ken Shirriffのブログ。
- ^ Supnik, Bob (1988年5月). VLSI VAXマイクロアーキテクチャ(PDF) . Digital Equipment.
- ^ Starnes, Thomas (1983年4月). 「モトローラMC68000の設計哲学」Byte .
- ^ a b cコック、ジョン、マークスタイン、ヴィクトリア(1990年1月)。「IBMにおけるRISC技術の進化」(PDF)。IBM Journal of Research and Development。34(1):4–11。doi:10.1147/rd.341.0004 。2025年4月12日時点のオリジナル(PDF)からアーカイブ。
- ^ a bクラーク、ダグラス、ストレッカー、ウィリアム(1980年9月)。 「パターソンとディッツェル著『縮小命令セットコンピュータの事例』へのコメント」 ACM SIGARCHコンピュータアーキテクチャニュース8 ( 6 ):34–38。doi:10.1145/641914.641918。S2CID 14939489。
- ^「Intel i486 CPUの実行パイプライン」。Compcon Spring '90論文集。第35回IEEEコンピュータソサエティ国際知的レバレッジ会議。カリフォルニア州サンフランシスコ:IEEE。doi : 10.1109 / CMPCON.1990.63682。ISBN 978-0-8186-2028-7。
- ^ 「Pentium Proプロセッサ 150、166、180、200MHz」(PDF)(データシート)。Intel 1995年11月。
- ^ a b「パートI / 共通アーキテクチャ、第6章 共通PALcodeアーキテクチャ」Alpha AXPアーキテクチャリファレンスマニュアル(PDF)(第2版)Digital Press、1995年、ISBN 978-1-55558-145-9。
- ^ Rogers, Bob (2012年9~10月). 「zEnterprise Millicodeとは何か、なぜ必要なのか」 . IBM Systems Magazine . 2012年10月9日時点のオリジナルよりアーカイブ。
- ^ 「EMIDEC 1100 コンピュータ」 Emidec.org.uk。2010年6月12日時点のオリジナルよりアーカイブ。2010年4月26日閲覧。
- ^ IBM System/360 モデル25 機能特性(PDF) . IBM. 1968年1月. p. 22. A24-3510-0 . 2021年10月29日閲覧。
- ^ a b cフィールドエンジニアリング操作理論、2030処理装置、System/360モデル30 (PDF) (初版)。IBM。1967年6月。Y24-3360-1。2020年4月1日時点のオリジナルよりアーカイブ(PDF) 。 2019年11月9日閲覧。
- ^ Edward A. Snow、Daniel P. Siewiorek (1982). 「PDP-11ファミリーの実装と性能評価」 . Daniel P. Siewiorek、C. Gordon Bell、Allen Newell (編) . 『コンピュータ構造:原理と例』 .ニューヨーク、NY : McGraw-Hill Book Company . p. 671 . ISBN 978-0-07-057302-4。
- ^ソルティス、フランク(1981年9月)「中小企業向けデータ処理システムの設計」 IEEE Computer誌、14巻、77~ 93頁。doi : 10.1109 /CM.1981.220610。S2CID 398484。
- ^ Frank G. Soltis (1997). 『AS/400の内側 第2版』 Duke Press. ISBN 978-1-882419-66-1。
- ^ 「インタビュー:N64(ナブー)との戦い」 IGN64、2000年11月10日。2007年9月13日時点のオリジナルよりアーカイブ。2008年3月27日閲覧。
- ^ 「インディ・ジョーンズ/地獄の機械」 IGN 2000年12月12日. 2013年9月27日時点のオリジナルよりアーカイブ。2013年9月24日閲覧。
- ^ Meynink, Todd (2000年7月28日). 「Postmortem: Angel Studios' Resident Evil 2 (N64 Version)」 . Gamasutra . United Business Media LLC . 2012年10月21日時点のオリジナルよりアーカイブ。 2010年10月18日閲覧。
- ^ Digital Scientific Meta 4 シリーズ 16 コンピュータシステムリファレンスマニュアル(PDF) . Digital Scientific Corporation. 1971年5月. 7032MO. 2020年1月14日時点のオリジナルよりアーカイブ(PDF) . 2020年1月14日閲覧。
- ^ Digital Scientific Meta 4 コンピュータシステム 読み取り専用メモリ (ROM) リファレンスマニュアル(PDF) . Digital Scientific Corporation. 1970年3月. 7024MO. 2019年9月23日時点のオリジナルよりアーカイブ(PDF) . 2020年1月14日閲覧。
- ^ Digital Scientific Meta 4 シリーズ 16 コンピュータシステム 暫定システムマニュアル(PDF)。Digital Scientific Corporation、1970年6月。7006MO。2019年9月23日時点のオリジナルよりアーカイブ(PDF) 。 2020年1月14日閲覧。
- ^ Digital Scientific Meta 4コンピュータシステムの典型的なROMパターンリストとIBM 1130命令セットをシミュレートするプログラム(PDF)。Digital Scientific Corporation。1970年1月。M4/005P-170。2020年3月24日時点のオリジナルからアーカイブ(PDF) 。 2020年1月14日閲覧。
- ^ 「Western Digital 1600」 . AntiqueTech. 2017年1月3日時点のオリジナルよりアーカイブ。 2017年1月5日閲覧。
- ^ Hayes, John P. (1978).コンピュータアーキテクチャと組織. McGraw-Hill. p. 300. ISBN 978-0-07-027363-4。
- ^ Neal Harman; Andy Gimblett (2009年10月12日). 「CS-323: 高性能マイクロプロセッサ – 第1章 マイクロプログラミング」 . mat.uson.mx . 2015年4月19日時点のオリジナルよりアーカイブ。 2015年8月8日閲覧。
- ^ Vaupel, Robert (2013). System zとz/OSを例にしたメインフレーム環境の高可用性とスケーラビリティ. KIT Scientific. p. 26. ISBN 978-3-7315-0022-3。
- ^ Rogers, Bob (2012年9~10月). 「zEnterprise Millicodeとは何か、なぜ必要なのか」 . IBM Systems Magazine . 2013年10月16日時点のオリジナルよりアーカイブ。2013年11月7日閲覧。
- ^ 「PALcode for Alpha Microprocessors System Design Guide」(PDF) . Digital Equipment Corporation . 1996年5月. 2011年8月15日時点のオリジナルよりアーカイブ(PDF) . 2013年11月7日閲覧。
- ^ Spruth, Wilhelm (2012年12月). 『マイクロプロセッサの設計』 Springer Science & Business Media. p. 31. ISBN 978-3-642-74916-2. 2016年11月20日時点のオリジナルよりアーカイブ。2015年1月18日閲覧。
- ^ Koopman, Philip Jr. (1987). 「書き込み可能な命令セット、スタック指向コンピュータ:WISCコンセプト」(PDF) . The Journal of Forth Application and Research : 49– 71. 2008年5月11日時点のオリジナルよりアーカイブ(PDF) 。
- ^ Smith, Eric (2002年9月3日). 「Re: 様々なマシンのマイクロコードのサイズは?」 .ニュースグループ: alt.folklore.computers . Usenet: [email protected] . 2009年1月26日時点のオリジナルよりアーカイブ。 2008年12月18日閲覧。
- ^スマザーマン、マーク。「CPSC 3300 / 新しいマシンの魂」 。 2023年10月27日閲覧。4096
x 75ビットSRAM書き込み可能制御ストア:1パリティビット付き74ビットマイクロ命令(18フィールド)
- ^ IBM System/370 Principles of Operation (PDF) . 第4版. IBM. 1974年9月. 98, 245ページ. GA22-7000-4. 2012年2月29日時点のオリジナルよりアーカイブ(PDF) . 2012年8月27日閲覧。
- ^ IBM System/360 モデル85 機能特性(PDF) . 第2版. IBM. 1968年6月. A22-6916-1 . 2021年10月29日閲覧。
- ^ IBM System/360 特殊機能の説明 709/7090/7094 互換機能 IBM System/360 モデル85 用。初版。IBM。1969年3月。GA27-2733-0。
- ^スティラー、アンドレアス;ポール、マティアス R. (1996-05-12)。「プロゼソルグフラスター」。c't – コンピュータ技術に関する雑誌。トレンドとニュース (ドイツ語)。ハイセ・フェルラーク。2017-08-28 のオリジナルからアーカイブ。2017 年 8 月 28 日に取得。
- ^「9.11: マイクロコード更新機能」。Intel 64およびIA-32アーキテクチャソフトウェア開発者マニュアル、第3A巻:システムプログラミングガイド、パート1(PDF)。Intel 。 2016年9月。
- ^インテル、最新CPUすべてにパッチ適用、次期第8世代チップにもハードウェア修正を約束ポール・アルコーン 2018年3月15日
- ^ 「Linux* プロセッサー マイクロコード データ ファイルのダウンロード」。2018年3月19日時点のオリジナルよりアーカイブ。2018年3月21日閲覧。
- ^ 「Linux用Intelマイクロコード・アップデート・ユーティリティ」 。2012年2月26日時点のオリジナルよりアーカイブ。
- ^ "[ports] Index of /head/sysutils/cpupdate" . Freebsd.org. 2020年4月1日時点のオリジナルよりアーカイブ。2020年1月16日閲覧。
- ^ 「Intelプロセッサ搭載システムの信頼性を向上させるマイクロコード信頼性アップデートが利用可能になりました」。2008年2月23日時点のオリジナルよりアーカイブ。 2008年2月25日閲覧。
- ^ 「サーバー製品 - POST中にマイクロコード不足メッセージが表示された場合、BIOSアップデートが必要です」Intel 2013年1月24日。 2014年9月1日時点のオリジナルよりアーカイブ。
- ^ 「Model 990/12 LR Computer Depot メンテナンスおよび修理マニュアル」(PDF) . Bitsavers.org . Texas Instruments . 2024年2月15日閲覧。
- ^ Texas Instruments Model 990 Computer MDS-990 Microcode Development System Programmer's Guide (1979年8月15日版). Texas Instruments Archives, RG-20 accession 94-08, Box 10, 45C. DeGolyer Library, Southern Methodist University, Dallas, TX USA.
{{cite book}}: CS1 メンテナンス: 場所 (リンク) - ^ LSI-11 WCSユーザーズガイド(PDF) (第1版). Digital Equipment Corporation. 1978年6月. 2023年2月23日時点のオリジナルよりアーカイブ(PDF) . 2023年1月7日閲覧。
- ^ 「IBM pSeries Servers - Microcode Update for Ultrastar 73LZX (US73) 18/36 GB」 IBM 2019年4月19日時点のオリジナルよりアーカイブ。 2015年1月22日閲覧。
さらに読む
- スミス, リチャード・E. (1988). 「コンピュータアーキテクチャの歴史的概観」 . Annals of the History of Computing . 10 (4): 277– 303. Bibcode : 1988IAHC...10d.277S . doi : 10.1109/MAHC.1988.10039 . S2CID 16405547. 2006年6月21日閲覧.
- スモーターマン、マーク(2022年10月)「マイクロプログラミングの簡潔な歴史」 。 2023年10月27日閲覧。
- Wilkes, MV (1986). 「マイクロプログラミングの起源」 . Annals of the History of Computing . 8 (2): 116– 126. Bibcode : 1986IAHC....8b.116M . doi : 10.1109/MAHC.1986.10035 . S2CID 1978847. 2006年8月7日閲覧.
- Wilkes, MV ; Stringer, JB (1953年4月). 「マイクロプログラミングと電子デジタル計算機の制御回路の設計」 .ケンブリッジ哲学協会数学紀要. 49 (2): 230– 238. Bibcode : 1953PCPS...49..230W . doi : 10.1017/S0305004100028322 . S2CID 62230627. 2006年8月23日閲覧.
- ハッソン, SS (1970). 『マイクロプログラミングの原理と実践』 プレンティス・ホール出版. ISBN 978-0-13-581454-3。
- Tucker, SG (1967). 「SYSTEM/360のマイクロプログラム制御」 . IBM Systems Journal . 6 (4): 222– 241. doi : 10.1147/sj.64.0222 . 2016年3月3日時点のオリジナルよりアーカイブ。 2009年1月27日閲覧。
- Shirriff, Ken (2022年12月). 「8086プロセッサのマイクロコードエンジンの仕組み」