(57)【要約】本発明のキャッシュメモリは、キャッシュエントリー毎に、アクセスの有無を示す使用フラグＵを記憶するウェイ０〜ウェイ３と、ヒットしたとき当該キャッシュエントリーに対応する使用フラグＵをアクセス有りに更新し、その際にセット内の他の全ての使用フラグがアクセス有りを示す場合には、セット内の他の全ての使用フラグをアクセス無しにリセットし、アクセス無しを示す使用フラグＵに対応するキャッシュエントリーの中からリプレース対象のキャッシュエントリーを選択する制御部を備える。
2005029336.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュの単位となるデータを保持するキャッシュエントリー毎に、アクセスの有無を示す１ビットのアクセス情報を記憶する記憶手段と、
アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中からリプレース対象のキャッシュエントリーを選択する選択手段と
を備えることを特徴とするキャッシュメモリ。
【請求項２】
前記選択手段は、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中から、ランダムに１つのキャッシュエントリーを選択する
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項３】
前記選択手段は、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中から、ラウンドロビン式に１つのキャッシュエントリーを選択する
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項４】
前記キャッシュメモリは、さらに、
キャッシュエントリーにヒットしたとき当該キャッシュエントリーに対応するアクセス情報をアクセス有りに更新し、その際に他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示す場合には、他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しにリセットする更新手段を備える
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項５】
前記更新手段は、さらに、前記リセットに際して前記ヒットしたキャッシュエントリーに対応するアクセス情報をアクセス無しにリセットする
ことを特徴とする請求項４記載のキャッシュメモリ。
【請求項６】
前記記憶手段は、さらに、キャッシュエントリー毎に、メモリからキャッシュエントリーにデータが格納された直後の新しい状態であるか否かを示すニュー情報を記憶し、
前記更新手段は、さらに、キャッシュエントリーにヒットしたとき当該キャッシュエントリーに対応するニュー情報を新しい状態でないことを示すようリセットし、
前記選択手段は、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中から、新しい状態でないことを示すニュー情報に対応するキャッシュエントリーを優先して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項５記載のキャッシュメモリ。
【請求項７】
前記選択手段は、アクセス無しを示すアクセス情報に対応し、かつ新しい状態でないことを示すニュー情報に対応するキャッシュエントリーが存在しない場合には、ニュー情報を無視して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項６記載のキャッシュメモリ。
【請求項８】
前記選択手段は、アクセス有りを示すアクセス情報に対応し、または新しい状態であることを示すニュー情報に対応するキャッシュエントリーのみが存在する場合には、ニュー情報を無視して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項６記載のキャッシュメモリ。
【請求項９】
前記キャッシュメモリは、セット・アソシエイティブ方式であり、
さらに、キャッシュエントリーにヒットしたとき当該キャッシュエントリーに対応するアクセス情報をアクセス有りに更新し、その際に当該キャッシュエントリーと同一のセット内における他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示す場合には、前記同一のセット内における他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しにリセットする更新手段を備える
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項１０】
前記更新手段は、さらに、前記リセットに際してキャッシュヒットしたキャッシュエントリーに対応するアクセス情報をアクセス無しにリセットする
ことを特徴とする請求項９記載のキャッシュメモリ。
【請求項１１】
前記記憶手段は、さらに、キャッシュエントリー毎に、キャッシュエントリーにデータが格納された直後の新しい状態であるか否かを示すニュー情報を記憶し、
前記更新手段は、さらに、キャッシュエントリーにヒットしたとき当該キャッシュエントリーに対応するニュー情報を新しい状態でないことを示すようリセットし、
前記選択手段は、アクセス無しを示すアクセス情報に対応し、かつ新しい状態を示すニュー情報に対応する前記同一セット内のキャッシュエントリーの中から、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項１０記載のキャッシュメモリ。
【請求項１２】
前記選択手段は、アクセス無しを示すアクセス情報に対応し、かつ新しい状態でないことを示すニュー情報に対応するキャッシュエントリーが存在しない場合には、ニュー情報を無視して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項１１記載のキャッシュメモリ。
【請求項１３】
前記選択手段は、アクセス有りを示すアクセス情報に対応し、または新しい状態であることを示すニュー情報に対応するキャッシュエントリーのみが存在する場合には、ニュー情報を無視して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項１１記載のキャッシュメモリ。
【請求項１４】
前記キャッシュメモリは、さらに、
キャッシュエントリーにヒットしたことを検出する手段と、
ヒットしたことが検出されたキャッシュエントリーに対応するアクセス情報をアクセス有りに更新する第１更新手段と
ヒットしたことが検出されたキャッシュエントリー以外の他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示すか否かを判定する判定手段と、
判定手段の判定結果が肯定である場合に、他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しを示すように更新する第２更新手段とを有する
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項１５】
前記記憶手段は、さらに、キャッシュエントリー毎に、メモリからキャッシュエントリーにデータが格納された直後の新しい状態であるか否かを示すニュー情報を記憶し、
前記第１更新手段は、さらに、ヒットしたことが検出されたキャッシュエントリーに対応するニュー情報を新しい状態でないことを示すようリセットし、
前記選択手段は、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中から、新しい状態でないことを示すニュー情報に対応するキャッシュエントリーを優先して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項１４記載のキャッシュメモリ。
【請求項１６】
前記キャッシュメモリは、セット・アソシエイティブ方式であり、
さらに、キャッシュエントリーにヒットしたことを検出する手段と、
ヒットしたことが検出されたキャッシュエントリーに対応するアクセス情報をアクセス有りに更新する第１更新手段と、
ヒットしたことが検出されたキャッシュエントリーと同一のセット内における他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示すか否かを判定する判定手段と、
判定手段の判定結果が肯定である場合に、他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しを示すように更新する第２更新手段とを有する
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項１７】
前記記憶手段は、さらに、キャッシュエントリー毎に、キャッシュエントリーにデータが格納された直後の新しい状態であるか否かを示すニュー情報を記憶し、
前記第１更新手段は、さらに、ヒットしたことが検出されたキャッシュエントリーに対応するニュー情報を新しい状態でないことを示すようリセットし、
前記選択手段は、前記同一のセット内においてアクセス無しを示すアクセス情報に対応するキャッシュエントリーの中から、新しい状態でないことを示すニュー情報に対応するキャッシュエントリーを優先して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項１６記載のキャッシュメモリ。
【請求項１８】
キャッシュメモリのキャッシュエントリー毎に、アクセスの有無を示すアクセス情報を記憶する記憶部を有するキャッシュメモリの制御方法であって、
キャッシュヒットおよびミスを検出する検出ステップと、
ヒットしたことが検出されたキャッシュエントリーに対応する１ビットのアクセス情報をアクセス有りに更新する第１更新ステップと、
ヒットしたことが検出されたキャッシュエントリー以外の他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示すか否かを判定する判定ステップと、
判定手段の判定結果が肯定である場合に、他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しを示すように更新する第２更新ステップと、
ミスしたことが検出されたとき、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中からリプレース対象のキャッシュエントリーを選択する選択ステップと
を有することを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】  本発明は、プロセッサのメモリアクセスを高速化するためのキャッシュメモリおよびその制御方法に関する。
【背景技術】  従来キャッシュメモリのエントリーをリプレースするためのアルゴリズムとしてＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）方式やＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）方式がよく知られている。
ＬＲＵ方式は、キャッシュエントリーのうちアクセス順序が最も古いエントリーをリプレース対象と決定する方法である。このＬＲＵ方式は、例えば、特開２０００−４７９４２号公報などに開示されたキャッシュメモリにおいても採用されている最も一般的なリプレースアルゴリズムである。
ところで、ＬＲＵ方式のアルゴリズムでリプレースするには、各エントリーについてアクセス順序を示すデータを記憶する記憶部と、それを更新する複雑な回路とが必要になるため、ハードウェア規模が大きくなるという問題がある。
例えば、フルアソシエイティブ式のキャッシュメモリであって、（２のｋ乗）個のエントリーを有する場合、アクセス順序を示すデータとしてエントリー毎にｋビットを必要とする。
また、Ｎウェイセットアソシエイティブの場合には、ウェイ数Ｎ＝８であれば、アクセス順序を示す情報として（ウェイ数＝８）×（最低３ビット）×（セット数）を必要とし、アクセス順序データを記憶する記憶部（レジスタ又はＲＡＭ）およびアクセス順序データを更新する回路の規模が大きいという問題がある。
【発明の開示】
本発明は、ＬＲＵ方式と同等のヒット率を得られるリプレース制御をより少ないハードウェア規模で実現するキャッシュメモリを提供することを目的とする。
上記目的を達成するため本発明のキャッシュメモリは、キャッシュの単位となるデータを保持するキャッシュエントリー毎に、アクセスの有無を示す１ビットのアクセス情報を記憶する記憶手段と、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中からリプレース対象のキャッシュエントリーを選択する選択手段とを備える。
前記選択手段は、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中から、ランダムにまたはラウンドロビン式に１つのキャッシュエントリーを選択する構成としてもよい。
この構成によれば、従来のＬＲＵ方式におけるアクセス順序を示すデータをキャッシュエントリー毎に記憶する代わりに、記憶手段は１ビットで表現可能なアクセス情報をキャッシュエントリー毎に記憶しているので、その記憶容量を削減することができハードウェア規模を削減することができる。また、選択手段は、リプレース対象を、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの１つを選択することにより簡単に決定し、しかも、従来のＬＲＵと比較してもほぼ同等のヒット率を得ることができる。
ここで、前記キャッシュメモリは、さらに、キャッシュエントリーにヒットしたとき当該キャッシュエントリーに対応するアクセス情報をアクセス有りに更新し、その際に他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示す場合には、他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しにリセットする更新手段を備える構成としてもよい。
これにより、従来のアクセス順序データを更新する複雑な回路を、アクセス情報を更新する簡単なフラグ更新回路に置き換えることができるので、ハードウェア規模をさらに大きく低減することができる。
ここで、前記更新手段は、さらに、前記リセットに際して前記ヒットしたキャッシュエントリーに対応するアクセス情報をアクセス無しにリセットするように構成してもよい。
ここで、前記記憶手段は、さらに、キャッシュエントリー毎にキャッシュエントリーにデータが格納された直後の新しい状態であるか否かを示すニュー情報を記憶し、前記更新手段は、さらに、キャッシュエントリーにヒットしたとき当該キャッシュエントリーに対応するニュー情報を新しい状態でないことを示すようリセットし、前記選択手段は、アクセス無しを示すアクセス情報に対応し、かつ新しい状態でないことを示すニュー情報に対応するキャッシュエントリーの中から、リプレース対象のキャッシュエントリーを選択する構成としてもよい。
ここで、前記選択手段は、アクセス無しを示すアクセス情報に対応し、かつ新しい状態でないことを示すニュー情報に対応するキャッシュエントリーが存在しない場合には、ニュー情報を無視して、リプレース対象のキャッシュエントリーを選択する構成としてもよい。
ここで、前記選択手段は、アクセス有りを示すアクセス情報に対応し、または新しい状態であることを示すニュー情報に対応するキャッシュエントリーのみが存在する場合には、ニュー情報を無視して、リプレース対象のキャッシュエントリーを選択する構成としてもよい。
この構成によれば、リプレースされた後に一度もアクセスされていない新しい状態のキャッシュエントリーがリプレースされてしまうことを防止することができる。
また、本発明のキャッシュメモリの制御方法は、キャッシュメモリのキャッシュエントリー毎に、アクセスの有無を示すアクセス情報を記憶する記憶部を有するキャッシュメモリの制御方法であって、キャッシュヒットおよびミスを検出する検出ステップと、ヒットしたことが検出されたキャッシュエントリーに対応するアクセス情報をアクセス有りに更新する第１更新ステップと、ヒットしたことが検出されたキャッシュエントリー以外の他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示すか否かを判定する判定ステップと、判定手段の判定結果が肯定である場合に、他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しを示すように更新する第２更新ステップと、ミスしたことが検出されたとき、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中からリプレース対象のキャッシュエントリーを選択する選択ステップとを有する。
以上のように、本発明のキャッシュメモリによれば、ハードウェア規模を削減し、しかも従来のＬＲＵ方式に相当するヒット率を実現することができる。
【図面の簡単な説明】  図１は、本発明の実施の形態１におけるプロセッサ、キャッシュメモリ、メモリを含む概略構成を示すブロック図である。
図２は、キャッシュメモリの構成を示すブロック図である。
図３は、キャッシュエントリのビット構成を示す説明図である。
図４は、制御部の構成を示すブロック図である。
図５は、フラグの更新例を示す説明図である。
図６は、フラグ更新処理フローを示す図である。
図７は、フラグ管理部の入出力論理を示す真理値表を示す図である。
図８は、フラグ管理部の回路例を示す図である。
図９は、リプレース処理フローを示す図である。
図１０は、変形例におけるフラグの更新例を示す説明図である。
図１１は、変形例におけるフラグ更新処理フローを示す図である。
図１２Ａは、変形例における選択処理の他の例を示す図である。
図１２Ｂは、変形例における選択処理の他の例を示す図である。
図１３は、本発明ン実施の形態２におけるキャッシュメモリの構成を示すブロック図である。
図１４は、キャッシュエントリのビット構成を示す説明図である。
図１５は、制御部の構成を示すブロック図である。
図１６は、リプレース処理フローを示す図である。
図１７は、フラグ更新処理フローを示す図である。
【発明を実施するための最良の形態】（実施の形態１）
＜全体構成＞
図１は、本発明の実施の形態１におけるプロセッサ１、キャッシュメモリ３、メモリ２を含むシステムの概略構成を示すブロック図である。同図のように、本発明のキャッシュメモリ３は、プロセッサ１およびメモリ２を有するシステムに備えられ、リプレースアルゴリズムとしてＬＲＵ方式を簡略化した擬似的なＬＲＵ方式を用いる。本実施の形態では、擬似的なＬＲＵ方式として、キャッシュエントリのアクセス順序を示すデータをキャッシュエントリー毎に１ビットだけで表現し、当該ビットが０のキャッシュエントリーの中からリプレース対象エントリーを１つ選択する方式を採用している。
＜キャッシュメモリの構成＞
以下では、キャッシュメモリ３の具体例として、４ウェイ・セット・アソシエイティブ方式のキャッシュメモリに上記擬似ＬＲＵを適用した場合の構成について説明する。
図２は、キャッシュメモリ３の構成例を示すブロック図である。同図のように、キャッシュメモリ３は、アドレスレジスタ２０、デコーダ３０、４つのウェイ３１ａ〜３１ｄ（以下ウェイ０〜３と略す）、４つの比較器３２ａ〜３２ｄ、４つのアンド回路３３ａ〜３３ｄ、オア回路３４、セレクタ３５、セレクタ３６、デマルチプレクサ３７、制御部３８を備える。
アドレスレジスタ２０は、メモリ２へのアクセスアドレスを保持するレジスタである。このアクセスアドレスは３２ビットであるものとする。同図に示すように、アクセスアドレスは、最上位ビットから順に、２１ビットのタグアドレス、４ビットのセットインデックス（図中のＳＩ）、５ビットのワードインデックス（図中のＷＩ）を含む。ここで、タグアドレスはウェイにマッピングされるメモリ中の領域（そのサイズはセット数×ブロックである）を指す。この領域のサイズは、タグアドレスよりも下位のアドレスビット（Ａ１０〜Ａ０）で定まるサイズつまり２ｋバイトであり、１つのウェイのサイズでもある。セットインデックス（ＳＩ）はウェイ０〜３に跨る複数セットの１つを指す。このセット数は、セットインデックスが４ビットなので１６セットである。タグアドレスおよびセットインデックスで特定されるブロックは、リプレース単位であり、キャッシュメモリに格納されている場合はラインデータ又はラインと呼ばれる。ラインデータのサイズは、セットインデックスよりも下位のアドレスビットで定まるサイズつまり１２８バイトである。１ワードを４バイトとすると、１ラインデータは３２ワードである。ワードインデックス（ＷＩ）は、ラインデータを構成する複数ワード中の１ワードを指す。アドレスレジスタ２０中の最下位２ビット（Ａ１、Ａ０）は、ワードアクセス時には無視される。
デコーダ３０は、セットインデックスの４ビットをデコードし、４つのウェイ０〜３に跨る１６セット中の１つを選択する。
４つのウェイ０〜３は、同じ構成を有数する４つのウェイであり、４×２ｋバイトの容量を有する。ウェイ０は、１６個のキャッシュエントリーを有する。
図３に１つのキャッシュエントリーにおける詳細なビット構成を示す。同図のように、１つのキャッシュエントリーは、バリッドフラグＶ、２１ビットのタグ、１２８バイトのラインデータ、使用フラグＵおよびダーティフラグＤを保持する。バリッドフラグＶは、そのキャッシュエントリーが有効か否かを示す。タグは２１ビットのタグアドレスのコピーである。ラインデータは、タグアドレスおよびセットインデックスにより特定されるブロック中の１２８バイトデータのコピーである。ダーティフラグは、そのキャッシュエントリーに書き込みがあったか否か、つまりキャシュエントリー中にキャッシュされたデータが書き込みによりメモリ中のデータと異なるためメモリに書き戻すことが必要か否かを示す。使用フラグＵは、そのキャッシュエントリーにアクセスがあったか否かを示し、ミスヒットによるリプレースに際してセット内の４つのキャッシュエントリーにおけるアクセス順序の代わりに用いられる。より正確には、使用フラグＵの１は、アクセスがあったことを、０はないことを意味する。セット内の４つの使用フラグは、全て１になれば、０にリセットされるので、セット内の４つのキャッシュエントリーにおける使用の有無を示す相対的な値である。別言すれば、使用フラグＵは、アクセスされた時期が古いか新しいか２つの相対的な状態を示す。つまり、使用フラグＵが１のキャッシュエントリーは、使用フラグが０のキャッシュエントリーよりも新しくアクセスされたことを意味する。
ウェイ１〜３についても、ウェイ０と同様である。セットインデックスの４ビットによってデコーダ３０を介して選択される４ウェイに跨る４つのキャッシュエントリーは、セットと呼ばれる。
比較器３２ａは、アドレスレジスタ２０中のタグアドレスと、セットインデックスにより選択されたセットに含まれる４つのタグ中のウェイ０のタグとが一致するか否かを比較する。比較器３２ｂ〜３２ｃについても、ウェイ３１ｂ〜３１ｄに対応すること以外は同様である。
アンド回路３３ａは、バリッドフラグと比較器３２ａの比較結果とが一致するか否かを比較する。この比較結果をｈ０とする。比較結果ｈ０が１である場合は、アドレスレジスタ２０中のタグアドレスおよびセットインデックスに対応するラインデータが存在すること、つまりウェイ０においてヒットしたことを意味する。比較結果ｈ０が０である場合は、ミスヒットしたことを意味する。アンド回路３３ｂ〜３３ｄについても、ウェイ３１ｂ〜３１ｄに対応すること以外は同様である。その比較結果ｈ１〜ｈ３は、ウェイ１〜３でヒットしたかミスしたかを意味する。
オア回路３４は、比較結果ｈ０〜ｈ３のオアをとる。このオアの結果をｈｉｔとする。ｈｉｔは、キャッシュメモリにヒットしたか否かを示す。
セレクタ３５は、選択されたセットにおけるウェイ０〜３のラインデータのうち、ヒットしたウェイのラインデータを選択する。
セレクタ３６は、セレクタ３５により選択された３２ワードのラインデータのうち、ワードインデックスに示される１ワードを選択する。
デマルチプレクサ３７は、キャッシュエントリにデータを書き込む際に、ウェイ０〜３の１つに書き込みデータを出力する。この書き込みデータはワード単位でよい。
制御部３８は、キャッシュメモリ３の全体の制御を行う。特に、使用フラグＵの更新やリプレースすべきキャッシュエントリーの決定などを行う。
＜制御部の構成＞
図４は、制御部３８の構成を示すブロック図である。同図のように、制御部３８は、フラグ更新部３９とリプレース部４０を備える。
フラグ更新部３９は、バリッドフラグＶ、使用フラグＵ、ダーティフラグＤの更新を行う。このうちバリッドフラグＶ、ダーティフラグＤの更新については周知である。フラグ更新部３９は、キャッシュヒット時に使用フラグの更新処理を行う。
図５に、フラグ更新部３９による使用フラグの更新例を示す。同図の上段、中段、下段は、ウェイ０〜３に跨るセットＮを構成する４つのキャッシュエントリーを示している。４つのキャッシュエントリー右端の１又は０は、それぞれ使用フラグの値である。この４つの使用フラグＵをＵ０〜Ｕ３と記す。
同図上段では（Ｕ０〜Ｕ３）＝（１、０、１、０）であるので、ウェイ０、２のキャッシュエントリーはアクセスがあったことを、ウェイ１、３のキャッシュエントリーはアクセスがないことを意味する。
この状態で、メモリアクセスがセットＮ内のウェイ１のキャッシュエントリーにヒットした場合、同図中段に示すように、（Ｕ０〜Ｕ３）＝（１、１、１、０）に更新される。つまり、実線に示すようにウェイ１の使用フラグＵ１が０から１に更新される。
さらに、同図中段の状態で、メモリアクセスがセットＮ内のウェイ３のキャッシュエントリーにヒットした場合、同図下段に示すように、（Ｕ０〜Ｕ３）＝（０、０、０、１）に更新される。つまり、実線に示すようにウェイ３の使用フラグＵ１が０から１に更新される。加えて、破線に示すようにウェイ３以外の使用フラグＵ０〜Ｕ２が１から０に更新される。これにより、ウェイ３のキャシュエントリーが、ウェイ０〜２の各キャッシュエントリーよりも新しくアクセスされたことを意味することになる。
リプレース部４０は、キャッシュミス時に使用フラグに基づいてリプレース対象のキャッシュエントリーを決定してリプレースを行う。例えば、リプレース部４０は、図５上段では、ウェイ１とウェイ３の何れかをリプレース対象と決定し、図５中段ではウェイ３をリプレース対象と決定し、図５下段ではウェイ０〜２の何れかをリプレース対象と決定する。
＜フラグ更新処理＞
図６は、フラグ更新部３９におけるフラグ更新処理を示すフローチャートである。同図では、バリッドフラグが０（無効）であるキャッシュエントリーの使用フラグＵは０に初期化されているものとする。
同図において、フラグ更新部３９は、キャッシュヒットしたとき（ステップＳ６１）、セットインデックスにより選択されたセットにおけるヒットしたウェイの使用フラグＵを１にセットし（ステップＳ６２）、そのセット内の他のウェイの使用フラグＵを読み出し（ステップＳ６３）、読み出した使用フラグＵが全て１であるか否かを判定し（ステップＳ６４）、全て１でなければ終了し、全て１であれば他のウェイの全ての使用フラグＵを０にリセットする（ステップＳ６５）。
このようにしてフラグ更新部３９は、図５に示した更新例のように、使用フラグを更新することができる。
実際のフラグ更新部３９はハードウェアにより構成されるので、以下ハードウェア構成例について説明する。
図７は、フラグ更新部３９の入出力論理を示す真理値表を示す図である。同図の入力欄にけるｈ０〜ｈ３は、図２に示したウェイ０〜ウェイ３におけるヒット信号である。Ｕ０＿ｉｎ〜Ｕ３＿ｉｎは、セットインデックスにより選択されたセットから読み出された、ウェイ０〜ウェイ３の使用フラグの値（更新前の値）を示す。同図の出力欄におけるＵ０＿ｏｕｔ〜Ｕ３＿ｏｕｔは、セットインデックスに書き戻される使用フラグの値（更新後の値）を示す。また、図中の○印はヒットしたウェイの使用フラグ（入力および出力）を、□印は他のウェイの使用フラグ（入力）の全てが１の場合と、対応する出力値を示す。図中の＊ａ〜＊ｄは次の式１〜式４をそれぞれ満たすことを意味する。ここで＆は論理積を示す。
（Ｕ１＿ｉｎ）＆（Ｕ２＿ｉｎ）＆（Ｕ３＿ｉｎ）＝０    （式１）
（Ｕ０＿ｉｎ）＆（Ｕ２＿ｉｎ）＆（Ｕ３＿ｉｎ）＝０    （式２）
（Ｕ０＿ｉｎ）＆（Ｕ１＿ｉｎ）＆（Ｕ３＿ｉｎ）＝０    （式３）
（Ｕ０＿ｉｎ）＆（Ｕ１＿ｉｎ）＆（Ｕ２＿ｉｎ）＝０    （式４）
同図において、Ｎｏ．１〜Ｎｏ．４の行は、ウェイ０がヒットした場合（ｈ０＝１）を示す。この場合、ヒットしたウェイ０の使用フラグＵ０＿ｉｎの値が０であっても１であっても、使用フラグＵ０＿ｏｕｔは１となる。また、他のウェイの使用フラグＵ１＿ｏｕｔ〜Ｕ２＿ｏｕｔは、＊ａの場合には更新されないが、□印のように入力時に全て１である場合には、全て０に更新される。Ｎｏ．５〜８、Ｎｏ．９〜１２、Ｎｏ．１３〜１６についても、ヒットしたウェイが１、２、３である点を除いて同様である。
＜回路例＞
図８は、図７の入出力論理を有するフラグ更新部３９の具体的な回路例を示す図である。同図のフラグ更新部３９は、アンド回路８０〜８３、アンド回路８４〜８７、オア回路８８、オア回路８９〜９２、セレクタ９３〜９６を備える。
アンド回路８０〜８３は、セットインデックスにより選択されたセットから読み出された、ウェイ０〜ウェイ３の使用フラグＵ０＿ｉｎ〜Ｕ３＿ｉｎのうち、バリッドフラグＶが１（有効）であるキャッシュエントリーの使用フラグＵ０＿ｉｎ〜Ｕ３＿ｉｎの値を出力する。
アンド回路８４〜８７およびオア回路８８は、アンド回路８０〜８３の出力が図７に示した＊ａ〜＊ｄを満たさない場合、つまり同図中の入力欄の□印のケースを検出する。つまり、ヒットしたウェイの他のウェイの使用フラグＵ＿ｉｎが全て１である場合を検出する。
オア回路８９〜９２は、それぞれヒット信号ｈ０〜ｈ３と使用フラグＵ０＿ｉｎ〜Ｕ３＿ｉｎとのオアをとる。
セレクタ９３〜９６は、上記□印のケースが検出された場合には１側（上側）入力を選択し、上記□印のケースが検出されない場合には０側（下側）入力を選択し、選択結果をＵ０＿ｏｕｔ〜Ｕ１＿ｏｕｔとして出力する。具体的には、上記□印のケースが検出された場合には、セレクタ９３〜９６の１側（上側）にｈ０〜ｈ３が入力されていることから、ヒットしたウェイの使用フラグＵ＿ｏｕｔが１になり、他のウェイの使用フラグは０となる。上記□印のケースが検出されない場合には、セレクタ９３〜９６の０側のそれぞれにｈ信号と使用フラグＵ＿ｉｎのオアが入力されていることから、ヒットしたウェイの使用フラグＵ＿ｏｕｔが１になり、他のウェイの使用フラグは元のままとなる。
このような回路により図７の真理値表をハードウェア化することができる。個々のウェイのアクセス順序を示す必要がなく、各ウェイに１ビットの使用フラグを更新するだけでよいので、ハードウェア規模を削減することができる。
＜リプレース処理＞
図９は、リプレース部４０におけるリプレース処理を示すフローチャートである。同図においてリプレース部４０は、メモリアクセスがミスしたとき（ステップＳ９１）、セットインデックスにより選択されたセットにおける、４つウェイの使用フラグＵを読み出し（ステップＳ９２）、使用フラグＵが０のウェイを１つ選択する（ステップＳ９３）。このとき、使用フラグＵが０になっているウェイが複数存在する場合は、リプレース部４０はランダムに１つを選択する。さらに、リプレース部４０は、当該セットにおける選択されたウェイのキャッシュエントリーを対象にリプレースし（ステップＳ９４）、リプレース後に当該キャッシュエントリーの使用フラグＵを１に初期化する（ステップＳ９５）。なお、このときバリッドフラグＶ、ダーティフラグＤは、それぞれ１、０に初期化される。
なお、図９では、４つバリッドフラグＶが全部１（有効）であることを前提としているが、Ｖ＝０（無効）のキャッシュエントリーが存在する場合には当該キャッシュエントリーを選択する。
このように、リプレース対象は、使用フラグが０のキャッシュエントリーを１つ選択することにより決定される。このリプレースアルゴリズムは、従来のＬＲＵ方式におけるアクセス順序を示すデータの代わりに１ビットの使用フラグを用いるので、擬似的なＬＲＵ方式ということができる。
以上説明してきたように、本実施の形態におけるキャッシュメモリによれば、従来のＬＲＵ方式におけるアクセス順序を示すデータをキャッシュエントリー毎に設ける代わりに、１ビットの使用フラグをキャッシュエントリー毎に設けている。これにより、従来のアクセス順序データを更新する複雑な回路を、使用フラグを更新する簡単なフラグ更新回路（フラグ更新部３９）に置き換えることができる。また、リプレース部４０において、リプレース対象を、使用フラグが０のキャッシュエントリーの１つを選択することにより簡単に決定することができる。このように、本実施の形態におけるキャッシュメモリによれば、ハードウェア規模を大きく低減することができる。しかも、従来のＬＲＵと比較してもほぼ同等のヒット率を得ることができる。
＜変形例＞
なお、本発明のキャッシュメモリは、上記の実施形態の構成に限るものではなく、種々の変形が可能である。以下、変形例のいくつかについて説明する。
（１）フラグ更新部３９は、図５の下段に示したようにセット内の他のウェイの使用フラグＵ０〜Ｕ３が全部１であれば０にし、ヒットしたウェイ自身の使用フラグを１に更新するが、この代わりに、ヒットしたウェイ自身の使用フラグも０に更新する構成としてもよい。図１０に、この場合のフラグの更新例を示す。図１０は、図５と比較して、下段のウェイ３が１ではなく０になっている点が異なっている。
図１１は、この変形例におけるフラグ更新処理を示すフローチャートである。同図は、図６と比べて、ステップＳ６５の代わりにステップＳ６５ａを有している点が異なっている。同じ点は説明を省略して、異なる点のみ説明する。ステップＳ６５ａでは、フラグ更新部３９は、セット内の全ての使用フラグＵ０〜Ｕ３を０にリセットする。
このように、図１１のフラグ更新処理によれば、セット内の全ての使用フラグＵ０〜Ｕ３が１になろうとするとき、０にリセットする。図１１によっても、図５と同様のヒット率を得ることができる。
（２）図９に示したステップＳ９３において、リプレース部４０は、セット内に使用フラグが０のキャッシュエントリーが複数存在する場合には、ランダムに１つを選択しているが、この代わりに、規則的に選択してもよい。例えば、リプレース部４０は、その場合に、ウェイの番号の小さい方（大きい方）を選択したり、ラウンドロビン式に選択してもよい。
図１２Ａに、ラウンドロビン式に選択する処理を示す。同図においてリプレース部４０は、セット内に使用フラグが０のキャッシュエントリーが複数存在する場合に、前回リプレースしたウェイの番号を判別し（ステップＳ１２１）、使用フラグが０のキャッシュエントリーのうち、判別した番号よりも大きい番号のウェイのキャシュエントリーを選択する（ステップＳ１２２）。ここで、前回リプレースした番号は、例えば、キャッシュメモリ全体でリプレースしたウェイの番号を保持するレジスタを設けておき、当該レジスタを参照することにより判別すればよい。このレジスタは、ウェイの番号を保持する代わりに、リプレースしたウェイをビット位置で示すようにしてもよい。この場合のレジスタの一例を図１２Ｂに示す。同図ではレジスタ中の４ビットのフィールドが遷移する様子を示している。この４ビットのビット位置はウェイ０〜ウェイ３に対応する。４ビット中の”１”のビットは前回リプレースされたウェイを示す。ステップＳ１２２では、リプレース部４０は、かつセット内の使用フラグが０のキャッシュエントリーの中から、”１”のビットかた右に回転する方向の直近のビットを判別し、そのビット位置に対応するウェイのキャッシュエントリー選択する。同図の例では、ウェイ０、１、３、０、２の順にキャッシュエントリーが選択されている。
なお、図１２Ｂでは、全セットで共通のレジスタを示しているが、セット毎の個別にレジスタを備えることも可能である。
（３）上記実施の形態では、４ウェイ・セット・アソシエイティブのキャッシュメモリを例に説明したが、ウェイ数は、８ウェイでも１６ウェイでもよい。また、上記実施の形態では、セット数が１６である例を説明したが、セット数はいくつでもよい。
（４）上記実施の形態では、セット・アソシエイティブのキャッシュメモリを例に説明したが、フル・アソシエイティブ方式のキャッシュメモリであってもよい。
（５）使用フラグＵは１ビットでなくても２ビットとしてもよい。例えば、２ビットとした場合でも個々のキャッシュエントリーのアクセス順序を完全に示す必要はなく、少なくとも古いか新しいかの２状態を相対的に判別できればよく、２ビットで表現できる３番目の状態および４番目の状態をどのように定義してもよい。
（６）図９に示したステップＳ９５において、リプレース直後の使用フラグＵは１に初期化されるが、この代わりに０に初期化してもよい。ただし、使用フラグの初期値を０にした場合は、リプレース後に発生したキャッシュミスにより再度リプレースされてしまう可能性がある。この点では、初期値は１とする方が望ましいと考えられる。
（実施の形態２）
図１３は、本発明の実施の形態２におけるキャッシュメモリの構成を示すブロック図である。同図のキャッシュメモリは、図２の構成と比較して、ウェイ３１ａ〜３１ｄの代わりにウェイ１３１ａ〜１３１ｄを備える点と、制御部３８の代わりに制御部１３８を備える点とが異なっている。以下、同じ点は説明を省略して、異なる点を中心に説明する。
ウェイ１３１ａは、ウェイ３１ａと比べて、各キャッシュエントリー中にニューフラグが追加されている点が異なる。
図１４に、ウェイ１３１ａ内の１つのキャッシュエントリーのビット構成を示す。同図のように、ニューフラグＮが追加されている点のみ異なっている。ニューフラグＮは、リプレース直後（又はフィル直後）に初期値として１が設定され、当該キャッシュエントリーへのアクセスがあったときに０にリセットされる。つまり、ニューフラグＮの１は、当該キャッシュエントリーがリプレース（又はフィル）されてから一度もアクセスされていない、新しい状態であることを意味する。
制御部１３８は、図１５に示すように、制御部１３８は、フラグ更新部１３９とリプレース部１４０とを備え、制御部３８と比べて、ニューフラグＮの設定および更新する点と、リプレース時にニューフラグが１のキャッシュエントリーをリプレース対象から除外する点とが異なっている。
＜リプレース処理＞
図１６は、リプレース部１４０におけるリプレース処理を示すフローチャートである。同図は、図９と比較して、ステップＳ９２の代わりにステップＳ９２ａを有する点と、ステップ９２ａと９３の間にステップＳ１６１およびＳ１６２が追加された点と、ステップＳ９５の代わりにステップＳ９５ａを有する点とが異なっている。
ステップＳ９２ａにおいてリプレース部１４０は、セットインデックスにより選択されたセットにおける、４つウェイの使用フラグＵ０〜Ｕ３に加えて４つのニューフラグ（Ｎ０〜Ｎ３とする）を読み出す。
さらに、リプレース部１４０は、読み出した４つのニューフラグＮ０〜Ｎ３の全てが１であるか否かを判定し（ステップＳ１６１）、全てが１である場合は、ステップＳ９３に進み、全てが１ではない（０がある）場合には、使用フラグＵが０のウェイのうち、ニューフラグＮが１のウェイを除外する（ステップＳ１６２）。
さらに、ステップＳ９３において、リプレース部１４０は、使用フラグが０でかつニューフラグが０のウェイの中からリプレース対象を１つ選択することになる。ただし、４つのニューフラグの全てが１である場合には、使用フラグＵが０のウェイの中からリプレース対象を１つ選択し、４つの使用フラグＵの全てが１である場合には、ニューフラグＮを無視して使用フラグＵが１のウェイの中からリプレース対象を１つ選択し、使用フラグＵ＝０かつニューフラグＮ＝０のウェイが存在しない場合には、ニューフラグＮを無視して使用フラグＵ＝０のウェイの中からプレース対象を１つ選択する。
また、ステップＳ９５ａにおいて、リプレース部１４０は、他のフラグの初期化と共に、ニューフラグＮを１に初期化する。
＜フラグ更新処理＞
図１７は、フラグ更新部１３９におけるフラグ更新処理を示すフローチャートである。同図は、図６と比較して、ステップＳ６２とＳ６３の間にステップＳ１７１が追加された点が異なる。
ステップＳ１７１においてフラグ更新部１３９は、選択されたセット内のヒットしたウェイのキャッシュエントリーのニューフラグが１なら０にリセットする。これにより、一度アクセスされたキャッシュエントリーは、ニューフラグＮを０にリセットされる。
以上説明してきたように、本実施の形態におけるリプレース部１４０は、ニューフラグが１の場合は、当該キャッシュエントリーをリプレース対象から除外している。これは、次の理由による。すなわち、使用フラグＵは初期値が１であるが他のウェイの使用フラグが順次１になれば、０にリセットされる。つまり、使用フラグＵが０のキャッシュエントリーであっても一度もアクセスされていない場合がある。こうして使用フラグが０になった場合、リプレース後に一度もアクセスされていないキャッシュエントリーが、キャッシュミスの発生により再度リプレース対象に選択されてしまう可能性がある。そのため、ニューフラグＮを設けることにより、リプレースされた後に一度もアクセスされていないキャッシュエントリーがリプレースされてしまうことを防止することができる。
＜変形例＞
（１）実施の形態１における変形例（１）〜（５）を本実施の形態に適用してもよい。
（２）図１６に示したステップＳ９５ａにおいて、リプレース直後の使用フラグＵは１に初期化されるが、この代わりに０に初期化してもよい。実施の形態１と異なり本実施の形態ではニューフラグＮが設けられたので、使用フラグの初期値が１の場合でも０の場合でも、リプレース後に発生したキャッシュミスにより一度もアクセスされないまま再度リプレースされてしまうことを防止することができる。
（３）上記各実施形態におけるキャッシュメモリは、プロセッサと共にチップに内蔵されるオンチップキャッシュ、オフチップキャッシュ、命令キャッシュ、データキャッシュの何れに適用してもよい。
【産業上の利用可能性】  本発明は、メモリアクセスを高速化するためのキャッシュメモリおよびその制御方法に適しており、例えば、オンチップキャッシュメモリ、オフチップキャッシュメモリ、データキャッシュメモリ、命令キャッシュメモリ等に適している。
【図１】
2005029336.tif 000003
【図２】
2005029336.tif 000004
【図３】
2005029336.tif 000005
【図４】
2005029336.tif 000006
【図５】
2005029336.tif 000007
【図６】
2005029336.tif 000008
【図７】
2005029336.tif 000009
【図８】
2005029336.tif 000010
【図９】
2005029336.tif 000011
【図１０】
2005029336.tif 000012
【図１１】
2005029336.tif 000013
2005029336.tif 000014
【図１３】
2005029336.tif 000015
【図１４】
2005029336.tif 000016
【図１５】
2005029336.tif 000017
【図１６】
2005029336.tif 000018
【図１７】
2005029336.tif 000019
【手続補正書】
【提出日】平成16年11月23日(2004.11.23)
【手続補正００１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】特許請求の範囲
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
キャッシュの単位となるデータを保持するキャッシュエントリー毎に、アクセスの有無を示す１ビットのアクセス情報を記憶する記憶手段と、
アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中からリプレース対象のキャッシュエントリーを選択する選択手段と
を備えることを特徴とするキャッシュメモリ。
【請求項２】
前記選択手段は、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中から、ランダムに１つのキャッシュエントリーを選択する
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項３】
前記選択手段は、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中から、ラウンドロビン式に１つのキャッシュエントリーを選択する
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項４】
前記キャッシュメモリは、さらに、
キャッシュエントリーにヒットしたとき当該キャッシュエントリーに対応するアクセス情報をアクセス有りに更新し、その際に他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示す場合には、他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しにリセットする更新手段を備える
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項５】
前記更新手段は、さらに、前記リセットに際して前記ヒットしたキャッシュエントリーに対応するアクセス情報をアクセス無しにリセットする
ことを特徴とする請求項４記載のキャッシュメモリ。
【請求項６】
前記記憶手段は、さらに、キャッシュエントリー毎に、メモリからキャッシュエントリーにデータが格納された直後の新しい状態であるか否かを示すニュー情報を記憶し、
前記更新手段は、さらに、キャッシュエントリーにヒットしたとき当該キャッシュエントリーに対応するニュー情報を新しい状態でないことを示すようリセットし、
前記選択手段は、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中から、新しい状態でないことを示すニュー情報に対応するキャッシュエントリーを優先して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項５記載のキャッシュメモリ。
【請求項７】
前記選択手段は、アクセス無しを示すアクセス情報に対応し、かつ新しい状態でないことを示すニュー情報に対応するキャッシュエントリーが存在しない場合には、ニュー情報を無視して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項６記載のキャッシュメモリ。
【請求項８】
前記選択手段は、アクセス有りを示すアクセス情報に対応し、または新しい状態であることを示すニュー情報に対応するキャッシュエントリーのみが存在する場合には、ニュー情報を無視して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項６記載のキャッシュメモリ。
【請求項９】
前記キャッシュメモリは、セット・アソシエイティブ方式であり、
さらに、キャッシュエントリーにヒットしたとき当該キャッシュエントリーに対応するアクセス情報をアクセス有りに更新し、その際に当該キャッシュエントリーと同一のセット内における他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示す場合には、前記同一のセット内における他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しにリセットする更新手段を備える
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項１０】
前記更新手段は、さらに、前記リセットに際してキャッシュヒットしたキャッシュエントリーに対応するアクセス情報をアクセス無しにリセットする
ことを特徴とする請求項９記載のキャッシュメモリ。
【請求項１１】
（補正後）前記記憶手段は、さらに、キャッシュエントリー毎に、キャッシュエントリーにデータが格納された直後の新しい状態であるか否かを示すニュー情報を記憶し、
前記更新手段は、さらに、キャッシュエントリーにヒットしたとき当該キャッシュエントリーに対応するニュー情報を新しい状態でないことを示すようリセットし、
前記選択手段は、アクセス無しを示すアクセス情報に対応し、かつ新しい状態でないことを示すニュー情報に対応する前記同一セット内のキャッシュエントリーの中から、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項１０記載のキャッシュメモリ。
【請求項１２】
前記選択手段は、アクセス無しを示すアクセス情報に対応し、かつ新しい状態でないことを示すニュー情報に対応するキャッシュエントリーが存在しない場合には、ニュー情報を無視して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項１１記載のキャッシュメモリ。
【請求項１３】
前記選択手段は、アクセス有りを示すアクセス情報に対応し、または新しい状態であることを示すニュー情報に対応するキャッシュエントリーのみが存在する場合には、ニュー情報を無視して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項１１記載のキャッシュメモリ。
【請求項１４】
前記キャッシュメモリは、さらに、
キャッシュエントリーにヒットしたことを検出する手段と、
ヒットしたことが検出されたキャッシュエントリーに対応するアクセス情報をアクセス有りに更新する第１更新手段と
ヒットしたことが検出されたキャッシュエントリー以外の他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示すか否かを判定する判定手段と、
判定手段の判定結果が肯定である場合に、他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しを示すように更新する第２更新手段とを有する
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項１５】
前記記憶手段は、さらに、キャッシュエントリー毎に、メモリからキャッシュエントリーにデータが格納された直後の新しい状態であるか否かを示すニュー情報を記憶し、
前記第１更新手段は、さらに、ヒットしたことが検出されたキャッシュエントリーに対応するニュー情報を新しい状態でないことを示すようリセットし、
前記選択手段は、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中から、新しい状態でないことを示すニュー情報に対応するキャッシュエントリーを優先して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項１４記載のキャッシュメモリ。
【請求項１６】
前記キャッシュメモリは、セット・アソシエイティブ方式であり、
さらに、キャッシュエントリーにヒットしたことを検出する手段と、
ヒットしたことが検出されたキャッシュエントリーに対応するアクセス情報をアクセス有りに更新する第１更新手段と、
ヒットしたことが検出されたキャッシュエントリーと同一のセット内における他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示すか否かを判定する判定手段と、
判定手段の判定結果が肯定である場合に、他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しを示すように更新する第２更新手段とを有する
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項１７】
前記記憶手段は、さらに、キャッシュエントリー毎に、キャッシュエントリーにデータが格納された直後の新しい状態であるか否かを示すニュー情報を記憶し、
前記第１更新手段は、さらに、ヒットしたことが検出されたキャッシュエントリーに対応するニュー情報を新しい状態でないことを示すようリセットし、
前記選択手段は、前記同一のセット内においてアクセス無しを示すアクセス情報に対応するキャッシュエントリーの中から、新しい状態でないことを示すニュー情報に対応するキャッシュエントリーを優先して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項１６記載のキャッシュメモリ。
【請求項１８】
キャッシュメモリのキャッシュエントリー毎に、アクセスの有無を示すアクセス情報を記憶する記憶部を有するキャッシュメモリの制御方法であって、
キャッシュヒットおよびミスを検出する検出ステップと、
ヒットしたことが検出されたキャッシュエントリーに対応する１ビットのアクセス情報をアクセス有りに更新する第１更新ステップと、
ヒットしたことが検出されたキャッシュエントリー以外の他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示すか否かを判定する判定ステップと、
判定手段の判定結果が肯定である場合に、他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しを示すように更新する第２更新ステップと、
ミスしたことが検出されたとき、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中からリプレース対象のキャッシュエントリーを選択する選択ステップと
を有することを特徴とする制御方法。
【手続補正書】
【提出日】平成18年1月27日(2006.1.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
キャッシュの単位となるデータを保持するキャッシュエントリー毎に、アクセスの有無を示す１ビットのアクセス情報を記憶する記憶手段と、
アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中からリプレース対象のキャッシュエントリーを選択する選択手段と
を備えることを特徴とするキャッシュメモリ。
【請求項２】
前記選択手段は、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中から、ランダムに１つのキャッシュエントリーを選択する
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項３】
前記選択手段は、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中から、ラウンドロビン式に１つのキャッシュエントリーを選択する
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項４】
前記キャッシュメモリは、さらに、
キャッシュエントリーにヒットしたとき当該キャッシュエントリーに対応するアクセス情報をアクセス有りに更新し、その際に他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示す場合には、他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しにリセットする更新手段を備える
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項５】
前記更新手段は、さらに、前記リセットに際して前記ヒットしたキャッシュエントリーに対応するアクセス情報をアクセス無しにリセットする
ことを特徴とする請求項４記載のキャッシュメモリ。
【請求項６】
前記記憶手段は、さらに、キャッシュエントリー毎に、メモリからキャッシュエントリーにデータが格納された直後の新しい状態であるか否かを示すニュー情報を記憶し、
前記更新手段は、さらに、キャッシュエントリーにヒットしたとき当該キャッシュエントリーに対応するニュー情報を新しい状態でないことを示すようリセットし、
前記選択手段は、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中から、新しい状態でないことを示すニュー情報に対応するキャッシュエントリーを優先して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項５記載のキャッシュメモリ。
【請求項７】
前記選択手段は、アクセス無しを示すアクセス情報に対応し、かつ新しい状態でないことを示すニュー情報に対応するキャッシュエントリーが存在しない場合には、ニュー情報を無視して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項６記載のキャッシュメモリ。
【請求項８】
前記選択手段は、アクセス有りを示すアクセス情報に対応し、または新しい状態であることを示すニュー情報に対応するキャッシュエントリーのみが存在する場合には、ニュー情報を無視して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項６記載のキャッシュメモリ。
【請求項９】
前記キャッシュメモリは、セット・アソシエイティブ方式であり、
さらに、キャッシュエントリーにヒットしたとき当該キャッシュエントリーに対応するアクセス情報をアクセス有りに更新し、その際に当該キャッシュエントリーと同一のセット内における他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示す場合には、前記同一のセット内における他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しにリセットする更新手段を備える
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項１０】
前記更新手段は、さらに、前記リセットに際してキャッシュヒットしたキャッシュエントリーに対応するアクセス情報をアクセス無しにリセットする
ことを特徴とする請求項９記載のキャッシュメモリ。
【請求項１１】
前記記憶手段は、さらに、キャッシュエントリー毎に、キャッシュエントリーにデータが格納された直後の新しい状態であるか否かを示すニュー情報を記憶し、
前記更新手段は、さらに、キャッシュエントリーにヒットしたとき当該キャッシュエントリーに対応するニュー情報を新しい状態でないことを示すようリセットし、
前記選択手段は、アクセス無しを示すアクセス情報に対応し、かつ新しい状態でないことを示すニュー情報に対応する前記同一セット内のキャッシュエントリーの中から、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項１０記載のキャッシュメモリ。
【請求項１２】
前記選択手段は、アクセス無しを示すアクセス情報に対応し、かつ新しい状態でないことを示すニュー情報に対応するキャッシュエントリーが存在しない場合には、ニュー情報を無視して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項１１記載のキャッシュメモリ。
【請求項１３】
前記選択手段は、アクセス有りを示すアクセス情報に対応し、または新しい状態であることを示すニュー情報に対応するキャッシュエントリーのみが存在する場合には、ニュー情報を無視して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項１１記載のキャッシュメモリ。
【請求項１４】
前記キャッシュメモリは、さらに、
キャッシュエントリーにヒットしたことを検出する手段と、
ヒットしたことが検出されたキャッシュエントリーに対応するアクセス情報をアクセス有りに更新する第１更新手段と
ヒットしたことが検出されたキャッシュエントリー以外の他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示すか否かを判定する判定手段と、
判定手段の判定結果が肯定である場合に、他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しを示すように更新する第２更新手段とを有する
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項１５】
前記記憶手段は、さらに、キャッシュエントリー毎に、メモリからキャッシュエントリーにデータが格納された直後の新しい状態であるか否かを示すニュー情報を記憶し、
前記第１更新手段は、さらに、ヒットしたことが検出されたキャッシュエントリーに対応するニュー情報を新しい状態でないことを示すようリセットし、
前記選択手段は、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中から、新しい状態でないことを示すニュー情報に対応するキャッシュエントリーを優先して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項１４記載のキャッシュメモリ。
【請求項１６】
前記キャッシュメモリは、セット・アソシエイティブ方式であり、
さらに、キャッシュエントリーにヒットしたことを検出する手段と、
ヒットしたことが検出されたキャッシュエントリーに対応するアクセス情報をアクセス有りに更新する第１更新手段と、
ヒットしたことが検出されたキャッシュエントリーと同一のセット内における他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示すか否かを判定する判定手段と、
判定手段の判定結果が肯定である場合に、他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しを示すように更新する第２更新手段とを有する
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項１７】
前記記憶手段は、さらに、キャッシュエントリー毎に、キャッシュエントリーにデータが格納された直後の新しい状態であるか否かを示すニュー情報を記憶し、
前記第１更新手段は、さらに、ヒットしたことが検出されたキャッシュエントリーに対応するニュー情報を新しい状態でないことを示すようリセットし、
前記選択手段は、前記同一のセット内においてアクセス無しを示すアクセス情報に対応するキャッシュエントリーの中から、新しい状態でないことを示すニュー情報に対応するキャッシュエントリーを優先して、リプレース対象のキャッシュエントリーを選択する
ことを特徴とする請求項１６記載のキャッシュメモリ。
【請求項１８】
キャッシュメモリのキャッシュエントリー毎に、アクセスの有無を示すアクセス情報を記憶する記憶部を有するキャッシュメモリの制御方法であって、
キャッシュヒットおよびミスを検出する検出ステップと、
ヒットしたことが検出されたキャッシュエントリーに対応する１ビットのアクセス情報をアクセス有りに更新する第１更新ステップと、
ヒットしたことが検出されたキャッシュエントリー以外の他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示すか否かを判定する判定ステップと、
判定手段の判定結果が肯定である場合に、他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しを示すように更新する第２更新ステップと、
ミスしたことが検出されたとき、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中からリプレース対象のキャッシュエントリーを選択する選択ステップと
を有することを特徴とする制御方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサのメモリアクセスを高速化するためのキャッシュメモリおよびその制御方法に関する。
【背景技術】
【０００２】
従来キャッシュメモリのエントリーをリプレースするためのアルゴリズムとしてＬＲＵ（Least Recently Used）方式やＦＩＦＯ（First In First Out）方式がよく知られている。
【０００３】
ＬＲＵ方式は、キャッシュエントリーのうちアクセス順序が最も古いエントリーをリプレース対象と決定する方法である。このＬＲＵ方式は、例えば、特開２０００−４７９４２号公報などに開示されたキャッシュメモリにおいても採用されている最も一般的なリプレースアルゴリズムである。
【０００４】
ところで、ＬＲＵ方式のアルゴリズムでリプレースするには、各エントリーについてアクセス順序を示すデータを記憶する記憶部と、それを更新する複雑な回路とが必要になるため、ハードウェア規模が大きくなるという問題がある。
【０００５】
例えば、フルアソシエイティブ式のキャッシュメモリであって、（２のｋ乗）個のエントリーを有する場合、アクセス順序を示すデータとしてエントリー毎にｋビットを必要とする。
【０００６】
また、Ｎウェイセットアソシエイティブの場合には、ウェイ数Ｎ＝８であれば、アクセス順序を示す情報として（ウェイ数＝８）×（最低３ビット）×（セット数）を必要とし、アクセス順序データを記憶する記憶部（レジスタ又はＲＡＭ）およびアクセス順序データを更新する回路の規模が大きいという問題がある。
【発明の開示】
【０００７】
本発明は、ＬＲＵ方式と同等のヒット率を得られるリプレース制御をより少ないハードウェア規模で実現するキャッシュメモリを提供することを目的とする。
【０００８】
上記目的を達成するため本発明のキャッシュメモリは、キャッシュの単位となるデータを保持するキャッシュエントリー毎に、アクセスの有無を示す１ビットのアクセス情報を記憶する記憶手段と、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中からリプレース対象のキャッシュエントリーを選択する選択手段とを備える。
【０００９】
前記選択手段は、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中から、ランダムにまたはラウンドロビン式に１つのキャッシュエントリーを選択する構成としてもよい。
【００１０】
この構成によれば、従来のＬＲＵ方式におけるアクセス順序を示すデータをキャッシュエントリー毎に記憶する代わりに、記憶手段は１ビットで表現可能なアクセス情報をキャッシュエントリー毎に記憶しているので、その記憶容量を削減することができハードウェア規模を削減することができる。また、選択手段は、リプレース対象を、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの１つを選択することにより簡単に決定し、しかも、従来のＬＲＵと比較してもほぼ同等のヒット率を得ることができる。
【００１１】
ここで、前記キャッシュメモリは、さらに、キャッシュエントリーにヒットしたとき当該キャッシュエントリーに対応するアクセス情報をアクセス有りに更新し、その際に他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示す場合には、他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しにリセットする更新手段を備える構成としてもよい。
【００１２】
これにより、従来のアクセス順序データを更新する複雑な回路を、アクセス情報を更新する簡単なフラグ更新回路に置き換えることができるので、ハードウェア規模をさらに大きく低減することができる。
【００１３】
ここで、前記更新手段は、さらに、前記リセットに際して前記ヒットしたキャッシュエントリーに対応するアクセス情報をアクセス無しにリセットするように構成してもよい。
【００１４】
ここで、前記記憶手段は、さらに、キャッシュエントリー毎にキャッシュエントリーにデータが格納された直後の新しい状態であるか否かを示すニュー情報を記憶し、前記更新手段は、さらに、キャッシュエントリーにヒットしたとき当該キャッシュエントリーに対応するニュー情報を新しい状態でないことを示すようリセットし、前記選択手段は、アクセス無しを示すアクセス情報に対応し、かつ新しい状態でないことを示すニュー情報に対応するキャッシュエントリーの中から、リプレース対象のキャッシュエントリーを選択する構成としてもよい。
【００１５】
ここで、前記選択手段は、アクセス無しを示すアクセス情報に対応し、かつ新しい状態でないことを示すニュー情報に対応するキャッシュエントリーが存在しない場合には、ニュー情報を無視して、リプレース対象のキャッシュエントリーを選択する構成としてもよい。
【００１６】
ここで、前記選択手段は、アクセス有りを示すアクセス情報に対応し、または新しい状態であることを示すニュー情報に対応するキャッシュエントリーのみが存在する場合には、ニュー情報を無視して、リプレース対象のキャッシュエントリーを選択する構成としてもよい。
【００１７】
この構成によれば、リプレースされた後に一度もアクセスされていない新しい状態のキャッシュエントリーがリプレースされてしまうことを防止することができる。
【００１８】
また、本発明のキャッシュメモリの制御方法は、キャッシュメモリのキャッシュエントリー毎に、アクセスの有無を示すアクセス情報を記憶する記憶部を有するキャッシュメモリの制御方法であって、キャッシュヒットおよびミスを検出する検出ステップと、ヒットしたことが検出されたキャッシュエントリーに対応するアクセス情報をアクセス有りに更新する第１更新ステップと、ヒットしたことが検出されたキャッシュエントリー以外の他の全てのキャッシュエントリーに対応するアクセス情報がアクセス有りを示すか否かを判定する判定ステップと、判定手段の判定結果が肯定である場合に、他の全てのキャッシュエントリーに対応するアクセス情報をアクセス無しを示すように更新する第２更新ステップと、ミスしたことが検出されたとき、アクセス無しを示すアクセス情報に対応するキャッシュエントリーの中からリプレース対象のキャッシュエントリーを選択する選択ステップとを有する。
【００１９】
以上のように、本発明のキャッシュメモリによれば、ハードウェア規模を削減し、しかも従来のＬＲＵ方式に相当するヒット率を実現することができる。
【発明を実施するための最良の形態】
【００２０】
（実施の形態１）
＜全体構成＞
図１は、本発明の実施の形態１におけるプロセッサ１、キャッシュメモリ３、メモリ２を含むシステムの概略構成を示すブロック図である。同図のように、本発明のキャッシュメモリ３は、プロセッサ１およびメモリ２を有するシステムに備えられ、リプレースアルゴリズムとしてＬＲＵ方式を簡略化した擬似的なＬＲＵ方式を用いる。本実施の形態では、擬似的なＬＲＵ方式として、キャッシュエントリのアクセス順序を示すデータをキャッシュエントリー毎に１ビットだけで表現し、当該ビットが０のキャッシュエントリーの中からリプレース対象エントリーを１つ選択する方式を採用している。
【００２１】
＜キャッシュメモリの構成＞
以下では、キャッシュメモリ３の具体例として、４ウェイ・セット・アソシエイティブ方式のキャッシュメモリに上記擬似ＬＲＵを適用した場合の構成について説明する。
【００２２】
図２は、キャッシュメモリ３の構成例を示すブロック図である。同図のように、キャッシュメモリ３は、アドレスレジスタ２０、デコーダ３０、４つのウェイ３１ａ〜３１ｄ（以下ウェイ０〜３と略す）、４つの比較器３２ａ〜３２ｄ、４つのアンド回路３３ａ〜３３ｄ、オア回路３４、セレクタ３５、セレクタ３６、デマルチプレクサ３７、制御部３８を備える。
【００２３】
アドレスレジスタ２０は、メモリ２へのアクセスアドレスを保持するレジスタである。このアクセスアドレスは３２ビットであるものとする。同図に示すように、アクセスアドレスは、最上位ビットから順に、２１ビットのタグアドレス、４ビットのセットインデックス（図中のＳＩ）、５ビットのワードインデックス（図中のＷＩ）を含む。ここで、タグアドレスはウェイにマッピングされるメモリ中の領域（そのサイズはセット数×ブロックである）を指す。この領域のサイズは、タグアドレスよりも下位のアドレスビット（Ａ１０〜Ａ０）で定まるサイズつまり２ｋバイトであり、１つのウェイのサイズでもある。セットインデックス（ＳＩ）はウェイ０〜３に跨る複数セットの１つを指す。このセット数は、セットインデックスが４ビットなので１６セットである。タグアドレスおよびセットインデックスで特定されるブロックは、リプレース単位であり、キャッシュメモリに格納されている場合はラインデータ又はラインと呼ばれる。ラインデータのサイズは、セットインデックスよりも下位のアドレスビットで定まるサイズつまり１２８バイトである。１ワードを４バイトとすると、１ラインデータは３２ワードである。ワードインデックス（ＷＩ）は、ラインデータを構成する複数ワード中の１ワードを指す。アドレスレジスタ２０中の最下位２ビット（Ａ１、Ａ０）は、ワードアクセス時には無視される。
【００２４】
デコーダ３０は、セットインデックスの４ビットをデコードし、４つのウェイ０〜３に跨る１６セット中の１つを選択する。
【００２５】
４つのウェイ０〜３は、同じ構成を有数する４つのウェイであり、４×２ｋバイトの容量を有する。ウェイ０は、１６個のキャッシュエントリーを有する。
【００２６】
図３に１つのキャッシュエントリーにおける詳細なビット構成を示す。同図のように、１つのキャッシュエントリーは、バリッドフラグＶ、２１ビットのタグ、１２８バイトのラインデータ、使用フラグＵおよびダーティフラグＤを保持する。バリッドフラグＶは、そのキャッシュエントリーが有効か否かを示す。タグは２１ビットのタグアドレスのコピーである。ラインデータは、タグアドレスおよびセットインデックスにより特定されるブロック中の１２８バイトデータのコピーである。ダーティフラグは、そのキャッシュエントリーに書き込みがあったか否か、つまりキャシュエントリー中にキャッシュされたデータが書き込みによりメモリ中のデータと異なるためメモリに書き戻すことが必要か否かを示す。使用フラグＵは、そのキャッシュエントリーにアクセスがあったか否かを示し、ミスヒットによるリプレースに際してセット内の４つのキャッシュエントリーにおけるアクセス順序の代わりに用いられる。より正確には、使用フラグＵの１は、アクセスがあったことを、０はないことを意味する。セット内の４つの使用フラグは、全て１になれば、０にリセットされるので、セット内の４つのキャッシュエントリーにおける使用の有無を示す相対的な値である。別言すれば、使用フラグＵは、アクセスされた時期が古いか新しいか２つの相対的な状態を示す。つまり、使用フラグＵが１のキャッシュエントリーは、使用フラグが０のキャッシュエントリーよりも新しくアクセスされたことを意味する。
【００２７】
ウェイ１〜３についても、ウェイ０と同様である。セットインデックスの４ビットによってデコーダ３０を介して選択される４ウェイに跨る４つのキャッシュエントリーは、セットと呼ばれる。
【００２８】
比較器３２ａは、アドレスレジスタ２０中のタグアドレスと、セットインデックスにより選択されたセットに含まれる４つのタグ中のウェイ０のタグとが一致するか否かを比較する。比較器３２ｂ〜３２ｃについても、ウェイ３１ｂ〜３１ｄに対応すること以外は同様である。
【００２９】
アンド回路３３ａは、バリッドフラグと比較器３２ａの比較結果とが一致するか否かを比較する。この比較結果をｈ０とする。比較結果ｈ０が１である場合は、アドレスレジスタ２０中のタグアドレスおよびセットインデックスに対応するラインデータが存在すること、つまりウェイ０においてヒットしたことを意味する。比較結果ｈ０が０である場合は、ミスヒットしたことを意味する。アンド回路３３ｂ〜３３ｄについても、ウェイ３１ｂ〜３１ｄに対応すること以外は同様である。その比較結果ｈ１〜ｈ３は、ウェイ１〜３でヒットしたかミスしたかを意味する。
【００３０】
オア回路３４は、比較結果ｈ０〜ｈ３のオアをとる。このオアの結果をｈｉｔとする。ｈｉｔは、キャッシュメモリにヒットしたか否かを示す。
【００３１】
セレクタ３５は、選択されたセットにおけるウェイ０〜３のラインデータのうち、ヒットしたウェイのラインデータを選択する。
【００３２】
セレクタ３６は、セレクタ３５により選択された３２ワードのラインデータのうち、ワードインデックスに示される１ワードを選択する。
【００３３】
デマルチプレクサ３７は、キャッシュエントリにデータを書き込む際に、ウェイ０〜３の１つに書き込みデータを出力する。この書き込みデータはワード単位でよい。
【００３４】
制御部３８は、キャッシュメモリ３の全体の制御を行う。特に、使用フラグＵの更新やリプレースすべきキャッシュエントリーの決定などを行う。
【００３５】
＜制御部の構成＞
図４は、制御部３８の構成を示すブロック図である。同図のように、制御部３８は、フラグ更新部３９とリプレース部４０を備える。
【００３６】
フラグ更新部３９は、バリッドフラグＶ、使用フラグＵ、ダーティフラグＤの更新を行う。このうちバリッドフラグＶ、ダーティフラグＤの更新については周知である。フラグ更新部３９は、キャッシュヒット時に使用フラグの更新処理を行う。
【００３７】
図５に、フラグ更新部３９による使用フラグの更新例を示す。同図の上段、中段、下段は、ウェイ０〜３に跨るセットＮを構成する４つのキャッシュエントリーを示している。４つのキャッシュエントリー右端の１又は０は、それぞれ使用フラグの値である。この４つの使用フラグＵをＵ０〜Ｕ３と記す。
【００３８】
同図上段では（Ｕ０〜Ｕ３）＝（１、０、１、０）であるので、ウェイ０、２のキャッシュエントリーはアクセスがあったことを、ウェイ１、３のキャッシュエントリーはアクセスがないことを意味する。
【００３９】
この状態で、メモリアクセスがセットＮ内のウェイ１のキャッシュエントリーにヒットした場合、同図中段に示すように、（Ｕ０〜Ｕ３）＝（１、１、１、０）に更新される。つまり、実線に示すようにウェイ１の使用フラグＵ１が０から１に更新される。
【００４０】
さらに、同図中段の状態で、メモリアクセスがセットＮ内のウェイ３のキャッシュエントリーにヒットした場合、同図下段に示すように、（Ｕ０〜Ｕ３）＝（０、０、０、１）に更新される。つまり、実線に示すようにウェイ３の使用フラグＵ１が０から１に更新される。加えて、破線に示すようにウェイ３以外の使用フラグＵ０〜Ｕ２が１から０に更新される。これにより、ウェイ３のキャシュエントリーが、ウェイ０〜２の各キャッシュエントリーよりも新しくアクセスされたことを意味することになる。
【００４１】
リプレース部４０は、キャッシュミス時に使用フラグに基づいてリプレース対象のキャッシュエントリーを決定してリプレースを行う。例えば、リプレース部４０は、図５上段では、ウェイ１とウェイ３の何れかをリプレース対象と決定し、図５中段ではウェイ３をリプレース対象と決定し、図５下段ではウェイ０〜２の何れかをリプレース対象と決定する。
【００４２】
＜フラグ更新処理＞
図６は、フラグ更新部３９におけるフラグ更新処理を示すフローチャートである。同図では、バリッドフラグが０（無効）であるキャッシュエントリーの使用フラグＵは０に初期化されているものとする。
【００４３】
同図において、フラグ更新部３９は、キャッシュヒットしたとき（ステップＳ６１）、セットインデックスにより選択されたセットにおけるヒットしたウェイの使用フラグＵを１にセットし（ステップＳ６２）、そのセット内の他のウェイの使用フラグＵを読み出し（ステップＳ６３）、読み出した使用フラグＵが全て１であるか否かを判定し（ステップＳ６４）、全て１でなければ終了し、全て１であれば他のウェイの全ての使用フラグＵを０にリセットする（ステップＳ６５）。
【００４４】
このようにしてフラグ更新部３９は、図５に示した更新例のように、使用フラグを更新することができる。
【００４５】
実際のフラグ更新部３９はハードウェアにより構成されるので、以下ハードウェア構成例について説明する。
【００４６】
図７は、フラグ更新部３９の入出力論理を示す真理値表を示す図である。同図の入力欄にけるｈ０〜ｈ３は、図２に示したウェイ０〜ウェイ３におけるヒット信号である。Ｕ０＿ｉｎ〜Ｕ３＿ｉｎは、セットインデックスにより選択されたセットから読み出された、ウェイ０〜ウェイ３の使用フラグの値（更新前の値）を示す。同図の出力欄におけるＵ０＿ｏｕｔ〜Ｕ３＿ｏｕｔは、セットインデックスに書き戻される使用フラグの値（更新後の値）を示す。また、図中の○印はヒットしたウェイの使用フラグ（入力および出力）を、□印は他のウェイの使用フラグ（入力）の全てが１の場合と、対応する出力値を示す。図中の＊ａ〜＊ｄは次の式１〜式４をそれぞれ満たすことを意味する。ここで＆は論理積を示す。
【００４７】
（Ｕ１＿ｉｎ）＆（Ｕ２＿ｉｎ）＆（Ｕ３＿ｉｎ）＝０  （式１）
（Ｕ０＿ｉｎ）＆（Ｕ２＿ｉｎ）＆（Ｕ３＿ｉｎ）＝０  （式２）
（Ｕ０＿ｉｎ）＆（Ｕ１＿ｉｎ）＆（Ｕ３＿ｉｎ）＝０  （式３）
（Ｕ０＿ｉｎ）＆（Ｕ１＿ｉｎ）＆（Ｕ２＿ｉｎ）＝０  （式４）
【００４８】
同図において、Ｎｏ．１〜Ｎｏ．４の行は、ウェイ０がヒットした場合（ｈ０＝１）を示す。この場合、ヒットしたウェイ０の使用フラグＵ０＿ｉｎの値が０であっても１であっても、使用フラグＵ０＿ｏｕｔは１となる。また、他のウェイの使用フラグＵ１＿ｏｕｔ〜Ｕ２＿ｏｕｔは、＊ａの場合には更新されないが、□印のように入力時に全て１である場合には、全て０に更新される。Ｎｏ．５〜８、Ｎｏ．９〜１２、Ｎｏ．１３〜１６についても、ヒットしたウェイが１、２、３である点を除いて同様である。
【００４９】
＜回路例＞
図８は、図７の入出力論理を有するフラグ更新部３９の具体的な回路例を示す図である。同図のフラグ更新部３９は、アンド回路８０〜８３、アンド回路８４〜８７、オア回路８８、オア回路８９〜９２、セレクタ９３〜９６を備える。
【００５０】
アンド回路８０〜８３は、セットインデックスにより選択されたセットから読み出された、ウェイ０〜ウェイ３の使用フラグＵ０＿ｉｎ〜Ｕ３＿ｉｎのうち、バリッドフラグＶが１（有効）であるキャッシュエントリーの使用フラグＵ０＿ｉｎ〜Ｕ３＿ｉｎの値を出力する。
【００５１】
アンド回路８４〜８７およびオア回路８８は、アンド回路８０〜８３の出力が図７に示した＊ａ〜＊ｄを満たさない場合、つまり同図中の入力欄の□印のケースを検出する。つまり、ヒットしたウェイの他のウェイの使用フラグＵ＿ｉｎが全て１である場合を検出する。
【００５２】
オア回路８９〜９２は、それぞれヒット信号ｈ０〜ｈ３と使用フラグＵ０＿ｉｎ〜Ｕ３＿ｉｎとのオアをとる。
【００５３】
セレクタ９３〜９６は、上記□印のケースが検出された場合には１側（上側）入力を選択し、上記□印のケースが検出されない場合には０側（下側）入力を選択し、選択結果をＵ０＿ｏｕｔ〜Ｕ１＿ｏｕｔとして出力する。具体的には、上記□印のケースが検出された場合には、セレクタ９３〜９６の１側（上側）にｈ０〜ｈ３が入力されていることから、ヒットしたウェイの使用フラグＵ＿ｏｕｔが１になり、他のウェイの使用フラグは０となる。上記□印のケースが検出されない場合には、セレクタ９３〜９６の０側のそれぞれにｈ信号と使用フラグＵ＿ｉｎのオアが入力されていることから、ヒットしたウェイの使用フラグＵ＿ｏｕｔが１になり、他のウェイの使用フラグは元のままとなる。
【００５４】
このような回路により図７の真理値表をハードウェア化することができる。個々のウェイのアクセス順序を示す必要がなく、各ウェイに１ビットの使用フラグを更新するだけでよいので、ハードウェア規模を削減することができる。
【００５５】
＜リプレース処理＞
図９は、リプレース部４０におけるリプレース処理を示すフローチャートである。 同図においてリプレース部４０は、メモリアクセスがミスしたとき（ステップＳ９１）、セットインデックスにより選択されたセットにおける、４つウェイの使用フラグＵを読み出し（ステップＳ９２）、使用フラグＵが０のウェイを１つ選択する（ステップＳ９３）。このとき、使用フラグＵが０になっているウェイが複数存在する場合は、リプレース部４０はランダムに１つを選択する。さらに、リプレース部４０は、当該セットにおける選択されたウェイのキャッシュエントリーを対象にリプレースし（ステップＳ９４）、リプレース後に当該キャッシュエントリーの使用フラグＵを１に初期化する（ステップＳ９５）。なお、このときバリッドフラグＶ、ダーティフラグＤは、それぞれ１、０に初期化される。
【００５６】
なお、図９では、４つバリッドフラグＶが全部１（有効）であることを前提としているが、Ｖ＝０（無効）のキャッシュエントリーが存在する場合には当該キャッシュエントリーを選択する。
【００５７】
このように、リプレース対象は、使用フラグが０のキャッシュエントリーを１つ選択することにより決定される。このリプレースアルゴリズムは、従来のＬＲＵ方式におけるアクセス順序を示すデータの代わりに１ビットの使用フラグを用いるので、擬似的なＬＲＵ方式ということができる。
【００５８】
以上説明してきたように、本実施の形態におけるキャッシュメモリによれば、従来のＬＲＵ方式におけるアクセス順序を示すデータをキャッシュエントリー毎に設ける代わりに、１ビットの使用フラグをキャッシュエントリー毎に設けている。これにより、従来のアクセス順序データを更新する複雑な回路を、使用フラグを更新する簡単なフラグ更新回路（フラグ更新部３９）に置き換えることができる。また、リプレース部４０において、リプレース対象を、使用フラグが０のキャッシュエントリーの１つを選択することにより簡単に決定することができる。このように、本実施の形態におけるキャッシュメモリによれば、ハードウェア規模を大きく低減することができる。しかも、従来のＬＲＵと比較してもほぼ同等のヒット率を得ることができる。
【００５９】
＜変形例＞
なお、本発明のキャッシュメモリは、上記の実施形態の構成に限るものではなく、種々の変形が可能である。以下、変形例のいくつかについて説明する。
【００６０】
（１）フラグ更新部３９は、図５の下段に示したようにセット内の他のウェイの使用フラグＵ０〜Ｕ３が全部１であれば０にし、ヒットしたウェイ自身の使用フラグを１に更新するが、この代わりに、ヒットしたウェイ自身の使用フラグも０に更新する構成としてもよい。図１０に、この場合のフラグの更新例を示す。図１０は、図５と比較して、下段のウェイ３が１ではなく０になっている点が異なっている。
【００６１】
図１１は、この変形例におけるフラグ更新処理を示すフローチャートである。同図は、図６と比べて、ステップＳ６５の代わりにステップＳ６５ａを有している点が異なっている。同じ点は説明を省略して、異なる点のみ説明する。ステップＳ６５ａでは、フラグ更新部３９は、セット内の全ての使用フラグＵ０〜Ｕ３を０にリセットする。
【００６２】
このように、図１１のフラグ更新処理によれば、セット内の全ての使用フラグＵ０〜Ｕ３が１になろうとするとき、０にリセットする。図１１によっても、図５と同様のヒット率を得ることができる。
【００６３】
（２）図９に示したステップＳ９３において、リプレース部４０は、セット内に使用フラグが０のキャッシュエントリーが複数存在する場合には、ランダムに１つを選択しているが、この代わりに、規則的に選択してもよい。例えば、リプレース部４０は、その場合に、ウェイの番号の小さい方（大きい方）を選択したり、ラウンドロビン式に選択してもよい。
【００６４】
図１２Ａに、ラウンドロビン式に選択する処理を示す。同図においてリプレース部４０は、セット内に使用フラグが０のキャッシュエントリーが複数存在する場合に、前回リプレースしたウェイの番号を判別し（ステップＳ１２１）、使用フラグが０のキャッシュエントリーのうち、判別した番号よりも大きい番号のウェイのキャシュエントリーを選択する（ステップＳ１２２）。ここで、前回リプレースした番号は、例えば、キャッシュメモリ全体でリプレースしたウェイの番号を保持するレジスタを設けておき、当該レジスタを参照することにより判別すればよい。このレジスタは、ウェイの番号を保持する代わりに、リプレースしたウェイをビット位置で示すようにしてもよい。この場合のレジスタの一例を図１２Ｂに示す。同図ではレジスタ中の４ビットのフィールドが遷移する様子を示している。この４ビットのビット位置はウェイ０〜ウェイ３に対応する。４ビット中の”１”のビットは前回リプレースされたウェイを示す。ステップＳ１２２では、リプレース部４０は、かつセット内の使用フラグが０のキャッシュエントリーの中から、”１”のビットかた右に回転する方向の直近のビットを判別し、そのビット位置に対応するウェイのキャッシュエントリー選択する。同図の例では、ウェイ０、１、３、０、２の順にキャッシュエントリーが選択されている。
【００６５】
なお、図１２Ｂでは、全セットで共通のレジスタを示しているが、セット毎の個別にレジスタを備えることも可能である。
【００６６】
（３）上記実施の形態では、４ウェイ・セット・アソシエイティブのキャッシュメモリを例に説明したが、ウェイ数は、８ウェイでも１６ウェイでもよい。また、上記実施の形態では、セット数が１６である例を説明したが、セット数はいくつでもよい。
【００６７】
（４）上記実施の形態では、セット・アソシエイティブのキャッシュメモリを例に説明したが、フル・アソシエイティブ方式のキャッシュメモリであってもよい。
【００６８】
（５）使用フラグＵは１ビットでなくても２ビットとしてもよい。例えば、２ビットとした場合でも個々のキャッシュエントリーのアクセス順序を完全に示す必要はなく、少なくとも古いか新しいかの２状態を相対的に判別できればよく、２ビットで表現できる３番目の状態および４番目の状態をどのように定義してもよい。
【００６９】
（６）図９に示したステップＳ９５において、リプレース直後の使用フラグＵは１に初期化されるが、この代わりに０に初期化してもよい。ただし、使用フラグの初期値を０にした場合は、リプレース後に発生したキャッシュミスにより再度リプレースされてしまう可能性がある。この点では、初期値は１とする方が望ましいと考えられる。
【００７０】
（実施の形態２）
図１３は、本発明の実施の形態２におけるキャッシュメモリの構成を示すブロック図である。同図のキャッシュメモリは、図２の構成と比較して、ウェイ３１ａ〜３１ｄの代わりにウェイ１３１ａ〜１３１ｄを備える点と、制御部３８の代わりに制御部１３８を備える点とが異なっている。以下、同じ点は説明を省略して、異なる点を中心に説明する。
【００７１】
ウェイ１３１ａは、ウェイ３１ａと比べて、各キャッシュエントリー中にニューフラグが追加されている点が異なる。
【００７２】
図１４に、ウェイ１３１ａ内の１つのキャッシュエントリーのビット構成を示す。同図のように、ニューフラグＮが追加されている点のみ異なっている。ニューフラグＮは、リプレース直後（又はフィル直後）に初期値として１が設定され、当該キャッシュエントリーへのアクセスがあったときに０にリセットされる。つまり、ニューフラグＮの１は、当該キャッシュエントリーがリプレース（又はフィル）されてから一度もアクセスされていない、新しい状態であることを意味する。
【００７３】
制御部１３８は、図１５に示すように、制御部１３８は、フラグ更新部１３９とリプレース部１４０とを備え、制御部３８と比べて、ニューフラグＮの設定および更新する点と、リプレース時にニューフラグが１のキャッシュエントリーをリプレース対象から除外する点とが異なっている。
【００７４】
＜リプレース処理＞
図１６は、リプレース部１４０におけるリプレース処理を示すフローチャートである。同図は、図９と比較して、ステップＳ９２の代わりにステップＳ９２ａを有する点と、ステップ９２ａと９３の間にステップＳ１６１およびＳ１６２が追加された点と、ステップＳ９５の代わりにステップＳ９５ａを有する点とが異なっている。
【００７５】
ステップＳ９２ａにおいてリプレース部１４０は、セットインデックスにより選択されたセットにおける、４つウェイの使用フラグＵ０〜Ｕ３に加えて４つのニューフラグ（Ｎ０〜Ｎ３とする）を読み出す。
【００７６】
さらに、リプレース部１４０は、読み出した４つのニューフラグＮ０〜Ｎ３の全てが１であるか否かを判定し（ステップＳ１６１）、全てが１である場合は、ステップＳ９３に進み、全てが１ではない（０がある）場合には、使用フラグＵが０のウェイのうち、ニューフラグＮが１のウェイを除外する（ステップＳ１６２）。
【００７７】
さらに、ステップＳ９３において、リプレース部１４０は、使用フラグが０でかつニューフラグが０のウェイの中からリプレース対象を１つ選択することになる。ただし、４つのニューフラグの全てが１である場合には、使用フラグＵが０のウェイの中からリプレース対象を１つ選択し、４つの使用フラグＵの全てが１である場合には、ニューフラグＮを無視して使用フラグＵが１のウェイの中からリプレース対象を１つ選択し、使用フラグＵ＝０かつニューフラグＮ＝０のウェイが存在しない場合には、ニューフラグＮを無視して使用フラグＵ＝０のウェイの中からプレース対象を１つ選択する。
【００７８】
また、ステップＳ９５ａにおいて、リプレース部１４０は、他のフラグの初期化と共に、ニューフラグＮを１に初期化する。
【００７９】
＜フラグ更新処理＞
図１７は、フラグ更新部１３９におけるフラグ更新処理を示すフローチャートである。同図は、図６と比較して、ステップＳ６２とＳ６３の間にステップＳ１７１が追加された点が異なる。
【００８０】
ステップＳ１７１においてフラグ更新部１３９は、選択されたセット内のヒットしたウェイのキャッシュエントリーのニューフラグが１なら０にリセットする。これにより、一度アクセスされたキャッシュエントリーは、ニューフラグＮを０にリセットされる。
【００８１】
以上説明してきたように、本実施の形態におけるリプレース部１４０は、ニューフラグが１の場合は、当該キャッシュエントリーをリプレース対象から除外している。これは、次の理由による。すなわち、使用フラグＵは初期値が１であるが他のウェイの使用フラグが順次１になれば、０にリセットされる。つまり、使用フラグＵが０のキャッシュエントリーであっても一度もアクセスされていない場合がある。こうして使用フラグが０になった場合、リプレース後に一度もアクセスされていないキャッシュエントリーが、キャッシュミスの発生により再度リプレース対象に選択されてしまう可能性がある。そのため、ニューフラグＮを設けることにより、リプレースされた後に一度もアクセスされていないキャッシュエントリーがリプレースされてしまうことを防止することができる。
【００８２】
＜変形例＞
（１）実施の形態１における変形例（１）〜（５）を本実施の形態に適用してもよい。
【００８３】
（２）図１６に示したステップＳ９５ａにおいて、リプレース直後の使用フラグＵは１に初期化されるが、この代わりに０に初期化してもよい。実施の形態１と異なり本実施の形態ではニューフラグＮが設けられたので、使用フラグの初期値が１の場合でも０の場合でも、リプレース後に発生したキャッシュミスにより一度もアクセスされないまま再度リプレースされてしまうことを防止することができる。
【００８４】
（３）上記各実施形態におけるキャッシュメモリは、プロセッサと共にチップに内蔵されるオンチップキャッシュ、オフチップキャッシュ、命令キャッシュ、データキャッシュの何れに適用してもよい。
【産業上の利用可能性】
【００８５】
本発明は、メモリアクセスを高速化するためのキャッシュメモリおよびその制御方法に適しており、例えば、オンチップキャッシュメモリ、オフチップキャッシュメモリ、データキャッシュメモリ、命令キャッシュメモリ等に適している。
【図面の簡単な説明】
【００８６】
【図１】図１は、本発明の実施の形態１におけるプロセッサ、キャッシュメモリ、メモリを含む概略構成を示すブロック図である。
【図２】図２は、キャッシュメモリの構成を示すブロック図である。
【図３】図３は、キャッシュエントリのビット構成を示す説明図である。
【図４】図４は、制御部の構成を示すブロック図である。
【図５】図５は、フラグの更新例を示す説明図である。
【図６】図６は、フラグ更新処理フローを示す図である。
【図７】図７は、フラグ管理部の入出力論理を示す真理値表を示す図である。
【図８】図８は、フラグ管理部の回路例を示す図である。
【図９】図９は、リプレース処理フローを示す図である。
【図１０】図１０は、変形例におけるフラグの更新例を示す説明図である。
【図１１】図１１は、変形例におけるフラグ更新処理フローを示す図である。
【図１２Ａ】図１２Ａは、変形例における選択処理の他の例を示す図である。
【図１２Ｂ】図１２Ｂは、変形例における選択処理の他の例を示す図である。
【図１３】図１３は、本発明ン実施の形態２におけるキャッシュメモリの構成を示すブロック図である。
【図１４】図１４は、キャッシュエントリのビット構成を示す説明図である。
【図１５】図１５は、制御部の構成を示すブロック図である。
【図１６】図１６は、リプレース処理フローを示す図である。
【図１７】図１７は、フラグ更新処理フローを示す図である。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2005029336.tif 000020
【図２】
2005029336.tif 000021
【図３】
2005029336.tif 000022
【図４】
2005029336.tif 000023
【図５】
2005029336.tif 000024
【図６】
2005029336.tif 000025
【図７】
2005029336.tif 000026
【図８】
2005029336.tif 000027
【図９】
2005029336.tif 000028
【図１０】
2005029336.tif 000029
【図１１】
2005029336.tif 000030
【図１２Ａ】
2005029336.tif 000031
【図１２Ｂ】
2005029336.tif 000032
【図１３】
2005029336.tif 000033
【図１４】
2005029336.tif 000034
【図１５】
2005029336.tif 000035
【図１６】
2005029336.tif 000036
【図１７】
2005029336.tif 000037
【国際調査報告】
2005029336.tif 000038
2005029336.tif 000039
2005029336.tif 000040
2005029336.tif 000041