マイクロコード

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

プロセッサの設計ではマイクロコードは、中央処理装置(CPU)ハードウェアとコンピュータのプログラマに見える命令セットアーキテクチャの間にコンピュータ組織の層を挿入する手法です。[1]マイクロコードは、ハードウェアレベルの命令のレイヤーであり、多くのデジタル処理要素で高レベルのマシンコード命令または内部有限状態マシンシーケンスを実装します。マイクロコードは汎用の中央処理装置で使用されていますが、現在のデスクトップCPUでは、より高速な場合のフォールバックパスにすぎません。ハードワイヤードコントロールユニットは処理できません。[2]

マイクロコードは通常、特別な高速メモリに常駐し、マシン命令、ステートマシンデータ、またはその他の入力を一連の詳細な回路レベルの操作に変換します。機械の命令を基礎となる電子機器から分離し、命令をより自由に設計および変更できるようにします。また、コンピュータ回路の複雑さを軽減しながら、複雑なマルチステップ命令の構築を容易にします。マイクロコードの記述はマイクロプログラミングと呼ばれることが多く、特定のプロセッサ実装のマイクロコードはマイクロプログラムと呼ばれることもあります

より広範なマイクロコーディングにより、小さくて単純なマイクロアーキテクチャは、より広いワード長、より多くの実行ユニットなどを備えたより強力なアーキテクチャエミュレートできます。これは、プロセッサフ​​ァミリのさまざまな製品間のソフトウェア互換性を実現する比較的簡単な方法です。

一部のハードウェアベンダー、特にIBMは、ファームウェアの同義語としてマイクロコードという用語を使用していますこのように、デバイス内のすべてのコードは、マイクロコードまたはマシンコードに関係なく、マイクロコードと呼ばれます。たとえば、ハードディスクドライブにはマイクロコードが更新されていると言われていますが、通常はマイクロコードとファームウェアの両方が含まれています。[3]

概要

コンピュータのソフトウェアスタックの最下層は、従来、プロセッサの生のマシンコード命令です。マイクロコード化されたプロセッサでは、マイクロコードはそれらの命令をフェッチして実行します。混乱を避けるために、各マイクロプログラム関連の要素は、マイクロプレフィックス(マイクロ命令、マイクロアセンブラ、マイクロプログラマ、マイクロアーキテクチャなど )によって区別されます。

エンジニアは通常、プロセッサの設計段階でマイクロコードを記述し、読み取り専用メモリ(ROM)またはプログラマブルロジックアレイ(PLA)[4]構造、あるいはその両方に格納します。[5]ただし、静的ランダムアクセスメモリ(SRAM)またはフラッシュメモリにマイクロコードの一部またはすべてが保存されているマシンも存在しますこれは、従来、コンピューターのコンテキストでは書き込み可能なコントロールストアとして表され、読み取り専用または読み取り/書き込みメモリのいずれかになります。後者の場合、CPU初期化プロセスは、マイクロコードを別の記憶媒体からコントロールストアにロードします。マイクロコードを変更して、命令セットのバグを修正したり、新しいマシン命令を実装したりすることができます。

複雑なデジタルプロセッサは、本質的に非同期で並列に実行する必要のあるサブタスクを委任するために、複数の(場合によってはマイクロコードベースの)制御ユニットを使用することもあります。高レベルのプログラマー、またはアセンブリ言語のプログラマーでさえ、通常、マイクロコードを見たり変更したりすることはありません。ファミリ内の異なるプロセッサ間で下位互換性を保持することが多いマシンコードとは異なり、マイクロコードは、特定のプロセッサ設計自体の固有の部分を構成するため、設計され た正確な電子回路でのみ実行されます。

マイクロプログラムは、ハードウェア回路の非常に基本的なレベルでCPUを制御する一連のマイクロ命令で構成されています。たとえば、1つの一般的な水平マイクロ命令で、次の操作を指定できます。

  • レジスタ1をALUのA側に接続します
  • レジスタ7をALUのB側に接続します
  • 2の補数の加算を実行するようにALUを設定します
  • ALUのキャリー入力をゼロに設定します
  • 結果値をレジスタ8に格納します
  • ALUステータスフラグ(ゼロオーバーフロー、およびキャリー)から条件コードを更新します
  • 次のマイクロ命令のために、特定のマイクロPCアドレスにマイクロジャンプします

1サイクルですべてのプロセッサの機能を同時に制御するために、マイクロ命令は多くの場合50ビットよりも幅が広くなっています。たとえば、エミュレータ機能を備えた360/85の128ビット。マイクロプログラムは慎重に設計され、可能な限り最速で実行されるように最適化されています。マイクロプログラムが遅いと、マシン命令が遅くなり、そのような命令を使用する関連アプリケーションプログラムのパフォーマンスが低下するためです。

正当化

マイクロコードはもともと、コンピューターの制御ロジックを開発するためのより簡単な方法として開発されました。当初、CPU命令セットハードワイヤードでした。マシン命令(オペランドアドレスの計算、読み取り、書き込みを含む)をフェッチ、デコード、および実行するために必要な各ステップは、組み合わせロジックと最小限のシーケンシャルステートマシン回路によって直接制御されました。このようなハードワイヤードプロセッサは非常に効率的でしたが、マルチステップアドレス指定と複雑な操作(以下を参照)を備えた強力な命令セットが必要なため、設計とデバッグが困難でした。特に非常に不規則なエンコーディングが使用されている場合、高度にエンコードされた可変長の命令もこれに寄与する可能性があります。

