(57)【要約】      （修正有）【課題】アドレス比較回路等を不要にしてフォワーディング回路の規模を小さくして、半導体チップ上のフォワーディング回路の占める面積の小さいプロセッサを提供する。【解決手段】プロセッサ１は、ALU１１と、ロード／ストアユニット１３と、タイマ１３ａと、ECC計算器１３ｂと、複数のECCレジスタ１３ｃと、を有する。ロード／ストアユニット１３は、主メモリ１４にデータを書き込む時に、書き込みデータとタイマ１３ａのカウント値とを主メモリ１４に書き込むと共に、その書き込みデータについてのECCが正しくないことを示すECC状態フラグデータを主メモリ１４にセットし、そのセット後、ECC計算器１３ｂに書き込みデータについてのECCを計算させ、ECCが計算して得られた後、その計算して得られたECC主メモリ１４に書き込むと共に、ECC状態フラグデータをリセットする。【選択図】図１
2011048681.tif 000002
【特許請求の範囲】
【請求項１】
パイプライン処理を実行可能なプロセッサであって、
ALUと、
ロード／ストアユニットと、
所定のクロックに従って動作するカウンタと、
ECC計算器と、
複数のECCレジスタと、
を有し、
前記ロード／ストアユニットは、
記憶部にデータを書き込む時に、書き込みデータと前記カウンタのカウント値とを前記記憶部に書き込むと共に、その書き込みデータについてのECCが正しくないことを示すECC状態フラグデータを前記記憶部にセットし、そのセット後、前記ECC計算器に前記書き込みデータについての前記ECCを計算させ、前記ECCが計算して得られた後、その計算して得られたECCを前記記憶部に書き込むと共に、前記ECC状態フラグデータをリセットし、
前記記憶部からデータを読み出す時には、前記記憶部からデータと、そのデータについての前記ECC状態フラグデータ、前記カウンタのカウント値及びECCを読み出し、読み出したデータからECCの再計算を実行し、前記読み出したデータについての前記ECC状態フラグデータがセットされている場合、読み出したカウント値から比較のためのECCレジスタを前記複数のECCレジスタの中から決定し、前記読み出したデータから再計算したECCと、前記比較のためのECCレジスタのECCとを比較し、前記読み出したデータの前記ECC状態フラグデータがセットされていない場合、前記読み出したデータから再計算して得られたECCと、読み出したECCとを比較することによって、ECCエラー判定を行うことを特徴とするプロセッサ。
【請求項２】
パイプライン処理を実行可能なプロセッサであって、
ALUと、
ロード／ストアユニットと、
ECC計算器と、
を有し、
前記ロード／ストアユニットは、
記憶部にデータを書き込む時に、書き込みデータを前記記憶部に書き込むと共に、その書き込みデータについてのECCが正しくないことを示すECC状態フラグデータを前記記憶部にセットし、そのセット後、前記ECC計算器に前記書き込みデータについての前記ECCを計算させ、前記ECCが計算して得られた後、その計算して得られたECCを前記記憶部に書き込むと共に、前記ECC状態フラグデータをリセットし、
前記記憶部からデータを読み出す時には、前記記憶部からデータと、そのデータについての前記ECC状態フラグデータ及びECCを読み出し、前記ECC状態フラグデータがセットされている場合、前記データの読み出しを再実行し、前記ECC状態フラグデータがセットされていない場合、前記読み出したデータから再計算して得られたECCと、読み出したECCとを比較することによって、ECCエラー判定を行うことを特徴とするプロセッサ。
【請求項３】
前記ロード／ストアユニットは、前記書き込みデータが前記記憶部から読み出されるデータの一部であるときには、前記書き込みデータを前記記憶部に書き込む前に、その書き込みによって更新される前のデータを前記記憶部から読み出し、前記読み出したデータと前記一部のデータとから書き込みのためのデータを生成して前記書き込みデータを前記記憶部に書き込むことを特徴とする請求項１又は２に記載にプロセッサ。
【請求項４】
前記記憶部は、主メモリ、キャッシュメモリあるいはローカルメモリであることを特徴とする請求項１から３のいずれか１つに記載のプロセッサ。
【請求項５】
前記記憶部は、前記ロード／ストアユニット、前記ALU、前記カウンタ、前記ECC計算器及び前記複数のECCレジスタと共に１つの半導体チップに搭載されていることを特徴とする請求項１に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関し、特に、エラー訂正符号を含むデータを記憶する記憶部に対してデータのロード及びストアを行うプロセッサに関する。
【背景技術】
【０００２】
従来より、データ保護のためのエラー訂正符号を利用するプロセッサでは、エラー訂正符号の計算にプロセッサのクロックに対して複数サイクルが必要となる場合が多い（例えば、特許文献１参照）。  
例えば、メモリあるいはキャッシュメモリに記憶されたあるデータ（例えば１２８ビット）が更新される場合は、その更新されたデータの全体（１２８ビット）についてエラー訂正符号（例えば９ビット）の計算が行われ、その更新データとエラー訂正符号（以下、ECCともいう）が同時にメモリに書き込まれる。このとき、ECCの計算には、複数サイクルの時間が掛かる。
【０００３】
また、あるデータの一部（すなわち１２８ビット未満のデータ）の更新を行う場合もある。この場合は、例えば、まず既にメモリ等に記憶されているデータの全体（１２８ビット）を読み出し、その読み出したデータに、その更新データを反映させたデータの全体（１２８ビット）を生成して、そのデータ全体についてECCの計算をして、その更新データとECCとが同時にメモリに書き込まれる。
【０００４】
すなわち、書き込まれるデータが１２８ビットデータの場合は、既に記憶されている１２８ビットデータの読み出しは必要ないが、データの更新処理には、データの一部の更新の場合もあるため、読み出し、ECC計算及び書き込みの３つの処理のための演算サイクルを確保しなければならない。例えば、アドレス計算に２サイクル、読み出しに１サイクル、ECC計算に２サイクル、そして書き込みに１サイクルが必要であれば、データ更新処理すなわちデータストア処理は、必ず６サイクルを必要とする処理となる。ストア処理において、この６サイクルは、処理時間の最も長い処理シーケンス、いわゆるクリティカルパスである。
【０００５】
一方、データ読み出しだけの処理すなわちデータロード処理の場合、アドレス計算に２サイクル、読み出しに１サイクル掛かるとすれば、データ読み出し処理は、３サイクルを必要とする処理である。
【０００６】
このようなストア処理とロード処理にサイクル数の差がある場合に、データ更新の直後に、更新データのデータ読み出しがあると、データ更新がされる前のデータがメモリ等から読み出されてしまうという問題がある。そのため、そのようなデータのストア処理とロード処理の処理サイクル数の差に起因する間違ったデータの読み出しを防止するため、いわゆるフォワーディング回路が設けられる。
【０００７】
フォワーディング回路は、先行するストア処理の書き込みデータ数サイクル分を、後続のロード処理に対してフォワーディングする回路である。フォワーディング回路は、メモリ等にデータの書き込み処理があった直後に、同じアドレスに対するデータ読み出しがあった場合、メモリ等からデータを読み出す代わりに、複数サイクル前に書き込まれたデータを保持する複数のレジスタからデータが読み出されるようにする回路である。そのため、フォワーディング回路は、複数サイクル分の複数のアドレス比較回路を有する。
【０００８】
例えば、データの読み出し処理と更新（すなわち書き込み）処理に３サイクル分の差があれば、フォワーディング回路は、その３サイクル前までのそれぞれのアドレスと、現在の読み出しアドレスとの比較を行うための３つのアドレス比較回路を有し、かつ、その３サイクル分の書き込みデータを保持する３つのレジスタも有していた。
【０００９】
そして、アドレスデータが６４ビット等の大きなビット幅を有する場合、アドレスデータのビット数分の信号線が比較のために各比較回路に接続され、各レジスタには、１２８ビット等の大きなビット幅の信号線が出力のために接続されることになる。結果として、フォワーディング回路規模は大きくなり、CPUが搭載された半導体チップ上のフォワーディング回路の占める面積も大きくなるという問題があった。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開平４−３６９７３３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
そこで、本発明は、アドレス比較回路等を不要にしてフォワーディング回路の規模を小さくして、半導体チップ上のフォワーディング回路の占める面積の小さいプロセッサを提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の一態様によれば、パイプライン処理を実行可能なプロセッサであって、ALUと、ロード／ストアユニットと、所定のクロックに従って動作するカウンタと、ECC計算器と、複数のECCレジスタと、を有し、前記ロード／ストアユニットは、記憶部にデータを書き込む時に、書き込みデータと前記カウンタのカウント値とを前記記憶部に書き込むと共に、その書き込みデータについてのECCが正しくないことを示すECC状態フラグデータを前記記憶部にセットし、そのセット後、前記ECC計算器に前記書き込みデータについての前記ECCを計算させ、前記ECCが計算して得られた後、その計算して得られたECCを前記記憶部に書き込むと共に、前記ECC状態フラグデータをリセットし、前記記憶部からデータを読み出す時には、前記記憶部からデータと、そのデータについての前記ECC状態フラグデータ、前記カウンタのカウント値及びECCを読み出し、読み出したデータからECCの再計算を実行し、前記読み出したデータについての前記ECC状態フラグデータがセットされている場合、読み出したカウント値から比較のためのECCレジスタを前記複数のECCレジスタの中から決定し、前記読み出したデータから再計算したECCと、前記比較のためのECCレジスタのECCとを比較し、前記読み出したデータの前記ECC状態フラグデータがセットされていない場合、前記読み出したデータから再計算して得られたECCと、読み出したECCとを比較することによって、ECCエラー判定を行うプロセッサを提供することができる。
【発明の効果】
【００１３】
本発明によれば、アドレス比較回路等を不要にしてフォワーディング回路の規模を小さくして、半導体チップ上のフォワーディング回路の占める面積の小さいプロセッサを実現することができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の第１の実施の形態に係わるプロセッサの構成を示す概略構成図である。
【図２】本発明の第１の実施の形態に係わる主メモリ１４に記憶されるデータのデータ構造の例を示す図である。
【図３】本発明の第１の実施の形態に係わる主メモリ１４のデータ構造を示す図である。
【図４】本発明の第１の実施の形態に係わるタイマ１３ａのカウント値Tmを説明するための図である。
【図５】本発明の第１の実施の形態に係わるロード／ストアユニット１３の構成を示す構成図である。
【図６】本発明の第１の実施の形態に係わる、データの書き込み時のロード／ストアユニット１３の動作を説明するための図である。
【図７】本発明の第１の実施の形態に係わる、データの読み出し時にフラグデータ２４ａが「０」の場合におけるロード／ストアユニット１３の動作を説明するための図である。
【図８】本発明の第１の実施の形態に係わる、データの読み出し時にフラグデータ２４ａが「１」の場合におけるロード／ストアユニット１３の動作を説明するための図である。
【図９】本発明の第２の実施の形態に係わる、本実施の形態に係るロード／ストアユニット１３Aの構成を示す構成図である。
【発明を実施するための形態】
【００１５】
以下、図面を参照して本発明の実施の形態を説明する。  
（第１の実施の形態）
１．プロセッサの全体構成
まず、図１に基づき、本発明の第１の実施の形態に係わるプロセッサの概略構成を説明する。図１は、本発明の第１の実施の形態に係わるプロセッサの構成を示す概略構成図である。  
図１に示すように、プロセッサ１は、１チップの半導体装置であり、その１つのチップには、算術論理演算装置（以下、ALUという）１１と、レジスタファイル１２と、ロード／ストアユニット１３と、記憶部としての主メモリ１４と、制御ユニット１５とが搭載されている。本実施の形態では、プロセッサ１は、処理の高速化のためのパイプライン処理機構を有し、各パイプラインは複数のステージで構成される。プロセッサ１の各命令を実現するための処理は、複数の処理ステップに分割され、各処理ステップは各ステージにてクロックに同期して順に実行される。異なるステージは、おのおの異なる命令の処理ステップを同時に実行できるため、パイプライン全体では複数の命令を同時に実行することができる。
【００１６】
制御ユニット１５は、主メモリ１４から命令を読み出して、ALU１１とレジスタファイル１２とロード／ストアユニット１３を制御し、ロード／ストアユニット１３からのECCエラーを受信して所定の処理を行う、等のプロセッサ１の全体の制御を行う回路である。  
ALU１１は、制御ユニット１５の制御の下、レジスタファイル１２からのデータに対して、所定の演算を行い、演算結果をレジスタファイル１２に書き込む。
【００１７】
ロード／ストアユニット１３は、制御ユニット１５の制御の下、主メモリ１４に対するデータのロードとストア処理を行う回路である。ロード／ストアユニット１３は、主メモリ１４からのデータの読み出し時（すなわちロード時）は、レジスタファイル１２から読み出しアドレスが入力され、その入力されたアドレスに基づいて、主メモリ１４からデータを読み出して、読み出したデータ（R data）をレジスタファイル１２の所定のレジスタへ書き込む。ロード／ストアユニット１３は、主メモリ１４へのデータの書き込み時（すなわちストア時）は、レジスタファイル１２の所定のレジスタから書き込みデータ（W data）が入力され、その書き込まれたデータをアドレスで指定された主メモリ１４の記憶領域へ書き込む。
【００１８】
なお、図１において、ロード時の読み出しアドレスは、第１のアドレスデータRAと第２のアドレスデータRBからなる。第１のアドレスデータRAは、メモリ空間における先頭アドレスであり、第２のアドレスデータRBは、第１のアドレスデータRAからのオフセット値を示すデータである。
【００１９】
パイプライン処理を実行可能なプロセッサ１は、実行プログラムに基づく処理を、複数のステージのそれぞれにおいて、所定の順序制御の下で実行し、パイプライン処理の中で、データのロードとストアが行われる。データのロードとストア処理は、ロード／ストアユニット１３において、パイプライン処理により行われる。
【００２０】
ロード／ストアユニット１３は、タイマ１３ａと、ECC計算器１３ｂと、ECCレジスタ群１３ｃを含む。タイマ１３ａは、プロセッサ１内の所定のクロックに従って動作し、そのクロックにインクリメントするカウンタである。ここでは、タイマ１３ａは、２ビットのカウンタである。ECC計算器１３ｂは、入力されたデータのECCを計算する回路である。ECCレジスタ群１３ｃは、複数のECCレジスタを含む。ECCレジスタの数は、データの読み出し処理と書き込み処理の時間差（すなわちサイクル数の差）に応じて、決定される。ここでは、ECCレジスタの数は３個であり、３サイクル前までのECC、すなわち３つのECCが保持される。よって後述するように、読み出したデータが３サイクル以内に書き込まれたものである場合、その読み出したデータに対応するECCは、ECCレジスタ群１３ｃに含まれている。  
２．データ構造
図２は、主メモリ１４に記憶されるデータのデータ構造の例を示す図である。主メモリ１４に記憶される各データ２１は、１２８ビットのデータからなるデータ部２２と、９ビットのECCからなるECC部２３と、３ビットのECC状態ビット（stat）からなるECC状態ビット部２４を含む、１４０ビットのデータである。データ部２２のデータは、演算用あるいは演算結果のデータである。ECC部２３のECCは、データ部２２のデータについてのエラー訂正符号である。
【００２１】
ECC状態ビット（stat）は、ECCが正しいか否かあるいはECCが再計算中であるか否かを示すECCの状態を示すECC状態フラグデータであるフラグデータ２４ａと、タイマ１３ａのカウント値２４ｂを含むデータである。本実施の形態では、フラグデータ２４ａは、１ビットデータであり、「１」は、そのECCは正しくないすなわち対応するデータのECCが再計算中であることを示し、「０」は、そのECCは正しいすなわちECCが再計算中でないことを示す。また、カウント値２４ｂは、データの書き込み時に書かれたタイマ１３ａの２ビットのカウント値である。
【００２２】
なお、ここでは、ECC状態フラグデータであるフラグデータ２４ａは１ビットであるが、複数ビットでもよい。同様に、タイマ１３ａのカウント値も、３ビット以上でもよい。
【００２３】
図３は、主メモリ１４のデータ構造を示す図である。メモリ空間上のアドレスAddrが指定されることによって、そのアドレスAddrのデータ（DATA）の読み出し及び書き込みが行われる。各データについて、ECCと、ECC状態ビット（stat）が記憶可能となっている。
【００２４】
データの書き込みでは、データとECCとECC状態ビット（stat）は、それぞれ別々に書き込みが可能であり、データの読み出しでは、データとECCとECC状態ビット（stat）が同時に読み出し可能である。
【００２５】
図３でも説明したように、ECCを備えるメモリアレイである主メモリ１４中の各データは、データ部２２のデータ（１２８ビット）とECC部２３のECC（９ビット）に加えて、ECC状態ビット部２４のECC状態ビット（３ビット）が付加されている。なお、各データは最小アクセス単位である１バイト単位で書き込むことが可能である。
【００２６】
後述するように、本実施の形態では、データとECCとECC状態ビット（stat）の主メモリ１４への書き込みは、２回に分けて行われる。第１回目に、書き込みデータ（W data）が書き込まれ、さらに、書き込みデータ（W data）のECCが再計算中であることを示すフラグデータ２４ａ（すなわち「１」）と、そのときのタイマ１３ａのカウント値Tmとが、主メモリ１４の対応するアドレスに書き込まれる。その後、複数のクロックに亘って書き込みデータ（W data）のECCが計算される。その計算して得られたECCは、第２回目の書き込み時に、その書き込みデータ（W data）のECCとして書き込まれ、同時に、フラグデータ２４ａは再計算中でないことを示すフラグデータ２４ａに変更されてクリア（すなわち「０」に）される。
【００２７】
すなわち、図２において、データの書き込み時は、データ部２２とECC状態ビット部２４が、第１回目の書き込み処理で書かれ、ECCと、ECCの再計算中ではないことを示すフラグデータ２４ａが、第２回目の書き込み処理時に書かれる。
【００２８】
また、データの読み出し時、データとECCとECC状態ビット（stat）が、主メモリ１４の対応するアドレスから読み出される。読み出したデータについてECCの再計算が行われる。後述するように、その読み出したデータのフラグデータ２４ａの状態に応じて、「読み出したECC」又は「ECCレジスタ群１３ｃの中の一つのECC」のいずれかを選択して、再計算されたECCとの比較が行われる。もしも、読み出したデータのECC状態ビット部２４のフラグデータ２４ａが「０」であれば、再計算して得られたECCと、読み出したデータのECCとを比較することによって、読み出されたデータに誤りが無いかのチェックが行われる。
【００２９】
もしも、読み出したデータのECC状態ビット部２４のフラグデータ２４ａが「１」であれば、読み出したデータのECCは再計算中である（すなわち、読み出したデータは３サイクル以内に更新されたデータである）ので、再計算して得られたECCと、ECCレジスタ群１３ｃの中の一つのECC （ECC状態ビット部２４のカウント値２４ｂとタイマ１３ａの現在のカウント値Tmとの差に応じて選択された１つのECCレジスタのECC）とを比較することによって、読み出されたデータに誤りが無いかのチェックが行われる。
【００３０】
３．タイマ
図４は、タイマ１３ａのカウント値Tmを説明するための図である。タイマ１３ａは、カウンタであり、プロセッサ１内の所定のクロックに従って、１つずつインクリメントするように動作し、カウントアップすると「０」に戻る。図５に示すように、タイマ１３ａは２ビットカウンタであり、「００」から「０１」へインクリメントし、「０１」から「１０」へ、そして次に「１１」にインクリメントして、「００」に戻るように、カウント値Tmは、そのクロックに応じて変化する。
【００３１】
ここでは、ストア処理とロード処理に３クロック分の差があるので、少なくとも３クロック分の差を検出できるように、タイマ１３ａは、２ビットのカウンタとなっている。
【００３２】
４．ロード／ストアユニットの構成
図５は、ロード／ストアユニット１３の構成を示す構成図である。図５に示すように、ロード／ストアユニット１３は、パイプライン構造を有し、９つのステージを有する。ロード／ストアユニット１３は、上述したようにタイマ１３ａ、ECC計算器１３ｂ及びECCレジスタ群１３ｃを有し、さらに、図５に示すように、アドレス計算器３１、セレクタ群３２、差分器３３、セレクタ３４及び比較器３５を含む。以下、各ステージについて説明する。なお、図６において、符号を付さないブロックは、レジスタを示す。
【００３３】
ステージａ０では、アドレス計算のためのアドレスRA,RBが２つのレジスタにセットされる。また、書き込みデータ（W data）がある場合には、その書き込みデータ（W data）も別のレジスタにセットされる。書き込みデータ（W data）は、ステージｂ１，ｃ２の各レジスタへ順次伝達される。
【００３４】
ステージｂ１では、アドレス計算器３１が入力されたアドレスRAとRBから、データが読み出しあるいは書き込みされるアドレスAddrの計算を行い、そのアドレスAddrがレジスタにセットされる。
【００３５】
ステージｃ２では、計算して得られたアドレスAddrに基づき、データの書き込みあるいは読み出しが行われ、そのための複数のレジスタが設けられている。読み出されるデータは、図２で説明したようなデータ構造を有しているため、レジスタもそれらのデータを保持できるようになっている。なお、ステージｃ２において、図５の「data」と「stat」と「ECC」を含む、一点鎖線で示す部分１０１は、主メモリ１４に存在し、主メモリ１４から読み出された「data」と「stat」と「ECC」は、それぞれプロセッサ１内の対応するレジスタ１０１ａ、１０１ｂ、１０１ｃに記憶される。データの書き込み時には、ECC状態ビット（stat）に、タイマ１３ａのカウント値Tmとフラグデータ２４ｂのセット（「１」のセット）が行われる。
【００３６】
ステージｄ３では、データの書き込み時には、読み出したデータと書き込みデータとのマージがセレクタ群３２により行われる。データの読み出し時には、次のステージでECC計算をするための読み出しデータ（R data）のレジスタへのセットが行われる。
【００３７】
ステージｅ４とｆ５では、ECC計算器１３ｂにより、書き込みデータあるいは読み出しデータについてのECC計算が行われる。  
ステージｇ６では、データの書き込み時には、そのデータについて、ECCの書き込みと、フラグデータ２４ｂを「０」にするためのリセットが行われる。さらに、計算されたECCがECCレジスタ１３ｃ１にストアされる。データの読み出し時には、差分器３３，セレクタ３４及び比較器３５が動作して、ECCの比較が行われる。比較の結果、一致しなければ、比較器３５からECCエラーが出力される。ECCエラーは、制御ユニット１５へ伝達される。なお、ステージｇ６において、図５の「stat」と「ECC」を含む、一点鎖線で示す部分１０２は、主メモリ１４に存在する。
【００３８】
差分器３３は、読み出したデータのフラグデータ２４ａがセットされている場合、読み出したカウント値２４ｂと、再計算時のタイマ１３ａのカウント値との差に基づいて、ECCレジスタ群１３ｃの中から比較のためのECCレジスタを決定するために用いられる。
【００３９】
セレクタ３４は、フラグデータ２４ａがセットされている場合、再計算して得られたECCと比較のためのECCレジスタのECCとを選択して、比較器３５に比較させ、フラグデータ２４ａがセットされていない場合、再計算して得られたECCと読み出したECCとを選択して、比較器３５に比較させるために用いられる。
【００４０】
ステージｈ７では、ECCレジスタ１３ｃ１のデータが次のECCレジスタ１３ｃ２に転送される。  
ステージｉ８では、ECCレジスタ１３ｃ２のデータが次のECCレジスタ１３ｃ３に転送される。
【００４１】
なお、図５では、３つのECCレジスタ１３ｃ１、１３ｃ２，１３ｃ３からの信号は、１つの信号線を介してセレクタ３４に入力されているように示されているが、各ECCレジスアからの信号線が、セレクタ３４に入力されている。ECCは、９ビットデータなので、２７本の信号線が、セレクタ３４に、ECCレジスタ群１３ｃから入力される。
【００４２】
図５において、点線で示した範囲FWが、フォワーディング回路を示す。  
次に、以上のような構成のロード／ストアユニット１３の動作を、データの書き込みと読み出しの場合に分けて説明する。
【００４３】
５．動作
５．１  データの書き込み時の動作
図６は、データの書き込み時のロード／ストアユニット１３の動作を説明するための図である。  
ステージａ０で、ロード／ストアユニット１３には、主メモリ１４のアドレスRA,RBと、書き込みデータ（W data）が与えられる。
【００４４】
ステージｂ１で、RAとRBからアドレスAddrが計算されて特定される。  
ステージｃ２で、まず、そのアドレスAddrのデータが読み出される。書き込みデータ（W data）は、一点鎖線L1で示すようにステージｃ２へ伝達される。その後、ECC状態ビット（stat）のフラグデータ２４ａに「１」と、そのときのタイマ１３ａのカウント値Tmとを、書き込みデータ（W data）と共に主メモリ１４に書き込む（第１回目の書き込みR1）。このとき、ECCの書き換えは行われない。すなわち、第１回目の書き込みで、フラグデータ２４ａが、ECCが正しくないことを示す「１」にセットされる。
【００４５】
なお、ステージｃ２では、その書き込みデータ（W data）が書き込まれるアドレスAddrの全ビット（すなわち１２８ビット）が読み出されているが、これは、１２８ビットのデータの一部だけ（すなわちECC付与単位未満のデータサイズのデータだけ）が書き込まれる場合に、書き込みデータ（W data）を主メモリ１４に書き込む前に、更新前のデータを主メモリ１４から読み出し、その一部のデータと他の部分のデータとマージして、ECC付与単位の１２８ビットのデータを生成するためである。そのマージは、次のステージｄ３で行われ、それに続くステージｅ４，ｆ５で、マージされたデータについてのECCの計算が行われる。例えば、あるデータの１２８ビット中の１６ビットだけについて書き込みが行われる場合、読み出した１２８ビットデータから残りの１１２ビットを抽出し、その１６ビットとマージされて、マージされたデータについてECCが計算されて付与される。よって、そのアドレスのECC付与単位である全ビットの書き込みが行われる場合には、全ビットの読み出し処理を行わないようにしてもよい。
【００４６】
ステージｄ３では、上述したように、読み出されたデータ（一点鎖線L2で示す）と、書き込みデータ（W data）（一点鎖線L1で示す）とはセレクタ群３２によりマージされる。  
ステージｅ４とｆ５で、一点鎖線L3で示すようにマージされたデータについてのECCが、ECC計算器１３ｂにより計算される。
【００４７】
ステージｇ６では、そのアドレスAddrのデータのECCデータとして、計算して得られたECCを、ECC状態ビット（stat）のフラグデータ２４ａの「０」と共に、主メモリ１４に書き込む（第２回目の書き込みR2）。すなわち、第２回目の書き込みで、フラグデータ２４ａが「０」にリセットされ、「０」はECCが正しいことを示すことになる。
【００４８】
なお、ステージｇ６で得られたECCは、第１のECCレジスタ１３ｃ１に書き込まれる。ステージｈ７では、第１のECCレジスタ１３ｃ１のデータが、第２のECCレジスタ１３ｃ２に書き込まれ、ステージｉ８では、第２のECCレジスタ１３ｃ２のデータが、第３のECCレジスタ１３ｃ３に書き込まれる。このように、ステージｇ６からｉ８では、ECCは、フォワーディングのために複数のECCレジスタに保持される。
【００４９】
以上のように、データの書き込み時には、メモリ１４へのデータの書き込みとそのデータのECCの書き込みとが分離され、ECCの書き込みがされるまで、ECC状態ビット（stat）のフラグデータは、ECCが再計算中であることを示すように（すなわちECCが正しくないことを示すように）書き換えられる。
【００５０】
５．２  データの読み出し時（フラグデータ２４ａが「０」の場合）の動作
図７は、データの読み出し時にフラグデータ２４ａが「０」の場合におけるロード／ストアユニット１３の動作を説明するための図である。読み出したデータ（read data）のECC状態ビット（stat）に含まれるフラグデータ２４ａが「０」であるときは、読み出したECCが正しいことを示している。
【００５１】
ステージａ０とｂ１は、書き込み時と同じ処理が実行される。読み出されたデータのEC状態ビット（３ビットデータ）は、一点鎖線L11で示すように、ステージｃ２からステージｆ５まで転送される。  
ステージｃ２では、フラグデータ２４ａが「０」であるときには、ステージｄ３で、読み出したECCが、一点鎖線L12で示すように、ECC用のレジスタにセットされ、読み出したデータ（read data）は、一点鎖線L13で示すように、対応するレジスタ(R data)にセットされる。
【００５２】
ステージｅ４、ｆ５では、一点鎖線L14で示すように、読み出したデータ（R data）からECCが再計算される。また、ステージｅ４、ｆ５では、一点鎖線L15で示すように、読み出したECCが転送される。
【００５３】
ステージｇ６では、差分器３３は、フラグデータ２４ａが「０」なので、一点鎖線L14で示すように、転送されてきたECCを選択するように選択信号をセレクタ３４に出力する。比較器３５は、読み出されたECCと再計算されたECCとを比較する。すなわち、フラグデータ２４ａが「０」であるときは、読み出されたECCが正しいECCであるので、セレクタ３４は、読み出されたECCを比較器３５に出力し、比較器３５は、再計算されたECCと読み出されたECCとを比較して、読み出されたデータが正しいか否かのチェック、すなわちECCエラー判定、を行う。比較の結果、２つのECC状態ビットが一致しないと、比較器３５は、ECCエラーを制御ユニット１５へ出力する。
【００５４】
５．３  データの読み出し時（フラグデータ２４ａが「１」の場合）の動作
図８は、データの読み出し時にフラグデータ２４ａが「１」の場合におけるロード／ストアユニット１３の動作を説明するための図である。読み出したデータ（read data）のECC状態ビット（stat）に含まれるフラグデータ２４ａが「１」であるときは、読み出したECCが正しいものでないことを示している。
【００５５】
ステージａ０とｂ１は、書き込み時と同じ処理が実行される。読み出されたデータのEC状態ビット（３ビットデータ）は、一点鎖線L21で示すように、ステージｃ２からステージｆ５まで転送される。
【００５６】
ステージｄ３では、読み出したデータ（read data）は、一点鎖線L22で示すように、対応するレジスタ(R data)にセットされる。
【００５７】
ステージｅ４、ｆ５では、一点鎖線L23で示すように、読み出したデータ（R data）からECCが再計算される。
【００５８】
ステージｇ６では、フラグデータ２４ａが「１」なので、差分器３３は、ECCレジスタ群１３ｃの中からECC状態ビット（stat）に含まれるカウント値２４ｂとタイマ１３ａのそのときのカウント値Tmとの差に応じたECCレジスタを選択するように、選択出力をセレクタ３４に出力する。
【００５９】
上述したように、読み出したECC状態ビット部２４のカウント値２４ｂは、データの書かれた時のタイマ１３ａの値（カウント値）である。現在のタイマ１３ａのカウント値Tmとの差に応じて、読み出したデータ（R data）についてのECCがストアされているECCレジスタが、３つのECCレジスタ１３ｃの中から選択される。
【００６０】
例えば、読み出されたデータ（R data）のECC状態ビット（stat）のカウント値が「１１」（すなわち３）で、ステージｇ６で比較するときのタイマ１３ａの現在のカウント値が「０１」（すなわち１）であるとする。このとき、次の式（１）からECCレジスタ群１３ｃへのECCのストアが何サイクル先行しているかが判定できる。
【００６１】
先行サイクル数＝（（ECC状態ビットのカウント値）−（タイマの現カウント値）＋（ステージｇ６とｃ２とのサイクル数の差））％４          ・・・式（１）
上記の場合では、先行サイクル数＝（（３）−（１）＋（４））＝２となる。よって、ECCレジスタ群１３ｃへのストアが２サイクル先行していることになる。
【００６２】
よって、差分器３３は、このような式（１）の演算に基づく、読み出したデータ（R data）に対応するECCがストアされたECCレジスタの出力を選択するように、セレクタ３５へ選択信号を出力する。
【００６３】
図８では、２サイクル先行するECCを保持するECCレジスタ１３ｃ２の出力が、セレクタ３４によって選択され、再計算したECCとの比較が比較器３５においてされていることが示されている。
【００６４】
すなわち、ECCレジスタ群１３ｃには、サイクル数の差に応じてECCが保持され、読み出されたデータ（R data）のカウント値２４ｂと現在のカウント値Tmとの差分が、差分器３３により計算され、その差分に応じて、３つのECCレジスタの１つの出力が選択されて、比較器３５に入力される。比較器３５では、３つのECCレジスタの１つからのECCと、再計算されたECCとが比較される。比較の結果、２つのECC状態ビットが一致しないと、比較器３５は、ECCエラーを制御ユニット１５へ出力する。
【００６５】
以上のように、ロード／ストアユニット１３は、主メモリ１４にデータを書き込む時に、書き込みデータ（W data）とカウント値２４ｂとを主メモリ１４に書き込むと共に、その書き込みデータについてのECCが正しくないことを示すフラグデータ２４ａを主メモリ１４にセットする。そのセット後、ロード／ストアユニット１３は、ECC計算器１３ｂに書き込みデータ（W data）についてのECCを計算させ、ECCが計算して得られた後、その計算して得られたECCを主メモリ１４に書き込むと共に、フラグデータ２４ａをリセットする。
【００６６】
また、ロード／ストアユニット１３は、主メモリ１４からデータを読み出す時には、主メモリ１４からデータと、そのデータについてのフラグデータ２４ａ、カウント値２４ｂ及びECCを読み出し、読み出したデータ（R data）からECCの再計算を実行し、読み出したデータ（R data）についてのフラグデータ２４ａがセットされている場合、読み出したカウント値２４ｂから比較のためのECCレジスタをECCレジスタ群１３ｃの中から決定し、読み出したデータ（R data）から再計算したECCと、比較のためのECCレジスタのECCとを比較する。ロード／ストアユニット１３は、読み出したデータ（R data）のフラグデータ２４ａがセットされていない場合、読み出したデータ（R data）から再計算して得られたECCと、読み出したECCとを比較することによって、ECCエラー判定を行う。
【００６７】
６．効果
以上のように、本実施の形態のプロセッサによれば、フォワーディング回路は、従来のようなアドレス比較回路及び書き込みデータ用のレジスタを有せず、フォワーディング回路の回路規模を小さくすることができ、ひいては、フォワーディング回路の占めるチップ上の面積も小さくすることができる。本実施の形態のプロセッサ１では、ECCが９ビットであれば、フォワーディング回路において、各ECCレジスタからの配線は９本で済む。また、アドレス比較回路とデータ書き込み用のレジスタがないので、プロセッサ１の消費電力の削減にも繋がる。
【００６８】
（第２の実施の形態）
第１の実施の形態では、読み出したデータ（R data）のECCが正しくない場合は、タイマの値を利用して、ECCレジスタ群１３ｃ中から、読み出したデータ（R data）に対応するECCを保持するECCレジスタを選択しているが、本実施の形態のプロセッサでは、読み出したデータ（R data）のECCが正しくない場合は、読み出しのパイプライン処理をフラッシュして、そのデータの読み出しを中止し、データの読み出しを再度実行させるようにした。
【００６９】
１．構成
以下、本実施の形態に係るプロセッサの構成を説明するが、第１の実施の形態と同じ構成要素については、同じ符号を付し、説明は省略する。特に、主として、ロード／ストアユニットの構成が異なるので、ロード／ストアユニットの構成について説明する。
【００７０】
図９は、本実施の形態に係るロード／ストアユニット１３Aの構成を示す構成図である。図９に示すように、ロード／ストアユニット１３Aは、パイプライン構造を有し、７つのステージを有する。ロード／ストアユニット１３Aは、アドレス計算器３１、セレクタ群３２、ECC計算器１３ｂ及び比較器３５を有するが、第１の実施の形態におけるタイマ１３ａ、ECCレジスタ群１３ｃ、差分器３３、セレクタ３４はない。
【００７１】
また、ECC状態ビット（stat）は、１ビットである。その１ビットは、上述したフラグデータ２４ａであり、カウンタ値は含まれない。
【００７２】
（動作）
図９の構成によれば、データの書き込み時には、ステージｃ２で、フラグデータ２４ａの「１」と共にデータが、主メモリ１４へ書き込まれる（第１回目の書き込みR1）。
【００７３】
そして、ステージｅ４とｆ５において一点鎖線L41で示すようにECCの計算がされた後、ステージｇ６で、計算して得られたECCを、ECC状態ビット（stat）のフラグデータ２４ａの「０」と共に、主メモリ１４に書き込む（第２回目の書き込みR2）。
【００７４】
データの読み込み時は、読み出されたデータのECC状態ビットのフラグデータ２４ａが「０」であれば、一点鎖線L42で示すように、読み出されたデータ（R data）のECCが転送される。また、読み出されたデータ（R data）についてのECCが、一点鎖線L43で示すように、ECC計算器１３ｂにより再計算される。そして、ステージｇ６で、再計算されたECCと、読み出されたECCとの比較が行われる。
【００７５】
また、データの読み込み時、読み出されたデータのECC状態ビットのフラグデータ２４ａが「１」であれば、読み出されたECCは正しくないので、制御ユニット１５へ、読み出し処理のフラッシュを指示する信号を出力し、読み出しのパイプライン処理が中止され、同じアドレスに対するデータの読み出し処理が再度実行される。
【００７６】
再度の読み出し処理の実行は、制御ユニット１５が、ロード／ストアユニット１３Aからのフラッシュ指示を受信してから、その再実行の開始を指示することによって、行われる。
【００７７】
以上のように、ロード／ストアユニット１３Aは、主メモリ１４にデータを書き込む時に、書き込みデータ（W data）を主メモリ１４に書き込むと共に、その書き込みデータ（W data）についてのECCが正しくないことを示すフラグデータ２４ａを主メモリ１４にセットする。そのセット後、ロード／ストアユニット１３Aは、ECC計算器１３ｂに書き込みデータ（W data）についてのECCを計算させ、ECCが計算して得られた後、その計算して得られたECCを主メモリ１４に書き込むと共に、フラグデータ２４ａをリセットする。
【００７８】
また、ロード／ストアユニット１３Aは、主メモリ１４からデータを読み出す時には、主メモリ１４からデータと、そのデータについてのフラグデータ２４ａ及びECCを読み出し、フラグデータ２４ａがセットされている場合、データの読み出しを再実行し、フラグデータ２４ａがセットされていない場合、読み出したデータ（R data）から再計算して得られたECCと、読み出したECCとを比較することによって、ECCエラー判定を行う。
【００７９】
（効果）
以上のように、本実施の形態によれば、データの読み出し時にECCが正しくないことを示すフラグデータが立っていたときには、そのデータの読み出しのパイプライン処理をフラッシュし、同じデータの読み出し処理が再度実行されるようにしたので、第１の実施の形態におけるECCレジスタ群１３ｃ等も省くことができ、フォワーディング回路のさらに簡略化することができる。
【００８０】
また、本実施の形態の場合は、主メモリ１４中のECC状態ビットが１ビットだけで済むというメリットもある。
【００８１】
従って、上述した各実施の形態によれば、ECCの計算に時間を要する場合に、記憶部にデータをストアするとき、データだけの書き込みだけを先行して行い、ECCの書き込みをその後遅延して行うことにより、データのストアに要するサイクル数を削減し、それに続くデータのロードに対するフォワーディング回路が簡略化できるプロセッサを実現することができる。
【００８２】
以上のように、上述した各実施の形態に係るプロセッサによれば、アドレス比較回路等が不要となり、結果としてフォワーディング回路の規模を小さくでき、半導体チップ上のフォワーディング回路の占める面積を小さくすることができる。
【００８３】
なお、上述した各実施の形態では、ロード／ストアユニット１３は、記憶部としての主メモリ１４に対してデータのストアとロードを行っているが、記憶部は、キャッシュメモリあるいはローカルメモリでもよい。
【００８４】
また、上述した各実施の形態では、主メモリ１４は、プロセッサ１の１つの半導体チップ内に内蔵されているが、主メモリ１４は、ALU１１を含むプロセッサ１とは別の半導体チップに内蔵されていてもよい。その場合、主メモリ１４は、バスを介してプロセッサ１と接続される。
【００８５】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【符号の説明】
【００８６】
１  プロセッサ、１１  ALU、１２  レジスタファイル、１３  ロード／ストアユニット、１３ａ  タイマ、１３ｂ  ECC計算器、１３ｃ  ECCレジスタ群、１４  主メモリ、１５  制御ユニット、３１  アドレス計算器、３２，セレクタ群、３３  差分器、３４  セレクタ、３５  比較器
【図１】
2011048681.tif 000003
【図２】
2011048681.tif 000004
【図３】
2011048681.tif 000005
【図４】
2011048681.tif 000006
【図５】
2011048681.tif 000007
【図６】
2011048681.tif 000008
【図７】
2011048681.tif 000009
【図８】
2011048681.tif 000010
【図９】
2011048681.tif 000011