マイクロプログラム方式 欠点

マイクロプログラム方式

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/08/22 10:18 UTC 版)

欠点

マイクロコードを使用したCPUは一般にひとつの命令を実行するのに数クロックサイクルを要する。クロックサイクル毎にその命令を実現するマイクロプログラムの1ステップを実行するのである。このためCISCプロセッサの中には非常に長い時間のかかる命令が存在するものもある。そのような命令実行時間の長さはパイプライン割り込み遅延に影響する。

マイクロプログラムと著作権

マイクロプログラム(マイクロコード)はプログラムの一種として、一般のプログラムと同様に著作権で保護されるものと判示されている。インテルAMD間の互換CPUに関する争いではマイクロコードのライセンスも争点になっている。尚、ワイヤードロジックの場合、パターンが回路配置利用権で保護される。

具体例

  • チャールズ・バベッジ解析機関は一連のカムで演算を制御する方式で、それらが言わばリードオンリーのコントロールストアである。そのため、世界初のマイクロプログラム方式の設計ともいわれる。
  • EMIDEC 1100英語版[6]は、フェライトコア群に導線を通す形の固定結線のコントロールストアを採用しており、それを 'the laces' と呼んだ。
  • IBM System/360 シリーズの多くの機種はマイクロプログラム方式である。
    • モデル25は中でも独特で、主記憶である磁気コアメモリの先頭16kバイトにマイクロプログラムを格納していた。2025は16ビットのマイクロアーキテクチャで、マイクロ命令は7ワードで構成されている。電源投入時やシステムリセット時にカードリーダーからマイクロコードを読み込む方式だった。IBM 1410 のエミュレーションも同じ方式でロードする。
    • モデル30は8ビットのマイクロアーキテクチャでハードウェアで実装したレジスタ数も少ない。プログラマから見たアーキテクチャはマイクロプログラムでエミュレートされたものである。このモデルでも専用パンチカードリーダーからマイクロコードを読み込み、CROS (Capacitor Read-Only Storage) と呼ばれる専用記憶装置に格納する。
    • モデル40は56ビットのマイクロ命令を使用する。CROSによく似たTROS (Transformer Read-only Store) にマイクロプログラムを格納する。
    • モデル50には2つのデータパスがあり、それらが並行動作する。32ビットのデータパスは算術演算に使われ、8ビットのデータパスは論理演算に使われる。コントロールストアは90ビットのマイクロ命令を使用する。
    • モデル85では高速化のために命令フェッチ機構 (I-unit) と実行機構 (E-unit) を分離している。I-unit はワイヤードロジックでの制御で、E-unit はマイクロプログラム方式である。マイクロ命令は基本構成では108ビットで、エミュレータ機能を実装した場合はさらに幅広くなる。
  • NCR 315英語版はフェライトコア群を手作業で結線したコントロールストアを使っている。
  • DECのPDP-11は、PDP-11/20以外はマイクロプログラム方式だった[7]
  • バロースの多くのシステムはマイクロプログラム方式だった。
    • B700は、主記憶に格納された16ビットのマイクロプログラムを使用し、アプリケーションレベルの機械語を実行する。各マイクロ命令はそのままレジスタロード命令として実行されるか、ROMに格納された56ビットの「ナノコード」にマッピングされる。これによってハードウェアが単純化され、メインフレームの周辺プロセッサとしてもスタンドアロンのコンピュータとしても使用できる。
    • B1700英語版は主記憶がビット単位にアドレス指定できる独特のハードウェアだが、B700と同様の階層構成になっている。オペレーティングシステムは、必要な言語のインタプリタを事前ロードする。それらインタプリタはCOBOLFORTRANなど向けの仮想機械として機能する。
  • Microdataは、ユーザーがアクセス可能なマイクロプログラムを備えたコンピュータを生産していた。そのためユーザーは独自の機械語命令を実装可能だった。MicrodataのOSもこの機能を多用していた。
  • NINTENDO64GPU兼オーディオプロセッサ Reality Co-Processor は、マイクロプログラム方式である。そのマイクロプログラムは書き換え可能で、必要な出力が得られるエフェクトを実装可能である。独自マイクロコードを使ったゲームの例として、ファクター5Indiana Jones and the Infernal Machine、「スター・ウォーズ 出撃! ローグ中隊」、Star Wars: Battle for Naboo などがある。
  • ソニー・コンピュータエンタテインメント PlayStation 2Emotion Engine のVU0とVU1というベクトル演算ユニットはマイクロプログラム可能である。VU1は初期のSDKではマイクロプログラム経由でしかアクセスできなかった。
  • nanodata QM-1 は、マイクロプログラムが2段階になっており、マイクロコードがハードウェアを制御するのではなく、マイクロコードはナノプログラムによって解釈され、ナノプログラムがハードウェアを制御していた[8]

実装