マイクロコードは、プロセッサの動作とプログラミングモデルの多くを、専用の回路ではなくマイクロプログラムルーチンを介して定義できるようにすることで、作業を簡素化しました。設計プロセスの後半でも、マイクロコードは簡単に変更できましたが、ハードワイヤードCPUの設計は変更が非常に面倒でした。したがって、これによりCPUの設計が大幅に容易になりました。

1940年代から1970年代後半まで、プログラミングの大部分はアセンブリ言語で行われていました。高レベルの命令はプログラマーの生産性が向上することを意味するため、マイクロコードの重要な利点は、強力なマシン命令を比較的簡単に定義できることでした。これの究極の拡張は、「直接実行可能高水準言語」設計であり、PL / Iなどの高水準言語の各ステートメントは、コンパイルせずにマイクロコードによって完全かつ直接実行されます。IBM FutureSystemsプロジェクトDataGeneral FountainheadProcessorはこの例です1970年代、CPUの速度は、メモリの速度やメモリブロック転送などの多くの手法よりも急速に成長しましたこれを軽減するために、メモリのプリフェッチマルチレベルキャッシュが使用されました。マイクロコードによって可能になった高レベルのマシン命令は、より複雑なマシン命令がより少ないメモリ帯域幅を必要とするため、さらに役立ちました。たとえば、文字列に対する操作は単一のマシン命令として実行できるため、複数の命令フェッチを回避できます。

複雑なマイクロプログラムによって実装された命令セットを備えたアーキテクチャには、IBM System / 360およびDigitalEquipment CorporationVAXが含まれてい ました。ますます複雑になるマイクロコード実装の命令セットのアプローチは、後に複雑な命令セットコンピュータ(CISC)と呼ばれました。多くのマイクロプロセッサで使用されている別のアプローチは、主に命令のデコードに1つ以上のプログラマブルロジックアレイ(PLA)または読み取り専用メモリ(ROM)(組み合わせロジックの代わりに)を使用し、単純なステートマシン(多くの場合、または任意のマイクロコード)がほとんどのシーケンスを実行します。MOSテクノロジー6502は、命令のデコードとシーケンスにPLAを使用するマイクロプロセッサの例です。PLAはチップの顕微鏡写真で見ることができ[6]、その動作はトランジスタレベルのシミュレーションで見ることができます。

マイクロプログラミングは、現在でもCPU設計で使用されています。場合によっては、シミュレーションでマイクロコードがデバッグされた後、コントロールストアの代わりにロジック関数が使用されます。[要出典]論理関数は、多くの場合、同等のマイクロプログラムメモリよりも高速で安価です。

メリット

プロセッサのマイクロプログラムは、通常のプログラマーに見えるアセンブリ命令よりも、より原始的で、まったく異なる、はるかにハードウェア指向のアーキテクチャで動作します。マイクロコードは、ハードウェアと連携して、プログラマーに見えるアーキテクチャを実装します。基盤となるハードウェアは、可視アーキテクチャとの固定関係を持つ必要はありません。これにより、基盤となるさまざまなハードウェアマイクロアーキテクチャに特定の命令セットアーキテクチャを簡単に実装できます。

IBM System / 360は、16個の汎用レジスターを備えた32ビット・アーキテクチャーを備えていますが、System / 360の実装のほとんどは、はるかに単純な基礎となるマイクロアーキテクチャーを実装するハードウェアを使用しています。たとえば、System / 360モデル30には、算術論理演算装置(ALU)とメインメモリへの8ビットデータパスがあり、汎用レジスタを高速コアメモリの特殊ユニットに実装し、System / 360モデル40は、ALUへの8ビットデータパスとメインメモリへの16ビットデータパスを備えており、高速コアメモリの特殊ユニットに汎用レジスタを実装しています。モデル50は完全な32ビットデータパスを備えており、高速コアメモリの特別なユニットに汎用レジスタを実装しています。[7]モデル65からモデル195は、より大きなデータパスを持ち、より高速なトランジスタ回路に汎用レジスタを実装します。[要出典]このように、マイクロプログラミングにより、IBMは、ハードウェアが大幅に異なり、幅広いコストとパフォーマンスにまたがる多くのSystem / 360モデルを設計できると同時に、すべてのアーキテクチャーに互換性があります。これにより、モデルごとに作成する必要のある固有のシステムソフトウェアプログラムの数が大幅に削減されます。

同様のアプローチが、Digital Equipment Corporation(DEC)のVAXファミリのコンピュータで使用されました。その結果、VAXプロセッサが異なれば、使用するマイクロアーキテクチャも異なりますが、プログラマーから見えるアーキテクチャは変わりません。

