(57)【特許請求の範囲】
【請求項１】
命令を発行する命令制御部と、
前記命令制御部から発行されるストア命令の対象であるストア対象データがストアされるキャッシュメモリと、
前記命令制御部と前記キャッシュメモリとの間で、前記ストア対象データを格納するエントリを複数有するバッファ部と、
前記命令制御部からロード命令が発行された場合、複数の前記エントリを検索して前記ロード命令の対象であるロード対象データが有るとき、前記ロード対象データのいずれか１つを選択する選択処理部と、
前記選択処理部が選択したロード対象データを前記バッファ部から読み出して出力する読み出し制御部とを有し、
前記命令制御部は、前記ロード命令を発行する際、該ロード命令の直近の前記ストア命令に対して割り当てた前記エントリを示す情報を前記ロード命令に付加して発行し、
前記読み出し制御部は、前記エントリを示す情報によって指定される前記エントリに格納されているデータが前記ロード対象データである場合、該エントリからデータを読み出して出力することを特徴とする演算処理装置。
【請求項２】
前記選択処理部は、
前記エントリ毎に格納されているデータが前記ロード対象データであるか否かを判定する判定部と、
前記判定部が前記ロード対象データであると判定したデータのいずれか１つを選択する決定部とを有することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記命令制御部は、
前記エントリを示す情報を保持し、前記ストア命令に対して前記エントリを割り当てる制御を行う毎に保持する前記エントリを示す情報を更新する情報保持部を有し、
前記ロード命令を発行する際、前記情報保持部が保持している前記エントリを示す情報を前記ロード命令とともに出力することを特徴とする請求項１又は２記載の演算処理装置。
【請求項４】
前記バッファ部は、前記ストア対象データを格納するエントリを複数有するストアバッファ部、及び前記ストアバッファ部と前記キャッシュメモリとの間で該ストア対象データを格納するエントリを複数有するライトバッファ部を有し、
前記選択処理部が前記ロード対象データを選択してから、所定の期間は前記ストアバッファ部から前記ライトバッファ部へのデータの書き込みを抑止する書き込み制御部を有することを特徴とする請求項１〜３の何れか１項に記載の演算処理装置。
【請求項５】
前記書き込み制御部は、前記ストアバッファ部から前記ライトバッファ部へのデータの書き込みの抑止を解除してから、所定の期間は前記ストアバッファ部から前記ライトバッファ部へのデータの書き込みの抑止を禁止することを特徴とする請求項４記載の演算処理装置。
【請求項６】
前記選択処理部による複数の前記エントリの検索及び前記ロード対象データの選択と、前記読み出し制御部による前記バッファ部からの前記ロード対象データの読み出しとを、並行して実行することを特徴とする請求項１〜５の何れか１項に記載の演算処理装置。
【請求項７】
命令を発行する命令制御部と、
前記命令制御部から発行されるストア命令の対象であるストア対象データがストアされるキャッシュメモリと、
前記命令制御部と前記キャッシュメモリとの間で前記ストア対象データを格納するエントリを複数有するストアバッファ部、及び前記ストアバッファ部と前記キャッシュメモリとの間で該ストア対象データを格納するエントリを複数有するライトバッファ部を有するバッファ部と、
前記命令制御部からロード命令が発行された場合、複数の前記エントリを検索して前記ロード命令の対象であるロード対象データが有るとき、前記ロード対象データのいずれか１つを選択する選択処理部と、
前記選択処理部が選択したロード対象データを前記バッファ部から読み出して出力する読み出し制御部と、
前記選択処理部が前記ロード対象データを選択してから、所定の期間は前記ストアバッファ部から前記ライトバッファ部へのデータの書き込みを抑止する書き込み制御部とを有することを特徴とする演算処理装置。
【請求項８】
前記書き込み制御部は、前記ストアバッファ部から前記ライトバッファ部へのデータの書き込みの抑止を解除してから、所定の期間は前記ストアバッファ部から前記ライトバッファ部へのデータの書き込みの抑止を禁止することを特徴とする請求項７記載の演算処理装置。
【請求項９】
前記選択処理部による複数の前記エントリの検索及び前記ロード対象データの選択と、前記読み出し制御部による前記バッファ部からの前記ロード対象データの読み出しとを、並行して実行することを特徴とする請求項７又は８記載の演算処理装置。
【請求項１０】
命令を発行する命令制御部と、前記命令制御部から発行されるストア命令の対象であるストア対象データがストアされるキャッシュメモリと、前記命令制御部と前記キャッシュメモリとの間で、前記ストア対象データを格納するエントリを複数有するバッファ部とを有する演算処理装置の制御方法であって、
前記命令制御部からロード命令が発行された場合、複数の前記エントリを検索して前記ロード命令の対象であるロード対象データが有るとき、前記ロード対象データのいずれか１つを選択し、
前記選択したロード対象データを前記バッファ部から読み出して出力し、
かつ、前記命令制御部が前記ロード命令を発行する際、該ロード命令の直近の前記ストア命令に対して割り当てた前記エントリを示す情報を前記ロード命令に付加して発行し、前記エントリを示す情報によって指定される前記エントリに格納されているデータが前記ロード対象データである場合、該エントリからデータを読み出して出力することを特徴とする演算処理装置の制御方法。
【請求項１１】
命令を発行する命令制御部と、前記命令制御部から発行されるストア命令の対象であるストア対象データがストアされるキャッシュメモリと、前記命令制御部と前記キャッシュメモリとの間で前記ストア対象データを格納するエントリを複数有するストアバッファ部、及び前記ストアバッファ部と前記キャッシュメモリとの間で該ストア対象データを格納するエントリを複数有するライトバッファ部を有するバッファ部とを有する演算処理装置の制御方法であって、
前記命令制御部からロード命令が発行された場合、複数の前記エントリを検索して前記ロード命令の対象であるロード対象データが有るとき、前記ロード対象データのいずれか１つを選択し、
前記選択したロード対象データを前記バッファ部から読み出して出力し、
前記ロード対象データを選択してから、所定の期間は前記ストアバッファ部から前記ライトバッファ部へのデータの書き込みを抑止することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置には、キャッシュメモリ又は主記憶装置にデータのストアを行う際にストア対象のデータを保持するストアバッファを設けたものがある。ストアバッファを設けることで、キャッシュメモリ又は主記憶装置に実際にデータをストアする前に、演算処理装置の命令制御部はストア処理を完了することができる。
【０００３】
このような演算処理装置では、キャッシュメモリ又は主記憶装置へのストア処理が終わっていないストアバッファに保持されたデータが、ストア処理の後続するロード処理におけるロード（フェッチ）対象のデータであることが検出されると、ストアバッファからロード対象のデータを取り出してロードを行うストアフェッチバイパス（Store Fetch Bypass、以下、ＳＦＢとも称す）制御機能が設けられている（例えば、特許文献１参照）。これにより、演算処理装置の命令制御部は、キャッシュメモリ又は主記憶装置へのデータのストア処理の完了を待たずに、ロード（フェッチ）処理を完了させることができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−４０１４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
演算処理装置において複数の命令を同時実行するようになってくると、同一の記憶領域に対するストア要求やロード要求が同時に複数発行されることがある。複数のロード要求が同一の記憶領域をロード対象としているが、実行順序等に応じてストアバッファの異なるデータが対応する場合、ＳＦＢ制御においてロード要求毎にストアバッファのどのデータを読み出すべきかを同時に正確に指し示すことは困難である。
【０００６】
したがって、同一の記憶領域を対象とするストア要求やロード要求が複数存在する場合、先行するストア要求を実際に処理して、その記憶領域に対するストア要求のうち、キャッシュメモリ又は主記憶装置へのストア処理待ちでストアバッファにデータが残っているストア要求が１つになるまで待たなければロード要求を正しく処理することができないという問題があった。すなわち、ＳＦＢ候補のデータが複数存在する場合には、ストア要求が処理されてＳＦＢ候補のデータが１つになるまでＳＦＢ制御によるデータのロードが抑止され、演算処理装置の命令制御部がロード要求を完了させるまでの時間が増大する。
【０００７】
１つの側面では、本発明の目的は、命令制御部とキャッシュメモリとの間のバッファにロード命令の対象であるロード対象データが複数存在しても、ストア処理を待たずに１つのロード対象データを適切に選択してバッファからのロード対象データのロードを実行することができる演算処理装置を提供することにある。
【課題を解決するための手段】
【０００８】
演算処理装置の一態様は、命令を発行する命令制御部と、命令制御部から発行されるストア命令の対象であるストア対象データがストアされるキャッシュメモリと、命令制御部とキャッシュメモリとの間でストア対象データを格納するエントリを複数有するバッファ部と、ロード命令の対象であるロード対象データを選択する選択処理部と、バッファ部からロード対象データを読み出して出力する読み出し制御部とを有する。選択処理部は、命令制御部からロード命令が発行された場合、複数のエントリを検索してロード対象データが有るとき、ロード対象データのいずれか１つを選択し、読み出し制御部は、選択したロード対象データをバッファ部から読み出して出力する。また、命令制御部は、ロード命令を発行する際、該ロード命令の直近のストア命令に対して割り当てたエントリを示す情報をロード命令に付加して発行し、読み出し制御部は、エントリを示す情報によって指定されるエントリに格納されているデータがロード対象データである場合、該エントリからデータを読み出して出力する。
【発明の効果】
【０００９】
発明の一態様においては、命令制御部とキャッシュメモリとの間のバッファにロード対象データが複数存在してもストア処理を待たずに１つのロード対象データを適切に選択してバッファからのロード対象データのロードを実行することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施形態における演算処理装置の構成例を示す図である。
【図２】本実施形態におけるＳＦＢ制御方式を説明するための図である。
【図３】本実施形態における命令制御部の構成例を示す図である。
【図４】本実施形態におけるＳＦＢ制御に係る構成例を示す図である。
【図５】本実施形態におけるロード命令の処理例を示すフローチャートである。
【図６】本実施形態におけるＳＦＢ制御によるロード処理の例を示すタイムチャートである。
【図７】本実施形態におけるＳＦＢ制御によるロード処理の例を示すタイムチャートである。
【図８】本実施形態におけるストアバッファからライトバッファへのストア制御に係る構成例を示す図である。
【図９】本実施形態におけるＳＦＢ候補の決定方法を説明するための図である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施形態を図面に基づいて説明する。
図１は、本発明の一実施形態における演算処理装置としてのプロセッサの構成例を示すブロック図である。プロセッサ１１０は、命令制御部１１１、演算部１１２、１次キャッシュ部１１３、及び２次キャッシュ部１１７を有する。プロセッサ１１０は、命令パイプラインを有し、主記憶装置（メインメモリ）１２０と接続される。主記憶装置１２０は、キャッシュメモリと比較して大容量のデータを記憶可能なメモリであり、命令やデータを記憶する。主記憶装置１２０は、例えばＲＡＭ（Random Access Memory）である。
【００１２】
命令制御部１１１は、供給される命令をデコードし、デコードした命令を演算部１１２や１次キャッシュ部１１３に発行する。命令制御部１１１は、例えばデータのストアを行うストア命令やデータのロードを行うロード命令を１次キャッシュ部１１３に発行する。演算部１１２は、命令制御部１１１から出力された命令に従って、算術演算、論理演算、アドレス計算等の各種演算を行い、演算結果を１次キャッシュ部１１３の１次データキャッシュメモリ１１６に格納する。
【００１３】
１次キャッシュ部１１３は、１次キャッシュ制御部１１４、１次命令キャッシュメモリ１１５、及び１次データキャッシュメモリ１１６を有する。１次キャッシュ制御部１１４は、命令制御部１１１から出力された命令に応じて、１次命令キャッシュメモリ１１５及び１次データキャッシュメモリ１１６に係る制御を行う。１次キャッシュ制御部１１４は、それぞれ複数のエントリを有するストアバッファ及びライトバッファを有する。１次キャッシュ制御部１１４は、例えば１次データキャッシュメモリ１１６へのデータのストア制御や、ロード対象のデータがストアバッファやライトバッファに存在する場合にそのデータを取り出してロードを行うストアフェッチバイパス（Store Fetch Bypass：ＳＦＢ）制御を行う。
【００１４】
１次命令キャッシュメモリ１１５は、２次キャッシュメモリよりも高速なアクセスが可能なキャッシュメモリであり、主記憶装置１２０に記憶されている命令の一部を格納する。１次データキャッシュメモリ１１６は、２次キャッシュメモリよりも高速なアクセスが可能なキャッシュメモリであり、主記憶装置１２０に記憶されているデータの一部を格納する。２次キャッシュ部１１７は、主記憶装置１２０に記憶されている命令及びデータの一部を格納する２次キャッシュメモリを有する。２次キャッシュ部１１７は、２次キャッシュメモリに格納されている命令やデータ（又は主記憶装置１２０から読み出した命令やデータ）を１次キャッシュ部１１３に供給したり、主記憶装置１２０に対するデータのストア処理を行ったりする。
【００１５】
図２を参照して、本実施形態におけるＳＦＢ制御方式について説明する。本実施形態におけるデータのストア処理では、命令制御部２０１からストア要求（ストア命令）が送られると、それに対応して演算部２０２から送られるストア対象のデータが、１次キャッシュ制御部２０３内のストアバッファ部２０４及びライトバッファ部２０５を介して１次データキャッシュメモリ２０７にストアされる。本実施形態において、演算部２０２から送られたストア対象のデータは、ストアバッファ部２０４が有する複数のエントリのいずれかに格納された後に、ライトバッファ部２０５が有する複数のエントリのいずれかに格納され、その後１次データキャッシュメモリ２０７に格納される。
【００１６】
また、本実施形態におけるデータのロード処理では、命令制御部２０１からロード要求（ロード命令）が送られると、１次キャッシュ制御部２０３は、要求で指定されたストアポート番号のストアバッファのエントリ又はライトバッファのエントリに格納されているデータが、ＳＦＢ候補のデータ（ロード対象のデータ）であるか否かを判定する。ＳＦＢ候補のデータであるか否かの基本的な判定条件としては、（１）ストアする記憶領域の範囲内にロードしたい記憶領域が包含されている、（２）ストア対象のデータが既にレジスタにセットされている（データ受信済）、（３）ストア要求が例外などを起こさずに終了できる、がある。例えば、１次キャッシュ制御部２０３は、指定されたストアバッファのエントリ又はライトバッファのエントリに格納されている仮想アドレス（論理アドレス）ＶＡやデータ長情報ＱＢＭ等をチェックして、格納されているデータが、ロード対象のデータと同一の記憶領域にストアを行うストア処理待ちのデータであり、かつデータ長に係る条件を満足するか否かを判定する。ＳＦＢ候補のデータであると１次キャッシュ制御部２０３が判定した場合、指定されたストアバッファのエントリ又はライトバッファのエントリに格納されているデータが演算部２０２に送られる。
【００１７】
また、この判定処理と並行して、１次キャッシュ制御部２０３は、ストアバッファ部２０４が有する複数のエントリ及びライトバッファ部２０５が有する複数のエントリを検索し、それぞれに格納されているデータがＳＦＢ候補のデータとなり得るか否かを判定する。具体的には、１次キャッシュ制御部２０３のＳＦＢ候補選択処理部２０６が、ロード要求に係るアドレスやデータ長情報等を参照し、エントリ毎に、仮想アドレス（論理アドレス）ＶＡやデータ長情報ＱＢＭ等をチェックしてＳＦＢ候補のデータとなり得るか否かを判定する。さらに、ＳＦＢ候補選択処理部２０６は、ＳＦＢ候補のデータとなり得るものが複数ある場合、そのうちからロード命令に対して直近の（プログラム順で最も近い）ストア命令に係る１つのデータを選択して、ＳＦＢ候補のデータとする。そして、決定したＳＦＢ候補のデータが格納されているストアバッファのエントリ又はライトバッファのエントリを指定するストアポート番号を持つ要求を発行させる。
【００１８】
なお、要求で指定されたストアポート番号のストアバッファのエントリ又はライトバッファのエントリに格納されているデータがＳＦＢ候補のデータではなく、ＳＦＢ候補のデータとなり得るデータを格納しているストアバッファのエントリ及びライトバッファのエントリもないと１次キャッシュ制御部２０３が判定した場合、１次キャッシュ制御部２０３は、１次データキャッシュメモリ２０７に対するデータのロード処理を実行する。
【００１９】
図３は、本実施形態における命令制御部２０１の構成例を示すブロック図である。なお、図３においては、メモリアクセス命令の実行に係る構成を示しているが、本実施形態における命令制御部２０１は、例えば演算命令や分岐命令等の他の命令の実行に係る構成も有している。
【００２０】
図３において、命令制御部２０１は、命令デコード部３０１、リザベーションステーション（ＲＳＡ）３０２、ポート割り当て部３０３、及びポート番号保持部３０４を有する。命令デコード部３０１は、供給される命令をデコードし、デコードした命令をそれぞれの機能の実行に対応したリザベーションステーションに格納する。デコードした命令が、例えばメモリアクセス命令（ロード命令、ストア命令）である場合、オペランドアドレス生成用のリザベーションステーション（ＲＳＡ）３０２に格納され、例えば演算命令である場合、図示しない演算用のリザベーションステーション（ＲＳＥ／ＲＳＦ）に格納される。リザベーションステーション（ＲＳＡ）３０２は、格納されたメモリアクセス命令が実行可能な状態になると１次キャッシュ部に対して該メモリアクセス命令を発行する。
【００２１】
ポート割り当て部３０３は、命令デコード部３０１でデコードしたメモリアクセス命令に対するポートの割り当てを行う。ポート割り当て部３０３は、命令デコード部３０１でデコードした命令がロード命令である場合、１次キャッシュ部で制御を行うフェッチポート（ＦＰ）のエントリ番号を割り当てる制御を行う。また、ポート割り当て部３０３は、命令デコード部３０１でデコードした命令がストア命令である場合、フェッチポート（ＦＰ）及びストア対象のデータを格納するためのストアポート（ＳＰ）のエントリ番号をそれぞれ割り当てる制御を行う。ここで、ストアポート（ＳＰ）のエントリ番号は、フェッチポート（ＦＰ）にも登録される。
【００２２】
ポート番号保持部３０４は、命令デコード部３０１でデコードした命令における最後のストア命令（直近のストア命令）に割り当てたストアポート（ＳＰ）のエントリ番号を保持する。ポート番号保持部３０４が保持するストアポート（ＳＰ）のエントリ番号は、命令デコード部３０１でデコードした命令がストア命令であるとき、そのストア命令に割り当てられたストアポート（ＳＰ）のエントリ番号に更新される。ポート番号保持部３０４が保持しているストアポート（ＳＰ）のエントリ番号は、命令制御部２０１が発行するロード命令に付加される。
【００２３】
すなわち、本実施形態では、リザベーションステーション（ＲＳＡ）３０２は、ストア命令を発行する際にポート割り当て部３０３により割り当てられたフェッチポート（ＦＰ）及びストアポート（ＳＰ）のエントリ番号を通知する。また、リザベーションステーション（ＲＳＡ）３０２は、ロード命令を発行する際にポート割り当て部３０３により割り当てられたフェッチポート（ＦＰ）のエントリ番号に加え、ポート番号保持部３０４が保持しているストアポート（ＳＰ）のエントリ番号を通知する。このように本実施形態では、命令制御部２０１がロード命令を発行する際には、直近のストア命令に割り当てられたストアポート（ＳＰ）のエントリ番号を付加して発行する。
【００２４】
なお、複数の命令を同時にデコードする場合において、ストア命令の後続の命令がロード命令であれば、そのロード命令には、ポート番号保持部３０４が保持しているストアポート（ＳＰ）のエントリ番号ではなく、同時にデコードしたストア命令に割り当てられたストアポート（ＳＰ）のエントリ番号を割り当てることで、直近のストア命令のストアポート（ＳＰ）のエントリ番号を持たせることが可能である。
【００２５】
図４は、本実施形態におけるＳＦＢ制御に係る構成例を示す図である。セレクタ４０１は、パイプラインに投入される要求が命令制御部２０１からの要求ＲＥＱであるか否かに応じた選択処理を行い、ストアポート番号ＳＰＩＤ、選択制御信号ＳＥＬＡ、ＳＦＢリターン信号ＳＦＢＲを出力する。選択制御信号ＳＥＬＡは、選択対象がライトバッファであるかストアバッファであるかを示す信号であり、本実施形態では信号ＳＥＬＡが“１”である場合、ライトバッファを選択対象とし、信号ＳＥＬＡが“０”である場合、ストアバッファを選択対象とする。また、ＳＦＢリターン信号ＳＦＢＲは、ＳＦＢ制御に係るロード処理であるか否かを示す信号であり、本実施形態では信号ＳＦＢＲが“１”である場合、ＳＦＢ制御に係るロード処理であるとし、信号ＳＦＢＲが“０”である場合、ＳＦＢ制御に係るロード処理でないとする。
【００２６】
パイプラインに投入される要求が命令制御部２０１からの要求ＲＥＱである場合、セレクタ４０１は、命令制御部２０１から送付されるストアポート番号ＩＵ＿ＳＰＩＤをストアポート番号として出力し、選択制御信号ＳＥＬＡを“０”にし、ＳＦＢリターン信号ＳＦＢＲを“１”にする。一方、パイプラインに投入される要求が命令制御部２０１からの要求ＲＥＱでない場合、セレクタ４０１は、フェッチポート４０７から読み出したストアポート番号ＳＵ＿ＳＰＩＤ、選択制御信号ＳＵ＿ＷＢＳＥＬ、及びＳＦＢリターン信号ＳＵ＿ＳＦＢＲを、ストアポート番号ＳＰＩＤ、選択制御信号ＳＥＬＡ、及びＳＦＢリターン信号ＳＦＢＲとしてそれぞれ出力する。
【００２７】
セレクタ４０２は、ストアポート番号ＳＰＩＤに対応するストアバッファ２０４Ｂのエントリ又はライトバッファ２０５Ｂのエントリから読み出した仮想アドレス（論理アドレス）ＶＡ、データ長情報ＱＢＭ、及びフラグ情報ＦＬＧ等を、選択制御信号ＳＥＬＡに応じて選択し出力する。選択制御信号ＳＥＬＡが“１”、すなわち選択対象がライトバッファである場合、セレクタ４０２は、ライトバッファ２０５Ｂから読み出した仮想アドレスＶＡ、データ長情報ＱＢＭ、及びフラグ情報ＦＬＧ等を選択して出力する。また、選択制御信号ＳＥＬＡが“０”、すなわち選択対象がストアバッファである場合、セレクタ４０２は、ストアバッファ２０４Ｂから読み出した仮想アドレスＶＡ、データ長情報ＱＢＭ、及びフラグ情報ＦＬＧ等を選択して出力する。
【００２８】
セレクタ４０３は、パイプラインに投入される要求が命令制御部２０１からの要求ＲＥＱであるか否かに応じて、アドレス生成部（ＥＡＧ）又はレジスタの出力ＳＵ＿ＡＤを選択し出力する。パイプラインに投入される要求が命令制御部２０１からの要求ＲＥＱである場合、セレクタ４０３は、アドレス生成部（ＥＡＧ）から出力される仮想アドレスＶＡ及びデータ長情報ＱＢＭを選択して出力する。また、パイプラインに投入される要求が命令制御部２０１からの要求ＲＥＱでない場合、セレクタ４０３は、レジスタから出力される仮想アドレスＶＡ及びデータ長情報ＱＢＭを選択して出力する。レジスタには、パイプラインに命令制御部２０１からの要求ＲＥＱが投入されるときにアドレス生成部（ＥＡＧ）によって生成された仮想アドレスＶＡ及びデータ長情報ＱＢＭが保持されている。
【００２９】
ＳＦＢ判定部４０４は、セレクタ４０１からのＳＦＢリターン信号ＳＵ＿ＳＦＢＲ、セレクタ４０２の出力、及びセレクタ４０３の出力に基づいて、ＳＦＢ制御によるストアバッファ２０４Ａのエントリ又はライトバッファ２０５Ｂのエントリからのデータのロードが可能であるか否かを判定し、判定結果に応じた選択制御信号ＳＥＬＢを出力する。ＳＦＢ判定部４０４は、ＳＦＢリターン信号ＳＵ＿ＳＦＢＲが“１”、すなわちＳＦＢ制御に係るロード処理であることを示し、セレクタ４０２から出力された仮想アドレスＶＡ、データ長情報ＱＢＭ、及びフラグ情報ＦＬＧ等、及びセレクタ４０３から出力された仮想アドレスＶＡ及びデータ長情報ＱＢＭを基に有効なＳＦＢ候補のデータがあると判断した場合、ＳＦＢ制御によるデータのロードが可能であると判定する。
【００３０】
ＳＦＢ候補判定部４０５は、ストアバッファのエントリ及びライトバッファのエントリを検索し、それぞれに格納されているデータがＳＦＢ候補のデータとなり得るか否かを判定する。具体的には、ＳＦＢ候補判定部４０５は、セレクタ４０３から出力された仮想アドレスＶＡ及びデータ長情報ＱＢＭを参照し、エントリ毎に仮想アドレスＶＡやデータ長情報ＱＢＭ等をチェックしてＳＦＢ候補のデータとなり得るか否かを判定する。また、ＳＦＢ候補判定部４０５は、ＳＦＢ候補のデータとなり得るデータがあった場合、ＳＦＢサーチヒット信号ＳＦＢＳＨを出力するとともに、ＳＦＢ候補のデータとなり得るデータが格納されたストアバッファのエントリ及びライトバッファのエントリに対応するストアポート番号を出力する。
【００３１】
ＳＦＢ候補決定部４０６は、ＳＦＢ候補判定部４０５によりＳＦＢ候補のデータとなり得ると判定されたデータのいずれか１つのデータをＳＦＢ候補のデータとして選択する。ＳＦＢ候補決定部４０６は、ＳＦＢ候補判定部４０５から出力されたＳＦＢ候補のデータとなり得るデータが格納されたストアバッファのエントリ及びライトバッファのエントリに対応するストアポート番号のうちからプログラム順で最も近い位置にあるストア命令に対して割り当てられたストアポート番号を選択してＳＦＢ候補のストアポート番号ＳＦＢ＿ＳＰＩＤとして出力する。また、ＳＦＢ候補決定部４０６は、選択したストアポート番号がストアバッファ又はライトバッファのどちらのストアポート番号かを示す信号ＷＢＳＥＬを出力する。
【００３２】
図９に示す例を参照して、ＳＦＢ候補決定部４０６によるＳＦＢ候補の決定方法について説明する。図９には、ストアバッファが２４個のエントリを有し、ライトバッファが６個のエントリを有する例を示している。直近のストア命令にストアポート番号１５のストアバッファのエントリが割り当てられ、そのストア命令の後に、ロード要求が発行されたとする。
【００３３】
このロード要求と同一の記憶領域にデータをストアするストア命令に対して、ストアポート番号７、３のストアバッファのエントリ、ストアポート番号２のライトバッファのエントリが割り当てられているものとする。このうち、ストアポート番号３のストアバッファのエントリに格納されたデータは、ロード命令でロードするデータ長よりもデータ長が短いため、ＳＦＢ候補とはならずにＳＦＩ候補となる。ここで、ＳＦＩ（Store-Fetch-Interlock、ストアフェッチインターロック）とは、フェッチしたいが同一アクセス領域にフェッチを阻害するストアがある状態である。
【００３４】
したがって、ストアポート番号７のストアバッファのエントリ、及びストアポート番号２のライトバッファのエントリにそれぞれ格納されたデータがＳＦＢ候補となりうる。このとき、ＳＦＢ候補決定部４０６は、直近のストア命令に割り当てられたストアポート番号からストアバッファのトップオブキュー（ＳＴＢ−ＴＯＱ）に向かい、続いてライトバッファのボトムオブキュー（ＷＢ−ＢＯＱ）からライトバッファのトップオブキュー（ＷＢ−ＴＯＱ）に向かう方向において、最も近いＳＦＢ候補（図９に示す例では、ストアポート番号７のストアバッファのエントリ）をＳＦＢ候補のデータとして決定する。
【００３５】
フェッチポート（ＦＰ）４０７は、命令制御部２０１からのロード要求やストア要求を保持するポートである。ＳＦＢサーチヒット信号ＳＦＢＳＨが出力されると、フェッチポート（ＦＰ）４０７にＳＦＢリターンフラグがセットされ、信号ＷＢＳＥＬが出力されると、フェッチポート（ＦＰ）４０７にＳＦＢ候補のデータがストアバッファのエントリにあるかライトバッファのエントリにあるかを示すフラグがセットされる。また、ＳＦＢ候補決定部４０６から出力されたＳＦＢ候補のストアポート番号ＳＦＢ＿ＳＰＩＤが、フェッチポート（ＦＰ）４０７にセットされる。フェッチポート（ＦＰ）４０７にセットされるＳＦＢリターンフラグ、ＳＦＢ候補のデータがストアバッファのエントリにあるかライトバッファのエントリにあるかを示すフラグ、及びＳＦＢ候補のストアポート番号は、それぞれＳＦＢリターン信号ＳＵ＿ＳＦＢＲ、選択制御信号ＳＵ＿ＷＢＳＥＬ、及びストアポート番号ＳＵ＿ＳＰＩＤとして読み出される。
【００３６】
セレクタ４０８は、ストアポート番号ＳＰＩＤに対応するストアバッファ２０４Ａのエントリ又はライトバッファ２０５Ａのエントリからロードしたデータを、選択制御信号ＳＥＬＡに応じて選択しＳＦＢデータＳＦＢＤとして出力する。選択制御信号ＳＥＬＡが“１”、すなわち選択対象がライトバッファである場合、セレクタ４０８は、ライトバッファ２０５ＡのエントリからロードしたデータをＳＦＢデータＳＦＢＤとして出力する。また、選択制御信号ＳＥＬＡが“０”、すなわち選択対象がストアバッファである場合、セレクタ４０８は、ストアバッファ２０４Ａのエントリからロード読み出したデータをＳＦＢデータＳＦＢＤとして出力する。
【００３７】
セレクタ４１０は、ストアバッファ２０４Ａ又はライトバッファ２０５ＡからロードしたＳＦＢデータＳＦＢＤ、又は１次データキャッシュメモリ２０７からロードしウェイ選択部４０９を介して出力されたデータＲＡＭＤを、選択制御信号ＳＥＬＢに応じて選択し演算部２０２に出力する。選択制御信号ＳＥＬＢがＳＦＢ制御によるデータのロードが可能であることを示す場合、セレクタ４１０は、ストアバッファ２０４Ａ又はライトバッファ２０５ＡからのＳＦＢデータＳＦＢＤを選択して演算部２０２に出力する。また、選択制御信号ＳＥＬＢがＳＦＢ制御によるデータのロードが可能であることを示さない場合、セレクタ４１０は、１次データキャッシュメモリ２０７からのデータＲＡＭＤを選択して演算部２０２に出力する。
【００３８】
次に、本実施形態におけるロード命令の処理動作について説明する。図５は、本実施形態におけるロード命令の処理例を示すフローチャートである。命令制御部２０１からロード要求（ロード）命令が発行されると、ステップＳ５０１にて、ロード要求を受けた１次キャッシュ制御部２０３は、要求において指定されたストアポートがＳＦＢ可能であるか否かを判定する。すなわち、１次キャッシュ制御部２０３は、要求において指定されたストアポート番号のストアバッファのエントリ又はライトバッファのエントリに格納されているデータがＳＦＢ候補のデータであるか否かを判定する。
【００３９】
１次キャッシュ制御部２０３が、指定されたストアポートがＳＦＢ可能である、すなわち指定されたストアポート番号のストアバッファのエントリ又はライトバッファのエントリに格納されているデータがＳＦＢ候補のデータであると判定した場合（Ｓ５０１のＹＥＳ）、ステップＳ５０２にて、１次キャッシュ制御部２０３は、ＳＦＢ制御によるデータのロードを実行する。具体的には、１次キャッシュ制御部２０３は、指定されたストアポート番号のストアバッファのエントリ又はライトバッファのエントリからデータをロードして演算部２０２に送る。そして、１次キャッシュ制御部２０３は、ロード要求が正常に完了したことを示す信号ＳＴＶ（ＳＴａｔｕｓ  Ｖａｌｉｄ）を命令制御部２０１に返して処理を終了する。
【００４０】
１次キャッシュ制御部２０３が、指定されたストアポートがＳＦＢ可能ではないと判定した場合（Ｓ５０１のＮＯ）、ステップＳ５０３にて、１次キャッシュ制御部２０３は、ストアバッファが有する複数のエントリ及びライトバッファが有する複数のエントリを検索し、それぞれに格納されているデータがＳＦＢ候補のデータとなり得るか否かを判定する。続いて、ステップＳ５０４にて、１次キャッシュ制御部２０３は、ストアバッファ及びライトバッファにＳＦＢ候補のデータとなり得るデータがあったか否かを判定する。
【００４１】
ＳＦＢ候補のデータとなり得るデータがストアバッファ及びライトバッファにあったと１次キャッシュ制御部２０３が判定した場合（Ｓ５０４のＹＥＳ）、ステップＳ５０５にて、１次キャッシュ制御部２０３は、ＳＦＢ候補のデータとなり得るデータのうちから直近のストア命令による１つのデータをＳＦＢ候補のデータに決定する。次に、ステップＳ５０６にて、１次キャッシュ制御部２０３は、決定したＳＦＢ候補のデータが格納されているストアバッファのエントリ又はライトバッファのエントリに対応するストアポート番号を指定してロード要求を発行させ、ステップＳ５０１に戻る。
【００４２】
ステップＳ５０６から戻ったステップＳ５０１では、１次キャッシュ制御部２０３が、命令制御部２０１からロード要求を受けたときと同様に、要求において指定されたストアポートがＳＦＢ可能であるか否かを判定する。このとき、指定されたストアポート番号のストアバッファのエントリ及びライトバッファのエントリに格納されているデータはＳＦＢ候補のデータとなり得ると判定されているデータである。したがって、ステップＳ５０２に進み、１次キャッシュ制御部２０３は、ＳＦＢによるデータのロードを実行してデータを演算部２０２に送り、信号ＳＴＶを命令制御部２０１に返して処理を終了する。
【００４３】
ステップＳ５０４において、ＳＦＢ候補のデータとなり得るデータがストアバッファ及びライトバッファにないと１次キャッシュ制御部２０３が判定した場合（ＮＯ）、ステップＳ５０７にて、１次キャッシュ制御部２０３は、１次データキャッシュメモリ２０７にロード対象のデータが格納されているか否かを判定する。１次データキャッシュメモリ２０７にロード対象のデータが格納されていると１次キャッシュ制御部２０３が判定した場合、すなわち１次キャッシュヒットと判定した場合（Ｓ５０７のＹＥＳ）、ステップＳ５０８にて、１次キャッシュ制御部２０３は、１次データキャッシュメモリ２０７からデータをロードして演算部２０２に送る。そして、１次キャッシュ制御部２０３は、ロード要求が正常に完了したことを示す信号ＳＴＶを命令制御部２０１に返して処理を終了する。
【００４４】
一方、１次データキャッシュメモリ２０７にロード対象のデータがないと１次キャッシュ制御部２０３が判定した場合、すなわち１次キャッシュミスと判定した場合（Ｓ５０７のＮＯ）、ステップＳ５０９にて、１次キャッシュ制御部２０３は、下位側（例えば２次キャッシュメモリ）にロード要求を発行してステップＳ５０３に戻る。なお、１次キャッシュ制御部２０３が下位側にロード要求を発行してからステップＳ５０３に戻るのは、下位側に対するロード要求においてはデータのロード処理に時間がかかるため、その間にストアバッファのエントリ及びライトバッファのエントリにＳＦＢ候補のデータとなり得るデータが格納された場合に速やかに検出しＳＦＢ制御によるデータのロードを行うためである。
【００４５】
なお、図５に示したフローチャートでは、説明をわかり易くするために、要求において指定されたストアポートに格納されているデータがＳＦＢ候補のデータであるか否かを判定する動作を行った後に、ストアポートの検索を行ってＳＦＢ候補のデータを決定する動作を行うようにしているが、指定されたストアポートに格納されているデータがＳＦＢ候補のデータであるか否かを判定する動作とストアポートの検索を行ってＳＦＢ候補のデータを決定する動作とは並行して実行する。
【００４６】
図６は、本実施形態におけるＳＦＢ制御によるロード処理の例を示すタイムチャートである。図６には、命令制御部２０１（外部）からのロード要求で指定されたストアポート番号のストアバッファのエントリ又はライトバッファのエントリのデータがＳＦＢ候補のデータではなく、ストアバッファのエントリ及びライトバッファのエントリを検索してＳＦＢ候補のデータを決定し、データのロードを行う例を示している。ＳＦＢ候補のデータは、ストアポート番号がＳＰ＃Ａであるストアバッファのエントリ又はライトバッファのエントリに格納されているものとする。
【００４７】
時刻Ｔ１において、命令制御部２０１から、ＳＰ＃Ａと異なるストアポート番号が指定されたロード要求が入力され、１次キャッシュ制御部２０３のパイプラインに投入される。このとき、命令制御部２０１からのロード要求で指定されたストアポート番号に基づいてストアバッファ及びライトバッファへのアクセスが行われる。時刻Ｔ２において、アドレス生成部によって生成されたアドレス等の選択が行われ、ストアバッファ及びライトバッファからの信号読み出しが行われる。
【００４８】
そして、命令制御部２０１からのロード要求で指定されたストアポート番号に従ってストアバッファ及びライトバッファから読み出した信号と、アドレス生成部によって生成されたアドレス等に基づいて、ＳＦＢ制御によるデータのロードが可能であるか判定が行われ（時刻Ｔ３）、ＳＦＢ制御によるデータのロードが可能ではないと判定すると、パイプラインをアボートする（時刻Ｔ５）。このとき、命令制御部２０１に対するＳＴＶ通知は行われない。
【００４９】
また、アドレス生成部によって生成されたアドレス等を参照してストアバッファのエントリ及びライトバッファのエントリが検索され、格納されているデータがＳＦＢ候補のデータとなり得るかの判定が行われ（時刻Ｔ３）、１つのＳＦＢ候補のデータが選択される（時刻Ｔ４）。この例では、ストアポート番号がＳＰ＃Ａであるストアバッファのエントリ又はライトバッファのエントリに格納されているデータがＳＦＢ候補のデータとして選択される。
【００５０】
その後、時刻Ｔ１０において、ストアポート番号としてＳＰ＃Ａが指定されたロード要求（内部リクエスト）が１次キャッシュ制御部２０３のパイプラインに投入される。そしてロード要求で指定されたストアポート番号ＳＰ＃Ａに基づいてストアバッファ及びライトバッファへのアクセスが行われる。時刻Ｔ１１において、ストアバッファ及びライトバッファからの信号読み出しが行われる。
【００５１】
そして、ロード要求で指定されたストアポート番号ＳＰ＃Ａに従ってストアバッファ及びライトバッファから読み出した信号と、アドレス生成部によって生成されたアドレス等に基づいて、ＳＦＢ制御によるデータのロードが可能であるか判定が行われる（時刻Ｔ１２）。判定の結果、ＳＦＢ制御によるデータのロードが可能であると判定すると（時刻Ｔ１３）、時刻Ｔ１３においてストアポート番号ＳＰ＃Ａのストアバッファのエントリ又はライトバッファのエントリからロードしたデータ（ＳＦＢデータ）を演算部２０２へ出力する（時刻Ｔ１４）そして、時刻Ｔ１５において、命令制御部２０１に対するＳＴＶ通知が行われ、データのロード処理が終了する。
【００５２】
なお、時刻Ｔ１２以降においても、生成されているアドレス等を参照してのストアバッファのエントリ及びライトバッファのエントリの検索、及びＳＦＢ候補のデータとなり得るかの判定、及び１つのＳＦＢ候補のデータの選択が行われる。しかし、時刻Ｔ１２以降におけるこれらの処理結果は、時刻Ｔ１５において、命令制御部２０１に対するＳＴＶ通知が行われ、データのロード処理が終了されるので、捨てられることとなり動作に影響を及ぼすことはない。
【００５３】
図７は、本実施形態におけるＳＦＢ制御によるロード処理の他の例を示すタイムチャートである。図７には、命令制御部２０１（外部）からのロード要求で指定されたストアポート番号のストアバッファのエントリ又はライトバッファのエントリのデータがＳＦＢ候補のデータである例を示している。ＳＦＢ候補のデータは、ストアポート番号がＳＰ＃Ａであるストアバッファのエントリ又はライトバッファのエントリに格納されているものとする。
【００５４】
時刻Ｔ１において、命令制御部２０１から、ストアポート番号としてＳＰ＃Ａが指定されたロード要求が入力され、１次キャッシュ制御部２０３のパイプラインに投入される。このとき、命令制御部２０１からのロード要求で指定されたストアポート番号に基づいてストアバッファ及びライトバッファへのアクセスが行われる。時刻Ｔ２において、アドレス生成部によって生成されたアドレス等の選択が行われ、ストアバッファ及びライトバッファからの信号読み出しが行われる。
【００５５】
そして、ロード要求で指定されたストアポート番号ＳＰ＃Ａに従ってストアバッファ及びライトバッファから読み出した信号と、アドレス生成部によって生成されたアドレス等に基づいて、ＳＦＢ制御によるデータのロードが可能であるか判定が行われる（時刻Ｔ３）。判定の結果、ＳＦＢ制御によるデータのロードが可能であると判定すると（時刻Ｔ４）、判定と並行して時刻Ｔ３においてストアポート番号ＳＰ＃Ａのストアバッファのエントリ又はライトバッファのエントリからロードしたデータ（ＳＦＢデータ）を演算部２０２へ出力する（時刻Ｔ５）そして、時刻Ｔ６において、命令制御部２０１に対するＳＴＶ通知が行われ、データのロード処理が終了する。
【００５６】
この図７に示す例においても、アドレス生成部によって生成されたアドレス等を参照してのストアバッファのエントリ及びライトバッファのエントリの検索、及びＳＦＢ候補のデータとなり得るかの判定、及び１つのＳＦＢ候補のデータの選択が行われる。しかし、これらの処理結果は、時刻Ｔ６において、命令制御部２０１に対するＳＴＶ通知が行われ、データのロード処理が終了されるので、捨てられることとなり動作に影響を及ぼすことはない。
【００５７】
ここで、ＳＦＢ候補のデータの検索を行ってからＳＦＢ候補のデータを読み出すまでには一定の時間経過を伴うため、新規にＳＦＢ候補のデータとなるストア命令がストアバッファに設定される場合がある。この新規に設定されるストア命令が直近のストア命令である場合、ＳＦＢ候補のデータのロード処理をアボートし、ＳＦＢ候補のデータをロードするためのストアポート番号を更新した後にＳＦＢ候補のデータのロード処理を行えばよい。例えば、図９に示した例では、ストアポート番号７のストアバッファのエントリのデータをＳＦＢ候補のデータに決定してから、ＳＦＢ候補であるストアポート番号７と直近のストア命令に割り当てられたストアポート番号１５との間のストアバッファのエントリに新規にＳＦＢ候補のデータとなるストア命令が設定されていないかをチェックするようにすればよい。
【００５８】
本実施形態によれば、命令制御部２０１からロード命令が発行されると、１次キャッシュ制御部２０３は、ストアバッファのエントリ及びライトバッファのエントリを検索して、格納されているデータがＳＦＢ候補のデータとなり得るか否かを判定する。そして、ＳＦＢ候補のデータとなり得るデータが複数存在する場合には、１次キャッシュ制御部２０３は、そのうちからロード命令に対して直近のストア命令に係る１つのデータをＳＦＢ候補のデータに決定して、ＳＦＢ制御によるデータのロードを行う。これにより、ＳＦＢ候補のデータになり得るデータがストアバッファ及びライトバッファに複数存在しても、それらのストア処理を待たずに１つのデータを適切に選択してＳＦＢ制御によるデータのロードを実行することができ、プロセッサの処理性能を向上させることができる。
【００５９】
また、ロード命令によりロードするデータが直近のストア命令でストアするデータである場合が多いので、命令制御部２０１からロード命令を発行する際、直近のストア命令に対して割り当てられたストアポートのエントリ番号をロード命令とともに通知することで、ＳＦＢ候補のデータとなり得るデータの検索を待たずに、ＳＦＢ制御によるデータのロードを行うことが可能となり、プロセッサの処理性能を向上させることができる。
【００６０】
本実施形態のようにストアバッファとライトバッファとを有する構成においてのデータのストア処理は、次のように行われる。まず、命令制御部２０１から発行されたストア命令は、１次キャッシュ制御部２０３でストアバッファに一旦格納される。並行して、演算部２０２から１次キャッシュ制御部２０３にストア対象のデータも送付される。アドレス例外等の例外要因がなく正常にストア処理できる状態であれば、１次キャッシュ制御部２０３は、命令制御部に信号ＳＴＶを返す。これを受けて命令制御部２０１は、ストア命令を完了（コミットさせる）。つまり、１次データキャッシュメモリ２０７に実際にストア対象のデータがストアされる前にストア命令がコミットされる（ストア命令の突き離し制御）ことにより、ストア命令を高速処理している。命令制御部２０１から１次キャッシュ制御部２０３にストア命令のコミット通知が送付されると、１次キャッシュ制御部２０３は、ストア対象のデータをストアバッファからライトバッファに移動する（移動を指示する信号をライトバッファゴー信号ＷＢ＿ＧＯと称する）。その後、ライトバッファから１次キャッシュ制御部２０３のパイプラインを起動して、実際に１次データキャッシュメモリ２０７へのストア動作を行う。
【００６１】
このようなストア動作において、本実施形態におけるＳＦＢ制御方式では、ストアバッファのエントリに格納されているデータをＳＦＢ候補のデータと決定した後、データのロードを行う前にＳＦＢ候補のデータがストアバッファからライトバッファに移動してしまうことが考えられる。この場合、ＳＦＢ候補のデータがストアバッファに存在しないため、データをロードするためのパイプラインがアボートしてしまい、処理時間が増大してしまう。そこで、図８に示すような制御機構を設け、ＳＦＢ候補のデータを決定した後にストアバッファからライトバッファにＳＦＢ候補のデータが移動することを数サイクル間抑止する。
【００６２】
図８は、本実施形態におけるストアバッファからライトバッファへのストア制御に係る構成例を示す図である。命令制御部２０１からストア命令のコミット通知ＳＴＲＣＭがストアバッファ２０４Ｂに送付されると、ストアバッファ２０４Ｂは、第１のライトバッファゴー信号ＷＢ＿ＧＯを出力する。また、ストア命令に係る演算部２０２から出力されるストア対象のデータＳＴＲＤＴは、ストアバッファ２０４Ａ、及びライトバッファ２０５Ａを介して１次データキャッシュメモリ２０７にストアされる。このとき、ストアバッファ２０４Ａからライトバッファ２０５Ａへのストア対象のデータのストアは、第２のライトバッファゴー信号ＷＢ＿ＧＯＡに従って実行される。
【００６３】
ＡＮＤ（論理積演算）回路８０１は、ＳＦＢ判定部４０４から出力される選択制御信号ＳＥＬＢ、ＳＦＢ候補判定部４０５から出力されるＳＦＢサーチヒット信号ＳＦＢＳＨ、及びライトバッファゴー抑止信号ＷＢ＿ＧＯ＿ＩＮＨが入力され、演算結果をカウンタ制御信号ＣＮＴＥＮとして出力する。具体的には、ＡＮＤ回路８０１は、選択制御信号ＳＥＬＢが“０”、ＳＦＢサーチヒット信号ＳＦＢＳＨが“１”、ライトバッファゴー抑止信号ＷＢ＿ＧＯ＿ＩＮＨが“０”である場合、カウンタ制御信号ＣＮＴＥＮを“１”にし、それ以外はカウンタ制御信号ＣＮＴＥＮを“０”にする。すなわち、カウンタ制御信号ＣＮＴＥＮが“０”である状態で、ＳＦＢ制御によるデータのロードが可能ではなく、ストアバッファのエントリ及びライトバッファのエントリを検索してＳＦＢ候補のデータとなり得るデータが見つかった場合、カウンタ制御信号ＣＮＴＥＮが“１”となる。
【００６４】
カウンタ８０２は、カウンタ制御信号ＣＮＴＥＮが“０”から“１”に変化したとき、カウント値を所定の値に設定し、１サイクル毎に１ずつデクリメントする。所定の値は、第１のライトバッファゴー信号ＷＢ＿ＧＯの伝達を抑止したい期間に応じて決めればよく、例えば８サイクルの期間抑止したい場合には“８”に設定すればよい。ＯＲ（論理和演算）回路８０３は、カウンタ８０２の出力が入力され、演算結果をライトバッファゴー抑止信号ＷＢ＿ＧＯ＿ＩＮＨとして出力する。本実施形態では、ＯＲ回路８０３は、カウンタ８０２のカウント値が“０”でない（出力ビットの少なくとも１つが“１”である）場合、ライトバッファゴー抑止信号ＷＢ＿ＧＯ＿ＩＮＨを“１”にし、カウンタ８０２のカウント値が“０”である（出力ビットのすべてが“０”である）場合、ライトバッファゴー抑止信号ＷＢ＿ＧＯ＿ＩＮＨを“０”にする。
【００６５】
ＡＮＤ回路８０４は、第１のライトバッファゴー信号ＷＢ＿ＧＯ及びライトバッファゴー抑止信号ＷＢ＿ＧＯ＿ＩＮＨが入力され、演算結果を第２のライトバッファゴー信号ＷＢ＿ＧＯＡとして出力する。ＡＮＤ回路８０４は、ライトバッファゴー抑止信号ＷＢ＿ＧＯ＿ＩＮＨが“１”である場合、第１のライトバッファゴー信号ＷＢ＿ＧＯにかかわらず、第２のライトバッファゴー信号ＷＢ＿ＧＯＡを“０”（ライトバッファへのストア対象のデータのストア不許可）にし、第１のライトバッファゴー信号ＷＢ＿ＧＯが伝達されることを抑止する。また、ＡＮＤ回路８０４は、ライトバッファゴー抑止信号ＷＢ＿ＧＯ＿ＩＮＨが“０”である場合、第１のライトバッファゴー信号ＷＢ＿ＧＯを第２のライトバッファゴー信号ＷＢ＿ＧＯＡとして出力する。したがって、ライトバッファゴー抑止信号ＷＢ＿ＧＯ＿ＩＮＨが“０”である場合、第１のライトバッファゴー信号ＷＢ＿ＧＯが“０”であれば第２のライトバッファゴー信号ＷＢ＿ＧＯＡを“０”（ライトバッファへのストア対象のデータのストア不許可）にし、第１のライトバッファゴー信号ＷＢ＿ＧＯが“１”であれば第２のライトバッファゴー信号ＷＢ＿ＧＯＡを“１”（ライトバッファへのストア対象のデータのストア許可）にする。
【００６６】
図８に示した構成によれば、ストアバッファのエントリに格納されているデータをＳＦＢ候補のデータと決定した後、所定の期間においてＳＦＢ候補のデータがライトバッファに移動するのを抑止することができ、処理時間を増大させることなく、ＳＦＢ制御によるデータのロードを行うことが可能になる。なお、カウンタ８０２のカウント値が次々に所定の値に設定されてストアバッファからライトバッファへのデータの移動が滞ることを防止するために、カウンタ８０２のカウント値が“０”になった後、カウンタ制御信号ＣＮＴＥＮが“１”になることを抑止することが好ましい。すなわち、ストアバッファからライトバッファへのストアの抑止を解除してから所定の期間は、ストアバッファからライトバッファへのストアの抑止を禁止する（ストア処理許可状態にし続ける）ことが好ましい。
【００６７】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００６８】
１１０  プロセッサ
１１１、２０１  命令制御部
１１２、２０２  演算部
１１３  １次キャッシュ部
１１４、２０３  １次キャッシュ制御部
１１５  １次命令キャッシュメモリ
１１６、２０７  １次データキャッシュメモリ
１１７  ２次キャッシュ部
１２０  主記憶装置
２０４  ストアバッファ部
２０５  ライトバッファ部
２０６  ＳＦＢ候補選択処理部
３０１  命令デコード部
３０２  リザベーションステーション
３０３  ポート割り当て部
３０４  ポート番号保持部
４０４  ＳＦＢ判定部
４０５  ＳＦＢ候補判定部
４０６  ＳＦＢ候補決定部
４０７  フェッチポート
【図１】
0006680978.tif 000002
【図２】
0006680978.tif 000003
【図３】
0006680978.tif 000004
【図４】
0006680978.tif 000005
【図５】
0006680978.tif 000006
【図６】
0006680978.tif 000007
【図７】
0006680978.tif 000008
【図８】
0006680978.tif 000009
【図９】
0006680978.tif 000010