(57)【特許請求の範囲】
【請求項１】
パイプライン動作を行うＣＰＵと、
エラーを検出すると、このエラー以前の正しく実行された「命令Ｎ」の実行完了状態を保持する遅延レジスタファイルよりレジスタファイルの内容を復帰し、前記「命令Ｎ」の次命令である「命令Ｎ＋１」から命令を再実行するリトライ制御部と
がバスを介して互いに結合されて成る情報処理装置であって、
前記ＣＰＵは、複数の第１フリップフロップと、パリティーチェック回路と、第２フリップフロップとを有し、
前記リトライ制御部は、前記ＣＰＵから前記リトライ制御部へのエラー伝播を抑止して前記リトライ制御部の誤動作を防止するエラーマスク回路を有し、
前記複数の第１フリップフロップは、命令アドレス（ＰＣ）、命令コード、ライト制御信号及びライトデータをエラーマスク回路に出力する元となる信号を取り込んで保持するものであり、
前記エラーマスク回路は、複数のマスク論理を有し、
前記パリティーチェック回路が、前記複数の第１フリップフロップの出力信号をそれぞれ入力し、前記出力信号の各々をパリティーチェックした結果であるパリティーチェック結果を論理和により集約した信号を前記第２フリップフロップが入力してエラー検出信号を出力し、
前記エラー検出信号が所定の値である場合に、前記複数のマスク論理が命令コード及びライト制御信号をそれぞれ無効な値にする
ことを特徴とし、
さらに、
ＣＰＵバスライトまでに、そのＣＰＵバスライトを伴う命令のソースオペランドが前記遅延レジスタファイルに反映されるように、前記ソースオペランドの内容を生成する命令を前記ＣＰＵバスライトを伴う命令の前に配置し、
エラーを検出すると、このエラー以前の正しく実行された「命令Ｎ」の実行完了状態を保持する遅延レジスタファイルよりレジスタファイルの内容を復帰し、前記「命令Ｎ」の次命令である「命令Ｎ＋１」から命令を再実行するリトライ制御部と
がバスを介して互いに結合されて成る情報処理装置であって、
前記リトライ制御部は、前記エラー発生以降の命令実行に伴うＣＰＵバスライトのエラーを検出するＣＰＵバスエラー検出器を有し、
前記ＣＰＵバスエラー検出器は、複数の比較器を有し、
前記遅延レジスタファイルからのリードデータとＣＰＵバス上のアドレス・データとを前記複数の比較器によって比較し、比較結果に基づいてバスライトキャンセルを発行する
ことを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置において、
前記「命令Ｎ＋１」は、前記エラーが発生したタイミングにて実行中である少なくとも一つ以上の命令の内で最初に前記ＣＰＵに解読された命令である
ことを特徴とする情報処理装置。
【請求項３】
請求項１に記載の情報処理装置において、
前記リトライ制御部へ入力するＣＰＵ信号は、前記ＣＰＵ信号を前記エラー検出信号のレイテンシ分遅延させたものを前記エラー検出信号で無効化し、
前記エラー検出信号の出力ディレイは前記ＣＰＵ信号の出力ディレイの最小値以下になるようにディレイが調整されている
ことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リトライ制御を行うエラー訂正技術に関し、特に、パイプライン動作を行うＣＰＵにおいて、命令リトライによるＣＰＵのエラー訂正方法に適用して有効な技術に関する。
【背景技術】
【０００２】
例えば、ＣＰＵは宇宙線等の影響で、フリップフロップ等の記憶素子のビットデータが一時的に反転するエラーにより誤動作することがある。このエラーを訂正するために、エラーを検出すると、このエラー以前の正しく実行された「命令Ｎ」の実行完了状態を保持する遅延レジスタファイルよりレジスタファイルの内容を復帰し、「命令Ｎ」の次命令「命令Ｎ＋１」から命令を再実行するリトライ制御が行われる。
【０００３】
例えば、特許文献１には、エラーを含む不当命令を検出すると、不当命令の前の命令からリトライする方式が開示されている。
【特許文献１】特開２００４−６２３０９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、前記特許文献１に開示されている技術では、エラーの検出範囲が命令読み込み部に限定され、ＣＰＵの他の部分でエラーが発生した場合、これをリトライにより訂正することが出来ない問題がある。また、ＣＰＵのエラーがリトライの制御部に伝播した場合、リトライ処理自体が誤動作する問題もある。さらに、ＣＰＵのエラーにより、内蔵ＲＡＭやＤＭＡコントローラ等の周辺モジュール制御レジスタに誤った値が書き込まれた場合、リトライによる訂正が不可能になる問題や、周辺モジュールが誤動作する問題がある。
【０００５】
そこで、本発明の目的は、これらの問題を解決し、簡素、かつ、訂正可能な範囲が広い、リトライを用いたＣＰＵのエラー訂正方法を提供することにある。
【０００６】
本発明の前記ならびにその他の目的と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次のとおりである。
【０００８】
本発明は、パイプライン動作を行うＣＰＵにおいて、エラーを検出すると、このエラー以前の正しく実行された「命令Ｎ」の実行完了状態を保持する遅延レジスタファイルよりレジスタファイルの内容を復帰し、「命令Ｎ」の次命令である「命令Ｎ＋１」から命令を再実行するリトライ制御を行うエラー訂正方法に適用され、以下のような特徴を有するものである。
【０００９】
（１）ＣＰＵ内にある任意のフリップフロップのパリティーチェック結果を集約してエラーを検出することを特徴とする。さらに、「命令Ｎ＋１」は、エラーが発生したタイミングにて実行中である少なくとも一つ以上の命令の内で最初にＣＰＵに解読された命令であることを特徴とする。
【００１０】
（２）リトライ制御を行うリトライ制御部へ入力するＣＰＵ信号は、ＣＰＵ信号をエラー検出信号のレイテンシ分遅延させたものをエラー検出信号で無効化し、エラー検出信号の出力ディレイはＣＰＵ信号の出力ディレイの最小値以下になるようにディレイが調整されていることを特徴とする。
【００１１】
（３）エラー発生以降の命令実行に伴うＣＰＵバスライトにエラーがある場合、それを検出して取り消すことを特徴とする。さらに、ＣＰＵバスライトまでに、そのＣＰＵバスライトを伴う命令のソースオペランドが遅延レジスタファイルに反映されるように、ソースオペランドの内容を生成する命令をＣＰＵバスライトを伴う命令の前に配置し、遅延レジスタファイルの読み出し値を用いてＣＰＵバスライトのエラーを検出し、それを取り消すことを特徴とする。
【発明の効果】
【００１２】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下のとおりである。
【００１３】
本発明によれば、前記課題を解決するための手段（１）（２）（３）に対応して、それぞれ以下の（１）（２）（３）のような効果を得ることができる。
【００１４】
（１）簡素な制御で、ＣＰＵ内の任意のエラーを検出し、レジスタの内容をエラーにより誤動作する可能性がある命令範囲より以前の命令実行完了状態に復帰させ、エラーにより誤動作した可能性がある命令範囲の先頭から命令をリトライすることが可能となる。
【００１５】
（２）ＣＰＵのエラーがリトライ制御部に伝播し、リトライが誤動作することを抑止することができる。
【００１６】
（３）簡素な制御で、ＣＰＵのエラーによるＣＰＵバス上の誤ったライトを抑止することができる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。
【００１８】
まず、図１により、本発明の一実施の形態である、エラー訂正機能を有する情報処理装置の一例を説明する。図１は、エラー訂正機能を有する情報処理装置を示す全体図である。
【００１９】
本実施の形態の情報処理装置は、パイプライン動作を行うＣＰＵ（１）と、リトライ制御を行うリトライ制御部（２）と、ＣＰＵバスターゲットモジュール（１１）等から構成され、これらはＣＰＵバス（９）を介して相互に接続されている。
【００２０】
ＣＰＵ（１）は、ＣＰＵバス（９）を介して命令のリード、およびデータのリード、ライトを行い、プログラムを実行する。なお、本実施の形態におけるＣＰＵ（１）は、命令を読み込むＩＦステージ、命令を解読するＤステージ、命令の実行、およびＣＰＵバス上にアドレス出力を行うＥＸステージ、ＣＰＵバスへのライトデータ出力、およびＣＰＵバスからのリードデータ入力を行うＭＡステージ、命令実行結果をレジスタへ書き戻すＷＢステージの５段パイプライン処理を行う。
【００２１】
リトライ制御部（２）は、ＣＰＵ内のエラー発生を示すエラー検出（３）、ＩＦステージにある命令のアドレスを示すＰＣ（４）、ＩＦステージにある命令の命令コード（５）、ＷＢステージで書き戻し対象となるレジスタを指定するライト制御（６）、ＷＢステージでレジスタに書き戻すライトデータ（７）、リトライ例外ルーチンへの分岐を要求するためのリトライ例外（８）をＣＰＵ（１）から入出力し、ＣＰＵバスライトを取り消すためのライトキャンセル（１０）をＣＰＵバス（９）に繋がるＣＰＵバスターゲットモジュール（１１）へ出力し、リトライ制御、およびＣＰＵバスライトのキャンセルを行う。
【００２２】
特に、この情報処理装置では、詳細は後述するが、ＣＰＵ（１）において、エラーを検出すると、このエラー以前の正しく実行された「命令Ｎ」の実行完了状態を保持する遅延レジスタファイルよりレジスタファイルの内容を復帰し、「命令Ｎ」の次命令である「命令Ｎ＋１」から命令を再実行するリトライ制御を行うエラー訂正機能を有する。
【００２３】
続いて、図２により、リトライ制御部（２）の詳細を説明する。図２は、リトライ制御部（２）を示す詳細図である。
【００２４】
リトライ制御部（２）は、エラーマスク回路（２００１）、リトライステートマシン（２００２）、命令キュー（２００３）、ライトキュー（２００４）、ＣＰＵバスエラー検出器（２００６）、遅延レジスタファイル（２００７）、ＣＰＵバスＩＦ（２００８）等から構成される。
【００２５】
エラーマスク回路（２００１）は、命令コード（５）、ＰＣ（４）、ライト制御（６）、ライトデータ（７）のエラーをエラー検出（３）を用いてマスクし、命令コード１（２０１０）、ＰＣ１（２０１１）、ライト制御１（２０１４）、ライトデータ１（２０１５）にそれぞれ出力する。
【００２６】
命令キュー（２００３）は、命令コード１（２０１０）を遅延させ、命令コード２（２０１２）、命令コード３（２０２２）を出力する。また、命令キュー（２００３）は、ＰＣ１（２０１１）を遅延させ、ＰＣ２（２０１３）を出力する。
【００２７】
ライトキュー（２００４）は、ライト制御１（２０１４）、ライトデータ１（２０１５）を遅延させ、ライト制御２（２０１６）、ライトデータ２（２０１７）にそれぞれ出力する。
【００２８】
ＣＰＵバスエラー検出器（２００６）は、命令コード２（２０１２）を解読し、リード制御１（２０１８）を用いて遅延レジスタファイル（２００７）の内容をリードデータ１（２０１９）より読み出し、その読み出した内容と、ＣＰＵバス（９）に出力されるアドレス、およびデータとを比較して、不一致がある場合、ライトキャンセル（１０）をアサートする。
【００２９】
遅延レジスタファイル（２００７）は、ＣＰＵの汎用レジスタや制御レジスタ、フラグレジスタ等を含むレジスタファイルのレプリカであり、リトライに備え、過去のレジスタファイルの内容を保持する。遅延レジスタファイル（２００７）へは、ライト制御２（２０１６）が示すレジスタに、ライトデータ２（２０１７）のデータがライトされる。また、遅延レジスタファイル（２００７）からは、リード制御１（２０１８）が示すレジスタの内容がリードデータ１（２０１９）に、リード制御２（２０２０）が示すレジスタの内容がリードデータ１（２０２１）にそれぞれ読み出される。
【００３０】
リトライステートマシン（２００２）は、リトライ制御に必要なステートを保持し、各ステート間の遷移は、エラー検出（３）、命令コード３（２０２２）によって決定される。また、リトライステートマシンのステートに対応して、リトライ例外（８）がアサートされる。
【００３１】
命令キュー（２００３）、遅延レジスタファイル（２００７）は、特定のアドレスにマッピングされ、ＣＰＵバス（９）とＣＰＵバスＩＦ（２００８）を介してＣＰＵからアクセス出来る。命令キュー（２００３）からはＰＣ２（２０１３）を、遅延レジスタファイル（２００７）からは任意のレジスタの内容を読み出すことが出来る。
【００３２】
続いて、図３により、ＣＰＵ（１）の出力部とエラーマスク回路（２００１）の詳細を説明する。図３は、ＣＰＵ（１）の出力部とエラーマスク回路（２００１）を示す詳細図である。
【００３３】
ＣＰＵ（１）の出力部は、ＦＦ（３００１〜３００５）、組み合わせ回路ＣＬ１〜４（３０２１〜３０２４）、パリティーチェック回路ＰＣＫ（３０２５）、ＦＦ（３０２６）等から構成される。また、エラーマスク回路（２００１）は、ＦＦ（３０３１〜３０３４）、マスク論理Ｍ１〜４（３０５１〜３０５４）等から構成される。ＣＰＵ（１）の出力部から、ＰＣ（４）、命令コード（５）、ライト制御（６）、ライトデータ（７）、エラー検出（３）がエラーマスク回路（２００１）に入力される。
【００３４】
ＣＰＵ（１）の出力部において、ＦＦ（３００１）、ＦＦ（３００２）、ＦＦ（３００３）、ＦＦ（３００４）からそれぞれ出力された信号１（３０１１）、信号２（３０１２）、信号３（３０１３）、信号４（３０１４）は、それぞれ、組み合わせ回路ＣＬ１（３０２１）、ＣＬ２（３０２２）、ＣＬ３（３０２３）、ＣＬ４（３０２４）を経由して、それぞれ、ＰＣ（４）、命令コード（５）、ライト制御（６）、ライトデータ（７）となる。
【００３５】
パリティーチェック回路ＰＣＫ（３０２５）は、ＦＦ（３００１）、ＦＦ（３００２）、ＦＦ（３００３）、ＦＦ（３００４）、およびＣＰＵ内の任意のＦＦ（３００５）の出力である信号１（３０１１）、信号２（３０１２）、信号３（３０１３）、信号４（３０１４）、信号ｎ（３０１５）をそれぞれ入力し、各信号のパリティーチェック結果（１：エラー有り、０：エラー無し）を論理和により集約したものをエラー検出０（２０２７）に出力する。この構成より、エラー検出０（２０２７）は、ＣＰＵ内の任意のＦＦのどれかにひとつでもエラーが発生した時に１になる。ＦＦ（３０２６）は、エラー検出０（２０２７）を入力し、エラー検出（３）を出力する。
【００３６】
ここで、ＣＬ１（３０２１）、ＣＬ２（３０２２）、ＣＬ３（３０２３）、ＣＬ４（３０２４）のディレイの最小値をＤＣＬ＿ＭＩＮ、ＰＣＫ（３０２５）のディレイをＤＰＣＫとすると、ＤＰＣＫはＤＣＬ＿ＭＩＮ以下となるように、ディレイが調整されている。
【００３７】
エラーマスク回路（２００１）において、ＦＦ（３０３１）、ＦＦ（３０３２）、ＦＦ（３０３３）、ＦＦ（３０３４）は、それぞれ、ＰＣ（４）、命令コード（５）、ライト制御（６）、ライトデータ（７）を入力し、それぞれ、ＰＣ０（３０４１）、命令コード０（３０４２）、ライト制御０（３０４３）、ライトデータ０（３０４４）を出力する。ＰＣ０（３０４１）、命令コード０（３０４２）、ライト制御０（３０４３）、ライトデータ０（３０４４）は、それぞれ、マスク論理Ｍ１（３０５１）、Ｍ２（３０５２）、Ｍ３（３０５３）、Ｍ４（３０５４）を経由して、ＰＣ１（２０１１）、命令コード１（２０１０）、ライト制御１（２０１４）、ライトデータ１（２０１５）となる。
【００３８】
マスク論理Ｍ１（３０５１）、Ｍ２（３０５２）、Ｍ３（３０５３）、Ｍ４（３０５４）は、エラー検出（３）が１の時、ＰＣ１（２０１１）、命令コード１（２０１０）、ライト制御１（２０１４）、ライトデータ１（２０１５）をそれぞれ無効な値にする。例えば、命令コード１（２０１０）は、エラー検出（３）が１の時、何も処理を行わないＮＯＰ（Ｎｏ  Ｏｐｅｒｅｔｉｏｎ）命令に対応するコードに変換される。
【００３９】
以上の構成にて、ＣＰＵ（１）からリトライ制御部（２）へのエラー伝播を抑止し、リトライ制御部（２）の誤動作を防ぐことが出来る。
【００４０】
続いて、図４および図５により、図３の構成において、ＤＰＣＫがＤＣＬ＿ＭＩＮ以下となる条件を満たす場合と、満たさない場合の動作例を説明する。図４は、参考のために、ＤＰＣＫがＤＣＬ＿ＭＩＮ以下となる条件を満たさない場合の動作例を示すタイミングチャートである。図５は、ＤＰＣＫがＤＣＬ＿ＭＩＮ以下となる条件を満たす場合の動作例を示すタイミングチャートである。ここでは、ＣＬ２（３０２２）のディレイが最小となる場合を示す。
【００４１】
図４（参考）において、サイクル１にてＦＦ（３００２）にエラーが発生すると（エラーが発生している状態をハッチングで示す）、そのエラーは、信号２（３０１２）、命令コード（５）を経由して、命令コード０（３０４２）に伝播する。ここで、エラー検出（３）を用いて、命令コード０（３０４２）のエラーをマスクし、無効化したものを命令コード１（２０１０）に出力するが、ＤＰＣＫはＤＣＬ＿ＭＩＮ以下でないため、エラー検出（３）アサートがサイクル３になる場合があり、その時は、サイクル２にて命令コード１（２０１０）にエラーが伝播する。
【００４２】
図５において、サイクル１にてＦＦ（３００２）にエラーが発生すると、そのエラーは、信号２（３０１２）、命令コード（５）を経由して、命令コード０（３０４２）に伝播する。ここで、エラー検出（３）を用いて、命令コード０（３０４２）のエラーをマスクし、無効化したものを命令コード１（２０１０）に出力するが、ＤＰＣＫはＤＣＬ＿ＭＩＮ以下の場合、エラー検出（３）アサートタイミングが命令コード０（３０４２）にエラーが伝播するタイミングと一致することが保証され、その結果、サイクル２−３における命令コード１（２０１０）へのエラー伝播を抑止することが出来る。
【００４３】
続いて、図６により、リトライステートマシン（２００２）のステート遷移を説明する。図６は、リトライステートマシン（２００２）のステート遷移を示す図である。
【００４４】
リトライステートマシン（２００２）は、ＣＰＵが通常の命令を実行中であること示すＮＯＲＭＡＬステート（６００１）、ＣＰＵがリトライ例外ルーチン処理中であることを示すＲＥＴＲＹステート（６００２）の２ステートからなる。リトライステートマシンの出力であるリトライ例外（８）は、ＮＯＲＭＡＬステート（６００１）では“０”、ＲＥＴＲＹステート（６００２）では“１”となる。
【００４５】
各ステート間の遷移条件は、エラー検出（３）＝１の時、ＮＯＲＭＡＬステート（６００１）から、ＲＥＴＲＹステート（６００２）へ遷移し、命令コード３（２０２２）がＲＴＥ命令（例外ルーチンからの復帰命令）の時、ＲＥＴＲＹステート（６００２）からＮＯＲＭＡＬステート（６００１）へ遷移する。なお、リトライステートマシン（２００２）の初期ステートはＮＯＲＭＡＬステート（６００１）とする。
【００４６】
続いて、図７により、命令キュー（２００３）の詳細を説明する。図７は、命令キュー（２００３）を示す詳細図である。
【００４７】
命令キュー（２００３）は、１段のＦＩＦＯ（７００１，７００２）、４段のＦＩＦＯ（７００３）等から構成される。
【００４８】
命令コード１（２０１０）は１段のＦＩＦＯ（７００１）によって遅延され、命令コード２（２０１２）に出力される。また、命令コード１（２０１０）は１段のＦＩＦＯ（７００２）によって遅延され、リトライステートマシン（２００２）のステート遷移用の命令コード３（２０２２）に出力される。また、ＰＣ１（２０１１）は４段のＦＩＦＯ（７００３）によって遅延され、ＰＣ２（２０１３）に出力される。ＦＩＦＯ（７００１）、ＦＩＦＯ（７００３）はリトライ例外（８）のアサートによって更新が抑止され、ネゲートによって全ての内容がクリアされる。
【００４９】
続いて、図８により、ライトキュー（２００４）の詳細を説明する。図８は、ライトキュー（２００４）を示す詳細図である。
【００５０】
ライトキュー（２００４）は、１段のＦＩＦＯ（８００１，８００２）等から構成される。
【００５１】
ライト制御１（２０１４）、ライトデータ１（２０１５）はそれぞれ１段のＦＩＦＯ（８００１）、ＦＩＦＯ（８００２）によって遅延され、ライト制御２（２０１６）、ライトデータ２（２０１７）にそれぞれ出力される。ＦＩＦＯ（８００１）、ＦＩＦＯ（８００２）はリトライ例外（８）のアサートによって内容が無効化される。
【００５２】
続いて、図９により、ＣＰＵバスエラー検出器（２００６）の詳細を説明する。図９は、ＣＰＵバスエラー検出器（２００６）を示す詳細図である。
【００５３】
ＣＰＵバスエラー検出器（２００６）は、命令デコーダ（９００１）、ＦＦ（９００２）、比較器ａ，ｂ（９００３，９００４）等から構成される。
【００５４】
命令デコーダ（９００１）は、命令コード２（２０１２）を解読して、ＣＰＵバスへライトを発生する命令かどうかを判定する。さらに、命令デコーダ（９００１）は、命令コード２（２０１２）を解読した結果、ＣＰＵバスへのライトを発生する命令であった場合は、ライト先アドレスを格納する汎用レジスタ番号をリード制御１ａ（２０１８ａ）に、ライトデータを格納するレジスタ番号をリード制御１ｂ０（９００５）に出力する。リード制御１ｂ０（９００５）はＦＦ（９００２）によって遅延され、リード制御１ｂ（２０１８ｂ）に出力される。なお、図２では、リード制御１ａ（２０１８ａ）とリード制御１ｂ（２０１８ｂ）を集約して、リード制御１（２０１８）と表記している。
【００５５】
遅延レジスタファイル（２００７）から、リード制御１ａ（２０１８ａ）が示すレジスタの内容がリードデータ１ａ（２０１９ａ）に読み出され、比較器ａ（９００３）によって、ＣＰＵバス（アドレス）（９ａ）と比較される。比較の結果、不一致があった場合、ライトキャンセルａ（１０ａ）がアサートされる。
【００５６】
同様に、遅延レジスタファイル（２００７）から、リード制御１ｂ（２０１８ｂ）が示すレジスタの内容がリードデータ１ｂ（２０１９ｂ）に読み出され、比較器ｂ（９００４）によって、ＣＰＵバス（データ）（９ｂ）と比較される。比較の結果、不一致があった場合、ライトキャンセルｂ（１０ｂ）がアサートされる。
【００５７】
なお、図２では、リードデータ１ａ（２０１９ａ）とリードデータ１ｂ（２０１９ｂ）を集約して、リードデータ１（２０１９）と表記している。また、ライトキャンセルａ（１０ａ）とライトキャンセルｂ（１０ｂ）を集約してライトキャンセル（１０）と表記している。
【００５８】
続いて、図１０により、リトライ例外ルーチンのフローを説明する。図１０は、リトライ例外ルーチンを示すフローチャートである。
【００５９】
最初に、ステップ（１００１）にて、ＰＣ２を読み出し、スタックにプッシュする。次に、ステップ（１００２）にて遅延レジスタファイルの内容をＣＰＵ内レジスタファイルに転送する。最後に、ステップ（１００３）にてＲＴＥ命令にて例外処理から復帰する。ステップ（１００１）にて、ＰＣ２をスタックにプッシュしていることから、ＲＴＥ命令による戻り先はＰＣ２が示すアドレスとなる。
【００６０】
続いて、図１１により、本実施の形態におけるリトライ動作例を説明する。図１１は、リトライ動作例を示すタイミングチャートである。図１１の上段にＣＰＵのパイプライン、下段にリトライ制御部の信号、および状態を示す。
【００６１】
まず、サイクル１〜６まで正常に命令が進み、命令コード、命令コード１、命令コード３、ＰＣ、ＰＣ１、ＰＣ２、ライト制御、ライト制御１、ライト制御２、ライトデータ、ライトデータ１、ライトデータ２、遅延レジスタファイルの各内容が更新されていく。
【００６２】
なお、図１１中、これらの信号、および状態の表記は、命令番号に対応させている。命令コード、命令コード１、命令コード３では、“１”は命令１の命令コードを示している。また、ＰＣ、ＰＣ１、ＰＣ２では、“１”は命令１に対応したＰＣ、すなわち命令１のアドレスを示している。また、ライト制御、ライト制御１、ライト制御２では、“１”は命令１のライトバック対象のレジスタ番号を示している。また、ライトデータ、ライトデータ１、ライトデータ２では、“１”は命令のレジスタへのライトバックデータを示す。また、遅延レジスタファイルでは、“１”は命令１の実行完了後のレジスタ内容が格納されていることを示す。
【００６３】
次に、サイクル７にて、ＣＰＵのあるＦＦにエラーが発生する。ここで、エラーにより誤動作の可能性があるパイプラインステージをハッチングで示している。
【００６４】
次に、サイクル８にて、エラー検出がアサートされる。同サイクルで、リトライステートが“ＮＯＲＭＡＬ”から“ＲＥＴＲＹ”に遷移し、これに対応して、リトライ例外がアサートされる。また、ＣＰＵはリトライ例外のアサートを受け、命令７を中止し、リトライ例外ルーチンへと分岐する。なお、本実施の形態におけるＣＰＵは、リトライ例外がアサートされた時にパイプラインのＤステージにある命令を中止し、例外ルーチンに分岐する。さらに、リトライ例外は最優先例外とし、リトライ例外処理中は、リトライ例外を含むすべての例外を受け付けない。
【００６５】
次に、サイクルｍよりリトライ例外ルーチンが開始され、図１０にて説明した処理を実行する。リトライ例外ルーチンでは、ＰＣ２から命令３のアドレスを読み出し、それをスタックにプッシュし、ＣＰＵ内レジスタファイルには、遅延レジスタファイルに格納されている命令２の実行完了状態の内容が転送される。
【００６６】
次に、サイクルｎにて、例外処理ルーチンから復帰する命令であるＲＴＥ命令が読み出される。続くサイクルｎ＋２にて、命令コード３にＲＴＥの命令コードが出力され、リトライステートが“ＲＥＴＲＹ”から“ＮＯＲＭＡＬ”に遷移する。
【００６７】
次に、ＲＴＥ命令の実行を受け、サイクルｌより、命令３から命令を再実行する。
【００６８】
以上に説明した通り、本実施の形態により、簡素な制御で、ＣＰＵ内の任意のエラーを検出し、レジスタの内容をエラーにより誤動作する可能性がある命令範囲より以前の命令実行完了状態に復帰させ、エラーにより誤動作した可能性がある命令範囲の先頭から命令をリトライすることが出来る。
【００６９】
続いて、図１２により、本実施の形態における誤ったＣＰＵバスライトを抑止する動作例を説明する。図１２は、誤ったＣＰＵバスライトを抑止する動作例を示すタイミングチャートである。図１２の上段にＣＰＵのパイプライン、下段にリトライ制御部の信号、および状態を示す。
【００７０】
なお、図１２中の命令コード、命令コード１、命令コード２、ライト制御、ライト制御１、ライト制御２、ライトデータ、ライトデータ１、ライトデータ２、遅延レジスタファイルの表記は図１１と同様とする。また、図１２中のリード制御１ａ、リード制御１ｂ、リードデータ１ａ、リードデータ１ｂ、ＣＰＵバス（アドレス）、ＣＰＵバス（データ）の表記は、対応する汎用レジスタの内容が出力されていることを示す。
【００７１】
ここでは、命令６のＣＰＵバスライト命令“ＭＯＶ  Ｒ４、＠Ｒ２”の誤りを抑止する例を示す。なお、“ＭＯＶ  Ｒ４、＠Ｒ２”は汎用レジスタＲ２が示すアドレスに、汎用レジスタＲ４の値をライトする命令である。本実施の形態による誤ったＣＰＵバスライトを抑止する機能を使用するために、命令６のソースオペランドであるＲ２、Ｒ４の内容を、命令１、命令２にてそれぞれ生成しておく。
【００７２】
まず、サイクル１〜７まで命令が進み、命令コード、命令コード１、命令コード２、ライト制御、ライト制御１、ライト制御２、ライトデータ、ライトデータ１、ライトデータ２、遅延レジスタファイルの各内容が更新される。
【００７３】
次に、サイクル８にて命令６実行により誤ったライトアドレスが出力される。ここで、命令６の５命令前の命令１にてＲ２の内容を生成していることから、遅延レジスタファイルは命令１の実行完了状態を保持しており、遅延レジスタファイルからＲ２の内容を読み出すことが出来る。図９で説明したＣＰＵバスエラー検出器（２００６）は、読み出したＲ２の内容とＣＰＵバス（アドレス）の内容との不一致を検出し、ライトキャンセルａをアサートする。
【００７４】
次に、サイクル９にて命令６実行により誤ったライトデータが出力される。ここで、命令６の４命令前の命令２にてＲ４の内容を生成していることから、遅延レジスタファイルは命令２の実行完了状態を保持しており、遅延レジスタファイルからＲ４の内容を読み出すことが出来る。図９で説明したＣＰＵバスエラー検出器（２００６）は、読み出したＲ４の内容とＣＰＵバス（データ）の内容との不一致を検出し、ライトキャンセルｂをアサートする。
【００７５】
内蔵ＲＡＭ等のＣＰＵバスターゲットモジュール（１１）は、ライトキャンセルがアサートされた場合、そのライトを抑止する機能が必要である。上記説明の動作の通り、ＣＰＵバスに誤ったアドレス、およびデータが出力されるタイミングで、そのキャンセルがアサートされることから、ＣＰＵバスターゲットモジュール（１１）において、このキャンセル信号を用いたライト抑止は簡素な制御で実装可能である。
【００７６】
以上に説明した通り、本実施の形態により、簡素な制御で、ＣＰＵのエラーによるＣＰＵバス上の誤ったライトを抑止することが出来る。
【００７７】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【産業上の利用可能性】
【００７８】
本発明は、リトライ制御を行うエラー訂正技術に関し、特に、パイプライン動作を行うＣＰＵにおいて、命令リトライによるＣＰＵのエラー訂正方法に適用して有効である。
【図面の簡単な説明】
【００７９】
【図１】本発明の一実施の形態である、エラー訂正機能を有する情報処理装置を示す全体図である。
【図２】本発明の一実施の形態において、リトライ制御部を示す詳細図である。
【図３】本発明の一実施の形態において、ＣＰＵの出力部とエラーマスク回路を示す詳細図である。
【図４】本発明の一実施の形態において、参考のために、ＤＰＣＫがＤＣＬ＿ＭＩＮ以下となる条件を満たさない場合の動作例を示すタイミングチャートである。
【図５】本発明の一実施の形態において、ＤＰＣＫがＤＣＬ＿ＭＩＮ以下となる条件を満たす場合の動作例を示すタイミングチャートである。
【図６】本発明の一実施の形態において、リトライステートマシンのステート遷移を示す図である。
【図７】本発明の一実施の形態において、命令キューを示す詳細図である。
【図８】本発明の一実施の形態において、ライトキューを示す詳細図である。
【図９】本発明の一実施の形態において、ＣＰＵバスエラー検出器を示す詳細図である。
【図１０】本発明の一実施の形態において、リトライ例外ルーチンを示すフローチャートである。
【図１１】本発明の一実施の形態において、リトライ動作例を示すタイミングチャートである。
【図１２】本発明の一実施の形態において、誤ったＣＰＵバスライトを抑止する動作例を示すタイミングチャートである。
【符号の説明】
【００８０】
１…ＣＰＵ、２…リトライ制御部、３…エラー検出、４…ＰＣ、５…命令コード、６…ライト制御、７…ライトデータ、８…リトライ例外、９…ＣＰＵバス、１０…ライトキャンセル、１１…ＣＰＵバスターゲットモジュール、２００１…エラーマスク回路、２００２…リトライステートマシン、２００３…命令キュー、２００４…ライトキュー、２００６…ＣＰＵバスエラー検出器、２００７…遅延レジスタファイル、２００８…ＣＰＵバスＩＦ、３００１〜３００５…ＦＦ、３０２１〜３０２４…組み合わせ回路（ＣＬ１〜４）、３０２５…パリティーチェック回路（ＰＣＫ）、３０２６…ＦＦ、３０３１〜３０３４…ＦＦ、３０５１〜３０５４…マスク論理（Ｍ１〜４）、７００１〜７００３…ＦＩＦＯ、８００１，８００２…ＦＩＦＯ、９００１…命令デコーダ、９００２…ＦＦ、９００３，９００４…比較器ａ，ｂ。
【図１】
0005129450.tif 000002
【図２】
0005129450.tif 000003
【図３】
0005129450.tif 000004
【図４】
0005129450.tif 000005
【図５】
0005129450.tif 000006
【図６】
0005129450.tif 000007
【図７】
0005129450.tif 000008
【図８】
0005129450.tif 000009
【図９】
0005129450.tif 000010
【図１０】
0005129450.tif 000011
【図１１】
0005129450.tif 000012
【図１２】
0005129450.tif 000013