特許第6030237号(P6030237)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立製作所の特許一覧

<>
  • 特許6030237-マイコン故障注入方法及びシステム 図000002
  • 特許6030237-マイコン故障注入方法及びシステム 図000003
  • 特許6030237-マイコン故障注入方法及びシステム 図000004
  • 特許6030237-マイコン故障注入方法及びシステム 図000005
  • 特許6030237-マイコン故障注入方法及びシステム 図000006
  • 特許6030237-マイコン故障注入方法及びシステム 図000007
  • 特許6030237-マイコン故障注入方法及びシステム 図000008
  • 特許6030237-マイコン故障注入方法及びシステム 図000009
  • 特許6030237-マイコン故障注入方法及びシステム 図000010
  • 特許6030237-マイコン故障注入方法及びシステム 図000011
  • 特許6030237-マイコン故障注入方法及びシステム 図000012
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6030237
(24)【登録日】2016年10月28日
(45)【発行日】2016年11月24日
(54)【発明の名称】マイコン故障注入方法及びシステム
(51)【国際特許分類】
   G06F 11/22 20060101AFI20161114BHJP
   G06F 11/26 20060101ALI20161114BHJP
【FI】
   G06F11/22 636
   G06F11/22 673Z
   G06F11/22 675B
   G06F11/22 675H
   G06F11/26
