(57)【特許請求の範囲】
【請求項１】
メモリと、
前記メモリにアクセスするＣＰＵと、
前記メモリへのアクセス発生時、アクセス対象データのデータ幅に依存して異なる係数と前記アクセス対象データとのＸＯＲ演算を行うＸＯＲ処理器と、
前記ＸＯＲ演算の演算結果に基づいて、前記アクセス対象データに関連するパリティビットを生成するパリティ生成回路と、
前記パリティ生成回路によって生成される前記パリティビットである第１パリティビットと、前記メモリから読み出される前記パリティビットである第２パリティビットとを受け取るパリティ処理回路と
を備え、
書き込みアクセス時、前記パリティ処理回路は、前記第１パリティビットを前記メモリに書き込み、
読み出しアクセス時、前記パリティ処理回路は、前記第１パリティビットと前記第２パリティビットとを比較し、前記第１パリティビットと前記第２パリティビットとが不一致である場合、割り込み信号を前記ＣＰＵに出力する
マイクロコンピュータ。
【請求項２】
請求項１に記載のマイクロコンピュータであって、
前記メモリへのアクセス発生時、前記ＣＰＵは、前記アクセス対象データの前記データ幅を示すサイズ指定信号を前記ＸＯＲ処理器へ出力し、
前記ＸＯＲ処理器は、前記サイズ指定信号で指定される前記データ幅に応じて、前記係数を決定する
マイクロコンピュータ。
【請求項３】
請求項２に記載のマイクロコンピュータであって、
前記アクセス対象データの前記データ幅に応じて決定する前記係数の値が、全て異なっている
マイクロコンピュータ。
【請求項４】
請求項１乃至３のいずれか一項に記載のマイクロコンピュータであって、
前記パリティ生成回路が前記パリティビットを生成する際のパリティモードは、偶数パリティモードあるいは奇数パリティモードのいずれかに固定される
マイクロコンピュータ。
【請求項５】
マイクロコンピュータにおけるハードウェア又はソフトウェア起因の異常メモリアクセス検出方法であって、
前記マイクロコンピュータは、
メモリと、
前記メモリにアクセスするＣＰＵと
を備え、
前記異常メモリアクセス検出方法は、
前記メモリへのアクセス発生時、アクセス対象データのデータ幅に依存して異なる係数と前記アクセス対象データとのＸＯＲ演算を行うステップと、
前記ＸＯＲ演算の演算結果に基づいて、前記アクセス対象データに関連するパリティビットを生成するステップと、
書き込みアクセス時、前記生成されたパリティビットを第１パリティビットとして前記メモリに書き込むステップと、
読み出しアクセス時、前記生成されたパリティビットである第１パリティビットと前記メモリから読み出される前記パリティビットである第２パリティビットとを比較するステップと、
前記第１パリティビットと前記第２パリティビットとが不一致である場合、割り込み信号を前記ＣＰＵに出力するステップと
を含む
マイクロコンピュータにおける異常メモリアクセス検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコンピュータにおける異常メモリアクセスの発生を検出するための技術に関する。
【背景技術】
【０００２】
近年、マイクロコンピュータを搭載した製品の安全性が重要視されている。特に、セキュリティ、医療、自動車等の分野において、安全性確保が重要な課題となってきている。安全性を高めるためには、マイクロコンピュータにおける異常動作の発生を検出し、システム障害を回避することが重要である。
【０００３】
特許文献１は、プログラム中に存在するバグ（例：変数の定義忘れ）を検出するための方法を開示している。その方法によれば、バグ検出の対象であるプログラムの実行前に、パリティモードが第１のモード（例：偶数パリティモード）に変更され、更に、メモリの所定の領域にデータとパリティビットが格納される。次に、パリティモードが第２のモード（例：奇数パリティモード）に変更され、プログラムが実行される。これにより、当該プログラム中における、変数の定義忘れ等のバグが検出される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開昭６１−２１０４４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載された技術の場合、パリティモードを切り替えるための専用の命令コードを追加する必要がある。このことは、プログラムコードのサイズの増加を招く。
【課題を解決するための手段】
【０００６】
本発明の１つの観点において、マイクロコンピュータが提供される。マイクロコンピュータは、メモリと、ＣＰＵと、ＸＯＲ処理器と、パリティ生成回路と、パリティ処理回路とを備える。ＣＰＵは、メモリにアクセスする。メモリへのアクセス発生時、ＸＯＲ処理器は、アクセス対象データのデータ幅に依存して異なる係数とアクセス対象データとのＸＯＲ演算を行う。パリティ生成回路は、ＸＯＲ演算の演算結果に基づいて、アクセス対象データに関連するパリティビットを生成する。パリティ処理回路は、パリティ生成回路によって生成されるパリティビットである第１パリティビットと、メモリから読み出されるパリティビットである第２パリティビットとを受け取る。書き込みアクセス時、パリティ処理回路は、第１パリティビットをメモリに書き込む。読み出しアクセス時、パリティ処理回路は、第１パリティビットと第２パリティビットとを比較し、第１パリティビットと第２パリティビットとが不一致である場合、割り込み信号をＣＰＵに出力する。
【０００７】
本発明の他の観点において、マイクロコンピュータにおける異常メモリアクセス検出方法が提供される。マイクロコンピュータは、メモリと、メモリにアクセスするＣＰＵとを備える。本発明に係る異常メモリアクセス検出方法は、（Ａ）メモリへのアクセス発生時、アクセス対象データのデータ幅に依存して異なる係数とアクセス対象データとのＸＯＲ演算を行うステップと、（Ｂ）ＸＯＲ演算の演算結果に基づいて、アクセス対象データに関連するパリティビットを生成するステップと、（Ｃ）書き込みアクセス時、生成されたパリティビットを第１パリティビットとしてメモリに書き込むステップと、（Ｄ）読み出しアクセス時、生成されたパリティビットである第１パリティビットとメモリから読み出されるパリティビットである第２パリティビットとを比較するステップと、（Ｅ）第１パリティビットと第２パリティビットとが不一致である場合、割り込み信号をＣＰＵに出力するステップと、を含む。
【発明の効果】
【０００８】
本発明によれば、余計な命令コードを追加することなく、マイクロコンピュータにおける異常メモリアクセスの発生を検出することが可能となる。
【図面の簡単な説明】
【０００９】
【図１】図１は、本発明の実施の形態に係るマイクロコンピュータの構成を示すブロック図である。
【図２】図２は、本発明の実施の形態に係るマイクロコンピュータの動作を示すフローチャートである。
【図３】図３は、本発明の実施の形態に係るマイクロコンピュータの動作の一例を説明するためのフローチャートである。
【図４】図４は、本発明の実施の形態に係るマイクロコンピュータによって実行されるプログラムの一例を示している。
【発明を実施するための形態】
【００１０】
添付図面を参照して、本発明の実施の形態を説明する。
【００１１】
１．構成
図１は、本実施の形態に係るマイクロコンピュータ１００の構成を示すブロック図である。マイクロコンピュータ１００は、メモリ１１０、ＣＰＵ１２０、ＸＯＲ処理器１３０、パリティ生成回路１４０、ＡＮＤ回路１１２、１１３、及びパリティ比較回路１５０を備えている。
【００１２】
メモリ１１０は、データ領域１１０Ａとパリティ領域１１０Ｂを含んでいる。データ領域１１０Ａにはデータが格納される。データ領域１１０Ａに書き込まれるデータは書き込みデータであり、データ領域１１０Ａから読み出されるデータは読み出しデータである。
【００１３】
一方、パリティ領域１１０Ｂにはパリティビットが格納される。パリティビットは、データ領域１１０Ａに格納されるデータ毎に生成され、当該データに関連付けられる。具体的には、データ領域１１０Ａ中のデータ格納アドレス毎に、パリティビットが格納されるパリティ領域１１０Ｂ中のアドレスが定められている。データ領域１１０Ａに書き込みデータが書き込まれる場合、その書き込みデータに関連付けられたパリティビットが、書き込みアドレスに対応するパリティ領域１１０Ｂ中のアドレスに書き込まれる。また、データ領域１１０Ｂから読み出しデータが読み出される場合、その読み出しデータに関連付けられたパリティビットが、読み出しアドレスに対応するパリティ領域１１０Ｂ中のアドレスから読み出される。
【００１４】
ＣＰＵ１２０は、メモリ１１０にアクセスする。具体的には、ＣＰＵ１２０は、アドレスバス１０１を通してアドレス信号をメモリ１１０に供給する。アドレス信号は、メモリ１１０中のアクセス対象アドレスを指定する。更に、ＣＰＵ１２０は、データバス１０２を通して書き込みデータをメモリ１１０に供給し、また、データバス１０２を通して読み出しデータをメモリ１１０から受け取る。また、ＣＰＵ１２０は、メモリ書き込み信号１０３及びメモリ読み出し信号１０４をメモリ１１０に供給する。書き込みアクセス時、メモリ書き込み信号１０３は“１”であり、メモリ読み出し信号１０４は“０”である。一方、読み出しアクセス時、メモリ書き込み信号１０３は“０”であり、メモリ読み出し信号１０４は“１”である。
【００１５】
また、ＣＰＵ１２０は、メモリ１１０へのアクセス（書き込みアクセス及び読み出しアクセス）時、データバスサイズ指定信号１０５をＸＯＲ処理器１３０に出力する。データバスサイズ指定信号１０５は、アクセス対象データのデータ幅を示す。アクセス対象データは、書き込みアクセスの場合は書き込みデータであり、読み出しアクセスの場合は読み出しデータである。アクセス対象データのデータ幅は、以下、「アクセスデータ幅」と参照される。
【００１６】
また、ＣＰＵ１２０は、パリティ比較回路１５０から出力される割り込み信号１０６（後述される）を受け取る。割り込み信号１０６を受け取ると、ＣＰＵ１２０は、メモリアクセスにおいて異常が発生したと判断し、異常発生に対応する処理を行う。
【００１７】
ＸＯＲ処理器１３０は、データバス１０２に接続されている。メモリ１１０へのアクセス発生時、ＸＯＲ処理器１３０は、データバス１０２からアクセス対象データ（書き込みデータあるいは読み出しデータ）を受け取る。また、ＸＯＲ処理器１３０は、ＣＰＵ１２０から出力されるデータバスサイズ指定信号１０５を受け取る。ＸＯＲ処理器１３０は、データバスサイズ指定信号１０５で指定されるアクセスデータ幅を参照し、そのアクセスデータ幅に依存して異なる「係数」を決定する。そして、ＸＯＲ処理器１３０は、その「係数」とアクセス対象データとのＸＯＲ演算を行う。更に、ＸＯＲ処理器１３０は、ＸＯＲ演算結果１３１をパリティ生成回路１４０に出力する。
【００１８】
上述の通り、ＸＯＲ処理器１３０が用いる係数は、アクセスデータ幅に応じて異なる。例として、アクセスデータ幅が８ビットの場合と１６ビットの場合を考える。例えば、８ビットの場合には係数として値“１”が用いられ、１６ビットの場合には係数として値“３”が用いられる。ここで、８ビットの場合の係数“１”中のビット１の個数は奇数（１個）であり、１６ビットの場合の係数“３”中のビット１の個数は偶数（２個）であることに留意されたい。
【００１９】
パリティ生成回路１４０は、ＸＯＲ処理器１３０から出力されるＸＯＲ演算結果１３１を受け取る。そして、パリティ生成回路１４０は、そのＸＯＲ演算結果１３１に基づいて、アクセス対象データに関連するパリティビットを生成する。ここで、本実施の形態によれば、パリティビットを生成する際のパリティモードは、偶数パリティモードあるいは奇数パリティモードのいずれかに固定される。つまり、パリティモードの切り替えは行われない。パリティ生成回路１４０によって生成されるパリティビットは、以下、「第１パリティビットＰＲ１」と参照される。パリティ生成回路１４０は、第１パリティビットＰＲ１をＡＮＤ回路１１２、１１３に出力する。
【００２０】
ＡＮＤ回路１１２には、メモリ書き込み信号１０３及び第１パリティビットＰＲ１が入力される。書き込みアクセス時、メモリ書き込み信号１０３は“１”であり、ＡＮＤ回路１１２は第１パリティビットＰＲ１を出力する。その第１パリティビットＰＲ１は、書き込みアドレスに対応するパリティ領域１１０Ｂ中のアドレスに格納される。つまり、書き込みアクセス時、書き込みデータがデータ領域１１０Ａに格納されると共に、その書き込みデータに関連する第１パリティビットＰＲ１がパリティ領域１１０Ｂに格納される。
【００２１】
ＡＮＤ回路１１３には、メモリ読み出し信号１０４と第１パリティビットＰＲ１が入力される。読み出しアクセス時、メモリ読み出し信号１０４は“１”であり、ＡＮＤ回路１１３は第１パリティビットＰＲ１を出力する。その第１パリティビットＰＲ１は、パリティ比較回路１５０に入力される。
【００２２】
読み出しアクセス時、読み出しデータがデータ領域１１０Ａから読み出されると共に、その読み出しデータに関連するパリティビットがパリティ領域１１０Ｂから読み出される。読み出しアクセス時に読み出しアドレスに対応するパリティ領域１１０Ｂ中のアドレスから読み出されるパリティビットは、以下、「第２パリティビットＰＲ２」と参照される。その第２パリティビットＰＲ２は、パリティ比較回路１５０に入力される。
【００２３】
パリティ比較回路１５０は、読み出しアクセス時、第１パリティビットＰＲ１と第２パリティビットＰＲ２を受け取り、それら第１パリティビットＰＲ１と第２パリティビットＰＲ２の比較を行う。プログラムが正確に記述され、メモリアクセスが正常に行われていれば、第１パリティビットＰＲ１と第２パリティビットＰＲ２とは一致するはずである。逆に言えば、第１パリティビットＰＲ１と第２パリティビットＰＲ２とが一致しないことは、メモリアクセスに何らかの異常が発生していることを意味する。従って、第１パリティビットＰＲ１と第２パリティビットＰＲ２とが不一致である場合、パリティ比較回路１５０は、ＣＰＵ１２０に割り込み信号１０６を出力する。
【００２４】
上述のＡＮＤ回路１１２、１１３、及びパリティ比較回路１５０は、「パリティ処理回路」を構成している。書き込みアクセス時、パリティ処理回路は、第１パリティビットＰＲ１をメモリ１１０のパリティ領域１１０Ｂに書き込む。読み出しアクセス時、パリティ処理回路は、第１パリティビットＰＲ１と第２パリティビットＰＲ２とを比較する。そして、第１パリティビットＰＲ１と第２パリティビットＰＲ２とが不一致である場合、パリティ処理回路は、割り込み信号１０６をＣＰＵ１２０に出力する。
【００２５】
２．動作
２−１．動作フロー
図２は、本形態に係るマイクロコンピュータ１００の動作を示すフローチャートである。図１及び図２を参照して、本形態に係るマイクロコンピュータ１００の動作フローを説明する。尚、アクセスデータ幅は８ビットあるいは１６ビットであり、ＸＯＲ処理器１３０が用いる係数は、８ビットの場合“１”であり、１６ビットの場合“３”であるとする。
【００２６】
ＣＰＵ１２０は、アドレスバス１０１を通してアドレス信号をメモリ１１０に供給する（ステップＳ２０１）。ＣＰＵ１２０は、メモリアクセスの種類を判断する（ステップＳ２０２）。書き込みアクセスの場合（ステップＳ２０２；Ｙｅｓ）、ＣＰＵ１２０は、メモリ書き込み信号１０３を出力し、また、データバス１０２を通して書き込みデータをメモリ１１０に供給する（ステップＳ２０３）。一方、読み出しアクセスの場合（ステップＳ２０２；Ｎｏ）、ＣＰＵ１２０は、メモリ読み出し信号１０４を出力し、また、データバス１０２を通して読み出しデータをメモリ１１０から受け取る（ステップＳ２０４）。
【００２７】
また、ＣＰＵ１２０は、アクセスデータ幅を示すデータバスサイズ指定信号１０５をＸＯＲ処理器１３０に出力する。ＸＯＲ処理器１３０は、データバスサイズ指定信号１０５によって指定されたアクセスデータ幅が８ビットか１６ビットかを判定する（ステップＳ２０５）。８ビットの場合（ステップＳ２０５；Ｙｅｓ）、ＸＯＲ処理器１３０は、係数“１”とアクセス対象データとのＸＯＲ演算を行い、ＸＯＲ演算結果１３１をパリティ生成回路１４０に出力する（ステップＳ２０６）。一方、１６ビットの場合（ステップＳ２０５；Ｎｏ）、ＸＯＲ処理器１３０は、係数“３”とアクセス対象データとのＸＯＲ演算を行い、ＸＯＲ演算結果１３１をパリティ生成回路１４０に出力する（ステップＳ２０７）。
【００２８】
パリティ生成回路１４０は、ＸＯＲ演算結果１３１に基づいて、第１パリティビットＰＲ１を生成する（ステップＳ２０８）。
【００２９】
書き込みアクセスの場合（ステップＳ２０９；Ｙｅｓ）、第１パリティビットＰＲ１が、書き込みアドレスに対応するパリティ領域１１０Ｂ中のアドレスに格納される（ステップＳ２１０）。そして、メモリアクセス処理が終了する。
【００３０】
一方、読み出しアクセスの場合（ステップＳ２０９；Ｎｏ）、第２パリティビットＰＲ２が、読み出しアドレスに対応するパリティ領域１１０Ｂ中のアドレスから読み出される。パリティ比較回路１５０は、第１パリティビットＰＲ１と第２パリティビットＰＲ２を受け取り、それら第１パリティビットＰＲ１と第２パリティビットＰＲ２の比較を行う（ステップＳ２１１）。第１パリティビットＰＲ１と第２パリティビットＰＲ２が一致している場合（ステップＳ２１１；Ｙｅｓ）、メモリアクセス処理は終了する。一方、第１パリティビットＰＲ１と第２パリティビットＰＲ２とが不一致である場合（ステップＳ２１１；Ｎｏ）、パリティ比較回路１５０は、ＣＰＵ１２０に割り込み信号１０６を出力する（ステップＳ２１２）。割り込み信号１０６を受け取ると、ＣＰＵ１２０は、メモリアクセスにおいて異常が発生したと判断し、異常発生に対応する処理を行う（ステップＳ２１３）。
【００３１】
２−２．動作例
図３は、本実施の形態に係るマイクロコンピュータ１００が図４に示されるプログラムを実行する場合の動作例を示すフローチャートである。図３及び図４を参照して、本実施の形態の動作の一例を説明する。
【００３２】
図４に示されるプログラムは、３つの関数ｆｕｎｃ１、ｆｕｎｃ２、ｍａｉｎを含んでいる。関数ｆｕｎｃ１において利用されるｃｈａｒ型の変数Ａと、関数ｆｕｎｃ２において利用されるｉｎｔ型の変数Ｂは、共に自動変数であり、スタックポインタ上の同じメモリアドレスに定義されるとする。また、ｃｈａｒ型の変数Ａは８ビットであり、ｉｎｔ型の変数Ｂは１６ビットであるとする。
【００３３】
プログラムは、１３行目の関数ｍａｉｎから開始する。１４行目で関数ｆｕｎｃ１が呼び出され、１〜６行目に記述されている関数ｆｕｎｃ１の処理が実行される。関数ｆｕｎｃ１は、３行目でｃｈａｒ型の変数Ａに値を設定し、４行目で変数Ａの値を参照する。処理が関数ｍａｉｎに戻った後、１５行目で関数ｆｕｎｃ２が呼び出され、７〜１２行目に記述されている関数ｆｕｎｃ２の処理が実行される。関数ｆｕｎｃ２は、９行目でｉｎｔ型の変数Ｂに値を設定し、１０行目で変数Ｂの値を参照する。
【００３４】
ステップＳ３０１：
ＣＰＵ１２０が図４に示されるプログラムの実行を開始すると、まず、関数ｆｕｎｃ１が呼び出される。
【００３５】
ステップＳ３０２：
３行目で、ｃｈａｒ型の変数Ａに“０”が設定される。この場合、メモリ１１０のデータ領域１１０Ａ中の第１アドレスにデータ“０”が書き込まれる（ステップＳ２０３）。アクセス対象がｃｈａｒ型の変数Ａ（８ビット）であるため（ステップＳ２０５；Ｙｅｓ）、ＸＯＲ処理器１３０は、８ビット用の係数“１”と書き込みデータ“０”とのＸＯＲ演算を実行し、ＸＯＲ演算結果“１”をパリティ生成回路１４０に出力する（ステップＳ２０６）。本例では、パリティ生成回路１４０は、偶数パリティモードでパリティビットを生成するとする。この場合、パリティ生成回路１４０は、ＸＯＲ演算結果“１”に基づいて、パリティビット“１”を生成する（ステップＳ２０８）。生成されたパリティビット“１”は、メモリ１１０のパリティ領域１１０Ｂ中の対応アドレスに格納される（ステップＳ２１０）。
【００３６】
ステップＳ３０３：
４行目で、演算のため、変数Ａの値が参照される。この場合、メモリ１１０のデータ領域１１０Ａ中の第１アドレスからデータ“０”が読み出される（ステップＳ２０４）。アクセス対象がｃｈａｒ型の変数Ａ（８ビット）であるため（ステップＳ２０５；Ｙｅｓ）、ＸＯＲ処理器１３０は、８ビット用の係数“１”と読み出しデータ“０”とのＸＯＲ演算を実行し、ＸＯＲ演算結果“１”をパリティ生成回路１４０に出力する（ステップＳ２０６）。パリティ生成回路１４０は、ＸＯＲ演算結果“１”に基づいて、パリティビット“１”を生成する（ステップＳ２０８）。パリティ比較回路１５０は、本ステップＳ３０３で生成されたパリティビット“１”（第１パリティビットＰＲ１）と、ステップＳ３０２で格納された対応するパリティビット“１”（第２パリティビットＰＲ２）とを比較する（ステップＳ２１１）。両者は一致するため（ステップＳ２１１；Ｙｅｓ）、読み出しアクセス処理は正常に終了する。
【００３７】
ステップＳ３０４：
関数ｆｕｎｃ１が終了し、処理は関数ｍａｉｎに戻る。
【００３８】
ステップＳ３０５：
次に、関数ｆｕｎｃ２が呼び出される。ここで、正常動作の場合（ステップＳ３０６；Ｙｅｓ、ステップＳ３０７〜Ｓ３０９）と、異常メモリアクセスが発生する場合（ステップＳ３０６；Ｎｏ、ステップＳ３１０）の２通りを考える。
【００３９】
ステップＳ３０７：
まず、正常動作の場合、９行目で、ｉｎｔ型の変数Ｂに“８”が設定される。この場合、メモリ１１０のデータ領域１１０Ａ中の第１アドレスにデータ“８”が書き込まれる（ステップＳ２０３）。アクセス対象がｉｎｔ型の変数Ｂ（１６ビット）であるため（ステップＳ２０５；Ｎｏ）、ＸＯＲ処理器１３０は、１６ビット用の係数“３”と書き込みデータ“８”とのＸＯＲ演算を実行し、ＸＯＲ演算結果“１１”をパリティ生成回路１４０に出力する（ステップＳ２０６）。パリティ生成回路１４０は、ＸＯＲ演算結果“１１”に基づいて、パリティビット“１”を生成する（ステップＳ２０８）。生成されたパリティビット“１”は、メモリ１１０のパリティ領域１１０Ｂ中の対応アドレスに格納される（ステップＳ２１０）。
【００４０】
ステップＳ３０８：
１０行目で、演算のため、変数Ｂの値が参照される。この場合、メモリ１１０のデータ領域１１０Ａ中の第１アドレスからデータ“８”が読み出される（ステップＳ２０４）。アクセス対象がｉｎｔ型の変数Ｂ（１６ビット）であるため（ステップＳ２０５；Ｎｏ）、ＸＯＲ処理器１３０は、１６ビット用の係数“３”と読み出しデータ“８”とのＸＯＲ演算を実行し、ＸＯＲ演算結果“１１”をパリティ生成回路１４０に出力する（ステップＳ２０６）。パリティ生成回路１４０は、ＸＯＲ演算結果“１１”に基づいて、パリティビット“１”を生成する（ステップＳ２０８）。パリティ比較回路１５０は、本ステップＳ３０８で生成されたパリティビット“１”（第１パリティビットＰＲ１）と、ステップＳ３０７で格納された対応するパリティビット“１”（第２パリティビットＰＲ２）とを比較する（ステップＳ２１１）。両者は一致するため（ステップＳ２１１；Ｙｅｓ）、読み出しアクセス処理は正常に終了する。
【００４１】
ステップＳ３０９：
関数ｆｕｎｃ２が終了し、処理は関数ｍａｉｎに戻る。
【００４２】
次に、異常メモリアクセス（ハードウェア起因／ソフトウェア起因）が発生する場合を考える。例として、９行目の「Ｂ＝８」でメモリアクセスに異常が発生し、メモリ１１０のデータ領域１１０Ａ中の第１アドレスにデータ“８”が書き込まれなかったとする。
【００４３】
ステップＳ３１０：
１０行目で、演算のため、変数Ｂの値が参照される。この場合、メモリ１１０のデータ領域１１０Ａ中の第１アドレスから、上記ステップＳ３０２で書き込まれたデータ“０”が読み出される（ステップＳ２０４）。しかしながら、アクセス対象がｉｎｔ型の変数Ｂ（１６ビット）であるため（ステップＳ２０５；Ｎｏ）、ＸＯＲ処理器１３０は、１６ビット用の係数“３”と読み出しデータ“０”とのＸＯＲ演算を実行し、ＸＯＲ演算結果“３”をパリティ生成回路１４０に出力する（ステップＳ２０６）。パリティ生成回路１４０は、ＸＯＲ演算結果“３”に基づいて、パリティビット“０”を生成する（ステップＳ２０８）。パリティ比較回路１５０は、本ステップＳ３１０で生成されたパリティビット“０”（第１パリティビットＰＲ１）と、上記ステップＳ３０２で格納された対応するパリティビット“１”（第２パリティビットＰＲ２）とを比較する（ステップＳ２１１）。両者は不一致であるため（ステップＳ２１１；Ｎｏ）、パリティ比較回路１５０は、ＣＰＵ１２０に割り込み信号１０６を出力する（ステップＳ２１２）。割り込み信号１０６を受け取ると、ＣＰＵ１２０は、メモリアクセスにおいて異常が発生したと判断し、異常発生に対応する処理を行う（ステップＳ２１３）。
【００４４】
３．効果
以上に説明されたように、本実施の形態のマイクロコンピュータ１００によれば、メモリ１１０に対する異常アクセスや不正アクセスの発生を検出することが可能である。例えば、アクセス対象の変数型の不一致を検出することができる。このとき、上述の特許文献１のようにパリティモードを切り替える必要はない。すなわち、本実施の形態によれば、余計な命令コードを追加することなく、マイクロコンピュータ１００における異常メモリアクセスの発生を検出することが可能となる。
【００４５】
以上、本発明の実施の形態が添付の図面を参照することにより説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。
【符号の説明】
【００４６】
１００    マイクロコンピュータ
１０１    アドレスバス
１０２    データバス
１０３    メモリ書き込み信号
１０４    メモリ読み出し信号
１０５    データバスサイズ指定信号
１０６    割り込み信号
１１０    メモリ
１１０Ａ  データ領域
１１０Ｂ  パリティ領域
１１２    ＡＮＤ回路
１１３    ＡＮＤ回路
１２０    ＣＰＵ
１３０    ＸＯＲ処理器
１３１    ＸＯＲ演算結果
１４０    パリティ生成回路
１５０    パリティ比較回路
【図１】
0005529794.tif 000002
【図２】
0005529794.tif 000003
【図３】
0005529794.tif 000004
【図４】
0005529794.tif 000005