マイクロコードとは何ですか?ファームウェアとどのように違いますか?


50

用語に関しては、「マイクロコード」とは正確に何であり、更新できる場合、ファームウェアとはどう違うのですか?

この質問は、マイクロコードの変更についても尋ねたこの質問の重複ではありません(私が知る限り)。ここでは、これらの用語を適切に使用する方法を厳密に知りたいと思っています。

更新

回答を選択しましたが、特に満足しているわけではありません。私は多くの答えに従事しましたが、それらの回答の多くも同様に不満足だと思います。そこで、2つのフレームを紹介します。

  1. 「プロセッサのマイクロコードは、プロセッサのファームウェアに似ています。」これをどんどん読んでいくうちに、私はそれを理解します。「マイクロコード」は、この文脈では「プロセッサフ​​ァームウェア」を介してマーケティングしているだけです。私と一緒に..
  2. または、私は間違っている、と私はそれが起こることを知っている!この場合、私が間違っている理由について、より徹底的な考えが必要です。私が間違っていることを指摘するために読んだその答えでは、私はそれらを理解するのに苦労しています、
    • 「実行vsデータ」の多くの回答ではこのパラダイムを使用していますが、CPUにとってはあまり意味がありません。ファームウェアが実行されていると断言する人もいますが、何によって?CPUに関しては、プログラムの命令ですか、それともデータですか?
    • ファームウェアがソフトウェアとハ​​ードウェアの橋渡しをしている場合(読み取り:神の電気工学のもの)、マイクロコードはどのようにその区別を満足させないのでしょうか。
    • 時間が経つにつれて「解釈する」、これはますます意味をなさない。マイクロコードで「ハードウェア命令が解釈される」とはどういう意味ですか。それが本当なら、解釈されずに別のハードウェア命令にプリコンパイルされ、単に「実行」された場合、何かがパフォーマンスのようになりますか?また、General MIDIはどのように同じ意味で解釈されないのですか?これは、「MIDIマイクロコード」によって解釈され、ハードウェアで実行される言語です。または、ビジュアル表示のた​​めにテレプリンターの指示を解釈するダム端末?
    • 「マイクロコード」は、サウンドカードおよびビデオカード(GPU)で実行されるコードに適用されますか?

私は専門家ではありませんが、マイクロコードはプロセッサフ​​ァームウェアであると言えます。マイクロコードがどのように実行されるかに関するすべてのデータは、Intel / AMDが所有権を持つと思いますが、どのように機能するかは推測できます。単純なCPUセット、メモリからのフェッチや数学演算子などの基本的なものがあります。次に、複雑な命令セット(x86 / intelなど)があります。CPUはメモリから命令を取得し、マイクロコードを使用して複雑な命令をより単純な命令に変換します。1つの例は乗算です。ほとんどのCPUには乗算命令がありますが、実際には乗算は複数のビットシフトで構成されます。
Programmdude

マイクロコードという用語は、CPUの「コード」命令の多くを使用/基礎とするという事実を指します。基本的に、命令と機能をエミュレートする方法をCPUに指示します。したがって、名前です。コンピューターの所有者から見ると、ハードウェアベンダーから出荷された別のコードセットであるため、ファームウェアとして要約することもできます。
18年

IMOの最も簡単な答えは、「プロセッサが命令を実行するたびに、実際にマイクロコードプログラムを実行している」ということです。あなたにとってシングルプロセッサ命令のように見えるのは、マイクロコード命令の特定のシーケンス、「マイクロコードプログラム」です。各命令には、独自のマイクロコードプログラムがあります。個々のマイクロコード命令は、プロセッサのさまざまな内部ビットを有効/無効/などにします。
イーサンリーザー

回答:


57

ファームウェアという言葉の起源は、ハードウェアとソフトウェアの中間点、つまりハードウェアに埋め込まれたソフトウェアです。ハードウェアデバイスの不揮発性メモリに保存されているソフトウェアを指します。例は、デバイス自体によって実行されるコードを保存するために使用される場合、ハードウェアデバイスに埋め込まれたEEPROMおよびフラッシュメモリです。

一部のタイプのハードウェアでは、「ファームウェア」をドライバーソフトウェアに保存し、デバイスを永続的に残すのではなく、起動/初期化時にデバイスにロードすることが一般的になっています。たとえば、ホストOSにロードされたソフトウェアドライバーに数百KBのファームウェアコードを保存し、ドライバーによって初期化されたデバイスに送信することは、今日では大したことではありません。

