(57)【要約】【課題】  ソフトエラーを検出するメカニズムを含むマイクロプロセッサを提供する。【解決手段】  本発明にかかるプロセッサは、命令をフェッチする命令フェッチユニットと、命令をデコードする命令デコーダとを含む。ソフトエラーを検出するメカニズムは、命令を複製する複製ハードウェアと、結果を比較する比較ハードウェアとを含む。プロセッサは、第１の実行サイクルで命令を実行し、第２の実行サイクルで複製された命令を実行する第１の実行ユニットをさらに含む。比較ハードウェアは、第１の実行サイクルの結果と第２の実行サイクルの結果とを比較する。比較ハードウェアは、結果が同じでない場合に、例外を生成する（障害を生成する）例外ユニットを含み、結果が同じである場合に、結果の１つをコミットするコミットユニットも含む。【選択図】図２
2005149496.tif 000002
【特許請求の範囲】
【請求項１】
ソフトエラーを検出するメカニズム（２４０）を含むプロセッサ（２００）であって、
ａ）命令をフェッチする命令フェッチユニット（２０４）と、
ｂ）前記命令をデコードする命令デコーダ（２０８）と、
ｃ）前記命令を複製する複製ハードウェア（２４４）と、
ｄ）第１の実行サイクルで前記命令を実行する第１の実行ユニット（２１２）と、
ｅ）第２の実行サイクルで前記複製された命令を実行する前記第１の実行ユニット（２１２）と、
ｆ）前記第１の実行サイクルの結果と前記第２の実行サイクルの結果とを比較する比較ハードウェア（２４８）と、
ｇ）前記結果が同じである場合に、前記結果の１つをコミットするコミットユニット（２１４）と、
ｈ）前記結果が同じでない場合に、例外を生成する例外ユニット（２４９）と
を備えるプロセッサ。
【請求項２】
第１の実行サイクルで前記命令を実行する前記ステップは、
前記第１の実行サイクルの前記結果を記憶するステップ
を含む
請求項１に記載のプロセッサ（２００）。
【請求項３】
前記第１の実行サイクルで前記命令を実行する前記ステップは、
第１の実行ユニット（２１２）に前記デコードされた命令を発行すること
を含み、
前記第２の実行サイクルで前記命令を実行する前記ステップは、
前記第１の実行ユニット（２１２）に前記デコードされた命令を発行すること
を含む
請求項１に記載のプロセッサ。
【請求項４】
前記第１の実行ユニット（２１２）は、浮動小数点ユニット、整数ユニット、算術論理ユニット（ＡＬＵ）、マルチメディアユニットおよび分岐ユニットの１つである
請求項３に記載のプロセッサ。
【請求項５】
前記複製ハードウェアおよび前記比較ハードウェアを有効にするビットを含む制御レジスタ（８００）
をさらに備える請求項１に記載のプロセッサ。
【請求項６】
前記ビットは、ユーザプログラムされたファームウェア（８２０）またはオペレーティングシステム（８３０）によってセットされる
請求項５に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、包括的には、プロセッサのソフトエラーの検出に関し、より詳細には、交替スレッド（alternating thread）を使用するプロセッサのエラー検出方法およびシステムに関する。
【背景技術】
【０００２】
シリコンデバイスは、ますます「ソフトエラー」を受けやすくなっている。
ソフトエラーは、宇宙線またはα粒子の衝突によって引き起こされるエラーである。
これらの事象は、発生すると、デバイス（例えば、マイクロプロセッサ）内の任意のノードの状態を変化させる。
あいにく、これらのエラーは、本来一時的なものであり、システムの他の部分に見えることもあるし、見えないこともある。
【０００３】
多くのマイクロプロセッサの設計は、信頼性を向上させるために、「ソフトエラー」を検出し、できれば「ソフトエラー」を訂正するのに役立つハードウェアを追加する。
これらの「ソフトエラー」を検出するのに、さまざまな技法が使用されてきた。
このような技法の１つの例は、メモリ構造にパリティを追加するものである。
これらの技法は、メモリ構造を保護するには有効ではあるが、集積回路内のランダムな制御論理回路、実行データパス、およびラッチを「ソフトエラー」から保護するにはあまり有効ではない。
【０００４】
ランダムな制御論理回路およびその対応する実行データパスを保護する１つの従来技法は、「ロックステップコア（lockstepped core）」または「機能的冗長検査（Functional Redundancy Check）」とよばれる。
この技法は、ロックステップで２つまたは３つ以上のプロセッサを実行する必要がある。
複数のマイクロプロセッサが同一コードを実行しているので、同じ結果が予想される。
それらの結果が比較されて、結果が同じでない場合、障害が生成される。
ロックステップされたマイクロプロセッサのコアは、通常、マスタマイクロプロセッサおよびチェッカマイクロプロセッサとして設計されて動作する。
マスタマイクロプロセッサおよびチェッカマイクロプロセッサの結果は、絶えず比較される。
この技法は、多くのソフトエラーの検出に有効であるが、この解決策は、チェックを行うのに複数の処理エレメントが必要とされる点で高価である。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記に基づいて、上述したような従来技術の不利な点を克服する、交替スレッドを使用するプロセッサのエラー検出方法およびシステムが依然として必要とされている。
【課題を解決するための手段】
【０００６】
本発明の一実施の形態によれば、ソフトエラーを検出するメカニズムを含むマイクロプロセッサが説明される。
このプロセッサは、命令をフェッチする命令フェッチユニットと、命令をデコードする命令デコーダとを含む。
ソフトエラーを検出するメカニズムは、命令を複製する複製ハードウェアと、結果を比較する比較ハードウェアとを含む。
プロセッサは、第１の実行サイクルで命令を実行し、第２の実行サイクルで複製された命令を実行する第１の実行ユニットをさらに含む。
比較ハードウェアは、第１の実行サイクルの結果と第２の実行サイクルの結果とを比較する。
比較ハードウェアは、結果が同じでない場合に、例外を生成する（障害を生成する）例外ユニットを含むことができる。
また、プロセッサは、結果が同じである場合に、結果の１つをコミットするコミットユニットも含む。
【０００７】
本発明の別の実施の形態によれば、制御レジスタは、エラー検出メカニズムを選択的に有効にするように提供される。
【０００８】
本発明の他の特徴および利点は、以下の詳細な説明から明らかになるであろう。
【０００９】
添付図面の図に、限定としてではなく例として本発明を図示する。
添付図面において、同じ参照符号は同様の要素を参照する。
【発明を実施するための最良の形態】
【００１０】
以下の説明では、本発明の十分な理解を提供するために、説明の目的で、多数の具体的な詳細を説明する。
しかしながら、本発明は、これらの具体的な詳細がなくても実施できることが当業者には明らかであろう。
それ以外の場合には、本発明を不必要に分かりにくくすることを回避するために、既知の構造およびデバイスをブロック図の形で図示する。
【００１１】
ソフトエラーを検出するシステムおよび方法は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組み合わせで実施することができる。
一実施の形態では、本発明は、ハードウェアを使用して実施される。
本発明は、以下の既知のハードウェア技術の１つまたは複数のもので実施することができる。
すなわち、データ信号に対して論理機能を実施する論理ゲートを含んだディスクリート論理回路、特定用途向け集積回路（ＡＳＩＣ）、プログラマブルゲートアレイ（複数可）（ＰＧＡ）、およびフィールドプログラマブルゲートアレイ（ＦＰＧＡ）で実施することができる。
【００１２】
［実行ユニットパイプライン１００］
図１は、本発明の一実施の形態による実行ユニットパイプライン１００を示している。
この実行ユニットパイプライン１００は、フェッチ段階１１０、デコード段階１２０、第１の実行（ＦＩＲＳＴ  ＥＸＥ．）段階１４０、第２の実行（ＳＥＣＯＮＤ  ＥＸＥ．）段階１５０、比較段階１６０、およびコミット段階１７０を含む。
コミット段階１７０は、ライトバック段階とも呼ばれる。
フェッチ段階１１０では、１つまたは複数の命令が命令キャッシュからフェッチされる。
デコード段階１２０では、フェッチ命令がデコードされる。
その後、この命令は複製することができる。
例えば、先頭スレッドおよび後続スレッドが生成される。
以下に詳述するように、これらの命令は、複製する代わりに、２度目の実行のためにラッチすることもできる。
第１の実行段階１４０では、デコードされた命令（例えば、先頭スレッド）が実行される。
第２の実行段階１５０では、複製された命令（例えば、後続スレッド）が実行される。
双方の命令は、同じハードウェア上で２つの異なるサイクルで実行される。
第１の命令および第２の命令は、連続したサイクルで実行されることが好ましい。
【００１３】
比較段階１６０では、第１の実行段階１４０の結果と第２の実行段階１５０の結果とが比較される。
それらの結果が同じである場合、第１の実行段階１４０の結果または第２の実行段階１５０の結果のいずれかが、コミット段階１７０でコミットされる（例えば、メモリまたはレジスタファイルにライトバックされる）。
それらの結果が同じでない場合、障害または例外が生成される。
先頭スレッドの結果をコミットするポリシーに応じて、コミット段階１７０で命令をフラッシュして命令を再実行することにより、障害を回復可能にすることができる。
【００１４】
［エラー検出メカニズム］
図２は、本発明の一実施の形態によるエラー検出メカニズム２４０を含むプロセッサ２００を示すブロック図である。
プロセッサ２００は、命令を記憶する命令キャッシュ２０２、命令をフェッチする命令フェッチユニット２０４、および命令をデコードする命令デコーダ２０８を含む。
【００１５】
また、プロセッサ２００は、ソフトエラーを検出するエラー検出メカニズム２４０も含む。
このエラー検出メカニズム２４０は、エラー検出イネーブル信号２４２によって選択的に有効にされる。
エラー検出イネーブル信号２４２の生成および制御は、図８を参照して以下に詳述する。
エラー検出メカニズム２４０は、有効にされると、本明細書で説明するような複製および比較を実行する。
エラー検出メカニズム２４０が有効にされない場合、プロセッサは、ソフトエラーを検査することなく、通常どおり動作する。
【００１６】
エラー検出メカニズム２４０は、命令（例えば、命令から成る先頭スレッド２６０および命令から成る後続スレッド２６２）を提供する命令分散ユニット２４１を含む。
エラー検出メカニズム２４０は、命令を複製する（例えば、後述するような後続スレッド（ＴＴ）２６２を生成する）複製メカニズム２４４および比較メカニズム２４８を含む。
複製メカニズム２４４は、図示するように命令分散ユニット２４１に存在することもできるし、エラー検出メカニズム２４０のそれ以外の場所に配置することもできる。
複製メカニズム２４４の例示的な実施態様は、図４および図５を参照して以下に詳述する。
【００１７】
プロセッサ２００は、第１の実行サイクルで、命令（すなわち先頭スレッド（ＬＴ）２６０と表記される命令バンドル）を実行する少なくとも１つの実行ユニット（例えば、第１の実行ユニット２１２）も含む。
また、第１の実行ユニット２１２は、第２の実行サイクルで、複製された命令（すなわち後続スレッド（ＴＴ）２６２と表記される命令バンドル）も実行する。
一実施の形態では、プロセッサは、インオーダ（in-order）実行アーキテクチャを有し、複製された命令（例えば、後続スレッド（ＴＴ）２６２）は、先頭スレッドが実行されたサイクルの直後の次のサイクルで実行される。
第１の実行ユニット２１２は、浮動小数点ユニット（ＦＰＵ）、整数ユニット、算術論理ユニット（ＡＬＵ）、マルチメディアユニット、および分岐ユニットを含んでよいが、これらに限定されるものではない。
【００１８】
エラー検出メカニズム２４０は、第１の実行サイクルの結果と第２の実行サイクルの結果とを比較する比較メカニズム２４８も含む。
この比較メカニズム２４８は、結果が同じでない場合に例外２７４を生成する（障害を生成する）例外ユニット２４９を含む。
比較メカニズム２４８の例示的な実施態様は、図６および図７を参照して以下に詳述する。
【００１９】
プロセッサ２００は、第１の実行サイクルの結果が第２の実行サイクルの結果と同じである場合に、結果の１つをコミットするコミットユニット２１４も含む。
【００２０】
［エラー検出メカニズム２４０によって実行される処理ステップ］
図３は、本発明の一実施の形態による図２のエラー検出メカニズムによって実行されるステップを示すフローチャートである。
ステップ３０４において、命令がフェッチされる。
ステップ３０８において、命令がデコードされる。
判定ブロック３１０において、エラー検出が有効にされている（例えば、エラー検出ビット２４２がセットされている）かどうかの判断が行われる。
エラー検出が有効にされていない場合、命令はステップ３１１で実行される。
実行後、処理はステップ３３４に進み、ステップ３３４において、実行結果がコミットされる。
【００２１】
エラー検出が有効にされている場合、処理はステップ３１４に進む。
ステップ３１４において、命令が複製される（例えば、以下に詳述するように、命令ラッチにラッチされる）。
ステップ３１８において、命令が第１の実行サイクルでの実行用に第１の実行ユニットに発行される。
【００２２】
ステップ３２０において、第１の実行サイクル後に、実行結果がラッチされる。
ステップ３２４において、複製された命令が、第２の実行サイクルでの実行用に第１の実行ユニットに発行される。
一実施の形態では、プロセッサは、インオーダ実行の設計を有し、第２の実行サイクルは、第１の実行サイクルの直後に続く。
【００２３】
ステップ３２８において、第１の実行サイクルの結果と第２の実行サイクルの結果とが比較される。
判定ブロック３３０において、第１の実行サイクルの結果と第２の実行サイクルの結果とが同じかどうか（例えば、結果が一致するかどうか）の判断が行われる。
第１の実行サイクルの結果と第２の実行サイクルの結果とが同じである場合、結果（例えば、第１の実行サイクルの結果または第２の実行サイクルの結果）は、ステップ３３４でコミットされる。
例えば、結果が同じである場合、結果の一方をメモリまたはレジスタファイルにライトバックすることができる。
【００２４】
第１の実行サイクルの結果と第２の実行サイクルの結果とが同じでない場合、例外がステップ３３８で生成される。
その後、処理はステップ３０４に進み、ステップ３０４において、別の命令がフェッチされる。
【００２５】
［複製メカニズム］
図４は、本発明の一実施の形態による図２の複製メカニズム２４４を詳細に示すブロック図である。
複製メカニズム２４４は、実行される命令を含んだＮ個の命令から成る入力命令バンドル４００を含む。
この命令バンドル４００は、第１の実行サイクルでの実行用に、命令分散ユニット２４１に新たな命令を提供する。
【００２６】
また、複製メカニズム２４４は、ラッチイネーブル信号４２２および選択信号４４４を生成する複製状態マシン４４０も含む。
複製状態マシン４４０は、図５を参照して以下に詳述する。
図５は、状態マシン４４０の状態図である。
【００２７】
複製メカニズム２４４は、入力命令バンドル４００を受け取るラッチ４２０も含む。
ラッチ４２０は、ラッチイネーブル信号４２２によって制御される。
ラッチ４２０は、第２の実行サイクルでの実行に利用される命令のコピーを記憶する。
ラッチイネーブル信号４２２がアサートされると、ラッチ４２０は、命令バンドル４００からの命令をラッチする。
ラッチイネーブル信号４２２がデアサートされると、ラッチ４２０は現時点の命令を保持する。
一実施の形態では、エラー検出が有効にされている場合に、１つおきのクロックサイクルで、新たな命令がラッチされる。
【００２８】
複製メカニズム２４４はマルチプレクサ（ＭＵＸ）４３０も含む。
ＭＵＸ４３０は、命令バンドル４００を受け取る第１の入力（０）と、ラッチ４２０から複製命令を受け取る第２の入力（１）と、選択信号４４４を受け取る制御入力と、出力とを含む。
選択信号４４４の状態は、いずれの入力（０または１）を出力に提供するかを決定する。
選択信号４４４がアサートされると、ラッチ４２０からの命令（例えば、複製命令）が命令分散ユニット２４１に提供される。
選択信号４４４がデアサートされると、入力命令バンドル４００が命令分散ユニット２４１に提供される。
ラッチ４２０、ＭＵＸ４３０、ならびに２つのイネーブル信号４２２および４４４の組み合わせは、マシンのフロントエンドを有効にスロットル（throttle）し、２サイクルごとに命令分散ユニット２４１に新たな命令を発行する。
【００２９】
図５は、本発明の一実施の形態による図４の複製状態マシン４４０の状態図５００である。
この状態図５００は、第１の状態５１０および第２の状態５２０を含む。
ＥＤＥ信号２４２がアサートされていない（すなわち、エラー検出メカニズムが有効にされておらず、命令複製が実行されていない）場合、状態マシン４４０は、第１の状態５１０に留まる。
命令バンドルは、複製されていない場合、命令分散ユニット２４１に渡される。
【００３０】
エラー検出イネーブル（ＥＤＥ）信号２４２がアサートされると、状態マシン４４０は、第１の状態５１０から第２の状態５２０に遷移する。
状態マシン４４０は、第２の状態５２０にいる時、選択信号４４４をアサートし、ラッチイネーブル信号４２２をデアサートする。
例えば、第２の状態５２０では、第１のラッチ４００および第２のラッチ４２０が、それらの現時点の値を保持する。
状態マシン４４０は、その後、第２の状態５２０から第１の状態５１０に遷移する。
状態マシン４４０は、第１の状態５１０にいる時、選択信号４４４をデアサートし、ラッチイネーブル信号４２２をアサートする。
例えば、第１の状態５１０では、ラッチ４２０がイネーブルされる。
複製が行われている場合、マルチプレクサ４３０の出力は、バンドル０とバンドル１との間で交互に切り換えられる。
実際には、各命令バンドルは複製されて、２回発行される。
この点で、新たな命令バンドルが、１つおきのクロックサイクルで処理される。
【００３１】
［各実行ユニットに一体化された比較メカニズム］
本発明の別の新規な態様は、比較メカニズムが各実行ユニットに一体化されていることである。
例えば、各実行ユニットは、先頭スレッドの結果を一時的に記憶するレジスタを含む。
このように、後続スレッドの結果が利用可能になると、その結果を、記憶された結果と比較することができる。
【００３２】
図６は、本発明の一実施の形態による図２の比較メカニズム２４８を詳細に示すブロック図である。
比較メカニズム２４８は、ラッチイネーブル信号６７０、選択信号６８０、およびコミット信号６９０を生成する比較状態マシン（ＣＳＭ）６６０を含む。
比較状態マシン（ＣＳＭ）６６０は、図７を参照して以下に詳細に説明する。
図７は、ＣＳＭ６６０の状態図である。
【００３３】
比較メカニズム２４８は、ラッチ６１４と、ラッチ６１４の出力と第１の実行ユニット６１０の出力とを比較する比較ユニット６１６とをさらに含む。
ラッチ６１４は、ラッチイネーブル信号６７０によって有効にされる。
また、比較メカニズム２４８は、マルチプレクサ（ＭＵＸ）６１８も含む。
このマルチプレクサ（ＭＵＸ）６１８は、ラッチ６１４の出力を受け取る第１の入力と、実行ユニット６１０の出力を受け取る第２の入力と、選択信号６８０を受け取る制御入力とを含む。
これらの入力に基づいて、ＭＵＸ６１８は、入力の１つを出力として選択的に提供する。
例えば、実行ユニット６１０からの結果またはラッチ６１４からの結果のいずれかが、選択信号６８０に基づいてＭＵＸ６１８の出力として提供される。
【００３４】
また、ラッチ６１９も、コミット信号６９０がアサートされた時にＭＵＸ１６８の出力をラッチするように設けられる。
同様に、ラッチ６２４、比較ユニット６２６、選択信号（ＳＳ）６８２によって制御されるＭＵＸ６２８、およびコミット信号（ＣＳ）６９２によって制御されるラッチ６２９も、第２の実行ユニット６２０によって生成された結果を処理するために設けられる。
さらに、ラッチ６３４、比較ユニット６３６、選択信号（ＳＳ）６８４によって制御されるＭＵＸ６３８、およびコミット信号（ＣＳ）６９４によって制御されるラッチ６３９も、第Ｎの実行ユニット６３０によって生成された結果を処理するために設けられる。
ＭＵＸ６１８、６２８、６３８は任意選択であることに留意されたい。
【００３５】
比較メカニズム２４８は、本明細書では比較有効ビット（compare valid bit）とも呼ばれる複数のエラー検出イネーブルビット（ＥＤＥ）６０４を含む。
例えば、各実行ユニットによって実行された各命令のエラー検出イネーブル（ＥＤＥ）ビットが存在してよい。
【００３６】
この実施形態では、比較メカニズム２４８は、複数のＥＤＥビット６０４を含む。
これらの複数のＥＤＥビット６０４は、第１の命令に関連付けられた第１の比較有効ビット６１２と、第２の命令に関連付けられた第２の比較有効ビット６２２と、第Ｍの命令に関連付けられた第Ｍの比較有効ビット６３２とを含むことができる。
第１の命令、第２の命令、および第Ｍの命令は、第１の実行ユニット６１０によって実行されることに留意されたい。
【００３７】
第２の実行ユニット６２０によって実行された命令に対応する第２の複数のビット、および、第３の実行ユニット６３０によって実行された命令に対応する第３の複数のビットを本発明に従って設けることができることに留意されたい。
それぞれの複数のビットは、第１の命令に関連付けられた第１の比較有効ビット、第２の命令に関連付けられた第２の比較有効ビット、および第Ｍの命令に関連付けられた第Ｍの比較有効ビットを含むことができる。
【００３８】
比較メカニズム２４８は、各実行ユニットに関連付けられた比較ユニット（例えば、比較ユニット６１６、６２６、および６３６）も含む。
例えば、比較ユニット６１６は、ラッチ６１４からの第１の結果および第１の実行ユニット６１０からの第２の結果を受け取り、これらの第１の結果と第２の結果とを比較し、そして、それらの結果が同じであるかどうかを示す信号（例えば、信号６１７）を生成する。
各実行ユニット（例えば、実行ユニット６１０、６２０、および６３０）は、命令を２回実行して、ラッチ（例えば、ラッチ６１４、６２４、および６３４）に記憶される第１の結果を生成し、比較ユニット（例えば、比較ユニット６１６、６２６、および６３６）に直接提供される第２の結果を生成する。
比較結果に基づいて、比較ユニット６２６および６３６により、信号６２７および６３７がそれぞれ生成される（例えば、選択的にアサートされる）。
【００３９】
結果を比較する比較ユニット（例えば、比較ユニット６１６、６２６、および６３６）は、ＯＲゲートまたはＮＯＲゲートで実施することができる。
例えば、第１の結果と第２の結果とが同じである場合、比較ユニット（例えば、比較ユニット６１６、６２６、および６３６）の出力をアサートする（例えば、論理ハイにする）ことができる。
【００４０】
比較メカニズム２４８は第１のＡＮＤゲート６４０も含む。
この第１のＡＮＤゲート６４０は、第１の実行ユニット６１０に関連付けられた比較有効ビットを受け取る第１の入力と、第２の実行ユニット６２０に関連付けられた比較有効ビットを受け取る第２の入力と、第Ｎの実行ユニット６３０に関連付けられた比較有効ビットを受け取る第３の入力とを含む。
第１のＡＮＤゲート６４０の出力は、第２のＡＮＤゲート６５０に提供される一致信号６４２を生成する。
この一致信号６４２は、実行ユニットのいずれかの結果に不一致または矛盾がある場合にデアサートされることに留意されたい。
【００４１】
第２のＡＮＤゲート６５０は、第１のＡＮＤゲート６４０からの一致信号６４２を受け取る第１の入力と、ＥＤＥビット６０４を受け取る第２の入力とを含む。
エラー検出が有効にされているが、比較ユニットの１つからの結果の１つに不一致が存在すると、第２のＡＮＤゲート６５０はエラー信号（例えば、デアサートされたエラー信号）６５２を生成する。
このエラー信号６５２は、エラー論理回路（例えば、例外ユニット２４９）に提供することができる。
エラー論理回路は、次に、エラー信号６５２を使用して、結果をコミットするかどうかを判断することができる。
結果がコミットされるべきである場合、結果２７０を宛先（例えば、レジスタファイル、ラッチ６１９、６２９、および６３９）に提供することができる。
【００４２】
図７は、本発明の一実施の形態による図６の比較状態マシン（ＣＳＭ）６６０の状態図７００である。
この状態図７００は、第１の状態７１０および第２の状態７２０を含む。
【００４３】
エラー検出イネーブル（ＥＤＥ）ビット２４２がセットまたはアサートされると、状態マシンは第１の状態７１０から第２の状態７２０に遷移する。
状態マシンは、第２の状態７２０にいる時、選択信号６８０をアサートし、イネーブル信号６７０をデアサートする。
例えば、第２の状態７２０では、ラッチ６１４からの結果と実行ユニット６１０からの結果とが比較され、それらの結果が一致する場合、結果がコミットされる。
先頭スレッド２６０の結果と後続スレッド２６２（例えば、複製命令）の結果とが同じである場合に、コミット信号６９０はアサートされる。
【００４４】
状態マシンは、その後、第２の状態７２０から第１の状態７１０に遷移する。
状態マシンは、第１の状態７１０にいる時、選択信号６８０をデアサートし、イネーブル信号６７０をアサートする。
例えば、第１の状態７１０では、結果ラッチ（例えば、６１４、６２４、６３４）が有効にされる。
【００４５】
例えば、エラー検出イネーブルビットがセットされている場合、結果ラッチ（例えば、６１４、６２４、６３４）を１つおきのクロックサイクルで有効にすることができる。
エラー検出メカニズムが有効にされている場合（例えば、エラー検出イネーブルビットがセットされている場合）、１つおきのサイクルで結果がコミットされる。
一方、エラー検出メカニズムが有効にされていない場合（例えば、エラー検出イネーブルビットがセットされていない場合）、実行ユニットから来る結果のコミットは常に可能である。
【００４６】
［エラー検出メカニズムを選択的に有効にする制御レジスタのエラー検出イネーブル（ＥＤＥ）ビット］
本発明によるエラー検出メカニズムは、イネーブルメカニズムを使用することによって有効にできることに留意されたい。
例えば、エラー検出メカニズムが、図８を参照して説明するように、制御レジスタのエラー検出イネーブルビットを利用することによって有効にされると、エラー検出イネーブルビットは、イネーブルメカニズムによってセットまたはクリアすることができる。
イネーブルメカニズムは、ハードウェア、オペレーティングシステム、ファームウェア（例えば、ユーザプログラムされたファームウェア）、またはアプリケーションによるものとすることができるが、これらに限定されるものではない。
【００４７】
図８は、本発明の一実施の形態によるエラー検出メカニズムを有効にすることに使用される制御レジスタ８００を示している。
制御レジスタ８００は、エラー検出イネーブル（ＥＤＥ）ビット８１０を含む。
このエラー検出イネーブル（ＥＤＥ）ビット８１０は、ファームウェア８２０（例えば、ユーザプログラムされたファームウェア）、オペレーティングシステム（ＯＳ）８３０、またはアプリケーション８４０によってセットおよびクリアすることができる。
エラー検出イネーブル（ＥＤＥ）ビット８１０は、本発明のエラー検出メカニズムを選択的に有効にするエラー検出信号２４２を提供するのに利用することができる。
【００４８】
機能的冗長検査（ＦＲＣ）の従来技術の手法は、機能的冗長検査を選択的にオンまたはオフにする機能をユーザに提供していない。
本発明の新規な１つの態様は、ユーザが本発明のエラー検出メカニズムを選択的に有効および無効にすることが可能になるメカニズムを提供することである。
例えば、プログラマは、一定のコード部分のみがエラー検出およびエラー検査の対象になることを指定することができる。
指定されないコード部分は、ソフトエラーの検査なしで処理することができる。
【００４９】
図９は、本発明の一実施の形態によるエラー検出メカニズムを有効および無効にする命令を含んだ例示的なソフトウェアコード部分９００を示している。
この部分９００は、制御レジスタ８００のＥＤＥビット８１０をセットする第１の命令９１０と、制御レジスタ８００のＥＤＥビット８１０をクリアする第２の命令９３０とを含む。
ＥＤＥビット８１０が一旦セットされると、本発明のエラー検出メカニズムは、クリティカルなコード９２０でソフトエラーを検出するように有効にされる。
命令９１０より前のソフトウェアコードおよび命令９３０より後のソフトウェアコードは、本発明のエラー検出メカニズムによるエラー検出の対象ではない。
このように、本発明のエラー検出メカニズムは、一定のコード部分のみを検査するように選択的にイネーブルにすることができ、それによって、プログラマは、プロセッサの性能とミッションクリティカルなコード部分のプロセッサの信頼性とをバランスさせることが可能になる。
別法では、検査する一続きの命令の開始および／または終了に印を付ける特別な命令を使用することもできる。
【００５０】
［ソフトエラー用のクリティカルなコード部分の選択的な検査］
一実施の形態では、最初の命令および最後の命令を含むクリティカルなコードの一部がソフトエラーの検査を必要とする。
この実施の形態では、ソフトエラーを検査するエラー検出メカニズムは、本発明に従って有効にされ、そのクリティカルなコードの一部を検査する。
例えば、エラー検出メカニズムは、クリティカルなコードの最初の命令の前に有効にされて、クリティカルなコードの最後の命令の後にクリアされる。
このように、クリティカルなコードの一部は、エラー検出イネーブルビットをアサートすることによって選択的にエラー検出の対象にすることができる。
【００５１】
一定のコード区域は、２重化したり、エラー回復力に富むようにしたりするのが困難であることに留意されたい。
これらのコード区域は、性能を低くするが、信頼性を高くしてロックステップの実行により保護することができる一方、他の重要度の低いコードは、性能レベルを高くし、信頼性を低くして実行される。
【００５２】
本発明によるイネーブルメカニズムの利点は、エラー検出メカニズムを選択的に有効および無効にする機能および柔軟性を提供することであり、それによって、プログラマは、プロセッサの性能をソフトエラーの検出とバランスさせることが可能になることである。
【００５３】
［メモリオペレーションのハンドリング］
本発明によるエラー検出メカニズムは、メモリシステム（例えば、キャッシュ）を対象とするオペレーション用の特別なハンドリングハードウェアを提供する。
記憶オペレーションでは、記憶オペレーションのそれぞれのデータおよびアドレスが、２つの連続したサイクルでラッチされて比較される。
データおよびアドレスが一致する場合、第１の記憶オペレーションが実行される。
ハンドリングハードウェアは、第２の記憶オペレーションが確実にメモリシステムに送られないようにする。
そうでない場合、すなわちデータまたはアドレスが一致しない場合、記憶オペレーションは、メモリに送られず、例外が生成される。
【００５４】
ロードオペレーションでは、第１のロードオペレーションのアドレスと第２のロードオペレーションのアドレスとが比較される。
一致した場合、第１のロードオペレーションが実行される。
一致しない場合、例外が生成される。
一実施の形態では、確実に第１のロードを実行するが第２のロードを実行しないようにするハードウェアが提供される。
メモリオペレーションに必要な時間は、待ち時間の計算およびプロセッサの性能決定の主要な因子であるので、ロードオペレーションを確実に１回だけ実行するようにすることによって、プロセッサの性能は増大される。
【００５５】
［ロードハンドリングメカニズム］
図１０は、本発明の一実施の形態によるロードオペレーションをハンドリングする回路１０００を示すブロック図である。
このロードハンドリングメカニズム１０００は、アドレスラッチ１００４を含む。
このアドレスラッチ１００４は、実行ユニットからアドレス１０１２を受け取る第１の入力と、イネーブル信号１００６を受け取る第２の入力とを有する。
イネーブル信号１００６は、アサートされると、アドレスラッチ１００４にアドレス１０１２をラッチさせる。
イネーブル信号１００６は、図７に示すメカニズムと同じまたは類似のメカニズムによって制御される。
【００５６】
ロードハンドリングメカニズム１０００は、アドレスコンパレータ１０１０を含む。
このアドレスコンパレータ１０１０は、アドレスラッチ１００４から受け取ったアドレスと、実行ユニットから直接受け取ったアドレス１０１２とを比較する。
【００５７】
ロードハンドリングメカニズム１０００は、ターゲットレジスタ番号ラッチ１０１４を含む。
このターゲットレジスタ番号ラッチ１０１４は、実行ユニットからターゲットレジスタ番号１０２４を受け取る第１の入力と、イネーブル信号１００６を受け取る第２の入力とを有する。
イネーブル信号１００６は、アサートされると、ターゲットレジスタ番号ラッチ１００４にターゲットレジスタ番号１０２４をラッチさせる。
【００５８】
ロードハンドリングメカニズム１０００は、ターゲットレジスタビットコンパレータ１０２０も含む。
このターゲットレジスタビットコンパレータ１０２０は、ターゲットレジスタ番号ラッチ１０１４から受け取ったターゲットレジスタ番号と、実行ユニットから直接受け取ったターゲットレジスタ番号１０２４とを比較する。
【００５９】
ロードハンドリングメカニズム１０００は、第１のＡＮＤゲート１０３０および第２のＡＮＤゲート１０４０も含む。
第１のＡＮＤゲート１０３０は、アドレスコンパレータ１０１０の出力を受け取る第１の入力と、ターゲットレジスタ番号コンパレータ１０２０の出力を受け取る第２の入力と、出力信号を生成する出力とを含む。
【００６０】
第２のＡＮＤゲート１０４０は、実行ユニットからの比較イネーブル信号（例えば、図６からの比較イネーブルビット）を受け取る第１の入力と、第１のＡＮＤゲート１０３０からの出力信号を受け取る反転入力と、エラー論理回路に供給することができるエラー信号１０５０を生成する出力とを含む。
例えば、アサートされたエラー信号は、エラーが検出されたことを示すことができる。
アドレス１０１２および第１のターゲットレジスタ番号１０２４は、メモリサブシステムに提供される。
【００６１】
イネーブル信号１００６は、図６に示すものと同じものとすることができ、同じ方法で生成することができる。
アドレス／ターゲットレジスタは、２サイクルごとにメモリサブシステムに解放することができる。
これは、図６に示すコミット信号に類似している。
このプロセスを制御するのに、図７に示す状態マシンを利用できることに留意されたい。
例えば、図７のラッチイネーブル信号を接続して信号１００６を提供することができる。
【００６２】
［記憶ハンドリングメカニズム］
記憶オペレーションでは、記憶オペレーションのそれぞれのデータおよびアドレスが、２つの連続したサイクルでラッチされて比較される。
データおよびアドレスが一致する場合、第１の記憶オペレーションが実行される。
ハンドリングハードウェアは、第２の記憶オペレーションが確実にメモリシステムに送られないようにする。
そうでない場合、すなわち、データまたはアドレスが一致しない場合、記憶オペレーションはメモリに送られず、例外が生成される。
図１１は、本発明の一実施の形態による記憶オペレーションをハンドリングする回路１１００を示すブロック図である。
記憶ハンドリングメカニズム１１００は、アドレスラッチ１１０４を含む。
このアドレスラッチ１１０４は、実行ユニットからアドレス１１１２を受け取る第１の入力と、イネーブル信号１１０６を受け取る第２の入力とを有する。
イネーブル信号１１０６は、アサートされると、アドレスラッチ１１０４にアドレス１１１２をラッチさせる。
【００６３】
記憶ハンドリングメカニズム１１００は、アドレスコンパレータ１１１０を含む。
このアドレスコンパレータ１１１０は、アドレスラッチ１１０４から受け取ったアドレスと、実行ユニットから直接受け取ったアドレス１１１２とを比較する。
【００６４】
記憶ハンドリングメカニズム１１００は、データコンパレータ１１２０も含む。
このデータコンパレータ１１２０は、第１の実行ユニットからのデータ１１２４と、第２の実行ユニットからのデータ８５２とを比較する。
【００６５】
記憶ハンドリングメカニズム１１００は、第１のＡＮＤゲート１１３０および第２のＡＮＤゲート１１４０も含む。
第１のＡＮＤゲート１１３０は、アドレスコンパレータ１１１０の出力を受け取る第１の入力と、データコンパレータ１１２０の出力を受け取る第２の入力と、出力信号を生成する出力とを含む。
【００６６】
第２のＡＮＤゲート１１４０は、第１の実行ユニットから第１の比較イネーブル信号１１４４（例えば、エラー検出イネーブル信号）を受け取る第１の入力と、第２の実行ユニットから第２の比較イネーブル信号１１５４（例えば、エラー検出イネーブル信号）を受け取る第２の入力と、第１のＡＮＤゲート１１３０から出力信号を受け取る第３の反転入力と、エラー信号を生成する出力とを含む。
例えば、アサートされたエラー信号は、エラーが検出されたことを示すことができる。
このエラー信号は、エラー論理回路に供給することができる。
第１の比較イネーブル信号および第２の比較イネーブル信号は、例えば、エラー検出イネーブル信号２４２とすることができる。
【００６７】
第１の実行ユニットからのアドレスおよびデータは、メモリサブシステムに供給される。
メモリサブシステムが第２の記憶装置をハンドリングする（例えば、第２の記憶装置を検出および廃棄する）ように設計および構成されていない場合には、第２の記憶装置（例えば、第２の実行ユニットからのアドレスおよびデータ）は、本発明に従ってスカッシュ（squash）されることに留意されたい。
例えば、これらのアドレスおよびデータは、本発明による記憶ハンドリングメカニズム８００によって廃棄することができる。
代替的な実施の形態では、第１の記憶装置をスカッシュすることができ、第２の記憶装置の実行を可能にすることができることに留意されたい。
この実施の形態では、このような実施の形態に対応するように、エラーを検出する論理回路を変更することができる。
【００６８】
イネーブル信号１１０６は、図６に示すものと同じものとすることができ、同じ方法で生成することができる。
アドレス／ターゲットレジスタは、２サイクルごとにメモリサブシステムに解放することができる。
これは、図６に示すコミット信号に類似している。
このプロセスを制御するのに、図７に示す状態マシンを利用できることに留意されたい。
【００６９】
上記明細書では、本発明を、その特定の実施の形態を参照して説明してきた。
しかしながら、本発明のより広い範囲から逸脱することなく、これらの実施の形態に対して、さまざまな変更および改変を行ってもよいことは明らかである。
したがって、明細書および図面は、制限的な意味ではなく、例示とみなされるべきである。
【図面の簡単な説明】
【００７０】
【図１】本発明の一実施の形態による実行ユニットパイプラインを実施できることを示す図である。
【図２】本発明の一実施の形態によるエラー検出メカニズムを示すブロック図である。
【図３】本発明の一実施の形態による図２のエラー検出メカニズムによって実行されるステップを示すフローチャートである。
【図４】本発明の一実施の形態による図２の複製メカニズムを詳細に示すブロック図である。
【図５】本発明の一実施の形態による図４の選択信号状態マシンの状態図である。
【図６】本発明の一実施の形態による図２の比較メカニズムを詳細に示すブロック図である。
【図７】本発明の一実施の形態による図６の比較メカニズムの状態図である。
【図８】本発明の一実施の形態によるエラー検出メカニズムを有効にすることに使用される制御レジスタを示す図である。
【図９】本発明の一実施の形態によるエラー検出メカニズムを有効および無効にする命令を含んだ例示的なソフトウェアコード部分を示す図である。
【図１０】本発明の一実施の形態によるロードオペレーションをハンドリングする回路を示すブロック図である。
【図１１】本発明の一実施の形態による記憶オペレーションをハンドリングする回路を示すブロック図である。
【符号の説明】
【００７１】
１１０・・・フェッチ
１２０・・・デコード
１４０・・・第１の実行
１５０・・・第２の実行
１６０・・・比較
１７０・・・ライトバック
２０２・・・命令キャッシュ
２０４・・・命令フェッチユニット
２０８・・・命令デコーダ
２１２・・・実行ユニット
２１４・・・コミットユニット
２４０・・・エラー検出メカニズム（ＥＤＭ）
２４１・・・命令分散ユニット
２４２・・・エラー検出イネーブル（ＥＤＥ）信号
２４４・・・複製メカニズム
２４８・・・比較メカニズム
２４９・・・例外ユニット
２６０・・・先頭スレッド（ＬＴ）
２６２・・・後続スレッド（ＴＴ）
２７０・・・結果
２７４・・・障害の例外
６０４・・・ＥＤＥビット
６７０，６７２，６７４・・・イネーブル信号
６８０・・・選択信号
６９０・・・コミット信号
６１０・・・第１の実行ユニット
６１４，６２４，６３４・・・ラッチ
６１６，６２６，６３６・・・比較ユニット
６２０・・・第２の実行ユニット
６３０・・・第Ｎの実行ユニット
８１０・・・エラー検出イネーブル（ＥＤＥ）ビット
８２０・・・ファームウェア
８３０・・・オペレーティングシステム
８４０・・・アプリケーション
８００・・・制御レジスタ
１００４・・・アドレスラッチ
１００６・・・イネーブル信号
１０１２・・・実行ユニットからのアドレス
１０１４・・・ターゲットレジスタ番号ラッチ
１０１０・・・アドレスコンパレータ
１０２０・・・ターゲットレジスタ番号コンパレータ
１０２４・・・実行ユニットからのターゲットレジスタ番号
１１０４・・・アドレスラッチ
１１０６・・・イネーブル信号
１１１０・・・アドレスコンパレータ
１１１２・・・実行ユニットからのアドレス
１１１４・・・データラッチ
１１２０・・・データコンパレータ
１１２４・・・実行ユニットからのデータ
【図１】
2005149496.tif 000003
【図２】
2005149496.tif 000004
【図３】
2005149496.tif 000005
【図４】
2005149496.tif 000006
【図５】
2005149496.tif 000007
【図６】
2005149496.tif 000008
【図７】
2005149496.tif 000009
【図８】
2005149496.tif 000010
【図９】
2005149496.tif 000011
【図１０】
2005149496.tif 000012
【図１１】
2005149496.tif 000013