(57)【特許請求の範囲】
【請求項１】
プロセッサと、
前記プロセッサから発行されるフェッチ要求によって指定されたメモリアドレスに応じて、メモリに格納された命令群の一つをリードするメモリインタフェース手段と、
前記リードされた命令に対応する前記メモリ上のエラー訂正コードを用いて、前記リードされた命令にエラーが存在するか否かを判定するエラー検出手段と、
前記リードされた命令にエラーが存在することが検出された場合、前記リードされた命令を前記プロセッサに送出する代わりに、前記フェッチ要求によって指定されたメモリアドレスと同一のメモリアドレスをスタックに保存する第１の命令と、前記リードされた命令のエラー訂正処理を実行するエラー訂正処理ルーチンへジャンプするための第２の命令とを、前記プロセッサに送出する命令送出手段とを具備し、前記エラー訂正処理ルーチンによるエラー訂正処理の完了後に、前記スタックに保存されているメモリアドレスが前記プロセッサのプログラムカウンタにロードされることを特徴とする情報処理装置。
【請求項２】
前記命令送出手段は、前記リードされた命令にエラーが存在することが検出されなかった場合、前記リードされた命令を前記プロセッサに送出することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記命令送出手段は、前記リードされた命令にエラーが存在することが検出された場合、前記フェッチ要求に対する応答データとして前記第１の命令を前記プロセッサに送出した後に、前記プロセッサから送信される後続のフェッチ要求を待機し、前記後続のフェッチ要求の受信に応答して、前記後続のフェッチ要求に対する応答データとして前記第２の命令を前記プロセッサに送出することを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記命令送出手段は、前記第１の命令と前記第２の命令とを格納したコード記憶部を含み、前記リードされた命令にエラーが存在することが検出された場合、前記第１の命令および前記第２の命令を前記コード記憶部から取り出すことを特徴とする請求項１記載の情報処理装置。
【請求項５】
前記エラー訂正処理ルーチンは、前記エラー訂正処理のための命令群と、前記スタックに保存されたメモリアドレスを前記プロセッサのプログラムカウンタにロードする命令とを含むことを特徴とする請求項１記載の情報処理装置。
【請求項６】
前記プロセッサは複数のステージを含むパイプライン構造のコアユニットを含み、前記プロセッサは命令を先読みするように構成されていることを特徴とする請求項１記載の情報処理装置。
【請求項７】
プロセッサと、
命令群とこれら命令群に対応するエラー訂正コードとを格納したメモリと、
前記プロセッサから発行されるフェッチ要求によって指定されたメモリアドレスに応じて、前記メモリに格納された命令群の一つをリードするメモリインタフェース手段と、
前記リードされた命令に対応する前記メモリ上のエラー訂正コードを用いて、前記リードされた命令にエラーが存在するか否かを判定するエラー検出手段と、
前記リードされた命令にエラーが存在することが検出された場合、前記リードされた命令を前記プロセッサに送出する代わりに、前記フェッチ要求によって指定されたメモリアドレスと同一のメモリアドレスをスタックに保存する第１の命令と、前記リードされた命令のエラー訂正処理を実行するエラー訂正処理ルーチンへジャンプするための第２の命令とを、前記プロセッサに送出する命令送出手段とを具備し、前記エラー訂正処理ルーチンによるエラー訂正処理の完了後に、前記スタックに保存されているメモリアドレスが前記プロセッサのプログラムカウンタにロードされることを特徴とする情報処理システム。
【請求項８】
前記命令送出手段は、前記リードされた命令にエラーが存在することが検出されなかった場合、前記リードされた命令を前記プロセッサに送出することを特徴とする請求項７記載の情報処理システム。
【請求項９】
前記命令送出手段は、前記リードされた命令にエラーが存在することが検出された場合、前記フェッチ要求に対する応答データとして前記第１の命令を前記プロセッサに送出した後に、前記プロセッサから送信される後続のフェッチ要求を待機し、前記後続のフェッチ要求の受信に応答して、前記後続のフェッチ要求に対する応答データとして前記第２の命令を前記プロセッサに送出することを特徴とする請求項８記載の情報処理システム。
【請求項１０】
メモリエラーを訂正するためのエラー訂正方法であって、
プロセッサから発行されるフェッチ要求によって指定されたメモリアドレスに応じて、メモリに格納された命令群の一つをリードするステップと、
前記リードされた命令に対応する前記メモリ上のエラー訂正コードを用いて、前記リードされた命令にエラーが存在するか否かを判定するステップと、
前記リードされた命令にエラーが存在することが検出された場合、前記リードされた命令を前記プロセッサに送出する代わりに、前記フェッチ要求によって指定されたメモリアドレスと同一のメモリアドレスをスタックに保存する第１の命令と、前記リードされた命令のエラー訂正処理を実行するエラー訂正処理ルーチンへジャンプするための第２の命令とを、前記プロセッサに送出するステップと、
前記エラー訂正処理ルーチンによるエラー訂正処理の完了後に、前記スタックに保存されているメモリアドレスを前記プロセッサのプログラムカウンタにロードするステップとを具備することを特徴とするエラー訂正方法。
【請求項１１】
前記リードされた命令にエラーが存在することが検出されなかった場合、前記リードされた命令を前記プロセッサに送出するステップをさらに具備することを特徴とする請求項１０記載のエラー訂正方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置およびメモリエラーを訂正するためのエラー訂正方法に関する。
【背景技術】
【０００２】
近年、パーソナルコンピュータ、ＰＤＡ、組み込みシステムといった、様々な情報処理装置が開発されている。
【０００３】
このような情報処理装置においては、通常、プロセッサによって実行される命令群は、ダイナミックＲＡＭのようなメモリに格納されている。メモリからの命令のフェッチ時に、もしその命令にＥＣＣエラーのような誤りの存在が検出されたならば、この命令をプロセッサに渡すことを禁止することが必要である。
【０００４】
特許文献１には、割り込みを用いてエラーを回復するシステムが開示されている。このシステムにおいては、データ記憶割り込みという特殊な割り込みを用いて、エラーの発生が報告される。
【特許文献１】特開２０００−９９４０６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、特許文献１の技術は、データ記憶割り込みという特殊な割り込みをサポートする、ある特定種のプロセッサにしか適用することができない。したがって、割り込みのような特別な仕組みを用いずにメモリエラーを訂正するための新たな機能の実現が必要である。
【０００６】
本発明は上述の事情を考慮してなされたものであり、割り込みを用いずにメモリエラーを容易に訂正することができる情報処理装置およびエラー訂正方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述の課題を解決するため、本発明の情報処理装置は、プロセッサと、前記プロセッサから発行されるフェッチ要求によって指定されたメモリアドレスに応じて、メモリに格納された命令群の一つをリードするメモリインタフェース手段と、前記リードされた命令に対応する前記メモリ上のエラー訂正コードを用いて、前記リードされた命令にエラーが存在するか否かを判定するエラー検出手段と、前記リードされた命令にエラーが存在することが検出された場合、前記リードされた命令を前記プロセッサに送出する代わりに、前記フェッチ要求によって指定されたメモリアドレスと同一のメモリアドレスをスタックに保存する第１の命令と、前記リードされた命令のエラー訂正処理を実行するエラー訂正処理ルーチンへジャンプするための第２の命令とを、前記プロセッサに送出する命令送出手段とを具備し、前記エラー訂正処理ルーチンによるエラー訂正処理の完了後に、前記スタックに保存されているメモリアドレスが前記プロセッサのプログラムカウンタにロードされることを特徴とする。
【０００８】
また、本発明は、メモリエラーを訂正するためのエラー訂正方法であって、プロセッサから発行されるフェッチ要求によって指定されたメモリアドレスに応じて、メモリに格納された命令群の一つをリードするステップと、前記リードされた命令に対応する前記メモリ上のエラー訂正コードを用いて、前記リードされた命令にエラーが存在するか否かを判定するステップと、前記リードされた命令にエラーが存在することが検出された場合、前記リードされた命令を前記プロセッサに送出する代わりに、前記フェッチ要求によって指定されたメモリアドレスと同一のメモリアドレスをスタックに保存する第１の命令と、前記リードされた命令のエラー訂正処理を実行するエラー訂正処理ルーチンへジャンプするための第２の命令とを、前記プロセッサに送出するステップと、前記エラー訂正処理ルーチンによるエラー訂正処理の完了後に、前記スタックに保存されているメモリアドレスを前記プロセッサのプログラムカウンタにロードするステップとを具備することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、割り込み信号を用いずにメモリエラーを訂正することができる。
【発明を実施するための最良の形態】
【００１０】
以下、図面を参照して本発明の実施形態を説明する。
【００１１】
まず、図１を参照して、本発明の一実施形態に係る情報処理装置の構成を説明する。この情報処理装置は、例えば、パーソナルコンピュータのようなコンピュータ、またはハードディスクドライブのような各種電子機器に内蔵される組み込みシステムとして使用される。この情報処理装置は、ＣＰＵ１１と制御回路１２とを備えている。
【００１２】
ＣＰＵ１１は各種プログラムを実行するプロセッサである。ＣＰＵ１１は、各種演算処理を実行すると共に、情報処理装置内の各デバイスまたは電子機器内の各デバイスを制御する。このＣＰＵ１１は割り込み信号ＩＮＴを受信するための割り込み信号入力端子を有している。
【００１３】
ＣＰＵ１１は、複数のステージを含むパイプライン構造のコアユニット１１１を備えおり、幾つかの命令（コードとも云う）を先読み（プリフェッチ）することができる。フェッチすべき命令のメモリ番地（メモリアドレス）はＣＰＵ１１内のプログラムカウンタによって指示される。プログラムカウンタは、インストラクションポインタと称されることもある。プログラムカウンタの値は、通常は、次の命令を次のメモリ番地からフェッチするために順番に更新される。ＣＰＵ１１は、命令をメモリからフェッチするためのフェッチ要求を発行する。このフェッチ要求は、プログラムカウンタによって示されるメモリアドレスを含む。すなわち、ＣＰＵ１１は、プログラムカウンタによって示されるメモリ番地の情報（ここでは命令）をリードするためのメモリリード要求をフェッチ要求として発行する。
【００１４】
またＣＰＵ１１としては、ローカルメモリを含むプロセッサを使用してもよい。ＣＰＵ１１内のローカルメモリは、例えば、スタティックＲＡＭから構成されている。このローカルメモリには、ＣＰＵ１１によって実行されるべき命令群の一部を格納することができる。具体的には、エラー処理ルーチン、割り込みハンドラのような、システム制御に密結合された処理ルーチンをローカルメモリに格納してもよい。
【００１５】
制御回路１２は、ＣＰＵ１１のローカルバス１０に接続されている。制御回路１２は、ＣＰＵ１１からのメモリアクセス要求に応じて外部メモリをアクセスするメモリ制御機能を有している。例えば、制御回路１２とＣＰＵ１１は、System on a Chip（ＳＯＣ）のような１チップマイクロコンピュータとして実現することができる。この１チップマイクロコンピュータが、本実施形態の情報処理装置のコア部として機能する。
【００１６】
メモリ１３は、ＣＰＵ１１によって実行される命令群を格納するための外部メモリである。メモリ１３は、制御回路１２に設けられたメモリインタフェースに接続することができる。ＣＰＵ１１および制御回路１２を含む装置の構成に外部メモリであるメモリ１３を付加したシステムが、本実施形態の情報処理システムとして機能する。
【００１７】
メモリ１３には、例えば、命令群と、これら命令群に対応するエラー訂正コードとが格納されている。エラー訂正コードとしては、例えばECC、CRC等の、よく知られた様々なエラー訂正可能冗長コードを使用し得る。個々の命令毎にエラー訂正コードを用意しても良く、またあるブロックデータ（複数の命令）単位でエラー訂正コードを用意しても良い。
【００１８】
メモリ１３は、例えば、ダイナミックＲＡＭから構成されている。ダイナミックＲＡＭはＣＰＵ１１のローカルメモリを構成するスタティックＲＡＭよりも低速のメモリであるが、スタティックＲＡＭに比べビット当たりのコストは低い。本実施形態では、ローカルメモリおよびメモリ１３のどちらも、ＣＰＵ１１のメモリアドレス空間上にそれぞれマッピングされている。
【００１９】
不揮発性メモリ１４は各種プログラム（命令群）を格納している。例えば、本情報処理装置の起動時等に、不揮発性メモリ１４に格納された命令群がメモリ１３およびＣＰＵ１１のローカルメモリに分散してロードされる。エラー訂正処理ルーチンは、メモリ１３およびＣＰＵ１１のローカルメモリのどちらに格納しても良い。
【００２０】
制御回路１２は、メモリインタフェース部１２１、エラー検出部１２２、キャッシュメモリ１２３、コード記憶部１２４、およびセレクタ１２５を備えている。
【００２１】
メモリインタフェース部１２１は、ＣＰＵ１１から発行されるフェッチ要求（メモリリード要求）によって指定されたメモリアドレスに応じて、メモリ１３に格納された命令群の一つをリードする。すなわち、フェッチ要求によって指定されるメモリ１３上のメモリ番地から命令がリードされる。
【００２２】
エラー検出部１２２は、リードされた命令に対応するメモリ１３上のエラー訂正コード(ECC)を用いて、当該リードされた命令にエラーが存在するか否かを判定する。ＥＣＣチェック結果はセレクタ１２５に送られる。また、リードされた命令はキャッシュメモリ１２３に保存される。
【００２３】
キャッシュメモリ１２３は、ＣＰＵ１１によってフェッチ要求されたメモリ１３上の命令のロードに要するレイテンシーを減少するために設けられたキャッシュである。このキャッシュメモリ１２３は、メモリ１３に格納されている命令群の一部を格納する。このキャッシュ１２３は、例えば、スタティックＲＡＭから構成されている。
【００２４】
コード記憶部１２４およびセレクタ１２５は、命令送出部１３１として機能する。この命令送出部１３１は、メモリ１３からの命令のリード時にメモリエラー（ＥＣＣエラー等）の発生が検出された時に、ＣＰＵ１１に送出すべき命令を、フェッチ要求によって指定されたメモリ番地の命令（ＥＣＣエラーの存在が検出された命令）から、エラー訂正処理ルーチンへジャンプするための命令に差し替える処理を実行する。
【００２５】
命令送出部１３１は、フェッチ要求された命令、つまりメモリ１３からリードされた命令にエラーが存在することがエラー検出回路１２２によって検出された場合、リードされた命令をＣＰＵ１１に送出する代わりに、少なくとも、２つの命令をＣＰＵ１１に送出する。
【００２６】
一方の命令は、フェッチ要求によって指定されたメモリアドレスと同一のメモリアドレスをスタックに保存する第１の命令（プッシュ命令）である。この第１の命令は、エラーの発生が検出された命令（フェッチ要求された命令）に制御を戻すために必要な情報として、フェッチ要求によって指定されたメモリアドレスと同一のメモリアドレスをスタックに保存する。
【００２７】
すなわち、一般に、サブルーチンコールにおいては、コールされたサブルーチンからリターン時には、コール命令の次の命令に制御が戻される。本実施形態では、エラーの発生が検出された命令（フェッチ要求された命令）自体に制御を戻すために、フェッチ要求によって指定されたメモリアドレスと同一のメモリアドレスをスタックに保存する処理が実行される。
【００２８】
もう一つの命令は、リードされた命令のエラー訂正処理をエラー訂正コードを用いて実行するエラー訂正処理ルーチンへジャンプするための第２の命令（ジャンプ命令）である。この第２の命令により、エラー訂正処理ルーチンに制御を移すことが出来る。エラー訂正処理ルーチンによるエラー訂正処理の完了後、スタックに保存されているメモリアドレスはプログラムカウンタにロードされる。これによって、エラーの発生が検出された命令（フェッチ要求された命令）に制御が戻される。
【００２９】
以下、命令送出部１３１からＣＰＵ１１に送出される命令群について具体的に説明する。
【００３０】
リードされた命令にエラーが存在することが検出された時、命令送出部１３１は、コード記憶部１２４に格納されている以下の命令をＣＰＵ１１に送出する。
【００３１】
push PC
push error_flag
jump ERR_CORR
ここで、命令“push PC”は上述の第１の命令である。この命令“push PC”は、プログラムカウンタレジスタ（PCレジスタ）の値をスタック（メモリ領域）に保存することをＣＰＵ１１に指示する。 ＣＰＵ１１のアーキテクチャによって、たとえばPCレジスタがすでに次のアドレスを示すようにインクリメントされていれば、“PC”の値を-1、もしくは１命令アドレス分の減算を行い、その値をスタックに保存する。必要なことは、フェッチ要求によって指定されたメモリアドレスと同一のメモリアドレスをスタックに保存することであることに注意されたい。
【００３２】
命令“push error_flag”は、ステータスレジスタ、演算結果レジスタ等の各種ステータスフラグをスタックに保存する命令である。
【００３３】
命令“jump ERR_CORR”は上述の第２の命令である。この命令“jump ERR_CORR”は、リードされた命令のエラー訂正処理をエラー訂正コードを用いて実行するエラー訂正処理ルーチンへのジャンプをＣＰＵ１１に指示する。“ERR_CORR”は、エラー訂正処理ルーチンが格納されているメモリ領域の先頭アドレスを示している。
【００３４】
このような命令群（push PC、push error_flag、jump ERR_CORR）をＣＰＵ１１に渡すことにより、ＣＰＵ１１は、フェッチ要求したアドレスにこれら一連のコードがあたかも記述されていたかのように動作する。つまり、これら命令の実行タイミングが到来すると、ＣＰＵ１１は、（１）ＥＣＣエラーが発生したメモリアドレスと同一のメモリアドレス（例えばPC-1）をスタックに保存する処理、（２）エラーフラグをスタックに保存という処理を行った後に、（３）エラー訂正処理ルーチンにジャンプする。そして、ＣＰＵ１１は、エラー訂正処理ルーチンを実行して、エラーが発生した命令を含むメモリ領域を対応するエラー訂正コードを用いて訂正した後、エラー訂正処理ルーチンから抜ける。エラー訂正処理ルーチンによるエラー訂正処理が完了した時、スタックに保存されているメモリアドレスはＣＰＵ１１のプログラムカウンタにロードされ、これにより、プログラムカウンタの値は、エラーが発生した命令のフェッチ要求を発生した時点の値に戻される。よって、エラーの発生が検出された命令自体に再び制御を戻すことが出来、ＣＰＵ１１は、エラーが発生した命令のフェッチを再度実行する。この時点では、エラーが発生した命令のエラーは訂正されている。
【００３５】
このように、ＣＰＵ１１に送出すべき命令を、ＥＣＣエラーの存在が検出された命令から、一連の命令群（push PC、push error_flag、jump ERR_CORR）に差し替えることにより、割り込みのような特別な仕組みを用いることなく、メモリエラーの訂正を実行することが可能となる。
【００３６】
もし一回のフェッチ要求でフェッチされる命令数が１つの場合には、命令送出部１３１は、フェッチ要求に対する応答データとして、命令“push PC”をＣＰＵ１１に送出した後に、ＣＰＵ１１から送信される後続のフェッチ要求を待機すればよい。そして、その後続のフェッチ要求の受信に応答して、ＣＰＵ１１は、その受信したフェッチ要求に対する応答データとして、命令“push error_flag”をＣＰＵ１１に送出する。この後、命令送出部１３１は、ＣＰＵ１１から送信される後続のフェッチ要求を再び待機する。そして、その後続のフェッチ要求の受信に応答して、ＣＰＵ１１は、その受信したフェッチ要求に対する応答データとして、命令“jump ERR_CORR”をＣＰＵ１１に送出する。
【００３７】
なお、命令“push error_flag”は必ずしも必要な命令ではなく、命令“push error_flag”のＣＰＵ１１への送出を省略してもよい。
【００３８】
リードされた命令にエラーが存在することが検出されたかった場合には、命令送出部１３１は、リードされた命令を、フェッチ要求に対する応答データとしてＣＰＵ１１に送出する。この場合、リードされた命令は、例えば、キャッシュメモリ１２３から取り出すことができる。
【００３９】
上述したように、命令“push PC”は、フェッチ要求によって指定されたメモリアドレス（ＥＥＣエラーの存在が検出された命令が格納されているメモリ番地）と同一のメモリアドレスをスタックに保存するものであるので、以下では、単に“push PC”と表記する。
【００４０】
命令送出部１３１は、コード記憶部１２４と、セレクタ１２５とを含んでいる。コード記憶部１２４には、一連の命令群（push PC、push error_flag、jump ERR_CORR）が予め格納されている。セレクタ１２５は、ＣＰＵ１１からフェッチ要求された命令にエラーの存在が検出されたか否かに応じて、コード記憶部１２４およびキャッシュメモリ１２３の一方を選択し、選択した方からＣＰＵ１１に送出すべき命令を取り出す。
【００４１】
次に、図２を参照して、本実施形態によるエラー訂正のためのコード差し替え動作について説明する。
【００４２】
図２は、プログラムカウンタ（PCレジスタ）の値の変化とＣＰＵ１１によってフェッチされる命令との関係が時間を追って示されている。図２における矢印は、プログラムカウンタ（PCレジスタ）の値、つまりフェッチ対象の命令のメモリアドレスを示している。また、図２においては、命令“push error_flag”のＣＰＵ１１への送出を省略する場合を示している。
【００４３】
いま、フェッチ対象のアドレスAAAｈ番地の命令Ｎをメモリ１３からリードした時に、そのリードした命令Ｎにエラーが存在することが検出された場合を想定する。この場合、命令Ｎの代わりに、命令“push PC”がＣＰＵ１１に送出される。プログラムカウンタ（PCレジスタ）の値が更新されると、ＣＰＵ１１から次の命令のフェッチ要求が発行される。この時、命令“jump xxxh”が、ＣＰＵ１１に送出される。xxxhは、エラー訂正処理ルーチンが格納されているメモリ領域の先頭アドレスを示している。
【００４４】
ＣＰＵ１１は、あたかもアドレスAAAｈ番地に命令“push PC”が存在し、アドレスAAAｈ+1番地に命令“jump xxxh”が存在していたかのように、命令“push PC”と命令“jump xxxh”とを順次フェッチおよび実行する。
【００４５】
命令“push PC”がＣＰＵ１１によって実行されると、AAAｈがスタックに保存される。次いで、命令“jump xxxh”がＣＰＵ１１によって実行されると、ＣＰＵ１１はエラー訂正処理ルーチンにジャンプする。
【００４６】
命令“jump xxxh”の実行により、プログラムカウンタ（PCレジスタ）の値はxxxhに変更される。ＣＰＵ１１はエラー訂正処理ルーチンの命令群（エラー訂正処理のための命令群）をフェッチしながら実行する。エラー訂正処理ルーチンの最後尾にはスタックに保存されているメモリアドレスをプログラムカウンタにロードする命令(Load PC)が記述されている。したがって、エラー訂正処理ルーチンからのリターン時、つまりエラー訂正処理の完了時には、プログラムカウンタの値はAAAｈに戻される。この結果、ＣＰＵ１１は、再び、アドレスAAAｈ番地の命令Ｎをメモリ１３からリードするためのフェッチ要求を発行する。
【００４７】
次に、図３のフローチャートを参照して、制御回路１２の動作を説明する。
【００４８】
制御回路１２は、ＣＰＵ１１から送信されるフェッチ要求（コードフェッチ要求）を受信する（ステップＳ１０１）。このフェッチ要求の受信に応答して、制御回路１２は、フェッチ要求に含まれるメモリアドレスによって指定される命令をメモリ１３からリードする処理と、そのリードした命令にエラーが存在するか否かを判定するＥＣＣエラー検出処理とを実行する（ステップＳ１０２）。
【００４９】
リードした命令にエラーが存在することが検出されなかったならば（ステップＳ１０３のＮＯ）、制御回路１２は、リードした命令（フェッチ要求で指定されたメモリ番地の命令）をＣＰＵ１１に送出する（ステップＳ１０４）。
【００５０】
一方、リードした命令にエラーが存在することが検出されたならば（ステップＳ１０３のＹＥＳ）、制御回路１２は、コード記憶部１２４から命令“push PC”を取り出し、その命令“push PC”を、リードした命令の代わりにＣＰＵ１１に送出する（ステップＳ１０５）。次いで、制御回路１２は、ＣＰＵ１１からの次のフェッチ要求を受信するまで待機する。次のフェッチ要求を受信すると（ステップＳ１０６のＹＥＳ）、制御回路１２は、コード記憶部１２４から命令“jump ERR_CORR”を取り出し、その命令“jump ERR_CORR”を、ＣＰＵ１１に送出する（ステップＳ１０７）。
【００５１】
次に、図４のフローチャートを参照して、エラー訂正処理ルーチンを実行することによってＣＰＵ１１によって行われるエラー訂正処理について説明する。
【００５２】
ＣＰＵ１１は、例えば、エラー検出部１２２からエラー発生が検出された命令のメモリアドレスを取得すること等により、エラーアドレスを特定することができる。そして、ＣＰＵ１１は、発生したエラー（エラー発生が検出された命令のエラー）がエラー訂正コードを用いて訂正することが可能なエラーであるか否かを判定する（ステップＳ２０１）。  発生したエラーが訂正することが可能なエラーであるならば（ステップＳ２０１のＹＥＳ）、ＣＰＵ１１は、エラー発生が検出された命令に対応するエラー訂正コードを用いてエラー訂正処理（ＥＣＣエラー訂正処理）を実行する（ステップＳ２０２）。
【００５３】
一方、発生したエラーが訂正することが不可能なエラーであるならば（ステップＳ２０１のＮＯ）、ＣＰＵ１１は、エラー発生が検出された命令を不揮発性メモリ１４からメモリ１３に再度ロードする処理（リロード処理）を実行する（ステップＳ２０３）。
【００５４】
この後、ＣＰＵ１１は、エラー訂正処理ルーチンから抜けるために、スタックに保存されているメモリアドレスをプログラムカウンタ（ＰＣレジスタ）にロードする（ステップＳ２０４）。この結果、エラー発生が検出された命令に制御が戻される。
【００５５】
以上のように、本実施形態においては、フェッチ要求された命令にエラーが存在することが検出された場合、リードされた命令をＣＰＵ１１に送出する代わりに、命令“push PC”と命令“jump ERR_CORR”とがＣＰＵ１１に送出される。これにより、割り込み信号をＣＰＵ１１に送出することなく、メモリエラーを訂正でき、そしてエラー発生が検出された命令に制御を戻すことが出来る。
【００５６】
また、エラー訂正処理ルーチンへ制御が移るタイミングは、エラー発生が検出された時点ではなく、命令“jump ERR_CORR”がＣＰＵ１１によって実際に実行される時点であるので、既にコアユニット１１１のパイプラインまたは命令キュー等に実行待ちの命令が存在する場合であっても、それら命令の実行に何等影響を与えることなく、エラー訂正処理ルーチンの実行を開始することができる、
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。例えばエラー検出部１２２においては１ビット訂正を行い、１ビット以上の訂正が必要な場合にのみセレクタ１２５を切り替えてコード記憶部１２５の命令をCPU１１に送出するようにしてもよい。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【００５７】
【図１】本発明の一実施形態に係る情報処理装置の構成を示すブロック図。
【図２】同実施形態の情報処理装置によって実行される、エラー訂正のためのコード差し替え動作を説明するための図。
【図３】同実施形態の情報処理装置に設けられた制御回路１２の動作を説明するためのフローチャート。
【図４】同実施形態の情報処理装置によって実行されるエラー訂正処理の手順を説明するフローチャート。
【符号の説明】
【００５８】
１１…ＣＰＵ、１２…制御回路、１３…メモリ、１４…不揮発性メモリ、１１１…コア、１２１…メモリインタフェース部、１２２…エラー検出部、１２３…キャッシュメモリ、１２４…コード記憶部、１２５…セレクタ、１３１…命令送出部。
【要約】
【課題】割り込みを用いずにメモリエラーを容易に訂正することができる情報処理装置を実現する。
【解決手段】ＣＰＵ１１からフェッチ要求された命令にエラーが存在することが検出された場合、命令送出部１３１は、メモリ１３からリードされた命令をプロセッサに送出する代わりに、フェッチ要求によって指定されたメモリアドレスと同一のメモリアドレスをスタックに保存する第１の命令と、リードされた命令のエラー訂正処理を実行するエラー訂正処理ルーチンへジャンプするための第２の命令とを、ＣＰＵ１１に送出する。これにより、エラー訂正処理が実行された後に、フェッチ要求された命令に制御を戻すことができる。
【選択図】図１【図１】
0004334598.tif 000002
【図２】
0004334598.tif 000003
【図３】
0004334598.tif 000004
【図４】
0004334598.tif 000005