受け入れるファームウェアの定義によっては、ハードウェアに常駐していないため、これをファームウェアと見なすことはできませんが(ハードウェアを取り外して別のシステムに置くと、そのバージョンの「ファームウェア」は保持されません)。

マイクロコードは、後者の「ファームウェア」タイプのサブセットです。マイクロコードは、起動時にデバイスにロードされるすべての「ファームウェア」の総称ではありません。代わりに、マイクロコードが基本的に、高レベルの標準CPU命令とそのCPUに固有の低レベルの操作との間の変換レイヤーを形成するCPUに固有です。BIOSによってブート時にCPUにロードされますが、OSによってブート段階で後から交換することもできます。

マイクロコードの更新により、CPUの低レベルの動作を修正して、CPUハードウェアを交換することなく、まだ発見されていない特定のバグを回避することができます。マイクロコードには通常、最高の速度とエネルギー効率のために可能な限り高いレベルから低いレベルの命令への最も効率的なマッピングが含まれています。

Meltdown(Intelチップのみに影響する脆弱性)はマイクロコードの更新だけでは修正できず、コアOS機能の変更が必要であり、パフォーマンスがさらに低下する可能性があることに注意してください。Spectre(Intel、AMD、およびARMチップに影響する脆弱性)は、マイクロコードの更新のみで回避できる場合があります。


編集以降の特定の質問に回答するには:

  1. はい、マイクロコードは基本的にプロセッサで実行されるファームウェアです。「マイクロコード」という特別な用語は、特に標準の機械語から低レベルのプロセッサ命令に変換するための青写真を含むプロセッサ上のファームウェアを指します。したがって、ファームウェアよりも具体的な用語です。

    上記で説明したように、オフのときはCPUに保存されず、起動するたびにロードされるため、ある意味では従来のファームウェアのようには機能しません。ただし、多くのハードウェアは現在これを行っており、依然として「ファームウェア」と呼ばれているため、ファームウェアと呼ぶことは受け入れられます。

  2. あなたが間違っているとは思わない。ファームウェアは特定の機械語で書かれている必要はなく、その実行は特定の方法でトリガーされる必要もありません。特定の低レベルでは、すべてのマシンコードは「データ」であり、プロセッサによって「読み取られ」、特定の方法で解釈されます。

    「マイクロコード」という用語は通常、メインCPUにのみ使用され、グラフィックカードやその他のハードウェアには使用されません。他のデバイスにも同じ方法でコードが読み込まれる場合があります。


1
2番目の文は正しくありません。ファームウェアには、ROMに保存されたソフトウェアが含まれます。昔々、ほとんどのファームウェアはROMにありましたが、代替品が手頃な価格になりました。
ハリージョンストン

1
明らかに、「マイクロコード」はCPUに固有のものです。問題は、具体的であるということ以外に、違うことをするということです。スコープ(「CPU」)を削除すると、「より高いレベルの命令とより低いレベルの操作との間の変換レイヤー」のほぼ直接的な引用が得られます。それはかなりだだけで、ファームウェアの定義。それはすべてのファームウェアがすることではありませんか?言葉はたくさんありますが、最も説明的で簡潔な説明は上記の「プロセッサマイクロコードはプロセッサフ​​ァームウェアに似ています」と思います。
エヴァンキャロル

@Evan、ほとんどのデバイスは、CPUで実行されているコードから送信された命令を間接的に受け取ります。CPUのみが、ユーザーが提供するコードを直接処理しています。また、ほとんどのデバイスには、ファームウェアを実行する何らかの種類の組み込みCPUが含まれており、そのCPUには独自のマイクロコードがある可能性があることも考慮してください。この区別は、ハードウェア設計者とカーネルプログラマーにのみ関係するかもしれませんが、arbitrary意的なものではありません。
ハリージョンストン

「ほとんどのデバイスには、ファームウェアを実行する何らかの種類の組み込みCPUが含まれており、そのCPUは独自のマイクロコードを持っている可能性があります」と私は言います。それでは、サウンドカードのMIDIストリームを処理するコードも「マイクロコード」ですか?または、ダム端末に文字を表示/描画するコードはありますか?
エヴァンキャロル

いいえ。MIDIストリームを処理するためにサウンドカードで実行されるコードは、通常のファームウェアです。コード処理 MIDIストリームを処理するために、サウンドカード上で実行されているコードは、マイクロコードになります。(実際には、サウンドカードのような単純なものに埋め込まれたCPUが最初にマイクロコードを必要とするかどうかはわかりませんが、それはポイントの横にあります。)重要なことは、MIDIストリーム、または送信される文字ダム端末、コードではありません。それらは単なるデータです。
ハリージョンストン

