(57)【要約】【課題】  ソフトエラー検出の信頼性を確保しつつ、メモリオーバヘッドを抑制するとともに実行時間増を抑制し、さらにプログラムに対するハードウェアの互換性を有するソフトエラー検出回路およびソフトエラー検出方法を提供する。【解決手段】  プログラム実行中のプログラムカウンタ値および命令から所定のパスを検出するパス検出手段３と、パスの開始から終了までに対応する制御信号系列の圧縮値を生成するシグネチャ生成手段５と、シグネチャ生成手段により生成された圧縮値を登録するシグネチャ登録手段４と、同一パスについて生成された最新の圧縮値を先行して登録された圧縮値と比較する比較手段３とを備える。【選択図】  図１
2011248845.tif 000002
【特許請求の範囲】
【請求項１】
プログラム実行中のプログラムカウンタ値および命令から所定のパスを検出するパス検出手段と、前記パスの開始から終了までに対応する制御信号系列の圧縮値を生成するシグネチャ生成手段と、該シグネチャ生成手段により生成された圧縮値を登録するシグネチャ登録手段と、同一パスについて生成された最新の圧縮値を先行して登録された圧縮値と比較する比較手段とを備えることを特徴とするソフトエラー検出回路。
【請求項２】
前記パス検出手段が、画一的な実行命令系列を単位として検出し、該実行命令系列の実行開始アドレスおよび実行終了アドレスを前記シグネチャ登録手段に提供するパス検出手段であることを特徴とする請求項１に記載のソフトエラー検出回路。
【請求項３】
前記パス検出手段が、前記シグネチャ生成手段を初期化するための初期値を該シグネチャ生成手段に提供するするとともに、前記実行命令系列の実行開始アドレスに対応する初期値を前記シグネチャ登録手段に提供するパス検出手段であることを特徴とする請求項２に記載のソフトエラー検出回路。
【請求項４】
前記シグネチャ登録手段が、前記実行命令系列の実行開始アドレスおよび実行終了アドレス、前記初期値ならびに前記圧縮値を単位として登録するシグネチャ登録手段であることを特徴とする請求項３に記載のソフトエラー検出器。
【請求項５】
前記シグネチャ登録手段が、前記パス検出手段により検出された所定のパスごとに各対応する圧縮値を登録するシグネチャ登録手段であることを特徴とする請求項１ないし４のいずれかに記載のソフトエラー検出回路。
【請求項６】
前記シグネチャ登録手段が、物理的または論理的に複数に区分されたシグネチャ登録手段であることを特徴とする請求項１ないし５のいずれかに記載のソフトエラー検出回路。
【請求項７】
請求項１ないし６のいずれかに記載のソフトエラー検出回路を使用するソフトエラー検出方法であって、プログラム実行中のプログラムカウンタ値および命令からシグネチャ登録手段に登録されていない所定のパスを検出するとき、該パスの開始から終了までに対応する制御信号系列の圧縮値を求め、同じ所定のパスを検出するとき、該パスの開始から終了までに対応する制御信号系列の圧縮値を求め、両圧縮値を比較することにより実行プログラムの正誤を判定することを特徴とするソフトエラーの検出方法。
【請求項８】
前記所定のパスが、該パスの実行開始アドレスおよび実行終了アドレスにより特定されるものであり、前記圧縮値が、初期値とともに前記制御信号系列から求められ、かつ、同じ実行開始アドレスで特定されるパスについて共通の初期値により求められるものであることを特徴とする請求項７に記載のソフトエラー検出方法。
【請求項９】
前記所定のパスが、プログラム実行中の画一的な実行命令系列を単位として特定されるものであることを特徴とする請求項７または８に記載のソフトエラー検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、順序回路におけるいわゆるソフトエラーを検出するための回路および検出方法に関するものである。
【背景技術】
【０００２】
デジタル集積回路では、宇宙線または放射線などにより記憶素子の値が反転するなどの影響を受け、順序回路が誤った値を出力することがある。これをソフトエラーと呼ぶ。この種のソフトエラーは、ＳＲＡＭやＤＲＡＭなどの記憶素子におけるものとして顕在化したが、近年では集積回路の微細化等にともなって、組み合わせ回路におけるエラーも問題視されるようになっている。
【０００３】
記憶素子に発生するエラーに対しては、パリティまたはハミングコードによって検出・修正できることは周知である。他方、組合せ回路におけるエラーに対しては、上記パリティおよびハミングコードでは対処できず、回路を多重化する方法によって対処されていた。
【０００４】
しかし、回路を多重化する手法は、同じ回路を多重度に応じて用意しなければならず、そのためのコストが増大するのみならず、面積ペナルティを生じさせることから、民生機器向けの大規模集積回路（ＶＬＳＩ）に適用するときには、高額化を招来することとなっていた。
【０００５】
そこで、制御フロー検査（Ｃｏｎｔｒｏｌ  Ｆｌｏｗ  Ｃｈｅｃｋｉｎｇ：以下、ＣＦＣと表記する場合がある）技術が提案されている（非特許文献１ないし４参照）。このＣＦＣ技術では、決まって出現する制御信号系列に対応付けられる圧縮値（以下、シグネチャと表記する場合がある）が用いられており、例えば、プログラムのコンパイル時に上記制御信号系列に対応する圧縮値を計算し、これを参照シグネチャとしてプログラムコードに埋め込み、プログラム実行中に計算される同一の制御信号系列に対応する圧縮値を計算し、両圧縮値（シグネチャ）を比較することによって、制御フロー誤りを検出するものであった。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Ｊ．Ｐ．Ｓｈｅｎ，ａｎｄ  Ｍ．Ａ．Ｓｈｕｅｔｔｅ，“Ｏｎ−ｌｉｎｅ  ｍｏｎｔｉｔｏｒｉｎｇ  ｕｓｉｎｇ  ｓｉｇｎａｔｕｒｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｔｒｅａｍｓ”  Ｐｒｏｃ．Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｔｅｓｔ  Ｃｏｎｆｅｒｅｎｃｅ，  ｐｐ．２７５−２８２，Ｏｃｔｏｂｅｒ  １９８３
【非特許文献２】Ｋ．Ｗｉｌｋｅｎ，ａｎｄ  Ｊ．Ｐ．Ｓｈｅｎ，“Ｃｏｎｔｉｎｕｏｕｓ  ｓｉｇｎａｔｕｒｅ  ｍｏｎｉｔｏｒｉｎｇ：  ｌｏｗ−ｃｏｓｔ  ｃｏｎｃｕｒｒｅｎｔ  ｄｅｔｅｃｔｉｏｎ  ｏｆ  ｐｒｏｃｅｓｓｏｒ  ｃｏｎｔｒｏｌ  ｅｒｒｏｒｓ，”  ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｃｏｍｐｕｔｅｒ−Ａｉｄｅｄ  Ｄｅｓｉｇｎ，  Ｖｏｌ．９，Ｎｏ．６，ｐｐ．６２９−６４１，Ｊｕｎｅ  １９９０
【非特許文献３】Ｍ．Ｎａｍｂｏｏ，“Ｔｅｃｈｎｉｑｕｅｓ  ｆｏｒ  ｔｅｓｔｉｎｇ  ｏｆ  ＶＬＳＩ  ｐｒｏｃｅｓｓｏｒ  ｏｐｅｒａｔｉｏｎ，”  ＩＥＥＥ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｔｅｓｔ  Ｃｏｎｆｅｒｅｎｃｅ，  ｐｐ．４６１−４６８，  １９８２
【非特許文献４】Ｍ．Ｓｃｈｕｅｔｔｅ，ａｎｄ  Ｊ．Ｓｈｅｎ，“Ｐｒｏｃｅｓｓｏｒ  ｃｏｎｔｒｏｌ  ｆｌｏｗ  ｍｏｎｉｔｏｒｉｎｇ  ｕｓｉｎｇ  ｓｉｇｎａｔｕｒｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｔｒｅａｍｓ”  ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｃｏｍｐｕｔｅｒｓ，Ｖｏｌ．Ｃ−３６，ｐｐ．２６４−２７６，Ｍａｒｃｈ  １９８７
【発明の概要】
【発明が解決しようとする課題】
【０００７】
前記ＣＦＣ技術では、例えば、プログラムのコンパイル時における制御信号系列に対応する参照シグネチャを計算し、プログラムコード中に挿入するものである場合には、シグネチャコンパイラは、アセンブリコードを基本ブロックに分割し、当該基本ブロックごとの参照シグネチャが計算されており、この参照シグネチャは、オペコードとともにシグネチャ命令として当該基本ブロックの末尾に追加されていた。従って、専用ハードウェアを使用して基本ブロックを実行することにより、そのプラグラム実行によるシグネチャ（以下、実行時シグネチャと表記する場合がある）が生成され、シグネチャ命令によって参照シグネチャと実行時シグネチャを比較判定するものであった。
【０００８】
しかしながら、上記の従来技術は、プログラムをメモリ領域に保存する場合、参照シグネチャや初期化シグネチャをメモリ領域に保存することとなり、メモリオーバヘッドを生じる可能性が高く、また、プログラムコード中にシグネチャ命令が挿入されることから、実行時間が増加し、さらに、当該プログラムは専用ハードウェアにおいてのみ使用が可能となるため、プログラムに対するハードウェアの互換性を失う結果となっていた。
【０００９】
本発明は、上記諸点にかんがみてなされたものであって、その目的とするところは、ソフトエラー検出の信頼性を確保しつつ、メモリオーバヘッドを抑制するとともに実行時間増を抑制し、さらにプログラムに対するハードウェアの互換性を有するソフトエラー検出回路およびソフトエラー検出方法を提供することである。
【課題を解決するための手段】
【００１０】
そこで、前記課題を解決するために、請求項１に記載のソフトエラー検出回路にかかる発明は、プログラム実行中のプログラムカウンタ値および命令から所定のパスを検出するパス検出手段と、前記パスの開始から終了までに対応する制御信号系列の圧縮値を生成するシグネチャ生成手段と、該シグネチャ生成手段により生成された圧縮値を登録するシグネチャ登録手段と、同一パスについて生成された最新の圧縮値を先行して登録された圧縮値と比較する比較手段とを備えることを特徴とする。
【００１１】
ここで、「パス」とは、実行命令系列を内容とするものであり、「所定のパス」とは、設計条件またはプログラム条件などにより一意に定まるパスを意味し、例えば、ジャンプ命令および分岐命令における条件判定に対して一定の仮定の下に、実行開始アドレスと実行終了アドレスを与えるなどによって、実行命令系列を一意に定めることができるようにした場合が挙げられる。また、上記のようにして具体的に特定される実行命令系列を「画一的な実行命令系列」という。
【００１２】
請求項２に記載のソフトエラー検出回路にかかる発明は、前記した請求項１において、前記パス検出手段が、画一的な実行命令系列を単位として検出し、該実行命令系列の実行開始アドレスおよび実行終了アドレスを前記シグネチャ登録手段に提供するパス検出手段であることを特徴とする。
【００１３】
請求項３に記載のソフトエラー検出回路にかかる発明は、前記した請求項２において、前記パス検出手段が、前記シグネチャ生成手段を初期化するための初期値を該シグネチャ生成手段に提供するするとともに、前記実行命令系列の実行開始アドレスに対応する初期値を前記シグネチャ登録手段に提供するパス検出手段であることを特徴とする。
【００１４】
請求項４に記載のソフトエラー検出回路にかかる発明は、前記した請求項３において、前記シグネチャ登録手段が、前記実行命令系列の実行開始アドレスおよび実行終了アドレス、前記初期値ならびに前記圧縮値を単位として登録するシグネチャ登録手段であることを特徴とする。
【００１５】
請求項５に記載のソフトエラー検出回路にかかる発明は、前記した請求項１ないし４のいずれかにおいて、前記シグネチャ登録手段が、前記パス検出手段により検出された所定のパスごとに各対応する圧縮値を登録するシグネチャ登録手段であることを特徴とする。
【００１６】
請求項６に記載のソフトエラー検出回路にかかる発明は、前記した請求項１ないし５のいずれかにおいて、前記シグネチャ登録手段が、物理的または論理的に複数に区分されたシグネチャ登録手段とすることを特徴とする。
【００１７】
ここで、「物理的に複数に区分された」とは、複数のシグネチャ登録手段を備える場合を意味し、「論理的に複数に区分された」とは、単一のシグネチャ登録手段を使用しつつ、異なる種類等のパスを区別するために識別子を付与するなどによって、複数に区別され得るようにした場合を意味する。
【００１８】
他方、ソフトエラー検出方法にかかる請求項７に記載の発明は、請求項１ないし６のいずれかに記載のソフトエラー検出回路を使用するソフトエラー検出方法であって、プログラム実行中のプログラムカウンタ値および命令からシグネチャ登録手段に登録されていない所定のパスを検出するとき、該パスの開始から終了までに対応する制御信号系列の圧縮値を求め、同じ所定のパスを検出するとき、該パスの開始から終了までに対応する制御信号系列の圧縮値を求め、両圧縮値を比較することにより実行プログラムの正誤を判定することを特徴とする。
【００１９】
請求項８に記載のソフトエラー検出方法にかかる発明は、前記した請求項７において、前記所定のパスが、該パスの実行開始アドレスおよび実行終了アドレスにより特定されるものであり、前記圧縮値は、初期値とともに前記制御信号系列から求められ、かつ、同じ実行開始アドレスで特定されるパスについて共通の初期値により求められるものであることを特徴とする。
【００２０】
請求項９に記載のソフトエラー検出方法にかかる発明は、前記した請求項７または８において、前記所定のパスが、プログラム実行中の画一的な実行命令系列を単位として特定されるものであることを特徴とする。
【発明の効果】
【００２１】
請求項１に記載のソフトエラー検出回路によれば、実行中のプログラムから所定の条件を満たすパスを検出することができ、この条件を満たしたパスに対応する制御信号系列の圧縮値を生成し、これを参照シグネチャとして登録することができる。そして、同じパスに対応する制御信号系列について圧縮値を生成したとき、ここで生成された圧縮値と参照シグネチャとを比較することにより制御フローの誤りの有無を確認することができる。
【００２２】
上記発明では、パス中にある全ての命令が実行されたときに参照シグネチャが生成され、その参照シグネチャが一時的または永続的にシグネチャ登録手段に格納されることから、当該参照シグネチャをプログラムメモリまたはデータメモリに記憶する必要性がなく、メモリオーバヘッドを抑制する効果を奏する。そして、繰り返し実行される特定のプログラムについて参照シグネチャが生成される条件下においては、比較される頻度が高くなるため、これに伴いプログラム全体に占める命令網羅率が上昇し、制御フローの誤り検出の精度を向上させることができる。
【００２３】
さらに、ＣＦＣ技術のようにプログラムコード中に参照シグネチャを挿入する必要がないため、ソフトエラー検出回路を備えないハードウェアにおいても同じプログラムを使用することができることとなり、プログラムにおけるハードウェアの互換性は維持される。
【００２４】
請求項２に記載のソフトエラー検出回路によれば、画一的な実行命令系列に対してのみ圧縮値が生成されるため、生成される圧縮値は本来的に同一となるべき範囲に限定されることとなる。従って、請求項１における効果に加え、比較されるシグネチャを単純に比較することによって、当該範囲のプログラムについての制御フローの誤り検出を行うこととなり、ソフトエラーを検出したときの誤判定を抑制させることとなる。
【００２５】
請求項３に記載のソフトエラー検出回路によれば、画一的な実行命令系列に対して圧縮値が生成される際、実行開始アドレスが同一であるパスについては、共通の初期値によってシグネチャ生成手段が初期化されることとなる。従って、請求項２の効果に加え、圧縮値を単純に比較することによりプログラムの制御フロー誤りを検出することができる。
【００２６】
請求項４に記載のソフトエラー検出回路によれば、シグネチャ登録手段には、圧縮値のみならず、当該パスの実行開始アドレスおよび実行終了アドレスが登録されていることから、パス検出手段がプログラム実行中のパスとの比較に際し、登録されている両アドレスを参照することができる。従って、請求項３の効果に加え、プログラム実行中のパスと登録されている圧縮値に対応するパスとの異同が、それぞれのパスの実行開始アドレスおよび実行終了アドレスを比較することによって可能となる。なお、実行開始アドレスが共通であっても、実行終了アドレスを比較することにより、これが異なる場合は、パスは異なるものと判断できることから、圧縮値が比較されることはなく、エラー検出の誤判定を回避できる効果をも奏する。
【００２７】
請求項５の記載のソフトエラー検出回路によれば、パス検出手段が検出する異なる複数のパスに対応する圧縮値が、それぞれ個別にシグネチャ登録手段によって登録されることから、複数のパスについて参照シグネチャを登録することができる。これにより、前記請求項１ないし４のいずれかの効果に加えて、多数のパスにかかる圧縮値を比較することができることとなり、実行命令系列の網羅率が高くなることから、ソフトエラー検出の信頼性を一層向上させることができる。
【００２８】
請求項６に記載のソフトエラー検出回路によれば、シグネチャ登録手段が複数に区分されていることから、パスの種類等に応じて区別して登録することができる。これにより、上記請求項１ないし４のいずれかの効果に加えて、実行開始アドレスおよび実行終了アドレスが共に一致するパスであっても、異なる種類のパスについては、区別して登録させることができ、圧縮値を比較させないことにより、ソフトエラーの誤判定を回避することができる。
【００２９】
請求項７に記載のソフトエラー検出方法によれば、実行中のプログラムから所定の条件を満たすパスを検出することにより、この条件を満たしたパスに対応する制御信号系列の圧縮値を生成することができ、これを参照シグネチャとして登録し、その後、同じパスにおけるプログラムが実行されるとき、当該パスに対応する制御信号系列について圧縮値を生成することから、ここで生成された圧縮値と参照シグネチャとを比較することによって、当該比較される同じパスにおける制御フローの誤りの有無を確認することができる。
【００３０】
また、上記ソフトエラー検出方法では、パス中にある全ての命令が実行されたときに参照シグネチャが生成され、これを一時的に格納することにより、プログラムメモリまたはデータメモリに記憶する必要がないことから、メモリオーバヘッドを抑制できる。さらに、繰り返し実行される特定のプログラムについて参照シグネチャが生成される場合には、シグネチャを比較する頻度が高くなり、プログラム全体に占める命令網羅率が向上することとなる。その結果として、制御フローの誤り検出の精度を向上させることができる。
【００３１】
請求項８に記載のソフトエラー検出方法によれば、画一的な実行命令系列に限定したシグネチャを比較することにより制御フローの誤りを検出するものであるから、請求項７の効果に加え、生成された圧縮値を単純に比較することによって制御フローの誤りを検出することができる。これにより、制御フロー誤りの検出の正確性が担保されるものとなる。
【００３２】
請求項９に記載のソフトエラー検出方法によれば、比較すべき圧縮値に対応するパスは、実行開始アドレスおよび実行終了アドレスによって特定されることから、請求項８の効果に加えて、実行開始アドレスが共通であっても実行終了アドレスが異なるパスに対応する圧縮値は比較対象とはならず、誤判定の原因を回避することができる。また、実行開始アドレスが共通する場合には、同じ初期値によって圧縮値が求められることとなるから、単純に実行終了アドレスの異同によって圧縮値の異同が決定され、プログラムの実行中に圧縮値生成処理が並行して行われ、実行終了アドレスを得た時点で、比較対象の有無の判断および比較判定を行うことが可能となる。
【図面の簡単な説明】
【００３３】
【図１】ソフトエラー検出回路の実施形態の概略を示す説明図である。
【図２】ソフトエラー検出方法の実施形態の概要を示す説明図である。
【図３】実行命令系列の例を示す説明図である。
【図４】ソフトエラー検出方法を実行するためのアルゴリズムの例である。
【図５】実験例における命令網羅率を示すグラフである。
【図６】実験例における命令網羅率を示すグラフである。
【図７】実験例における命令網羅率を示すグラフである。
【図８】実験例における命令網羅率を示すグラフである。
【発明を実施するための形態】
【００３４】
以下、本発明の実施の形態を図面に基づいて説明する。図１は、ソフトエラー検出回路にかかる実施形態の概略を示す図である。この図に示すように、本実施形態のソフトエラー検出回路は、プログラムカウンタ（以下、ＰＣと略称する）１から出力される値と、命令メモリ２から出力される命令が供給されるパス解析器３を備えており、さらにシグネチャ登録手段として機能するシグネチャテーブル４と、シグネチャ生成手段として機能するシグネチャ生成器５を備えている。パス解析器３は、パス検出手段として機能し、ＰＣ１の値と命令メモリ２の命令から所定のパスを検出し、また、シグネチャテーブル４に登録される情報を入手しつつ、適宜シグネチャ生成器５に対し制御信号系列の圧縮値の生成を要求する。ここで、制御信号系列の圧縮値のことを「シグネチャ」といい、制御信号系列には実行命令系列を含むことができる。制御信号は図中の制御信号生成回路によって生成される。
【００３５】
上記のパス解析器３は、所定のパス（実行命令系列）を検出するために、ＰＣ１の値および命令メモリ２の命令を解析し、パスの実行開始アドレスと実行終了アドレスを求める。ＰＣ１には命令メモリ２に記憶される命令のアドレス値が保持されており、命令メモリ２から上記命令アドレスに対応する命令をパス解析器３が取得できる。ＰＣ１に含まれるアドレス値のうち、パスの始まりを実行開始アドレスとし、パスの終わりを実行終了アドレスとしてシグネチャテーブル４に出力する。なお、パスとは、実行命令系列を指すものであり、所定のパスとは、ジャンプ命令および分岐命令における条件判定に対して一定の仮定に下に、実行開始アドレスと実行終了アドレスを与えることで一意に定まる実行命令系列を意味する。従って、パスの始まりとは、上記条件判定に合致するパスの最初に位置する実行命令であり、パスの終わりとは、上記条件判定に合致するパスの最終に位置する実行命令である。
【００３６】
シグネチャテーブル４では、上記の実行開始アドレスおよび実行終了アドレスが格納されるとともに、実行開始から終了までの命令信号から生成された圧縮値（以下、参照シグネチャという場合がある）が格納される。さらに、参照シグネチャを生成する際に付与した初期値（以下、初期化シグネチャという場合がある）をも同時に格納する。これら両シグネチャは上記アドレス値とともに保存される。
【００３７】
シグネチャ生成器５は、パス解析器３が所定のパスの始まりを検出したとき、初期化したうえで、パスの終わりに至る実行命令系列に対する回路中の制御信号系列を圧縮してシグネチャを生成する。この種の信号圧縮には、例えば、線形帰還シフトレジスタ（Ｌｉｎｅａｒ  Ｆｅｅｄｂａｃｋ  Ｓｈｉｆｔ  Ｒｅｇｉｓｔｅｒ：ＬＦＳＲ）に代表される情報圧縮器を使用することができる。このような情報圧縮器によって、制御信号の系列を情報圧縮することができるとともに、特定の定まった値に写像することができる。このような情報圧縮器によって生成された写像がシグネチャである。
【００３８】
シグネチャ生成器５で生成されるシグネチャは、パス解析器３によって参照シグネチャとの比較に供されるか、または、比較すべき参照シグネチャが存在しないときは、パス解析器３を介してシグネチャテーブル４に出力され、当該シグネチャを参照シグネチャとしてシグネチャテーブル４に格納される。パス解析器３が参照シグネチャと同じパスの圧縮値を読み出すとき、比較により、制御フローの正誤が判定される。このように、パス解析器３は、同じパスに対応するシグネチャを比較する比較手段として機能するものである。
【００３９】
これにより、同じアドレスの命令が実行される場合、制御フローに誤りがなければ当該命令に従って同じ処理がなされる。そして、その際に生成されるシグネチャは本来同様の値となることが予想されることから、同じパスに対応するシグネチャは比較対象の候補となり得る。これらのシグネチャ同士を比較することによって、制御が同様に繰り返されているか否かを把握することができるのである。
【００４０】
なお、ＰＣ１は、加算器６によって、命令アドレスが規則的に加算されるため、連続する実行命令系列の場合には命令アドレスが連続することとなるが、ジャンプ命令または分岐命令が存在する場合には、当該命令に従って他の加算器７によって、連続しない命令アドレスに移ることとなる。そのため、生成されるシグネチャにはＰＣ１の値も関連づけられる。
【００４１】
ここで、具体的な機能について説明する。上述のように、パス解析器３は、ＰＣ１から出力される値と、命令メモリ２から出力される命令を受け取る。命令メモリ２から出力される命令に基づいて、パス解析器３が所定のパスの始まりを検出したときは、当該パスの比較対象となるべきパス（候補となるパス）がシグネチャテーブル４に登録されているか否かを確認する。候補となるパスの存在を確認するためには、上記双方のパスに対応する実行開始アドレスを比較することによって行われる。
【００４２】
候補となるパスがシグネチャテーブル４に登録されている場合には、シグネチャ生成器５により実行時シグネチャが生成される。このとき、シグネチャ生成器５には、シグネチャテーブル４に登録されている候補となるパスの初期化シグネチャが出力され、当該初期化シグネチャによってシグネチャ生成器５が初期化される。そして、候補となるパスに対応する実行終了アドレスの命令が実行されるとき、前述の実行開始アドレスから実行終了アドレスに至る実行命令系列のシグネチャ（実行時シグネチャ）が生成されることとなり、パス解析器３において参照シグネチャと比較される。
【００４３】
実行開始アドレスが一致した場合であっても、実行終了アドレスが異なればパスが異なるものとなる。その理由は、パスは実行開始アドレスと実行終了アドレスによって決定する実行命令系列であり、また、実行開始アドレスのみが一致しても実行終了アドレスが異なれば全体に対応するシグネチャも異なることとなるから、そのようなシグネチャを比較対象から除外するためである。しかし、実行開始アドレスを検出した時点では未だ実行終了アドレスは判明しないことから、実行終了アドレスを検出するまでは、同一のパスであることを想定した処理を行うのである。そこで、実行開始アドレスが一致する場合には、比較対象の候補となり得るパスと同じ初期化シグネチャによって、シグネチャ生成器５を初期化するのである。結果的に異なるパスとなる場合であっても、同じ実行開始アドレスを検出したときは、候補となるパスの初期化シグネチャを用いることで、実行終了アドレスを検出した時点で、パスの異同を判断するのである。
【００４４】
上記により、実行開始アドレスが同一でありながら異なるパスとなるものが複数存在することとなるが、これは実行終了アドレスが異なるものであり、初期化シグネチャを同一にするが異なる参照シグネチャとしてシグネチャテーブル４に登録されることとなる。
【００４５】
他方、候補となるパスが登録されていないときは、当該パスの開始アドレスをシグネチャテーブル４に登録する。また、同時にパス解析器３が適切な値を付与してシグネチャ生成器５に出力し、この値でシグネチャ生成器５を初期化し、初期化シグネチャを生成する。この初期化シグネチャはシグネチャテーブルに登録される。さらに、パスの終わりを検出すると、当該パスの実行終了アドレスをシグネチャテーブル４に登録するとともに、パスの終わりまでの実行命令系列についてシグネチャを生成してシグネチャテーブル４に登録する。なお、シグネチャテーブル４に登録されるのは、実行開始アドレス、実行終了アドレス、初期化シグネチャおよび参照シグネチャであり、これらは上述のとおり、候補となるパスの存在確認と、候補となるパスと認定された場合の比較に利用される。
【００４６】
上記のようにソフトエラー検出回路にかかる本実施形態では、ＰＣ１の値および命令メモリ２のから出力される命令に基づきパスを検出するとともに、所定のパスを検出するとき、その制御信号系列からシグネチャを生成することができるので、当該シグネチャを比較することによって繰り返し命令実行される際に、ソフトエラーを検出することができる。また、実行されるプログラムは変更されるものではないことから、ハードウェアが変更しても互換性は維持されることとなる。また、シグネチャはシグネチャテーブル４に登録されることから、プログラムメモリまたはデータメモリを使用することがないため、メモリオーバヘッドを生じさせるおそれはない。
【００４７】
なお、上記実施形態では、単一のシグネチャテーブル４を図示しつつ説明したが、シグネチャテーブルは複数用意する場合もあり得る。後述するように、シグネチャは、実行命令系列が連続するものと、ジャンプ命令や分岐命令に起因して連続しない実行命令系列との二種類が想定されるため、これらを異なるシグネチャテーブルに保存させる構成とすることができるのである。また、パスは画一的な実行命令系列を単位として検出することにより、比較するシグネチャの数を少なく抑える構成とすることも可能である。この場合においても、シグネチャは、連続する実行命令系列を単位とする場合、非連続する実行命令系列を単位とする場合に分類することができる。
【００４８】
次に、ソフトエラー検出方法の実施形態について説明する。本実施形態で使用される回路は上述した回路と同様である。従って、図２に示すように、ＰＣの値および命令からパスを検出し、プログラム実行中の実行命令系列についてシグネチャが生成される。生成されたシグネチャは、参照すべき先行のシグネチャ（参照シグネチャ）が登録先に存在する場合は、その参照シグネチャと、プログラム実行される制御信号のシグネチャ（実行時シグネチャ）とを比較し、参照シグネチャが存在しない場合には、実行時シグネチャが参照シグネチャとしてシグネチャテーブルに登録される。
【００４９】
パスは、ジャンプ命令及び分岐命令における条件判定に対して一定の仮定を想定し、その実行開始アドレスと実行終了アドレスを与えることによって、定まった実行命令系列を形成するものであり、上記条件判定に合致したパスの始まりとパスの終わりがパス解析器により検出される。
【００５０】
そこで、パスの決定方法について例示して説明する。どのような規則によってパスを決定するかは任意であるが、ここでは一例を次に示すこととする。なお、これは単なる例であって、これに限定されるものではなく、その他の規則によっても画一的な実行命令系列を構築することは可能であることを付言する。
【００５１】
本実施形態では、連続するアドレスの実行命令系列と、ジャンプ命令・分岐命令によってアドレスが不連続となる実行命令系列とに分類し、それらに対してパスを決定することとする。なお、このようにパスを二つに分類する場合には、単一のシグネチャテーブルを論理的に二分して使用する（例えば、１ビットの情報を付加し「０」と「１」の値で区別する）ほかに、物理的に二個のシグネチャテーブルを設けることにより、上記二種類に分類された実行命令系列を個別に登録することができる。
【００５２】
アドレスが連続する場合の実行命令系列の規則性については、第１に、プログラム実行開始アドレスはパスの始めとする。第２に、ジャンプ命令および分岐命令によって、連続しないアドレスの命令が実行される場合（分岐条件が成立する場合）には、制御が移った命令をパスの始めとする。第３に、無条件ジャンプ命令はパスの終わりとするか、または、分岐条件が成立した命令をパスの終わりとする。なお、第３において、遅延分岐スロットがある場合には、遅延スロット内にある命令の最後をパスの終わりとする。
【００５３】
このような規則性（条件判定）に従ってパスを定める場合の例を示す。図３（ａ）に示すようなプログラムを仮定すると、この図に示すプログラムは、命令１から命令４までが連続するアドレスにより処理されるが、命令２の分岐条件が「真」となる場合には命令５に制御が移り、さらに、分岐後は命令５に連続するアドレスの命令６が実行される。この場合、命令１はパスの始まりとなり、命令２における分岐条件が「偽」となるときには、命令４まで連続するアドレスの命令が実行されるから、命令１〜命令４は上記条件を満たすパスとなる。
【００５４】
また、命令２における分岐条件が「真」となる場合においても、命令１は、上記と同様にパスの始めとなり、命令２は分岐条件が成立した命令であるからパスの終わりとなる。これは、命令１〜命令２はアドレスが連続する実行命令系列のパスの条件を満たしている。さらに、命令５は、制御が移った命令であるのでパスの始めとなることから、命令５〜命令６はアドレスが連続する実行命令系列のパスの条件を満たすこととなる。
【００５５】
他方、アドレスが不連続となる実行命令系列の規則性については、第１に、ジャンプ命令および分岐命令によって連続しない命令アドレスに制御が移る場合には、当該ジャンプ命令および分岐命令の命令アドレスをパスの始めとする。第２に、ジャンプ命令または分岐命令の宛先アドレスをパスの終わりとする。
【００５６】
この規則性に従ってパスを定める場合の例を説明すると、上記と同様のプログラム（図３（ａ）参照）において、命令２における分岐条件が「真」となり、命令２に続いて命令５が実行される場合には、命令２は分岐条件が成立した命令であるからパスの始まりとなる。また、命令５は分岐の宛先の命令であるからパスの終わりとなる。従って、命令２〜命令５は上記条件を満たすパスとなる。
【００５７】
上記のように、二種類のパスを区別して決定することにより、分岐条件が「真」である場合または「偽」である場合のいずれについてもパスを決定することができる。さらに、パスの始まりおよび終わりのいずれもが共通する場合においても、上記のように二種類のパスを区別することにより異なるパスとすることができる。
【００５８】
すなわち、図３（ｂ）に示すように、命令１から命令５までが連続するアドレスにより処理されるが、命令１における分岐条件が成立する場合には、命令５にジャンプするようなプログラムを想定するとき、上述の規則性に従ってパスを決定すると、分岐条件が「真」または「偽」のいずれの場合においても、命令１がパスの始まりとなり、命令５がパスの終わりとなる。
【００５９】
しかしながら、上述のとおり、アドレスが連続する実行命令系列（命令１、命令２、・・・、命令５）と、アドレスが連続しない実行命令系列（命令１、命令５）とは、異なる種類のパスとして区別されることから、同じ実行開始アドレスと同じ実行終了アドレスにより決定されるパスであるが、異なる（物理的または論理的に異なる）シグネチャテーブルに登録されることによって明確に区別され得る。
【００６０】
なお、上記のように、分岐命令とジャンプ命令が存在する場合には、実行命令の全体についてシグネチャを生成しようとすると、その数が増大することとなるから、このような場合には、分岐命令とジャンプ命令の中間についてはシグネチャを生成しない、すなわち、この範囲における制御フロー誤りの判定を行わないこととしてもよい。
【００６１】
このように、本実施形態のソフトエラー検出方法では、実行プログラムについてパスを検出しつつ、検出された範囲についての実行命令系列についてシグネチャを生成することから、全ての実行プログラム（実行されない命令を含むプログラム）についてソフトエラーを検出するものではない。しかしながら、フィードバック制御に代表されるように、同じ命令が繰り返し実行されるプログラムにおいては、パスが検出される頻度が増加する。その結果として、プログラム全体に占める命令網羅率も向上することとなり、ソフトエラー検出に十分な程度の命令についてシグネチャを生成し、比較判定することができるものである。
【００６２】
例えば、図３（ｃ）に示すように、命令１から命令５まで連続するアドレスによって処理されるプログラムにおいて、命令５における分岐条件が成立した場合に命令２にフィードバックされるものを想定する。このとき、命令２〜命令５のアドレスが連続する実行命令系列が繰り返し実行される。これに対し、命令１〜命令２は、一度実行された後は再度実行されることがない。このような処理においては、命令１〜命令２は、比較されることなく終了することとなるが、命令２〜命令５までは繰り返し実行されることとなり、何度も繰り返しシグネチャが比較されることとなる。
【００６３】
上記の各プログラム例は、説明の都合上、少ない命令数によって示しているが、現実には膨大な命令数で構成され、フィードバック命令はプログラムの至る所に挿入されることから、全体としての制御フロー誤りの判定における信頼性を担保し得る。
【００６４】
さらに、上述の実施の形態によれば、実行開始アドレス、実行終了アドレス、初期化シグネチャおよび参照シグネチャは、いずれもシグネチャテーブルに登録されることから、プログラムメモリまたはデータメモリを使用せず、これらのメモリオーバヘッドを抑制することとなる。さらに、実行するプログラムには何ら変更を加えるものではないことから、本実施形態のようなパス解析器３、シグネチャテーブル４およびシグネチャ生成器５を設けないハードウェアにおいて、同様のプログラムが使用可能となる。また、プログラム中にシグネチャ命令等の挿入がないことから実行時間の増加を抑えることとなる。
【実施例】
【００６５】
ソフトエラー検出方法の実施形態を可能にするためのアルゴリズムを図４に示す。この図に示すように、ここでの処理は、上述したパスの決定方法の一例に従っている。つまり、連続するアドレスの実行命令系列と、ジャンプ命令・分岐命令によってアドレスが不連続となる実行命令系列とに分類しおり、アドレスが連続する場合として、プログラム実行開始アドレスはパスの始めとし、また、分岐条件が「真」となり制御が移った命令をパスの始めとし）、さらに、分岐条件が「真」となる命令をパスの終わりとしている。他方、アドレスが不連続となる場合として、ジャンプ命令および分岐命令によって連続しない命令アドレスに制御が移る場合には、ジャンプ命令および分岐命令の命令アドレスをパスの始めとし、ジャンプ命令または分岐命令の宛先アドレスをパスの終わりとしている。
【００６６】
次に、実際の命令網羅率を把握するための実験を行った。実験方法および実験結果を次に示す。
〔実験例〕
実験は、上述したソフトエラー検出回路を使用したＣＰＵの動作を模擬するトレース駆動シミュレータを開発し、これを使用して評価を行った。開発言語はＣ＋＋であり、トレース駆動シミュレータの入力となるトレースは、Ｉｍｐｅｒａｓ社製の命令セットシミュレータＯＶＰｓｉｍにより求めた。なお、ＯＶＰｓｉｍの実装上の制約により、システムコール部分のトレースは含めていない。また、実装形態としては、二つのシグネチャテーブルで構成されるハードウェア構成を採用し、一方をアドレスが連続する実行命令系列に対するものとし、他方をジャンプ・分岐命令に起因してアドレスが連続しない実行命令系列に対するものとした。シグネチャテーブルの記憶方式としては、セットソシアティブ方式を採用し、シグネチャテーブルのライン置き換えアルゴリズムとして、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）方式を採用した。実験に供したプログラムは、ｄｈｒｙｓｔｏｎｅ、ｆｉｂｏｎａｃｃｉ、ｌｉｎｐａｃｋ、およびｐｅａｋＳｐｅｅｄ１の４種類である。なお、トレース駆動シミュレーションを行ったセット数およびウェイ数は表１に示す。
【００６７】
【表１】
2011248845.tif 000003
【００６８】
上記の実験の結果を図５ないし図８に示す。図５（ａ）は、ｄｈｒｙｓｔｏｎｅにおけるアドレスが連続した実行命令系列の命令網羅率であり、図５（ｂ）は、ｄｈｒｙｓｔｏｎｅにおけるアドレスが連続しない実行命令系列の網羅率である。図６は、ｆｉｂｏｎａｃｃｉにおけるアドレスが連続する実行命令系列（ａ）とアドレスが連続しない実行命令系列（ｂ）の命令網羅率であり、図７は、ｌｉｎｐａｃｋにおけるアドレスが連続する実行命令系列（ａ）とアドレスが連続しない実行命令系列（ｂ）の命令網羅率であり、図８は、ｐｅａｋＳｐｅｅｄ１におけるアドレスが連続する実行命令系列（ａ）とアドレスが連続しない実行命令系列（ｂ）の命令網羅率の結果を、それぞれグラフにしたものである。また、総合評価として、命令網羅率の範囲を表２に示す。
【００６９】
【表２】
2011248845.tif 000004
【００７０】
上記実験結果から明らかなとおり、ｌｉｎｐａｃｋやｐｅａｋＳｐｅｅｄ１のように、特定の基本ブロックが高頻度に繰り返し実行されるプログラムでは、命令網羅率が高く、制御フロー誤りの検出精度が高くなり得る。また、ｄｈｒｙｓｔｏｎｅおよびｆｉｂｏｎａｃｃｉにあっても、アドレスが連続した実行命令系列における命令網羅率の最大値は９１．３％および８８．０％であり、アドレスが連続しない実行命令系列を含めると両者とも１００％であった。
【００７１】
従って、二種類のシグネチャテーブルを用いて、アドレスが連続する実行命令系列およびアドレスが連続しない実行命令系列を登録・比較することにより、高精度なソフトエラー検出が可能となり得る。
【符号の説明】
【００７２】
１  プログラムカウンタ（ＰＣ）
２  命令メモリ
３  パス検出器
４  シグネチャテーブル
５  パス生成器
６，７  加算器
【図１】
2011248845.tif 000005
【図２】
2011248845.tif 000006
【図３】
2011248845.tif 000007
【図４】
2011248845.tif 000008
【図５】
2011248845.tif 000009
【図６】
2011248845.tif 000010
【図７】
2011248845.tif 000011
【図８】
2011248845.tif 000012