マイクロプログラミングは、プロセッサの欠陥(バグを修正するためのフィールド変更のコストも削減します。多くの場合、バグは、ハードウェアロジックと配線 に変更を加えるのではなく、マイクロプログラムの一部を置き換えることで修正できます。

歴史

1947年、MIT Whirlwindの設計により、コンピューターの設計を簡素化し、アドホックな方法を超える方法として、コントロールストアの概念が導入されました。コントロールストアはダイオードマトリックスです。2次元の格子で、1つの次元はCPUの内部クロックからの「制御時間パルス」を受け入れ、もう1つの次元はゲートや他の回路の制御信号に接続します。「パルスディストリビュータ」は、CPUクロックによって生成されたパルスを受け取り、それらを8つの別々のタイムパルスに分割します。各タイムパルスは、ラティスの異なる行をアクティブにします。行がアクティブになると、それに接続されている制御信号がアクティブになります。[8]

別の言い方をすれば、コントロールストアによって送信される信号は、自動ピアノロールのように再生されます。つまり、ビットで構成された非常に幅の広い単語のシーケンスによって制御され、順番に再生されます。しかし、コントロールストアでは、は短く、継続的に繰り返されます。

1951年、モーリス・ウィルクス[9]は、コンピューターソフトウェアの条件付きに似た概念である条件付き実行を追加することにより、この概念を強化しました。彼の最初の実装は、マトリックスのペアで構成されていました。最初のマトリックスはWhirlwindコントロールストアの方法で信号を生成し、2番目のマトリックスは次のサイクルで呼び出す信号の行(いわばマイクロプログラム命令ワード)を選択しました。条件は、コントロールストアの単一の行が2番目のマトリックスの選択肢から選択できる方法を提供することによって実装されました。これにより、制御信号は検出された内部信号を条件としました。ウィルクスはマイクロプログラミングという用語を作り出しましたこの機能を説明し、単純なコントロールストアと区別します。

  • EMIDEC 1100 [10]、「レース」と呼ばれるフェライトコアに通されたワイヤで構成されるハードワイヤードコントロールストアを使用していると言われています。
  • IBM System / 360シリーズのほとんどのモデルは、マイクロプログラムされています。
    • モデル25は、マイクロプログラムの制御ストレージを保持するためにコアストレージの上位16Kバイトを使用するという点でSystem / 360モデルの中でユニークです2025は、7つの制御ワード(またはマイクロ命令)を備えた16ビットのマイクロアーキテクチャを使用しています。システムのメンテナンス後、または動作モードの変更時に、マイクロコードはカードリーダー、テープ、またはその他のデバイスからロードされます。[11]このモデルのIBM1410エミュレーションは、この方法でロードされます。
    • モデル30は、ハードウェアレジスタが数個しかない8ビットマイクロアーキテクチャを使用しています。プログラマーが見たものはすべて、マイクロプログラムによってエミュレートされます。このモデルのマイクロコードは、「CROS」ユニット(コンデンサ読み取り専用ストレージ)と呼ばれる、カードごとに専用のリーダーでマシン内に保存される特別なパンチカードにも保持されます。[12] :2–5  1401/1440/1460エミュレーションで注文されたマシン[12] :4–29 および1620エミュレーションで注文されたマシン用に別のCROSユニットが追加されました。[12] :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 )でマイクロプログラムされています。コアを介して配線されたワイヤは、プロセッサ内のさまざまなデータおよびロジック要素に対して有効になっています。
  • Digital Equipment CorporationのPDP-11プロセッサは、PDP-11 / 20を除いて、マイクロプログラムされています。[13]
  • ほとんどのDataGeneralEclipseミニコンピューターはマイクロプログラムされています。Eclipse MV / 8000のマイクロコードを作成するタスクについては、ピューリッツァー賞を受賞した本「超マシン誕生」で詳しく説明されています。
  • バロウズの多くのシステムはマイクロプログラムされています:
  • B700「マイクロプロセッサ」は、メインメモリに格納された16ビットマイクロ命令のシーケンスを使用して、アプリケーションレベルのオペコードを実行します。これらはそれぞれ、レジスタロード操作であるか、読み取り専用メモリに格納されている単一の56ビット「ナノコード」命令にマップされています。これにより、比較的単純なハードウェアをメインフレーム周辺機器コントローラーとして機能させることも、スタンドアロンコンピューターとしてパッケージ化することもできます。
  • B1700は、ビットアドレス指定可能なメインメモリを含む根本的に異なるハードウェアで実装されていますが、同様のマルチレイヤー構成を備えています。オペレーティングシステムは、必要な言語に合わせてインタプリタをプリロードします。これらのインタープリターは、 COBOLFortranなどのさまざまな仮想マシンを提供します。
  • Sony PlayStation2のVU0およびVU1ベクトルユニットはマイクロプログラム可能です。実際、VU1には、SDKの最初の数世代のマイクロコードを介してのみアクセスできます。
  • MicroCore Labs MCL86MCL51、およびMCL65は、Intel 8086 / 8088、8051、およびMOS6502の高度にエンコードされた「垂直」マイクロシーケンサー実装の例です。
  • Digital Scientific Corp. Meta 4シリーズ16コンピューターシステムは、1970年に最初に利用可能になったユーザーマイクロプロガンマブルシステムでした。マイクロコードは、主に垂直スタイルで、32ビットのマイクロ命令を使用していました[19]命令は、ビット位置のグリッドを備えた交換可能なプログラムボードに保存されました。1ビットは増幅器によって検出された小さな金属の正方形で表され、0ビットは正方形がないことで表されました。[20]システムは、最大4Kの16ビットワードのマイクロストアで構成できます。Digital Scientificの製品の1つは、IBM1130用のエミュレーターでし[21] [22]
  • MCP-1600は、1970年代後半から1980年代初頭にかけて、Western Digitalによって製造されたマイクロプロセッサであり、マイクロコードで3つの異なるコンピュータアーキテクチャを実装するために使用されまし。PascalMicroEngine WD16およびDEC LSI -11、コスト削減されたPDP-11です。 。[23]
  • 以前のx86プロセッサは完全にマイクロコード化されています。Intel 80486以降それほど複雑でない命令がハードウェアに直接実装されています。x86プロセッサは、IntelP6マイクロアーキテクチャおよびAMDK7マイクロアーキテクチャ以降、パッチ可能なマイクロコードBIOSまたはオペレーティングシステムによるパッチ)を実装しました。
  • 一部のビデオカードワイヤレスネットワークインターフェイスコントローラーは、パッチ可能なマイクロコード(オペレーティングシステムによるパッチ)を実装しました。