マイクロプログラム方式では、(コンピュータの構成要素である)プロセッサ自体を、さらに小さな制御装置や記憶装置や命令セットから成る小さなコンピュータであるとみなして考えることが多い。このとき、この「さらに小さな〜」などそういったものを「マイクロ〜」と呼ぶ。簡単に類推可能なので以下では特に説明せずそのような用語を使う。

マイクロプログラムはCPUを制御するビット列となる。根本的な進歩はCPU制御がコンピュータプログラムになったことである。つまり、複雑な電気回路の設計変更(すなわち従来のCPUの制御)がプログラムの変更に転換されたのである。

以下、コンピュータ内部をいくつかに分けて解説する。

マイクロシーケンサコントロールストアの次のワードを取り出す。シーケンサとはカウンタのようなもので、コントロールストアの一部のデータにしたがってジャンプする(つまり値をカウントアップして指し示す場所を変化させる)が、場合によっては命令レジスタの内容にしたがってジャンプする。最も単純なシーケンサはコントロールストアの数ビットをロードするレジスタである。

レジスタはCPUのデータを保持する高速なメモリである。レジスタにはプログラムカウンタ、スタックポインタなどアプリケーションプログラマが簡単にはアクセスできないものも含まれる。ほとんどのレジスタファイルは3つのポートを持つ。すなわち同時にふたつのレジスタを読んで、ひとつのレジスタに書き込むのである(レジスタ間の基本的な演算命令を想起されたい:add r1,r2,r3 (r1 ← r2 + r3))。

ALUは計算を行う。加算、論理否定、右シフト、論理積、論理和などである。ALUでさらに他の機能を実現することもある。

これらは全て実行ユニットの構成要素である。最近のCPUは複数の実行ユニットを持つ。単純なコンピュータでもひとつの実行ユニットをメモリの読み書きに使用し、もうひとつの実行ユニットをユーザコードの実行に使用する。

これらの要素をひとつのチップに組み込むこともある。このチップが実行ユニットのスライスを構成し、これをビットスライスチップと呼ぶ。例えば AMD Am2900 ファミリがある[9]。同ファミリのマイクロシーケンサAm2909は一つのチップで4-bit分のアドレスを生成することが可能であり、n 個用いることで 4n-bit分のアドレスを生成する[10]

実行ユニットの各構成要素や実行ユニット同士は複数のワイヤで結線される。これをバスと呼ぶ。

プログラマはマイクロプログラムを作成する。その際の基本ツールもソフトウェアであり、マイクロアセンブラを使ってビットテーブルをシンボリックに定義する。シミュレータでそのビットを電気回路と同じように実行してみてマイクロプログラムをデバッグする。

水平型と垂直型

マイクロプログラムの設計には水平型と垂直型の2つの方向性がある。ただし、明確に分類できるものではなく、実装により中間的なもの、曖昧なものもある。水平型はマイクロ命令が直接CPU各部の制御を行う方式で、垂直型はマイクロ命令を論理回路で解釈(デコード)して実行する方式である。結果として水平型のマイクロ命令の方がビット幅が大きく、垂直型よりも多くの格納領域を必要とする。以下それぞれ説明する。

水平型

水平型の制御ワードには、相応の幅のビット列があって、CPU内の各部を制御する。56ビット以上ということも珍しくない。例えば簡単なフィールドの配置例は以下の通りである。

ソースレジスタA ソースレジスタB デスティネーションレジスタ ALU操作 ジャンプタイプ ジャンプアドレス

このタイプのマイクロマシンでジャンプ先アドレスを即値としてジャンプ命令オペコードの次に与えるジャンプ命令を実装する場合、マイクロアセンブリ言語は以下のようになる。

 # シャープ記号ではじまる行はコメント
 # これは単なるラベル。アセンブラにシンボリックにアドレスを指定する
 # 一般的な方法である
InstructionJUMP:
  # 次の命令に備えて、命令デコードのマイクロコードがプログラムカウンタを
  # メモリアドレスレジスタ(MAR)にすでに格納して、次の命令と思われる内容を
  # メモリデータレジスタ(MDR)にロードする。これが実はジャンプ命令の
  # オペコードの次のワードであり、ジャンプ先アドレスになっている。
  # そのためにMDRをMARにコピーする。
  # シーケンサには"NEXT"命令を与えてコントロールストアの次の命令を取り出すよう
  # 指示する。
MDR, NONE, MAR, COPY, NEXT, NONE
  # この命令で、次の命令アドレスをプログラムカウンタ(PC)に格納する。
  # これにより、メモリシステムに1クロックサイクルの余裕を与えて、前の
  # マイクロ命令で開始されたフェッチを終了させる。
  # シーケンサには命令デコードマイクロプログラムの先頭にジャンプすることを指示。
MAR, 1, PC, ADD, JMP, InstructionDecode
  # 命令デコードはエミュレートするプロセッサに依存していて非常にきたない
  # コードになるのでここでは示さない。この例は非常に単純化したものである。
  # 多くのCPUはジャンプ先を示すにも様々な方法を用意している。
  # つまり、ジャンプ命令も一種類ではない。

