説明

演算処理装置及び演算処理方法

【課題】レジスタからの読み出しデータにおける誤り検出時に、プログラム実行動作を停止することなく、継続して実行可能である演算処理装置を提供する。
【解決手段】演算処理装置は、レジスタから読み出したデータのエラーを検出し訂正する訂正制御部と、命令の実行要求に応じてキャッシュ領域又はノンキャッシュ領域にアクセスするとともに、実行要求された一の命令がノンキャッシュ領域にアクセスするロード命令であることを通知するキャッシュ制御部と、一の命令がノンキャッシュ領域にアクセスするロード命令であることがキャッシュ制御部により通知されると、一の命令をキャッシュ制御部に実行させる間、他の命令の実行を待たせることにより、ノンキャッシュ領域にアクセスするロード命令の実行中にエラーが検出されないようにする命令実行制御部とを含む。

【発明の詳細な説明】
【技術分野】
【0001】
本願開示は、演算処理装置及び演算処理方法に関する。
【背景技術】
【0002】
半導体製造技術の進歩により、CPU(Central Processing Unit)で使用されているトランジスタの微細化及び高集積化が進み、これに伴いトランジスタの故障が多くなってきている。そのようなトランジスタの故障に対応するために、故障箇所を検出する回路を実装することにより、故障が発生した場合であっても故障を検出してCPUの誤動作を防ぐことが考えられる。特に、検出した故障箇所を訂正可能であれば訂正することにより、CPUを停止することなく継続した動作が可能となる。
【0003】
このような故障箇所の訂正の技術として、CPUの固定小数点レジスタや浮動小数点レジスタ等のレジスタファイルから演算実行のために読み出したデータにエラーがある場合に、エラー訂正回路によりエラーを訂正する技術が知られている。この技術では、エラー検出の時点でパイプラインをクリアして、エラー訂正後に再度命令の実行を行うことにより、プログラムを停止することなく、プログラム実行動作を継続することが可能となる。
【0004】
但し、エラー検出時にノンキャッシュ領域へアクセスするロード命令等のメモリアクセス命令がノンキャッシュ領域にアクセス中であった場合には、ロード命令を再実行することなく、そのままプログラムを停止するように動作が制御される。これは、ノンキャッシュ領域へアクセスするロード命令によりアクセス先のデータ内容が変更する場合があり、ロード命令を再実行して2回目の読み出しを行なったのでは、誤ったデータを読み出す結果となるからである。例えば、ロード命令が、データの読み出しと読み出したデータの変更とを同時に行なう命令(read modify write命令)である場合がある。このような命令は、例えば同期機構の管理のためのセマフォ(semaphore)やミューテックス(mutex)の制御に用いられ、通常は、アクセス先のデータに直接読み書きしない可能性のあるキャッシュを介してのアクセスではなく、ノンキャッシュ領域アクセスとして実行される。また例えばロード命令が単純な読み出し命令であったとしても、アクセス先がFIFO(First-In First-Out)やスタックのように読み出しにより次のエントリに移行するようなメモリである場合もある。このような場合も、アクセス先のデータに直接読み書きしない可能性のあるキャッシュを介してのアクセスではなく、ノンキャッシュ領域アクセスとして命令が実行される。
【0005】
このように、ノンキャッシュ領域へアクセスするロード命令がノンキャッシュ領域にアクセスしている場合であっても、エラー検出時にプログラムを停止してしまうのは、好ましい制御ではない。従って、エラー検出時にプログラムを停止することなく、継続して動作を実行可能である制御が望ましい。
【0006】
また、ECC(Error Correction Code)回路等のエラーを訂正する回路を備えた場合には、エラーが発生したときの制御の動作検証を行う必要がある。これについては、意図的にエラーを発生させることで、エラー発生時の動作の検証を行う技術がある。しかし、動作検証を行うためには、プログラムを停止させることなく動作検証を行うことが望ましい。そこで従来は、エラーがある場合の動作検証の方式として、ノンキャッシュ領域へアクセスするロード命令が出現しないプログラムを動作検証用に特別に作成し、そのような特別なプログラムを実行することにより、動作検証を行っていた。しかしながら、このような特別なプログラムのみでしか動作検証を行うことができない場合、検証のカバレッジが低いという問題点がある。また、特別にプログラムを作成するためには、その分の時間とコストとが余計に必要になるという問題点がある。そこで、特別に作成したのではない通常動作用のプログラムを用いて、固定小数点レジスタや浮動小数点レジスタから演算を行うために読み出したデータが誤っていた場合の動作検証を実行可能であることが望ましい。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特願2009−519121号
【特許文献2】特願2009−520136号
【特許文献3】特開平5−274173号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
以上を鑑みると、レジスタからの読み出しデータにおける誤り検出時に、プログラム実行動作を停止することなく、継続して実行可能である演算処理装置及び演算処理方法が望まれる。
【課題を解決するための手段】
【0009】
キャッシュメモリを有する演算処理装置は、レジスタから読み出したデータのエラーを検出し訂正する訂正制御部と、命令の実行要求に応じて、前記キャッシュメモリを介してアクセスされるメモリのキャッシュ領域又は前記キャッシュメモリを介さずにアクセスされるメモリのノンキャッシュ領域にアクセスするとともに、実行要求された一の命令がノンキャッシュ領域にアクセスするメモリアクセス命令であることを通知するキャッシュ制御部と、前記一の命令がノンキャッシュ領域にアクセスするメモリアクセス命令であることが前記キャッシュ制御部により通知されると、前記一の命令を前記キャッシュ制御部に実行させる間、前記訂正制御部がエラーを検出する対象である他の命令の実行を待たせる命令実行制御部とを含むことを特徴とする。
【0010】
演算処理方法は、実行要求された一の命令が、キャッシュメモリを介さずにアクセスされるメモリのノンキャッシュ領域にアクセスするメモリアクセス命令であることを通知し、
前記一の命令がノンキャッシュ領域にアクセスするメモリアクセス命令であることの通知があった場合、前記一の命令を前記キャッシュ制御部に実行させる間、他の命令の実行を待たせる各段階を含むことを特徴とする。
【発明の効果】
【0011】
本願開示の少なくとも1つの実施例によれば、ノンキャッシュ領域にアクセスするロード命令の場合には、他の命令が実行されない状態において単独で実行される。従って、ノンキャッシュ領域にアクセスするロード命令の実行時には、レジスタからの読み出しデータにおける誤り検出が発生することもない。即ち、レジスタからの読み出しデータにおける誤り検出時には、ノンキャッシュ領域にアクセスするロード命令が実行中であることはなく、プログラム実行動作を停止させずに継続して実行可能である。
【図面の簡単な説明】
【0012】
【図1】情報処理システムの構成の一例を示す図である。
【図2】図1に示す1つのコアの構成の一例を示す図である。
【図3】エラー検出&訂正制御部によるエラー訂正処理の流れを示す図である。
【図4】ノンキャッシュ領域にアクセスするロード命令を実行する際の制御の流れを説明するための図である。
【図5】ノンキャッシュ領域にアクセスするロード命令を実行する際の制御の流れを示すフローチャートである。
【図6】ノンキャッシュ領域にアクセスするロード命令を実行する際の動作の推移を示す図である。
【図7】命令デコーダの動作の流れを示すフローチャートである。
【図8】1次データキャッシュ制御部の動作の流れを示すフローチャートである。
【図9】命令完了制御部の動作の流れを示すフローチャートである。
【図10】1次データキャッシュ制御部の動作の流れの変形例を示すフローチャートである。
【図11】ノンキャッシュアクセス再実行モード指示部の回路構成の一例を示す図である。
【図12】命令デコーダの命令発行部の構成の一例を示す図である。
【図13】1次データキャッシュ制御部の回路構成の一例を示す図である。
【図14】検証モードであるか否かに応じて異なる制御を実行する1次データキャッシュ制御部の構成の一例を示す図である。
【発明を実施するための形態】
【0013】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
【0014】
図1は、情報処理システムの構成の一例を示す図である。図1に示す情報処理システムは、演算処理等を実行する処理ユニットであるCPU(Central Processing Unit)11、メモリ装置であるDIMM(Dual Inline Memory Module)12、及び外部機器や他のノードとのデータ入出力のためのインターコネクト部13を含む。CPU11は、複数のコア14、共用の2次キャッシュ15、及びMAC(Memory Access Controller)16を含む。MAC16は、CPU11からDIMM12に対するデータの読み書き動作の制御を行う。
【0015】
複数のコア14の各々は、一次キャッシュを内蔵する。コア14内部の命令実行制御部から見たときに、1次キャッシュをアクセス可能であるとともに、更に2次キャッシュをアクセス可能となっている。このようにキャッシュメモリを多階層化した構成により、キャッシュミスが発生した場合に、主記憶にアクセスすることによるペナルティーを軽減する。この例では、1次キャッシュと主記憶(DIMM12)との間に、主記憶よりは高速にアクセスできる2次キャッシュ15を設けている。これにより、1次キャッシュにおいてキャッシュミスが発生した場合に、主記憶にアクセスが必要になる頻度を低くして、キャッシュミス・ペナルティーを軽減することができる。
【0016】
CPU11と外部機器や他のノード(CPU)とのデータのやり取りは、インターコネクト部13により制御される。この情報処理システム10のCPU&メモリボードには、1CPUのみが搭載される構成となる。ノンキャッシュ領域へアクセスするロード命令等がアクセスする領域は、例えばMAC16内部やインターコネクト部13に存在するレジスタ等の領域である。
【0017】
図2は、図1に示す1つのコア14の構成の一例を示す図である。なお図2及び以降の同様の図において、各ボックスで示される各機能ブロックと他の機能ブロックとの境界は、基本的には機能的な境界を示すものであり、物理的な位置の分離、電気的な信号の分離、制御論理的な分離等に対応するとは限らない。各機能ブロックは、他のブロックと物理的にある程度分離された1つのハードウェアモジュールであってもよいし、或いは他のブロックと物理的に一体となったハードウェアモジュール中の1つの機能を示したものであってもよい。各機能ブロックは、他のブロックと論理的にある程度分離された1つのモジュールであってもよいし、或いは他のブロックと論理的に一体となったモジュール中の1つの機能を示したものであってもよい。
【0018】
コア14は、命令バッファ21、命令デコーダ22、RSA(Reservation Station for Address generate)23、RSE(Reservation Station for Execute)24、及びRSF(Reservation Station for Floating)25を含む。コア14は更に、RSBR(Reservation Station for Branch)26、CSE(Commit Stack Entry)27、1次データキャッシュ制御部28、演算器29、演算器30、ネクストプログラムカウンタ(NEXTPC:NEXT Program Counter)31、及びプログラムカウンタ(PC:Program Counter)32を含む。コア14は更に、固定小数点リネーミングレジスタ33、浮動小数点リネーミングレジスタ34、固定小数点レジスタ35、浮動小数点レジスタ36、エラー検出&訂正制御部37、分岐予測機構38、及び命令フェッチアドレス生成器39を含む。コア14は更に、1次命令キャッシュ40及びパイプラインクリア制御部41を含む。1次データキャッシュ制御部28内には、オペランドアドレス生成器42及び1次データキャッシュ43が含まれる。
【0019】
命令フェッチアドレス生成器39は、プログラムカウンタ32から供給された命令アドレス及び分岐予測機構38からの情報に基づいて、命令フェッチアドレスを生成する。この際、分岐予測機構38は、RSBR26からの情報に基づき分岐予測を行う。命令フェッチアドレス生成器39は、命令フェッチアドレスと命令フェッチリクエストとを1次命令キャッシュ40に発行し、この命令フェッチアドレスに対応する命令をフェッチする。フェッチされた命令は、命令バッファ21に格納される。命令バッファ21は、プログラムの命令順通り即ちインオーダーで格納した命令を命令デコーダ22に供給する。命令デコーダ22は、プログラムの命令順通り即ちインオーダーで命令のデコード処理を行い、インオーダーで命令を発行する。この命令発行処理により、命令デコーダ22は、デコードした命令の種類に従って、RSA23、RSE24、RSF25、又はRSBR26に各命令を示すエントリを作成する。
【0020】
RSA23は、主記憶オペランドアドレスを生成してロード命令やストア命令を実行するために、作成されたエントリをプログラムの命令順に拘束されず即ちアウトオブオーダーで制御するリザベーションステーションである。RSA23による制御に基づいて、1次データキャッシュ制御部28のオペランドアドレス生成器42がアクセス先のアドレスを生成し、1次データキャッシュ43の当該アドレスに対してロード命令やストア命令が実行される。ロード命令により読み出されたデータは、固定小数点リネーミングレジスタ33又は浮動小数点リネーミングレジスタ34の指定されたレジスタに格納される。RSE24は、指定されたレジスタのデータに対して指定された固定小数点演算を実行するために、作成されたエントリをアウトオブオーダーで制御するリザベーションステーションである。RSE24による制御に基づいて、演算器29が、固定小数点リネーミングレジスタ33の指定されたレジスタのデータに対して指定された固定小数点演算を実行し、固定小数点リネーミングレジスタ33の指定されたレジスタに演算結果を格納する。RSF25は、指定されたレジスタのデータに対して指定された浮動小数点演算を実行するために、作成されたエントリをアウトオブオーダーで制御するリザベーションステーションである。RSF25による制御に基づいて、演算器30が、浮動小数点リネーミングレジスタ34の指定されたレジスタのデータに対して指定された浮動小数点演算を実行し、浮動小数点リネーミングレジスタ34の指定されたレジスタに演算結果を格納する。RSBR26は、分岐命令を実行するためのリザベーションステーションであり、命令の分岐先の情報をネクストプログラムカウンタ31と分岐予測機構38とに供給する。
【0021】
命令デコーダ22は更に、全てのデコードされた命令に対して、命令の完了をインオーダーで制御するCSE27にエントリを作成する。RSA23、RSE24、RSF25、及びRSBR26の制御により命令が実行されると、実行完了した命令の識別子と共に実行完了報告が生成される。実行完了された命令については、それに対応するエントリがCSE27からインオーダーで(即ちプログラムの命令順通りに)開放されていき、これによりインオーダーで命令の完了が確定していく。CSE27から開放され完了が確定する命令については、対応する資源の更新を行なう。ロード命令、固定小数点演算命令、浮動小数点演算命令等の場合には、固定小数点リネーミングレジスタ33や浮動小数点リネーミングレジスタ34のデータを、固定小数点レジスタ35や浮動小数点レジスタ36に転送し、命令実行結果をソフトウェアからアクセス可能なレジスタに反映させる。また同時に、プログラムカウンタ32の値をネクストプログラムカウンタ31に応じた値に更新すると共に、ネクストプログラムカウンタ31の値を、次にフェッチする命令のアドレスを指し示すように適切な増分だけ変化させる。これによりプログラムカウンタ32は、実行完了してCSE27から開放された命令の次の命令のアドレスを指し示すことになる。なお分岐命令が実行完了される場合には、ネクストプログラムカウンタ31には分岐先アドレスが格納される。
【0022】
パイプラインクリア制御部41は、分岐ミスが発生した場合や後述するエラーが発生した場合等、所定の条件が満たされるときに、実行した結果をキャンセルするため、コア14が実行している命令のパイプラインをクリアする。命令フェッチアドレス生成器39、命令バッファ21、命令デコーダ22、RSA23、RSE24、RSF25、RSBR26、CSE27等においては、命令フェッチ、命令デコード、命令発行、命令実行、命令完了待ち等の各実行フェーズの命令が並んでいる。パイプラインクリア制御部41による命令のパイプラインのクリアにより、これらの各実行フェーズの命令を全て削除し、各実行フェーズを全て空の状態とする。
【0023】
エラー検出&訂正制御部37は、固定小数点レジスタ35又は浮動小数点レジスタ36から1ビットエラーが発生したデータを演算実行のために読み出したときに、1ビットエラーを検出して、当該エラーを訂正する。このエラー検出及びエラー訂正は、例えばECC(Error Correction Code)を利用したものでよい。エラー検出&訂正制御部37は、制御動作の検証のために、固定小数点レジスタ35又は浮動小数点レジスタ36からの読み出しデータに対して故意に1ビットエラーを発生させることができる。
【0024】
図3は、エラー検出&訂正制御部37によるエラー訂正処理の流れを示す図である。図3に示されるように、演算命令が発行され、演算が実行開始されると、故障のあるレジスタが保持する値を読み出したことによりエラーが発生する。これに応じて、エラー検出&訂正制御部37がエラー訂正処理を実行するとともに、パイプラインクリア制御部41がパイプラインをクリアする。その後、演算命令を再フェッチして再発行することにより、演算を実行し、演算を完了する。この演算実行時には、エラー訂正処理によりエラーが訂正されているので、正しい演算結果が得られる。
【0025】
図4は、ノンキャッシュ領域にアクセスするロード命令を実行する際の制御の流れを説明するための図である。図4において、図1と同一又は対応する要素は同一の番号で参照し、その説明は適宜省略する。図4において、命令完了制御部27は図2のCSE27に対応し、オペランドアドレス実行制御部23はRSA23に対応する。命令デコーダ22、1次データキャッシュ制御部28、及びパイプラインクリア制御部41は、図2の命令デコーダ22、1次データキャッシュ制御部28、及びパイプラインクリア制御部41である。ノンキャッシュアクセス再実行モード指示部51は、1ビットのフリップフロップ及びその設定を制御する回路を含んでよく、図2には明示的に示されていないが、例えばパイプラインクリア制御部41に付随して設けられていてよい。検証モードレジスタ52も1ビットのフリップフロップであってよく、図2には明示的に示されていないが、例えばエラー検出&訂正制御部37に付随して設けられていてよい。命令デコーダ22、オペランドアドレス実行制御部23、命令完了制御部27、パイプラインクリア制御部41、及びノンキャッシュアクセス再実行モード指示部51を纏めて、命令実行制御部50として示してある。
【0026】
本実施例のノンキャッシュ領域にアクセスするロード命令を実行する際の基本的な制御についてまず説明する。1次データキャッシュ制御部28は、命令の実行要求に応じてキャッシュ領域又はノンキャッシュ領域にアクセスするとともに、実行要求された命令がノンキャッシュ領域にアクセスするロード命令であることを1次データキャッシュ制御部28に通知する。当該命令がノンキャッシュ領域にアクセスするロード命令であることが1次データキャッシュ制御部28により通知されると、命令実行制御部50は、当該命令を1次データキャッシュ制御部28に実行させる間、他の命令の実行を待たせる。これにより、ノンキャッシュ領域にアクセスするロード命令の実行中に、エラー検出&訂正制御部37(図2)によりエラーが検出されないようにしたり、又は、検出されたエラーを無視することができる。即ち、ノンキャッシュ領域に対するロード命令が実行される間は、他の命令が実行されないので、他の命令がレジスタを読み出すこともなく、従ってエラーが検出されることもない。
【0027】
上記の制御を実現するために、図4に示されるように、命令実行制御部50にノンキャッシュアクセス再実行モード指示部51が設けられると共に、種々の信号がやり取りされる。1次データキャッシュ制御部28は、当該命令の実行要求が再実行要求ではなく最初の実行要求である場合、ノンキャッシュ領域にアクセスすることなく当該命令の実行を完了する。これにともない、1次データキャッシュ制御部28は、当該命令の実行完了を命令実行制御部50の命令完了制御部27に報告すると共に、ノンキャッシュ領域アクセス未実行を示す信号をアサートすることにより前記通知を行なう。
【0028】
命令実行制御部50は、ノンキャッシュ領域アクセスが未実行である旨を示す信号がアサートされると、当該命令が完了未確定の命令中の先頭になるまで待ち、当該命令が完了未確定の命令中の先頭になるとノンキャッシュアクセス再実行モード信号をアサートする。具体的には、命令完了制御部(CSE)27が、格納エントリ中で当該命令に対応するエントリが先頭になると、ノンキャッシュアクセス再実行モード指示部51に対してノンキャッシュアクセスの再実行を要求する。これに応じて、ノンキャッシュアクセス再実行モード指示部51には例えば“1”が格納され、ノンキャッシュアクセス再実行モード信号がアサートされる。また命令実行制御部50において、命令完了制御部27からのノンキャッシュアクセスの再実行要求に応じて、パイプラインクリア制御部41がパイプラインをクリアし、当該命令の再フェッチから実行を再開する。具体的には、命令実行制御部50において、命令デコーダ22が再フェッチされた当該命令をデコードして発行し、オペランドアドレス実行制御部23が当該命令を1次データキャッシュ制御部28に対して実行要求する。この際、ノンキャッシュアクセス再実行モード信号がアサート状態であるので、命令デコーダ22は、当該命令に後続する他の命令については命令発行しないことにより命令実行を待たせる。
【0029】
1次データキャッシュ制御部28は、ノンキャッシュアクセス再実行モード信号がアサートされている状態において命令実行制御部50により当該命令が実行要求されると、ノンキャッシュ領域にアクセスして当該命令を実行する。1次データキャッシュ制御部28が当該命令の実行を完了すると、命令実行制御部50は、ノンキャッシュアクセス再実行モード信号をネゲートし、当該命令に後続する他の命令について命令発行を開始する。具体的には、命令実行制御部50において、命令完了制御部27から当該命令の実行完了がノンキャッシュアクセス再実行モード指示部51に通知され、これに応答してノンキャッシュアクセス再実行モード指示部51の出力するノンキャッシュアクセス再実行モード信号がネゲート状態となる。このノンキャッシュアクセス再実行モード信号のネゲート状態に応答して、命令デコーダ22が、当該命令に後続する他の命令について命令発行を開始する。
【0030】
1次データキャッシュ制御部28は、検証モードである場合には、命令実行制御部50に対して当該命令がノンキャッシュ領域にアクセスするロード命令であることを通知してよい。また1次データキャッシュ制御部28は、検証モードでない場合、命令実行制御部50に対して当該命令がノンキャッシュ領域にアクセスするロード命令であることを通知せずに、ノンキャッシュ領域にアクセスして当該命令を実行してよい。即ち、検証モードである場合のみ、前述のようにパイプラインをクリアし他の命令実行を待たせながら当該ロード命令を再実行し、検証モードでない場合には、他の命令と同様の通常の制御に従い当該ロード命令を実行してよい。なお、この検証モードであるか否かは、検証モードレジスタ52の設定に応じた検証モード信号が示すものであってよい。このように検証モードでのみノンキャッシュ領域へアクセスするロード命令に対して特別な制御をすることにより、通常動作時においてノンキャッシュ領域へアクセスする全てのロード命令の実行が低速となるという問題を回避できる。検証モードにおいて、ノンキャッシュ領域へアクセスするロード命令に対して特別な制御を行なうことで、特別な検証用のプログラムを作成する必要もなく、効率的にエラー訂正制御動作を検証することができる。
【0031】
図5は、ノンキャッシュ領域にアクセスするロード命令を実行する際の制御の流れを示すフローチャートである。また図6は、ノンキャッシュ領域にアクセスするロード命令を実行する際の動作の推移を示す図である。
【0032】
図5のステップS1で、ロード命令をデコードする。ステップS2で、ステップS1でデコードされた命令がノンキャッシュ領域へのアクセスを行なう命令であるか否かを判定する。デコードされた命令がノンキャッシュ領域へのアクセスを行なう命令である場合、ステップS3で、ノンキャッシュアクセス再実行モードであるか否か(即ち当該命令に対する最初の実行要求ではなく再実行要求であるか否か)を判定する。再実行モードでない場合には、ステップS4で、当該ロード命令を実行することなく、当該ロード命令が、並んだ命令列の先頭になるまで待つ。即ち、ロード命令がCSE27のエントリの先頭になるまで待つ。当該ロード命令がCSE27の保持するプログラム/命令列の先頭になると、ステップS5で、ノンキャッシュアクセス再実行モードをオンにする。更にステップS6で、パイプラインをクリアして、当該ロード命令を再フェッチする。なおこの際、図3のプログラムカウンタ32が示している命令アドレスから再命令フェッチを行えばよい。このときプログラムカウンタ32は、CSE27のエントリの先頭の命令でありノンキャッシュ領域へアクセスする当該ロード命令を指している。図6に示されるように、パイプラインクリアを実行(T1)することにより、当該ロード命令に後続して発行されていた命令の実行がキャンセルされる。
【0033】
図5のステップS7で、ノンキャッシュアクセス命令のみを再デコードして再発行する。ステップS8で、ステップS7de再デコードされた命令がノンキャッシュ領域へのアクセスを行なう命令であるか否かを判定する。再デコードされた命令がノンキャッシュ領域へのアクセスを行なう命令である場合、ステップS9で、ノンキャッシュアクセス再実行モードであるか否か(即ち当該命令に対する最初の実行要求ではなく再実行要求であるか否か)を判定する。再実行モードである場合には、ステップS10で、ノンキャッシュ領域へのアクセスを実行して当該ロード命令を実行する。更にステップS11で、当該ロード命令の実行を完了する。図6に示されるように、ノンキャッシュアクセスを実行(T2)する間、後続の命令の発行を抑止(T3)した状態になっている。従って、ノンキャッシュ領域に対するロード命令が実行される間は、他の命令が実行されないので、他の命令がレジスタを読み出すこともなく、従ってエラーが検出されることもプログラムが停止することもない。
【0034】
図5のステップS12で、ノンキャッシュアクセス再実行モードをオフにする。即ち、図4の命令完了制御部27がノンキャッシュアクセス再実行モード指示部51をリセットし、ノンキャッシュアクセス再実行モード信号をネゲート状態にする。ステップS13で、後続の命令のデコード及び発行を開始する。
【0035】
図7は、命令デコーダ22の動作の流れを示すフローチャートである。ステップS21において、命令デコーダ22は、フェッチされた命令を命令バッファ21から受け取る。ステップS22で、命令デコーダ22は、ノンキャッシュアクセス再実行モードであるのか否かを判定する。ノンキャッシュアクセス再実行モードでないとステップS22で判定された場合、ステップS23に進み、命令デコーダ22は、通常動作時と同様にフェッチされた命令を発行する。ノンキャッシュアクセス再実行モードであるとステップS22で判定された場合、ステップS24に進み、命令デコーダ22は、1命令をデコードしたか否かを判定する。ノンキャッシュアクセス再実行モードにおいて未だ1命令もデコードしていないと判定した場合、ステップS26で、命令デコーダ22は1命令のみ命令デコードして命令発行する。この命令は、ノンキャッシュアクセス再実行モードにおいて最初の命令(即ちパイプラインクリア後の最初の命令)であり、ノンキャッシュ領域へアクセスするロード命令である。即ち、命令デコーダ22は、オペランドアドレス実行制御部(RSA)23に対して、1つのエントリを作成して当該ロード命令を格納する。ノンキャッシュアクセス再実行モードにおいて既に1命令デコードしたとステップS24で判定された場合、ステップS25で、命令デコーダ22は当該ロード命令に後続する命令を発行しない。
【0036】
図8は、1次データキャッシュ制御部28の動作の流れを示すフローチャートである。ステップS31で、オペランドアドレス実行制御部23からの命令実行要求がされる。ステップS32で、1次データキャッシュ制御部28は、実行要求された命令がノンキャッシュ領域へアクセスするロード命令であるかを判別する。この判別は、当該ロード命令に対してレジスタ指定等に基づき求められたオペランドアドレスが、ノンキャッシュ領域に属するか否かを判定することにより行なわれる。ステップS33で、ノンキャッシュアクセス再実行モードであるか否かが判定される。ノンキャッシュアクセス再実行モードでないと判定された場合(即ち、当該ロード命令が再実行要求ではなく最初の実行要求である場合)、ステップS34で、1次データキャッシュ制御部28はノンキャッシュ領域へのアクセスを実行しない。ステップS35で、1次データキャッシュ制御部28は、ノンキャッシュ領域へのアクセスを実行せずに、命令完了制御部27へ実行完了とノンキャッシュ領域へのアクセスの未実行とを報告する。
【0037】
ノンキャッシュアクセス再実行モードであるとステップS33で判定された場合(即ち再実行要求である場合)、ステップS36で、1次データキャッシュ制御部28はノンキャッシュ領域へのアクセスを実行する。ノンキャッシュ領域へのアクセスの実行が完了すると、ステップS37で、1次データキャッシュ制御部28は命令完了制御部27へ実行完了を報告する。
【0038】
図9は、命令完了制御部27の動作の流れを示すフローチャートである。ステップS41で、命令デコーダ22からデコード及び発行された全命令に対して、デコードされた順番にCSEエントリが命令完了制御部27に作成される。ステップS42で、命令完了制御部27は、最も古いエントリから順番に完了判別を行い、プログラムの順番通りに命令を完了していく。1次データキャッシュ制御部28から実行完了報告とノンキャッシュ領域アクセス未実行を示す信号とが送られてくると、同時に送られてくるエントリ番号に示されるエントリに、実行完了及びノンキャッシュ領域へのアクセスが未実行である旨を格納する。ステップS43で、命令完了制御部27は、完了判別したエントリに対してノンキャッシュ領域へのアクセスが未実行である旨を示す信号がオンであるか否かを判定する。ノンキャッシュ領域へのアクセスが未実行である旨を示す信号がオンである場合、当該エントリはそれより古いエントリと同時に完了することはできずに、命令完了制御部27が有する複数のエントリのうち当該エントリが最も古いエントリになるまで待つ(ステップS44のNO)。当該エントリが最も古いエントリ(即ちプログラムの先頭に対応するエントリ)になると(ステップS44のYES)、ステップS45で、命令完了制御部27は、当該エントリを完了することなく、ノンキャッシュアクセス再実行モードをオンにする。更にステップS46で、命令完了制御部27は、命令パイプラインをクリアするための要求を発行し、次サイクルでパイプラインクリア制御部41が命令パイプラインをクリアする。
【0039】
命令パイプラインのクリア後に、当該ロード命令(ノンキャッシュ領域へアクセスするロード命令)が再フェッチされ再デコードされ、命令完了制御部27に対応エントリが作成される。命令完了制御部27は、当該ロード命令に対して1次データキャッシュ制御部28から完了報告が通知されるのを待つ。1次データキャッシュ制御部28から実行完了報告が送られてくると、同時に送られてくるエントリ番号に示されるエントリ(当該ロード命令のエントリ)に、実行完了の旨を格納する。ステップS43で、命令完了制御部27は、完了判別したエントリ(当該ロード命令のエントリ)に対してノンキャッシュ領域アクセス未実行を示す信号がオンであるか否かを判定する。ノンキャッシュ領域アクセス未実行を示す信号がオンでない場合、ステップS47で、命令完了制御部27は、当該ロード命令の命令完了を確定させるか否かを判定する。この際、命令完了の確定はプログラムにおける命令の順序通り、即ちインオーダーで行なう必要がある。命令完了を確定させる場合(ステップS47のYES)、ノンキャッシュアクセス再実行モードをオフする(ステップS48)とともに、レジスタ等の資源の更新を行う(ステップS49)。
【0040】
図10は、1次データキャッシュ制御部28の動作の流れの変形例を示すフローチャートである。図10において、図8と同一のステップは同一の番号で参照し、その説明は適宜省略する。図10の動作の流れは、検証モードであるか否かを判定するステップS39が設けられている点が、図8の動作の流れと異なる。検証モードがオフである場合(ステップS39でNOの場合)、ノンキャッシュアクセス再実行モードのオン又はオフに関わらず、ステップS36で、1次データキャッシュ制御部28はノンキャッシュ領域へのアクセスを実行する。実行が完了すると、ステップS37で、1次データキャッシュ制御部28は命令完了制御部27へ実行完了を報告する。
【0041】
検証モードがオンである場合(ステップS39でYESの場合)のみ、ステップS33で、ノンキャッシュアクセス再実行モードであるか否かが判定される。そして、そのノンキャッシュアクセス再実行モードであるか否かの判定結果に従い、ノンキャッシュ領域へのアクセスの実行又は非実行が制御される。この場合の制御動作は、図8の場合と同様となる。
【0042】
図10に示すように、検証モードでのみノンキャッシュ領域へアクセスするロード命令に対して特別な制御をすることにより、通常動作時においてノンキャッシュ領域へアクセスする全てのロード命令の実行が低速となるという問題を回避できる。また検証モードにおいて、ノンキャッシュ領域へアクセスするロード命令に対して特別な制御を行なうことで、特別な検証用のプログラムを作成する必要もなく、効率的にエラー訂正制御動作を検証することができる。
【0043】
図11は、ノンキャッシュアクセス再実行モード指示部51の回路構成の一例を示す図である。ノンキャッシュアクセス再実行モード指示部51は、否定回路であるインバータ60、否定論理積回路であるNAND回路61、論理積回路であるAND回路62及び63、論理和回路であるOR回路64、及び記憶回路であるラッチ(フリップフロップ)65を含む。ラッチ65には、所定サイクルの同期信号(クロック信号)が供給されており、各サイクルにおいてOR回路64の出力により格納値が更新される。
【0044】
命令完了制御部27の出力するノンキャッシュアクセスアクセス再実行要求信号+NONCACHE_ACCESS_RERUN_REQUESTが1であり且つパイプラインクリア信号+PIPELINE_CLEARが0のときに、ラッチ65が1に設定される。これにより、ノンキャッシュアクセス再実行モード信号+NONCACHE_ACCESS_RERUN_MODEがアサート状態(この例では1の状態)となる。命令完了制御部27が出力するプログラム先頭の命令の完了を示す信号+TOQ_CSE_ENDが1で且つパイプラインクリア信号+PIPELINE_CLEAR信号が0の条件が成立するまで、ラッチ65の出力はフィードバック経路により1に維持される。即ち、ノンキャッシュアクセス再実行モード信号+NONCACHE_ACCESS_RERUN_MODEはアサート状態に維持されることになる。
【0045】
図12は、命令デコーダ22の命令発行部の構成の一例を示す図である。命令デコーダ22は、命令発行制御部70、インバータ71及び72、AND回路73乃至77、OR回路78、及びラッチ(フリップフロップ)79を含む。ラッチ65には、所定サイクルの同期信号(クロック信号)が供給されており、各サイクルにおいてAND回路77の出力により格納値が更新される。
【0046】
命令発行制御部70は、複数の命令をプログラムにおける命令の順序通り、即ちインオーダーで順次供給され、命令発行を示すそれぞれ1ビットの信号+D0_REL、+D1_REL、+D2_RELを生成する。これらの信号は、対応する命令のインオーダー順に+D0_REL、+D1_REL、+D2_RELであり、この順番に順次1となる。ラッチ79は初期状態において0に設定されており、+D0_RELが1になると、AND回路73の出力が1になり、最初の命令発行を行ったことを示す+D0_ISSUE信号が1になる。またノンキャッシュアクセス再実行モード信号+NONCACHE_ACCESS_RERUN_MODEが1になったときに、AND回路77の出力が1となり、ラッチ79に1が設定される。このラッチ79の出力信号と+NONCACHE_ACCESS_RERUN_MODEとのANDによりラッチ79を更新することで、+NONCACHE_ACCESS_RERUN_MODEが1である間、ラッチ79の出力は1に維持される。またAND回路73は、ラッチ79の出力の反転信号と+D0_REL信号をANDする。従って、ラッチ79の出力が1である間は、命令発行を示す+D0_ISSUE信号が1にならず、この間は命令を発行することができない。更に、+D1_RELと+D2_REL信号については、+NONCACHE_ACCESS_RERUN_MODE又はラッチ79の出力信号の何れかが1である間は、AND回路75及び76によりブロックされる。従って、この間は命令発行信号+D1_ISSUE及び+D2_ISSUEが1になることはない。
【0047】
これにより、ノンキャッシュアクセス再実行モード信号が1になってから、プログラムの先頭の1命令のみを発行し、後続の命令は発行しない制御が可能となる。なお図12に示したのは、同時に3命令同時デコード可能な回路であるが、4命令以上同時デコード可能な回路でも、同様の構成で実現可能である。
【0048】
図13は、1次データキャッシュ制御部28の回路構成の一例を示す図である。1次データキャッシュ制御部28は、オペランドアドレス生成器80、ノンキャッシュアクセス制御部81、AND回路82及び83、1次データキャッシュ84、実行完了選択回路86、及びフリップフロップ87乃至89を含む。なお1次データキャッシュ84が図3の1次データキャッシュ43に対応し、オペランドアドレス生成器80がオペランドアドレス生成器42に対応する。
【0049】
オペランドアドレス実行制御部(RSA)23からの命令実行要求に応答して、オペランドアドレス生成器80が、実行要求された命令のオペランドアドレスを生成する。ノンキャッシュアクセス制御部81は、命令実行要求に応答して、実行要求された命令がロード命令であるか否かを認識する。ノンキャッシュアクセス制御部81は更に、実行要求された命令がロード命令であり且つオペランドアドレス生成器80の生成したアドレスがノンキャッシュ領域を示す場合、ノンキャッシュアクセス信号+NONCACHE_LOAD_REQUESTを出力する。このノンキャッシュアクセス信号+NONCACHE_LOAD_REQUESTが1であっても、ノンキャッシュアクセス再実行モード信号+NONCACHE_ACCESS_RERUN_MODEが0の場合、AND回路82の出力は0となる。従ってこの場合、ノンキャッシュ領域85に対するアクセスは実行されない。+NONCACHE_LOAD_REQUESTが1で且つ+NONCACHE_ACCESS_RERUN_MODEが1のとき、AND回路82の出力が1となり、ノンキャッシュ領域85に対するアクセスが実行される。
【0050】
1次データキャッシュ84からの実行完了信号、ノンキャッシュ領域85からの実行完了信号、及びノンキャッシュ領域アクセス未実行を示す信号(AND回路83の出力)のうちの1つが、実行完了選択回路86により選択される。実行完了選択回路86は、実行完了信号を選択することにより、実行完了を示す信号+L1_DCACHE_EXEC_COMPを生成し、命令完了制御部27に送る。また、ノンキャッシュ領域アクセス未実行を示す信号が実行完了信号として選択されたときに、ノンキャッシュ領域アクセス未実行信号+NOT_EXEC_NONCACHE_LOADが命令完了制御部27に送られる。
【0051】
図14は、検証モードであるか否かに応じて異なる制御を実行する1次データキャッシュ制御部28の構成の一例を示す図である。図14には、図13の1次データキャッシュ制御部28の構成と異なる部分及びその周辺のみが示される。図14に示されるように、図13のAND回路82及び83の代りに、AND回路90乃至92及びOR回路93が設けられる。図13のノンキャッシュアクセス制御部81が生成したノンキャッシュアクセス信号+NONCACHE_LOAD_REQUESTが、AND回路90乃至92の各々に印加される。検証モード信号+ERROR_INJECTION_MODEが0の場合、ノンキャッシュアクセス信号+NONCACHE_LOAD_REQUESTが1になると、無条件でノンキャッシュ領域85に対するアクセスが実行される。
【0052】
一方、検証モード信号+ERROR_INJECTION_MODEが1のときには以下のような制御となる。即ち、+NONCACHE_LOAD_REQUESTが1で且つノンキャッシュアクセス再実行モード信号+NONCACHE_ACCESS_RERUN_MODEが0のときには、ノンキャッシュ領域85に対するアクセスは実行されない。また、+NONCACHE_LOAD_REQUESTが1で、+NONCACHE_ACCESS_RERUN_MODEが0のときには、ノンキャッシュ領域85に対するアクセスが実行される。実行完了信号は、図13に示す構成と同様に、実行完了選択回路86により生成される。またノンキャッシュ領域アクセス未実行信号は、AND回路92からフリップフロップ87を介して、図13に示す構成と同様にして出力される。
【0053】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【符号の説明】
【0054】
21 命令バッファ
22 命令デコーダ
23 RSA
24 RSE
25 RSF
26 RSB
27 CSE
28 1次データキャッシュ制御部
29 演算器
30 演算器
31 ネクストプログラムカウンタ
32 プログラムカウンタ
33 固定小数点リネーミングレジスタ
34 浮動小数点リネーミングレジスタ
35 固定小数点レジスタ
36 浮動小数点レジスタ
37 エラー検出&訂正制御部
38 分岐予測機構
39 命令フェッチアドレス生成器
40 1次命令キャッシュ
41 パイプラインクリア制御部
42 オペランドアドレス生成器
43 1次データキャッシュ