23

https://wiki.debian.org/Microcode

CPUマイクロコード

プロセッサのマイクロコードは、プロセッサのファームウェアに似ています。カーネルは、BIOSアップデートを介してアップデートする必要なく、プロセッサのファームウェアをアップデートできます。マイクロコードの更新は揮発性メモリに保持されるため、BIOS / UEFIまたはカーネルはブートのたびにマイクロコードを更新します。

IntelおよびAMDのプロセッサが正常に動作するには、マイクロコードの更新が必要になる場合があります。これらの更新プログラムは、不正な処理からコードやデータの破損、システムのロックアップまでを引き起こす可能性があるバグ/エラッタを修正します。

BIOS(またはUEFI)はブート中にCPUマイクロコードを更新しますが、ほとんどの場合、マザーボードベンダーは頻繁なBIOS / UEFI更新を発行しないか、ユーザーがそのような更新をインストールしません。これらの理由により、システムプロセッサは、膨大な数のシステムで古いマイクロコードで実行されている可能性があります。

例:

https://www.win-raid.com/t3355f47-Intel-AMD-amp-VIA-CPU-Microcode-Repositories.html


9
それほど単純ではありません。マイクロコードは「ハードウェアとコンピューターのアーキテクチャレベルの間にインタープリターを強制する手法」です。そのため、マイクロコードは、多くのデジタル処理要素で高レベルのマシンコード命令または内部状態マシンシーケンスを実装するハードウェアレベルの命令の層です。出典:en.wikipedia.org/wiki/Microcode

17
待ってください...「ボート」は特定の種類の「乗り物」にすぎませんか?なんて役に立たない言葉でしょう!:
ハリージョンストン

4
@HarryJohnstonまあ、特定のコンテキストで「ボート」を他のタイプの乗り物と区別するのはかなり便利だと思います...そして「マイクロコード」は多くの現代のCPUに存在する非常に特殊なタイプの「何か」です...(したがって、用語を用意することがかなり望ましいです)。
ラドバンガラビク

4
@RadovanGarabík:それはまさに皮肉で作られたハリーのポイントです。
ピーター

4
わかりません。「カーネルがBIOSアップデートを介してアップデートする必要なくプロセッサのファームウェアをアップデートできる」場合、「マザーボードベンダーが頻繁なBIOS / UEFIアップデートを発行しない」という事実は、「システムプロセッサが膨大な数のシステムで古いマイクロコードで実行される可能性が高い」カーネルがマイクロコードにパッチを適用しないのはなぜですか?BIOSが更新されない場合にBIOSに依存する理由と、より頻繁に更新される代替手段があるのはなぜですか?
Ajedi32

6

さて、Intelの「マイクロコードアップデート」は、実際にはプロセッサのマイクロコード変換ユニットだけでなく、はるかに多くをアップデートするという意味で「ファームウェア」アップデートです。

Intelの「マイクロコード更新」と呼ばれるこれらの統合プロセッサパッケージの更新は、他のオンダイマイクロコントローラ(PMUや電源管理コアなど)および異なるオンダイプロセッササブシステムのいくつかのパラメータテーブルも更新します。それらはかなり複雑です。

この情報は、マイクロコードおよびマイクロコードの更新に関連するいくつかのインテルの特許で利用可能です。


4

「マイクロコード」という用語は主にコードが行うことを指し(低レベルの命令を使用して低レベルの命令を実行する)、「ファームウェア」という用語は主にコードの格納と管理の方法を指します、ハードウェアよりも簡単に更新できます)。その意味では、むしろ「アプリケーション」と「JARファイル」の区別に似ています-同じプログラムでも両方かもしれませんが、2つの異なる視点から見ています。

ちなみに、マイクロコードのアイデアは、コンピュータプロセッサがシリコンに組み込まれる数十年前の1951年にモーリスウィルクスに遡ります。


3

ファームウェアは通常、CPU自体ではなくCPUを含むデバイスのコードを指します。たとえば、Androidフォンのファームウェアです。

マイクロコードは、複雑な命令セット(486、686、AMD-64など)と、チップメーカーがシリコンを設計するための下位レベルの命令との間の変換レイヤーです。したがって、CPU命令セットの多くの命令はシリコンでは実装されていませんが、マイクロコードを介してシリコンに実装されている複数の命令に変換されます。


