(57)【特許請求の範囲】
【請求項１】
計算機を用いて、シミュレーションを行いながら組込みシステムの検証を行う方法であって、
前記組込みシステムのマイコンの故障に関する情報を注入するレジスタと前記故障の注入のタイミングを指定する第１のステップ、
前記タイミングで割り込みをかける第２のステップ、
前記割り込みで出力されるレジスタ値のうち、前記指定されたレジスタの値を故障値に書き換える第３のステップ、
前記故障値に書き換えられたレジスタ値を前記故障の注入のタイミングで書き戻す第４のステップ
を有することを特徴とするマイコン故障注入方法。
【請求項２】
前記第２のステップから前記第４のステップの間における、故障注入の実行時にクロックカウンタを加速することを特徴とする請求項１記載のマイコン故障注入方法。
【請求項３】
前記第２のステップから前記第４のステップの間における前記クロックカウンタの加速は、前記故障注入の実行時の時間の総和が、通常のクロックカウンタの周期より小さくなるように設定することを特徴とする請求項２記載のマイコン故障注入方法。
【請求項４】
メカニズム、ハードウェア、及びソフトウェアで構成される組込みシステムの検証を行うマイコン故障注入システムであって、
前記組込みシステムのマイコンの故障に関する情報を注入するレジスタと前記故障の注入のタイミングを指定する第１の手段、
前記タイミングで割り込みをかける第２の手段、
前記割り込みで出力されるレジスタ値のうち、前記指定されたレジスタの値を故障値に書き換える第３の手段、
前記故障値に書き換えられたレジスタ値を前記故障の注入のタイミングで書き戻す第４の手段、
を有することを特徴とするマイコン故障注入システム。
【請求項５】
前記第２の手段から前記第４の手段による、故障注入の実行時にクロックカウンタを加速する手段を有することを特徴とする請求項４記載のマイコン故障注入システム。
【請求項６】
前記第２の手段から前記第４の手段による前記故障注入の実行時における前記クロックカウンタの加速は、前記故障注入の実行時の時間の総和が、通常のクロックカウンタの周期より小さくなるように設定することを特徴とする請求項５記載のマイコン故障注入システム。
【請求項７】
前記第４のステップにおいて、前記マイコンの内部状態に関連するクロック信号の周波数を加速している間に、前記マイコンの内部状態を、前記マイコン自身に搭載されたソフトウェアで書換えることを特徴とする請求項２記載のマイコン故障注入方法。
【請求項８】
ソフトウェア割込み命令の開始と終了に同期してクロック加速あるいは減速を行うクロックジェネレータを用いて、加速区間を絞ることで故障状態を模擬することを特徴とする請求項２記載のマイコン故障注入方法。
【請求項９】
前記第１のステップにおいて、利用者が入力するソフトウェアの関数呼出しまたは終了部分に、利用者が望む故障状態の挿入に適したソフトウェア割込み命令を挿入することを特徴とする請求項１記載のマイコン故障注入方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、組込みシステムの検証方法及びシステムに係り、特に、メカニズム（電子制御の対象となるもの）、ハードウェア（電子制御系）、及びソフトウェア（プログラム）で構成される組込みシステムの開発に適した、協調シミュレータまたは評価用ハードウェアの技術に関するものである。
【背景技術】
【０００２】
組込みシステムとは、制御対象を構成するメカニズムと、このメカニズムから受け取った物理量を元に制御演算を行い、このメカニズムに制御値の出力を行なうハードウェアと、このハードウェア上で動作するソフトウェアとで構成されるシステムである。【０００３】
例えば、自動車エンジン制御向けの組込みシステムは、制御対象であるエンジン等のメカニズムと、制御演算を行いこのエンジン等を制御するマイコン等の電子機器と、このマイコン等の上で動作するソフトウェアとで構成されている。【０００４】
組込みシステムに含まれるソフトウェアの挙動は、制御対象のメカニズムとハードウェアの構成に強く依存するため、メカニズム、ハードウェア、ソフトウェアを併せた挙動の解析が必要である。【０００５】
近年、自動車、電気機器等の高信頼化、高機能化により組込みシステムが複雑化しており、作業期間短縮のためハードウェア、ソフトウェアの各部品を細分化して分業化が行なわれ、複数拠点での同時開発が行われている。【０００６】
分業化が進むにあたり、部品毎の動作確認だけではなく、部品の組み立て時に判明する性能不足、仕様の不具合が増加し、製品出荷前の最終段階での手戻りによる開発期間の遅延が多発しており、開発効率の悪化が問題となっている。【０００７】
この問題を解決するため、設計時点でのメカニズム、ハードウェア及びソフトウェアを協調させたシミュレーションによる性能評価、検証手法が用いられ始めている。【０００８】
上記のシミュレーションによる性能評価・動作検証を行うにあたり、対象となる組込みシステムを構成する各要素の動作を、シミュレーションモデルとしてシミュレータ上で実行可能なソフトウェアとなるように記述する必要がある。【０００９】
これらのシミュレーションモデルは、メカニズム及びハードウェア各々の構成要素の設計・製造を担当する会社または部署から提供を受ける形態を取るのが一般的である。【００１０】
このようなシミュレーションベースのソフトウェア検証工程で期待されているのが、 ハードウェア部品の故障注入を考慮した、 システム動作検証である。【００１１】
このような検証は、 従来であれば実ハードウェアを故障させて起こす必要があった。 ただしユーザが所望する故障を、任意の場所、 タイミングで起こすことは不可能であるため、適用出来る検証の選択肢は非常に限られていた。【００１２】
これに対し、シミュレーションベースであれば、所望の故障をモデル化することにより、任意の場所での故障注入が理論的には可能となる。【００１３】
そこで、特許文献１の技術等を用いることで、電子系部品間の接続に対する故障注入が行われている。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】米国公開公報２００４−１５３７９４号
【発明の概要】
【発明が解決しようとする課題】
【００１５】
今後は更に、半導体の微細化に伴う電子系デバイスの信頼性低下を想定した、部品内部の故障注入テストの需要が高まると考えられる。【００１６】
このような発生確率が非常に低い故障の影響評価を実行する場合、検証期間を短縮するため、注入したい故障に応じてハードウェアの構造自体を変更する事が検討される。【００１７】
しかしながら前述のように、 これらのハードウェア部品またはシミュレーションモデルはユーザとは別の会社, 部署から提供を受けるのが通常であって、このような実装の変更を製造者が各ユーザに向けて行う事は難しいため、これまで故障を考慮した動作試験は故障発生時に修理が難しい例えば宇宙飛行、人工衛星向けシステム等以外では行われて来なかった。しかし昨今の厳しい安全規格の制定、ハードウェアの微細化によって、民生機器でもこのような動作テストが望まれている。【００１８】
特許文献１では、割込み処理の内部でメモリ、ＰＣなどの値をレジスタにロードした上で、ビットエラーを模擬するビット演算を混ぜている。しかし、上記の技術では、故障を注入する時間として、割込み内部で処理する場合の遅延が余計に発生してしまうことにより、正確に実行時間を評価することができずシミュレーションの精度が低下すること、更に、割込みのタイミングをどのように制御するかを検討する必要がある。【００１９】
上記の理由から詳細な誤動作影響を考慮したソフトウェア動作テストの高効率化が課題となっている。
【課題を解決するための手段】
【００２０】
本発明は前記のハードウェアの一時的な誤動作による内部状態の変更を、ソフトウェアのみを用いて模擬することで、上記課題を解決する。【００２１】
組込み制御マイコンを始めとするほぼ全ての、ＣＰＵには通常のプログラム実行に割込み、所定の処理を優先して行う機能が実装されている。本発明ではこの割込み機能を用いる。ユーザは予め模擬したいハードウェア誤動作に対応した内部状態の書き換えプログラムを、テストするべきソフトウェアに付加する形で実装する。さらに、このソフトウェアで、もとより有る機能で用いなかった割込みのチャネルを前記の追加されたソフトウェアをトリガするように割り当てておく。【００２２】
このソフトウェアをシミュレータまたは評価用ハードウェア上で実行させ、ユーザが故障を注入するタイムスタンプでソフトウェア割込み、または外部割込みを用いて前記の故障注入割込み処理をトリガする。【００２３】
即ち、従来は、全体の処理動作を止めて、外部計測器から内部状態の書き換えを行っていたのに対し、本発明では、書き換え対象部分を、一時的にクロック加速し、ソフトウエア内部から状態を書き換える、ソフトウエア割込みに同期したクロック加速（装置／モデル）を用いる。【００２４】
これによって実行中のもとより有るソフトウェアの観点では、ハードウェアの内部状態が誤動作によって変更されたと認識される。【００２５】
もしも、前記の故障注入割込み処理の実行時間が、実際の誤動作時間よりも長くなる場合には、前記の故障注入割込み処理中に対象ハードウェアのクロック周波数を高速化し、前記の故障注入割込み処理の実行時間が問題とならないように調整する。
【発明の効果】
【００２６】
本発明によれば、ユーザが各モデルまたは評価用ハードウェアの実装変更をすることなく、所望の故障時影響解析を、ソフトウェアを用いるだけでエミュレーション可能となり、任意の一時的ハードウェア誤動作の影響評価を行うシステムテストの生産性向上に貢献する。
【図面の簡単な説明】
【００２７】
【図１】実施例１の全体構成図を示す図である。
【図２】組込みシステム構成図を示す図である。
【図３】シミュレータ操作共通プロトコルのデータ配置定義を示す図である。
【図４】故障注入指示部と故障注入実行部の詳細構成と接続方式を示す図である。
【図５】実施例１の故障注入バイナリ生成部の構成を示す図である。
【図６】実施例１の故障注入バイナリ生成フローを示す図である。
【図７】実施例１のシステム動作フローを示す図である。
【図８】実施例２の全体構成図を示す図である。
【図９】実施例２の故障注入バイナリ生成部の構成を示す図である。
【図１０】実施例２の故障注入バイナリ生成フローを示す図である。
【図１１】実施例２のシステム動作フローを示す図である。
【発明を実施するための形態】
【００２８】
図２は本発明の適用対象となる、組込みシステム２０８の構成を概説する。
【００２９】
一般に組込みシステムは機械部品２０７、外部との通信のための通信部２０５、と制御マイコン２００の組合せによって構成される。
【００３０】
制御マイコン２００の内部ではバス２０４を中心として、ＣＰＵ２０１があり、その上でソフトウェア２０２が動作する。
【００３１】
また、割込みコントローラ２０３がＣＰＵ２０１と接続されており、周辺機器２０６が制御マイコン２００の外部にある機械部品２０７及び、通信部２０５と接続された構成となっている。
【００３２】
このような組込みシステム２０８が動作する際のデータの流れは、通信２０５または機械２０７から周辺機器２０６がデータを受け取ると、割込みコントローラ２０３がＣＰＵ２１０上でのデータ処理を割込させ、処理された結果が、再度周辺機器２０６を通し、通信２０５または機械部品２０７に指令される形をとる。
【００３３】
図３は、図１に示す故障注入指示部１１３と故障注入実行部１０５との間でやりとりされる本システムの共通プロトコル３００の構成例を示す。本プロトコルは可変長の命令列をもつことができる。
【００３４】
図中のａｒｇ１フィールド３０５、ａｒｇ２フィールド３０６が可変長部分であり、その数はＩｎｄｅｘ３０３によって制御される。その他のフィールドは固定して存在する。ＩＤフィールド３０１は当該の試験項目を一つ以上含まれる故障注入実行部１０５のどれで実行するべきかを指示する。Ｔｙｐｅフィールド３０２は該当試験項目の種類を指定する。Ｖａｌｕｅフィールド３０４は当該試験項目が観測、トリガイベントであったときその項目の実行結果が入力される。Ｔｉｍｉｎｇフィールド３０７は当該試験項目を実行するべきシミュレーション時間が記述されて故障注入指示部１１３から送信され、故障注入実行部１０５で実際に実行されたシミュレーション時間が上書きされた状態で返送される。
【００３５】
このプロトコル３００を他のシミュレータを操作するライブラリと互換性を保つように実装することで、複数のシミュレータと連携した故障注入を実行可能である。例えば前述の図２の機械部品２０７の状態変化をトリガとして故障注入を起こすことが可能となる。
【実施例１】
【００３６】
前記のシミュレータを用いたマイコン内部コンポーネントに対する故障注入を実現するための本実施例における構成例である。【００３７】
本実施例の構成を、図１を用いて概説する。【００３８】
本システムはマイコン動作の模擬が可能なシミュレータ１１１が動作中に、故障注入指示部１１３がシミュレータ外部から故障注入指示を行う。そのため、シミュレータ中には、その故障注入指示を受信し故障注入動作の実行をトリガする故障注入実行部１０５が検証対象のマイコンモデル１０６と接続されている。また、マイコンモデル１０６上で動作するターゲットソフトウェアをシミュレーション実行前に読みだすが、この故障注入処理入りバイナリ１１２は、故障注入バイナリ生成部１１０によってシミュレーション開始前に生成される。「バイナリ」は実行形式のプログラムである。
マイコンモデル１０６内部の構造は対象とする電子系部品によって異なるが、ＣＰＵ２０１、ＲＯＭ１０４、バス２０４、割込みコントローラ２０３、クロックジェネレータ１０７、バスコントローラ１０８は本実施例の成立のために必須となる。【００３９】
ここで、図１のシステム構成で実施される、故障注入用割込み処理の概要を説明する。
（１）故障注入用割込み処理のために、クロックを加速する。
（２）ＣＰＵから退避領域にレジスタ値を退避する。
（３）指定されたレジスタ内部状態を破壊（消去）する。
（４）退避したレジスタ値をＣＰＵ内部に書き戻す。
（５）クロックの速度を元に戻す。【００４０】
更に、本実施例では、上記の処理を元のクロック時間内で終了させるので、ソフト的にはいきなり処理が変わったように見えるが、ソフトウエアシミュレーションで発生する時間的副作用をクロック加速によって除去することができる。【００４１】
故障注入実行部１０５と故障注入指示部１１３の構成とその接続関係を、図４を用いて解説する。【００４２】
故障注入指示部１１３は、以下の３つによって構成される。【００４３】
ユーザが入力する試験項目書（後述する、図７のステップ７０２の「故障注入シナリオ」のこと）を入力として、そこに記述された本発明への故障注入指示を解釈する試験項目解釈部４０５と、解釈された故障注入指示を保持し、順次利用されるまで貯めておくための試験項目待ち行列４０４と、前記故障注入指示を故障注入実行部１０５に送信するための、通信Ｉ／Ｆ部４０３によって構成される。【００４４】
故障注入実行部１０５と故障注入指示部１１３はＴＣＰ通信によって接続されており、図３に示すような共通プロトコルを用いていつ、どの故障注入割込み処理を実行するかを指定すること、前述の故障注入割込み処理がどのタイムスタンプで実行されたかを故障注入指示部１１３に返送することを可能にする。【００４５】
故障注入実行部１０５は故障注入指示部１１３からの故障注入指示を受信するための、インターフェイスを保持する通信Ｉ／Ｆ部０４００と、受信したコマンドを解釈して、故障注入タイミングと対象とする故障注入割込み処理を得るコマンド解釈部４０１と、実際に対象となるマイコンモデル１０６と接続し、割込みの開始や、クロック周波数の操作を行うコマンド実行部４０２によって構成される。【００４６】
割込みコントローラ２０３、クロックジェネレータ１０７は故障注入実行部１０５のコマンド実行部０４０２と接続されており、これらは故障注入実行部１０５による操作や動作状況伝達が可能となっている。【００４７】
この故障注入実行部１０５と接続されたクロックジェネレータ１０７はバス２０４のバスコントローラ１０８とＣＰＵ２０１にクロック信号を分配している。【００４８】
故障注入実行部１０５は故障注入指示部１１３の故障注入指示に従い、割込みコントローラ２０３を起動し、割込み処理をトリガすると同時に、クロックジェネレータ１０７の出力周波数を設定する。このクロック周波数の設定では、シミュレーションの動作に影響を与えない値を、利用者が適宜設定する。【００４９】
割込み処理の終了が、割込みコントローラ２０３を通じて故障注入実行部１０５に伝達されると、クロックジェネレータ１０７の出力周波数を予め設定された値を高から低（元のクロックの値）に書き戻す。【００５０】
図５は実施例１で用いる故障注入バイナリ生成部１１０の構成を、図６は故障注入バイナリ生成部１１０による故障注入機能付きバイナリ１０９生成フローを示す。【００５１】
この部品は、オリジナルバイナリファイル５００、故障注入アセンブリ５０２、の２つのファイルを入力とし、故障注入シミュレーションで用いられる故障注入機能付きバイナリ１０９を出力する。【００５２】
故障注入バイナリ生成部１１０が動作を開始すると、まずユーザに対し、検証したいソフトウェア、すなわちオリジナルバイナリ５００の登録を要求する。（ステップ６００）
入力されたオリジナルバイナリファイル５００の割込みテーブルを、未使用割り込みベクタテーブル抽出部５０１が解析し、処理が未割り当てとなっている割込みベクタを抽出する。（ステップ６０１）故障注入アセンブリ組込み部５０３はユーザが望む故障モードと等価なビット演算を、故障注入アセンブリ５０２中の一つないしは複数を組み合わせ、故障注入割込み処理として生成する。【００５３】
さらに、この故障注入割込み処理をステップ６０１で抽出した未使用割り込みベクタに割り当てる。（ステップ６０２）前記の割当をオリジナルバイナリファイル５００に追記したバイナリファイルを故障注入機能付きバイナリ１０９として出力する。（ステップ６０３）故障注入機能付きバイナリ１０９には前述の割込み処理をトリガするような処理は含まれていない。したがって、故障注入実行部１０５による割込み操作なしでは、故障注入機能が動作しないようになっているため、それを本実施例が適用されていないシミュレータもしくは実機で割り込み処理を実行しても、オリジナルバイナリファイル５００と同一の挙動を示す。即ち、故障注入は、オリジナルバイナリファイル５００の動作に影響を与えない。【００５４】
図７は本発明の実施例１のシミュレーション実行の全体フローを示す。図７において、破線の矢印は、シミュレータ外部とシミュレータ内部との間で送受信される情報を示す。【００５５】
ユーザがシミュレーションの開始を選択すると、シミュレータの外部とシミュレータ内部の両方で故障注入の実行準備が同時に始まる（ステップ７００）。シミュレータ外部ではまずユーザが望む故障注入シナリオ５１０がロードされる。この故障注入シナリオ５１０は故障注入を起こすべき時間、場所のリストが記述されたファイルである。このファイルを、故障注入指示部１１３の試験項目解釈部４０５が受取り解釈する。（ステップ７０１）      前段（ステップ７０１）で得られた試験項目を試験項目待ち行列４０４に格納する（ステップ７０２）。
前段の試験項目待ち行列４０４から試験項目の優先度が高いものから１件ずつ取得し（ステップ７０３）、その試験項目が、本発明を利用する故障注入指示であった場合（ステップ７０４）、故障注入指示部１１３から故障注入実行部１０５に送信する（ステップ７０５）。
それ以外の場合は、該当試験項目は他に予め定められた処理をされるか、破棄される。即ち、ステップ７０４で「Ｎｏ」の場合は処理を終了する（７０９）。【００５６】
ステップ７０５以降はシミュレータ内部の処理が終了し、故障注入実行部からの応答を待つ（ステップ７０６）。（ステップ７０７、７０８については後述する）この時点でシミュレータ内部ではシミュレーションプロセスの開始まで進めておく必要がある（ステップ７１０）。【００５７】
シミュレータは故障注入機能付きバイナリ１０９をロードし、シミュレータ上でソフトウェアの実行模擬が開始される（ステップ７１１）。また、通常状態のシミュレーション継続中に（ステップＳ７１２）、ユーザからの要求、システム上の問題によってシミュレーションの最終状態に到達した場合（ステップ７１３）、シミュレーションが終了する（ステップ７１４）。それ以外はシミュレータ外部からの介入が有るまでは、通常状態のシミュレーションが継続される（ステップ７１２）。【００５８】
ステップ７０５で故障注入指示部１１３（シミュレータ外部）から送信された故障注入指示を故障注入実行部１０５の通信Ｉ／Ｆ部４００が受信すると（ステップ７１５）、受信した故障注入指示をコマンド解釈部０４０１が解釈し、注入する故障が割り付けられた割込みベクタ指定とそれを実行するべきタイムスタンプが得られる。【００５９】
これらを元に、コマンド実行部０４０２は前記タイムスタンプまでシミュレーション時間が到達するまで待機した後に、割込みコントローラ２０３に対し、前記の選択された割込みベクタに対応する割込み信号を入力する（ステップ７１６）。【００６０】
前段階（ステップ７１６）と同時に、コマンド実行部０４０２はクロックジェネレータ１０７に介入し、クロック信号を加速する（ステップ７１７）。【００６１】
この状態でＣＰＵ２０１上のソフトウェア実行に割込みがかかる。この時、ＣＰＵ内部のレジスタ及びＰＣやＳＰ等の特殊レジスタの内容もＣＰＵのコンテクストスイッチ機能（複数のプロセスが１つのＣＰＵを共有できるようにＣＰＵの状態（コンテキスト）を保存及び復元するプロセス）でメモリに書き出される。これに対して、割込みハンドラ内部で選択された値、即ち、注入する故障時の値の書き換え動作を行う。更に、割込みのコンテクストスイッチ機能を使いこれらのメモリ値を前記のレジスタなどに書きもどすことで、マイコン内部状態の観測、書き換え動作を行う（ステップ７１８）。【００６２】
この時に加速するクロックの値は、故障注入の実行時の時間の総和が、もとの１クロック（通常のクロックカウンタ）の周期より小さくなるように設定する。これによって、故障注入動作の遅延時間を０とみなすことが可能となる。【００６３】
前段（ステップ７１８）の割込み処理が終了すると、ＣＰＵ２０１から割込みコントローラ２０３に対し信号が送られる場合、これをコマンド実行部０４０２は読み取って、クロック加速を終了させ、元のクロック周波数にもどす（ステップ７１９、ステップ７２０）。【００６４】
割込み処理が終了したとき、ＣＰＵ２０１から割込みコントローラ２０３に対し信号が送られない場合、故障注入処理入りバイナリ１１２の各割込み処理内部でクロック周波数を低下させるような命令を追加する必要がある。この時はクロックジェネレータ１０７がバス２０４に接続され、ソフトウェアからクロックの逓倍率を操作できるように実装する必要がある。【００６５】
コマンド実行部０４０２は割込み処理の終了（ステップ７２０）を検知すると、実際に割込みが終了したタイムスタンプや、指定されたレジスタ値を読み取って、コマンド終了応答を図３に示したフォーマットを用いて生成して故障注入指示部１１３に送信する（ステップ７２１）。【００６６】
故障注入指示部１１３は返送されたコマンド終了応答の内容を保存し、これにより１つの故障注入指示の実行が完了する（ステップ７０７）。【００６７】
前記の実行終了した命令が試験項目待ち行列４０４の最後の要素であった場合、シミュレーションが終了する。そうでなければ、シミュレーションを続行してステップ７０３に戻り、次の試験項目を処理する（７０８）。
【実施例２】
【００６８】
実施例２は実施例１の発明と同等機能をソフトウェアのみで実装する場合の構成例である。即ち、実施例１では、図１に示すように、故障注入指示部１１３及び故障注入実行部１０５経由で、クロックジェネレータ１０７及び割込みコントローラ２０３のハードウエアに対して故障注入を行っているのに対し、実施例２では、後述する図９に示すように、故障注入バイナリ生成部１０９ａの中に、故障注入を入れ込むための処理部（故障注入トリガ組込み部５０４）を設けたことが特徴である。【００６９】
ソフトウェアとマイコン上のコンポーネントのみの改造が必要であることから、実施例２は実マイコン上での動作も可能である。【００７０】
実施例をソフトウェアのみで実装する場合の構成を、図８を用いて概説する。【００７１】
本システムはマイコン動作の模擬が可能なシミュレータ１１１上でマイコンモデル１０６を動作させる。このマイコンモデル１０６上で動作する故障注入指示付きバイナリ１０９は、実施例１で用いられる故障注入機能付きバイナリ１１２に、ユーザが故障注入させたいタイミングでソフトウェア割込みを挿入したバイナリとなっている。このバイナリは、故障注入バイナリ生成部１１０ａによってシミュレーション開始前に生成される。【００７２】
マイコンモデル１０６内部の構造は対象とする電子系部品によって異なるが、ＣＰＵ２０１、ＲＯＭ１０４、バス２０４、割込みコントローラ２０３、クロックジェネレータ１０７、バスコントローラ１０８は本発明の成立のために必須となる。【００７３】
また、本実施例ではクロックジェネレータ１０７はバス２０４に接続され、ＣＰＵ２０１から参照可能なメモリ空間に割り付けられたレジスタによって、クロックジェネレータ１０７が出力するクロック信号の逓倍率を操作可能な構造をもつ必要がある。【００７４】
図９は実施例１で用いる故障注入バイナリ生成部１１０ａの構成を、図１０は故障注入バイナリ生成部１１０ａによる故障注入指示付きバイナリ１０９生成フローを示す。【００７５】
この部品（１１０ａ）は、オリジナルバイナリファイル０５００、故障注入アセンブリ０５０２、の２つのファイルを入力とし、故障シナリオ５１０を参照して、故障注入シミュレーションで用いられる故障注入指示付きバイナリ１０９ａを出力する。【００７６】
故障注入バイナリ生成部１１０ａが動作を開始すると、まずユーザに対し、検証したいソフトウェア、すなわちオリジナルバイナリ５００の登録を要求する（ステップ６００ａ）。【００７７】
入力されたオリジナルバイナリファイル５００の割込みテーブルを、未使用割り込みベクタテーブル抽出部５０１が解析し、処理が未割り当てとなっている割込みベクタを抽出する（ステップ６０１ａ）。【００７８】
故障注入アセンブリ組込み部５０３はユーザが望む故障モードと等価なビット演算を、故障注入アセンブリ５０２中の一つないしは複数を組み合わせ、故障注入割込み処理として生成する。【００７９】
さらに、この故障注入割込み処理をステップ０６０１ａで抽出した未使用割り込みベクタに割り当てる（ステップ０６０２ａ）。【００８０】
次に故障注入トリガ組込み部０５０４はユーザより故障注入シナリオ５１０を受理する（ステップ０６０３ａ）。【００８１】
故障注入シナリオ５１０には故障注入対象となる関数名と、その発生時間を関数の呼出しまたは終了の二つを選択した物、が格納されている。【００８２】
さらに、ユーザが実装したソフトウェアの関数内部にソフト割込みを用いて、前段（Ｓ６０２ａ）で埋め込んだ故障注入割込みをトリガする機能を埋め込む（ステップ０６０４ａ）。【００８３】
これらを最後に故障注入指示付きバイナリ１０９ａとして書きだす（ステップ０６０５ａ）。【００８４】
図１１は本発明の実施例２のシミュレーション実行の全体フローを示す。【００８５】
ユーザがシミュレーションの開始を選択すると、シミュレータ内部で故障注入の実行準備が始まる（ステップ７００ａ）。【００８６】
シミュレータは故障注入指示付きバイナリをロードし、シミュレータ上でソフトウェアの実行模擬が開始される（ステップ７０１ａ）。【００８７】
また、通常状態のシミュレーション継続中に（７０２ａ）、ユーザからの要求、又はシステム上の問題によってシミュレーションの最終状態に到達した場合（ステップ７０２ｂ）、シミュレーションが終了する（ステップ７０３ａ）。【００８８】
それ以外はＣＰＵが故障注入割込み命令を実行するまでは、通常状態のシミュレーションが継続される（ステップ７０４ａ）。【００８９】
ＣＰＵが故障注入割込み命令をソフトウェア割込み命令を使ってトリガすると、ＣＰＵが故障を注入する割込み処理に分岐する（ステップ７０４ｂ）。【００９０】
この割込み処理の１命令目でクロックジェネレータ１０７の逓倍率レジスタにアクセスし、クロック信号を加速する。この時に加速するクロックの値は、故障注入の実行時の時間の総和が、もとの１クロック（通常のクロックカウンタ）の周期より小さくなるように設定する。（ステップ７０５ａ）。【００９１】
この時、ＣＰＵ内部のレジスタ及びＰＣやＳＰ等の特殊レジスタもＣＰＵのコンテクストスイッチ機能でメモリに書き出される。これに対して、割込みハンドラ内部で選択された値の書き換え動作を行い。更に割込みのコンテクストスイッチ機能を使いこれらのメモリ値を前記のレジスタなどに書きもどすことで、マイコン内部状態の観測、書き換え動作を行う（ステップ７０６ａ）。【００９２】
書き換え動作の後の命令でクロックジェネレータ１０７の逓倍率レジスタにアクセスし、クロック信号を減速する（ステップ７０７ａ）。【００９３】
割込み処理が終了するとＣＰＵは通常状態のステップ７０２ａに分岐し、ソフトウェアの実行を継続する（ステップ７０８ａ）。
【符号の説明】
【００９４】
１０４：ＲＯＭ、１０５：故障注入実行部、１０６：マイコンモデル、１０７：クロックジェネレータ、１０８：バスコントローラ、１１０：故障注入バイナリ生成部、１１１：シミュレータ、１１２：故障注入処理入りバイナリ、１１３：故障注入指示部、２０１:ＣＰＵ、２０３：割込みコントローラ、２０４：バス
【図１】
0006030237.tif 000002
【図２】
0006030237.tif 000003
【図３】
0006030237.tif 000004
【図４】
0006030237.tif 000005
【図５】
0006030237.tif 000006
【図６】
0006030237.tif 000007
【図７】
0006030237.tif 000008
【図８】
0006030237.tif 000009
【図９】
0006030237.tif 000010
【図１０】
0006030237.tif 000011
【図１１】
0006030237.tif 000012