CPUの命令サイクル:フェッチ、デコード、実行のしくみ

CPUの命令サイクル
CPU メモリ内にあるプログラムの命令を実行します。 しかし、それらがすべて同じ一般的な規則に従っていることをご存知ですか? これらはすべて同じ命令サイクルに従います。このサイクルは、フェッチ、デコード、および実行と呼ばれるXNUMXつの異なるステージに分割され、フェッチ、デコード、および実行として変換されます。 これらのステージがどのように機能し、どのように編成されているかを説明します。

この記事で説明されている概念を単純化して理解しやすくするために、現在の非常に単純なプロセッサについて説明することにしました。この記事では、適用可能な一般的な方法での命令サイクルについて説明します。最初の8ビットプロセッサから現在入手可能な最も複雑なプロセッサまで

命令サイクルの視覚化

CicloInstrucciónUnidadControl

プロセッサーは、2ストロークであろうと4ストロークであろうと、常に異なる段階で燃料爆発の連続プロセスを実行する燃焼エンジンと特定の観点から違いはありません。 この理由は、プロセッサが最も単純なバージョンではXNUMXつの異なる段階で動作するためです。

  • フェッチまたはキャプチャ: 命令はRAMからキャプチャされ、プロセッサ内にコピーされます。
  • デコードまたはデコード: 以前にキャプチャされた命令がデコードされ、実行ユニットに送信されます
  • 実行します。 命令が解決され、結果がプロセッサの内部レジスタまたはRAMのメモリアドレスに書き込まれる場所

これらのXNUMXつの段階は、すべてのプロセッサで実行されます。 XNUMX番目のステージであるライトバックがあります。これは実行ユニットが結果を書き込むときですが、これは通常、命令サイクルの実行ステージ内でカウントされます。

命令サイクルの最初の段階:フェッチ

フェッチプロセス

命令サイクルの最初の段階は、命令をキャプチャする責任があります。 RAM 次の一連のユニットおよびレジスタを介してプロセッサに割り当てられたメモリ:

  1. プログラムカウンターまたはプログラムカウンター: これは、次のプロセッサ命令が配置されている次のメモリラインを指します。 その値は、完全な命令サイクルが完了するたび、またはジャンプ命令がプログラムカウンタの値を変更するたびに1ずつ増加します。
  2. メモリアドレスレジスタ: MARは、PCのコンテンツをコピーし、RAM自体のアドレス指定ピンと配線されているCPUのアドレス指定ピンを介してRAMに送信します。
  3. メモリデータレジスタまたはメモリデータレジスタ :CPUがメモリ読み取りを実行する必要がある場合、MDRは、そのメモリアドレスの内容をCPUの内部レジスタにコピーします。これは、内容が命令レジスタにコピーされる前の一時パスレジスタです。 MDRは、MARとは異なり、アドレス指定ピンではなくRAMのデータピンに接続されます。書き込み命令の場合、RAMに書き込みたい内容の内容もMDRに書き込まれます。
  4. 命令レジスタ: フェッチステージの最後の部分は、命令レジスタへの命令の書き込みであり、プロセッサ制御ユニットは、そこから命令サイクルの第XNUMXステージの内容をコピーします。

これらの4つのサブステージは、ユーティリティ、アーキテクチャ、バイナリ互換性、またはISAと呼ばれるものに関係なく、すべてのプロセッサで発生します。

制御装置

コントロールユニット

制御装置はプロセッサーに存在する最も複雑な部分であり、そのタスクは次のとおりです。

  • 彼らは、プロセッサの内外を移動するデータの移動と順序、およびそれを担当するさまざまなサブユニットの調整を担当します。
  • 一般に、キャプチャステージまたはフェッチのユニットは、コントロールユニットと呼ばれるハードウェアの一部であると見なされ、このハードウェアはプロセッサのフロントエンドとも呼ばれます。
  • 命令を解釈し、接続されているさまざまな実行ユニットに送信します。
  • これは、動作するプロセッサのさまざまなALUおよび実行ユニットに伝達されます。
  • 命令のキャプチャとデコードだけでなく、結果をレジスタ、キャッシュ、またはRAMの対応するアドレスに書き込む役割も果たします。

オペコード-モード-アドレス

コントロールユニットが行うことは、命令をデコードすることです。これは、各命令が実際には動詞が最初に実行され、次に直接目的語またはアクションが実行されるオブジェクトである一種の文であるためです。 主題は、それを実行するのはコンピューター自体であると理解されているという事実によって、コンピューターのこの内部言語で排除されることになります。したがって、各ビット数は、最初の1と0がアクションとXNUMXに対応する文です。次に来るのは、操作するデータまたはデータの場所です。

第XNUMX段階:デコード

DecodificaciónInstrucciones

命令にはさまざまな種類があり、すべてが同じであるとは限りません。したがって、命令の種類に応じて、どの実行ユニットが送信されるかを知る必要があります。最も古典的な方法は、デコーダーと呼ばれる方法です。は、各命令を受け取り、オペコードまたは命令と、それが配置されているデータまたはメモリアドレスに従って内部で分割します。

たとえば、上の図には、8ビットでエンコードできる3つの命令しかないプロセッサの図があります。 デコードされた各命令は、それらを解決するさまざまな実行ユニットに送信されます。

この命令サイクルは、すべての中で最も複雑であり、アーキテクチャのタイプを定義するものです。 命令のセットが少ないか複雑かによって、これは制御ユニットの性質に影響します。これは、命令の形式や、デコードフェーズで同時に処理される数に応じて異なります。したがって、制御ユニットには異なる性質。 その他。

何が起こっているかを視覚化する最も簡単な方法は、複雑な鉄道網を循環する列車と、命令の解決を担当する実行ユニットであるターミナルステーションにそれらを導く制御ユニットとして命令を考えることです。

第XNUMX段階:実行

1ビットALU

最後の段階は命令の実行です。この段階で命令は解決されますが、ハードウェアの使用方法はそれぞれの機能に依存するため、すべてのタイプの命令が同じ方法で解決されるわけではありません。 それらには、一般にXNUMX種類の指示があります。

  • ビット移動手順: データを含むビットの順序が操作されます。
  • 算術命令: 数学的および論理的演算が実行される場合、これらはいわゆるALUまたは算術論理単位で解決されます。
  • ジャンプ手順: プログラムカウンタの次の値が変更され、コードを再帰的に使用できるようになります。
  • メモリへの指示: これらは、プロセッサがシステムメモリから情報を読み書きするために使用されます。

もうXNUMXつのポイントは、命令フォーマットです。これは、命令をデータ、スカラー、または複数のデータに同時に適用できるためです。これは、SIMDと呼ばれます。 最後に、データ形式に応じて、算術命令を実行するためのさまざまなタイプのALUがあります。たとえば、今日、微分単位として整数単位と浮動小数点単位があります。

命令が完了すると、結果が特定のメモリアドレスに書き込まれ、次のメモリアドレスが実行されます。 一部の命令はメモリ値を操作せず、特定のレジスタを操作します。 したがって、プログラムカウンタレジスタはジャンプ命令によって変更されます。データの読み取りまたは書き込みを行う場合は、MARレジスタとMDRレジスタが操作されます。