実装

マイクロプログラムの各マイクロ命令は、CPUを内部的に構成する機能要素を制御するビットを提供します。ハードワイヤードCPUに対する利点は、内部CPU制御が特殊な形式のコンピュータープログラムになることです。したがって、マイクロコードは、複雑な電子設計の課題(CPUの制御)をそれほど複雑でないプログラミングの課題に変換します。これを利用するために、CPUはいくつかの部分に分割されています。

  • Iユニットは、ハードウェアで命令をデコードし、 Eユニットと並行して命令を処理するためのマイクロコードアドレスを決定する場合があります
  • マイクロシーケンサーは、コントロールストアの次の単語を選択します。シーケンサーはほとんどがカウンターですが、通常、一部のデータ、通常は命令レジスタからのデータ、および常に制御ストアの一部に応じて、制御ストアの別の部分にジャンプする方法もあります。最も単純なシーケンサーは、コントロールストアの数ビットからロードされるレジスターです。
  • レジスタセットは、中央処理装置のデータを含む高速メモリです。これには、プログラムカウンタースタックポインターが含まれる場合があり、アプリケーションプログラマーが簡単にアクセスできない他のレジスターが含まれる場合もあります。多くの場合、レジスタセットはトリプルポートレジスタファイルですつまり、2つのレジスタを読み取ることができ、3つ目のレジスタを同時に書き込むことができます。
  • 算術論理演算装置は、計算、通常は加算、論理否定、右シフト、および論理積を実行します。多くの場合、他の機能も実行します。

また、メインコンピュータストレージにアクセスするために使用されるメモリアドレスレジスタメモリデータレジスタが存在する場合もありますこれらの要素が一緒になって、「実行ユニット」を形成します。最近のほとんどのCPUには、いくつかの実行ユニットがあります。単純なコンピュータでさえ、通常、メモリの読み取りと書き込み用に1つのユニットがあり、ユーザーコードを実行するために別のユニットがあります。これらの要素は、多くの場合、単一のチップとしてまとめることができます。このチップは、実行ユニットを介して「スライス」を形成する固定幅で提供されます。これらは「ビットスライス」チップとして知られています。AMD Am2900ファミリは、ビットスライス要素の最もよく知られた例の1つです。実行ユニットの一部と実行ユニット全体は、バスと呼ばれるワイヤの束によって相互接続されています。

プログラマーは、基本的なソフトウェアツールを使用してマイクロプログラムを開発します。マイクロアセンブラを使用すると、プログラマはビットのテーブルをシンボリックに定義できます。基盤となるアーキテクチャと密接な関係があるため、「マイクロコードには、コンパイラを使用して生成することを困難にするいくつかのプロパティがあります」。[1]シミュレータプログラムは、電子機器と同じ方法でビットを実行することを目的としており、マイクロプログラムをはるかに自由にデバッグできます。マイクロプログラムが完成し、広範囲にテストされた後、同じデータを生成するロジックを構築するコンピュータープログラムへの入力として使用されることがあります。[要出典]このプログラムは、プログラマブルロジックアレイを最適化するために使用されるプログラムに似ています完全に最適なロジックがなくても、ヒューリスティックに最適化されたロジックは、読み取り専用メモリ(ROM)コントロールストアに必要な数からトランジスタの数を大幅に減らすことができます。これにより、CPUの製造コストとCPUが使用する電力が削減されます。

マイクロコードは、水平または垂直として特徴付けることができます。これは、主に、各マイクロ命令がCPU要素をほとんどまたはまったくデコードせずに制御するか(水平マイクロコード)[a] 、または実行する前に組み合わせロジックによる広範なデコードを必要とするか(垂直マイクロコード)を指します。その結果、各水平マイクロ命令は、垂直マイクロ命令よりも幅が広く(より多くのビットを含む)、より多くのストレージスペースを占有します。

水平マイクロコード

「水平マイクロコードには、同時操作のために単一のマイクロ命令に組み合わされたいくつかの個別のマイクロ操作があります。」[1]水平マイクロコードは通常、かなり広いコントロールストアに含まれています。各ワードが108ビット以上であることは珍しいことではありません。シーケンサークロックの各ティックで、マイクロコードワードが読み取られ、デコードされ、CPUを構成する機能要素を制御するために使用されます。

典型的な実装では、水平マイクロプログラムワードはかなり厳密に定義されたビットのグループで構成されます。たとえば、1つの簡単な配置は次のようになります。

