(57)【特許請求の範囲】
【請求項１】
インタプリタのプログラムの実行中に、ＣＰＵの命令に用いられる複数のレジスタの中から故障したレジスタを検出し、
上記プログラムの実行を継続しながら、ＲＡＭ上で、上記故障したレジスタを故障していないレジスタにリネームするインタプリタ型のプログラム実行手段、
上記インタプリタ型のプログラム実行手段による処理が継続している間に、上記ＲＡＭ上で割り込み模擬処理を実行する割り込み模擬処理手段を備え、
上記ＣＰＵの命令に用いられる複数の上記レジスタの中に、上記レジスタの故障確認、上記インタプリタ型のプログラム実行手段および上記割り込み模擬処理手段による処理実行のためのソフトウェアに用いられる確認用レジスタが含まれることを特徴とする制御装置。
【請求項２】
上記インタプリタ型のプログラム実行手段は、ＲＯＭのコード領域から読み込まれた実行コードのインタプリト対象の命令が上記インタプリタにとって実行許可と判定された場合に、上記命令を実行することを特徴とする請求項１記載の制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、車両等に搭載されるマイコン（microcomputer）を備えた制御装置に関し、また、その制御装置におけるレジスタの故障復帰方法に関するものである。
【背景技術】
【０００２】
従来、マイコン内の故障検出・復帰方法について、例えば、次の特許文献１、２に見られるような技術が開示されている。
特許文献１では、実行モードで動作するＣＰＵ１つと監視モードで動作するＣＰＵ２つの３つのＣＰＵで３重化構成をとり、各ＣＰＵから出力されるバスサイクル開始信号を多数決回路でチェックすることで、故障検出を行う（例えば、特許文献１参照）。
特許文献２では、バスに接続された３つ以上のＣＰＵを同期して同じ命令列を処理させ、３つ以上のＣＰＵの処理状態を比較することによって、異常なＣＰＵを検出し、異常と判定した場合にはリセット処理を行い、復帰させるＣＰＵの処理を正常動作しているＣＰＵの処理に同期させて復帰させる（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第３０６３３４号公報
【特許文献２】特開２０１３−２０６２６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来の方法を採用した装置では、異常判定用の多数決回路の増設が必要であり、最低でもＣＰＵを３つ使用しなければならず、小型化、省電力化、低コストが求められる車載制御装置に適していなかった。また従来の方法では、ＣＰＵの処理結果による故障検出やハードウェアが故障していない場合の復旧は可能であるが、レジスタが故障した場合は原因特定やＣＰＵのリセットを行っても、故障したレジスタを復旧させることは不可能であった。
【０００５】
そのため、マイコン内のＣＰＵのレジスタが故障した場合に、出来る限り最小のハードウェア構成でレジスタの故障を検出し、故障したレジスタを復旧させることができる技術が望まれている。
【０００６】
本発明は、上記課題を解決するためになされたものであり、１つのＣＰＵでレジスタの故障を検出でき、システムを復旧させることができる制御装置およびレジスタの故障復帰方法を提供するものである。
【課題を解決するための手段】
【０００７】
この発明に係わる制御装置は、インタプリタのプログラムの実行中に、ＣＰＵの命令に用いられる複数のレジスタの中から故障したレジスタを検出し、上記プログラムの実行を継続しながら、ＲＡＭ上で、上記故障したレジスタを故障していないレジスタにリネームするインタプリタ型のプログラム実行手段、上記インタプリタ型のプログラム実行手段による処理が継続している間に、上記ＲＡＭ上で割り込み模擬処理を実行する割り込み模擬処理手段を備え、上記ＣＰＵの命令に用いられる複数の上記レジスタの中に、上記レジスタの故障確認、上記インタプリタ型のプログラム実行手段および上記割り込み模擬処理手段による処理実行のためのソフトウェアに用いられる確認用レジスタが含まれることを特徴とするものである。
【発明の効果】
【０００９】
この発明の制御装置によれば、インタプリタ上で故障したレジスタを故障していないレジスタにリネームし、故障したレジスタを復旧させることで、フォールトトレラントモードでの処理継続を行うことが可能となる。
【図面の簡単な説明】
【００１１】
【図１】この発明の実施の形態１に係わる制御装置の構成を示す図である。
【図２】図１の制御装置のＣＰＵ内部構成を示す図である。
【図３】この発明の実施の形態１のレジスタ故障検出処理を示すフローチャートである。
【図４】この発明の実施の形態１のリネームによるレジスタ故障復帰方法を実現するフローチャートである。
【発明を実施するための形態】
【００１２】
実施の形態１．
以下、図１から図４に基づいて、本発明の実施の形態１における制御装置およびその制御装置におけるレジスタ故障復帰方法について説明する。なお、各図間に同一符号は同一あるいは相当部分を示す。
ここで、発明の対象となる制御装置としては、例えば車載制御装置が想定される。本発明のレジスタの故障復帰方法を用いることで、ハードウェア最小構成のＣＰＵ１つでもインタプリタ型のプログラム実行手段によりＣＰＵ内のレジスタの故障検出、故障からの復旧が行え、車載機器に要求されるスペース確保の要求を満たし、フォールトトレラント観点から求められるレジスタ故障で完全に動かなくなることを抑制して最低限の機能ながら動作し続けられる車両のシステムを提供することができる。
【００１３】
図１は、この発明の実施の形態１に係わる制御装置の構成を示す図であり、車載制御装置のリネームによるレジスタ故障復帰方法を実現するためのマイコンの最小構成図である。図１に示すように、本発明を実現するためには、ＣＰＵ１、ＲＯＭ２、ＲＡＭ３、割り込みコントローラ４、通信部５、バス６が最低限必要である。
【００１４】
ＣＰＵ１は、車両制御や各種ＥＣＵの機能で求められるソフトウェアの処理を実施する箇所であり、例えば、本装置には１個が備えられている。ＲＯＭやＲＡＭ等の周辺装置にアクセスしてデータの入出力処理を実施し、演算処理を実施することでソフトウェアに求められる機能の実現をする。ＣＰＵ１に故障がない場合、ＣＰＵ１はＲＯＭ２に記録されているコードを順次読み出して、ＲＡＭ３のデータやスタックを書き換えながら処理を実施していくが、このＣＰＵ１に故障があると、ソフトウェアを実行できなくなり、機能を実現することができない。
そこで、本発明では、ＣＰＵ１内のレジスタが故障しても、これを復旧させることで機能を保つ技術について示す。
【００１５】
ＲＯＭ２は、ＣＰＵ１で実行できるコードや変更しない変数の値を記録している記憶媒体である。本発明では、ＲＯＭ２には車両制御や各種ＥＣＵの機能で求められるソフトウェアだけでなく、リネームによるレジスタの故障復帰方法に用いるインタプリタや割り込み模擬処理のソフトウェアも記録されている。
【００１６】
ここで、図２は、図１の制御装置のＣＰＵ１の内部の最小構成を表す図であり、ＣＰＵ１は、複数のレジスタ（Reg-1、-2、-3、…、-n0、-n1、-n2、-n3）よりなるレジスタ群２０、プログラムカウンタ２１（ＰＣ）、スタックポインタ２２（ＳＰ）、各種のフラグ情報が確認できるフラグレジスタ２３（Ｆｌａｇ）、レジスタ群２０等に読み込まれたデータを処理する処理部２４を構成要素として含んでいる。
【００１７】
インタプリタのソフトウェアは、図２のレジスタ群２０の内、少なくとも３つの故障していないと確認するレジスタ（例えば、図２のReg-1、-2、-3。）のみで予め構成されたソフトウェアであり、割り込み模擬処理のソフトウェアも同様に、故障していないと確認するレジスタのみで構成されており、予めＲＯＭ２に記憶させておく。これらインタプリタや割り込み模擬処理（割り込み疑似処理）に用いるレジスタ（確認用レジスタ）は、後述する図３のフローチャートに示すレジスタの故障判定手段による処理の中で故障していないことが確認される。そして、この故障していないレジスタ（確認用レジスタ）を用いて、後述する図４のフローチャートに示すリネームによるレジスタの故障復帰方法に従って、リネームに必要となるインタプリタや割り込み模擬処理を展開する。図４は、インタプリタ型のプログラム実行手段による処理を示している。
【００１８】
ＲＡＭ３は、書き換えが必要なデータやスタック領域として用いられ、実行中のみ記憶、読み出しができる記憶媒体である。本発明では、ソフトウェアを動かす通常のＲＡＭ３の使用に加えて、レジスタに故障が検出された場合、ＲＯＭ２からインタプリタと割り込み模擬処理を展開する先となる。
【００１９】
割り込みコントローラ４は、割り込み処理を制御するハードウェアであり、車載制御装置ではよく用いられる。本発明ではレジスタに故障が検出された場合、ＲＯＭ２からＲＡＭ３に割り込み模擬処理が展開されて、割り込み模擬処理から制御されるようになる。割り込み模擬処理は、レジスタ故障が検出された場合に、ＲＡＭ３上に展開され、割り込みコントローラ４から割り込み要求を受けて、インタプリタ内の処理をスタック上に格納し、割り込み処理を実行する。割り込み処理を終えたら、スタック上からインタプリタ内で行われていた処理を戻し、割り込み完了処理を行う。この割り込み模擬処理は、インタプリタ型のプログラム実行手段による処理が継続している間に実行され、この処理を実行する手段を割り込み模擬処理手段という。
【００２０】
通信部５は、車載制御装置ではＣＡＮやＦｌｅｘＲＴａｙ、ＬＩＮなどの通信をコントロールするハードウェアがよく用いられる。本発明ではレジスタに故障が検出された場合、ＲＯＭ２からＲＡＭ３に展開されたインタプリタから制御されるようになる。
【００２１】
バス６は、ＣＰＵ１と周辺装置を繋ぐ構成部である。バス６としては、アドレスバス、データバス、コントロールバスがあり、図２のプログラムカウンタ２１（ＰＣ）によって参照すべきアドレスバスの取得や、データバスで図２のレジスタ群２０にＣＰＵ１が必要なデータの入出力を行っている。
【００２２】
次に、リネームによるレジスタの故障復帰方法を適用するＣＰＵ１の内部構成について、図２を用いてより詳しく説明する。図２において、レジスタ群２０には、ＣＰＵ１の命令に用いられる複数レジスタが含まれ、ＣＰＵ１内で図１のバス６からデータが入出力される。本発明では、このレジスタ群２０の内の少なくとも１つ以上のレジスタが故障（破損）した場合の復帰処理を想定している。また、図３のレジスタ故障判定処理の中で故障していないと確認するレジスタ（確認用レジスタ）を少なくとも３つ、レジスタ群２０内に予め確保する。この図３のレジスタ故障判定の中で故障していないと確認する確認用レジスタは、レジスタの故障確認やインタプリタのソフトウェアや割り込み模擬処理のソフトウェアとして使用し、これら以外には使用しない。なお、レジスタ群２０に含まれる確
認用レジスタ以外のレジスタについては、確認用レジスタが故障していないことを確認後、図３のフローチャートのＳ１０６において、レジスタ故障判定がなされ、異常（故障）があった場合は復帰処理へと移行する。
【００２３】
上述したように、確認用レジスタは、設計の段階で、ＣＰＵ１のレジスタ群２０の内、通常動作では使用しないと考えられるレジスタを少なくとも３つ選定して、事前の設計の段階で確保する。この３つの確認用レジスタ（例えば、図２のReg-1、-2、-3。）は、レジスタ故障が判明したときのみ使用するものであり、図３のフローチャートでは、確認用レジスタが本当に故障していないかどうかを確認している。
ここで、３つの確認用レジスタを確保する理由は、３つのレジスタの内、２つの比較結果を組み合わせることで故障レジスタを特定するためである。なお、２つのレジスタを比較した場合は、どちらかのレジスタが壊れていた場合に、一方が壊れていることは分かるものの、どちらが壊れているかまでは特定することはできない。
【００２４】
プログラムカウンタ２１（ＰＣ）は、ＣＰＵ１が実行するアドレスが記述されるものである。レジスタ故障がなければ図１のＲＯＭ２のコードに従った処理を実施する。レジスタが故障していた場合はＲＡＭ３上のインタプリタや割り込み模擬処理によってコントロールされるようになる。
【００２５】
スタックポインタ２２（ＳＰ）は、ＲＡＭ３に確保されるスタック領域のアドレスを管理するものである。レジスタ故障がなければ図１のＲＯＭ２のコードに従った処理を実施する。レジスタが故障していた場合はＲＡＭ３上のインタプリタや割り込み模擬処理によってコントロールされるようになる。
【００２６】
フラグレジスタ２３（Ｆｌａｇ）は、各種のフラグ情報、例えば、割り込みのステータスを確認できるものである。フラグレジスタ２３（Ｆｌａｇ）もレジスタ故障がなければ、図１のＲＯＭ２のコードに従った処理を実施するが、レジスタが故障していた場合はＲＡＭ３上のインタプリタや割り込み模擬処理によってコントロールされるようになる。
【００２７】
処理部２４は、レジスタ群２０等に読み込まれたＣＰＵ１へのデータを処理する。この処理では、レジスタ故障がなければ、図１のＲＯＭ２のコードに従った処理を実施するが、レジスタ故障があった場合、インタプリタや割り込み模擬処理に従った処理を実施する。
【００２８】
以下では、図３、図４のフローチャートに基づき、車載制御装置のリネームによるレジスタ故障復帰方法について詳細に説明する。図３は、レジスタ故障を検出するためのフローチャートを示しており、Ｓ１００からＳ１１６が含まれている。このフローの中で、ＣＰＵ１の命令に用いられるレジスタ（レジスタ群２０の中の確認用レジスタ以外のレジスタ）に故障があった場合は、Ｓ１１０のレジスタのリネームによる復帰処理へ進む。図４は、図３におけるＳ１１０の詳細内容であり、Ｓ２００からＳ２１８が含まれている。
【００２９】
この図３のレジスタ故障検出用のレジスタ故障判定フローを実行するタイミングは、車載制御装置では起動時や終了時の診断時、ダイアグツールによる診断時が適している。また、車両の各ＥＣＵのエラー判定モードで実行してもよい。
【００３０】
レジスタの故障検出は、上記のようなタイミングで、図３のＳ１００から実行される。本発明の処理が開始されると（Ｓ１００）、まずＳ１０２が実行される。Ｓ１０２では、図１のＲＯＭ２内にある、レジスタ故障検出のための確認用データを少なくとも３つ以上の確認用レジスタ（例えば、レジスタ群２０のReg-1、-2、-3。）に格納する。格納する
データは同一値を格納する。
【００３１】
次に、Ｓ１０４では、少なくとも３つ以上の確認用レジスタ（Reg）を相互比較して、例えば減算処理や論理演算を実施して、これら確認用レジスタが故障（破損）していないことをフラグレジスタ２３（Ｆｌａｇ）や演算結果から確認する。このとき、正常（確認用レジスタの故障なし）であればＳ１０６に処理を移行し、異常（確認用レジスタの故障あり）であればＳ１１４に移行する。
【００３２】
確認用レジスタに異常が確認され、処理がＳ１１４に移行した場合、リセットをかけてエラー処理を実行するか、そのままＳ１１６に移行して、確認用レジスタ（Reg）は本機能を実現するソフトウェアでは使用しないとしているので通常の車載制御装置の終了処理を実施する。
【００３３】
なお、Ｓ１０２とＳ１０４の処理は、確認用レジスタ（Reg）の故障判定ができれば、マイコンのもつ機能や他の手段を用いても良い。
【００３４】
確認用レジスタに異常がなく、Ｓ１０６に移行した場合、３つ以上の確認用レジスタ(Reg)を用いて、図２のレジスタ群２０の他のレジスタ（対象レジスタ）が故障していないかを判定する。確認用レジスタ以外のレジスタ（対象レジスタ）の故障判定の方法は、確認用レジスタに格納されているデータと同じ値をＲＯＭ２から対象レジスタにロードして、確認用レジスタと対象レジスタを比較する。この比較は、例えば減算処理や論理演算を実施して対象レジスタが破損していないことをフラグレジスタ２３（Ｆｌａｇ）や演算結果から確認する。このとき、正常（対象レジスタの故障なし）であればＳ１０８に処理を移行し、異常（対象レジスタの故障あり）であればＳ１１０に移行する。
【００３５】
Ｓ１０６においてもレジスタに異常がなく、Ｓ１０８に移行した場合、図２のレジスタ群２０に故障したレジスタは存在しないので、正常処理に復帰する。
【００３６】
Ｓ１０６においてレジスタに異常が検出され、Ｓ１１０に移行した場合、図４のレジスタのリネームによる復帰処理を実行し、車載制御装置のレジスタ故障復帰を図る。図４のレジスタ故障復旧処理を実行した場合、Ｓ１１２にあるように通常処理ではなくインタプリタと割り込み模擬処理の動くフォールトトレラントモードで動作していくことになる。このモードになった場合、可能な限りドライバーに表示して早めに修理することを促す。
【００３７】
なお、Ｓ１０６の処理は、確認用レジスタ以外のレジスタの故障判定ができれば、マイコンのもつ機能や他の手段を用いても良い。
【００３８】
Ｓ１０６において、確認用レジスタ以外のレジスタの故障が検出され、異常と判定された場合、Ｓ２００からの図４のインタプリタ型のプログラム実行手段によるレジスタのリネームによる復帰処理が開始される。ここでは、車載制御装置のリネームによるレジスタ故障復帰方法によるインタプリタと割り込み模擬処理上で動くフォールトトレラントモードについて説明する。
【００３９】
図４のシーケンスが起動されたら、Ｓ２０２で、確認用レジスタを利用してＲＯＭ２のコード領域からＲＡＭ３にインタプリタと割り込み模擬処理を展開する。つまり、Ｓ１０４で確認した故障していない確認用レジスタのみで構成したソフトウェアのインタプリタが予めＲＯＭ２に記録されているので、ＲＡＭ３上に展開する。また同様に、確認用レジスタのみで構成したソフトウェアの割り込み模擬処理も予めＲＯＭ２に記録されているので、ＲＡＭ３上に展開する。インタプリタおよび割り込み模擬処理を展開し終えたら、Ｓ２０４に処理を移行する。
【００４０】
Ｓ２０４では、Ｓ２０２でＲＡＭ３上に展開したインタプリタにＲＯＭ２のコード領域から実コード（実行コード）の命令を１つずつ読み込む。ここで実コードの読み込みにおいて、機能が満足できれば予めインタプリタ内で読み込むコードを制限してもよい。コードの制限は例えば、予め実行コードにインタプリタのみ判別できる実行許可識別子を組み込んでおき、実行許可識別子が許可のコードのみ実行する（実行許可を判定する手段）。この実行許可を判定する手段を用いた機能制限によって、実行速度を維持しつつ、最低限必要な処理を実行でき、インタプリタや割り込み模擬処理を実行する処理として増やした場合においても不安定な動作を抑制できる。
【００４１】
Ｓ２０４に引き続き、Ｓ２０６では、Ｓ２０２でＲＡＭ３上に展開した割り込み模擬処理からインタプリタに命令を１つずつ読み込む。命令の読み込みが終わったらＳ２０８に移行する。なお、割り込み処理がない場合は、この処理（Ｓ２０６）はスキップし、Ｓ２０８に移行する。
【００４２】
Ｓ２０８では、実コードの処理と割込み模擬処理で処理の調停を行う。つまり、Ｓ２０４で実コードからインタプリタに読み込んだ命令とＳ２０６で割り込み模擬処理からインタプリタに読み込んだ命令の優先度を比較して優先度が高い方をインタプリタで実行する命令と判断する。そして、優先度が低い命令はスタック領域に保持して、実行順序を待つ。基本的には、実コードから読み込んだ命令よりも、割り込み模擬処理の優先度を高くする。
【００４３】
Ｓ２０８において、インタプリタで実行する命令が決定したら、次に、Ｓ２１０において、命令内に図３のフローチャート（レジスタ故障判定）でレジスタの故障ありと判定された故障したレジスタが使用されてないかを確認する。Ｓ２１０におけるレジスタ使用判定のため、図３のフローチャートで故障判定を受けたレジスタの判定結果はＲＡＭ３上にテーブルを保存しておき、確認に用いる。故障したレジスタが使用されているかどうかを確認する方法として、例えばインタプリタに読み込んだ命令を解析してオペランドの位置のデータと予めＲＯＭ２に記憶させておいたレジスタ毎の対応するバイナリパターンを比較して判定する。前述した方法に限らず、故障したレジスタが使用されているかどうかを判定することができれば、他の手段を用いてもよい。故障したレジスタを使用しているか否かの判定が終わり、故障したレジスタが使用されている場合はＳ２１２へ処理を移行し、故障したレジスタが使用されていない場合はＳ２１４へ処理を移行する。
【００４４】
Ｓ２０８で故障したレジスタが使用されていると判定された場合、図３のフローチャートの故障判定（破損判定）を利用しながら、故障したレジスタを、故障していない、かつ使用していないレジスタにインタプリタ内で書き換える（リネームする）。このリネームの処理は、故障していない確認用レジスタで構成されたインタプリタの一機能としてＲＡＭ３上にて展開され、図１のフローチャートで故障判定を受けたレジスタの結果をもつＲＡＭ３上のテーブルと予めＲＯＭ２に記憶させておいたレジスタ毎の対応するバイナリパターンを利用して、インタプリタ内で故障レジスタかを比較・判定し、リネームする。故障したレジスタと書き換える故障していないレジスタは、図３の処理で検出できたものを利用する。リネームを終えたら、Ｓ２１４へ処理を移行する。
【００４５】
上記のリネーム処理を終えると、インタプリタが実コードから読み込んだ命令も割り込み模擬処理から読み込んだ命令も故障していないレジスタで実行できるようになるので、Ｓ２１４でインタプリタを用いて実行する。
【００４６】
Ｓ２１４で実行した処理が、Ｓ２１６で確認しているように終了と判定されれば、Ｓ２１８に進み、レジスタのリネームによる復帰処理終了となり、インタプリタと割り込み模擬処理の上で動くフォールトトレラントモードの終了と同時に車載制御装置も終了する。
【００４７】
Ｓ２１６で、終了処理ではない（未終了）と判定されれば、Ｓ２０４に戻り、インタプリタと割り込み模擬処理の上で動くフォールトトレラントモードでソフトウェアの実行を継続する。
【００４８】
このような車載制御装置のリネームによるレジスタの故障復帰方法を用いることにより、フォールトトレラントモードであるが、ハードウェア最小構成のＣＰＵ１が１つであってもソフトウェアによりＣＰＵ１内のマイコンのレジスタの故障判定、およびレジスタ故障からの復旧が行え、車載機器に要求されるスペース確保の要求を満たすことができ、フォールトトレラント観点から求められるレジスタ故障で、完全に動かなくなることを抑制して最低限の機能ながら動作し続けられる車両のシステムを提供することが可能になる。
【００４９】
以上、本発明の実施の形態で記述したが、本発明は前記実施の形態に限定されるものではなく、種々の処理変更を行うことが可能であり、特許請求の範囲に記載された事項とその均等物まで及ぶものである。また、本発明の実施の形態を車載制御装置について記述したが、車載制御装置に限定するものではなく、船舶の制御装置等の他の輸送機器の制御装置に適用することも可能である。
【００５０】
なお、本発明は、その発明の範囲内において、各実施の形態を自由に組み合わせたり、各実施の形態を適宜、変形、省略することが可能である。
【符号の説明】
【００５１】
１  ＣＰＵ、２  ＲＯＭ、３  ＲＡＭ、４  割り込みコントローラ、５  通信部、６  バス、２０  レジスタ群、２１  プログラムカウンタ、２２  スタックポインタ、２３  フラグレジスタ、２４  処理部
【図１】
0006275098.tif 000002
【図２】
0006275098.tif 000003
【図３】
0006275098.tif 000004
【図４】
0006275098.tif 000005