(57)【特許請求の範囲】
【請求項１】
キャッシュの単位データを保持するキャッシュエントリーに対応させて、当該キャッシュエントリーが有効であるか否かを示すバリッドフラグと、当該キャッシュエントリーに対する書き込みがなされたか否かを示すダーティフラグとを保持するフラグ保持手段と、
プロセッサから命令によってアクセス可能なレジスタで構成され、プロセッサから命令によって発行されたコマンドを保持するコマンド保持手段と、
コマンド保持手段に保持されたコマンドに基づき、前記バリッドフラグおよびダーティフラグの少なくとも一方をキャッシュエントリーの状態に反して改変する改変手段と
を備え、
前記コマンド保持手段へのコマンドの発行は、前記コマンド保持手段へのデータ転送命令によって行われ、
前記改変手段はプロセッサの動作とは独立して動作し、キャッシュメモリがプロセッサからアクセスされていない間に改変を行うこと
を特徴とするキャッシュメモリ。
【請求項２】
前記改変手段は、メモリからデータをロードすることなく、キャッシュエントリーに対してタグとしてのアドレスを設定しバリッドフラグをセットする
ことを特徴とする請求項１記載のキャッシュメモリ。
【請求項３】
前記改変手段は、キャッシュエントリーに対してライトバックされていない書き換えられたデータを保持している状態でダーティフラグをリセットする
ことを特徴とする請求項２記載のキャッシュメモリ。
【請求項４】
前記キャッシュメモリは、さらに、
プロセッサから指定されたアドレス範囲を保持する保持手段と、
保持されたアドレス範囲に属するデータを保持するキャッシュエントリーを特定する特定手段とを備え、
前記改変手段は、特定されたキャッシュエントリーに対して前記バリッドフラグおよびダーティフラグの少なくとも一方を改変する
ことを特徴とする請求項２又は３記載のキャッシュメモリ。
【請求項５】
前記特定手段は、
前記アドレス範囲の先頭アドレスがラインデータの途中を指す場合、当該先頭アドレスを、前記アドレス範囲に含まれる先頭のラインを指すスタートラインアドレスに変換する第１変換手段と、
前記アドレス範囲の末尾アドレスがラインデータの途中を指す場合、当該末尾アドレスを、前記アドレス範囲に含まれる末尾のラインを指すエンドラインアドレスに変換する第２変換手段と、
前記スタートラインアドレスからエンドラインアドレスまでの各ラインアドレスに対応するデータを保持するキャッシュエントリーがあるか否かを判定する判定手段と
を備えることを特徴とする請求項４記載のキャッシュメモリ。
【請求項６】
前記改変手段は、さらに、
ダーティフラグのリセット指示付きメモリアクセス命令が実行されたことを検出する命令検出手段と、
当該命令によってアクセスがなされたキャッシュエントリーに対してダーティフラグをリセットするフラグ書き換え手段と
を備えることを特徴とする請求項１記載のキャッシュメモリ。
【請求項７】
前記改変手段は、さらに、
バリッドフラグのリセット指示付きメモリアクセス命令が実行されたことを検出する命令検出手段と、
当該命令によってアクセスがなされたキャッシュエントリーに対してバリッドフラグをリセットするフラグ書き換え手段と
を備えることを特徴とする請求項１記載のキャッシュメモリ。
【請求項８】
キャッシュの単位データを保持するキャッシュエントリーに対応させて、当該キャッシュエントリーが有効であるか否かを示すバリッドフラグと、当該キャッシュエントリーに対する書き込みがなされたか否かを示すダーティフラグとを有するキャッシュメモリの制御方法であって、
プロセッサが所定のレジスタへのデータ転送命令を実行することにより、プロセッサから発行されたコマンドを前記所定のレジスタに保持させる保持ステップと、
保持されたコマンドに基づき、メモリからデータをロードすることなく、キャッシュエントリーに対してタグとしてのアドレスを設定しバリッドフラグをセットするバリッドフラグセットステップと、
保持されたコマンドに基づき、キャッシュエントリーに対してライトバックされていない書き換えられたデータを保持している状態でダーティフラグをリセットするダーティフラグリセットステップとを有し、
前記バリッドフラグセットステップと前記ダーティフラグリセットステップとは、プロセッサの動作とは独立して行われ、かつキャッシュメモリがプロセッサからアクセスされていない間に行われることを特徴とする制御方法。
【請求項９】
前記コマンド保持手段は、バリッドフラグの操作を指定するために用いる第１のフィールドと、ダーティーフラグの操作を指定するために用いる第２のフィールドとを備えることを特徴とする請求項１記載のキャッシュメモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサのメモリアクセスを高速化するためのキャッシュメモリおよびその制御方法に関する。
【背景技術】
【０００２】
近年のマイクロプロセッサでは、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ Ｒａｎｄｏｍ Ａｃｃｅｓｓ Ｍｅｍｏｒｙ）等から成る小容量で高速なキャッシュメモリをマイクロプロセッサの内部、もしくはその近傍に配置し、データの一部をキャッシュメモリに記憶することによって、マイクロプロセッサのメモリアクセスを高速化させている。
【０００３】
コンピュータシステムでは、中央処理装置からキャッシュメモリへのリードアクセスまたはライトアクセスがミスヒットした場合に、主記憶装置から新たに読み出されたデータの一部が、エントリ（登録項目）としてキャッシュメモリの空きブロックに格納される。この時、空きブロックが存在しない場合には、複数のブロックのいずれか１つを選択し、選択されたブロックに格納されているエントリを主記憶装置に戻してブロック内を空き状態にし、この空きブロックに新たに読み出したデータを格納するエントリ置換処理が必要になる。上記エントリ置換処理では、最も以前に参照したデータを格納しているブロックを選択する手法、すなわち、ＬＲＵ（Ｌｅａｓｔ Ｒｅｃｅｎｔｌｙ Ｕｓｅｄ）デコード方式が一般的に採用されている。このＬＲＵデコード方式によってキャッシュメモリの使用効率が向上し、その結果、マイクロプロセッサの実行速度が向上する。
【０００４】
マイクロプロセッサが処理するプログラムの中には、アクセス頻度は少ないものの、ひとたび起動された場合には高速に処理しなければならないような特殊な処理と、アクセス頻度は多いが、実行速度がそれほど要求されないような処理とが存在する。
【０００５】
そこで、これに対応するために例えば特許文献１等の従来技術では、キャッシュメモリにフリーズ機能を設けている。フリーズ機能は、アクセスは少ないものの、ひとたび起動された場合には高速に処理しなければならないようなプログラムを予めキャッシュメモリ内にコピーしておき、その領域を書き換え禁止にしておく機能である。この機能を有することで、コンピュータシステムは、必要な時にプログラムをキャッシュメモリから読み出して実行することができ、これにより実行時間が短縮する。また、パージ機能は、アクセス頻度は多いが、実行速度がそれほど要求されないようなプログラムやデータをキャッシュメモリ内に保存しておくことなく、その領域を解放する機能である。この機能を有することで、キャッシュメモリに余裕ができ、優先度の高い他のプログラムやデータをキャッシュメモリに取り込むことができ、これにより、キャッシュメモリの利用効率が向上し、総合的な実行時間が短縮する。
特許文献１：特開２０００−２００２２１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、フリーズ機能を使用してもパージ機能を使用しても、キャッシュミス発生によりリプレースする場合に無駄なリプレースをしたり、無駄なライトバックをする場合があるという問題がある。
【０００７】
例えば、無駄なリプレースが生じる場合として、プロセッサが配列要素を全てライトする場合がある。この場合、メモリから新たにデータをキャッシュメモリにリプレースしても、プロセッサから全てライトされるので、リプレースが無駄に終わる。
【０００８】
また、無駄なライトバックが生じる場合として、キャッシュエントリーが単にワークデータとして使用される場合がある。この場合、最終的に破棄してもよいデータであるにも拘らず、無駄なライトバックが発生する。
【課題を解決するための手段】
【０００９】
本発明の目的は、無駄なリプレースや無駄なライトバックを防止するキャッシュメモリを提供することにある。
【００１０】
上記課題を解決するため本発明のキャッシュメモリは、キャッシュの単位データを保持するキャッシュエントリーに対応させて、当該キャッシュエントリーが有効であるか否かを示すバリッドフラグと、当該キャッシュエントリーに対する書き込みがなされたか否かを示すダーティフラグとを保持するフラグ保持手段と、プロセッサから命令によってアクセス可能なレジスタで構成され、プロセッサから命令によって発行されたコマンドを保持するコマンド保持手段と、コマンド保持手段に保持されたコマンドに基づき、前記バリッドフラグおよびダーティフラグの少なくとも一方をキャッシュエントリーの状態に反して改変する改変手段とを備え、前記コマンド保持手段へのコマンドの発行は、前記コマンド保持手段へのデータ転送命令によって行われ、前記改変手段はプロセッサの動作とは独立して動作し、キャッシュメモリがプロセッサからアクセスされていない間に改変を行うことを特徴とする。
【００１１】
前記改変手段は、キャッシュエントリーに対してタグとしてのアドレスを設定し、有効なデータを保持していない状態でバリッドフラグをセットする構成としてもよい。
【００１２】
この構成によれば、配列などのデータを書き込むためのキャッシュエントリーをキャッシュメモリ上に確保することができ、しかも、上書きされる運命にあるデータをメモリからキャッシュメモリへ無駄にロードすることを防止することができる。
【００１３】
また、前記改変手段は、プロセッサからの指定されたキャッシュエントリーに対してライトバックされていない書き換えられたデータを保持している状態でダーティフラグをリセットする。
【００１４】
この構成によれば、テンポラリーなワークデータ等破棄される運命にあるデータを保持するキャッシュエントリーから無駄にライトバックすることを防止することができる。
【００１５】
ここで、前記キャッシュメモリは、さらに、プロセッサから指定されたアドレス範囲を保持する保持手段と、保持されたアドレス範囲に属するデータを保持するキャッシュエントリーを特定する特定手段とを備え、前記改変手段は、特定されたキャッシュエントリーに対して前記バリッドフラグおよびダーティフラグの少なくとも一方を改変する構成としてもよい。
【００１６】
この構成によれば、プロセッサから指定されたアドレス範囲で、キャッシュメモリへの無駄なデータのロード又はメモリへの無駄なライトバックを防止することができる。
【００１７】
ここで、前記特定手段は、前記アドレス範囲の先頭アドレスがラインデータの途中を指す場合、当該先頭アドレスを、前記アドレス範囲に含まれる先頭のラインを指すスタートラインアドレスに変換する第１変換手段と、前記アドレス範囲の末尾アドレスがラインデータの途中を指す場合、当該末尾アドレスを、前記アドレス範囲に含まれる末尾のラインを指すエンドラインアドレスに変換する第２変換手段と、前記スタートラインアドレスからエンドラインアドレスまでの各ラインアドレスに対応するデータを保持するキャッシュエントリーがあるか否かを判定する判定手段と備える構成としてもよい。
【００１８】
この構成によれば、プロセッサは、前記アドレス範囲として、キャッシュメモリのラインサイズ及びライン境界のアドレスとは無関係に任意のアドレスから任意のアドレス（又は任意のサイズ）を指定することができる。つまり、プロセッサにおいてキャッシュメモリのラインサイズ及びライン境界のアドレスを管理する必要がないので、キャッシュメモリ管理のための負荷を解消することができる。
【００１９】
ここで、前記改変手段は、さらに、ダーティフラグのリセット指示付きメモリアクセス命令が実行されたことを検出する命令検出手段と、当該命令によってアクセスがなされたキャッシュエントリーに対してダーティフラグをリセットするフラグ書き換え手段とを備える構成としてもよい。
【００２０】
ここで、前記改変手段は、さらに、バリッドフラグのリセット指示付きメモリアクセス命令が実行されたことを検出する命令検出手段と、当該命令によってアクセスがなされたキャッシュエントリーに対してバリッドフラグをリセットするフラグ書き換え手段とを備える構成としてもよい。
また、本発明のキャッシュメモリの制御方法についても上記と同様の手段、作用を有する。
【００２１】
本発明のキャッシュメモリによれば、配列などのデータを書き込むためのキャッシュエントリーをキャッシュメモリ上に確保することができ、しかも、上書きされる運命にあるデータをメモリからキャッシュメモリへ無駄にロードすることを防止することができる。
また、テンポラリーなワークデータ等破棄される運命にあるデータを保持するキャッシュエントリーから無駄にライトバックすることを防止することができる。
【００２２】
さらに、プロセッサは、前記アドレス範囲として、キャッシュメモリのラインサイズ及びライン境界のアドレスとは無関係に任意のアドレスから任意のアドレス（又は任意のサイズ）を指定することができる。つまり、プロセッサにおいてキャッシュメモリのラインサイズ及びライン境界のアドレスを管理する必要がないので、キャッシュメモリ管理のための負荷を解消することができる。
【発明の効果】
【００２３】
本発明のキャッシュメモリによれば、プロセッサの指示に基づいて、配列などのデータを書き込むためのキャッシュエントリーをキャッシュメモリ上に確保することができ、しかも、上書きされる運命にあるデータをメモリからキャッシュメモリへ無駄にロードすることを防止することができる。また、テンポラリーなワークデータ等破棄される運命にあるデータを保持するキャッシュエントリーから無駄にライトバックすることを防止することができる。
【発明を実施するための最良の形態】
【００２４】
（実施の形態１）
＜全体構成＞
図１は、本発明の実施の形態１におけるプロセッサ１、キャッシュメモリ３、メモリ２を含むシステムの概略構成を示すブロック図である。同図のように、本発明のキャッシュメモリ３は、プロセッサ１およびメモリ２を有するシステムに備えられる。
キャッシュメモリ３は、キャッシュエントリー毎にキャッシュエントリーが有効であるか否かを示すバリッドフラグＶと、当該キャッシュエントリーに対して書き込みがなされたか否かを示すダーティフラグＤとを有し、プロセッサ１により指定されたアドレスのデータを保持するキャッシュエントリーに対してデータをライトバックすることなくダーティフラグＤを１から０（ダーティでない）に改変し、また、プロセッサ１により指定されたアドレスに対応するキャッシュエントリーを確保してメモリからデータをロードすることなくバリッドフラグＶを１（有効）に改変するよう構成されている。
ダーティフラグＤを１から０に改変するのは、最終的には破棄されるテンポラリーなワークデータを保持するキャシュエントリーから無駄にライトバックすることを防止するためである。また、キャッシュエントリーを確保してメモリからデータをロードすることなくバリッドフラグＶを１（有効）に改変することにより、配列など書き込みをするためのキャッシュエントリーを予め確保するためである。
【００２５】
＜キャッシュメモリの構成＞
以下、キャッシュメモリ３の具体例として、４ウェイ・セット・アソシエイティブ方式のキャッシュメモリに本発明を適用した場合の構成について説明する。
図２は、キャッシュメモリ３の構成例を示すブロック図である。同図のように、キャッシュメモリ３は、アドレスレジスタ２０、メモリＩ／Ｆ２１、デコーダ３０、４つのウェイ３１ａ〜３１ｄ（以下ウェイ０〜３と略す）、４つの比較器３２ａ〜３２ｄ、４つのアンド回路３３ａ〜３３ｄ、オア回路３４、セレクタ３５、３６、デマルチプレクサ３７、制御部３８を備える。
【００２６】
アドレスレジスタ２０は、メモリ２へのアクセスアドレスを保持するレジスタである。このアクセスアドレスは３２ビットであるものとする。同図に示すように、アクセスアドレスは、最上位ビットから順に、２１ビットのタグアドレス、４ビットのセットインデックス（図中のＳＩ）、５ビットのワードインデックス（図中のＷＩ）を含む。ここで、タグアドレスはウェイにマッピングされるメモリ中の領域（そのサイズはセット数×ブロックである）を指す。この領域のサイズは、タグアドレスよりも下位のアドレスビット（Ａ１０〜Ａ０）で定まるサイズつまり２ｋバイトであり、１つのウェイのサイズでもある。セットインデックス（ＳＩ）はウェイ０〜３に跨る複数セットの１つを指す。このセット数は、セットインデックスが４ビットなので１６セットある。タグアドレスおよびセットインデックスで特定されるキャッシュエントリーは、リプレース単位であり、キャッシュメモリに格納されている場合はラインデータ又はラインと呼ばれる。ラインデータのサイズは、セットインデックスよりも下位のアドレスビットで定まるサイズつまり１２８バイトである。１ワードを４バイトとすると、１ラインデータは３２ワードである。ワードインデックス（ＷＩ）は、ラインデータを構成する複数ワード中の１ワードを指す。アドレスレジスタ２０中の最下位２ビット（Ａ１、Ａ０）は、ワードアクセス時には無視される。
【００２７】
メモリＩ／Ｆ２１は、キャッシュメモリ３からメモリ２へのデータのライトバックや、メモリ２からキャッシュメモリ３へのデータのロード等、キャッシュメモリ３からメモリ２をアクセスするためのＩ／Ｆである。
【００２８】
デコーダ３０は、セットインデックスの４ビットをデコードし、４つのウェイ０〜３に跨る１６セット中の１つを選択する。
【００２９】
４つのウェイ０〜３は、同じ構成を有数する４つのウェイであり、４×２ｋバイトの容量を有する。各ウェイは、１６個のキャッシュエントリーを有する。
【００３０】
図３に１つのキャッシュエントリーにおける詳細なビット構成を示す。同図のように、１つのキャッシュエントリーは、バリッドフラグＶ０〜Ｖ３、２１ビットのタグ、１２８バイトのラインデータ、ダーティフラグＤ０〜Ｄ３を有する。
【００３１】
タグは２１ビットのタグアドレスのコピーである。
ラインデータは、タグアドレスおよびセットインデックスにより特定されるブロック中の１２８バイトデータのコピーであり、３２バイトの４つのサブラインからなる。
【００３２】
バリッドフラグＶ０〜Ｖ３は、４つのサブラインに対応し、サブラインが有効か否かを示す。
【００３３】
ダーティフラグＤ０〜Ｄ３は、４つのサブラインに対応し、そのサブラインにプロセッサから書き込みがあったか否か、つまりサブライン中にキャッシュされたデータが存在するが書き込みによりメモリ中のデータと異なるためメモリに書き戻すことが必要か否かを示す。
【００３４】
比較器３２ａは、アドレスレジスタ２０中のタグアドレスと、セットインデックスにより選択されたセットに含まれる４つのタグ中のウェイ０のタグとが一致するか否かを比較する。比較器３２ｂ〜３２ｃについても、ウェイ３１ｂ〜３１ｄに対応すること以外は同様である。
【００３５】
アンド回路３３ａは、バリッドフラグと比較器３２ａの比較結果とが一致するか否かを比較する。この比較結果をｈ０とする。比較結果ｈ０が１である場合は、アドレスレジスタ２０中のタグアドレスおよびセットインデックスに対応するラインデータが存在すること、つまりウェイ０においてヒットしたことを意味する。比較結果ｈ０が０である場合は、ミスヒットしたことを意味する。アンド回路３３ｂ〜３３ｄについても、ウェイ３１ｂ〜３１ｄに対応すること以外は同様である。その比較結果ｈ１〜ｈ３は、ウェイ１〜３でヒットしたかミスしたかを意味する。
【００３６】
オア回路３４は、比較結果ｈ０〜ｈ３のオアをとる。このオアの結果をｈｉｔとする。ｈｉｔは、キャッシュメモリにヒットしたか否かを示す。
【００３７】
セレクタ３５は、選択されたセットにおけるウェイ０〜３のラインデータのうち、ヒットしたウェイのラインデータを選択する。
【００３８】
セレクタ３６は、セレクタ３５により選択された３２ワードのラインデータにうち、ワードインデックスに示される１ワードを選択する。
【００３９】
デマルチプレクサ３７は、キャッシュエントリにデータを書き込む際に、ウェイ０〜３の１つに書き込みデータを出力する。この書き込みデータはワード単位でよい。
【００４０】
制御部３８は、キャッシュメモリ３の全体の制御を行う。特に、プロセッサからのコマンド及びアドレス指定に従って、Ｖフラグの改変と、Ｄフラグの改変とを行う。
【００４１】
＜制御部の構成＞
図４は、制御部３８の構成を示すブロック図である。同図のように、制御部３８は、フラグ更新部３９、リプレース部４０、フラグ改変部４１とを含む。
フラグ更新部３９は、従来技術と同様にキャッシュメモリの状態を反映するようＶフラグ、Ｄフラグの更新を行う。
リプレース部４０は、従来技術と同様にキャッシュエントリーのリプレースを行う。
フラグ改変部４１は、プロセッサ１からのコマンド及びアドレス指定に応じて、Ｖフラグの改変とＤフラグの改変とを行う。このコマンドには、Ｖフラグ設定コマンドとＤフラグ設定コマンドとがある。
【００４２】
＜フラグ改変部の構成＞
図５は、フラグ改変部４１の構成例を示すブロック図である。同図のようにフラグ改変部４１は、コマンドレジスタ４０１、スタートアドレスレジスタ４０２、サイズレジスタ４０３、加算器４０４、スタートアライナ４０５ａ、４０５ｂ、エンドアライナ４０６ａ、４０６ｂ、フラグ書換部４０７を備える。
【００４３】
コマンドレジスタ４０１は、プロセッサ１から直接アクセス可能なレジスタであり、プロセッサ１により書き込まれたコマンドを保持する。図６（ｃ）に、コマンドレジスタ４０１にコマンドを書き込む命令の一例を示す。この命令は、通常の転送命令（ｍｏｖ命令）であり、ソースオペランドとしてコマンドを、デスティネーションオペランドとしてコマンドレジスタ（ＣＲ）４０１を指定している。図６（ｄ）に、コマンドフォーマットの一例を示す。このコマンドフォーマットは、Ｖフラグ設定コマンド用の２ビットのフィールドと、Ｄフラグ設定コマンド用の２ビットのフィールドと、サブライン指定用の４ビットのフィールドとを含む。
【００４４】
例えば、Ｖフラグ設定コマンドは、「１０」であればＶ＝０に設定することを指示し（Ｖリセットコマンド）、「１１」であればＶ＝１に設定することを指示し（Ｖセットコマンド）、「００」であれば無効(ノーオペレーション)を意味する。Ｄフラグ設定コマンドも同様である。サブライン指定フィールドは、サブラインを個別に指定するためのフィールドであり、個別指定がない場合はライン（全サブライン）指定であるものとする。
【００４５】
スタートアドレスレジスタ４０２は、プロセッサ１から直接アクセス可能なレジスタであり、プロセッサ１により書き込まれたスタートアドレスを保持する。このスタートアドレスはＣフラグを設定すべきアドレス範囲の開始位置を示す。図６（ａ）に、スタートアドレスレジスタ４０２にスタートアドレスを書き込む命令の一例を示す。この命令も、図６（ｃ）と同様に通常の転送命令（ｍｏｖ命令）である。
【００４６】
サイズレジスタ４０３は、プロセッサ１から直接アクセス可能なレジスタであり、プロセッサ１により書き込まれたサイズを保持する。このサイズは、スタートアドレスからのアドレス範囲を示す。図６（ｂ）に、サイズレジスタ４０３にサイズを書き込む命令の一例を示す。この命令も、図６（ｃ）と同様に通常の転送命令（ｍｏｖ命令）である。なお、サイズの単位は、バイト数であっても、ライン数（キャッシュエントリー数）であってもよく、予め定められた単位であればよい。
【００４７】
加算器４０４は、スタートアドレスレジスタ４０２に保持されたスタートアドレスとサイズレジスタ４０３に保持されたサイズとを加算する。加算結果は、アドレス範囲の終了位置を指すエンドアドレスである。加算器４０４は、サイズがバイト数指定の場合はバイトアドレスとして加算し、サイズがライン数指定の場合はラインアドレスとして加算すればよい。
【００４８】
スタートアライナ４０５ａ、４０５ｂは、スタートアドレスをライン境界の位置に調整する。スタートアライナ４０５ａはエンドアドレスの方向に、４０５ｂはエンドアドレスとは反対の方向に調整する。この調整によりプロセッサ１はラインサイズ及びライン境界とは無関係に任意のアドレスをスタートアドレスとして指定することができる。
【００４９】
エンドアライナ４０６ａ、４０６ｂは、エンドアドレスをライン境界の位置に調整する。エンドアライナ４０６５ａはスタートアドレスの方向に、４０６ｂはステートアドレスとは反対の方向に調整する。この調整によりプロセッサ１はラインサイズ及びライン境界とは無関係に任意の大きさを上記サイズとして指定することができる。
【００５０】
図７に、スタートアライナ４０５ａ、４０５ｂ及びエンドアライナ４０６ａ、４０６ｂの説明図を示す。同図において、プロセッサ１から指定されたスタートアドレスはラインＮの途中の任意の位置を指す。スタートアライナ４０５ａは、次のライン（Ｎ＋１）の先頭を指すよう調整し、調整後のアドレスをアラインスタートアドレスａとして出力する。スタートアライナ４０５ｂは、スタートアドレスのデータを含むラインＮの先頭を指すよう調整し、調整後のアドレスをアラインスタートアドレスｂとして出力する。アラインスタートアドレスが指すラインをスタートラインと呼ぶ。
【００５１】
また、エンドアドレスはラインＭの途中の任意の位置を指す。エンドアライナ４０６ａは、直前のライン（Ｍ−１）の先頭を指すよう調整し、調整後のアドレスをアラインエンドアドレスａとして出力する。エンドアライナ４０６ｂは、エンドアドレスのデータを含むラインＭの先頭を指すよう調整し、調整後のアドレスをアラインエンドアドレスｂとして出力する。アラインエンドアドレスが指すラインをエンドラインと呼ぶ。
【００５２】
同図のように、スタートアライナ４０５ａ及びエンドアライナ４０６ａはライン単位で内側アラインを行う。スタートアライナ４０５ｂ及びエンドアライナ４０６ｂはライン単位で外側アラインを行う。さらに、ライン単位の外側アラインの後、さらに、サブライン単位の外側アラインと内側アラインが可能である。
【００５３】
フラグ書換部４０７は、スタートラインからエンドラインまで、コマンドに従ってＶフラグ又はＤフラグの値を設定する。その際、スタートライン及びエンドラインが内側アラインか外側アラインかはコマンドに応じて選択される。
【００５４】
＜フラグ改変処理＞
図８は、フラグ書換部４０７におけるフラグ改変処理の一例を示すフローチャートである。同図では、ＤリセットコマンドとＶセットコマンドとを示している。
同図において、コマンドレジスタ４０１にＤリセットコマンドが書き込まれている場合（Ｓ８０）、フラグ書換部４０７は、スタートアライナ４０５ａ、４０５ｂ、エンドアライナ４０６ａ、４０６ｂの出力の中から内側アラインによるスタートラインとエンドラインとを選択する（Ｓ８１）。ここで内側アラインを選択しているのは、ラインＮとラインＭにおけるスタートアドレスとエンドアドレスの外側のデータは、プロセッサ１により破棄されるとは限らないからである。
【００５５】
さらに、フラグ書換部４０７は、スタートラインからエンドラインまでの各ラインアドレスを順に出力しながらループ１の処理（Ｓ８２〜Ｓ８６）を行う。フラグ書換部４０７は、各ラインについて同じ処理を行うので、ここでは１ライン分の処理について説明する。
【００５６】
すなわち、フラグ書換部４０７は、キャッシュメモリ３がプロセッサ１からアクセスされていない間に、ラインアドレスをアドレスレジスタ２０に出力し（Ｓ８３）、アドレスレジスタ２０のタグアドレスとキャッシュエントリーのタグとを比較器３２ａ〜３２ｄに比較させ、ヒットするかどうかを判定する（Ｓ８４）。さらにフラグ書換部４０７は、ヒットした場合には、ヒットしたキャッシュエントリーに対してＤ０〜Ｄ３フラグを０にリセットし（Ｓ８５）、ミスヒットした場合には、キャッシュメモリにエントリーされていないのでなにもしない。
【００５７】
このように、スタートラインからエンドラインまでの各ラインについて、キャッシュメモリ３にエントリーされている場合には、Ｄ０〜Ｄ３フラグに０が設定される。フラグ書換部４０７は、ループ１の終了後、コマンドレジスタ４０１のコマンドをクリアする（Ｓ９８）。これにより、テンポラリーなワークデータ等破棄される運命にあるデータを保持するキャッシュエントリーから無駄にライトバックすることを防止することができる。
【００５８】
また、図８において、コマンドレジスタ４０１にＶセットコマンドが書き込まれている場合（Ｓ８７）、フラグ書換部４０７は、スタートアライナ４０５ａ、４０５ｂ、エンドアライナ４０６ａ、４０６ｂの出力の中から外側アラインによるスタートラインとエンドラインとを選択する（Ｓ８８）。ここで外側アラインを選択しているのは、内側アラインではスタートアドレスからエンドアドレスまでのサイズを確保できないからである。
【００５９】
さらに、フラグ書換部４０７は、スタートラインからエンドラインまでの各ラインアドレスを順に出力しながらループ２の処理（Ｓ８９〜Ｓ９７）を行う。フラグ書換部４０７は、各ラインについて同じ処理を行うので、ここでは１ライン分の処理について説明する。
【００６０】
すなわち、フラグ書換部４０７は、キャッシュメモリ３がプロセッサ１からアクセスされていない間に、ラインアドレスをアドレスレジスタ２０に出力し（Ｓ９０）、アドレスレジスタ２０のタグアドレスとキャッシュエントリーのタグとを比較器３２ａ〜３２ｄに比較させ、ヒットするかどうかを判定する（Ｓ９１）。さらにフラグ書換部４０７は、ヒットしなかった場合には、当該ラインアドレスに対応するセット内の４つのウェイからＬＲＵ方式でリプレース対象のウェイを１つ選択し（Ｓ９２）、選択されたウェイのダーティフラグＤ０〜Ｄ３の論理和が１であるか否かを判定する（Ｓ９３）。この論理和が１、つまりダーティであると判定された場合、フラグ書換部４０７は、ダーティなサブラインのみをライトバックする（Ｓ９４）。上記の論理和が１でないつまりダーティでないと判定された場合、又はダーティなサブラインのライトバックの後に、フラグ書換部４０７は、
キャッシュエントリーにメモリからデータをロードすることなく、キャッシュエントリーにラインアドレスをタグとして設定し（Ｓ９５）、バリッドフラグＶ０〜Ｖ３を１にセットする（Ｓ９６）。このようにして、有効なデータを保持していないがＶ０〜Ｖ３＝１と設定された１ライン分のキャッシュエントリーが確保される。
【００６１】
さらに、フラグ書換部４０７は、ループ１の終了後、コマンドレジスタ４０１のコマンドをクリアする（Ｓ９８）。
【００６２】
これにより、配列などのデータを書き込み用のキャッシュエントリーをキャッシュメモリ上に確保し、かつ、無駄なライトバックを防止することができる。
【００６３】
以上説明してきたように、本実施の形態におけるキャッシュメモリによれば、Ｄリセットコマンドにより、破棄される運命にあるデータを保持するキャッシュエントリーから無駄にライトバックすることを防止することができる。また、Ｖセットコマンドにより、配列などのデータを書き込み用のキャッシュエントリーをキャッシュメモリ上に確保し、かつ、無駄なライトバックを防止することができる。
【００６４】
なお、上記実施の形態では、ＤリセットコマンドとＶセットコマンドについて説明したが、Ｖリセットコマンドについては、図８に示したＳ８７〜Ｓ９８において、ステップＳ９５を削除し、ステップＳ９６においてＶ０〜Ｖ３を０にリセットすることにより実現することができる。これによれば、無駄なライトバックを防止してキャッシュエントリーを開放することができる。
【００６５】
また、Ｄセットコマンドは、図８のＳ８０〜Ｓ８６と同様に実行可能ではあるが、プロセッサ１からストア命令によりデータを書き込めばＤフラグがセットされること、Ｄフラグのセットによりライトバック動作が発生することを考えれば、あまり実用的とはいえない。しかし、キャッシュメモリのテスト動作や性能の評価や検証等に利用することができる。
【００６６】
＜変形例＞
なお、本発明のキャッシュメモリは、上記の実施の形態の構成に限るものではなく、種々の変形が可能である。以下、変形例のいくつかについて説明する。
（１）上記実施の形態では、Ｖ０〜Ｖ３フラグ、Ｄ０〜Ｄ３フラグを同時にセット又はリセットしているが、サブ単位にセット又はリセットするようにしてもよい。
例えば、スタートラインとエンドラインのみをサブライン単位で処理する場合、フラグ書換部４０７は、外側アライン（ライン）されたスタートアドレスとエンドアドレスを選択し、さらに外側アライン（サブライン）または内側アライン（サブライン）によりスタートラインのサブラインアドレスと、エンドラインのサブラインアドレスとを算出し、スタートラインとエンドラインのみをサブライン単位で処理すればよい。また、プロセッサ１は、コマンド中のサブライン指定フィールドにおいてその旨を指定すればよい。
例えば、プロセッサ１がサイズレジスタ４０３のサイズを０に指定し、コマンド中のサブライン指定フィールドにおいて特定のサブラインを指定した場合に、フラグ書換部４０７は、指定されたサブラインのみを対象に処理をすればよい。
（２）また、フラグ改変部４１は、ダーティフラグのリセット指示付きメモリアクセス命令が実行されたこと検出する命令検出部と、当該命令によってアクセスがなされたキャッシュエントリーに対してダーティフラグをリセットするフラグ書き換え手部とを備える構成としてもよい。
さらに、命令検出部は、バリッドフラグのリセット指示付きメモリアクセス命令が実行されたこと検出し、フラグ書き換え手部は、当該命令によってアクセスがなされたキャッシュエントリーに対してバリッドフラグをリセットする構成としてもよい。
（３）上記実施の形態では、４ウェイ・セット・アソシエイティブのキャッシュメモリを例に説明したが、ウェイ数は、いくつでもよい。また、上記実施の形態では、セット数が１６である例を説明したが、セット数はいくつでもよい。
（４）上記実施の形態では、セット・アソシエイティブのキャッシュメモリを例に説明したが、フル・アソシエイティブ方式のキャッシュメモリであってもよい。
（５）上記実施の形態では、サブラインのサイズをラインのサイズの１／４としているが、１／２、１／８、１／１６等他のサイズでもよい。その場合、各キャッシュエントリーは、サブラインと同数のバリッドフラグおよびダーティフラグをそれぞれ保持すればよい。
【００６７】
（実施の形態２）
実施の形態１では、Ｖフラグの改変とＤフラグの改変とを行う構成について説明したが、本実施の形態では、これ以上使用（書き込み及び読み出し）するかしないかを示すＷ（ウィーク）フラグを有するキャッシュメモリにおいてＷフラグを改変する構成について説明する。
【００６８】
＜キャッシュメモリの構成＞
図９は、本発明の実施の形態２におけるキャッシュメモリの構成を示すブロック図である。同図のキャッシュメモリは、図２の構成と比較して、ウェイ３１ａ〜３１ｄの代わりにウェイ１３１ａ〜１３１ｄを備える点と、制御部３８の代わりに制御部１３８を備える点とが異なっている。以下、同じ点は説明を省略して、異なる点を中心に説明する。
【００６９】
ウェイ１３１ａは、ウェイ３１ａと比べて、各キャッシュエントリー中にＷフラグ及びＵフラグが追加されている点が異なる。ウェイ１３１ｂ〜１３１ｄも同様である。
【００７０】
図１０に、キャッシュエントリーのビット構成を示す。１つのキャッシュエントリーは、バリッドフラグＶ０〜Ｖ３、２１ビットのタグ、１２８バイトのラインデータ、ウィークフラグＷ、使用フラグＵ及びダーティフラグＤ０〜Ｄ３を保持する。
【００７１】
このうち、ウィークフラグＷは、プロセッサからのアクセスに関しては、これ以上使用するか否かを意味し、キャッシュメモリにおけるリプレース制御に関しては、他のキャッシュエントリーよりも真っ先に追い出してもよい最弱のリプレース対象を意味する。このように、ウィークフラグＷは二つの意味を有することから、クリーニング処理とリプレース処理との２つの処理で参照される。
【００７２】
使用フラグＵは、そのキャッシュエントリーにアクセスがあったか否かを示し、ＬＲＵ方式におけるミスヒットによるリプレースに際して４つのウェイのキャッシュエントリー間におけるアクセス順序データの代わりに用いられる。より正確には、使用フラグＵの１は、アクセスがあったことを、０はないことを意味する。ただし、１つのセット内の４つウェイの使用フラグが全て１になれば、０にリセットされる。別言すれば、使用フラグＵは、アクセスされた時期が古いか新しいか２つの相対的な状態を示す。つまり、使用フラグＵが１のキャッシュエントリーは、使用フラグが０のキャッシュエントリーよりも新しくアクセスされたことを意味する。
【００７３】
制御部１３８は、制御部３８と比べて、Ｗフラグを設定する点と、ＬＲＵ方式におけるアクセス順序情報の代わりに使用フラグＵを用いる点とが異なる。
【００７４】
＜制御部の構成＞
図１１は、制御部１３８の構成を示すブロック図である。同図の制御部１３８は、制御部３８と比較して、フラグ更新部３９、リプレース部４０、フラグ改変部４１の代わりにフラグ更新部１３９、リプレース部１４０、フラグ改変部１４１を備える点が異なる。
【００７５】
フラグ更新部１３９は、フラグ更新部３９と同様にＶフラグ、Ｄフラグを更新することに加えて、キャッシュメモリがアクセスされたときに使用フラグＵの更新処理を行う。
【００７６】
リプレース部１４０は、通常のＬＲＵ方式ではなく、使用フラグＵをアクセス順序とする擬似的なＬＲＵ方式によりリプレースを行う。ただし、リプレース処理に際してＷ＝１のキャッシュエントリーは真っ先にリプレース対象として選択する。
【００７７】
フラグ改変部１４１は、プロセッサ１からのコマンドに応じてウィークフラグＷを設定する。プロセッサ１は、もはや使用（書き込み及び読み出し）をしないキャッシュエントリーについてウィークフラグの設定を指示するコマンドをキャッシュメモリ３に対して発行する。Ｗ＝１のキャッシュエントリーは、キャッシュミス時には使用フラグＵの値に関わらず、真っ先にリプレース対象となる。また、Ｗ＝１のキャッシュエントリーがダーティであればクリーニング処理の対象となる。
【００７８】
＜使用フラグＵの説明＞
図１２は、フラグ更新部３９による使用フラグＵの更新例を示す。同図の上段、中断、下段は、ウェイ０〜３に跨るセットＮを構成する４つのキャッシュエントリーを示している。４つのキャッシュエントリー右端の１又は０は、それぞれ使用フラグの値である。この４つの使用フラグＵをＵ０〜Ｕ３と記す。
【００７９】
同図上段では（Ｕ０〜Ｕ３）＝（１、０、１、０）であるので、ウェイ０、２のキャッシュエントリーはアクセスがあったことを、ウェイ１、３のキャッシュエントリーはアクセスがないことを意味する。
【００８０】
この状態で、メモリアクセスがセットＮ内のウェイ１のキャッシュエントリーにヒットした場合、同図中段に示すように、（Ｕ０〜Ｕ３）＝（１、１、１、０）に更新される。つまり、実線に示すようにウェイ１の使用フラグＵ１が０から１に更新される。
【００８１】
さらに、同図中段の状態で、メモリアクセスがセットＮ内のウェイ３のキャッシュエントリーにヒットした場合、同図下断に示すように、（Ｕ０〜Ｕ３）＝（０、０、０、１）に更新される。つまり、実線に示すようにウェイ３の使用フラグＵ１が０から１に更新される。加えて、破線に示すようにウェイ３以外の使用フラグＵ０〜Ｕ２が１から０に更新される。これにより、ウェイ３のキャシュエントリーが、ウェイ０〜２の各キャッシュエントリーよりも新しくアクセスされたことを意味することになる。
【００８２】
リプレース部１４０は、キャッシュミス時にＷ＝１のキャッシュエントリーが存在しなければ、使用フラグに基づいてリプレース対象のキャッシュエントリーを決定してリプレースを行う。例えば、フラグ更新部３９は、図５上段では、ウェイ１とウェイ３の何れかをリプレース対象と決定し、図５中段ではウェイ３をリプレース対象と決定し、図５下段ではウェイ０〜２の何れかをリプレース対象と決定する。
【００８３】
＜ウィークフラグＷの説明＞
図１３（ａ）ウィークフラグが存在しないと仮定した場合の比較例であり、キャッシュエントリーがリプレースされる様子を示す図である。同図においても、図１２と同様にウェイ０〜３に跨るセットＮを構成する４つのキャッシュエントリーを示している。、４つのキャッシュエントリー右端の１又は０は、それぞれ使用フラグの値である。また、データＥのみアクセス頻度の低いデータを、データＡ、Ｂ、Ｃ、Ｄはアクセス頻度の高いデータとする。
【００８４】
同図（ａ）の第１段目の状態で、プロセッサ１がデータＥにアクセスすると、キャッシュミスが発生する。このキャッシュミスにより、例えば、Ｕ＝０のキャッシュエントリーの中からアクセス頻度の高いデータＣのキャッシュエントリーがアクセス頻度の低いデータＥにリプレースされ、第２段目の状態となる。
【００８５】
第２段目の状態で、プロセッサ１がデータＣにアクセスすると、キャッシュミスが発生する。このキャッシュミスにより、Ｕ＝０のキャッシュエントリーであるアクセス頻度の高いデータＤのキャッシュエントリーがアクセス頻度の高いデータＣにリプレースされ、第３段目の状態となる。
【００８６】
第３段目の状態で、プロセッサ１がデータＤにアクセスすると、キャッシュミスが発生する。このキャッシュミスにより、例えば、アクセス頻度の高いデータＣのキャッシュエントリーがアクセス頻度の高いデータＤにリプレースされ、第３段目の状態となる。
【００８７】
同様に、第４段目でも、使用頻度の低いデータＥはリプレース対象として選択されないで、キャッシュメモリーに残っている。
【００８８】
第５段目の状態で、使用頻度の低いデータＥは最も古い（Ｕ＝０）ことから、リプレース対象として選択されて、追い出される。
【００８９】
このように、擬似ＬＲＵ方式において（通常のＬＲＵ方式においても）、アクセス頻度の低いデータＥによって、４ウェイの場合は最悪４回のキャッシュミスを誘発する場合がある。
図１３（ｂ）は、リプレース処理におけるウィークフラグＷの役割を示す説明図である。
【００９０】
同図（ｂ）の第１段目の状態（同図（ａ）の第１段目と同じ）で、プロセッサ１がデータＥにアクセスすると、キャッシュミスが発生する。このキャッシュミスにより、例えば、Ｕ＝０のキャッシュエントリーの中からアクセス頻度の高いデータＣのキャッシュエントリーがアクセス頻度の低いデータＥにリプレースされる。このとき、プロセッサ１は、データＥのキャッシュエントリーにウィークフラグＷを１に設定するものとする。これにより、次のキャッシュミス時にデータＥのキャッシュエントリーが真っ先に追い出され、第２段目の状態となる。
【００９１】
第２段目の状態で、プロセッサ１がデータＣにアクセスすると、キャッシュミスが発生する。このキャッシュミスにより、Ｗ＝１のキャッシュエントリーであるアクセス頻度の低いデータＥのキャッシュエントリーがリプレース対象として選択され、アクセス頻度の高いデータＣにリプレースされ、第３段目の状態となる。
【００９２】
このように、ウィークフラグＷを設けることにより、アクセス頻度の低いデータによるキャッシュミスの誘発を低減することができる。
【００９３】
＜Ｕフラグ更新処理＞
図１４は、リプレース部１４０におけるＵフラグ更新処理を示すフローチャートである。
同図では、バリッドフラグが０（無効）であるキャッシュエントリーの使用フラグＵは０に初期化されているものとする。
同図において、リプレース部１４０は、キャッシュヒットしたとき（ステップＳ６１）、セットインデックスにより選択されたセットにおけるヒットしたウェイの使用フラグＵを１にセットし（ステップＳ６２）、そのセット内の他のウェイの使用フラグＵを読み出し（ステップＳ６３）、読み出した使用フラグＵが全て１であるか否かを判定し（ステップＳ６４）、全て１でなければ終了し、全て１であれば他のウェイの全ての使用フラグＵを０にリセットする（ステップＳ６５）。
このようにしてリプレース部１４０は、図１２、図１３（ａ）（ｂ）に示した更新例のように、使用フラグＵを更新する。
【００９４】
＜リプレース処理＞
図１５は、リプレース部１４０におけるリプレース処理を示すフローチャートである。同図においてリプレース部１４０は、メモリアクセスがミスしたとき（ステップＳ９１）、セットインデックスにより選択されたセットにおける、４つウェイの使用フラグＵ及びウィークフラグＷを読み出し（ステップＳ９２）、Ｗ＝１のウェイが存在するか否かを判定する（ステップＳ９３）。Ｗ＝１のウェイが存在しないと判定された場合、Ｕ＝０のウェイを１つ選択する（ステップＳ９４）。このとき、使用フラグＵが０になっているウェイが複数存在する場合は、リプレース部１４０はランダムに１つを選択する。また、Ｗ＝１のウェイが存在すると判定された場合、Ｕフラグの値に関わらずＷ＝１のウェイを１つ選択する（ステップＳ９５）。このとき、ウィークフラグＷが１になっているウェイが複数存在する場合は、リプレース部１４０はランダムに１つを選択する。
【００９５】
さらに、リプレース部１４０は、当該セットにおける選択されたウェイのキャッシュエントリーを対象にリプレースし（ステップＳ９６）、リプレース後に当該キャッシュエントリーの使用フラグＵを１に、ウィークフラグＷを０初期化する（ステップＳ９７）。なお、このときバリッドフラグＶ、ダーティフラグＤは、それぞれ１、０に初期化される。
このように、Ｗ＝１のウェイが存在しない場合、リプレース対象は、使用フラグＵが０のキャッシュエントリーの中から１つ選択される。
また、Ｗ＝１のウェイが存在する場合、リプレース対象は、使用フラグＵが０であると１であるとを問わず、Ｗ＝１のウェイのキャッシュエントリーから１つ選択される。これにより図１３（ａ）（ｂ）に示したように、アクセス頻度の低いデータがキャッシュメモリに残ることによるキャッシュミスの誘発を低減することができる。
【００９６】
＜フラグ改変部１４１の構成＞
図１６は、フラグ改変部１４１の構成を示すブロック図である。同図の構成は、図５に示したフラグ改変部４１と比較して、フラグ書換部４０７の代わりにフラグ書換部４０７ａを備える点が異なっている。
【００９７】
フラグ書換部４０７ａは、フラグ書換部４０７の機能に加えて、Ｗフラグの改変と使用フラグＵの改変とを行う点が異なっている。そのため、コマンドレジスタ４０１には、Ｗフラグの設定を指示するＷコマンド、Ｕフラグの設定を指示するＵコマンドがプロセッサ１によって設定可能になっている。図１７に、これらのコマンドフォーマットの一例を示す。同図のコマンドフォーマットは、図６（ｄ）に示したコマンドフォーマットに対してＷコマンド及びＵコマンドのフィールドが追加されている。Ｗコマンド及びＵコマンドの内容はＤコマンドやＶコマンドと同様である。
【００９８】
＜Ｗフラグ設定処理＞
図１８は、フラグ書換部４０７ａにおけるＷフラグ設定処理の一例を示すフローチャートである。
フラグ書換部４０７ａは、コマンドレジスタ４０１にＷフラグ設定コマンドが保持されている場合、スタートラインからエンドラインまでの各ラインアドレスを順に出力しながらループ１の処理（Ｓ８２〜Ｓ８６）を行う。フラグ書換部４０７ａは、各ラインについて同じ処理を行うので、ここでは１ライン分の処理について説明する。
すなわち、フラグ書換部４０７ａは、キャッシュメモリ３がプロセッサ１からアクセスされていない間に、ラインアドレスをアドレスレジスタ２０に出力し（Ｓ８３）、アドレスレジスタ２０のタグアドレスとキャッシュエントリーのタグとを比較器３２ａ〜３２ｄに比較させ、ヒットするかどうかを判定する（Ｓ８４）。さらにフラグ書換部４０７ａは、ヒットした場合には、ヒットしたキャッシュエントリーに対してＷフラグを１にセットし（Ｓ８５）、ミスヒットした場合には、キャッシュメモリにエントリーされていないのでなにもしない。
これにより、スタートラインからエンドラインまでの各ラインについて、キャッシュメモリ３にエントリーされている場合には、Ｗフラグが１に設定される。
【００９９】
＜Ｕフラグ設定処理＞
フラグ書換部４０７ａは、コマンドレジスタ４０１にＵフラグ設定コマンドが保持されている場合、当該コマンドに従ってＵフラグを設定する。この処理は、図１８においてＷフラグをＵフラグと読み替えることにより、Ｗフラグ設定処理と全く同様に実行される。
【０１００】
以上説明してきたように、本実施の形態におけるキャッシュメモリによれば、Ｗフラグを設定することにより、Ｗ＝１のキャッシュエントリーをキャッシュミス時には最古のキャッシュエントリとして真っ先にリプレース対象とすることができる。また、使用フラグＵの値は１ビットだけであるがアクセス順序が古いか新しいかをしめすので、Ｕフラグ設定処理によって、スタートラインからエンドラインまでの各ラインについてアクセス順序を設定することができる。例えば、プロセッサ１は、キャッシュメモリ３に残しておきたいアドレスのデータをアドレス範囲として指定してＵ＝１を設定するＵフラグ設定コマンドを発行し、
以上説明してきたように、本実施の形態におけるキャッシュメモリによれば、Ｗフラグを設定することにより、Ｗ＝１のキャッシュエントリーをキャッシュミス時には最古のキャッシュエントリとして真っ先にリプレース対象とすることができる。また、使用フラグＵの値は１ビットだけであるがアクセス順序が古いか新しいかをしめすので、Ｕフラグ設定処理によって、スタートラインからエンドラインまでの各ラインについてアクセス順序を設定することができる。例えば、プロセッサ１は、キャッシュメモリ３に残しておきたいアドレスのデータをアドレス範囲として指定してＵ＝１を設定するＵフラグ設定コマンドを発行すればよい。逆に、キャッシュメモリ３か追い出してもよいデータをアドレス範囲として指定してＵ＝０を設定するＵフラグ設定コマンドを発行すればよい。
【０１０１】
＜変形例＞
（１）Ｗ＝１のキャッシュエントリーは真っ先にリプレース対象とされるが、制御部は、リプレースされるまでの間に、ダーティであればクリーニング（ライトバック）を行ってもよい。
（２）図６（ａ）（ｂ）（ｃ）に示した各命令は、コンパイラによりプログラム中に挿入してもよい。その際、コンパイラは、例えば配列データの書き込みや、圧縮動画データをデコードする際のブロックデータの書き込み等、これ以上書き込みをしないプログラム位置に、上記各命令を挿入するようにすればよい。
【産業上の利用可能性】
【０１０２】
本発明は、メモリアクセスを高速化するためのキャッシュメモリに適しており、例えば、オンチップキャッシュメモリ、オフチップキャッシュメモリ、データキャッシュメモリ、命令キャッシュメモリ等に適している。
【図面の簡単な説明】
【０１０３】
【図１】本発明の実施の形態１におけるプロセッサ、キャッシュメモリ、メモリを含むシステムの概略構成を示すブロック図である。
【図２】キャッシュメモリの構成例を示すブロック図である。
【図３】キャッシュエントリーの詳細なビット構成を示す図である。
【図４】制御部の構成を示すブロック図である。
【図５】フラグ改変部の構成例を示すブロック図である。
【図６】（ａ）スタートアドレスレジスタにスタートアドレスを書き込む命令の一例を示す。（ｂ）サイズレジスタにサイズを書き込む命令の一例を示す。（ｃ）コマンドレジスタにコマンドを書き込む命令の一例を示す。（ｄ）コマンドの一例を示す。
【図７】スタートアライナ及びエンドアライナの説明図である。
【図８】フラグ書換部４０７におけるフラグ改変処理の一例を示すフローチャートである。
【図９】本発明の実施の形態２におけるキャッシュメモリの構成を示すブロック図である。
【図１０】キャッシュエントリーのビット構成を示す。
【図１１】制御部の構成を示すブロック図である。
【図１２】フラグ更新部による使用フラグＵの更新例を示す。
【図１３】（ａ）ウィークフラグが存在しない場合にキャッシュエントリーがリプレースされる様子を示す図である。（ｂ）リプレース処理におけるウィークフラグＷの役割を示す説明図である。
【図１４】リプレース部におけるＵフラグ更新処理を示すフローチャートである。
【図１５】リプレース部におけるリプレース処理を示すフローチャートである。
【図１６】フラグ改変部の構成を示すブロック図である。
【図１７】コマンドフォーマットの一例を示す。
【図１８】フラグ書換部におけるＷフラグ設定処理の一例を示すフローチャートである。
【符号の説明】
【０１０４】
１    プロセッサ
２    メモリ
３    キャッシュメモリ
２０    アドレスレジスタ
２１    メモリＩ／Ｆ
３０    デコーダ
３１ａ〜３１ｄ  ウェイ
３２ａ〜３２ｄ  比較器
３３ａ〜３３ｄ  アンド回路
３４    オア回路
３５    セレクタ
３６    セレクタ
３７    デマルチプレクサ
３８    制御部
３９    フラグ更新部
４０    リプレース部
４１    フラグ改変部
１３１ａ〜１３１ｄ  ウェイ
１３８    制御部
１３９    フラグ更新部
１４０    リプレース部
１４１    フラグ改変部
４０１    コマンドレジスタ
４０２    スタートアドレスレジスタ
４０３    サイズレジスタ
４０４    加算器
４０５ａ  スタートアライナ
４０５ｂ  スタートアライナ
４０６ａ  エンドアライナ
４０６ｂ  エンドアライナ
４０７    フラグ書換部
４０７ａ  フラグ書換部
【図１】
0004008947.tif 000002
【図２】
0004008947.tif 000003
【図３】
0004008947.tif 000004
【図４】
0004008947.tif 000005
【図５】
0004008947.tif 000006
【図６】
0004008947.tif 000007
【図７】
0004008947.tif 000008
【図８】
0004008947.tif 000009
【図９】
0004008947.tif 000010
【図１０】
0004008947.tif 000011
【図１１】
0004008947.tif 000012
【図１２】
0004008947.tif 000013
【図１３】
0004008947.tif 000014
【図１４】
0004008947.tif 000015
【図１５】
0004008947.tif 000016
【図１６】
0004008947.tif 000017
【図１７】
0004008947.tif 000018
【図１８】
0004008947.tif 000019