以下、図面を用いて実施形態を説明する。
図1は、演算処理装置および演算処理装置の制御方法の一実施形態を示す。図1において、太い矢印は、データの転送経路を示す。図1に示す演算処理装置OPD1は、命令発行部102、演算部104、タグ部106、キャッシュ制御部108、キャッシュメモリ部110、ストア情報記憶部112、判定部114およびバッファ部116を有する。
例えば、命令発行部102は、演算部104に演算を実行させる演算命令OPと、演算部104からキャッシュメモリ部110にデータを転送するストア命令STと、キャッシュメモリ部110から演算部104にデータを転送するロード命令LDとを発行する。ストア命令STは、データの格納先を示すディスティネーションアドレスを含み、ロード命令LDは、データの読み出し元を示すソースアドレスを含む。例えば、ディスティネーションアドレスおよびソースアドレスは、演算部104が有するレジスタに格納される。そして、ストア命令STに含まれるオペランドによりディスティネーションアドレスが格納されたレジスタが指定され、ロード命令LDに含まれるオペランドによりソースアドレスレジスタが格納されたレジスタが指定される。ディスティネーションアドレスおよびソースアドレスは、データを記憶する主記憶装置300の記憶領域を示す。例えば、主記憶装置300は、演算処理装置OPD1の外部に配置され、キャッシュメモリ部110に接続される。
演算部104は、演算命令OPに応じて演算を実行し、ストア命令STに応じてバッファ部116を介してデータをキャッシュメモリ部110に転送し、ロード命令LDに応じてキャッシュメモリ部110から転送されるデータを受ける。以下では、ストア命令STによりキャッシュメモリ部110に転送されるデータは、ストアデータとも称され、ロード命令LDにより演算部104に転送されるデータは、ロードデータとも称される。
バッファ部116は、ストア命令STの実行時に演算部104から出力されるストアデータをキャッシュメモリ部110に格納する前に保持する。演算処理装置OPD1がバッファ部116を有することで、ストアデータが演算部104からキャッシュメモリ部110に書き込まれる前に、ストア命令STを完了することができる。
なお、演算処理装置OPD1は、バッファ部116に保持中のストアデータが、後続のロード命令LDによるロード対象のデータである場合、バッファ部116から演算部104にデータをバイパスする経路を有してもよい。この場合、演算処理装置OPD1は、例えば、キャッシュメモリ部110からロードされるデータとバッファ部116に保持されたデータの一方を選択し、選択したデータを演算部104に転送するセレクタ部を有する。
キャッシュメモリ部110は、演算部104で使用するデータを含む複数のデータ群を記憶する複数のウェイWAY(WAY0、WAY1)を有する。例えば、データ群は、各ウェイWAYに割り当てられるキャッシュラインに記憶される。例えば、キャッシュメモリ部110は、32KB(キロバイト)の記憶容量を有し、各ウェイWAYは256バイトの記憶容量を有する64個のキャッシュラインを有する。
タグ部106は、各ウェイWAYに記憶されたデータ群が格納される主記憶装置300のアドレスを記憶するタグ領域TAG(TAG0、TAG1)をウェイWAYのそれぞれに対応して有する。
キャッシュ制御部108は、ストア命令STに含まれるディスティネーションアドレスまたはロード命令LDに含まれるソースアドレスと、タグ部106の各タグ領域TAGに記憶されたアドレスとを比較する。そして、キャッシュ制御部108は、比較結果に基づき、ストアデータまたはロードデータがキャッシュメモリ部110に存在することを示すヒット情報HITと、ストアデータまたはロードデータが存在するウェイWAYを示すウェイ情報WAYIDとを出力する。キャッシュ制御部108は、ストア命令STおよびロード命令LDに含まれるアドレスとタグ部106が記憶するアドレスとに基づき、キャッシュメモリ部110にデータが存在することを示すヒット情報HITを出力する制御部の一例である。
なお、キャッシュメモリ部110は、複数のウェイWAYを持たなくてもよい(すなわち、1つのウェイWAYを有する)。この場合、タグ部106は、1つのウェイWAYに記憶されたデータ群が格納される主記憶装置300のアドレスを記憶するタグ領域TAGを有する。キャッシュ制御部108は、ストア命令STまたはロード命令LDに含まれるアドレスとタグ領域TAGに記憶されたアドレスとの比較結果に基づき、ヒット情報HITを出力する(ウェイ情報WAYIDは出力されない)。
主記憶装置300に記憶されるデータ群(例えば、256バイト)を識別するアドレスは、ストア命令STまたはロード命令LDに含まれるアドレスのうち、下位の8ビットを除く上位ビット群で表される。例えば、上位ビット群のうち下位の6ビットは、タグ領域TAG内のアドレスを格納する64個の格納領域の識別に使用され、上位ビット群の下位6ビットを除くビットは、タグ領域TAG内の格納領域のいずれかに記憶される。そして、ヒット情報HITは、ストア命令STまたはロード命令LDに含まれるアドレスの上位ビット群と、キャッシュメモリ部110に記憶されたデータが格納される主記憶装置300のアドレスの上位ビット群とが一致した場合に出力される。すなわち、ヒット情報HITは、ストアデータまたはロードデータがキャッシュメモリ部110に記憶されていることを示す。
ストア情報記憶部112は、バッファ部116にストアデータが保持される間、ストア命令STに含まれるディスティネーションアドレスの下位側の所定数のビットで表される第1部分アドレス情報を記憶する。また、ストア情報記憶部112は、ストア命令STに基づきキャッシュ制御部108が出力したヒット情報HITとウェイ情報WAYIDとを記憶する。なお、ストア命令STに含まれる第1部分アドレス情報は、ディスティネーションアドレスの一部であればよく、ディスティネーションアドレスの上位側の所定数のビットで表してもよい。
判定部114は、ストア命令STに続いて投入される後続のロード命令LDに含まれるソースアドレスの下位側の所定数のビットで表される第1部分アドレス情報と、ストア情報記憶部112が記憶する第1部分アドレス情報とを比較する。なお、ロード命令LDに含まれる第1部分アドレス情報は、ソースアドレスの一部であればよく、ソースアドレスの上位側の所定数のビットで表してもよい。判定部114は、後続のロード命令LDに含まれる第1部分アドレス情報の一部が、先行のストア命令STに含まれる第1部分アドレス情報と重複する場合、ヒット情報HITおよびウェイ情報WAYIDに基づきロード命令の継続またはアボートを判定する。
例えば、判定部114は、第1部分アドレス情報が互いに重複する場合、ロード命令LDによるヒット情報HITとストア情報記憶部112が記憶するヒット情報HITとを比較する。また、判定部114は、第1部分アドレス情報が互いに重複する場合、ロード命令LDによるウェイ情報WAYIDと、ストア情報記憶部112が記憶するウェイ情報WAYIDとを比較する。
判定部114は、ヒット情報HITが互いに一致し、ウェイ情報WAYIDが互いに不一致の場合、ストアデータとロードデータとに依存性がないと判断し、ロード命令LDの継続を判定する。この場合、キャッシュメモリ部110から演算部104にロードされたデータは有効になり、ロード命令LDは、正常に終了する。
また、判定部114は、ヒット情報HITが互いに一致し、ウェイ情報WAYIDが互いに一致する場合、ストアデータとロードデータとに依存性があると判断する。この場合、判定部114は、ストアデータがキャッシュメモリ部110に書き込まれる前にロードされることを抑止するため、ロード命令LDのアボートを判定する。判定部114は、命令発行部102にアボート信号ABTを出力し、キャッシュメモリ部110から演算部104にロードされたデータは無効になる。アボートされたロード命令LDは、命令発行部102から再度発行される。なお、判定部114は、ヒット情報HITが互いに不一致の場合、ウェイ情報WAYIDに基づいてストアデータとロードデータとの依存性を判定することが困難なため、ロード命令LDのアボートを判定する。
ストア命令STと後続のロード命令LDとにおけるヒット情報HITの一致は、ストア命令STによりキャッシュメモリ部110のウェイWAY0、WAY1のいずれかに格納されたデータが、ロード命令LDによりロードされることを示す。すなわち、タグ部106のタグ領域TAG0、TAG1のいずれかに格納されたアドレスが、ストア命令STと後続のロード命令LDとで共通であることを示す。ストア命令STと後続のロード命令LDとにおけるウェイ情報WAYIDの一致は、ストア命令STと後続のロード命令LDとで同じタグ領域TAGが参照されることを示す。
換言すれば、ストア命令STと後続のロード命令LDとにおけるヒット情報HITの一致およびウェイ情報WAYIDの一致は、アドレスの上位ビット群の一致を示す。これにより、判定部114は、アドレスの上位ビット群を比較する比較器を設けることなく、アドレスの上位ビット群の一致を判定することができる。これにより、ストア命令STと後続のロード命令LDとによりアクセスされるデータの依存性の有無を、アドレスの上位ビット群を含めて判定することができる。この結果、アドレスの下位側のビットが一致し、アドレスの上位側のビットが不一致であり、データの依存性がない場合に、ロード命令LDが誤ってアボートされることを抑止することができる。
これに対して、判定部114が、アドレスの上位側のビットの一致を判定しない場合、下位側の所定数のビットで表される第1部分アドレス情報の一致に基づき、ストア命令STと後続のロード命令LDとによりアクセスされるデータの依存性の有無が判定される。この場合、ストアデータとロードデータに依存性がないにも拘わらずロード命令LDがアボートされる場合がある。この結果、キャッシュメモリ部110のアクセス効率は、アドレスの下位側のビットの比較とともにアドレスの上位側のビットを比較してデータの依存性の有無を判定する場合に比べて低下し、演算処理装置OPD1の性能は低下する。
以上、図1に示す実施形態では、判定部114は、アドレスの上位側のビットを比較する比較器を設けることなく、アドレスの上位側のビットの一致を判定することができる。これにより、回路規模を増加させることなく、ストア命令STと後続のロード命令LDとによりアクセスされるデータの依存性の有無を、アドレスの上位側のビットを含めて判定することができ、ロード命令LDが誤ってアボートされることを抑止することができる。すなわち、回路規模を増加させることなくアドレスの一致が誤って検出されることを抑止することができ、命令がアボートされることを抑止することができる。この結果、キャッシュメモリ部110のアクセス効率が低下することを抑止することができ、演算処理装置OPD1の性能の低下および性能のばらつきを抑止することができる。
図2は、演算処理装置および演算処理装置の制御方法の別の実施形態を示す。図2に示す演算処理装置OPD2は、命令ユニット10、演算部12、命令制御部14、TLB(Translation Lookaside Buffer)制御部16、キャッシュ制御部18、バッファ制御部20を有する。また、演算処理装置OPD2は、ストアバッファ22、ライトバッファ24、セレクタ部26、データキャッシュ28、キャッシュ30および命令キャッシュ32を有する。例えば、演算処理装置OPD2は、半導体集積回路チップの形態を有し、主記憶装置50等とともにプリント基板に搭載される。
命令ユニット10は、命令キャッシュ32から転送される命令を解読し、解読した命令を実行可能な順に演算部12および命令制御部14に投入する。例えば、命令は、演算命令およびメモリアクセス命令を含み、メモリアクセス命令は、ストア命令およびはロード命令を含む。命令ユニット10は、メモリアクセス命令を示すリクエストREQを命令制御部14に出力する。命令ユニット10は、メモリアクセス命令の完了を示す完了信号STVを命令制御部14から受け、命令が完了したことを示すコミット信号CMTを出力する。例えば、メモリアクセス命令を示すリクエストREQは、リクエスト発行信号REQV、命令コードOPCおよびアドレスADRSを含む。リクエスト発行信号REQVは、フェッチポート142へのメモリアクセス命令の供給を示すトリガ信号である。命令コードOPCは、ストア命令またはロード命令を示し、アドレスADRSは、ストア命令ではデータを格納する記憶領域のアドレスを示し、ロード命令ではデータを読み出す記憶領域のアドレスを示す。アドレスADRSは、データを記憶する主記憶装置50の記憶領域を示す。
演算部12は、命令ユニット10から転送される演算命令を示すリクエストREQOPに基づき、レジスタ部REGに格納されたデータを用いて演算を実行し、演算結果をレジスタ部REGに格納する。レジスタ部REGは、複数のレジスタを有する。演算部12は、命令ユニット10から転送されるストア命令に基づき、レジスタ部REGに格納されたデータをストアバッファ22に出力する。また、演算部12は、命令ユニット10から転送されるロード命令に基づき、データキャッシュ28またはライトバッファ24から出力されるデータをレジスタ部REGに格納する。
命令制御部14は、フェッチポート142およびパイプライン制御部144を有し、ストア命令に基づきデータをデータキャッシュ28にストアするストア動作およびロード命令に基づきデータをデータキャッシュ28からロードするロード動作を制御する。フェッチポート142は、命令ユニット10から転送されるリクエストREQを格納する複数のエントリFPE(図3)を有し、エントリFPEに格納したリクエストREQをリクエストIUREQとしてパイプライン制御部144に順次に出力する。また、フェッチポート142は、命令の実行の未完了(アボート)を示すアボート信号ABTと、アボートの要因を示すアボート要因WID(Wait IDentification)を受けた場合、アボート要因WIDをエントリFPEに格納する。フェッチポート142は、アボート要因WIDが格納されたエントリFPEに含まれるリクエストREQを保持し、保持したリクエストREQをリクエストIUREQとしてパイプライン制御部144に再び出力する。フェッチポート142は、演算部12からデータキャッシュ28にデータを転送するストア命令およびデータキャッシュ28から演算部12にデータを転送するロード命令を発行する命令発行部の一例である。
パイプライン制御部144は、リクエストIUREQに基づき、ストア命令またはロード命令を処理するパイプラインの各ステージの動作を制御する。すなわち、パイプライン制御部144は、ストア命令およびロード命令の各々の処理を細分化した複数のステージを並列に実行するパイプライン処理を実行する。パイプライン制御部144は、完了信号STVおよびアボート信号ABTを生成する完了判定部146を有する。完了判定部146の例は、図11に示される。
パイプライン制御部144は、リクエストIUREQに含まれるアドレスADRSを論理アドレスVAとして出力する。また、パイプライン制御部144は、ロード命令の実行時に、バッファ制御部20から無効信号SFI(Store Fetch Interlock)を受け、フェッチポート142からリクエストIUREQとともにアボート要因WIDを受ける。アボート要因WIDのないリクエストIUREQは、リクエストREQに基づきフェッチポート142が最初に出力するリクエストIUREQである。一方、アボート要因WIDを有するリクエストIUREQは、アボートされたリクエストIUREQの再投入である。そして、パイプライン制御部144は、無効信号SFIとアボート要因WIDとに基づき、ライトバッファ24から演算部12へのデータのバイパスの可否を判定する動作を許可する許可信号SFBENを生成する。以下、ライトバッファ24から演算部12へのデータのバイパスは、SFB(Store Fetch Bypass)とも称され、またはSFBの発生とも称される。また、SFBは、ライトバッファ24から演算部12へデータをバイパスするためにパイプライン制御部144が生成するバイパス信号の名称としても使用される。
パイプライン制御部144は、ストアデータまたはロードデータがデータキャッシュ28に記憶されていることを示すヒット信号HITをキャッシュ制御部18から受ける。パイプライン制御部144は、データキャッシュ28からロードされたデータが無効であることを示す無効信号SFIをバッファ制御部20から受ける。例えば、先行するストア命令によりデータキャッシュ28に格納されるデータが、データキャッシュ28に格納される前に後続のロード命令によりロードされる場合、データキャッシュ28から読み出されるデータは正しくないため、無効信号SFIが生成される。パイプライン制御部144は、無効信号SFIを受けた場合、ロード命令をアボートさせるアボート信号ABTを出力することで、ロード命令によりデータキャッシュ28からロードしたデータを無効にさせる。すなわち、先行するストア命令と後続のロード命令との間にデータの依存関係がある場合、命令の実行順を入れ換えるアウトオブオーダ実行が禁止される。以降の説明では、無効信号SFIが生成されることは、単にSFIの発生とも称される。
パイプライン制御部144は、TLB制御部16に出力した論理アドレスVAがTLBにヒットしたことを示す一致信号TLBMCHをTLB制御部16から受ける。また、パイプライン制御部144は、バイパス要求信号SFBREQ、重複信号SFBMLTおよびアドレス一致信号SFBPAMCHをバッファ制御部20から受ける。バイパス要求信号SFBREQ、重複信号SFBMLTおよびアドレス一致信号SFBPAMCHは、図8で説明する。
TLB制御部16は、パイプライン制御部144から受ける論理アドレスVAが、内蔵するTLBに登録されている場合(TLBヒット)、論理アドレスVAに対応して割り当てられた物理アドレスPAと、一致信号TLBMCHとを出力する。TLB制御部16は、論理アドレスVAがTLBに登録されていない場合(TLBミス)、一致信号TLBMCHを出力しない。例えば、論理アドレスVAは、64ビット(VA[63:0])であり、物理アドレスPAは、41ビット(PA[40:0])である。例えば、TLB制御部16は、論理アドレスVA[63:13]を物理アドレスPA[40:13]に変換する。このため、アドレスの下位の13ビット[12:0]は、論理アドレスVAと物理アドレスPAとで共通であり、アドレス[12:0]は、論理アドレスVAを使用することが可能である。
なお、例えば、論理アドレスVAが41ビットの場合、物理アドレスPAは論理アドレスVAと等しいため、演算処理装置OPD2は、TLB制御部16を持たない。この場合、物理アドレスPAの代わりに論理アドレスVAが、キャッシュ制御部18、バッファ制御部20およびデータキャッシュ28に供給される。また、図8に示すテーブルSTBTBL、WBTBLは、物理アドレスPAを格納する領域を持たない。
キャッシュ制御部18は、パイプライン制御部144から受ける論理アドレスVAおよびTLB制御部16から受ける物理アドレスPAを用いて内蔵するタグ領域TAG(図4)を検索する。そして、キャッシュ制御部18は、タグ領域TAGがヒットした場合にヒット信号HITおよびヒットしたウェイWAYを示す識別情報WAYIDを出力する。なお、タグ領域TAGは、キャッシュ制御部18の外部に配置されてもよい。
バッファ制御部20は、依存判定部200およびテーブルSTBTBL、WBTBLを有する。依存判定部200は、テーブルSTBTBL、WBTBLに格納された先行するストア命令に関する情報と、パイプライン制御部144から受ける後続のロード命令に関する情報とに基づき、SFIの発生とSFBの発生とを判定する。依存判定部200の例は、図6から図9に示す。テーブルSTBTBL、WBTBLの例は、図5に示す。バッファ制御部20は、命令ユニット10から受けるストア命令の完了を示すコミット信号CMTに基づき、転送信号WBGOをストアバッファ22に出力する。
バッファ制御部20は、ライトバッファ24からデータキャッシュ28へのデータの転送を指示するストア信号ST2をライトバッファ24に出力する。バッファ制御部20は、データのバイパスが可能な場合、バイパスさせるデータが格納されているライトバッファ24のエントリWB0−WB7を示す識別情報WBIDをライトバッファ24に出力し、バイパス要求信号SFBREQをセレクタ部26に出力する。
ストアバッファ22は、演算部12から転送されるストアデータを格納する複数のエントリSTB(STB0−STB19)を有する。なお、エントリSTBの数は、20個に限定されない。ストアバッファ22は、転送信号WBGOに基づきエントリSTBのいずれかに保持されているデータをライトバッファ24に転送する。
ライトバッファ24は、ストアバッファ22から転送されるデータを格納する複数のエントリWB(WB0−WB7)を有する。なお、エントリWBの数は、8個に限定されない。ライトバッファ24は、ストア信号ST2に基づき、エントリWBのいずれかに保持しているデータをデータキャッシュに書き込む。ストアバッファ22およびライトバッファ24は、ストア命令STの実行時に演算部12から出力されるデータをデータキャッシュ28に格納する前に保持するバッファ部の一例である。
セレクタ部26は、バイパス要求信号SFBREQがSFBの発生を示す場合、ライトバッファ24からのデータを選択し、選択したデータをロードデータとして演算部12に出力する。セレクタ部26は、バイパス要求信号SFBREQがSFBの発生を示さない場合、データキャッシュ28からのデータを選択し、選択したデータをロードデータとして演算部12に出力する。
データキャッシュ28は、データを記憶する1次キャッシュL1として機能し、パイプライン制御部144から受けるリクエストCREQに基づき、データの書き込み動作およびデータの読み出し動作を実行する。データキャッシュ28は、リクエストCREQの対象となるデータを記憶していない場合、2次キャッシュとして機能するキャッシュ30にアクセスする。例えば、データキャッシュ28は、4ウェイセットアソシアティブ方式を採用し、32KB(キロバイト)の記憶容量を有する。例えば、各ウェイは、128バイトの記憶領域を各々有する64個のキャッシュラインを有する。データキャッシュ28は、演算部12で使用するデータを含む複数のデータ群を記憶する複数のウェイを有するキャッシュメモリ部の一例である。
キャッシュ30は、命令を記憶する命令キャッシュ32と、データを記憶するデータキャッシュ28とに接続され、データおよび命令を記憶する2次キャッシュL2として機能する。また、キャッシュ30は、DRAM(Dynamic Random Access Memory)等が搭載されるメモリモジュールを含む主記憶装置50に接続される。さらに、主記憶装置50は、ハードディスクドライブ装置等の補助記憶装置60に接続される。
命令キャッシュ32は、キャッシュ30から転送される命令(すなわち、演算処理装置OPD2が実行する命令コード、演算処理装置OPD2が実行するプログラム)を記憶し、1次キャッシュL1として機能する。命令キャッシュ32は、命令ユニット10からの要求に基づき、記憶している命令を命令ユニット10に出力する。
図3は、図2に示すフェッチポート142の例を示す。例えば、フェッチポート142は、命令ユニット10から転送される命令コードOPCおよびアドレスADRSと、パイプライン制御部144から出力されるアボート要因WIDとを保持する複数のエントリFPE(FPE0−FPE31)を有する。なお、エントリFPEの数は32個に限定されない。フェッチポート142は、命令ユニット10からのリクエスト発行信号REQVに基づき、リクエスト発行信号REQVとともに受ける命令コードOPCおよびアドレスADRSを空いているエントリFPEに格納する。
図4は、図2に示すキャッシュ制御部18の例を示す。キャッシュ制御部18は、データキャッシュ28の4つのウェイWAY(WAY0−WAY3)に対応する4つのタグ領域TAG(TAG0−TAG3)と、ヒット信号HITおよび識別情報WAYIDを生成する生成回路180とを有する。
各タグ領域TAGは、データキャッシュ28の各ウェイWAYが有する64個のキャッシュラインに対応して、物理アドレスPAの上位28ビットPA[40:13]を格納する64個のタグ領域を有する。64個のタグ領域は、6ビットの論理アドレスVA[12:7]により識別される。
生成回路180は、タグ領域TAG0−TAG3のそれぞれに対応して設けられる4つの比較器TAGCMPと、ヒット信号HITを生成するヒット生成回路HITGENと、識別情報WAYIDを生成するエンコーダWAYENCとを有する。各比較器TAGCMPは、論理アドレスVA[12:7]に基づき各タグ領域TAGから読み出される物理アドレスPA[40:13]と、TLB制御部16から受ける物理アドレスPA[40:13]とを比較する。例えば、各比較器TAGCMPは、2つの物理アドレスPA[40:13]が一致する場合に、論理1を出力し(ヒット)、不一致の場合に論理0を出力する(ミス)。なお、図4では、比較器TAGCMPは、否定排他的論理和回路で示されるが、実際の比較器TAGCMPは、物理アドレスPA[40:13]の各ビットを比較し、全ビットが一致する場合に論理1を出力する回路を有する。
ヒット生成回路HITGENは、比較器TAGCMPのいずれかがヒットを示す場合、ヒット信号HITを論理1に設定し、全ての比較器TAGCMPがミスを示す場合、ヒット信号HITを論理0に設定する。エンコーダWAYENCは、各比較器TAGCMPが出力する論理値に基づいて、ヒットしたタグ領域TAGに対応するウェイWAYを示す識別情報WAYIDを生成する。例えば、識別情報WAYIDは、2ビットであり、ヒットしたウェイWAY0−WAY3の番号を示す。
図5は、図2に示すバッファ制御部20が有するテーブルSTBTBL、WBTBLの例を示す。
テーブルSTBTBLは、バッファ制御部20により書き込まれるフラグSTBV、論理アドレスVA、識別情報WAYID、フラグWAYIDV、物理アドレスPAおよびバイトマスク情報BMを記憶する20個のエントリSE(SE0−SE19)を有する。テーブルSTBTBLに設けられるエントリSEの数は、ストアバッファ22に設けられるエントリSTBの数に等しい。各エントリSEにおいて、フラグSTBV、WAYIDVは1ビットであり、識別情報WAYIDを格納する領域は2ビットである。また、各エントリSEにおいて、論理アドレスVAを格納する領域は64ビットであり、物理アドレスPAを格納する領域は41ビットであり、バイトマスク情報BMを格納する領域は32ビットである。
各エントリSEのフラグSTBVは、エントリSEに対応するエントリSTBに有効なデータが保持されている場合にセットされ、エントリSEに対応するエントリSTBに無効なデータが保持されている場合にリセットされる。すなわち、フラグSTBVは、ストアデータがエントリSTBに保持されている間にセット状態に維持され、ストアデータのライトバッファ24への転送に基づきリセットされる。
各エントリSEに格納される論理アドレスVAおよび物理アドレスPAは、先行するストア命令の実行時にエントリSEに対応するエントリSTBに保持されているデータを格納する主記憶装置50の記憶領域のアドレスである。各エントリSEに格納される識別情報WAYIDは、先行するストア命令の実行時にエントリSEに対応するエントリSTBに保持されているデータを格納するデータキャッシュ28のウェイWAYを示す。各エントリSEに格納されるフラグWAYIDVは、先行するストア命令の実行時にエントリSEに対応するエントリSTBに保持されているデータがキャッシュヒットし、データキャッシュ28のウェイWAYのいずれかに書き込まれることを示す。各エントリSEに格納されるバイトマスク情報BMは、図10で説明するように、ストアデータが格納される主記憶装置50の記憶領域の位置(アドレスの範囲)を示す。
テーブルWBTBLは、バッファ制御部20により書き込まれるフラグWBV、論理アドレスVA、識別情報WAYID、フラグWAYIDV、物理アドレスPAおよびバイトマスク情報BMを記憶する8個のエントリWE(WE0−SE7)を有する。テーブルWBTBLに設けられるエントリWEの数は、ライトバッファ24に設けられるエントリWBの数に等しい。各エントリWEにおいて、フラグWBV、WAYIDVは1ビットであり、識別情報WAYIDを格納する領域は2ビットである。また、各エントリWEにおいて、論理アドレスVAを格納する領域は64ビットであり、物理アドレスPAを格納する領域は41ビットであり、バイトマスク情報BMを格納する領域は32ビットである。
各エントリWBのフラグWBVは、エントリWBに対応するエントリWBに有効なデータが保持されている場合にセットされ、エントリWBに対応するエントリWBに無効なデータが保持されている場合にリセットされる。すなわち、フラグWBVは、ストアデータがエントリWBに保持されている間にセット状態に維持され、ストアデータのデータキャッシュ28への転送に基づきリセットされる。
各エントリWBに格納される論理アドレスVAおよび物理アドレスPAは、先行するストア命令の実行時にエントリWEに対応するエントリWBに保持されているデータを格納する主記憶装置50の記憶領域のアドレスである。各エントリWEに格納される識別情報WAYIDは、先行するストア命令の実行時にエントリWEに対応するエントリWBに保持されているデータを格納するデータキャッシュ28のウェイWAYを示す。各エントリWEに格納されるフラグWAYIDVは、先行するストア命令の実行時にエントリWEに対応するエントリWBに保持されているデータがキャッシュヒットし、データキャッシュ28のウェイWAYのいずれかに書き込まれることを示す。各エントリWEに格納されるバイトマスク情報BMは、図10で説明するように、ストアデータが格納される主記憶装置50の記憶領域の位置(アドレスの範囲)を示す。
テーブルSTBTBLは、ストアバッファ22にデータが保持されている間、ストア命令STに含まれる第1部分アドレス情報と、ストア命令STにより生成されたヒット情報HITおよびウェイ情報WAYIDとを記憶するストア情報記憶部の一例である。例えば、第1部分アドレス情報は、論理アドレスVA[12:5]およびバイトマスク情報BMであり、ストア命令STに含まれるアドレスの下位13ビットで表されるデータの格納位置を示す。テーブルSTBTBLのエントリSEは、データを保持するバッファ領域の一例である。
テーブルWBTBLは、ライトバッファ24にデータが保持されている間、ストア命令STに含まれる第1部分アドレス情報と、ストア命令STにより生成されたヒット情報HITおよびウェイ情報WAYIDとを記憶するストア情報記憶部の一例である。テーブルWBTBLのエントリWEは、データを保持するバッファ領域の一例である。
図6は、図2に示す依存判定部200に設けられるSFIを判定するSFI判定回路210の例を示す。SFI判定回路210は、図5に示すテーブルSTBTBLのエントリSEのそれぞれに対応する検出部SFIDETaと、図5に示すテーブルWBTBLのエントリWEのそれぞれに対応する検出部SFIDETbと、オア回路OR1とを有する。
各検出部SFIDETaは、ロード命令での論理アドレスVA[12:5]、バイトマスク情報BM[31:0]、ヒット信号HITおよび識別情報WAYIDを受ける。また、各検出部SFIDETaは、ロード命令に先行するストア命令での論理アドレスVA[12:5]、バイトマスク情報BM[31:0]、識別情報WAYIDおよびフラグ値WAYIDVを各エントリSEから受ける。そして、各検出部SFIDETaは、受けた情報に基づきSFIの発生を示す検出信号STBSFI(STBSFI0−STBSFI19)を出力する。検出部SFIDETaの例は、図7に示す。
各検出部SFIDETbは、ロード命令での論理アドレスVA[12:5]、バイトマスク情報BM[31:0]、ヒット信号HITおよび識別情報WAYIDを受ける。また、各検出部SFIDETbは、ロード命令に先行するストア命令での論理アドレスVA[12:5]、バイトマスク情報BM[31:0]、識別情報WAYIDおよびフラグWAYIDVを、各エントリWEから受ける。さらに、各検出部SFIDETbは、図8に示す各検出部SFBDETが出力する検出信号SFBWB(SFBWB0−SFBWB7)を受ける。検出信号SFBWBは、図8で説明するように、テーブルWBTBLのエントリWE0−WE7毎のSFBの発生を示す。そして、各検出部SFIDETbは、受けた情報に基づきSFIの発生を示す検出信号WBSFI(WBSFI0−WBSFI7)を出力する。検出部SFIDETbの例は、図7に示す。
オア回路OR1は、検出信号STBSFI0−STBSFI19、WBSFI0−WBSFI7のいずれかがSFIの発生を示す場合、無効信号SFIを出力する。
図7は、図6に示す検出部SFIDETa、SIFDETbの例を示す。検出部SFIDETa、SFIDETbに入力される”(LD)”を付けた信号は、ロード命令に対応する信号を示す。検出部SFIDETaに入力される”(SE)”を付けた信号は、ロード命令に先行するストア命令に対応してエントリSEから読み出される信号を示す。検出部SFIDETbに入力される”(WE)”を付けた信号は、ロード命令に先行するストア命令に対応してエントリWEから読み出される信号を示す。
検出部SFIDETaは、比較器CMP1および検出器DET1、DET2を有する。検出器CMP1は、ロード命令での論理アドレスVA[12:5]と、先行するストア命令での論理アドレスVA[12:5]の一致を検出した場合、一致信号VAMCHを出力する。検出器DET1は、ロード命令での論理1のバイトマスク情報BM[31:0]のいずれかと、先行するストア命令での論理1のバイトマスク情報BM[31:0]のいずれかとの一致を検出した場合、一致信号BMMCHを出力する。バイトマスク情報BM[31:0]は、ロード命令またはストア命令でのアドレスにおける下位5ビットを除くアドレスで示される32バイト分のデータ領域において、アクセスされる領域を示す。すなわち、検出器DET1は、ロード命令と先行するストア命令とにおいて、アドレスの下位5ビットで示される領域でのデータの依存性の有無を検出する。
検出器DET2の比較器CMP2は、ロード命令でキャッシュヒットしたウェイWAYと、先行するストア命令でキャッシュヒットしたウェイWAYとの一致を検出した場合、一致信号WAYIDMCHを出力する。比較器CMP2による識別情報WAYIDの一致の検出は、物理アドレスPA[40:13]の一致の検出と等価である。検出器DET2は、ロード命令または先行するストア命令の少なくともいずれかでキャッシュミスした場合、SFIの発生の可能性があることを示すプリ無効信号PSFIを出力する。また、検出器DET2は、ロード命令および先行するストア命令がともにキャッシュヒットし、かつ、一致信号WAYIDMCHが出力される場合、プリ無効信号PSFIを出力する。一方、検出器DET2は、ロード命令および先行するストア命令がともにキャッシュヒットし、かつ、一致信号WAYIDMCHが出力されない場合、プリ無効信号PSFIを出力しない。
そして、検出部SFIDETaは、一致信号VAMCH、BMMCHおよびプリ無効信号PSFIの全てが出力された場合、検出信号STBSFIを出力する。一方、検出部SFIDETaは、一致信号VAMCH、BMMCH、WAYIDMCHのいずれかが出力されない場合、検出信号STBSFIを出力しない。例えば、キャッシュミスで一致信号WAYIDMCHが出力される場合(プリ無効信号PSFI=0)、ロード命令によるロードデータは、先行するストア命令によりストアデータが格納される領域と異なる領域から読み出されるため、データの依存性はない。この場合に、プリ無効信号PSFIが検出信号STBSFIの出力をマスクすることで、ロード命令が誤ってアボートされることを抑止することができる。換言すれば、検出部SFIDETaによりロード命令と先行するストア命令とのウェイWAYの一致の有無を検出することで、SFIの検出にアドレスの上位側のビットを用いない場合に発生する偽のSFIを抑止することができる。
検出部SFIDETbは、検出部SFIDETaの回路構成に加えて、検出信号SFBWBの発生時に、検出信号WBSFIの出力をマスクするマスク回路MSKを有する。検出部SFIDETbの比較器CMP1および検出器DET1、DET2のそれぞれは、SFBが発生した場合にも、一致を検出する。SFBが発生された場合、先行するストア命令によりライトバッファWBに保持されたデータは、後続のロード命令において演算部12にバイパス可能である。このため、検出部SFIDETbは、SFBの発生時にロード命令のアボートを避けるため、マスク回路MSKにより検出信号WBSFIの出力を禁止する。
検出部SFIDETbの検出部DET1、DET2の動作は、検出部SFIDETaの検出部DET1、DET2の動作と同様である。すなわち、検出部SFIDETbにおいても、ロード命令と先行するストア命令とのウェイWAYの一致の有無を検出することで、SFIの検出にアドレスの上位側のビットを用いない場合に発生する偽のSFIを抑止することができる。検出部SFIDETa、SFIDETbは、アドレスの上位側のビットを比較する比較器を持たないため、アドレスの上位側の全ビット[40:5]を比較する比較器を有する検出部に比べて、回路規模を削減することができる。
なお、図2に示されるように、演算部12へのデータのバイパスは、ライトバッファ24から実行され、ストアバッファ22からは実行されない。このため、検出部SFIDETaは、SFBが発生した場合に検出信号STBSFIをマスクせず、回路MSKを持たない。
図8は、図2に示す依存判定部200に設けられるSFBを判定するSFB判定回路220の例を示す。SFB判定回路220は、図5に示すテーブルWBTBLのエントリWE0−WE7のそれぞれに対応する検出部SFBDETと、オア回路OR2と、重複検出部MLTDETと、エンコーダSFBENCとを有する。
パイプライン制御部144に設けられる判定制御部SFBCNTは、比較器CMP3およびセレクタSEL1を有する。比較器CMP3は、フェッチポート142のエントリFPEに格納されたフラグWIDが示すロード命令のアボート要因がSFIの発生であることを検出する。セレクタSEL1は、比較器CMP3での検出結果に基づき、アボート要因がSFIである場合に許可信号SFBENを論理1に設定し、アボート要因がSFI以外である場合、またはアボートが発生していない場合、許可信号SFBENを論理0に設定する。
例えば、フェッチポート142が、命令ユニット10から受けるロード命令を示すリクエストREQに基づき、ロード命令の最初のリクエストIUREQをパイプライン制御部144に出力する場合、ロード命令のアボートは発生していない。この場合、判定制御部SFBCNTは、許可信号SFBENを論理0に設定する。一方、SFIの発生によりアボートされたロード命令が再投入された場合、判定制御部SFBCNTは、フェッチポート142のエントリFPEに格納されたフラグWIDに基づき、許可信号SFBENを論理1に設定する。
各検出部SFBDETは、ロード命令での論理アドレスVA[12:5]およびバイトマスク情報BM[31:0]を受ける。また、各検出部SFBDETは、ロード命令に先行するストア命令での論理アドレスVA[12:5]およびバイトマスク情報BM[31:0]を各エントリWEから受ける。そして、各検出部SFBDETは、許可信号SFBENが論理1の場合、受けた情報に基づきSFBの発生を示す検出信号SFBWB(SFBWB0−SFBWB7)を出力する。一方、各検出部SFBDETは、許可信号SFBENが論理0の場合、検出信号SFBWB(SFBWB0−SFBWB7)の出力をマスクする。検出部SFBDETの例は、図9に示す。
オア回路OR2は、検出信号SFBWB0−SFBWB7のいずれかがSFBの発生を示す場合、ライトバッファ24から演算部12へのデータのバイパスを許可するバイパス要求信号SFBREQを出力する。すなわち、バイパス要求信号SFBREQは、バッファ制御部20がSFBを可能と判定した場合に出力される。
重複検出部MLTDETは、2以上の検出信号SFBWB0−SFBWB7がSFBの発生を示す場合、重複信号SFBMLTを出力する。エンコーダSFBENCは、検出信号SFBWB(SFBWB0−SFBWB7のいずれか)を発生させたエントリWEに対応するライトバッファ24のエントリWB(WB0−WB7のいずれか)を示す3ビットの識別情報WBIDを生成する。
識別情報WBIDは、ライトバッファ24に供給され、エントリWB(WB0−WB7のいずれか)に格納されたデータの選択に使用される。また、識別情報WBIDは、バッファ制御部20内でテーブルWBTBLのエントリWEに格納された物理アドレスPA[40:13]の選択に使用される。識別情報WBIDにより選択された物理アドレスPA[40:13]は、バッファ制御部20内に設けられる比較器CMP4によりロード命令での物理アドレスPA[40:13]と比較される。
比較器CMP4は、物理アドレスPA[40:13]が互いに一致する場合、アドレス一致信号SFBPAMCHを出力する。比較器CMP4は、ロード命令に含まれる第2部分アドレス情報と、ライトバッファ24が記憶する第2部分アドレス情報との一致を検出する第2アドレス一致検出部の一例である。例えば、第2部分アドレス情報は、物理アドレスPA[40:13]である。なお、比較器CMP4は、検出信号SFBWBに基づきエンコーダSFBENCが生成する識別情報WBIDを用いてテーブルWBTBLから読み出される物理アドレスPA[40:13]を、ロード命令での物理アドレスPA[40:13]と比較する。このため、アドレス一致信号SFBPAMCHは、例えば、バイパス要求信号SFBREQに比べて1クロックサイクル遅く出力される。
パイプライン制御部144のSFB発生部SFBGENは、バイパス要求信号SFBREQおよびアドレス一致信号SFBPAMCHが出力され、重複信号SFBMLTが出力されない場合、SFBの発生を検出し、バイパス信号SFBを出力する。重複信号SFBMLTが出力される場合、バイパス可能なデータがライトバッファ24の複数のエントリWBに格納されているため、SFB発生部SFBGENは、バイパス信号SFBの発生はマスクされる。
なお、バイパス要求信号SFBREQおよび重複信号SFBMLTは、ラッチ回路により遅延された後にパイプライン制御部144に供給される。これにより、バイパス要求信号SFBREQおよび重複信号SFBMLTのパイプライン制御部144への供給サイクルと、アドレス一致信号SFBPAMCHのパイプライン制御部144への供給サイクルとが揃えられる。
判定制御部SFBCNTの動作により、最初のリクエストIUREQに対応するロード命令では、許可信号SFBENは論理0に設定され、各検出部SFBDETは、検出信号SFBWBの出力をマスクする。これにより、最初のリクエストIUREQに対応するロード命令では、検出部SFBDETによるSFBの検出はマスクされ、SFBは発生しない。SFBが発生しない場合で、SFIも発生しない場合、図19に示されるように、ロード命令はアボートされず、演算部12は、データキャッシュ28から読み出されたデータを受信する。一方、最初のリクエストIUREQに対応するロード命令で検出部SFBDETの動作をマスクせず、検出信号SFBWBが出力される場合、図28に示されるように、真のSFBが発生する場合にも、アボート信号ABTが出力され、ロード命令はアボートされる。これは、アドレス一致信号SFBPAMCHが、バイパス要求信号SFBREQに比べて遅れて出力されるため、アドレス一致信号SFBPAMCHが出力される前に、図11に示す完了判定部146がアボートを判定するためである。
なお、各検出信号SFBWB0−SFBWB7は、判定制御部SFBCNTによって、SFIの発生によりアボートされたロード命令が再投入される場合に、ロード命令と先行するストア命令のデータが一致する場合に発生する。SFIは、図7で説明したように、ロード命令と先行するストア命令の物理アドレスPA[40:5]を互いに比較する場合と等価な条件で判定される。このため、各検出信号SFBWB0−SFBWB7は、ロード命令と先行するストア命令の物理アドレスPA[40:5]を互いに比較する場合と等価な条件を用いて生成される。すなわち、検出部SFBDETが出力する検出信号SFBWB0−SFBWB7は、真のSFBを示し、SFBの検出にアドレスの上位側のビットを用いない場合に発生する偽のSFBを抑止することができる。
図9は、図8に示す検出部SFBDETの例を示す。検出部SFBDETは、比較器CMP5および検出器DET3を有する。検出器CMP5は、ロード命令での論理アドレスVA[12:5]と、先行するストア命令での論理アドレスVA[12:5]の一致を検出する。
検出器DET3は、インバータIV、オア回路OR3およびアンド回路AND1を有する。検出器DET3は、ロード命令によりデータキャッシュ28から読み出されるデータのアドレス範囲が、先行するストア命令でデータキャッシュ28に格納されるデータのアドレス範囲に含まれる場合、論理1を出力する。すなわち、検出器DET3は、ロード命令によるロードデータが先行するストア命令によるストアデータに含まれることを検出することで、SFBの可能性があることを検出する。検出器DET3によりバイトマスク情報BMを比較する例は、図10に示される。
そして、検出部SFBDETは、論理アドレスPA[12:5]が互いに一致し、ロード命令によるロードデータが先行するストア命令によるストアデータに含まれる場合、検出信号SFBWB(SFBWB0−SFBWB7のいずれか)を出力する。検出部SFBDETは、ロード命令に対応する第1部分アドレス情報と、テーブルWBTBLが記憶する第1部分アドレス情報との一致を検出する第1アドレス一致検出部の一例である。上述したように、第1部分アドレス情報は、論理アドレスVA[12:5]およびバイトマスク情報BMであり、ストア命令STおよびロード命令LDに含まれるアドレスの下位13ビットで表されるデータの格納位置を示す。
図10は、図9に示す検出器DET3によりバイトマスク情報BMを比較する例を示す。図10では、説明を分かりやすくするために、バイトマスク情報BMが8ビット(すなわち、アドレスの下位3ビットVA[2:0]が”000”から”111”の範囲)を有するとする。図10において、網掛けで示す領域は、ストア命令でデータが格納される領域またはロード命令でデータが読み出される領域(論理1で示される)を示す。
図10(a)、(b)、(c)、(d)に示されるように、ロード命令でのバイトマスク情報BMの論理1の範囲が、先行するストア命令によりエントリWEに格納されたバイトマスク情報BMの論理1の範囲に含まれる場合、SFBの可能性がある。すなわち、図10(a)、(b)、(c)、(d)では、ロード命令と先行するストア命令との上位アドレスが互いに一致する場合、ライトバッファ24から演算部12へのデータのバイパスが可能である。一方、図10(e)、(f)、(g)、(h)に示されるように、ロード命令でのバイトマスク情報BMの論理1の範囲が、先行するストア命令によりエントリWEに格納されたバイトマスク情報BMの論理1の範囲から外れる場合、SFBの可能性はない。すなわち、図10(e)、(f)、(g)、(h)では、ロード命令と先行するストア命令との上位アドレスが互いに一致しても、ライトバッファ24から演算部12へのデータのバイパスは実行されない。
図9に示す検出器DET3の各オア回路OR3は、エントリWEのバイトマスク情報BMが論理1の場合、あるいは、エントリWEおよびロード命令のバイトマスク情報BMがともに論理0の場合、SFBの可能性を示す論理1を出力する。また、各オア回路OR3は、エントリWEのバイトマスク情報BMが論理0で、ロード命令のバイトマスク情報BMが論理1の場合、SFBの可能性がないことを示す論理0を出力する。そして、図9に示す検出器DET3のアンド回路AND1は、全てのオア回路OR3から論理1を受ける場合、SFBの可能性を示す論理1を出力し、オア回路OR3の少なくとも1つから論理0を受ける場合、SFBの可能性がないことを示す論理0を出力する。
なお、バイトマスク情報BMが重複するアドレスが存在する図10(b)から図10(g)では、SFIが発生する。バイトマスク情報BMが重複するアドレスが存在しない図10(h)では、SFIは発生しない。図10(a)では、バイトマスク情報BMが重複するアドレスが完全に一致するため、図7に示されるように、SFI(検出信号WBSFI)の発生はマスクされる。
図11は、図2に示す完了判定部146の例を示す。図11は、完了判定部146が有するロード命令の完了を判定する回路の例を示す。
完了判定部146は、アンド回路AND2、AND3、AND4、AND5およびオア回路OR4、OR5を有する。アンド回路AND2は、バイパス要求信号SFBREQと重複信号SFBMLTとに基づき、複数のエントリWEに対応する複数のエントリWBでSFBを検出する場合、論理1を出力する。アンド回路AND3は、バイパス要求信号SFBREQとアドレス一致信号SFBPAMCHとに基づき、物理アドレスPA[40:13]の不一致を検出する場合、論理1を出力する。アンド回路AND4は、バイパス要求信号SFBREQとヒット信号HITに基づき、SFBの未発生とキャッシュミスとを検出する場合、論理1を出力する。オア回路OR4は、無効信号SFIとアンド回路AND2、AND3、AND4の出力とのオア論理をアンド回路AND5に出力する。
アンド回路AND5は、ロード命令を示す命令コードOPCD(LD)と、オア回路OR4の出力信号とを受け、ロード命令をアボートさせる場合に論理1を出力する。オア回路OR5は、一致信号TLBMCHに基づき、TLBのヒットを検出した場合で、アンド回路AND4からのアボートの要求を受けていない場合、完了信号STVを論理1に設定し、アボート信号ABTを論理0に設定する。一方、オア回路OR5は、一致信号TLBMCHに基づき、TLBのミスを検出した場合、またはアンド回路AND4からのアボートの要求を受けた場合、完了信号STVを論理0に設定し、アボート信号ABTを論理1に設定する。なお、完了信号STVおよびアボート信号ABTが出力されるクロックサイクルを調整するために、一致信号TLBMCHは、所定数のラッチ回路により遅延された後完了判定部146に供給される。図6に示すSFI判定回路210および完了判定部146は、ストア命令STに後続するロード命令LDの継続またはアボートを判定する判定部の一例である。
なお、図8に示したバイパス信号SFBを出力するパイプライン制御部144の論理(3入力のアンド回路)は、バイパス要求信号SFBREQが論理1の場合に、論理0を出力するアンド回路AND2、AND3の論理と等価である。このため、バイパス要求信号SFBREQが論理1の場合で、アンド回路AND2、AND3が論理0を出力する場合、SFBの発生を検出してもよい。この場合、パイプライン制御部144は、図8に示すバイパス信号SFBを出力する論理(3入力のアンド回路)を削除してもよい。
図12は、先行するストア命令でストアされるデータと、後続のロード命令でロードされるデータとの依存関係の例を示す。図12において、アドレス値の先頭に示す”0x”は、16進数を示す。なお、図12および図13以降の動作では、ストア命令およびロード命令で指定されるアドレスは、16ビットとして説明される。例えば、ストア命令およびロード命令は、1バイトから32バイトのいずれかのデータを扱うことが可能である。但し、図12および図13以降の動作では、説明を分かりやすくするために、ストア命令は8バイトのデータをストアし、ロード命令は8バイトのデータをロードするものとする。さらに、図12および図13以降の動作では、ストア命令およびロード命令によりアクセスされるデータは、データキャッシュ28に格納されているとする。
ストア命令がアドレス0x00F0を先頭アドレスとしてデータ(a)をストアし、後続のロード命令がアドレス0x000F6を先頭アドレスとしてデータ(b)をロードする場合、データを保持するアドレス領域の一部が重複するため、SFIが発生する。この場合のバイトマスク情報BMは、図12の右側に示されるように、一部が一致し、他の一部が不一致となる。このため、SFBは発生しない。
ストア命令がアドレス0x00F8を先頭アドレスとしてデータ(c)をストアし、後続のロード命令がアドレス0x000F8を先頭アドレスとしてデータ(c)をロードする場合、データを保持するアドレス領域が完全に一致するため、SFBが発生する。SFBの発生によりSFIの発生はマスクされる。ストア命令がアドレス0x00F2を先頭アドレスとしてデータ(d)をストアし、後続のロード命令がアドレス0x20F6を先頭アドレスとしてデータ(e)をロードする場合、データを保持するアドレス領域が一致しないため、SFI、SFBは発生しない。
ストア命令がアドレス0x00F2を先頭アドレスとしてデータ(d)をストアし、後続のロード命令がアドレス0x20F2を先頭アドレスとしてデータ(f)をロードする場合、データを保持するアドレス領域が一致しないため、SFI、SFBは発生しない。ストア命令がアドレス0x00D3を先頭アドレスとしてデータ(g)をストアし、後続のロード命令がアドレス0x20F4を先頭アドレスとしてデータ(b)をロードする場合、データを保持するアドレス領域が一致しないため、SFI、SFBは発生しない。
図13は、図2に示す演算処理装置OPD2がストア命令STを実行する場合の動作の例を示す。まず、命令ユニット10は、ストア命令STのリクエストREQ(ST)(図2に示すリクエスト発行信号REQV、命令コードOPCおよびアドレスADRS)をフェッチポート142に投入し、フェッチポート142に保持させる(図13(a))。例えば、アドレスADRSは、0x00F0である。フェッチポート142に保持されたリクエストREQ(ST)は、順にパイプライン制御部144に投入される。図13に示す例では、実行中のストア命令STまたはロード命令がないため、フェッチポート142は、保持したリクエストREQ(ST)をリクエストIUREQ(ST)としてパイプライン制御部144に投入する(図13(b))。
パイプライン制御部144は、リクエストIUREQ(ST)に含まれるアドレスADRS(論理アドレスVA)をバッファ制御部20、TLB制御部16、キャッシュ制御部18およびデータキャッシュ28に転送する。バッファ制御部20は、受けた論理アドレスVAをテーブルSTBTBL中の空いているエントリSE(この例では、SE0)に格納し、論理アドレスVAを格納したエントリSE0のフラグSTBVをセットする(図13(c))。フラグSTBVがセットされている期間は、エントリSE0が有効なデータを保持している期間である。
図13には示されないが、命令ユニット10は、演算部12にストア命令STのリクエストREQOPを投入する。演算部12は、リクエストREQOPで指定されたレジスタ部REGのレジスタに保持されたデータD1をストアデータとしてストアバッファ22に出力する(図13(d))。例えば、ストアバッファ22は、エントリSTB0が記憶しているデータD00をストアデータD1に書き替える。
この例では、受けた論理アドレスVAがTLB制御部16のTLBに登録されている。このため、TLB制御部16は、一致信号TLBMCHをパイプライン制御部144に出力し、論理アドレスLAから変換した物理アドレスPAをキャッシュ制御部18およびバッファ制御部20に出力する(図13(e))。キャッシュ制御部18は、パイプライン制御部144から受ける論理アドレスVAおよびTLB制御部16から受ける物理アドレスPAを用いてタグ領域TAGを検索する。
この例では、ウェイWAY0において、論理アドレスVA[12:7]で示されるタグ領域に格納された物理アドレスPA[40:13]と、ストア命令STでの物理アドレスPA[40:13]とが一致する(キャッシュヒット)。このため、キャッシュ制御部18は、ヒットしたウェイWAY0を示す識別情報WAYIDを出力し、ヒット信号HITを出力する(図13(f))。バッファ制御部20は、論理アドレスVAを格納したテーブルSTBTBLのエントリSEに、物理アドレスPA、識別情報WAYIDを順次に格納し、ヒット信号HITに応じてフラグWAYIDVをセットする(図13(g)、(h))。
パイプライン制御部144の完了判定部146は、一致信号TLBMCHの受信に基づいてストア命令STの完了を判定し、命令ユニット10へ完了信号STVを出力する(図13(i))。
なお、ストア命令STに含まれる論理アドレスVAがTLB制御部16に登録されていない場合、TLB制御部16は、一致信号TLBMCHを出力しない。この場合、完了判定部146は、アボート信号ABTと、アボートの要因を示すフラグWIDをフェッチポート142に出力する。フェッチポート142は、アボート信号ABTを受けた場合、ストア命令STを再びパイプライン制御部144に投入するまでフラグWIDを保持する。
完了信号STVを受けた命令ユニット10は、コミット信号CMTをバッファ制御部20に出力する(図13(j))。バッファ制御部20は、コミット信号CMTに基づいて、転送信号WBGOをストアバッファ22に出力し、ストア命令STに対応してストアバッファ22に保持されているデータD1をライトバッファ24に転送させる(図13(k)、(l))。また、バッファ制御部20は、コミット信号CMTに基づいて、テーブルWBTBLの空いているエントリWE(例えば、WE0)にフラグWBV、論理アドレスVA、識別情報WAYID、フラグWAYIDVおよび物理アドレスPAを格納する(図13(m))。フラグWBVがセットされている期間は、エントリWE0が有効なデータを保持している期間である。フラグWBVのセットと、フラグSTBVのリセットは、エントリSE0に保持されたデータがエントリWE0に転送されることを示す。例えば、テーブルWBTBLへのフラグWBV、論理アドレスVA、識別情報WAYID、フラグWAYIDVおよび物理アドレスPAの格納は、テーブルSTBTBLに格納された情報を転送することで実行される。
バッファ制御部20は、フラグWBをセットしたエントリWEに対応するライトバッファ24のエントリWB0にストア信号ST2を出力する(図13(n))。ライトバッファ24は、ストア信号ST2に基づいて、指示されたエントリWB0に保持しているデータD1をデータキャッシュ28に書き込む(図13(o))。図13および図14以降に示す”+D1”、”+D2”等の符号は、データキャッシュ28にデータが書き込まれることを示す。バッファ制御部20は、ストア信号ST2の出力後、テーブルWBTBL内のエントリWE0のフラグWBVをリセットする(図13(p))。そして、ストア命令STによるデータのストア動作が完了する。
図14は、図2に示す演算処理装置OPD2がストア命令STを実行する場合の動作の別の例を示す。図13と同一または同様の動作については、詳細な説明は省略する。この例では、命令ユニット10は2つのストア命令STを順次にフェッチポートに投入する。例えば、最初のストア命令STでは、データD1はストアバッファ22のエントリSTB0とライトバッファ24のエントリWB0とに順次に格納される。2番目のストア命令STでは、データD2はストアバッファ22のエントリSTB1とライトバッファ24のエントリWB1とに順次に格納される。2つのストア命令STにおいて、データの格納先を示すアドレス(0x00F0)は、互いに同じである。
最初のストア命令STに基づく動作は、図13に示す動作と同様である。但し、図14では、図13に示す一致信号TLBMCHと、TLB制御部16が出力する物理アドレスPAと、キャッシュ制御部18が出力する識別情報WAYIDおよびヒット信号HITとは示されない。また、図14では、図13に示すテーブルSTBTBLに保持されるフラグWAYIDVおよび物理アドレスPAと、テーブルWBTBLに保持されるフラグWAYIDVおよび物理アドレスPAとは示されない。
2番目のストア命令STは、最初のストア命令STと同様に実行される。すなわち、フェッチポート142は、命令ユニット10から投入されたストア命令STのリクエストREQ(ST)に基づき、リクエストIUREQ(ST)をパイプライン制御部144に投入する(図14(a))。そして、テーブルSTBTBL中の空いているエントリSE(この例では、SE1)にフラグSTBV、論理アドレスVAおよび識別情報WAYID等が格納される(図14(b))。
ストアバッファ22は、演算部12からストアデータD2を受け、例えば、エントリSTB1が記憶しているデータD01をストアデータD2に書き替える(図14(c))。
パイプライン制御部144の完了判定部146は、図2に示す一致信号TLBMCHをサイクルT12で受信することでストア命令STの完了を判定し、命令ユニット10へ完了信号STVを出力する(図14(d))。バッファ制御部20は、コミット信号CMTに基づいて転送信号WBGOをストアバッファ22に出力し、2番目のストア命令STに対応してストアバッファ22に保持されているデータD2をライトバッファ24に転送させる(図14(e)、(f))。また、バッファ制御部20は、コミット信号CMTに基づいて、テーブルWBTBLの空いているエントリWE(例えば、WE1)にフラグWBV、論理アドレスVA、識別情報WAYID等を格納する(図14(g))。
ライトバッファ24は、バッファ制御部20が出力するストア信号ST2に基づいて、指示されたエントリWB1に保持しているデータD2をデータキャッシュ28に書き込む(図14(h))。バッファ制御部20は、ストア信号ST2の出力後、テーブルWBTBL内のエントリWE1のフラグWBVをリセットする(図14(i))。そして、2番目のストア命令STによるデータのストア動作が完了する。
図15は、図2に示す演算処理装置OPD2がストア命令STとロード命令LDとを順次に実行する場合の動作の例を示す。図13と同一または同様の動作については、詳細な説明は省略する。図15では、まず、先頭アドレスが0x00D3の領域(図12(g))に8バイトのデータD1をストアするストア命令STが実行される。この後、データD1がデータキャッシュ28に書き込まれる前に、先頭アドレスが0x20F6の領域(図12(e))から8バイトのデータをロードするロード命令LDが実行される。ストア命令STでヒットするウェイWAY0は、ロード命令LDでヒットするウェイWAY1と異なる。
ストア命令STの動作は、データD1がストアされるアドレスが異なることを除き、図13と同様である。なお、図15では、ストア命令STおよびロード命令LDでの対象アドレスが明確になるように、パイプライン制御部144が出力する論理アドレスVAを記載している(図15(a))。
命令ユニット10は、ストア命令STのリクエストREQに続き、ロード命令LDのリクエストREQをフェッチポート142に投入し、フェッチポート142に保持させる(図15(b))。フェッチポート142は、保持したロード命令LDのリクエストREQをリクエストIUREQ(LD)としてパイプライン制御部144に投入する(図15(c))。
TLB制御部16は、パイプライン制御部144から受ける論理アドレスVAがTLBに登録されているため、論理アドレスLAから変換した物理アドレスPAと一致信号TLBMCHとを出力する(図15(d))。一致信号TLBMCHは、図13(e)に示されるように、物理アドレスPAの出力サイクルと同じサイクルに出力される。
キャッシュ制御部18は、論理アドレスVAおよび物理アドレスPAを用いてタグ領域TAGを検索し、ヒット信号HITと、ヒットしたウェイWAYの番号を示す識別情報WAYIDとを出力する(図15(e))。データキャッシュ28は、パイプライン制御部144からのリクエストCREQ(図2)、ヒット信号HIT、識別情報WAYIDおよび論理アドレスVAに基づいて動作し、読み出したデータをセレクタ部26に出力する。
図6に示すSFI判定回路210は、ロード命令LDでの論理アドレスVA[12:5]をテーブルSTBTBLの全てのエントリSE0−SE19に保持された論理アドレスVA[12:5]と比較する(図15(f))。また、SFI判定回路210は、ロード命令LDでのバイトマスク情報BMの値と、テーブルSTBTBLの全てのエントリSE0−SE19に保持されたバイトマスク情報BMとを比較する。さらに、SFI判定回路210は、ロード命令LDでヒットしたウェイWAYを示す識別情報WAYIDと、テーブルSTBTBLの全てのエントリSE0−SE19に保持された有効な識別情報WAYIDとを比較する。
図15に示す例では、SFI判定回路210における図7に示す検出部SFIDETaは、一致信号VAMCH、BMMCH、WAYIDMCHの少なくともいずれかが不一致を示す。このため、SFI判定回路210は、検出信号STBSFI0−STBSFI19を出力せず、無効信号SFIを出力しない(図15(g))。
なお、サイクルT8において、ライトバッファ24はデータD1を保持していないため、SFI判定回路210における図7に示す検出部SFIDETbは、検出信号WBSFIを出力しない。また、図8に示すSFB判定回路220は、バイパス要求信号SFBREQを出力しない。すなわち、SFBは発生しない。このため、図11に示す完了判定部146は、ロード命令LDに対応して、アボート信号ABTを出力せず、完了信号STVを出力する(図15(h))。そして、データキャッシュ28から読み出されたデータが演算部12に転送され、ロード命令LDが完了する。
図16は、図2に示す演算処理装置OPD2がストア命令STとロード命令LDとを順次に実行する場合の動作の別の例を示す。図13および図15と同一または同様の動作については、詳細な説明は省略する。図16では、まず、先頭アドレスが0x00F0の領域(図12(a))に8バイトのデータD1をストアするストア命令STが実行される。この後、データD1がデータキャッシュ28に書き込まれる前に、先頭アドレスが0x00F4の領域(図12(b))から8バイトのデータをロードするロード命令LDが実行される。ストア命令STの動作は、図13と同様である。ストア命令STおよびロード命令LDでヒットするウェイWAYは互いに等しい(図16(a))。
ストア命令STのデータD1は、サイクルT3からサイクルT10の間、ストアバッファ22に保持される(図16(b))。このため、エントリSE0に対応する検出部SFIDETa(図7)は、一致信号VAMCH、BMMCH、WAYIDMCHを生成し、検出信号STBSFI0を出力する(図16(c))。そして、バッファ制御部20は、検出信号STBSFI0に基づき、パイプライン制御部144の完了判定部146に無効信号SFIを出力する(図16(d))。この時点で、ライトバッファ24は、ストア命令STのデータD1を保持していないため、エントリWE0に対応する検出部SFIDETbは、検出信号WBSFI0を出力しない(図16(e))。同様に、ライトバッファ24は、ストア命令STのデータD1を保持していないため、図8に示すSFB判定回路220は、バイパス要求信号SFBREQを出力しない。すなわち、SFBは発生しない。
図11に示す完了判定部146は、ロード命令LDに対応してバッファ制御部20から受ける無効信号SFIに基づきアボート信号ABTを出力し、完了信号STVを出力しない(図16(f))。すなわち、フェッチポート142がサイクルT6に発行したロード命令LDはアボートされ、フェッチポート142は、SFIによりアボートされたことを示すフラグWIDとともにロード命令LDを保持する。命令ユニット10は、ロード命令LDに対応する完了信号STVを受けないため、ロード命令LDに対応してデータキャッシュ28から転送される無効なデータを演算部12に破棄させる。
アボート信号ABTを受けたフェッチポート142は、例えば、サイクルT13にロード命令LDをパイプライン制御部144に再び投入する(図16(g))。ストア命令STのデータD1は、サイクルT11からサイクルT17の間、ライトバッファ24に格納されている(図16(h))。このため、エントリWE0に対応する検出部SFIDETb(図7)は、一致信号VAMCH、BMMCHを生成し、検出信号WBSFI0を出力する(図16(i))。バッファ制御部20のSFI判定回路210は、検出信号WBSFI0に基づき、パイプライン制御部144の完了判定部146に無効信号SFIを出力する(図16(j))。
完了判定部146は、無効信号SFIに基づきアボート信号ABTを出力し、完了信号STVを出力せず、フェッチポート142がサイクルT13に発行したロード命令LDをアボートさせる(図16(k))。
アボート信号ABTを受けたフェッチポート142は、例えば、サイクルT22にロード命令LDをパイプライン制御部144に再び投入する(図16(l))。この時点で、ストア命令STのデータD1はデータキャッシュ28に格納されている(図16(m))。SFI判定回路210における図7に示す検出部SFIDETa、SFIDETbの各々において、一致信号VAMCH、BMMCH、WAYIDMCHの少なくともいずれかが不一致を示す。このため、SFI判定回路210は、検出信号STBSFI0−STBSFI19、WBSFI0−WBSFI7を出力せず、無効信号SFIは出力されない(図16(n))。このため、完了判定部146は、ロード命令LDに対応して、アボート信号ABTを出力せず、完了信号STVを出力する(図16(o))。そして、データキャッシュ28から読み出されたデータが演算部12に転送され、ロード命令LDが完了する。
図17は、図2に示す演算処理装置OPD2がストア命令STとロード命令LDとを順次に実行する場合の動作の別の例を示す。図13および図15と同一または同様の動作については、詳細な説明は省略する。図17では、まず、先頭アドレスが0x00F2の領域(図12(d))に8バイトのデータD1をストアするストア命令STが実行される。この後、データD1がデータキャッシュ28に書き込まれる前に、先頭アドレスが0x20F6の領域(図12(e))から8バイトのデータをロードするロード命令LDが実行される。ストア命令STの動作は、図13と同様である。ストア命令STでヒットするウェイWAY0は、ロード命令LDでヒットするウェイWAY1と異なる(図17(a))。アドレス0x00F2は、2進数で”0000 0000 1111 0010”であり、アドレス0x20F6は、2進数で”0010 0000 1111 0110”であり、論理アドレスVA[12:5]の値は互いに同じである。
図7に示す検出部SFIDETaは、ロード命令LDでの論理アドレスVA[12:5]とテーブルSTBTBLのエントリSE0に保持された論理アドレスVA[12:5]との一致を検出し、一致信号VAMCHを出力する。また、検出部SFIDETaは、ロード命令LDでのバイトマスク情報BMの値と、テーブルSTBTBLのエントリSE0に保持されたバイトマスク情報BMとのいずれかのビットの一致を検出し、一致信号BMMCHを出力する。ストアデータはデータキャッシュ28に記憶されているため、エントリSE0のフラグWAYIDVはセットされている。ロードデータはデータキャッシュ28に記憶されているため、ヒット信号HITが出力される。
一方、検出部SFIDETaは、ロード命令LDでヒットしたウェイWAYを示す識別情報WAYIDと、テーブルSTBTBLのエントリSE0に保持された識別情報WAYIDとの不一致を検出し、一致信号WAYIDMCHをロウレベルLに保持する。一致信号WAYIDMCHが生成されないため、エントリSE0に対応する検出部SFIDETaは、検出信号STBSFI0を出力しない(図17(b))。他のエントリSE1−SE19に対応する検出部SFIDETaも、検出信号STBSFI1−STBSFI19を出力しない。ライトバッファ24は、ストア命令STによるデータD1を保持していないため、検出部SFIDETbは、検出信号WBSFI0−WBSFI7を出力しない。このため、SFI判定回路210は、無効信号SFIを出力しない(図17(c))。したがって、図15と同様に、完了判定部146は、ロード命令LDに対応して、アボート信号ABTを出力せず、完了信号STVを出力する(図17(d))。そして、データキャッシュ28から読み出されたデータが演算部12に転送され、ロード命令LDが完了する。
このように、図6に示すSFI判定回路210によりロード命令と先行するストア命令とのウェイWAYの一致の有無を検出することで、比較器を増やすことなく、アドレスの上位側のビットを利用してSFIの発生の有無を検出することができる。この結果、SFIの検出にアドレスの上位側のビットを用いない場合に発生する偽のSFIを抑止することができる。
図18は、図2に示す演算処理装置OPD2がストア命令STとロード命令LDとを順次に実行する場合の動作の別の例を示す。図13および図16と同一または同様の動作については、詳細な説明は省略する。図18では、まず、先頭アドレスが0x00F8の領域(図12(c))に8バイトのデータD1をストアするストア命令STが実行される。この後、データD1がデータキャッシュ28に書き込まれる前に、先頭アドレスが先行のストア命令STと同じの領域から8バイトのデータをロードするロード命令LDが実行される。ストア命令STの動作は、図13と同様である。ストア命令STとロード命令LDとのアドレスが互いに同じため、ヒットするウェイWAYは互いに同じである(図18(a)、(b))。
ストア命令STのデータD1は、サイクルT3からサイクルT10の間、ストアバッファ22に保持される(図18(c))。このため、エントリSE0に対応する検出部SFIDETa(図7)は、図16と同様に、一致信号VAMCH、BMMCH、WAYIDMCHを生成し、検出信号STBSFI0を出力する(図18(d))。
一方、サイクルT6に投入されるロード命令LDは、命令ユニット10が投入したロード命令LDのリクエストREQに基づく初めてのリクエストIUREQである。このため、ロード命令LDがSFIによりアボートしたことを示すフラグWIDは、テーブルSFBTBLのエントリSEに保持されていない。したがって、図8に示す判定制御部SFBCNTは、セレクタSEL1に論理0を選択させ、論理0の許可信号SFBENを出力する(図18(e))。
図9に示す検出部SFBDETは、論理0の許可信号SFBENに基づき、比較器CMP5による比較結果および検出部DET3による検出結果をマスクし、論理0の検出信号SFBWB0−SFBWB7を出力する(図18(f))。図8に示すSFB判定回路220は、論理0の検出信号SFBWB0−SFBWB7に基づき、重複検出部MLTDETおよびエンコーダSFBENCの動作を禁止する。そして、SFB判定回路220は、無効なバイパス要求信号SFBREQおよび無効な重複信号SFBMLTを出力する(図18(g)、(h))。例えば、重複信号SFBMLTは、論理0に設定される。エンコーダSFBENC(図8)が動作しないため、比較器CMP4は、無効な物理アドレスPA[40:13]をテーブルWBTBLから受け、アドレス一致信号SFBPAMCHを論理0に設定する(図18(i))。
パイプライン制御部144のSFB発生部SFBGEN(図8)は、論理0のバイパス要求信号SFBREQ、論理0の重複信号SFBMLT、および論理0のアドレス一致信号SFBPAMCHを受け、バイパス信号SFBを論理0に設定する(図18(j))。以上より、最初のロード命令LDでは、ライトバッファ24から演算部12へのデータのバイパスは実行されない。なお、図18に示すロード命令LDの投入タイミングでは、ライトバッファ24に、先行するストア命令STでのデータD1が転送されていないため、仮に検出部SFBDETの動作が有効になる場合にも、検出信号SFBWB0−SFBWB7は出力されない。
一方、バッファ制御部20は、検出信号STBSFI0に基づき無効信号SFIを出力する(図18(k))。そして、図16と同様に、アボート信号ABTが出力され、ロード命令LDはアボートされる(図18(l))。
フェッチポート142は、例えば、サイクルT13にロード命令LDをパイプライン制御部144に再び投入する(図18(m))。パイプライン制御部144の判定制御部SFBCNT(図8)は、ロード命令LDの前回のアボート要因(WID)がSFIの発生であるため、セレクタSEL1で論理1を選択し、論理1の許可信号SFBENを出力する(図18(n))。
一方、テーブルWBTBLのエントリWE0に対応する検出部SFBDET(図9)は、ストア命令STとロード命令LDとにおいて、論理アドレスVA[12:5]の一致と、バイトマスク情報BMの一致を検出する。検出部SFBDETは、論理1の許可信号SFBENに基づき、検出信号SFBWB0を論理1に設定する(図18(o))。すなわち、SFBの発生が検出される。
テーブルWBTBLのエントリWE0に対応する検出部SFIDETb(図6、図7)は、論理1の検出信号SFBWB0に基づき、検出信号WBSFI0の出力をマスクする(図18(p))。このため、無効信号SFIは出力されない(図18(q))。
SFB判定回路220は、検出信号SFBWB0に基づき、バイパス要求信号SFBREQを出力する(図18(r))。検出信号SFBWB0は、他の検出信号SFBWB1−SFBWB7と重複しないため、重複信号SFBMLTは出力されない。エンコーダSFBENC(図8)は、検出信号SFBWB0−SFBWB7の論理に基づき、ライトバッファ24のエントリWB0およびテーブルWBTBLのエントリWE0を選択する識別情報WBIDを生成する。
図8に示す比較器CMP4は、ロード命令LDでの物理アドレスPA[40:13]と、エントリWE0から読み出される物理アドレスPA[40:13]とが一致するため、アドレス一致信号SFBPAMCHを出力する(図18(s))。パイプライン制御部144のSFB発生部SFBGEN(図8)は、論理1のバイパス要求信号SFBREQ、論理0の重複信号SFBMLT、および論理1のアドレス一致信号SFBPAMCHを受け、バイパス信号SFBを論理1に設定する(図18(t))。そして、ライトバッファ24から演算部12へのデータのバイパスが実行される。すなわち、セレクタ部26(図8)は、バイパス要求信号SFBREQに基づき、ライトバッファ24から出力されるデータを有効なロードデータとして演算部12にバイパスする。
図11に示す完了判定部146は、オア回路OR4の全ての入力で論理0を受けるため、アボート信号ABTを出力せず、一致信号TLBMCHの受信に基づき命令ユニット10へ完了信号STVを出力する(図18(u))。そして、ロード命令LDが完了する。
図18に示されるように、ストア命令STと、後続のロード命令LDとの間で発生するSFBは、ストア命令STと後続のロード命令LDとの間隔が数サイクルであることが多い。この場合、ロード命令LDの投入タイミングは、ストアデータD1がストアバッファ22に保持され、ライトバッファ24に転送される前である。したがって、ストアバッファ22に保持されたデータに基づいて、ロード命令LDに対するSFIが発生し、ロード命令LDはアボートされる。このため、図8に示す判定制御部SFBCNTにより、最初のロード命令に対するSFBの判定をマスクしても、ロード命令LDによるデータの転送時間は増加せず、演算処理装置OPD2の処理性能が低下する可能性は低い。
図19は、図2に示す演算処理装置OPD2がストア命令STとロード命令LDとを順次に実行する場合の動作の別の例を示す。図13および図16と同一または同様の動作については、詳細な説明は省略する。図19では、まず、先頭アドレスが0x00F2の領域(図12(d))に8バイトのデータD1をストアするストア命令STが実行される。この後、データD1がデータキャッシュ28に書き込まれる前に、先頭アドレスが0x20F2の領域(図12(f))の領域から8バイトのデータをロードするロード命令LDが実行される。ストア命令STでヒットするウェイWAY0は、ロード命令LDでヒットするウェイWAY1と異なる(図19(a)、(b))。このため、図19では、SFIは発生せず、SFBも発生しない動作例である。アドレス0x00F2は、2進数で”0000 0000 1111 0010”であり、アドレス0x20F2は、2進数で”0010 0000 1111 0010”であり、論理アドレスVA[12:5]の値は互いに同じである。
命令ユニット10は、ストア命令STでのデータD1がライトバッファ24に保持されているときにロード命令LDのリクエストREQをフェッチポート142に出力する(図19(c))。フェッチポート142は、ロード命令LDのリクエストIUREQをパイプライン制御部144に出力する(図19(d))。
図7に示す検出部SFIDETbは、ロード命令LDでの論理アドレスVA[12:5]とテーブルWBTBLのエントリWE0に保持された論理アドレスVA[12:5]との一致を検出し、一致信号VAMCHを出力する(図19(e))。また、検出部SFIDETbは、ロード命令LDでのバイトマスク情報BMの値と、テーブルWBTBLのエントリWE0に保持されたバイトマスク情報BMとのいずれかのビットの一致を検出し、一致信号BMMCHを出力する(図19(f))。なお、ストアデータはデータキャッシュ28に記憶されているため、エントリWE0のフラグWAYIDVはセットされている。ロードデータはデータキャッシュ28に記憶されているため、ヒット信号HITが出力される。
一方、検出部SFIDETbは、ロード命令LDでヒットしたウェイWAYを示す識別情報WAYIDと、テーブルSTBTBLのエントリSE0に保持された識別情報WAYIDとの不一致を検出し、一致信号WAYIDMCHを出力しない(図19(g))。一致信号WAYIDMCHが生成されないため、エントリWE0に対応する検出部SFIDETbは、検出信号WBSFI0を出力しない(図19(h))。他のエントリSE1−SE19に対応する検出部SFIDETaも、検出信号WBSFI1−WBSFI19を出力しない。このため、SFI判定回路210は、無効信号SFIを出力しない(図19(i))。
命令制御部14は、ロード命令LDのアボート要因を示すフラグWIDを保持していないため、図8に示す判定制御部SFBCNTは、セレクタSEL1に論理0を選択させ、論理0の許可信号SFBENを出力する(図19(j))。論理0の許可信号SFBENにより、図9に示すSFB判定回路220の検出部SFBDETは、SFBを検出する動作を停止し、SFB判定回路220は、論理0のバイパス要求信号SFBREQを出力する(図19(k))。
したがって、ストア命令STと後続のロード命令LDでのアドレスが重複しない場合、ロード命令LDに対応して偽のSFIおよび偽のSFBは発生せず、完了判定部146は、アボート信号ABTを出力せず、完了信号STVを出力する(図19(l))。そして、データキャッシュ28から読み出されたデータが演算部12に転送され、ロード命令LDが完了する。
パイプライン制御部144に判定制御部SFBCNTを設けることで、図19に示されるように、SFIおよびSFBが発生しない場合、偽のSFIは発生せず、ロード命令LDをアボートさせることなく完了することができる。これに対して、例えば、判定制御部SFBCNTが、最初のロード命令LDに基づき論理0の許可信号SFBENを出力せずに、論理1の許可信号SFBENを出力する場合、後に説明する図28と同様に、最初のロード命令LDは、アボートされる。
図20は、図2に示す演算処理装置OPD2がストア命令STとロード命令LDとを順次に実行する場合の動作の別の例を示す。図13、図14および図16と同一または同様の動作については、詳細な説明は省略する。図20では、まず、先頭アドレスが0x00F8の領域(図12(c))に8バイトのデータD1をストアするストア命令STが実行される。この後、データD1がデータキャッシュ28に書き込まれる前に、先頭アドレスが0x00F8の領域から8バイトのデータをロードするロード命令LDが実行される。さらに、この後、先頭アドレスが0x00F8の領域に8バイトのデータD2をストアするストア命令STが実行される。2つのストア命令STの動作は、図14と同様である。ストア命令STおよびロード命令LDでヒットするウェイWAYは互いに等しい。このため、ストアデータがライトバッファ24に転送されるまで、SFIが発生し、ストアデータがライトバッファ24に転送された後、SFBが発生する。
先行するストア命令STのデータD1は、テーブルSTBTBLのフラグSTBVが論理1に設定される期間、例えば、ストアバッファ22のエントリSTB0に保持される(図20(a))。このため、サイクルT6においてフェッチポート142がパイプライン制御部144に投入したロード命令LDのリクエストIUREQに基づき、図27と同様に、SFIが発生し、ロード命令LDはアボートされる(図20(b)、(c))。
アボート信号ABTを受けたフェッチポート142は、例えば、サイクルT15にロード命令LDをパイプライン制御部144に再び投入する(図20(d))。サイクルT17において、最初のストア命令STのデータD1は、例えば、ライトバッファ24のエントリWE0に保持され、2番目のストア命令STのデータD2は、例えば、ライトバッファ24のエントリWE1に保持されている(図20(e)、(f))。このため、図8に示すSFB判定回路220は、2つの検出信号SFBWB0、SFBWB1を出力する。
SFB判定回路220のオア回路OR2は、検出信号SFBWB0、SFBWB1に基づきバイパス要求信号SFBREQを出力する(図20(g))。図8に示すSFB判定回路220の重複検出部MLTDETは、2つの検出信号SFBWB0、SFBWB1を重複して受け、重複信号SFBMLTを出力する(図20(h))。SFB判定回路220のエンコーダSFBENCは、検出信号SFBWB0、SFBWB1のいずれかに対応する識別情報WBIDを出力する。ライトバッファ24は、識別情報WBIDが示すエントリWEに保持されたデータ(D1またはD2)を出力し、テーブルWBTBLは、識別情報WBIDが示すエントリWE(WE0またはWE1)に保持された物理アドレスPA[40:13]を出力する。ロード命令LDでの物理アドレスPA[40:13]は、エントリWE0、WE1に保持された物理アドレスPA[40:13]のそれぞれと一致するため、アドレス一致信号SFBPAMCHが出力される(図20(i))。図11に示す完了判定部146は、バイパス要求信号SFBREQと重複信号SFBMLTとに基づき、完了信号STVを出力せず、アボート信号ABTを出力する(図20(j)、(k))。
パイプライン制御部144のSFB発生部SFBGEN(図8)は、重複信号SFBMLTに基づきバイパス信号SFBを論理0に設定し、ライトバッファ24から演算部12へのデータのバイパスを禁止する。なお、SFB判定回路220のオア回路OR2は、検出信号SFBWB0、SFBWB1に基づきバイパス要求信号SFBREQを出力する。セレクタ部26(図8)は、バイパス要求信号SFBREQに基づき、ライトバッファ24からのデータを演算部12に転送する。しかし、命令ユニット10は、ロード命令LDに対応する完了信号STVを受けないため、ロード命令LDに対応してセレクタ部26から転送される無効なデータを演算部12に破棄させる。
アボート信号ABTを受けたフェッチポート142は、例えば、サイクルT21にロード命令LDをパイプライン制御部144に再び投入する(図20(l))。サイクルT23において、最初のストア命令STのデータD1は、データキャッシュ28に書き込まれ、ライトバッファ24に保持されていない(図20(m))。一方、2番目のストア命令STのデータD2は、ライトバッファ24のエントリWE1に保持されている(図20(n))。このため、SFB判定回路220は、重複信号SFBMLTを出力せずに、バイパス要求信号SFBREQを出力する(図20(o)、(p))。ロード命令LDでの物理アドレスPA[40:13]は、エントリWE1に保持された物理アドレスPA[40:13]と一致するため、アドレス一致信号SFBPAMCHが出力される(図20(q))。
パイプライン制御部144のSFB発生部SFBGENは、論理1のバイパス要求信号SFBREQ、論理0の重複信号SFBMLT、および論理1のアドレス一致信号SFBPAMCHを受け、バイパス信号SFBを論理1に設定する(図20(r))。以上より、ライトバッファ24から演算部12へのデータD2のバイパスが実行される。図11に示す完了判定部146は、オア回路OR4の全ての入力で論理0を受けるため、アボート信号ABTを出力せず、一致信号TLBMCHの受信に基づき命令ユニット10へ完了信号STVを出力する(図20(s))。そして、バイパス動作を伴うロード命令LDが完了する。
図21は、図2に示す演算処理装置OPD2が実行するSFIの判定動作のフローの例を示す。例えば、図21に示すフローは、演算処理装置OPD2のハードウェアが、ロード命令LDがパイプライン制御部144に投入されたことに基づき実行する処理を示しており、各処理は並列に実行されてもよい。例えば、SFIの発生を判定する動作OP10、OP12、OP14、OP16は、順不同に実行され、あるいは並列に実行される。図21のフローは、フェッチポート142がロード命令LDをパイプライン制御部144に投入することで開始される。
動作OP10において、演算処理装置OPD2は、先行するストア命令STと後続のロード命令LDとの論理アドレスVA[12:5]が互いに一致するか否かを判定する。先行するストア命令STの論理アドレスVA[12:5]は、図5に示すテーブルSTBTBL、WBTBLの論理アドレスVAの記憶領域に保持される。例えば、動作OP10は、図7に示す比較器CMP1により実現される。論理アドレスVA[12:5]が一致しない場合、動作OP20において、演算処理装置OPD2は、無効信号SFIを論理0に設定し、SFIが発生しない場合の動作を実行する。例えば、図6に示すオア回路OR1が動作OP12を実行する。
また、動作OP12において、演算処理装置OPD2は、先行するストア命令STと後続のロード命令LDとのバイトマスク情報BMが互いに一致するか否かを判定する。先行するストア命令STのバイトマスク情報BMは、図5に示すテーブルSTBTBL、WBTBLのバイトマスク情報BMの記憶領域に保持される。例えば、動作OP12は、図7に示す検出器DET1により実現される。論理アドレスVA[12:5]が一致しない場合、動作OP20が実行される。
動作OP14において、演算処理装置OPD2は、先行するストア命令STと後続のロード命令LDとがキャッシュヒットするか否かを判定する。先行するストア命令STのキャッシュヒットの情報は、図5に示すテーブルSTBTBL、WBTBLにフラグWAYIDVとして保持される。例えば、動作OP14は、図7に示す検出器DET2により実現される。先行するストア命令STと後続のロード命令LDとのいずれかがキャッシュヒットしない場合、動作OP18が実行される。
動作OP16において、演算処理装置OPD2は、先行するストア命令STと後続のロード命令LDとの識別情報WAYIDが一致するか否かを判定する。先行するストア命令STの識別情報WAYIDは、図5に示すテーブルSTBTBL、WBTBLの識別情報WAYIDの記憶領域に保持される。例えば、OP16は、図7に示す検出器DET2により実現される。先行するストア命令STと後続のロード命令LDとの識別情報WAYIDが一致しない場合、動作OP20が実行される。
動作OP10、OP12、OP14、OP16の判定が全て肯定を示す場合、動作OP18において、演算処理装置OPD2は、無効信号SFIを論理1に設定し、SFIが発生した場合の動作を実行する。例えば、動作OP18は、図6に示すオア回路OR1により実現される。そして、演算処理装置OPD2は、SFIの判定結果に基づき、図15から図19に示す動作を実行する。
図22は、図2に示す演算処理装置OPD2が実行するSFBの判定動作のフローの例を示す。例えば、図22に示すフローは、演算処理装置OPD2のハードウェアが、ロード命令LDがパイプライン制御部144に投入されたことに基づき実行する処理を示しており、各処理は並列に実行されてもよい。例えば、SFBの発生を判定する動作OP36、OP38、OP40、OP42は、順不同に実行され、あるいは並列に実行される。図22のフローは、フェッチポート142が命令ユニット10からのリクエストREQに基づき最初のロード命令LDをパイプライン制御部144に投入することで開始される。
まず、演算処理装置OPD2は、ロード命令LDがパイプライン制御部144にロード命令LDが投入された場合、動作OP30において、SFBの発生を判定する前にデータキャッシュ28からのデータの読み出しを開始する。例えば、動作OP30は、図8に示す判定制御部SFBCNTが、ロード命令LDの最初のリクエストIUREQの発行時に許可信号SFBENを出力し、SFBの発生をマスクすることにより実現される。
動作OP30と並行して、演算処理装置OPD2は、動作OP32において、SFIが発生したか否かを判定する。例えば、動作OP32は、図11に示す完了判定部146により実現される。SFIが発生していない場合(SFI=0)、完了判定部146から完了信号STVが出力され、データキャッシュ28から読み出されたデータが演算部12に転送される。一方、SFIが発生した場合(SFI=1)、完了判定部146からアボート信号ABTが出力され、ロード命令LDがアボートされる。
ロード命令LDがアボートされた場合、演算処理装置OPD2は、動作OP34において、ロード命令LDを再投入する。例えば、動作OP34は、フェッチポート142により実現される。この後、演算処理装置OPD2は、再投入したロード命令LDにおいて、SFBの発生を判定する。
すなわち、動作OP36において、演算処理装置OPD2は、ロード命令LDの論理アドレスVA[12:5]とテーブルWBTBLのエントリWEに保持された論理アドレスVA[12:5]とが一致することを検出する。また、動作OP36において、演算処理装置OPD2は、ロード命令LDでのバイトマスク情報BMとテーブルWBTBLのエントリWEに保持されたバイトマスク情報BMとが一致することを検出する。ここで、図10に示す(a)、(b)、(c)、(d)に例示する条件に合致する場合、バイトマスク情報BMの一致が検出される。例えば、動作OP36は、図8に示す検出部SFBDETが許可信号SFBENを受けて動作することで実現される。論理アドレスVA[12:5]およびバイトマスク情報BMが一致した場合、動作OP38が実行される。論理アドレスVA[12:5]およびバイトマスク情報BMが一致しない場合、SFBは発生しないため、動作OP30が再び実行される。
次に、動作OP38において、一致が検出されたライトバッファ24のエントリWEからデータが読み出される。例えば、動作OP38は、図8に示すエンコーダSFBENCおよびセレクタ部26により実現される。
動作OP40において、演算処理装置OPD2は、ライトバッファ24内の1つのエントリWEに対応して1つのSFBが検出されたか否かを検出する。すなわち、演算処理装置OPD2は、重複信号SFBMLTが論理0であるか否かを検出する。例えば、動作OP40は、図11に示す完了判定部146により実現される。重複信号SFBMLTが論理0の場合、動作OP42が実行される。重複信号SFBMLTが論理1の場合、完了判定部146からアボート信号ABTが出力され、ロード命令LDがアボートされ、動作OP36が再び実行される。
動作OP42において、演算処理装置OPD2は、テーブルWBTBLのエントリWEに保持された物理アドレスPA[40:13]と、ロード命令LDの物理アドレスPA[40:13]とが一致することを検出する。例えば、動作OP42は、図11に示す完了判定部146により実現される。物理アドレスPA[40:13]が一致した場合、SFBが発生したため、動作OP44が実行される。物理アドレスPA[40:13]が一致しない場合、SFBは発生せず、完了判定部146からアボート信号ABTが出力され、ロード命令LDがアボートされ、動作OP36が再び実行される。
動作OP44では、演算処理装置OPD2は、動作OP32と同様に、SFIが発生したか否かを判定する。SFIが発生していない場合(SFI=0)、完了判定部146から完了信号STVが出力され、ライトバッファ24から読み出されたデータが演算部12に転送される。すなわち、SFBの発生によるデータのバイパスが実行される。一方、SFIが発生した場合(SFI=1)、完了判定部146からアボート信号ABTが出力され、ロード命令LDがアボートされる。
図23は、SFI判定回路の他の例を示す。図23に示すSFI判定回路211は、図6に示すSFI判定回路210の検出部SFIDETa、SFIDETbの代わりに検出部SFIDETc、SFIDETdを有する。検出部SFIDETcは、ヒット信号HITとフラグWAYIDVとを比較しない点、および識別情報WAYIDを比較しない点が、検出部SFIDETaと相違する。検出部SFIDETdは、ヒット信号HITとフラグWAYIDVとを比較しない点、および識別情報WAYIDを比較しない点が、検出部SFIDETbと相違する。
図24は、図23に示す検出部SFIDETc、SFIDETdの例を示す。検出部SFIDETcは、図7に示す検出部SFIDETaが有する検出部DET2を含まない。検出部SFIDETdは、図7に示す検出部SFIDETbが有する検出部DET2を含まない。このため、SFIの判定において、物理アドレスPA[40:13]が一致しない場合にもSFIの発生が検出され、図27に示されるように、偽のSFIが発生するおそれがある。
図25は、SFB判定回路の他の例を示す。図25に示すSFB判定回路221は、図8に示すSFB判定回路220の検出部SFBDETの代わりに検出部SFBDET2を有する。検出部SFBDET2は、検出信号SFBWB(SFBWB0−SFBWB7)の生成に許可信号SFBENを使用しないことを除き、図8に示す検出部SFBDETと同様である。許可信号SFBENが使用されないため、図8に示す判定制御部SFBCNTは、パイプライン制御部144から除かれてもよい。
図26は、図25に示す検出部SFBDET2の例を示す。検出部SFBDET2は、許可信号SFBENに基づき検出信号SFBWB0の出力をマスクする論理を図9に示す検出部SFBDETから削除している。このため、ストア命令STに構造する最初のロード命令LDに基づきSFBの発生の可能性が検出される場合がある。すなわち、図28に示す偽のSFBが発生するおそれがある。
図27は、図23に示すSFI判定回路211および図25に示すSFB判定回路221を有する演算処理装置がストア命令STとロード命令LDとを順次に実行する場合の動作の例を示す。図13および図16と同一または同様の動作については、詳細な説明は省略する。
図27では、図17と同様に、先頭アドレスを0x00F0とするストア命令STと、先頭アドレスが0x00F6とするロード命令LDとが順次に実行される。図27では、ストア命令STおよびロード命令LDでヒットするウェイWAYは互いに等しいが、ストア命令STおよびロード命令LDでヒットするウェイWAYは互いに異なっていてもよい(図27(a)、(b))。
ストア命令STのデータD1は、サイクルT3からサイクルT10の間、ストアバッファ22に保持される(図27(c))。このため、エントリSE0に対応する検出部SFIDETc(図24)は、一致信号VAMCH、BMMCHを生成し、検出信号STBSFI0を出力する(図27(d))。そして、バッファ制御部20は、検出信号STBSFI0に基づき無効信号SFIを出力する(図27(e))。ストア命令STのアドレスとロード命令LDのアドレスは互いに異なり、データの依存性はないため、無効信号SFIの出力は、偽のSFIの発生を示す。
図11に示す完了判定部146は、ロード命令LDに対応してバッファ制御部20から受ける無効信号SFIに基づきアボート信号ABTを出力し、完了信号STVを出力しない(図27(f))。命令ユニット10は、ロード命令LDに対応する完了信号STVを受けないため、ロード命令LDに対応してデータキャッシュ28から転送される無効なデータを演算部12に破棄させる。
アボート信号ABTを受けたフェッチポート142は、例えば、サイクルT13にロード命令LDをパイプライン制御部144に再び投入する(図27(g))。ストア命令STのデータD1は、サイクルT11からサイクルT17の間、ライトバッファ24に格納されている(図27(h))。このため、エントリWE0に対応する検出部SFIDETd(図24)は、一致信号VAMCH、BMMCHを生成し、検出信号WBSFI0を出力する(図27(i))。バッファ制御部20は、検出信号WBSFI0に基づき、完了判定部146に無効信号SFIを出力する(図27(j))。ストア命令STのアドレスとロード命令LDのアドレスは互いに異なり、データの依存性はないため、無効信号SFIの出力は、偽のSFIの発生を示す。
完了判定部146は、無効信号SFIに基づきアボート信号ABTを出力し、完了信号STVを出力せず、フェッチポート142がサイクルT13に発行したロード命令LDをアボートさせる(図27(k))。
アボート信号ABTを受けたフェッチポート142は、例えば、サイクルT22にロード命令LDをパイプライン制御部144に再び投入する(図27(l))。この時点で、ストア命令STのデータD1はデータキャッシュ28に格納されている(図27(m))。SFI判定回路211における図23に示す検出部SFIDETc、SFIDETdの各々において、一致信号VAMCH、BMMCHの少なくともいずれかが不一致を示す。このため、SFI判定回路211は、検出信号STBSFI0−STBSFI19、WBSFI0−WBSFI7を出力せず、無効信号SFIは出力されない(図27(n))。このため、完了判定部146は、ロード命令LDに対応して、アボート信号ABTを出力せず、完了信号STVを出力する(図27(o))。そして、データキャッシュ28から読み出されたデータが演算部12に転送され、ロード命令LDが完了する。
図28は、図23に示すSFI判定回路211および図25に示すSFB判定回路221を有する演算処理装置がストア命令STとロード命令LDとを順次に実行する場合の動作の別の例を示す。図13、図16および図19と同一または同様の動作については、詳細な説明は省略する。図28では、図19と同様に、先頭アドレスを0x00F2とするストア命令STと、先頭アドレスが0x20F2とするロード命令LDとが順次に実行される。ストア命令STとロード命令LDとでヒットするウェイWAY(すなわち識別情報WAYID)は互いに異なるが、ストア命令STおよびロード命令LDでヒットするウェイWAYは互いに同じでもよい(図28(a)、(b))。アドレス0x00F2、0x20F2の論理アドレスVA[12:5]の値は互いに同じである。
命令ユニット10は、ストア命令STでのデータD1がライトバッファ24に保持されているときにロード命令LDのリクエストREQをフェッチポート142に出力する(図28(c))。フェッチポート142は、ロード命令LDのリクエストIUREQをパイプライン制御部144に出力する(図28(d))。
エントリWE0に対応する検出部SFIDETd(図24)は、一致信号VAMCH、BMMCHを生成する(図28(e))。図25に示すSFB判定回路221は、ストア命令STとロード命令LDの論理アドレスVA[12:5]の一致およびバイトマスク情報BMの一致に基づき、検出信号SFBWB0を出力する(図28(f))。さらに、SFB判定回路221は、検出信号SFBWB0に基づき、バイパス要求信号SFBREQを出力する(図28(g))。すなわち、図25に示すSFB判定回路221では、ストア命令STとロード命令LDでのアドレスが重複しない場合に、偽のSFBが発生する。
一方、図25に示す比較器CMP4は、ストア命令STとロード命令LDの物理アドレスPA[40:13]が一致しないため、アドレス一致信号SFBPAMCHを論理0に設定する(図28(h))。このため、論理0のアドレス一致信号SFBPAMCHにより、バイパス信号SFBは出力されない(図28(i))。
エントリWE0に対応する図24に示す検出部SFIDETdは、論理1の検出信号SFBWB0に基づき検出信号WBSFI0の出力をマスクする。このため、検出信号WBSFI0は論理0に保持される(図28(j))。図23に示すSFI判定回路211は、論理0の検出信号WBSFI0に基づき、無効信号SFIを論理0に保持する(図28(k))。図11に示す完了判定部146は、論理1のバイパス要求信号SFBREQと、論理0のアドレス一致信号SFBPAMCHに基づき、アボート信号ABTを出力する(図28(l))。すなわち、偽のSFBの発生により、ロード命令LDは、アボートされる。
アボート信号ABTを受けたフェッチポート142は、例えば、サイクルT22にロード命令LDをパイプライン制御部144に再び投入する(図28(m))。この時点で、ストア命令STのデータD1はデータキャッシュ28に格納されている(図28(n))。SFI判定回路211における図24に示す検出部SFIDETc、SFIDETdの各々において、一致信号VAMCH、BMMCHの少なくともいずれかが不一致を示す(図28(o))。このため、SFI判定回路211は、検出信号STBSFI0−STBSFI19、WBSFI0−WBSFI7を出力せず、無効信号SFIは出力されない(図28(p)、(q))。
また、図25に示すSFB判定回路221は、検出部SFBDET2が検出信号SFBWB0−SFBWB7を出力しないため、バイパス要求信号SFBREQを出力しない(図28(r))。完了判定部146のアンド回路AND4は、ヒット信号HITの論理1に基づき、論理0を出力する。このため、完了判定部146のオア回路OR4は、論理0を出力し、完了判定部146は、ロード命令LDに対応して、アボート信号ABTを出力せず、完了信号STVを出力する(図28(s))。そして、データキャッシュ28から読み出されたデータが演算部12に転送され、ロード命令LDが完了する。
図29は、図23に示すSFI判定回路211および図25に示すSFB判定回路221を有する演算処理装置が実行するSFIの判定動作のフローの例を示す。図21と同一または同様の処理については、詳細な説明は省略する。図29のフローは、フェッチポート142がロード命令LDをパイプライン制御部144に投入することで開始される。
図29の処理は、図21の動作OP14、OP16が存在しないことを除き、図21と同様である。すなわち、図29のSFIの判定は、データキャッシュ28がヒットしたか否かの情報を用いない。この場合、物理アドレスPA[40:13]が一致しない場合にもSFIの発生が検出されるため、図27に示されるように、偽のSFIが発生する。
図30は、図23に示すSFI判定回路211および図25に示すSFB判定回路221を有する演算処理装置が実行するSFBの判定動作のフローの例を示す。図22と同一または同様の処理については、詳細な説明は省略する。図30の動作OP30−OP44は、図22の動作OP30−OP44と同様である。図30のフローは、フェッチポート142が命令ユニット10からのリクエストREQに基づき最初のロード命令LDをパイプライン制御部144に投入することで開始される。
図30の処理では、後続のロード命令LDが投入された場合、まず、SFBの判定が実行される。このため、例えば、図24に示すSFB判定回路221がSFBの発生の可能性を検出してバイパス要求信号SFBREQを出力した後に、物理アドレスPA[40:13]が不一致となる場合がある。この場合、図11に示す完了判定部146は、アボート信号ABTを出力し、図28に示されるように、偽のSFBが発生する。
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。すなわち、アドレスの上位側のビットを比較する比較器を設けることなく、データキャッシュ28のヒット情報HITおよび識別情報WAYIDを用いて、SFI判定回路210によりアドレスの上位側のビットの一致を判定することができる。これにより、回路規模を増加させることなく、SFIの判定をアドレスの上位側のビットを含めて判定することができ、偽のSFIが発生することを抑止することができる。この結果、データキャッシュ28のアクセス効率が低下することを抑止することができ、演算処理装置OPD2の性能の低下および性能のばらつきを抑止することができる。
さらに、図2から図30に示す実施形態では、SFB判定回路220は、ストア命令STに後続する最初のロード命令LDにおいて、検出部SFBDETによるSFBの判定をマスクする。これにより、偽のSFBの発生を抑止することができる。この結果、データキャッシュ28のアクセス効率が低下することを抑止することができ、演算処理装置OPD2の性能の低下および性能のばらつきを抑止することができる。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。