(57)【要約】【課題】異常のあるＣＰＵコアを特定できない場合でも適切なフェールセーフ処理が可能な情報処理装置を提供すること。【解決手段】プログラム記憶手段１２と、ロックステップモードから非同期モードに切り替えるモード切り替え手段３０と、を備えた情報処理装置１００であって、ロックステップモードの第１の演算手段と第２の演算手段の演算結果を比較する比較手段３２と、演算結果が一致しない場合、モード切り替え手段がロックステップモードから非同期モードに切り替えた後、第１の演算手段と第２の演算手段にそれぞれ自己診断ソフトを実行させるソフト制御手段３１と、を有し、２つの演算手段の自己診断の結果がいずれも正常な場合、モード切り替え手段が非同期モードからロックステップモードに切り替えた後、ソフト制御手段が、自己診断ソフトの実行により動作が保証されたフェールセーフソフトを第１の演算手段と第２の演算手段にそれぞれ実行させる。【選択図】図１
2012068788.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを記憶したプログラム記憶手段と、第１の演算手段と、第２の演算手段と、
前記第１の演算手段及び前記第２の演算手段が同じ命令を同じタイミングで実行するロックステップモードから、前記第１の演算手段及び前記第２の演算手段が独立に命令を実行する非同期モードに切り替えるモード切り替え手段と、を備えた情報処理装置であって、
ロックステップモードの前記第１の演算手段と前記第２の演算手段の演算結果を比較する比較手段と、
前記演算結果が一致しない場合、前記モード切り替え手段がロックステップモードから非同期モードに切り替えた後、前記第１の演算手段及び前記第２の演算手段にそれぞれ自己診断ソフトを実行させるソフト制御手段と、を有し、
前記第１の演算手段と前記第２の演算手段の自己診断の結果がいずれも正常な場合、前記モード切り替え手段が非同期モードからロックステップモードに切り替えた後、前記ソフト制御手段が、前記自己診断ソフトの実行により動作が保証されたフェールセーフソフトを前記第１の演算手段及び前記第２の演算手段にそれぞれ実行させる、
ことを特徴とする情報処理装置。
【請求項２】
前記自己診断ソフトは、前記フェールセーフソフトに、該フェールセーフソフトによる処理の期待値と、該期待値の検証処理を加えたプログラムである、
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記自己診断ソフトは、前記フェールセーフソフトから所定の規則に従い抽出された命令を含むように生成された一連の処理、前記一連の処理の期待値、及び、該期待値の検証処理を有するプログラムである、
ことを特徴とする請求項１記載の情報処理装置。
【請求項４】
前記第１の演算手段の自己診断の結果と前記第２の演算手段の自己診断の結果のいずれか一方のみが異常であることを示す場合、
異常があった前記第１の演算手段又は前記第２の演算手段を当該情報処理装置から切り離し、自己診断の結果が正常な前記第１の演算手段又は前記第２の演算手段による演算結果をバスに出力する出力選択手段、
を有することを特徴とする請求項１〜３いずれか１項記載の情報処理装置。
【請求項５】
ロックステップモードの前記演算結果が一致する場合、前記比較手段は前記第１の演算手段又は前記第２の演算手段のいずれかの前記演算結果をバスに出力する、
ことを特徴とする請求項１〜４いずれか１項記載の情報処理装置。
【請求項６】
プログラムを記憶したプログラム記憶手段と、
第１の演算手段と、第２の演算手段と、
前記第１の演算手段及び前記第２の演算手段が同じ命令を同じタイミングで実行するロックステップモードから、前記第１の演算手段と前記第２の演算手段が独立に命令を実行する非同期モードに切り替えるモード切り替え手段と、を備えた情報処理装置であって、
ロックステップモードの前記第１の演算手段と前記第２の演算手段の演算結果を比較する比較手段と、
前記第１の演算手段と前記第２の演算手段の演算結果が一致しない場合、一致しない回数を計測するカウンタと、
前記モード切り替え手段がロックステップモードから非同期モードに切り替えた後、前記第１の演算手段及び前記第２の演算手段にそれぞれ自己診断ソフトを実行させるソフト制御手段と、を有し、
前記第１の演算手段及び前記第２の演算手段の自己診断の結果がいずれも正常であり、かつ、前記カウンタのカウンタ値が閾値を超えた場合、前記モード切り替え手段が非同期モードからロックステップモードに切り替えた後、前記ソフト制御手段が、前記自己診断ソフトの実行により動作が保証されたフェールセーフソフトを前記第１の演算手段及び前記第２の演算手段にそれぞれ実行させる、
ことを特徴とする情報処理装置。
【請求項７】
前記第１の演算手段及び前記第２の演算手段の自己診断の結果がいずれも正常であり、かつ、前記カウンタのカウンタ値が閾値以下の場合、前記モード切り替え手段が非同期モードからロックステップモードに切り替えた後、前記ソフト制御手段は車載装置を制御するプログラムを前記第１の演算手段及び前記第２の演算手段にそれぞれ実行させる、
ことを特徴とする請求項６項記載の情報処理装置。
【請求項８】
プログラムを記憶したプログラム記憶手段と、
第１の演算手段と、第２の演算手段と、
前記第１の演算手段及び前記第２の演算手段が同じ命令を同じタイミングで実行するロックステップモードから、前記第１の演算手段及び前記第２の演算手段が独立に命令を実行する非同期モードに切り替えるモード切り替え手段と、を備えた情報処理装置の異常検出方法であって、
比較手段が、ロックステップモードの前記第１の演算手段と前記第２の演算手段の演算結果を比較するステップと、
前記演算結果が一致しない場合、前記モード切り替え手段がロックステップモードから非同期モードに切り替えるステップと、
ソフト制御手段が、前記第１の演算手段及び前記第２の演算手段にそれぞれ自己診断ソフトを実行させるステップと、
前記第１の演算手段及び前記第２の演算手段の自己診断の結果がいずれも正常な場合、前記モード切り替え手段が非同期モードからロックステップモードに切り替えるステップと、
前記ソフト制御手段が、前記自己診断ソフトの実行により動作が保証されたフェールセーフソフトを前記第１の演算手段及び前記第２の演算手段にそれぞれ実行させるステップと、を有することを特徴とする異常検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵ又はＣＰＵコアの異常を検出することができる情報処理装置等に関し、特に、ロックステップモードで動作するデュアルコア等のＣＰＵ又はＣＰＵコアの異常を検出することができる情報処理装置及び異常検出方法に関する。
【背景技術】
【０００２】
車両には数多くのコンピュータ（ＥＣＵ：electronic  control  unit）が搭載されており、コンピュータにより各種制御が実行されている。コンピュータにはＣＰＵが搭載されているが、ＣＰＵも機械の一種なので異常が生じることがある。車両では安全確保の観点から仮にＣＰＵに異常が生じても、運転者による回避行動が確保されるようにＣＰＵを設計する必要がある（以下、フェールセーフ処理という）。
【０００３】
このため、コンピュータに複数のＣＰＵを搭載し相互に出力を検証するなどの手法が採用されるが、複数のＣＰＵの出力が一致しない場合に、異常が生じたＣＰＵを特定する必要が生じる。
【０００４】
例えば、３つのＣＰＵコアを搭載したトリプルコアのＣＰＵでは、コンピュータは比較的容易に異常のあるＣＰＵコアを特定することができる。すなわち、３つのＣＰＵコアに同じ処理を実行させ出力を比較回路などで比較し、３つのＣＰＵコアのいずれかの出力に不一致が生じた場合、コンピュータは多数決で異常のあるＣＰＵコアを特定することができる。
【０００５】
しかしながら、トリプルコアを採用することはコスト高となるため、デュアルコアを搭載したＣＰＵにおいても異常のあるＣＰＵコアを特定することが望まれている。例えば、ロックステップ式のデュアルコアを搭載したＣＰＵでは、同じ処理を２つのＣＰＵコアで常に実行し、それぞれのＣＰＵコアの出力を比較する方法が取られる。そして、一方のＣＰＵコアで出力に不一致が生じた場合、もう一方のＣＰＵコアのみで処理を継続する。
【０００６】
このように何らかの方法で異常のあるＣＰＵコアが特定できればそのＣＰＵコアを切り離し、フェールセーフ処理が可能になる（例えば、特許文献１参照。）。特許文献１には、同期状態で両者に不一致エラーが検出された場合、一時的に非同期となり故障箇所が明示的であれば故障部分を切り離すフォールトトレラントシステムが開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−１７８６１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、２つしかＣＰＵコアがないデュアルコアでは、出力に不一致が生じた場合、どちらが正しいかの判定が困難になるが、特許文献１にはどのように異常のあるＣＰＵコアを明示的にするかについて開示されていないという問題がある。上記のように異常のあるＣＰＵコアを特定できないと、適切なフェールセーフ処理が困難である。
【０００９】
本発明は、上記課題に鑑み、デュアルコア又は２つのＣＰＵを搭載し、異常のあるＣＰＵコアを特定できない場合でも適切なフェールセーフ処理が可能な情報処理装置及び異常検出方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、プログラムを記憶したプログラム記憶手段と、第１の演算手段と、第２の演算手段と、前記第１の演算手段及び前記第２の演算手段が同じ命令を同じタイミングで実行するロックステップモードから、前記第１の演算手段及び前記第２の演算手段が独立に命令を実行する非同期モードに切り替えるモード切り替え手段と、を備えた情報処理装置であって、ロックステップモードの前記第１の演算手段と前記第２の演算手段の演算結果を比較する比較手段と、前記演算結果が一致しない場合、前記モード切り替え手段がロックステップモードから非同期モードに切り替えた後、前記第１の演算手段及び前記第２の演算手段にそれぞれ自己診断ソフトを実行させるソフト制御手段と、を有し、前記第１の演算手段と前記第２の演算手段の自己診断の結果がいずれも正常な場合、前記モード切り替え手段が非同期モードからロックステップモードに切り替えた後、前記ソフト制御手段が、前記自己診断ソフトの実行により動作が保証されたフェールセーフソフトを前記第１の演算手段及び前記第２の演算手段にそれぞれ実行させる、ことを特徴とする。
【発明の効果】
【００１１】
デュアルコア又は２つのＣＰＵを搭載していても、異常のあるＣＰＵコアを特定できない場合でも適切なフェールセーフ処理が可能な情報処理装置及び異常検出方法を提供することができる。
【図面の簡単な説明】
【００１２】
【図１】情報処理装置の概略を説明する図の一例である。
【図２】情報処理装置の概略構成図の一例である。
【図３】ＣＰＵの機能ブロック図の一例である。
【図４】ロックステップモードと非同期モードそれぞれのモードで、ブロック間のラインやブロックの有効・無効を説明する図である。
【図５】ロックステップ管理部がロックステップモードと非同期モードを切り替える手順を示すフローチャート図の一例である。
【図６】フェールセーフソフトと自己診断ソフトの関係を模式的に説明する図の一例である。
【図７】フェールセーフソフトから自己診断ソフトを生成する際の手順を模式的に説明する図の一例である。
【図８】図５のフローチャート図を変形したフローチャート図の一例である。
【図９】通常ソフト内のフェールセーフソフトを模式的に説明する図の一例である。
【発明を実施するための形態】
【００１３】
以下、本発明を実施するための形態について図面を参照しながら説明する。
図１は、本実施形態の情報処理装置の概略を説明する図の一例である。情報処理装置はＣＰＵにロックステップ式のデュアルコアを搭載しており、比較手段が常時、２つのＣＰＵコアの出力を比較している（ロックステップモード）。
（１）比較装置が２つの出力の不一致を検出した場合、情報処理装置はロックステップモードから非同期モードになる。
（２）非同期モードになった各ＣＰＵコアはそれぞれ自己診断ソフトを実行する。自己診断ソフトには、ＣＰＵコアの典型的な機能が正常か否かを判定するための処理と期待値が記述されており、処理結果と期待値が一致するか否かによりＣＰＵコアが正常か否かが判定される。
（３）自己診断ソフトには、ＣＰＵコアの典型的な機能が正常かどうかを診断するための処理が記述されているが、実際に車両を制御するソフト（以下、通常ソフトという）と比べ規模が小さいことから、異常の検出精度は１００％未満であることが知られている。このため、どちらかのＣＰＵコアに異常があっても、自己診断ソフトではどちらのＣＰＵコアにも問題がない結果が得られ、異常のあるＣＰＵコアを特定できない場合がある。
（４）この場合、２つのＣＰＵコアはロックステップモードに戻り、２つのＣＰＵコアがどちらもフェールセーフソフトを実行する。
【００１４】
本実施形態の情報処理装置では、このフェールセーフソフトが、自己診断ソフトで保証された処理のみで構成されている点が特徴の１つとなる。
【００１５】
こうすることで、フェールセーフソフトが実行される間、車両は自己診断ソフトにより異常が生じない動作のみを行うので、運転者は確実に退避行動することができる。
【００１６】
このようなフェールセーフソフトの最も簡単な構成は、自己診断ソフトとフェールセーフソフトウェアを同じものとすることであり、自己診断ソフトで異常が検出されなければ、フェールセーフ処理においても何ら問題が生じないことが保証される。
【００１７】
または、自己診断ソフトの処理をフェールセーフソフトの処理から網羅的に抽出して構成することで、フェールセーフソフトが実行される間、車両は自己診断ソフトにより異常が生じない動作のみを行うことができる。フェールセーフソフトは、運転者が退避行動を取るために必要な小規模な処理に抑制されているので、自己診断ソフト＞フェールセーフソフトの関係を保証できる。
【００１８】
〔ハードウェア構成〕
図２は、情報処理装置１００の概略構成図の一例を示す。情報処理装置１００は例えばＥＣＵ（electronic  control  unit）と称され、各種の車載装置を制御するために用いられる。情報処理装置１００は、システムバス１９に接続されたＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３及びＩＮＴＣ（割込みコントローラ）１４、Ｉ／Ｏバス２０に接続されたＩ／Ｏ１７、並びに、システムバス１９とＩ／Ｏバスに接続されたＢＲＧ（バスブリッジ）１５を有する。
【００１９】
ＲＯＭ１２には、情報処理装置１００が制御のために実行するプログラム（以下、通常ソフトという）が記憶されている。プログラムは後述するように、通常ソフトの他、自己診断ソフト及びフェールセーフソフトを含む。この他、ＯＳやデバイスドライバが記憶されていてもよい。通常ソフトによる処理を通常処置、自己診断ソフトによる処理を自己診断処理、フェールセーフソフトによる処理をフェールセーフ処理と呼ぶ場合があるが、ソフトと処理は厳密に区別しなくてもよいものである。
【００２０】
ＲＡＭ１３はＣＰＵ１１がプログラムを実行する際の作業メモリであり、ＩＮＴＣ１４は、タイマ、センサ、他のＥＣＵ等からの割込み要因を調停して、ＣＰＵ１１に割込み要求する。
【００２１】
ＢＲＧ１５は、システムバス１９とＩ／Ｏバス２０の間で相互に周波数や電圧値などを変換する。Ｉ／Ｏ１７は情報処理装置１００と外部の機器を接続するインタフェースであり、例えば、各種のアクチュエータ、センサ、スイッチ等が接続される。
【００２２】
図３は、ＣＰＵ１１の機能ブロック図の一例である。このＣＰＵ１１はデュアルコアを備えたロックステップが可能なＣＰＵである。マルチコアでなく複数のＣＰＵ１１を搭載してもよい。ＣＰＵコア１１１（以下、区別する場合ＣＰＵコア１，２という）はロックステップ管理部３０と接続されている。ロックステップ管理部３０は、調停部３１、出力比較部３２、結果判定部３３、及び、出力選択部３４を有する。
【００２３】
ロックステップとは、２以上のＣＰＵコア１１１が同じ命令ストリームを同時並行に実行する命令実行方法をいう。また、ロックステップが可能なＣＰＵ１１をロックステップＣＰＵという。ロックステップＣＰＵ内の各ＣＰＵコア１１１は、同じ命令ストリームを実行するので、同じ結果を出力する。しかし、１つ以上のＣＰＵコア１１１に異常が生じたり、電気的に許容できない極めて大きいノイズが発生したり、アルファ粒子などがＣＰＵコア１１１に影響を及ぼすと、複数のＣＰＵコア１１１の出力が一致ないことが生じる。
【００２４】
本実施形態のＣＰＵ１１は、２つの出力が不一致の場合に異常のあるＣＰＵコア１１１の特定を試みるが、特定できなくてもＣＰＵコア１１１がフェールセーフソフトを実行する範囲ではＣＰＵ１１１に異常が生じないことを保証できる。
【００２５】
ロックステップ管理部３０は、２つのＣＰＵコア１１１が同じ命令ストリームを実行するロックステップモードと、各ＣＰＵコア１１１が独立に命令ストリームを実行する非同期モードを切り替える。ロックステップ管理部３０は、ロックステップモードか非同期モードかにより、ロックステップ管理部３０の各機能を制御する。
【００２６】
図４は、ロックステップモードと非同期モードそれぞれのモードで、ブロック間のラインやブロックの有効・無効を説明する図である。ロックステップモードでは調停部３１と出力比較部３２、及び、関連するラインが有効になり、非同期モードでは調停部３１、結果判定部３３、出力選択部３４、及び、関連するラインが有効になる。
【００２７】
図３に戻り、調停部３１にはＲＯＭ１２が接続されており、調停部３１は、ＣＰＵ１１の状態に応じて、通常ソフト、自己診断ソフト又はフェールセーフソフトの命令をＣＰＵコア１とＣＰＵコア２に出力する。
【００２８】
出力比較部３２は、ロックステップモードの場合、ＣＰＵコア１とＣＰＵコア２の出力結果を常時（例えばクロック毎に）比較し、不一致の場合に調停部３１に通知する。また、出力比較部３２は、不一致を検出すると、ＣＰＵコア１とＣＰＵコア２に自己診断ソフトの実行開始を通知する。また、両者の出力が一致している場合、出力比較部３２はＣＰＵコア１とＣＰＵコア２の少なくともどちらかの演算結果を出力する。
【００２９】
結果判定部３３は、非同期モードにおいて、ＣＰＵコア１とＣＰＵコア２からＣＰＵコア１とＣＰＵコア２が自己診断ソフトを実行した際の診断結果を取得して、診断結果に応じて、ＣＰＵコア１とＣＰＵコア２に通常ソフト又はフェールセーフソフトのどちらを実行するかを指示する。
【００３０】
出力選択部３４は、非同期モードにおいて、自己診断ソフトにより異常のあるＣＰＵコア１１１が特定された場合、異常のないＣＰＵコア１又はＣＰＵコア２による通常ソフトの演算結果を選択的にシステムバス１９に出力する。
〔処理手順〕
図５は、ロックステップ管理部３０がロックステップモードと非同期モードを切り替える手順を示すフローチャート図の一例である。
【００３１】
起動直後のＣＰＵ１１はロックステップモードで動作するようになっている（Ｓ１１０）。ロックステップ管理部３０は、ロックステップモードで各部を動作させるため、図４にて説明したように、ラインk1，k2，ラインa1、a2、ラインb1、b2、ラインfを有効に、調停部３１と出力比較部３２を有効に、それぞれ設定する。
【００３２】
ロックステップモードの調停部３１は、通常ソフト又はフェールセーフソフトの命令を１つずつＣＰＵコア１、ＣＰＵコア２に同時に供給する（Ｓ１２０）。ＣＰＵコア１、ＣＰＵコア２に同じ周波数のクロック信号が供給されるので、両者は同時に同じ命令を実行する。なお、調停部３１がＲＯＭ１２から読み出す命令は１つなので、調停部３１は命令を複製してＣＰＵコア１とＣＰＵコア２に供給する。また、ＲＯＭ１２とＣＰＵ間のシステムバス１９がボトルネットとならないような構成では、調停部３１がＣＰＵコア１、ＣＰＵコア２のプログラムカウンタに同じアドレスを設定しても両者が同期して同じ命令を実行できる。
【００３３】
ＣＰＵコア１とＣＰＵコア２はラインa1、a2を介してほぼ同時に演算結果を出力するので、出力比較部３２は２つの出力結果が一致するか否かを比較し、不一致の場合、ロックステップ管理部３０と調停部３１に通知する。なお、一致するか否かは、完全に一致するか否かを判定すればよいが、誤差と見なせるレベルの不一致は一致しているとみなすことができる。
【００３４】
出力比較部３２が一致すると判定した場合（Ｓ１３０のＹｅｓ）、出力比較部３２は、ＣＰＵコア１又はＣＰＵコア２の出力をラインfを介してシステムバス１９に出力する（Ｓ１４０）。
【００３５】
出力比較部３２が一致すると判定しない場合（Ｓ１３０のＮｏ）、ロックステップ管理部３０は、ＣＰＵ１１をロックステップモードから非同期モードに切り替える（Ｓ１５０）。具体的には、非同期モードで各部を動作させるため、ラインk1、k2と調停部３１は有効のまま、ラインc1、c2、ラインd1、d2、ラインe1、e2、ラインgによる通信を有効に、結果判定部３３と出力選択部３４を有効に、それぞれ設定する。
【００３６】
そして、調停部３１は、ＣＰＵコア１又はＣＰＵコア２に自己診断ソフトを実行させる（Ｓ１６０）。具体的には自己診断ソフトの先頭のアドレスをＣＰＵコア１とＣＰＵコア２のプログラムカウンタに設定する。
【００３７】
ＣＰＵコア1とＣＰＵコア２は、出力比較部３２からの自己診断ソフトの開始通知により、自己診断ソフトを実行していることを検知し、それぞれラインc1，c2を介して自己診断結果を結果判定部３３に出力する（Ｓ１７０）。診断結果は、期待値と自己診断ソフトの演算結果が一致するとＨｉｇｈ又はＬｏｗになるものとする。
【００３８】
結果判定部３３は、ＣＰＵコア1とＣＰＵコア２の診断結果に基づき、判定結果を、ロックステップ管理部３０，調停部３１及び出力選択部３４に通知する（Ｓ１８０）。判定結果は以下の４つの場合がある。
(i)  
ＣＰＵコア1の診断結果のみが異常有りを示す
(ii)  ＣＰＵコア２の診断結果のみが異常有りを示す
(iii)  ＣＰＵコア1、２の診断結果がどちらも異常を示す
(iv)  ＣＰＵコア1、２の診断結果がどちらも正常を示す
(iii)のように、ＣＰＵコア１，２のどちらも故障してしまうことは、車両に大きな衝撃が加わるなど情報処理装置１００そのものが物理的に破壊されるような状況に生じる。このようなことは車両が正常に走行している場合には生じないが、万一、生じた場合、情報処理装置１００はメータパネルの警告ランプを全て点灯させるなどして早急にサービス工場（ディーラー）に持ち込むよう運転者に促す（Ｓ１９０）。
【００３９】
(i)又は(ii)のようにＣＰＵコア１又はＣＰＵコア２の一方のみが故障した場合、ＣＰＵ１１は非同期モードのままであるが、調停部３１は判定結果に基づき、ＣＰＵコア１又はＣＰＵコア２のうち故障していない方にだけ通常ソフトの命令を供給する（Ｓ２００）。また、結果判定部３３は、ＣＰＵコア１又はＣＰＵコア２のうち故障していない方に、実行するソフトの種別（ここでは通常ソフト）を通知する。
【００４０】
ＣＰＵコア１又はＣＰＵコア２のうち故障していない方は、実行するソフトの種別（ここでは通常ソフト）に基づき、演算結果を出力選択部３４に出力する。出力選択部３４は判定結果に基づき、ラインe1、e2のうち故障していない側のみを有効にして、故障していないＣＰＵコア１又はＣＰＵコア２のいずれかの演算結果を取得し、ラインgを介して演算結果をシステムバス１９に出力する（Ｓ２１０）。
【００４１】
このように、(i)又は(ii)の場合、情報処理装置１００は非同期モードのまま通常ソフトを実行するので、運転者が異常が生じるまでと同様に運転することができる。なお、ＣＰＵコア１又はＣＰＵコア２に異常が生じたことは、警告ランプなどにより運転者に通知され、また、不揮発メモリに記憶されるので後の解析に利用されることができる。
【００４２】
(iv)のように、ＣＰＵコア1、２の診断結果がどちらも正常を示す場合、ロックステップ管理部３０は、非同期モードからロックステップロックステップモードに切り替える（Ｓ２２０）。
【００４３】
ロックステップモードになると、調停部３１は判定結果に基づき、ＣＰＵコア１又はＣＰＵコア２の両方にフェールセーフソフトを実行させる（Ｓ２３０）。ロックステップモードなので、ＣＰＵコア１とＣＰＵコア２は同時に同じ命令を実行する。また、結果判定部３３は、ＣＰＵコア１又はＣＰＵコア２の両方に、実行するソフトの種別（ここではフェールセーフソフト）を通知する。
【００４４】
ＣＰＵコア１又はＣＰＵコア２の両方は、実行するソフトの種別（ここではフェールセーフソフト）に基づき、出力比較部３２に演算結果を出力する。出力比較部３２は２つの出力が一致すると判定した場合、ＣＰＵコア１又はＣＰＵコア２の出力をラインfを介してシステムバス１９に出力する。
【００４５】
フェールセーフ処理により、最小限必要な処理が実行されるので、運転者は、車両を路肩に退避させるなどの運転操作が可能になる。例えば情報処理装置１００がエンジン制御用のＥＣＵであれば、情報処理装置１００は、運転者のアクセルペダルの操作によるスロットル開度に関係なく、エンジン回転数をアイドリング回転数程度に抑制する。または、エンジン回転数が所定以上になると、アクセルペダルの操作に関係なく燃料噴射をカットする。このようなフェールセーフ処理により車両に低速走行のみを許可して、駐停車することを可能にする。
【００４６】
また、例えば、情報処理装置１００がパワステＥＣＵであれば、情報処理装置１００は、運転者の操舵方向へのトルクを検出した際のアシスト力をゼロにするか又は運転者の操舵を阻害しない程度の小さい値に制御する。これにより、操舵力は重くなっても運転者が所望の方向に車両を操舵することができる。
【００４７】
また、情報処理装置１００がブレーキＥＣＵの場合、情報処理装置１００は、ＡＢＳ（アンチロックブレーキシステム）やＴＲＣ（トラクションコントロール）に関する処理を停止させ、ブレーキアクチュエータのソレノイドバルブを非通電状態にする。これにより、車両は運転者のブレーキペダルの操作による油圧のみで制動されるようになるため、運転者は所望の場所に駐停車させることができる。
【００４８】
〔フェールセーフソフトと自己診断ソフト〕
以下、本実施形態の自己診断ソフトについて説明する。
・自己診断ソフトを実質的にフェールセーフソフトと同じソフトとする
ＣＰＵコア１とＣＰＵコア２のどちらにも異常が検出されない場合、情報処理装置１００はロックステップモードでフェールセーフ処理を実行すると説明したが、これは換言するとフェールセーフ処理が可能なら、自己診断によっても異常がないと判定してよいことになる。したがって、自己診断ソフトをフェールセーフソフトと同じものにすれば、自己診断ソフトの開発が不要になりコスト増を抑制できる。
【００４９】
上述したようにフェールセーフ処理は、いずれのＥＣＵの場合も運転者が退避するために必要な最小限の処理を含んでいるが、期待値や期待値を検証するための処理が含まれていない。このため、開発者はフェールセーフソフトに期待値と期待値を検証するための処理を追加する。
【００５０】
図６は、フェールセーフソフトと自己診断ソフトの関係を模式的に説明する図の一例である。図６では、failsafe関数で従来のフェールセーフ処理を実行し、main関数でfailsafe関数の演算結果を呼び出し、期待値と比較している。
【００５１】
まず、main関数が実行されると、変数kekkaに期待値nnnnが格納される。期待値nnnnは、ＣＰＵコア１１１に異常がない状態で、ＣＰＵコア１１１がフェールセーフ処理を実行した際の制御値である。例えば、エンジンＥＣＵの場合、アイドル時のスロットル開度、燃料カットのために演算されるインジェクター（電子制御式の電磁バルブ）の制御量（電圧値）などである。また、パワステＥＣＵの場合、操舵トルクから演算したアシストトルクである。
【００５２】
次にmain関数は、「  kekka  =  failsafe();」でfalesafe関数を呼び出す。failsafe関数は、アイドル時のスロットル開度、インジェクターの制御量の演算、又は、アシストトルクの演算など、フェールセーフ処理に必要な演算を行い、演算結果を変数enzanに格納する。このフェールセーフ処理では、期待値nnnnを求めた際に実行された演算と同じ演算が実行される。「return  enzan;」により演算結果は変数kekkaに格納される。
【００５３】
main関数は、kitaichiとkekka  を比較して、結果判定部３３に診断結果を出力する。このようにすれば、開発者はフェールセーフソフトを最大に活用して自己診断ソフトを用意することができる。また、自己診断ソフトで診断結果に異常がなければ、フェールセーフ処理によってもＣＰＵコア１１１が異常な振る舞いをすることがないことが保証されるので、運転者は車両を確実に退避させることができる。
【００５４】
・フェールセーフソフトから自己診断ソフトを生成する
フェールセーフソフトをそのまま自己診断ソフトに取り込むのでなく、フェールセーフソフトから命令又は命令ストリームを取り出し、適宜、命令を補完して自己診断ソフトを生成することもできる。フェールセーフソフトを自己診断ソフトとすると、十分な診断ができなかったり、通常ソフトには含まれるが自己診断ソフトでは実行されない命令が多く含まれるおそれもある。
【００５５】
そこで、フェールセーフソフトから命令や命令ストリームを抽出して、それに適宜、命令を補完したり、組み合わせるなどすることで、ＣＰＵコア１１１がより異常を検出しやすい自己診断ソフトが得られると共に、フェールセーフ処理に移行してもフェールセーフ処理の実行は異常がないことが保証される自己診断ソフトを生成することができる。
【００５６】
図７は、フェールセーフソフトから自己診断ソフトを生成する際の手順を模式的に説明する図の一例である。フェールセーフソフトはＣ言語などで記述されているが、ＲＯＭ１２に記憶される際にはコンパイラによりコンパイルされ、オブジェクトコードに変換される。オブジェクトコードは機械語なので実際には１６進数などで表記されるが、図の“Load”等のニーモニックがオペコードである。また、オペコードに続いて、Rｎ（ｎは整数）で表記したオペランドが記述される。オペランドはレジスタ名と数値、２つのレジスタ名、レジスタ名とポインタ名など様々である。オペランドが１つのみの命令も少なくない。
【００５７】
このオブジェクトコードを網羅的に実行した自己診断ソフトがあれば、自己診断ソフトとフェールセーフソフトとを同じ処理内容とした場合以上に、自己診断ソフトの実行により異常が検出されないことが、フェールセーフソフトも異常なく実行可能であることを保証できる。
【００５８】
フェールセーフソフトから自己診断ソフトを作成するため、本実施形態ではコンパイラに命令抽出手段を設ける。命令抽出手段は、例えば３つの態様で命令を抽出する。
Ｉ  フェールセーフソフトのオブジェクトコードで検出される単体のオペコード
II  フェールセーフソフトのオブジェクトコードで検出されるオペコードとオペランドの組
III フェールセーフソフトのオブジェクトコードで検出される連続した命令の命令ストリーム
よって、ＩによりLOAD  ADD  ST  SUB  SHのオペコードが単体で抽出され、IIにより「LOAD  R1」、「ADD  R1」「ST  R1」「LOAD  R2」「SUB  R2」「SH  R3」などの組が抽出され、IIIにより「LOAD＋ADD」「ADD＋ST」「LOAD＋SUB」「SUB＋ST」「LOAD＋SH」などの命令ストリームが抽出される。
【００５９】
この抽出された命令だけではプログラムとして成立しないので、開発者は、最小限の命令を加えて、自己診断ソフトの部品を生成する。最小限の命令として、例えばLoadやStは必然的に必要になる。この他、mov（代入命令）、add（加算命令）、jmp（移動命令）、xor（論理演算）、等で含まれるが、フェールセーフ処理にない命令の混入はフェールセーフ処理の保証が困難になる可能性があるので、フェールセーフソフトに含まれない命令は最小限にすることが好ましい。
【００６０】
なお、IIIの態様では、２つの命令の命令ストリームだけでなく、３以上の命令の命令ストリームを抽出するとさらに好適である。これは、ＣＰＵコア１１１にパイプライン処理が実装されているため、異常の発生（不一致の発生）と連続して実行される命令の組み合わせに相関が生じる傾向があるためである。
【００６１】
開発者は、このようにして自己診断ソフトの部品を完成させる。開発者は複数の自己診断ソフトの部品のまま（又は、組み合わせてもよい）、期待値を算出しておく。期待値の算出に何らかの初期値が必要であれば初期値を与える。
【００６２】
そして、複数の自己診断ソフトの部品毎に、期待値（必要であれば初期値）と期待値を検証する処理を追加する。
【００６３】
以上のようにして、開発者はフェールセーフソフトから自己診断ソフトを生成することができる。このようにして生成された自己診断ソフトは、フェールセーフソフトの内容を十分にカバーするので、フェールセーフ処理の実行を保証でき、また、自己診断ソフトの命令が網羅的な分、自己診断による異常の検出率が大きくなることも期待できる。
【００６４】
〔変形例〕
・通常ソフトへの復帰を可能にする
図５のフローチャート図では、出力比較部３２が不一致を検出することで、自己診断ソフトが実行されるが、どちらのＣＰＵコア１１１からも異常が検出されない場合、情報処理装置１００が通常ソフトを実行することはできなかった。
【００６５】
しかしながら、出力比較部３２が不一致を検出した場合も、一過性のソフトエアーである場合もある。このため、出力比較部３２が不一致を検出した場合、もう一度、情報処理装置１００が通常ソフトを実行できることが好ましい場合があると考えられる。
【００６６】
図８は、図５のフローチャート図を変形したフローチャート図の一例である。ステップＳ１３０までの処理は同様であり、出力比較部３２が不一致と判定した場合（Ｓ１３０のＹｅｓ）、調停部３１が不一致の検出回数を１つ大きくする（Ｓ１３５）。この検出回数はロックステップ管理部３０や調停部３１がアクセス可能なメモリに記憶される。なお、この検出回数は、例えば情報処理装置１００の起動時からカウントされる。
【００６７】
そして、ロックステップ管理部３０は、ロックステップモードから非同期モードに切り替え、ＣＰＵコア１とＣＰＵコア２に自己診断ソフトを実行させる（Ｓ１５０〜Ｓ１８０）。
【００６８】
そして、図８では、(iv)のように、ＣＰＵコア1、２の診断結果がどちらも正常を示す場合、ロックステップ管理部３０は不一致の検出回数が閾値を超えたか否かを判定する（Ｓ２１５）。
【００６９】
不一致の検出回数が閾値を超えていなければ（Ｓ２１５のＮｏ）、不一致が一過性の可能性があるので、ロックステップ管理部３０はステップＳ１１０からの処理を実行する。すなわち、ロックステップモードによりＣＰＵコア１とＣＰＵコア２に通常ソフトを実行させる。こうすることで、一過性の不一致によりフェールセーフ処理が実行されることを防止できる。
【００７０】
不一致の検出回数が閾値を超えている場合（Ｓ２１５のＹｅｓ）、図５と同様に、ロックステップ管理部３０は、非同期モードからロックステップロックステップモードに切り替え、ＣＰＵコア１又はＣＰＵコア２の両方にフェールセーフソフトを実行させる（Ｓ２２０〜Ｓ２３０）。
【００７１】
このように処理することで、不一致の原因が一過性であれば、情報処理装置１００は可能な限り、通常ソフトを実行できる。
【００７２】
・通常ソフトの一部をフェールセーフソフトと兼用する
開発者は、通常ソフトのうち退避操作に重要な箇所を特定することができるが、フェールセーフ処理においてこのような箇所だけＣＰＵコア１１が実行すれば、通常ソフトの一部の実行によりフェールセーフソフトと同様の機能が得られる。
【００７３】
図９は、通常ソフト内のフェールセーフソフトを模式的に説明する図の一例である。なお、比較のため図３のソフト構造も示した。図９では斜線部が退避処理に重要な箇所である。この箇所は通常処理に使用されるのでこのままではフェールセーフ処理に使用できないおそれがある。
【００７４】
そこで、開発者は退避処理に重要な箇所に、フェールセーフ処理用の変数を設定しておき、フェールセーフ処理の際はその変数を利用するようにプログラムを記述する。これにより通常ソフトをフェールセーフソフトとしても利用できるようになる。
【００７５】
フェールセーフ処理用の変数を設定するなどの記述のため、従来より通常ソフトのサイズが大きくなったとしても、通常ソフトとフェールセーフソフトを別々に用意するよりは小さいサイズとすることができる。したがって、フェールセーフソフトが不要になりＲＯＭ１２などのメモリの容量を削減できる。
【符号の説明】
【００７６】
１１      ＣＰＵ
１２      ＲＯＭ
１３      ＲＡＭ
３０      ロックステップ管理部
３１      調停部
３２      出力比較部
３３      結果判定部
３４      出力選択部
１００    情報処理装置
１１１    ＣＰＵコア
【図１】
2012068788.tif 000003
【図２】
2012068788.tif 000004
【図３】
2012068788.tif 000005
【図４】
2012068788.tif 000006
【図５】
2012068788.tif 000007
【図６】
2012068788.tif 000008
【図７】
2012068788.tif 000009
【図８】
2012068788.tif 000010
【図９】
2012068788.tif 000011