【特許請求の範囲】
【請求項1】
キャッシュメモリを有する演算処理装置において、
レジスタから読み出したデータのエラーを検出し訂正する訂正制御部と、
命令の実行要求に応じて、前記キャッシュメモリを介してアクセスされるメモリのキャッシュ領域又は前記キャッシュメモリを介さずにアクセスされるメモリのノンキャッシュ領域にアクセスするとともに、実行要求された一の命令がノンキャッシュ領域にアクセスするメモリアクセス命令であることを通知するキャッシュ制御部と、
前記一の命令がノンキャッシュ領域にアクセスするメモリアクセス命令であることが前記キャッシュ制御部により通知されると、前記一の命令を前記キャッシュ制御部に実行させる間、前記訂正制御部がエラーを検出する対象である他の命令の実行を待たせる命令実行制御部と
を含むことを特徴とする演算処理装置。
【請求項2】
前記演算処理装置において、
前記キャッシュ制御部は、前記一の命令の実行要求が再実行要求ではなく最初の実行要求である場合、ノンキャッシュ領域にアクセスすることなく前記一の命令の実行を完了することを特徴とする請求項1記載の演算処理装置。
【請求項3】
前記キャッシュ制御部は、前記最初の実行要求である前記一の命令の実行を完了したとき、前記ノンキャッシュ領域へのアクセスが未実行であることを示す信号をアサートして、前記通知を行なうことを特徴とする、請求項2記載の演算処理装置。
【請求項4】
前記演算処理装置において、
前記命令実行制御部は、前記一の命令がノンキャッシュ領域にアクセスするメモリアクセス命令であることが前記キャッシュ制御部により通知されると、前記一の命令が完了未確定の命令中の先頭になるまで待ち、前記一の命令が完了未確定の命令中の先頭になると、命令パイプラインをクリアし、前記一の命令の再フェッチから実行を再開することを特徴とする請求項3記載の演算処理装置。
【請求項5】
前記演算処理装置において、
前記命令実行制御部は、再フェッチされた前記一の命令を前記キャッシュ制御部に対して実行要求し、前記一の命令に後続する他の命令については命令発行を抑止することを特徴とする請求項4記載の演算処理装置。
【請求項6】
前記演算処理装置において、
前記キャッシュ制御部は、前記一の命令がノンキャッシュ領域にアクセスするメモリアクセス命令であることが前記キャッシュ制御部により通知された状態において、前記命令実行制御部により前記一の命令が実行要求されると、ノンキャッシュ領域にアクセスして前記一の命令を実行することを特徴とする請求項5記載の演算処理装置。
【請求項7】
前記演算処理装置において、
前記キャッシュ制御部が前記一の命令の実行を完了すると、前記命令実行制御部は、前記一の命令に後続する前記他の命令について命令発行を開始することを特徴とする請求項6記載の演算処理装置。
【請求項8】
前記演算処理装置において、
前記キャッシュ制御部は、前記一の命令がノンキャッシュ領域にアクセスするメモリアクセス命令である場合、検証モードであるときには、前記命令実行制御部に対して前記一の命令がノンキャッシュ領域にアクセスするメモリアクセス命令であることを通知し、検証モードでないときには、前記命令実行制御部に対して前記一の命令がノンキャッシュ領域にアクセスするメモリアクセス命令であることを通知せずに、ノンキャッシュ領域にアクセスして前記一の命令を実行することを特徴とする請求項1乃至7何れか一項記載の演算処理装置。
【請求項9】
実行要求された一の命令が、キャッシュメモリを介さずにアクセスされるメモリのノンキャッシュ領域にアクセスするメモリアクセス命令であることを通知し、
前記一の命令がノンキャッシュ領域にアクセスするメモリアクセス命令であることの通知があった場合、前記一の命令を前記キャッシュ制御部に実行させる間、他の命令の実行を待たせる
各段階を含むことを特徴とする演算処理方法。
【請求項10】
前記一の命令の実行要求が再実行要求ではなく最初の実行要求である場合、ノンキャッシュ領域にアクセスすることなく前記一の命令の実行を完了することを特徴とする請求項9記載の演算処理方法。
【請求項11】
前記一の命令の実行要求が再実行要求ではなく最初の実行要求である場合、前記一の命令の実行を完了したとき、ノンキャッシュ領域アクセス未実行を示す信号をアサートすることにより前記通知を行なうことを特徴とする請求項10記載の演算処理方法。
【請求項12】
前記一の命令がノンキャッシュ領域にアクセスするメモリアクセス命令であることが通知されると、前記一の命令が完了未確定の命令中の先頭になるまで待ち、
前記一の命令が完了未確定の命令中の先頭になると、命令パイプラインをクリアし、前記一の命令の再フェッチから実行を再開する
各段階を更に含むことを特徴とする請求項11記載の演算処理方法。
【請求項13】
再フェッチされた前記一の命令を実行要求し、前記一の命令に後続する前記他の命令については命令発行を抑止することにより命令実行を待たせることを特徴とする請求項12記載の演算処理方法。
【請求項14】
前記一の命令がノンキャッシュ領域にアクセスするメモリアクセス命令であることが通知された状態において、前記一の命令が実行要求されると、ノンキャッシュ領域にアクセスして前記一の命令を実行する段階を更に含むことを特徴とする請求項13記載の演算処理方法。
【請求項15】
前記一の命令の実行を完了すると、前記一の命令に後続する前記他の命令について命令発行を開始する段階を更に含むことを特徴とする請求項14記載の演算処理方法。
【請求項16】
検証モードである場合、前記一の命令がノンキャッシュ領域にアクセスするメモリアクセス命令であることを通知し、検証モードでないときには、前記一の命令がノンキャッシュ領域にアクセスするメモリアクセス命令であることを通知せずに、ノンキャッシュ領域にアクセスして前記一の命令を実行することを特徴とする請求項9乃至15何れか一項記載の演算処理方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate