マイクロシーケンサ

マイクロプログラム方式における、**マイクロシーケンサ**（）は、コントロール・ストアのマイクロプログラムを通して段階的処理するためのアドレスを生成する。CPUの制御ユニットの一部、またはスタンドアローンのアドレス範囲生成器として、使用する。

通常、アドレスはカウンタ、マイクロ命令からのフィールド、命令レジスタのサブセットのいくつかの組み合わせによって生成される。 カウンタは、次のマイクロ命令が実行されるという典型的なケースに使用される。 マイクロ命令からのフィールドは、ジャンプやその他のロジックに使用される。 

CPUは命令セットを実装するので、命令のビットを直接シーケンサにデコードして、CPUの命令を実行するためのマイクロ命令セットを選択できるのは非常に便利である。 

ほとんどの最新のCISCプロセッサは、1クロックサイクルで完了することができるより複雑度の低いオペコードを処理するためのパイプラインロジックと、完了するのに複数のクロックサイクルを要するオペコードを実装するためのマイクロコードの組み合わせを使用している。 

最初に統合されたマイクロコード化されたプロセッサの1つはIBM PALMプロセッサで、これはプロセッサのすべての命令をマイクロコードでエミュレートし、非常に最初のパーソナルコンピュータの1つであるIBM 5100で使用されていた。 

同様のマイクロシーケンサベースのプロセッサの最近の例としては、MicroCore LabsのMCL86、MCL51、MCL65コアがあり、これらはIntel 8086/8088、8051、MOS 6502命令セットを完全にマイクロコードでエミュレートしている。 

## 簡単な例
Digital Scientific Corp. の Meta 4シリーズ16コンピュータシステムは、1970年に最初に利用可能になったユーザー・マイクロプログラム可能なシステムであった。 マイクロコードシーケンスの分岐は、3つの方法のいずれかで発生した。 

* 分岐マイクロ命令は、条件付きまたは無条件で次の命令のアドレスを指定する。 論理インデックス(logical index) (IX) オプションを指定すると、16ビットのリンクレジスタが分岐アドレスに論理和され、単純なインデックス付き分岐機能が提供される。 

* すべての算術/論理命令はジャンプ (J) 修飾子を許可しており、これはリンクレジスタでアドレスされたマイクロ命令に実行をリダイレクトする。 

* すべての算術/ 論理命令はデクリメントカウンタ (D) とジャンプ (J) 修飾子の両方を許可する。 この場合、8ビットのループ・カウンタ・レジスタはデクリメントされる。 それがゼロでない場合は、リンクレジスタの内容に分岐する。 ゼロであれば、実行は次の命令へと続く。 

分岐命令で許可されているもう一つのシーケンスオプションは、実行(execute) (XQ) オプションである。 このオプションを指定すると、分岐アドレスの単一命令が実行されるが、実行は元の分岐命令の後で続行される。 IXオプションはXQオプションと一緒に使用することができる。 

## 複雑な例
IBM System/360は、1964年に発売された互換性のある一連のコンピュータで、その多くはマイクロプログラミングされていた。 System/360モデル40は、複雑なマイクロシーケンスを持つマイクロプログラムマシンの良い例である。 

 マイクロストアは、水平マイクロプログラミングスタイルで動作する4,096個の56ビット・マイクロ命令で構成されている。 ストアのアドレスは、12ビットのリードオンリー・アドレスレジスタ(ROAR)によって指定される。 S/360アーキテクチャのほとんどのレジスタとは異なり、ROARのビットは右のビット0から左のビット11までの番号が付けられている。 
```
+------------+
 |    ROAR    |
 +------------+
 11          0
```
 モデル40は、マイクロ命令の逐次実行を行わないので、マイクロシーケンサは、従来の意味では実際に分岐しない。 代わりに、各マイクロ命令は、次に実行されるマイクロ命令のアドレスを指定する。 マイクロ命令内の4つのフィールドが新しいアドレスに寄与する。 

* CA, 4 bits: 他のフィールドに応じ、次のアドレスの一部。 
* CB, 4 bits: 次のアドレスのビット1を決定する。 
* CC, 4 bits: 次のアドレスのビット0を決定する。 
* CD, 2 bits: 次のアドレスがどのように組み立てられるかを制御する(CBフィールドが15を含む場合を除く)。 

これらのフィールドには、基本的に3つの組み合わせ、またはフォーマットがある。 

### 機能分岐フォーマット
CBフィールドが15を含む場合、機能分岐が発生する。 ROAR内の新しいマイクロストア・アドレスのビットは、以下のように決定される。 

* bits 11–10: CDフィールド 
* bits 9–6: CAフィールド 
* bit 5: 常に0 
* bits 4–1: 8ビットALUの右入力であるQレジスタの上位4ビット 
* bit 0: CCフィールドで指定されたテスト結果 

CCフィールドは、マシンの状態の様々なテストを指定することができる。 また、無条件ビットに定数 0 または 1 を指定することもできる。 

このフォーマットは、制御の流れをマイクロストアの64ワードブロックの下位32ワード内の16命令*ペア*の1つに変更する(ビット5は常に0であるため)。 次に、CCフィールドは、ペアのどの命令が制御を受け取るかを決定する。 

### CD = 0、1、3フォーマット
CDフィールドが0、1、または3の場合、制御の流れは現在の64ワードブロック内の命令に送られる。 新しいマイクロストア・アドレスのビットは次のように決定される。 

* bits 11–6: 変更なし 
* bits 5–2: CAフィールド 
* bit 1: CD = 0 の場合、CBフィールドで指定されたテストの結果。それ以外の場合は0。 
* bit 0: CCフィールドで指定されたテスト結果 

CAフィールドは、現在の64ワードブロック内の16個の4ワードグループから1つを選択する。 次に、CBフィールドとCCフィールドは、4つのどの命令が制御を受け取るかを決定する。 

### CD = 2フォーマット
CDフィールドが2の場合、制御の流れは明白ではなく、新しいマイクロストア・アドレスのビットは次のように決定される。 

* bits 11–10: 変更なし 
* bits 9–6: CAフィールド 
* bits 5–2: 変更なし 
* bit 1: CBフィールドで指定されたテスト結果 
* bit 0: CCフィールドで指定されたテスト結果 

次の命令は、ビット11-10が同じままであるため、次の命令は、現在の命令と同じ1kワード領域内にある。 CAフィールドは、その領域内の64ワードブロックを決定する。 ビット5-2は変わらないので、その命令は、現在の命令が現在のブロック内にあるのと同じ4ワードのグループ内にある。 次に、CBおよびCCフィールドは、4つのどの命令が制御を受け取るかを決定する。 

### 単純化
この記述は簡略化されている。 以下の機能を無視している。 

* モデル40は、CPUモードまたはチャネルモードで動作することができる。本説明では、CPUモードのみを扱う。 
* マイクロ命令が機能分岐形式ではなく、CDフィールドが1または3の場合、次のアドレスのビット1は常に0である。この場合、CDフィールドとCBフィールドの値は、立ち上がる制御ラインのセットの1つを決定する。

## 参考文献