しかし、すべてのファームウェアに当てはまるわけではありません。シリコンに実装できるが、ソフトウェアを使用して更新できないABI
エヴァンキャロル

1
Intelの「マイクロコード更新」は、マイクロコード化された命令のデコード方法を変更する以上のことができます。たとえば、ハードウェアのバグが発見された場合に可能になるようにCPUが設計されているため、ループバッファーを無効にできます(SkylakeでSKL150エラッタを修正するため)。
ピーター

3

「マイクロコード」は元の用語であり、プロセッサの「パブリック」命令セット用のインタプリタを実装するために使用された命令を指していました。

しかし、時間が経つにつれて、実装スキームに多くのバリエーションがあるため、そのような区別はあいまいになりました。最初に水平と垂直のマイクロコードがあり、次に「メイン」プロセッサ命令セットに「マイクロコード」(たとえば、I / O命令を実装する)を書き込むためのさまざまなスキームがありました。次に、通常のプログラム「実行」操作で簡単にロードされるコードと、ROMまたはその他の保護された比較的不変のストレージに保存されたコード(BIOSなど)を区別する必要がありました。したがって、「ファームウェア」という用語は、これらの命令を参照するために考案されたもので、何らかの方法でストレージ内でより永続的(およびユーザーの変更によりアクセスしにくい)にされました。

しかし、これらの最初の区別がなされて以来、物事は何度も変化し、ねじれてきました。また、用語は、特定のプロセッサとOS環境内で正確に定義できるようになりました。


+1、ここで重要なのは、「マイクロコード」という用語には多くの意味があるということです。OPは、他の意味ではなく「マイクロコードの更新」について本当に知りたいと思います。
ピーター

3

[注:この回答は、最近の編集に対処することを特に意図しており、それ以外の場合は、すでに投稿されているいくつかの音声回答に追加されません。]

繰り返しますが、マイクロコード(少なくとも最初の近似値まで)は特定の種類のファームウェアです。

「マイクロコード」は、この文脈では「プロセッサフ​​ァームウェア」を介してマーケティングしているだけです。

まあ、それはマーケティングではありません。マーケティングではXBoost Pro(TM)などと呼ばれていました。むしろ、それは工学用語です。CPUを設計する場合、マイクロコードとCPUの他のファームウェア(および他のデバイスに一般的なファームウェアの種類)の違いは重要です。そうでない場合、おそらくそうではありません。

マザーボードを設計したり、オペレーティングシステムを記述したりする場合は、「マイクロコード更新」を使用して、より扱いにくく、あまり馴染みのない「CPUファームウェア更新」の省略形を使用する可能性があります。ほとんどのCPUファームウェアの更新は、主にマイクロコードに影響するため、同じものに十分近いです。おそらく違いを知っていますが、それを気にする必要はありません。

エンドユーザーはその違いを知ったり気にしたりする必要はなく、理想的な世界では「マイクロコード」という言葉はまったく聞こえません。

最近の投機的実行の脆弱性の報道で注目されたのではないかと思いますが、気にする必要がないことをより明確にした文脈でそれを以前に聞いたことがあるかもしれません。これらの脆弱性は計画よりも早くリリースされたため、他の方法で報道されたよりも報道が少なくなる可能性があります。エンドユーザーの観点からは、BIOSアップデート、オペレーティングシステムアップデート、および場合によってはアプリケーションアップデートをインストールする必要があります。これらのいずれかに新しいマイクロコードが含まれている場合、どれを知っているか気にする必要はありません。


だから、おそらくあなたが知ったり気にしたりする必要はないと気づいたとしても、純粋な好奇心から興味があるかもしれません:他のファームウェアとマイクロコードを区別するにはどうすればいいですか?

まあ、最初に認識すべきことは、必ずしも単一のハードで高速な定義があるわけではなく、それはより多くのBleggs and Rubesの状況であるということです。それでも、マイクロコードについて言えることはいくつかあります。

  • マイクロコードは通常、CPU上ではなくCPU内で実行されます。これが高レベルのビューです。

  • マイクロコードのアーキテクチャは、通常、通常のファームウェアを含む通常のコードのアーキテクチャとは大きく異なります。並列性が高く、ハードウェアにより近いところに実装される可能性があります。これについては、いくつかの既存の回答(独自の回答を含む)で説明されていますが、詳細はCPUの設計によって異なる場合があることに注意してください。

  • ハードウェアは多くの場合、製造元が提供するファームウェアのみを実行するように設計されていますが、サードパーティのファームウェアを使用することは特に珍しいことではありませんが、おそらく保証が無効になります!サードパーティのマイクロコードははるかにまれですが、古代では(CPUがブレッドボックスのサイズのことを話していました)、一部のエンドユーザーがCPUのマイクロコードを変更すると信じていました。私の知る限り、これはPCで使用されているCPUの種類では不可能です。

  • マイクロコードは通常、パブリック命令セットアーキテクチャを変換または実装するのに役立ちます。つまり、オペレーティングシステムの設計者やアプリケーションプログラマが使用するマシンコードを実行します。これについては、次のセクションで詳しく説明します。


