(57)【特許請求の範囲】
【請求項１】
命令を実行する実行ユニットを複数有する実行回路と、この実行回路に接続されたデータ・ストレージと、受け取った命令の種類に応じて、前記複数の実行ユニットのうち一の実行ユニットへルーティングし、前記実行ユニットへ命令を送信する命令シーケンシング・ロジックと、各実行ユニットのエラーをハードウェア・エラーとして検出する試験回路と、を含むスーパースカラ・プロセッサにおいて、
前記命令シーケンシング・ロジックが、前記試験回路に命令ストリームを送り、前記試験回路が前記命令ストリームのうちの一のノー・オペレーション命令を前記試験命令に置換し、
前記試験回路が、一の実行ユニットを前記複数の実行ユニットからノー・オペレーション命令ごとに遷移することで選択し、この選択された実行ユニットが前記試験命令による試験を実行し、この試験回路は、障害検出器を含むことを特徴とするスーパースカラ・プロセッサ。
【請求項２】
前記試験回路は、前記選択された実行ユニットの前記試験命令による試験結果と、マルチプレクサによる計算結果とを比較する比較器を含む請求項１に記載のスーパースカラ・プロセッサ。
【請求項３】
前記試験開始命令を受け取る命令デコーダと、前記複数の実行ユニットから一の実行ユニットを選択する状態機械と、前記比較器と前記マルチプレクサとを備えた障害検出器とを含む試験回路である請求項２に記載のスーパースカラ・プロセッサ。
【請求項４】
前記命令シーケシング、ロジック、前記実行回路、および前記データストレージの少なくとも１つが、両方が前記試験命令に応答して同一の機能を実行する第１回路および第２回路を含み、
前記試験回路が、前記試験命令に応答して前記第１回路および前記第２回路によって出力される値を比較することによってハードウェア・エラーを検出する
請求項１に記載のスーパースカラ・プロセッサ。
【請求項５】
前記第１回路が、前記試験回路に第１値を出力する第１データ・ストレージを含み、前記第２回路が、前記試験回路に第２値を出力する第２データ・ストレージを含む、請求項４に記載のスーパースカラ・プロセッサ。
【請求項６】
前記第１データ・ストレージおよび前記第２データ・ストレージが、それぞれ、レジスタ・セットを含む、請求項５に記載のスーパースカラ・プロセッサ。
【請求項７】
前記第１回路および前記第２回路が、それぞれ、少なくとも第１計算機能および異なる第２計算機能を実行することができ、前記試験命令が、第１試験命令を含み、前記命令のストリームが、第２試験命令を含み、前記第１回路および前記第２回路の両方が、前記第１試験命令に応答して前記第１計算機能を実行し、両方が、前記第２試験命令に応答して前記第２計算機能を実行する、請求項４に記載のスーパースカラ・プロセッサ。
【請求項８】
前記実行回路が、前記試験命令に応答して、所定の結果を有する算術演算または論理演算を実行する、請求項１に記載のスーパースカラ・プロセッサ。
【請求項９】
前記実行回路が、前記算術演算または前記論理演算の結果を前記データ・ストレージに保管し、前記試験回路が、前記データ・ストレージに保管された前記結果を試験することによってハードウェア結果を検出する、請求項８に記載のスーパースカラ・プロセッサ。
【請求項１０】
前記試験回路が、ハードウェア・エラーの検出に応答して割込みをアサートする、請求項１に記載のスーパースカラ・プロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、全般的にはデータ処理に関し、具体的には、プロセッサ内のハードウェア・エラーの検出に関する。さらに具体的には、本発明は、通常モードでの動作中に、命令に応答してハードウェア・エラーを自己検査するプロセッサに関する。
【０００２】
【従来の技術】
通常のスーパースカラ・プロセッサには、たとえば、命令を保管する命令キャッシュ、順次命令を実行する１つまたは複数の実行ユニット、分岐命令を実行する分岐ユニット、命令をさまざまな実行ユニットにルーティングする命令シーケンシング・ロジック、およびオペランドおよび結果データを保管するレジスタを含む、ディジタル集積回路が含まれる。通常の機能動作中の、上で述べた通常のスーパースカラ・プロセッサなどの複雑なディジタル回路の正しい動作を検証するために、回路設計内にパリティ検査回路を組み込むことが周知である。しかし、スーパースカラ・プロセッサの各計算回路をパリティ検査することに伴う費用および複雑さのゆえに、パリティ検査回路は、プロセッサ・レジスタ・ファイルおよびオンチップ・キャッシュ・メモリなどの記憶回路のみについて実施されることがしばしばである。その結果、通常のプロセッサの計算回路は、通常の機能動作中に検査されないままになることがしばしばである。したがって、ハードウェア障害から生じる計算エラーが、検出されないままになり、破壊されたデータまたはシステム障害につながる可能性がある。
【０００３】
【発明が解決しようとする課題】
【課題を解決するための手段】
当技術分野での上記および他の短所に対処するために、本発明は、ノー・オペレーション（または他の所定の）命令サイクルを使用して、複雑なパリティ検査回路の必要なしにプロセッサ回路に対するハードウェア・テストを実行するプロセッサを提供する。
【０００４】
本発明によれば、自己検査の可能なプロセッサに、命令シーケンシング・ロジック、実行回路、実行回路に結合されたデータ・ストレージ、および試験回路が含まれる。試験回路は、命令シーケンシング・ロジックによって供給される命令ストリーム内の命令に応答して、命令シーケンシング・ロジック、実行回路、およびデータ・ストレージの１つにおける、プロセッサの通常機能動作中のハードウェア・エラーを検出する。一実施形態では、ハードウェア・エラーを、試験命令に応答して、同一の機能を実行する冗長回路によって出力される値を比較することによって検出することができる。その代わりにまたはそれに加えて、試験命令に応答して、既知の結果を有する算術演算または論理演算（たとえば、１による乗算、０の加算など）を実行することによって、ハードウェア・エラーを検出することができる。
【０００５】
【発明の実施の形態】
ここで図面、具体的には図１を参照すると、本発明による命令およびデータの処理のためのプロセッサ１０の例示的実施形態の高水準ブロック図が示されている。具体的に言うと、プロセッサ１０は、試験命令に応答してハードウェア自己検査を実行することによって、改良されたハードウェア障害検出を提供する。
【０００６】
プロセッサの概要
プロセッサ１０には、単一の集積回路スーパースカラ・プロセッサが含まれ、これには、下でさらに述べるように、さまざまな実行ユニット、レジスタ、バッファ、メモリ、および他の機能ユニットが含まれ、これらのすべてが、集積回路によって形成される。図１に示されているように、プロセッサ１０を、システム・メモリ１２、第２のプロセッサ１０などの他のデバイスに、相互接続ファブリック１４によって結合して、ワークステーション・コンピュータ・システムなどのより大きいデータ処理システムを形成することができる。プロセッサ１０には、統一されたレベル２（Ｌ２）キャッシュ１６、２つに分けられたレベル１（Ｌ１）命令（Ｉ）キャッシュ１８およびＬ１データ（Ｄ）キャッシュ２０を含むオンチップ複数レベル・キャッシュ階層も含まれる。当業者に周知の通り、Ｌ２キャッシュ１６、Ｌ１  Ｉキャッシュ１８、およびＬ１  Ｄキャッシュ２０は、システム・メモリ１２内のメモリ位置に対応するキャッシュ・ラインへの低待ち時間アクセスを提供する。
【０００７】
命令は、プロセッサ１０内の命令シーケンシング・ロジック１３によって、処理のために取り出され、順序付けられる。図示の実施形態では、命令シーケンシング・ロジック１３に、命令取出アドレス・レジスタ（ＩＦＡＲ）３０が含まれ、このＩＦＡＲ３０に、処理のためにＬ１  Ｉキャッシュ１８から取り出される命令のキャッシュ・ラインを示す有効アドレス（ＥＡ）が含まれる。各サイクル中に、新しい命令取出アドレスを、３つの供給源すなわち、条件分岐命令の予測から生じる投機ターゲット・パス・アドレスを供給する分岐予測ユニット（ＢＰＵ）３６、順次パス・アドレスを供給するグローバル完了テーブル（ＧＣＴ）３８、および予測された条件分岐命令の解決から生じる非投機アドレスを供給する分岐実行ユニット（ＢＥＵ）９２の１つからＩＦＡＲ３０にロードすることができる。ヒット／ミス・ロジック２２が、ＩＦＡＲ３０に含まれるＥＡの、有効アドレス実アドレス変換（ＥＲＡＴ）３２およびＩキャッシュ・ディレクトリ３４内の実アドレス（ＲＡ）のルックアップの後に、ＩＦＡＲ３０内のＥＡに対応する命令のキャッシュ・ラインがＬ１  Ｉキャッシュ１８内に存在しないと判定する場合に、ヒット／ミス・ロジック２２が、Ｉキャッシュ要求バス２４を介して、要求アドレスとしてＲＡをＬ２キャッシュ１６に供給する。そのような要求アドレスは、最近のアクセス・パターンに基づいて、Ｌ２キャッシュ１６内の事前取出ロジックによって生成することもできる。要求アドレスに応答して、Ｌ２キャッシュ１６が、命令のキャッシュ・ラインを出力し、このキャッシュ・ラインが、Ｉキャッシュ再ロード・バス２６を介して、場合によっては任意選択のプリデコード・ロジック１４４（下で説明する）を通過した後に、事前取出バッファ（ＰＢ）２８およびＬ１  Ｉキャッシュ１８にロードされる。
【０００８】
ＩＦＡＲ３０内のＥＡによって指定されるキャッシュ・ラインがＬ１  Ｉキャッシュ１８内に存在するようになった後に、Ｌ１  Ｉキャッシュ１８が、そのキャッシュ・ラインをＢＰＵ３６および命令取出バッファ（ＩＦＢ）４０の両方に出力する。ＢＰＵ３６は、分岐命令について命令のキャッシュ・ラインを走査し、条件分岐命令があれば、その結果を予測する。分岐予測の後に、ＢＰＵ３６は、上で述べたように投機命令取出アドレスをＩＦＡＲ３０に与え、分岐命令キュー（ＢＩＱ）６４にその予測を渡し、その結果、条件分岐命令がその後にＢＥＵ９２によって解決された時に予測の精度を判定できるようにする。
【０００９】
ＩＦＢ４０は、命令のキャッシュ・ラインを命令変換ユニット（ＩＴＵ）４２によって変換できるようになるまで、Ｌ１  Ｉキャッシュ１８から受け取った命令のキャッシュ・ラインを一時的にバッファに入れる。プロセッサ１０の図示の実施形態では、ＩＴＵ４２が、ユーザ命令セット・アーキテクチャ（ＵＩＳＡ）命令（たとえばPowerPC（登録商標）命令）から、プロセッサ１０の実行ユニットによって直接に実行可能な、場合によっては異なる数の内部ＩＳＡ（ＩＩＳＡ）命令に、命令を変換する。そのような変換は、たとえば、読取専用メモリ（ＲＯＭ）テンプレートに保管されたマイクロコードを参照することによって実行することができる。少なくともいくつかの実施形態では、ＵＩＳＡからＩＩＳＡへの変換が、ＵＩＳＡ命令と異なる数のＩＩＳＡ命令または対応するＵＩＳＡ命令と異なる長さのＩＩＳＡ命令もしくはその両方をもたらす。結果のＩＩＳＡ命令は、ＧＣＴ３８によって、命令グループに割り当てられ、命令グループのメンバは、互いにアウトオブオーダーで実行することができる。ＧＣＴ３８は、少なくとも１つの関連するＥＡによって実行がまだ完了していない命令グループのそれぞれを追跡し、この関連するＥＡは、命令グループ内の最も古い命令のＥＡであることが好ましい。
【００１０】
ＵＩＳＡからＩＩＳＡへの命令変換の次に、命令は、命令タイプに従って、ラッチ４４、４６、４８、および５０の１つにインオーダーでディスパッチされる。すなわち、分岐命令および他の条件レジスタ（ＣＲ）変更命令が、ラッチ４４にディスパッチされ、固定小数点命令およびロード／ストア命令が、ラッチ４６またはラッチ４８のいずれにディスパッチされ、浮動小数点命令が、ラッチ５０にディスパッチされる。実行結果を一時的に保管するためにリネーム・レジスタを必要とする命令のそれぞれに、ＣＲマッパー５２、リンクおよびカウント（ＬＣ）レジスタ・マッパー５４、例外レジスタ（ＸＥＲ）マッパー５６、汎用レジスタ（ＧＰＲ）マッパー５８、および浮動小数点レジスタ（ＦＰＲ）マッパー６０の適当な１つによって、レジスタ・ファイル内の１つまたは複数のレジスタが割り当てられる。
【００１１】
ディスパッチされた命令は、その後、ＣＲ発行キュー（ＣＲＩＱ）６２、ＢＩＱ６４、固定小数点発行キュー（ＦＸＩＱ）６６および６８、および浮動小数点発行キュー（ＦＰＩＱ）７０および７２の適当な１つに一時的に置かれる。ＣＲＩＱ６２、ＢＩＱ６４、ＦＸＩＱ６６、ＦＸＩＱ６８、ＦＰＩＱ７０、およびＦＰＩＱ７２から、命令を、都合のよい形で（すなわち、場合によってはアウトオブオーダーで）、実行のためにプロセッサ１０の実行ユニットに発行することができる。しかし、命令は、命令の実行が完了し、結果のデータがある場合にはそれが書き戻されるまで、命令のいずれかを再発行する必要がある場合に備えて、ＣＲＩＱ６２、ＢＩＱ６４、ＦＸＩＱ６６、ＦＸＩＱ６８、ＦＰＩＱ７０、またはＦＰＩＱ７２内で維持される。
【００１２】
図からわかるように、プロセッサ１０の実行ユニットには、ＣＲ変更命令を実行するＣＲユニット（ＣＲＵ）９０、分岐命令を実行するＢＥＵ９２、固定小数点命令を実行する２つの固定小数点ユニット（ＦＸＵ）９４および１００、ロード命令およびストア命令を実行する２つのロード・ストア・ユニット（ＬＳＵ）９６および９８、および浮動小数点命令を実行する２つの浮動小数点ユニット（ＦＰＵ）１０２および１０４が含まれる。ＣＲＵ９０、ＢＥＵ９２、ＦＸＵ９４、ＬＳＵ９６、ＬＳＵ９８、ＦＸＵ１００、ＦＰＵ１０２、およびＦＰＵ１０４のそれぞれが、複数のパイプライン・ステージを有する実行パイプラインとして実施されることが好ましい。
【００１３】
ＣＲＵ９０、ＢＥＵ９２、ＦＸＵ９４、ＬＳＵ９６、ＬＳＵ９８、ＦＸＵ１００、ＦＰＵ１０２、およびＦＰＵ１０４の１つにおける実行中に、命令は、オペランドがある場合に、そのオペランドを、その実行ユニットに結合されたレジスタ・ファイル内の１つまたは複数の設計済みレジスタまたはリネーム・レジスタから受け取る。ＣＲ変更命令またはＣＲ依存命令を実行している時に、ＣＲＵ９０およびＢＥＵ９２は、ＣＲレジスタ・ファイル８０にアクセスし、このＣＲレジスタ・ファイル８０には、好ましい実施形態では、ＣＲと、１つまたは複数のビットから形成される複数の別個のフィールドをそれぞれが含むＣＲリネーム・レジスタとが含まれる。これらのフィールドの中に、値（通常は命令の結果またはオペランド）が０未満であることを示すＬＴフィールド、値が０を超えることを示すＧＴフィールド、および値が０に等しいことを示すＥＱフィールドがある。リンクおよびカウント・レジスタ（ＬＣＲ）レジスタ・ファイル８２には、カウント・レジスタ（ＣＴＲ）、リンク・レジスタ（ＬＲ）、およびそれぞれのリネーム・レジスタが含まれ、これによって、ＢＥＵ９２が、パス・アドレスを得るために条件分岐を解決することもできる。汎用レジスタ・ファイル（ＧＰＲ）８４および８６は、同期化され複製されるレジスタ・ファイルであるが、これには、ＦＸＵ９４および１００とＬＳＵ９６および９８によってアクセスされ、作られる固定小数点値および整数値が保管される。浮動小数点レジスタ・ファイル（ＦＰＲ）８８は、ＧＰＲ８４および８６と同様に、同期化されたレジスタの複製される組として実施することもできるが、これには、ＦＰＵ１０２および１０４による浮動小数点命令の実行から生じる浮動小数点値とＬＳＵ９６および９８による浮動小数点ロード命令の実行から生じる浮動小数点値が含まれる。
【００１４】
実行ユニットが、命令の実行を終了した後に、その実行ユニットが、ＧＣＴ３８に通知し、ＧＣＴ３８が、プログラム順での命令の完了をスケジューリングする。ＣＲＵ９０、ＦＸＵ９４および１００、またはＦＰＵ１０２および１０４の１つによって実行される命令を完了するために、ＧＣＴ３８は、適当なマッパーに信号を送り、このマッパーが、その命令に割り当てられたレジスタ・ファイル・レジスタ（１つまたは複数）に、レジスタの設計済み状態が含まれることを示すために指示をセットする。その後、命令が、発行キューから除去され、その命令グループ内のすべての命令が完了した後に、ＧＣＴ３８から除去される。しかし、他のタイプの命令は、異なる形で完了する。
【００１５】
ＢＥＵ９２が、条件分岐命令を解決し、たどらなければならない実行パスのパス・アドレスを判定した時に、そのパス・アドレスが、ＢＰＵ３６によって予測された投機パス・アドレスと比較される。これらのパス・アドレスが一致する場合には、これ以上の処理は不要である。しかし、計算されたパス・アドレスが、予測されたパス・アドレスと一致しない場合には、ＢＥＵ９２が、ＩＦＡＲ３０に正しいパス・アドレスを供給する。どちらの場合でも、その後、分岐命令を、ＢＩＱ６４から除去することができ、同一の命令グループ内の他のすべての命令が完了した時に、ＧＣＴ３８から除去することができる。
【００１６】
ロード命令（load-reserve命令を含む）の実行の次に、ロード命令の実行によって計算された有効アドレスが、データＥＲＡＴ（図示せず）によって実アドレスに変換され、その後、要求アドレスとしてＬ１  Ｄキャッシュ２０に供給される。この時点で、ロード操作が、ＦＸＩＱ６６または６８から除去され、指示されたロードが実行されるまでロード・データ・キュー（ＬＤＱ）１１４に置かれる。要求アドレスが、Ｌ１  Ｄキャッシュ２０内でミスになる場合には、要求アドレスが、ロード・ミス・キュー（ＬＭＱ）１１６に置かれ、そこから、要求されたデータが、Ｌ２キャッシュ１６から取り出され、それに失敗した場合には、別のプロセッサ１０またはシステム・メモリ１２から取り出される。
【００１７】
ストア命令（store-conditional命令を含む）は、同様に、ストア・キュー（ＳＴＱ）１１０を使用して完了され、このＳＴＱ１１０に、ストア命令の実行の後にストアの有効アドレスがロードされる。ＳＴＱ１１０から、データを、ターゲット・アドレスの有効アドレスから実アドレスへの変換の後に、Ｌ１  Ｄキャッシュ２０またはＬ２キャッシュ１６のいずれかもしくは両方にストアすることができる。
【００１８】
ハードウェア試験
他の電気回路と同様に、上で説明したプロセッサ１０の集積回路は、たとえば製造プロセスの不整または環境条件に起因する、ハードウェア障害をこうむる。したがって、製造およびパッケージング・プロセス中に、プロセッサ１０が、通常は、プロセッサ１０がハードウェア障害を受けたかどうかを判定するために、デバイス試験およびシステム（たとえば基板）試験を含む、複数の従来の環境試験および電気試験を受ける。そのような試験を容易にするために、プロセッサ１０に、図１に示された内部ロジックとチップ・パッケージの入出力ピンの間に結合された、ＩＥＥＥ標準規格１１４９．１互換バウンダリ・スキャン・インターフェース（図示せず）を含めることができる。当業者に周知の通り、ＩＥＥＥ標準規格１１４９．１インターフェースでは、さまざまな試験命令に応答して、プロセッサ１０をＴＥＳＴ（試験）モードにするテスト・アクセス・ポート（ＴＡＰ）コントローラも定義され、このＴＥＳＴモードは、本明細書では、ピン、試験回路、および内部ロジックが、通常のシステム動作ではなく試験用に構成される、デバイスの状態として定義される。ＴＥＳＴモードでは、ＴＡＰコントローラが、命令（たとえばＥＸＴＥＳＴ命令）を実行して、出力ピンだけを試験することができ、その代わりに、試験命令（たとえばＩＮＴＥＳＴまたはＲＵＮＢＩＳＴ）を実行して、プロセッサ１０の内部ロジックを試験することができる。ＩＥＥＥ標準規格１１４９．１のＴＡＰコントローラおよびそれに関連する試験命令に関するさらなる情報は、いずれも参照によって本明細書に組み込まれる、「Standard Test Access Port and Boundary-Scan Architecture」、Institute of Electrical and Electronics Engineers（１９９０年５月２１日）、および1149.1b-1994 Supplementに記載されている。
【００１９】
ＩＥＥＥ標準規格１１４９．１によって定義されるデバイスおよび基板の試験によって、ハードウェア障害の検出が可能になるが、そのような試験は、試験中のデバイス（ＤＵＴ）または試験中の基板（ＢＵＴ）がＴＥＳＴモードで構成されている時に限ってハードウェア障害を検出できるという点で制限されている。一般的に言って、デバイスまたは基板が、そのエンド・ユースでの配置の後に、ハードウェア障害の検出を可能にするためにＴＥＳＴモードにされることは、あるとしても希である。言い換えると、配置の後に、従来のシステムのハードウェア障害は、一般に、重大なデータ破壊またはシステム障害が発生するまでは検出されない。
【００２０】
本発明は、通常モードのプロセッサ動作中に発生するハードウェア障害を検出し、したがって、場合によってはシステム障害または重大なデータ破壊の前の、早期の訂正処置を可能にすることによって、改良されたハードウェア障害検出を提供する。本明細書で使用する「通常モード」（または「通常動作」）は、プロセッサのＵＩＳＡまたはＩＩＳＡ内の命令が通常の作業を実行するためにプロセッサによって実行される、非ＴＥＳＴモードの動作と定義される。本発明によれば、通常モードでのハードウェア障害試験は、命令ストリーム内の１つまたは複数の命令を挿入するか、試験命令として指定し、その後、命令ストリーム内の命令の実行中にそのような試験命令に応答して、プロセッサの命令シーケンシング・ロジック１３、実行回路（たとえば、ＣＲＵ９０、ＢＥＵ９２、ＦＸＵ９４、ＬＳＵ９６、ＬＳＵ９８、ＦＸＵ１００、ＦＰＵ１０２、およびＦＰＵ１０４）、またはデータ・ストレージ（たとえば、ＣＲレジスタ・ファイル８０、ＬＣＲレジスタ・ファイル８２、ＧＰＲ８４、ＧＰＲ８６、ＦＰＲ８８）のハードウェア障害試験を実行することによって達成される。この形で、配置の後にプロセッサ障害が発生する場合に、その障害が、未検出にならなくなり、通常動作中のプロセッサの構成要素の組織的試験によって最終的に発見される。
【００２１】
本発明による１つまたは複数の試験命令を、プロセッサ１０のＵＩＳＡまたはＩＩＳＡ内で明示的に定義することができるが、有用な作業を実行せず、プロセッサ状態を変更しない、ＵＩＳＡまたはＩＩＳＡのノー・オペレーション命令を、本発明の好ましい実施形態による試験開始命令として有利に指定することができる。通常のノー・オペレーション命令は、データの移動または処理に関して有用な作業を実行しないが、ノー・オペレーション命令は、ソフトウェア内のタイミング・ループのパディング、キャッシュ・ライン境界上の命令の位置合せの達成、所望の命令シーケンシングの実装などの、他の理由のために頻繁に使用される。本発明の好ましい実施形態によれば、これらのノー・オペレーション試験開始命令が、通常モードの動作での処理中に、選択された試験命令によって動的に置換される。ノー・オペレーション試験開始命令を試験命令に置換することによって、ハードウェア障害試験を、プロセッサ性能のわずかな低下でまたは低下なしで、ノー・オペレーション命令の他の有用な目的を保ちながら、通常モードの動作で実行することができる。
【００２２】
前述に鑑みて、試験命令を、プロセッサ１０の命令シーケンシング・ロジック１３によって構成される命令ストリーム内に複数の異なる形で組み込むことができることを諒解されたい。たとえば、プリデコード・ロジック１４４が、Ｌ２キャッシュ１６から取り出されたＵＩＳＡのノー・オペレーション（または他の選択された）命令を、Ｌ１  Ｉキャッシュ１８内での命令の保管の前に、ＵＩＳＡまたはＩＩＳＡの試験命令に変換することができる。しかし、図１に示された実施形態では、試験命令を指定するか、ＩＴＵ４２による命令変換と共に命令ストリーム内に挿入することが、より好ましい。理解しやすくするために、試験命令を指定または命令ストリームに挿入する回路を、図１では別の試験回路１２０として図示する。しかし、そのような試験回路１２０を、プロセッサ１０の命令処理パイプライン内の異なる位置で実施することができ、ＩＴＵ４２またはプリデコード・ロジック１４４もしくはその両方に組み込むこともできることを諒解されたい。
【００２３】
ここで図２および図３を参照すると、例示的命令ストリーム内のノー・オペレーション命令の試験命令への変換が示されている。図２では、例示的な命令ストリーム１３０ａに、プログラム順の最初から最後への順番で、ロード命令１３２、加算命令１３４、２つのノー・オペレーション命令１３６および１３８、整数乗算命令１４０、および減算命令１４２が含まれる。省略記号の表記によって示されるように、この命令ストリームには、多数の追加の命令も含まれる可能性がある。
【００２４】
本発明の好ましい実施形態によれば、ノー・オペレーション命令１３６および１３８は、Ｌ１  Ｉキャッシュ１８から取り出されるＵＩＳＡ命令に存在したか、所望の命令シーケンシングまたは命令グループ化を達成するためにＩＴＵ４２によって命令ストリーム１３０ａに挿入された可能性があるが、試験回路１２０によって、図３の命令ストリーム１３０ｂの試験命令１５０および１５２などの試験命令に置換される。試験命令１５０および１５２などの試験命令は、その命令の計算結果をプロセッサの設計済み状態の一部にすることができないことを示す、ＩＩＳＡ動作コード内のセット・ビットを用いてマークされることが好ましい。図示の実施形態では、試験命令１５０が、ＦＰＵ１０２および１０４の一方または両方のハードウェア障害を試験する浮動小数点乗算命令である。その一方で、試験命令１５２は、ハードウェア障害についてＣＲＵ９０を試験する条件コード設定命令である。下でさらに説明するように、試験命令の動作コード、試験回路によって動かされる実行回路または命令シーケンシング回路、および試験回路によって参照されるレジスタは、広範囲のテスト・カバレッジをもたらすために、動作中に変更されることが好ましい。
【００２５】
ここで図４を参照すると、図１の試験回路１２０のより詳細なブロック図が示されている。図からわかるように、試験回路１２０は、３つの主要な構成要素すなわち、命令デコーダ１６０、状態機械１７０、および障害検出器１８０を有する。命令デコーダ１６０は、ＩＦＢ４０またはＩＴＵ４２もしくはその両方に結合され、命令デコーダ１６０が、ＩＴＵ４２によって構成された命令ストリーム内のノー・オペレーション（または他の選択された）のＵＩＳＡまたはＩＩＳＡの試験開始命令を検出できるようになっている。命令ストリーム内の試験開始命令の検出に応答して、命令デコーダ１６０は、状態機械１７０に通知する。
【００２６】
図５および図６に関して下でさらに説明するように、状態機械１７０は、検出された試験開始（たとえばノー・オペレーション）命令ごとに、ＩＩＳＡ試験命令動作コード、試験命令の１つまたは複数のターゲット実行ユニット、および試験命令によって参照されるオペランド・レジスタを選択する。その後、状態機械１７０は、ディスパッチおよび実行のために試験命令をＩＴＵ４２に供給する。試験命令動作コードは、各試験命令が、所定（すなわち定数）であるか、試験命令に関する先見的情報なしでプロセッサ１０によって動的に検出できるかのいずれかの既知の結果を有するように選択されることが好ましい。後者の場合、結果を、出力結果を入力オペランドと比較することによるか、冗長プロセッサ・ハードウェアの出力を比較することによって動的に検証することができる。したがって、試験命令が、ＦＸＵ９４および１００などの冗長実行ユニットの試験を目的とする場合には、試験命令（たとえば整数加算）を、ＦＸＵ９４および１００による実行のためにラッチ４６および４８の両方にディスパッチすることができ、２つの整数加算命令の実行によって作られる和を比較（障害検出器１８０によって）して、ハードウェア障害がＦＸＵ９４および１００の一方で発生したかどうかを判定することができる。
【００２７】
試験命令の複数のインスタンスを、複数の異なる形で生成できることに留意されたい。第１に、試験命令が冗長なインスタンスが存在するハードウェアをターゲットとする場合に、同一の試験命令のコピーを異なる実行ユニットに自動的にディスパッチするように、ＩＴＵ４２内のディスパッチ・ロジックを構成することができる。第２に、試験命令の動作コードのビットを、状態機械１７０によってセットして、試験命令が２回ディスパッチされなければならないことを示すことができる。第３に、状態機械１７０が、ＩＴＵ４２内の命令ストリームに、単純に複数の同一のＩＩＳＡ試験命令を挿入することができる。
【００２８】
さらに図４を参照すると、試験命令の実行の次に、試験回路１２０内の障害検出器１８０が、試験命令の実行結果を参照することによって、ハードウェア障害が発生したかどうかを検出する。ハードウェア障害の検出には、４つの基本機能が使用され、これらの機本機能は、図示の実施形態では、マルチプレクサ１８２および１８４と比較器１８６によって実行される。第１に、マルチプレクサ１８２によって示されるように、障害検出器１８０は、状態機械１７０の対応する状態を示す１つまたは複数の選択信号１８８に基づいて、試験命令の実行結果（Ｒ１）の適当な供給源を選択する。実行結果の供給源には、少なくとも、ＣＲＵ９０、ＢＥＵ９２、ＦＸＵ９４、ＬＳＵ９６、ＬＳＵ９８、ＦＸＵ１００、ＦＰＵ１０２、およびＦＰＵ１０４またはＣＲレジスタ・ファイル８０、ＬＣＲレジスタ・ファイル８２、ＧＰＲ８４、ＧＰＲ８６、ＦＰＲ８８もしくはこの両方のすべての出力が含まれることが好ましい。第２に、比較器１８６が、適当な期待される値を選択して、１つまたは複数の選択信号１８８に基づく試験命令の実行結果（Ｒ１）と比較する。図からわかるように、可能な値には、少なくとも、０、１、入力オペランド値、および、冗長プロセッサ・ハードウェアの第２インスタンスによって作られた実行結果であるＲ２が含まれることが好ましい。第３に、比較器１８６によって表されるように、障害検出器１８０が、マルチプレクサ１８２によって出力される試験命令の実行結果（Ｒ１）を、マルチプレクサ１８４によって選択された期待される値と比較することによって、ハードウェア障害を検出する。第４に、障害検出器１８０は、マルチプレクサ１８４によって選択された期待される値と実行結果Ｒ１が同一に一致しない場合に、ハードウェア障害を知らせる。図示の実施形態では、障害検出器１８０が、信号線１９０上の高優先順位ハードウェア障害割込みをアサートすることによって、比較器１８６によるハードウェア障害の検出を知らせる。検出されたハードウェア障害に関する追加情報を割込みハンドラに提供するために、比較器１８６がハードウェア障害割込みをアサートする時に、状態機械１７０が、ハードウェア障害が検出された状態の指示を、ソフトウェアからアクセスできる障害状態レジスタ１６２に保管する。割込みハンドラ・ルーチンは、たとえば、オペレーティング・システムに、これ以上あるタイプのプロセッサまたはプロセッサ１０に対する動作をスケジューリングしないようにさせることによって、またはプロセッサ１０を使用不可にすることによって、検出されたハードウェア障害に対処することができる。
【００２９】
ここで図５を参照すると、本発明による状態機械１７０ａの第１の例示的実施形態の状態図が示されている。この第１の例示的実施形態では、状態機械１７０ａに、それぞれが独自の実行ユニット・タイプに対応する５つの基本状態２００ないし２０８が含まれる。したがって、図からわかるように、基本状態２００はＣＲＵ９０に対応し、基本状態２０２はＢＥＵ９２に対応し、基本状態２０４はＦＸＵ９４および１００に対応し、基本状態２０６はＬＳＵ９６および９８に対応し、基本状態２０８はＦＰＵ１０２および１０４に対応する。命令ストリーム内のノー・オペレーション（または他の選択された）試験開始命令の命令デコーダ１６０による検出によって、状態機械１７０ａが、基本状態２００ないし２０８を相互接続する矢印によって示されるように、以前の基本状態から現在の基本状態に遷移する。
【００３０】
現在の基本状態は、現在の試験命令のターゲットとしてどのタイプの実行ユニットが選択されているかを示す。現在の基本状態によって示される実行ユニットのタイプが、冗長なインスタンスを有する場合には、試験命令が、少なくとも２つの冗長なインスタンスによって実行され、その結果、結果を比較できるようになる。その一方で、プロセッサ１０に、現在の基本状態によって示される実行ユニット・タイプの単一のインスタンスだけが含まれる場合には、実行結果（Ｒ１）は、所定の値（たとえば、０、１、または入力オペランド）と比較される。
【００３１】
図５にさらに示されているように、基本状態２００ないし２０８のそれぞれは、試験命令動作コードの選択に使用される、各々に関連する動作コード状態機械２２０ないし２２８を有する。動作コード状態機械２２０ないし２２８のそれぞれには、関連する基本状態に対応する実行ユニット・タイプによってサポートされるＩＩＳＡ動作コードの各々の１つをそれぞれが表す１つまたは複数の動作コード状態が含まれる。したがって、たとえば、動作コード状態機械２２４に、ＦＸＵ９４および１００によってサポートされる整数算術演算（加算、減算、乗算、除算）および整数論理演算（roll、１の補数、２の補数、論理和、論理積）に対応する動作コード状態２２５ａないし２２５ｎを含めることができる。同様に、動作コード状態機械２２８の動作コード状態は、ＦＰＵ１０２および１０４によってサポートされるさまざまな浮動小数点算術演算および浮動小数点論理演算を表し、動作コード状態機械２２０の動作コード状態は、それぞれが、ＣＲＵ９０によって実行される条件コード設定命令の各々の１つを表す。多数の状態遷移方式を実施することができるが、動作コード状態機械の現在の状態は、基礎となる基本状態の状態の間で遷移が行われるたびに更新されることが好ましい。
【００３２】
上で簡単に述べたように、単一の実行ユニットのみによって実行される試験命令の場合、試験命令の動作コードおよびオペランドは、実行結果が既知になるように選択されることが好ましい。この制約を満足する算術演算および論理演算の例を、下の表Ｉにリストする。
【００３３】
【表１】
0004012377.tif 000002
【００３４】
状態機械１７０ａの基本状態２００ないし２０８のそれぞれは、関連する動作コード状態機械によって選択された試験命令の実行中にアクセスされるレジスタを指定する、レジスタ状態機械２３０ないし２３８の各々の関連する１つも有する。したがって、各レジスタ状態機械には、基本状態２００ないし２０８の関連する１つに対応する実行ユニット・タイプによってアクセスすることができるレジスタ・ファイル内の各々のレジスタにそれぞれが対応する複数の状態が含まれる。動作コード状態機械２２０ないし２２８と同様に、レジスタ状態機械２３０ないし２３８の現在の状態は、基本状態２００ないし２０８の関連する１つに対して遷移が行われるたびに更新されることが好ましい。
【００３５】
レジスタ状態機械２３０ないし２３８（および動作コード状態機械２２０ないし２２８）のそれぞれは、所望のテスト・カバレッジと、レジスタ・ファイル・ポートおよびレジスタの使用状況とに応じて、多数の異なる形で独立に実施することができる。たとえば、ハードウェア障害試験のためのレジスタ・ファイル・ポートの使用率を最小にするためには、動作コード状態機械２２０ないし２２８内の動作コードを、単一レジスタ・オペランドを有する（すなわち、単一のオペランドだけを有するか、１つまたは複数の即値オペランドを有する）動作コードに全般的に制限することが望ましい可能性がある。この形で、試験目的で各サイクルにアクセスされるレジスタ・ファイル・ポートの数を制限することによって、プロセッサ性能に対する試験命令の影響を減らすことができる。
【００３６】
さらに、レジスタ状態機械２３０ないし２３８のそれぞれを実施して、試験命令結果を保持するためのターゲット・レジスタを割り振るか、その代わりに、試験命令にターゲット・レジスタを割り振らないかのいずれかを行うことができる。試験命令にターゲット・レジスタが割り当てられない場合には、試験が簡略化され、プロセッサ・リソースの消費が減り、これは、より多くのレジスタが、命令ストリーム内の他の命令の実行に使用可能になることを意味する。しかし、ターゲット・レジスタを試験命令に割り振り、試験命令の実行結果を、ＣＲＵ９０、ＢＥＵ９２、ＦＸＵ９４、ＬＳＵ９６、ＬＳＵ９８、ＦＸＵ１００、ＦＰＵ１０２、およびＦＰＵ１０４から直接にではなく、ＣＲレジスタ・ファイル８０、ＬＣＲレジスタ・ファイル８２、ＧＰＲ８４、ＧＰＲ８６、およびＦＰＲ８８から障害検出器１８０のマルチプレクサ１８２に供給する場合に、より広いテスト・カバレッジを得ることができる。もちろん、試験命令の実行結果が、プロセッサ１０の設計済み状態を変更することを許容することはできない。したがって、レジスタ状態機械２３０ないし２３８が、ターゲット・レジスタが試験命令に割り当てられるように実施される場合には、試験命令の実行結果を保持するターゲット・レジスタを、たとえば、試験命令の実行結果がレジスタに転送される時にレジスタ有効ビットをリセットすることによって、無効としてマークしなければならない。
【００３７】
ここで図６を参照すると、本発明による状態機械１７０ｂの第２の例示的実施形態が示されている。状態機械１７０ｂは、状態機械１７０ｂで、ＣＲＵ９０、ＢＥＵ９２、ＦＸＵ９４、ＬＳＵ９６、ＬＳＵ９８、ＦＸＵ１００、ＦＰＵ１０２、およびＦＰＵ１０４のそれぞれがそれ自体の各々の基本状態を有することを除いて、図５の状態機械１７０ａと同一である。この相違は、プロセッサ１０がターゲット実行ユニットの冗長なインスタンスを有する場合であっても、各試験命令が、１つのターゲット実行ユニットだけによって実行されることを意味する。もちろん、一部の試験命令を複数の実行ユニットで実行し、他の試験命令を複数の冗長な実行ユニットのうちの１つだけで実行する、状態機械１７０ａと状態機械１７０ｂの間のハイブリッドを実施することも可能である。
【００３８】
上で説明したように、本発明は、プロセッサの通常モードの動作での命令の実行中に障害についてプロセッサ・ハードウェアを試験する、改良された方法およびシステムを提供する。本発明は、有利なことに、そのような試験のプロセッサ性能に対する影響を最小にするために、試験についてノー・オペレーション命令サイクルを使用する。ハードウェア障害試験が、通常モードの動作で実行されるので、プロセッサ配置の後で生じるハードウェア障害を検出し、対処することができる。
【００３９】
好ましい実施形態に関して本発明を具体的に図示し、説明してきたが、本発明の趣旨および範囲から逸脱せずに、形態および詳細におけるさまざまな変更を行うことができることを、当業者は理解するであろう。たとえば、本発明は、特定のプロセッサ・アーキテクチャまたは命令変換を使用するプロセッサ・アーキテクチャに制限されるのではなく、すべてのプロセッサ・アーキテクチャに適用可能である。同様に、本発明の前述の説明では、ハードウェア試験が、ノー・オペレーションまたは他の選択された試験命令のそれぞれに応答して行われることを仮定したが、本発明の一部の実施形態では、試験回路１２０によって実行されるハードウェア試験を、たとえばプロセッサ制御レジスタ内の、ソフトウェアからアクセスできるビットをセットまたはリセットすることによって、オンまたはオフにすることができるということを理解されたい。
【００４０】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００４１】
（１）プロセッサであって、
実行のために試験開始命令を含む命令のストリームを供給する命令シーケンシング・ロジックと、
実行回路と、
前記実行回路に結合されたデータ・ストレージと、
通常モードの動作で前記実行回路による前記命令のストリームの実行中に、前記試験開始命令に応答して、前記命令シーケンシング・ロジック、前記実行回路、および前記データ・ストレージの１つのハードウェア・エラーを検出する試験回路と
を含むプロセッサ。
（２）前記試験開始命令が、ノー・オペレーション命令である、上記（１）に記載のプロセッサ。
（３）前記試験回路が、前記試験開始命令の代わりに試験命令を前記命令ストリームに挿入する、上記（１）に記載のプロセッサ。
（４）前記命令シーケンシング・ロジック、前記実行回路、および前記データ・ストレージの少なくとも１つが、両方が前記試験命令に応答して同一の機能を実行する第１回路および第２回路を含み、
前記試験回路が、前記試験命令に応答して前記第１回路および前記第２回路によって出力される値を比較することによってハードウェア・エラーを検出する
上記（１）に記載のプロセッサ。
（５）前記第１回路が、前記試験回路に第１値を出力する第１データ・ストレージを含み、前記第２回路が、前記試験回路に第２値を出力する第２データ・ストレージを含む、上記（４）に記載のプロセッサ。
（６）前記第１データ・ストレージおよび前記第２データ・ストレージが、それぞれ、レジスタ・セットを含む、上記（５）に記載のプロセッサ。
（７）前記第１回路および前記第２回路が、それぞれ、少なくとも第１計算機能および異なる第２計算機能を実行することができ、前記試験命令が、第１試験命令を含み、前記命令のストリームが、第２試験命令を含み、前記第１回路および前記第２回路の両方が、前記第１試験命令に応答して前記第１計算機能を実行し、両方が、前記第２試験命令に応答して前記第２計算機能を実行する、上記（４）に記載のプロセッサ。
（８）前記実行回路が、前記試験命令に応答して、所定の結果を有する算術演算または論理演算を実行する、上記（１）に記載のプロセッサ。
（９）前記実行回路が、前記算術演算または前記論理演算の結果を前記データ・ストレージに保管し、前記試験回路が、前記データ・ストレージに保管された前記結果を試験することによってハードウェア結果を検出する、上記（８）に記載のプロセッサ。
（１０）前記試験回路が、ハードウェア・エラーの検出に応答して割込みをアサートする、上記（１）に記載のプロセッサ。
【図面の簡単な説明】
【図１】本発明の方法およびシステムを有利に使用することができるデータ処理システムの例示的実施形態を示す図である。
【図２】本発明の好ましい実施例による、命令ストリーム内のノー・オペレーション命令の試験命令への変換を示す図である。
【図３】本発明の好ましい実施例による、命令ストリーム内のノー・オペレーション命令の試験命令への変換を示す図である。
【図４】図１に示された試験回路のより詳細なブロック図である。
【図５】本発明による試験状態機械の第１の例示的実施形態を示す図である。
【図６】本発明による試験状態機械の第２の例示的実施形態を示す図である。
【符号の説明】
１２０  試験回路
１６０  命令デコーダ
１６２  障害状態レジスタ
１７０  状態機械
１８０  障害検出器
１８２  マルチプレクサ
１８４  マルチプレクサ
１８６  比較器
１８８  選択信号
１９０  信号線
２００  基本状態
２０２  基本状態
２０４  基本状態
２０６  基本状態
２０８  基本状態
２２０  動作コード状態機械
２２２  動作コード状態機械
２２４  動作コード状態機械
２２６  動作コード状態機械
２２８  動作コード状態機械
２３０  レジスタ状態機械
２３２  レジスタ状態機械
２３４  レジスタ状態機械
２３６  レジスタ状態機械
２３８  レジスタ状態機械
【図１】
0004012377.tif 000003
【図２】
0004012377.tif 000004
【図３】
0004012377.tif 000005
【図４】
0004012377.tif 000006
【図５】
0004012377.tif 000007
【図６】
0004012377.tif 000008