(57)【特許請求の範囲】
【請求項１】
第１の演算ユニットと第２の演算ユニットを含む複数の演算ユニットと、
データの書き込み及び読み出し能力の検査を前記演算ユニットそれぞれに実行させるためのプログラムを記憶する不揮発性メモリと、
データを一時的に記憶するワーク領域を有する揮発性メモリと、
を備える演算装置であって、
前記揮発性メモリは、さらに、前記第１の演算ユニットが前記検査中に用いるデータを記憶する第１のスタック領域と、前記第２の演算ユニットが前記検査中に用いるデータを記憶する第２のスタック領域と、を含む複数のスタック領域を有し、
前記第１の演算ユニットは前記第２のスタック領域の前記書き込み及び読み出し能力を検査し、前記第２の演算ユニットは前記第１のスタック領域の前記書き込み及び読み出し能力を検査し、前記第１の演算ユニットと前記第２の演算ユニットの少なくとも一方は前記ワーク領域の前記書き込み及び読み出し能力を検査することを特徴とする演算装置。
【請求項２】
前記演算ユニットは、それぞれ、データを一時的に記憶するレジスタを備えており、
前記第１の演算ユニットは前記第２の演算ユニットが備えるレジスタの前記書き込み及び読み出し能力をさらに検査し、前記第２の演算ユニットは前記第１の演算ユニットが備えるレジスタの前記書き込み及び読み出し能力をさらに検査することを特徴とする請求項１に記載の演算装置。
【請求項３】
前記第１の演算ユニットは前記ワーク領域における一部の領域の前記書き込み及び読み出し能力を検査し、前記第２の演算ユニットは前記ワーク領域における前記一部の領域を除く残りの領域の前記書き込み及び読み出し能力を検査することを特徴とする請求項１または２に記載の演算装置。
【請求項４】
第１の演算ユニットと第２の演算ユニットを含む複数の演算ユニットと、
データの書き込み及び読み出し能力の検査を前記演算ユニットそれぞれに実行させるためのプログラムを記憶する不揮発性メモリと、
データを一時的に記憶するワーク領域と、前記第１の演算ユニットが前記検査中に用いるデータを記憶する第１のスタック領域、及び前記第２の演算ユニットが前記検査中に用いるデータを記憶する第２のスタック領域を含む複数のスタック領域とを有する揮発性メモリと、
を備えるプロセッサにおける演算方法であって、
前記第１の演算ユニットが前記第２のスタック領域の前記書き込み及び読み出し能力を検査するステップと、
前記第２の演算ユニットが前記第１のスタック領域の前記書き込み及び読み出し能力を検査するステップと、
前記第１の演算ユニットと前記第２の演算ユニットの少なくとも一方が前記ワーク領域の前記書き込み及び読み出し能力を検査するステップと、
を含むことを特徴とする演算方法。
【請求項５】
第１の演算ユニットと第２の演算ユニットを含む複数の演算ユニットと、
データの書き込み及び読み出し能力の検査を前記演算ユニットそれぞれに実行させるためのプログラムを記憶する不揮発性メモリと、
データを一時的に記憶するワーク領域と、前記第１の演算ユニットが前記検査に用いるデータを記憶する第１のスタック領域、及び前記第２の演算ユニットが前記検査に用いるデータを記憶する第２のスタック領域を含む複数のスタック領域とを有する揮発性メモリと、
を備えるプロセッサに、
前記第１の演算ユニットが前記第２のスタック領域の前記書き込み及び読み出し能力を検査するステップと、
前記第２の演算ユニットが前記第１のスタック領域の前記書き込み及び読み出し能力を検査するステップと、
前記第１の演算ユニットと前記第２の演算ユニットの少なくとも一方が前記ワーク領域の前記書き込み及び読み出し能力を検査するステップと、
を実行させることを特徴とする演算プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自己診断を実行するマイクロプロセッサ等の技術分野に関する。
【背景技術】
【０００２】
マイクロプロセッサを構成する多くの素子は半導体であり、半導体は結晶の状態や、あるいは経年劣化等の原因によって故障する可能性がある。特に、セキュリティを目的とするスマートカードや、機能安全を目的とする車載、航空、宇宙等の分野に使用されるマイクロプロセッサは、高い精度の故障検知能力が要求されている。故障検知のための有効な手段として、マイクロプロセッサの自己診断が知られている。これは、メモリやレジスタの書き込み及び読み出し能力（例えば、あるデータを書き込んだ後に読み出し、書き込んだデータと読み出したデータが一致するか）を検査したり、演算能力（例えば、乱数生成器を連続実行しても同じ値が出力されないか、ＲＳＡによる暗号化を実行すると想定通りの答えが出力されるか）を検査するものである。このような自己診断は、例えば、マイクロプロセッサが起動されるたびに実行される。これはスタートアップ処理やブートストラップ処理と呼ばれる処理中に実行されるものであり、マイクロプロセッサが起動するたびに正常に動作することを試し、正常な動作が確認された素子を使用して重要な処理を実行するものである。また、マイクロプロセッサが搭載されるＩＣカードにおける自己診断は、ＩＣカードの活性化後に外部装置に対して行われる初期応答情報（ＡＴＲ）の出力前に実行されるようになっている（特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−２５２２８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、自己診断の実行中にマイクロプロセッサが用いるスタックを記憶しておく揮発性メモリの一部の領域や、自己診断のためにメモリから読み出されたデータを一時的に記憶しておくレジスタは、自己診断により使用されるため、検査対象とすることはできない。そのため、この揮発性メモリの一部に発生した故障は、自己診断とは別の何らかの要因によって偶発的に検知されることになり、特に高い精度の故障検知能力が要求される製品分野では問題となっていた。
【０００５】
そこで、本発明は、上記問題等に鑑みてなされたものであり、自己診断のために用いられる領域の検査を効率良く実行することが可能な演算装置、演算方法、及び演算プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、請求項１に記載の発明は、第１の演算ユニットと第２の演算ユニットを含む複数の演算ユニットと、データの書き込み及び読み出し能力の検査を前記演算ユニットそれぞれに実行させるためのプログラムを記憶する不揮発性メモリと、データを一時的に記憶するワーク領域を有する揮発性メモリと、を備える演算装置であって、前記揮発性メモリは、さらに、前記第１の演算ユニットが前記検査中に用いるデータを記憶する第１のスタック領域と、前記第２の演算ユニットが前記検査中に用いるデータを記憶する第２のスタック領域と、を含む複数のスタック領域を有し、前記第１の演算ユニットは前記第２のスタック領域の前記書き込み及び読み出し能力を検査し、前記第２の演算ユニットは前記第１のスタック領域の前記書き込み及び読み出し能力を検査し、前記第１の演算ユニットと前記第２の演算ユニットの少なくとも一方は前記ワーク領域の前記書き込み及び読み出し能力を検査することを特徴とする。
【０００７】
請求項２に記載の発明は、請求項１に記載の演算装置において、前記演算ユニットは、それぞれ、データを一時的に記憶するレジスタを備えており、前記第１の演算ユニットは前記第２の演算ユニットが備えるレジスタの前記書き込み及び読み出し能力をさらに検査し、前記第２の演算ユニットは前記第１の演算ユニットが備えるレジスタの前記書き込み及び読み出し能力をさらに検査することを特徴とする。
【０００８】
請求項３に記載の発明は、請求項１または２に記載の演算装置において、前記第１の演算ユニットは前記ワーク領域における一部の領域の前記書き込み及び読み出し能力を検査し、前記第２の演算ユニットは前記ワーク領域における前記一部の領域を除く残りの領域の前記書き込み及び読み出し能力を検査することを特徴とする。
【０００９】
請求項４に記載の発明は、第１の演算ユニットと第２の演算ユニットを含む複数の演算ユニットと、データの書き込み及び読み出し能力の検査を前記演算ユニットそれぞれに実行させるためのプログラムを記憶する不揮発性メモリと、データを一時的に記憶するワーク領域と、前記第１の演算ユニットが前記検査中に用いるデータを記憶する第１のスタック領域、及び前記第２の演算ユニットが前記検査中に用いるデータを記憶する第２のスタック領域を含む複数のスタック領域とを有する揮発性メモリと、を備えるプロセッサにおける演算方法であって、前記第１の演算ユニットが前記第２のスタック領域の前記書き込み及び読み出し能力を検査するステップと、前記第２の演算ユニットが前記第１のスタック領域の前記書き込み及び読み出し能力を検査するステップと、前記第１の演算ユニットと前記第２の演算ユニットの少なくとも一方が前記ワーク領域の前記書き込み及び読み出し能力を検査するステップと、を含むことを特徴とする。
【００１０】
請求項５に記載の発明は、第１の演算ユニットと第２の演算ユニットを含む複数の演算ユニットと、データの書き込み及び読み出し能力の検査を前記演算ユニットそれぞれに実行させるためのプログラムを記憶する不揮発性メモリと、データを一時的に記憶するワーク領域と、前記第１の演算ユニットが前記検査に用いるデータを記憶する第１のスタック領域、及び前記第２の演算ユニットが前記検査に用いるデータを記憶する第２のスタック領域を含む複数のスタック領域とを有する揮発性メモリと、を備えるプロセッサに、前記第１の演算ユニットが前記第２のスタック領域の前記書き込み及び読み出し能力を検査するステップと、前記第２の演算ユニットが前記第１のスタック領域の前記書き込み及び読み出し能力を検査するステップと、前記第１の演算ユニットと前記第２の演算ユニットの少なくとも一方が前記ワーク領域の前記書き込み及び読み出し能力を検査するステップと、を実行させることを特徴とする。
【発明の効果】
【００１１】
本発明によれば、第１の演算ユニットが第２のスタック領域の書き込み及び読み出し能力を検査し、第２の演算ユニットが第１のスタック領域の書き込み及び読み出し能力を検査するように構成したので、自己診断のために用いられるスタック領域の検査を効率良く実行することができる。
【図面の簡単な説明】
【００１２】
【図１】（Ａ）は、ＩＣチップＣの概要構成例を示す図である。ＩＣチップＣは、本発明の演算装置の一例である。（Ｂ）は、ＲＡＭ３の記憶領域の構成例を示す図である。（Ｃ）は、自己診断における検査プログラムのソースの一例を示す図である。
【図２】図２は、ＩＣチップＣの起動時におけるコア１とコア２の自己診断に係る処理フローを示す図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照して本発明の実施形態について詳細に説明する。以下に説明する実施形態は、マイクロプロセッサであるコアを複数備えるＩＣチップに対して本発明を適用した場合の実施の形態である。
【００１４】
先ず、図１を参照して、本実施形態に係るＩＣチップの概要構成について説明する。図１（Ａ）は、ＩＣチップＣの概要構成例を示す図である。ＩＣチップＣは、本発明の演算装置の一例である。なお、ＩＣチップＣは、キャッシュカード、クレジットカード、社員カード等に搭載されて使用される。或いは、ＩＣチップＣは、スマートフォンや携帯電話機等の通信機器に組み込まれる。ＩＣチップＣは、通信機器の回路基板上に直接組み込んで構成するようにしてもよい。
【００１５】
ＩＣチップＣは、図１（Ａ）に示すように、コア１、コア２、ＲＡＭ（Random Access Memory）３、フラッシュメモリ４、ＲＯＭ（Read Only Memory）５、及びＩ／Ｏ回路６を備えて構成される。コア１は、第１の演算ユニットの一例である。コア２は、第２の演算ユニットの一例である。コア１とコア２とは並列処理が可能に構成されている。コア１、コア２、ＲＡＭ３、フラッシュメモリ４、ＲＯＭ５、及びＩ／Ｏ回路６は、バス７に接続されている。バス７は、アドレスバスとデータバスを備える。フラッシュメモリ４及びＲＯＭ５は、不揮発性メモリの一例である。フラッシュメモリ４の代わりに、「Electrically Erasable Programmable Read-Only Memory」を適用しても構わない。
【００１６】
図１（Ｂ）は、ＲＡＭ３の記憶領域の構成例を示す図である。ＲＡＭ３（揮発性メモリの一例）は、図１（Ｂ）に示すように、コア１用スタック領域３１、コア２用スタック領域３２、及びデータを一時的に記憶する汎用領域３３を有する。コア１用スタック領域３１は、コア１が自己診断の実行中に用いる参照用データを記憶する第１のスタック領域の一例である。コア２用スタック領域３２は、コア２が自己診断の実行中に用いる参照用データを記憶する第２のスタック領域の一例である。スタック領域は、最初に入力されたデータを後に出力する（First In, Last Out）という特徴を持つ。自己診断の実行中に用いられる参照用データには、例えば、自己診断の対象となるデータの長さ、自己診断中に関数等を呼び出すときの引数、当該関数等の呼び出し元のアドレス（番地）、及び戻り先のアドレス等が含まれる。
【００１７】
フラッシュメモリ４には、プログラムメモリとデータメモリを備える。プログラムメモリには、コア１とコア２に実行させるためのプログラムを構成する複数の命令コードが記憶（格納）される。データメモリには、各種データが記憶される。各種プログラムの中には、自己診断プログラムが含まれる。自己診断プログラムは、データの書き込み及び読み出し能力の検査を含む自己診断をコア１とコア２それぞれに実行させるためのプログラムである。なお、ＲＯＭ５には、フラッシュメモリ４に記憶されるプログラムの一部が記憶されてもよい。
【００１８】
図１（Ｃ）は、自己診断における検査プログラムのソースの一例を示す図である。コア１が書き込み及び読み出し能力の検査を行う場合、図１（Ｃ）に示す“Start Addr”は、コア２用スタック領域３２の検査開始アドレス（先頭アドレス）を示す。つまり、コア２用スタック領域３２の検査は、コア１により実行される。コア２が書き込み及び読み出し能力の検査を行う場合、図１（Ｃ）に示す“Start Addr”は、コア１用スタック領域３１の検査開始アドレスを示す。つまり、コア１用スタック領域３１の検査は、コア２により実行される。図１（Ｃ）に示す“length”は、検査対象となるデータの長さ（つまり、スタック領域のサイズに相当）を示す。図１（Ｃ）に示す“test Addr”は、検査対象アドレス（検査開始アドレスから検査終了アドレスまで）を示す。そして、図１（Ｃ）に示す自己診断プログラムによれば、検査対象アドレスに対応する検査対象領域にデータ“５Ａ（ｈ）”（ｈは１６進数を示す）が書き込まれた後、当該検査対象領域からデータが読み出され、読み出されたデータと書き込まれたデータ“５Ａ（ｈ）”とが一致するかがチェックされる。そして、両データが一致しない場合、動作停止（“ＨＡＬＴ”）となる。一方、両データが一致する場合、当該検査対象アドレスに対応する検査対象領域にデータ“Ａ５（ｈ）”が書き込まれた後、当該検査対象領域からデータが読み出され、読み出されたデータと書き込まれたデータ“Ａ５（ｈ）”とが一致するかがチェックされる。そして、両データが一致しない場合、動作停止（“ＨＡＬＴ”）となる。一方、両データが一致する場合、次の検査対象アドレスに進み、上記と同様の処理が行われる（処理ループが繰り返される）。こうして、スタック領域全体について、データの書き込み及び読み出し能力の検査が行われることになる。なお、図１（Ｃ）の例では、検査対象領域をスタック領域としたが、コア１とコア２内のレジスタ（データを一時的に記憶するレジスタ）を検査対象領域としてもよい。この場合、コア２内のレジスタの検査は、コア１により実行され、コア１内のレジスタの検査は、コア２により実行される。
【００１９】
Ｉ／Ｏ回路６は、外部端末とのインターフェイスを担う。接触式のＩＣチップＣの場合、Ｉ／Ｏ回路６には、例えば、Ｃ１〜Ｃ８の８個の端子が備えられている。例えば、Ｃ１端子は電源端子、Ｃ２端子はリセット端子、Ｃ３端子はクロック端子、Ｃ５端子はグランド端子、Ｃ７端子は外部端末との間で通信を行うための端子である。一方、非接触式のＩＣチップＣの場合、Ｉ／Ｏ回路６には、例えば、アンテナ、及び変復調回路が備えられている。なお、外部端末の例としては、ＩＣカード発行機、ＡＴＭ、改札機、認証用ゲート等が挙げられる。或いは、ＩＣチップＣが通信機器に組み込まれる場合、外部端末には通信機器の機能を担う制御部が該当する。
【００２０】
コア１は、演算器１１、内部メモリ１２、プログラムカウンタ１３、及び割込みコントローラ１４を備える。コア２は、演算器２１、内部メモリ２２、プログラムカウンタ２３、及び割込みコントローラ２４を備える。演算器１１，２１は、それぞれ、命令レジスタ及びデコーダを備える。内部メモリ１２，２２は、それぞれ、データレジスタを備える。プログラムカウンタ１３，２３は、次に実行されるべき命令コードが記憶されているプログラムメモリ上のアドレスを保持する。割込みコントローラ１４と割込みコントローラ２４とは、バス７を介さずにデータ送受信可能に構成されている。
【００２１】
演算器１１，２１は、それぞれ、プログラムカウンタ１３,２３が指し示すアドレスに記憶されている命令コードを、フラッシュメモリ４内のプログラムメモリから命令レジスタにフェッチ（取得）する。そして、演算器１１，２１は、取得した命令コードをデコーダによって解釈（デコード）し、解釈した命令コードに従って処理を実行し（例えば、四則演算、論理演算等の演算処理を実行し）、当該処理の結果を示すデータを内部メモリ１２,２２のデータレジスタに記憶する。プログラムカウンタ１３,２３は、演算器１１，２１により命令コードが実行されるたびに、例えば３バイトまたは４バイトずつアドレスを進める。これにより、複数の命令コードから構成されるプログラムが実行される。割込みコントローラ１４は、内部メモリ１２にアクセス可能になっており、内部メモリ１２内のデータレジスタから読み出したデータを、フラッシュメモリ４内のデータメモリに書き込む。一方、割込みコントローラ２４は、内部メモリ２２にアクセス可能になっており、内部メモリ２２内のデータレジスタから読み出したデータを、フラッシュメモリ４内のデータメモリに書き込む。更に、割込みコントローラ１４は、コア２がＳｌｅｅｐ（スリープ）しているときに、コア２の割込みコントローラ２４へＳｌｅｅｐ解除指令を送ることで、コア２のＳｌｅｅｐを解除することができる。一方、割込みコントローラ２４は、コア１がＳｌｅｅｐ（スリープ）しているときに、コア１の割込みコントローラ１４へＳｌｅｅｐ解除指令を送ることで、コア１のＳｌｅｅｐを解除することができる。
【００２２】
次に、図２を参照して、本実施形態に係るＩＣチップＣの起動時における自己診断について説明する。図２は、ＩＣチップＣの起動時におけるコア１とコア２の自己診断に係る処理フローを示す図である。図２に示す処理は、例えば外部端末からリセットが受信されたときに開始される。
【００２３】
先ず、コア２は、Ｓｌｅｅｐ（スリープ）する（ステップＳ２１）。Ｓｌｅｅｐの状態では、コア２への電力供給は制限され省電力状態となり、演算器２１は、命令コードのフェッチ及び処理を停止するが、割込みコントローラ２４は、割込みコントローラ１４からの命令を受け付けて処理可能な状態になっている。一方、コア１は、コア２用スタック領域３２の検査（データの書き込み及び読み出し能力の検査）を実行する（ステップＳ１）。この検査において、コア１は、先ず、検査中に用いる参照用データ（例えば、検査対象となるデータの長さ、引数、アドレス等）をコア１用スタック領域３１に格納する。そして、コア１は、コア１用スタック領域３１に格納した参照用データを用いて、コア２用スタック領域３２における検査開始アドレスから検査終了アドレスまでの各検査対象領域について、順次、上述したように、データの書き込み及び読み出しを行い、書き込んだデータと読み出したデータとが一致するかをチェックする。
【００２４】
そして、コア１は、コア２用スタック領域３２は正常であるか否かを判定する（ステップＳ２）。例えば全ての検査対象領域において両データが一致する場合、コア１は、コア２用スタック領域３２は正常であると判定し（ステップＳ２：ＹＥＳ）、ステップＳ３へ進む。一方、例えば何れか一つの検査対象領域において両データが一致しない場合、コア１は、コア２用スタック領域３２は正常でないと判定し（ステップＳ２：ＮＯ）、動作停止する（ステップＳ１１）。
【００２５】
ステップＳ３では、コア１は、コア２内のレジスタ（コア２が備えるレジスタ）の検査を実行する。この検査において、コア１は、先ず、検査中に用いる参照用データをコア１用スタック領域３１に格納する。そして、コア１は、コア１用スタック領域３１に格納した参照用データを用いて、コア２内の命令レジスタ及びデータレジスタを含むレジスタを検査対象領域として、割込みコントローラ１４及び割込みコントローラ２４を介して、データの書き込み及び読み出しを行い、書き込んだデータと読み出したデータとが一致するかをチェックする。
【００２６】
そして、コア１は、コア２内のレジスタ（検査対象領域）は正常であるか否かを判定する（ステップＳ４）。例えば全ての検査対象領域において両データが一致する場合、コア１は、コア２内のレジスタは正常であると判定し（ステップＳ４：ＹＥＳ）、ステップＳ５へ進む。一方、例えば何れか一つのレジスタにおいて両データが一致しない場合、コア１は、レジスタは正常でないと判定し（ステップＳ４：ＮＯ）、動作停止する（ステップＳ１１）。
【００２７】
ステップＳ５では、コア１は、Ｓｌｅｅｐ解除指令を、割込みコントローラ１４及び割込みコントローラ２４を介して、コア２へ送る。そして、コア１は、Ｓｌｅｅｐする（ステップＳ６）。
【００２８】
コア２は、コア１からのＳｌｅｅｐ解除指令を受け付けると、Ｓｌｅｅｐを解除する（ステップＳ２２）。そして、コア２は、コア１用スタック領域３１の検査を実行する（ステップＳ２３）。この検査において、コア２は、先ず、検査中に用いる参照用データをコア２用スタック領域３２に格納する。そして、コア２は、コア２用スタック領域３２に格納した参照用データを用いて、コア１用スタック領域３１における検査開始アドレスから検査終了アドレスまでの各検査対象領域について、順次、上述したように、データの書き込み及び読み出しを行い、書き込んだデータと読み出したデータとが一致するかをチェックする。
【００２９】
そして、コア２は、コア１用のスタック領域３１は正常であるか否かを判定する（ステップＳ２４）。コア２は、コア１用のスタック領域３１は正常であると判定した場合（ステップＳ２４：ＹＥＳ）、ステップＳ２５へ進む。一方、コア２は、コア１用のスタック領域３１は正常でないと判定した場合（ステップＳ２４：ＮＯ）、動作停止する（ステップＳ３１）。
【００３０】
ステップＳ２５では、コア２は、コア１内のレジスタ（コア１が備えるレジスタ）の検査を実行する。この検査において、コア２は、先ず、検査中に用いる参照用データをコア２用スタック領域３２に格納する。そして、コア２は、コア２用スタック領域３２に格納した参照用データを用いて、コア１内の命令レジスタ及びデータレジスタを含むレジスタを検査対象領域として、割込みコントローラ２４及び割込みコントローラ１４を介して、データの書き込み及び読み出しを行い、書き込んだデータと読み出したデータとが一致するかをチェックする。
【００３１】
そして、コア２は、コア１内のレジスタ（検査対象領域）は正常であるか否かを判定する（ステップＳ２６）。コア２は、コア１内のレジスタは正常であると判定した場合（ステップＳ２６：ＹＥＳ）、ステップＳ２７へ進む。一方、コア２は、レジスタは正常でないと判定した場合（ステップＳ２６：ＮＯ）、動作停止する（ステップＳ３１）。
【００３２】
ステップＳ２７では、コア２は、Ｓｌｅｅｐ解除指令を、割込みコントローラ２４及び割込みコントローラ１４を介して、コア１へ送り、ステップＳ２８へ進む。コア１は、コア２からのＳｌｅｅｐ解除指令を受け付けると、Ｓｌｅｅｐを解除する（ステップＳ７）。そして、コア１は、汎用領域３３の検査を実行する（ステップＳ８）。例えば、コア１は、汎用領域３３における一部の領域の書き込み及び読み出し能力を検査する。ここで、例えば、汎用領域３３が、アドレス“１０００（ｈ）”から“２ＦＦＦ（ｈ）”までの領域であるとすると、コア１は、アドレス“１０００（ｈ）”から“１ＦＦＦ（ｈ）”までの領域を検査対象領域（つまり、汎用領域３３における一部の領域）とする。この場合、コア１は、先ず、検査中に用いる参照用データをコア１用スタック領域３１に格納する。そして、コア１は、コア１用スタック領域３１に格納した参照用データを用いて、当該検査対象領域について、順次、データの書き込み及び読み出しを行い、書き込んだデータと読み出したデータとが一致するかをチェックする。この場合、汎用領域３３における一部の領域を除く残りの領域は、コア２によりチェックされる。なお、汎用領域３３における全部の領域を、コア１、またはコア２がチェックするように構成してもよい。
【００３３】
そして、コア１は、汎用領域３３（検査対象領域）は正常であるか否かを判定する（ステップＳ９）。例えば全ての検査対象領域において両データが一致する場合、コア１は、汎用領域３３は正常であると判定し（ステップＳ９：ＹＥＳ）、ステップＳ１０へ進む。一方、例えば何れか一つの検査対象領域において両データが一致しない場合、コア１は、汎用領域３３は正常でないと判定し（ステップＳ９：ＮＯ）、動作停止する（ステップＳ１１）。
【００３４】
一方、コア２は、ステップＳ２８において、汎用領域３３の検査を実行する。例えば、上述したように、コア２は、コア１により検査された一部の領域を除く残りの領域を検査対象領域としてその書き込み及び読み出し能力を検査する。この場合、コア２は、先ず、検査中に用いる参照用データをコア２用スタック領域３２に格納する。そして、コア２は、コア２用スタック領域３２に格納した参照用データを用いて、当該検査対象領域について、順次、データの書き込み及び読み出しを行い、書き込んだデータと読み出したデータとが一致するかをチェックする。
【００３５】
そして、コア２は、汎用領域３３（検査対象領域）は正常であるか否かを判定する（ステップＳ２９）。コア２は、汎用領域３３は正常であると判定した場合（ステップＳ２９：ＹＥＳ）、ステップＳ３０へ進む。一方、コア２は、汎用領域３３は正常でないと判定した場合（ステップＳ２９：ＮＯ）、動作停止する（ステップＳ３１）。なお、コア１におけるステップ８及びＳ９の処理と、コア２におけるステップＳ２８及びＳ２９の処理とは、並列して行われる。こうして、コア１及びコア２は、コマンド受付待機状態にスタンバイする（ステップＳ１０，Ｓ３０）。なお、コア１及びコア２は、自己診断において、演算能力（例えば、乱数生成器を連続実行しても同じ値が出力されないか、ＲＳＡによる暗号化を実行すると想定通りの答えが出力されるか）を検査した後に、ステップＳ１０，Ｓ３０へ移行するように構成してもよい。
【００３６】
以上説明したように、上記実施形態によれば、コア１は、コア２用スタック領域３２を検査し、コア２は、コア１用スタック領域３１を検査し、コア１とコア２の少なくとも一方は汎用領域３３を検査するように構成したので、自己診断のために用いられるスタック領域の検査を効率良く実行することができる。また、コア１が汎用領域３３における一部の領域を検査し、コア２が汎用領域３３における残りの領域を検査する構成によれば、自己診断時間を短縮することができる。また、コア１は、コア２内のレジスタを検査し、コア３は、コア１内のレジスタを検査する構成によれば、自己診断のために用いられるレジスタの検査を効率良く実行することができる。
【００３７】
なお、上記実施形態においては、２つのコアを備えるＩＣチップＣを例にとって説明したが、３つ以上のコアを備えるＩＣチップＣに対して本発明を適用可能である。また、上記実施形態においては、演算装置としてＩＣチップＣを例にとって説明したが、ＩＣチップＣ以外の例えば組み込み型のマイクロコンピュータに対して本発明を適用してもよい。
【符号の説明】
【００３８】
１  コア
２  コア
３  ＲＡＭ
４  フラッシュメモリ
５  ＲＯＭ
６  Ｉ／Ｏ回路
１１，２１  演算器
１２，２２  内部メモリ
１３，２３  プログラムカウンタ
１４，２４  割込みコントローラ
Ｃ  ＩＣチップ
【図１】
0006358019.tif 000002
【図２】
0006358019.tif 000003