「実行vsデータ」多くの回答がこのパラダイムを使用しています

紛らわしく異なる方法で、私は恐れていますが、私は自分のコメントに対処します。このセクションは、上記の最後の箇条書きを拡張するのにも役立ちます。ここでの目標は、CPUが実行しているジョブ(ハードウェアとマイクロコードの組み合わせによって達成される)と一般的なデバイスが実行しているジョブ(ハードウェアとファームウェアの組み合わせによって達成される)を区別することです。SATAハードディスクドライブを選択します。

SATAドライブは、「セクター5,123からデータを読み取る」および「このデータをセクター1,321に書き込む」という行に沿ったコンピューターからの指示に従います。ドライブのファームウェアは、ハードウェアにこれを実現させる役割を果たします。通常、それは何らかの組み込みCPUで実行されるごく普通のコードです。ドライブの命令は順番に到着しますが、到着した順序で処理されない場合があります。これらの命令はプログラムではなく、メインCPUで実行されているプログラムによって送信されます。特に、制御の流れはありません。つまり、次に実行する命令をSATAドライブに指示する命令はありません。

CPUはコンピューターを担当します。初期化が完了すると、マザーボード(BIOS、別の種類のファームウェア)が提供する命令(「マシンコード」)を実行し、オペレーティングシステムが提供するマシンコードを実行し、提供されたマシンコードを実行します。アプリケーションベンダーによって。CPU自体は、EEPROM(BIOSの場合)またはRAM(オペレーティングシステムとアプリケーションの場合)からマシンコードを取得します。特に、マシンコードには制御の流れがあります。マシンコードは、次に実行するマシンコードをCPUに伝えます。同じマシンコードを繰り返しループすることができ、コードが作業しているデータに応じて異なるビットのコードを実行できます-SATAコードのようなデバイスインターフェイス言語の命令は、限られた一連の簡単なタスクを実行できますが、マシンコードは行う何でも。(チューリング完全性も参照してください。)

上記の最後の箇条書きを次のように書き換えることができます。通常、マイクロコードはチューリング完全言語を実装します。通常のファームウェアは通常そうではありません。


マイクロコードで「ハードウェア命令が解釈される」とはどういう意味ですか。

本当ですが、おそらく混乱を招きます。重要な点は、制御の流れがありチューリング完了であるマシンコードと、SATAなどのデバイスインターフェースで定義されている命令とそうでない命令との区別です。


「マイクロコード」は、サウンドカードで実行されるコードに適用されますか

いいえ、サウンドカードはSATAドライブのように、コードではなく命令を受け取ります。指示は、「シャープを再生する」または「このデータを波形として解釈して再生する」などです。まだ非常に簡単です。

およびビデオカード(GPU)?

昔ながらのビデオカード(GPUなし)は、SATAドライブと同じです。指示は、「このピクセルをこの色に設定する」または「この位置にAを書き込む」のようなものです。

... GPUは複雑で、上記で説明しようとした2つの世界の中間に位置します。それらをメインコンピューターの内部にある専用のコンピューター、つまり独自のCPUを備えたコンピューターと考えるのがおそらく最も簡単でしょう。SATAドライブのようなデバイスにもCPUが組み込まれているのは事実ですが、違いは、SATAドライブの組み込みCPUはドライブの製造元が提供するコードのみを実行するのに対し、GPUはオペレーティングシステムやアプリケーションベンダーが提供するコードも実行することです。本当にこれはまったく別の質問です。


TL; DR:マイクロコードは特定の種類のファームウェアであり、ハードウェアがチューリング完了命令セットを実装するのに役立ちます。


1

マイクロコード(「コントロールストア」)は、揮発性または不揮発性のメモリ(通常はかなり小さいが非常に広いメモリ)に常駐するデータであり、そのデータ出力信号は、並列ハードウェア機能ユニット、ランダム制御ロジックなどの制御信号入力に配線されますマイクロコードメモリのアドレス入力は、1つまたは複数のハードウェアブロックの制御信号を効果的にシーケンスするために、一度にメモリのワード(「マイクロプログラム命令」)をステップスルーするステートマシンによって提供されます。これにより、ハードウェアが時分割多重化され、非常に少ないランダムロジックで複雑な操作を実装できます。

