(57)【特許請求の範囲】
【請求項１】
少なくとも１以上のストア命令を格納するためのストアキューを備えるキャッシュシステムの制御方法において、
タグ検索を伴う命令のインデックス及びオフセットと前記ストアキューに格納されたストア命令のインデックス及びオフセットを比較する第１のステップを実行し、
前記第１のステップの比較の結果前記タグ検索を伴う命令のインデックス及びオフセットと前記ストアキューに格納されたストア命令のインデックス及びオフセットが少なくとも１以上一致する場合に、前記タグ検索を伴う命令をストールし、前記タグ検索を伴う命令のインデックス及びオフセットと一致した前記ストアキューに格納されたストア命令を実行する第２のステップを実行し、
前記第１又は第２のステップを実行した後に前記タグ検索を伴う命令のタグ検索を行う第３のステップを実行し、
前記第３のステップのタグ検索の結果キャッシュミスヒットである場合に、前記タグ検索を伴う命令のインデックス及び格納先ウェイと前記ストアキューに格納されたストア命令のインデックス及び格納先ウェイを比較する第４のステップを実行し、
前記第４のステップの比較の結果前記タグ検索を伴う命令のインデックス及び格納先ウェイと前記ストアキューに格納されたストア命令のインデックス及び格納先ウェイが少なくとも１以上一致する場合に、前記タグ検索を伴う命令をストールし、前記タグ検索を伴う命令のインデックス及び格納先ウェイと一致した前記ストアキューに格納されたストア命令を実行し、前記ストア命令の実行後リプレース処理を行う第５のステップを実行することを特徴とするキャッシュシステムの制御方法。
【請求項２】
前記第１のステップの前に、前記タグ検索を伴う命令がストア命令であるか否かを判断する第６のステップを実行し、前記タグ検索を伴う命令がストア命令である場合には、第１及び第２のステップを実行しないことを特徴とする請求項１記載のキャッシュシステムの制御方法。
【請求項３】
第３のステップのタグ検索の結果キャッシュヒットである場合、若しくは、前記第５のステップの実行後、前記タグ検索を伴う命令がロード命令である場合には前記ロード命令を実行し、前記タグ検索を伴う命令がストア命令である場合には前記ストアキューに前記ストア命令を格納する第７のステップを実行することを特徴とする請求項１又は２記載のキャッシュシステムの制御方法。
【請求項４】
前記第３のステップにて行われるタグ検索は、前記タグ検索を伴う命令のタグがタグメモリの検索対象インデックス内に格納されているか否かを検索する処理であることを特徴とする請求項１乃至３のいずれか１に記載のキャッシュシステムの制御方法。
【請求項５】
前記タグ検索を伴う命令の格納先ウェイは、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）の入れ替えアルゴリズムによって決定することを特徴とする請求項１乃至４のいずれか１に記載のキャッシュシステムの制御方法。
【請求項６】
前記キャッシュシステムは、ｍウェイ（ｍは２以上の整数）のセットアソシアティブ方式による構成を有していることを特徴とする請求項１乃至５のいずれか１に記載のキャッシュシステムの制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ストア命令を一旦記憶可能なストアキューを備え、かつ命令のリオーダーを可能とする半導体装置に用いて好適な、キャッシュシステムの制御回路に関する。
【０００２】
【従来の技術】
データキャッシュ（あるいはデータキャッシュシステム）を有する半導体装置には、ストアキュー（あるいはライトバッファもしくはストアバッファ）と呼ばれるデータ書き込み命令用のバッファメモリを備え、主記憶装置、およびデータキャッシュにおけるデータメモリへのデータ書き込み時に、一旦書き込みアドレスとデータとからなるストア命令をストアキューに保持させることで、マイクロプロセッサの実行効率を向上させようとするものがある。この種の技術については、例えば特開平９−１１４７３４号公報「ストアバッファ装置」、特開２０００−１８１７８０号公報「ストアバッファ装置」等に記載されている。なお、本願では「データキャッシュ(システム)」は、「タグメモリ」および「データメモリ」とそれらの制御回路とから構成されているものとする。
【０００３】
また、ストアキューを用いる半導体装置では、命令リオーダーと呼ばれる命令順序を入れ替える制御を行うことがある。命令リオーダーでは、例えば、タグ検索済みのストア命令をストアキューに保持し、ストア命令の書き込みに先立って、後続のロード命令によってデータメモリや主記憶装置に対して読み出しを行う。このことで、主記憶装置やデータメモリへのアクセス効率の向上を図っている。ただし、この命令リオーダーにはアクセス先の依存関係を壊さない範囲でのみ入れ替え可能であるという制約がある。すなわち、同一アドレスに対して、ストア命令、ロード命令の順にアクセスする場合、ストア命令による書き込みに先立ってロード命令による読み出しを行うと、誤った値を読み出すことになる。
【０００４】
図１５は、命令リオーダーの動作例を説明するための図である。命令▲１▼はロード命令であり、１６進数（"０ｘ"）で示すアドレス"１０００"のデータをレジスタ"ｒ８"に読み出す命令である。同様に、命令▲２▼、▲４▼、▲５▼は、レジスタ"ｒ９"、"ｒ１１"、"ｒ１２"へ、アドレス"１５００"、"１８４０"、"１７６０"のデータをそれぞれロードする命令である。そして、命令▲３▼は、ストア命令であり、アドレス"１７６０"にレジスタ"ｒ１０"のデータを書き込む命令である。図１５に示す例では、▲１▼，▲２▼，▲４▼の命令は依存関係がないので任意の順番で入れ替え可能である。一方、▲３▼，▲５▼の命令はアドレスが重なっているので、命令▲３▼→▲５▼の実行順序は保証する必要ある。したがって、入れ替え例としては、命令▲３▼，▲１▼，▲２▼，▲４▼，▲５▼や、命令▲１▼，▲２▼，▲４▼，▲３▼，▲５▼といったものが考えられる。例えば命令▲３▼，▲１▼，▲２▼，▲４▼，▲５▼のように命令を入れ替えると、対象アドレスが同一である▲３▼のストア命令と▲５▼のロード命令との時間間隔を大きくすることができるので、命令▲１▼〜▲５▼合計での処理時間を短縮することが可能である。
【０００５】
次に、図１１〜図１４を参照して、命令リオーダーの制御において、アドレスの依存関係を保証するために設けられている従来の構成例およびその動作例について説明する。図１１は依存関係の有無を検知するための回路構成を示すブロック図である。図１２は主記憶あるいはデータメモリへアクセスする場合のアドレスの構成を示す説明図である。図１３は図１１の構成と組み合わせて用いられるデータキャッシュ（タグメモリ１０４およびデータメモリ１０５）の１ウェイ分の構成を示すブロック図である。そして、図１４が、図１１の構成に係るタグ検索を伴う命令の処理手順を示すフローチャートである。ここで、タグ検索を伴う命令とは、ロード命令、プリフェッチ命令、ストア命令等のデータキャッシュを利用する際にタグ検索を必要とする命令を意味する。またタグ検索とは、ロード命令、プリフェッチ命令、ストア命令等が処理対象とするアドレスにおけるページフレーム番号がタグメモリ１０４に格納されているかどうかを検索する処理である。
【０００６】
この例では、図１２に示すように、アドレス信号は、上位の所定ビットからなるページフレーム番号（あるいはタグ）と、中間の所定ビットからなるインデックスと、下位の所定ビットからなるオフセットから構成されている。一方、データキャッシュは、図１３に示すように、タグメモリ１０４とデータメモリ１０５から構成されているが、タグメモリ１０４はＭ個の領域を有し、各領域にはそのインデックスに割り当てられているページフレーム番号が記憶され、さらに、図示してない他の状態保持用の複数のビットデータが記憶されている。また、データメモリ１０５は、タグメモリ１０４の各インデックス０〜Ｍ−１のページフレーム番号に対応する０〜Ｍ−１のインデックスが付けられたＭ個のデータ領域に区分されている。このデータメモリ１０５の各インデックスに対応するデータ領域は、複数のデータ領域から構成されていて、それぞれの位置は、図１２に示すオフセットの値によって指定されるものである。
【０００７】
図１１に戻り、本例におけるアドレスの依存関係の有無の検知は、図１２に示すアドレスのインデックス部分の比較によって行われる。図１１に示す例は、上述したストア命令を保持するためのストアキュー１０１の段数が４段の場合の構成である。タグ検索を伴う命令を処理しようとする場合（ここではタグ検索を伴う命令が対象とするアドレスのインデックスがインデックスＢであるとする）、４個の比較器（０）〜（３）からなる比較器群１０２によって、ストアキュー１０１の各段に保持されているインデックスＡ０〜Ａ３と、インデックスＢが比較される。比較器群１０２の４個の比較器（０）〜（３）による比較結果は、ＯＲ回路１０３によって演算（論理和）されて、その結果によってインデックスＢがインデックスＡ０〜Ａ３のいずれかに一致しているか否かが得られることになる。
【０００８】
次に、図１４を参照して、タグ検索を伴う命令の処理について概要を説明する。タグ検索を伴う命令（図１４の説明において、以下、対象命令とする）を処理する場合、図１１に示す構成によって、検索対象のインデックスとストアキュー内のすべてのストア命令のインデックスを比較する処理を行う（ステップＳ１０１）。ここで、検索対象のインデックスが、ストアキュー内のストア命令のインデックスと１つ以上一致した場合、ストアキュー内の該当命令による書き込みを行う（ステップＳ１０２）。以降、同様にステップＳ１０１〜Ｓ１０２の処理を繰り返し行う。ステップＳ１０１でのインデックス比較の結果がすべて不一致であった場合、対象命令に対するタグ検索処理を実行する（ステップＳ１０３）。タグ検索処理では、対象命令のページフレーム番号がタグメモリ１０４の検索対象インデックス内に記憶されている（ヒット）か否（ミス）かを調べ（ステップＳ１０３）、ヒットの場合は後続の処理を実行する（ステップＳ１０５）。ミスの場合は、タグメモリ１０４の該当するインデックスに対してリプレース処理をした後（ステップＳ１０４）、後続の処理を行う（ステップＳ１０５）。
【０００９】
ステップＳ１０４のリプレース処理は、ページフレーム番号の更新に伴って、データキャッシュ（タグメモリ１０４とデータメモリ１０５）の内容を更新する処理である。処理の内容は、データメモリ１０５の内容を主記憶に書き戻す必要がある場合と、ない場合とで異なり、２種類の処理に分けられる。例えば主記憶からデータメモリ１０５に読み出されていたデータが、更新時までに変更されなかった場合には、そのデータを主記憶に書き戻す必要はなく、単に新たに設定されたページフレーム番号に対応するデータを主記憶からデータメモリ１０５の対応するインデックスの領域に読み出してくるだけでよい。この書き戻し（ライトバック）を伴わないデータの読み出しのみの処理をリフィル動作と呼ぶ。一方、データを主記憶に書き戻した後、新たに設定されたページフレーム番号に対応するデータを主記憶からデータメモリ１０５の対応するインデックスの領域に読み出してくる動作は、ライトバックおよびリフィル動作と呼ぶ。そして、リフィル動作、ならびに、ライトバックおよびリフィル動作の両方をまとめてリプレース動作（リプレース処理）と呼ぶこととする。つまり、リプレース処理と言った場合、リフィル動作のみを行うときと、ライトバック動作とリフィル動作の両者を行うときのどちらかを意味することになる。
【００１０】
また、ステップＳ１０２の処理では、ストアキュー内の該当命令による書き込みが終了するまで、当該対象命令が停止、すなわちストールすることになる。
【００１１】
【発明が解決しようとする課題】
ところで、従来の技術では、図１１を参照して説明したように、タグ検索前にインデックスのみの比較が行われ、比較結果がひとつでも一致した場合にはストール状態となってしまう。しかしながら、タグ検索を伴う命令とストアキュー内のストア命令との間では、インデックスが一致している場合でも、例えばオフセットが異なっているときには、対象とするアドレスが異なるので、比較した命令間に依存関係は存在しない。すなわち、従来の技術では、このような命令に依存関係が存在しない場合でも、ストール状態になってしまうことがある。そのためストール状態が発生する確率が比較的高く、したがって、命令のリオーダーが効率的に行われなくなるという課題があった。
【００１２】
本発明は、上記の事情を考慮してなされたものであって、不要なストール状態の発生をできるだけ回避し、それによって命令のリオーダーを促進することで、マイクロプロセッサの性能を向上させることができるキャッシュシステムの制御回路を提供することを目的とする。
【００１３】
【課題を解決するための手段】
上記目的を達成するために、請求項１記載の発明は、少なくとも１以上のストア命令を格納するためのストアキューを備えるキャッシュシステムの制御方法において、タグ検索を伴う命令のインデックス及びオフセットと前記ストアキューに格納されたストア命令のインデックス及びオフセットを比較する第１のステップを実行し、前記第１のステップの比較の結果前記タグ検索を伴う命令のインデックス及びオフセットと前記ストアキューに格納されたストア命令のインデックス及びオフセットが少なくとも１以上一致する場合に、前記タグ検索を伴う命令をストールし、前記タグ検索を伴う命令のインデックス及びオフセットと一致した前記ストアキューに格納されたストア命令を実行する第２のステップを実行し、前記第１又は第２のステップを実行した後に前記タグ検索を伴う命令のタグ検索を行う第３のステップを実行し、前記第３のステップのタグ検索の結果キャッシュミスヒットである場合に、前記タグ検索を伴う命令のインデックス及び格納先ウェイと前記ストアキューに格納されたストア命令のインデックス及び格納先ウェイを比較する第４のステップを実行し、前記第４のステップの比較の結果前記タグ検索を伴う命令のインデックス及び格納先ウェイと前記ストアキューに格納されたストア命令のインデックス及び格納先ウェイが少なくとも１以上一致する場合に、前記タグ検索を伴う命令をストールし、前記タグ検索を伴う命令のインデックス及び格納先ウェイと一致した前記ストアキューに格納されたストア命令を実行し、前記ストア命令の実行後リプレース処理を行う第５のステップを実行することを特徴とする。請求項２記載の発明は、前記第１のステップの前に、前記タグ検索を伴う命令がストア命令であるか否かを判断する第６のステップを実行し、前記タグ検索を伴う命令がストア命令である場合には、第１及び第２のステップを実行しないことを特徴とする。請求項３記載の発明は、第３のステップのタグ検索の結果キャッシュヒットである場合、若しくは、前記第５のステップの実行後、前記タグ検索を伴う命令がロード命令である場合には前記ロード命令を実行し、前記タグ検索を伴う命令がストア命令である場合には前記ストアキューに前記ストア命令を格納する第７のステップを実行することを特徴とする。
【００１４】
請求項４記載の発明は、前記前記第３のステップにて行われるタグ検索は、前記タグ検索を伴う命令のタグがタグメモリの検索対象インデックス内に格納されているか否かを検索する処理であることを特徴とする。請求項５記載の発明は、前記タグ検索を伴う命令の格納先ウェイは、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）の入れ替えアルゴリズムによって決定することを特徴とする。請求項６記載の発明は、前記キャッシュシステムは、ｍウェイ（ｍは２以上の整数）のセットアソシアティブ方式による構成を有していることを特徴とする。
【００１７】
【発明の実施の形態】
以下、図面を参照して本発明によるキャッシュシステムの制御回路ならびにそれを用いた半導体装置の実施の形態について説明する。図１は、本発明によるキャッシュシステムの制御回路の構成を機能ブロックに分けて示すとともに、制御信号の流れを示すブロック図である。図１に示す実施形態において本発明が最も特徴とする部分の構成は、ストール検出（ストアキューヒット）６とストール検出（インデックスマッチ）７、およびそれらの入出力信号に関係する部分の構成である。
【００１８】
命令フェッチ１は、順次、命令をフェッチし、複数の実行ユニット２，３，…に供給する。実行ユニット２は、ロード命令またはストア命令を処理するものであって、ＯＲ回路５からストール状態を指示するストール信号が出力されていない場合に、ロード命令またはストア命令を解読し、その結果得られたアドレスのオフセット、インデックス等を示す信号を、セレクタ４の一方の入力端子へと出力する。セレクタ４は、ストール信号が出力されていない状態で実行ユニット２の出力を選択してバッファ８へ入力する。このバッファ８の出力は、セレクタ４の他方の入力端子に入力されて、ＯＲ回路５からストール状態を指示するストール信号が出力されている場合にセレクタ４からそのまま出力されて、バッファ８の入力へ帰還されることになる。
【００１９】
なお、本実施形態では説明を簡略化するため、実行ユニット２で処理される命令を、データキャッシュを使用するものであって、かつ、内部レジスタと、データキャッシュのデータメモリまたは主記憶装置との間でデータの読み出しまたは書き込みを行うロード命令またはストア命令に限定する。ただし、本発明の適用の範囲はこのようなロード命令やストア命令に限定されることなく、タグ検索を伴う命令であれば適用可能である。
【００２０】
ＯＲ回路５は、ストール検出（ストアキューヒット）６と、ストール検出（インデックスマッチ）７との出力を入力として、論理和を求めて出力する。ストール検出（ストアキューヒット）６は、バッファ８から出力される後続命令と、ストアキュー９に記憶されている各命令とについて、インデックスおよびウェイをそれぞれ比較して、一致した場合にはその旨を示す信号（この場合アクティブレベルの信号）を出力する。ストール検出（インデックスマッチ）７は、バッファ８から出力される後続命令がストア命令以外の命令である場合に、当該命令と、ストアキュー９に記憶されている各命令とについて、インデックスとオフセットをそれぞれ比較して、一致した場合にはアクティブレベルを出力する。
【００２１】
タグメモリ制御部１２は、コントローラ１２ａとタグメモリ１３とから構成されていて、後述するデータメモリ制御部１０とともにデータキャッシュを構成する。コントローラ１２ａは、タグメモリ１３へのアクセス制御を主な機能とする。タグメモリ制御部１２はタグ検索を伴う後続命令のインデックス、オフセット、ページフレーム番号等を入力し、検索対象インデックス内に当該ページフレーム番号が記憶されている（ヒット）か否（ミス）かを確認し、検索結果（ヒット／ミス）を出力する。また、ヒット時にはヒットしたウェイ、ページフレーム番号を、ミス時にはリプレース対象のウェイ、および、ページフレーム番号をタグ検索結果として出力する。ストアキュー９はｎ段（ｎ：１以上の整数）の記憶領域を有し、バッファ８から出力されてタグ検索済みのストア命令（書き込み要求）の対象アドレス、データ、タグメモリから出力されるページフレーム番号、ウェイ等の情報の組を最大ｎ組まで記憶することができる。そして、ストアキュー９は、図示していないプロセッサから書き込み許可を示す実行許可信号を受け取ると、ストアキュー９内に格納された情報に基づき書き込みを行う。
【００２２】
データメモリ制御部１０は、コントローラ１０ａと所定容量のデータキャッシュ用のデータメモリ１１とから構成されている。コントローラ１０ａは、ライトバック／リフィル及びデータメモリ１１へのアクセス制御を主な機能とする。データメモリ制御部１０は、タグメモリ制御部１２の出力に基づいて、コントローラ１０ａによってライトバック／リフィル動作を制御し、バッファ８から直接供給されるリード要求と、ストアキュー９から供給されるライト要求に基づいて、データメモリ１１および図示していない主記憶に対するリード／ライト動作を実行する。
【００２３】
次に、図２を参照して、図１のストアキュー９の構成例について説明する。図２に示すように本実施形態では、ストアキュー９は、ｎ段の領域を有し、各領域には０〜ｎ−１のＩＤ（識別符号）が付けられている。各領域には、各ストア命令のアドレスとデータを示す情報が記憶される。ただし、図２ではそれらのうちのページフレーム番号、インデックス、オフセット、およびウェイのみを示し、ストアするデータ等については図示を省略している。なお、図２においてストアキュー９に記憶されるページフレーム番号、インデックス、オフセットは、いずれも図１２に示すアドレスの各部分に対応するものである。ここで、ウェイは、データキャッシュの構成が複数ウェイ構成の場合に、どのウェイを各ストア命令が対象とするのかを示す値を有するものであって、例えばデータキャッシュがウェイ０およびウェイ１の２ウェイで構成されるときには、ウェイ０またはウェイ１に対応するウェイ番号"０"または"１"のいずれかの値を有することになる。
【００２４】
次に、図３を参照して、図１に示すタグメモリ１３と、データメモリ１１の構成例について説明する。図３に示すように本実施形態では、データキャッシュは、ウェイ０およびウェイ１からなる２ウェイ構成であり、タグメモリ１３と、データメモリ１１には、それぞれ２ウェイ分の領域が設けられている。タグメモリ１３では、ウェイ０およびウェイ１の２つ領域がページフレーム番号をそれぞれに記憶するための複数の領域に分けられていて、各領域に対してはウェイ０およびウェイ１共通に、インデックス０，１，２，…，ｉ，…が付けられている。ただしウェイ数は、４，８等でもよく、２には限定されない。
【００２５】
次に、図４および図５を参照して、図１に示す構成の基本的な動作について説明する。図４は、図１に示す構成におけるストア命令の処理を示すフローチャートであり、図５は、図１に示す構成におけるタグ検索を伴う命令の処理を示すフローチャートである。上述したように本願では、タグ検索を伴う命令を、ロード命令、プリフェッチ命令、ストア命令等のタグ検索処理を必要とする命令と定義している。したがって、図５のフローチャートは、図４のストア命令に対する処理を含んだものである。
【００２６】
まず図４を参照して、ストア命令の処理フローについて説明する。ストア命令を処理する場合（以下、処理対象のストア命令を対象命令とする）、タグメモリ制御部１２においてタグ検索、すなわち検索対象インデックス内に当該ページフレーム番号を記憶している（ヒット）か否（ミス）かを確認し、ヒット／ミスの結果を出力する（ステップＳ１）。ミスの場合、タグメモリ１３で対象命令の書き込み対象インデックスの２つのウェイのいずれかを、ＬＲＵ（Least Recently Used）等の入れ替えアルゴリズムによって選択して、選択した対象命令のインデックス・ウェイとストアキュー９内のすべてのストア命令のインデックス・ウェイとを比較し、一致しているストア命令がある場合は、一致しているストアキュー９内のすべてのストア命令による書き込みを実行した後、タグメモリ１３に記憶しているページフレーム番号、データメモリ１１に記憶しているデータに対してリプレース処理を実行し、対象命令をヒットの状態にする（ステップＳ２）。ヒットの状態で、対象命令をストアキュー９に格納する（ステップＳ３）。以上の処理がストア命令の実行フローによる第１ステップの処理である。
【００２７】
第１ステップの処理が終了した後に、ストアキュー９に格納されているストア命令による書き込み処理が実際に実行される段階が、第２ステップの処理である。第２ステップの処理では、主記憶やデータキャッシュあるいは他の各部の動作状態に応じて、データがストア可能になったときに実行許可信号が入力され、実行許可条件がＯＫ（満足）されたときに書き込みの実行が開始される（ステップＳ４）。実行許可条件がＯＫになった場合、ストアキュー９に格納されているストア命令による書き込みが行われて、データメモリ１１に対してデータの書き込みが行われる（ステップＳ５）。ここで、実行許可信号は各ストア命令に対してそれぞれ発生される。
【００２８】
次に図５のフローチャートを参照してタグ検索を伴う命令全体に対する処理について説明する。図５では、ステップＳ１３の処理が図４のステップＳ１の処理に、ステップＳ１４〜Ｓ１６の処理が図４のステップＳ２の処理に、そして、ステップＳ１７およびそれ以降の処理が図４のステップＳ３の処理およびステップＳ４〜Ｓ５の処理に、それぞれ対応している。図５において、タグ検索を伴う命令がバッファ８から出力された場合（以下、バッファ８から出力された命令を対象命令とする）、対象命令がストア命令でない場合には（ステップＳ１０で判定結果が「Ｎｏ」の場合には）、ストール検出（インデックスマッチ）７によって、ストアキュー９内に、当該対象命令と、インデックス，オフセットがともに一致するストア命令が１つ以上あるかどうかが確認される（ステップＳ１１）。ここで１つ以上の命令が確認された場合、ストール状態となって、当該対象命令による書き込みまたは読み出しの実行が停止され、条件が解消するまで、ストアキュー９に格納されているストア命令による書き込みの実行が行われる（ステップＳ１２）。
【００２９】
次に、ステップＳ１１でストアキュー９内にインデックス，オフセットがともに一致するストア命令がなかったと確認された場合（"すべて不一致"の場合）、または対象命令がストア命令の場合には（ステップＳ１０で判定結果が「Ｙｅｓ」の場合には）、タグメモリ制御部１２によってタグ検索が行われる（ステップＳ１３）。タグ検索の結果が"ヒット"であった場合、次の処理が実行される（ステップＳ１７）。
【００３０】
本実施形態では、タグ検索を伴う命令がバッファ８から出力された場合、ストアキュー９にストア命令が格納されているときに、タグ検索を伴う命令による読み出し処理を先行して実行する制御が行われている。また、図４を参照して説明したようにストアキュー９に格納するストア命令に対してはキャッシュヒットを保証する制御も行われている。したがって、タグ検索を伴う命令に対するタグ検索結果が"ミス"の場合に、そのままデータキャッシュでリプレース処理を実行していまうと、キャッシュヒットの保証されているストア命令がストア対象としているキャッシュデータ（タグメモリ１３およびデータメモリ１１内のデータ）が、リプレースされてしまう可能性がある。つまり、ストア命令の対象ページフレーム番号が誤ったものとなってしまうことになる。そこで、本実施形態では、当該タグ検索結果がミスであったことに起因するリプレース処理の前にそのリプレース処理によってストアキュー９内のストア命令がストア対象としているキャッシュデータがリプレースされてしまうかどうかを事前に確認し、リプレースされてしまう場合には対応するストア命令による書き込み処理の方を先行して実行する制御を行うこととしている。具体的には、ステップＳ１４で、タグメモリ制御部１２によって指定された対象命令のリプレース対象の(インデックス，ウェイ)と、ストアキュー９内の全てのストア命令の(インデックス，ウェイ)を比較し、すべてが不一致である場合にはそのままリプレース処理を実行し（ステップＳ１６）、１つ以上が一致している場合にはストアキュー９内の該当ストア命令による書き込みを優先して実行するようにしている（ステップＳ１５）。ステップＳ１４で１つ以上が一致していると判定された場合には、すべてが不一致になるまでストアキュー９内の該当ストア命令による書き込み処理を優先して実行し（ステップＳ１４〜Ｓ１５の繰り返し）、その後にステップＳ１６のリプレース処理を実行するようにしている。
【００３１】
以上の処理によって、ストアキュー９内のストア命令に対するキャッシュヒットを保証した状態で、タグ検索を伴う命令による読み出し処理の優先的な実行を行うことが可能となる。なお、ステップＳ１６でリプレース処理を実行した後は、キャッシュヒットの場合と同様にステップＳ１７の処理が実行される。
【００３２】
次に、図６を参照して、タグ検索を伴う命令が処理される場合における図１〜図３のストール検出（ストアキューヒット）６、ストアキュー９、およびタグメモリ１３の動作例について説明する。ここで図６に示す構成では、タグメモリ１３のインデックスｉのウェイ０に"ページフレーム番号Ａ"が、ウェイ１に"ページフレーム番号Ｂ"が記憶されていることとする。また、ストアキュー９のＩＤ＝１のページフレーム番号には"ページフレーム番号Ｂ"、インデックスには"ｉ"、オフセットには"ｘ"、そして、ウェイには"１"が記憶されていて、ストアキューのＩＤ＝２のページフレーム番号には"ページフレーム番号Ａ"、インデックスには"ｉ"、オフセットには"ｙ"、そして、ウェイには"０"、が記憶されているとする。
【００３３】
図５のステップＳ１３でタグ検索すべきデータとして、ページフレーム番号Ｃ、インデックスｉ、オフセットｚが入力されたとすると、タグメモリ１３のインデックスｉのページフレーム番号Ａ≠ページフレーム番号Ｃかつページフレーム番号Ｂ≠ページフレーム番号Ｃなので、タグ検索結果は"ミス"となる。ここで図１のタグメモリ制御部１２においてＬＲＵ等によってリプレース対象として"ウェイ＝１"が決定されたとする。この場合、ストール検出（ストアキューヒット）６で、当該タグ検索を伴う命令のインデックスｉと、リプレース対象のウェイ１と、ストアキュー９のｎ個のインデックスとウェイとが比較される。この例では、その結果、ストアキュー９のＩＤ＝１が一致するので、ストアキューヒットの状態となり、ステップＳ１５の処理としてＩＤ＝１のストア命令による書き込みが実行された後、リプレース処理（ステップＳ１６）が実行されることになる。
【００３４】
次に、図７および図８を参照して、図１に示す構成の具体的な動作例について説明する。図７は動作を説明するための命令シーケンスの例、図８は、図７の命令シーケンスが入力された場合の動作を説明するための説明図であって、命令のストア／ロードの区別、リプレース対象のウェイの値、タグメモリ１３のインデックス０のウェイ０とウェイ１に格納されているページフレーム番号の値、およびストール検出（ストアキューヒット）６による比較結果（"０"はミス、"１"はヒット）の変化を示す図である。なお、図７および後述する図９および図１０では、説明を簡単にするため、一例として、アドレスのうち上位４ビットがページフレーム番号、中間の８ビットがインデックス、下位４ビットがオフセットであるとする。
【００３５】
なお、初期状態において、タグメモリ１３のインデックス０のウェイ０に格納されているページフレーム番号は"不定"、ウェイ１は"８"であるとする。また、ストアキュー９にはストア命令は格納されていないものとする。ここで、▲１▼のストア命令が処理されたとする（ａ）。▲１▼のストア命令はページフレーム番号が"４"、インデックスが"００"、オフセットが"０"である。したがって、タグ検索（図４のステップＳ１または図５のステップＳ１３）では、タグメモリ１３のインデックス"００"に対応する領域にページフレーム番号"４"が格納されているかどうかが確認され、この場合、結果は"ミス"となり、かつストアキュー９内にはストア命令が格納されていないのでリプレース処理が実行される（図４のステップＳ２または図５のステップＳ１５）（ｂ）。ただし、ここではリプレース対象としてウェイ０が指定されたものとする。このリプレース処理の結果、タグメモリ１３のインデックス００のウェイ０には"４"、ウェイ１には"８"が格納される。そして、▲１▼のストア命令はストアキュー９に格納される（図４のステップＳ３または図５のステップＳ１７）。
【００３６】
次に、▲２▼のストア命令が処理されたとする（ｃ）。▲２▼のストア命令はページフレーム番号が"８"、インデックスが"００"、オフセットが"０"である。したがって、タグ検索（図４のステップＳ１または図５のステップＳ１３）では、タグメモリ１３のインデックス"００"に対応する領域にページフレーム番号"８"が格納されているかどうかが確認され、この場合、結果は"ヒット"（ウェイ１）となるので、▲２▼のストア命令はストアキュー９に格納される（図４のステップＳ３または図５のステップＳ１７）。
【００３７】
ここで、▲３▼のロード（リード）命令が処理されたとする（ｄ）。▲３▼のロード命令はページフレーム番号が"Ｃ"、インデックスが"００"、オフセットが"４"である。この場合、ストアキュー９に格納されている２つの命令▲１▼，▲２▼は、ともに、インデックス"００"と、オフセット"０"を対象とするものなので、図５のステップＳ１１の判定結果は"すべて不一致"となる。次に、図５のステップＳ１３のタグ検索が行われる。この場合、タグメモリ１３のインデックス"００"にページフレーム番号"Ｃ"は格納されていないので、タグ検索の結果は"ミス"となる。次に、図５のステップＳ１４の処理が実行される。ただし、▲３▼のロード命令に対するリプレース対象のウェイは"０"に指定されたものとする。この場合、▲３▼のロード命令のリプレース対象のインデックスは"００"、ウェイは"０"なので、ストアキュー９に格納されている▲１▼のストア命令とインデックス、ウェイがともに一致することになる。したがって、図５のステップＳ１４の判定結果は"１つ以上一致（すなわちストアキューヒット状態）"となるので、ステップＳ１５の処理が実行される。この場合、▲１▼のストア命令による書き込みが実行されてデータの書き込みが行われる（ｅ）。
【００３８】
この例では図５のステップＳ１５では▲１▼のストア命令のみが該当命令となるので、▲１▼のストア命令による書き込みが実行された後、ステップＳ１６のリプレース処理が実行されて、タグメモリ１３のインデックス００のウェイ０には"Ｃ"が格納される（ｆ）。
【００３９】
次に、図９および図１０を参照して、図５のステップＳ１１で各条件が成立する具体例を説明する。図９および図１０は、各条件が成立する命令の例を示す図である。図９は、インデックス，オフセット比較でストールする例を示し、（１）が実際にデータ依存関係がある場合（インデックス、オフセット一致，ページフレーム番号一致）（２）が依存関係はないが、インデックス、オフセットが一致した場合（インデックス、オフセット一致，ページフレーム番号不一致）を示している。図１０は、インデックス，オフセット比較でストールしない例を示し、（１）がインデックスが不一致の場合、（２）がインデックス一致でオフセット不一致の場合（ストアキューヒットになる可能性がある場合）を示している。
【００４０】
なお、本発明の実施の形態は上記のものに限定されることなく適宜変更可能である。例えば、図１におけるストール検出６，７を一体としてまとめたり、データメモリ制御部１０とタグメモリ制御部１２におけるコントローラ１０ａ，１２ａを一体としてまとめたり、あるいは実行ユニット２をロード命令とストア命令毎に別ユニットとして設けたりすることが可能である。
【００４１】
【発明の効果】
本発明によれば、タグ検索を伴う命令のインデックス及びオフセットがストアキュー内の少なくとも１個のストア命令のインデックス及びオフセットと一致するときにタグ検索を伴う命令をストールさせるようにしたので、従来に比べ不要なストール状態の発生を少なくすることができ、データキャッシュに関連する命令のリオーダーを促進し、マイクロプロセッサの性能を向上させることができる。
【図面の簡単な説明】
【図１】本発明によるキャッシュシステムの制御回路の一実施の形態を示すブロック図。
【図２】図１のストアキュー９の構成例を示す図。
【図３】本実施形態のデータキャッシュの構成例を示す図。
【図４】図１のキャッシュシステムの制御回路の動作を説明するためのフローチャート（ストア命令処理時）。
【図５】図１のキャッシュシステムの制御回路の動作を説明するためのフローチャート（タグ検索を伴う命令処理時）。
【図６】図１のストール検出６およびストアキュー９の内部構成例と、ストール検出６およびストアキュー９と、タグメモリ１３とによる動作例を示すブロック図。
【図７】図１のキャッシュシステムの制御回路の動作を説明するために用いる命令の例を示す図。
【図８】図１のキャッシュシステムの制御回路の動作を説明するための説明図。
【図９】図１のキャッシュシステムの制御回路の他の動作を説明するための命令の例を示す図。
【図１０】図１のキャッシュシステムの制御回路の他の動作を説明するための命令の例を示す図。
【図１１】従来のキャッシュシステムの制御回路の構成例を示すブロック図。
【図１２】本発明および従来のキャッシュシステムの制御回路で使用されるアドレス構成を示すブロック図。
【図１３】セットアソシアティブ方式のキャッシュメモリの１ウェイ分の構成例を示すブロック図。
【図１４】図９の従来例の動作を説明するためのフローチャート。
【図１５】データキャッシュを用いる回路における命令リオーダーの動作を説明するための説明図。
【符号の説明】
１  命令フェッチ
２  実行ユニット
３  実行ユニット
４  セレクタ
５  ＯＲ回路
６  ストール検出(ストアキューヒット)
７  ストール検出(インデックスマッチ)
８  バッファ
９  ストアキュー（ライトバッファ)
１０  データメモリ制御部
１１  データメモリ
１２  タグメモリ制御部
１３  タグメモリ
【図１】
0003727244.tif 000002
【図２】
0003727244.tif 000003
【図３】
0003727244.tif 000004
【図４】
0003727244.tif 000005
【図５】
0003727244.tif 000006
【図６】
0003727244.tif 000007
【図７】
0003727244.tif 000008
【図８】
0003727244.tif 000009
【図９】
0003727244.tif 000010
【図１０】
0003727244.tif 000011
【図１１】
0003727244.tif 000012
【図１２】
0003727244.tif 000013
【図１３】
0003727244.tif 000014
【図１４】
0003727244.tif 000015
【図１５】
0003727244.tif 000016