【請求項の数】9
【全頁数】14
(21)【出願番号】特願2015-521236(P2015-521236)
(86)(22)【出願日】2013年6月6日
(86)【国際出願番号】JP2013065706
(87)【国際公開番号】WO2014196059
(87)【国際公開日】20141211
【審査請求日】2015年9月10日
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001689
【氏名又は名称】青稜特許業務法人
(72)【発明者】
【氏名】伊藤 康宏
(72)【発明者】
【氏名】勝 康夫
【審査官】 田中 幸雄
(56)【参考文献】
【文献】 特開平7−182202(JP,A)
【文献】 特開平7−334385(JP,A)
【文献】 特開平5−61712(JP,A)
【文献】 特表2010−507170(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/22
G06F 11/26
(57)【特許請求の範囲】
【請求項1】
計算機を用いて、シミュレーションを行いながら組込みシステムの検証を行う方法であって、
前記組込みシステムのマイコンの故障に関する情報を注入するレジスタと前記故障の注入のタイミングを指定する第1のステップ、
前記タイミングで割り込みをかける第2のステップ、
前記割り込みで出力されるレジスタ値のうち、前記指定されたレジスタの値を故障値に書き換える第3のステップ、
前記故障値に書き換えられたレジスタ値を前記故障の注入のタイミングで書き戻す第4のステップ
を有することを特徴とするマイコン故障注入方法。
【請求項2】
前記第2のステップから前記第4のステップの間における、故障注入の実行時にクロックカウンタを加速することを特徴とする請求項1記載のマイコン故障注入方法。
【請求項3】
前記第2のステップから前記第4のステップの間における前記クロックカウンタの加速は、前記故障注入の実行時の時間の総和が、通常のクロックカウンタの周期より小さくなるように設定することを特徴とする請求項2記載のマイコン故障注入方法。
【請求項4】
メカニズム、ハードウェア、及びソフトウェアで構成される組込みシステムの検証を行うマイコン故障注入システムであって、
前記組込みシステムのマイコンの故障に関する情報を注入するレジスタと前記故障の注入のタイミングを指定する第1の手段、
前記タイミングで割り込みをかける第2の手段、
前記割り込みで出力されるレジスタ値のうち、前記指定されたレジスタの値を故障値に書き換える第3の手段、
前記故障値に書き換えられたレジスタ値を前記故障の注入のタイミングで書き戻す第4の手段、
を有することを特徴とするマイコン故障注入システム。
【請求項5】
前記第2の手段から前記第4の手段による、故障注入の実行時にクロックカウンタを加速する手段を有することを特徴とする請求項4記載のマイコン故障注入システム。
【請求項6】
前記第2の手段から前記第4の手段による前記故障注入の実行時における前記クロックカウンタの加速は、前記故障注入の実行時の時間の総和が、通常のクロックカウンタの周期より小さくなるように設定することを特徴とする請求項5記載のマイコン故障注入システム。
【請求項7】
前記第4のステップにおいて、前記マイコンの内部状態に関連するクロック信号の周波数を加速している間に、前記マイコンの内部状態を、前記マイコン自身に搭載されたソフトウェアで書換えることを特徴とする請求項2記載のマイコン故障注入方法。
【請求項8】
ソフトウェア割込み命令の開始と終了に同期してクロック加速あるいは減速を行うクロックジェネレータを用いて、加速区間を絞ることで故障状態を模擬することを特徴とする請求項2記載のマイコン故障注入方法。
【請求項9】
前記第1のステップにおいて、利用者が入力するソフトウェアの関数呼出しまたは終了部分に、利用者が望む故障状態の挿入に適したソフトウェア割込み命令を挿入することを特徴とする請求項1記載のマイコン故障注入方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、組込みシステムの検証方法及びシステムに係り、特に、メカニズム(電子制御の対象となるもの)、ハードウェア(電子制御系)、及びソフトウェア(プログラム)で構成される組込みシステムの開発に適した、協調シミュレータまたは評価用ハードウェアの技術に関するものである。
【背景技術】
【0002】
組込みシステムとは、制御対象を構成するメカニズムと、このメカニズムから受け取った物理量を元に制御演算を行い、このメカニズムに制御値の出力を行なうハードウェアと、このハードウェア上で動作するソフトウェアとで構成されるシステムである。
【0003】
例えば、自動車エンジン制御向けの組込みシステムは、制御対象であるエンジン等のメカニズムと、制御演算を行いこのエンジン等を制御するマイコン等の電子機器と、このマイコン等の上で動作するソフトウェアとで構成されている。
【0004】
組込みシステムに含まれるソフトウェアの挙動は、制御対象のメカニズムとハードウェアの構成に強く依存するため、メカニズム、ハードウェア、ソフトウェアを併せた挙動の解析が必要である。
【0005】
近年、自動車、電気機器等の高信頼化、高機能化により組込みシステムが複雑化しており、作業期間短縮のためハードウェア、ソフトウェアの各部品を細分化して分業化が行なわれ、複数拠点での同時開発が行われている。
【0006】
分業化が進むにあたり、部品毎の動作確認だけではなく、部品の組み立て時に判明する性能不足、仕様の不具合が増加し、製品出荷前の最終段階での手戻りによる開発期間の遅延が多発しており、開発効率の悪化が問題となっている。
【0007】
この問題を解決するため、設計時点でのメカニズム、ハードウェア及びソフトウェアを協調させたシミュレーションによる性能評価、検証手法が用いられ始めている。
【0008】
上記のシミュレーションによる性能評価・動作検証を行うにあたり、対象となる組込みシステムを構成する各要素の動作を、シミュレーションモデルとしてシミュレータ上で実行可能なソフトウェアとなるように記述する必要がある。
【0009】
これらのシミュレーションモデルは、メカニズム及びハードウェア各々の構成要素の設計・製造を担当する会社または部署から提供を受ける形態を取るのが一般的である。
【0010】
このようなシミュレーションベースのソフトウェア検証工程で期待されているのが、 ハードウェア部品の故障注入を考慮した、 システム動作検証である。
【0011】
このような検証は、 従来であれば実ハードウェアを故障させて起こす必要があった。 ただしユーザが所望する故障を、任意の場所、 タイミングで起こすことは不可能であるため、適用出来る検証の選択肢は非常に限られていた。
【0012】
これに対し、シミュレーションベースであれば、所望の故障をモデル化することにより、任意の場所での故障注入が理論的には可能となる。
【0013】
そこで、特許文献1の技術等を用いることで、電子系部品間の接続に対する故障注入が行われている。
【先行技術文献】
【特許文献】
【0014】
【特許文献1】米国公開公報2004−153794号
【発明の概要】
【発明が解決しようとする課題】
【0015】
今後は更に、半導体の微細化に伴う電子系デバイスの信頼性低下を想定した、部品内部の故障注入テストの需要が高まると考えられる。
【0016】
このような発生確率が非常に低い故障の影響評価を実行する場合、検証期間を短縮するため、注入したい故障に応じてハードウェアの構造自体を変更する事が検討される。
【0017】
しかしながら前述のように、 これらのハードウェア部品またはシミュレーションモデルはユーザとは別の会社, 部署から提供を受けるのが通常であって、このような実装の変更を製造者が各ユーザに向けて行う事は難しいため、これまで故障を考慮した動作試験は故障発生時に修理が難しい例えば宇宙飛行、人工衛星向けシステム等以外では行われて来なかった。しかし昨今の厳しい安全規格の制定、ハードウェアの微細化によって、民生機器でもこのような動作テストが望まれている。
【0018】
特許文献1では、割込み処理の内部でメモリ、PCなどの値をレジスタにロードした上で、ビットエラーを模擬するビット演算を混ぜている。しかし、上記の技術では、故障を注入する時間として、割込み内部で処理する場合の遅延が余計に発生してしまうことにより、正確に実行時間を評価することができずシミュレーションの精度が低下すること、更に、割込みのタイミングをどのように制御するかを検討する必要がある。
【0019】
上記の理由から詳細な誤動作影響を考慮したソフトウェア動作テストの高効率化が課題となっている。
【課題を解決するための手段】
【0020】
本発明は前記のハードウェアの一時的な誤動作による内部状態の変更を、ソフトウェアのみを用いて模擬することで、上記課題を解決する。
【0021】
組込み制御マイコンを始めとするほぼ全ての、CPUには通常のプログラム実行に割込み、所定の処理を優先して行う機能が実装されている。本発明ではこの割込み機能を用いる。ユーザは予め模擬したいハードウェア誤動作に対応した内部状態の書き換えプログラムを、テストするべきソフトウェアに付加する形で実装する。さらに、このソフトウェアで、もとより有る機能で用いなかった割込みのチャネルを前記の追加されたソフトウェアをトリガするように割り当てておく。
【0022】
このソフトウェアをシミュレータまたは評価用ハードウェア上で実行させ、ユーザが故障を注入するタイムスタンプでソフトウェア割込み、または外部割込みを用いて前記の故障注入割込み処理をトリガする。
【0023】
即ち、従来は、全体の処理動作を止めて、外部計測器から内部状態の書き換えを行っていたのに対し、本発明では、書き換え対象部分を、一時的にクロック加速し、ソフトウエア内部から状態を書き換える、ソフトウエア割込みに同期したクロック加速(装置/モデル)を用いる。
【0024】
これによって実行中のもとより有るソフトウェアの観点では、ハードウェアの内部状態が誤動作によって変更されたと認識される。
【0025】
もしも、前記の故障注入割込み処理の実行時間が、実際の誤動作時間よりも長くなる場合には、前記の故障注入割込み処理中に対象ハードウェアのクロック周波数を高速化し、前記の故障注入割込み処理の実行時間が問題とならないように調整する。
【発明の効果】
【0026】
本発明によれば、ユーザが各モデルまたは評価用ハードウェアの実装変更をすることなく、所望の故障時影響解析を、ソフトウェアを用いるだけでエミュレーション可能となり、任意の一時的ハードウェア誤動作の影響評価を行うシステムテストの生産性向上に貢献する。
【図面の簡単な説明】
【0027】
図1】実施例1の全体構成図を示す図である。
図2】組込みシステム構成図を示す図である。
図3】シミュレータ操作共通プロトコルのデータ配置定義を示す図である。
図4】故障注入指示部と故障注入実行部の詳細構成と接続方式を示す図である。
図5】実施例1の故障注入バイナリ生成部の構成を示す図である。
図6】実施例1の故障注入バイナリ生成フローを示す図である。
図7】実施例1のシステム動作フローを示す図である。
図8】実施例2の全体構成図を示す図である。
図9】実施例2の故障注入バイナリ生成部の構成を示す図である。
図10】実施例2の故障注入バイナリ生成フローを示す図である。
図11】実施例2のシステム動作フローを示す図である。
【発明を実施するための形態】
【0028】
図2は本発明の適用対象となる、組込みシステム208の構成を概説する。
【0029】
一般に組込みシステムは機械部品207、外部との通信のための通信部205、と制御マイコン200の組合せによって構成される。
【0030】
制御マイコン200の内部ではバス204を中心として、CPU201があり、その上でソフトウェア202が動作する。
【0031】
また、割込みコントローラ203がCPU201と接続されており、周辺機器206が制御マイコン200の外部にある機械部品207及び、通信部205と接続された構成となっている。
【0032】
このような組込みシステム208が動作する際のデータの流れは、通信205または機械207から周辺機器206がデータを受け取ると、割込みコントローラ203がCPU210上でのデータ処理を割込させ、処理された結果が、再度周辺機器206を通し、通信205または機械部品207に指令される形をとる。
【0033】
図3は、図1に示す故障注入指示部113と故障注入実行部105との間でやりとりされる本システムの共通プロトコル300の構成例を示す。本プロトコルは可変長の命令列をもつことができる。
【0034】
図中のarg1フィールド305、arg2フィールド306が可変長部分であり、その数はIndex303によって制御される。その他のフィールドは固定して存在する。IDフィールド301は当該の試験項目を一つ以上含まれる故障注入実行部105のどれで実行するべきかを指示する。Typeフィールド302は該当試験項目の種類を指定する。Valueフィールド304は当該試験項目が観測、トリガイベントであったときその項目の実行結果が入力される。Timingフィールド307は当該試験項目を実行するべきシミュレーション時間が記述されて故障注入指示部113から送信され、故障注入実行部105で実際に実行されたシミュレーション時間が上書きされた状態で返送される。
【0035】
このプロトコル300を他のシミュレータを操作するライブラリと互換性を保つように実装することで、複数のシミュレータと連携した故障注入を実行可能である。例えば前述の図2の機械部品207の状態変化をトリガとして故障注入を起こすことが可能となる。
【実施例1】
【0036】
前記のシミュレータを用いたマイコン内部コンポーネントに対する故障注入を実現するための本実施例における構成例である。
【0037】
本実施例の構成を、図1を用いて概説する。
【0038】
本システムはマイコン動作の模擬が可能なシミュレータ111が動作中に、故障注入指示部113がシミュレータ外部から故障注入指示を行う。そのため、シミュレータ中には、その故障注入指示を受信し故障注入動作の実行をトリガする故障注入実行部105が検証対象のマイコンモデル106と接続されている。また、マイコンモデル106上で動作するターゲットソフトウェアをシミュレーション実行前に読みだすが、この故障注入処理入りバイナリ112は、故障注入バイナリ生成部110によってシミュレーション開始前に生成される。「バイナリ」は実行形式のプログラムである。
マイコンモデル106内部の構造は対象とする電子系部品によって異なるが、CPU201、ROM104、バス204、割込みコントローラ203、クロックジェネレータ107、バスコントローラ108は本実施例の成立のために必須となる。
【0039】
ここで、図1のシステム構成で実施される、故障注入用割込み処理の概要を説明する。
(1)故障注入用割込み処理のために、クロックを加速する。
(2)CPUから退避領域にレジスタ値を退避する。
(3)指定されたレジスタ内部状態を破壊(消去)する。
(4)退避したレジスタ値をCPU内部に書き戻す。
(5)クロックの速度を元に戻す。
【0040】
更に、本実施例では、上記の処理を元のクロック時間内で終了させるので、ソフト的にはいきなり処理が変わったように見えるが、ソフトウエアシミュレーションで発生する時間的副作用をクロック加速によって除去することができる。
【0041】
故障注入実行部105と故障注入指示部113の構成とその接続関係を、図4を用いて解説する。
【0042】
故障注入指示部113は、以下の3つによって構成される。
【0043】
ユーザが入力する試験項目書(後述する、図7のステップ702の「故障注入シナリオ」のこと)を入力として、そこに記述された本発明への故障注入指示を解釈する試験項目解釈部405と、解釈された故障注入指示を保持し、順次利用されるまで貯めておくための試験項目待ち行列404と、前記故障注入指示を故障注入実行部105に送信するための、通信I/F部403によって構成される。
【0044】
故障注入実行部105と故障注入指示部113はTCP通信によって接続されており、図3に示すような共通プロトコルを用いていつ、どの故障注入割込み処理を実行するかを指定すること、前述の故障注入割込み処理がどのタイムスタンプで実行されたかを故障注入指示部113に返送することを可能にする。
【0045】
故障注入実行部105は故障注入指示部113からの故障注入指示を受信するための、インターフェイスを保持する通信I/F部0400と、受信したコマンドを解釈して、故障注入タイミングと対象とする故障注入割込み処理を得るコマンド解釈部401と、実際に対象となるマイコンモデル106と接続し、割込みの開始や、クロック周波数の操作を行うコマンド実行部402によって構成される。
【0046】
割込みコントローラ203、クロックジェネレータ107は故障注入実行部105のコマンド実行部0402と接続されており、これらは故障注入実行部105による操作や動作状況伝達が可能となっている。
【0047】
この故障注入実行部105と接続されたクロックジェネレータ107はバス204のバスコントローラ108とCPU201にクロック信号を分配している。
【0048】
故障注入実行部105は故障注入指示部113の故障注入指示に従い、割込みコントローラ203を起動し、割込み処理をトリガすると同時に、クロックジェネレータ107の出力周波数を設定する。このクロック周波数の設定では、シミュレーションの動作に影響を与えない値を、利用者が適宜設定する。
【0049】
割込み処理の終了が、割込みコントローラ203を通じて故障注入実行部105に伝達されると、クロックジェネレータ107の出力周波数を予め設定された値を高から低(元のクロックの値)に書き戻す。
【0050】
図5は実施例1で用いる故障注入バイナリ生成部110の構成を、図6は故障注入バイナリ生成部110による故障注入機能付きバイナリ109生成フローを示す。
【0051】
この部品は、オリジナルバイナリファイル500、故障注入アセンブリ502、の2つのファイルを入力とし、故障注入シミュレーションで用いられる故障注入機能付きバイナリ109を出力する。
【0052】
故障注入バイナリ生成部110が動作を開始すると、まずユーザに対し、検証したいソフトウェア、すなわちオリジナルバイナリ500の登録を要求する。(ステップ600)
入力されたオリジナルバイナリファイル500の割込みテーブルを、未使用割り込みベクタテーブル抽出部501が解析し、処理が未割り当てとなっている割込みベクタを抽出する。(ステップ601)故障注入アセンブリ組込み部503はユーザが望む故障モードと等価なビット演算を、故障注入アセンブリ502中の一つないしは複数を組み合わせ、故障注入割込み処理として生成する。
【0053】
さらに、この故障注入割込み処理をステップ601で抽出した未使用割り込みベクタに割り当てる。(ステップ602)前記の割当をオリジナルバイナリファイル500に追記したバイナリファイルを故障注入機能付きバイナリ109として出力する。(ステップ603)故障注入機能付きバイナリ109には前述の割込み処理をトリガするような処理は含まれていない。したがって、故障注入実行部105による割込み操作なしでは、故障注入機能が動作しないようになっているため、それを本実施例が適用されていないシミュレータもしくは実機で割り込み処理を実行しても、オリジナルバイナリファイル500と同一の挙動を示す。即ち、故障注入は、オリジナルバイナリファイル500の動作に影響を与えない。
【0054】
図7は本発明の実施例1のシミュレーション実行の全体フローを示す。図7において、破線の矢印は、シミュレータ外部とシミュレータ内部との間で送受信される情報を示す。
【0055】
ユーザがシミュレーションの開始を選択すると、シミュレータの外部とシミュレータ内部の両方で故障注入の実行準備が同時に始まる(ステップ700)。シミュレータ外部ではまずユーザが望む故障注入シナリオ510がロードされる。この故障注入シナリオ510は故障注入を起こすべき時間、場所のリストが記述されたファイルである。このファイルを、故障注入指示部113の試験項目解釈部405が受取り解釈する。(ステップ701) 前段(ステップ701)で得られた試験項目を試験項目待ち行列404に格納する(ステップ702)。
前段の試験項目待ち行列404から試験項目の優先度が高いものから1件ずつ取得し(ステップ703)、その試験項目が、本発明を利用する故障注入指示であった場合(ステップ704)、故障注入指示部113から故障注入実行部105に送信する(ステップ705)。
それ以外の場合は、該当試験項目は他に予め定められた処理をされるか、破棄される。即ち、ステップ704で「No」の場合は処理を終了する(709)。
【0056】
ステップ705以降はシミュレータ内部の処理が終了し、故障注入実行部からの応答を待つ(ステップ706)。(ステップ707、708については後述する)この時点でシミュレータ内部ではシミュレーションプロセスの開始まで進めておく必要がある(ステップ710)。
【0057】
シミュレータは故障注入機能付きバイナリ109をロードし、シミュレータ上でソフトウェアの実行模擬が開始される(ステップ711)。また、通常状態のシミュレーション継続中に(ステップS712)、ユーザからの要求、システム上の問題によってシミュレーションの最終状態に到達した場合(ステップ713)、シミュレーションが終了する(ステップ714)。それ以外はシミュレータ外部からの介入が有るまでは、通常状態のシミュレーションが継続される(ステップ712)。
【0058】
ステップ705で故障注入指示部113(シミュレータ外部)から送信された故障注入指示を故障注入実行部105の通信I/F部400が受信すると(ステップ715)、受信した故障注入指示をコマンド解釈部0401が解釈し、注入する故障が割り付けられた割込みベクタ指定とそれを実行するべきタイムスタンプが得られる。
【0059】
これらを元に、コマンド実行部0402は前記タイムスタンプまでシミュレーション時間が到達するまで待機した後に、割込みコントローラ203に対し、前記の選択された割込みベクタに対応する割込み信号を入力する(ステップ716)。
【0060】
前段階(ステップ716)と同時に、コマンド実行部0402はクロックジェネレータ107に介入し、クロック信号を加速する(ステップ717)。
【0061】
この状態でCPU201上のソフトウェア実行に割込みがかかる。この時、CPU内部のレジスタ及びPCやSP等の特殊レジスタの内容もCPUのコンテクストスイッチ機能(複数のプロセスが1つのCPUを共有できるようにCPUの状態(コンテキスト)を保存及び復元するプロセス)でメモリに書き出される。これに対して、割込みハンドラ内部で選択された値、即ち、注入する故障時の値の書き換え動作を行う。更に、割込みのコンテクストスイッチ機能を使いこれらのメモリ値を前記のレジスタなどに書きもどすことで、マイコン内部状態の観測、書き換え動作を行う(ステップ718)。
【0062】
この時に加速するクロックの値は、故障注入の実行時の時間の総和が、もとの1クロック(通常のクロックカウンタ)の周期より小さくなるように設定する。これによって、故障注入動作の遅延時間を0とみなすことが可能となる。
【0063】
前段(ステップ718)の割込み処理が終了すると、CPU201から割込みコントローラ203に対し信号が送られる場合、これをコマンド実行部0402は読み取って、クロック加速を終了させ、元のクロック周波数にもどす(ステップ719、ステップ720)。
【0064】
割込み処理が終了したとき、CPU201から割込みコントローラ203に対し信号が送られない場合、故障注入処理入りバイナリ112の各割込み処理内部でクロック周波数を低下させるような命令を追加する必要がある。この時はクロックジェネレータ107がバス204に接続され、ソフトウェアからクロックの逓倍率を操作できるように実装する必要がある。
【0065】
コマンド実行部0402は割込み処理の終了(ステップ720)を検知すると、実際に割込みが終了したタイムスタンプや、指定されたレジスタ値を読み取って、コマンド終了応答を図3に示したフォーマットを用いて生成して故障注入指示部113に送信する(ステップ721)。
【0066】
故障注入指示部113は返送されたコマンド終了応答の内容を保存し、これにより1つの故障注入指示の実行が完了する(ステップ707)。
【0067】
前記の実行終了した命令が試験項目待ち行列404の最後の要素であった場合、シミュレーションが終了する。そうでなければ、シミュレーションを続行してステップ703に戻り、次の試験項目を処理する(708)。
【実施例2】
【0068】
実施例2は実施例1の発明と同等機能をソフトウェアのみで実装する場合の構成例である。即ち、実施例1では、図1に示すように、故障注入指示部113及び故障注入実行部105経由で、クロックジェネレータ107及び割込みコントローラ203のハードウエアに対して故障注入を行っているのに対し、実施例2では、後述する図9に示すように、故障注入バイナリ生成部109aの中に、故障注入を入れ込むための処理部(故障注入トリガ組込み部504)を設けたことが特徴である。
【0069】
ソフトウェアとマイコン上のコンポーネントのみの改造が必要であることから、実施例2は実マイコン上での動作も可能である。
【0070】
実施例をソフトウェアのみで実装する場合の構成を、図8を用いて概説する。
【0071】
本システムはマイコン動作の模擬が可能なシミュレータ111上でマイコンモデル106を動作させる。このマイコンモデル106上で動作する故障注入指示付きバイナリ109は、実施例1で用いられる故障注入機能付きバイナリ112に、ユーザが故障注入させたいタイミングでソフトウェア割込みを挿入したバイナリとなっている。このバイナリは、故障注入バイナリ生成部110aによってシミュレーション開始前に生成される。
【0072】
マイコンモデル106内部の構造は対象とする電子系部品によって異なるが、CPU201、ROM104、バス204、割込みコントローラ203、クロックジェネレータ107、バスコントローラ108は本発明の成立のために必須となる。
【0073】
また、本実施例ではクロックジェネレータ107はバス204に接続され、CPU201から参照可能なメモリ空間に割り付けられたレジスタによって、クロックジェネレータ107が出力するクロック信号の逓倍率を操作可能な構造をもつ必要がある。
【0074】
図9は実施例1で用いる故障注入バイナリ生成部110aの構成を、図10は故障注入バイナリ生成部110aによる故障注入指示付きバイナリ109生成フローを示す。
【0075】
この部品(110a)は、オリジナルバイナリファイル0500、故障注入アセンブリ0502、の2つのファイルを入力とし、故障シナリオ510を参照して、故障注入シミュレーションで用いられる故障注入指示付きバイナリ109aを出力する。
【0076】
故障注入バイナリ生成部110aが動作を開始すると、まずユーザに対し、検証したいソフトウェア、すなわちオリジナルバイナリ500の登録を要求する(ステップ600a)。
【0077】
入力されたオリジナルバイナリファイル500の割込みテーブルを、未使用割り込みベクタテーブル抽出部501が解析し、処理が未割り当てとなっている割込みベクタを抽出する(ステップ601a)。
【0078】
故障注入アセンブリ組込み部503はユーザが望む故障モードと等価なビット演算を、故障注入アセンブリ502中の一つないしは複数を組み合わせ、故障注入割込み処理として生成する。
【0079】
さらに、この故障注入割込み処理をステップ0601aで抽出した未使用割り込みベクタに割り当てる(ステップ0602a)。
【0080】
次に故障注入トリガ組込み部0504はユーザより故障注入シナリオ510を受理する(ステップ0603a)。
【0081】
故障注入シナリオ510には故障注入対象となる関数名と、その発生時間を関数の呼出しまたは終了の二つを選択した物、が格納されている。
【0082】
さらに、ユーザが実装したソフトウェアの関数内部にソフト割込みを用いて、前段(S602a)で埋め込んだ故障注入割込みをトリガする機能を埋め込む(ステップ0604a)。
【0083】
これらを最後に故障注入指示付きバイナリ109として書きだす(ステップ0605a)。
【0084】
図11は本発明の実施例2のシミュレーション実行の全体フローを示す。
【0085】
ユーザがシミュレーションの開始を選択すると、シミュレータ内部で故障注入の実行準備が始まる(ステップ700a)。
【0086】
シミュレータは故障注入指示付きバイナリをロードし、シミュレータ上でソフトウェアの実行模擬が開始される(ステップ701a)。
【0087】
また、通常状態のシミュレーション継続中に(702a)、ユーザからの要求、又はシステム上の問題によってシミュレーションの最終状態に到達した場合(ステップ702b)、シミュレーションが終了する(ステップ703a)。
【0088】
それ以外はCPUが故障注入割込み命令を実行するまでは、通常状態のシミュレーションが継続される(ステップ704a)。
【0089】
CPUが故障注入割込み命令をソフトウェア割込み命令を使ってトリガすると、CPUが故障を注入する割込み処理に分岐する(ステップ704b)。
【0090】
この割込み処理の1命令目でクロックジェネレータ107の逓倍率レジスタにアクセスし、クロック信号を加速する。この時に加速するクロックの値は、故障注入の実行時の時間の総和が、もとの1クロック(通常のクロックカウンタ)の周期より小さくなるように設定する。(ステップ705a)。
【0091】
この時、CPU内部のレジスタ及びPCやSP等の特殊レジスタもCPUのコンテクストスイッチ機能でメモリに書き出される。これに対して、割込みハンドラ内部で選択された値の書き換え動作を行い。更に割込みのコンテクストスイッチ機能を使いこれらのメモリ値を前記のレジスタなどに書きもどすことで、マイコン内部状態の観測、書き換え動作を行う(ステップ706a)。
【0092】
書き換え動作の後の命令でクロックジェネレータ107の逓倍率レジスタにアクセスし、クロック信号を減速する(ステップ707a)。
【0093】
割込み処理が終了するとCPUは通常状態のステップ702aに分岐し、ソフトウェアの実行を継続する(ステップ708a)。
【符号の説明】
【0094】
104:ROM、105:故障注入実行部、106:マイコンモデル、107:クロックジェネレータ、108:バスコントローラ、110:故障注入バイナリ生成部、111:シミュレータ、112:故障注入処理入りバイナリ、113:故障注入指示部、201:CPU、203:割込みコントローラ、204:バス
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11