現代のマイクロプロセッサでは、一般的な「マシンコード」インターフェースを備えたより一般的なアーキテクチャファミリに物理シリコンマイクロアーキテクチャを抽象化するために必要なマイクロコード/シーケンスユニットの階層が存在する場合があります。たとえば、命令デコーダーと浮動小数点ユニットを実装するために、マイクロコード/シーケンスのいくつかの層があるかもしれません。

従来の意味でのファームウェアは、不揮発性メモリに常駐するソフトウェア/データであり、まれにしか変更されないか、まったく変更されないと予想されます。これは、絶えず変化するシステムメモリに格納されているか、むしろシステムメモリに書き込まれ、実行されるソフトウェアと直接対照的です。マイクロコードは、具体的には、ハードウェアのシーケンス制御を行うマイクロプログラムを表すデータを指します。

マイクロコードはファームウェアに実装される場合があります/ファームウェアはマイクロコードを含む場合がありますが、同じではありません。


1
最新のx86 CPUは、説明されているよりもはるかにハードワイヤードです。Haswell / Skylakeではなく、パイプライン化されていない386を記述しているように聞こえます。Intelの「マイクロコード更新」は、マイクロコード化された命令のデコード方法を変更する以上のことができます。たとえば、ハードウェアのバグが発見された場合に可能になるようにCPUが設計されているため、ループバッファーを無効にできます(SkylakeでSKL150エラッタを修正するため)。
ピーター

@PeterCordes 1)x86アーキテクチャは、マイクロコード2の概念を提示するとは無関係である)あなたは、我々はあなたがほのめかすよう、それは、制御信号をシーケンスすることを合意になるだろう私の答えを理解していた

1
いいえ、Intel uopは実際には制御信号ではありません。従来のMIPSパイプラインのように、ロジックユニットを直接プログラムしません。uopは、順不同のスケジューラーによって読み取られ、どのuopが他のどのuopにデータ依存関係を持っているかが判別されます。これは、単一の命令を実行する複数のステップがデコードROMから読み取られる6502のようなものとは非常に異なる内部モデルです。あなたが説明するのは、マイクロコードという用語の歴史的な意味の1つですが、最新のCPUの「マイクロコードの更新」とは関係ありません。
ピーター

私(またはその問題に関する質問)は、Intelまたはx86のマイクロ操作(コントロールストアの「マイクロプログラム」とは異なります)についてどこで言及しましたか?また、文字通り、コントロールストアから提供されるものは、信号がシーケンス化されているか、静的であるか、論理的であるか、ワイヤであるかに関係なく、制御信号です。私が説明しているのは、マイクロコードのリテラル定義である「マイクロコードの更新」です。Haswellの信号の多くは静的であるため、あなたは私の答えのシーケンスの側面にこだわっています。レコードについては、多く順序付けされています。順序付けは、パイプライン処理またはOoOEに対して相互に排他的ではありません。

1
したがって、「マイクロコード化された命令とは何か」という質問には正しく答えていますが、CPUの「マイクロコードの更新」には「マイクロコード」という単語と同じ技術的意味はありません。これは、OPの混乱の根底にあるため、明示的に作成する必要がある重要なポイントです。
ピーター

0

ファームウェアは、ROMまたはその他の不揮発性メモリに配置された実行可能コードです。

ファームウェアの本来の主な目的は、CPUの起動時にそこに存在することです。そのため、CPUが属するシステムを起動または起動するために実行するコードがあります。PCの場合、ファームウェアは実行中のオペレーティングシステムにサービスを提供するためにも使用され、ファン、電源、その他のいくつかを制御する組み込みコントローラーのコード、およびバックグラウンドで実行されるME / PSPのコードも保持します。

ハードドライブ、USBデバイスなど、ファームウェアを使用する周辺機器には、CPUが組み込まれています。


マイクロコードは実行可能なコードではなく、デバイスの内部機能で使用されるコードです。

WRMSR命令でIntelまたはAMD CPUにロードされます。ファームウェアをデバイスにロードするには、ROMまたはフラッシュメディアをプログラミングするか、デバイスに存在する小さなローダープログラムに依存してファームウェアを受け入れます。