CPU制御のあらゆる部分を各クロックサイクル毎に記述してシーケンサを動作させるものである。

水平型のマイクロコードでは、必要ならプロセッサの各部を同時に働かせる指示ができる利点があるが、半面、多数の操作を同時にできない場合にはNOPとなるフィールドが多くならざるをえないことに注意。

垂直型

垂直型は、前述のNOPのコストを削減する。ある種の垂直型マイクロコードは非常に単純なコンピュータで複雑なコンピュータをエミュレートしているようなものである。この技術はPDP-8のころは一般的だった。垂直型マイクロコードはふたつのフィールドを持つ。

フィールドセレクト フィールドバリュー

「フィールドセレクト」はこのワードで制御対象としているCPU内の構成要素を指示する。「フィールドバリュー」はその構成要素を実際に制御する。このタイプのマイクロコードでは、設計者は明示的にコストを優先してCPU性能を犠牲にしていると言える。複雑さを排除することでCPUのクロック周波数を上げることができるかもしれないが、1命令あたりにかかるクロックサイクル数が増えるので効果が相殺される。

選択

トランジスタが安価になり、水平型マイクロコードが主流となった。2000年代初頭、垂直型マイクロコードは一般のコンピュータ上で他のアーキテクチャをエミュレートするエミュレータソフトウェア以外では使われなくなった。

論理合成

マイクロプログラムが完成してテストされた後、これを論理回路生成プログラムの入力データとして使用する場合もある。完璧に最適化された論理回路を生成できるプログラムは存在しないが、それなりにできのよい論理回路を使うことでコントロールストアのためのROMに使うトランジスタを減らすことができ、結果として全体のトランジスタ数を減らすことができる。これによりCPUのコストと消費電力を減らすことが出来る。


  1. ^ Manning, B.M.; Mitby, J.S; Nicholson, J.O. (1979-11). “Microprogrammed Processor Having PLA Control Store”. IBM Technical Disclosure Bulletin 22 (6). http://www.computerhistory.org/collections/accession/102660026. 
  2. ^ J-11: DEC's fourth and last PDP-11 microprocessor design ... features ... ROM/PLA control store”. 2013年2月7日閲覧。
  3. ^ "Microcode Update for SCSI Hard Disk"
  4. ^ Everett, R.R., and Swain, F.E. (1947) (PDF). Whirlwind I Computer Block Diagrams. Report R-127. MIT Servomechanisms Laboratory. オリジナルの2012年6月17日時点におけるアーカイブ。. https://web.archive.org/web/20120617112919/http://www.cryptosmith.com/wp-content/uploads/2009/05/whirlwindr-127.pdf 2006年6月21日閲覧。. 
  5. ^ Visual6502.org project にあるダイ写真の上端の格子状パターンがPLAである。
  6. ^ EMIDEC 1100 computer”. Emidec.org.uk. 2010年4月26日閲覧。
  7. ^ Daniel P. Siewiorek, C. Gordon Bell, Allen Newell (1982). Computer Structures: Principles and Examples. New York, NY: McGraw-Hill Book Company. ISBN 0-07-057302-6 
  8. ^ P.HAYES 1978, p. 309-314.
  9. ^ P.HAYES 1978, p. 300.
  10. ^ P.HAYES 1978, p. 301-302.
  11. ^ "Writable instruction set, stack oriented computers: The WISC Concept" article by Philip Koopman Jr. 1987
  12. ^ http://pdp10.nocrew.org/cpu/kl10-ucode.txt
  13. ^ Mark Smotherman. “CPSC 330 / The Soul of a New Machine”. 2013年2月7日閲覧。 “4096 x 75-bit SRAM writeable control store: 74-bit microinstruction with 1 parity bit (18 fields)”
  14. ^ P.HAYES 1978, p. 302-309.
  15. ^ IBM (September 1974), IBM System/370 Principles of Operation (Fourth Edition ed.), pp. 98, 245, GA22-7000-4, http://www.bitsavers.org/pdf/ibm/370/princOps/GA22-7000-4_370_Principles_Of_Operation_Sep75.pdf 
  16. ^ IBM (June, 1968), IBM System/360 Model 85 Functional Characteristics (SECOND EDITION ed.), A22-6916-1, http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf 
  17. ^ IBM (March 1969), IBM System/360 Special Feature Description 709/7090/7094 Compatability Feature for IBM System/360 Model 85 (First Edition ed.), GA27-2733-0 
  18. ^ "Intel(R) 64 and IA-32 Architectures Software Developer’s Manual", Volume 3A: System Programming Guide, Part 1, chapter 9.11: "Microcode update facilities", December 2009.





英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「マイクロプログラム方式」の関連用語

マイクロプログラム方式のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



マイクロプログラム方式のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのマイクロプログラム方式 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2024 GRAS Group, Inc.RSS