(57)【要約】【課題】主プログラムの制御のもとで動作する装置にビット誤りを注入する方法に関し、前記装置は割込みを実行し、割込みプログラムの実行中にビット誤りが発生する。【解決手段】直接アクセスが可能でないところに保存される目標メモリーに誤りを注入するときは、割込みプログラムは、レジスタ（ＡＣＣ）の内容をスタックに置き（３０３）、メモリーワードの内容をレジスタ（ＡＣＣ）に転送し（３０４）、目標メモリーワードの繰り返される内容をレジスタ（ＡＣＣ）の中で変更して選択された誤りを注入し（３０５）、変更された目標メモリーワードをもとの場所に転送し（３０６）、レジスタ（ＡＣＣ）をアンスタックし（３０７）、割込みプログラムを終了してプログラムカウンタ（ＰＣ）で示される主プログラムのアドレスに復帰する（３０８，３０９）。
2004526230.tif 000002
【特許請求の範囲】
【請求項１】
割込みを実行し、割込み時に、プログラムカウンタレジスタ（ＰＣ）の復帰値と、状態表示レジスタのような他のレジスタの内容をスタックポインタ（ＳＰ）の制御で動作するスタックに保存し、割込みプログラムの進行中にビット誤りを導入する主プログラムの制御のもとで動作するハードウェアにビット誤りを注入する方法において、
非直接アクセス位置に保存される目標メモリーワードに誤りを注入するとき、割込みプログラムが；
レジスタ（ＡＣＣ）の内容をスタックに保存し（３０３）、
目標メモリーワードの内容を前記レジスタ（ＡＣＣ）に転送し（３０４）、
前記レジスタ（ＡＣＣ）の中で前記目標メモリーワードの複写された内容を変更してその中に選択された誤りを注入し（３０５）、
変更された目標メモリーワードをそのもとの位置に転送し（３０６）、
前記レジスタ（ＡＣＣ）をポップし（３０７）、
割込みプログラムを終了して前記プログラムカウンタ（ＰＣ）で示される主プログラムのアドレスに復帰する（３０８，３０９）、ことを特徴とするビット誤りの注入方法。
【請求項２】
ビット誤りがプログラムカウンタレジスタ（ＰＣ）に注入されるとき、割込みプログラムが；
第１レジスタ（Ｒ０）の内容をスタックに保存し（４０３）、
アキュムレータ（ＡＣＣ）の内容をスタックに保存し（４０４）、
プログラムカウンタ復帰アドレスのスタック内のアドレスに対応するスタックポインタレジスタ（ＳＰ）の値を前記第１レジスタ（Ｒ０）に転送し（４０５）、
前記第１レジスタで示されるプログラムカウンタの内容を前記アキュムレータに転送し（４０６）、
前記アキュムレータ（ＡＣＣ）の中のプログラムカウンタの値を変更してそこに選択された誤りを注入し（４０７）、
プログラムカウンタ（ＰＣ）の変更された値を第１レジスタ（Ｒ０）に含まれるアドレスで前記スタックに再ロードし（４０８）、
アキュムレータをポップし（４０９）、
第１レジスタをポップする（４１０）、ことを特徴とする請求項１記載の方法。
【請求項３】
誤りの注入がスタックポインタレジスタ（ＳＰ）に対して行われる時、割込みプログラムが；
所定のメモリーセルへの無条件ジャンプ（ＪＭＰ）のコードを所定のアドレス（ａｄｂｒａｎｃｈ）に書き（５０３−５０４）、
プログラムカウンタ（ＰＣ）の復帰値をスタックポインタ手段により示し（５０５）、
スタックポインタ（ＳＰ）の内容を第１レジスタ（Ｒ１）に転送し（５０６）、
スタックに保存されるプログラムカウンタ（ＰＣ）の復帰アドレスを第２レジスタ（Ｒ２）に転送し（５０７）、
第２レジスタの内容を前記無条件ジャンプコードの後に転送し（５０８）、
第１レジスタ（Ｒ１）を変更して選択された誤りをスタックポインタレジスタ（ＳＰ）に注入し（５０９）、
最初に述べた無条件ジャンプの前記所定のアドレスへの無条件ジャンプを実行して主プログラムの復帰値を得る、ことを特徴とする請求項１記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は集積回路ベースの電子及び論理システム、例えば、宇宙応用で、放射線のもとで正しく動作することを意図するシステムに関する。しかし、集積回路がミニアチュア化されると、回路は放射線効果に対してますます敏感になる。従って本発明は地上で使われる集積回路のテストにも応用することができる。
【０００２】
本発明は特に一連の命令を実行することができるシステム（マイクロプロセサ，マイクロコントローラ，信号プロセサ等）の検査を目的とする。
【背景技術】
【０００３】
上記システムをテストする従来の方法は、回路を例えば粒子加速器による放射線環境に置き、衝撃の数を考慮にいれて回路の動作を検査するものである。検査が「オンライン」で行われなければならないこと、つまり、粒子に露出されている間、テストされる回路は対象の応用に対して設計された機能を実行しなければならないという事実を考えると、上記検査は非常に重い仕事である。さらに検査がいわゆる静的戦略の手段によりプロセサに対して実行されるときは、この方法は実際とはかけ離れた結果をもたらすことがある。実際、集積回路に対する衝撃は、メモリーセルの内容の状態切換を発生させても、回路のプログラムの動作には影響しないことがある。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
従って、本発明は、集積回路の主プログラムの実行中に集積回路の任意の位置にビット誤りを注入する方法を目的とする。
【０００５】
特に、本発明は、割込みプログラムを介してにせの誤り注入を実行する方法を目的とする。
【０００６】
上記方法は例えば次の論文に記載されている。
“Ｔｒａｎｓｉｅｎｔ  Ｂｉｔｆｌｉｐ  Ｉｎｊｅｃｔｉｏｎ  ｉｎ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ  Ｅｍｂｅｄｄｅｄ  Ａｐｐｌｉｃａｔｉｏｎｓ”  ｂｙ  Ｒ．  Ｖｅｌａｚｃｏ  ａｎｄ  Ｓ．  Ｒｅｚｇｕｉ，ｐｕｂｌｉｓｈｅｄ  ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ６ｔｈ  ＩＥＥＥ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｏｎ−Ｌｉｎｅ  Ｔｅｓｔｉｎｇ  Ｗｏｒｋｓｈｏｐ，Ｊｕｌｙ  ３−５  ２０００，Ｐａｌｍａ  ｄｅ  Ｍａｌｌｏｒｃａ，ｐｐ．８０−８４．
【０００７】
換言すると、本発明はメモリー（外部又は内部）に保存される一連の命令を実行することができるプロセサのまわりに設けられ、割込みのような非同期入力信号の効果を考慮に入れるディジタル構成に関する。プロセサはプログラムされて外部メモリー及び内部メモリーレジスタ及び領域の各位置で直接又は間接に読み取り及び書き込み動作をする。
【０００８】
単一ビットの反転、又はイベントの反転、ここではＳＥＵ（Ｓｉｎｇｌｅ  Ｅｖｅｎｔ  Ｕｐｓｅｔｓ）と記す、は目標の性質に依存する適当なコードの実行の結果としてプロセサの中に発生する。このコードはここではＣＥＵ（Ｃｏｄｅ  Ｅｍｕｌａｔｉｎｇ  ａｎ  Ｕｐｓｅｔ）と呼ぶ。同様に、ＣＥＵコードの実行により変更されるメモリー位置はＣＥＵ目標と呼ばれる。ＣＥＵコードの実行の結果の反転はＣＥＵｓ（Ｃｏｄｅ  Ｅｍｕｌａｔｅｄ  Ｕｐｓｅｔｓ）と呼ばれる。
【０００９】
割込みの活性化への応答として、プロセサは例えば次のステップを実行する。
−現在の命令の実行の終了後実行中のプログラムの実行を停止する。
−コンテクストの保存（少なくともスタックの中へのプログラムカウンタＰＣの戻り値）。
−割込み処理プログラムに分岐して選択された目標ビットの反転。
−スタックからコンテクストに復帰し、割込みされたプログラムの実行の継続。
【００１０】
従って、プログラムの実行の異なる時点で割込みを活性化して、ソフトウェア手段によりビット反転の注入をすれば十分である。
【００１１】
実際には、割込みプログラムによる誤り注入は、目標が割込みプログラムにより直接アクセス可能なレジスタ又はメモリーワードの場合には、比較的容易に行われている。しかし、目標が、直接アクセスが不可能なレジスタ又はメモリーワードのとき、又はプログラムカウンタを保存しているレジスタのとき、又は、割込み時の主プログラムのコンテクストを保存するスタックのポインタを保存するレジスタのときは、本方法を実施することは実際には困難である。
【００１２】
従って、本発明の目的はプロセサに関連する任意のプログラムの命令セットを介してアクセス可能なプロセサの全てのメモリー領域にアクセスすることにある。例えば、インテルプロセサ８０５１の場合には、アクセス可能なメモリエリアは、入力／出力アクセス、アキュムレータ、特別レジスタ、プログラムカウンタレジスタ、及び内部ＲＡＭを含む。プロセサの非常に少ない数のメモリー領域のみがＣＥＵの導入にアクセス不能として残る。そのような領域は演算及び論理ユニットの入力レジスタ、メモリーラッチ、アドレスレジスタ、及びキャッシュメモリーを含む。マイクロプロセサ８０５１の場合に実行され多種のマイクロプロセサも拡張可能な計算は、アクセス不可能な領域はプロセサの全メモリー領域の７％よりも少ないことを示している。
【００１３】
本発明による誤り注入の効率のため、所定のプログラムに関連する所定のプロセサに対する実際の誤り率を評価することが可能になっている。この実際の誤り率又はシステム感度は計算により評価することができる。最初に、粒子の衝撃にさらされる所定のプロセサに対し、Ｐ個の中の１個の粒子がビット誤り（ＣＥＯ）を発生する数Ｐを決定する。Ｎ個のＳＥＵの中ｎ個のみが所定のプロセサの所定のプログラムを妨害することが、本発明により示すことができる。従って、システム感度はｎ／ＮＰと見積もることができる。得られた実際の誤り率の決定モードが、本発明の誤り決定方法が実際の条件例えば宇宙での動作に適用される装置に適用されて確認されると、本方法は別のソフトウェアが動作する同じハードウェア素子で構成されるシステムに適用することができる。従って、本発明による方法は正しい結果を提供し、Ｐは所定のハードウェア及び所定の粒子タイプに対して一定であるので、実際の又はシミュレートされた妨害条件での新しい検証を実施する必要はない。
【００１４】
ＣＥＵタイプの妨害に対するシステムの感度の解析に対する方法は完全にランダム形態で又はシステマチックに実行することができる。システマチックな解析は特にプログラムの連続ステップの上での所定のプログラムに対して実行することができる。プログラムのある位相はＣＥＯにわずかに感度を有し、他の位相は大きな感度を有する。従って、各プログラムに感度窓を規定することができる。所定のプログラムの特に感度のある部分にのみ冗長な動作を実行する冗長性を提供するシステムの場合に、上記のことは有用である。
【課題を解決するための手段】
【００１５】
上記目的を達成するために、本発明は、割込みを実行し、割込み特に、プログラムカウンタレジスタの復帰値と、状態表示レジスタのような他のレジスタの内容をスタックポインタの制御で動作するスタックに保存し、割込みプログラムの進行中にビット誤りを導入する主プログラムの制御のもとで動作するハードウェアにビット誤りを注入する方法を提供する。
【００１６】
非直接アクセス位置に保存される目標メモリーワードに誤りを注入するときは、割込みプログラムが；
レジスタの内容をスタックに保存し、
目標メモリーワードの内容を前記レジスタに転送し、
前記レジスタの中で前記目標メモリーワードの複写された内容を変更してその中に選択された誤りを注入し、
変更された目標メモリーワードをそのもとの位置に転送し、
前記レジスタをポップし、
割込みプログラムを終了して前記プログラムカウンタで示される主プログラムのアドレスに復帰する。
【００１７】
ビット誤りがプログラムカウンタレジスタ（ＰＣ）に注入されるときは、割込みプログラムが；
第１レジスタの内容をスタックに保存し、
アキュムレータの内容をスタックに保存し、
プログラムカウンタ復帰アドレスのスタック内のアドレスに対応するスタックポインタレジスタの値を前記第１レジスタに転送し、
前記第１レジスタで示されるプログラムカウンタの内容を前記アキュムレータに転送し、
前記アキュムレータの中のプログラムカウンタの値を変更してそこに選択された誤りを注入し、
プログラムカウンタの変更された値を第１レジスタに含まれるアドレスで前記スタックに再ロードし、
アキュムレータをポップし、
第１レジスタをポップする。
【００１８】
誤りの注入がスタックポインタレジスタに対して行われる時は、割込みプログラムが；
所定のメモリーセルへの無条件ジャンプのコードを所定のアドレスに書き、
プログラムカウンタの復帰値をスタックポインタ手段により示し、
スタックポインタの内容を第１レジスタに転送し、
スタックに保存されるプログラムカウンタの復帰アドレスを第２レジスタに転送し、
第２レジスタの内容を前記無条件ジャンプコードの後に転送し、
第１レジスタを変更して選択された誤りをスタックポインタレジスタに注入し、
最初に述べた無条件ジャンプの前記所定のアドレスへの無条件ジャンプを実行して主プログラムの復帰値を得る。
【発明を実施するための最良の形態】
【００１９】
図１はハードウェア／ソフトウェアシステムの構成素子を示す。主プログラム１０は、一連の命令として論理的観点から、又は命令を含むメモリーとしてハードウェア的観点から図示される。システムは、又、１又は数個の割込みプログラム２０とスタック３０及びスタックポインタ４０を有する。
【００２０】
従来のコンピュータアーキテクチャでは、割込み命令が主プログラム１０のステップ１０（ｉ）で送られると、いくつかの動作が行われる。
−進行中の命令１０（ｉ）が終了する。
−プログラムコンテクスト、つまり主プログラムのリターンアドレス（１０（ｉ＋１））に対応するプログラムカウンタＰＣの値と、種々の状態表示レジスタ（フラグ）と、システムの他のキープログラムを保有する。このコンテクスト保存は、従来は、ファーストイン−ファーストアウト型のスタックで、スタックポインタレジスタ（ＳＰ）４０の制御のもとで行われる。
−割込みプログラム２０の第１ステップ（ＳＴＡＲＴ）に進む。
【００２１】
以上のことはシンボル的に図１に示され、割込みＩＴがステップ１０（ｉ）で発生し、割込みプログラム２０のフェーズＳＴＡＲＴに進み、このフェーズＳＴＡＲＴはスタック３０を指すスタックポインタ４０を制御する。（従来、スタックポインタＳＰはスタックの最後のフリーセルを指す。）
【００２２】
これらの初期動作が行われると、割込みプログラムは巻き戻して最後のフェーズＥＮＤに到達する。このとき、スタックポインタに命令が与えられてスタックの内容をポップして取り出す。つまり、割込み時に保存されたコンテクストに関する全ての情報がもとの位置に戻される。ポップの最後のステップで、プログラムカウンタの内容は主プログラムのｉ＋１に対応し、プログラムはリンク３１で示すようにステップ１０（ｉ＋１）で再開する。
【００２３】
前述のごとく、本発明の目的は、主プログラムの選択されたステップでシステムの選択された位置で一般のＣＥＵコードに基づく単一又は複数のビットエラー（ＳＥＵｓ）を導入することにある。
【００２４】
１．直接アクセスレジスタへの誤りの注入
直接アクセスレジスタ又はメモリーワードへの誤り注入のための割込みプログラムの例を図２に示す。
【００２５】
最初の初期化ステップ２０１（ＳＴＡＲＴ）で、プログラムカウンタに含まれるアドレス、又はより特定すると、プログラムカウンタの再開アドレス［１０（ｉ＋１）］がスタック３０に送られる。
【００２６】
オプションステップ２０２で、通常の割込プログラムで、実施されていなければ、状態インジケータ（フラグ又はＦ）と他のキーレジスタがスタック３０に転送（プッシュ）される。
【００２７】
ステップ２０３で、１又は複数のビット位置（ｐｏｓ．ｂｉｔ）の変更（ｃｈｇ）が直接アクセスメモリーワードに対して行われる。
【００２８】
ステップ２０４はオプションステップで、割込み時にステップ２０２が実行されたときに実行される。つまり、ステップ２０２でスタックされたコンピュータのコンテクストがポップされる。
【００２９】
割込みプログラムは通常最終のステップ２０５で終了し、割り込まれたプログラムの実行の継続に戻る。
【００３０】
図２のプログラムは実行が簡単で、単一の命令で目標のビットの位置変化をさせることができる。この変化は、関係するレジスタの内容とＣＥＵコードに含まれるマスクとのＸＯＲ動作によって関連するレジスタのレベルで行われる。
【００３１】
２．間接アクセスレジスタへの誤り注入
非直接アクセスレジスタ又はメモリーへの誤り注入の可能な割込みプログラムの例を図３に示す。
【００３２】
初期ステップ３０１と３０２は図２のステップ２０１、２０２と同じである。
【００３３】
ステップ３０３で、プログラムはレジスタ又はアキュムレータＡＣＣの内容をスタックにプッシュする。
【００３４】
ステップ３０４で、目標の内部メモリーエリア（ＺＭＩ）の内容がレジスタＡＣＣにロード（Ｌｄ）される。
【００３５】
ステップ３０５で、目標のメモリーワードの所望の変更が行われる。この変更はレジスタＡＣＣで行われ、図２のステップ２０３で説明した変更と同様に、アクセス可能である。
【００３６】
ステップ３０６で、レジスタＡＣＣの変更された内容が、目標ワードが位置するメモリーエリアに戻される。
【００３７】
次に、スタックステップ３０２と相補のポップステップ３０７が実行されて、上述の動作の実行前のもとの値をアキュムレータＡＣＣに戻す。
【００３８】
プログラムはステップ３０８と３０９で、図２のステップ２０４、２０５と同様に終了する。
【００３９】
３．プログラムカウンタ（ＰＣ）への誤り注入
プログラムカウンタへの誤り注入が可能な割込みプログラムを図４に示す。
【００４０】
この場合、プログラムカウンタはプログラムの実行ステップのシーケンスを管理し、それが妨害されるとプログラムを正しく実行することが困難となることに特別の難しさがある。
【００４１】
本発明の実施例によるプログラムカウンタの内容への誤り注入のプログラムは、図２のステップ２０１、２０２と同様のステップ４０１、４０２で開始する。
【００４２】
ステップ４０３で、第１レジスタＲ０の内容がスタックに保存つまりプッシュされる。
【００４３】
ステップ４０４で、第２レジスタＡＣＣ、ここではアキュムレータと呼ばれる、の内容がスタックと関連づけられる。
【００４４】
ステップ４０５で、プログラムカウンタの戻りアドレスのスタック内のアドレスに対応するスタックポインタＳＰの内容がレジスタＲ０に転送される。
【００４５】
ステップ４０６で、第１レジスタＲ０であらわされるプログラムカウンタレジスタの内容（ＣＰ）がアキュムレータＡＣＣに転送される。
【００４６】
次に、ステップ４０７で、はじめて、選択された誤り注入がレジスタＡＣＣの内容、つまりプログラムカウンタの上に行われる。
【００４７】
ステップ４０８で、レジスタ４０８の内容がスタックの、レジスタＲ０で指示されるアドレスに戻される。
【００４８】
以上で動作は終了し、連続して、アキュムレータがステップ４０９でポップされ、レジスタＲ０がステップ４１０でポップされ、最後のステップ４１１、４１２が図２のステップ２０４、２０５と同様に実行される。
【００４９】
４．スタックポインタ（ＳＰ）への誤り注入
スタックポインタへの誤り注入が可能な割込みプログラムを図５に示す。
【００５０】
スタックポインタが割込みプログラムの間に妨害されると、ポップを正常に行うことができないので、割込みプログラムの実行後割込みプログラムの巻き戻しを再開することができない点で、スタックポインタへの誤りの注入は特別の問題を提起する。従って、本発明はスタックポインタへの誤り注入と割り込まれたプログラムへの復帰のための無条件ジャンプに関する特別の方法を提供する。
【００５１】
本発明の実施例による、スタックポインタの内容への誤り注入のプログラムは、図２のステップ２０１、２０２と同様のステップ５０１、５０２でスタートする。
【００５２】
ステップ５０３、５０４で、所定のメモリーセルへの無条件ジャンプのコード（ＪＭＰ）が所定のアドレス（ａｄｂｒａｎｃｈ）に書かれる。この動作は一般にレジスタＲを介して行われる。
【００５３】
ステップ５０５で、スタックポインタの手段によりプログラムカウンタ復帰値へポイントされる（ＤＥＣ）。
【００５４】
ステップ５０６で、スタックポインタの内容（プログラムカウンタの復帰アドレスのスタック内のアドレス）が第１レジスタＲ１に転送される。
【００５５】
ステップ５０７で、スタックに保存されたプログラムカウンタの復帰アドレスが第２レジスタＲ２に転送される。
【００５６】
ステップ５０８で、第２レジスタの内容が前記無条件ジャンプコードが書かれているアドレス（ａｄｂｒａｎｃｈ）に続くアドレス（ａｄｂｒａｎｃｈ＋１）に転送されて、アドレス（プログラムカウンタ復帰値を含むアドレス）を無条件ジャンプが送るアドレスに設定する。
【００５７】
ステップ５０９で、第１レジスタ５０９が変更されて選択された誤りがスタックポインタレジスタに注入される。
【００５８】
ステップ５１０で、前記無条件ジャンプコードが書かれているアドレス（ａｄｂｒａｎｃｈ）への第１無条件ジャンプが実行され、そして、この無条件ジャンプが実行されて主プログラムの復帰値に到達する。
【００５９】
このプログラムはポップステップでは終了しない。スタックポインタが妨害されたので、ポップステップはもはや実施可能ではない。
【００６０】
一般に、ＣＥＵ目標が何であれ、多くのプロセサにとって、本発明による誤り注入に必要な命令セットはわずかなアセンブリ言語命令でこれらの仕事の実行が可能である。これらの命令がコンパイルされると最大で２０〜３０語のコードを提供する。ＳＥＵをシミュレートする限界的側面はこれらのコードを実行中のプログラムに挿入して、プログラムの実行中の所望の時に上記コードを実行させることである。放射の結果として起るＳＥＵを忠実に再生する注入誤りにとって、このコードの実行は単一の効果としてＳＥＵ目標の値を劣化させ、プロセサの他の記憶素子を変化させない必要がある。
【００６１】
本発明は特定のハードウェアのプログラミング又はソフトウェアの当業者により容易に実施することができる。特に、ひとつの位置から他の位置に転送するレジスタ又は他のメモリー語のサイズが、転送が行われるセル、レジスタ、又はスタックのディメンションよりも大きいときは、転送を数個の基本転送に分解することができ、例えば最上位ビットを最下位ビットから分離することができる。
【００６２】
もちろん、本発明は当業者に容易な種々の変更、修飾、改良をすることができる。そのような変更、修飾、改良は本開示の一部で本発明の精神と範囲に含まれる。従って、上述の記述は単なる実施例であり、限定的ではない。本発明は特許請求の範囲とその均等によってのみ限定される。
【図面の簡単な説明】
【００６３】
【図１】本発明が適用されるハードウェア／ソフトウェアシステムの各素子をあらわす。
【図２】直接アクセスレジスタに適用される割込みプログラムを示す。
【図３】非直接アクセスレジスタに適用される割込みプログラムを示す。
【図４】プログラムカウンタに適用される割込みプログラムを示す。
【図５】スタックポインタに適用される割込みプログラムを示す。
【国際公開パンフレット】
2004526230.tif 000003
2004526230.tif 000004
2004526230.tif 000005
2004526230.tif 000006
2004526230.tif 000007
2004526230.tif 000008
2004526230.tif 000009
2004526230.tif 000010
2004526230.tif 000011
2004526230.tif 000012
2004526230.tif 000013
2004526230.tif 000014
2004526230.tif 000015
2004526230.tif 000016
2004526230.tif 000017
2004526230.tif 000018
2004526230.tif 000019
2004526230.tif 000020
2004526230.tif 000021
【国際調査報告】
2004526230.tif 000022
2004526230.tif 000023
2004526230.tif 000024
2004526230.tif 000025