ファームウェアとマイクロコードの更新は、ハードウェアを動作させるために必要なものであり、時々更新する必要があるかもしれませんが、非常に異なるものです。

多くのCPUの複雑な命令はハードウェアに直接配線されていませんが、メインCPUの小さなCPUのような機能によって「実行」されます。マイクロコードはこれらの操作を制御します。これは、少なくともマイクロコードを含む「MicroROM」を備えたMotorola 68000にまで遡ります。

マイクロプロセッサが詳細を公開していないため、マイクロコードが実際に制御または実行していることを、IntelまたはAMDプロセッサ以外の誰も知りません。それをハッキングする試みがあります。 リファレンス

実際には、マイクロコードの更新は、CPUの既知のモデル/ステッピングで問題を引き起こす命令を無効にするために基本的に使用され、Intelの最新のCPUは多くの場合、確実に機能する前に少なくとも1つのマイクロコードの更新を必要とします。


6502 PLAデコードROM -6502は古い8ビットCPUであり、その命令は内部PLAによってシーケンス化/制御されていることを読むと、CPUマイクロコードが実際に/実際に何ができるかについての見通しが得られる場合があります。PLAは基本的に、各命令の各ステップに関与するチップの部分を示します(6502命令の範囲は2〜7サイクルです)。これは、キャッシング、スーパースカラーアーキテクチャ、分岐予測などのようなものよりもはるかに前です。最新のCPUのマイクロコードがそのPLAのようなものを制御するかどうかはわかりません。


1
Intelの「マイクロコード更新」は、マイクロコード化された命令のデコード方法を変更する以上のことができます。たとえば、ハードウェアのバグが発見された場合に可能になるようにCPUが設計されているため、ループバッファーを無効にできます(SkylakeでSKL150エラッタを修正するため)。
ピーター

1
6502 PLAについての興味深い点ですが、パイプライン化されたCPUはそれよりもハードワイヤードである必要があります。従来のMIPSは、命令ワードのさまざまなフィールドを使用して、内部ロジックをそれとやや似た方法で直接制御しましたが、もちろんパイプライン化されたCPUには複数の命令があり、ストールがない場合はパイプラインステージごとに1つの命令があります。(またはスーパースカラーの場合、各パイプラインステージに2つ以上あり、異常な場合はさらに複雑です。)最新のCPUの内部の多くはハードワイヤードですが、マイクロコードの更新を調整できるノブがあります。
ピーター

0

用語

このpdfではuse-contextのみを使用してこれに答えます。

  • ファームウェア -マイクロコード、CPUのファームウェアが提供するパスを介して更新されます。

    「通常、マイクロコードパッチは、初期起動プロセス中にマザーボードファームウェア(BIOSやUEFIなど)またはオペレーティングシステムによってCPUにアップロードされます。」

  • マイクロコード -それ自体が「命令デコードユニット(IDU)」で使用されるデータです。IDUは、ハードワイヤードまたはマイクロコード化できます。この文脈でマイクロコード化されているとは、単にプログラムされていることを意味します。また、「複数のマイクロコード」を意味します。IDU

    IDUは制御ユニット内で中心的な役割を果たし、命令レジスタの内容に基づいて制御信号を生成します。

  • デコードされるIDUに送信されるマクロ命令 1命令は、任意の量のマイクロ命令を返す場合があります

  • マイクロ命令 1つは事前に計算された「制御ワード」、1クロックサイクルで実行するすべての状態と命令です。制御信号を生成するためにCPUに送信されます

そのため、このコンテキストでは、ファームウェアでマイクロコードを更新します。マクロ命令をマイクロコード化されたIDUに送信して、マクロ命令をCPUで実行するための「マイクロ命令」に解決し、制御信号に変換します。

これの私の読書

マイクロコードはデータですが、マイクロコードの更新はファームウェアを介して行われます。紛らわしいことに、本質的に内部ルックアップテーブルに相当するものについて話しているため、本質的にチップに保存され、チップの実行フローで使用されるという点で、それ自体もファームウェアです。一般的なMIDI、ハードウェアPostScript、およびダム端末用の制御信号もハードウェアで同じ意味で解釈され、何かが命令を受け取り、最終的に何らかの解釈プロセスで「制御信号」を生成するという議論ができると思います。

