(57)【要約】 【課題】  本実施例に係るエラー訂正方法は、計算器の処理速度を落とすことなく、レジスタファイルのエラー訂正を行うことを目的とする。【解決手段】  本実施例に係るエラー訂正方法は、演算器に設けられたレジスタがデータ及びチェックデータを保持し、該データに発生するエラーを訂正するエラー訂正方法において、該演算器が該チェックデータを用いて該データのエラーを検出する検出ステップと、該演算器が該チェックデータと異なる訂正データを用いて、該データにおいて検出したエラーを訂正する訂正ステップとを有することを特徴とする。【選択図】  図４
2008152728.tif 000002
【特許請求の範囲】
【請求項１】
演算器に設けられたレジスタがデータ及びチェックデータを保持し、該データに発生するエラーを訂正するエラー訂正方法において、
該演算器が該チェックデータを用いて該データのエラーを検出する検出ステップと、
該演算器が該チェックデータと異なる訂正データを用いて、該データにおいて検出したエラーを訂正する訂正ステップと、
を有することを特徴とするエラー訂正方法。
【請求項２】
請求項１に記載のエラー訂正方法において、
該訂正ステップは、該演算器がエラーを検出した場合、演算処理を中断し、該訂正データを用いて該データをエラー訂正するエラー訂正方法。
【請求項３】
請求項１に記載のエラー訂正方法において、
該チェックデータと該訂正データは、該データに対応して該レジスタに格納されていることを特徴とするエラー訂正方法。
【請求項４】
請求項１に記載のエラー訂正方法は、
該検出ステップにおいてエラーを検出したとき、該訂正ステップにおける該訂正データを該レジスタより読み出すと共に、エラーが検出されたデータを該レジスタより再び読み出すことを特徴とするエラー訂正方法。
【請求項５】
請求項１に記載のエラー訂正方法において、
該検出ステップは、該データと該チェックデータとの排他的論理和を演算することによりエラーを検出することを特徴とするエラー訂正方法。
【請求項６】
請求項１に記載のエラー訂正方法において、
該チェックデータは、パリティデータであることを特徴とするエラー訂正方法。
【請求項７】
請求項１に記載のエラー訂正方法は、
該訂正ステップにおいて、該訂正データを用いてビットの誤り位置を求めるためのシンドロームを生成し、該シンドロームを用いて該エラーを訂正することを特徴とするエラー訂正方法。
【請求項８】
請求項１に記載のエラー訂正方法において、
該訂正データは、ＥＣＣデータであることを特徴とするエラー訂正方法。
【請求項９】
請求項１に記載のエラー訂正方法において、
該レジスタは処理するデータ全体を保持するマスタレジスタファイルと該マスタレジスタファイルから転送する一部のデータを保持するカレントレジスタファイルを有することを特徴とするエラー訂正方法。
【請求項１０】
請求項１に記載のエラー訂正方法において、
該訂正ステップにおける訂正データは、該チェックデータを転送する信号線を用いて訂正データを転送することを特徴とするエラー訂正方法。
【請求項１１】
請求項１に記載のエラー訂正方法において、
該検出ステップにおけるエラーの検出は、演算処理を制御する演算制御部からの指示に従うことを特徴とするエラー訂正方法。
【請求項１２】
請求項１に記載のエラー訂正方法は、
さらにエラー訂正したデータに対応する訂正データを新たに生成する生成ステップを有することを特徴とするエラー訂正方法。
【請求項１３】
請求項１に記載のエラー訂正方法において、
該訂正ステップにおけるエラー検出の有無はエラーフラグを用いて判別することを特徴とするエラー訂正方法。
【請求項１４】
請求項１に記載のエラー訂正方法において、
該検出ステップにおけるエラーの検出は、該データ転送時に発生する転送データのエラー検出であることを特徴とするエラー訂正方法。
【請求項１５】
請求項１に記載のエラー訂正方法において、
該検出ステップにおけるエラーの検出は、該データの演算処理時に発生する演算データのエラー検出であることを特徴とするエラー訂正方法。
【請求項１６】
請求項１に記載のエラー訂正方法は、
さらに訂正したデータを該レジスタに書き戻すステップを有することを特徴とするエラー訂正方法。
【請求項１７】
データに発生するエラーを訂正する演算器において、
データ、該データに対応するチェックデータ、および該データに対応する訂正データを保持するレジスタと、
該チェックデータを用いて該データのエラーを検出する検出手段と、
該エラーを検出した場合には該訂正データを用いて訂正する訂正手段と
を有することを特徴とする演算器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は演算器及びそれらのエラー訂正方法に関する。
【背景技術】
【０００２】
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に搭載されるトランジスタ数の増加に伴って、ＣＰＵに搭載したレジスタファイルにおいて、エラーが頻繁に発生する問題が起こっている。【０００３】
従来からエラーの検出については、数ビット毎に奇数又は偶数パリティを設けてエラーの検出を行う方法が一般的である。しかし、パリティによる方法では、エラーを検出できてもエラーの訂正はできないため、レジスタファイル等のアクセスにおいてエラーを検出した場合には、メモリアクセスを再実行する必要が有り、性能に与える影響が大きい。【０００４】
そのためレジスタファイルのデータにおけるエラーを検出するのみならず、訂正することが求められてきており、ＥＣＣ（Ｅｒｒｏｒ−Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）を用いて訂正することが望ましい。【０００５】
しかしながら、レジスタファイルのデータに従来付加されていたパリティデータをＥＣＣデータに置き換えるだけでは、ＣＰＵの処理速度が大幅に低減するといった問題がある。【０００６】
またエラー訂正方法に関して以下の特許文献がある。
【特許文献１】特開平５−２０２１５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本願発明に係るエラー訂正方法は、情報処理装置におけるＣＰＵの処理速度を落とすことなく、レジスタファイルのエラー訂正を行うことを目的とする。
【課題を解決するための手段】
【０００８】
本実施例に係るエラー訂正方法は、演算器に設けられたレジスタがデータ及びチェックデータを保持し、該データに発生するエラーを訂正するエラー訂正方法において、該演算器が該チェックデータを用いて該データのエラーを検出する検出ステップと、該演算器が該チェックデータと異なる訂正データを用いて、該データにおいて検出したエラーを訂正する訂正ステップとを有することを特徴とする。【０００９】
また本実施例に係るエラー訂正方法は、該訂正ステップが該演算器がエラーを検出した場合、演算処理を中断し、該訂正データを用いて該データをエラー訂正することを特徴とする。【００１０】
また本実施例に係るエラー訂正方法は、該チェックデータと該訂正データが該データに対応して該レジスタに格納されていることを特徴とする。【００１１】
また本実施例に係るエラー訂正方法は、該検出ステップにおいてエラーを検出したとき、該訂正ステップにおける該訂正データを該レジスタより読み出すと共に、エラーが検出されたデータを該レジスタより再び読み出すことを特徴とする。【００１２】
また本実施例に係るエラー訂正方法は、該検出ステップが該データと該チェックデータとの排他的論理和を演算することによりエラーを検出することを特徴とする。【００１３】
また本実施例に係るエラー訂正方法は、該チェックデータがパリティデータであることを特徴とする。【００１４】
また本実施例係るエラー訂正方法は、該訂正ステップが該訂正データを用いてビットの誤り位置を求めるためのシンドロームを生成し、該シンドロームを用いて該エラーを訂正することを特徴とする。【００１５】
また本実施例に係るエラー訂正方法は、該訂正データがＥＣＣデータであることを特徴とする。【００１６】
また本実施例に係るエラー訂正方法は、該レジスタは処理するデータ全体を保持するマスタレジスタファイルと該マスタレジスタファイルから転送する一部のデータを保持するカレントレジスタファイルを有することを特徴とする。【００１７】
また本実施例に係るエラー訂正方法は、該訂正ステップにおける訂正データは、該チェックデータを転送する信号線を用いて訂正データを転送することを特徴とする。【００１８】
また本実施例に係るエラー訂正方法は、該検出ステップにおけるエラーの検出では、演算処理を制御する演算制御部からの指示に従うことを特徴とする。【００１９】
また本実施例に係るエラー訂正方法は、さらにエラー訂正したデータに対応する訂正データを新たに生成する生成ステップを有することを特徴とする。【００２０】
また本実施例に係るエラー訂正方法は、該訂正ステップにおけるエラー検出の有無はエラーフラグを用いて判別することを特徴とする。【００２１】
また本実施例に係るエラー訂正方法は、該検出ステップにおけるエラーの検出では、該データ転送時に発生する転送データのエラー検出であることを特徴とする。【００２２】
また本実施例に係るエラー訂正方法は、該検出ステップにおけるエラーの検出では、該データの演算処理時に発生する演算データのエラー検出であることを特徴とする。【００２３】
また本実施例に係るエラー訂正方法は、さらに訂正したデータを該レジスタに書き戻すステップを有することを特徴とする。【００２４】
さらに本実施例に係る演算器は、データに発生するエラーを訂正する演算器において、データ、該データに対応するチェックデータ、および該データに対応する訂正データを保持するレジスタと、該チェックデータを用いて該データのエラーを検出する検出手段と、該エラーを検出した場合には該訂正データを用いて訂正する訂正手段とを有することを特徴とする。
（発明の効果）
本願発明におけるエラー訂正方法によれば、エラー検出しないときはＥＣＣ演算に伴う処理をスキップすることによって、情報処理装置のＣＰＵの処理速度を低減することなく、レジスタファイルのビットエラーを訂正することができる。
【図面の簡単な説明】
【００２５】
【図１】本発明の一実施例におけるレジスタファイル内のデータフォーマットである。
【図２】本発明の一実施例におけるレジスタファイル２００である。
【図３】本発明の一実施例におけるレジスタファイル４０１でのエラーを訂正する訂正フローチャートである。
【図４】本発明の一実施例における演算回路４００のブロック図である。
【図５】本発明の一実施例におけるカレントレジスタファイル６０２でのエラーを訂正する訂正フローチャートである。
【図６】本発明の一実施例における演算回路６００のブロック図である。
【図７】本発明の一実施例におけるＣＰＵ７００のブロック図である。
【図８】本発明の一実施例におけるＣＰＵ７００のタイミングチャートである。
【図９】本発明の一実施例におけるＣＰＵ７００のタイミングチャートである。
【図１０】本発明の一実施例におけるＣＰＵ７００のタイミングチャートである。
【図１１】従来のＣＰＵのタイミングチャートである。
【符号の説明】
【００２６】
１００…データフォーマット
１０１…データ
１０２…パリティデータ
１０３…ＥＣＣデータ
２００…レジスタファイル
４００…演算回路
４０１…レジスタファイル
４０２…演算器
４０３…パリティチェッカ
４０４…ＥＣＣ生成回路
４０５…ＥＣＣ訂正回路
６００…演算回路
６０１…マスタレジスタファイル
６０２…カレントレジスタファイル
６０３…パリティチェッカ
６０４…パリティチェッカ
６０５…演算器
６０６…ＥＣＣ訂正回路
６０７…ＥＣＣ生成回路
７００…ＣＰＵ
７０１…メモリ
７０２…キャッシュ制御ユニット
７０３…キャッシュ
７０４…命令制御ユニット
７０５…演算ユニット
７０６…演算制御部
７０７…演算部
７０８…レジスタ部
７０９…エラー訂正部
【発明を実施するための最良の形態】
【００２７】
本発明の一実施例におけるエラー訂正方法は、情報処理装置のＣＰＵの処理速度を低減することなく、エラー訂正を行い、情報処理装置のＣＰＵにおける信頼性の向上を目的とする。具体的には、本実施例におけるエラー訂正方法は、情報処理装置に搭載するＣＰＵ内部で実現される。【００２８】
もちろん本実施例におけるエラー訂正方法は、ＣＰＵ以外にも、レジスタファイルを有しプログラムによって様々な数値計算、情報処理、画像処理又は機器制御を行うＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ），ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）又はコントローラＬＳＩ等の演算回路においても実現される方法である。【００２９】
そして本実施例におけるエラー訂正方法を実現する回路を実装したＣＰＵでは、レジスタ内にデータと共にパリティデータとＥＣＣデータを保持する。パリティデータは、データのビットエラーを検出するためのデータである。またＥＣＣデータは、検出したエラーを訂正するためのデータである。本実施例では、パリティデータ、ＥＣＣデータは共に８ビットのデータである。ＣＰＵなどは、ＥＣＣデータを用いてエラー検出を行うことは可能であるが、本実施例におけるエラー訂正方法は、エラー検出はパリティデータを用いて行い、検出したエラーはＥＣＣデータを用いて訂正する。【００３０】
まずＣＰＵはレジスタからデータと該データに対応するパリティデータを読み出す処理を行い、読み出したデータのエラー検出の有無を判別する。ＣＰＵはそれぞれレジスタから読み出したデータとパリティデータのＥＯＲ（Ｅｘｃｌｕｓｉｖｅ−ＯＲ：排他的論理和）演算を行い、パリティエラーの有無を判別する。またパリティデータを用いたエラー検出では１ビットエラーの有無を検出する。【００３１】
ＣＰＵはパリティチェックを行うことによって、レジスタからの読み出しデータの正当性を保証する、これによりＣＰＵはデータ転送におけるエラーの検出を行う。ＣＰＵが１ビットエラーを検出したとき、ＣＰＵは実行している演算処理を一時中断する。そしてＣＰＵはレジスタからエラーの検出されたデータを再び読み出すと共に該データに対応するＥＣＣデータを読み出す。ＣＰＵはＥＣＣデータに基づいて検出した１ビットエラーを訂正して、エラーが訂正されたデータをレジスタに書き込み修正を行う。【００３２】
これより、ＣＰＵの処理速度の低減を抑えつつ、１ビットエラーを訂正でき、処理速度も速く、かつ信頼性も高いＣＰＵを実現することができる。【００３３】
（実施例１）
図１は本実施例におけるレジスタファイル内のデータフォーマット１００である。本実施例におけるデータファーマット１００はレジスタファイルの１エントリとして設定されるデータの単位である。【００３４】
データフォーマット１００は、データ１０１、パリティデータ１０２、ＥＣＣデータ１０３から構成されている。本実施例において、データ１０１は６４ビット（８バイト）、パリティデータ１０２は８ビット、ＥＣＣデータ１０３は８ビットである。【００３５】
パリティデータ１０２は、データ１０１に１ビットエラーがあるか否かを検出するために用いるデータである。ＥＣＣデータ１０３は、データ１０１に存在する１ビットエラーを訂正するために用いるデータである。【００３６】
また本実施例におけるＣＰＵは、パリティデータ１０２とＥＣＣデータ１０３を物理的に同じ信号線を用いて読み出しを行う。これにより新たな信号線を増やすことなく、ＣＰＵはＥＣＣ演算を行うことができ、エラー訂正を行うことができる。ここで演算処理を行う演算器は、ＣＰＵ以外のＤＳＰ、ＧＰＵ又はコントローラＬＳＩ等が有する演算処理可能なユニットであってもよい。【００３７】
ＣＰＵはレジスタファイルのデータをデータ１０１とパリティデータ１０２の組、またはデータ１０１とＥＣＣデータ１０３の組の単位で読み出し処理、あるいは書き込み処理を行う。もちろんデータフォーマット１００のサイズは、６４ビット（データ１０１）＋８ビット（パリティデータ１０２）＋８ビット（ＥＣＣデータ）以外のサイズであってもよく、データサイズが当該サイズに限定されることはない。【００３８】
図２は本実施例におけるレジスタファイル２００である。本実施例では、レジスタファイル２００は、２Ｗｒｉｔｅ−２Ｒｅａｄ、８バイト、１６０エントリのレジスタファイルである。２Ｗｒｉｔｅ−２Ｒｅａｄとは、ＣＰＵが実行する処理方式であり、２エントリ単位で行う読み出し処理、または書き込み処理のことである。レジスタファイル２００は、部分データ２０１〜２０６から構成されている。レジスタファイル２００は１６０個のエントリから構成されており、図２では代表して部分データ２０１〜２０６を図示している。部分データ２０１〜２０６は、データフォーマット１００の構成をしており、「データ２１」、「パリティデータ２２」、「ＥＣＣデータ２３」から構成されている。１エントリは「データ２１」、「パリティデータ２２」、「ＥＣＣデータ２３」を合わせたブロック単位で構成されるものである。アドレス２０７は、部分データ２０１〜２０６を含む１６０個の部分データのレジスタファイルにおけるアドレスを示すものである。ＣＰＵは、アドレス２０７を参照して、所望の部分データの読み出し処理、書き出し処理を行う。【００３９】
ＣＰＵはレジスタファイル２００に保持される部分データ２０１〜２０６を２エントリ単位で書き込み処理、または読み出し処理を行う。そして本実施例におけるエラー訂正機構を搭載するＣＰＵは、以下に示す訂正フローに則ってエラーの検出およびエラーの訂正処理を行う。【００４０】
図３は本実施例におけるレジスタファイル４０１でのエラーを訂正する訂正フローチャートである。そして図４は本実施例におけるエラー訂正機構を示す演算回路４００のブロック図である。演算回路４００は後述する図７に記載の演算部７０７、レジスタ部７０８、エラー訂正部７０９に相当するものである。また図３に示す訂正フローチャートは、演算回路４００が実現する処理のフローチャートであって、ＣＰＵ７００でのエラー訂正に係るフローチャートである。【００４１】
図４に記載の演算回路４００は、レジスタファイル４０１、演算器４０２、パリティチェッカ４０３、ＥＣＣ生成回路４０４、ＥＣＣ訂正回路４０５から構成される。【００４２】
レジスタファイル４０１は、図２に示すレジスタファイル２００と同等の機能、構成を有するものであり、複数の部分データから構成されている。また部分データは、データ、パリティデータ、ＥＣＣデータから構成されている。【００４３】
演算器４０２はレジスタファイル４０１から読み出すデータを演算するものであって、四則演算、論理演算などの処理を行う装置である。具体的に演算器４０２は、例えばＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）であって、整数演算操作（加算、減算、乗算）、論理演算（ＡＮＤ、ＮＯＴ、ＯＲ、ＸＯＲ）、ワードを指定されたビット数ぶんだけ右（または左）にシフトするビットシフト操作の動作などを行うものである。【００４４】
パリティチェッカ４０３は、レジスタファイル４０１から読み出すデータとそのデータに対応するパリティデータのパリティチェックを行う。パリティチェックはデータとパリティデータをＥＯＲ演算してエラーのチェックを行う。またパリティチェッカ４０３において検出するエラーは１ビットエラーである。【００４５】
ＥＣＣ生成回路４０４は、演算器４０２で演算処理した演算結果のデータを用いてＥＣＣデータを作成する。ＥＣＣ生成回路４０４が作成したＥＣＣデータは演算結果のデータに対応するものである。【００４６】
ＥＣＣ訂正回路４０５は、パリティチェッカ４０３で検出したレジスタファイル４０１からの読み出しデータのエラーを訂正する。パリティチェッカ４０３でエラーを検出した場合、演算器４０２は演算処理を一旦中止し、エラー訂正回路４０５はエラーを検出したアドレスのデータとそのデータに対応するＥＣＣデータをレジスタファイル４０１から読み出す。そしてエラー訂正回路４０５はＥＣＣデータに基づいて、検出したエラーを訂正する。【００４７】
結果選択回路４０６は、ＥＣＣ演算制御部７０６からの制御に基づいて、ＥＣＣ生成回路４０４によって生成したＥＣＣデータと演算結果のデータを対応付けて、そのＥＣＣデータ、演算結果データ及び対応するパリティデータをレジスタファイル４０１に書き戻す。【００４８】
次に図３における訂正フローチャートについて説明する。【００４９】
まず演算回路４００のパリティチェッカ４０３は、レジスタファイル４０１からデータとそのデータに対応するパリティデータを読み出す（Ｓ３０１）。そしてパリティチェッカ４０３は読み出したデータとパリティデータのパリティチェックを行い、読み出したデータにおけるエラーの有無を判別する（Ｓ３０２）。このとき演算器４０２は、レジスタファイル４０１から読み出したデータの演算処理を行う。【００５０】
パリティチェッカ４０３はレジスタから読み出したデータにパリティエラーがないと判別する場合には（Ｓ３０２  ＮＯ）、演算器４０２は継続して演算処理を行う（Ｓ３０３）。【００５１】
パリティチェッカ４０３が、レジスタから読み出したデータにパリティエラーがあると判別する場合には（Ｓ３０３  ＹＥＳ）、演算器４０２は演算処理を一旦中止する（Ｓ３０４）。ＥＣＣ訂正回路４０５は、パリティチェッカ４０３でデータの読み出しエラーを検出した後、レジスタファイルからエラー検出したデータとそのデータに対応するＥＣＣデータを読み出す。そしてＥＣＣ訂正回路４０５はレジスタファイル４０1から読み出したデータのエラーを訂正する。（Ｓ３０５）。そしてＥＣＣ訂正回路４０５は、エラー訂正を完了する（Ｓ３０６）。そしてＥＣＣ訂正回路４０５がデータエラーを訂正した後、結果選択回路４０６は訂正したデータ、そのデータに対応するＥＣＣデータ及びパリティデータをレジスタファイル４０１に書き戻す。演算器４０２はエラーを検出した命令から再実行する。またパリティチェッカ４０３がレジスタファイル４０１から読み出すデータのエラーを検出しない場合には、演算器４０２は演算処理する。そしてＥＣＣ生成回路４０４は演算結果のデータに対応するＥＣＣデータとパリティデータを生成する。そして結果選択回路４０６は演算結果のデータ、ＥＣＣ生成回路４０４が生成したＥＣＣデータとパリティデータをレジスタファイル４０１に書き戻す。【００５２】
以上の手順に従ってエラー訂正を行い、パリティエラーが発生した場合にのみレジスタファイル４０１のビットエラーを訂正することによって、情報処理装置のＣＰＵの処理速度に影響を与えることなく、レジスタファイル４０１におけるビットエラーを訂正することができる。【００５３】
本実施例では、パリティチェッカ４０３はパリティチェックをおこなってエラー検出を行うため、検出可能なエラーは１ビットエラーである。もちろん演算の処理速度との関係を考慮して検出するエラーは１ビットエラー以外であってもよく、それらのエラーを検出するエラー検出方法を用いても構わない。本実施例におけるエラー訂正方法では、エラーの検出方法と訂正方法が異なり、エラーの検出方法のほうがエラー訂正方法よりも処理速度が速い。【００５４】
図５は本実施例におけるレジスタファイルのエラー検出及び訂正のフローチャートである。図５に記載の訂正フローチャートは、図６に示す演算回路６００が実現する処理である。図５に示すエラー訂正方法は、マスタレジスタファイル６０１からカレントレジスタファイル６０２へのデータ転送のエラーなどを検出、訂正する方法である。【００５５】
まずＥＣＣ演算制御部７０５は命令制御ユニット７０４からの信号によりデータおよびパリティデータをマスタレジスタファイル６０１からカレントレジスタファイル６０２へ転送するか否かを判別する（Ｓ５０１）。マスタレジスタファイル６０１は、演算回路６００が処理するデータの全体を保持するレジスタファイルであり、カレントレジスタファイル６０２はマスタレジスタファイル６０１が扱うデータの一部分を保持するレジスタファイルである。演算器６０５は、カレントレジスタファイル６０２が保持するデータの演算処理を行う。【００５６】
ＥＣＣ演算制御部７０５が、マスタレジスタファイル６０１からのデータ転送を行わないと判別する場合（Ｓ５０１  ＮＯ）、パリティチェッカ６０４は、パリティデータを用いて、カレントレジスタファイル６０２から演算器６０５へ転送するデータのパリティエラーの有無を判別する（Ｓ５０３）。本実施例では、演算器６０５が演算処理するデータはカレントレジスタファイル６０２に保持するデータである。これは演算回路６００の処理速度を向上するためである。演算器６０５がマスタレジスタファイル６０１より保持する量が少ないカレントレジスタファイル６０２にアクセスして演算処理を行うことにより、演算回路６００は処理速度を向上することができる。【００５７】
パリティチェッカ６０３が演算機に転送するデータ内にパリティエラーを検出しない場合（Ｓ５０３  ＮＯ）、演算器６０５は引き続き演算処理を行う（Ｓ５０４）。パリティチェッカ６０３が演算器に転送するデータにパリティエラーを検出した場合（Ｓ５０３  ＹＥＳ）、命令制御ユニット７０４は、エラーフラグがＯＮであるか否か判別する（Ｓ５０８）。ここでエラーフラグとは、マスタレジスタファイル６０１からカレントレジスタファイル６０２に転送されるデータにパリティエラーが存在するか否かを示すフラグである。演算制御部７０６がエラーフラグを保持する。そして命令制御ユニットは、演算制御部７０６が保持するエラーフラグのＯＮ、ＯＦＦを判別する。ＥＣＣ演算制御部７０５がマスタレジスタファイルからのデータ転送を行うと判別した場合（Ｓ５０１  ＹＥＳ）、パリティチェッカ６０３はマスタレジスタファイル６０１から転送されたデータにパリティエラーがあるか否か判別する（Ｓ５０５）。【００５８】
パリティチェッカ６０３がマスタレジスタファイル６０１から転送されたデータにパリティエラーを検出した場合（Ｓ５０５  ＹＥＳ）、パリティチェッカ６０３はエラーフラグをＯＮにする（Ｓ５０７）。またパリティチェッカ６０３はマスタレジスタファイル６０１から転送されたデータにパリティエラーを検出しない場合（Ｓ５０５  ＮＯ）、パリティチェッカ６０３はエラーフラグをＯＦＦとして（Ｓ５０６）、カレントレジスタファイル６０２からデータを読み出す（Ｓ５０２）。ここでカレントレジスファイル６０２が保持するデータはマスタレジスタファイル６０１から転送されたデータである。マスタレジスタファイル６０１、カレントレジスタファイル６０２に格納されるデータのエラーフラグは、初期状態でＯＦＦである。そのためパリティチェッカ６０３がエラーを検出するまでは、エラーフラグはＯＦＦのままである。【００５９】
そしてステップＳ５０８において、命令制御ユニット７０４が、エラーフラグがＯＮであると判別した場合（Ｓ５０８  ＹＥＳ）、エラー訂正回路６０６はパリティチェッカ６０３がエラーを検出したデータのエラー訂正処理を行う（Ｓ５０９）。ここで命令制御ユニット７０４は自身が保持するエラーフラグのＯＮ、ＯＦＦの状態を判別してそのエラーフラグに対応したデータとＥＣＣデータの転送制御を行うユニットである。そして結果選択回路６０８はマスタレジスタファイル６０１及びカレントレジスタファイル６０２への書き戻し処理を実行する（Ｓ５１１）。書き戻し処理とは、結果選択回路６０８が行う処理であって、データ、そのデータに対応するＥＣＣデータ及びそのデータに対応するパリティデータを、マスタレジスタファイル６０１及びカレントレジスタファイル６０２に書き加えるもしくは上書きする処理のことである。【００６０】
またステップＳ５０８において、命令制御ユニット７０４がエラーフラグはＯＦＦであると判別した場合（Ｓ５０８  ＮＯ）、演算器６０５は命令リトライにより、演算処理を再実行する（Ｓ５１０）。【００６１】
また本実施例に係るＣＰＵはコミット・スタック・エントリ(ＣＳＥ:Ｃｏｍｍｉｔ  Ｓｔａｃｋ  Ｅｎｔｒｙ)と呼ばれるバッファを有している。ＣＳＥは命令ごとに１エントリが割り当てられ、実行中の命令の進捗状況の監視に用いる。ＣＳＥのエントリは、プログラム命令の順序に従って、イン・オーダで命令が完了する命令コミット時に無効化される。【００６２】
命令コミットに伴うＣＳＥの更新指示はイン・オーダで行われるため、いつ命令実行を中断しても、その時点でプログラムカウンタが指す位置で、プログラマブルな資源の一貫性が保証できる。またＣＳＥがコミットのたびにチェックポイントを形成して、パイプライン制御の書き込みサイクルの機能を実現している。これより命令実行を中断した場合においても、作業レジスタや演算器６０５の入出力などに残っているデータは全て破棄することが可能である。【００６３】
本実施例にかかるエラー検出、エラー訂正の機構は分岐の予測ミスずれのリカバリや，割り込み発生時であっても、プログラマブルな資源の一貫性を保つことができ、命令リトライ（命令再実行）を可能とする。つまり命令フェッチ、命令実行などで、パリティチェッカ６０３がマスタレジスタファイル６０１からカレントレジスタファイルへの転送データにエラーを検出した場合、命令制御ユニット７０４がＣＰＵのプロセススイッチを起動して命令実行を中断する。ＣＳＥが形成したチェックポイントで処理が停止する。そしてＣＳＥは命令フェッチや実行に関する資源を保持し、あらためてプログラムカウンタの位置から再開すれば、データインテグリティ（データの整合性）を損なうことなく命令リトライを行うことができる。【００６４】
図６は本実施例におけるレジスタファイル及び、訂正回路をもった演算回路６００のブロック図である。【００６５】
演算回路６００は、マスタレジスタファイル６０１、カレントレジスタファイル６０２、パリティチェッカ６０３、パリティチェッカ６０４、演算器６０５、ＥＣＣ訂正回路６０６、ＥＣＣ生成回路６０７から構成されている。【００６６】
マスタレジスタファイル６０１、カレントレジスタファイル６０２は複数の部分データから構成されている。カレントレジスタファイル６０２は、マスタレジスタファイル６０１から所定の数の部分データを読み出したレジスタファイルである。マスタレジスタファイル６０１は、演算回路６００が処理するエントリ全体の部分データを保持するレジスタファイルである。またカレントレジスタファイル６０２は、マスタレジスタファイル６０１からデータを所定のタイミングで読み出しデータ処理を行う。そのため、マスタレジスタファイル６０１を構成する部分データのエントリ数は、カレントレジスタファイル６０２を構成する部分データのエントリ数よりも多い。データ処理に必要な最小限のデータをカレントレジスタ６０１に保持することによって、演算回路６００のデータ処理速度を向上することができる。【００６７】
またマスタレジスタファイル６０２は、物理的に異なる信号線を用いて、データとパリティデータ（またはＥＣＣデータ）を送信する。本実施例ではマスタレジスタファイル６０１は、転送バス６０９を用いてパリティデータまたはＥＣＣデータを、転送バス６１０を用いてデータをカレントレジスタファイル６０２へ送信する。カレントレジスタ６０２は、転送バス６１１、６１２を用いてデータとパリティデータを演算器６０５、パリティチェッカ６０４に送る。カレントレジスタファイル６０２は転送バス６１１を用いてエラー訂正回路６０６に対してデータとＥＣＣデータを送信し、転送バス６１２を用いてデータとパリティデータを演算器６０５、パリティチェッカ６０４に送る。さらにカレントレジスタファイル６０２は転送バス６１２を用いてデータとＥＣＣデータをエラー訂正回路６０６へ送信する。【００６８】
パリティチェッカ６０３は、マスタレジスタファイル６０１からカレントレジスタファイル６０２に読み出される部分データのパリティチェックを行う。パリティチェッカ６０３がパリティエラーを検出した場合、パリティチェッカ６０３はエラーフラグをＯＮにする。そしてパリティチェッカ６０３はカレントレジスタファイル６０２にマスタレジスタファイル６０１から読み出したデータの読み出しアドレスを記憶する。【００６９】
パリティチェッカ６０４は、演算器６０５において演算対象（演算処理前）のデータにおけるパリティエラーをチェックするチェッカである。【００７０】
演算器６０５はカレントレジスタファイル６０２から読み出すデータを演算するものであって、四則演算、論理演算などの処理を行う装置である。具体的に演算器６０５は、例えばＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃａｌ  Ｕｎｉｔ）であって、整数演算操作（加算、減算、乗算）、論理演算（ＡＮＤ、ＮＯＴ、ＯＲ、ＸＯＲ）、ワードを指定されたビット数ぶんだけ右（または左）にシフトするビットシフト操作の動作を行うものである。【００７１】
ＥＣＣ訂正回路６０６は、カレントレジスタファイル６０２から読み出したデータのエラーを、ＥＣＣデータを用いて訂正する回路である。ここでＥＣＣ訂正回路６０６は、エラー訂正に用いるＥＣＣデータをカレントレジスタファイル６０２から読み出す。パリティチェッカ６０３がマスタレジスタファイル６０３から読み出したデータにエラーを検出した場合、命令制御ユニット７０４は、データをマスタレジスタファイル６０１からカレントレジスタファイル６０２へ転送する処理を一旦中止する。【００７２】
そしてマスタレジスタファイル６０１は、エラー検出したデータをカレントレジスタファイル６０２に転送する。ＥＣＣ訂正回路６０６は、カレントレジスタファイル６０２から、エラー検出したデータを読み出す。そしてＥＣＣ訂正回路６０６は、エラーが検出されたデータに対応するＥＣＣデータをカレントレジスタファイル６０２から読み出し、読み出したＥＣＣデータを用いてエラーが検出されたデータを訂正する。このときＥＣＣ訂正回路６０６は、パリティデータを読み出す信号線を用いて、ＥＣＣデータをカレントレジスタファイル６０２から読み出す。またＥＣＣ訂正回路６０６は、データを訂正すると共に新たに訂正したデータに対応するパリティデータを生成する。そして結果選択回路６０８は訂正したデータ、生成したパリティデータ、ＥＣＣデータをマスタレジスタファイル６０１に書き戻す。【００７３】
またＥＣＣ生成回路６０７は、パリティチェッカ６０３でエラーを検出しなかったデータを用いた演算結果のデータを用いてＥＣＣデータを作成する。ＥＣＣ生成回路６０７が生成するＥＣＣデータは演算結果のデータに対応するＥＣＣデータである。そしてＥＣＣ生成回路６０７は、ＥＣＣ演算制御部７０６からの制御に基づいて、ＥＣＣ生成回路６０７によって生成されたＥＣＣデータとそれに対応する演算結果のデータをマスタレジスタファイル６０１に書き戻す。エラー訂正回路６０６がエラー検出したデータのエラーを訂正した後、ＣＰＵ７００はエラーを検出したデータの演算処理から再実行する。【００７４】
図６ではマスタレジスタファイル６０１がカレントレジスタファイル６０２へデータを転送する転送バスとして、転送バス６０９、６１０のみ図示している。演算回路６００は、マスタレジスタファイル６０１とカレントレジスタファイル６０２とつなぐ転送バスとして、転送バス６０９、６１０のセットを複数有しているが、図６では省略している。なお転送バス６０９はパリティデータまたはＥＣＣデータを転送する転送バスであり、転送バス６１０はデータを転送する転送バスである。そしてマスタレジスタファイル６０１はカレントレジスタファイル６０２へパリティデータ、ＥＣＣデータ及びデータをそれぞれ複数回に分けて転送する。例えば演算回路６００が転送バスのセットを８セット有しており、マスタレジスタファイル６０１からカレントレジスタファイル６０２へ３２レジスタ分転送する場合、８レジスタ分を４回転送する。【００７５】
図７は本実施例におけるＣＰＵ７００のブロック図である。【００７６】
ＣＰＵ７００は、メモリ７０１、キャッシュ制御ユニット７０２、命令制御ユニット７０４、演算ユニット７０５から構成されている。キャッシュ制御ユニット７０２はキャッシュ７０３を含む構成である。また演算ユニット７０５は演算制御部７０６、演算部７０７、レジスタ部７０８、エラー訂正部７０９から構成されている。【００７７】
メモリ７０１は、データの保持を行う記憶部であって、ＣＰＵが扱う全体のデータを保持する記憶部である。キャッシュ制御ユニット７０２は、メモリ７０１とキャッシュ７０３の間のデータのやり取りを制御するものである。キャッシュ制御ユニット７０２はメモリ７０１の所定のアドレスを指定して、所望のデータを読み出し、キャッシュ７０３における所定のアドレスに読み出したデータを格納する。同様にしてキャッシュ制御ユニット７０２はキャッシュ７０３における所定のアドレスを指定して所望のデータを読み出し、メモリ７０１における所定のアドレスに読み出したデータを格納する。【００７８】
そしてキャッシュ制御ユニット７０２はキャッシュ７０３とレジスタ部７０８とのデータのやり取りも制御する。キャッシュ制御ユニット７０２はキャッシュ７０３の所定のアドレスを指定して、所望のデータを読み出し、レジスタ部７０８における所定のアドレスに読み出したデータを格納する。同様にしてキャッシュ制御ユニット７０２はレジスタ部７０８における所定のアドレスを指定して所望のデータを読み出し、キャッシュ７０３における所定のアドレスに読み出したデータを格納する。本実施例において、キャッシュ機能は、キャッシュ７０３の１つによって実現しているが、より処理の高速化を図るために、キャッシュ機能を１次キャッシュ、２次キャッシュと複数のキャッシュによって構成するものであってもよい。レジスタ部７０８は、図４におけるレジスタファイル４０１や図６における６０１などが有する機能を実現するものである。【００７９】
演算制御部７０６は演算部７０７、レジスタ部７０８を制御することにより、統括して演算ユニット７０５の処理を制御する。演算部７０７は演算制御部７０６からの指示に基づいて、レジスタ部７０８からのデータの読み出し処理、レジスタ部７０８へデータの書き込み処理を行う。またエラー訂正部７０９は、レジスタ部７０８に格納されるデータにエラーがあった場合に、そのデータのエラーの訂正処理を行う。エラー訂正部７０９が訂正するエラーの検出は、レジスタ部７０８が行う。演算部７０７は、レジスタ部７０８よりデータとそのデータに対応するパリティデータを読み出す。レジスタ部７０８はデータとパリティデータとに基づいてデータの読み出し処理、書込み処理などにおけるデータのエラーの検出を試みる。パリティチェックは、データ通信においてデータのエラーを検出する手法の一つである。データを構成するビットの１もしくは０の個数の偶奇とパリティデータを比較する。比較結果が合わないとデータにエラーがあると判別する。【００８０】
エラー訂正部７０９はデータのエラーを検出すると、レジスタ部７０８からエラーを検出したデータとそのデータに対応するＥＣＣデータを読み出す。【００８１】
本実施例におけるＣＰＵ７００は、６４ビットの入力データと８ビットのパリティデータから、ＥＯＲ演算回路を介し、ビットの誤り位置を求めるための８ビットのシンドロームを生成する。【００８２】
またＣＰＵで行う処理をパイプライン化することによって、ＣＰＵ７００の処理速度を向上することができる
パリティチェッカ６０３、６０４がパリティデータに基づいて検出した１ビットエラーを訂正するために、エラー訂正部７０９は６４ビットの訂正マスクを作成する。エラー訂正部７０９は訂正マスクの各ビットを、シンドロームの結果に基づいて作成する。パリティチェッカ６０３、６０４が１ビットエラーを検出すると、エラー訂正部７０９は訂正マスクを用いて、エラービット以外のビットをマスクアウトし、エラーを訂正する。【００８３】
図８、図９、図１０は本実施例におけるＣＰＵの処理のタイミングチャートである。【００８４】
ＣＰＵ７００が行うデータのエラー訂正は、ＥＣＣデータを用いてパリティチェックとパリティチェックによって検出したエラーの訂正処理をレジスタ部７０８からのデータ読み出し処理の時間内に行えることが望ましい。しかしながらデータ読み出し処理のような遅延が頻繁に発生するところでは、ＣＰＵ７００はＥＣＣエラー訂正処理を所定の時間内に行うのは難しい。【００８５】
またデータ読み出し処理から、ＥＣＣデータを用いて部分データのエラーチェック、エラー訂正を行う時間を確保することによってＣＰＵ処理速度が落ちる。【００８６】
そこで、本実施に係るＣＰＵ７００、パリティデータを用いて、レジスタ部７０８に保持するデータのパリティエラーの有無をチェックする。そしてＣＰＵ７００はパリティチェックで検出したエラーを、ＥＣＣデータを用いて訂正する構成とする。これによりＣＰＵがエラーを訂正するエラー訂正処理に数百τかかったとしても、全体の処理時間からすればごくわずかであり、ＣＰＵ７００の処理性能をほとんど落とすことなくエラー訂正を実現することができる。【００８７】
図８、図９、図１０のタイミングチャートでは、ＣＰＵが通常処理を行い、データとデータに対応するパリティデータを用いてデータのパリティチェックを行う。図８、図９、図１０に記載の「ＰＡＲＩＴＹ（１〜８）」、「ＤＡＴＡ（１〜８）」は、それぞれ８バイトのデータとそのデータに対応する８ビットのパリティデータのブロック単位のデータ、パリティデータの総称である。また「ＤＡＴＡ（１）」、「ＰＡＲＩＴＹ（１）」は、それぞれ８バイトのデータ、８ビットのパリティデータを示し、同様にして他の番号を付した「ＤＡＴＡ（ｎ）」、「ＰＡＲＩＴＹ（ｎ）」も８バイトのデータ、８ビットのパリティデータである。ここで本実施例における「ｎ」は１〜８の自然数である。もちろん「ｎ」は８よりも大きな自然数であってもよく、ＣＰＵが一度により多くのデータ、パリティデータを転送する構成であってもよい。【００８８】
図８はパリティチェッカ６０３がエラーを検出しないとき（以下、この場合を通常時と呼ぶ。）のタイミングチャートである。通常時、マスタレジスタファイル６０１は転送バス６０９を介して、パリティデータ（図８においてＰＡＲＩＴＹ（１）と記載。）を８ビットまとめて、カレントレジスタファイル６０２へ転送する。ここでマスタレジスタファイル６０１とカレントレジスタファイル６０２の間には、転送バス６０９と転送バス６１０の組が８組ある。図６では８組の転送バスの図示を省略している。つまり各転送バスの組（転送バス６０９と転送バス６１０）ごとに１ビットのパリティデータを１バイトのデータを転送している。またマスタレジスタファイル６０１は、転送バス６１０を介して、データ（図８においてＤＡＴＡ（１）と記載）を８バイトまとめてカレントレジスタファイル６０２へ転送する。カレントレジスタ６０２は転送バス６１１を介して、演算器６０５へ８バイトのデータと対応する８ビットのパリティデータ（図８においてＤＡＴＡ（１）＋ＰＡＲＩＴＹ（１）等と記載。）を転送する。同様にしてカレントレジスタ６０２は転送バス６１２を介して、演算器６０５へ８バイトのデータと対応する８ビットのパリティデータ（図８においてＤＡＴＡ（２）＋ＰＡＲＩＴＹ（２）等と記載。）を転送する。演算器６０５は、転送バス６１６を介して、演算処理した演算結果（図８において演算結果（ＤＡＴＡ＋Ｐ＋ＥＣＣ）と記載。）をマスタレジスタファイル６１６へ書き戻す。【００８９】
図９はパリティチェッカ６０３がエラーを検出したときのタイミングチャートである。マスタレジスタファイル６０１は、転送バス６０９を介して、パリティデータ（図９においてＰＡＲＩＴＹ（１〜８）と記載。）を８ビットまとめて、カレントレジスタファイル６０２へ転送する。またマスタレジスタファイル６０１は、転送バス６１０を介して、データ（図９においてＤＡＴＡ（１〜８）と記載）を８バイトまとめてカレントレジスタファイル６０２へ転送する。【００９０】
そしてサイクル８０１で、ＤＡＴＡ（１）の転送エラーが発生したとする。転送エラーが発生すると、パリティチェッカ６０３は、転送バス６１３を介して、マスタレジスタファイル６０１に転送エラーの発生を通知する。またサイクル８０２で、演算レジスタエラーが発生したとする。演算レジスタエラーが発生すると、パリティチェッカ６０４は、転送バス６１４を介して、演算制御部７０６へ演算レジスタエラーの発生を通知する。【００９１】
サイクル８０３において、演算回路６００は訂正処理を開始する。マスタレジスタファイル６０１は、転送バス６０９を介して、ＥＣＣデータ（図９において、ＥＣＣ（１）などと記載。）をカレントレジスタファイル６０２へ通知する。またマスタレジスタファイル６０１は、転送バス６１０を介して、データ（図９において、ＤＡＴＡ（１）などと記載）をカレントレジスタファイル６０２へ転送する。カレントレジスタファイル６０２は、転送バス６１１を介して、データとＥＣＣデータとエラー訂正回路６０６へ転送する。エラー訂正回路６０６はＥＣＣデータを用いてデータに発生したエラーを訂正し、正しいデータに対応するパリティデータを生成する。そしてエラー訂正回路６０６は、転送バス６１５、６１６を介して、データとパリティデータとＥＣＣデータをマスタレジスタファイル６０１へ書き戻す。【００９２】
図１０はエラー訂正回路６０６がエラー訂正を終了するときのタイミングチャートである。エラー訂正回路６０６がカレントレジスタ６０２から転送されるＥＣＣデータを用いて対応するデータを訂正する。エラー訂正回路６０６は、転送バス６１５、６１６を介して、マスタレジスタファイル６０１へ訂正したデータを書き戻し、サイクル８０５でカレントレジスタファイル６０２における全てのレジスタの訂正処理を終了する。そしてサイクル８０６で、マスタレジスタファイル６０１は、転送バス６０８を介してパリティデータを、転送バス６０９を介してデータを、カレントレジスタファイル６０２へ再送する。パリティチェッカ６０３はマスタレジスタファイル６０１からカレントレジスタファイル６０２へのデータ転送にエラーが発生しないことをチェックする。そしてサイクル８０７で、演算制御部７０６からの命令実行により、カレントレジスタファイル６０２はエラーがデータとパリティデータを転送バス６１１、６１２を介して、演算器６０５へ転送する。演算器６０５は演算結果（図１０においてＤ＋Ｐ＋Ｅ）を、転送バス６１６を介して、マスタレジスタファイル６０１へ書き戻す。【００９３】
図１１はエラー訂正処理を１サイクルに取り入れた場合のタイミングチャートである。エラー訂正処理がない場合、演算パイプラインの各サイクルは命令フェッチ（ＩＦ）、命令デコード（Ｄ）、レジスタ読み出し（Ｒ）、演算実行（ＥＸ）、書き戻し（ＷＢ）、コミット（ＣＴ）の各ステージで構成されている。この演算パイプラインに１サイクルのエラー訂正処理（Ｃ）が加わると、それに伴い全ての演算処理に対して１サイクルの遅延時間が発生しＣＰＵの処理性能の低減が著しい。【００９４】
本実施例におけるエラー訂正方法は、順次与えられる命令の処理の実行で発生するエラーを訂正する方法であり、エラーチェックするためのデータ（例えばパリティデータ）を用いてデータのエラー検出を行い、検出したエラーをエラーチェックするためのデータとは異なるエラー訂正するためのデータ（例えばＥＣＣデータ）を用いてエラー訂正する方法である。これにより本実施例におけるエラー訂正方法では、エラーを訂正するときのみかかる最小限の遅延時間のみしか発生しない。【００９５】
本願発明におけるエラー訂正方法によれば、エラー検出しないときはＥＣＣ演算に伴う処理をスキップすることによって、情報処理装置におけるＣＰＵの処理速度を落とすことなく、レジスタにおけるビットエラーを訂正することができる。
【産業上の利用可能性】
【００９６】
本発明によるエラー訂正方法は、ＣＰＵの処理において発生するデータのエラーを訂正するものである。したがって、本発明によるエラー訂正方法は、信頼性が高く、かつ処理速度が求められるＣＰＵを実現するうえで極めて有用である。
【図１】
2008152728.tif 000003
【図２】
2008152728.tif 000004
【図３】
2008152728.tif 000005
【図４】
2008152728.tif 000006
【図５】
2008152728.tif 000007
【図６】
2008152728.tif 000008
【図７】
2008152728.tif 000009
【図８】
2008152728.tif 000010
【図９】
2008152728.tif 000011
【図１０】
2008152728.tif 000012
【図１１】
2008152728.tif 000013
【国際調査報告】
2008152728.tif 000014
2008152728.tif 000015