(57)【要約】【課題】時間的・空間的に網羅性を持ったメモリ障害のシミュレーションをより短時間で実現可能なソフトエラー解析装置を提供すること。【解決手段】ターゲットマイコンのシミュレータ２００にソフトエラーを発生させて該ターゲットマイコンに生じる影響を解析するソフトエラー解析装置１００であって、エラー内容、又は、エラー発生箇所が登録されたエラー情報記憶手段３４と、実行中の機能ブロックを特定する機能ブロック特定手段３９と、前記機能ブロック特定手段が特定した機能ブロックの前記エラー内容、又は、前記エラー発生箇所の前記発生確率を前記エラー情報記憶手段から読み出し、前記エラー内容又は前記エラー発生箇所の少なくとも一方に従ってシミュレータにソフトエラーを設定するエラー設定手段３５、を有することを特徴とする。【選択図】図２
2014160421.tif 000002
【特許請求の範囲】
【請求項１】
ターゲットマイコンのシミュレータにソフトエラーを発生させて該ターゲットマイコンに生じる影響を解析するソフトエラー解析装置であって、
前記ターゲットマイコンが実行するプログラムに含まれる各機能ブロック毎に、ソフトエラーのエラー内容、又は、エラー発生箇所の少なくとも１つが登録されたエラー情報記憶手段と、
シミュレータが実行する命令のアドレス情報に基づき、実行中の機能ブロックを特定する機能ブロック特定手段と、
前記機能ブロック特定手段が特定した機能ブロックの前記エラー内容、又は、前記エラー発生箇所を前記エラー情報記憶手段から読み出し、前記エラー内容又は前記エラー発生箇所の少なくとも一方に基づきシミュレータにソフトエラーを設定するエラー設定手段と、
ソフトエラーが設定された後にシミュレータが所定の変数に格納する値と、ソフトエラーが設定されない状態で前記所定の変数に格納された正常値とを比較してソフトエラーの影響を評価する評価手段と、
を有することを特徴とするソフトエラー解析装置。
【請求項２】
前記エラー情報記憶手段には、ソフトエラーのエラー内容、又は、エラー発生箇所に加え、各エラー内容のソフトエラーの発生確率又は各エラー発生箇所のソフトエラーの発生確率が各機能ブロック毎に登録されており、
前記エラー設定手段は、前記発生確率に基づいてシミュレータに発生させるソフトエラーのエラー内容、又は、エラー発生箇所を決定する、
ことを特徴とする請求項１記載のソフトエラー解析装置。
【請求項３】
前記エラー発生箇所は、機能ブロックの戻り値が格納されるレジスタ又は大域変数であり、
前記エラー設定手段は、シミュレータの前記レジスタ又は前記大域変数の少なくとも一方にソフトエラーを設定する、
ことを特徴とする請求項１又は２記載のソフトエラー解析装置。
【請求項４】
前記エラー内容は、設定されたソフトエラーがそのまま前記エラー発生箇所に伝播する第１のエラー、又は、ソフトエラーが設定されたデータが演算対象となった後に前記エラー発生箇所に伝播する第２のエラーであり、
前記エラー設定手段は、シミュレータの前記エラー発生箇所に前記第１のエラー又は前記第２のエラー少なくとも一方を設定する、
ことを特徴とする請求項１〜３いずれか１項記載のソフトエラー解析装置。
【請求項５】
前記発生確率には、エラー内容及びエラー発生箇所に関わらずソフトエラーが一切、発生しない確率が含まれており、
前記エラー設定手段は、前記発生確率に基づきソフトエラーが発生しないと判定した場合、シミュレータにソフトエラーを設定することなく、着目している前記機能ブロックのソフトエラーの解析を終了する、
ことを特徴とする請求項２記載のソフトエラー解析装置。
【請求項６】
前記評価手段は、前記所定の変数に格納する値と正常値が一致しない場合、正常値と一致する値を命令実行サイクル数の前後で探し、探し当てた場合は前記命令実行サイクル数を抽出する、
ことを特徴とする請求項１〜５いずれか１項記載のソフトエラー解析装置。
【請求項７】
ターゲットマイコンのシミュレータに生じさせたソフトエラーが、プログラムに含まれる各機能ブロックに及ぼす影響を解析してエラー情報を作成するエラー情報作成装置であって、
ターゲットマイコンの全てのレジスタと機能ブロックに含まれる全ての命令の組み合わせで、命令実行の直前にレジスタにソフトエラーを発生させるか又は発生させたと仮定するソフトエラー発生手段と、
シミュレータが当該機能ブロックの命令を実行している間、予め特定されている特定変数又は機能ブロックの戻り値が格納される特定レジスタに前記ソフトエラーが伝播したか否かを判定する伝播判定手段と、
前記伝播判定手段が伝播したと判定した前記特定変数又は伝播したと判定した前記特定レジスタをエラー発生箇所として抽出し、
機能ブロック毎に、ソフトエラー発生手段がソフトエラーを発生させた回数に対する前記特定変数に伝播した回数の比率又は前記特定レジスタに伝播した回数の比率から各エラー発生箇所の発生確率を算出するエラー情報取得手段と、
を有することを特徴とするエラー情報作成装置。
【請求項８】
前記伝播判定手段は、シミュレータが当該機能ブロックの命令を実行している間、ソフトエラーを発生させた又は発生させたと仮定するレジスタのデータが演算対象となる否かを監視し、
前記エラー情報取得手段は、前記特定変数に伝播する回数を演算対象となった場合とならない場合に分けてカウントし、前記特定レジスタに伝播する回数を演算対象となった場合とならない場合に分けてカウントし、各エラー発生箇所毎に演算対象となった場合とならない場合とに分けて前記発生確率を算出する、
ことを特徴とする請求項７記載のエラー情報作成装置。
【請求項９】
前記エラー情報取得手段は、ソフトエラー発生手段がソフトエラーを発生させた回数に対する前記特定変数と前記特定レジスタのどちらにも伝播しない回数の比率から、ソフトエラーが伝播しない確率を算出する、
ことを特徴とする請求項７又は８記載のエラー情報作成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレータにソフトエラーを発生させてターゲットマイコンに生じる影響を解析するソフトエラー解析装置に関する。
【背景技術】
【０００２】
マイコンがプログラムを実行している際に、放射線（例えば中性子線やα線など）によりメモリ障害が生じうることが知られている。メモリ障害により、レジスタ、ＲＡＭ、ＲＯＭなどのメモリに記憶されているデータが変わってしまうと、期待されているマイコンの動作が行われない場合がある。このため、メモリ障害がマイコンの動作にどのような影響を与えるかを評価したいという要請がある。
【０００３】
このような要請に対しシミュレーション装置を用いる手法が知られている。このような手法では、シミュレーション装置を用いてマイコンの機能をシミュレートし、メモリ障害が発生した場合のマイコンの動作を検証する（例えば、特許文献１参照。）。特許文献１には、障害処理ファームウェアの制御によって疑似ソフトエラーの発生を指示し、疑似ソフトエラーを発生させたいクロック数を保持させておき、該クロック数になると疑似ソフトエラーを発生させる情報処理装置が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平０５−０３５６１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に記載された技術では、指定したクロック数でなければソフトエラーを発生させることができないという問題がある。メモリ障害は時間的・空間的にランダムに発生することが知られており、ＣＰＵやメモリなどの微細化が進むにつれ無視できない頻度で発生する。このため、特許文献１のようにある命令の実行時にのみソフトエラーを発生させるだけでは、メモリ障害が発生した際にマイコンに生じる影響を見極めることは困難である。
【０００６】
一方、全てのクロック数でソフトエラーを発生させるなどすれば、時間的・空間的に網羅性を持ったメモリ障害をシミュレーション装置で再現することは不可能ではない。しかし、全てのクロック数かつ全てのレジスタ（好ましくはさらに全てのビット）に対しメモリ障害を再現しかつ検証するには膨大な時間がかかり、現実的には実現困難である。
【０００７】
そこで、本発明は、時間的・空間的に網羅性を持ったメモリ障害のシミュレーションをより短時間で実現可能なソフトエラー解析装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、ターゲットマイコンのシミュレータにソフトエラーを発生させて該ターゲットマイコンに生じる影響を解析するソフトエラー解析装置であって、前記ターゲットマイコンが実行するプログラムに含まれる各機能ブロック毎に、ソフトエラーのエラー内容、又は、エラー発生箇所の少なくとも１つが登録されたエラー情報記憶手段と、シミュレータが実行する命令のアドレス情報に基づき、実行中の機能ブロックを特定する機能ブロック特定手段と、前記機能ブロック特定手段が特定した機能ブロックの前記エラー内容、又は、前記エラー発生箇所を前記エラー情報記憶手段から読み出し、前記エラー内容又は前記エラー発生箇所の少なくとも一方に従ってシミュレータにソフトエラーを設定するエラー設定手段と、ソフトエラーが設定された後にシミュレータが所定の変数に格納する値と、ソフトエラーが設定されない状態で前記所定の変数に格納された正常値とを比較してソフトエラーの影響を評価する評価手段と、を有することを特徴とする。
【発明の効果】
【０００９】
時間的・空間的に網羅性を持ったメモリ障害のシミュレーションをより短時間で実現可能なソフトエラー解析装置を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】ソフトエラー解析装置の概略的な特徴を説明する図の一例である。
【図２】ソフトエラー解析装置がエラー情報ライブラリを用いてソフトエラーを解析する動作を模式的に説明する図の一例である。
【図３】時間・空間に対し網羅的に発生させたメモリ障害の影響をシミュレートする方法を説明する図である。
【図４】時間・空間に対しランダムに発生させたメモリ障害の影響をシミュレートする方法を説明する図である。
【図５】ソフトエラー解析装置の概略構成図の一例である。
【図６】命令セットシミュレータが実現するターゲットシステムの概略構成図の一例である。
【図７】準備部の、実行部の機能ブロック図の一例である。
【図８】エラー情報ライブラリ等について説明する図の一例である。
【図９】エラー情報ライブラリの作成手順を示すフローチャート図の一例である。
【図１０】シミュレーションの実行手順を示すフローチャート図の一例である。
【発明を実施するための形態】
【００１１】
以下、本発明を実施するための形態について図面を参照しながら説明する。しかしながら、本発明の技術的範囲が本実施の形態に限定されるものではない。
【００１２】
図１は、本実施形態のソフトエラー解析装置１００の概略的な特徴を説明する図の一例である。なお、実施形態では説明上、メモリ障害とは例えば放射線によりメモリに記憶されたデータが変わってしまうことを、ソフトエラーは意図的にメモリ障害を生じさせるこという。メモリ障害によりソフトエラーが生じるので厳密に両者を区別しなくてもよい。
【００１３】
本実施形態では、メモリ障害が発生した際の影響を予め関数やタスクなどのソフトウェアの機能毎に見積もっておく。影響とは、ソフトエラーを発生させた場合に故障に繋がる条件を満たす事象が発生することをいう。故障に繋がる条件は、マイコンや車両の開発者などが定義しておくことができる。例えば、マイコンのＣＰＵが関数Ａを実行している際に、メモリ障害が発生したと仮定すると、故障に繋がる可能性が高いのはメモリ障害が、マイコンの出力などの所定の部位に伝わった場合である。
【００１４】
所定の部位に伝わるのは、大域変数（関数Ａだけでなく他の関数Ｂ等がアクセスする）が書き換わったり、関数の戻り値が書き換わったりすることで生じやすい。したがって、大域変数や関数の戻り値が書き換わることが上記の事象となる。
【００１５】
そこで、まず、ソフトエラー解析装置１００は、関数Ａの各命令をＣＰＵが実行中に、任意のレジスタにソフトエラーを生じさせた場合、そのソフトエラーが大域変数又は戻り値用のレジスタ（図１ではレジスタＢ）に格納されるか否かを判定する。
【００１６】
(i)  図１では、関数Ａの命令１〜ｎのそれぞれについて、例えばレジスタＡにソフトエラーが発生したと仮定する。実際に、ランダムなデータを設定してもよいが、仮定するだけでよい。
【００１７】
(ii)  次に、ソフトエラー解析装置１００は、レジスタＡに記憶されたデータが、その後の命令（命令１の実行前にソフトエラーを設定した場合は命令１〜ｎ）の実行過程で大域変数ａ、ｂ又はレジスタＢに格納されるか否かを判定する（以下、大域変数ａ、ｂ又はレジスタＢに格納されることを「ソフトエラーが伝播する」という。）。
【００１８】
(iii)  ソフトエラーが伝播した場合、ソフトエラー解析装置１００はその回数をカウントする。
【００１９】
(iv)  この(i)〜(iii)の処理を、関数Ａの各命令に対し行うことで、ソフトエラーの発生回数に対するソフトエラー伝播回数が求められるので、関数Ａにおけるソフトエラー伝播確率を求めることができる。
【００２０】
(v)  ソフトエラー解析装置１００は、全ての関数に対し同様にエラー伝播確率を求める。各関数のソフトエラー伝播確率をエラー情報ライブラリ３４に保存する。このエラー情報ライブラリ３４を用いることで、上記の影響の有無をシミュレートすることができる。
【００２１】
図２は、ソフトエラー解析装置１００がエラー情報ライブラリ３４を用いてソフトエラーを解析する動作を模式的に説明する図の一例である。エラー情報ライブラリ３４により関数の実行時に故障に繋がる可能性が高いソフトエラーの伝播確率が分かっている。このソフトエラーの伝播確率を用いて関数単位でソフトエラーを生じさせ、正常な演算結果と比較することで、メモリ障害の影響を解析できる。
【００２２】
(i)ソフトエラー解析装置１００は、任意のタイミングでＣＰＵが実行中の関数を特定する。また、エラー情報ライブラリ３４からその関数のソフトエラー伝播確率を読み出す。
【００２３】
(ii)  その関数の実行が終了したら、ソフトエラー伝播確率に応じて大域変数又は関数の戻り値を書き換える。これにより関数の実行結果にメモリ障害が生じたことがシミュレーションされる。以下、この処理をエラー注入処理という。
【００２４】
(iii)  ソフトエラー解析装置１００は、エラー注入後、所定時間、上記の影響に関係する変数（以下、着目変数という。例えば、アクチュエータが接続されたI/Oに値が設定される変数）に格納される値と出力タイミングを収集する。図では着目変数はＲＡＭにあるが命令のコードから着目変数の値を取得してもよい。
【００２５】
(iv)  ソフトエラー解析装置１００は、正常な動作結果（エラー注入されていない）と着目変数の値を比較して、着目変数の値が不正値となった回数をカウントする。
【００２６】
エラー注入した回数に対し、着目変数の出力や出力タイミングが不正となった回数が分かるので、開発者等は、マイコンで生じたメモリ障害が最終的にターゲットシステムに影響する程度を解析できる。
【００２７】
このように、本実施形態のソフトエラー解析装置１００は、メモリ障害が故障に関係しうる確率を予め関数などの機能ブロック単位にソフトエラー伝播確率としてエラー情報ライブラリ３４に登録しておく。したがって、各レジスタにソフトエラーを生じさせるソフトエラー解析方法よりもはるかに試行回数を低減できる。また、エラー伝播確率が小さい関数ではエラー注入が不要になるのでエラー注入の影響を解析する時間も削減できる。
【００２８】
〔従来のシミュレーション〕
始めに、従来のメモリ障害のシミュレーションについて説明する。メモリ障害は放射線が集積回路に衝突することで発生する一過性の障害なので、
１）時間的・空間的にランダムに発生すること、２）一過性の障害であること、が特徴である。したがって、１）の観点から上記のように時間・空間に対して網羅性を考慮してどのくらいの時間・空間に影響が及んだかを検証する必要がある。また、シミュレーション装置が、２）の観点からターゲットシステムへの影響を見極めようとするとある程度の時間、影響を観測する必要がある。
【００２９】
図３は、時間・空間に対し網羅的に発生させたメモリ障害の影響をシミュレートする方法を説明する図である。図３のサイクルとは１クロックである。シミュレーション装置は、時間的な網羅性のため１クロック毎にレジスタの状態を観測する。図３では開始サイクルをｎとし、n-1サイクル目までソフトを動作させメモリ障害の影響を判定する。
【００３０】
また、空間についても網羅性を持たせるため、全レジスタの全ビットに対して順にソフトエラーを発生させる。例えばデータ長が３２bitの場合、３２回、順番にレジスタのビットを反転させてソフトエラーを発生させる。
【００３１】
あるビットにソフトエラーを発生させたらシミュレーション装置は、シミュレーションを再開し、ターゲットシステムへの影響の有無が判断できる時間までシミュレーションを継続し、影響の有無を判定する。最大でn-1サイクル目まで継続すればよいが、その後のレジスタの状態を監視して上書きされれば影響なし、読み取られて演算されたり別のレジスタに書き込まれれば影響あり、と判定され、次のソフトエラーに移行する。
【００３２】
この手順をサイクルｎにおいて全てのレジスタの全てのビットに対して繰り返す。全てのレジスタの全てのビットに対して繰り返し実行すると、サイクルを１つ進めサイクルｎ＋１において同様のシミュレーションを行う。
【００３３】
したがって、時間的・空間的に網羅性を持ってシミュレーションを行おうとすると、サイクル数×レジスタ数×ビット数の回数だけシミュレーション（試行）する必要がある。また、シミュレーションの各試行時に、ターゲットシステムへの影響の有無が判断できる時間までサイクルを進める必要がある。したがって、現実的な時間内に実現することは困難である。
【００３４】
図４は、時間・空間に対しランダムに発生させたメモリ障害をシミュレートする方法を説明する図である。シミュレーション装置は、ソフトウェアを実行しながら、ソフトエラーを発生させるタイミングと、発生させるビットをランダムに決定する。そして、ソフトエラーを発生させ、ターゲットシステムへの影響の有無が判断できる時間、シミュレーションを継続し、影響の有無を判定する。そして、統計的に有意な回数に達したら終了する。
【００３５】
ソフトエラーの発生のパターン数は、図３のように「サイクル数×レジスタ数×ビット数」として既知なので標本化定理などに基づき、統計的に有意な回数を決定することができる。したがって、図３の網羅的な方法よりも試行回数は削減できる。また、別の方法として影響の有無の判定結果を逐次集計して、一定の割合になるまで継続する方法がある。
【００３６】
しかしながら、図４の方法の場合、時間的・空間性にランダムに発生しかつ一過性という特性があるメモリ障害の発生を、統計的に有意な回数の試行によりカバーしていると断言できない。したがって、メモリ障害をシミュレートする上では不十分である。
【００３７】
〔構成例〕
図５（ａ）はソフトエラー解析装置１００の正面図の一例を、図５（ｂ）はハードウェア構成図の一例をそれぞれ示す。ソフトエラー解析装置１００は、パーソナルコンピュータやワークステーションなどの情報処理装置である。図のようなデスクトップ型でもノート型又はラップトップ型でもよい。また、サーバとしてのソフトエラー解析装置にクライアントが処理を要求してもよい。
【００３８】
ソフトエラー解析装置１００は、バスで相互に接続されたＣＰＵ１０１、ＲＡＭ１０２、ＲＯＭ１０３、記憶媒体装着部１０４、通信装置１０５、入力装置１０６、表示制御部１０７及びＨＤＤ（Hard  Disk  Drive）１０８を有する。ＣＰＵ１０１は、ＯＳ（Operating  System）や命令セットシミュレータのプログラム１１０をＨＤＤ１０８から読み出して実行することで種々の機能を提供すると共に、各ブロックを制御する。ソフトエラー解析装置１００は、ＣＰＵ１０１がプログラム１１０を実行することで後述する各機能を実現する。
【００３９】
ＲＡＭ１０２はＣＰＵ１０１がプログラム１１０を実行する際に命令や必要なデータを一時保管する作業メモリである。ＲＯＭ１０３はＢＩＯＳ（Basic Input Output System）やＯＳを起動するためのプログラム等が記憶されている。
【００４０】
記憶媒体装着部１０４は記憶媒体１０９が着脱可能に構成されており、記憶媒体１０９に記録されたデータを読み込み、また、ＲＡＭ１０２のデータを書き込む際に使用される。なお、記憶媒体１０９は、Blu-rayディスク、コンパクトディスク、ＤＶＤ（Digital Versatile Disk）等の光記録媒体やＳＤカード、マルチメディアカード、ｘＤカードなどである。
【００４１】
通信装置１０５は、例えばイーサネット（登録商標）カードなどネットワークに接続するためのインターフェイスである。通信プロトコル（例えば、ＴＣＰ／ＩＰ、ＨＴＴＰ、ＦＴＰＳＭＢ等）の処理はＯＳ、ミドルウェア及びアプリケーションプログラムが受け持つ。入力装置１０６は、キーボードやマウスなどでありユーザからの様々な操作指示を受け付ける。表示制御部１０７は、アプリケーションプログラムが指示する画面情報に基づき所定の解像度や色数等で液晶などのディスプレイ１２０に描画する。
【００４２】
ＨＤＤ１０８はＯＳ、アプリケーションプログラム及びデータを記憶するための大容量の不揮発メモリである。ＨＤＤ１０８の他にＳＳＤ（Flash Solid State Drive）等が用いられることがある。本実施形態では命令セットシミュレータのプログラム１１０が記憶されている。このプログラム１１０は、記憶媒体１０９に記憶された状態で配布されたり、ネットワークを介して接続された所定のサーバからダウンロードされる形態で配布される。
【００４３】
〔命令セットシミュレータの動作〕
図６（ａ）は、命令セットシミュレータが実現するターゲットシステム２００の概略構成図の一例を示す。命令セットシミュレータは、ターゲットとなるマイコンのハードウェアをソフト的に再現し、その動作を模擬する。ソフト的に再現されたマイコンをターゲットシステム２００と称している。すなわち、命令セットシミュレータは、マイコンに搭載されたＣＰＵの命令セットとアーキテクチャ（データ長、命令のオペコード長、オペランド数、レジスタ数、アドレス空間、アドレッシングモードなど）をソフトエラー解析装置１００内でソフト的に作成し、命令実行時のレジスタや変数の状態を再現する。図示した以外にもマイコンが有する機能を再現できるが省略されている。ターゲットシステム２００はマイコンの実機がなくてもソフトウェアを実行した際の動作を再現することができる。
【００４４】
ターゲットシステム２００は、命令セットシミュレート部１５、イベント管理部１１、Ｉ／Ｏシミュレート部１２、ターゲットレジスタ１３、及び、ターゲットメモリ１４を有している。ターゲットシステム２００は、車両のＥＣＵ（Electronic Control Computer）に搭載されるマイコンとそのマイコンで動作するソフトウェアである。
【００４５】
ターゲットメモリ１４は、ターゲットのマイコンのアドレス空間を再現し保持する。具体的には、ターゲットのマイコンが有するＲＯＭ、実行対象のソフトウェアが格納されるＲＡＭ、マイコンが使用するデータ（車両制御のためのテーブル等の他、ソフトウェア実行中に作成される変数などを含む）、メモリマップドＩ／Ｏなどが再現される。ターゲットレジスタ１３には、マイコンのＣＰＵが有する全てのレジスタの内容が再現される。上記のように、レジスタ１〜ｍのいずれか１つは関数の戻り値が格納されるレジスタである。説明のため、レジスタｍを戻り値が格納されるレジスタとする。
【００４６】
Ｉ／Ｏシミュレート部１２は、センサやアクチュエータなどの周辺装置の機能をソフトウェアでモデル化したものである。Ｉ／Ｏシミュレート部１２は、命令セットシミュレート部１５からセンサの信号の取得依頼を受け付け、信号に対応するデータを用意する。また、アクチュエータに設定されるパラメータを受け付け制御結果を通知する。また、タイマやセンサなどが生じさせる割込みを発生させる。
【００４７】
イベント管理部１１は、Ｉ／Ｏシミュレート部１２へのデータの入出力や割込みに応じて予め定められているイベントを発生させ命令セットシミュレート部１５に通知する。
【００４８】
命令セットシミュレート部１５は、ターゲットメモリ１４からソフトウェアの命令を取り出し、デコード、実行、ターゲットレジスタ１３への書き込みなどを行う。実行により、必要であればターゲットメモリ１４にデータを書き込むことやターゲットメモリ１４からデータを読み出すこともある。また、命令の実行結果に応じてＩ／Ｏシミュレート部１２に対し、その命令の演算結果を反映する。また、イベント管理部１１がイベントを発生させた場合は、イベントに応じた処理（命令の実行）に分岐する。このように、ターゲットレジスタ１３とターゲットメモリ１４（及び、イベント管理部１１とＩ／Ｏシミュレート部１２にも）には、マイコンがソフトウェアを実行した際の状態が再現される。
【００４９】
ターゲットシステム２００はソフトエラー解析装置１００により制御される。ソフトエラー解析装置１００は、シミュレーションの開始・停止、任意のレジスタの読み出し・レジスタへの書き込み、ターゲットメモリ１４の読み出し・書き込み、イベント管理部１１に対し任意のイベントを発生させること、及び、Ｉ／Ｏシミュレート部１２にデータを出力・入力すること等が可能になっている。ソフトエラー解析装置１００はエラー情報ライブラリ３４を作成する準備部２１と、エラー情報ライブラリ３４を用いたシミュレーションを行う実行部２２を有している。
【００５０】
図６（ｂ）はターゲットメモリ１４のメモリマップの一例を示す図である。このようにマイコンが実行するアドレス空間にはどのアドレスに何が記憶されているかが明らかになっている。例えば、ターゲットソフトウェアの領域にはアドレス順にオブジェクトコード（図では人間が判読可能なアセンブリ（ニーモニック）に変換されている）が記憶されている。オブジェクトコードは１つの"_main"関数からひとまとまりの機能を提供するいくつかの関数を呼び出してマイコンに期待される性能を発揮する。図６（ｂ）では"BRA  Func１"が関数Func１を、"BRA  Func２"が関数Func２を呼び出すための命令である。例えば、「MOV R0,R1」はレジスタR1の値をレジスタR0に格納する命令である。よって、レジスタR1がソース、レジスタR0がディスティネーションとなる。関数の実体は「関数名：」を先頭アドレスにして記述されている。「関数名：」から次の「関数名：」の手前のアドレスの命令までが１つの関数である。なお、このような記述は一例であって、オブジェクトコードがどのように記述されるかはマイコンの仕様に依存する。
【００５１】
また、データ領域（主にマイコンのＲＡＭ領域）には各種のデータが記憶される。関数が使用する変数（ローカル変数、大域変数）に格納された値は「変数名」が示すデータ領域のアドレスに記憶される。例えば、関数Func１、Func2は変数"VAR1"を使用しているが、この変数に格納されるデータはデータ領域の"VAR1"に対応するアドレスに記憶されている。なお、本実施形態ではローカル変数、大域変数を通常の意味（例えば、ある関数のみが使用する変数をローカル変数、２つ以上の関数が使用する関数を大域変数）で使用している。
【００５２】
〔エラー情報ライブラリの作成〕
以下、エラー情報ライブラリの作成について説明する。図７（ａ）は準備部２１の機能ブロック図を、図８（ａ）はエラー情報ライブラリ３４の作成について模式的に説明する図の一例を、図９はエラー情報ライブラリ３４の作成手順を示すフローチャート図の一例をそれぞれ示す。図９の手順は１つの関数毎に行われる。
【００５３】
図７（ａ）に示した、ソフトエラー発生部３１はレジスタ１〜ｍに順番にソフトエラーを発生させるか又は発生させたものと仮定する。伝播判定部３２はレジスタ１〜ｍの１つずつにソフトエラーが発生したとして、それが大域変数又は関数の戻り値に伝播したか否かを判定する。ライブラリ作成部３３は、伝播判定部３２の判定結果に応じて各関数のソフトエラー伝播確率を算出する。そして、各関数のソフトエラー伝播確率をエラー情報ライブラリ３４に保存する。
【００５４】
＜Ｓ１０＞
ソフトエラー発生部３１はターゲットソフトウェア（アセンブリコード）とメモリマップから関数がアクセスする大域変数を特定する。この大域変数と関数の戻り値がソフトエラーの伝播先となる。これら以外のデータの格納先をソフトエラーの伝播先とすることも可能であり、マイコンの仕様に依存する。
【００５５】
大域変数の特定方法には例えば以下の２つの方法がある。１つは、予め大域変数の名前をリストアップしておき、ターゲットソフトウェアの領域の関数からその名前の関数を抽出する方法である。もう１つは、開発者などがローカル変数にはＴＭＰ１〜ＴＭＰｎなどの決まった名前を付与する規則を利用する。ターゲットソフトウェアの領域の関数において、２つ以上の関数から使用される変数を抽出し、そこからローカル変数に付与される名前の変数を削除する。残った変数を大域変数と決定する。
【００５６】
＜Ｓ２０＞
ソフトエラー発生部３１はソフトエラーを発生させるレジスタを順番に決定する。図８（ａ）に示すように着目している関数Ａがｎ個の命令を有しているものとする。ソフトエラー発生部３１は時間的・空間的にソフトエラーの発生箇所を網羅するためレジスタ１〜ｍに対し順番にソフトエラーを発生させたと仮定する。
【００５７】
＜Ｓ３０＞
また、ソフトエラー発生部３１は、時間的・空間的に網羅するため命令１〜ｎに対しても同様に、順番に、命令の直前にソフトエラーが発生したと仮定する。Ｓ２０とＳ３０から、次のような組み合わせで順番でソフトエラーが発生させられる。
レジスタ１に対し命令１の直前
レジスタ１に対し命令２の直前
…
レジスタ１に対し命令ｎの直前
レジスタ２に対し命令１の直前
レジスタ２に対し命令２の直前
…
レジスタ２に対し命令ｎの直前
…
＜Ｓ４０＞
伝播判定部３２はソフトエラーが発生されられる毎に、ソフトエラーが発生されられたレジスタがそれ以降の命令でどのように使われるかをトレースする。例えば、図８（ａ）に示すように、レジスタ１に対し命令３の直前にソフトエラーが発生したとする。命令３はレジスタ１を使って演算した結果をレジスタ２に格納した。命令４はレジスタ２のデータを大域変数ａに格納した。この場合、伝播判定部３２はソフトエラーが大域変数ａに伝播したと判定する。また、例えば、命令４がレジスタ２のデータをレジスタｍに格納した場合は、ソフトエラーが関数の戻り値に伝播したと判定する。なお、ソフトエラーが大域変数と関数の戻り値に両方に伝播することもある。
【００５８】
さらに、伝播判定部３２は、大域変数や関数の戻り値にソフトエラーが伝播した場合、どのように伝播したかについて判断することができる。すなわち、エラー値（ソフトエラーが発生させられたレジスタの値）が大域変数や関数の戻り値に現れるまでの経路に着目する。エラー値が一度も演算処理されないで大域変数や関数の戻り値に格納された場合、レジスタの任意の１ビットが不正値であるとする。このようなエラーを「１ビットエラー」と称す。一度以上、演算処理のソースとして使用された場合、ディスティネーションのレジスタには演算結果として加工された値が格納されるため、どのような値になるかは様々である。このようなエラーを「ランダムエラー」と称す。
【００５９】
一方、伝播判定部３２が命令ｎまでトレースしてもレジスタ１のデータが大域変数にも関数の戻り値にも格納されない場合、伝播しないと判定する。また、命令ｎが実行されるまでに、ソフトエラーが発生させられたレジスタが演算で使用されことなく別の値で上書きされると、そのソフトエラーは伝播しないことになる。
【００６０】
＜Ｓ５０＞
ソフトエラー発生部３１は着目している関数Ａの全ての命令ｎまでソフトエラーを発生させたか否かを判定する。
【００６１】
＜Ｓ６０＞
命令ｎまで終了していない場合（Ｓ５０のＮｏ）、ソフトエラー発生部３１はiを１つ大きくして処理はステップＳ３０に戻る。
【００６２】
＜Ｓ７０＞
命令ｎまで終了した場合（Ｓ５０のＹｅｓ）、ソフトエラー発生部３１は全てのレジスタｍまでソフトエラーを発生させたか否かを判定する。全てのレジスタｍまで終了していない場合、処理はＳ２０に戻る。
【００６３】
＜Ｓ８０＞
全てのレジスタｍまで終了した場合、ライブラリ作成部３３は着目している関数のエラー伝播確率を算出する。
【００６４】
図８（ｂ）は１つの関数のソフトエラー伝播確率を説明する図の一例である。上述したように、「ソフトエラーの伝播先」には関数の戻り値、大域変数、関数の戻り値＆大域変数、及び、伝播なしがある。図８では大域変数はａだけだが、着目している関数が使用しソフトエラーが伝播した全ての大域変数が登録される。また、１つの「ソフトエラーの伝播先」に対し「エラー内容」として、１ビットエラーとランダムエラーが登録される。
【００６５】
伝播判定部３２は、ソフトエラー発生部３１がソフトエラーを発生させた回数Nに対し、それぞれの事象の発生回数からソフトエラー伝播確率を算出する。どの事象も発生しない回数も考慮すると、各事象のソフトエラー伝播確率の合計は１００％となる。エラー情報ライブラリ３４には各関数について求められたエラー伝播確率が登録される。なお、積算値は、後述するエラー注入時にどの事象が発生したかを算出するために使用される。
【００６６】
このようなエラー情報ライブラリ３４の作成方法では、サイクル数毎にレジスタにソフトエラーを発生させる必要がなく、「関数の数×レジスタ数×関数の命令数」の試行回数でエラー情報ライブラリ３４を作成できる。また、エラー情報ライブラリ３４の作成時はターゲットシステムへの影響がなくなるまで監視する必要がないので（関数の実行が終わるまででよい）現実的な時間内に作成できる。すなわち、エラー情報ライブラリ３４を作成することで時間的・空間的な網羅性を関数に集約でき、シミュレーション時には時間軸だけ考慮すればよいことになる。
【００６７】
なお、図８（ｂ）では、ソフトエラーの伝播先、エラー内容、及び、ソフトエラー伝播確率が求められているが、ソフトエラーの伝播先を区別しなくてもよいし、エラー内容を区別しなくてもよい。これらの場合、ソフトエラーが伝播した確率だけ求められる。シミュレーション時は確率に応じてソフトエラーの注入の有無だけ判断される（注入先及びエラー内容は組み合わせてシミュレーションされる）。一方、確率が求められなくても、ソフトエラーの伝播先又はエラー内容だけが求められていてもよい。シミュレーション時には、ソフトエラーの伝播先又はエラー内容に応じて必ずソフトエラーが注入される。
【００６８】
また、図３と同様の手順でエラー情報ライブラリ３４を作成してもよい。つまり、サイクルを変えながら各レジスタにソフトエラーを発生させ、大域変数と関数の戻り値への伝播の有無をトレースする。この場合、ターゲットシステム２００に必要な入力値はＩ／Ｏシミュレート部１２等を使用して、実際の制御の典型値を用いる。この方法でも、エラー情報ライブラリ３４は１回作成しておけばよいので現実的な時間内に作成できる。
【００６９】
〔エラー情報ライブラリを用いたシミュレーションの実行〕
図７（ｂ）は準備部２１の機能ブロック図を、図１０はシミュレーションの実行手順を示すフローチャート図の一例をそれぞれ示す。準備部２１は、関数特定部３９、エラー注入タイミング決定部４０、エラー注入部３５、データ収集部３６、及び、比較部３７を有し、上記のエラー情報ライブラリ３４と正常値データベース３８を有している。エラー情報ライブラリ３４と正常値データベース３８はソフトエラー解析装置１００がアクセス可能なネットワーク上にあってもよい。
【００７０】
正常値データベース３８はエラー注入することなく、ソフトエラー解析装置１００がターゲットシステム２００を動作させた場合に、着目変数に格納される値が登録されている。着目変数は、マイコンの故障に繋がる又は故障と呼んでよい事象に関係する変数であり、主に出力に関係する変数である。具体的には、アクチュエータ、センサ、スイッチが接続されたI/Oに出力される変数、ドライバ回路に出力される変数等である。着目変数の正常値は例えばサイクル数に対応づけて記録されている。出力に関する変数はメモリマップのＩ／Ｏ領域にアドレスを有するので、Ｉ／Ｏ領域のアドレスに値が設定される変数が着目変数である。
【００７１】
＜Ｓ１１０＞
ソフトエラー解析装置１００はターゲットシステム２００のシミュレーションを開始する。これにより、命令セットシミュレート部１５はターゲットメモリ１４からサイクル毎に命令を読み出しマイコンのアーキテクチャに従って、ターゲットシステム２００の状態を更新していく。マイコン上でよく呼ばれる関数は命令セットシミュレート部１５が実行する頻度も高くなる。
【００７２】
＜Ｓ２１０＞
エラー注入タイミング決定部４０はエラーを注入するタイミング（例えばサイクル数）をランダムに決定する。メモリ障害は時間にランダムに発生するため、注入タイミングをランダムにすることで実現象を再現することができる。タイミングの決定はシミュレート開始前に決めておいてもよいし、シミュレート中に決定してもよい。
【００７３】
＜Ｓ１２０＞
関数特定部３９は、エラー注入タイミングに至ったか否かを判定する。例えば、命令セットシミュレート部１５が制御するサイクル数を監視して、エラー注入タイミング決定部４０が決定したサイクル数と比較する。
【００７４】
＜Ｓ１３０＞
エラー注入タイミングに至った場合、関数特定部３９はシミュレーションをいったん停止し、現在、実行中の関数の終了アドレスを特定する。終了アドレスを特定するのは、関数の実行の完了時にエラーを注入するからである。関数特定部３９は、停止時のプログラムカウンタの値を命令セットシミュレート部１５から取得し、メモリマップのアドレスを参照して実行中の関数と、その関数の終了アドレスを特定する。
【００７５】
＜Ｓ１４０＞
実行部２２はシミュレーションを再開する。
【００７６】
＜Ｓ１５０＞
関数特定部３９は実行中のプログラムカウンタのアドレスが、Ｓ１３０で特定した終了アドレスになり、別のアドレスになったことで関数の実行が終了したことを判定する。
【００７７】
＜Ｓ１６０＞
関数特定部３９はシミュレーションをいったん停止する。これによりターゲットシステム２００はＳ１３０で特定した関数の実行が完了した状態となる。関数特定部３９は、エラー注入部３５に、エラー注入する対象の関数とエラー注入タイミングであることを通知する。
【００７８】
＜Ｓ２２０＞
エラー注入部３５はエラー情報ライブラリ３４から実行が完了した関数のエラー伝播確率を読み出して、エラーを注入するか否か、エラーを注入する場合はどの事象のエラーを注入するかを判定する。例えば、０〜１００の数値をランダムに発生させ、その数値がエラー伝播確率の積算値に対し対応する事象が、注入されるエラーである。これにより、エラー伝播確率に応じてソフトエラーの影響を決定できる。なお、伝播なしと決定された場合、エラー注入なしにシミュレーションが再開される。これにより試行時間を低減できる。
【００７９】
＜Ｓ１７０＞
エラー注入部３５はＳ２２０で決定したエラーをレジスタｍ又は大域変数の少なくとも一方に注入する。
【００８０】
＜Ｓ１８０＞
実行部２２はシミュレーションを再開する。
【００８１】
＜Ｓ１９０＞
データ収集部３６は、所定時間、着目変数に格納される値をサイクル数に対応づけて収集する。所定時間とは着目変数に影響があるか否かを判定できる充分な時間であり、任意に決めることができる。
【００８２】
この後、処理はステップＳ１１０に戻り、次のエラー注入タイミングになるとエラーが注入される。エラー注入の回数はソフトエラーの評価対象となる時間スケール（メモリ障害が発生する可能性がある時間幅に実行されるサイクル数）に基づき、所望の精度が得られる回数だけ繰り返す。つまり、１時間に１回、メモリ障害が発生すると想定した場合、１時間に実行される各関数の回数に応じた比率で、各関数にエラー注入できるまで繰り返す。または、ターゲットシステムへの影響が一様になるまで（例えば全ての関数に対し所定回数以上エラーが注入されるまで）行う。
【００８３】
比較部３７は、データ収集部３６が収集した試験結果の着目変数の値と正常値データベース３８の正常値を比較する。比較はシミュレーション中にリアルタイムに行ってもよいし、シミュレーションが終わった後に行ってもよい。比較部３７は試験結果と正常値の着目変数の値が一致しない回数をカウントする。また、一致しない場合、タイミングがずれて一致する場合があるため、正常値の前後のサイクルで一致する試験結果を探し、タイミングずれ量を抽出する。ある程度の数（例えば数十〜数百）のサイクル内に一致する試験結果がない場合、完全不一致とする。
【００８４】
比較部３７は試行回数と、一致しない回数をカウントしておくので、マイコンや車両の開発者などはメモリ障害がターゲットシステム２００に与える影響を定量的に把握することが可能になる。
【００８５】
以上説明したように、本実施形態のソフトエラー解析装置１００は、メモリ障害による時間的・空間的な影響を関数毎のソフトエラー伝播確率に反映させるので、試行回数を削減できる。すなわち、関数単位で大域変数及び関数の戻り値にソフトエラーを発生させればよいので、サイクル数毎にレジスタかつビット位置毎にソフトエラーを発生させる場合と比べて大幅に試行回数を削減できる。
【００８６】
また、エラー注入時、確率的に「伝播なし」と決定される場合があり、このケースではシミュレーションを実施する必要がないためシミュレーションの実行時間を削減できる。
【符号の説明】
【００８７】
１３    ターゲットレジスタ
１４    ターゲットメモリ
１５    命令セットシミュレート部
３１    ソフトエラー発生部
３２    伝播判定部
３３    ライブラリ作成部
３４    エラー情報ライブラリ
３５    エラー注入部
３６    データ収集部
３７    比較部
３９    関数特定部
１００    ソフトエラー解析装置
２００    ターゲットシステム
【図１】
2014160421.tif 000003
【図２】
2014160421.tif 000004
【図３】
2014160421.tif 000005
【図４】
2014160421.tif 000006
【図５】
2014160421.tif 000007
【図６】
2014160421.tif 000008
【図７】
2014160421.tif 000009
【図８】
2014160421.tif 000010
【図９】
2014160421.tif 000011
【図１０】
2014160421.tif 000012