CPU内のこれらのプロセスとコンポーネントには特別な名前があります:CPUの「IDU」、およびIDUが採用するすべての「マイクロ命令」を保持する特定の入力テーブルの名前:「マイクロコード」。そのプロセスに関する情報は独自のものであり、閉鎖されています。モデム(ヘイズモデムのATDTなど)からMIDIカードまでの他の技術に似ていると思いますが、特定のルックアップテーブルに「マイクロコード」という名前を付けず、代わりに「ファームウェア」という包括的な用語を使用します点滅プロセスとペイロード全体がチップに保存されます。


2
Linux(およびWindows)は、あなたが話しているマザーボードファームウェアとは完全に独立してCPUマイクロコードを更新できます。マザーボードファームウェアに、最新のCPUマイクロコードと、コードをディスクからロードする前に適用するメカニズム含まれていますが、Moboファームウェアをしばらく更新していない場合でも、ソフトウェアを更新するだけで最新のCPUマイクロコードを使用できます。moboファームウェアとCPUマイクロコードの間の接続から、あまりにも大きな取引をしている。ファームウェアがブートごとにマイクロコードを更新するようにすると便利ですが、必要ではありません(安定性を除く場合があります)。
ピーター

2
また、すべてのx86マクロ命令が、マイクロコードシーケンサーROMで参照してデコードされるわけではありません。Intel CPUでは、4以下のuop(マイクロop)にデコードする命令はデコーダーにハードコードされます。この意味で、ほとんどの命令は「マイクロコード化」されていません。整数除算は(divおよびidiv)ですが、FP除算も単一のuopです(パフォーマンスがより重要であるため、マルチステップの反復ロジックはマイクロコード化されたuopではなく除算ユニット内で実行されます)。
ピーター

@PeterCordesは、あなたがこの答えを書く男です。技術的に正しいように私の答えを編集してください。カルテブランシュがあります。あなたが時間に余裕がない場合、私は今夜これらの変更をロールバックしようとしますが。
エヴァンキャロル

それに近づいたら、始めた答えを書き終えます。今のところ、ハリー・ジョンストンの答えはおそらくあなたが本当に知りたいと思うものに答えるのに最適です(これは「マイクロコード更新」が実際に更新するものであり、「CPUマイクロコード」が行うこととは異なりますが、一般の人が追跡できる1ワードの名前を必要とする技術的なものによくあるように、それは過度に簡略化された名前だからです。)
ピーター

0

私は基本的なISA設計のコースを受講しました。主にMIPSコンセプトからモデル化されたRISCプロセッサの研究と設計を行っています。ここに私が覚えているものがあります

私の理解では、レジスタ、ALU、マルチプレクサ、メモリモジュールなどのプロセッサの基本ブロックは、それらが作業を行うために特定の信号を必要とします。これらの信号はこれらのブロックを操作するために必要な信号であるため、これらの信号を「アサーション」信号と呼びます。本質的にCPUは、ALU、メモリモジュール、レジスタ、その他のハードウェアのスパゲッティブロックです。各CPUは、特定のシーケンスの制御信号をアサートして作業を行う必要があります(ANDI、ORI、JMP、BNE、BEQなどの基本的な命令を意味します)。カリキュラムのペースでは当時のコントロールユニットについて何も教えられていなかったため、命令セットのテストおよびデバッグ中に自分で信号をアサートする必要があったとき(文字通りすべてのMIPS命令を通過する)、それについて複雑な気持ちになりました。

一方、アセンブラー言語は、命令語(基本的にはデータバスの幅)のオペコードとそのオペランドに要約されます。MIPSに関しては、命令語の最初の6ビットはオペコードです。数学的な検査だけでは、ALU、レジスタ、メモリ、マルチプレクサを「アサート」することはできません。基本的に、ハードウェアの残りの部分を6ビットだけでアサートすることはできません。

あなたが持っていない限り...命令デコーダー。命令デコーダーは基本的にオペコードを受け取り、ハードウェアの操作に必要なすべての「アサーション」信号を生成します。ただし、命令デコーダーはアーキテクチャによって実装が異なり、場合によってはプログラム可能です。マイクロコードは、命令デコーダーのプログラム可能なセクションに影響します。

ファームウェアは、ハードウェアに埋め込まれた情報の一般的な用語であると信じるようになりました。ビットストリームをエンコードしてEEPROMやフラッシュメモリなどのハードウェアに保存できるため、場合によってはマイクロコードも参照します。ただし、ほとんどの場合、コンパイルされたコード、asm、またはFPGAで使用されるVHDL / Verilogビットストリームです。私にとってマイクロコードは、選択したプロセッサで「アサーション信号」を指定するために使用されるセマンティクスのようです。


-2

マイクロコードはサブasmレベルのCPU統合ファームウェアです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.