(57)【要約】【課題】電子制御装置において、機能安全を担保しつつ、消費電力の増加を抑制すること。【解決手段】重要処理は、逐次実行され分岐命令を含まない複数の命令によって構成されており、命令のそれぞれが、ＲＯＭにおいてアドレスが規定値（例えば、「１」）ずつ変化する格納領域のそれぞれに実行順序に従って格納されている。重要処理においては、重要処理へと移行した時点でのプログラムカウンタ（ＰＣ）の値を期待値カウンタに格納する（Ｓ３１０）。比較回路での比較の結果、ＰＣの値と期待値カウンタの値とが不一致であれば（Ｓ３２０：ＮＯ）、異常処理を実行する（Ｓ３４０−１〜Ｓ３４０−Ｎ）。一方、比較回路での比較の結果、ＰＣの値と期待値カウンタの値とが一致していれば（Ｓ３２０：ＹＥＳ）、ＰＣが指し示す命令を読み出して実行し、ＰＣの値を変更する。さらに、期待値カウンタの値を規定値分変化（増加）させる。【選択図】図５
2015176284.tif 000002
【特許請求の範囲】
【請求項１】
メモリ（２２，２４）に格納された命令を読み出して実行する電子制御装置（３０）であって、
次に実行すべき命令が格納されたメモリのアドレスを指し示すプログラムカウンタ（３８）と、
前記プログラムカウンタが指し示すアドレスに対応するメモリの格納領域に格納された命令を読み出して実行する実行手段（３０，３２，Ｓ３３０−１〜Ｓ３３０−Ｎ）と、
前記実行手段によって命令が実行されるごとに、前記プログラムカウンタが指し示すメモリのアドレスを、次に実行すべき命令が格納されたメモリのアドレスへと変更する変更手段（３０，３２，Ｓ３３０−１〜Ｓ３３０−Ｎ）と、
特定の処理を実現するように逐次実行される複数の命令であり、分岐命令を含まない複数の命令によって構成され、かつ、規定値ずつ前記アドレスが変化するメモリの格納領域のそれぞれに、その実行順序に従って命令のそれぞれが格納された重要処理を構成する命令群へと移行すると、その移行時点で前記プログラムカウンタに格納されているメモリのアドレスを期待値カウンタ（４０）に格納する格納制御手段（３０，３２，Ｓ３１０）と、
前記重要処理を構成する命令群への移行後に前記実行手段によって命令が実行されるごとに、前記期待値カウンタに格納されているメモリのアドレスを前記規定値分変化させる更新手段（３０，３２，Ｓ３３０）と、
前記プログラムカウンタが指し示すメモリのアドレスと、前記期待値カウンタに格納されているメモリのアドレスとを比較する比較手段（５０，Ｓ３２０−１〜Ｓ３２０−Ｎ）と、
前記比較手段での比較の結果、両者が不一致であれば、異常が発生したものと判定する異常判定手段（３０，３２，Ｓ３４０−１〜Ｓ３４０−Ｎ）と
を備えることを特徴とする電子制御装置。
【請求項２】
前記重要処理を構成する命令群には、前記重要処理を構成する命令群ごとにユニークな識別情報である確認ＩＤが割り当てられており、
前記重要処理を構成する命令群への移行前に、その重要処理を構成する命令群の識別情報である移行先ＩＤをレジスタに書き込む第一書込手段（３０，３２，Ｓ１１０）と、
前記メモリの規定された格納領域から読み出し当該重要処理を構成する命令群に割り当てられた確認ＩＤと、前記第一書込手段によってレジスタに書き込まれた前記移行先ＩＤとが一致するか否かを判定し、その判定の結果、不一致であれば、異常が発生したものとし、判定の結果、一致していれば、前記重要処理を構成する命令群へと移行させる移行確認手段（３０，３２，Ｓ１２０，Ｓ１３０，Ｓ２１０，Ｓ２２０）と
を備えることを特徴とする請求項１に記載の電子制御装置。
【請求項３】
前記重要処理を構成する命令群が終了すると移行し、逐次実行される複数の命令によって構成された通常処理を構成する命令群には、前記通常処理を構成する命令群ごとにユニークな識別情報である帰還ＩＤが割り当てられており、
前記通常処理を構成する命令群への移行前に、その通常処理を構成する命令群の識別情報である復帰先ＩＤをレジスタに書き込む第二書込手段（３０，３２，Ｓ３３０−Ｎ）と、
前記メモリの規定された格納領域から読み出した当該通常処理を構成する命令群に割り当てられた帰還ＩＤと、前記第二書込手段によってレジスタに書き込まれた前記復帰先ＩＤとが一致するか否かを判定し、その判定の結果、不一致であれば、異常が発生したものとし、判定の結果、一致していれば、前記通常処理を構成する命令群へと移行させる帰還確認手段（３０，３２，Ｓ１５０，Ｓ４１０，Ｓ４２０）と
を備えることを特徴とする請求項１または請求項２に記載の電子制御装置。
【請求項４】
前記比較手段での比較の結果、両者が一致していれば、前記重要処理を構成する命令の前記実行手段による実行を許可する許可手段（３０，３２，５０，Ｓ３２０，Ｓ３３０−１〜Ｓ３３０−Ｎ−１）
を備えることを特徴とする請求項１から請求項３までのいずれか一項に記載の電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリに格納された命令を読み出して実行する電子制御装置に関する。
【背景技術】
【０００２】
従来、メモリに格納された命令を読み出して実行することで、自動車に設けられた灯火装置やパワーウインドウなどのボデー系を制御する電子制御装置が知られている（特許文献１参照）。
【０００３】
この種の電子制御装置の中には、当該電子制御装置が機能不全に陥ることで引き起こされる不合理なリスクを低減する（即ち、機能安全を担保する）ために、デュアルロックステップ方式が採用されたものがある。
【０００４】
このデュアルロックステップ方式の電子制御装置は、２つの演算装置を備えたマイクロコンピュータ（いわゆるマイコン）を中心に構成され、その２つの演算装置がそれぞれ、同一のタイミングで同一の命令を実行する（演算を実行する）。そして、演算装置それぞれにおける演算結果が不一致であれば、電子制御装置に異常が生じたものと判定し、当該電子制御装置を再起動したり、異常が生じた旨を報知したりする。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−１５０９９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、デュアルロックステップ方式の電子制御装置（マイコン）は、演算装置を２つ備え、その２つの演算装置にて同時に同一の命令を実行しなければならない。すなわち、デュアルロックステップ方式の電子制御装置（マイコン）では、演算装置を常時２つ動作させる必要があり、消費電力が大きくなるという課題があった。
【０００７】
換言すると、従来の技術では、機能安全を担保しつつ、消費電力の増加を抑制することが困難であった。
そこで、本発明は、電子制御装置において、機能安全を担保しつつ、消費電力の増加を抑制することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するためになされた本発明は、メモリ（２２，２４）に格納された命令を読み出して実行する電子制御装置（３０）に関する。
本発明の電子制御装置は、プログラムカウンタ（３８）と、実行手段（３０，３２，Ｓ３３０−１〜Ｓ３３０−Ｎ）と、変更手段（３０，３２，Ｓ３３０−１〜Ｓ３３０−Ｎ）と、格納制御手段（３０，３２，Ｓ３１０）と、更新手段（３０，３２，Ｓ３３０−１〜Ｓ３３０−Ｎ）と、比較手段（３０，５０，Ｓ３２０−１〜Ｓ３２０−Ｎ）と、異常判定手段（３０，３２，Ｓ３４０−１〜Ｓ３４０−Ｎ）とを備える。
【０００９】
プログラムカウンタは、次に実行すべき命令が格納されたメモリのアドレスを指し示す。また、実行手段は、プログラムカウンタが指し示すアドレスに対応するメモリの格納領域に格納された命令を読み出して実行する。そして、変更手段は、実行手段によって命令が実行されるごとに、プログラムカウンタが指し示すメモリのアドレスを、次に実行すべき命令が格納されたメモリのアドレスへと変更する。
【００１０】
格納制御手段は、重要処理を構成する命令群へと移行すると、その移行時点でプログラムカウンタに格納されているメモリのアドレスを期待値カウンタ（４０）に格納する。ここで言う重要処理を構成する命令群とは、特定の処理を実現するように逐次実行される複数の命令であり、分岐命令を含まない複数の命令によって構成される。さらに、重要処理を構成する命令群は、規定値ずつアドレスが変化するメモリの格納領域のそれぞれに、その実行順序に従って命令のそれぞれが格納される。
【００１１】
そして、更新手段は、重要処理を構成する命令群への移行後に実行手段によって命令が実行されるごとに、期待値カウンタに格納されているメモリのアドレスを規定値分変化させる。比較手段は、プログラムカウンタが指し示すメモリのアドレスと、期待値カウンタに格納されているメモリのアドレスとを比較する。
【００１２】
その比較の結果、両者が不一致であれば、異常判定手段は、異常が発生したものと判定する。
すなわち、本発明の電子制御装置では、実行手段が実行すべき処理（命令）が重要処理を構成する命令群へと移行されると、期待値カウンタには、その移行時点でプログラムカウンタに格納されているメモリのアドレスが格納される。この時点で期待値カウンタに格納されるメモリのアドレス（値）は、重要処理を構成する命令群において最初に実行されるべき命令が格納されているメモリのアドレスである。そして、この期待値カウンタに格納されているメモリのアドレス（値）は、実行手段によって命令が実行されるごとに、規定値分変化させられる。この規定値分変化させられることによって、期待値カウンタの内容（値）は、重要処理を構成する命令群において次に実行されるべき命令が格納されているメモリのアドレスへと更新される。
【００１３】
一方、プログラムカウンタが指し示すメモリのアドレスは、実行手段が実行する命令が重要処理を構成する命令群であるか否かにかかわらず、命令が実行されるごとに、次に実行すべき命令が格納されたメモリのアドレスへと変更される。
【００１４】
したがって、重要処理を構成する命令群へと移行した時点では、プログラムカウンタが指し示すメモリのアドレス（値）と、期待値カウンタに格納されているメモリのアドレス（値）とは一致している。さらに、電子制御装置において、ハードウェア故障などの異常が生じていなければ、少なくとも、重要処理を構成する命令群の実行中は、プログラムカウンタが指し示すメモリのアドレス（値）と、期待値カウンタに格納されているメモリのアドレス（値）とは一致し続ける。
【００１５】
ところが、電子制御装置において、ハードウェア故障などの異常が生じた場合には、プログラムカウンタと期待値カウンタとの少なくとも一方が正常に動作しなくなる可能性がある。この場合、プログラムカウンタが指し示すメモリのアドレス（値）と、期待値カウンタに格納されているメモリのアドレス（値）とは不一致となる。
【００１６】
したがって、本発明の電子制御装置によれば、少なくとも重要処理を構成する命令群の実行中における異常の発生を検出できる。そして、本発明の電子制御装置において、異常が検出された場合に、電子制御装置をリセットしたり、異常が発生した旨を報知したりすれば、機能不全に陥ることで引き起こされる不合理なリスクを低減、即ち、機能安全を担保できる。
【００１７】
また、本発明の電子制御装置によれば、プログラムカウンタと期待値カウンタとだけを二重系とすることで、機能安全の担保を実現している。このため、本発明の電子制御装置によれば、従来の技術と異なり、演算回路（例えば、ＡＬＵ）自体を二重系とする必要が無い。この結果、本発明の電子制御装置によれば、従来の技術に比べて、消費電力を抑制できる。
【００１８】
以上説明したように、本発明の電子制御装置によれば、機能安全を担保しつつ、消費電力の増加を抑制することができる。
なお、「特許請求の範囲」及び「課題を解決するための手段」の欄に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本発明の技術的範囲を限定するものではない。
【００１９】
また、本発明は、前述した電子制御装置の他、電子制御装置における処理方法、当該処理方法を実現するためのプログラム、当該プログラムを格納した記憶媒体など、種々の形態で実現することができる。
【図面の簡単な説明】
【００２０】
【図１】本発明が適用された電子制御装置の概略構成を示すブロック図である。
【図２】ＲＯＭに格納された命令を示す説明図である。
【図３】ＣＰＵが実行する通常処理の処理手順を示すフローチャートである。
【図４】ＣＰＵが実行する移行確認処理の処理手順を示すフローチャートである。
【図５】ＣＰＵが実行する重要処理の処理手順を示すフローチャートである。
【図６】ＣＰＵが実行する復帰確認処理の処理手順を示すフローチャートである。
【発明を実施するための形態】
【００２１】
以下に本発明の実施形態を図面と共に説明する。
＜電子制御装置＞
図１に示す電子制御装置１は、自動車に搭載された車載装置（いわゆる負荷）６０を制御するものである。以下、電子制御装置１を「ＥＣＵ（Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）」１と称す。
【００２２】
また、ＥＣＵ１が制御対象とする車載装置６０として、自動車に設けられた灯火装置やパワーウインドウ、ドアの錠前などのいわゆるボデー系が考えられる。ただし、ＥＣＵ１が制御対象とする車載装置６０は、これに限るものではなく、例えば、内燃機関や、制動装置、パワートレイン機構、ナビゲーション装置、各種メータなどでも良い。
【００２３】
ＥＣＵ１は、電源回路４と、入力回路６と、出力回路８と、論理回路１０とを備えている。
電源回路４は、イグニッションスイッチ６２がオンされると、車載バッテリー５８から供給される電力を、ＥＣＵ１を構成する各回路６，８，１０の動作に必要な電力へと変換して、各回路６，８，１０に供給する。入力回路６は、ＳＷ６４がＯＮされると、車載装置６０の制御に必要な外部からの信号を受け付け、その受け付けた信号を論理回路１０に出力する。出力回路８は、車載装置６０を制御する制御信号であって、論理回路１０からの制御信号を車載装置６０に出力する。
【００２４】
そして、論理回路１０は、ＲＯＭ２２と、ＲＡＭ２４と、インターフェース（Ｉ／Ｆ）２６と、ＣＰＵ３０とを備えている。
このうち、ＲＯＭ２２は、電源が切断されても記憶内容を保持する必要がある処理プログラムやデータを格納する。ＲＡＭ２４は、処理プログラムやデータを一時的に格納する。Ｉ／Ｆ２６は、入力回路６及び出力回路８を介して、他の電子制御装置や車載装置との間で情報通信を実行する。
【００２５】
ＣＰＵ３０は、ＲＯＭ２２やＲＡＭ２４に記憶された処理プログラムに従って各種処理を実行する中央演算処理装置である。このＣＰＵ３０は、少なくとも、実行ユニット３２と、レジスタ３６と、比較回路５０とを備えている。
【００２６】
実行ユニット３２は、制御回路３３と、演算回路（ＡＬＵ）３４とを備えている。制御回路３３は、ＲＯＭ２２やＲＡＭ２４からの命令の読み込みやＲＯＭ２２やＲＡＭ２４への情報の書き込みを制御する周知の制御装置である。また、演算回路３４は、ＲＯＭ２２やＲＡＭ２４から読み込まれた命令を演算（実行）する周知の演算装置である。なお、制御回路３３と演算回路３４とは、実行ユニット３２として一体に構成されていなくとも良く、別個に構成されていても良い。
【００２７】
本実施形態においては、レジスタ３６として、少なくとも、プログラムカウンタ（ＰＣ）３８と、期待値カウンタ４０と、専用レジスタ４２と、アキュームレータ（ＡＣＣ）４４と、汎用レジスタ４６とが用意されている。
【００２８】
このうち、プログラムカウンタ３８は、次に実行すべき命令が格納されたメモリのアドレスを指し示す周知のレジスタであり、命令が実行されるごとに更新される。
期待値カウンタ４０は、後述する重要処理において、次に実行すべき命令が格納されたメモリのアドレス（値）またはその期待値を格納する専用のレジスタである。
【００２９】
また、専用レジスタ４２は、後述する移行先ＩＤまたは復帰先ＩＤが格納される専用のレジスタである。アキュームレータ４４は、演算結果の累積に用いる周知のレジスタである。汎用レジスタ４６は、命令に従って各種機能を実現する周知のレジスタである。
【００３０】
比較回路５０は、プログラムカウンタ３８が指し示すメモリのアドレス（即ち、プログラムカウンタ３８の値）と、期待値カウンタ４０の値とを比較する比較器である。そして、比較回路５０は、プログラムカウンタ３８の値と、期待値カウンタ４０の値とが不一致であれば、異常処理を実行するように割り込み信号を出力する。
【００３１】
なお、本実施形態における比較回路５０は、実行ユニット３２が実行する処理が、後述する重要処理へと移行した場合に起動され、重要処理から他の処理へと移行すると動作が停止されるように構成されている。また、比較回路５０は、重要処理を構成する各命令が実行ユニット３２によって実行される前に、プログラムカウンタ３８の値と、期待値カウンタ４０の値との比較を実行するように構成されている。
【００３２】
＜ＲＯＭに格納されるプログラム＞
本実施形態のＲＯＭ２２には、ＣＰＵ３０の実行ユニット３２が実行する処理プログラムとして、図２に示すように、少なくとも、通常処理を実行するための処理プログラムと、移行確認処理を実行するための処理プログラムと、重要処理を実行するための処理プログラムと、復帰確認処理を実行するための処理プログラムとが格納されている。
【００３３】
通常処理とは、制御対象としての車載装置６０を制御し、規定された機能を実現する処理である。本実施形態の通常処理は、逐次実行される複数の命令によって構成された処理である（通常命令群の一例）。この通常処理は、実行ユニット３２が実行すべき命令としてサブルーチンへのジャンプや条件分岐などを含む。そのジャンプ（命令）の１つとして、本実施形態の通常処理は、移行確認処理へのジャンプを含む。
【００３４】
なお、本実施形態における通常処理を構成する各命令は、ＲＯＭ２２における特定の格納領域に格納されている。この通常処理を構成する命令のそれぞれは、実行順序に従って、アドレスが小さい方から順にＲＯＭ２２に格納されている。
【００３５】
また、重要処理は、特定の機能を実現するように逐次実行される複数の命令によって構成された処理である。ここで言う「特定の機能」は、通常処理の動作に影響を及ぼす（機能安全の要求に関わる）機能であり、例えば、車載装置の制御に必要となる各種設定をレジスタ３６やＲＯＭ２２の書換可能領域に書き込む機能を含む。なお、実行ユニット３２が実行する重要処理の個数は、１つであっても良いし、複数であっても良い。
【００３６】
本実施形態の重要処理は、分岐命令を含まない命令によって構成されており、当該重要処理を構成する命令それぞれがＲＯＭ２２に格納されている順序で実行されるように構成されている。なお、ここで言う分岐命令とは、例えば、条件分岐やジャンプである。
【００３７】
また、本実施形態においては、重要処理を構成する命令のそれぞれは、ＲＯＭ２２において、通常処理が格納される特定の格納領域（例えば、図２に示すアドレス「２０００〜４０００」及び「４０１１」以降によって規定される領域）からアドレスが離れた格納領域（例えば、図２に示すアドレス「１０００〜１０５０」によって規定される領域）に格納されている。そして、重要処理を構成する命令のそれぞれは、ＲＯＭ２２において、規定値（例えば、「１」）ずつアドレスが変化する格納領域のそれぞれに、アドレスが小さい方から実行順序に従って格納されている。
【００３８】
すなわち、本実施形態における通常処理から重要処理への移行は、ジャンプによって実現される。
次に、移行確認処理は、通常処理から重要処理へと移行する過程で実行される処理であり、重要処理を構成する命令群へと正常に移行可能であるか否かを判定する処理である。本実施形態においては、移行確認処理を構成する命令は、ＲＯＭ２２において、重要処理が格納された格納領域の前段（例えば、図２に示すアドレス「９９０〜９９９」によって規定される領域）に格納されている。
【００３９】
また、復帰確認処理は、重要処理を終了した後、通常処理へと移行する過程で実行される処理であり、通常処理へと正常に移行可能であるか否かを判定する処理である。本実施形態においては、復帰確認処理を構成する命令は、ＲＯＭ２２において、重要処理が格納された格納領域の後段（例えば、図２に示すアドレス「１０６０」によって規定される領域）、及び復帰後の通常処理が格納された格納領域の前段（例えば、図２に示すアドレス「４００１」によって規定される領域）に格納されている。
【００４０】
＜通常処理＞
次に、ＣＰＵ３０の実行ユニット３２が実行する通常処理について説明する。
通常処理は、例えば、イグニッションスイッチ６２及びスイッチ６４がオンされると起動される。なお、通常処理の起動条件は、これに限るものではなく、その他の条件を満たす場合であっても良い。
【００４１】
この通常処理が起動されると、図３に示すように、ＣＰＵ３０の実行ユニット３２は、ＲＯＭ２２に格納された各命令を逐次読み出して実行する。そして、通常処理を構成する命令がＳ１１０となると、ＣＰＵ３０の実行ユニット３２は、専用レジスタ４２に移行先ＩＤを書き込む（Ｓ１１０）。この移行先ＩＤとは、ＣＰＵ３０の実行ユニット３２が通常処理から移行（ジャンプ）させるべき重要処理を識別する識別情報である。
【００４２】
続いて、ＣＰＵ３０の実行ユニット３２は、重要処理が記載されているＲＯＭ２２の格納空間の前段の格納空間（例えば、図２に示す例では、移行確認処理が格納された空間）へと処理をジャンプさせる（Ｓ１２０）。そして、ＣＰＵ３０の実行ユニット３２は、移行確認処理を実行し（Ｓ１３０）、その移行確認処理の結果、重要処理へと正常に移行可能であれば、重要処理を実行する（Ｓ１４０）。
【００４３】
さらに、ＣＰＵ３０の実行ユニット３２は、重要処理を終了すると、復帰確認処理を実行し（Ｓ１５０）、その復帰確認処理の結果、通常処理へと正常に移行可能であれば、通常処理を構成する各命令を逐次実行する。
【００４４】
＜移行確認処理＞
次に、移行確認処理について説明する。
この移行確認処理では、ＣＰＵ３０の実行ユニット３２は、図４に示すように、通常処理のＳ１３０で起動されると、Ｓ１１０において専用レジスタ４２に書き込まれた移行先ＩＤを、ＲＯＭ２２の規定された格納領域から読み出した確認ＩＤと比較する（Ｓ２１０）。なお、確認ＩＤとは、重要処理ごとに割り当てられる、各重要処理にユニーク（特有）な識別情報である。そして、このＳ２１０にて比較の対象とする確認ＩＤは、移行予定の重要処理に割り当てられたものである。
【００４５】
このＳ２１０での比較の結果、専用レジスタ４２に書き込まれた移行先ＩＤが、ＲＯＭ２２の規定された格納領域から読み出した確認ＩＤと不一致であれば（Ｓ２１０：ＮＯ）、ＣＰＵ３０の実行ユニット３２は、ＣＰＵ３０自身または論理回路１０に異常が発生したものと判定して異常処理を実行する（Ｓ２２０）。ここで言う異常処理は、ＥＣＵ１をリセット（再起動）したり、異常が発生した旨をインジケータや表示装置などを介して報知したりする周知の処理である。
【００４６】
一方、Ｓ２１０での判定の結果、専用レジスタ４２に書き込まれた移行先ＩＤが、ＲＯＭ２２の規定された格納領域から読み出した確認ＩＤと一致していれば（Ｓ２１０：ＹＥＳ）、ＣＰＵ３０の実行ユニット３２は、専用レジスタ４２に書き込まれた移行先ＩＤを消去する。そして、ＣＰＵ３０の実行ユニット３２は、ＣＰＵ３０自身または論理回路１０に異常が発生していないものと判定して重要処理へと移行する。
【００４７】
＜重要処理＞
次に、重要処理について説明する。
この重要処理では、ＣＰＵ３０の実行ユニット３２は、図５に示すように、重要処理へと移行した時点でプログラムカウンタ３８が指し示すＲＯＭ２２のアドレスを、期待値カウンタ４０に格納する（Ｓ３１０）。
【００４８】
続いて、ＣＰＵ３０の比較回路５０が、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレス（即ち、プログラムカウンタ３８の値）と、期待値カウンタ４０の値とを比較する（Ｓ３２０）。そして、比較回路５０での比較の結果、両者が不一致であれば（Ｓ３２０：ＮＯ）、ＣＰＵ３０の実行ユニット３２は、異常処理を実行する（Ｓ３４０）。ここで言う異常処理は、ＥＣＵ１をリセット（再起動）したり、異常が発生した旨をインジケータや表示装置などを介して報知したりする周知の処理である。なお、Ｓ３４０における異常処理は、周知の割り込み処理として実現されれば良い。
【００４９】
一方、比較回路５０での比較の結果、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレス（即ち、プログラムカウンタ３８の値）と、期待値カウンタ４０の値との両者が一致していれば（Ｓ３２０：ＹＥＳ）、ＣＰＵ３０の実行ユニット３２は、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレスに対応するＲＯＭ２２の格納領域に格納された命令を読み出して実行する（Ｓ３３０）。
【００５０】
さらに、Ｓ３３０では、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレスを、次に実行すべき命令が格納されたＲＯＭ２２のアドレスへと変更する。すなわち、Ｓ３３０では、プログラムカウンタ３８の値を１つインクリメントする。
【００５１】
また、本実施形態のＳ３３０では、期待値カウンタ４０に格納されているＲＯＭ２２のアドレスを規定値（即ち、「１」）分変化させる。具体的には、Ｓ３３０では、ＲＯＭ２２のアドレスを規定値（即ち、「１」）分増加させる。
【００５２】
その後、ＣＰＵ３０は、Ｓ３２０〜Ｓ３３０までの一連の処理ステップを、重要処理を構成する命令の個数（Ｎ個）分繰り返す。
本実施形態においては、重要処理を構成する全ての命令のうち、実行順序に沿った最後の命令（Ｓ３３０−Ｎ）は、専用レジスタ４２への復帰先ＩＤの書き込みとして構成されている。この復帰先ＩＤとは、ＣＰＵ３０が処理を移行（復帰）させるべき通常処理を識別する識別情報である。
【００５３】
つまり、本実施形態においては、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレス（即ち、プログラムカウンタ３８の値）と、期待値カウンタ４０の値とを、比較回路５０で比較した結果、両者が不一致であれば、実行ユニット３２は異常処理を実行する。一方、両者が一致すれば、実行ユニット３２は重要処理を構成する命令の１つを実行する。このように本実施形態においては、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレス（即ち、プログラムカウンタ３８の値）と、期待値カウンタ４０の値との比較は、比較回路５０が実行する。
【００５４】
ただし、図５においては、論理回路１０全体の動作を理解することを目的として、比較回路５０が実行するプログラムカウンタ３８の値と期待値カウンタ４０の値との比較を、実行ユニット３２が実行する重要処理の処理手順を説明するフローチャートに組み込んでいる。
【００５５】
＜復帰確認処理＞
次に、復帰確認処理について説明する。
この復帰確認処理では、ＣＰＵ３０の実行ユニット３２は、図６に示すように、起動されると、通常処理の復帰先が記載されているＲＯＭ２２の格納空間の前段の格納空間（例えば、図２に示す例では、Ｓ４２０の命令が格納された空間）へと、処理をジャンプさせる（Ｓ４１０）。
【００５６】
続いて、ＣＰＵ３０の実行ユニット３２は、重要処理において専用レジスタ４２に書き込まれた復帰先ＩＤを、ＲＯＭ２２の規定された格納領域から読み出した帰還ＩＤと比較する（Ｓ４２０）。なお、帰還ＩＤとは、通常処理ごとに割り当てられる、各通常処理にユニーク（特有）な識別情報である。そして、このＳ４２０にて比較の対象とする帰還ＩＤは、移行（復帰）予定の通常処理に割り当てられたものである。
【００５７】
このＳ４２０での比較の結果、専用レジスタ４２に書き込まれた復帰先ＩＤが、ＲＯＭ２２の規定された格納領域から読み出した帰還ＩＤと不一致であれば（Ｓ４２０：ＮＯ）、ＣＰＵ３０の実行ユニット３２は、ＣＰＵ３０自身または論理回路１０に異常が発生したものと判定して異常処理を実行する（Ｓ４３０）。ここで言う異常処理は、ＥＣＵ１をリセット（再起動）したり、異常が発生した旨をインジケータや表示装置などを介して報知したりする周知の処理である。
【００５８】
一方、Ｓ４２０での判定の結果、専用レジスタ４２に書き込まれた復帰先ＩＤが、ＲＯＭ２２の規定された格納領域から読み出した帰還ＩＤと一致していれば（Ｓ４２０：ＹＥＳ）、ＣＰＵ３０の実行ユニット３２は、専用レジスタ４２に書き込まれた復帰先ＩＤを消去する。
【００５９】
そして、ＣＰＵ３０の実行ユニット３２は、ＣＰＵ３０自身または論理回路１０に異常が発生していないものと判定して通常処理を構成する各命令を逐次実行する。
つまり、ＣＰＵ３０の実行ユニット３２は、通常処理において、Ｓ１１０へと到達すると、専用レジスタ４２に移行先ＩＤを書き込む。そして、ＣＰＵ３０の実行ユニット３２は、重要処理が記載されているＲＯＭ２２の格納空間へと処理をジャンプさせる（図２中：（Ａ））。
【００６０】
この処理のジャンプにより、移行確認処理が起動されると（図２中：（Ｂ））、ＣＰＵ３０の実行ユニット３２は、専用レジスタ４２に書き込まれた移行先ＩＤと、ＲＯＭ２２の規定された格納領域から読み出した確認ＩＤとを比較する。この比較の結果、専用レジスタ４２に書き込まれた移行先ＩＤが、ＲＯＭ２２の規定された格納領域から読み出した確認ＩＤと不一致であれば、ＣＰＵ３０の実行ユニット３２は、異常処理を実行する。
【００６１】
一方、比較の結果、専用レジスタ４２に書き込まれた移行先ＩＤが、ＲＯＭ２２の規定された格納領域から読み出した確認ＩＤと一致すれば、ＣＰＵ３０の実行ユニット３２は、専用レジスタ４２に書き込まれた移行先ＩＤを消去する。そして、ＣＰＵ３０の実行ユニット３２は、重要処理へと処理を移行させる。
【００６２】
その重要処理においては、ＣＰＵ３０の実行ユニット３２は、重要処理へと移行した時点でプログラムカウンタ３８が指し示すＲＯＭ２２のアドレスを、期待値カウンタ４０にも格納する。続いて、ＣＰＵ３０の比較回路５０が、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレス（即ち、プログラムカウンタ３８の値）と、期待値カウンタ４０の値とを比較する。この比較の結果、両者が不一致であれば、ＣＰＵ３０の実行ユニット３２は、異常処理を実行する。
【００６３】
一方、比較回路５０での比較の結果、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレス（即ち、プログラムカウンタ３８の値）と、期待値カウンタ４０の値との両者が一致していれば、ＣＰＵ３０の実行ユニット３２は、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレスに対応するＲＯＭ２２の格納領域に格納された命令を読み出して実行する。さらに、重要処理では、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレスは、次に実行すべき命令が格納されたＲＯＭ２２のアドレスへと変更される（即ち、プログラムカウンタを１つインクリメントする）。また、重要処理では、期待値カウンタ４０の値は、規定値（即ち、「１」）分変化（増加）される。
【００６４】
すなわち、重要処理においては、命令が実行されるごとに、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレス（即ち、プログラムカウンタ３８の値）と、期待値カウンタ４０の値とを１つインクリメントする。
【００６５】
そして、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレス（即ち、プログラムカウンタ３８の値）と、期待値カウンタ４０の値との両者が一致していれば、ＣＰＵ３０の実行ユニット３２は、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレスに対応するＲＯＭ２２の格納領域に格納された命令を読み出して実行する。
【００６６】
なお、重要処理を構成する命令として、専用レジスタ４２への復帰先ＩＤの書き込みを実行すると（図２中：（Ｃ））、ＣＰＵ３０の実行ユニット３２は、復帰確認処理へと処理を移行させる。その復帰確認処理では、ＣＰＵ３０の実行ユニット３２は、通常処理への帰還（ジャンプ）を実行し（図２中：（Ｄ））、重要処理において専用レジスタ４２に書き込まれた復帰先ＩＤを、ＲＯＭ２２の規定された格納領域から読み出した帰還ＩＤと比較する（図２中：（Ｅ））。
【００６７】
この比較の結果、専用レジスタ４２に書き込まれた復帰先ＩＤが、ＲＯＭ２２の規定された格納領域から読み出した帰還ＩＤと不一致であれば、ＣＰＵ３０の実行ユニット３２は、異常処理を実行する。一方、比較の結果、専用レジスタ４２に書き込まれた復帰先ＩＤが、ＲＯＭ２２の規定された格納領域から読み出した帰還ＩＤと一致すれば、ＣＰＵ３０の実行ユニット３２は、専用レジスタ４２に書き込まれた復帰先ＩＤを消去する。そして、ＣＰＵ３０の実行ユニット３２は、通常処理を構成する各命令を逐次実行する。
［実施形態の効果］
以上説明したように、ＣＰＵ３０の実行ユニット３２が実行すべき処理（命令）が重要処理へと移行されると、期待値カウンタ４０には、その移行時点でプログラムカウンタ３８に格納されているＲＯＭ２２のアドレスが格納される。この時点で、期待値カウンタ４０に格納されるＲＯＭ２２のアドレスは、重要処理において最初に実行されるべき命令が格納されているＲＯＭ２２のアドレスである。
【００６８】
そして、この期待値カウンタ４０に格納されているＲＯＭ２２のアドレス（即ち、期待値カウンタ４０の値）は、ＣＰＵ３０の実行ユニット３２によって命令が実行されるごとに、規定値（即ち、「１」）増加させられる。この規定値増加させられることによって、期待値カウンタ４０の内容は、重要処理において次に実行されるべき命令が格納されているＲＯＭ２２のアドレスへと更新される。
【００６９】
一方、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレスは、ＣＰＵ３０の実行ユニット３２が実行する命令が重要処理を構成する命令であるか否かにかかわらず、命令が読み出されるごとに、次に実行すべき命令が格納されたＲＯＭ２２のアドレスへと変更される（１つインクリメントされる）。
【００７０】
したがって、ハードウェア故障などの異常が生じていなければ、重要処理へと移行した時点では、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレス（即ち、プログラムカウンタ３８の値）と、期待値カウンタ４０の値とは一致している。さらに、論理回路１０において、ハードウェア故障などの異常が生じていなければ、重要処理の実行中は、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレス（即ち、プログラムカウンタ３８の値）と、期待値カウンタ４０の値とは一致し続ける。
【００７１】
ところが、論理回路１０において、ハードウェア故障などが生じた場合には、プログラムカウンタ３８と期待値カウンタ４０との少なくとも一方が正常に動作しなくなる可能性がある。この場合、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレス（即ち、プログラムカウンタ３８の値）と、期待値カウンタ４０の値とは不一致となる。
【００７２】
したがって、ＣＰＵ３０によれば、少なくとも重要処理の実行中におけるハードウェア故障などの異常の発生を検出できる。そして、ＣＰＵ３０によれば、異常が検出された場合に、異常処理を実行することで、機能不全に陥ることで引き起こされる不合理なリスクを低減、即ち、機能安全を担保できる。
【００７３】
特に、ＣＰＵ３０では、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレス（即ち、プログラムカウンタ３８の値）と、期待値カウンタ４０の値とが一致した場合に、重要処理を構成する各命令をＲＯＭ２２から読み出して実行する。これにより、ＣＰＵ３０によれば、重要処理を構成する各命令を、論理回路１０が正常である場合に実行できる。
【００７４】
そして、ＣＰＵ３０によれば、重要処理を構成する各命令が、予め規定された実行順序の通りに実行されることを担保できる。この結果、ＣＰＵ３０によれば、機能不全に陥ることで引き起こされる不合理なリスクを、より確実に低減できる。
【００７５】
また、ＣＰＵ３０によれば、プログラムカウンタ３８と期待値カウンタ４０とだけを二重系とすることで、機能安全の担保を実現している。このため、ＣＰＵ３０によれば、従来の技術と異なり、実行ユニット自体を２つ備える必要が無い。この結果、ＣＰＵ３０によれば、従来の技術に比べて、消費電力を抑制できる。
【００７６】
以上説明したように、ＣＰＵ３０によれば、機能安全を担保しつつ、消費電力の増加を抑制することができる。
また、ＣＰＵ３０では、通常処理から重要処理へと処理を移行させる際に、移行確認処理を実行している。この移行確認処理により、重要処理へと正常に移行可能であるか否かを判定できる。
【００７７】
さらに、ＣＰＵ３０では、重要処理から通常処理へと処理を移行させる際に、復帰確認処理を実行している。この復帰確認処理により、通常処理へと正常に移行可能であるか否かを判定できる。
【００７８】
そして、論理回路１０によれば、移行確認処理や復帰確認処理において異常が検出された場合、異常処理を実行しているため、重要処理への移行の際や通常処理への復帰の際にハードウェア故障などが生じたとしても、その故障によって引き起こされる不合理なリスクを低減できる。
【００７９】
なお、ＣＰＵ３０における比較回路５０は、実行ユニット３２が重要処理を実行している期間中動作する。このため、重要処理以外の処理を実行ユニット３２が実行している際に、プログラムカウンタ３８の値と、期待値カウンタ４０との値とが比較されることを防止でき、不要な異常処理が実行されることを防止できる。
［その他の実施形態］
以上、本発明の実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において、様々な態様にて実施することが可能である。
【００８０】
例えば、上記実施形態では、ＣＰＵ３０の実行ユニット３２が実行する処理の構造を、通常処理の途中で重要処理へとジャンプし、重要処理の終了後に通常処理へとジャンプすることで通常処理へと復帰する構造としていたが、本発明において、ＣＰＵ３０の実行ユニット３２が実行する処理の構造は、これに限るものでは無い。
【００８１】
すなわち、本発明においては、ＣＰＵ３０の実行ユニット３２が実行する処理の構造を、通常処理の途中で重要処理へとジャンプし、重要処理の終了後に、復帰確認処理を実行することなく、そのまま通常処理を再開する構造としても良い。この場合、通常処理における重要処理終了後の命令は、ＲＯＭ２２において、重要処理を構成する命令が格納された領域の直後（例えば、図２に示す例であれば、アドレス「１０５０」〜）に格納されている必要がある。さらに、この場合、重要処理における最後の命令として、専用レジスタ４２への復帰先ＩＤの書き込みが省略されている必要がある。
【００８２】
また、本発明においては、ＣＰＵ３０の実行ユニット３２が実行する処理を、重要処理だけとしても良い。この場合、ＣＰＵ３０の実行ユニット３２が実行する処理として、通常処理、移行確認処理、及び復帰確認処理が省略される。さらに、この場合、重要処理における最後の命令として、専用レジスタ４２への復帰先ＩＤの書き込みが省略される。
【００８３】
本発明においては、ＣＰＵ３０の実行ユニット３２が実行する処理の構造を、重要処理だけからなる構造とし、１つの重要処理の実行途中で他の重要処理へとジャンプし、他の重要処理の終了後に元の重要処理へと復帰する構造としても良い。この場合、ＣＰＵ３０に実行ユニット３２が実行する処理として、復帰確認処理が省略されていても良い。ただし、この場合、異なる重要処理へと移行（ジャンプ）するごとに、期待値カウンタ４０に格納されるＲＯＭ２２のアドレスを、汎用レジスタやスタックを用いて退避させ、元の重要処理へと復帰後に、汎用レジスタやスタックに退避させたＲＯＭ２２のアドレスを、期待値カウンタ４０へと戻すことが必要となる。
【００８４】
なお、ＣＰＵ３０の実行ユニット３２が実行する処理の構造は、複数の通常処理と、複数の重要処理とが混在し、通常処理から重要処理への移行、及び重要処理から通常処理への移行がジャンプによって実行される構造としても良い。この場合、通常処理から重要処理への移行ごとに、移行確認処理を実行し、重要処理から通常処理への移行ごとに、復帰確認処理を実行すれば良い。
【００８５】
また、上記実施形態においては、専用レジスタ４２に復帰先ＩＤを書き込むことを、重要処理を構成する命令として実行していたが、この専用レジスタ４２に復帰先ＩＤを書き込むことは、重要処理ではなく、復帰確認処理として実行しても良いし、重要処理と復帰確認処理との間の別の処理として実行しても良い。この場合の別の処理には、復帰確認処理におけるＳ４１０が含まれていても良い。
【００８６】
ところで、上記実施形態のＣＰＵ３０では、比較回路５０が、プログラムカウンタ３８が指し示すＲＯＭ２２のアドレスと、期待値カウンタ４０に格納されているＲＯＭ２２のアドレスとを比較していたが、この比較は、処理プログラムを実行することで、実行ユニット３２が実現しても良い。
【００８７】
なお、上記実施形態のＥＣＵ１の入力回路６には、スイッチ６４が接続されていたが、このスイッチ６４は省略されていても良い。すなわち、図１に示すＥＣＵ１の入力回路６及び出力回路８に接続される外部の構造は、一例であって、本発明の電子制御装置（ＥＣＵ）に接続される外部の構造は、どのようなものであっても良い。
【００８８】
なお、上記実施形態の構成の一部を、課題を解決できる限りにおいて省略した態様も本発明の実施形態である。また、上記実施形態と変形例とを適宜組み合わせて構成される態様も本発明の実施形態である。また、特許請求の範囲に記載した文言によって特定される発明の本質を逸脱しない限度において考え得るあらゆる態様も本発明の実施形態である。
【符号の説明】
【００８９】
１…電子制御装置（ＥＣＵ）  ４…電源回路  ６…入力回路  ８…出力回路  １０…論理回路  ２２…ＲＯＭ  ２４…ＲＡＭ  ２６…Ｉ／Ｆ  ３０…ＣＰＵ  ３２…実行ユニット  ３３…制御回路  ３４…演算回路  ３６…レジスタ  ３８…プログラムカウンタ  ４０…期待値カウンタ  ４２…専用レジスタ  ４４…アキュームレータ  ４６…汎用レジスタ、  ５０…比較回路  ５８…車載バッテリー  ６０…車載装置  ６２…イグニッションスイッチ  ６４…スイッチ
【図１】
2015176284.tif 000003
【図２】
2015176284.tif 000004
【図３】
2015176284.tif 000005
【図４】
2015176284.tif 000006
【図５】
2015176284.tif 000007
【図６】
2015176284.tif 000008