(57)【特許請求の範囲】
【請求項１】
目標プロセッサ上での実行によって、設計確認を遂行するためのシステムであって、
目標プロセッサと、
メモリと、
前記メモリ内に記憶された少なくとも２つのテストジェネレータと、
前記メモリ内に記憶され、前記目標プロセッサ上で実行されるプロセッサ命令シーケンスを生成するテストインタプリタと、
前記プロセッサ命令シーケンスが前記目標プロセッサ上で実行されることによる前記目標プロセッサの設計確認の結果を表示するディスプレイモニタと
を有し、
前記テストジェネレータは、実行時、前記目標プロセッサ上で実行されるプロセッサシーケンス中で用いられる特定プロセッサ命令を指定し、
前記テストインタプリタは、他のテストジェネレータからの1つ以上の特定プロセッサ命令により互いに分離される１つのテストジェネレータからの２つの前記特定プロセッサ命令を前記シーケンスが有するように、前記２つ以上の実行可能なテストジェネレータからの前記特定プロセッサ命令を少なくとも部分的にシャッフルすると共に、前記目標プロセッサ上で実行されるプロセッサ命令シーケンスを生成する、
システム。
【請求項２】
請求項１に記載のシステムにおいて、前記テストインタプリタは、特定プロセッサ命令シーケンスが、１つ以上の他のテストジェネレータからの１つ以上の特定プロセッサ命令ブロックにより互いに分離される１つのテストジェネレータからの特定プロセッサ命令ブロックを有するように、前記テストジェネレータからの特定プロセッサ命令ブロックをシャッフルする、システム。
【請求項３】
請求項１または２に記載のシステムにおいて、前記テストジェネレータは、実行時、前記テストインタプリタがどのようにして前記プロセッサ命令シーケンスを生成するかを制御するインタプリタ制御オペレーションをプログラムする、システム。
【請求項４】
請求項３に記載のシステムにおいて、前記インタプリタ制御オペレーションは、限定クラスユーザが利用可能なスーパバイザモード、または、全プロセッサユーザが利用可能なユーザモードのいずれかにおいて実行中プロセッサを指定するオペレーションを有する、システム。
【請求項５】
請求項３に記載のシステムにおいて、前記インタプリタ制御オペレーションは、定義プロセッサ命令シーケンスを前記プロセッサ命令シーケンス中に連続して含ませるオペレーションを含む、システム。
【請求項６】
請求項３に記載のシステムにおいて、前記インタプリタ制御オペレーションは、前記目標プロセッサ上で実行されるプロセッサ命令シーケンス中に前記目標プロセッサの物理レジスタのランダムな割当をもたらすオペレーションを含む、システム。
【請求項７】
請求項３に記載のシステムにおいて、前記インタプリタ制御オペレーションは、前記目標プロセッサ上におけるプロセッサ命令シーケンスの実行予測結果をシミュレートするオペレーションを含む、システム。
【請求項８】
請求項３に記載のシステムにおいて、前記インタプリタ制御オペレーションは、前記目標プロセッサ上におけるプロセッサ命令シーケンスの実行時の予測キャッシュアクティビティ結果をシミュレートするオペレーションを含む、システム。
【請求項９】
請求項１〜８に記載のシステムにおいて、前記テストインタプリタは複数のテストスロットを含み、各スロットは単一のテストジェネレータからのインタフェース呼出によって提供される情報を保持するためのオペレーション構造を有し、
前記複数のスロットのオペレーション構造の中でオペレーションをインタプリタするための命令生成要素と、
オペレーション構造がインタプリタされているときにテストスロット間をスイッチするためのスイッチング要素とをさらに備える、システム。
【請求項１０】
請求項９に記載のシステムにおいて、空のテストスロットを満たすためにテストジェネレータをランダムに選択するための選択要素をさらに含む、システム。
【請求項１１】
請求項９に記載のシステムにおいて、
前記スイッチング要素が、
オペレーション構造が実行された後で新たなスロットが選択されるべきか否かを決定するランダムテストスイッチャーと、
スロットがラウンドロビン順でスイッチされるようにするラウンドロビンスイッチャーとを含む、システム。
【請求項１２】
請求項１〜１１に記載のシステムにおいて、前記プロセッサ命令シーケンスが前記ファイルに記憶される、システム。
【請求項１３】
目標プロセッサ上での実行により設計確認を遂行するための方法であって、その方法は、
各々がインタフェース呼出を含むコードを有し、少なくともいくつかは前記目標プロセッサ上にて実行される前記プロセッサ命令シーケンス中にて用いられる特定プロセッサ命令を指定する、少なくとも第1と第2の実行可能テストジェネレータをコンピュータのメモリ内に提供するステップと、
前記インタフェース呼出が、少なくともその一部が前記目標プロセッサ上にて実行される前記プロセッサ命令シーケンス中にて用いられる前記特定プロセッサ命令を指定する情報をテストインタプリタ中にプログラムするために用いられるよう前記テストジェネレータの１つを実行するステップと、
少なくとも前記第1と第2のテストジェネレータから提供されるオペレーションの中からオペレーションを選択するステップと、
前記目標プロセッサ上で実行される前記プロセッサ命令シーケンスを生成するために前記第1と第2のテストジェネレータのオペレーションによって指定される少なくともいくつかの前記特定プロセッサ命令をシャッフルするステップと、
前記目標プロセッサ上にて実行される前記プロセッサ命令シーケンスを前記目標プロセッサへ出力するステップと、
前記プロセッサ命令シーケンスが前記目標プロセッサ上で実行されることによる前記目標プロセッサの設計確認の結果をディスプレイモニタに表示するステップと
を備える、方法。
【請求項１４】
請求項１３に記載の方法において、第２テストジェネレータからのオペレーションを選択するステップは、２度目に前記第１テストジェネレータからのオペレーションを選択するステップを含む、方法。
【請求項１５】
請求項１３に記載の方法において、前記第１及び第２テストジェネレータからのオペレーションを選択するステップは、指定テストジェネレータのグループからランダムにテストジェネレータを選択することを含む、方法。
【請求項１６】
請求項１３，１４または１５に記載の方法において、インターフェース呼出の少なくともいくつかは、前記目標プロセッサ上にて実行される前記プロセッサ命令シーケンス中における命令の構造、あるいは、コンテンツを制御するためのインタプリタ制御オペレーションを指定する、方法。
【請求項１７】
請求項１３，１４，１５または１６に記載の方法において、前記テストジェネレータの１つを実行するステップは、シャッフルのためにそれらが選択される前記テストインタプリタのスロット中に割り当てられたオペレーション構造中に情報をプログラムするステップを含む、方法。
【請求項１８】
請求項１３，１４，１５，１６または１７に記載の方法において、さらに、前記特定プロセッサ命令の少なくともいくつかに対して物理レジスタをランダムに割り当てるステップを備える、方法。
【発明の詳細な説明】
発明の背景
本発明は、装置の設計を確認するためのシステム、及びその方法に関する。さらに詳細には、本発明は、コンピュータ又は他の演算装置に対して用いられるプロセッサの疑似ランダムテストに関する。
顧客に販売する以前のマイクロプロセッサの開発から製造までの間、様々な設計、及び製品を徹底してテストする必要がある。プロセッサの性能は、プロセッサが実際に動作される可能性のある全ての環境下で確認されることが理想的である。しかしながら、そのためには、潜在的に無限回の装置の動作のテストを必要とし、その結果、テストシーケンスを生成し、実行するために非常に長い時間を必要とすることとなる。
幅広い範囲で可能性ある設計確認用装置動作シーケンスを抽出するために、ランダム命令ジェネレータが開発された。これらのシステムは、単に、マシン語に翻訳実行され、コンピュータ上でテストされる命令（一般的に、プロセッサのアセンブラ言語）のランダムサンプリングを生成する。このようなシステムは、最小限のユーザインプットにより幅広い範囲で可能性あるプロセッサオペレーションを提供するが、現実に、どのようなオペレーションシーケンスに直面するか知らない。さらに、システムは、どのオペレーションシーケンスがマイクロプロセッサにとって最も処理し難いのかを知らない。したがって、システムは、しばしば、重要なプロセッサの機能面を適切にテストすることに失敗する。
他の解決法は、人がプロセッサ設計の確認用テスト命令シーケンスをプログラムすることである。プログラムの際、ユーザは、プロセッサが障害に直面するであろうと予測される現実の条件についての自身の知識を使用する。これにより、プログラマーは、プロセッサにとって上手く取り扱うことが困難であると自らが予測するテストを設計することができる。残念ながら、各ユーザの経験は、ある程度限られている。したがって、テストコードは、プロセッサを適当にテストするための十分な数の条件を抽出しないように思われる。さらに、プログラマが、十分に幅広いテスト条件を包含するテストを記述しようとする場合、プログラマは、結局、テストコードを開発するために非常に長時間費やしてしまうことになる。
したがって、現実の障害を目標プロセッサに供給することが予測される特定のテストシーケンス、及び幅広いプロセッサオペレーションシーケンスの双方を提供し得る、テストシステムが切望されている。
発明の概要
本発明は、２つ以上のソースから供給されるアセンブラ語命令を混合することにより、（目標プロセッサのためのアセンブラ語命令シーケンスを含む）プロセッサ命令テキストファイルを生成する疑似ランダムテストシステムを提供する。一般的に、これらのソースは、実行時、種々のオペレーションを「テストインタプリタ」中にプログラムするプログラムである（以後、「テストジェネレータ」という。）。テストインタプリタは、目標プロセッサ上で実行されるアセンブラ語命令シーケンスを含む「プロセッサ命令テキスト」ファイルを出力するために、個々のテストジェネレータにより指定されたアセンブラ語命令を疑似ランダム的に混合する方法で、順次、これらのオペレーションを翻訳実行する。テストジェネレータは、プロセッサ命令テキストファイルが特にユーザの要求に適合された命令シーケンスを含むように、（複数のテストジェネレータ間で混合されることなく）連続して翻訳実行されなければならないオペレーションブロックを含むようプログラムされ得る。連続して翻訳実行されるようにプログラムされなかったテストジェネレータのオペレーションは、可能性あるプロセッサ命令シーケンスの範囲を全て確実に抽出するために、（テストインタプリタにより）疑似ランダム的に混ぜられる。したがって、本発明に係るシステム、及び方法は、ランダム命令ジェネレータ、及びユーザプログラムテストの利点を提供する。
次に、本発明のいくつかの特定の局面について説明する。本発明に係るシステム、及び方法は、一般的に、ディジタルコンピュータ上で実行される１つ以上のプログラムとして提供されることは理解されるべきである。本発明を実現する「プログラム」は、本発明のプログラムを実行することにより生成（出力）される「プロセッサ命令テキスト」とは区別される。さらに、その上で本発明が実施されるディジタルコンピュータのプロセッサは、その上で「プロセッサ命令テキスト」ファイルがテストされるプロセッサ（例えば、設計が確認されているプロセッサ）とは区別されることは理解されるべきである。その上で命令テキストファイルが実行されるプロセッサは、以後、「目標プロセッサ」ということとする。さらに、「プロセッサ命令」は、目標プロセッサ上で実行するためのアセンブラ語命令、あるいは、マシンコードといった低級命令を意味する用語として用いられることは理解されるべきである。
一態様では、本発明のシステムは、（ａ）実行されると、目標プロセッサで実行するためにプロセッサ命令のシーケンスで使用する特定のプロセッサ命令を指定するオペレーションをプログラムする少なくとも１つの実行可能テスト・ジェネレータと、（ｂ）少なくとも１つのテスト・ジェネレータから特定のプロセッサ命令を少なくとも部分的にシャッフルし、前記目標プロセッサ上で実行するためのプロセッサ命令のシーケンスを生成するテスト・インタプリタとを含む。このシャフリングによって・テスト・ジェネレータの命令が、定義済みではあるが多少ランダムな方式で混合される。命令の出力シーケンスは、（テスト・ジェネレータから）元々は連続して発生しており、少なくとも１つの他のプロセッサ命令によって互いに分離された、特定のプロセッサ命令のうちの少なくとも２つの命令を含むものと特徴づけることができる。好ましい実施態様では、このシステムは、プロセッサ命令のシーケンスの少なくとも一部を実行する目標プロセッサの予測される結果をシミュレートする機構を備える。
通常、このテスト・ジェネレータはテスト・インタプリタのための２つのタイプのオペレーションを指定するプログラムである。前述のように、一方のタイプは特定のプロセッサ命令テキスト（たとえば、ストア、ロード、浮動小数点加算、分岐などのアセンブラ言語命令）の生成を指定する。他方のタイプは、テスト・インタプリタが命令のシーケンスをどのように生成するかを制御することができる「インタプリタ制御オペレーション」を指定する。このようなテスト・インタプリタ制御オペレーションの例としては、（１）一般には使用可能でないマシン命令の実行を可能にする特権モード（またはスーパーバイザ・モード）で目標プロセッサを稼働させるオペレーションと、（２）特定のプロセッサ命令の定義済みシーケンスが命令の出力シーケンスに連続して組み込まれるようにするオペレーションと、（３）プロセッサ命令の出力シーケンスの物理レジスタをランダムに割り振るオペレーションと、（４）予測される結果と予測されるキャッシュ活動とをシミュレートするオペレーションが含まれる。
他の態様では、本発明は、目標プロセッサ上で実行するプロセッサ命令のシーケンスを生成するための関連する方法を提供する。この方法は、（ａ）各実行可能テスト・ジェネレータがインタフェース・コールを含んだコードを含む、複数の実行可能テスト・ジェネレータを提供するステップと、（ｂ）テスト・ジェネレータの１つを実行し、それによって情報のうちの少なくとも一部が目標プロセッサ上で実行するプロセッサ命令のシーケンスで使用する特定のプロセッサ命令を指定する情報がインタフェース・コールを使用してテスト・ジェネレータにプログラムされるようにするステップと、（ｃ）目標プロセッサ上で実行するプロセッサ命令のシーケンスを少なくとも部分的に定義するように特定のプロセッサ命令をシャッフルするステップと、（ｄ）命令のシーケンス（典型的には目標プロセッサのアセンブラ言語）を出力するステップとを含む。
本発明のこれら、及び、他の特徴は、以下の発明の詳細な説明、及び図面において、より詳細に表されるであろう。
【図面の簡単な説明】
図１は、本発明の命令シーケンステキストファイルの生成に用いられ得る装置のブロック図である。
図２は、本発明のシステムの一般的な構成を示すブロック図である。
図３は、それによりテストインタプリタ内でプログラムされるオペレーション構造が、プロセッサ命令テキストのシーケンスを含む出力ファイルを生成するために用いられるプロセスを図示する。
図４は、本発明に係る好適な発明の実施の形態に従う、テストインタプリタの詳細を示すブロック図である。
図５は、本発明に係る好適な発明の実施の形態に従う、一般疑似ランダムテスト生成方法のフローチャートを図示する。
図６は、それによりテストインタプリタ中の空きスロットがオペレーション構造で埋められる方法のフローチャートを図示する。
図７は、命令テキスト出力ファイルを生成する間、それにより本発明に係るシステムが新規テストスロットを選択すべきか否かを決定する方法のフローチャートを図示する。
図８は、本発明に従う、実行時における選択のための重み付けに関連するテストジェネレータのリストを図示する。
図９は、それにより本発明に係るシステムがテストスロット中のオペレーション構造を翻訳実行する方法のフローチャートを図示する。
好適な発明の実施の形態の説明
１．物理的発明の実施の形態
本発明は、コンピュータシステム中に記憶されているデータを必要とする種々のステップを使用する。これらのステップは、物理量の物理的処理を必要とする。通常、必ずしも必要ではないが、これら物理量は、記憶、伝送、結合、比較、及び他の処理が可能である、電気信号又は磁気信号の形を採る。そして、一般に使用されていることを主たる理由として、これらの信号は、便宜上、ビット、値、要素、変数、文字、命令、オペレーション構造等と呼ばれることがある。しかしながら、これらの用語、及び同様な用語の全ては、適当な物理量と関連付けられ、また、単にこれらの物理量に適用される都合の良いラベルでしかなことは理解されるべきである。
さらに、実行される処理は、しばしば、実施、実行、あるいは翻訳実行といった用語で呼ばれる。上述の操作は、どれも本発明の一部を成し、これらの操作は機械操作である。本発明の操作を実行するために有用な機械には、汎用ディジタルコンピュータ、あるいは他の同様な装置が含まれる。全ての場合において、コンピュータの操作方法と、演算の方法そのものとは、明確に区別されるべきである。そして、本発明は、他の所望の物理信号を生成するために、電気信号、又は他の物理信号を処理するコンピュータの操作方法に関する。
本発明はまた、これらの操作を実行する装置に関連し、この装置は、特に特定用途のために構成されたコンピュータであり、あるいは、コンピュータに記憶されているコンピュータプログラムによって選択的に起動され、または再構成される汎用コンピュータである。ここに表された処理は、どのような特定のコンピュータ、あるいは他の装置に対しても、本来的に関連付けられるものではない。特に、個々の汎用機械は、本明細書の指示に従って書かれたプログラムと共に使用されるであろうし、あるいは、要求されるステップを実行するために、より専用化された装置を構成することは、より都合が良いであろう。これら多くの機械に要求される構造は、以下の通りである。
図１は、本発明に従う一般的なコンピュータシステムを図示する。コンピュータ１０は、コンピュータ１０の一部と適当に構成された形式で情報をやりとりするために用いられる入出力回路１２、及び中央演算装置１４及びメモリ１６といった関連装置を備えている。これらのコンポーネントは、ほとんどの汎用、あるいは、専用コンピュータ１０において見いだされ、また、データ処理装置の広いカテゴリを代表するものである。
図１はまた、キーボードとして図示されている入力装置２０を図示する。しかしながら、現実には、入力装置２０は、トランスジューサカードリーダ、磁気又は紙テープリーダ、タブレット及びスタイラス、音声又は手書き認識装置、当然のことながら他のコンピュータといった他の周知の入力装置であり得る。大容量記憶装置２２は、入出力回路１２に結合されており、コンピュータ１０に追加の記憶容量を提供する。大容量記憶装置２２は、プログラム、データ等を記憶するために用いられ、また、磁気又は紙テープリーダ、あるいは、他の良く知られている装置の形をとることができる。大容量記憶装置２２内に記憶されている情報は、適当な場合に、一般的な方法によりメモリ１６の一部としてコンピュータ１０内に組み込まれ得ることは理解されるべきである。
更に、本発明によって生成されたイメージを表示するために用いられるディスプレイモニタ２４が図示されている。このようなディスプレイモニタ２４は、陰極管式ディスプレイ、液晶ディスプレイ（ＬＣＤ）、他の周知の型のディスプレイといったあらゆる周知の形式を採り得る。
周知のように、メモリ１６は、中央演算装置１４により実行される種々のシーケンスを表すプログラムを記憶し得る。例えば、プロセッサテスト命令シーケンスを供給するためにテスト生成プログラムが、メモリ１６内に記憶され得る。
２．システムの構成及び動作
図２を参照して本発明に係るシステムの概観について説明する。図示されているように、システムは、テストインタプリタ３０と結合されている複数のテストジェネレータ（この場合、テストジェネレータ１〜４）を有している。テストジェネレータからの命令は、目標プロセッサについての命令の疑似ランダムシーケンスを含むテキストファイル３４を出力するために、テストインタプリタのオペレーションと共に用いられる。テキストファイル３４は、アセンブラ語命令を含んでいる場合、目標プロセッサ上でアセンブラされ、また、続けて実行され得る。
本明細書にて用いられる「目標プロセッサ」は、計算環境にて信号を処理するあらゆるデバイスであり得る。例えば、マイクロプロセッサ、チップセット、マザーボード、及び、ＣＰＵ、メモリ等を備えた完全なコンピュータシステムさえもが本発明の趣旨の範囲内にある「目標プロセッサ」を構成する。さらに、目標プロセッサは、例えば、ハードウェア設計言語（例えば、ベリログ（Ｖｅｒｉｌｏｇ））で既述された表現といったプロセッサのソフトウェア表現であっても良い。本発明に係る方法に従い数多くのベンダーのマイクロプロセッサがテストされ得るが、特に適当なマイクロプロセッサは、カリフォルニア州マウンテンヴィユー市所在のサンマイクロシステムズから入手可能なＳＰＡＲＣマイクロプロセッサである。これらのプロセッサは、ニュージャージ州イングルウッドクリフ市所在のＲＴＰプレンティスホール出版、ウィーヴァー及びガーモンド編集、最新の「ＳＰＡＲＣアーキテクチャマニュアル」第９版（１９９４）中に記載されているＰＴＲＳＰＡＲＣのアーキテクチャ規格に従う。
各テストジェネレータは、本システム中で実行されるときオペレーション及び関連パラメータをテストインタプリタ３０中にプログラムするプログラムである。プログラムされ得るオペレーションは、一般的に、２つの異なるカテゴリ、１）テストインタプリタに対してプロセッサ命令テキストの生成を命じるオペレーション、及び２）テストインタプリタの動作を制御し得るオペレーション（明細書中において、時に、「インタプリタ制御オペレーション」という）に類別される。出力テキストファイル３４の生成は、３つの総括的なプロセスステップを必要とする。第１に、選択されたテストスロット３６がプログラムされたオペレーションを保持するために用いられる。第２に、テスト生成プログラムが選択されると共に、実行され、これによりインターフェース呼出からのオペレーション、及び関連パラメータを、テストインタプリタによって供給されるオペレーション構造と呼ばれる選択テストスロット内の空き領域中にプログラム、あるいは、コピーする。第３に、プロセッサ命令テキストのシーケンスを最後にファイル３４中に生成するために、スロット３６中にプログラムされたオペレーションが、擬似的、且つ、ランダムに翻訳実行される。
テストジェネレータは、シュミレーション環境のために特別に設計されるカスタムテスト言語を含む、多様な言語で記述され得る。しかしながら、数多くのユーザに知られていることから、一般的に、「Ｃ」のような従来言語が好適である。さらに、これらの言語は、カスタム言語では利用し得ない多くの構造を含んでいるので、テストジェネレータは幅広い潜在的な命令を生成することができる。
テストジェネレータが選択され、実行されると、インターフェース３２は、インターフェース呼出をテストジェネレータから受信し、インターフェース呼出中に備えられている情報を、テストスロット３６の１つのテストスロット内における、テストインタプリタにより供給されるオペレーション構造内にコピーし、これにより、オペレーションをプログラムする。オペレーションは、スロット中にプログラムされた後、出力ファイル３４中にテキストを生成するために一つずつ翻訳実行される。特に、どの所定のスロットが選択されても、それのオペレーション構造は、最後の命令に出会うまで、あるいは、異なるスロットが選択されるまで継続して翻訳実行される。一般的に、テストスロット中のオペレーション構造は、最初から最後まで割り込まれることなくして翻訳実行されることはない。その理由は、テストインタプリタ中のテストセレクタ３８は、定期的に個々のス口ット３６を切り替えるからである。テストセレクタ３８がスロットを切り替える環境については後述する。図２に図示されているように、切り替えにより、ファイル３４は、テキストジェネレータ１，テキストジェネレータ２，テキストジェネレータ３，及びテキストジェネレータ４によりプログラムされたオペレーションのコードテキストを備える。
（図２のファイル３４に対応する）プロセス命令テキストファイルを生成するプロセス例について図３を参照して説明する。当初、テストインタプリタ５０が利用可能な多くのテストジェネレータが存在し得る。しかしながら、実行開始時は、実行時に用いられる利用可能なテストジェネレータのグループが指定される。それら「指定」テストジェネレータ中のプログラムされたオペレーションだけがプロセッサ命令テキストを含む出力ファイルの準備に用いられる。先ず、テストインタプリタは、ランダムに１つのテストジェネレータをこれらのテストジェネレータから選択する。その第１テストジェネレータは、全体にわたって実行され、それに含まれるインターフェース呼出が上述の「オペレーション構造」をプログラムする。各オペレーション構造は、インターフェース呼出中に備えられる操作コード及び関連パラメータを保持する。第１テストジェネレータが実行されると、テストインタプリタ内の（スロット５４のグループから）選択テストスロットに含まれるそれの関連オペレーション構造は、インターフェース呼出中のパラメータを含むデータで連続して満たされ、これにより、オペレーション構造をプログラムする。
第１選択テストジェネレータの実行が完了し、その結果、第１スロットのオペレーション構造がプログラムされた後、テストインタプリタ５０は、ファイル６０を（最後に命令テキストの出力シーケンスとなる）プロセッサ命令テキストで満たすプロセスを開始する。このプロセスは、第１スロット中のオペレーション構造のストリームを連続して翻訳実行することにより実行される。最後に、テストインタプリタは、異なる残りのスロットに移行する。インタプリタは、オペレーション構造が明確にテストインタプリタに切り替えを要求することによりテスト切り替えを実行させられ得、あるいは、テストインタプリタ自身で切り替えの時期であると決定し得る。
図３の例では、ストリームの開始部分における「ＡＴＯＭＩＣ ＯＮ」オペレーションは、分離していないまとまった連続オペレーションを指定する（すなわち、連続オペレーションは連続して翻訳実行される。）。これは、テストジェネレータにより供給される翻訳実行制御オペレーションの一例である。この命令は、インタプリタ５０により翻訳実行されると、「ＡＴＯＭＩＣ ＯＦＦ」オペレーションが受信されるまで更なる切り替えが実行されることはない旨を表示する。図３の例では、命令インタプリタに対してプロセッサ命令の生成を指示する操作コードを含む４つのオペレーション構造は、ＡＴＯＭＩＣ ＯＮオペレーション構造の後に続く。テストインタプリタは、これらオペレーション構造（例えば、目標プロセッサ用アセンブラ言語命令）によって指定されたテキストを１つずつファイル６０中に挿入する。この後、ＡＴＯＭＩＣ ＯＦＦ命令がストリーム５６中に発見される。追加のオペレーション構造（図示しない）がＡＴＯＭＩＣ ＯＦＦ命令の後に続き、かつ、ＤＯＮＥオペレーション構造がシーケンスの終端に表れることは理解されるべきである。
通常、テストインタプリタは、各オペレーション構造が翻訳実行された後、ランダムにグループ５４の他のテストスロットに切り替えるべきか否かを決定する。しかしながら、ＡＣＴＩＯＮ ＯＮ命令は、この機能を無効にし、切り替えすることなくテストインタプリタにスロット中の（少なくともＡＴＯＭＩＣ ＯＦＦ命令まで）連続オペレーション構造を翻訳実行させる。図３に示す例では、テストインタプリタにストリーム５６中のＡＴＯＭＩＣ ＯＮ命令に続く５つのオペレーション構造を翻訳実行させている。しかしながら、この例では、第５番目の命令であるＡＴＯＭＩＣ ＯＦＦ命令の後、インタプリタは直ちにテストスロットの切り替えを決定する。
一般的に、テストインタプリタ中には、複数のテストスロットが存在する。この例では、グループ５４中に６個のテストスロットが存在する。テストインタプリタは、切り替えが要求される毎にラウンドロビン方式でこれらのスロットを繰り返し通過する。したがって、例えば、インタプリタは、１，２，３，４，５，６，１，２，３，４，５，６といった順序でスロットにアクセスする。この順序は、テストスロット５４左横の矢印によって示されている。
図３中の事象シーケンスに従えば、テストインタプリタは、第１テストスロットから第２テストスロットへと切り替えられると（この場合、ＡＴＯＭＩＣ ＯＦＦ命令と遭遇した後）、第２テストスロットが空いていることを発見する。そして、テストインタプリタは、利用可能なテストジェネレータの中からテストジェネレータを１個ランダムに選択する。このテストジェネレータは、第１スロットについて選択されたテストジェネレータであり得、あるいは、異なるテストジェネレータであり得る。非常に数多くの指定テストジェネレータが存在する場合には、異なるテストジェネレータが選択される機会が増える。しかしながら、利用可能なテストジェネレータが２，３個しか存在しない場合には、選択されたテストジェネレータは、先に選択されたテストジェネレータであり得る。また、１個のテストジェネレータのみが利用可能な場合には、選択されたテストジェネレータは、先に選択されたテストジェネレータのはずである。
選択された指定テストジェネレータは、第２テストスロットをプログラムするオペレーション構造を生成するために、全体にわたって実行される。そして、第１スロット中のオペレーション構造の翻訳実行中に提供された４つの命令についてのテキストを既に含むプロセッサ命令テキスト６０のファイルにプロセッサ命令を付加している間中、第２スロットからのオペレーション構造５７の第２ストリームが連続して翻訳実行される。第１テストスロットの場合と同様に、インタプリタは、最後に、ラウンドロビン方式で次のテストスロットに切り替える。この場合、テストインタプリタは、第２スロットからの４個のオペレーション構造が翻訳実行された後、テストスロットの切り替えをランダムに要求する。そして、第３テストスロットは、前述のように、ランダムに選択されたテストジェネレータによりプログラムされたオペレーション構造で満たされる。命令構造５８の第３ストリームは、第１、及び第２テストスロットと同様にして翻訳実行される。切り替えがテストインタプリタによって命令されるとき、インタプリタは、第４テストスロットに進み、同様の処理を実行する。最後に、最終スロット（この場合スロット６）が満たされる。次のスロット切り替えが要求されると、システムは、先に満たされたテストスロットにリターンする。そして、インタプリタは、最後にそのテストスロットから切り替わった際にやめたオペレーション構造の直後のオペレーション構造を翻訳実行する。インタプリタは、再度、テストスロットの切り替えが要求されるまで、そのスロット中のオペレーション構造を翻訳実行し続ける。その時点で、システムは、最後の切り替えの前にやめた、再開する次のスロットへラウンドロビン方式にて移る。この説明からオペレーション構造５６，５７，５８のシーケンスは、図３中に示す最右端の構成を越えて続き得ることが理解されるべきである。
インタプリタは、このラウンドロビン方式でスロットからスロットへ移動することによりプロセッサ命令テキストに対する自身の命令ファイル６０の付加を継続する。最後に、インタプリタは、テストスロット中の最後の命令と出会う。その時点で、インタプリタは、スロットをクリアし、次のスロットへ移動する。インタプリタは、再度、現在空いているスロットにリターンすると、他のランダムな選択テストジェネレータを実行することによりそのスロットをオペレーション構造で再び満たす。スロットは、特定数のテストジェネレータが実行されるまで、この方法で空にされ、満たされる。その時点で、スロット中の残りの命令は、前述したようにテキストファイルに付加される。スロットは、１つずつ空になる。最後に、たった１個のスロットだけがオペレーション命令を含む。インタプリタは、異なるスロットへ切り替えを試みるとき、オペレーション構造と共に単独で残るスロットにリターンさせられる。最後に、最終スロットの最終オペレーション構造に移行し、プロセスが完了する。この時点で、プロセッサ命令６０のファイルが完成する。アセンブラ６２によるサブシーケンスアセンブリは、プロセッサ上でのテストに利用可能な機械読取可能な出力６４を生成する。
上記説明から明らかであるように、プロセッサ命令テキストのファイルは、種々のテストジェネレータからのランダムに混ぜられた命令を多少含んでいる。以下により詳細に説明するように、インタプリタが１つのスロットから他のスロットへの切り替えを決定する環境は、最終テスト命令中のプロセッサ命令配置上に柔軟性と共にいくつかの制限を加える。
本発明の好適な発明の実施の形態では、テストジェネレータ及びテストインタプリタは、上記例にて説明した命令シャッフル機能に加えて、種々の制御機能を備える。これら追加機能のいくつかについて以下に説明する。
「オペレーション」が（インターフェース呼出を通じ）テストジェネレータを用いてプログラムされると、テストインタプリタはプロセッサ命令テキストを生成し、その生成されたプロセッサ命令テキストは、プロセッサレジスタ、いわゆる、インターフェース呼出中で指定される「仮想レジスタ」（０−３１の整数、あるいは、ＳＰＡＲＣ Ｖ９規格における倍精度浮動小数点レジスタ）を要求する。そして、テストインタプリタは、その指定された「仮想レジスタ」を適当なプロセッサ物理レジスタに変換する。この変換は、アーキテクチャ指定規則、及び、テストジェネレータにより供給される情報に基づく。
物理レジスタが複製でないことを確実にするために、インタプリタは、使用されていないレジスタを追跡し、ある程度ランダムにそれらの中から選択する。物理レジスタが複製でないことを確実にすることに加え、インタプリタは、多くの異なる物理レジスタの使用を試みる。最近使用された物理レジスタアドレスの実行ターリ（tally）を維持することによりそれを実行し、可能なときには、多くの異なる物理レジスタが最後に選択されるように物理レジスタを選択する。
好適な発明の実施の形態では、メモリアクティビティをシミュレートするための機構が存在する。このようなシステムは、疑似ランダムプロセッサ命令テキストを生成する能力を備えるだけでなく、メモリデータ及びキャッシュアクティビティを予測するためにアーキテクチャ特定シュミレータを部分的に備える。ＥＸＥＣオペレーション（後述する）をプログラムするインターフェース呼出を使用すると、テストジェネレータにより供給されるデータをテストシステムメモリ中に格納するために、または、テストシステムメモリからデータを検索するために、テストインタプリタにより供給されるサブルーチンが呼び出され得、これにより、それらが生成されている間、プロセッサの命令ロード、及び命令ストア結果をシミュレートする。このテストシステムメモリは、本明細書中「シャドウメモリモデル」と呼ぶ。さらに、テストシステムは、内的にシャドウメモリモデルと接続されているビルトインアーキテクチャ特定キャッシュモデルを備える。シャドウメモリモデルストアルーチン、あるいは、シャドウメモリモデルロードルーチンを呼び出すＥＸＥＣオペレーションが翻訳実行されると、ロード、または、ストアオペレーションによりもたらされるアーキテクチャ特定キャッシュアクティビティをシミュレートするためにキャッシュモデルが再度実行される。他のプロセッサモデルもまた、生成テキスト命令シーケンスの結果のシミュレートに用いられ得る。
既述の通り、テストジェネレータは、最終テスト命令シーケンス中のプロセッサ命令配列を制御するためにＡＴＯＭＩＣ ＯＮ及びＡＴＯＭＩＣ ＯＦＦオペレーションを供給することができる。さらに、テストジェネレータは、そのような制御命令を分岐、待機、テスト切替等といったように指定することができる。分岐により、テストジェネレータは、指定命令ブロックが現れるべき最終命令シーケンスの特定位置を指定することができる。待機は、他のテストからの所定数の命令が翻訳実行されるまで、現在スロット中のオペレーション構造の翻訳実行を待機させる。テスト切替はＡＴＯＭＩＣ ＯＮと反対の機能を実行する。詳しくいえば、テスト切替はインタプリタを次のテストスロットへ移動させる。
特権モードでテスト中のプロセッサによってのみ実行され得る命令サブセットが存在する。これらは、「特権命令」と呼ばれる。これらは特権命令である。これら命令は、一般的に、目標プロセッサの内部状態に多大な影響を与え得る命令を含んでいる。非特権モードで、それら命令の１つを実行するあらゆる試みは、特権モードトラップをもたらす。
本発明に係るテストシステムのために目標プロセッサ上において両モードで交換可能に適当に実行されるプロセッサ命令テキストを生成するために、それは、テストジェネレータが（現在のモードが非特権の場合）特権命令が生成される前にプロセッサを特権モードに切り替えるために、また、特権モード命令テキストを生成した後、先のモードに再び切り替えるためにアーキテクチャ特定命令テキストを生成するオペレーションをプログラムすることを許容する特徴を備えている。この方法では、テストジェネレータは、プログラム可能なプロセッサモード切替方法を有している。以下のシーケンスは（テスト切替を伴うことなく）自動的に完了されることに留意すべきである。
プログラムＡＴＯＭＩＣ＿ＯＮオペレーション
プログラムＳＷＩＴＣＨ２ＳＵＰオペレーション
プログラム特権命令オペレーション
プログラムＳＷＩＴＣＨ２ＵＳＥＲオペレーション
プログラムＡＴＯＭＩＣ＿ＯＦＦオペレーション
この型のプログラムシーケンスを使用すると、テストインタプリタは、ＳＷＩＴＣＨ２ＳＵＰオペレーションが翻訳実行されるとき、自身のプロセッサ状態シュミレーションを精査し、また、特権モードへ切り替えるための命令テストを生成する必要があるか否かを決定する。テストシステムの内部シュミレーションが、プロセッサ状態は既に特権モードにある旨を示す場合には、特別なプロセッサ命令テキストを生成する必要はない。現在のモードが非特権モードの場合には、それは、テスト中のプロセッサを適当なモードに切り替えるアーキテクチャ特定命令テキストを生成する。ＳＷＩＴＣＨ２ＵＳＥＲオペレーションにおいても同様の動作が生じる。
好適なテストジェネレータの他の特徴は、（１）メインメモリ中のアドレス、（２）キャッシュ中のアドレス、（３）先に使用されたアドレス、及び（４）先に使用されなかったアドレスといった、アドレス型を指定する能力にある。テストインタプリタは、テスト命令シーケンスを生成するとき、所望の型のリストから（例えば、規則２，３に合致するアドレス）ランダムにアドレスを選択する。
本発明に係る好適な発明の実施の形態において得られ得る他の機能は、テスト命令実行中、「コンテキスト」間でランダムに切り替わる能力である。「コンテキスト」は、本明細書中において、マイクロプロセッサ中の仮想アドレスをメインメモリ中の物理アドレスにマップするアドレスの一部を意味するものとする。一般的に、アドレスの一部であるコンテキストは、８ビットワードである。コンテキストはまた、マルチタスク環境におけるプロセッサ上で実行中の個々のプロセスを表す。好適な発明の実施の形態では、テストジェネレータは、所定のグループからコンテキストをランダムに選択するテストインタプリタを指定することができる。２〜８個のコンテキストがランダムな選択に供給されることが好ましい。テスト中、複数のコンテキストの使用を許容することにより、本発明は、単一コンピュータ上で実行中の複数のプロセスをシュミレートすることができる。この特徴は、Ｕｎｉｘのようなマルチタスク環境で使用されるマイクロプロセッサのテストにおいて重要である。いくつかの発明の実施の形態では、テストジェネレータは、テストインタプリタから独立して特定のコンテキストを指定することができる。
更に他の好適な発明の実施の形態では、テストジェネレータは、「レジスタウィンドウ」をランダムに選択するテストインタプリタを指定することができる。サンマイクロシステムズによって使用されるＳＰＡＲＣマイクロプロセッサのようないくつかのマイクロプロセッサは、レジスタファイルの上に横たわるフレーム、あるいは、レジスタウィンドウを有している。レジスタファイル中のフレームをインクリメント、及びデクリメントすることにより、異なるレジスタウィンドウが指定される。（テストジェネレータ命令により）異なるレジスタウィンドウをランダムに選択するための能力を備えることにより、システムは、アーキテクチャ中にて十分なレジスタウィンドウ範囲がテストされることを保証する。ランダムな選択のために２〜８個の異なるウィンドウが提供されることが好ましい。
前述のように、本発明のシステムは、予測結果をシミュレートすることができる。したがって、さらに好適な発明の実施の形態では、本発明のテストジェネレータは、それらが要求するいくつかの命令の予測結果を生成するために自己検査構造を備えている。これは、例えば、テストジェネレータコード中の「比較」ステートメントの使用といった種々の方法によって達成され得る。このようなステートメントは、システムが命令シーケンスについて予測結果を生成することを許容し、また、予測結果とプロセッサにより計算された実結果との比較を許容する。実結果、及び、予測結果が一致しない場合には、問題が存在し得る。例えば、命令は、（１）値５をレジスタ１にセットし、（２）レジスタ１をメインメモリの物理アドレス０にストアし、（３）アドレス０からロードし、その値をレジスタ２にセットする。システムは、この命令シーケンスからレジスタ２中の値が５であると予測する。実結果と比較して、相違が存在する場合には、プロセッサエラーが発生している。「比較」コマンドに加えて、当業者に知られている適当なシュミレーションモデルのような他の自己検査システムが用いられ得る。
これまで明らかにしたように、テストジェネレータは、最後のプロセッサ命令シーケンスがどのように現れるかを指示するために多くの制御命令を指定することができる。例えば、制御命令は、コメントの指定、ＥＸＥＣを介するＣルーチンの実行、ＡＴＯＭＩＣＯＮ、ＲＡＮＤＯＭ＿ＡＴＯＭＩＣＯＮ、ＡＴＯＭＩＣＯＦＦ、ＴＥＳＴＳＷＩＴＣＨ、ＷＡＩＴ、及びＤＥＦＥＲＴＥＳＴを介するテスト制御、ＲＥＬＥＡＳＥ及びＲＥＬＥＡＳＥＦＰを介するレジスタ解除、及びＰＵＴＬＡＢＥＬを介する命令テキスト中へのブランチラベルの配置を含む。大文字で挙げられたそれらの機能については、以下に説明する。アーキテクチャ仕様の仮想対物理マッピング情報は、例えば、テストセットアップファイルを介してユーザ定義可能である。
図４は、好適な発明の実施の形態に従うシステムアーキテクチャの詳細ブロック図を示す。前述のように、システムは、テストジェネレータ（図４においてテストジェネレータ７４，７６，７８，８０，８２として図示）、テストスロット（図４にてテストスロット９６，９８，１００として図示）を含むテストインタプリタ７２、及びラウンドロビンテストスイッチャ１０６を備えている。各テストジェネレータ７４，７６，７８，８０，８２は、オペレーションプログラマ９０を通じてテストインタプリタと通信する。
オペレーションプログラマ９０は、空テストスロットが満たされる必要があるときは何時でも指定テストジェネレータを取得する。そして、オペレーションプログラマ９０は、インターフェイス呼出からのオペレーション構造をプログラムするため、あるいは、満たすためにテストジェネレータプログラムを実行する。
ランダムテストスイッチャ１０４は、テストスロット切替時期をランダムに決定するためのテストインタプリタの内部機構を備えている。オペレーション構造が翻訳実行される毎に、テストスイッチャは１０４、異なるスロットに切り替えるか否かをランダムに決定する。テストスイッチャ１０４は、切替を実行すべきだと決定した場合には、ラウンドロビンテストスイッチャ１０６に通知する。この後、ラウンドロビンテストスイッチャ１０６は、次のテストスロットに移動させる。システムは、平均して、どれ位の頻度でランダムテストスイッチャがスロット切替を実行させるべきかを指定するためのコマンドラインオプションを含んでいることが好ましい。
テストジェネレータは、「ＡＴＯＭＩＣ ＯＮ」モードを指定することにより、ランダムテストスイッチャより優先される。ＡＴＯＭＩＣ ＯＮ及びＡＴＯＭＩＣ ＯＦＦコマンド間のオペレーション構造は、続けて翻訳実行されなければならない。したがって、ＡＴＯＭＩＣモード下におけるオペレーション構造が翻訳実行される間、ランダムテストスイッチャは、テストスロットを切り替えないように指示される。
オペレーションジェネレータ１１０は、各スロットのオペレーション構造内における各オペレーション操作コードを翻訳実行する責任を負う。操作コードが、オペレーションインタプリタに対してプロセッサ命令テキストを生成するよう指示する場合には、そのテキスト（すなわち、プロセッサ特定物理レジスタ番号の割当）を生成するための操作コード、及びプロセッサテキスト出力命令ホルダ１１２に追加される適当なテキストに基づいて適当な動作がとられる。オペレーション操作コードが操作制御オペレーションを示す場合には、テストインタプリタは、内部的に特定動作（すなわち、ランダム、あるいは、特定のオペレーション数についてのポーズ、他のテストヘの切替等）をとる。
命令ジェネレータ１１０により取り扱われる他の型のインタプリタ命令は、インタプリタ内にてサブルーチンの実行を要求する。これらは、特権、及び非特権モード間を切り替えるための機能、及び切替コンテンツを備えるシステムを含み、また、一般的に、命令マクロのセットを備えるシステムを含む。このような機能は、領域８８中にストアされる。命令ジェネレータ１１０により取り扱われる更なる他のインタプリタ命令は、レジスタの解放である。前述のように、プログラムオペレーション構造が翻訳実行されると、オペレーションインタプリタは、オペレーション構造中の操作コードに基づきいくつかの異なる型の動作を実行し得る。これらの動作の１つは、プロセッサ命令テキストを生成する（すなわち、最後に出力ファイル中に入るプロセッサ命令を生成する）。生成プロセッサ命令によっては、オペレーション構造中のパラメータとして備えられる「仮想レジスタ」の形を採り、また、出力済のプロセッサ命令テキスト中で用いられるアーキテクチャ特定物理レジスタ番号を割り当てる目標プロセッサレジスタシュミレータが呼び出しされる。これが終了すると、この物理レジスタは、他のオペレーションがそのレジスタ番号を解放するまで割り当てられる。このオペレーションは、ＲＥＬＥＡＳＥ（あるいは、浮動小数点レジスタのためのＲＥＬＥＡＳＥＦＰ）と呼ばれるテストインタプリタオペレーションである。
オペレーションプログラママルチプレクサ９２は、オペレーションインタプリタ内のオペレーションプログラマが次にプログラミングするスロットを指示する。すなわち、テストジェネレータが実行されるとき、その中にオペレーションが構成される（ラウンドロビンスイッチャ１０６にて指定された）次期スロット構造が割り当てられ、また、満たされる。オペレーション生成マルチプレクサ１０８は、現在、オペレーションジェネレータ１１０に対する翻訳実行されたオペレーション構造を有するスロットから構造を指示する。
プログラム構造要素８６は、インタプリタ７２により用いられる各テストジェネレータについての情報を提供するファイルである。例えば、プログラム構造要素は、インタプリタに対して現在の実行状態において、どのテストジェネレータが存在し、また、利用可能であるかを伝える。また、プログラム構造要素は、インタプリタに対してジェネレータに関するいくつかのパラメトリック情報を伝える。例えば、プログラム構造要素は、各ジェネレータについてのデフォルトの重み付けを含んでいる。この重み付けは、各特定テストジェネレータが選択される周波数（すなわち、それのオペレーション構造がどの位頻繁にテストスロット中にロードされるか）を制御する。テストジェネレータはランダムに選択されるが、高い重み付けを備えるものは、低い重み付けのものよりも頻繁に使用される傾向にある。プログラム構造要素中の追加情報は、テストが使用可能な仮想アドレスレンジ、テストが複数のコンテキスト中及びレジスタウィンドウ中で操作可能であるか否かを示すフラグ、及び一連のテストジェネレータのグルーピングについてのテストグルーピング情報を含む。
本発明のフローチャートが図５に図示されている。プロセスは、１２０にて始まり、ステップ１２２では、ラウンドロビン選択順序に従いインタプリタ中の次のテストスロットが選択される。プロセスが開始された直後は、第１テストスロットが選択される。適当なテストスロットが選択された後、決定ステップ１２６は、現在、いずれかのテストジェネレータのためのオペレーション構造がそのスロット中に存在するか否かを決定する。存在する場合には、ステップ１２８は、選択テストスロット中の次期オペレーション構造を翻訳実行する。「次期」オペレーション構造は、テストスロット中の直近に翻訳実行されたオペレーション構造の直後のオペレーション構造である。テストスロットがオペレーション構造で満たされたばかりの場合には、「次期」オペレーションは、そのスロット中の第１オペレーションである。
次期オペレーション構造が翻訳実行された後、決定ステップ１３０は、その命令が「ｄｏｎｅ」命令であるか否かを決定する。このオペレーションは、テストスロット中にこれ以上オペレーションが存在しないこと（すなわち、テストジェネレータからの全プログラムオペレーション構造が翻訳実行されたこと）を示す。現在のオペレーションがＤＯＮＥオペレーションでない場合には、決定ステップ１３４は、現在のテストスロットが切り替えられるべきか否かを決定する。切替が呼び出しされる状況が図７に図示されており、以下にその説明をする。テストスロットが切り替えられていないとすると、プロセス制御は、再度、現在スロット中のテストジェネレータからのオペレーション構造が存在するか否かを決定する決定ステップ１２６にリターンする。
決定ステップ１２６の決定が肯定的であり、決定ステップ１３０、１３４の決定が否定的である限り、システムは、単一スロット中にてオペレーション構造の継続的実行を続行する（ステップ１２８）。決定ステップ１３４がテストスロットを切り替える時期であると判断した場合には、プロセス制御は、次期スロットがラウンドロビン式に選択されるステップ１２２にリターンする。先に述べたように、切替が要求される状況には、（１）テストインタプリタによる内部決定、及び（２）テストジェネレータからの適当な制御オペレーションが含まれる。
決定ステップ１３０が、現在命令がＤＯＮＥオペレーションであると決定した場合には、プロセスステップ１４２は、テストジェネレータからの新規オペレーション構造のためにスペースをあけるため、テストスロットをクリアする。この後、決定ステップ１４６は、テストインタプリタが終了されたか否かを決定する。これには、インタプリタ中の各テストスロットがクリアされたか否かの決定が含まれる。クリアされている場合には、プロセスは１５２で完了する。クリアされていない場合には、決定ステップ１４８は、テストジェネレータの最後の番号が選択されたか否かを決定する。これは、実行時に用いられるテストジェネレータのアカウントを維持することにより達成される。その番号が既にテストスロット中にロードされているとき、システムは、これ以上ロードするテストジェネレータが存在しないことを認識する。インタプリタには、ステップ１５０にてシャットダウンフラグをセットすることによりこの状況が通知される。この後、プロセス制御は、ラウンドロビン方式で次期スロットが選択されるステップ１２２にリターンする。決定ステップ１４８が必要なテストジェネレータの番号が未だ選択されていないと決定した場合には、プロセス制御は、先ず、ステップ１５０にてシャットダウンフラグをセットすることなく、直接ステップ１２２にリターンする。
決定ステップ１２６が、現在スロット中には実際にオペレーション構造が存在しない旨を示す場合には、いつでも、ステップ１３６は、シャットダウンフラグが既にセットされたか否かを決定する。シャットダウンフラグがセットされていない場合には、プロセスステップ１３８は、ランダムに利用可能なテストジェネレータを選択する。その後、プロセスステップ１４０は、テストジェネレータからのオペレーション構造を選択スロット中にプログラムするテストジェネレータを実行する。このプロセスが完了すると、ステップ１２８は、現在のテストスロット中の次期オペレーション構造を翻訳実行する。オペレーション構造は、テストスロット中のこの場所にだけ置かれるので、次期オペレーションは、そのテストスロット中において最初のオペレーションとなる。
図６は、選択テストスロット中の１つのテストスロットからのオペレーション構造を配置する際に用いられるステップ（すなわち、図５のステップ１４０）を詳細に図示する。プロセスは１５６にて始まり、ステップ１５８では、オペレーション構造のセットが現在スロット中に割り当てられる。その後、ステップ１６０にて選択されたテストジェネレータがサブルーチンとして呼び出しされ、ステップ１６２にてそのサブルーチンに関連するコードの実行が始まる。次に、ステップ１６４は、現在のインターフェース呼出からのデータ及びパラメータを用いて、現在のテストスロット中における次の非プログラムオペレーション構造をプログラムする。このプロセスが完了すると、決定ステップ１６６は、現在のインターフェース呼出が全テストジェネレータ中における最終インターフェース呼出であるか否かを決定する。最終インターフェース呼出である場合には、プロセスは１７６にて終了する。最終インターフェースでない場合には、テストジェネレータ中における次のインターフェース呼出が配置され、「現在の」インタフェース呼出に指定される。そして、プロセス制御は、ステップ１６４にリターンする。現在のインターフェース呼出が現在スロット中における次に利用可能なオペレーション構造中にプログラムされる。
図７は、それによりテストインタプリタが現在のテストスロットが切り替えられるべきか否か決定されるプロセス（すなわち、図５の決定ステップ１３４）を詳細に示す。プロセスは、１８０にて始まり、決定ステップ１８２にてインタプリタは、現在のオペレーションがインタプリタ制御であるか、生成命令テキストオペレーションであるかを決定する。生成命令テキストオペレーションの場合には、決定ステップ１８４は、オペレーション構造が現在、アトミックモードで翻訳実行されているか否かを決定する。既に述べたように、アトミックモードは、そのオペレーションが他のテストスロットからのオペレーションにより分断されることなく連続して翻訳実行されることを意味する。決定ステップ１８４が、オペレーション構造は、現在、アトミックブロック内にあると決定した場合には、プロセスは、切替が実行されないことを示すステップ１８６にて終了される（すなわち、図５中の決定ステップ１２６にリターンする）。しかしながら、決定ステップ１８４が、オペレーション構造は、現在、アトミックブロック内に無いと決定した場合には、決定ステップ１８８は、テストスロット中にて切替が現在要求されているとテストインタプリタがランダムに決定したか否かを決定する。そのような切替が要求されていない場合には、プロセスは、切り替えることなく１８６にて単に終了する。しかしながら、切替が要求されている場合には、プロセスは、テストスロット中の切替が実行される１９４にて終了される（すなわち、図５中のステップ１２２にリターンする）。
決定ステップ１８２が、現在のオペレーション構造はインタプリタ命令であると決定した場合には、決定ステップ１９０は、切替を必要とする型のオペレーションであるか否かを決定する。既に説明したように、個々のテストジェネレータ命令は、実際に切替が必要である旨を命令することができる。例えば、ＷＡＩＴ、ＤＯＮＥ及びＴＥＳＴＳＷＩＴＣＨインタプリタ制御オペレーションが切替の実行を要求する。決定ステップ１９０が、現在のオペレーション構造はこれらの型であると決定した場合には、プロセスは、切替を伴い１９４にて終了される。さもなければ、プロセスは切替を伴うことなく１８６にて終了される。
図５のステップ１３８は、指定テストジェネレータの選択を要求する。このプロセスは、完全にランダムであり得るが、決定論的コンポーネントを有することができる。例えば、個々の指定テストジェネレータは、高い重み付けを備えるテストジェネレータが低い重み付けを備えるテストジェネレータよりも高い頻度で選択されるよう「重み付け」を有することができる。好適な発明の実施の形態では、システムは、図８に示すテストジェネレータのリストを備えている。リストは、スロットが満たされなければならない度にテストジェネレータの選択に用いられる。リストは、１００個のエントリを含み得る。図８に示す例では、５つの異なる指定テストジェネレータ（ＴＧ１，ＴＧ２，ＴＧ３，ＴＧ４，ＴＧ５）が図示されている。これらのテストジェネレータが等しい頻度で選択された場合には、各々は、リスト２００の２０個のエントリを占める。リストからランダムに選択するインタプリタは、平均して５回に１回の割合で各テストジェネレータにヒットする。しかしながら、図示されているように、異なるテストジェネレータに対して異なる数のエントリが与えられ得る。この例では、ＴＧ１にはエントリの１０％が与えられ、ＴＧ２にはエントリの２０％が与えられ、ＴＧ３にはエントリの２５％が与えられ、ＴＧ４にはエントリの３０％が与えられ、そして、ＴＧ５にはエントリの１５％が与えられる。したがって、ＴＧ４は最も高い重み付けを有し、最も選択され易く、一方、ＴＧ１は最も低い重み付けを有し、最も選択されにくい。
最後に、オペレーション構造の翻訳実行に関連するプロセス（図５におけるステップ１２８）を図９を参照して説明する。プロセスは２１０にて始まり、ステップ２１２では、どのオペレーションがオペレーション構造によって指定されているか決定される。特定オペレーションは、オペレーション構造中の操作コードによって指定される。次に、決定ステップ２１６は、オペレーションが生成プロセッサ命令テキストオペレーションであるか、あるいは、インタプリタ制御オペレーションであるかを決定する。決定ステップ２１６が、そのオペレーションはプロセス制御オペレーションであると決定した場合には、決定ステップ２１８は、コンテキストを切り替えるか否かを決定する。
テストジェネレータパラメータ構造中にて指定されない限り、各テストジェネレータは、ランダムに選択されるときには、（８個までの選択済ランダムコンテキストレジスタウィンドウからの）ランダムなコンテキストに割り当てられることに留意すべきである。したがって、テストインタプリタは、（最後のプロセッサ命令テキストの生成についての）前回のコンテキストが現在の選択スロット中のテストジェネレータについてのものと同一であるか否かを決定する。同一でない場合には、ステップ２２０は、そのプロセッサ命令テキストを生成する前に、このテストジェネレータのためのコンテキストを開始するために、自動的にコードを生成する。決定ステップ２３２及び処理ステップ２３４に図示される適当なレジスタウィンドウを開始するために同一の決定プロセスが用いられる。コンテキスト、及びレジスタウィンドウについてのこの変更は、ＳＰＡＲＣ Ｖ８型プロセッサ用アーキテクチャ仕様であることに留意すべきである。
レジスタウィンドウが切り替えられるか否かにかかわりなく、生成された命令テキストオペレーションは、次に、ステップ２２２にてデコードされる。この後、決定ステップ２２４は、生成された命令テキストオペレーションが仮想レジスタを指定したか否かを決定する。指定した場合には、テストインタプリタは、ステップ２２８にて前述のように対応する物理レジスタを割り当てる。現在のオペレーションが仮想レジスタを指定したか否かに関わらず、ステップ２３０は、出力ファイル中にて用いるための適当なプロセッサ命令テキストを生成する。この後、プロセスは、ステップ２４０にて終了する。
決定ステップ２１６が、現在の命令はインタプリタ制御オペレーションであると決定した場合には、ステップ２３６は、そのオペレーションを処理する。この後、プロセスは２４０にて終了する。前述のように、テストジェネレータによって供給され得る種々のインタプリタ制御オペレーションが存在し得る。これらのいくつかは既に説明済であり、以下にその詳細を説明する。
ＣＯＭＭＥＮＴは、命令コメントを指定するために、必要なタブキャラクタ、及びリードキャラクタと共にテキストを出力する。
ＩＤは、テストジェネレーションのための固有識別子を設定する。このＩＤ値は、命令シャッフル中にどのコード行がどのテストに属するかを識別するためのレジスタ割当識別、及び出力コードコメントのために用いられる。
ＴＥＳＴＳＷＩＴＣＨは、オペレーション構造が現在進行中のテストスロットにおいて切替を実行する。
ＷＡＩＴ命令は、他のテストからの所定の、あるいは、ランダムな数の命令が終了するまで、現在のテストに生成された他の命令を所有させない。パラメータ「wait type」がＦＩＸＥＤの場合には、「timefixed」フィールドは、待機する命令数を指定する。wait typeがＲＡＮＤＯＭの場合には、ランダムな数が選択される。全ての同時発生テストが待機を終えると、デッドロックを破るべく所定の、または、ランダムな命令数が生成される前に１つのテストが自動的に解放される。
ＤＥＦＥＲＴＥＳＴは、後に再活性させるために全テスト状態を「defer」キュー中にサスペンドさせる。この命令は、レジスタを長期間拘束しないために、現在、所定テスト内に割り当てられている全レジスタが解放される場合にだけ用いられるべきである。生成のために新規テストが選択されると、ランダム選択は、新規テストの生成、あるいは、現在デファーキュー上にあるテストの再活性のいずれかを実行する。キューは、先入れ先出し方式で作動するので、デファーされるテストが多ければ多いほど、テストのデファーと再活性の遅延期間が長くなる。
ＡＴＯＭＩＣＯＮは、無条件にアトミックモードを使用可能にする。一旦アトミックビットが設定されると、テストからの命令は、ＡＴＯＭＩＣＯＦＦ命令が翻訳実行されるまで、いかなるテストの切替をも伴うことなく優先的に生成される。
ＲＡＮＤＯＭ−ＡＴＯＭＩＣＯＮは、使用可能なテスト中における命令生成のためのアトミックビットを使用可能にすることをランダムに決定する。アトミックは、使用可能にされると、ＡＴＯＭＩＣＯＮと表示されているものとして動作する。これは、他のテスト命令と密接にグループ化された、あるいは、分散されたオペレーションを有し得るシーケンスのロード及びストアに用いられ得る。
ＡＴＯＭＩＣＯＦＦは、アトミックモードを発行したテストについてアトミックモードを使用不可能にすると共に、テスト切替をもたらす。
ＲＥＬＥＡＳＥは、特定レジスタウィンドウ中の特定テストＩＤに対して割り当てられたレジスタを解放させる。仮想レジスタが解放された後、対応する物理レジスタは修復され得ない。
ＲＥＬＥＡＳＥＦＰは、特定テストＩＤに対して割り当てられた浮動小数点レジスタを解放させる。仮想レジスタが解放された後、対応する物理レジスタは修復され得ない。
ＧＥＴＬＡＢＥＬは、命令ストリングポインタによって指し示されるバッファ中に固有ラベルをコピーする。
ＰＵＴＬＡＢＥＬは、出力ストリーム中にテキストラベルを出力する。これは、分岐目標ラベルを形成するために用いられる。
ＮＥＸＴは、そのポインタが命令パラメータリスト中を通過させられると共に、それを０及び非０と比較するランタイム変数を調べる。ポインタにおける値が非０であると共に、関連フラグがＴＲＵＥにセットされている場合、あるいは、ポインタにおける値が０であると共に、フラグがＦＡＬＥＳにセットされている場合には、現在のテストは、カウントパラメータ中に供給された数だけインクリメント、または、デクリメントされる。上記条件に一致しない場合には、テストは、通常通り１だけインクリメントされる。この命令は、他のプログラムがランタイム状況に基づいて生成されないよう、命令ジェネレータが他のプログラム命令へ移動（分岐）することを許容する。
ＭＯＤＥは、テストインタプリタ内部テスト生成モードをスーパバイザ及びユーザ間でトグルする。これは、通常、その目的がハードウェアの現在の操作モードをランダムに変更することである専用テスト中において用いられる。ＥＸＥＣ命令、及びＮＥＸＴ命令を使用することにより、全てのＭＯＤＥが現実にテストインタプリタ内のフラグ状態を変更するが、テストジェネレータは、現在のモードに基づき特権命令を生成する前に、トラップ命令を条件付きで生成する命令ジェネレータを有し得る。このことは、テストジェネレータが、モードが既にスーパバイザモードの場合に、その状況が明白に要求されない限りトラップ命令（スーパバイザモードへのトラップ、及びユーザモードからのトラップ）が特権命令の前後では生成されないような方法で記載されることを許容する。
ＲＥＳＥＲＶＥＯＵＴＰＵＴは、出力命令のブロックをリザーブすると共に、出力ｐｃ（プログラムカウンタ）を増加させる。リザーブブロックの開始時点におけるｐｃの値は、コードがリザーブブロックに挿入されるべきとき、実質的にＩＮＳＥＲＴＯＵＴＰＵＴによって使用される。この命令は、一般的に、リザーブブロック中に満たすための分岐、及びコードを実質的に生成するテストによって分岐される領域をリザーブするために用いられる。
ＩＮＳＥＲＴＯＵＴＰＵＴは、ＲＥＳＥＲＶＥＯＵＴＰＵＴからリターンされたｐｃ値を採り、出力ｐｃをその値に変更し、現在のテストについてアトミックモードを使用可能にする。命令は、阻害されることなく、リザーブ領域中に生成され始める。これは、一般的に分岐目標のために用いられる。
ＡＰＰＥＮＤＯＵＴＰＵＴ。この命令は、コード挿入が開始される前のポイントに出力ｐｃを戻し、このテストについてアトミックモードを使用不可能にする。これは、ノーマルコード生成をレジュームするために、コード挿入がＩＮＳＥＲＴＯＵＴＰＵＴを介して完了した後に用いられる。
ＥＸＥＣは、オペレーション構造実行中、ユーザ提供、または、システム提供ルーチンを実行する。命令に備えられたパラメータは、適当なパラメータ型配役を実行するために要求パラメータを使用してそれらのパラメータを定義するルーチンを通過させられる。パラメータは整数、あるいは、あらゆる小数であり得る。
ＤＯＮＥは、テストジェネレータ命令の現在のセットが終了したことを示す。ＤＯＮＥに続く全ての命令が無視される。
以上、理解を明確にするためにいくつかの発明の実施の形態に基づき本発明を説明したが、請求の範囲の範囲内で変更、改良が可能であることは明白である。例えば、発明の実施の形態では、ラウンドロビン方式でスロットを切り替えるテストインタプリタが既述されているが、他のテストインタプリタ切替機構も同様に用いられ得る。例えば、スロットをランダムに切り替えるインタプリタも用いられ得る。また、本明細書においてテストスロット中に含まれるオペレーションは、テストジェネレータの実行以外の方法によって提供され得る。例えば、いくつかのスロットは、所定の回数、再翻訳実行されたデフォルト命令で満たされたまま残り得る。さらに、本発明に係るシステムは、拡張することにより、様々なアーキテクチャを有し得ると共に、様々なベンダーによって提供され得るマイクロプロセッサのテストに用いられる。例えば、システムは、縮小命令セットコンピュータ（ＲＩＳＣ）、複合命令セットコンピュータ（ＣＩＳＣ）等のためのテスト命令を生成することができる。
【図１】
0003936737.tif 000002
【図２】
0003936737.tif 000003
【図３】
0003936737.tif 000004
【図４】
0003936737.tif 000005
【図５】
0003936737.tif 000006
【図６】
0003936737.tif 000007
【図７】
0003936737.tif 000008
【図８】
0003936737.tif 000009
【図９】
0003936737.tif 000010