(57)【特許請求の範囲】
【請求項１】
複数のキャッシュウェイの各々に、複数のキャッシュブロックを含むキャッシュメモリにおいて、
前記各キャッシュウェイに対応するセクタＩＤであって、該各キャッシュウェイの置換のために用いられる複数の該セクタＩＤを記憶するセクタＩＤ記憶手段と、
前記各セクタＩＤに対して設けられ、前記セクタＩＤに割り当てることができるキャッシュウェイの最大値を指定する最大ウェイ数を保持する複数のウェイ数レジスタと、
前記セクタＩＤ記憶手段に記憶され、メモリアクセス要求に付加されたセクタＩＤと同じセクタＩＤのキャッシュウェイ数と、前記ウェイ数レジスタに保持され、前記メモリアクセス要求に付加されたセクタＩＤと同じセクタＩＤの最大ウェイ数とを比較する比較手段と、
前記比較手段の比較結果に基づいて、前記複数のキャッシュウェイのいずれかに対する置換を指示するための置換セクタＩＤを選択するセレクタと、
キャッシュミスの発生時に、前記選択された置換セクタＩＤと、前記メモリアクセス要求に含まれる要求アドレスに対応して前記セクタＩＤ記憶手段に記憶された複数のセクタＩＤとに基づいて、前記複数のキャッシュウェイから置換すべき１以上の置換ウェイの候補を決定する決定手段と、
決定した１以上の前記置換ウェイの候補から前記置換ウェイを選択する選択手段と、
前記メモリアクセス要求により特定される前記キャッシュブロックの前記選択された置換ウェイにより指定されるキャッシュウェイに対応する前記記憶されたセクタＩＤを、前記メモリアクセス要求に付加されたセクタＩＤによって更新する更新手段と、
を含むことを特徴とするキャッシュメモリ。
【請求項２】
前記セクタＩＤの最大ウェイ数の合計数が前記キャッシュメモリにおける前記キャッシュウェイ数よりも大きくなるように、前記セクタＩＤの最大ウェイ数を割り当て可能とする、
ことを特徴とする請求項１に記載のキャッシュメモリ。
【請求項３】
前記決定手段は、前記キャッシュミスの発生時に、前記メモリアクセス要求に付加された前記セクタＩＤとして所定値を特定するとともに、前記所定値として特定されたセクタＩＤに対応するウェイ数レジスタに対して、他のウェイ数レジスタに保持された最大ウェイ数より小さい最大ウェイ数を設定することによって置換すべき１つの置換ウェイの候補を決定する
ことを特徴とする請求項１に記載のキャッシュメモリ。
【請求項４】
前記更新手段は、キャッシュヒットの発生時に、前記記憶されたセクタＩＤを、前記メモリアクセス要求に付加されたセクタＩＤに置換する
ことを特徴とする請求項１に記載のキャッシュメモリ。
【請求項５】
複数のキャッシュウェイの各々に、複数のキャッシュブロックと、各セクタＩＤに対して設けられ、前記各セクタＩＤに割り当てることができるキャッシュウェイの最大値を指定する最大ウェイ数を保持する複数のウェイ数レジスタと、を含むキャッシュメモリの制御方法であって、
セクタＩＤ記憶手段により、前記各キャッシュウェイに対応するセクタＩＤであって、該各キャッシュウェイの置換のために用いられる複数の該セクタＩＤを記憶し、
比較手段により、前記セクタＩＤ記憶手段に記憶され、メモリアクセス要求に付加されたセクタＩＤと同じセクタＩＤのキャッシュウェイ数と、前記ウェイ数レジスタに保持され、前記メモリアクセス要求に付加されたセクタＩＤと同じセクタＩＤの最大ウェイ数とを比較し、
セレクタにより、前記比較手段の比較結果に基づいて、前記複数のキャッシュウェイのいずれかに対する置換を指示するための置換セクタＩＤを選択し、
決定手段により、キャッシュミスの発生時に、前記選択された置換セクタＩＤと、前記メモリアクセス要求に含まれる要求アドレスに対応して前記セクタＩＤ記憶手段に記憶された複数のセクタＩＤとに基づいて、前記複数のキャッシュウェイから置換すべき１以上の置換ウェイの候補を決定し、
選択手段により、決定した１以上の前記置換ウェイの候補から前記置換ウェイを選択し、
更新手段により、前記メモリアクセス要求により特定される前記キャッシュブロックの前記選択された置換ウェイにより指定されるキャッシュウェイに対応する前記記憶されたセクタＩＤを、前記メモリアクセス要求に付加されたセクタＩＤによって更新する、
ことを特徴とするキャッシュメモリの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高性能プロセッサ、ハイパフォーマンスコンピューティングの分野におけるプログラムの高速実行を目的とした、キャッシュ技術に関する。
【背景技術】
【０００２】
近年のプロセッサの動作周波数の向上により、相対的にメモリアクセス遅延時間が長くなり、このことがシステム全体の性能を左右するに至っている。多くのプロセッサは、メモリアクセス遅延時間を隠蔽する目的で、キャッシュメモリと呼ぶ小容量の高速メモリを搭載している。
【０００３】
図１４に、現在最も普及しているセット・アソシアティブ方式のキャッシュメモリの動作概要を示す。
キャッシュメモリ１４０１は、複数のセットで構成されており、各セットは、例えば＃１〜＃４の複数のキャッシュウェイ（以降、単に「ウェイ」と略すこともある）１４０２に分けて管理されている。即ち、図１４の例は、４ウェイのセット・アソシアティブ方式のキャッシュメモリを示している。
【０００４】
また、各キャッシュウェイ１４０２は、＃１〜＃ｎの複数のキャッシュブロック（以降、単に「ブロック」と略すこともある）１４０３から構成されている。例えば、ｎ＝１０２４である。
【０００５】
各キャッシュブロック１４０３は、有効か否かを示す有効フラグ、タグ、及びデータから構成されている。データサイズは例えば、有効フラグが１ビット、タグが１５ビット、データが１２８ビットである。
【０００６】
キャッシュメモリ１４０１のサイズは、例えば、「キャッシュブロックのサイズ×キャッシュブロック数×キャッシュウェイ数＝１２８バイト×１０２４ブロック×４ウェイ」で計算され、例えば、５１２キロバイトのサイズを有する。
【０００７】
一方、プログラムによって指定されるメモリアクセスのためのアドレス１４０５は、３２ビットで指定され、下位から７ビットがキャッシュブロック内オフセット、１０ビットがインデックス、上位１５ビットがタグとして使用される。
【０００８】
以上の構成により、今、アドレス１４０５に対するデータ読出しが指定されると、アドレス１４０５内の１０ビットのインデックスにより、＃１〜＃ｎのブロック番号のうちの１つが指定される。その番号を＃ｉとする。
【０００９】
その結果、＃１〜＃４の各キャッシュウェイ１４０２から、指定されたブロック番号＃ｉに対応する各キャッシュブロック１４０３（＃ｉ）が読み出され、それぞれ＃１〜＃４のコンパレータ１４０４に入力される。
【００１０】
＃１〜＃４のコンパレータ１４０４は、読み出された各キャッシュブロック１４０３（＃ｉ）内のタグ値と指定されたアドレス１４０５内のタグ値との一致／不一致を検出する。この結果、＃１〜＃４のうち一致が検出されたコンパレータ１４０４において読み出されているキャッシュブロック１４０３（＃ｉ）が、キャッシュヒットしたということになり、そのブロックのデータが読み出される。これにより、主記憶メモリからの読出しよりも高速なデータ読出しが実現される。
【００１１】
どのコンパレータ１４０４においても一致が検出されなかった、又は一致が検出されても有効フラグが無効を示していたら、キャッシュヒットにはならず、主記憶メモリ上のアドレス１４０５からデータが読み出される。
【００１２】
一方、アドレス１４０５に対するデータ書込みが指定されると、読出しの場合と同様に、アドレス１４０５内の１０ビットのインデックスにより、＃１〜＃ｎのブロック番号のうちの１つ＃ｉが指定される。
【００１３】
次に、図１５に示されるような置換ウェイ選択回路１５０１が、＃１〜＃４の各キャッシュウェイ１４０２の指定されたブロック番号＃ｉに対応する４つのキャッシュブロック１４０３（＃ｉ）のうち、未使用（タグが未指定の）のブロック、又は有効フラグが無効を示しているブロック、どのブロックも使用中の場合には所定のアルゴリズムによって決定したウェイのブロックを選択し、図１５に示されるような４ビット値の選択信号を出力する。この４ビット値は、＃１〜＃４の４つのウェイのうちの１つを選択するためのデータである。４ビットのうち値１が設定されているビット位置に対応するウェイが選択される。このようにして置換ウェイ選択回路１５０１から出力された選択信号に基づいて、指定されたブロック番号＃ｉに対して選択し得る４つの＃１〜＃４の４つのウェイのうちの１つが選択された、そのキャッシュブロック１４０３に、データが書き込まれる。
【００１４】
どのブロックも使用中の場合に、＃１〜＃４の４つのキャッシュウェイ１４０２のうちどれを選択するかは、例えばＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）アルゴリズムによって決定される。このアルゴリズムでは、使われてから最も長い時間が経っているキャッシュウェイのキャッシュブロックデータが選択され、そのデータが置換される（追い出される）。
【００１５】
上述の動作説明から理解されるように、書き込まれるデータのサイズが大きい場合に、複数のデータにおいてアドレス１４０５のインデックスの値が一致し、それらのデータでキャッシュの競合が発生する可能性がある。このような場合であっても、セット・アソシアティブ方式のキャッシュメモリにおいては、インデックスによって＃１〜＃ｎのうち同じキャッシュブロック１４０３が指定されたとしても、複数のウェイからキャッシュブロックを選択できるため、例えば図１４の４ウェイ構成のキャッシュメモリ１４０１では、同じインデックスを持つ最大で４つまでのデータに対応することができる。
【００１６】
以上のような構成を有する一般的なキャッシュメモリにおいては、プログラマは、特定のデータだけはキャッシュメモリに残しておき高速アクセスができるようにしたいといった、明示的なデータの配置を指定することができない。このため、意図しないデータの追い出し（置換）によって、処理性能が劣化するという問題点があった。
【００１７】
この問題を解決するために従来、ローカルメモリやスクラッチパッド、あるいはキャッシュライン（ウェイ）ロックなどといった手法が提案されている。
特許文献１に記載の従来技術は、(１)通常のキャッシュメモリ領域と(２)スクラッチパッド（またはローカルメモリ）領域、に分割して使用することができるキャッシュメモリについて開示している。
【００１８】
特許文献２に記載の従来技術もまた、キャッシュメモリ領域を通常のキャッシュメモリ領域とローカルメモリ領域に分割して利用することを開示している。この従来技術では、キャッシュメモリ領域とローカルメモリ領域のそれぞれに対して、メインメモリのアドレス空間を個別に与え、メモリアクセス時にどちらの領域へのアクセスかを区別することによってデータの一貫性を維持している。
【００１９】
上記のようにキャッシュメモリ領域を分割するのではなく、キャッシュメモリ上での特定のキャッシュラインもしくはキャッシュウェイをロックすることによって、対象のデータが常にキャッシュメモリ上に存在し続けるようにすることができる従来技術も提案されている。
【００２０】
また、主としてストリームデータへのアクセスによるデータの意図しない追い出しを避ける従来技術として、最弱ウェイ方式がある。この方式は、メモリアクセス命令によってデータをキャッシュメモリに転送する際に、同一インデックス内で最初に追い出すべきデータであることを指示することができる。これにより、ストリームデータのように一度しか使用しないデータが、最も先に追い出されるようにすることができる。
【特許文献１】特開平１０−１８７５３３号公報
【特許文献２】特開平４−１７５９４６号公報
【特許文献３】特開２００３−２９６１９１号公報
【発明の開示】
【発明が解決しようとする課題】
【００２１】
しかし、特許文献１に記載の従来技術では、スクラッチパッド領域に対する特別な命令（メインメモリからデータを読み込むためのロード命令およびメインメモリへデータを書き戻すためのライトバック命令）が必要になる。また、キャッシュ領域、スクラッチパッド領域、メインメモリとの間でデータの一貫性を維持するための制御が必要になるといった問題もある。
【００２２】
特許文献２に記載の従来技術では、領域判定回路が必要になるという問題がある。さらに、メモリ空間を制御する必要が生じるためオペレーティングシステムによる管理も必要となる。
【００２３】
また、特許文献１及び２ともに、プログラム実行中に領域サイズを変更するといった操作には、大きな性能オーバヘッドも伴うという問題点を有していた。
また、キャッシュラインもしくはキャッシュウェイをロックする従来技術では、プログラマがロックを解除するための操作（アンロック操作と呼ぶ）を行うことを忘れたり、誤って全てのキャッシュ領域をロックしてしまった場合などに、キャッシュシステムが正常に動作しなくなり、最終的にはシステムが停止するといった問題が容易に発生し得る。そして、アンロックするための専用ハードウェア機構が必要となり、追加ハードウェアコストが大きいという問題点を有していた。
【００２４】
更に、最弱ウェイ方式の従来技術は、ローカルメモリ機能に関する従来技術と同時に実装することができないという問題点を有していた。
【課題を解決するための手段】
【００２５】
本発明の課題は、ハードウェア及びソフトウェアの変更のコストが小さく、性能オーバヘッドも小さく、ロック状態によるシステム停止のおそれもなく、かつローカルメモリ的な機能と最弱ウェイ方式を同時に実現可能なキャッシュメモリの実現にある。
【００２６】
本発明は、各セットが２つ以上のキャッシュウェイで構成されセット・アソシアティブ方式に基づいて動作し、キャッシュミスの発生時に決定された置換ウェイに対応するキャッシュウェイのキャッシュブロックのデータを置換するキャッシュ動作を行うキャッシュメモリを前提とする。
【００２７】
本発明の第１の態様は、以下の構成を有する。
セクタＩＤ情報記憶部（例えば図２のセクタＩＤ・ＲＡＭ２０３）は、メモリアクセス要求により特定されるキャッシュブロックの各キャッシュウェイに対応させて、その各キャッシュウェイの置換状態を制御するために定義され２つ以上の論理値を取り得るセクタＩＤ情報を記憶する。このセクタＩＤ情報は例えば２つの論理値又は３つ以上の論理値をとり得る。
【００２８】
置換ウェイ候補決定部（例えば図３の置換ウェイ選択可能マスク生成回路３０３）は、キャッシュミスの発生時に、メモリアクセス要求に付加されたセクタＩＤ情報と、メモリアクセス要求により特定されるキャッシュブロックの各キャッシュウェイに対応してセクタＩＤ情報記憶部に記憶されているセクタＩＤ情報とに基づいて、置換ウェイの候補である置換ウェイ候補を決定する。
【００２９】
置換ウェイ選択部（例えば置換ウェイ選択回路３０４）は、置換ウェイ候補から置換ウェイを選択して出力する。
セクタＩＤ情報更新部（例えば図３のセレクタ３０７）は、メモリアクセス要求により特定されるキャッシュブロックの置換ウェイにより指定されるキャッシュウェイに対応してセクタＩＤ情報記憶部に記憶されているセクタＩＤ情報を、メモリアクセス要求に付加されたセクタＩＤ情報によって更新する。
【００３０】
本発明の第２の態様は、上述の本発明の第１の態様に加えて、更に以下の構成を有する。
最大ウェイ数指定部（例えば図４のレジスタ４０２〜４０５）は、セクタＩＤ情報の各論理値ごとに割り当てることができるキャッシュウェイの最大値を最大ウェイ数として指定する。
【００３１】
比較部（例えば図４の置換セクタＩＤ決定回路４０１）は、キャッシュミスの発生時に、メモリアクセス要求により特定されるキャッシュブロックの各キャッシュウェイに対応してセクタＩＤ情報記憶部に記憶されているセクタＩＤ情報のうち、メモリアクセス要求に付加されたセクタＩＤ情報と同じセクタＩＤ情報を持つキャッシュウェイの数と、最大ウェイ数指定部で指定されるメモリアクセス要求に付加されたセクタＩＤ情報と同じセクタＩＤ情報の最大ウェイ数とを比較する。
【００３２】
そして、前述の置換ウェイ候補決定部（例えば図４の置換ウェイ選択可能マスク生成回路３０３）は、キャッシュミスの発生時に、その比較部による比較結果に応じて、メモリアクセス要求により特定されるキャッシュブロックの各キャッシュウェイに対応してセクタＩＤ情報記憶部に記憶されているセクタＩＤ情報のうち、メモリアクセス要求に付加されたセクタＩＤ情報以外のセクタＩＤ情報が記憶されているキャッシュウェイ群か、メモリアクセス要求に付加されたセクタＩＤ情報と同じセクタＩＤ情報が記憶されているキャッシュウェイ群の何れかの群を、置換ウェイ候補として決定する。
【００３３】
本発明の第３の態様は、上述の本発明の第２の態様に加えて、更に以下の構成を有する。
即ち、最大ウェイ数指定部（例えば図４のレジスタ４０２〜４０５）は、セクタＩＤ情報の各論理値ごとの最大ウェイ数の合計数がキャッシュメモリにおけるキャッシュウェイ数よりも大きくなるように、セクタＩＤ情報の各論理値ごとの最大ウェイ数を設定可能とする。
【００３４】
本発明の第４の態様は、前述の本発明の第１の態様に加えて、更に以下の構成を有する。
置換ウェイ候補決定部（例えば図１０の置換ウェイ選択可能マスク生成回路３０３）は
、キャッシュミスの発生時に、ユーザによって指定されたセクタＩＤ情報の所定値（例えば図１０の固定値１００１）については、比較部による比較結果は判定せずに、メモリアクセス要求により特定されるキャッシュブロックの各キャッシュウェイに対応してセクタＩＤ情報記憶部に記憶されているセクタＩＤ情報のうち、メモリアクセス要求に付加されたセクタＩＤ情報と同じセクタＩＤ情報が記憶されているキャッシュウェイ群を、置換ウェイ候補として決定する。
【００３５】
本発明の第５の態様は、上述の本発明の第１〜第４の何れかの態様に加えて、更に以下の構成を有する。
前述のセクタＩＤ情報更新部は、メモリアクセス要求によってキャッシュヒットが発生したときに、メモリアクセス要求により特定されるキャッシュブロックの置換ウェイにより指定されるキャッシュウェイに対応してセクタＩＤ情報記憶部に記憶されているセクタＩＤ情報を、メモリアクセス要求に付加されたセクタＩＤ情報によって更新する（例えば図７の７０１の構成）。
【発明の効果】
【００３６】
本発明によれば、メモリアクセス要求により特定されるキャッシュブロックの各キャッシュウェイに対応させてセクタＩＤ情報を付加することと単純な判定処理を用いることによって、少ないハードウェアコストでキャッシュメモリ上にローカルメモリ機能（高速メモリ領域）や最弱ウェイ方式と同等の機能を実現することができ、これを用いることで、プログラムの最適化を行い、プログラムの実効速度を向上することが可能となる。
【００３７】
本発明におけるハードウェアコストについては、主として最大ウェイ数を記憶するレジスタ(３ビット程度)、比較・マスク回路の追加、各キャッシュブロックに対応してセクタＩＤ情報を記憶するセクタＩＤ・ＲＡＭを追加するのみで済み、オペレーティングシステムに対して何ら変更の必要はないため、変更のコスト（ハードウェアおよびソフトウェア）が小さいという特徴を有する。
【００３８】
また、本発明では、性能に影響する処理は、現在のウェイ数と最大ウェイ数とを比較して、その結果に基づいてウェイのマスク処理を行う程度であるため、回路の複雑さによる性能に対する悪影響はほとんどない。
【００３９】
更に、本発明では、最大ウェイ数と現在のウェイ数の比較を行った結果に基づいて、必ず自セクタＩＤ情報又は他セクタＩＤ情報のいずれかのウェイが置換対象として選択されるため、ロック方式のようにすべてのウェイがロックされ、その結果、置換対象ウェイが存在しない、という状況は決して発生せず、システムが停止することはない。
【００４０】
加えて、本発明では、各セクタＩＤ情報の値について独立に最大ウェイ数を設定することができ、かつ各セクタＩＤ情報の値の最大ウェイ数の合計値が現在キャッシュメモリに装備されているキャッシュウェイ数の最大値を超えてもよいという条件を許すことによって、各セクタＩＤ情報に割り当てられたキャッシュウェイをオーバーラップして設定することができる。これにより、最弱ウェイ方式と同等の機能を実現することが可能となる。
【発明を実施するための最良の形態】
【００４１】
以下、図面を参照しながら、本発明を実施するための最良の形態を詳細に説明する。
図１は、本発明の実施形態によるキャッシュメモリの機能構成図である。なお、図１の構成は一例であり、本発明は図１の構成に限定されるものではない。
【００４２】
本実施形態によるキャッシュメモリは、図１４の場合と同様に、４ウェイのセット・アソシアティブ方式のキャッシュメモリとして実現される。
キャッシュメモリ１０１は、＃１〜＃４の複数のキャッシュウェイ１０２に分けて管理され、各キャッシュウェイ１０２は、＃１〜＃ｎの複数のキャッシュブロック１０３から構成されている。例えば、ｎ＝１０２４である。
【００４３】
図１の実施形態においては、各キャッシュブロック１０３は、一般的な有効フラグ（１ビット、これはない場合もある）、タグ（１５ビット）、データ（１２８バイト）に加えて、セクタＩＤを有することが大きな特徴である。このセクタＩＤは、１ビット又は２ビットで構成される。１ビットの場合は、セクタＩＤの値は０か１の何れかの値を取り得る。２ビットの場合は、セクタＩＤは、０〜２の３通り又は０〜３の４通りの値を取り得る。
【００４４】
キャッシュメモリ１０１のサイズは、「キャッシュブロックのサイズ×キャッシュブロック数×キャッシュウェイ数＝１２８バイト×１０２４ブロック×４ウェイ」で計算され、例えば、５１２キロバイトのサイズを有する。
【００４５】
一方、プログラムによって指定されるメモリアクセスのためのアドレス１０５は、３２ビットで指定され、下位から７ビットがキャッシュブロック内オフセット、１０ビットがインデックス、上位１５ビットがタグとして使用される。
【００４６】
以上の構成により、今、アドレス１０５に対するデータのアクセス（読出し又は書込み）が指定されると、アドレス１０５内の１０ビットのインデックスにより、＃１〜＃ｎのブロック番号のうちの１つが指定される。指定されたブロックの番号を＃ｉとする。
【００４７】
その結果、＃１〜＃４の各キャッシュウェイ１０２から、指定されたブロック番号＃ｉに対応する各キャッシュブロック１０３（＃ｉ）が読み出され、それぞれ＃１〜＃４のコンパレータ１０４に入力される。
【００４８】
＃１〜＃４のコンパレータ１０４は、読み出された各キャッシュブロック１０３（＃ｉ）内のタグ値と、指定されたアドレス１０５内のタグ値との一致／不一致を検出する。この結果、＃１〜＃４のうちタグ値の一致が検出されたコンパレータ１０４において読み出されているキャッシュブロック１０３（＃ｉ）が、キャッシュヒットしたということになり、そのブロックに対してデータが読み書きされる。
【００４９】
どのコンパレータ１０４においてもタグ値の一致が検出されなかった、又はタグ値の一致が検出されても有効フラグが無効を示していたら、キャッシュヒットにはならず、主記憶メモリ上のアドレス１０５がアクセスされる。本実施形態は、特にこのキャッシュミス時のキャッシュメモリ１０１の置換手法に特徴がある。
【００５０】
図２は、キャッシュメモリに関する図１の機能構成に対応するハードウェア構成を示す図である。
図１の各キャッシュブロック１０３を構成するデータ、タグ、及びセクタＩＤは、それぞれデータＲＡＭ２０１、タグＲＡＭ２０２、及びセクタＩＤ・ＲＡＭ２０３の３領域に分割して記憶される。データＲＡＭ２０１、タグＲＡＭ２０２、及びセクタＩＤ・ＲＡＭ２０３は、それぞれ４つの領域に分割され、各ＲＡＭの各領域はそれぞれ、図１の＃１〜＃４のキャッシュウェイ１０２を構成する。なお、有効フラグは、タグＲＡＭ２０２にタグ値が記憶されているか否かで代用されるが、別途有効フラグ用のＲＡＭが設けられてもよい。
【００５１】
今、アドレス１０５に対するデータアクセスが指定されると、アドレス１０５内の１０ビットのインデックスにより、タグＲＡＭ２０２における＃１〜＃ｎのブロック番号のう
ちの１つ＃ｉが指定される。
【００５２】
その結果、タグＲＡＭ２０２内の＃１〜＃４の各キャッシュウェイ１０２から、指定されたブロック番号＃ｉに対応する各キャッシュブロック１０３（＃ｉ）のタグ値が読み出され、それぞれ＃１〜＃４のコンパレータ１０４に入力される。
【００５３】
＃１〜＃４のコンパレータ１０４は、タグＲＡＭ２０２から読み出された各キャッシュブロック１０３（＃ｉ）のタグ値と指定されたアドレス１０５内のタグ値との一致／不一致を検出する。そして、キャッシュヒットが発生した場合、４つのコンパレータ１０４からは、タグ値の一致が検出されたコンパレータ１０４の出力のみが１となる、４ビットのヒットウェイ信号が出力される。
【００５４】
キャッシュヒットが発生した場合であってメモリアクセス要求が読出し要求の場合には、データＲＡＭ２０１において、アドレス１０５内の１０ビットのインデックスにより指定されるブロック番号＃ｉから、＃１〜＃４の各キャッシュウェイ１０２に対応する４つのキャッシュブロック１０３（＃ｉ）のデータ値がセレクタ２０４に読み出される。そして、４つのコンパレータ１０４から出力されているヒットウェイ信号により、タグ値の一致が検出されたコンパレータ１０４に対応する何れかのキャッシュウェイに対応するキャッシュブロック１０３（＃ｉ）のデータ値が選択されて出力される。
【００５５】
キャッシュヒットが発生した場合であってメモリアクセス要求が書込み要求の場合には、データＲＡＭ２０１において、アドレス１０５内の１０ビットのインデックスにより指定されるブロック番号＃ｉにおける、＃１〜＃４の各キャッシュウェイ１０２に対応する４つのキャッシュブロック１０３（＃ｉ）のうち、ヒットウェイ信号により指示されるキャッシュウェイのブロックに、メモリアクセス要求によって指定されるデータが書き込まれる。
【００５６】
セレクタ２０５の動作については、後述する。
第１の実施形態
第１の実施形態の構成及び動作について説明する。
【００５７】
以降の説明では、ユーザプログラムに基づくメモリアクセス要求についてのみ説明するが、ハードウェアによるメモリアクセス要求についても同様に動作する。
また、第１の実施形態では、セクタＩＤが１ビットの場合について説明する。
【００５８】
図３は、メモリアクセス要求３０８に対して図１又は図２の構成を有するキャッシュメモリ１０１においてキャッシュミスが発生したときに、インデックスにより指定されたブロック番号に対応する＃１〜＃４の４つのキャッシュウェイ１０２のキャッシュブロック１０３のデータのうち、どのウェイが置換されるべきかを決定する、置換ウェイ制御回路の構成図である。
【００５９】
なお、キャッシュミスが発生しているかどうかは、図１又は図２に示されるどのコンパレータ１０４においてもタグ値の一致が検出されていない状態、即ち、＃１〜＃４の全てのコンパレータ１０４の出力がアクティブでない場合として検出できる。  図３において、まず、メモリアクセス要求３０８には、キャッシュメモリ１０１におけるデータの置換状態を制御するための１ビットのセクタＩＤが３０２が付加される。
【００６０】
置換ウェイ選択可能マスク生成回路３０３には、図２に示されるセクタＩＤ・ＲＡＭ２０３内の、メモリアクセス要求３０８のアドレス１０５中のインデックスにより指定されたブロック番号から、＃１〜＃４のキャッシュウェイ１０２（図２参照）に対応する４ビ
ットのセクタＩＤ３０１と、メモリアクセス要求３０８に付加されている１ビットのセクタＩＤ３０２とが入力する。
【００６１】
そして、置換ウェイ選択可能マスク生成回路３０３は、エクスクルーシブオア回路（ＸＯＲ）３０３−１とインバータ（ＩＮＶ）３０３−２とによって構成され、メモリアクセス要求３０８からの１ビットのセクタＩＤ３０２と、セクタＩＤ・ＲＡＭ２０３からの４ビットのセクタＩＤ３０１の各ビットとの間で、エクスクルーシブノア演算を実行する。
【００６２】
これにより、メモリアクセス要求３０８に付加されているセクタＩＤ３０２のビット値（図３の例では「０」）と同じセクタＩＤのビット値を持つビット位置のみが値１となる、置換ウェイ候補３０９が出力される。例えば、図２のセクタＩＤ・ＲＡＭ２０３から４ビットのセクタＩＤ３０１として「０００１」が読み出されている場合には、そのうちの値「０」の部分が一致により「１」、値「１」の部分が不一致により「０」となることにより、４ビットからなる置換ウェイ候補３０９として「１１１０」が出力される。この置換ウェイ候補３０９は、値１を有するビット位置に対応するキャッシュウェイ１０２が、メモリアクセス要求３０８によって置換されるべきウェイであることを指示している。
【００６３】
そして、置換ウェイ選択回路３０４は、置換ウェイ候補３０９において値が１であるビット位置に対応するウェイのうちの何れか１つを、ＬＲＵアルゴリズム等に従って選択し、選択されたウェイに対応するビット位置のみが１となる４ビットからなる置換ウェイ３１０（図３の例では「１０００」）を出力する。
【００６４】
置換ウェイ３１０は、セレクタ３０５、３０６、及び３０７に入力し、各セレクタにおいて、置換ウェイ３１０の４ビットのデータのうち値が１となるビット位置に対応するウェイを選択させる。
【００６５】
即ち、セレクタ３０５、３０６、３０７は、それぞれに入力するメモリアクセス要求３０８に対応するデータ、タグ、及びセクタＩＤを、それぞれデータＲＡＭ２０１、タグＲＡＭ２０２、及びセクタＩＤ・ＲＡＭ２０３内の、置換ウェイ３１０の４ビットのデータのうち値が１となるビット位置に対応するウェイに出力する。
【００６６】
また、メモリアクセス要求３０８内のインデックスが、データＲＡＭ２０１、タグＲＡＭ２０２、及びセクタＩＤ・ＲＡＭ２０３のブロック番号を指定する。
これにより、データＲＡＭ２０１、タグＲＡＭ２０２、及びセクタＩＤ・ＲＡＭ２０３において、指定されたブロック番号の選択されたウェイのキャッシュブロック１０３（塗りつぶされた部分に、データ、タグ、及びセクタＩＤが書き込まれる。
【００６７】
なお、データＲＡＭ２０１に書き込まれるデータは、メモリアクセス要求３０８が読出し要求の場合には、特には図示しない主記憶メモリ上の対応するアドレス１０５から読み出されたデータであり、メモリアクセス要求３０８が書込み要求の場合には、メモリアクセス要求３０８に指定されている書込みデータである。
【００６８】
以上のようにして、第１の実施形態では、キャッシュミス時に、メモリアクセス要求３０８に付加されているセクタＩＤが０のときはセクタＩＤ・ＲＡＭ２０３内のセクタＩＤが０であるキャッシュウェイが、メモリアクセス要求３０８に付加されているセクタＩＤが１のときはセクタＩＤ・ＲＡＭ２０３内のセクタＩＤが１であるキャッシュウェイが選択され、データＲＡＭ２０１内のインデックスによって指定されたブロック番号の上記選択されたキャッシュウェイのキャッシュブロック１０３のデータが、メモリアクセス要求３０８に対応するデータによって置換される。
【００６９】
上述の機能により、ユーザはまず、キャッシュメモリ１０１から追い出したくないデータ（即ち、高速メモリアクセスを要求するデータ）についてのメモリアクセス要求３０８については、そのメモリアクセス要求３０８に例えばセクタＩＤ＝１（０でもよい）を指定してメモリアクセスを行う。その後、ユーザは、キャッシュメモリ１０１からすぐに追い出されてもよいデータについてのメモリアクセス要求３０８を実行する場合には、そのメモリアクセス要求３０８に例えばセクタＩＤ＝０（１でもよい）を指定してメモリアクセスを行う。これにより、セクタＩＤ＝０を付されて実行されたメモリアクセス要求３０８のデータについては、キャッシュミス時にキャッシュメモリ１０１上でセクタＩＤ＝０が記憶されたキャッシュウェイにおいてのみ置換が発生し、最初にセクタＩＤ＝１と共にキャッシュメモリ１０１に書き込まれたデータは置換されず追い出されない。
【００７０】
このようにして、第１の実施形態の機能により、どのデータを追い出すかどうかを、メモリアクセス要求３０８に付したセクタＩＤによって制御することができるようになる。このメモリアクセス要求３０８は、ユーザがプログラムによる指定するアクセス命令であってもよく、又はシステムの特定のハードウェアがキャッシュメモリ１０１に対して自動的に発行する要求であってもよい。
【００７１】
第２の実施形態
図４は、第２の実施形態の構成図である。
図４の構成において、図３の構成と同じ番号が付された部分は、第１の実施形態の場合と同じ機能を有する。
【００７２】
図４の構成が図３の構成と異なる部分は、メモリアクセス要求３０８に付加されているセクタＩＤ３０２がそのまま置換ウェイ選択可能マスク生成回路３０３に入力されるのではなく、セクタＩＤ３０２が置換セクタＩＤ決定回路４０１で判定されて置換セクタＩＤ４０６に変換されてから置換ウェイ選択可能マスク生成回路３０３に入力される点である。
【００７３】
置換セクタＩＤ決定回路４０１には、下記の４つのレジスタが接続される。
・セクタ０用最大ウェイ数レジスタ４０２
・セクタ１用最大ウェイ数レジスタ４０３
・現在のセクタ０のウェイ数レジスタ４０４
・現在のセクタ１のウェイ数レジスタ４０５
セクタ０用最大ウェイ数レジスタ４０２及びセクタ１用最大ウェイ数レジスタ４０３には、各キャッシュブロック１０３において、セクタＩＤとしてそれぞれ値０及び値１を設定することのできる最大ウェイ数が設定される。これらのレジスタ値は、プログラムから設定可能である。
【００７４】
次に、現在のセクタ０のウェイ数レジスタ４０４及び現在のセクタ１のウェイ数レジスタ４０５には、メモリアクセス要求３０８のアドレス１０５中のインデックスにより或るブロック番号が指定された時点における、セクタＩＤ・ＲＡＭ２０３から読み出される４ビットのセクタＩＤ３０１において値０が設定されているビット数（ウェイ数）と、値１が設定されているビット数（ウェイ数）とがカウントされて、セットされる。
【００７５】
以上の４つのレジスタ４０２〜４０５は、例えば図５に示されるように、それぞれ３ビットで構成されており、０から４（最大ウェイ数）までの値をとる。
図４において、置換セクタＩＤ決定回路４０１では、メモリアクセス要求３０８にセクタＩＤ＝０が指定されている場合には、セレクタ４０１−１がセクタ０用最大ウェイ数レジスタ４０２の出力を、セレクタ４０１−２が現在のセクタ０のウェイ数レジスタ４０４の出力をそれぞれ選択し、それらを比較器４０１−３に入力させる。逆に、メモリアクセ
ス要求３０８にセクタＩＤ＝１が指定されている場合には、セレクタ４０１−１がセクタ１用最大ウェイ数レジスタ４０３の出力を、セレクタ４０１−２が現在のセクタ１のウェイ数レジスタ４０５の出力をそれぞれ選択し、それらを比較器４０１−３に入力させる。
【００７６】
この結果、比較器４０１−３は、メモリアクセス要求３０８にて指定されたセクタＩＤ値に関して、最大ウェイ数と現在のウェイ数とを比較する。ここで、最大ウェイ数は、何ウェイまで当該セクタＩＤのウェイ数が増加してもよいか、という上限を与える情報である。
【００７７】
図４の例では、メモリアクセス要求３０８に付加されているセクタＩＤの値が１であるため、比較器４０１−３は、セクタ１用最大ウェイ数レジスタ４０３に設定されているセクタＩＤ＝１の最大ウェイ数と、現在のセクタ１のウェイ数レジスタ４０５に設定されている書込みブロックにおける現在のセクタＩＤ＝１のウェイ数とを比較する。
【００７８】
比較器４０１−３での比較の結果、指定されたセクタＩＤに関して「現在のウェイ数<最大ウェイ数」である場合には、まだ指定されたセクタＩＤ値を持つウェイ数を増やしてよいことを意味する。このため、セレクタ４０１−５は、指定されたセクタＩＤとは逆の値を有するセクタＩＤが設定されているウェイに対する置換を指示するための置換セクタＩＤ４０６を出力する。即ち、セレクタ４０１−５は、メモリアクセス要求３０８に付加されているセクタＩＤ３０２をインバータ４０１−４で反転させた値を選択し、それを置換セクタＩＤ４０６として出力する。
【００７９】
一方、比較器４０１−３での比較の結果、指定されたセクタＩＤに関して「現在のウェイ数≧最大ウェイ数」である場合には、それ以上指定されたセクタＩＤ値を持つウェイ数は増やせないため、セレクタ４０１−５は、指定されたセクタＩＤ値が設定されているウェイ中での置換を指示するための置換セクタＩＤ４０６を出力する。即ち、セレクタ４０１−５は、メモリアクセス要求３０８に付加されているセクタＩＤ３０２をそのまま選択し、それを置換セクタＩＤ４０６として出力する。
【００８０】
図４の例では、比較器４０１−３でのセクタＩＤ＝１に関する比較の結果、指定されたセクタＩＤ＝１に関して「現在のウェイ数<最大ウェイ数」である場合には、まだセクタＩＤ＝１のウェイ数を増やしてよいことを意味するため、セレクタ４０１−５は、メモリアクセス要求３０８に付加されているセクタＩＤ＝１をインバータ４０１−４で反転させた値０を選択し、それを置換セクタＩＤ４０６として出力する。
【００８１】
上述の置換セクタＩＤ４０６は、置換ウェイ選択可能マスク生成回路３０３に入力される。
置換ウェイ選択可能マスク生成回路３０３と置換ウェイ選択回路３０４の動作は、図３で示した第１の実施形態の場合と同様である。
【００８２】
即ち、図４において、置換ウェイ選択可能マスク生成回路３０３は、セクタＩＤ・ＲＡＭ２０３から読み出されている４ビットのセクタＩＤ３０１の各ビット値（図４の例では「０００１」）と、上記置換セクタＩＤ４０６のビット値０とのエクスクルーシブノア演算を実行することにより、置換セクタＩＤ４０６のビット値０と同じセクタＩＤ＝０を持つビット位置のみが値１となる、４ビットからなる置換ウェイ候補３０９（図４の例では「１１１０」）を出力する。
【００８３】
そして、置換ウェイ選択回路３０４は、置換ウェイ候補３０９において、値が１であるビット位置に対応するウェイのうちの何れか１つを、ＬＲＵアルゴリズム等に従って選択し、選択されたウェイに対応するビット位置が１となる４ビットからなる置換ウェイ３１
０（図４の例では「１０００」）を出力する。
【００８４】
この置換ウェイ３１０は、図３と同様のセレクタ３０５、３０６、及び３０７に入力し、各セレクタにおいて、置換ウェイ３１０の４ビットのデータのうち値が１となるビット位置に対応するウェイを選択させる。
【００８５】
この結果、第１の実施形態の場合と同様にして、図３で説明したように、データＲＡＭ２０１、タグＲＡＭ２０２、及びセクタＩＤ・ＲＡＭ２０３において、メモリアクセス要求３０８中のアドレス内のインデックスにより指定されたブロック番号＃ｉの、セレクタ３０５、３０６，及び３０７にて選択されたウェイのキャッシュブロック１０３（塗りつぶされた部分）に、データ、タグ、及びセクタＩＤが書き込まれる。
【００８６】
、上記書込みのタイミングで、図４の例では、セクタＩＤ・ＲＡＭ２０３における指定ブロック番号＃ｉの４ビットのセクタＩＤは、「０００１」から「１００１」に更新される。即ち、いままでセクタＩＤ＝０であったキャッシュウェイのキャッシュブロックが置換され、セクタＩＤ＝１になる。
【００８７】
図６は、図４の構成において、図６に示される(1) 〜(7) の７回のメモリアクセス要求３０８が発生し、それらの全ての要求でキャッシュミスが発生して置換が起こった場合の動作例を示した図である。
【００８８】
図中の４つの四角は、キャッシュメモリ１０１のデータＲＡＭ２０１における或るブロック番号での＃１〜＃４の各ウェイを表している。四角は、セクタＩＤ＝０のときは白、セクタＩＤ＝１のときはグレーに塗り潰されている。四角の中の数値は、アクセス履歴を表しており、数値の大きいものほど新しい（最近アクセスされた）ウェイであることを示す。
【００８９】
この図では、(1) 〜(7)の各メモリアクセス要求３０８において、「Ｓｅｃ．０」及び「Ｓｅｃ．１」は、それぞれ各メモリアクセス要求３０８に付加されているセクタＩＤの値が０及び１の場合を示している。また、「Ｓｅｃ．０」及び「Ｓｅｃ．１」の右横の数字は、各メモリアクセス要求３０８発生時の最大ウェイ（ＷＡＹ）数を示している。
【００９０】
メモリアクセス要求３０８が発生するたびに、現在のウェイ数と最大ウェイ数の比較が行われ、置換ウェイが選択される。
例えば、最初の(1) のメモリアクセス要求が発生したときには、要求にて指定されたセクタＩＤ＝０、最大ウェイ数＝４である。このとき、セクタＩＤ＝０の現在のウェイ数はその直前の状態（図６の最上段の状態）を見ると３であり、要求で指定された最大ウェイ数＝４よりも小さい。従って、他のセクタＩＤ＝１のウェイ（グレーに塗られたウェイ）をセクタＩＤ＝０に置換することを指示する置換セクタＩＤ＝「１」が置換セクタＩＤ決定回路から出力される。この結果、置換セクタＩＤと現在のセクタＩＤの状態「０１００」とのエクスクルーシブノア演算により、置換ウェイ候補として「０１００」が置換ウェイ選択可能マスク生成回路から出力され、置換ウェイも「０１００」となって、セクタＩＤ値が１のウェイで置換が発生する。
【００９１】
２番目の(2) のメモリアクセス要求３０８が発生したときには、要求にて指定されたセクタＩＤ＝０、最大ウェイ数＝３である。一方、(2) の直前（＝(1) ）の状態はセクタＩＤ＝０の現在のウェイ数＝４であり、要求で指定される最大ウェイ数よりも大きい。従って、セクタＩＤ＝０を置換することを指示する置換セクタＩＤ＝「０」が置換セクタＩＤ決定回路から出力される。この結果、置換セクタＩＤと(1)のセクタＩＤの状態「００００」とのエクスクルーシブノア演算により、置換ウェイ候補として「１１１１」が置換ウ
ェイ選択可能マスク生成回路から出力され、更に、置換ウェイ選択回路でのＬＲＵ判定により、セクタＩＤ＝０の４つのウェイのうち最も古いウェイを置換することを指示する置換ウェイ＝「０００１」が置換ウェイ選択回路から出力されて、値が１のウェイで置換が発生する。
【００９２】
３番目の(3) のメモリアクセス要求３０８が発生したときには、要求にて指定されたセクタＩＤ＝１、最大ウェイ数＝２である。一方、(3) の直前（＝(2) ）の状態はセクタＩＤ＝１の現在のウェイ数＝０であり、要求で指定された最大ウェイ数よりも小さい。従って、他のセクタＩＤ＝０のウェイを置換することを指示する置換セクタＩＤ＝「０」が置換セクタＩＤ決定回路から出力され、この結果、現在（＝(2) ）のセクタＩＤの状態「００００」とのエクスクルーシブノア演算により、置換ウェイ候補として「１１１１」が置換ウェイ選択可能マスク生成回路から出力され、更に、置換ウェイ選択回路でのＬＲＵ判定により、セクタＩＤ＝０の４つのウェイのうち最も古いウェイを置換することを指示する置換ウェイ＝「００１０」が置換ウェイ選択回路から出力されて、値が１のウェイで置換が発生する。
【００９３】
４番目の(4) のメモリアクセス要求３０８が発生したときには、要求にて指定されたセクタＩＤ＝１、最大ウェイ数＝２であり、(4) の直前（＝(3) ）の状態はセクタＩＤ＝１の現在のウェイ数＝１であり、最大ウェイ数よりも小さい。従って、他のセクタＩＤ＝０のウェイを置換することを指示する置換セクタＩＤ＝「０」が置換セクタＩＤ決定回路から出力され、この結果、現在（＝(3) ）のセクタＩＤの状態「００１０」とのエクスクルーシブノア演算により、置換ウェイ候補として「１１０１」が置換ウェイ選択可能マスク生成回路から出力され、更に、置換ウェイ選択回路でのＬＲＵ判定により、セクタＩＤ＝０の３つのウェイのうち最も古いウェイを置換することを指示する置換ウェイ＝「１０００」が置換ウェイ選択回路から出力されて、値が１のウェイで置換が発生する。
【００９４】
５番目の(5) のメモリアクセス要求３０８が発生したときには、要求にて指定されたセクタＩＤ＝１、最大ウェイ数＝２であり、(5) の直前（＝(4) ）の状態はセクタＩＤ＝１の現在のウェイ数＝２であり、最大ウェイ数以上と（等しく）なる。従って、同じセクタＩＤ＝１のウェイを再利用して置換することを指示する置換セクタＩＤ＝「１」が置換セクタＩＤ決定回路から出力され、この結果、現在（＝(4) ）のセクタＩＤの状態「１０１０」とのエクスクルーシブノア演算により、置換ウェイ候補として「１０１０」が置換ウェイ選択可能マスク生成回路から出力され、更に、置換ウェイ選択回路でのＬＲＵ判定により、セクタＩＤ＝１の２つのウェイのうち古いほうのウェイを置換することを指示する置換ウェイ＝「００１０」が置換ウェイ選択回路から出力されて、値が１のウェイで置換が発生する。
【００９５】
以下、６番目の(6) 及び７番目の(7) のメモリアクセス要求３０８が発生した場合も同様に、要求にて指定されたセクタＩＤ＝１、最大ウェイ数＝２であり、それぞれの直前の状態はセクタＩＤ＝１の現在のウェイ数＝２であり、最大ウェイ数以上と（等しく）なる。従って、同じセクタＩＤ＝１のウェイが再利用されて置換される。
【００９６】
以上のようにして、第２の実施形態では、ユーザが設定できる各セクタＩＤの最大ウェイ数に応じて、キャッシュメモリ１０１に対する置換動作をコントロールすることができる。
【００９７】
第３の実施形態
次に、図１及び図２の構成に基づく第３の実施形態の構成及び動作について説明する。
図７は、メモリアクセス要求３０８に対して図１又は図２の構成を有するキャッシュメモリ１０１においてキャッシュヒットが発生したときの、ヒットウェイ制御回路に関する
実施形態の構成図である。
【００９８】
図７のヒットウェイ更新回路７０１は、例えば図２のセレクタ２０５内に設けられ、図２に示される４つのコンパレータ１０４から出力される４ビットのヒットウェイ信号７０２が入力する。このヒットウェイ信号７０２においては、＃１〜＃４のキャッシュウェイ１０２（図１又は図２参照）のうち、キャッシュヒットが発生したキャッシュウェイに対応するビット値のみが１となっている。
【００９９】
ヒットウェイ更新回路７０１は、メモリアクセス要求３０８内のアドレス１０５のインデックスによって指定されるセクタＩＤ・ＲＡＭ２０３内のブロック番号から読み出された４ビットの現セクタＩＤ情報７０３において、ヒットウェイ信号７０２のビット値が１となるキャッシュウェイに対応するセクタＩＤ値を、メモリアクセス要求３０８に付加されているセクタＩＤ７０４の値に更新し、その結果得られる新セクタＩＤ７０５を、セクタＩＤ・ＲＡＭ２０３内の、上記ブロック番号に対応する位置に書き戻す。
【０１００】
このようにして、キャッシュヒットが発生したキャッシュブロック１０３のセクタＩＤ値は、常にメモリアクセス要求３０８で指定されたセクタＩＤ値に一致し、処理の矛盾が発生しないように制御される。
【０１０１】
図８は、図７の構成において、図８に示される(1) 〜(5) の５回のメモリアクセス要求３０８が発生し、(1) 〜(4) のメモリアクセス要求３０８ではキャッシュミスが発生して置換が起こり、最後の(5) のメモリアクセス要求３０８ではキャッシュヒットが発生した場合の動作例を示した図である。
【０１０２】
図８の(1) 〜(4)のメモリアクセス要求３０８に対応する動作は、図６の(1) 〜(4)のメモリアクセス要求３０８に対応するものと同様である。
図８において、５番目の(5) のメモリアクセス要求３０８が発生したときには、要求にて指定されたセクタＩＤ＝１、最大ウェイ数＝２であり、(5) の直前（＝(4) ）の状態はセクタＩＤ＝１の現在のウェイ数＝２であるが、ここで、（４）における右端のセクタＩＤ＝０のキャッシュウェイにてキャッシュヒットが発生したとする。この場合には、第２の実施形態で説明した最大ウェイ数に関する参照・制御は行われずに、キャッシュヒットが発生したキャッシュウェイのセクタＩＤ値が、セクタＩＤ＝０から、メモリアクセス要求３０８によって指定されたセクタＩＤ＝１に更新される。
【０１０３】
第４の実施形態
次に、第４の実施形態について説明する。
第４の実施形態の構成は、図４に示される本発明の第２の実施形態の構成と基本的には同じである。ただし、「セクタ０用最大ウェイ数＋セクタ１用最大ウェイ数＞キャッシュメモリの総ウェイ数」という条件を許すことによって、セクタＩＤ＝０の領域とセクタＩＤ＝１の領域を重ねる（オーバーラップする）ことができる。これにより、あるセクタＩＤに割り当てられた領域の中で、
・他方のセクタＩＤの要求によって、追い出されやすいウェイ
・追い出されにくい、もしくは、追い出されないウェイ
を区別して作ることができる。
【０１０４】
具体的には、図４のセクタ０用最大ウェイ数レジスタ４０２とセクタ１用最大ウェイ数レジスタ４０３に設定される最大ウェイ数を、上記条件を許すように設定できるものとする。
【０１０５】
第４の実施形態の動作を、図９によって説明する。
図９では、第４の実施形態により、最弱ウェイ方式を実現する動作例について説明する。
【０１０６】
最弱ウェイ方式とは、キャッシュブロックの置換が必要となったときに、意図したキャッシュブロックが必ず最初に追い出されるように制御する方式である。
図９において、セクタ０用最大ウェイ数レジスタ４０２には４が設定され、セクタ１用最大ウェイ数レジスタ４０３には１が設定される。図１又は図２の構成のキャッシュメモリ１０１の最大ウェイ数は４であるため、図９の９０１に示されるキャッシュウェイの状態のように、１ウェイがオーバーラップして共用される状態となる。
【０１０７】
ユーザは例えば、必ず最初にデータが追い出されるウェイ（これを「最弱ウェイ」と呼ぶ）に関するメモリアクセス要求３０８に対しては、例えばセクタＩＤ＝１を設定し、そのセクタＩＤ値の最大ウェイ数レジスタにセットされる最大値としては小さな値を設定する。また、そのセクタＩＤ値以外のセクタＩＤ値の最大ウェイ数レジスタにセットされる最大値としては、前述のようにオーバーラップし得る大きな値が設定する。
【０１０８】
図９の例では、セクタＩＤ＝１が最弱ウェイのセクタＩＤである。
今、図９（１）の状態は、或るブロック番号の４つのウェイのうち、３つのウェイのキャッシュブロックにはセクタＩＤ＝０（図中では「セクタ０」と表記されている）のデータが記憶され、１つのウェイのキャッシュブロックにはセクタＩＤ＝１（図中では「セクタ１」と表記されている）のデータが記憶されている。
【０１０９】
この状態で、図９（２）に示されるように、上記ブロック番号に対して、セクタＩＤ＝０が付加されたメモリアクセス要求３０８が発生すると、そのブロック番号におけるセクタＩＤ＝０のウェイ数（＝３）はまだその最大数＝４に達していないため、前述した第２の実施形態において説明した図４の置換セクタＩＤ決定回路４０１の動作に基づいて、セクタＩＤ＝１が記憶されているウェイのキャッシュブロックが置換されて（追い出されて）、全てセクタＩＤ＝０のウェイになる。
【０１１０】
次に、図９（３）に示されるように、上記ブロック番号に対して、セクタＩＤ＝１が付加されたメモリアクセス要求３０８が発生すると、そのブロック番号におけるセクタＩＤ＝１のウェイ数（＝０）はまだその最大数＝１に達していないため、上記と同様にして、セクタＩＤ＝０が記憶されている４ウェイのキャッシュブロックのうちの１つが置換されて（追い出されて）、１つだけセクタＩＤ＝１のウェイになる。
【０１１１】
特には図示していないが、この後、セクタＩＤ＝１が付加されたメモリアクセス要求３０８が発生しても、上記セクタＩＤ＝１が記憶された１ウェイのキャッシュブロックが次々に置換されるだけで、セクタＩＤ＝１が記憶されたウェイは１ウェイ以上には増えない。一方、セクタＩＤ＝０が付加されたメモリアクセス要求３０８が発生すると、上記セクタＩＤ＝１が記憶されたキャッシュブロックは、セクタＩＤ＝０のメモリアクセス要求３０８にすぐに置換されて追い出されてしまう。
【０１１２】
以上のようにして、第４の実施形態により、いわゆる最弱ウェイ方式と同等の機能を実現することが可能となる。
【０１１３】
第５の実施形態
図１０は、第２の実施形態で示した置換ウェイ制御回路の更なる改良形態に関する第５の実施形態の構成図である。
【０１１４】
図１０の構成において、図３の構成又は図４の構成と同じ番号が付された部分は、第１又は第２の実施形態の場合と同じ機能を有する。
図１０の構成が図４の構成と異なる点は、置換セクタＩＤ決定回路４０１に対して更に、メモリアクセス要求３０８に付加されているセクタＩＤ３０２の値に応じて、置換セクタＩＤ決定回路４０１の出力４０６若しくは固定値１００１の何れかを選択して、置換セクタＩＤ１００３として出力するセレクタ１００２が追加された点である。
【０１１５】
この追加された機能により、例えば、固定値１００１が値０とされた場合において、セクタＩＤ＝１が指定された場合には、最大ウェイ数に基づいてセクタＩＤ＝０又はセクタＩＤ＝１の何れのキャッシュウェイを置換するかが置換セクタＩＤ決定回路４０１によって決定され、セレクタ１００２によってその結果が置換セクタＩＤ４０６として出力される。これに対して、セクタＩＤ＝０が指定された場合には、セレクタ１００２によって、必ずセクタＩＤ＝０(自セクタＩＤと同じ値)が置換対象となる、という機能が実現できる。
【０１１６】
ユーザは例えば、最初は固定値１００１を設定せずに第２の実施形態の動作を行わせ、その後の或るタイミングにおいて、プログラムから固定値１００１＝「０」を設定することにより、それ以降はセクタＩＤ＝１のキャッシュブロックは最大ウェイ数との関連でセクタＩＤ＝０が記憶されたキャッシュブロックのデータを置換して増やすことができるが、セクタＩＤ＝０のキャッシュブロックについてはセクタＩＤ＝１が記憶されたキャッシュブロックのデータを置換して増やされることはない、といった制御状況を作り出すことができる。
【０１１７】
このようにして、セクタＩＤ＝１の領域は、セクタＩＤ＝１が付加されたメモリアクセス要求３０８によって必要に応じて増加させることができるのに対し、セクタＩＤ＝０の領域は、一旦セクタＩＤ＝１の領域に置換されてしまうと、セクタＩＤ＝０のメモリアクセス要求３０８によっても増加させることができないように設定することができる。
【０１１８】
第６の実施形態
次に、第６の実施形態について説明する。
図１１は、図１又は図２のキャッシュメモリ１０１の構成において、セクタＩＤが１ビットではなく２ビットで構成され、０〜３の３値を取り得る場合の、図４に示される置換セクタＩＤ決定回路４０１に相当する構成例を示した図である。
【０１１９】
第６の実施形態では、下記の６つのレジスタが接続される。
・セクタ０用最大ウェイ数レジスタ１１０１
・セクタ１用最大ウェイ数レジスタ１１０２
・セクタ２用最大ウェイ数レジスタ１１０３
・現在のセクタ０のウェイ数レジスタ１１０４
・現在のセクタ１のウェイ数レジスタ１１０５
・現在のセクタ２のウェイ数レジスタ１１０６
セクタ０用最大ウェイ数レジスタ１１０１、セクタ１用最大ウェイ数レジスタ１１０２、及びセクタ２用最大ウェイ数レジスタ１１０３には、各キャッシュブロックにおいて、セクタＩＤとしてそれぞれ値０、値１、及び値２を設定することのできる最大ウェイ数が設定される。これらのレジスタ値は、プログラムから設定可能である。
【０１２０】
次に、現在のセクタ０のウェイ数レジスタ１１０４、現在のセクタ１のウェイ数レジスタ１１０５、及び現在のセクタ２のウェイ数レジスタ１１０６には、メモリアクセス要求のアドレス中のインデックスにより或るブロック番号が指定されたときに、セクタＩＤ・ＲＡＭ２０３（図２参照）から読み出されるセクタＩＤ値０が設定されているビット数（
ウェイ数）と、セクタＩＤ値１が設定されているビット数（ウェイ数）と、セクタＩＤ値２が設定されているビット数（ウェイ数）がそれぞれカウントされて、セットされる。
【０１２１】
以上の６つのレジスタ１１０１〜１１０６は、例えば図１２に示されるように、それぞれ３ビットで構成されており、０から４（最大ウェイ数）までの値をとる。
図１１において、メモリアクセス要求にセクタＩＤ＝０が指定されている場合には、セレクタ１１０８がセクタ０用最大ウェイ数レジスタ１１０１の出力を、セレクタ１１０９が現在のセクタ０のウェイ数レジスタ１１０４の出力をそれぞれ選択し、それらを比較器１１１０に入力させる。また、メモリアクセス要求にセクタＩＤ＝１が指定されている場合には、セレクタ１１０８がセクタ１用最大ウェイ数レジスタ１１０２の出力を、セレクタ１１０９が現在のセクタ１のウェイ数レジスタ１１０５の出力をそれぞれ選択し、それらを比較器１１１０に入力させる。更に、メモリアクセス要求にセクタＩＤ＝２が指定されている場合には、セレクタ１１０８がセクタ２用最大ウェイ数レジスタ１１０３の出力を、セレクタ１１０９が現在のセクタ２のウェイ数レジスタ１１０６の出力をそれぞれ選択し、それらを比較器１１１０に入力させる。
【０１２２】
この結果、比較器１１１０の動作は、メモリアクセス要求にて指定されたセクタＩＤ値に関して、最大ウェイ数と現在のウェイ数とを比較する。現在のウェイ数が最大ウェイ数よりも小さければ、メモリアクセス要求に付加されているセクタＩＤ１１０７と同じセクタＩＤを選択させることを指示する例えば値０の自／他選択信号１１１１を出力し、現在のウェイ数が最大ウェイ数以上の場合には、メモリアクセス要求に付加されているセクタＩＤ１１０７以外のセクタＩＤを選択させることを指示する例えば値１の自／他選択信号１１１１を出力する。
【０１２３】
図１３は、第６の実施形態において、図３又は図４における置換ウェイ選択可能マスク生成回路３０３及び置換ウェイ選択回路３０４に相当する構成例を示した図である。
同一セクタＩＤマスク生成回路１３０３は、メモリアクセス要求に付加されているセクタＩＤ１３０３と、セクタＩＤ・ＲＡＭ２０３の該当ブロック番号から読み出されたセクタＩＤ情報１３０２の各セクタＩＤ値とを比較し、一致＝１／不一致＝０のマスクビット列（４ビット）を生成する。
【０１２４】
セレクタ１３０４は、図１１に示される比較器１１１０が出力する自／他選択信号１１１１が自セクタＩＤを選択することを指示する（例えば値０）場合には、同一セクタＩＤマスク生成回路１３０３が出力する４ビットのマスクビット列をそのまま選択して出力する。また、自／他選択信号１１１１が他セクタＩＤを選択することを指示する（例えば値１）場合には、同一セクタＩＤマスク生成回路１３０３が出力する４ビットのマスクビット列をインバータ１３０５でビット毎に反転させて得られる４ビットのビット列を選択して出力する。
【０１２５】
ＬＲＵ選択回路１３０６は、ＬＲＵアルゴリズムに従って、入力する４ビットのビット列の値１のうちの何れか１つを選択し、置換ウェイ１３０７として出力する。これは図４の置換ウェイ３１０に対応する信号であり、キャッシュメモリ１０１上の対応ブロック番号において置換されるべきキャッシュウェイを指定する。
【０１２６】
以上説明した第６の実施形態によって、キャッシュメモリ１０１に対する置換制御を、ユーザがプログラムによってより多段階に制御することが可能となる。
実施形態に対する補足
以上説明した実施形態では、メモリアクセス要求は、ユーザプログラムによって発行されることを前提として説明したが、キャッシュライトバック方式のシステムや複数プロセッサに対応して複数キャッシュメモリを有するようなシステムにおいて、ハードウェアが
キャッシュメモリに対して自動的に発行するメモリアクセス要求についても、全く同様の機能を実現することができる。
【０１２７】
以上の実施形態に関して、更に以下の付記を開示する。
（付記１）
各セットが２つ以上のキャッシュウェイで構成されセット・アソシアティブ方式に基づいて動作し、キャッシュミスの発生時に決定された置換ウェイに対応する前記キャッシュウェイのキャッシュブロックのデータを置換するキャッシュ動作を行うキャッシュメモリにおいて、
メモリアクセス要求により特定される前記キャッシュブロックの前記各キャッシュウェイに対応させて、該各キャッシュウェイの置換状態を制御するために定義され２つ以上の論理値を取り得るセクタＩＤ情報を記憶するセクタＩＤ情報記憶手段と、
前記キャッシュミスの発生時に、前記メモリアクセス要求に付加されたセクタＩＤ情報と、前記メモリアクセス要求により特定される前記キャッシュブロックの前記各キャッシュウェイに対応して前記セクタＩＤ情報記憶手段に記憶されているセクタＩＤ情報とに基づいて、前記置換ウェイの候補である置換ウェイ候補を決定する置換ウェイ候補決定手段と、
前記置換ウェイ候補から前記置換ウェイを選択して出力する置換ウェイ選択手段と、
前記メモリアクセス要求により特定される前記キャッシュブロックの前記置換ウェイにより指定されるキャッシュウェイに対応して前記セクタＩＤ情報記憶手段に記憶されている前記セクタＩＤ情報を、前記メモリアクセス要求に付加されたセクタＩＤ情報によって更新するセクタＩＤ情報更新手段と、
を含むことを特徴とするセクタ機能付きキャッシュメモリ。
（付記２）
前記セクタＩＤ情報の各論理値ごとに割り当てることができるキャッシュウェイの最大値を最大ウェイ数として指定する最大ウェイ数指定手段と、
前記キャッシュミスの発生時に、前記メモリアクセス要求により特定される前記キャッシュブロックの前記各キャッシュウェイに対応して前記セクタＩＤ情報記憶手段に記憶されているセクタＩＤ情報のうち、前記メモリアクセス要求に付加されたセクタＩＤ情報と同じセクタＩＤ情報を持つキャッシュウェイの数と、前記最大ウェイ数指定手段で指定される前記メモリアクセス要求に付加されたセクタＩＤ情報と同じセクタＩＤ情報の最大ウェイ数とを比較する比較手段と、
を更に含み、
置換ウェイ候補決定手段は、前記キャッシュミスの発生時に、該比較手段による比較結果に応じて、前記メモリアクセス要求により特定される前記キャッシュブロックの前記各キャッシュウェイに対応して前記セクタＩＤ情報記憶手段に記憶されているセクタＩＤ情報のうち、前記メモリアクセス要求に付加されたセクタＩＤ情報以外のセクタＩＤ情報が記憶されている前記キャッシュウェイ群か、前記メモリアクセス要求に付加されたセクタＩＤ情報と同じセクタＩＤ情報が記憶されている前記キャッシュウェイ群の何れかの群を、前記置換ウェイ候補として決定する、
ことを特徴とする付記１に記載のセクタ機能付きキャッシュメモリ。
（付記３）
前記最大ウェイ数指定手段は、前記セクタＩＤ情報の各論理値ごとの最大ウェイ数の合計数が前記キャッシュメモリにおける前記キャッシュウェイ数よりも大きくなるように、前記セクタＩＤ情報の各論理値ごとの最大ウェイ数を設定可能とする、
ことを特徴とする付記２に記載のセクタ機能付きキャッシュメモリ。
（付記４）
前記置換ウェイ候補決定手段は、前記キャッシュミスの発生時に、ユーザによって指定されたセクタＩＤ情報の所定値については、前記比較手段による比較結果は判定せずに、前記メモリアクセス要求により特定される前記キャッシュブロックの前記各キャッシュウ
ェイに対応して前記セクタＩＤ情報記憶手段に記憶されているセクタＩＤ情報のうち、前記メモリアクセス要求に付加されたセクタＩＤ情報と同じセクタＩＤ情報が記憶されている前記キャッシュウェイ群を、前記置換ウェイ候補として決定する、
ことを特徴とする付記２に記載のセクタ機能付きキャッシュメモリ。
（付記５）
前記セクタＩＤ情報更新手段は、前記メモリアクセス要求によってキャッシュヒットが発生したときに、前記メモリアクセス要求により特定される前記キャッシュブロックの前記置換ウェイにより指定されるキャッシュウェイに対応して前記セクタＩＤ情報記憶手段に記憶されている前記セクタＩＤ情報を、前記メモリアクセス要求に付加されたセクタＩＤ情報によって更新する
ことを特徴とする付記１乃至４の何れか１項に記載のセクタ機能付きキャッシュメモリ。
（付記６）
前記セクタＩＤ情報は２つの論理値をとり得る、
ことを特徴とする付記１乃至５の何れか１項に記載のセクタ機能付きキャッシュメモリ。
（付記７）
前記セクタＩＤ情報は３つ以上の論理値をとり得る、
ことを特徴とする付記１乃至５の何れか１項に記載のセクタ機能付きキャッシュメモリ。
【図面の簡単な説明】
【０１２８】
【図１】本発明の実施形態のキャッシュメモリの機能構成図である。
【図２】本発明の実施形態のキャッシュメモリのハードウェア構成図である。
【図３】置換ウェイ制御回路に関する第１の実施形態の構成図である。
【図４】置換ウェイ制御回路の改良形態に関する第２の実施形態の構成図である。
【図５】第２の実施形態におけるレジスタの構成図である。
【図６】第２の実施形態の動作例を示す図である。
【図７】ヒットウェイ制御回路に関する第３の実施形態の構成図である。
【図８】第３の実施形態の動作例を示す図である。
【図９】第４の実施形態の動作説明図である。
【図１０】置換ウェイ制御回路の更なる改良形態に関する第５の実施形態の構成図である。
【図１１】第６の実施形態の構成図（その１）である。
【図１２】第６の実施形態におけるレジスタの構成図である。
【図１３】第６の実施形態の構成図（その２）である。
【図１４】セット・アソシアティブ方式のキャッシュメモリの動作概要を示す図である。
【図１５】置換ウェイ選択回路の説明図である。
【符号の説明】
【０１２９】
１０１、１４０１  キャッシュメモリ
１０２、１４０２  キャッシュウェイ
１０３、１４０３  キャッシュブロック
１０４、１４０４  コンパレータ
１０５、１４０５  アドレス
２０１  データＲＡＭ
２０２  タグＲＡＭ
２０３  セクタＩＤ・ＲＡＭ
２０４、２０５、３０５、３０６、３０７、４０１−１、４０１−２、４０１−５、
１００２、１３０４  セレクタ
３０１  セクタＩＤ・ＲＡＭ２０３から読み出されるセクタＩＤ
３０２、７０４  要求に付加されているセクタＩＤ
３０３  置換ウェイ選択可能マスク生成回路
３０３−１  エクスクルーシブオア回路（ＸＯＲ）
３０３−２、４０１−４、１３０５  インバータ（ＩＮＶ）
３０４、１５０１  置換ウェイ選択回路
３０８  メモリアクセス要求
３０９  置換ウェイ候補
３１０、１３０７  置換ウェイ
４０１  置換セクタＩＤ決定回路
４０１−３  比較器
４０２、１１０１  セクタ０用最大ウェイ数レジスタ
４０３、１１０２  セクタ１用最大ウェイ数レジスタ
４０４、１１０４  現在のセクタ０のウェイ数レジスタ
４０５、１１０５  現在のセクタ１のウェイ数レジスタ
４０６、１００３  置換セクタＩＤ
７０１  ヒットウェイ更新回路
７０２  ヒットウェイ信号
７０３  現セクタＩＤ情報
７０５  新セクタＩＤ情報
１００１  固定値
１１０３  セクタ２用最大ウェイ数レジスタ
１１０６  現在のセクタ２のウェイ数レジスタ
１３０１  置換するセクタＩＤ
１３０２  セクタＩＤ情報
１３０３  同一セクタＩＤマスク生成回路
１３０６  ＬＲＵ選択回路
【図１】
0005217432.tif 000002
【図２】
0005217432.tif 000003
【図３】
0005217432.tif 000004
【図４】
0005217432.tif 000005
【図５】
0005217432.tif 000006
【図６】
0005217432.tif 000007
【図７】
0005217432.tif 000008
【図８】
0005217432.tif 000009
【図９】
0005217432.tif 000010
【図１０】
0005217432.tif 000011
【図１１】
0005217432.tif 000012
【図１２】
0005217432.tif 000013
【図１３】
0005217432.tif 000014
【図１４】
0005217432.tif 000015
【図１５】
0005217432.tif 000016