(57)【要約】      （修正有）【課題】キャッシュデータ中に誤りがあっても、処理能力の低下を抑制できるプロセッサを提供する。【解決手段】プロセッサは、キャッシュメモリから読み出されたキャッシュデータの誤り訂正処理に並行して、誤り訂正前のキャッシュデータを用いて演算を実行する演算器２０と、演算器にて演算された演算値を記憶するレジスタと、演算が有効か否かを示す情報を記憶するとともに、演算が有効でない場合には、誤り訂正処理による誤り訂正後のデータを用いて演算器にて再演算を実行させ、演算が有効な場合には、演算による演算値をレジスタに記憶する演算制御部と、を備える。【選択図】図７
2016062513.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュメモリから読み出されたキャッシュデータの誤り訂正処理に並行して、誤り訂正前のキャッシュデータを用いて演算を実行する演算器と、
前記演算器にて演算された演算値を記憶するレジスタと、
前記演算が有効か否かを示す情報を記憶するとともに、前記演算が有効でない場合には、前記誤り訂正処理による誤り訂正後のデータを用いて前記演算器にて再演算を実行させ、前記演算が有効な場合には、前記演算による演算値を前記レジスタに記憶する演算制御部と、を備えるプロセッサ。
【請求項２】
命令を発行する命令発行ユニットと、
前記命令発行ユニットが発行した命令を、当該命令が有効か否かを示すフラグ情報と対応づけて記憶する命令キューと、を備える請求項１に記載のプロセッサ。
【請求項３】
前記演算制御部は、
前記命令キューから発行された命令と、当該命令に対応するフラグ情報と、当該命令に対応するオペランドと、当該命令に対応する演算結果保存先情報と、前記演算器による演算値と、を対応づけて記憶する第１記憶部と、
前記命令キューから発行された命令を前記演算器に対応づけて記憶する第２記憶部と、を有し、
前記演算器は、前記第２記憶部に記憶された命令に基づいて演算を行い、
前記第１記憶部は、前記演算器が演算した演算値を記憶する請求項２に記載のプロセッサ。
【請求項４】
前記第１記憶部は、前記演算器にて演算を行うべき命令と、当該命令が有効か否かを示す情報と、当該命令に対応するオペランドと、当該オペランドが有効か否かを示す情報と、当該命令に対応する前記演算器で演算された演算値の保存先と、当該保存先が有効か否かを示す情報と、当該保存先に保存されるべき前記演算値と、当該演算値が有効か否かを示す情報と、を対応づけて記憶する請求項３に記載のプロセッサ。
【請求項５】
前記第２記憶部は、前記演算器にて実行されるべき命令と、当該命令が有効か否かを示す情報と、当該命令に対応するオペランドと、当該オペランドが有効か否かを示す情報と、を記憶する請求項３または４に記載のプロセッサ。
【請求項６】
前記演算器は、前記第２記憶部に記憶された命令のうち、対応する命令およびオペランドがともに有効な命令を優先して実行する請求項５に記載のプロセッサ。
【請求項７】
前記レジスタのあるエントリに有効か否かが不明のデータを記憶する際に、当該エントリに記憶されていた元データを記憶するバックアップレジスタを備え、
前記レジスタおよび前記バックアップレジスタはそれぞれ、各エントリごとに、各エントリのデータが有効か否かを示すフラグ情報を記憶する請求項１乃至６のいずれかに記載のプロセッサ。
【請求項８】
前記レジスタは、エントリごとに、データを記憶する第１フィールドと、前記第１フィールドのデータを更新する際に前記第１フィールドに記憶されていた元データを記憶する第２フィールドと、前記第１フィールドに記憶されたデータが有効か否かを示すフラグ情報を記憶する第３フィールドと、前記第２フィールド内の前記第１フィールドに記憶されていた元データが有効か否かを示すフラグ情報を記憶する第４フィールドと、を有する請求項１乃至６のいずれかに記載のプロセッサ。
【請求項９】
前記誤り訂正処理を行う誤り訂正回路を備える請求項１乃至８のいずれかに記載のプロセッサ。
【請求項１０】
キャッシュメモリと、
前記キャッシュメモリから読み出されたキャッシュデータの誤り訂正処理を行う誤り訂正回路と、
前記誤り訂正処理に並行して、誤り訂正前のキャッシュデータを用いて演算を実行し、前記誤り訂正処理の結果に基づいて、前記演算が有効か否かを示す情報を記憶するとともに、前記演算が有効でない場合には、前記誤り訂正処理による誤り訂正後のキャッシュデータを用いて前記演算器にて再演算を実行させ、前記演算が有効な場合には、前記演算による演算値をレジスタに記憶するプロセッサコアと、を備えるプロセッサシステム。
【請求項１１】
前記誤り訂正回路は、前記キャッシュメモリに内蔵されるか、前記キャッシュメモリと前記プロセッサコアとの間に設けられるか、あるいは前記プロセッサコアに内蔵される請求項１０に記載のプロセッサシステム。
【請求項１２】
前記キャッシュメモリは、
タグデータを記憶するタグ記憶部と、
前記タグデータに対応するキャッシュデータを記憶するキャッシュデータ記憶部と、
前記プロセッサコアからアクセス要求のあったアドレスが前記タグ記憶部に記憶されたタグデータに一致するか否かのヒット／ミス判定を行うヒット／ミス判定部と、を有し、
前記誤り訂正回路は、前記キャッシュデータ記憶部に記憶された前記キャッシュデータに対して前記誤り訂正処理を行う請求項１０または１１に記載のプロセッサシステム。
【請求項１３】
前記キャッシュメモリは、
タグデータを記憶するタグ記憶部と、
前記タグデータに対応するキャッシュデータを記憶するキャッシュデータ記憶部と、
前記プロセッサコアからアクセス要求のあったアドレスが前記タグ記憶部に記憶されたタグデータに一致するか否かのヒット／ミス判定を行うヒット／ミス判定部と、を有し、
前記誤り訂正回路は、
前記タグ記憶部から読み出されたタグデータの誤り訂正を行う第１誤り訂正部と、
前記キャッシュデータ記憶部から読み出されたキャッシュデータの誤り訂正を行う第２誤り訂正部と、を有し、
前記ヒット／ミス判定部は、前記第１誤り訂正部で誤り訂正を行った後のタグデータを用いて前記ヒット／ミス判定を行う請求項１０または１１に記載のプロセッサシステム。
【請求項１４】
前記プロセッサコアは、１次キャッシュを含み、
前記キャッシュメモリは、２次以上の高次のキャッシュメモリを含む請求項１０乃至１３のいずれかに記載のプロセッサシステム。
【請求項１５】
前記キャッシュメモリは、ＭＲＡＭ（Magnetoresistive RAM）を含む請求項１４に記載のプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュメモリを用いてメモリアクセスの高速化を図るプロセッサおよびプロセッサシステムに関する。
【背景技術】
【０００２】
プロセッサによるメモリアクセスの高速化を図る方策として、キャッシュメモリを大容量化することが検討されている。従来のキャッシュメモリは、ＳＲＡＭ（Static RAM）を用いることが多かったが、ＳＲＡＭは消費電力が大きく、メモリセルの小型化も困難であるという問題があり、ＳＲＡＭの代わりにＭＲＡＭを用いたキャッシュメモリが注目されている。
【０００３】
ＭＲＡＭ（Magnetoresistive RAM）は不揮発性メモリであり、ＳＲＡＭと比べて待機時のリーク電力ははるかに少ない。ところが、ＭＲＡＭは、ＳＲＡＭよりもデータの誤り率が高いという問題がある。データの誤りは、誤り訂正回路を設けることで、誤り訂正を行うことができるが、誤り訂正による遅延は、訂正ビット数が増えると急激に増大することが知られている。したがって、多ビットの誤りが生じた場合には、誤り訂正による遅延がプロセッサの処理能力を低下させてしまう。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−２９７０１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、上述した課題を解決するためになされたものであり、キャッシュデータ中に誤りがあっても、処理能力の低下を抑制可能なプロセッサおよびプロセッサシステムを提供するものである。
【課題を解決するための手段】
【０００６】
上記の課題を解決するために、本実施形態では、  キャッシュメモリから読み出されたキャッシュデータの誤り訂正処理に並行して、誤り訂正前のキャッシュデータを用いて演算を実行する演算器と、
前記演算器にて演算された演算値を記憶するレジスタと、
前記演算が有効か否かを示す情報を記憶するとともに、前記演算が有効でない場合には、前記誤り訂正処理による誤り訂正後のデータを用いて前記演算器にて再演算を実行させ、前記演算が有効な場合には、前記演算による演算値を前記レジスタに記憶する演算制御部と、を備えるプロセッサが提供される。
【図面の簡単な説明】
【０００７】
【図１】第１の実施形態によるプロセッサシステム１の概略構成を示すブロック図。
【図２】（ａ）はキャッシュデータ記憶部６から読み出したキャッシュデータに誤りがなかった場合を示し、図２（ｂ）は誤りがあった場合を示す図。
【図３】第２の実施形態によるプロセッサシステム１の概略構成を示すブロック図。
【図４】拡張キャッシュコントローラ７ａの内部構成の一例を示すブロック図。
【図５】拡張キャッシュコントローラ７ｂの内部構成を示すブロック図。
【図６】第３の実施形態によるプロセッサシステム１の概略構成を示すブロック図。
【図７】第４の実施形態によるプロセッサシステム１のプロセッサコア２の内部構成を示すブロック図。
【図８】拡張リオーダ・バッファ１７のデータ構成の一例を示す図。
【図９】第５の実施形態によるプロセッサシステム１のプロセッサコア２の内部構成を示すブロック図。
【図１０】第６の実施形態によるプロセッサシステム１のプロセッサコア２の内部構成を示すブロック図。
【図１１】第７の実施形態によるプロセッサシステム１のプロセッサコア２の内部構成を示すブロック図。
【図１２】第８の実施形態によるプロセッサシステム１のプロセッサコア２の内部構成を示すブロック図。
【図１３】第９の実施形態によるプロセッサシステム１のプロセッサコア２の内部構成を示すブロック図。
【発明を実施するための形態】
【０００８】
以下、図面を参照して本発明の実施形態を説明する。以下の実施形態では、プロセッサおよびプロセッサシステム内の特徴的な構成および動作を中心に説明するが、プロセッサおよびプロセッサシステムには以下の説明で省略した構成および動作が存在しうる。ただし、これらの省略した構成および動作も本実施形態の範囲に含まれるものである。
【０００９】
（第１の実施形態）
図１は第１の実施形態によるプロセッサシステム１の概略構成を示すブロック図である。図１のプロセッサシステム１は、プロセッサコア２と、キャッシュメモリ３と、誤り訂正回路（ＥＣＣ：Error Correction Circuit）４とを備えている。キャッシュメモリ３は、図１では、キャッシュメモリ３としてＬ２キャッシュ３のみを図示しているが、３次（Ｌ３）以上の高次のキャッシュメモリを設けてもよい。図１では、Ｌ１キャッシュを省略しているが、Ｌ１キャッシュはプロセッサコア２に内蔵されている。
【００１０】
図１のＬ２キャッシュ３は、タグ記憶部５と、キャッシュデータ記憶部６と、キャッシュコントローラ７とを有する。タグ記憶部５は、キャッシュデータのアドレス情報であるタグデータを記憶する。キャッシュデータ記憶部６は、タグデータに対応するキャッシュデータを記憶する。キャッシュコントローラ７は、プロセッサコア２からアクセス要求のあったアドレスがタグ記憶部５に記憶されたタグデータに一致するか否かのヒット／ミス判定を行う。また、キャッシュコントローラ７は、プロセッサコア２からアクセス要求のあったアドレスに対応するデータをキャッシュデータ記憶部６から読み出したり、キャッシュデータ記憶部６に書き込む制御を行う。
【００１１】
誤り訂正回路４は、キャッシュデータ記憶部６に記憶されたキャッシュデータに対して誤り訂正処理を行い、エラーの有無を示すエラー信号と、誤り訂正後のデータとをプロセッサコア２に伝送する。
【００１２】
図２は図１のプロセッサシステム１の処理動作を説明する図であり、矢印線は時間軸を示している。図２（ａ）はキャッシュデータ記憶部６から読み出したキャッシュデータに誤りがなかった場合を示し、図２（ｂ）は誤りがあった場合を示している。
【００１３】
図２（ａ）は、時刻ｔ１〜ｔ２の間に、キャッシュデータ記憶部６からキャッシュデータが読み出される例を示している。
【００１４】
本実施形態によるプロセッサコア２は、キャッシュデータ記憶部６からデータが読み出されると（時刻ｔ１〜ｔ２）、誤り訂正処理の結果を待たずに演算を開始する（時刻ｔ２〜ｔ５）。このような演算を投機的な演算と呼ぶ。誤り訂正回路４は、プロセッサコア２が演算を行うのに並行して、誤り訂正処理を行う（時刻ｔ３〜ｔ４）。
【００１５】
図２（ａ）の場合、誤り訂正回路４は、誤りがないと判断し、例えばエラー信号をロウにする。これにより、プロセッサコア２は、投機的な演算を行って得た演算値をコミットする（時刻ｔ６〜ｔ７）。コミットとは、投機的な演算を行って得た演算値を有効とみなしてレジスタに書き込む処理である。
【００１６】
図２（ｂ）の場合、誤り訂正回路４は、ＥＣＣ計算を行って、エラー信号を例えばハイにするとともに、誤り訂正を行う（時刻ｔ３〜ｔ４）。プロセッサコア２は、誤り訂正回路４からのエラー信号と誤り訂正済のデータを受信すると、このデータを用いて再演算を行い（時刻ｔ６〜ｔ７）、再演算した演算値をコミットする（時刻ｔ７〜ｔ８）。
【００１７】
このように、第１の実施形態によるプロセッサシステム１では、プロセッサコア２からの読出し要求に応じて読み出されたキャッシュデータに対して誤り訂正処理を施すのに並行して、このキャッシュデータを用いて投機的な演算を行い、誤りがないことがわかると、投機的な演算による演算値を有効なものとみなしてコミットする。これにより、誤り訂正処理の結果が得られてから演算を開始するのに比べて、演算時間を大幅に削減でき、プロセッサの処理性能を向上できる。なお、誤り訂正回路４で誤りが検出されて、誤り訂正が行われた場合には、誤り訂正後のデータを用いて再演算を行うため、信頼性が低下するおそれはない。
【００１８】
（第２の実施形態）
以下に説明する第２の実施形態は、誤り訂正回路４をキャッシュメモリ３内に設けるものである。
【００１９】
図３は第２の実施形態によるプロセッサシステム１の概略構成を示すブロック図である。図３では、図１と共通する構成部分には同一符号を付しており、以下では相違点を中心に説明する。
【００２０】
図３のプロセッサシステム１は、誤り訂正回路４を内蔵した拡張キャッシュコントローラ７ａを有する。この拡張キャッシュコントローラ７ａは、図１のキャッシュコントローラ７と同様にヒット／ミス判定とキャッシュメモリ３のアクセス制御とを行うととともに、誤り訂正処理を行う。
【００２１】
図４は拡張キャッシュコントローラ７ａの内部構成の一例を示すブロック図である。図４の拡張キャッシュコントローラ７ａは、キャッシュロジック８と誤り訂正回路４とを有する。
【００２２】
図４のキャッシュロジック８は、図１のキャッシュコントローラ７と同様に動作する。また、図４の誤り訂正回路４は、図１の誤り訂正回路４と同様に動作する。キャッシュロジック８は、タグデータを用いてヒット／ミス判定を行い、ヒットしたキャッシュデータをプロセッサコア２に伝送するとともに、誤り訂正回路４にも伝送する。誤り訂正回路４は、キャッシュデータに対して誤り訂正処理を行い、エラー信号の論理すなわち誤りの有無を決定するとともに、訂正後のデータをプロセッサコア２に伝送する。
【００２３】
図４の誤り訂正回路４は、キャッシュデータ記憶部６から読み出したキャッシュデータのみについて誤り訂正処理を行っていたが、タグ記憶部５から読み出したタグデータについても誤り訂正処理を行ってもよい。この場合の拡張キャッシュコントローラ７ｂの内部構成は図５のようなブロック図で表される。
【００２４】
図５の拡張キャッシュコントローラ７ｂは、図４と比べて、タグデータ用の誤り訂正回路４ａが追加されている。タグデータ用の誤り訂正回路４ａは、タグ記憶部５とキャッシュロジック８との間に設けられている。タグ記憶部５から読み出されたタグデータは、誤り訂正回路４ａで誤り訂正処理が施される。そして、誤り訂正されたタグデータがキャッシュロジック８に入力される。よって、キャッシュロジック８は、誤り訂正されたタグデータを用いてヒット／ミス判定を行うことにより、ヒット／ミス判定の精度を向上できる。
【００２５】
このように、図５の拡張キャッシュコントローラ７ｂは、キャッシュデータ記憶部６から読み出されたキャッシュデータについては、誤り訂正処理を行っている間に投機的な演算を行うが、タグデータについては、誤り訂正がなされた後にヒット／ミス判定を行う。このように、タグデータについて、投機的な処理を行わない理由は、タグデータの誤りは、アクセスすべきデータのアドレスの誤りを意味し、データの誤りに比べて、投機的な処理が非常に複雑になるためである。
【００２６】
タグデータについても誤り訂正処理を行うか否かは、以下のことを考慮に入れて決めればよい。プロセッサシステム１を低電圧駆動すると、消費電力を低減できるが、データの信頼性は低下し、誤りが生じやすくなる。消費電力の低減を念頭に置かなくてよい場合は、タグデータの信頼性が確保できる程度の電源電圧レベルに設定して、図３のようなタグデータの誤り訂正なしのプロセッサシステム１の構成を選択すればよい。一方、消費電力を低減したい場合は、電源電圧レベルを下げるとともに、図５のようなタグデータの誤り訂正を行うプロセッサシステム１の構成を選択すればよい。
【００２７】
このように、第２の実施形態では、誤り訂正回路４をキャッシュメモリ３内に設けるため、キャッシュメモリ３とプロセッサコア２との他に誤り訂正回路４を設ける必要がなくなり、プロセッサシステム１の実装形態を簡略化できる。また、誤り訂正回路４をキャッシュメモリ３に内蔵することで、データキャッシュ記憶部、タグ記憶部５、キャッシュロジック８および誤り訂正回路４間のデータの送受を高速化できる。
【００２８】
（第３の実施形態）
以下に説明する第３の実施形態は、第２の実施形態とは逆に、プロセッサコア２の内部に誤り訂正回路４を設けるものである。
【００２９】
図６は第３の実施形態によるプロセッサシステム１の概略構成を示すブロック図である。図６のプロセッサシステム１は、誤り訂正回路４を内蔵したプロセッサコア２を有する。近年のプロセッサコア２のクロック信号は、他の回路ブロックのクロック信号よりも高速であることが多い。よって、プロセッサコア２の内部に誤り訂正回路４を設けると、プロセッサコア２の外部に誤り訂正回路４を設けた場合と比べて、誤り訂正処理を高速に行える可能性が高い。
【００３０】
その一方で、誤り訂正回路４で誤りが検出されると、訂正済のデータをキャッシュメモリ３に書き戻す際に、プロセッサコア２とキャッシュメモリ３間のバスを占有してしまう。誤り率が高い場合には、バスの占有率も高くなるため、キャッシュメモリ３からプロセッサコア２にバスを介して伝送されるデータ量が減るおそれがある。
【００３１】
よって、誤り率が低い場合には、図６の構成を採用することで、誤り訂正処理の高速化を図ることができる。
【００３２】
このように、第３の実施形態では、プロセッサコア２の内部に誤り訂正回路４を設けるため、誤り訂正回路４から出力されるエラー信号と訂正済のデータとをいち早く取得できる。よって、投機的な演算が有効か否かの判断を迅速に行えるとともに、投機的な演算が無効であったことも迅速に判断でき、再演算のタイミングを早めることができる。
【００３３】
上述した第１〜第３の実施形態によるプロセッサシステム１のどれを採用するかは、キャッシュメモリ３の誤り発生率、プロセッサコア２によるバスの占有率、およびバス幅などを考慮に入れて決定するのが望ましい。
【００３４】
（第４の実施形態）
以下に説明する第４の実施形態は、上述した第１〜第３の実施形態におけるプロセッサコア２の内部構成を具体化したものである。
【００３５】
図７は第４の実施形態によるプロセッサシステム１のプロセッサコア２の内部構成を示すブロック図である。図７のプロセッサコア２は、Ｌ１データキャッシュ１１と、Ｌ１データキャッシュコントローラ１２と、命令キャッシュ１３と、命令キャッシュコントローラ１４と、命令発行ユニット１５と、命令キュー１６と、拡張リオーダ・バッファ（Reorder Buffer）１７と、レジスタ１８と、リザベーション・ステーション（Reservation Stations）１９と、演算器２０とを有する。
【００３６】
拡張リオーダ・バッファ１７とリザザーション・ステーション１９は投機演算制御部に対応し、拡張リオーダ・バッファ１７は第１記憶部に対応し、リザベーション・ステーション１９は第２記憶部に対応する。
【００３７】
Ｌ１データキャッシュ１１は、プロセッサコア２がアクセス要求をしたデータを記憶する。図７では、省略しているが、Ｌ１データキャッシュ１１に入りきれないデータは、Ｌ２キャッシュ３以降の高次のキャッシュメモリ３かメインメモリに格納される。
【００３８】
Ｌ１データキャッシュコントローラ１２は、プロセッサコア２がアクセス要求をしたデータがＬ１データキャッシュ１１に格納されているか否かのヒット／ミス判定と、Ｌ１データキャッシュ１１に対するアクセス制御と、Ｌ１データキャッシュ１１にデータが格納されていない場合にＬ２キャッシュ３にアクセスする制御とを行う。
【００３９】
Ｌ１データキャッシュコントローラ１２は、Ｌ２キャッシュ３からのデータを受け取ると、このデータを拡張リオーダ・バッファ１７に伝送する。この時点では、このデータに誤りがあるか否かがわからないため、拡張リオーダ・バッファ１７には、誤り訂正待ちであることを示すフラグ情報Ｗ(wait)が記憶される。Ｌ２キャッシュ３からのデータに誤りがあるか否かは、Ｌ２キャッシュ３の誤り訂正回路４からのエラー信号の論理により判断される。Ｌ１データキャッシュコントローラ１２は、エラー信号により、Ｌ２キャッシュ３からのデータに誤りがないと判断すると、そのデータをＬ１データキャッシュ１１に記憶する。これにより、Ｌ１データキャッシュ１１には、誤りのないデータを記憶することができる。
【００４０】
命令キャッシュコントローラ１４は、Ｌ２キャッシュ３から命令が送られてくると、命令発行ユニット１５を介して命令キュー１６にその命令を記憶する。この時点では、この命令に誤りがあるか否かがわからないため、誤り訂正待ちであることを示すフラグ情報Ｗ(wait)が命令キュー１６に記憶される。その後、Ｌ２キャッシュ３からのエラー信号により、命令に誤りがないことがわかると、フラグ情報はＶ(valid)に変更される。一方、エラー信号により、命令に誤りがあることがわかると、Ｌ２キャッシュ３の誤り訂正回路４で誤り訂正した命令が命令キュー１６に伝送され、フラグ情報はＶ(valid)に変更される。
【００４１】
命令キュー１６は、複数のエントリを有し、各エントリには、命令発行ユニット１５が発行した命令と、対応する命令のフラグ情報１６ａとが格納される。フラグ情報１６ａは、対応する命令が誤り訂正待ちであることを示すＷ(wait)情報と、対応する命令が有効であることを示すＶ(valid)情報とを含んでいる。
【００４２】
命令キュー１６から発行された命令は順にリザベーション・ステーション１９に送られる。リザベーション・ステーション１９は、命令キュー１６からの命令を受け取ると、その命令に対応するオペランドをレジスタ１８から取得する。リザベーション・ステーション１９は、命令とオペランドとを一つのエントリとして対応づけて、複数のエントリ分を記憶可能である。そして、リザベーション・ステーション１９は、命令とオペランドが揃ったエントリから優先して、そのエントリの情報を演算器２０に伝送し、演算器２０での演算が実行される。演算器２０で演算された演算値は、拡張リオーダ・バッファ１７に記憶される。
【００４３】
図７のリザベーション・ステーション１９は、命令と２つのオペランドとを対応づけているが、一つのエントリに対応づけられるオペランドの数には特に制限はない。
【００４４】
命令キュー１６から発行された命令は、拡張リオーダ・バッファ１７にも送られる。拡張リオーダ・バッファ１７に送られた命令は、命令キュー１６から削除される。拡張リオーダ・バッファ１７は、命令に誤りがあった場合は、誤り訂正後の命令を記憶するとともに、後続のエントリを削除（フラッシュ）する。後続のエントリを削除するのは、間違った命令以降の演算結果は、正しいという保証が得られないためである。
【００４５】
図８は拡張リオーダ・バッファ１７のデータ構成の一例を示す図である。図示のように、拡張リオーダ・バッファ１７は、エントリ番号（Entry）と、ビジー情報（Busy）と、命令（Instruction）と、命令のフラグ情報と、オペランド１と、オペランド１のフラグ情報と、オペランド２と、オペランド２のフラグ情報と、保存先（Destination）と、保存先のフラグ情報と、演算値（Value）と、各エントリの状態（State）とを、一つのエントリとして対応づけて、複数エントリ分を記憶している。
【００４６】
拡張リオーダ・バッファ１７に記憶される各情報は、Ｌ２キャッシュ３、データキャッシュコントローラ７または命令キュー１６から伝送される。命令、オペランド１、オペランド２および保存先の各情報は、拡張リオーダ・バッファ１７に記憶された時点では、誤り訂正結果がまだ得られていないため、フラグ情報はＷ(wait)に設定される。リザベーション・ステーション１９から拡張リオーダ・バッファ１７に転送要求があった場合には、拡張リオーダ・バッファ１７は命令、オペランド１およびオペランド２の各情報を組にしてリザベーション・ステーション１９に伝送する。拡張リオーダ・バッファ１７は、これらの情報を用いて演算器２０が演算を行った演算値を記憶する。
【００４７】
また、誤り訂正回路４が出力したエラー信号が拡張リオーダ・バッファ１７に入力されると、エラー信号の論理により、対応する情報に誤りがないことがわかると、Ｖ(valid)のフラグ情報が設定される。エラー信号の論理により、対応する情報に誤りがあることがわかると、対応するエントリ以降のすべての情報が削除（フラッシュ）される。例えば、拡張リオーダ・バッファ１７内の命令をフラッシュした後は、命令発行ユニット１５が新たな命令をフェッチして演算を継続して行ってもよいし、拡張リオーダ・バッファ１７のエントリを命令キュー１６に書き戻して演算を継続して行ってもよい。
【００４８】
演算が実行中のエントリのビジー情報はyesとセットされ、演算が終了するとnoとセットされる。命令、オペランド１、オペランド２、および保存先のすべてのフラグ情報がvalidになり、かつビジー情報がnoの時、各エントリの状態はCommitになる。Commitになると、そのエントリの演算値がレジスタ１８に保存される。
【００４９】
本実施形態では、上述した第１〜第３の実施形態と同様に、Ｌ２キャッシュ３等の高次のキャッシュメモリ３から読み出されたキャッシュデータに対して誤り訂正処理を行うのに並行して、このキャッシュデータを用いて投機的な演算を行う。投機的な演算を行っている最中は、命令、オペランド、および保存先に対応する各フラグ情報はwaitに設定される。この状態で投機的な演算を行って得られた演算値は、拡張リオーダ・バッファ１７に格納され、その演算値に対応するエントリの状態はやはりＷ(wait)に設定される。
【００５０】
誤り訂正回路４からのエラー信号により、命令、オペランド、および保存先に誤りがないことがわかり、かつビジー情報がnoの時、拡張リオーダ・バッファ１７は、対応するエントリの状態をCommitに設定して、投機的な演算により得られた演算値をレジスタ１８に書き込む。
【００５１】
逆に、誤り訂正回路４からのエラー信号により、拡張リオーダ・バッファ１７内の命令、オペランド、および保存先の少なくとも一つに誤りがあることがわかると、その誤りのあるエントリ以降のすべてのエントリが無効となり、削除（フラッシュ）される。
【００５２】
このように、第４の実施形態によるプロセッサコア２は、命令キュー１６に各命令に対応したフラグ情報１６ａを設けるため、命令キュー１６内の各エントリの命令に誤りがあるか否かを把握できる。命令キュー１６は、命令に誤りがある場合は、その命令以降のエントリをすべて削除するため、命令の投機的な実行を行った場合でも、誤りのある命令の実行による演算結果がレジスタ１８に書き込まれるおそれはない。
【００５３】
（第５の実施形態）
以下に説明する第５の実施形態は、第４の実施形態とはレジスタ１８の内部構成が異なるものである。
【００５４】
図９は第５の実施形態によるプロセッサシステム１のプロセッサコア２の内部構成を示すブロック図である。図９のプロセッサコア２は、リザベーション・ステーション１９のデータ構成が図７と異なる他は、図７と共通する。図９のリザベーション・ステーション１９は、命令、オペランド１、オペランド２の各情報に対応するフラグ情報１９ａを有する。これらのフラグ情報１９ａは、命令キュー１６と拡張リオーダ・バッファ１７に記憶されているフラグ情報に基づいて設定される。
【００５５】
演算器２０は、リザベーション・ステーション１９の各エントリの中で、Ｖ(valid)のフラグ情報を有する命令を優先して選択して演算を実行する。これにより、演算器２０は、正しいデータのみを用いて演算を行うことができ、演算値が有効である確率を上げることができ、プロセッサの処理能力を向上できる。
【００５６】
このように、第５の実施形態では、リザベーション・ステーション１９内にフラグ情報１９ａを設けるため、このフラグ情報１９ａを参照して、演算器２０は演算順序を決定でき、演算器２０で演算した演算値が有効である確率を向上できる。
【００５７】
（第６の実施形態）
図１０は第６の実施形態によるプロセッサシステム１のプロセッサコア２の内部構成を示すブロック図である。図９のプロセッサコア２は、バックアップレジスタ２１を有し、またレジスタ１８のデータ構成が図７と異なっている。これ以外は、図７と共通する。
【００５８】
図１０のレジスタ１８は、各エントリごとにフラグ情報１８ａを有する。このフラグ情報１８ａは、誤り訂正回路４から送られて来るエラー信号や拡張リオーダ・バッファ１７により設定される。
【００５９】
バックアップレジスタ２１は、レジスタ１８の各エントリにデータを記憶する際に、このエントリに今まで記憶されていたデータを記憶する。バックアップレジスタ２１を設ける理由は、レジスタ１８に新たに記憶したデータが誤りであった場合に、元のデータに戻せるようにするためである。バックアップレジスタ２１には、バックアップしたデータが誤り訂正前か後かを区別するために、すなわちバックアップしたデータが有効か否かを示すフラグ情報２１ａも保存される。
【００６０】
図７では、レジスタ１８に記憶されるデータは拡張リオーダ・バッファ１７からレジスタ１８に伝送されたが、図１０では、Ｌ２キャッシュ３から直接レジスタ１８にデータを記憶できるようにしている。これにより、レジスタ１８へのデータ転送を高速化でき、ひいては演算器２０へのデータ転送を高速化できる。
【００６１】
（第７の実施形態）
図１１は第７の実施形態によるプロセッサシステム１のプロセッサコア２の内部構成を示すブロック図である。図１１のプロセッサコア２は、図１０のリザベーション・ステーション１９に、図９と同様にフラグ情報１９ａを設けており、これ以外は図１０のプロセッサコア２と共通する。
【００６２】
図１１のプロセッサコア２では、リザベーション・ステーション１９内にフラグ情報１９ａを設けるため、このフラグ情報１９ａを参照して、演算器２０は演算順序を決定でき、演算器２０で演算した演算値が有効である確率を向上でき、プロセッサの処理性能の向上が図れる。
【００６３】
（第８の実施形態）
図１２は第８の実施形態によるプロセッサシステム１のプロセッサコア２の内部構成を示すブロック図である。図１２のプロセッサコア２は、レジスタ１８のデータ構成が図７と異なっている。これ以外は、図７と共通する。
【００６４】
図１２のレジスタ１８は、各エントリごとに、レジスタ・フィールド１８ｂと、バックアップ・フィールド１８ｃと、レジスタ・フィールド１８ｂ内のデータのフラグ情報１８ａ、バックアップ・フィールド１８ｃのデータのフラグ情報１８ｄとを有する。レジスタ・フィールド１８ｂには、レジスタ１８に記憶されるべき本来のデータが記憶される。バックアップ・フィールド１８ｃには、対応するレジスタ・フィールド１８ｂ内のデータを更新する際に、このレジスタ・フィールド１８ｂに今まで記憶されていたデータが記憶され、そのデータが誤り訂正前か後か、すなわち有効か否かを示すフラグ情報１８ｄが記憶される。
【００６５】
レジスタ１８内のフラグ情報は、誤り訂正回路４から送られて来るエラー信号や拡張リオーダ・バッファ１７により設定される。バックアップ・フィールド１８ｃは、図１０のバックアップレジスタ２１と同様の目的で用いられるが、バックアップ・フィールド１８ｃはレジスタ１８の各エントリごとに設けられるため、誤りが多い場合であっても、バックアップ・フィールド１８ｃが不足するおそれは少ない。よって、バックアップ・フィールド１８ｃを有効活用して、投機演算を行うことができる。
【００６６】
（第９の実施形態）
図１３は第７の実施形態によるプロセッサシステム１のプロセッサコア２の内部構成を示すブロック図である。図１３のプロセッサコア２は、図１２のリザベーション・ステーション１９に、図９と同様にフラグ情報１９ａを設けており、これ以外は図１２のプロセッサコア２と共通する。
【００６７】
図１３のプロセッサコア２では、リザベーション・ステーション１９内にフラグ情報１９ａを設けるため、このフラグ情報１９ａを参照して、演算器２０は演算順序を決定でき、演算器２０で演算した演算値が有効である確率を向上でき、プロセッサの処理性能の向上が図れる。
【００６８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６９】
１  プロセッサシステム、２  プロセッサコア、３  キャッシュメモリ、４  誤り訂正回路、５  タグ記憶部、６  キャッシュデータ記憶部、７  キャッシュコントローラ、７ａ  拡張キャッシュコントローラ、８  キャッシュロジック、１１  Ｌ１データキャッシュ、１２  Ｌ１データキャッシュコントローラ、１３  命令キャッシュ、１４  命令キャッシュコントローラ、１５  命令発行ユニット、１６  命令キュー、１６ａ、１８ａ、１９ａ  フラグ情報、１７  拡張リオーダ・バッファ、１８  レジスタ、１９  リザベーション・ステーション、２０  演算器
【図１】
2016062513.tif 000003
【図２】
2016062513.tif 000004
【図３】
2016062513.tif 000005
【図４】
2016062513.tif 000006
【図５】
2016062513.tif 000007
【図６】
2016062513.tif 000008
【図７】
2016062513.tif 000009
【図８】
2016062513.tif 000010
【図９】
2016062513.tif 000011
【図１０】
2016062513.tif 000012
【図１１】
2016062513.tif 000013
【図１２】
2016062513.tif 000014
【図１３】
2016062513.tif 000015