コントロールストアとは、 CPUの制御ユニットの一部であり、CPUのマイクロプログラムを格納する部分です。通常、マイクロシーケンサによってアクセスされます。内容が変更できないコントロールストアの実装は、読み出し専用メモリ(ROM)または読み出し専用ストレージ(ROS)と呼ばれ、内容が変更可能なコントロールストアは、書き込み可能なコントロールストア(WCS)と呼ばれます。
初期の制御ストアは、アドレスデコーダを介してアクセスされるダイオードアレイとして実装され、読み出し専用メモリの一種でした。この伝統は、1947 年に初めて記述されたMIT Whirlwindのプログラムタイミングマトリックスに遡ります。現代のVLSIプロセッサは、代わりに電界効果トランジスタのマトリックスを使用して、プロセッサとその内部シーケンサを制御するために使用される ROM および/または PLA 構造をマイクロコード実装で構築します。IBM System / 360は、モデル 30ではCCROS (Card Capacitor Read-Only Storage) 、モデル 40ではTROS (Transformer Read-Only Storage) 、モデル50、65、67ではBCROS (Balanced Capacitor Read-Only Storage) など、さまざまな技術を使用しました。
一部のコンピュータは「書き込み可能なマイクロコード」を使用して構築されています。マイクロコードをROMやハードワイヤードロジックに格納するのではなく、書き込み可能な制御ストア(WCS)と呼ばれるRAMにマイクロコードが格納されます。このようなコンピュータは、書き込み可能な命令セットコンピュータ(WISC)と呼ばれることもあります。[ 1 ]これらのマシンの多くは、WISC CPU/16 [ 2 ]やRTX 32P [ 3 ]などの実験的なラボプロトタイプでした。
オリジナルのSystem/360モデルは読み取り専用の制御ストアを備えていましたが、後の System/360、System/370および後継モデルでは、フロッピー ディスクまたはその他のDASDからマイクロ プログラムの一部または全部を、超高速ランダム アクセス読み書きメモリで構成される書き込み可能な制御ストアにロードします。System/370 アーキテクチャには、コンソールから、電源投入時リセット( POR ) の一部として、または密結合マルチプロセッサ複合体内の別のプロセッサから呼び出すことができる、初期マイクロ プログラム ロード( IMLまたはIMPL ) [ 4 ]と呼ばれる機能が含まれています。これにより、IBM は現場でマイクロ プログラミングの欠陥を容易に修復することができました。制御ストアの大部分が ROM に格納されている場合でも、コンピュータ ベンダーは書き込み可能な制御ストアをオプションとして販売することが多く、顧客がマシンのマイクロ プログラムをカスタマイズできるようにしていました。IBM などの他のベンダーは、WCS を使用して、エミュレータ機能[ 5 ] [ 6 ]およびハードウェア診断[ 7 ]用のマイクロ コードを実行します。
書き込み可能なマイクロコードを使用する他の商用マシンには、Burroughs Small Systems (1970 年代および 1980 年代)、Xerox のLisp マシンおよび Xerox Starワークステーションのプロセッサ、DEC VAX 8800 (「Nautilus」) ファミリー、Symbolics L および G マシン (1980 年代) などがあります。一部の DEC PDP-10マシンは、マイクロコードを SRAM チップ (約 80 ビット幅 x 2 K ワード) に格納し、通常は他のフロントエンド CPU を介して電源投入時にロードされます。[ 8 ] さらに多くのマシンが、オプションとしてユーザーがプログラム可能な書き込み可能な制御ストアを提供しています ( HP 2100、DEC PDP-11/60、Varian Data Machines V-70 シリーズのミニコンピュータなど)。Mentec M11およびMentec M1 は、マイクロコードを SRAM チップに格納し、別の CPU を介して電源投入時にロードします。データゼネラル社のEclipse MV/8000(「イーグル」)は、別のCPUを介して電源投入時にロードされるSRAM書き込み可能な制御ストアを備えています。[ 9 ]
WCSには、マイクロプログラムのパッチ適用が容易であることや、特定のハードウェア世代ではROMよりも高速なアクセスが可能であることなど、いくつかの利点があります。ユーザーがプログラム可能なWCSにより、ユーザーは特定の目的に合わせてマシンを最適化できます。しかし、プログラムのデバッグが難しくなり、悪意のあるユーザーがシステムやデータに悪影響を与える可能性があるという欠点もありました。[ 10 ]
Burroughs Small Systems、Rekursivプロセッサ、およびImsys Cjip [ 11 ]は、異なるプログラミング言語のプログラム用に異なるマイクロコードをロードすることをサポートしており、特定の言語用のマイクロコードは、その言語に合わせて調整された命令セットを実装していました。
x86アーキテクチャファミリーのいくつかのIntel CPUは、1995年のPentium Proを皮切りに、書き込み可能なマイクロコードを備えています。[ 12 ] [ 13 ] [ 14 ] これにより、 Intel Core 2マイクロコードとIntel Xeonマイクロコードのバグは、チップ全体を交換する必要なく、ソフトウェアで修正できるようになりました。このような修正は、Linux [ 15 ]、FreeBSD [ 16 ] 、 Microsoft Windows [ 17 ] 、またはマザーボードのBIOS [ 18 ]によってインストールできます。
コントロール ストアの出力には通常レジスタがあります。次のアドレスを決定するためにシーケンサに戻る出力は、競合状態の発生を防ぐために何らかのレジスタを経由する必要があります。[ 19 ] ほとんどの設計では、他のすべてのビットもレジスタを経由します。これは、次のマイクロ命令の実行が 1 サイクル遅れるとマシンの動作が速くなるためです。このレジスタはパイプライン レジスタとして知られています。多くの場合、次のマイクロ命令の実行は現在のマイクロ命令の結果に依存しますが、これは現在のマイクロ サイクルの終了まで安定しません。いずれにしても、コントロール ストアのすべての出力が 1 つの大きなレジスタに入ることがわかります。歴史的には、これらのレジスタ ビットが同じチップ上にある EPROM を購入することができました。
クロックレート(システムのサイクルタイム)を決定するクロック信号は、主にこのレジスタをクロックします。
x 75ビットSRAM書き込み可能制御ストア:1パリティビット付き74ビットマイクロ命令(18フィールド)
50K バイトを超えるサイズのマイクロプログラムが見つかることは珍しくありません。このサイズの増加と、マイクロプログラミングが従来のマシン命令エミュレーションの範囲を超えて拡張されたことにより、悪意のあるマイクロプログラムと欠陥のあるマイクロプログラムの両方の可能性が高まり、特に後者の可能性が高まっています。