(57)【要約】【課題】コンピュータシステムのプログラム異常動作を検出するために必要となる記憶容量を大幅に縮小する技術を提供する。【解決手段】プログラム異常動作検出装置１００は、プログラムカウンタ１１２ａを有するＣＰＵ１１２と、分岐命令とこの分岐命令に対応する分岐先アドレスとが分岐先アドレスのアドレスが分岐命令のアドレスの次のアドレスとなるように記憶されたプログラムメモリ１１１と、プログラムカウンタ１１２ａの出力値が不連続に変化したことを検知して分岐検知信号１１６を発生する分岐検知回路１１５と、分岐検知信号１１６に応答して、プログラムカウンタ１１２ａの出力値と、プログラムメモリ１１１内で、前記ＣＰＵ１１２によって直前に実行された命令のアドレスの次のアドレスに記憶されているデータと、を比較し、その比較結果が不一致であるとき異常検出信号１３０を発生するアドレス比較回路１１９と、を備える。【選択図】図１
2011154459.tif 000002
【特許請求の範囲】
【請求項１】
プログラムカウンタを有する中央演算処理装置と、
分岐命令と、この分岐命令に対応する分岐先アドレスと、が、前記分岐先アドレスのアドレスが前記分岐命令のアドレスに対して所定の位置関係となるように記憶された記憶手段と、
前記プログラムカウンタの出力値が不連続に変化したことを検知して分岐検知信号を発生する分岐検知手段と、
前記分岐検知信号に応答して、前記プログラムカウンタの出力値と、前記記憶手段内で、前記中央演算処理装置によって直前に実行された命令のアドレスに対して前記所定の位置関係のアドレスに記憶されているデータと、を比較し、その比較結果が不一致であるとき異常検出信号を発生する比較手段と、
を含む、
コンピュータシステムのプログラム異常動作検出装置。
【請求項２】
請求項１に記載のコンピュータシステムのプログラム異常動作検出装置であって、
前記所定の位置関係は、次のアドレスである、
コンピュータシステムのプログラム異常動作検出装置。
【請求項３】
請求項１又は２に記載のコンピュータシステムのプログラム異常動作検出装置であって、
前記記憶手段内で、前記中央演算処理装置によって直前に実行された命令のアドレスに対して前記所定の位置関係のアドレスに記憶されているデータを保持する比較データ保持手段を更に備え、
前記比較手段は、前記分岐検知信号に応答して、前記プログラムカウンタの出力値と、前記比較データ保持手段によって保持されているデータと、を比較し、その比較結果が不一致であるとき異常検出信号を発生する、
コンピュータシステムのプログラム異常動作検出装置。
【請求項４】
請求項１〜３の何れかに記載のコンピュータシステムのプログラム異常動作検出装置であって、
前記中央演算処理装置に対して、前記分岐先アドレスが入力されることを禁止する、入力データ選択手段を更に備える、
コンピュータシステムのプログラム異常動作検出装置。
【請求項５】
プログラムカウンタを有する中央演算処理装置を備えたコンピュータシステムのプログラム異常動作検出方法であって、
分岐命令と、この分岐命令に対応する分岐先アドレスと、を、前記分岐先アドレスのアドレスが前記分岐命令のアドレスに対して所定の位置関係となるように記憶し、
前記プログラムカウンタの出力値が不連続に変化したことを検知し、
上記の検知に応答して、前記プログラムカウンタの出力値と、前記中央演算処理装置によって直前に実行された命令のアドレスに対して前記所定の位置関係のアドレスに記憶されているデータと、を比較し、その比較結果が不一致であるとき異常検出信号を発生する、
コンピュータシステムのプログラム異常動作検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステムのプログラム異常動作検出装置に関する。
【背景技術】
【０００２】
近年のディジタル技術の発展に伴い、携帯型電子機器のような小型機器や自動車、製造機械の制御装置など、多くの電子機器においてマイクロコンピュータが使用される頻度が高くなってきている。マイクロコンピュータは、プログラムに含まれる命令コードを順次解読し、プログラムに従って処理を行う事で所望の機能を実現している。しかし、マイクロコンピュータは、外部ノイズ等の影響によってプログラムの実行順に従った正常な動作から逸脱して異常な動作を行う事がある。よって、プログラムの実行順を監視し、正常な動作から逸脱した場合は意図した動作か否かを判断し、誤った動作が行われた場合には異常動作が発生した事を検出する必要がある。
【０００３】
この種の技術として、特許文献１は、プログラム暴走を検出することが出来るコンピュータシステムのプログラム暴走監視装置を提供する。このプログラム暴走監視装置は、プログラムカウンタの出力値が不連続に変化した事を検知し、検知した時のプログラムカウンタの出力値によって指定されるアドレスと分岐先メモリに記憶されていた分岐先アドレスとを比較し、比較結果が不一致だった場合に暴走検出信号を発生するようになっている。以下、このプログラム暴走監視装置の構成と作動を具体的に説明する。
【０００４】
図１６は特許文献１におけるプログラム暴走監視装置のブロック図である。図１７は特許文献１におけるプログラムメモリに記憶されている命令をアドレス毎に示す図である。図１８は特許文献１における分岐先アドレスに記憶されている分岐先アドレスをアドレス毎に示す図である。図１９は特許文献１におけるプログラム暴走監視装置を適用したコンピュータシステムのブロック図である。
【０００５】
図１６において分岐先メモリ１５は、図１８に示すように、図１７で示すプログラムメモリと同一のアドレスが割り振られている。即ち、分岐先メモリ１５の各アドレスは、プログラムメモリの各アドレスに一対一で対応している。更に、プログラムメモリの最初のアドレスから最初の分岐命令のアドレスまでのアドレス範囲に相当する分岐先メモリ１５の各アドレスには、上記分岐命令後に実行される命令が記憶されているアドレスが記憶されている。また、プログラムメモリのある分岐命令のアドレスに続く次のアドレスから次の分岐命令のアドレスまでのアドレス範囲に相当する分岐先メモリ１５の各アドレスには、上記分岐命令後に実行される命令が記憶されているアドレスが記憶されている。
【０００６】
分岐先レジスタ２０には分岐先メモリ１５から読み出されたデータが保持される。
【０００７】
アドレスインクリメンタ２１はプログラマブルカウンタからなる。アドレスインクリメンタ２１は、ＣＰＵ１１から供給される動作情報信号の内容に応じてアドレスバス１２からアドレスデータを取得し、取得したアドレスデータを初期値とし、クロックパルスの発生タイミングで１ずつカウントアップする。
【０００８】
分岐検知回路２２はアドレスインクリメンタ２１の出力値とアドレスバス１２のアドレスデータとを比較し、比較結果が不一致のときに分岐検知信号を発生する。分岐先アドレス比較回路２３は分岐検知回路２２から分岐検知信号が供給されると、分岐先レジスタ２０が保持しているデータとアドレスバス１２から供給されるアドレスデータとを比較し暴走監視出力信号を発生する。
【０００９】
次に上記プログラム暴走監視装置の動作について説明する。ＣＰＵ１１において分岐命令が実行されると、プログラムカウンタ１１ａには分岐先アドレスがセットされる。アドレスインクリメンタ２１はＣＰＵ１１の動作に関係なくカウントアップを継続するため、アドレスインクリメンタ２１の出力値は単にカウントアップした値となる。よって、アドレスインクリメンタ２１の出力値とアドレスバス１２からのアドレスデータとは不一致となるので、分岐検知回路２２は分岐検知信号を発生する。分岐検知信号は分岐先アドレス比較回路２３に供給され、分岐検知信号がアクティブのとき分岐先アドレス比較回路２３は分岐先レジスタ２０から出力されているデータとアドレスバス１２から供給されるアドレスデータとを比較する。分岐先レジスタ２０から出力されているデータとアドレスバス１２から供給されるアドレスデータが一致した場合、プログラムカウンタ１１ａの出力値は正しい分岐先アドレスという事になる。よって分岐先アドレス比較回路２３は正常を示す暴走監視出力信号を出力する。分岐先レジスタ２０から出力されているデータとアドレスバス１２から供給されるアドレスデータが不一致となった場合、プログラムカウンタ１１ａの出力値は誤った動作に起因したアドレスということになる。よって分岐先アドレス比較回路２３は異常を示す暴走監視出力信号を出力する。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開平１０−６３５４１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
上記のプログラム暴走監視装置では、図１９で示すようにプログラムカウンタ１１ａの出力値をプログラムが記憶されているＲＯＭ１４と分岐先メモリ１５に供給し、ＲＯＭ１４と分岐先メモリ１５の同一アドレスからデータを読み出している。分岐先メモリ１５から読み出されたデータが分岐先アドレス比較回路２３に入力され、分岐検知信号が発生した時のプログラムカウンタ１１ａの出力値と分岐先メモリ１５から読み出されたデータとを比較する事によって異常動作検出を行っている。よって、分岐先メモリ１５としては、プログラムが記憶されているＲＯＭ１４と同じアドレス群を持った大容量の記憶装置が必要となる。従って、分岐先メモリ１５として利用する記憶装置のために、半導体チップ上に膨大な面積を確保する必要がある。
【００１２】
また、上記特許文献１の他の実施例として、プログラム中の分岐命令が実行されるまでは分岐先メモリ１５のある特定のアドレスから分岐先アドレスを読み出す事で分岐先メモリ１５の記憶容量を少なくすることが出来るとある。しかし、実現する手段として分岐命令毎に分岐先メモリ１５の特定のアドレスから分岐先アドレスを読み出すためのデコード回路が必要となる。さらに、デコード回路は分岐命令毎に分岐先メモリ１５の読み出すアドレスが固定されているため、プログラムが修正され分岐命令の位置が変化してしまうと、デコード回路も修正が必要となる。よって、特許文献１に示されているデコード回路はプログラムの修正に対応できないため、実現性に問題がある。
【課題を解決するための手段】
【００１３】
本願発明の第１の観点によれば、コンピュータシステムのプログラム異常動作検出装置は、以下のように構成されている。即ち、プログラム異常動作検出装置は、プログラムカウンタを有する中央演算処理装置と、分岐命令と、この分岐命令に対応する分岐先アドレスと、が、前記分岐先アドレスのアドレスが前記分岐命令のアドレスに対して所定の位置関係となるように記憶された記憶手段と、前記プログラムカウンタの出力値が不連続に変化したことを検知して分岐検知信号を発生する分岐検知手段と、前記分岐検知信号に応答して、前記プログラムカウンタの出力値と、前記記憶手段内で、前記中央演算処理装置によって直前に実行された命令のアドレスに対して前記所定の位置関係のアドレスに記憶されているデータと、を比較し、その比較結果が不一致であるとき異常検出信号を発生する比較手段と、を含む。
【００１４】
本願発明の第２の観点によれば、コンピュータシステムのプログラム異常動作検出は、以下のような方法で行われる。即ち、分岐命令と、この分岐命令に対応する分岐先アドレスと、を、前記分岐先アドレスのアドレスが前記分岐命令のアドレスに対して所定の位置関係となるように記憶し、前記プログラムカウンタの出力値が不連続に変化したことを検知し、上記の検知に応答して、前記プログラムカウンタの出力値と、前記中央演算処理装置によって直前に実行された命令のアドレスに対して前記所定の位置関係のアドレスに記憶されているデータと、を比較し、その比較結果が不一致であるとき異常検出信号を発生する。
【発明の効果】
【００１５】
本願発明によれば、コンピュータシステムのプログラム異常動作を検出するために必要となる記憶容量を大幅に縮小することが可能となる。
【図面の簡単な説明】
【００１６】
【図１】本願発明の実施例１のプログラム異常動作検出装置を示すブロック図
【図２】図１のプログラムメモリのアドレス毎の格納データを示す図
【図３】図１の比較データ・レジスタの具体例を示す図
【図４】図１の分岐検知回路の具体例を示す図
【図５】図１のアドレス比較回路の具体例を示す図
【図６】実施例１の動作を示すフローチャート
【図７】実施例１において分岐命令以外の命令で分岐動作が発生した場合のタイミングチャート
【図８】実施例１において分岐命令実行後に誤ったアドレスに分岐した場合のタイミングチャート
【図９】実施例１において分岐命令実行後に正しいアドレスに分岐した場合のタイミングチャート
【図１０】本願発明の実施例２のプログラム異常動作検出装置を示すブロック図
【図１１】図１０のプログラムメモリのアドレス毎の格納データを示す図
【図１２】実施例２において条件分岐命令で分岐条件が成立しなかった場合のタイミングチャート
【図１３】本願発明の実施例３のプログラム異常動作検出装置を示すブロック図
【図１４】図１３のプログラムメモリのアドレス毎の格納データを示す図
【図１５】実施例３において分岐先アドレスがレジスタ間接アドレス指定によって決定される分岐命令で分岐動作が発生した場合のタイミングチャート
【図１６】特許文献１のプログラム暴走監視装置のブロック図
【図１７】特許文献１の暴走監視装置においてプログラムが記憶されているプログラムメモリのアドレス毎の命令を示す図
【図１８】図１６の分岐先メモリのアドレス毎の分岐先アドレスを示す図
【図１９】特許文献１の暴走監視装置を適用したコンピュータシステムを示すブロック図
【発明を実施するための形態】
【００１７】
＜実施例１＞
以下、図１〜図９を参照しつつ、本願発明の実施例１に係るマイクロコンピュータ（コンピュータシステム）のプログラム異常動作検出装置１００を説明する。実施例１では、分岐命令が無条件分岐命令であり、プログラム中で分岐命令実行後に実行される命令が記憶されている記憶位置データ（以降、分岐先アドレスと称す）が一意に決定される分岐命令を対象としている。
【００１８】
プログラムメモリ１１１（記憶手段）の各アドレスには、図２で示すようにＣＰＵ１１２（中央演算処理装置）が実行する命令と分岐先アドレスが記憶されている。プログラムメモリ１１１のデータ領域に記憶されている分岐先アドレスは、分岐命令が記憶されている記憶位置（アドレス）の次の記憶位置（アドレス）に記憶されている。即ち、プログラムメモリ１１１には、分岐命令と、この分岐命令に対応する分岐先アドレスと、が、分岐先アドレスのアドレスが分岐命令のアドレスに対して所定の位置関係となるように記憶されている。換言すれば、プログラムメモリ１１１には、１つの分岐命令に対して１つの分岐先アドレスが一対一に相関して記憶されいている。そして、本実施形態において所定の位置関係とは、"次のアドレス"を意味している。プログラムメモリ１１１には、アドレスバス１１３を介してＣＰＵ１１２に内蔵されているプログラムカウンタ１１２ａの出力値が供給される。プログラムメモリ１１１は、供給された出力値で指定されるアドレスに記憶されているデータを取り出し、データバス１１４に出力する。
【００１９】
ＣＰＵ１１２は、プログラムメモリ１１１がデータバス１１４に出力したデータを取り込み、取り込んだデータを実行する。
【００２０】
比較データ・レジスタ１１７（比較データ保持手段）は、プログラムメモリ１１１が出力したデータをデータバス１１４を介して取り込み保持する。詳しくは、比較データ・レジスタ１１７は、プログラムメモリ１１１内で、ＣＰＵ１１２によって直前に実行された命令のアドレスの次のアドレスに記憶されているデータを保持する。
【００２１】
分岐検知回路１１５（分岐検知手段）は、プログラムカウンタ１１２ａの出力値が不連続に変化したことを検知して分岐検知信号１１６を発生する。詳しくは、分岐検知回路１１５は、アドレスカウンタ１１５ａと比較器１１５ｂから構成される。分岐検知回路１１５には、アドレスバス１１３を介してプログラムカウンタ１１２ａの出力値が入力される。アドレスカウンタ１１５ａは、プログラムカウンタ１１２ａの出力値を初期値としてクロックパルスのタイミングに同期してカウントアップする。よって、アドレスカウンタ１１５ａの出力値は分岐命令によってプログラムカウンタ１１２ａの出力値が不連続とならない限りプログラムカウンタ１１２ａの出力値と同じである。比較器１１５ｂは、プログラムカウンタ１１２ａの出力値とアドレスカウンタ１１５ａの出力値を比較し、比較結果が不一致の場合に分岐検知信号１１６を発生する。アドレスカウンタ１１５ａは、分岐検知信号１１６が入力されるとプログラムカウンタ１１２ａの出力値を取り込む。そして、アドレスカウンタ１１５ａは、取り込んだ値に１を加算した値を新たな初期値に設定する。
【００２２】
アドレス比較回路１１９（比較手段）は、分岐検知信号１１６に応答して、プログラムカウンタ１１２ａの出力値と、プログラムメモリ１１１内で、ＣＰＵ１１２によって直前に実行された命令のアドレスの次のアドレスに記憶されているデータと、を比較し、その比較結果が不一致であるとき異常検出信号１３０を発生する。ここで、本実施形態では上記の比較データ・レジスタ１１７が設けられている。従って、本実施形態に係るアドレス比較回路１１９は、分岐検知信号１１６に応答して、プログラムカウンタ１１２ａの出力値と、比較データ・レジスタ１１７によって保持されているデータと、を比較し、その比較結果が不一致であるとき異常検出信号１３０を発生するようになっている。即ち、アドレス比較回路１１９は、分岐検知信号１１６が入力されると、アドレスバス１１３を介してプログラムカウンタ１１２ａの出力値を取り込むと同時に、比較データ出力バス１１８を介して比較データ・レジスタ１１７に格納されているデータを取り込む。アドレス比較回路１１９は、前記２つの値を取り込んだ後、取り込んだ２つの値を比較し、比較結果が不一致の場合に異常検出信号１３０を発生する。
【００２３】
図３に比較データ・レジスタ１１７の具体例を示す。比較データ・レジスタ１１７は、データバス１１４のビット数と同じビット数のフリップフロップで構成された回路である。
【００２４】
図４に分岐検知回路１１５の具体例を示す。分岐検知回路１１５は、アドレスバス１１３のアドレスデータとアドレスカウンタ１１５ａの出力値の排他的論理和を分岐検知信号１１６として出力する回路である。アドレスカウンタ１１５ａはプログラムカウンタ１１２ａのビット数と同じビット数から構成される。アドレスカウンタ１１５ａの入力信号は、分岐検知信号１１６によって切り替えられる。アドレスカウンタ１１５ａの入力信号として、分岐検知信号１１６が"０"の時はアドレスカウンタ１１５ａの出力値が選択され、"１"の時はアドレスバス１１３のアドレスデータが選択される。
【００２５】
図５にアドレス比較回路１１９の具体例を示す。アドレス比較回路１１９は、分岐検知信号１１６によって入力信号が切り替えられるプログラムカウンタ格納レジスタ１１９ａと比較データ格納レジスタ１１９ｂを持ち、プログラムカウンタ格納レジスタ１１９ａの出力値と比較データ格納レジスタ１１９ｂの出力値との排他的論理和を異常検出信号１３０として出力する回路である。プログラムカウンタ格納レジスタ１１９ａと比較データ格納レジスタ１１９ｂは、分岐検知信号１１６が"０"の時は互いに値を保持し、"１"の時はプログラムカウンタ格納レジスタ１１９ａにはアドレスバス１１３のアドレスデータがセットされ、比較データ格納レジスタ１１９ｂには比較データ出力バス１１８のデータがセットされる。
【００２６】
本実施形態に係るコンピュータシステムのプログラム異常動作検出装置１００は、少なくとも、プログラムメモリ１１１と、ＣＰＵ１１２と、分岐検知回路１１５と、アドレス比較回路１１９を含んで構成されている。本実施形態では、プログラム異常動作検出装置１００は、更に、比較データ・レジスタ１１７を備えて構成されている。
【００２７】
次に、図１と図６を参照しつつ、プログラム異常動作検出装置１００の作動を説明する。先ず、プログラム異常動作検出装置１００が動作を開始すると（Ｓ２１１）、ＣＰＵ１１２は、ＣＰＵ１１２が内蔵しているプログラムカウンタ１１２ａの出力値で指定されるプログラムメモリ１１１のアドレスからデータを読み出す（Ｓ２１２）。
【００２８】
ＣＰＵ１１２は、プログラムメモリ１１１から読み出したデータを実行する（S21３）。この実行結果に従って、ＣＰＵ１１２は、プログラムカウンタ１１２ａの値を更新する。ステップＳ２１３の処理と並行して、ステップＳ２１２でプログラムメモリ１１１から読み出されたデータは、データバス１１４を介して比較データ・レジスタ１１７に格納される（Ｓ２１４）。ステップＳ２１３及びステップＳ２１４の処理と並行して、分岐検知回路１１５を構成しているアドレスカウンタ１１５ａは、クロックパルスのタイミングに同期してカウントアップを行う（Ｓ２１５）。
【００２９】
分岐検知回路１１５を構成している比較器１１５ｂは、更新されたプログラムカウンタ１１２ａの出力値と、更新されたアドレスカウンタ１１５ａの出力値と、を比較する（Ｓ２１６）。
【００３０】
ステップＳ２１６の比較結果が一致した場合（連続動作：YES）は、ステップＳ２１２に戻り、再度、データの読み出しを行う（S212）。ステップＳ２１６の比較結果が不一致の場合（連続動作：NO）は、分岐検知回路１１５が分岐検知信号１１６を出力する（Ｓ２１７）。
【００３１】
アドレス比較回路１１９に分岐検知信号１１６が入力されると、アドレス比較回路１１９はプログラムカウンタ１１２ａの出力値と比較データ・レジスタ１１７に格納されているデータを取り込む（Ｓ２１８）。そして、アドレス比較回路１１９は、プログラムカウンタ１１２ａの出力値と、比較データ・レジスタ１１７に格納されているデータと、を比較する（Ｓ２１９）。ステップＳ２１９の比較結果が一致した場合（アドレス比較：一致）は、ステップＳ２１２に戻り、再度、データの読み出しが行われる（S212）。ステップＳ２１９の比較結果が不一致だった場合（アドレス比較：不一致）は、アドレス比較回路１１９は、異常検出信号１３０を発生し（S220）、異常動作が発生した事を例えばＣＰＵ１１２などに通知する。
【００３２】
ステップS２１７で分岐検知回路１１５が出力した分岐検知信号１１６は、アドレスカウンタ１１５ａにも入力される。アドレスカウンタ１１５ａは、分岐検知信号１１６が入力されると、プログラムカウンタ１１２ａの出力値を取り込み、取り込んだ値に１を加算した値を新たな初期値に設定して動作を継続する（Ｓ２２１）。
【００３３】
次に、図７〜図９を参照しつつ、プログラム異常動作検出装置１００の詳細な作動を説明する。
【００３４】
（詳細な作動：パターン１）
図７は分岐命令以外の命令（一般命令）で分岐動作が発生した場合のタイミングチャートである。
【００３５】
サイクルＴ１でプログラムカウンタ１１２ａにアドレス＄０２が設定されると、データバス１１４にはプログラムメモリ１１１のアドレス＄０２に記憶されている一般命令（Ｄ０２）が出力される。出力された一般命令（Ｄ０２）は、サイクルＴ２でＣＰＵ１１２と比較データ・レジスタ１１７に取り込まれる。ＣＰＵ１１２では取り込まれた一般命令（D02）が実行される。一般命令（Ｄ０２）が実行された時、例えばＣＰＵ１１２の異常動作によってサイクルＴ３のプログラムカウンタ１１２ａにアドレス＄１７が設定され、異常な分岐動作が発生したとする。アドレスカウンタ１１５ａは、クロックパルスに同期してカウントアップを行っているため、サイクルＴ３では"４"を示している。よって、比較器１１５ｂで比較されるプログラムカウンタ１１２ａとアドレスカウンタ１１５ａの値が異なるため、サイクルＴ３で分岐検知回路１１５から分岐検知信号１１６が出力される。ＣＰＵ１１２は、分岐検知信号１１６が入力されると命令の実行を中断し、待機状態となる。アドレス比較回路１１９に分岐検知信号１１６が入力されると、アドレス比較回路１１９は、分岐検知信号１１６が発生した時のプログラムカウンタ１１２ａの値と比較データ・レジスタ１１７に格納されている値をサイクルＴ４で取り込み、取り込んだデータの比較を行う。取り込まれたプログラムカウンタ１１２ａの値はサイクルＴ３で設定されていたアドレス＄１７であり、比較データ・レジスタ１１７の値はサイクルＴ３で格納された一般命令（Ｄ０３）である。よって、比較結果は不一致となり、アドレス比較回路１１９は異常検出信号１３０を出力し、異常動作を検出する。
【００３６】
（詳細な作動：パターン２）
図８は、分岐命令実行後に誤った分岐先に分岐した場合のタイミングチャートである。
【００３７】
サイクルＴ１でプログラムカウンタ１１２ａにアドレス＄０４が設定されると、データバス１１４にはプログラムメモリ１１１のアドレス＄０４に記憶されている分岐命令（Ｄ０４）が出力される。出力された命令は、サイクルＴ２でＣＰＵ１１２と比較データ・レジスタ１１７に取り込まれる。ＣＰＵ１１２では取り込まれた分岐命令（D04）が実行される。分岐命令（Ｄ０４）が実行された時、例えばＣＰＵ１１２の異常動作によってサイクルＴ３のプログラムカウンタ１１２ａにアドレス＄ＡＡが設定され、誤った分岐先に分岐したとする。アドレスカウンタ１１５ａは、クロックパルスに同期してカウントアップを行っているため、サイクルＴ３では"６"を示している。よって、比較器１１５ｂで比較されるプログラムカウンタ１１２ａとアドレスカウンタ１１５ａの値が異なるため、サイクルＴ３で分岐検知回路１１５から分岐検知信号１１６が出力される。ＣＰＵ１１２は、分岐検知信号１１６が入力されると命令の実行を中断し、待機状態となる。アドレス比較回路１１９に分岐検知信号１１６が入力されると、アドレス比較回路１１９は、分岐検知信号１１６が発生した時のプログラムカウンタ１１２ａの値と比較データ・レジスタ１１７に格納されている値をサイクルＴ４で取り込み、取り込んだデータの比較を行う。取り込まれたプログラムカウンタ１１２ａの値はサイクルＴ３で設定されていたアドレス＄ＡＡであり、比較データ・レジスタ１１７の値はサイクルＴ３で格納された分岐命令（Ｄ０４）の分岐先アドレスであるアドレス＄１７である。よって、比較結果は不一致となり、アドレス比較回路１１９は異常検出信号１３０を出力し、異常動作を検出する。
【００３８】
（詳細な作動：パターン３）
図９は、分岐命令実行後に正しいアドレスに分岐した場合のタイミングチャートである。
【００３９】
サイクルＴ１でプログラムカウンタ１１２ａにアドレス＄０４が設定されると、データバス１１４にはプログラムメモリ１１１のアドレス＄０４に記憶されていた分岐命令（Ｄ０４）が出力される。出力された命令は、サイクルＴ２でＣＰＵ１１２と比較データ・レジスタ１１７に取り込まれる。ＣＰＵ１１２では取り込まれた分岐命令（D04）が実行される。分岐命令（Ｄ０４）が実行されると、サイクルＴ３のプログラムカウンタ１１２ａはアドレス＄１７を示す。アドレスカウンタ１１５ａは、クロックパルスに同期してカウントアップを行っているため、サイクルＴ３では"６"を示している。よって、比較器１１５ｂで比較されるプログラムカウンタ１１２ａとアドレスカウンタ１１５ａの値が異なるため、サイクルＴ３で分岐検知回路１１５から分岐検知信号１１６が出力される。ＣＰＵ１１２は、分岐検知信号１１６が入力されると命令の実行を中断し、待機状態となる。アドレス比較回路１１９に分岐検知信号１１６が入力されると、アドレス比較回路１１９は、分岐検知信号１１６が発生した時のプログラムカウンタ１１２ａの値と比較データ・レジスタ１１７に格納されている値をサイクルＴ４で取り込み、取り込んだデータの比較を行う。取り込まれたプログラムカウンタ１１２ａの値はサイクルＴ３で設定されていたアドレス＄１７であり、比較データ・レジスタ１１７の値はサイクルＴ３で格納されたアドレス＄１７である。よって、比較結果は一致となり、アドレス比較回路１１９は異常検出信号１３０を出力しない。アドレスカウンタ１１５ａは、分岐検知信号１１６が入力されるとサイクルＴ３のプログラムカウンタ１１２ａの値を取り込み、取り込んだ値に１を加算した値を新たな初期値としてカウントアップを継続する。
【００４０】
（まとめ）
（１）以上説明したように、本実施例１に係るプログラム異常動作検出装置１００は、プログラムカウンタ１１２ａを有するＣＰＵ１１２と、分岐命令と、この分岐命令に対応する分岐先アドレスと、が、前記分岐先アドレスのアドレスが前記分岐命令のアドレスに対して所定の位置関係となるように記憶されたプログラムメモリ１１１と、前記プログラムカウンタ１１２ａの出力値が不連続に変化したことを検知して分岐検知信号１１６を発生する分岐検知回路１１５と、前記分岐検知信号１１６に応答して、前記プログラムカウンタ１１２ａの出力値と、前記プログラムメモリ１１１内で、前記ＣＰＵ１１２によって直前に実行された命令のアドレスに対して前記所定の位置関係のアドレスに記憶されているデータと、を比較し、その比較結果が不一致であるとき異常検出信号１３０を発生するアドレス比較回路１１９と、を備えている。以上の構成によれば、プログラム異常動作を検出するために必要となる記憶容量を大幅に縮小することが可能となる。
【００４１】
具体的には、プログラム異常動作の検出を行うために必要となる記憶装置の容量は、分岐命令が例えば３２ビットであるとすると、３２ビット×（プログラムに含まれる分岐命令の数）だけで済むことになる。
【００４２】
上記実施例１の技術と上記特許文献１の技術を比較すると以下のようになる。即ち、仮に、プログラムに含まれる命令の数が２０００個であり、そのうち３０％に相当する６００個が分岐命令であり、一つの命令が３２ビットで構成されているとする。この場合、上記特許文献１の技術では、３２ビット×２０００個＝６４ｋビットの記憶容量を有する記憶装置を別途、用意する必要があった。これに対し、上記実施形態の技術では、３２ビット×６００個＝１９．２ｋビットの記憶容量をプログラムメモリ１１１内に確保するだけで足りる。従って、上記実施例１の技術は、上記特許文献１の技術と比較して、記憶装置のために半導体上に確保しなければならない面積を大幅に縮小することができる。
【００４３】
（２）また、前記所定の位置関係は、次のアドレスであることが好ましい。
【００４４】
（３）また、プログラム異常動作検出装置１００は、プログラムメモリ１１１内で、ＣＰＵ１１２によって直前に実行された命令のアドレスに対して前記所定の位置関係のアドレスに記憶されているデータを保持する比較データ・レジスタ１１７を更に備え、アドレス比較回路１１９は、前記分岐検知信号１１６に応答して、前記プログラムカウンタ１１２ａの出力値と、前記比較データ・レジスタ１１７によって保持されているデータと、を比較し、その比較結果が不一致であるとき異常検出信号１３０を発生することが好ましい。
【００４５】
＜実施例２＞
次に、図１０〜図１２を参照しつつ、本願発明の実施例２に係るマイクロコンピュータのプログラム異常動作検出装置１００を説明する。上記実施例１では、分岐命令が無条件分岐命令である場合を説明したが、本実施例２では、分岐条件が無条件分岐のみならず、条件分岐命令であっても問題なくプログラムの異常動作を検出するための技術に関する。以下、上記実施例１と相違する点を中心に説明し、重複する説明については適宜省略する。
【００４６】
実施例２では、図１１に示すようにプログラムメモリ１１１に１ビットのアドレス・フラグが追加されており、プログラムメモリ１１１に記憶されているデータが分岐先アドレスであった場合、アドレス・フラグは"１"に設定されるようになっている。そして、プログラムメモリ１１１からデータを読み出したとき、アドレス・フラグの値を確認し、アドレス・フラグが"１"となっていたら、ＣＰＵ１１２に入力されるデータを、いわゆるオペレーションなし命令（以下、ｎｏｐ命令と称する。）に置き換えるようになっている。これにより、分岐命令が無条件分岐命令ではなく、条件分岐命令であったとしても、ＣＰＵ１１２に分岐先アドレスが入力されてしまう、といった問題を確実に回避できるようになっている。
【００４７】
次に実施例２に係るプログラム異常動作検出装置１００の構成について図１０を用いて説明する。
【００４８】
プログラムメモリ１１１から読み出され、ＣＰＵ１１２に取り込まれるまでのデータバス１１４の途中に選択回路１２０（入力データ選択手段）が設けられる。選択回路１２０は、ＣＰＵ１１２に対して、分岐先アドレスが入力されることを禁止する。具体的には、選択回路１２０には、プログラムメモリ１１１からの出力信号と、ｎｏｐ命令出力回路１２１からの出力信号（ｎｏｐ命令）、プログラムメモリ１１１から出力されるアドレス・フラグ信号１２２が入力される。選択回路１２０は、アドレス・フラグ信号１２２が"０"のときはプログラムメモリ１１１からの出力信号をＣＰＵ１１２へそのまま出力する。しかしながら、選択回路１２０は、アドレス・フラグ信号１２２が"１"のときはｎｏｐ命令出力回路１２１からの出力信号をＣＰＵ１１２へ出力する。
【００４９】
次に、図１２を参照しつつ、プログラム異常動作検出装置１００の詳細な作動を説明する。
【００５０】
（詳細な作動：パターン４）
図１２は、ＣＰＵ１１２が条件分岐命令を実行し、分岐条件が成立しなかった場合のタイミングチャートである。
【００５１】
サイクルＴ１でプログラムカウンタ１１２ａにアドレス＄０４が設定されると、データバス１１４にはプログラムメモリ１１１のアドレス＄０４に記憶されていた分岐命令（Ｄ０４）が出力される。データバス１１４に出力された分岐命令（D04）は、サイクルＴ２でＣＰＵ１１２に取り込まれる。ＣＰＵ１１２は、取り込んだ分岐命令（D04）を実行する。ＣＰＵ１１２に取り込まれた分岐命令（Ｄ０４）が条件分岐命令であり、分岐条件が成立しなかった場合、分岐動作が発生しないため、サイクルＴ３のプログラムカウンタ１１２ａはアドレス＄０６が設定される。ここで、分岐動作が発生しなかったため、ＣＰＵ１１２には分岐検知信号１１６が入力されず、従って、サイクルＴ３でもＣＰＵ１１２は通常通り、命令実行を行うことになる。また、サイクルＴ３でＣＰＵ１１２が実行する命令はサイクルＴ２でデータバス１１４に出力されているデータである。従って、このままだと、ＣＰＵ１１２が分岐先アドレスを実行する、という事態が発生してしまう。そこで、サイクルＴ２でプログラムメモリ１１１から読み出されるアドレス・フラグ信号１２２が"１"を示しているため、選択回路１２０は、ｎｏｐ命令出力回路１２１から出力されたｎｏｐ命令をＣＰＵ１１２へ出力する。この結果、ＣＰＵ１１２は、サイクルＴ３において、プログラムメモリ１１１に記憶されていた分岐先アドレスに代えて、ｎｏｐ命令出力回路１２１が出力したｎｏｐ命令を実行し、問題なく、サイクルＴ４へ動作を継続することになる。
【００５２】
（まとめ）
（４）以上説明したように、本実施例２に係るプログラム異常動作検出装置１００は、ＣＰＵ１１２に対して、分岐先アドレスが入力されることを禁止する、選択回路１２０を更に備える。以上の構成によれば、プログラムメモリ１１１に記憶されている分岐命令として無条件分岐命令のみならず条件分岐命令が含まれていたとしても問題ない。つまり、ＣＰＵ１１２は、分岐命令を実行し、分岐条件が不成立となった場合は、分岐条件のアドレスの次のアドレスに記憶されているデータを実行しようとする。しかしながら、分岐条件のアドレスの次のアドレスには分岐先アドレスが記憶されている。従って、ＣＰＵ１１２は分岐先アドレスを実行してしまうという事態が発生してしまう。これに対し、上記の選択回路１２０を設けることで、少なくとも、ＣＰＵ１１２が分岐先アドレスを実行してしまう、という事態を回避することが可能となる。
【００５３】
なお、実施例１では、ＣＰＵ１１２は、分岐検知信号１１６が入力されると待機状態へと切り替わり、もって、分岐先アドレスを実行してしまう、という事態を回避することができるようになっていた。しかし、この構成に代えて、上記の選択回路１２０を採用することができる。即ち、実施例１における無条件分岐命令が実行される際にも、選択回路１２０は、ＣＰＵ１１２が分岐先アドレスを実行してしまうという事態を回避する効果を発揮することができる。
【００５４】
なお、上記実施例２では、プログラムメモリ１１１に１ビットのアドレス・フラグを追加することで、プログラムメモリ１１１に記憶されているデータが分岐先アドレスであるかが判別可能とされていた。しかしながら、プログラムメモリ１１１内にアドレス・フラグを用意する事なく判別する事も可能である。例えば、１ＭＢの記憶領域を持ったプログラムメモリ１１１と命令長が３２ビットのＣＰＵ１１２とを有する場合、プログラムメモリ１１１のアドレスデータとして必要なデータのビット数は２０ビットとなる。命令長が３２ビットであるため、命令長とアドレスデータには１２ビットの差が生まれる。そして、命令長とアドレスデータのビット数の差分に記憶されているデータがアドレスデータであるか否かを示すアドレス・フラグ・データを示すことにする。設定されたアドレス・フラグ・データを選択回路１２０の切り替え信号として利用することで、プログラムメモリ１１１に１ビットのアドレス・フラグを追加する事なくプログラムメモリ１１１に記憶されているデータが分岐先アドレスであるか否かを判断する事が可能となる。
【００５５】
＜実施例３＞
次に、図１３〜図１５を参照しつつ、本願発明の実施例３に係るプログラム異常動作検出装置１００を説明する。実施例３に係るプログラム異常動作検出装置１００は、分岐先アドレスが汎用レジスタの値によって変化する分岐命令（以降、レジスタ間接アドレス指定と称す）での異常動作検出も可能とした異常動作検出装置である。以下、上記実施例１と相違する点を中心に説明し、重複する説明については適宜省略する。
【００５６】
実施例３では、図１４に示すようにプログラムメモリ１１１に１ビットのアドレス間接・フラグを追加し、プログラムメモリ１１１に記憶されている分岐命令がレジスタ間接アドレス指定である場合は、レジスタ間接アドレス指定の分岐先アドレスが格納されている汎用レジスタを示すデータを次の記憶位置に記憶し、アドレス間接・フラグを"１"に設定する。アドレス間接・フラグが"１"のとき比較データ・レジスタ１１７に汎用レジスタを示すデータが格納される。プログラムカウンタ１１２ａとの比較対象として、比較データ・レジスタ１１７の出力値にて選択された汎用レジスタの出力値がアドレス比較回路１１９に入力される。この構成により、分岐命令がレジスタ間接アドレス指定の場合でも異常動作の検出が可能となる。実施例２で追加したアドレス・フラグは、記憶されているデータが汎用レジスタを示すデータである場合にも"１"に設定される。
【００５７】
次に実施例３に係るプログラム異常動作検出装置１００の構成について図１３を用いて説明する。
【００５８】
レジスタ間接アドレス指定の分岐先アドレスが格納されている汎用レジスタ１２３は、複数のレジスタ群から構成される。汎用レジスタ１２３は、ＣＰＵ１１２との双方向アクセス経路とは別に、比較データ・レジスタ１１７が比較データ出力バス１１８に出力したデータをアドレスとして取り込み、取り込んだアドレスにて示される汎用レジスタ１２３内のレジスタに格納されているデータを汎用レジスタデータバス１２４に出力する経路を持っている。また、汎用レジスタ１２３は、比較データ出力バス１１８と同じサイクルで、格納しているデータを汎用レジスタデータバス１２４に出力する。アドレス比較回路１１９にプログラムカウンタ１１２ａの比較対象データとして入力されるデータを選択するために、プログラム異常動作検出装置１００は、比較データ選択回路１２８（比較データ選択手段）を備えている。比較データ選択回路１２８には、比較データ出力バス１１８を介して比較データ・レジスタ１１７の出力値が入力され、汎用レジスタデータバス１２４を介して汎用レジスタ１２３の出力値が入力される。比較データ選択信号１２７によって何れかのデータが選択される。選択されたデータは、比較データバス１２９を介してアドレス比較回路１１９に出力される。比較データ選択信号１２７は、プログラムメモリ１１１から読み出されたアドレス間接・フラグ信号１２５がアドレス間接・フラグ保持回路１２６を経由した信号である。比較データ選択信号１２７が"０"の場合は、比較データ選択回路１２８は、比較データ・レジスタ１１７の出力値をアドレス比較回路１１９に出力する。比較データ選択信号１２７が"１"の場合は、比較データ選択回路１２８は、比較データ・レジスタ１１７の出力値で示された汎用レジスタ１２３の出力値をアドレス比較回路１１９に出力する。
【００５９】
（詳細な作動：パターン５）
図１５は、ＣＰＵ１１２においてレジスタ間接アドレス指定の分岐命令が実行され、分岐動作が発生した場合のタイミングチャートである。ここでは、プログラムメモリ１１１のアドレス＄０４に記憶された分岐命令がレジスタ間接アドレス指定の分岐命令であり、分岐先アドレスとして汎用レジスタ１２３に格納されているデータが用いられる場合について説明する。
【００６０】
サイクルＴ１でプログラムカウンタ１１２ａにアドレス＄０４が設定されると、プログラムメモリ１１１のアドレス＄０４に記憶されていた分岐命令（Ｄ０４）がデータバス１１４に出力される。出力された分岐命令（D04）は、サイクルＴ２でＣＰＵ１１２と比較データ・レジスタ１１７に取り込まれる。ＣＰＵ１１２では取り込まれた分岐命令（D04）が実行される。分岐命令（Ｄ０４）が実行されると、サイクルＴ３のプログラムカウンタ１１２ａは分岐命令（Ｄ０４）の分岐先アドレスであるアドレス＄１７を示す。一方で、アドレスカウンタ１１５ａは、クロックパルスに同期してカウントアップを行っているため、サイクルＴ３では"４"を示す。よって、比較器１１５ｂで比較されるプログラムカウンタ１１２ａとアドレスカウンタ１１５ａの値が異なるため、サイクルＴ３で分岐検知回路１１５は分岐検知信号１１６を出力する。ＣＰＵ１１２は、分岐検知信号１１６が入力されると命令の実行を中断し、待機状態となる。アドレス比較回路１１９に分岐検知信号１１６が入力されると、分岐検知信号１１６が発生した時のプログラムカウンタ１１２ａの値と比較データバス１２９の値を取り込み、取り込んだデータの比較を行う。取り込まれたプログラムカウンタ１１２ａの出力値はサイクルＴ３で設定されていたアドレス＄１７であり、比較データバス１２９の値は比較データ選択信号１２７にて選択された値となる。比較データ選択信号１２７は、サイクルＴ２で読み出されたアドレス間接・フラグ信号１２５が"１"であるため、アドレス間接・フラグ保持回路１２６で保持された後のサイクルＴ３で"１"に設定される。よって、比較データ選択回路１２８は汎用レジスタ１２３の出力値である汎用レジスタデータバス１２４の値をサイクルＴ３で選択し比較データバス１２９に出力する。汎用レジスタデータバス１２４の値は、サイクルＴ３で比較データ・レジスタ１１７に格納されているデータをアドレスとして汎用レジスタ１２３から読み出されたデータとなる。ここでは、汎用レジスタの比較データ・レジスタ１１７で示されるレジスタに格納されているデータは、レジスタ間接アドレス指定の分岐先アドレスであるため、汎用レジスタデータバス１２４にはアドレス＄１７が出力される。そして、汎用レジスタデータバス１２４の値は、比較データバス１２９を介してサイクルＴ４でアドレス比較回路１１９に取り込まれる。よって、サイクルＴ４でアドレス比較回路１１９に取り込まれたデータの比較結果は一致するため、アドレス比較回路１１９は異常検出信号１３０を出力しない。仮に、プログラムカウンタ１１２ａの値がアドレス＄１７以外を示していた場合、アドレス比較回路１１９で比較される値は不一致となるため、アドレス比較回路１１９は異常検出信号１３０を出力する。アドレスカウンタ１１５ａは、分岐検知信号１１６が入力されるとサイクルＴ３のプログラムカウンタ１１２ａの値を取り込み、取り込んだ値に１を加算した値を新たな初期値としてカウントアップを継続する。
【００６１】
このように、実施例３では、プログラムメモリ１１１に１ビットのアドレス間接・フラグを追加し、プログラムメモリ１１１に記憶される分岐先アドレスが汎用レジスタを示すデータである場合にアドレス間接・フラグを"１"とし、アドレス比較回路１１９に取り込まれるデータを汎用レジスタからの出力信号とすることで、分岐命令がレジスタ間接アドレス指定の場合でも、問題なく異常動作の検出が可能となる。
【００６２】
なお、上記した実施例３では、プログラムメモリ１１１に１ビットのアドレス間接・フラグを追加して、プログラムメモリ１１１に記憶されている分岐命令がレジスタ間接アドレス指定であるか否かを判断していたが、アドレス間接・フラグを用意する事なく判別する事も可能である。例えば、１ＭＢの記憶領域を持ったプログラムメモリ１１１と命令長が３２ビットのＣＰＵ１１２とを有する場合、プログラムメモリ１１１のアドレスデータとして必要なデータのビット数は２０ビットとなる。命令長が３２ビットであるため、命令長とアドレスデータには１２ビットの差が生まれる。命令長とアドレスデータのビット数の差分に実施例２で示したアドレス・フラグと実施例３で示したアドレス間接・フラグを設けることでプログラムメモリ１１１に１ビットのアドレス・フラグと１ビットのアドレス間接・フラグを追加する事なく、プログラムメモリ１１１に記憶されているデータがアドレスであるか否か、及び、プログラムメモリ１１１に記憶されている分岐命令がレジスタ間接アドレス指定であるか否か、を判断することが可能となる。
【符号の説明】
【００６３】
１１  ＣＰＵ
１１ａ  プログラムカウンタ
１２  アドレスバス
１４  ＲＯＭ
１５  分岐先メモリ
２０  分岐先レジスタ
２１  アドレスインクリメンタ
２２  分岐検知回路
２３  分岐先アドレス比較回路
１１１  プログラムメモリ
１１２  ＣＰＵ
１１２ａ  プログラムカウンタ
１１３  アドレスバス
１１４  データバス
１１５  分岐検知回路
１１５ａ  アドレスカウンタ
１１５ｂ  比較器
１１６  分岐検知信号
１１７  比較データ・レジスタ
１１８  比較データ出力バス
１１９  アドレス比較回路
１２０  選択回路
１２１  ｎｏｐ命令出力回路
１２２  アドレス・フラグ信号
１２３  汎用レジスタ
１２４  汎用レジスタデータバス
１２５  アドレス間接・フラグ信号
１２６  アドレス間接・フラグ保持回路
１２７  比較データ選択信号
１２８  比較データ選択回路
１２９  比較データバス
【図１】
2011154459.tif 000003
【図２】
2011154459.tif 000004
【図３】
2011154459.tif 000005
【図４】
2011154459.tif 000006
【図５】
2011154459.tif 000007
【図６】
2011154459.tif 000008
【図７】
2011154459.tif 000009
【図８】
2011154459.tif 000010
【図９】
2011154459.tif 000011
【図１０】
2011154459.tif 000012
【図１１】
2011154459.tif 000013
【図１２】
2011154459.tif 000014
【図１３】
2011154459.tif 000015
【図１４】
2011154459.tif 000016
【図１５】
2011154459.tif 000017
【図１６】
2011154459.tif 000018
【図１７】
2011154459.tif 000019
【図１８】
2011154459.tif 000020
【図１９】
2011154459.tif 000021