ソースAを登録 ソースBを登録する 宛先レジスタ 算術および論理ユニットの操作 ジャンプの種類 ジャンプアドレス

このタイプのマイクロマシンがオペコードに続くアドレスでJUMP命令を実装するために、マイクロコードは2クロックティックを必要とする場合があります。それを設計するエンジニアは、次のようなマイクロアセンブラのソースコードを記述します。

  #番号記号で始まる行はコメントです
  #これは単なるラベルであり、アセンブラがシンボリックに表す通常の方法です。
  #メモリアドレス。
InstructionJUMP:
      #次の命令の準備のために、命令デコードマイクロコードはすでに
      #プログラムカウンタをメモリアドレスレジスタに移動しました。この命令はフェッチします
      #メモリワードからのジャンプ命令のターゲットアドレス
      #メモリデータレジスタからメモリアドレスレジスタにコピーして、オペコードをジャンプします。
      #これにより、メモリシステムに次のクロックティックをフェッチするための2クロックティックが与えられます
      #命令デコードで使用するためのメモリデータレジスタへの命令。
      #シーケンサー命令「next」は、制御ワードアドレスに1を追加することを意味します。
   MDR、NONE、MAR、COPY、NEXT、NONE
      #これにより、次の命令のアドレスがPCに配置されます。
      #これにより、メモリシステムにクロックティックが与えられ、
      #以前のマイクロインストラクション。
      #シーケンサー命令は、命令デコードの開始にジャンプします。
   MAR、1、PC、ADD、JMP、InstructionDecode
      #命令デコードは、通常は混乱しているため、表示されていません。
      #エミュレートされている正確なプロセッサに。この例でさえ単純化されています。
      #多くのCPUには、単にフェッチするのではなく、アドレスを計算するいくつかの方法があります
      #オペコードに続く単語からそれ。したがって、1つだけではなく
      #ジャンプ命令。これらのCPUには、関連するジャンプ命令のファミリーがあります。

ティックごとに、CPUの一部のみが使用され、マイクロ命令の残りのビットグループはノーオペレーションであることがよくあります。ハードウェアとマイクロコードを注意深く設計することで、このプロパティを利用して、CPUのさまざまな領域を使用する操作を並列化できます。たとえば、上記の場合、ALUは最初のティックでは必要ないため、以前の算術命令を完了するために使用される可能性があります。

垂直マイクロコード

垂直マイクロコードでは、各マイクロ命令は大幅にエンコードされます。つまり、ビットフィールドは通常、中間の組み合わせロジックを通過し、内部CPU要素(ALU、レジスタなど)の制御およびシーケンス信号を生成します。これは、ビットフィールドが制御信号とシーケンス信号を直接生成するか、最小限にエンコードされる水平マイクロコードとは対照的です。その結果、垂直マイクロコードはより短い命令長とより少ないストレージを必要としますが、デコードするのにより多くの時間を必要とし、結果としてCPUクロックが遅くなります。[24]

一部の垂直マイクロコードは、より複雑なコンピューターをエミュレートしている単純な従来のコンピューターのアセンブリ言語にすぎません。DECAlphaプロセッサや後のIBMメインフレームSystem / 390およびz / ArchitectureのCMOSマイクロプロセッサなどの一部のプロセッサは、マシンコードを使用し、特殊モードで実行して、特殊命令、特殊レジスタ、およびその他の利用できないハードウェアリソースにアクセスできるようにします。いくつかの命令や他の機能を実装するための通常のマシンコード[25] [26]、ページテーブルウォークなどはAlphaプロセッサ上を歩きます。[27] これは、AlphaプロセッサではPALcodeと呼ばれ、IBMメインフレームプロセッサ ではミリコードと呼ばれます。

垂直マイクロコードの別の形式には、2つのフィールドがあります。

フィールド選択 フィールド値

フィールドselectは、CPUのどの部分がコントロールストアのこのワードによって制御されるかを選択します。フィールド値は、CPUのその部分を制御します。このタイプのマイクロコードでは、設計者は、コントロールストア内の未使用のビットを減らすことによって、コストを節約するために低速のCPUを作成することを明示的に選択します。ただし、複雑さが軽減されると、CPUのクロック周波数が高くなる可能性があり、これにより、命令あたりのサイクル数の増加による影響が少なくなります。

トランジスタが安価になるにつれて、水平マイクロコードがマイクロコードを使用するCPUの設計を支配するようになり、垂直マイクロコードはあまり使用されなくなりました。

垂直マイクロコードと水平マイクロコードの両方が使用される場合、水平マイクロコードはナノコードまたはピココードと呼ばれることがあります。[28]

書き込み可能なコントロールストア

書き込み可能なマイクロコードを使用して構築されたコンピューターがいくつかありますこの設計では、マイクロコードをROMまたはハードワイヤードロジックに格納するのではなく、マイクロコードを書き込み可能なコントロールストアまたはWCSと呼ばれるRAMに格納します。このようなコンピューターは、書き込み可能な命令セットコンピューター(WISC)と呼ばれることもあります。[29]

