(57)【要約】【課題】  スタックポインタの誤動作に係るマイクロプロセッサの暴走を判定することができるマイクロプロセッサの暴走監視装置を提供する。【解決手段】  サブルーチン処理や割込み処理が発生したときのスタックポインタのアドレスの増減値（スタック領域へのデータ退避・スタック領域からのデータ復帰によるアドレスの増減値）を加減算器２０９において算出してレジスタ２０４に格納する。そして、比較回路２０５において、現在のスタックポインタの移動によるアドレスの増減値と前回の移動によるアドレスの増減値を比較する。その結果、スタックポインタが前回の移動前のアドレス値に復帰しているとき、もしくはさらにデータ退避の方向へ移動しているときにはマイクロプロセッサが正常状態にあると判定し、それ以外の場合にはマイクロプロセッサが暴走状態にあると判定する。【選択図】    図２
2005216015.tif 000002
【特許請求の範囲】
【請求項１】
スタック領域をアドレッシングするスタックポインタのアドレス値を増加・減少させて、該スタック領域へのデータ退避・該スタック領域からのデータ復帰を制御するマイクロプロセッサの暴走監視装置であって、
当該マイクロプロセッサによる命令実行後のスタックポインタのアドレス値とその命令実行前のアドレス値の増減値であるアドレス増減値を算出する加減算器と、
前記加減算器により算出されるアドレス増減値が前記データ退避・データ復帰のいずれを示すのか判定するデータ退避・復帰判定回路と、
前記データ退避・復帰判定回路により、前記データ退避もしくは前記データ復帰がなされたことが判定されると、そのアドレス増減値を格納するアドレス増減値格納回路と、
前記データ退避・復帰判定回路により、前記データ退避もしくは前記データ復帰がなされたことが判定され、かつ前記アドレス増減値格納回路が保持するアドレス増減値が前記データ退避を示すとき、前記加減算器により算出されたアドレス増減値と前記アドレス増減値格納回路が保持するアドレス増減値を比較し、前記加減算器により算出されたアドレス増減値が前記データ復帰を示し且つ両アドレス増減値の絶対値が等しい場合、もしくは前記加減算器により算出されたアドレス増減値が前記データ退避を示す場合に、当該マイクロプロセッサが正常状態にあると判定し、前記加減算器により算出されたアドレス増減値が前記データ復帰を示し且つ両アドレス増減値の絶対値が等しくない場合には当該マイクロプロセッサが暴走状態にあると判定し、この判定結果を示す信号を発生する暴走判定回路と、
を備えることを特徴とするマイクロプロセッサの暴走監視装置。
【請求項２】
スタック領域をアドレッシングするスタックポインタのアドレス値を増加・減少させて、該スタック領域へのデータ退避・該スタック領域からのデータ復帰を制御するマイクロプロセッサの暴走監視装置であって、
当該マイクロプロセッサによる命令実行後のスタックポインタのアドレス値とその命令実行前のアドレス値の増減値であるアドレス増減値を算出する加減算器と、
前記加減算器により算出されるアドレス増減値が前記データ退避・データ復帰のいずれを示すのか判定するデータ退避・復帰判定回路と、
前記データ退避・復帰判定回路による判定結果を受けて、前記加減算器により算出されたアドレス増減値を基に、スタックポインタのアドレス値の増加分と減少分に差があるか否かを判定するアドレス増加・減少判定回路と、
前記データ退避・復帰判定回路による判定結果を受けて、前記データ退避と前記データ復帰がなされた回数を確認するデータ退避・復帰回数確認カウンタ回路と、
前記データ退避・復帰回数確認カウンタ回路により前記データ退避と前記データ復帰が同回数なされたことが示されたとき、アドレス増加・減少判定回路によりスタックポインタのアドレス値の増加分と減少分が等しいことが示された場合には、当該マイクロプロセッサが正常状態にあると判定し、等しくないことが示された場合には、当該マイクロプロセッサが暴走状態にあると判定し、この判定結果を示す信号を発生する暴走判定回路と、
を備えることを特徴とするマイクロプロセッサの暴走監視装置。
【請求項３】
スタック領域をアドレッシングするスタックポインタのアドレス値を増加・減少させて、該スタック領域へのデータ退避・該スタック領域からのデータ復帰を制御するマイクロプロセッサの暴走監視装置であって、
当該マイクロプロセッサによる命令実行後のスタックポインタのアドレス値とその命令実行前のアドレス値の増減値であるアドレス増減値を算出する加減算器と、
前記加減算器により算出されるアドレス増減値が前記データ退避・データ復帰のいずれを示すのか判定するデータ退避・復帰判定回路と、
前記データ退避・復帰判定回路による判定結果を受け、前記加減算器により算出されたアドレス増減値が前記データ退避を示す場合には、そのアドレス増減値を記憶装置に履歴し、前記加減算器により算出されたアドレス増減値が前記データ復帰を示す場合には、前記記憶装置に履歴したアドレス増減値のうちの最後のアドレス増減値を取り出して出力する記憶装置制御回路と、
前記記憶装置制御回路から出力されるアドレス増減値と前記加減算器により算出されたアドレス増減値を比較し、絶対値が一致する場合には当該マイクロプロセッサが正常状態にあると判定し、一致しない場合には当該マイクロプロセッサが暴走状態にあると判定し、この判定結果を示す信号を発生する暴走判定回路と、
を備えることを特徴とするマイクロプロセッサの暴走監視装置。
【請求項４】
請求項２記載のマイクロプロセッサの暴走監視装置であって、前記データ退避・復帰判定回路による判定結果が前記データ退避を示す回数を確認し、その回数が当該マイクロプロセッサにおけるデータ退避の発生頻度を考慮した期待値と一致した後において、前記データ退避・復帰回数確認カウンタ回路により前記データ退避と前記データ復帰が同回数なされたことが示されたとき、前記暴走判定回路へ判定動作許可信号を出力する判定動作許可回路を備え、前記暴走判定回路が、前記判定動作許可回路より前記判定動作許可信号を受けたことを条件として前記判定を行うことを特徴とするマイクロプロセッサの暴走監視装置。
【請求項５】
請求項３記載のマイクロプロセッサの暴走監視装置であって、前記データ退避・復帰判定回路による判定結果が前記データ退避を示す回数を確認し、その回数が当該マイクロプロセッサにおけるデータ退避の発生頻度を考慮した期待値と一致した後において、前記データ退避・復帰判定回路による判定結果が前記データ復帰を示したとき、前記暴走判定回路へ判定動作許可信号を出力する判定動作許可回路を備え、前記暴走判定回路が、前記判定動作許可回路より前記判定動作許可信号を受けたことを条件として前記判定を行うことを特徴とするマイクロプロセッサの暴走監視装置。
【請求項６】
請求項１もしくは３のいずれかに記載のマイクロプロセッサの暴走監視装置であって、前記暴走判定回路により当該マイクロプロセッサが正常状態にあると判定された回数が当該マイクロプロセッサにおけるデータ退避の発生頻度を考慮した期待値と一致したときにおいて、当該マイクロプロセッサが正常状態にあることを示す信号を発生する信号発生頻度低減回路を備えることを特徴とするマイクロプロセッサの暴走監視装置。
【請求項７】
割込みを許可する基準レベルをレジスタに設定してデータ処理を行い、前記基準レベルよりもレベルの高い割込み処理が発生すると前記レジスタをそのレベルに更新してその割込み処理を実行し、実行中の割込み処理よりもレベルの高い割込み処理が発生すると前記レジスタをそのレベルに更新してその割込み処理を実行し、割込み処理終了後、中断した割込み処理を再開するに際し、前記レジスタを前記基準レベルに一旦更新した後にその再開する割込み処理のレベルに更新し、データ処理を再開するに際し、前記レジスタを前記基準レベルに更新するマイクロプロセッサの暴走監視装置であって、
割込み処理が発生すると、前記レジスタに更新されるレベルを、前記基準レベルを最深部に保持する記憶装置に履歴し、割込み処理終了後は、中断した割込み処理のレベルを前記記憶装置より読み出して出力し、データ処理が再開されるときには前記記憶装置が最深部に保持する前記基準レベルを読み出して出力する記憶装置制御回路と、
割込み処理終了後、実行された割込み処理もしくはデータ処理のレベルと前記記憶装置制御回路から出力されるレベルを比較し、一致する場合には当該マイクロプロセッサが正常状態にあると判定し、一致しない場合には当該マイクロプロセッサが暴走状態にあると判定し、この判定結果を示す信号を発生する暴走判定回路と、
を備えることを特徴とするマイクロプロセッサの暴走監視装置。
【請求項８】
割込みを許可する基準レベルをレジスタに設定してデータ処理を行い、前記基準レベルよりもレベルの高い割込み処理が発生すると前記レジスタをそのレベルに更新してその割込み処理を実行し、実行中の割込み処理よりもレベルの高い割込み処理が発生すると前記レジスタをそのレベルに更新してその割込み処理を実行し、割込み処理終了後、中断した割込み処理を再開するに際し、前記レジスタを前記基準レベルに一旦更新した後にその再開する割込み処理のレベルに更新し、データ処理を再開するに際し、前記レジスタを前記基準レベルに更新するマイクロプロセッサの暴走監視装置であって、
当該マイクロプロセッサに起こり得る割込み処理の組合せに対応した前記レジスタに更新されるレベルの推移が記載された整合表を記憶する整合表記憶装置と、
割込み処理終了後、実行された割込み処理の組合せに対応して前記レジスタに更新されたレベルの推移を記憶する記憶装置と、
前記記憶装置に記憶されたレベルの推移を前記整合表に照らし合わせ、そのレベルの推移が前記整合表に存在する場合には当該マイクロプロセッサが正常状態にあると判定し、存在しない場合には当該マイクロプロセッサが暴走状態にあると判定し、この判定結果を示す信号を発生する暴走判定回路と、
を備えることを特徴とするマイクロプロセッサの暴走監視装置。
【請求項９】
スタック領域をアドレッシングするスタックポインタのアドレス値を増加・減少させて、該スタック領域へのデータ退避・該スタック領域からのデータ復帰を制御するマイクロプロセッサの暴走監視装置であって、
当該マイクロプロセッサによる命令実行後のスタックポインタのアドレス値とその命令実行前のアドレス値の増減値であるアドレス増減値を算出する加減算器と、
前記加減算器により算出されたアドレス増減値の推移を記憶する記憶装置と、
当該マイクロプロセッサに起こり得るアドレス増減値の推移が記載された整合表を記憶する整合表記憶装置と、
前記記憶装置に記憶されたアドレス増減値の推移を前記整合表に照らし合わせ、そのアドレス増減値の推移が前記整合表に存在する場合には当該マイクロプロセッサが正常状態にあると判定し、存在しない場合には当該マイクロプロセッサが暴走状態にあると判定し、この判定結果を示す信号を発生する暴走判定回路と、
を備えることを特徴とするマイクロプロセッサの暴走監視装置。
【請求項１０】
請求項８記載のマイクロプロセッサの暴走監視装置において、前記整合表には、当該マイクロプロセッサには起こり得ない割込み処理の組合せに対応した前記レジスタに更新されるレベルの推移を記載し、前記暴走判定回路が、前記記憶装置に記憶されたレベルの推移を前記整合表に照らし合わせ、そのレベルの推移が前記整合表に存在する場合には当該マイクロプロセッサが暴走状態にあると判定し、存在しない場合には当該マイクロプロセッサが正常状態にあると判定し、この判定結果を示す信号を発生することを特徴とするマイクロプロセッサの暴走監視装置。
【請求項１１】
請求項９記載のマイクロプロセッサの暴走監視装置において、前記整合表には、当該マイクロプロセッサには起こり得ないアドレス増減値の推移を記載し、前記暴走判定回路が、前記記憶装置に記憶されたアドレス増減値の推移を前記整合表に照らし合わせ、そのアドレス増減値の推移が前記整合表に存在する場合には当該マイクロプロセッサが暴走状態にあると判定し、存在しない場合には当該マイクロプロセッサが正常状態にあると判定し、この判定結果を示す信号を発生することを特徴とするマイクロプロセッサの暴走監視装置。
【請求項１２】
スタック領域をアドレッシングするスタックポインタのアドレス値を増加・減少させて、該スタック領域へのデータ退避・該スタック領域からのデータ復帰を制御するマイクロプロセッサの暴走監視装置であって、
最初のスタックポインタのアドレス値をＦＩＬＯ型の記憶装置の最深部に書き込み、その後スタックポインタのアドレス値が増加もしくは減少すると、その推移後のアドレス値を前記記憶装置に記憶されている最後のアドレス値と比較し、その推移が前記データ退避を示す場合にはその推移後のアドレス値を前記記憶装置に履歴し、その推移が前記データ復帰を示す場合には、前記記憶装置に履歴されているアドレス値のうちの最後のアドレス値を取り出し次の最後のアドレス値を読み出して出力する記憶装置制御回路と、
推移後のアドレス値を前記記憶装置制御回路から出力されるアドレス値と比較し、一致する場合には当該マイクロプロセッサが正常状態にあると判定し、一致しない場合には当該マイクロプロセッサが暴走状態にあると判定し、この判定結果を示す信号を発生する暴走判定回路と、
を備えることを特徴とするマイクロプロセッサの暴走監視装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサの暴走を監視するマイクロプロセッサの暴走監視装置に関する。
【背景技術】
【０００２】
一般的にマイクロプロセッサは、サブルーチン呼び出しや割込みが発生すると、処理中のデータを外部のスタック領域に一時的に退避させ、サブルーチン処理、割込み処理が終了すると、その退避データをスタック領域から復帰させる。
【０００３】
退避データのスタック領域への書き込み処理／読み出し処理は、マイクロプロセッサが、スタック領域をアドレッシングするスタックポインタのアドレス値を制御することがで行われる。すなわち、退避データのスタック領域への書き込み処理／読み出し処理時には、スタックポインタのアドレス値が予め定められた値分自動的に増減する。
【０００４】
一方、スタック領域を通常データ用の外部メモリ内に設定する場合がある。この場合、一般的に、図１１に示すように、外部メモリの先頭番地から通常データを書き込み、最終番地から退避データを書き込むように構成する。また、通常データと退避データが衝突しないように、スタック領域の限界値を予め設定しておく。
【０００５】
このように一つの外部メモリでスタック領域と通常データ用のメモリ領域を実現する場合、従来は、スタックポインタのアドレス値が限界値に達すると異常信号を発生して例外処理ルーチンを起動することにより、マイクロプロセッサの暴走を防止していた（例えば、特許文献１参照。）。
【０００６】
このように、従来は、スタックポインタがスタック領域を越えたかどうかによりマイクロプロセッサが暴走しているか否かを判定して、マイクロプロセッサの暴走を防止していた。しかしながら、この従来のマイクロプロセッサの暴走を判定する手法では、設定したスタック領域を保証し、その領域を越える暴走を判定することはできても、設定領域内でのスタックポインタの誤動作に係る暴走を判定することはできないという問題があった。
【０００７】
また、従来のマイクロプロセッサの暴走を防止する別の手段として、ウォッチドックタイマを用いる手段がある。図１２にウォッチドックタイマを用いたマイクロプロセッサの暴走防止手段の概念図を示す。
【０００８】
ウォッチドックタイマ（ＷＤタイマ）は、ソフトウェアの処理時間が基準時間を越えているか否かを判定し、越えている場合にマイクロプロセッサ（ＣＰＵ）へ暴走を知らせる信号（暴走検出信号）を出力して、マイクロプロセッサ内にリセット信号を発生させるための回路である。
【０００９】
すなわちウォッチドックタイマは上記基準時間を計測するために用いるＮビットカウンタを具備しており、マイクロプロセッサが一定期間毎にＷＤクリア信号を発生して基準時間内にカウンタをクリアすることで、マイクロプロセッサが暴走していないと判断する。
【００１０】
一方、マイクロプロセッサが暴走している場合には、マイクロプロセッサはカウンタのクリア処理を確実に行うことができず、カウンタがオーバーフローするので、ウォッチドックタイマはカウンタがオーバーフローすると暴走検出信号を出力してマイクロプロセッサ内にリセット信号を発生させ、マイクロプロセッサの暴走を防止していた。
【００１１】
このように、従来のウォッチドックタイマを用いた暴走防止手段では、基準時間内にカウンタがクリアされるかどうかによりマイクロプロセッサが暴走しているか否かを判定して、マイクロプロセッサの暴走を防止していた。しかしながら、この従来のマイクロプロセッサの暴走を判定する手法では、マイクロプロセッサが暴走（無限ループ）していたとしても、基準時間内にウォッチドックタイマのクリア信号を出力し続けていれば暴走を判定できないという問題があった。このような暴走は、サブルーチン処理や割込み処理などの一定間隔で同じ動作をする処理を行うときに発生する場合が多い。
【００１２】
以上のように、従来は、スタックポインタのアドレス値を監視し、スタック領域の限界値に達するとマイクロプロセッサが暴走状態にあると判定していたが、スタック領域内でのスタックポインタの誤動作に係る暴走を判定することはできなかった。
【００１３】
また、従来のウォッチドックタイマを用いた手法では、マイクロプロセッサが暴走して基準時間内にウォッチドックタイマのクリア信号を出力し続けている場合にはその暴走を判定できないという問題があった。
【特許文献１】特開平４−１５７５３０号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
本発明は、上記問題点に鑑み、サブルーチン処理や割込み処理が発生したときのスタックポインタのアドレス値の増減値（スタック領域へのデータ退避・スタック領域からのデータ復帰によるアドレス値の増減値）を算出し、現在のスタックポインタの移動によるアドレス増減値と前回の移動によるアドレス増減値を比較する。その結果、スタックポインタが前回の移動前のアドレス値に復帰しているとき、もしくはさらにデータ退避の方向へ移動しているときにはマイクロプロセッサが正常状態にあると判定し、それ以外の場合にはマイクロプロセッサが暴走状態にあると判定する。このように、スタック領域へ退避したデータを復帰させるとスタックポインタがその退避前のアドレス値へ復帰することを考慮して、現在のスタックポインタの移動によるアドレス増減値と前回の移動によるアドレス増減値を監視することにより、マイクロプロセッサの暴走を判定できるマイクロプロセッサの暴走監視装置を提供することを目的とする。
【００１５】
また、本発明は、同じ回数だけデータ退避とデータ復帰がなされるまでのスタックポインタのアドレス値の増加分と減少分が等しい場合には、マイクロプロセッサが正常状態にあると判定し、等しくない場合には、マイクロプロセッサが暴走状態にあると判定する。このように、一連の動作が終了した時点でのトータルでのアドレス増加分と減少分が等しいか否かを監視することにより、マイクロプロセッサの暴走を判定できるマイクロプロセッサの暴走監視装置を提供することを目的とする。
【００１６】
また、本発明は、サブルーチン処理や割込み処理が発生したときのスタックポインタのアドレス増減値を算出し、そのアドレス増減値のうちデータ退避を示す増減値のみを記憶装置に履歴し、算出したアドレス増減値がデータ復帰を示す場合には、履歴した増減値のうちの最後に記憶したアドレス増減値を取り出し、そのアドレス増減値と比較する。そして、それらの絶対値が一致する場合にはマイクロプロセッサが正常状態にあると判定し、一致しない場合にはマイクロプロセッサが暴走状態にあると判定する。このように数回分のデータ退避に対応可能なＦＩＬＯ型の記憶装置を用いてデータ退避を示すアドレス増減値の履歴を残すことにより、多重のデータ退避が発生した場合であってもマイクロプロセッサの暴走を判定できるマイクロプロセッサの暴走監視装置を提供することを目的とする。
【００１７】
また、本発明は、割込みの優先順位を決定する割込み許可レベルが高い割込みが発生すると、現在実行中の割込み処理を中断してその割込み処理を実行するという規則を考慮して、実行を開始した割込み処理の許可レベルを記憶装置に履歴し、割込み処理が終了すると、中断した割込み処理の許可レベルを記憶装置から読み出して、次に実行される割込み処理の許可レベルと比較する。そして、レベルが一致する場合にはマイクロプロセッサが正常状態にあると判定し、一致しない場合にはマイクロプロセッサが暴走状態にあると判定する。このように、割込み処理のレベル推移の規則を利用することにより、マイクロプロセッサの暴走を判定できるマイクロプロセッサの暴走監視装置を提供することを目的とする。
【００１８】
また、本発明は、割込み処理を実行するときにはその割込み許可レベルをレジスタに設定し、処理終了後は一旦レジスタに割込み許可の基準レベルを設定した後、次の割込み処理を受け付けるという規則を考慮して、システム上起こり得る割込み処理の組合せに対応したレジスタに設定・更新されるレベルの推移を記載した整合表を用意しておき、実際にレジスタに設定・更新されたレベルの推移を整合表に照らし合わせ（マッチング作業）、そのレベルの推移が整合表に存在する場合にはマイクロプロセッサが正常状態にあると判定し、存在しない場合にはマイクロプロセッサが暴走状態にあると判定することにより、マイクロプロセッサの暴走を判定できるマイクロプロセッサの暴走監視装置を提供することを目的とする。
【００１９】
また、本発明は、システム上起こり得るアドレス増減値の推移が記載された整合表を用意しておき、実際のアドレス増減値の推移をこの整合表と照らし合わせ（マッチング作業）、そのアドレス増減値の推移が整合表に存在する場合にはマイクロプロセッサが正常状態にあると判定し、存在しない場合にはマイクロプロセッサが暴走状態にあると判定することにより、マイクロプロセッサの暴走を判定できるマイクロプロセッサの暴走監視装置を提供することを目的とする。
【００２０】
また、本発明は、スタックポインタがデータ退避の方向へ動作したときのアドレス値を履歴し、逆にデータ復帰の方向へ動作したときには、履歴したうちの最後のアドレス値を取り出した後の次の最後のアドレス値と比較し、一致する場合にはマイクロプロセッサが正常状態にあると判定し、一致しない場合にはマイクロプロセッサが暴走状態にあると判定する。このように、スタック領域へ退避したデータを復帰させるとスタックポインタがその退避前のアドレス値へ復帰することを考慮して、スタックポインタのアドレス値を監視することにより、マイクロプロセッサの暴走を判定できるマイクロプロセッサの暴走監視装置を提供することを目的とする。
【課題を解決するための手段】
【００２１】
本発明の請求項１記載のマイクロプロセッサの暴走監視装置は、スタック領域をアドレッシングするスタックポインタのアドレス値を増加・減少させて、該スタック領域へのデータ退避・該スタック領域からのデータ復帰を制御するマイクロプロセッサの暴走監視装置であって、当該マイクロプロセッサによる命令実行後のスタックポインタのアドレス値とその命令実行前のアドレス値の増減値であるアドレス増減値を算出する加減算器と、前記加減算器により算出されるアドレス増減値が前記データ退避・データ復帰のいずれを示すのか判定するデータ退避・復帰判定回路と、前記データ退避・復帰判定回路により、前記データ退避もしくは前記データ復帰がなされたことが判定されると、そのアドレス増減値を格納するアドレス増減値格納回路と、前記データ退避・復帰判定回路により、前記データ退避もしくは前記データ復帰がなされたことが判定され、かつ前記アドレス増減値格納回路が保持するアドレス増減値が前記データ退避を示すとき、前記加減算器により算出されたアドレス増減値と前記アドレス増減値格納回路が保持するアドレス増減値を比較し、前記加減算器により算出されたアドレス増減値が前記データ復帰を示し且つ両アドレス増減値の絶対値が等しい場合、もしくは前記加減算器により算出されたアドレス増減値が前記データ退避を示す場合に、当該マイクロプロセッサが正常状態にあると判定し、前記加減算器により算出されたアドレス増減値が前記データ復帰を示し且つ両アドレス増減値の絶対値が等しくない場合には当該マイクロプロセッサが暴走状態にあると判定し、この判定結果を示す信号を発生する暴走判定回路と、を備えることを特徴とする。
【００２２】
また、本発明の請求項２記載のマイクロプロセッサの暴走監視装置は、スタック領域をアドレッシングするスタックポインタのアドレス値を増加・減少させて、該スタック領域へのデータ退避・該スタック領域からのデータ復帰を制御するマイクロプロセッサの暴走監視装置であって、当該マイクロプロセッサによる命令実行後のスタックポインタのアドレス値とその命令実行前のアドレス値の増減値であるアドレス増減値を算出する加減算器と、前記加減算器により算出されるアドレス増減値が前記データ退避・データ復帰のいずれを示すのか判定するデータ退避・復帰判定回路と、前記データ退避・復帰判定回路による判定結果を受けて、前記加減算器により算出されたアドレス増減値を基に、スタックポインタのアドレス値の増加分と減少分に差があるか否かを判定するアドレス増加・減少判定回路と、前記データ退避・復帰判定回路による判定結果を受けて、前記データ退避と前記データ復帰がなされた回数を確認するデータ退避・復帰回数確認カウンタ回路と、前記データ退避・復帰回数確認カウンタ回路により前記データ退避と前記データ復帰が同回数なされたことが示されたとき、アドレス増加・減少判定回路によりスタックポインタのアドレス値の増加分と減少分が等しいことが示された場合には、当該マイクロプロセッサが正常状態にあると判定し、等しくないことが示された場合には、当該マイクロプロセッサが暴走状態にあると判定し、この判定結果を示す信号を発生する暴走判定回路と、を備えることを特徴とする。
【００２３】
また、本発明の請求項３記載のマイクロプロセッサの暴走監視装置は、スタック領域をアドレッシングするスタックポインタのアドレス値を増加・減少させて、該スタック領域へのデータ退避・該スタック領域からのデータ復帰を制御するマイクロプロセッサの暴走監視装置であって、当該マイクロプロセッサによる命令実行後のスタックポインタのアドレス値とその命令実行前のアドレス値の増減値であるアドレス増減値を算出する加減算器と、前記加減算器により算出されるアドレス増減値が前記データ退避・データ復帰のいずれを示すのか判定するデータ退避・復帰判定回路と、前記データ退避・復帰判定回路による判定結果を受け、前記加減算器により算出されたアドレス増減値が前記データ退避を示す場合には、そのアドレス増減値を記憶装置に履歴し、前記加減算器により算出されたアドレス増減値が前記データ復帰を示す場合には、前記記憶装置に履歴したアドレス増減値のうちの最後のアドレス増減値を取り出して出力する記憶装置制御回路と、前記記憶装置制御回路から出力されるアドレス増減値と前記加減算器により算出されたアドレス増減値を比較し、絶対値が一致する場合には当該マイクロプロセッサが正常状態にあると判定し、一致しない場合には当該マイクロプロセッサが暴走状態にあると判定し、この判定結果を示す信号を発生する暴走判定回路と、を備えることを特徴とする。
【００２４】
また、本発明の請求項４記載のマイクロプロセッサの暴走監視装置は、請求項２記載のマイクロプロセッサの暴走監視装置であって、前記データ退避・復帰判定回路による判定結果が前記データ退避を示す回数を確認し、その回数が当該マイクロプロセッサにおけるデータ退避の発生頻度を考慮した期待値と一致した後において、前記データ退避・復帰回数確認カウンタ回路により前記データ退避と前記データ復帰が同回数なされたことが示されたとき、前記暴走判定回路へ判定動作許可信号を出力する判定動作許可回路を備え、前記暴走判定回路が、前記判定動作許可回路より前記判定動作許可信号を受けたことを条件として前記判定を行うことを特徴とする。
【００２５】
また、本発明の請求項５記載のマイクロプロセッサの暴走監視装置は、請求項３記載のマイクロプロセッサの暴走監視装置であって、前記データ退避・復帰判定回路による判定結果が前記データ退避を示す回数を確認し、その回数が当該マイクロプロセッサにおけるデータ退避の発生頻度を考慮した期待値と一致した後において、前記データ退避・復帰判定回路による判定結果が前記データ復帰を示したとき、前記暴走判定回路へ判定動作許可信号を出力する判定動作許可回路を備え、前記暴走判定回路が、前記判定動作許可回路より前記判定動作許可信号を受けたことを条件として前記判定を行うことを特徴とする。
【００２６】
また、本発明の請求項６記載のマイクロプロセッサの暴走監視装置は、請求項１もしくは３のいずれかに記載のマイクロプロセッサの暴走監視装置であって、前記暴走判定回路により当該マイクロプロセッサが正常状態にあると判定された回数が当該マイクロプロセッサにおけるデータ退避の発生頻度を考慮した期待値と一致したときにおいて、当該マイクロプロセッサが正常状態にあることを示す信号を発生する信号発生頻度低減回路を備えることを特徴とする。
【００２７】
また、本発明の請求項７記載のマイクロプロセッサの暴走監視装置は、割込みを許可する基準レベルをレジスタに設定してデータ処理を行い、前記基準レベルよりもレベルの高い割込み処理が発生すると前記レジスタをそのレベルに更新してその割込み処理を実行し、実行中の割込み処理よりもレベルの高い割込み処理が発生すると前記レジスタをそのレベルに更新してその割込み処理を実行し、割込み処理終了後、中断した割込み処理を再開するに際し、前記レジスタを前記基準レベルに一旦更新した後にその再開する割込み処理のレベルに更新し、データ処理を再開するに際し、前記レジスタを前記基準レベルに更新するマイクロプロセッサの暴走監視装置であって、割込み処理が発生すると、前記レジスタに更新されるレベルを、前記基準レベルを最深部に保持する記憶装置に履歴し、割込み処理終了後は、中断した割込み処理のレベルを前記記憶装置より読み出して出力し、データ処理が再開されるときには前記記憶装置が最深部に保持する前記基準レベルを読み出して出力する記憶装置制御回路と、割込み処理終了後、実行された割込み処理もしくはデータ処理のレベルと前記記憶装置制御回路から出力されるレベルを比較し、一致する場合には当該マイクロプロセッサが正常状態にあると判定し、一致しない場合には当該マイクロプロセッサが暴走状態にあると判定し、この判定結果を示す信号を発生する暴走判定回路と、を備えることを特徴とする。
【００２８】
また、本発明の請求項８記載のマイクロプロセッサの暴走監視装置は、割込みを許可する基準レベルをレジスタに設定してデータ処理を行い、前記基準レベルよりもレベルの高い割込み処理が発生すると前記レジスタをそのレベルに更新してその割込み処理を実行し、実行中の割込み処理よりもレベルの高い割込み処理が発生すると前記レジスタをそのレベルに更新してその割込み処理を実行し、割込み処理終了後、中断した割込み処理を再開するに際し、前記レジスタを前記基準レベルに一旦更新した後にその再開する割込み処理のレベルに更新し、データ処理を再開するに際し、前記レジスタを前記基準レベルに更新するマイクロプロセッサの暴走監視装置であって、当該マイクロプロセッサに起こり得る割込み処理の組合せに対応した前記レジスタに更新されるレベルの推移が記載された整合表を記憶する整合表記憶装置と、割込み処理終了後、実行された割込み処理の組合せに対応して前記レジスタに更新されたレベルの推移を記憶する記憶装置と、前記記憶装置に記憶されたレベルの推移を前記整合表に照らし合わせ、そのレベルの推移が前記整合表に存在する場合には当該マイクロプロセッサが正常状態にあると判定し、存在しない場合には当該マイクロプロセッサが暴走状態にあると判定し、この判定結果を示す信号を発生する暴走判定回路と、を備えることを特徴とする。
【００２９】
また、本発明の請求項９記載のマイクロプロセッサの暴走監視装置は、スタック領域をアドレッシングするスタックポインタのアドレス値を増加・減少させて、該スタック領域へのデータ退避・該スタック領域からのデータ復帰を制御するマイクロプロセッサの暴走監視装置であって、当該マイクロプロセッサによる命令実行後のスタックポインタのアドレス値とその命令実行前のアドレス値の増減値であるアドレス増減値を算出する加減算器と、前記加減算器により算出されたアドレス増減値の推移を記憶する記憶装置と、当該マイクロプロセッサに起こり得るアドレス増減値の推移が記載された整合表を記憶する整合表記憶装置と、前記記憶装置に記憶されたアドレス増減値の推移を前記整合表に照らし合わせ、そのアドレス増減値の推移が前記整合表に存在する場合には当該マイクロプロセッサが正常状態にあると判定し、存在しない場合には当該マイクロプロセッサが暴走状態にあると判定し、この判定結果を示す信号を発生する暴走判定回路と、を備えることを特徴とする。
【００３０】
また、本発明の請求項１０記載のマイクロプロセッサの暴走監視装置は、請求項８記載のマイクロプロセッサの暴走監視装置において、前記整合表には、当該マイクロプロセッサには起こり得ない割込み処理の組合せに対応した前記レジスタに更新されるレベルの推移を記載し、前記暴走判定回路が、前記記憶装置に記憶されたレベルの推移を前記整合表に照らし合わせ、そのレベルの推移が前記整合表に存在する場合には当該マイクロプロセッサが暴走状態にあると判定し、存在しない場合には当該マイクロプロセッサが正常状態にあると判定し、この判定結果を示す信号を発生することを特徴とする。
【００３１】
また、本発明の請求項１１記載のマイクロプロセッサの暴走監視装置は、請求項９記載のマイクロプロセッサの暴走監視装置において、前記整合表には、当該マイクロプロセッサには起こり得ないアドレス増減値の推移を記載し、前記暴走判定回路が、前記記憶装置に記憶されたアドレス増減値の推移を前記整合表に照らし合わせ、そのアドレス増減値の推移が前記整合表に存在する場合には当該マイクロプロセッサが暴走状態にあると判定し、存在しない場合には当該マイクロプロセッサが正常状態にあると判定し、この判定結果を示す信号を発生することを特徴とする。
【００３２】
また、本発明の請求項１２記載のマイクロプロセッサの暴走監視装置は、スタック領域をアドレッシングするスタックポインタのアドレス値を増加・減少させて、該スタック領域へのデータ退避・該スタック領域からのデータ復帰を制御するマイクロプロセッサの暴走監視装置であって、最初のスタックポインタのアドレス値をＦＩＬＯ型の記憶装置の最深部に書き込み、その後スタックポインタのアドレス値が増加もしくは減少すると、その推移後のアドレス値を前記記憶装置に記憶されている最後のアドレス値と比較し、その推移が前記データ退避を示す場合にはその推移後のアドレス値を前記記憶装置に履歴し、その推移が前記データ復帰を示す場合には、前記記憶装置に履歴されているアドレス値のうちの最後のアドレス値を取り出し次の最後のアドレス値を読み出して出力する記憶装置制御回路と、推移後のアドレス値を前記記憶装置制御回路から出力されるアドレス値と比較し、一致する場合には当該マイクロプロセッサが正常状態にあると判定し、一致しない場合には当該マイクロプロセッサが暴走状態にあると判定し、この判定結果を示す信号を発生する暴走判定回路と、を備えることを特徴とする。
【発明の効果】
【００３３】
本発明によれば、スタックポインタのアドレス値がスタック領域内にあるか否かにかかわらず、スタックポインタの誤動作に係るマイクロプロセッサの暴走を判定することができる。また、ウォッチドックタイマを用いないので、サブルーチン処理や割込み処理などの一定間隔で同じ動作をする処理中に暴走が発生した場合であっても、その暴走を判定することができる。また、スタックポインタのアドレス値がスタック領域内に存在する間や、サブルーチン処理や割込み処理が繰り返されている間に暴走を判定できるので、暴走を判定するまでにかかる時間を短縮することができる。
【００３４】
また、本発明の請求項６記載のマイクロプロセッサの暴走監視装置によれば、データ退避の発生頻度が高いシステムにおいて、マイクロプロセッサが正常状態にあることを示す信号の発生頻度を抑制することができる。
【００３５】
また、本発明の請求項１０、１１記載のマイクロプロセッサの暴走監視装置によれば、システム上起こり得る割込み処理の組合せよりも起こり得ない組合せの方が少ない場合に、整合表を格納するメモリ空間を抑制できる。また暴走を判定するまでにかかる時間を短縮することもできる。
【発明を実施するための最良の形態】
【００３６】
以下、本発明の実施の形態について図面を用いて説明する。通常、マイクロプロセッサは、割込みが発生するとその割込みの種類に対応した割込み処理ルーチンを起動し、現在処理中のデータをスタック領域へ退避させて割込み処理を実行し、割込み処理終了後にスタック領域から退避データを復帰させて中断していた処理を再開する。本実施の形態におけるマイクロプロセッサは、スタック領域へのデータ退避・スタック領域からのデータ復帰を、スタック領域をアドレッシングするスタックポインタを用いて制御する。
【００３７】
また、本実施の形態では、前述した図１１に示すように、通常データ用のメモリ領域とスタック領域を一つの外部メモリで共用する場合について説明する。したがって、スタックポインタの動作がスタック領域へのデータ退避動作（退避データの書き込み動作）であった場合にはスタックポインタのアドレス値は減少し、スタック領域からのデータ復帰動作（退避データの読み出し動作）であった場合には増加する。
【００３８】
また、割込み処理ルーチンには、割込み処理中に別の割込みが発生したときのために、割込みの緊急度に応じて割込み許可のレベルが設けられており、マイクロプロセッサはレベルの高い割込み処理を優先して実行する。マイクロプロセッサは、データ処理中は割込み許可レベルの基準レベル（割込み許可基準レベル）をレジスタに設定し、割込み許可基準レベルよりもレベルの高い割込みが発生すると、現在処理中のデータをスタック領域へ退避させて、レジスタをその割込み許可レベルに更新してその割込み処理を実行する。そして、現在実行中の割込み処理の割込み許可レベルよりもレベルの高い割込みが発生すると、マイクロプロセッサは、現在処理中のデータをスタック領域へ退避させて、レジスタをその割込み許可レベルに更新してその割込み処理を実行する。
【００３９】
また、マイクロプロセッサは割込み処理が終了すると、一旦レジスタを割込み許可基準レベルに更新して次の割込みを受け付ける。正常なマイクロプロセッサであれば、この終了した割込み処理により中断した割込み処理が開始される。
【００４０】
なお、本実施の形態では、マイクロプロセッサとしてＣＰＵを例にして説明するが、無論、ＭＰＵなどであってもよい。
（実施の形態１）
図１に本実施の形態１〜５におけるマイクロプロセッサの暴走監視装置に係る基本的な動作フローチャートを示す。本装置は、スタックポインタが動作した時点で、スタックポインタのアドレス増減値を発生し（ステップＳ１０１）、ステップＳ１０２にて、スタックポインタの動作方向を判定する。すなわち、スタックポインタの動作が「スタック領域へのデータ退避動作」と「スタック領域からのデータ復帰動作」のいずれであるのかを判定する。
【００４１】
ステップＳ１０２の処理工程により「スタック領域へのデータ退避動作」と判定した場合、ステップＳ１０３にて、退避シーケンスによりスタックポインタが移動した分のアドレス増減値（この場合スタックポインタのアドレス値は減少しているので、アドレス増減値はマイナスとなる。）を最終データとして記憶装置に格納し、ＣＰＵが正常状態にあると判定してステップＳ１０１へ戻る。
【００４２】
一方、ステップＳ１０２の処理工程により「スタック領域からのデータ復帰動作」と判定した場合（この場合スタックポインタのアドレス値は増加しているので、アドレス増減値はプラスとなる。）、ステップＳ１０４にて、ステップＳ１０３の処理工程により記憶装置へ格納された最終データ（最終値）を取り出す。
【００４３】
そして、ステップＳ１０５にて、ステップＳ１０１の処理工程により発生した現在のアドレス増減値とステップＳ１０４の処理工程により取り出したアドレス増減値（最終値）を比較し、一致していれば（すなわち合計値が“０”であれば）ＣＰＵが正常状態にあると判定し、一致していなければ（すなわち合計値が“０”以外の値であれば）暴走状態にあると判定する。
【００４４】
例えば、スタックポインタが３アドレス値分のデータ退避動作をした後、３アドレス値分のデータ復帰動作をしたことを
（−３）  →  （＋３）
と表現すると、まず、“−３”はスタック領域へのデータ退避動作を表すので、記憶装置にアドレス増減値“−３”を書き込む。次に、“＋３”はスタック領域からのデータ復帰動作を表すので、記憶装置から最終データであるアドレス増減値“−３”を取り出して現在のアドレス増減値“＋３”と比較し、合計値が“０”であることからＣＰＵが正常に動作していると判断し、例えばそのことを表示する。
【００４５】
以下、本実施の形態１におけるマイクロプロセッサの暴走監視装置について説明する。図２に本実施の形態１におけるマイクロプロセッサの暴走監視装置の構成図を示す。図２において、アドレス値増減判定回路２０１は、スタックポインタのアドレス増減値（Ｎ２０２）を発生する。
【００４６】
セレクタ２０３は、スタックポインタが移動したことを条件として、アドレス値増減判定回路２０１の出力Ｎ２０２とレジスタ２０４内のデータを選択してレジスタ２０４へ出力する。アドレス増減値格納部としてのレジスタ２０４は、セレクタ２０３の出力を格納する。すなわち、セレクタ２０３はスタックポインタのアドレス値が増加もしくは減少した場合にアドレス値増減判定回路２０１の出力Ｎ２０２を選択し、変化しない場合にはレジスタ２０４に格納されているデータを選択する。なお、セレクタ２０３はスタックポインタが移動した場合にのみデータを通す構造としてもよい。
【００４７】
また、暴走判定回路としての比較回路２０５は、スタックポインタが移動したこと、および、レジスタ２０４が格納しているデータＢ（前回のアドレス増減値）がデータ退避動作を示す負の値であることを条件として、セレクタ２０３が選択したデータＡ（現在のアドレス増減値）とデータＢを比較し、Ａ＋Ｂの結果が“０”またはＢ以下であったときにはＣＰＵが正常状態にあることを示す信号を出力し、それ以外の値のときはＣＰＵが暴走状態にあることを示す信号を出力する。すなわち、Ａ＋Ｂの結果が“０”とは、現在のアドレス増減値（データＡ）がデータ復帰動作を示す正の値であり且つ両アドレス増減値（データＡとデータＢ）の絶対値が等しい場合であり、スタックポインタのアドレス値がデータ退避動作前のアドレス値に戻ったことを意味する。また、Ａ＋Ｂの結果がＢ以下とは、現在のアドレス増減値（データＡ）がデータ退避動作を示す負の値であり、データ退避動作に続いてデータ退避動作を行ったことを意味する。また、それ以外の値とは、現在のアドレス増減値（データＡ）がデータ復帰動作を示す正の値であり且つ両アドレス増減値（データＡとデータＢ）の絶対値が等しくない場合である。ＣＰＵが正常であれば、スタック領域へ退避したデータを復帰させるとスタックポインタがその退避前のアドレス値へ復帰するので、この場合はＣＰＵが暴走していると判断できる。
【００４８】
また、アドレス値増減判定回路２０１において、第１のアドレス値格納部としてのレジスタ２０６は、ＣＰＵによる命令実行後の現在のスタックポインタのアドレス値を保持する。また、第２のアドレス値格納部としてのレジスタ２０７は、その命令実行前の前回のスタックポインタのアドレス値を保持する。
【００４９】
また、データ退避・復帰判定回路としての比較回路２０８は、レジスタ２０７が保持する前回のスタックポインタのアドレス値とレジスタ２０６が保持する現在のスタックポインタのアドレス値を比較し、その比較結果（アドレス値増減判定結果）を前述したセレクタ２０３と比較回路２０５、および後述する加減算器２０９へ出力する。
【００５０】
ここでは比較回路２０８は、アドレス値の増加すなわちスタック領域からのデータ復帰動作を示す“１１”と、アドレス値の減少すなわちスタック領域へのデータ退避動作を示す“１０”と、アドレス値の変化がないことを示す“００”の３つの値を有し、比較結果に応じていずれかを出力する。この３つの値により当該暴走監視装置は制御される。
【００５１】
また、加減算器２０９は実際のアドレスの変化値（アドレス増減値）を計算して出力する。このとき、加減算の切り替えは、比較回路２０８の出力（アドレス値増減判定結果）により決定する。
【００５２】
セレクタ２０３は比較回路２０８の出力Ｎ２１０（アドレス値増減判定結果）を受けて、スタックポインタが移動したことを条件として、アドレス値増減判定回路２０１（加減算器２０９）の出力Ｎ２０２（アドレス増減値）を選択して、レジスタ２０４にロードする。
【００５３】
本実施の形態１では、セレクタ２０３とレジスタ２０４により、比較回路２０８においてスタック領域へのデータ退避動作・スタック領域からのデータ復帰動作がなされたことが判定されると加減算器２０９において算出されたアドレス増減値を格納するアドレス増減値格納回路が構成される。
【００５４】
なお、ここではセレクタ２０３が、スタックポインタが移動したことを条件としてアドレス増減値をレジスタ２０４に格納するか否かを決定したが、例えば、スタックポインタが移動したことを条件として加減算器によるアドレス増減値の算出を許可する構成としてもよいし、スタックポインタが移動したことを条件として加減算器による計算対象を格納するレジスタ２０６へのアドレス値の格納を許可する構成とするなどしてもよい。
【００５５】
続いて、例として、スタックポインタのアドレス値が
３ｆｆｆ  →  ３ｆｆａ  →  ３ｆｆｆ
と推移した場合の当該暴走監視装置の動作を説明する。まず、ＣＰＵによる最初の命令実行後のスタックポインタのアドレス値である“３ｆｆｆ”を取り込みレジスタ２０６にセットする。
【００５６】
ＣＰＵによる次の命令実行後、前回のアドレス値である“３ｆｆｆ”をレジスタ２０６からレジスタ２０７へロードすると同時に、現在のアドレス値“３ｆｆａ”を取り込みレジスタ２０６にセットする。
【００５７】
そして、比較回路２０８によりレジスタ２０７が保持する前回のアドレス値“３ｆｆｆ”とレジスタ２０６が保持する現在のアドレス値“３ｆｆａ”を比較する。この場合、
前回のアドレス値“３ｆｆｆ”  ＞  現在のアドレス値“３ｆｆａ”
の関係となっているため、比較回路２０８はアドレス値増減判定結果としてアドレス値の減少（データ退避動作）を示す“１０”を出力する。この出力“１０”を受けた加減算器２０９は、前回のアドレス値“３ｆｆｆ”と現在のアドレス値“３ｆｆａ”を基に、実際のアドレスの変化値であるアドレス増減値“−６”を計算して出力する。
【００５８】
セレクタ２０３は比較回路２０８の出力Ｎ２１０が“１１”もしくは“１０”のときにアドレス値増減判定回路２０１の出力Ｎ２０２を選択し、レジスタ２０４の直前で現在のアドレス増減値“−６”を次のロードタイミングまで待機させる。
【００５９】
最後に、ＣＰＵによる次の命令実行後のスタックポインタのアドレス値つまり現在のアドレス値“３ｆｆｆ”を取り込みレジスタ２０６にセットする。このとき、レジスタ２０６が保持していた前回のアドレス値“３ｆｆａ”がレジスタ２０７へセットされ、前回のアドレス増減値“−６”がレジスタ２０４へセットされる。
【００６０】
比較回路２０８はレジスタ２０７が保持する前回のアドレス値“３ｆｆａ”とレジスタ２０６が保持する現在のアドレス値“３ｆｆｆ”を比較する。この場合、
前回のアドレス値“３ｆｆａ”  ＜  現在のアドレス値“３ｆｆｆ”
の関係となっているため、比較回路２０８はアドレス値の増加（データ復帰動作）を示す“１１”を出力する。この出力“１１”を受けた加減算器２０９は、前回のアドレス値“３ｆｆａ”と現在のアドレス値“３ｆｆｆ”を基に、実際のアドレスの変化値であるアドレス増減値“＋６”を計算して出力する。
【００６１】
セレクタ２０３は、比較回路２０８の出力Ｎ２１０が“１１”であるので、アドレス値増減判定回路２０１の出力Ｎ２０２（現在のアドレス増減値“＋６”）を選択し、レジスタ２０４の直前で次のロードタイミングまで待機させる。
【００６２】
このとき、比較回路２０５は、比較回路２０８の出力Ｎ２１０が“１１”であり、且つ、レジスタ２０４が格納しているデータＢ（前回のアドレス増減値“−６”）が負の値であるので、セレクタ２０３が選択したデータＡ（レジスタ２０４の直前で待機している現在のアドレス増減値“＋６”）と、レジスタ２０４が格納しているデータＢ（前回のアドレス増減値“−６”）を比較する。この場合、
Ａ（＋６）  ＋  Ｂ（−６）  ＝  ０
であるので、比較回路２０５は、ＣＰＵが正常状態にあると判定し、ＣＰＵが正常状態にあることを示す信号を出力する。
【００６３】
これに対し、スタックポインタのアドレス値が
３ｆｆｆ  →  ３ｆｆａ  →  ３ｆｆｅ
と推移した場合には、まず、ＣＰＵによる最初の命令実行後のスタックポインタのアドレス値である“３ｆｆｆ”を取り込みレジスタ２０６にセットする。
【００６４】
ＣＰＵによる次の命令実行後、前回のアドレス値である“３ｆｆｆ”をレジスタ２０６からレジスタ２０７へロードすると同時に、現在のアドレス値“３ｆｆａ”を取り込みレジスタ２０６にセットする。
【００６５】
そして、比較回路２０８によりレジスタ２０７が保持する前回のアドレス値“３ｆｆｆ”とレジスタ２０６が保持する現在のアドレス値“３ｆｆａ”を比較する。この場合、
前回のアドレス値“３ｆｆｆ”  ＞  現在のアドレス値“３ｆｆａ”
の関係となっているため、比較回路２０８はアドレス値増減判定結果としてアドレス値の減少（データ退避動作）を示す“１０”を出力する。この出力“１０”を受けた加減算器２０９は、前回のアドレス値“３ｆｆｆ”と現在のアドレス値“３ｆｆａ”を基に、実際のアドレスの変化値であるアドレス増減値“−６”を計算して出力する。
【００６６】
セレクタ２０３は、比較回路２０８の出力Ｎ２１０が“１０”であるので、アドレス値増減判定回路２０１の出力Ｎ２０２（現在のアドレス増減値“−６”）を選択し、レジタ２０４の直前で次のロードタイミングまで待機させる。
【００６７】
最後に、ＣＰＵによる次の命令実行後のスタックポインタのアドレス値つまり現在のアドレス値“３ｆｆｅ”を取り込みレジスタ２０６にセットする。このとき、レジスタ２０６が保持していた前回のアドレス値“３ｆｆａ”がレジスタ２０７へセットされ、前回のアドレス増減値“−６”がレジスタ２０４へセットされる。
【００６８】
比較回路２０８はレジスタ２０７が保持する前回のアドレス値“３ｆｆａ”とレジスタ２０６が保持する現在のアドレス値“３ｆｆｅ”を比較する。この場合、
前回のアドレス値“３ｆｆａ”  ＜  現在のアドレス値“３ｆｆｅ”
の関係となっているため、比較回路２０８はアドレス値の増加（データ復帰動作）を示す“１１”を出力する。この出力“１１”を受けた加減算器２０９は、前回のアドレス値“３ｆｆａ”と現在のアドレス値“３ｆｆｅ”を基に、実際のアドレスの変化値であるアドレス増減値“＋５”を計算して出力する。
【００６９】
セレクタ２０３は、比較回路２０８の出力Ｎ２１０が“１１”であるので、アドレス値増減判定回路２０１の出力Ｎ２０２（現在のアドレス増減値“＋５”）を選択し、レジスタ２０４の直前で次のロードタイミングまで待機させる。
【００７０】
このとき、比較回路２０５は、比較回路２０８の出力Ｎ２１０が“１１”であり、且つ、レジスタ２０４が格納しているデータＢ（前回のアドレス増減値“−６”）が負の値であるので、セレクタ２０３が選択したデータＡ（レジスタ２０４の直前で待機している現在のアドレス増減値“＋５”）と、レジスタ２０４が格納しているデータＢ（前回のアドレス増減値“−６”）を比較する。この場合、
Ａ（＋５）  ＋  Ｂ（−６）  ＝  −１  ＞  Ｂ（−６）
であるので、比較回路２０５は、ＣＰＵが暴走状態にあると判定し、ＣＰＵが暴走状態にあることを示す信号を出力する。
【００７１】
以上のように、本実施の形態１によれば、現在のスタックポインタの移動によるアドレス増減値と前回の移動によるアドレス増減値を監視して、マイクロプロセッサの暴走を判定するので、スタックポインタのアドレス値がスタック領域内にあるか否かにかかわらず、スタックポインタの誤動作に係るマイクロプロセッサの暴走を判定することができる。また、ウォッチドックタイマを用いないので、サブルーチン処理や割込み処理などの一定間隔で同じ動作をする処理中に暴走が発生した場合であっても、その暴走を判定することができる。また、スタックポインタのアドレス値がスタック領域内に存在する間や、サブルーチン処理や割込み処理が繰り返されている間に暴走を判定できるので、暴走を判定するまでにかかる時間を短縮することができる。
【００７２】
（実施の形態２）
以下、本実施の形態２におけるマイクロプロセッサの暴走監視装置について説明する。図３に本実施の形態２におけるマイクロプロセッサの暴走監視装置の構成図を示す。但し、前述した実施の形態１で説明した部材に対応する部材には同一の符号を付記して、説明を省略する。
【００７３】
図３において、データ退避・復帰回数確認カウンタ回路としてのアップダウンカウンタ３０１は、アドレス値増減判定回路２０１の出力Ｎ２１０、すなわち図２に示す比較回路２０８によるアドレス値増減判定結果を入力とし、出力Ｎ２１０の値がスタック領域へのデータ退避動作を示す“１０”のときにはデクリメントし、スタック領域からのデータ復帰動作を示す“１１”のときにはインクリメントする。つまり、アップダウンカウンタ３０１のカウンタ値は、初期値が“０”の場合、スタック領域へのデータ退避動作回数とスタック領域からのデータ復帰動作回数が等しくなったときに“０”となる。そして、ＣＰＵが正常な動作をしていれば、アップダウンカウンタ３０１のカウンタ値が“０”となったとき、スタック領域へ退避しているデータはない状態となる。なお、本実施の形態２では、スタック領域へのデータ退避動作時にデクリメントし、スタック領域からのデータ復帰動作時にインクリメントするように構成しているが、無論、逆であってもよい。
【００７４】
また、加算器３０２はアドレス値増減判定回路２０１の出力Ｎ２０２、すなわち図２に示す加減算器２０９によって算出されたアドレス増減値と、レジスタ３０３に格納されているデータを加算する。但し、アドレス増減値は正負の符号を持っているため、実際には加算器３０２は加減算を行う。つまり加算器３０２は、アドレス値の増加分と減少分の差を算出している。
【００７５】
また、加算結果格納部としてのレジスタ３０３には、セレクタ２０３により選択されたデータがロードされる。セレクタ部としてのセレクタ２０３はアドレス値増減判定回路２０１の出力Ｎ２１０（アドレス値増減判定結果）を受けて、スタックポインタが移動したことを条件として、加算器３０２の出力を選択してレジスタ３０３にロードする。したがって、ＣＰＵが正常な動作をしていれば、レジスタ３０３の内容は、初期値が“０”の場合、スタック領域へのデータ退避動作回数とスタック領域からのデータ復帰動作回数が等しくなったときに“０”となる。
【００７６】
以下、アップダウンカウンタ３０１とレジスタ３０３の初期値が“０”の場合について説明するが、無論、“０”以外の場合であっても同様である。
暴走判定回路を含む比較回路３０４はアップダウンカウンタ３０１のカウンタ値が“０”となったことを条件として、レジスタ３０３が格納しているデータを値“０”と比較し、等しいときにはＣＰＵが正常状態にあると判定し、ＣＰＵが正常状態にあることを示す信号を出力し、それ以外の値のときにはＣＰＵが暴走状態にあると判定し、ＣＰＵが暴走状態にあることを示す信号を出力する。
【００７７】
すなわち、比較回路３０４は、データ退避とデータ復帰が同回数なされたとき、スタックポインタのアドレス値の増加分と減少分が等しい場合には、ＣＰＵが正常状態にあると判定し、等しくない場合には、ＣＰＵが暴走状態にあると判定する。
【００７８】
なお、アップダウンカウンタ３０１が、カウンタ値が“０”となったときにフラグ信号を出力してもよいし、比較回路３０４が、カウンタ値を取り込んでカウンタ値が“０”であるか否かを判断してもよい。ここでは、アップダウンカウンタ３０１が、カウンタ値が“０”となったときにフラグ信号（出力Ｎ３０５）を出力するものとして説明する。
【００７９】
このように加算器３０２とセレクタ２０３とレジスタ３０３により、アドレス値増減判定回路２０１内のデータ退避・復帰判定回路としての比較回路２０８（図２参照。）においてデータ退避動作もしくはデータ復帰動作がなされたことが判定されると、アドレス値増減判定回路２０１内の加減算器２０９（図２参照。）において算出されたアドレス増減値を順次加算するアドレス増減値加算回路が構成される。
【００８０】
また、本実施の形態２では、加算器３０２とセレクタ２０３とレジスタ３０３と比較回路３０４により、比較回路２０８による判定結果を受けて、加減算器２０９により算出されたアドレス増減値を基に、スタックポインタのアドレス値の増加分と減少分に差があるか否かを判定するアドレス増加・減少判定回路が構成される。
【００８１】
なお、ここではセレクタ２０３が、スタックポインタが移動したことを条件としてアドレス増減値の加算結果をレジスタ２０４に格納するか否かを決定したが、例えば、スタックポインタが移動したことを条件として加減算器によるアドレス増減値の算出を許可する構成としてもよいし、スタックポインタが移動したことを条件として加減算器による計算対象を格納するレジスタ２０６（図２参照。）へのアドレス値の格納を許可する構成とするなどしてもよい。また、スタックポインタが移動したことを条件として加算器３０２による加算を許可する構成とするなどしてもよい。
【００８２】
続いて、例として、スタックポインタのアドレス増減値が
（−６）  →  （−６）  →  （＋５）  →  （＋６）
と推移した場合の当該暴走監視装置の動作を説明する。
【００８３】
まず、アドレス値増減判定回路２０１の出力Ｎ２０２が“−６”となり、アドレス値増減判定結果Ｎ２１０がデータ退避動作を示す“１０”となるので、アップダウンカウンタ３０１はデクリメントしてカウンタ値を“−１”にする。また、レジスタ３０３の初期値は“０”であるので、アドレス増減値“−６”がレジスタ３０３へそのままロードされる。また、アップダウンカウンタ３０１のカウンタ値が“−１”であるので、比較回路３０４は動作しない。
【００８４】
なお、ここではアップダウンカウンタ３０１は１回デクリメント・インクリメントするとカウンタ値が“１”増減する構成とするが、無論、一定値増減する構成であればよい。
次に、アドレス値増減判定回路２０１の出力Ｎ２０２が“−６”となり、アドレス値増減判定結果Ｎ２１０がデータ退避動作を示す“１０”となるので、アップダウンカウンタ３０１はデクリメントしてカウンタ値を“−２”にする。また、レジスタ３０３には前回の加算結果“−６”が格納されているので、加算器３０２から加算結果“−１２”が出力される。そして、アドレス値増減判定結果Ｎ２１０が“１０”であるので、この加算結果“−１２”がレジスタ３０３にロードされる。また、アップダウンカウンタ３０１のカウンタ値が“−２”であるので、比較回路３０４は動作しない。
【００８５】
次に、アドレス値増減判定回路２０１の出力Ｎ２０２が“＋５”となり、アドレス値増減判定結果Ｎ２１０がデータ復帰動作を示す“１１”となるので、アップダウンカウンタ３０１はインクリメントしてカウンタ値を“−１”にする。また、レジスタ３０３には前回の加算結果“−１２”が格納されているので、加算器３０２から加算結果“−７”が出力される。そして、アドレス値増減判定結果Ｎ２１０が“１１”であるので、この加算結果“−７”がレジスタ３０３にロードされる。また、アップダウンカウンタ３０１のカウンタ値が“−１”であるので、比較回路３０４は動作しない。
【００８６】
最後に、アドレス値増減判定回路２０１の出力Ｎ２０２が“＋６”となり、アドレス値増減判定結果Ｎ２１０がデータ復帰動作を示す“１１”となるので、アップダウンカウンタ３０１はインクリメントしてカウンタ値を“０”にする。また、レジスタ３０３には前回の加算結果“−７”が格納されているので、加算器３０２から加算結果“−１”が出力される。そして、アドレス値増減判定結果Ｎ２１０が“１１”であるので、この加算結果“−１”がレジスタ３０３にロードされる。
【００８７】
比較回路３０４は、アップダウンカウンタ３０１のカウンタ値が“０”となったので、レジスタ３０３に格納されているデータ“−１”と値“０”を比較し、レジスタ３０３に格納されているデータが値“０”ではないので、ＣＰＵが暴走状態にあることを示す信号を出力する。
【００８８】
これに対し、スタックポインタのアドレス増減値が
（−６）  →  （−６）  →  （＋６）  →  （＋６）
と推移した場合、まず、アドレス値増減判定回路２０１の出力Ｎ２０２が“−６”となり、アドレス値増減判定結果Ｎ２１０がデータ退避動作を示す“１０”となるので、アップダウンカウンタ３０１はデクリメントしてカウンタ値を“−１”にする。また、レジスタ３０３の初期値は“０”であるので、アドレス増減値“−６”がレジスタ３０３へそのままロードされる。また、アップダウンカウンタ３０１のカウンタ値が“−１”であるので、比較回路３０４は動作しない。
【００８９】
次に、アドレス値増減判定回路２０１の出力Ｎ２０２が“−６”となり、アドレス値増減判定結果Ｎ２１０がデータ退避動作を示す“１０”となるので、アップダウンカウンタ３０１はデクリメントしてカウンタ値を“−２”にする。また、レジスタ３０３には前回の加算結果“−６”が格納されているので、加算器３０２から加算結果“−１２”が出力される。そして、アドレス値増減判定結果Ｎ２１０が“１０”であるので、この加算結果“−１２”がレジスタ３０３にロードされる。また、アップダウンカウンタ３０１のカウンタ値が“−２”であるので、比較回路３０４は動作しない。
【００９０】
次に、アドレス値増減判定回路２０１の出力Ｎ２０２が“＋６”となり、アドレス値増減判定結果Ｎ２１０がデータ復帰動作を示す“１１”となるので、アップダウンカウンタ３０１はインクリメントしてカウンタ値を“−１”にする。また、レジスタ３０３には前回の加算結果“−１２”が格納されているので、加算器３０２から加算結果“−６”が出力される。そして、アドレス値増減判定結果Ｎ２１０が“１１”であるので、この加算結果“−６”がレジスタ３０３にロードされる。また、アップダウンカウンタ３０１のカウンタ値が“−１”であるので、比較回路３０４は動作しない。
【００９１】
最後に、アドレス値増減判定回路２０１の出力Ｎ２０２が“＋６”となり、アドレス値増減判定結果Ｎ２１０がデータ復帰動作を示す“１１”となるので、アップダウンカウンタ３０１はインクリメントしてカウンタ値を“０”にする。また、レジスタ３０３には前回の加算結果“−６”が格納されているので、加算器３０２から加算結果“０”が出力される。そして、アドレス値増減判定結果Ｎ２１０が“１１”であるので、この加算結果“０”がレジスタ３０３にロードされる。
【００９２】
比較回路３０４は、アップダウンカウンタ３０１のカウンタ値が“０”となったので、レジスタ３０３に格納されているデータ“０”と値“０”を比較し、レジスタ３０３に格納されているデータが値“０”であるので、ＣＰＵが正常状態にあることを示す信号を出力する。
【００９３】
以上のように、本実施の形態２によれば、サブルーチン処理や割込み処理が発生したときの一連の動作が終了した時点でのアドレス値の増加分と減少分が等しいか否かを監視して、マイクロプロセッサの暴走を判定するので、スタックポインタのアドレス値がスタック領域内にあるか否かにかかわらず、スタックポインタの誤動作に係るマイクロプロセッサの暴走を判定することができる。また、ウォッチドックタイマを用いないので、サブルーチン処理や割込み処理などの一定間隔で同じ動作をする処理中に暴走が発生した場合であっても、その暴走を判定することができる。また、スタックポインタのアドレス値がスタック領域内に存在する間や、サブルーチン処理や割込み処理が繰り返されている間に暴走を判定できるので、暴走を判定するまでにかかる時間を短縮することができる。
【００９４】
（実施の形態３）
以下、本実施の形態３におけるマイクロプロセッサの暴走監視装置について説明する。図４に本実施の形態３におけるマイクロプロセッサの暴走監視装置の構成図を示す。但し、前述した実施の形態１で説明した部材に対応する部材には同一の符号を付記して、説明を省略する。
【００９５】
実施の形態１における暴走監視装置では、多重の退避動作が発生した場合に十分には対応できない。その状況を次の例で示す。
実施の形態１における暴走監視装置（図２参照。）において、スタックポインタのアドレス増減値が
（−５）  →  （−６）  →  （＋６）  →  （＋４）
と推移した場合、最後の“＋４”の動作を判定する時点では、レジスタ２０４には“＋６”が格納されているので、比較回路２０５は比較動作を行わない。このように実施の形態１における暴走監視装置では、多重割込みが発生するような場合に十分には対応できない。
【００９６】
そこで、本実施の形態３では、図２に示すレジスタ２０４を拡張し、スタックポインタのアドレス増減値の履歴を記憶するＬＩＦＯ（Ｌａｓｔ  ＩＮ  Ｆａｒｓｔ  Ｏｕｔ）型記憶装置とその制御回路を追加する構成とした。
【００９７】
図４において、記憶装置制御回路４０１はＬＩＦＯ型記憶装置４０２に対するデータの書き込み・読み出しを制御する。記憶装置制御回路４０１において、制御信号作成回路４０４は、アドレス値増減判定回路２０１の出力Ｎ２１０（アドレス値増減判定結果）を受けて、記憶装置４０２に対するデータ書き込み命令（Ｐｕｓｈ命令）／データ読み出し命令（Ｐｏｐ命令）を作成する。
【００９８】
すなわち、制御信号作成回路４０４は、出力Ｎ２１０がアドレス値の減少すなわちデータ退避動作を示す“１０”のとき、Ｐｕｓｈ命令を出力してアドレス値増減判定回路２０１の出力Ｎ２０２（アドレス増減値）を最終データとして記憶装置４０２に書き込む。一方、出力Ｎ２１０がアドレス値の増加すなわちデータ復帰動作を示す“１１”のときにはＰｏｐ命令を出力して記憶装置４０２から最終データを取り出す。つまり記憶装置４０２には、スタック領域へのデータ退避動作時のアドレス増減値の履歴が記憶される。また、制御信号作成回路４０４は、制御回路４０５と比較回路４０３も制御する。
【００９９】
制御回路４０５は制御信号作成回路４０４からＰｏｐ命令を受けたとき、つまりスタック領域からのデータ復帰動作時にのみアドレス値増減判定回路２０１の出力Ｎ２０２（アドレス増減値）と記憶装置４０２から取り出した最終データをデータＡ、Ｂとして出力する。このようにすれば、不必要にデータＡ、Ｂが出力されずに済む。
【０１００】
暴走判定回路としての比較回路４０３は制御信号作成回路４０４から出力Ｎ４０６（Ｐｏｐ命令）を受けたとき、つまりスタック領域からのデータ復帰動作時にのみ制御回路４０５から出力されるデータＡとデータＢ、すなわち現在のスタックポインタのアドレス増減値と記憶装置４０２から読み出した最終データを比較する。具体的には、例えばデータＡとデータＢを加算して結果が“０”となったとき、ＣＰＵが正常に動作していると判断して、ＣＰＵが正常状態にあることを示す信号を出力し、それ以外の値となったときにはＣＰＵが暴走状態にあることを示す信号を出力する。
【０１０１】
続いて、例として、記憶装置４０２に“−５”が格納されており、スタックポインタのアドレス増減値が
（−６）  →  （＋６）  →  （＋４）
と推移した場合の当該暴走監視装置の動作について説明する。
【０１０２】
まず、アドレス値増減判定回路２０１の出力Ｎ２０２（アドレス増減値）が“−６”であるので、アドレス値増減判定回路２０１の出力Ｎ２１０（アドレス値増減判定結果）は“１０”となり、制御信号作成回路４０４はＰｕｓｈ命令を出力する。したがって、このアドレス増減値“−６”が記憶装置４０２に最終データとして書き込まれる。
【０１０３】
次に、アドレス値増減判定回路２０１の出力Ｎ２０２が“＋６”となるので、アドレス値増減判定回路２０１の出力Ｎ２１０は“１１”となり、制御信号作成回路４０４はＰｏｐ命令を出力する。したがって、記憶装置４０２から最終データである”−６”が取り出され、このときの出力Ｎ２０２“＋６”とこの最終データ“−６”が制御回路４０５より出力される。
【０１０４】
比較回路４０３は記憶装置制御回路４０１の出力Ｎ４０６（Ｐｏｐ命令）を受けて、データＡ、Ｂを加算し、その結果が“０”となるので、ＣＰＵが正常に動作していると判断して、ＣＰＵが正常状態にあることを示す信号を出力する。
【０１０５】
最後に、出力Ｎ２０２が“＋４”となるので、出力Ｎ２１０は“１１”となり、制御信号作成回路４０４はＰｏｐ命令を出力する。したがって、記憶装置４０２から最終データである“−５”が取り出され、このときの出力Ｎ２０２“＋４”とこの最終データ“−５”が制御回路４０５より出力される。
【０１０６】
比較回路４０３は記憶装置制御回路４０１の出力Ｎ４０６（Ｐｏｐ命令）を受けて、データＡ、Ｂを加算し、その結果が“−１”となるので、ＣＰＵによるスタック領域からのデータ復帰動作が正常に行われていないと判断して、ＣＰＵが暴走状態にあることを示す信号を出力する。
【０１０７】
これに対し、記憶装置４０２に“−５”が格納されており、スタックポインタのアドレス増減値が
（−６）  →  （＋６）  →  （＋５）
と推移した場合には、まず、出力Ｎ２０２が“−６”であるので、出力Ｎ２１０は“１０”となり、制御信号作成回路４０４はＰｕｓｈ命令を出力する。したがって、このアドレス増減値“−６”が記憶装置４０２に最終データとして書き込まれる。
【０１０８】
次に、出力Ｎ２０２が“＋６”となるので、出力Ｎ２１０は“１１”となり、制御信号作成回路４０４はＰｏｐ命令を出力する。したがって、記憶装置４０２から最終データである”−６”が取り出され、このときの出力Ｎ２０２“＋６”とこの最終データ“−６”が制御回路４０５より出力される。
【０１０９】
比較回路４０３は記憶装置制御回路４０１の出力Ｎ４０６（Ｐｏｐ命令）を受けて、データＡ、Ｂを加算し、その結果が“０”となるので、ＣＰＵがスタック領域からのデータ復帰動作を正常に行っていると判断して、ＣＰＵが正常状態にあることを示す信号を出力する。
【０１１０】
最後に、出力Ｎ２０２が“＋５”となるので、出力Ｎ２１０は“１１”となり、制御信号作成回路４０４はＰｏｐ命令を出力する。したがって、記憶装置４０２から最終データである“−５”が取り出され、このときの出力Ｎ２０２“＋５”とこの最終データ“−５”が制御回路４０５より出力される。
【０１１１】
比較回路４０３は記憶装置制御回路４０１の出力Ｎ４０６（Ｐｏｐ命令）を受けて、データＡ、Ｂを加算し、その結果が“０”となるので、ＣＰＵがスタック領域からのデータ復帰動作を正常に行っていると判断して、ＣＰＵが正常状態にあることを示す信号を出力する。
【０１１２】
以上のように、本実施の形態３によれば、サブルーチン処理や割込み処理が発生したときのスタックポインタのアドレス増減値を算出し、そのアドレス増減値のうちデータ退避を示す増減値のみを記憶装置に履歴し、算出したアドレス増減値がデータ復帰を示す場合には、履歴した増減値のうちの最後に記憶したアドレス増減値を取り出し、そのアドレス増減値と比較する。そして、それらの絶対値が一致する場合にはマイクロプロセッサが正常状態にあると判定し、一致しない場合にはマイクロプロセッサが暴走状態にあると判定する。このように数回分のデータ退避に対応可能なＦＩＬＯ型の記憶装置を用いてデータ退避を示すアドレス増減値の履歴を残すことにより、多重のデータ退避が発生した場合であってもマイクロプロセッサの暴走を判定できる。
【０１１３】
（実施の形態４）
以下、本実施の形態４におけるマイクロプロセッサの暴走監視装置について説明する。図５に本実施の形態４におけるマイクロプロセッサの暴走監視装置の構成図を示す。但し、前述した実施の形態１〜３で説明した部材に対応する部材には同一の符号を付記して、説明を省略する。
【０１１４】
当該暴走監視装置は、スタック領域へのデータ退避動作が設定回数以上実行された時にＣＰＵが正常状態にあるか否かの判定を行う点が実施の形態３で説明した暴走監視装置と異なる。実施の形態３で説明した暴走監視装置では、スタック領域へのデータ退避動作とスタック領域からのデータ復帰動作を繰り返していた場合、その都度ＣＰＵが正常状態にあることを示す信号が出力されるが、当該暴走監視装置では、スタック領域へのデータ退避動作が設定回数以上実行されなければＣＰＵが正常状態にあるか否かを判定しないため、定期的にこの状況が発生するシステムに対して有効である。
【０１１５】
図５において、暴走監視回路５０１は前述した実施の形態３で説明した暴走監視装置である。期待値格納部としてのレジスタ５０２は設定可能なレジスタであり、その設定値は、多重のデータ退避動作（割込み処理・サブルーチン処理）が発生するシステムに対して、その頻度を考慮して設定する。
【０１１６】
比較回路５０３は、内部にカウンタ回路を有し、暴走監視回路５０１からデータ退避を示す信号（出力Ｎ５０４）を受けると、該カウンタ回路をカウントアップする。出力Ｎ５０４としては、例えば図４に示すアドレス値増減判定回路２０１の出力Ｎ２１０（アドレス増減値判定結果）を用いればよい。つまり、出力Ｎ２１０が値“１０”を示す信号のときに比較回路５０３がカウントアップするように構成する。また、図４に示す記憶装置制御回路４０１内で生成されるＰｕｓｈ命令を用いるようにしてもよい。
【０１１７】
比較回路５０３は、内蔵するカウンタ回路のカウンタ値とレジスタ５０２の設定値を比較し、カウンタ値がレジスタ５０２の設定値と一致もしくはオーバーフローすると、そのことを示す信号として値“１”を示す信号（出力Ｎ５０５）を出力し、それ以外の場合には値“０”を示す信号を出力する。つまり、比較回路５０３は、データ退避動作の発生頻度を考慮して設定した設定値にカウンタ値が一致すると、フラグ信号を出力する。
【０１１８】
このように比較回路５０３は、データ退避・復帰判定回路としての比較回路２０８（図２参照。）による判定結果がデータ復帰を示す回数を確認し、その回数をレジスタ５０２の設定値（期待値）と比較する。
【０１１９】
レジスタ５０６には、比較回路５０３の出力Ｎ５０５がロードされる。つまり、上記カウンタ値がレジスタ５０２の設定値と一致もしくはオーバーフローしたとき、値“１”がセットされることになる。
【０１２０】
ＡＮＤ回路５０７は、レジスタ５０６の出力Ｎ５０８と暴走監視回路５０１内部の比較回路（図４に示す比較回路４０３）の比較動作を許可する信号Ｎ５０９を受ける。ここでＮ５０９として、図４に示す記憶装置制御回路４０１の出力Ｎ４０６を用いる。つまり、レジスタ５０６に値“１”が格納され、且つＰｏｐ命令が出力されたときに、ＡＮＤ回路５０７が判定動作許可信号として、図４に示す比較回路４０３の比較動作を許可する信号（出力Ｎ５１０）を出力するように構成する。なお、図４に示す暴走監視装置ではデータ復帰動作時にのみ比較動作を許可するので、Ｎ５０９として、図４に示す出力Ｎ１０（アドレス値増減判定結果）を用いるように構成してもよい。
【０１２１】
また、比較動作許可信号Ｎ５１０はレジスタ５０６および比較回路５０３内部のカウンタ回路のクリア信号にもなる。つまり、比較動作許可信号Ｎ５１０が出力され比較回路４０３による比較判定動作が実施された後、レジスタ５０６のロードタイミングでレジスタ５０６に値“０”を書き込む操作によりレジスタ５０６はクリアされ、同様に、比較回路５０３内部のカウンタ回路のカウント動作のタイミングでカウンタ値がクリアされる。なお、比較動作許可信号としては例えば値“１”を示す信号を用い、比較動作を許可しない間は、出力Ｎ５１０として値“０”を示す信号を用いるようにする。
【０１２２】
このように当該暴走監視装置では、レジスタ５０２、比較回路５０３、レジスタ５０６、ＡＮＤ回路５０７により、データ退避・復帰判定回路としての比較回路２０８（図２参照。）における判定結果がデータ退避動作を示す回数を確認し、その回数が期待値と一致した後において、比較回路２０８における判定結果がデータ復帰動作を示すとき、判定動作許可信号としての比較動作許可信号を出力する判定動作許可回路を構成している。
【０１２３】
続いて、例として、レジスタ５０２に値“２”を設定し、スタックポインタのアドレス増減値が
（−６）  →  （＋６）
と推移した場合の当該暴走監視装置の動作を説明する。なお、ここでは、比較回路５０３内部のカウンタ値がレジスタ５０２の設定値が等しくなったときに、比較回路５０３の出力Ｎ５０５が値“１”を示す信号になるものとする。
【０１２４】
まず、スタックポインタのアドレス増減値が“−６”であるため、暴走監視回路５０１内部の記憶装置（図４に示す記憶装置４０２）にこの“−６”が書き込まれる。
次に、スタックポインタのアドレス増減値が“＋６”になると、図４に示す暴走監視装置ではＣＰＵが正常状態にあることを示す信号を出力する。しかし、当該暴走監視装置では、レジスタ５０２に“２”が設定されており、スタックポインタのアドレス増減値が“＋６”になった時点では、スタック領域へのデータ退避動作は最初のアドレス増減値“−６”に対応した１回のみであるため、比較回路５０３内部のカウンタ値は“１”であり、結果、比較回路５０３の出力Ｎ５０５の値は“０”となり、出力Ｎ５０８、出力Ｎ５１０もこの値“０”が伝播し、暴走監視回路５０１内においてＣＰＵが正常状態にあるか否かの判定を実施しない。
【０１２５】
これに対し、スタックポインタのアドレス増減値が
（−６）  →  （−５）  →  （＋５）  →  （＋６）
と推移した場合、アドレス増減値が“−５”となった時点で、比較回路５０３内部のカウンタ値がレジスタ５０２の設定値“２”と等しくなり、比較回路５０３の出力Ｎ５０５の値は“１”となる。そして、アドレス増減値が“＋５”となった時点でこの値“１”がレジスタ５０６にセットされる。そして、アドレス増減値が最後の“＋６”になると、出力Ｎ５０９と出力Ｎ５０８を受けたＡＮＤ回路５０７から比較動作許可信号が出力され、暴走監視回路５０１内においてＣＰＵが正常状態にあるか否かの判定が実施される。
【０１２６】
また、図４に示す比較回路４０３の比較動作が実施された後、レジスタ５０６のロードタイミングでレジスタ５０６に値“０”を書き込む操作によりレジスタ５０６はクリアされ、同様に、比較回路５０３内部のカウンタ回路のカウント動作のタイミングでカウンタ値がクリアされる。
【０１２７】
以上のように、本実施の形態４では、スタック領域へのデータ復帰動作回数が期待値と一致した後において、スタック領域からのデータ復帰動作が行われるときに、ＣＰＵが正常状態にあるか否かの判定が実施されるので、定期的に多重のデータ退避動作が発生するシステムに対して有効である。
【０１２８】
なお、実施の形態３における暴走監視装置を用いて説明したが、実施の形態２における暴走監視装置であっても同様である。すなわち、図５に示す暴走監視回路５０１が図３に示す暴走監視装置である場合には、出力Ｎ５０４として図３に示す出力Ｎ２１０（アドレス値増減判定結果）を用いる。そして、出力Ｎ５０９として図３に示すアップダウンカウンタ３０１の出力Ｎ３０５を用いる。このアップダウンカウンタ３０１の出力Ｎ３０５は、データ退避回数・データ復帰回数が等しくなったときに図３に示す比較回路３０４の比較動作を許可する信号であり、このように構成すれば、データ退避動作が期待値と一致した後において、データ退避回数・データ復帰回数が等しくなったときにのみ、図３に示す比較回路３０４の比較動作を許可する信号（出力Ｎ５１０）を出力することができ、定期的に多重のデータ退避動作が発生するシステムに対して有効である。
【０１２９】
（実施の形態５）
以下、本実施の形態５におけるマイクロプロセッサの暴走監視装置について説明する。図６に本実施の形態５におけるマイクロプロセッサの暴走監視装置の構成図を示す。当該暴走監視装置は、ＣＰＵが正常状態にあることを示す信号の出力頻度を下げる機能を実現する回路を、実施の形態１、３で説明した暴走監視装置（図２、４参照。）に追加した構成となっている。実施の形態１、３で説明した暴走監視装置では、スタック領域からのデータ復帰動作ごとにＣＰＵが正常状態にあることを示す信号が出力されることになるので、この信号を要因として動作するシステムを構築し、割込み発生頻度の高いソフトウェアを適用すれば、必要以上にシステムが作動する可能性を有する。
【０１３０】
そこで、本実施の形態５における暴走監視装置では、スタック領域へのデータ退避動作の発生頻度（すなわちサブルーチン処理や割込み処理の発生頻度）を考慮した期待値と等しい回数ＣＰＵが正常状態にあると判定されたときに、ＣＰＵが正常状態にあることを示す信号を出力する構成を追加することで、この信号の出力頻度を下げている。
【０１３１】
図６において、暴走監視回路６０１の内容は前述した実施の形態１、３で説明した暴走監視装置である（図２、図４参照。）。暴走監視回路６０１の出力Ｎ６０２はＣＰＵが正常状態にあることを示す信号であり、出力Ｎ６０３はＣＰＵが暴走状態にあることを示す信号である。
【０１３２】
また、カウンタ回路６０４は、暴走監視回路６０１の出力Ｎ６０２（ＣＰＵが正常状態にあることを示す信号）を受けるとカウントアップしていく。また、比較回路６０５は、カウンタ回路６０４のカウンタ値とレジスタ６０６に格納されている期待値を比較する。レジスタ６０６は設定可能なレジスタであり、その設定値は、データ退避動作の発生頻度が高いシステムに対して、その頻度を考慮して設定する。
【０１３３】
比較回路６０５はカウンタ回路６０４のカウンタ値とレジスタ６０６の設定値を比較し、カウンタ値がレジスタ６０６の設定値と一致もしくはオーバーフローするとＣＰＵが正常状態にあることを示す信号を外部に出力する。そして、それと同時に、比較回路６０５は、カウンタ回路６０４をカウント動作のタイミングでクリアする信号を作成する。カウンタ回路６０４はこの信号を受けると、カウンタ値をクリアする。また、図６に示すように、当該暴走監視装置は、ＯＲ回路を用いて、カウント中にＣＰＵが暴走した場合にもカウンタ回路６０４のカウンタ値をクリアする構成になっている。
【０１３４】
本実施の形態５では、カウンタ回路６０４、比較回路６０５、レジスタ６０６により、ＣＰＵが正常状態にあると判定された回数を確認し、その回数がＣＰＵにおけるデータ退避動作の発生頻度を考慮した期待値と一致したときにおいて、ＣＰＵが正常状態にあることを示す信号を発生する信号発生頻度低減回路が構成される。
【０１３５】
続いて、例として、レジスタ６０６に値“２”が設定され、スタックポインタのアドレス増減値が
（−６）  →  （＋６）
と推移した場合の当該暴走監視装置の動作を説明する。なお、ここでは、カウンタ回路６０４のカウンタ値とレジスタ６０６の設定値が一致したときに比較回路６０５からＣＰＵが正常状態にあることを示す信号が出力されるものとして説明する。
【０１３６】
まず、スタックポインタのアドレス増減値が“−６”であるため、暴走監視回路６０１内部の記憶装置（図２に示すレジスタ２０４、もしくは図４に示す記憶装置４０２）にこの“−６”が書き込まれる。
【０１３７】
次に、スタックポインタのアドレス増減値が“＋６”になると、図２、図４に示す暴走監視装置ではＣＰＵが正常状態にあることを示す信号を出力する。しかし、当該暴走監視装置では、レジスタ６０６に“２”が設定されており、スタックポインタのアドレス増減値が“＋６”になった時点では、暴走監視回路６０１よりＣＰＵが正常状態にあることを示す信号が１回しか出力されておらず、カウンタ回路６０４のカウンタ値は“１”であり、結果、比較回路６０５からはＣＰＵが正常状態にあることを示す信号は出力されない。
【０１３８】
これに対して、スタックポインタのアドレス増減値が
（−６）  →  （＋６）  →  （−６）  →  （＋６）
と推移した場合には、スタックポインタのアドレス増減値が最後の“＋６”となった時点で、カウンタ回路６０４のカウンタ値がレジスタ６０６の設定値“２”と等しくなり、比較回路６０５からＣＰＵが正常状態にあることを示す信号が出力される。
【０１３９】
また比較回路６０５は、ＣＰＵが正常状態にあることを示す信号を作成すると同時にカウンタ回路６０４をカウント動作のタイミングでクリアする信号を作成する。カウンタ回路６０４はこの信号を受けると、カウンタ値をクリアする。
【０１４０】
（実施の形態６）
以下、本実施の形態６におけるマイクロプロセッサの暴走監視装置について説明する。図７に本実施の形態６におけるマイクロプロセッサの暴走監視装置の構成図を示す。この暴走監視装置は、上述した割込み許可レベルの推移規則を用いて、ＣＰＵが正常状態にあるか否かを判定する。
【０１４１】
図７において、記憶装置制御回路７０１はＬＩＦＯ型記憶装置７０２に対するデータの書き込み・読み出しを制御する。この記憶装置７０２には、その最深部に予めＣＰＵが設定する割込み許可基準レベル７０３が設定されている。
【０１４２】
また、記憶装置制御回路７０１において、比較回路７０４は割込み処理実行時にＣＰＵがレジスタに設定・更新したレベルＡ（現在の割込み許可レベル）と記憶装置７０２の最終データＢを比較する。制御信号作成回路７０５は、
レベルＡ  ＞  最終データＢ
のとき記憶装置７０２に対するデータ書き込み命令（Ｐｕｓｈ命令）を作成する。したがて、制御信号作成回路７０５は、データ処理中に割込みが発生してＣＰＵがその割込みを受け付けたとき、ＣＰＵがレジスタに設定・更新した現在の割込み許可レベルと記憶装置７０２の最深部に予め格納されている割込み許可基準レベルを比較して、割込み許可基準レベルよりレベルが高いときのみその割込み許可レベルを最終データとして記憶装置７０２に書き込む。
【０１４３】
また、制御信号作成回路７０５は、割込み処理中に割込みが発生してＣＰＵがその割込みを受け付けたとき、ＣＰＵがレジスタに設定・更新した現在の割込み許可レベルと記憶装置７０２の最終データであるそれまで実行していた割込み処理の割込み許可レベルを比較して、それまで実行していた割込み処理の割込み許可レベルよりもレベルが高いときのみその割込み処理の割込み許可レベルを最終データとして記憶装置７０２に書き込む。
【０１４４】
このように、記憶装置７０２の最終データは現在実行中の割込み処理の割込み許可レベルとなり、最終データの次のデータはその割込み処理により中断された割込み処理・データ処理の割込み許可レベル・割込み許可基準レベルとなる。
【０１４５】
なお、発生した割込み処理の割込み許可レベルが割込み許可基準レベルもしくは実行中の割込み処理の割込み許可レベル以下の場合、ＣＰＵはこの割込みを受け付けないので、当該暴走監視装置においても、その割込み許可レベルが記憶されることはない。
【０１４６】
記憶装置制御回路７０１は外部より割込み終了信号（ＲＴＩ）が入力されると、制御信号作成回路７０５により記憶装置７０２に対するデータ読み出し命令（Ｐｏｐ命令）を作成し、記憶装置７０２より最終データを取り出した後、さらに次の最終データ、すなわちこの終了した割込み処理により中断した割込み処理の割込み許可レベルを読み出す。また、割込み処理の終了によりデータ処理が再開される場合には、記憶装置７０２の最深部に格納されている割込み許可基準レベルが読み出されることになる。
【０１４７】
記憶装置制御回路７０１内部の制御回路７０６は、割込み処理終了時に制御信号作成回路７０５より出力されるＰｏｐ命令を受けると、記憶装置７０２より読み出されたレベルと、割込み処理終了後にＣＰＵがレジスタに設定・更新したレベルを比較回路７０７へ出力する。このようにすれば、不必要にこれらのデータが出力されずに済む。
【０１４８】
上記したように、正常なＣＰＵでれば、終了した割込み処理により中断した割込み処理が開始されるので、割込み処理終了後にＣＰＵがレジスタに設定・更新するレベルは、終了した割込み処理により中断した割込み処理の割込み許可レベル、もしくは割込み許可基準レベルとなるはずである。
【０１４９】
したがって、暴走判定回路としての比較回路７０７は、記憶装置制御回路７０１の出力Ｎ７０８（制御信号作成回路７０５より出力されるＰｏｐ命令）を受けると、これらのデータを比較し、レベルが一致した場合にはＣＰＵが正常に動作していると判断して、ＣＰＵが正常状態にあることを示す信号を出力する。一致しない場合には、ＣＰＵが暴走状態にあることを示す信号を出力する。
【０１５０】
続いて、例として、割込み許可基準レベルとしてレベル３が設定されており、現在割込み許可レベル２の割込み処理が実行されている場合の当該暴走監視装置の動作を説明する。
【０１５１】
割込み許可レベル２の割込み処理実行中に割込み許可レベル１の割込み処理が発生すると、ＣＰＵがレジスタにこのレベル１を設定・更新するので、比較回路７０４において記憶装置７０２の最終データＢであるレベル２と比較し、この現在の割込み許可レベル１を記憶装置７０２へ最終データとして書き込む。
【０１５２】
次に、このレベル１の割込み処理が終了すると、当該暴走監視装置は記憶装置７０２より最終データであるレベル１を取り出した後、次の最終データであるレベル２を読み出し、比較回路７０７において、割込み処理終了後にＣＰＵがレジスタに設定・更新したレベルと比較・判定する。このときＣＰＵがレジスタに例えば割込み許可レベル３を設定・更新していた場合には、異なるレベルであることからＣＰＵが暴走していると判定し、ＣＰＵが暴走状態にあることを示す信号を出力する。また、ＣＰＵがレジスタに割込み許可レベル２を設定・更新していた場合には、同レベルであることからＣＰＵが正常に動作していると判定し、ＣＰＵが正常状態にあることを示す信号を出力する。
【０１５３】
以上のように、本実施の形態６によれば、実行を開始した割込み処理の割込み許可レベルを記憶装置に履歴し、割込み処理が終了すると、中断した割込み処理の割込み許可レベル・中断したデータ処理に対応する割込み許可基準レベルを記憶装置から読み出して、次に実行される割込み処理・データ処理のレベルと比較する。そして、レベルが一致する場合にはマイクロプロセッサが正常状態にあると判定し、一致しない場合にはマイクロプロセッサが暴走状態にあると判定する。このように、割込み処理のレベル推移の規則を利用することにより、マイクロプロセッサの暴走を判定するので、スタックポインタのアドレス値がスタック領域内にあるか否かにかかわらず、スタックポインタの誤動作に係るマイクロプロセッサの暴走を判定することができる。また、ウォッチドックタイマを用いないので、サブルーチン処理や割込み処理などの一定間隔で同じ動作をする処理中に暴走が発生した場合であっても、その暴走を判定することができる。また、スタックポインタのアドレス値がスタック領域内に存在する間や、サブルーチン処理や割込み処理が繰り返されている間に暴走を判定できるので、暴走を判定するまでにかかる時間を短縮することができる。
【０１５４】
（実施の形態７）
以下、本実施の形態７におけるマイクロプロセッサの暴走監視装置について説明する。前述した実施の形態６における暴走監視装置では、ＣＰＵが割込み許可レベルの高い割込み処理を優先して実行し、割込み処理終了後、この割込み処理により中断した割込み処理の割込み許可レベルもしくは、データ処理を再開するときには割込み許可基準レベルにレジスタを更新するという規則に基づいてＣＰＵが正常状態／暴走状態にあることを判定した。これに対し、本実施の形態７における暴走監視装置では、ＣＰＵに起こり得る割込み処理の組合せに対応した、ＣＰＵによりレジスタに設定・更新される割込み許可レベル・割込み許可基準レベルのレベル推移（シーケンス）が記載された整合表を用いることにより、実施の形態６で利用した規則に合っているがシステム上起こり得ないレベル推移が発生したときにも、ＣＰＵが暴走していると判定できる。
【０１５５】
図８に本実施の形態７におけるマイクロプロセッサの暴走監視装置の構成図を示す。図８において、ＦＩＦＯ（Ｆａｒｓｔ  ＩＮ  Ｆａｒｓｔ  Ｏｕｔ）型記憶装置８０１は、実行が終了した割込み処理の組合せに対応してレジスタに実際に設定・更新された割込み許可レベル・割込み許可基準レベルのレベル推移を記憶する。暴走判定回路としてのシーケンスマッチング回路８０２は、予め設定されている割込み許可レベル８０４を基準として、記憶装置８０１に記憶されたレベルの推移と整合表８０３を照らし合わせ（マッチング作業）、その推移が整合表８０３に存在する場合にはＣＰＵが正常状態にあると判定して、ＣＰＵが正常状態にあることを示す信号を出力し、存在しない場合にはＣＰＵが暴走状態にあることを示す信号を出力する。割込み許可レベル８０４としては、ＣＰＵにより設定される割込み許可基準レベルが設定される。
【０１５６】
整合表８０３には、システム上起こり得る割込み処理の組合せに対応した、ＣＰＵによりレジスタに設定・更新される割込み許可レベル・割込み許可基準レベルのレベル推移（シーケンス）が、ＣＰＵにより設定される割込み許可基準レベルを基準に記載されている。なお、整合表８０３は図示しない記憶装置（整合表記憶装置）に予め格納されている。
【０１５７】
このように割込み許可基準レベルを基準とすることで、マッチングする候補を減らすことができる。
図８では、割込み許可基準レベルがレベル３であり、まずレベル１の割込みが終了し、次にレベル２の割込みが終了した場合の例を示している。また調査するシーケンス（レベル推移）の長さは“３”である。
【０１５８】
この場合、ＣＰＵが正常であれば、記憶装置８０１に記憶されるレベルの推移は、
レベル３  →  レベル１  →  レベル３  →  レベル２  →  レベル３
となり、まず、レベル３を基準に、
レベル３  →  レベル１  →  レベル３
のマッチング作業を行う。すなわち、シーケンスマッチング回路８０２は整合表８０３の中からレベル３で始まる項目の調査を実施し、レベル１  →  レベル３と推移するパターンが整合表８０３に存在することを検出すると、ＣＰＵが正常状態にあることを示す信号を出力する。
【０１５９】
続いて、次のレベル３を基準に、
レベル３  →  レベル２  →  レベル３
のマッチング作業を行う。すなわち、シーケンスマッチング回路８０２は整合表８０３の中からレベル３で始まる項目の調査を実施し、レベル２  →  レベル３と推移するパターンが整合表８０３に存在することを検出すると、ＣＰＵが正常状態にあることを示す信号を出力する。
【０１６０】
なお、整合表８０３にＣＰＵが暴走状態にあることを示すレベル推移を記載しておいても、無論、よい。起こり得るレベル推移よりも起こり得ないレベル推移の数が少ない場合には、マッチング作業にかかる時間が短くなり、また整合表の大きさが小さくなる。
【０１６１】
また、調査するシーケンス（レベル推移）の長さが短すぎた場合、ＣＰＵが正常状態にあるのか暴走状態にあるのか判断するのに難しい条件が発生する。そのため、整合表に記載するレベル推移の長さは、システムの動作に合わせて、一定の長さ以上を保持することが有効である。
【０１６２】
以上のように、本実施の形態７によれば、割込み処理を実行するときにはその割込み許可レベルをレジスタに設定し、処理終了後は一旦レジスタに割込み許可基準レベルを設定した後、次の割込み処理を受け付けるという規則を考慮して、システム上起こり得る割込み処理の組合せに対応したレジスタに設定・更新されるレベルの推移を記載した整合表を用意しておき、実際にレジスタに設定・更新されたレベルの推移を整合表に照らし合わせ（マッチング作業）、そのレベルの推移が整合表に存在する場合にはマイクロプロセッサが正常状態にあると判定し、存在しない場合にはマイクロプロセッサが暴走状態にあると判定することにより、マイクロプロセッサの暴走を判定するので、スタックポインタのアドレス値がスタック領域内にあるか否かにかかわらず、スタックポインタの誤動作に係るマイクロプロセッサの暴走を判定することができる。また、ウォッチドックタイマを用いないので、サブルーチン処理や割込み処理などの一定間隔で同じ動作をする処理中に暴走が発生した場合であっても、その暴走を判定することができる。また、スタックポインタのアドレス値がスタック領域内に存在する間や、サブルーチン処理や割込み処理が繰り返されている間に暴走を判定できるので、暴走を判定するまでにかかる時間を短縮することができる。
【０１６３】
（実施の形態８）
以下、本実施の形態８におけるマイクロプロセッサの暴走監視装置について説明する。前述した実施の形態７における暴走監視装置では、ＣＰＵがレジスタに設定・更新するレベル（割込み許可レベル・割込み許可基準レベル）の推移を監視し、整合表とのマッチング作業によりＣＰＵが正常状態／暴走状態にあることを判定したが、当該暴走監視装置では、サブルーチン処理や割込み処理によるスタックポインタのアドレス増減値の推移を監視することでＣＰＵが正常状態／暴走状態にあることを判定する。
【０１６４】
図９に本実施の形態８におけるマイクロプロセッサの暴走監視装置の構成図を示す。図９において、アドレス値増減判定回路９０１は前述した実施の形態１で説明したアドレス値増減判定回路２０１と同じ構成である。但し、アドレス値増減判定回路９０１からはアドレス値増減判定回路９０１内蔵の加減算器により算出されたアドレス増減値（出力Ｎ９０２）のみが出力される。
【０１６５】
ＦＩＦＯ型記憶装置９０３はアドレス値増減判定回路９０１より出力されるアドレス増減値の推移（シーケンス）を記憶する。暴走判定回路としてのシーケンスマッチング回路９０４は、記憶装置９０３に記憶されたアドレス増減値の推移と整合表９０５を照らし合わせ（マッチング作業）、その推移が整合表９０５に存在する場合にはＣＰＵが正常状態にあると判定して、ＣＰＵが正常状態にあることを示す信号を出力し、存在しない場合にはＣＰＵが暴走状態にあることを示す信号を出力する。整合表９０５には、システム上起こり得るサブルーチン処理や割込み処理の組合せに対応したアドレス増減値の推移が記載されている。なお、整合表９０５は図示しない記憶装置（整合表記憶装置）に予め格納されている。
【０１６６】
図９では、スタックポインタのアドレス増減値が、
（−８）  →  （＋８）  →  （−６）  →  （＋６）
と推移した場合の例を示している。また調査するシーケンス（アドレス増減値の推移）の長さは“４”である。この場合、記憶装置９０３に記憶されたシーケンスが整合表９０５より検索できるので、ＣＰＵが正常に動作していると判定し、正常状態にあることを示す信号を出力する。
【０１６７】
なお、この続きの調査としては、“＋８”から始まる長さ“４”のシーケンスについて調査してもよいし、“＋６”の次のアドレス増減値から始まる長さ“４”のシーケンスについて調査してもよい。また、データ退避動作を示す負の値のアドレス増減値から始まるシーケンスを調査するなど、所定の規則を持たせて調査するようにしてもよい。
【０１６８】
また、整合表９０５にＣＰＵが暴走状態にあることを示すアドレス増減値の推移を記載しておいても、無論、よい。起こり得るアドレス増減値の推移よりも起こり得ないアドレス増減値の推移の数が少ない場合には、マッチング作業にかかる時間が短くなり、また整合表の大きさが小さくなる。
【０１６９】
また、調査するシーケンス（アドレス増減値の推移）の長さが短すぎた場合、ＣＰＵが正常状態にあるのか暴走状態にあるのか判断するのに難しい条件が発生する。そのため、整合表に記載するアドレス増減値の推移の長さは、システムの動作に合わせて、一定の長さ以上を保持することが有効である。
【０１７０】
以上のように、本実施の形態８によれば、システム上起こり得るアドレス増減値の推移が記載された整合表を用意しておき、実際のアドレス増減値の推移をこの整合表と照らし合わせ（マッチング作業）、そのアドレス増減値の推移が整合表に存在する場合にはマイクロプロセッサが正常状態にあると判定し、存在しない場合にはマイクロプロセッサが暴走状態にあると判定することにより、マイクロプロセッサの暴走を判定するので、スタックポインタのアドレス値がスタック領域内にあるか否かにかかわらず、スタックポインタの誤動作に係るマイクロプロセッサの暴走を判定することができる。また、ウォッチドックタイマを用いないので、サブルーチン処理や割込み処理などの一定間隔で同じ動作をする処理中に暴走が発生した場合であっても、その暴走を判定することができる。また、スタックポインタのアドレス値がスタック領域内に存在する間や、サブルーチン処理や割込み処理が繰り返されている間に暴走を判定できるので、暴走を判定するまでにかかる時間を短縮することができる。
【０１７１】
（実施の形態９）
以下、本実施の形態９におけるマイクロプロセッサの暴走監視装置について説明する。当該暴走監視装置は、スタックポインタのアドレス値自体を監視することで、ＣＰＵが正常状態／暴走状態にあることを判定する。
【０１７２】
図１０に本実施の形態９におけるマイクロプロセッサの暴走監視装置の構成図を示す。図１０において、記憶装置制御回路１００１はＦＩＬＯ型記憶装置１００２に対するデータの書き込み・読み出しを制御する。
【０１７３】
また、記憶装置制御回路１００１において、比較回路１００３は現在のスタックポインタのアドレス値Ａと記憶装置１００２の最終データＢを比較する。制御信号作成回路１００４は、
現在のスタックポインタのアドレス値Ａ  ＜  最終データＢ
の場合には、スタック領域へのデータ退避動作がなされたと判断し、記憶装置１００２に対するデータ書き込み命令（Ｐｕｓｈ命令）を作成する。したがって、アドレス値Ａは最終データとして記憶装置１００２に書き込まれる。
【０１７４】
逆の場合、記憶装置制御回路１００１は、スタック領域からのデータ復帰動作がなされたと判断し、制御信号作成回路１００４により記憶装置１００２に対するデータ読み出し命令（Ｐｏｐ命令）を作成し、記憶装置１００２より最終データを取り出し、次の最終データを読み出す。つまり、ＣＰＵが正常状態にあれば、スタック領域へ退避したデータを復帰させるとスタックポインタのアドレス値がその退避前のアドレス値へ復帰するので、記憶装置１００２の最終データを一つ取り出した後の最終データとデータ復帰動作後のスタックポインタのアドレス値は一致する。
【０１７５】
記憶装置制御回路１００１内部の制御回路１００５は、データ復帰動作後に制御信号作成回路１００４よりＰｏｐ命令を受けると、記憶装置１００２より読み出されたデータと現在のスタックポインタのアドレス値を出力する。このようにすれば、不必要にこれらのデータが出力されずに済む。
【０１７６】
暴走判定回路としての比較回路１００６は、記憶装置制御回路１００１の出力Ｎ１００７（制御信号作成回路１００４より出力されるＰｏｐ命令）を受けると、これらのデータを比較し、アドレス値が一致した場合にはＣＰＵが正常に動作していると判断して、ＣＰＵが正常状態にあることを示す信号を出力する。一致しない場合には、ＣＰＵが暴走状態にあることを示す信号を出力する。
【０１７７】
続いて、例として、スタックポインタのアドレス値が
３ｆｆｆ  →  ３ｆｆａ  →  ３ｆｆｅ
と推移した場合の当該暴走監視装置の動作を説明する。
【０１７８】
まず、最初のスタックポインタのアドレス値“３ｆｆｆ”は、記憶装置１００２内に比較するデータがないため、そのまま最終データとして記憶装置１００２に書き込まれる。次に、スタックポインタのアドレス値が“３ｆｆａ”に推移すると、比較回路１００３において記憶装置１００２の最終データ“３ｆｆｆ”と比較し、
３ｆｆａ  ＜  ３ｆｆｆ
であるので、このアドレス値“３ｆｆａ”を最終データとして記憶装置１００２に書き込む。
【０１７９】
最後に、スタックポインタのアドレス値が“３ｆｆｅ”に推移すると、比較回路１００３において記憶装置１００２の最終データ“３ｆｆａ”と比較し、
３ｆｆｅ  ＞  ３ｆｆａ
であるので、記憶装置１００２より最終データ“３ｆｆａ”を取り出した後、次の最終データ“３ｆｆｆ”を読み出して、比較回路１００６において現在のスタックポインタのアドレス値“３ｆｆｅ”と比較する。その結果、アドレス値が一致しないので、暴走状態にあることを示す信号を出力する。
【０１８０】
ここで、最後のスタックポインタのアドレス値が“３ｆｆｅ”ではなく“３ｆｆｆ”であった場合には、比較回路１００３において記憶装置１００２の最終データ“３ｆｆａ”と比較し、
３ｆｆｆ  ＞  ３ｆｆａ
であるので、記憶装置１００２より最終データ“３ｆｆａ”を取り出した後、次の最終データ“３ｆｆｆ”を読み出して、比較回路１００６において現在のスタックポインタのアドレス値“３ｆｆｆ”と比較する。その結果、アドレス値が一致するので、正常状態にあることを示す信号を出力する。
【０１８１】
以上のように、本実施の形態９によれば、スタックポインタがデータ退避の方向へ動作したときのアドレス値を履歴し、逆にデータ復帰の方向へ動作したときには、履歴したうちの最後のアドレス値を取り出した後の次の最後のアドレス値と比較し、一致する場合にはマイクロプロセッサが正常状態にあると判定し、一致しない場合にはマイクロプロセッサが暴走状態にあると判定する。このように、スタック領域へ退避したデータを復帰させるとスタックポインタがその退避前のアドレス値へ復帰することを考慮して、スタックポインタのアドレス値を監視することにより、マイクロプロセッサの暴走を判定するので、スタックポインタのアドレス値がスタック領域内にあるか否かにかかわらず、スタックポインタの誤動作に係るマイクロプロセッサの暴走を判定することができる。また、ウォッチドックタイマを用いないので、サブルーチン処理や割込み処理などの一定間隔で同じ動作をする処理中に暴走が発生した場合であっても、その暴走を判定することができる。また、スタックポインタのアドレス値がスタック領域内に存在する間や、サブルーチン処理や割込み処理が繰り返されている間に暴走を判定できるので、暴走を判定するまでにかかる時間を短縮することができる。
【産業上の利用可能性】
【０１８２】
本発明にかかるマイクロプロセッサの暴走監視装置は、スタックポインタの誤動作に係るマイクロプロセッサの暴走や、サブルーチン処理や割込み処理などの一定間隔で同じ動作をする処理中に発生するマイクロプロセッサの暴走を判定でき、マイクロプロセッサにより制御されるシステム等において有用である。
【図面の簡単な説明】
【０１８３】
【図１】本発明の実施の形態１〜５におけるマイクロプロセッサの暴走監視装置に係る基本的な動作フローチャートを示す図
【図２】本発明の実施の形態１におけるマイクロプロセッサの暴走監視装置の構成図
【図３】本発明の実施の形態２におけるマイクロプロセッサの暴走監視装置の構成図
【図４】本発明の実施の形態３におけるマイクロプロセッサの暴走監視装置の構成図
【図５】本発明の実施の形態４におけるマイクロプロセッサの暴走監視装置の構成図
【図６】本発明の実施の形態５におけるマイクロプロセッサの暴走監視装置の構成図
【図７】本発明の実施の形態６におけるマイクロプロセッサの暴走監視装置の構成図
【図８】本発明の実施の形態７におけるマイクロプロセッサの暴走監視装置の構成図
【図９】本発明の実施の形態８におけるマイクロプロセッサの暴走監視装置の構成図
【図１０】本発明の実施の形態９におけるマイクロプロセッサの暴走監視装置の構成図
【図１１】通常データ用の外部メモリ内に設定されたスタック領域を説明するための図
【図１２】ウォッチドックタイマを用いた従来のマイクロプロセッサの暴走監視手段の概念図
【符号の説明】
【０１８４】
２０１、９０１      アドレス値増減判定回路
２０３      セレクタ
２０４、２０６、２０７、３０３、５０２、５０６、６０６      レジスタ
２０５、２０８、３０４、４０３、５０３、６０５、７０４、７０７、１００３、１００６      比較回路
２０９      加減算器
３０１      アップダウンカウンタ
３０２      加算器
４０１、７０１、１００１      記憶装置制御回路
４０２、７０２、１００２      ＦＩＬＯ型の記憶装置
４０４、７０５、１００４      制御信号作成回路
４０５、７０６、１００５      制御回路
５０１、６０１      暴走監視回路
５０７      ＡＮＤ回路
６０４      カウンタ回路
７０３      割込み許可基準レベル
８０１、９０３      ＦＩＦＯ型の記憶装置
８０２、９０４      シーケンスマッチング回路
８０３、９０５      整合表
８０４      設定した割込み許可レベル
【図１】
2005216015.tif 000003
【図２】
2005216015.tif 000004
【図３】
2005216015.tif 000005
【図４】
2005216015.tif 000006
【図５】
2005216015.tif 000007
【図６】
2005216015.tif 000008
【図７】
2005216015.tif 000009
【図８】
2005216015.tif 000010
【図９】
2005216015.tif 000011
【図１０】
2005216015.tif 000012
【図１１】
2005216015.tif 000013
【図１２】
2005216015.tif 000014