多くの実験用プロトタイプコンピューターは、書き込み可能なコントロールストアを使用しています。Burroughs Small Systems、初期のXeroxワークステーション、DEC VAX 8800(Nautilus)ファミリー、Symbolics LおよびGマシン、多数のIBM System / 360およびSystem / 370など、書き込み可能なマイクロコードを使用する商用マシンもあります。実装、一部のDEC PDP-10マシン、[30]およびData General Eclipse MV / 8000[31]

HP 2100、DEC PDP-11 / 60Varian Data Machines V-70シリーズミニコンピューターなど、さらに多くのマシンがユーザーがプログラム可能な書き込み可能なコントロールストアをオプションとして提供していますIBM System / 370には、初期マイクロプログラムロードIMLまたはIMPL[32]と呼ばれる機能が含まれており、電源オンリセットPOR )の一部として、または密結合 マルチプロセッサコンプレックス 内の別のプロセッサからコンソールから呼び出すことができます。

一部の商用マシン、たとえばIBM 360/85、[33] [34]には、読み取り専用ストレージとマイクロコード用の書き込み可能なコントロールストアの両方があります。

WCSには、マイクロプログラムへのパッチ適用の容易さや、特定のハードウェア世代では、ROMが提供できるよりも高速なアクセスなどのいくつかの利点があります。ユーザーがプログラム可能なWCSにより、ユーザーは特定の目的のためにマシンを最適化できます。

1995年のPentiumPro以降、いくつかのx86CPUには書き込み可能なIntelマイクロコードが搭載されています。[35] [36]これにより、たとえば、Intel Core2およびIntelXeonマイクロコードのバグを、チップ全体を交換するのではなく、マイクロプログラムにパッチを適用することで修正できるようになりました。2番目の顕著な例は、Intelが設計で発見されたセキュリティの脆弱性( SpectreMeltdown)に対抗するために、最大10年前のプロセッサアーキテクチャの一部に提供した一連のマイクロコードパッチです。 2018年の。[37] [38]マイクロコードアップデートは、Linux、[39] FreeBSD[40] Microsoft Windows、[41]またはマザーボードBIOSによってインストールできます。[42]

VLIWおよびRISCとの比較

複雑な命令を備えた高度にマイクロコード化されたプロセッサへの設計傾向は、1960年代初頭に始まり、およそ1980年代半ばまで続きました。その時点で、RISCの設計哲学がより顕著になり始めました。

マイクロコードを使用するCPUは、通常、単一の命令を実行するのに数クロックサイクルかかり、その命令のマイクロプログラムの各ステップに1クロックサイクルかかります。一部のCISCプロセッサには、実行に非常に長い時間がかかる可能性のある命令が含まれています。このような変動は、割り込み待ち時間と、最新のシステムではるかに重要なパイプライン処理の両方に干渉します

新しいプロセッサを設計する場合、ハードワイヤード制御RISCには、マイクロコード化されたCISCに比べて次の利点があります。

  • プログラミングはアセンブリレベルから大幅に離れたため、生産性の理由から複雑な命令を提供する価値はなくなりました。
  • より単純な命令セットにより、ハードウェアによる直接実行が可能になり、マイクロコード化された実行によるパフォーマンスの低下を回避できます。
  • 分析によると、複雑な命令はめったに使用されないため、それらに割り当てられたマシンリソースはほとんど無駄になります。
  • めったに使用されない複雑な命令に割り当てられたマシンリソースは、より単純で一般的に使用される命令のパフォーマンスを促進するために、より適切に使用されます。
  • 複雑なマイクロコード化された命令は、変化する多くのクロックサイクルを必要とする場合があり、パフォーマンスを向上させるためにパイプライン化するのは困難です。

対位法もあります:

  • 高度にマイクロコード化された実装の複雑な命令は、マイクロコードスペースを除いて、多くの余分なマシンリソースを必要としない場合があります。たとえば、同じALUを使用して、実効アドレスを計算したり、元のZ80、8086などオペランドから結果を計算したりすることがよくあります。
  • より単純な非RISC命令(つまり、直接メモリオペランドを含む)は、最近のコンパイラで頻繁に使用されます。すぐにスタックする(つまり、メモリ結果)算術演算も一般的に使用されます。多くの場合、さまざまな長さのエンコーディングを使用するこのようなメモリ操作は、パイプライン化がより困難ですが、それでも完全に実行可能です-i486AMD K5Cyrix 6x86Motorola68040などによって明確に例示されています。
  • 非RISC命令は、本質的に(平均して)命令あたりの作業量が多く、通常は高度にエンコードされているため、同じプログラムの全体的なサイズを小さくして、限られたキャッシュメモリをより適切に使用できます。

多くのRISCおよびVLIWプロセッサは、すべての命令(キャッシュ内にある限り)を単一のサイクルで実行するように設計されています。これは、マイクロコードを備えたCPUがサイクルごとに1つのマイクロ命令を実行する方法と非常によく似ています。VLIWプロセッサには、非常に幅の広い水平マイクロコードと同様に動作する命令がありますが、通常、マイクロコードによって提供されるようなハードウェアのきめ細かい制御はありません。RISC命令は、狭い垂直マイクロコードに似ている場合があります。

マイクロコーディングは、ネットワークプロセッサマイクロプロセッサ、デジタルシグナルプロセッサチャネルコントローラディスクコントローラネットワークインターフェイスコントローラグラフィックス処理ユニットなどのアプリケーション固有のプロセッサやその他のハードウェアで 人気があります。

マイクロオプス

x86ファミリなどの最新のCISC実装は、 RISCまたは従来のマイクロコードと同様の命令エンコーディングを使用して、命令を動的にバッファリングされたマイクロオペレーション(「μops」)にデコードします。ハードワイヤード命令デコードユニットは、一般的なx86命令に対しては直接μopsを出力しますが、より複雑な、またはめったに使用されない命令に対しては、より従来のマイクロコードROMにフォールバックします。[2]

たとえば、x86はマイクロコードからμopsを検索して、ループや文字列命令、浮動小数点ユニットの 超越関数、非正規化数などの異常な値、 CPUIDなどの特殊用途の命令などの複雑なマルチステップ演算を処理します

も参照してください

メモ

  1. ^ IBMの水平マイクロコード化プロセッサーには、デコードが必要な複数のマイクロオーダーとレジスター選択フィールドがありました。

参考文献

  1. ^ a b c ケント、アレン; ウィリアムズ、ジェームズG.(1993年4月5日)。コンピュータサイエンスとテクノロジーの百科事典:第28巻-補足13ニューヨーク:Marcel Dekker、Inc。ISBN 0-8247-2281-72016年11月20日にオリジナルからアーカイブされました2016年1月17日取得
  2. ^ a b フォグ、アグナー(2017-05-02)。Intel、AMD、VIA CPUのマイクロアーキテクチャ(PDF)(レポート)。デンマーク工科大学。2017-03-28のオリジナルからアーカイブ(PDF)2018年4月8日取得
  3. ^ 「IBMpSeriesサーバー-Ultrastar73LZX(US73)18 / 36GBのマイクロコードアップデート」IBM.com2019年4月19日にオリジナルからアーカイブされました2015年1月22日取得
  4. ^ マニング、BM; Mitby、JS; ニコルソン、JO(1979年11月)。「PLAコントロールストアを備えたマイクロプログラムプロセッサ」IBM Technical DisclosureBulletin22(6)。2012-10-01にオリジナルからアーカイブされました2011年7月10日取得
  5. ^ CPUでの使用状況では、ROM / PLAコントロールストアと呼ばれることがよくあります。Supnik、Bob(2008年2月24日)。「J-11:DECの4番目で最後のPDP-11マイクロプロセッサ設計...機能... ROM / PLAコントロールストア」2011年7月9日にオリジナルからアーカイブされました2011年7月10日取得
  6. ^ 「6502画像」2016年3月4日にオリジナルからアーカイブされました2015年1月22日取得
  7. ^ IBM System / 360モデル50の機能特性(PDF)IBM1967年。p。7.A22-6898-1 2021年10月29日取得
  8. ^ エベレット、RR; スウェイン、FE(1947)。「WhirlwindIコンピューターのブロック図」(PDF)レポートR-127。MITServomechanismsLaboratory。2012年6月17日にオリジナル(PDF)からアーカイブされました2006年6月21日取得 {{cite journal}}引用ジャーナルには|journal=ヘルプ)が必要です
  9. ^ ウィルクス、モーリス(1951)。自動計算機を設計するための最良の方法(テクニカルレポート)。マンチェスター大学
  10. ^ 「EMIDEC1100コンピュータ」Emidec.org.uk。2010年6月12日にオリジナルからアーカイブされました2010年4月26日取得
  11. ^ IBM System / 360モデル25の機能特性(PDF)IBM。1968年1月。p。22.A24-3510-0 2021年10月29日取得
  12. ^ a b c フィールドエンジニアリング操作理論、2030処理ユニット、システム/ 360モデル30(PDF)(初版)。IBM。1967年6月。Y24-3360-1。2020-04-01のオリジナルからアーカイブ(PDF)2019-11-09を取得
  13. ^ エドワードA.スノー; ダニエル・P・シェヴィオレク(1982)。「PDP-11ファミリの実装とパフォーマンス評価」Daniel P.Siewiorek; C.ゴードンベル; アレンニューウェル(編)。コンピュータ構造:原理と例ニューヨーク、ニューヨークマグロウヒルブックカンパニーp。 671ISBN 0-07-057302-6
  14. ^ ソルティス、フランク(1981年9月)。「中小企業のデータ処理システムの設計」IEEEコンピュータ14:77–93。土井10.1109 /CM.1981.220610S2CID398484_ 
  15. ^ フランクG.ソルティス(1997)。AS / 400、第2版の内部デュークプレス。ISBN 978-1882419661
  16. ^ 「インタビュー:N64(ナブー)との戦い」IGN64。2000年11月10日。2007年9月13日のオリジナルからアーカイブ2008年3月27日取得
  17. ^ 「インディアナジョーンズと地獄の機械」IGN2000年12月12日。2013年9月27日のオリジナルからアーカイブ2013年9月24日取得
  18. ^ Meynink、Todd(2000年7月28日)。「死後:エンジェルスタジオのバイオハザード2(N64バージョン)」ガマスートラユナイテッドビジネスメディアLLC2013年6月24日にオリジナルからアーカイブされました2010年10月18日取得
  19. ^ Digital Scientific Meta 4シリーズ16コンピューターシステムリファレンスマニュアル(PDF)デジタルサイエンティフィックコーポレーション。1971年5月。7032MO。2020-01-14のオリジナルからアーカイブ(PDF)2020年1月14日取得
  20. ^ デジタルサイエンティフィックメタ4コンピュータシステム読み取り専用メモリ(ROM)リファレンスマニュアル(PDF)デジタルサイエンティフィックコーポレーション。1970年3月。7024MO。2019-09-23のオリジナルからアーカイブ(PDF)2020年1月14日取得
  21. ^ デジタルサイエンティフィックメタ4シリーズ16コンピュータシステム予備システムマニュアル(PDF)デジタルサイエンティフィックコーポレーション。1970年6月。7006MO。2019-09-23のオリジナルからアーカイブ(PDF)2020年1月14日取得
  22. ^ デジタルサイエンティフィックメタ4コンピューターシステムの典型的なROMパターンリストとIBM1130命令セットをシミュレートするプログラム(PDF)デジタルサイエンティフィックコーポレーション。1970年1月。M4/ 005P-170。2020-03-24のオリジナルからアーカイブ(PDF)2020年1月14日取得
  23. ^ 「WesternDigital1600」AntiqueTech。2017年1月3日にオリジナルからアーカイブされました2017年1月5日取得
  24. ^ ニールハーマン; アンディ・ジンブレット(2009-10-12)。「CS-323:高性能マイクロプロセッサ–第1章マイクロプログラミング」mat.uson.mx。 _ 2015年4月19日にオリジナルからアーカイブされました2015年8月8日取得
  25. ^ Vaupel、Robert(2013)。例としてSystemzおよびz / OSを使用したメインフレーム環境の高可用性とスケーラビリティーp。26. ISBN 978-3-7315-0022-3
  26. ^ Rogers、Bob(2012年9月から10月)。「zEnterpriseMillicodeの内容と理由」IBM SystemsMagazine2013-10-16にオリジナルからアーカイブされました2013年11月7日取得
  27. ^ 「Alphaマイクロプロセッサ用PALcodeシステム設計ガイド」(PDF)Digital EquipmentCorporation1996年5月。2011年8月15日のオリジナルからアーカイブ(PDF)2013年11月7日取得
  28. ^ Spruth、Wilhelm(2012年12月)。マイクロプロセッサの設計シュプリンガーサイエンス&ビジネスメディア。p。31. ISBN 978-3-642-74916-22016年11月20日にオリジナルからアーカイブされました2015年1月18日取得
  29. ^ Koopman、Philip Jr.(1987)。「書き込み可能な命令セット、スタック指向コンピューター:WISCコンセプト」(PDF)Journal of Forth Application and Research:49–71。2008年5月11日のオリジナルからアーカイブ(PDF) 。
  30. ^ スミス、エリック(2002年9月3日)。「Re:さまざまなマシンでのマイクロコードのサイズはどれくらいでしたか」ニュースグループ:  alt.folklore.computersUsenet:[email protected]2009年1月26日にオリジナルからアーカイブされました2008年12月18日取得 
  31. ^ スマザーマン、マーク。「CPSC330:新しい機械の魂」2011年6月5日にオリジナルからアーカイブされました2011年7月10日取得4096 x 75ビットSRAM書き込み可能制御ストア:1パリティビット(18フィールド)の74ビットマイクロ命令
  32. ^ IBM System / 370の動作原理(PDF)第4版。IBM。1974年9月。98、245ページ。GA22-7000-4。2012-02-29のオリジナルからアーカイブ(PDF)2012年8月27日取得
  33. ^ IBM System / 360モデル85の機能特性(PDF)第2版​​。IBM。1968年6月。A22-6916-1 2021年10月29日取得
  34. ^ IBM System / 360の特別な機能の説明709/7090 / 7094IBM System / 360モデル85の互換性機能初版。IBM。1969年3月。GA27-2733-0。
  35. ^ Stiller、Andreas; ポール、マティアスR.(1996-05-12)。「Prozessorgeflüster」c't –magazinfürcomputertechnikトレンドとニュース(ドイツ語)。ハイスヴェルラグ2017年8月28日にオリジナルからアーカイブされまし2017年8月28日取得
  36. ^ 「9.11:マイクロコード更新機能」。インテル64およびIA-32アーキテクチャーソフトウェア開発者マニュアル、第3A巻:システムプログラミングガイド、パート1(PDF)インテル2016年9月。
  37. ^ Intelは最近のすべてのCPUにパッチを適用し、2018年3月15日にPaulAlcornによる
  38. ^ 「Linux *プロセッサマイクロコードデータファイルをダウンロードする」2018-03-19にオリジナルからアーカイブされました2018年3月21日取得
  39. ^ 「Linux用インテルマイクロコードアップデートユーティリティ」2012-02-26にオリジナルからアーカイブされました。
  40. ^ "[ports] / head / sysutils / cpupdateのインデックス"Freebsd.org。2020-04-01にオリジナルからアーカイブされました2020年1月16日取得
  41. ^ 「Intelプロセッサを使用するシステムの信頼性を向上させるマイクロコード信頼性アップデートが利用可能です」2008-02-23にオリジナルからアーカイブされました2008年2月25日取得
  42. ^ 「サーバー製品-POST中にマイクロコードの欠落メッセージが表示された場合はBIOSアップデートが必要です」インテル2013年1月24日。2014年9月1日のオリジナルからアーカイブ。

さらに読む

外部リンク