(57)【特許請求の範囲】
【請求項１】
第１の基準値、第２の基準値、及び第３の基準値のうちのいずれか一つに基づいてカウント値を生成するカウンタと、
前記カウント値に対応するアドレスに基づいてキャッシュ判定を行い、キャッシュヒットと判定した場合に制御信号をネゲートし、キャッシュミスと判定した場合に前記制御信号をアサートする制御部と、
前記カウント値に対応するアドレスのキャッシュ判定に応じて前記第２の基準値及び前記第３の基準値を変更する変更部と、
を有し、
前記カウンタは、
前記制御信号がネゲートされているとき前記第１の基準値を選択し、
前記制御信号がアサートされているときの最初のサイクルにおいて前記第２の基準値を選択し、
前記制御信号がアサートされているときの前記最初のサイクル以後のサイクルにおいて前記第３の基準値を選択し、
前記変更部は、
前記カウント値に対応するアドレスのキャッシュ判定に基づくキャッシュのミス率に基づいて前記第２の基準値を変更し、
前記カウント値に対応するアドレスのキャッシュ判定に基づくキャッシュのヒット率に基づいて前記第３の基準値を変更する、
ことを特徴とするメモリアクセス判定回路。
【請求項２】
前記変更部は、前回のヒット率を保持し、その保持したヒット率と算出したヒット率とに基づいて、ヒット率が高くなるように前記第２の基準値及び第３の基準値を変更する、
ことを特徴とする請求項１に記載のメモリアクセス判定回路。
【請求項３】
前記制御部は、キャッシュミスが発生したときに、前記カウンタの出力に対応するアドレスを先読みアドレスとしてメインメモリに対する先読み処理を行い、前記メインメモリから読み出したデータをキャッシュメモリに記憶する、
ことを特徴とする請求項１又は２に記載のメモリアクセス判定回路。
【請求項４】
前記カウンタは、前記制御部がキャッシュミスであると判定した場合に前記第１の基準値に基づくカウント値を保持し、前記キャッシュミスとなったアドレスに基づくメインメモリへのアクセス状況に応じて前記第２の基準値及び第３の基準値に基づくカウント値を、保持された前記第１の基準値に基づくカウント値に切り替えることを特徴とする請求項１〜３のうちの何れか一項に記載のメモリアクセス判定回路。
【請求項５】
第１の基準値、第２の基準値、及び第３の基準値のうちのいずれか一つに基づいてカウント値を生成するカウンタの出力に対応するアドレスに基づいてキャッシュ判定を行い、キャッシュヒットと判定した場合に制御信号をネゲートし、キャッシュミスと判定した場合に前記制御信号をアサートするキャッシュ判定部と、
前記カウント値に対応するアドレスのキャッシュ判定に応じて前記第２の基準値及び前記第３の基準値を変更する変更部と、
を有し、
前記キャッシュ判定部には、
前記制御信号がネゲートされているとき前記第１の基準値に基づくカウント値に対応するアドレスが入力され、
前記制御信号がアサートされているときの最初のサイクルにおいて前記第２の基準値に基づくカウント値に対応するアドレスが入力され、
前記制御信号がアサートされているときの前記最初のサイクル以後のサイクルにおいて前記第３の基準値に基づくカウント値に対応するアドレスが入力され、
前記変更部は、
前記カウント値に対応するアドレスのキャッシュ判定に基づくキャッシュのミス率に基づいて前記第２の基準値を変更し、
前記カウント値に対応するアドレスのキャッシュ判定に基づくキャッシュのヒット率に基づいて前記第３の基準値を変更する、
ことを特徴とするキャッシュ制御装置。
【請求項６】
第１の基準値、第２の基準値、及び第３の基準値のうちのいずれか一つに基づいてカウント値を生成し、
前記カウント値に対応するアドレスに基づいてキャッシュ判定を行い、キャッシュヒットと判定した場合に制御信号をネゲートし、キャッシュミスと判定した場合に前記制御信号をアサートし、前記カウント値に対応するアドレスのキャッシュ判定に応じて前記第２の基準値及び第３の基準値を変更し、
前記カウント値を生成するにあたっては、
前記制御信号がネゲートされているとき前記第１の基準値を選択し、
前記制御信号がアサートされているときの最初のサイクルにおいて前記第２の基準値を選択し、
前記制御信号がアサートされているときの前記最初のサイクル以後のサイクルにおいて前記第３の基準値を選択し、
前記第２の基準値および第３の基準値を変更するにあたっては、
前記カウント値に対応するアドレスのキャッシュ判定に基づくキャッシュのミス率に基づいて前記第２の基準値を変更し、
前記カウント値に対応するアドレスのキャッシュ判定に基づくキャッシュのヒット率に基づいて前記第３の基準値を変更する、
ことを特徴とするメモリアクセス判定方法。
【請求項７】
メインメモリと、
前記メインメモリよりも高速なキャッシュメモリと、
第１の基準値、第２の基準値、及び第３の基準値のうちのいずれか一つに基づいてカウント値を生成するカウンタと、
前記カウント値に対応するアドレスに基づいてキャッシュ判定を行い、キャッシュヒットと判定した場合に制御信号をネゲートし、キャッシュミスと判定した場合に前記制御信号をアサートする制御部と、
前記カウント値に対応するアドレスのキャッシュ判定に応じて前記第２の基準値及び前記第３の基準値を変更する変更部と、
を有し、
前記カウンタは、
前記制御信号がネゲートされているとき前記第１の基準値を選択し、
前記制御信号がアサートされているときの最初のサイクルにおいて前記第２の基準値を選択し、
前記制御信号がアサートされているときの前記最初のサイクル以後のサイクルにおいて前記第３の基準値を選択し、
前記変更部は、
前記カウント値に対応するアドレスのキャッシュ判定に基づくキャッシュのミス率に基づいて前記第２の基準値を変更し、
前記カウント値に対応するアドレスのキャッシュ判定に基づくキャッシュのヒット率に基づいて前記第３の基準値を変更する、
ことを特徴とする電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
メモリアクセス判定回路、メモリアクセス判定方法、キャッシュ制御装置および電子機器に関する。
【背景技術】
【０００２】
従来、メインメモリとキャッシュメモリを備え、先読みアドレスのデータをメインメモリからキャッシュメモリに先読みするキャッシュメモリ装置が知られている。このような装置において、例えば、データに付随するキャッシュ制御情報に基づいてアドレス計算回路で先読みアドレスを決定する技術が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平９−２５９０４０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、データにキャッシュ制御情報を付加すると、付加した分だけメモリを多く必要とし、キャッシュ判定を高速化できたとしても、メモリへのアクセス効率が低下してしまうためデータ処理が遅くなる。キャッシュ制御情報を含むデータは、プロセッサによりアクセスされることを前提としているため、データに汎用性が無い。
【課題を解決するための手段】
【０００５】
本発明の一観点によれば、第１の基準値、第２の基準値、及び第３の基準値のうちのいずれか一つに基づいてカウント値を生成するカウンタと、前記カウント値に対応するアドレスに基づいてキャッシュ判定を行い、キャッシュヒットと判定した場合に制御信号をネゲートし、キャッシュミスと判定した場合に前記制御信号をアサートする制御部と、前記カウント値に対応するアドレスのキャッシュ判定に応じて前記第２の基準値及び前記第３の基準値を変更する変更部と、を有し、前記カウンタは、前記制御信号がネゲートされているとき前記第１の基準値を選択し、前記制御信号がアサートされているときの最初のサイクルにおいて前記第２の基準値を選択し、前記制御信号がアサートされているときの前記最初のサイクル以後のサイクルにおいて前記第３の基準値を選択し、前記変更部は、前記カウント値に対応するアドレスのキャッシュ判定に基づくキャッシュのミス率に基づいて前記第２の基準値を変更し、前記カウント値に対応するアドレスのキャッシュ判定に基づくキャッシュのヒット率に基づいて前記第３の基準値を変更する。
【発明の効果】
【０００６】
本発明の一観点によれば、データ処理の高速化を可能とすることができる。
【図面の簡単な説明】
【０００７】
【図１】電子機器の概略構成図である。
【図２】メモリアクセス判定回路のブロック回路図である。
【図３】カウンタ部のブロック図である。
【図４】カウンタ部の動作説明図である。
【図５】メモリアクセス判定処理のフローチャートである。
【図６】（ａ）（ｂ）は基準値ｍの変更処理の説明図である。
【図７】（ａ）（ｂ）は基準値ｎの変更処理の説明図である。
【図８】メモリアクセス判定回路の動作説明図である。
【図９】比較例の動作説明図である。
【図１０】処理対象の画像の説明図である。
【図１１】処理対象の画像の説明図である。
【図１２】キャッシュヒット率と処理速度の関係を示す特性図である。
【図１３】（ａ）（ｂ）は画像データの変更処理を示す説明図である。
【図１４】処理対象の画像の説明図である。
【図１５】拡大処理の説明図である。
【図１６】（ａ）（ｂ）はメモリアクセスを示す説明図である。
【図１７】メモリアクセス判定回路の動作説明図である。
【図１８】メモリアクセス判定回路の動作説明図である。
【図１９】メモリアクセス判定回路の動作説明図である。
【図２０】比較例の動作説明図である。
【図２１】比較例の動作説明図である。
【図２２】比較例の動作説明図である。
【図２３】比較例の動作説明図である。
【図２４】比較例の動作説明図である。
【図２５】比較例の動作説明図である。
【発明を実施するための形態】
【０００８】
以下、一実施形態を添付図面に従って説明する。
［電子機器の構成］
図１に示すように、電子機器は、処理装置１１、キャッシュ装置１２、メインメモリ１３を含む。
【０００９】
処理装置１１は、キャッシュ装置１２を介してメインメモリ１３をアクセスする。メインメモリ１３は、メモリに対してアクセスを開始してからデータが出力されるまでに時間のかかるメモリ、例えば、シンクロナスＤＲＡＭ（Synchronous Dynamic Random Access Memory）である。そして、処理装置１１は、メインメモリ１３から読み出したデータに対して所定の処理を行い、処理後のデータをメインメモリ１３に格納、又は外部へ出力する。
【００１０】
キャッシュ装置１２は、メインメモリ１３に比して高速なメモリ（以下、キャッシュメモリという）を有している。キャッシュメモリは、例えばスタティックＲＡＭ（Static Random Access Memory ）である。キャッシュ装置１２は、過去に処理装置１１がメインメモリ１３をアクセスしたデータ（リードデータ／ライトデータ）をキャッシュメモリに記憶する。処理装置１１から出力されるアドレスに対応するデータがキャッシュメモリに記憶されている場合をキャッシュヒットといい、データがキャッシュメモリに記憶されていない場合をキャッシュミスという。キャッシュ装置１２は、処理装置１１から出力されるアドレスに基づいてキャッシュ判定を行い、キャッシュヒットの場合にはキャッシュメモリに記憶したデータを処理装置１１に出力する。従って、キャッシュヒットの場合、処理装置１１のアクセス要求は、処理装置１１とキャッシュ装置１２との間のデータの送受信だけで終了する。従って、処理装置１１におけるデータ入出力のためのアクセスを高速化することができる。
【００１１】
一方、キャッシュ装置１２は、キャッシュミスの場合に、キャッシュ処理を行うとともに先読み処理（プリフェッチ処理）を行う。キャッシュ処理は、キャッシュミスと判定されたアドレスＡＤＲに対応するデータをメインメモリ１３から読み出してキャッシュメモリに記憶する処理である。キャッシュ装置１２は、キャッシュミスと判定されたアドレスから、キャッシュメモリの１つのライン分のデータをメインメモリ１３から読み出してキャッシュメモリに記憶する。これにより、キャッシュミスが発生したアドレスから連続したアドレスによって指定される複数バイト（例えば６４バイト）のデータがキャッシュメモリの１つのラインに記憶される。
【００１２】
先読み処理は、キャッシュミスと判定されたアドレスＡＤＲより後にメインメモリ１３から読み出される可能性があるアドレスのデータを、処理装置１１のアクセスより先に読み出してキャッシュメモリに記憶する処理である。処理装置１１が処理するために必要とするデータのアドレスは、処理の内容と、データの構造に応じて算出することが可能である。従って、処理装置１１が必要とするであろうデータのアドレスを先読みアドレスとして算出する。
【００１３】
キャッシュ装置１２は、キャッシュミスと判定したときに処理装置１１にウェイト信号ＷＴを出力する。処理装置１１は、ウェイト信号ＷＴに応答して生成した先読みアドレスを出力する。キャッシュ装置１２は、この先読みアドレスのデータがキャッシュメモリ３１に存在しない場合に、この先読みアドレスのデータをメインメモリ１３から読み出してキャッシュメモリに記憶する。このように、処理装置１１から出力される先読みアドレスに基づいてデータの先読み処理を行い、近い将来にアクセスされるアドレスのデータを先読みすることで、キャッシュメモリのヒット率を高めることができる。
【００１４】
処理装置１１は、データ処理部２１、カウンタ部２２、アドレス演算部２３を含む。キャッシュ装置１２は、キャッシュメモリ３１、キャッシュ制御部３２を含む。キャッシュ制御部３２はキャッシュ制御装置の一例である。
【００１５】
処理装置１１のデータ処理部２１は、メインメモリ１３をアクセスするための機能として、アクセス要求等の信号を出力する機能を有する。また、データ処理部２１は、メインメモリ１３から読み出したデータを処理する機能を有している。また、データ処理部２１は、メインメモリ１３に対するアクセスの初期データを設定する機能を有している。
【００１６】
データ処理部２１は、カウンタ部２２とアドレス演算部２３に対して初期データを設定する。カウンタ部２２に対する初期データは、カウンタ部２２がカウントアップする際の変化量（増加値）を含む。アドレス演算部２３に対する初期データは、処理対象のデータが格納されたメインメモリ１３の領域における読み出し開始位置（例えば領域の先頭アドレス）を含む。
【００１７】
カウンタ部２２は、クロック信号ＣＫに応答してカウント値ＣＴに変化量（増加値）を加算し、その加算結果の値をカウント値ＣＴとして出力する。カウンタ部２２に設定される変化量（増加値）は、３つの基準値ｆ，ｍ，ｎを含む。カウンタ部２２は、キャッシュ装置１２から出力されるウェイト信号ＷＴに基づいて基準値ｆ，ｍ，ｎを切り替え、その切り替えた１つの基準値に基づいて値をカウントし、カウント値ＣＴを出力する。
【００１８】
基準値ｆ，ｍ，ｎは、サイクル数に対応する値である。即ち、カウンタ部２２は、基準値に対応するサイクル後に必要なデータのアドレスを求めるための値をカウントする。カウンタ部２２は、カウント値ＣＴをアドレス演算部２３に出力する。
【００１９】
キャッシュ装置１２のキャッシュ制御部３２は、判定結果がキャッシュミスの場合、ウェイト信号ＷＴをアサートする。そして、キャッシュ制御部３２は、ウェイト信号ＷＴがアサートされた原因となるアドレスのデータがメインメモリ１３から読み出されてキャッシュメモリ３１に格納されると、ウェイト信号ＷＴをネゲートする。
【００２０】
カウンタ部２２は、ウェイト信号ＷＴがネゲートされているとき、基準値ｆに基づいてカウントし、カウント値ＣＴを出力する。詳しくは、カウンタ部２２は、出力しているカウント値ＣＴに基準値ｆを加算し、その加算結果をカウント値ＣＴとして出力する。従って、カウント値ＣＴは、クロック信号ＣＫに基づいて、そのサイクル毎に基準値ｆだけ増加する。
【００２１】
また、カウンタ部２２は、ウェイト信号ＷＴがアサートされているとき、基準値ｍ又は基準値に基づいてカウントし、カウント値ＣＴを出力する。詳しくは、カウンタ部２２は、出力しているカウント値ＣＴに対し、ウェイト信号ＷＴがアサートされた最初のサイクルにおいて基準値ｍを加算し、その加算結果をカウント値ＣＴとして出力する。そして、カウンタ部２２は、ウェイト信号ＷＴがアサートされて２つめ以降のサイクルにおいて、基準値ｎを加算し、その加算結果をカウント値ＣＴとして出力する。従って、カウント値ＣＴは、クロック信号ＣＫとウェイト信号ＷＴとに基づいて、ウェイト信号ＷＴがアサートされた最初のサイクルのみ基準値ｍだけ増加し、それ以降のサイクルにおいて基準値ｎづつ増加する。
【００２２】
ここで、カウンタ部２２の構成例を説明する。
図３に示すように、カウンタ部２２は、加算回路２２ａ〜２２ｃ、選択回路２２ｄ、保持回路２２ｅを含む。
【００２３】
加算回路２２ａには基準値ｆが入力される。基準値ｆは、例えば「１」である。加算回路２２ａは、カウント値ＣＴに基準値ｆ（＝１）を加算し、その加算結果Ｓ１を出力する。加算回路２２ｂには、カウント値ＣＴと基準値ｍが入力される。加算回路２２ｂは、カウント値ＣＴに基準値ｍを加算し、その加算結果Ｓ２を出力する。加算回路２２ｃには、カウント値ＣＴと基準値ｎが入力される。加算回路２２ｃは、カウント値ＣＴに基準値ｎを加算し、その加算結果Ｓ３を出力する。
【００２４】
選択回路２２ｄは、初回判定回路（「１ｓｔ判定」と表記）２２ｆを含む。初回判定回路２２ｆは、ウェイト信号ＷＴがアサートされた最初のサイクルを判定する。選択回路２２ｄは、ウェイト信号ＷＴに基づいて、加算回路２２ａの出力値Ｓ１を選択し、その出力値Ｓ１をカウント値ＣＴとして出力する。また、選択回路２２ｄは、初回判定回路２２ｆの判定結果に基づいて、ウェイト信号ＷＴがアサートされた最初のサイクルにおいて加算回路２２ｂの出力値Ｓ２を選択し、その出力値Ｓ２をカウント値ＣＴとして出力する。更に、選択回路２２ｄは、初回判定回路２２ｆの判定結果に基づいて、ウェイト信号ＷＴがアサートされたサイクルのうち、最初のサイクルを除くサイクルにおいて、加算回路２２ｃの出力値Ｓ３を選択し、その出力値Ｓ３をカウント値ＣＴとして出力する。
【００２５】
保持回路２２ｅは、ウェイト信号ＷＴがアサートされると、その時のカウント値ＣＴを保持し、ウェイト信号ＷＴがネゲートされると保持した値を出力する。この保持回路２２ｅにより、ウェイト信号ＷＴがネゲートされているときカウント値ＣＴが、基準値ｆに基づく値となるように設定されている。
【００２６】
例えば、図４に示すように、カウント値ＣＴの初期値を「０」とする。また、基準値ｆ，ｍ，ｎをそれぞれ「１」「８」「４」とする。
ウェイト信号ＷＴがネゲートされているとき、基準値ｆ（＝１）に基づいて、カウント値ＣＴは基準値ｆづつ、つまり「１」づつ増加する。ウェイト信号ＷＴがアサートされると、保持回路２２ｅは、そのときのカウント値ＣＴ（＝２）を保持する。
【００２７】
ウェイト信号ＷＴがアサートされた最初のサイクルにおけるカウント値ＣＴは、基準値ｍ（＝８）に基づく値（１０＝２＋８）となる。そして、次のサイクルにおけるカウント値ＣＴは、基準値ｎ（＝４）に基づく値（１４＝１０＋４）となる。更に次のサイクルにおけるカウント値ＣＴは、基準値ｎに基づく値（１８＝１４＋４）となる。そして、ウェイト信号ＷＴがネゲートされると、カウント値ＣＴは、図３の保持回路２２ｅに保持された値（＝２）と基準値ｆ（＝１）とに基づく値（３＝２＋１）となる。
【００２８】
アドレス演算部２３は、データ処理部２１から受け取った初期データ（開始位置）と、カウンタ部２２から受け取ったカウント値ＣＴに基づいて、メインメモリ１３をアクセスするアドレス（リードアドレス）を求める。例えば、アドレス演算部２３は、カウント値とアドレスとの対応関係を示す演算式を用いて、計算によりカウント値からアドレス（読み出し位置）を求め、開始位置に読み出し位置を加算してリードアドレスを生成する。演算式は、予めアドレス演算部２３に設定されている。アドレス演算部２３は、生成したリードアドレスＡＤＲをキャッシュ装置１２に出力する。なお、カウント値とアドレスとの対応関係を示すルックアップテーブルを参照して、カウント値に該当するアドレスを求めてもよい。この場合、ルックアップテーブルは、予めアドレス演算部２３に設定される。アドレス演算部２３は、アドレスＡＤＲをキャッシュ装置１２に出力する。
【００２９】
演算式及びルックアップテーブルは、メインメモリ１３に記憶されたデータに対する処理に応じて設定される。例えば、メインメモリ１３に画像データが格納され、その画像データに対する処理の一例として画像の部分拡大処理（ズーム処理）を行う。この場合、所定領域の画像データを読み出し、その画像データのデータ数（画素数）を増加させる。画素数を増加させる最も簡単な処理は、読み出した１つの画素を、並べて２つの画素にするものである。つまり、１つのラインにおいて、１つのアドレスに２回アクセスし、各アクセス毎に読み出した画像データ、つまり２つの画像データを２つのアドレスにそれぞれ格納する。これにより、１つのラインの画素数を２倍の画素数に変換する。この処理を同一のラインに対して２回行う（データの格納はアドレスに行う）ことで、１つのラインを２つのラインに変換する。以上の処理により、部分画像の縦横の画素数を、それぞれ２倍の画素数の画像に変換することができる。
【００３０】
このような処理の場合、１つの画素の画像データに対して４回のアクセスが行われる。つまり、このような１つの画素の画像データに対して複数回アクセスするようにアドレスを生成するように、上記の演算式又はルックアップテーブルが設定される。
【００３１】
別の処理は、二値化処理である。この場合、画像データに含まれる画素を順次読み出し、閾値と比較した結果に応じた値をメインメモリ１３に格納する。各画素をそれぞれ処理するため、この処理におけるアドレスは、画像データに含まれる画素を順次読み出すように設定される、つまり、１つの画素について１回の読み出しを行うように、演算式等が設定される。
【００３２】
上記したように、キャッシュ装置１２は、キャッシュメモリ３１とキャッシュ制御部３２を有している。キャッシュメモリ３１は複数（例えば８）のラインを有し、各ラインは所定容量（例えば６４バイト）に設定されている。各ラインには、容量に応じて、連続するアドレスのデータが記憶される。キャッシュメモリ３１は、各ラインの番号と、各ラインに記憶したデータのアドレス情報を関連付けて記憶している。
【００３３】
キャッシュメモリ３１は、キャッシュ制御部３２から受け取ったライン番号に対応するデータをデータ処理部２１に出力する。また、キャッシュメモリ３１は、キャッシュ制御部３２からのアドレスに起因してメインメモリ１３から読み出されたデータを記憶するとともにそのデータＤＴｃをデータ処理部２１に出力する。
【００３４】
［キャッシュ制御部の構成（１）］
キャッシュ制御部３２は、キャッシュ判定、データの先読み制御を行うように構成されている。その構成を説明する。
【００３５】
キャッシュ制御部３２は、キャッシュ判定部３３、ウェイト制御部３４、プリフェッチ制御部３５、アクセス調停部３６を含む。
キャッシュ判定部３３は、アドレス演算部２３から受け取ったアドレスＡＤＲに基づいて、キャッシュ判定を行う。つまり、キャッシュ判定部３３は、キャッシュメモリ３１から、キャッシュメモリ３１に格納されている全データに対応するアドレス情報ＩＡＤを取得する。キャッシュ判定部３３は、キャッシュメモリ３１から受け取ったアドレス情報ＩＡＤに基づいて、アドレス演算部２３から受け取ったアドレスＡＤＲに対してキャッシュ判定を行う。
【００３６】
アドレス情報ＩＡＤは、キャッシュメモリ３１のラインに格納された複数のデータに対し、先頭のデータが格納されたメインメモリ１３のアドレス（ラインの先頭アドレス）を含む。つまり、１つのラインには、先頭アドレスＳＡＤから、先頭アドレスにラインの容量値を加算した値（ラインの最終アドレスＥＡＤ））までのデータが格納されている。従って、アドレスＡＤＲが、先頭アドレスＳＡＤから最終アドレスＥＡＤの範囲内であれば、そのアドレスＡＤＲのデータが当該ラインに格納されている。一方、アドレスＡＤＲが、先頭アドレスＳＡＤから最終アドレスＥＡＤの範囲外のとき、アドレスＡＤＲのデータは当該ラインに格納されていない。
【００３７】
このため、キャッシュ判定部３３は、アドレス演算部２３から受け取ったアドレスＡＤＲと各ラインのアドレス情報ＩＡＤとを比較し、アドレスＡＤＲのデータがキャッシュメモリ３１に格納されているか否か、つまり、アドレスＡＤＲに対するキャッシュヒット／キャッシュミスを判定する。そして、キャッシュ判定部３３は、判定結果がキャッシュヒットである場合、判定信号ＨＭをネゲート（例えばＬレベル）にするとともに、ライン番号Ｌｎをキャッシュメモリ３１へ送る。一方、判定結果がキャッシュミスである場合、キャッシュ判定部３３は、判定信号ＨＭをアサート（例えばＨレベル）にするとともに、キャッシュミスと判定されたアドレスＡＤＲをメモリアクセス要求（要求アドレスＡＤＣ）としてアクセス調停部３６へ送る。
【００３８】
ウェイト制御部３４は、判定信号ＨＭがアサートされると、ウェイト信号ＷＴをアサートにするとともに、プリフェッチ制御部３５にプリフェッチアドレスのエントリを指示する。ウェイト信号ＷＴは、ウェイト信号ＷＴがアサートにされた原因となるアドレスのデータがメインメモリ１３から読み出されてキャッシュメモリ３１に格納されるまで、アサートされた状態を保つ。ウェイト信号ＷＴがアサートにされた原因となるアドレスのデータがキャッシュメモリ３１に格納されると、ウェイト信号ＷＴはネゲートされる。ウェイト信号ＷＴがアサートされているときには、先読みアドレスのエントリが指示されており、ウェイト信号ＷＴがネゲートされているときには、先読みアドレスのエントリの指示は取り下げられている。
【００３９】
プリフェッチ制御部３５は、先読み動作を制御する。プリフェッチ制御部３５は、判定信号ＨＭがアサートされ、かつプリフェッチアドレスのエントリが指示されると、アドレス演算部２３から出力されたアドレスＡＤＲを先読みアドレスとして先読みアドレスバッファ３５ａに格納する。プリフェッチ制御部３５は、先読みアドレスバッファ３５ａに格納された先読みアドレスを格納の古い順に先読み用のメモリアクセス要求としてアクセス調停部３６へ送る。先読みアドレスバッファ３５ａは、例えば先入れ先出し（First-In First-Out：ＦＩＦＯ）方式のメモリが用いられる。
【００４０】
アクセス調停部３６は、例えば、キャッシュ判定部３３からのメモリアクセス要求と先読みアドレスバッファ３５ａからの先読み用のメモリアクセス要求とが競合した場合、キャッシュ判定部３３からのメモリアクセスを優先する。それによって、データ処理部２１で必要なデータが直ちにメインメモリ１３から読み出されて、キャッシュメモリ３１に格納される。従って、先読みアドレスによるメモリアクセスを優先させるよりも、データ処理部２１での処理の高速化を図ることができる。先読み用のメモリアクセス要求は、キャッシュ判定部３３からのメモリアクセス要求の処理後に、処理される。アクセス調停部３６は、キャッシュ判定部３３からのメモリアクセス要求を受け付けると、当該メモリアクセス要求によるデータの転送が終了するまでは、キャッシュ判定部３３からの新たなメモリアクセス要求を受け付けない。
【００４１】
上記のように構成された電子機器において、キャッシュ判定処理、先読みアドレス（プリフェッチアドレス）の制御処理の流れを図５に従って説明する。
先ず、基準値ｆでカウントを開始する（ステップ６１）。
【００４２】
次いで、メモリアクセス判定処理が終了であるか否かを判定する（ステップ６２）。処理終了の場合（ステップ６２：Ｙｅｓ）、一連のメモリアクセス判定処理を終了する。処理終了ではない場合（ステップ６２：Ｎｏ）、ステップ６３に移行する。
【００４３】
次いで、演算式又はルックアップテーブルの参照により、カウント値ＣＴに対応するアドレスＡＤＲを求める（ステップ６３）。
次いで、アドレスＡＤＲに対してキャッシュ判定を行う（ステップ６４）。キャッシュヒットである場合（ステップ６４：Ｎｏ）、アドレスＡＤＲのデータがキャッシュメモリ３１（図１参照）から読み出され、データ処理部２１へ送られる。そして、ステップ６１へ移行する。キャッシュミスの場合（ステップ６４：Ｙｅｓ）、カウント値ＣＴを保持する（ステップ６５）。また、キャッシュミスと判定されたアドレスＡＤＲに対する読み出し処理を開始する。この読み出し処理は、アドレスＡＤＲのデータを含む１ライン分のデータをメインメモリ１３から読み出して、キャッシュメモリ３１に格納することを含む。キャッシュメモリ３１へのデータの格納が終了するまでの間、基準値ｍに基づいて値をカウントし、カウント値ＣＴを生成する（ステップ６６）。
【００４４】
次いで、カウント値ＣＴに対応するプリフェッチアドレス（先読みアドレス）を求める（ステップ６７）。このプリフェッチアドレスに対してキャッシュ判定を行う（ステップ６８）。プリフェッチアドレスがキャッシュヒットである場合（ステップ６８：Ｎｏ）、又は基準値ｎに基づいて値をカウントしたカウント値ＣＴを生成し、同様にプリフェッチアドレスを求め、キャッシュ判定を行う（ステップ６６〜ステップ６８）。プリフェッチアドレスがキャッシュミスである場合（ステップ６８：Ｙｅｓ）、当該プリフェッチアドレスを先読みアドレスバッファ３５ａに保持する（ステップ６９）。
【００４５】
次いで、ステップ６４で判定したキャッシュミスに起因して実行されている、メインメモリ１３からのデータの読み出しが終了したか否かを判定する（ステップ７０）。メインメモリ１３からのデータの読み出しが終了していない場合（ステップ７０：Ｎｏ）、データの読み出しが終了するまでステップ６６〜ステップ７０の処理を繰り返し実行する。データの読み出しが終了した場合（ステップ７０：Ｙｅｓ）、ステップ６５で保持したカウント値を復帰する（ステップ７１）。そして、ステップ６１に移行する。
【００４６】
［キャッシュ制御部の構成（２）］
キャッシュ装置１２は、ウェイト信号ＷＴがアサートされているときにカウント値ＣＴを生成するための基準値ｍ，ｎを変更するように構成されている。その構成を説明する。
【００４７】
図２に示すように、キャッシュ制御部３２は、アクセスカウンタ４１、ヒットカウンタ４２、ヒット率算出部４３、ヒット率保持部４４、ミスカウンタ４５、プリフェッチミスカウンタ４６、ミス率算出部４７、ミス率保持部４８、基準値算出部４９、基準値保持部５０、変化方向保持部５１を含む。
【００４８】
アクセスカウンタ４１には、アドレスＡＤＲが供給される。アクセスカウンタ４１は、供給されるアドレスＡＤＲの数をカウントし、そのカウント値ＡＣをヒット率算出部４３に出力する。アドレスＡＤＲは、メインメモリ１３をアクセスするために、処理装置１１のアドレス演算部２３から供給される。つまり、カウント値ＡＣは、キャッシュメモリ３１に対するアクセス回数を示す。
【００４９】
キャッシュ判定部３３から出力される判定信号ＨＭは、ヒットカウンタ４２，ヒット率保持部４４，ミスカウンタ４５，プリフェッチミスカウンタ４６，ミス率保持部４８，変化方向保持部５１に供給される。
【００５０】
ヒットカウンタ４２は、判定信号ＨＭに基づいて、その判定信号ＨＭがアサートされた回数、つまりアドレスＡＤＲに対してキャッシュヒットと判定された回数をカウントし、そのカウント値ＨＣをヒット率算出部４３に出力する。
【００５１】
ヒット率算出部４３は、キャッシュヒットの回数を示すカウント値ＨＣと、アクセス回数を示すカウント値ＡＣと、に基づいて、アクセス回数に対するヒット率ＨＲを算出する。詳しくは、ヒット率算出部４３は、キャッシュヒットの回数を示すカウント値ＨＣと、アクセス回数を示すカウント値ＡＣとに基づいて、次式、
ＨＲ＝（ＡＣ／ＨＣ）×１００
により、ヒット率ＨＲ（Hit Rate）を算出する。そして、ヒット率算出部４３は、算出したヒット率ＨＲをヒット率保持部４４と基準値算出部４９に出力する。
【００５２】
ヒット率保持部４４は、判定信号ＨＭに基づいて、その判定信号ＨＭがネゲートされたとき、つまりキャッシュミスと判定されたときに、ヒット率算出部４３から出力されるヒット率ＨＲを保持し、その保持した値を保持ヒット率ＢＨＲ（Before Hit Rate ）として基準値算出部４９に出力する。
【００５３】
ミスカウンタ４５は、判定信号ＨＭに基づいて、その判定信号ＨＭがネゲートされた回数、つまりアドレスＡＤＲに対してキャッシュミスと判定された回数をカウントし、そのカウント値ＭＣをミス率算出部４７に出力する。
【００５４】
プリフェッチミスカウンタ４６は、最初の先読みアドレスがキャッシングされていない、つまりキャッシュミスと判定された回数をカウントし、そのカウント値ＰＭＣをミス率算出部４７に出力する。
【００５５】
ミス率算出部４７は、キャッシュミスの回数を示すカウント値ＭＣと、最初の先読みアドレスにおけるキャッシュミスの回数を示すカウント値ＰＭＣと、に基づいて、先読みアドレスのミス率ＭＲを算出する。詳しくは、ミス率算出部４７は、最初の先読みアドレスにおけるキャッシュミスの回数を示すカウント値ＰＭＣと、キャッシュミスの回数を示すカウント値ＭＣとに基づいて、次式、
ＭＲ＝（ＰＭＣ／ＭＣ）×１００
により、ミス率ＭＲ（最初の先読みアドレスのミス率：1st Premiss Rate）を算出する。そして、ミス率算出部４７は、算出したミス率ＭＲをミス率保持部４８と基準値算出部４９に出力する。
【００５６】
ミス率保持部４８は、判定信号ＨＭに基づいて、その判定信号ＨＭがネゲートされたとき、つまりキャッシュミスと判定されたときに、ミス率算出部４７から出力されるミス率ＭＲを保持し、その保持した値を保持ミス率ＢＭＲ（Before Miss Rate）として基準値算出部４９に出力する。
【００５７】
基準値算出部４９には、基準値保持部５０にて保持された保持基準値Ｂｍ，Ｂｎが供給される。また、基準値算出部４９には、変化方向保持部５１にて保持された変化方向値Ｄｍ，Ｄｎが供給される。基準値算出部４９は、変更する基準値ｍ，ｎの値が格納された基準値テーブル４９ａを有している。基準値算出部４９は、供給される各値に基づいて基準値テーブル４９ａに格納された値のうちの１つを選択し、その選択した値を基準値ｍとして出力する。同様に、基準値算出部４９は、供給される各値に基づいて基準値テーブル４９ａに格納された値のうちの１つを選択し、その選択した値を基準値ｎとして出力する。
【００５８】
例えば、基準値算出部４９は、ミス率ＭＲ、保持ミス率ＢＭＲ、保持基準値Ｂｍ、変化方向値Ｄｍに基づいて、基準値テーブル４９ａに格納された値のうちの１つを選択し、その選択した値を基準値ｍとして出力する。また、基準値算出部４９は、ヒット率ＨＲ、保持ヒット率ＢＨＲ、保持基準値Ｂｎ、変化方向値Ｄｎに基づいて、基準値テーブル４９ａに格納された値のうちの１つを選択し、その選択した値を基準値ｎとして出力する。基準値算出部４９から出力される基準値ｍ，ｎは、基準値保持部５０と変化方向保持部５１とカウンタ部２２に供給される。
【００５９】
基準値保持部５０は、判定信号ＨＭに基づいて、その判定信号ＨＭがネゲートされたとき、つまりキャッシュミスと判定されたときに、基準値算出部４９から出力される基準値ｍ，ｎをそれぞれ保持し、それぞれ保持した値を保持基準値Ｂｍ，Ｂｎ（Before m，Before n）として基準値算出部４９と変化方向保持部５１に出力する。
【００６０】
変化方向保持部５１は、判定信号ＨＭに基づいて、基準値算出部４９から出力される基準値ｍ，ｎと、基準値保持部５０から出力される保持基準値Ｂｍ，Ｂｎとを比較し、基準値ｍ，ｎが変化した方向（Direction ）を算出し、その算出結果を保持する。そして、変化方向保持部５１は、保持した値を変化方向値Ｄｍ，Ｄｎを基準値算出部４９に出力する。変化方向保持部５１は、例えば、基準値ｍから保持基準値Ｂｍを減算し、その減算結果が正の値の場合に方向値Ｄｍを「０」とし、減算結果が負の値の場合に方向値Ｄｍを「１」とする。また、変化方向保持部５１は、減算結果が「０」の場合に、前回の演算結果を保持する。変化方向保持部５１は、基準値ｎについて同様に演算して方向値Ｄｎを決定する。
【００６１】
次に、キャッシュ制御部３２にて実行される基準値ｍの変更処理を、図６（ａ），図６（ｂ）に従って説明する。
先ず、初期化処理を行う（ステップ８１）。この処理において、ミス率保持部４８の保持ミス率ＢＭＲをクリア（＝０）する。また、基準値保持部５０の保持基準値Ｂｍを初期値（例えば「４」）とする。更に、変化方向保持部５１の変化方向値Ｄｍを初期値（例えば「０」）とする。
【００６２】
次いで、アドレスＡＤＲに対してキャッシュ判定を行う（ステップ８２）。キャッシュヒットである場合（ステップ８２：Ｈｉｔ）、ステップ８２に移行する。一方、キャッシュミスである場合（ステップ８２：Ｍｉｓｓ）、プリフェッチアドレス（先読みアドレス）がキャッシュ済みか否かを判定する（ステップ８３）。キャッシュ済みの場合（ステップ８３：Ｙｅｓ）、ステップ８２に移行する。
【００６３】
一方、プリフェッチアドレスがキャッシュ済みではない場合（ステップ８３：Ｎｏ）、ミスカウンタ４５のカウント値ＭＣとプリフェッチミスカウンタ４６のカウント値ＰＭＣに基づいて、式、
ＭＲ＝（ＰＭＣ／ＭＣ）×１００
によりミス率ＭＲ（1st Premiss Rate）を算出する（ステップ８４）。
【００６４】
次いで、算出したミス率ＭＲと、ミス率保持部４８から出力される保持ミス率ＢＭＲの差分値Δｍｒを算出し、この差分値Δｍｒと、保持基準値Ｂｍ、変化方向値Ｄｍ（図６（ｂ）で「ｄｉｒ」と表記）に基づいて、図６（ｂ）に示す表に従ってテーブル４９ａ（図２参照）に含まれる値のうちの１つを選択する（ステップ８５）。なお、この選択において、テーブル４９ａに含まれる値の最小値と最大値とをそれぞれ下限値及び上限値とする。
【００６５】
次いで、選択した基準値ｍから保持基準値Ｂｍを減算し、その減算結果が正の場合には「０」を、減算結果が負の場合には「１」を、変化方向値Ｄｍとして保持する。なお、減算結果が「０」の場合には、前値を保持する（ステップ８６）。これにより、基準値ｍの値を変更する方向、つまり基準値ｍを増加させたか、減少させたか、又は同値を選択したかを判定し、判定結果を保持する。更に、このステップにおいて、算出したミス率ＭＲを保持するとともに、選択した基準値ｍを保持基準値Ｂｍとして保持する。
【００６６】
「０」の変化方向値Ｄｍは、前回の変更時に基準値ｍを増加させたことを示し、「１」の変化方向値Ｄｍは、前回の変更時に基準値ｍを減少させたことを示す。正の差分値Δｍｒは、ミス率ＭＲの増加を示し、負の差分値Δｍｒは、ミス率ＭＲの減少を示す。
【００６７】
負の差分値Δｍｒであり、変化方向値Ｄｍが「１」のときに、保持基準値Ｂｍより大きい値を選択することは、基準値ｍの減少により低下したミス率ＭＲを増加させる方向に値を選択することである。負の差分値Δｍｒであり、変化方向値Ｄｍが「０」のときに、保持基準値Ｂｍより小さな値を選択することは、基準値ｍの増加により低下したミス率ＭＲを増加させる方向に値を選択することである。
【００６８】
正の差分値Δｍｒであり、変化方向値Ｄｍが「１」のときに、保持基準値Ｂｍより小さな値を選択することは、基準値ｍの減少により増加したミス率ＭＲを更に増加させる方向に値を選択することである。正の差分値Δｍｒであり、変化方向値Ｄｍが「０」のときに、保持基準値Ｂｍより大きな値を選択することは、基準値ｍの増加により増加したミス率ＭＲを更に増加させる方向に値を選択することである。
【００６９】
つまり、基準値算出部４９は、ミス率ＭＲが増加するように基準値ｍの値を変更する。ミス率ＭＲは、キャッシュミスが発生したときに、最初に生成する先読みアドレスがキャッシュミスと判定される割合である。つまり、先読みアドレスにおけるミス率を増加させることは、ヒット率を増加させることにつながる。
【００７０】
次に、キャッシュ制御部３２にて実行される基準値ｎの変更処理を、図７（ａ），図７（ｂ）に従って説明する。
先ず、初期化処理を行う（ステップ９１）。この処理において、ヒット率保持部４４の保持ヒット率ＢＨＲをクリア（＝０）する。また、基準値保持部５０の保持基準値Ｂｎを初期値（例えば「４」）とする。更に、変化方向保持部５１の変化方向値Ｄｎを初期値（例えば「０」）とする。
【００７１】
次いで、アドレスＡＤＲに対してキャッシュ判定を行う（ステップ９２）。キャッシュヒットである場合（ステップ９２：Ｈｉｔ）、ステップ９２に移行する。一方、キャッシュミスである場合（ステップ９２：Ｍｉｓｓ）、アクセスカウンタ４１のカウント値ＡＣとヒットカウンタ４２のカウント値ＨＣに基づいて、次式、
ＨＲ＝（ＡＣ／ＨＣ）×１００
によりヒット率ＨＲ（Hit Rate）を算出する（ステップ９３）。
【００７２】
次いで、算出したヒット率ＨＲと、ヒット率保持部４４から出力される保持ヒット率ＢＨＲの差分値Δｈｒを算出し、この差分値Δｈｒと、保持基準値Ｂｎ、変化方向値Ｄｎ（図７（ｂ）で「ｄｉｒ」と表記）に基づいて、図７（ｂ）に示す表に従ってテーブル４９ａ（図２参照）に含まれる値のうちの１つを選択する（ステップ９４）。なお、この選択において、テーブル４９ａに含まれる値の最小値と最大値とをそれぞれ下限値及び上限値とする。
【００７３】
次いで、選択した基準値ｎから保持基準値Ｂｎを減算し、その減算結果が正の場合には「０」を、減算結果が負の場合には「１」を、変化方向値Ｄｎとして保持する。なお、減算結果が「０」の場合には、前値を保持する（ステップ９５）。これにより、基準値ｎの値を変更する方向、つまり基準値ｎを増加させたか、減少させたか、又は同値を選択したかを判定し、判定結果を保持する。更に、このステップにおいて、算出したヒット率ＨＲを保持するとともに、選択した基準値ｎを保持基準値Ｂｎとして保持する。
【００７４】
「０」の変化方向値Ｄｎは、前回の変更時に基準値ｎを増加させたことを示し、「１」の変化方向値Ｄｎは、前回の変更時に基準値ｎを減少させたことを示す。正の差分値Δｈｒは、ヒット率ＨＲの増加を示し、負の差分値Δｈｒは、ヒット率ＨＲの減少を示す。
【００７５】
負の差分値Δｈｒであり、変化方向値Ｄｎが「１」のときに、保持基準値Ｂｎより大きい値を選択することは、基準値ｎの減少により低下したヒット率ＨＲを増加させる方向に値を選択することである。負の差分値Δｈｒであり、変化方向値Ｄｎが「０」のときに、保持基準値Ｂｎより小さな値を選択することは、基準値ｎの増加により低下したヒット率ＨＲを増加させる方向に値を選択することである。
【００７６】
正の差分値Δｈｒであり、変化方向値Ｄｎが「１」のときに、保持基準値Ｂｎより小さな値を選択することは、基準値ｎの減少により増加したヒット率ＨＲを更に増加させる方向に値を選択することである。正の差分値Δｈｒであり、変化方向値Ｄｎが「０」のときに、保持基準値Ｂｎより大きな値を選択することは、基準値ｎの増加により増加したヒット率ＨＲを更に増加させる方向に値を選択することである。
【００７７】
つまり、基準値算出部４９は、ヒット率ＨＲが増加するように基準値ｎの値を変更する。
従って、基準値算出部４９は、ヒット率ＨＲとミス率ＭＲとに基づいて、キャッシュメモリ３１におけるヒット率ＨＲを高くし、その状態を維持するように基準値ｍ，ｎを変更する。基準値ｍ，ｎを変更する変更部は、ヒット率算出部４３、ミス率算出部４７、基準値算出部４９を含む。
【００７８】
［動作説明］
次に、上記のように構成された電子機器の動作を説明する。
先ず、キャッシュ判定、プリフェッチ動作を説明する。
＜ｍ、ｎが固定の場合の動作説明＞
一例として、基準値ｆを「１」、基準値ｍ，ｎを「４」とする。なお、図１に示すアドレス演算部２３におけるカウント値ＣＴと、そのカウント値ＣＴに対応するアドレスＡＤＲを「ＣＴ，ＡＤＲ」として示すと、それぞれ「０，０」「１，１６」「２，３２」「３，４８」「４，６４」「５，８０」「６，９６」「７，１１２」「８，１２８」「９，１４４」「１０，１６０」となる。
【００７９】
図８は、キャッシュ判定、プリフェッチ動作に関する動作の説明図である。ここでは、キャッシュメモリ３１の１ラインのサイズを６４バイトとする。従って、キャッシュヒットの際にキャッシュ判定部３３からキャッシュメモリ３１に与えられるライン番号は、メインメモリ１３のアドレスの６４バイトごとに一つ存在するとする。また、キャッシュ判定は、６４バイト単位で行われるとする。また、キャッシュミスの発生時には、メインメモリ１３から、キャッシュミスと判定されたアドレスのデータを含む６４バイト分のデータが読み出されて、キャッシュメモリ３１に格納されるとする。
【００８０】
図８に示すように、まず、カウント値ＣＴが「０」であるときには、キャッシュメモリ３１には何も格納されていないので、キャッシュミスと判定される。それによって、アドレスＡＤＲが「０〜６３」に対応するデータがメインメモリ１３から読み出されてキャッシュメモリ３１に格納される。アドレスＡＤＲが「０〜６３」に対応するデータがキャッシュメモリ３１に格納されるまでの間、基準値ｍ（＝４）が加算されてカウント値ＣＴは「４」となる。従って、アドレスＡＤＲは「６４」となる。アドレスＡＤＲ「６４」に対応するデータがキャッシュメモリ３１に格納されていないので、キャッシュミスと判定される。そして、アドレスＡＤＲ「６４」が先読みアドレスバッファ３５ａに格納される。プリフェッチ制御部３５は、アドレスＡＤＲ「６４〜１２７」についてリードアクセスを要求する。
【００８１】
次いで、基準値ｎ（＝４）が加算されてカウント値ＣＴが「８」となり、キャッシュミスと判定される。従って、アドレスＡＤＲ「１２８」が先読みアドレスバッファ３５ａに格納される。プリフェッチ制御部３５は、アドレスＡＤＲ「１２８〜１９１」についてリードアクセスを要求する。次いで、カウント値ＣＴが「１２」となり、キャッシュミスにより同様に、アドレスＡＤＲ「１９２」が先読みアドレスバッファ３５ａに格納される。プリフェッチ制御部３５は、アドレスＡＤＲ「１９２〜２５５」についてリードアクセスを要求する。この時点で、アドレスＡＤＲ「０〜６３」に対応するデータがキャッシュメモリ３１に格納され終わったとする。カウント値ＣＴが「０」に復帰し、この値に基準値ｆ（＝１）が加算されるので、新しいカウント値ＣＴは「１」となる。
【００８２】
「１」のカウント値ＣＴに対応するアドレスＡＤＲは「１６」であり、対応するデータは既にキャッシュメモリ３１に格納されているので、キャッシュヒットとなる。カウント値ＣＴが「２」であるときのアドレスＡＤＲは「３２」であり、カウント値ＣＴが「３」であるときのアドレスＡＤＲは「４８」であるので、いずれもキャッシュヒットとなる。カウント値ＣＴが「４」であるときのアドレスＡＤＲは「６４」である。この時点で、先読みアドレスバッファ３５ａに格納されたアドレスＡＤＲ「６４」について、対応するデータがメインメモリ１３から読み出されてキャッシュ判定部３３に格納されているので、キャッシュヒットとなる。「５」以降のカウント値ＣＴについても、先読みによって、対応するデータがメインメモリ１３から読み出されてキャッシュ判定部３３に格納されているので、キャッシュヒットとなる。
【００８３】
図９は、比較例の動作の説明図である。比較例は、基準値ｍ，ｎでのカウントによる先読み動作を行わない。その他の条件を図８で説明した例と同じとする。比較例では、カウント値ＣＴが「４」や「８」であるときに、メインメモリからデータを読み出してキャッシュメモリへ格納するため、処理が遅くなる。図８及び図９は、同じサイクル数（クロック信号ＣＫのパルス数）が示されている。図８では、カウント値ＣＴが「１２」まで処理が進んでいるのに対し、図９では、カウント値ＣＴが「９」までしか処理されていない。図８と図９とを比較すると明らかなように、この実施形態の方が比較例よりも高速であることがわかる。従って、データ処理部２１での処理を高速化することができる。
【００８４】
次に、基準値の変更に関する動作を説明する。
処理の１つに、画像を回転する処理がある。
図１０，図１１は、それぞれ処理対象の画像１０１，１０２を示す。
【００８５】
図１０に示す例において、大きい四角は、例えば６４画素×１６画素の画像１０１である。図１１に示す例において、大きい四角は、例えば１６画素×６４画素の画像１０２であり、図１０に示す画像１０１を時計まわりに９０度回転させたものである。両図とも、０〜１０２３の番号を付した小さい四角は、個々の画素１０３である。
【００８６】
図１０，図１１に示す画像処理におけるキャッシュメモリ３１とアドレスの動きを説明する。尚、図１１に示す横方向において、各行において８画素毎に書き込むものとする。つまり、アドレス「９６０」のデータから横方向に沿って順番にアドレス「５１２」のデータを書き込んだ後、次の行のデータ、つまりアドレス「９６１」のデータを書き込むものとする。
【００８７】
画像回転処理におけるカウント値ＣＴと対応するアドレスＡＤＲは、図１１に示すように、画素データの格納順序に従って、「ＣＴ，ＡＤＲ」として示すと、それぞれ「０，９６０」「１，８９６」「２，８３２」「３，７６８」「４，７０４」「５，６４０」「６，５７６」「７，５１２」「８，４４８」「９，３８４」「１０，３２０」となる。
【００８８】
カウント値ＣＴの初期値を「０」とする。また、１つの画素１０３に対するデータを１バイトとする。キャッシュメモリ３１の１ラインを６４バイト、キャッシュメモリ３１の容量を５１２バイトとする。従って、キャッシュメモリ３１は８ライン分のデータが格納可能である。
【００８９】
先ず、アドレス「９６０」によるリードが行われる。このとき、キャッシュメモリ３１にはデータが格納されていないため、アドレス「９６０」はキャッシュミスとなり、このアドレス「９６０」によりメインメモリ１３に対してリードが実行される。キャッシュメモリ３１の１ラインの容量に応じて、アドレス「９６０」〜「１０２３」のデータがメインメモリ１３からリードされ、キャッシュメモリ３１に格納される。このときにキャッシュメモリ３１に格納されたデータは、図１１に示す画像１０２において、縦一列の画素１０３のデータとなる。
【００９０】
上記のアドレス「９６０」〜「１０２３」のデータをリードしている間、基準値ｍ，ｎによる先読みアドレスが生成される。例えば、基準値ｍ，ｎを「８」とする。すると、上記したカウント値ＣＴとアドレスＡＤＲとの関係により、先読みアドレスは「９６１」となる。この先読みアドレス「９６１」は、先のアドレス「９６０」にて読み出す１ライン分のデータに含まれるため、先読みアドレスとして先読みアドレスバッファ３５ａ（図１参照）には格納されない、つまり先読みの意味がない。これは、先読みアドレスが「１０２３」になるまで同様である。
【００９１】
このため、次の先読みアドレスは「４４８」となる。このアドレス「４４８」は、上記と同様に、キャッシュミスとなり、このアドレス「４４８」は先読みアドレスバッファ３５ａに格納される。そして、アドレス「９６０」〜「１０２３」のデータが終了するまでの間、基準値ｎに基づく先読みアドレスの生成と、その先読みアドレスをバッファ３５ａに格納することが行われる。
【００９２】
アドレス「９６０」〜「１０２３」のデータの読み出しが終了すると、カウント値ＣＴが「１」となり、アドレス「８９６」に対するリードが行われる。このアドレス「８９６」についても、上記と同様に、キャッシュミスとなり、メインメモリ１３に対するリードと、メインメモリ１３から読み出したデータをキャッシュメモリ３１に格納することが行われる。
【００９３】
上記の処理が繰り返され、図１１に示す１行目のアドレス「５１２」に対する処理が終了すると、２行目に進む。このとき、２行目の先頭の画素のアドレスは「９６１」であり、このアドレスのデータが必要となる。しかし、キャッシュメモリ３１の容量制限（５１２バイト）により、先にアドレス「９６０」に基づいて読み出されたデータが格納されたラインには、他のアドレスに基づいて読み出されたデータが上書きされているため、アドレス「９６１」に対してキャッシュミスが発生する。このため、アドレス「９６０」〜「１０２３」のデータが再度読み出されることになる。
【００９４】
また、アドレス「５１２」の画素に対する処理が終了したとき、図１１において、アドレス「４４８」からアドレス「０」に対する先読みアドレスの生成とキャッシュ判定が行われる。しかし、これらのアドレスのデータに対する処理は、図１１において、アドレス「５７５」（最下段中央）に対する処理が終了した後に行われる。従って、無駄な処理が行われることになる。
【００９５】
このように画像を回転する処理の場合、基準値ｍ，ｎは「１」であることが好ましいことが判る。基準値ｍ，ｎを「１」に設定すると、図１１において、アドレス「５１２」に対する処理がおこなわれるとき、キャッシュメモリ３１には、図１１において左側半分の画素のデータが記憶されている。従って、アドレス「９６１」からアドレス「５７５」に対してキャッシュヒットとなり、基準値ｍ，ｎを「８」に設定したときと比べ、処理が高速化される。
【００９６】
つまり、処理に応じて、基準値ｍ，ｎが変更されるべきである。このため、基準値ｍ，ｎを、処理に応じて予め設定することが考えられる。しかし、キャッシュメモリ３１の設定（ライン数、１ラインのデータ数）や画像のサイズが異なると、基準値ｍ，ｎを設定することが難しくなる。
【００９７】
この実施形態のキャッシュ制御部３２は、基準値ｍ，ｎを、キャッシュのヒット率、ミス率に応じて変更する。つまり、キャッシュ制御部３２は、キャッシュのヒット率、ミス率に応じて基準値ｍ，ｎを動的に変更する。従って、処理や画像のサイズなどが異なっても、それに対応して基準値ｍ，ｎを動的に変更することで、処理の高速化をはかることができる。
【００９８】
処理の別の例として、歪み補正がある。画像は、実際の対象物と比べ、レンズなどの光学系によって、たる型や糸巻き型の歪みが発生する。このように歪みが発生した画像は、その中心部分は対象物とほぼ同一となるが、枠周辺にいくほど対象物と不一致が発生する。このような歪みを補正する場合、枠に近い画素ほど大きく移動させたりする必要がある。例えば、長方形状の対象物を撮影し、たる型の歪みが発生した場合、図１３（ａ）に示すように、画像１１１には、楕円形状の対象物１１２が撮影されている。これを、元の対象物の形状に近い形、即ち、図１３（ｂ）に示すように、長方形状の対象物１１３を含む画像１１４に変換する。
【００９９】
このような補正処理は、画像を周辺方向に引き延ばす処理と、必要な部分をトリミングして補正画像として取り出す処理を含む。画像を引き延ばす処理において、画素の移動位置に従ってメインメモリ１３からデータを読み出し、補正後の画素を含む画像データを生成する。
【０１００】
この引き延ばしの処理を単純化したモデルとして、図１４に示すように、画像１２１について、頂点付近の領域１２２に含まれる画素を２倍に拡大する処理と、中央部分の領域１２３に含まれる画素を等倍とする処理とする。即ち、図１５に示すように、領域１２３に含まれる画素１２４と、領域１２２に含まれる画素１２５を縦横に２倍した画像１２６を含む補正画像を生成する。
【０１０１】
なお、図１５に示す数字は画素の番号を示し、図１４に示す画像１２１において、左上の画素から右下に向って付した番号である。なお、この番号は、メインメモリ１３に格納されたアドレスに対応するものとする。例えば、アドレス「０」についてリードを行うことで、画像１２１の左上の画素のデータ、つまり図１５に示す「０」を付した画素のデータがメインメモリ１３から読み出される。
【０１０２】
このような歪み補正に対するカウント値ＣＴとアドレスＡＤＲを図１６に示す。図１６（ａ）は、中央部分の領域１２３（図１４参照）の画像データを読み出すためのカウント値ＣＴ及びアドレスＡＤＲを示している。図１６（ｂ）は、周辺の領域１２２（図１４参照）の画像データを読み出すためのカウント値ＣＴ及びアドレスＡＤＲを示している。
【０１０３】
尚、図１６（ａ），図１６（ｂ）では、両領域１２２，１２３から読み出される画素の対比を判りやすくするために、カウント値ＣＴをそれぞれの領域１２２，１２３の読み出し開始のアドレスを「０」として示している。なお、カウント値ＣＴは、図１４に示す画像１２１の全体を連続して処理する場合に、図１６（ａ），（ｂ）に示す値と異なることはいうまでもない。
【０１０４】
図１４に示す領域１２２に含まれる画素のデータの読み出しに続いて、領域１２３に含まれる画素のデータを読み出すときの処理を、図１７〜図１９に従って説明する。なお、説明の都合上、図２に示すキャッシュメモリ３１のラインサイズを４画素分とする。また、先読みアドレスバッファに格納可能なアドレス数を「４」、メインメモリ１３からのリードサイクルを「８」とする。
【０１０５】
処理が開始されると、図６，図７に示す初期化処理により、基準値ｍ，ｎとして初期値（例えば「４」）が設定される。
図１７に示すように、先ず、カウント値ＣＴ（＝０）に基づいて、アドレス「０」によるリードが行われる。この時、キャッシュメモリ３１にはデータが格納されていないため、アドレス「０」はキャッシュミスとなり、このアドレス「０」によりメインメモリ１３に対してリードが実行される。即ち、アドレス「０」〜「３」のデータがメインメモリ１３から読み出され、キャッシュメモリ３１に書き込まれる。データが書き込まれるラインの番号をＬｎとする。つまり、０番目のライン（Ｌｎ＝０）にデータが書き込まれる。
【０１０６】
上記のアドレス「０」〜「３」のデータをリードしている間、基準値ｍ，ｎによる先読みアドレスが生成される。今、基準値ｍが「４」であるため、カウント値ＣＴが「４」となり、図１６（ｂ）に示すように、アドレス「０」が先読みアドレスＰＡＤとして生成される。この先読みアドレス「０」は、上記のように読み出しを行っているアドレスに含まれるため、先読みアドレスとして図１に示すバッファ３５ａには格納されない。次に、基準値ｎ（＝４）に基づいて、カウント値ＣＴが「８」となり、アドレス「３２」が先読みアドレスＰＡＤとして生成される。このアドレス「３２」は読み出し中のアドレスに含まれず、またキャッシュメモリ３１にデータが格納されていないため、キャッシュミスと判定され、バッファ３５ａ（プリフェッチアドレスキューＰＱ）に格納される。そして、このアドレス「３２」により、アドレス「３２」〜「３５」のデータの先読み処理が行われ、キャッシュメモリ３１（Ｌｎ＝１）に書き込まれる。
【０１０７】
同様に、アドレス「６４」，「９６」が先読みアドレスＰＡＤとして生成されバッファ３５ａに格納される。上記したように、この説明では、図１４に示す領域１２２に対するデータと領域１２３に対するデータを連続的に読み出すとしている。このため、カウント値ＣＴが「３２」になると、領域１２３のデータ、つまり、図１６（ａ）に示すカウント値ＣＴが「０」のときのアドレス「７２」を先読みアドレスとして生成する。上記と同様に、このアドレス「７２」はキャッシュミスと判定され、バッファ３５ａに格納される。
【０１０８】
そして、これらのアドレス「６４」，「９６」，「７２」に対する先読み処理は、先に実行される先読み処理の終了後に順次実行される。つまり、アドレス「３２」による先読み処理が終了すると、ＦＩＦＯ方式のバッファ３５ａにより、アドレス「６４」がバッファ３５ａに格納された最初のアドレスとなり、このアドレス「６４」による先読み処理が実行される。
【０１０９】
上記のアドレス「０」〜「３」のデータが読み出されると、基準値ｆ（＝１）によりカウントされたカウント値ＣＴに基づいて、画素のデータがキャッシュメモリ３１から読み出されてデータ処理部２１（図１参照）に供給される。
【０１１０】
そして、図１８に示すように、アドレス「１０４」（図１６（ａ）においてカウント値ＣＴ＝４）によるリードが行われると、このアドレス「１０４」のデータはキャッシュメモリ３１に格納されていなため、キャッシュミスと判定され、このアドレス「１０４」によりメインメモリ１３に対してリードが実行される。そして、基準値ｍ（＝４）によりアドレス「１３６」（図１６（ａ）においてカウント値ＣＴ＝８）が生成される。このアドレス「１３６」はキャッシュミスと判定され、バッファ３５ａ（図１参照）に格納される。
【０１１１】
キャッシュミスの発生により、図２に示す基準値算出部４９は、基準値ｍ，ｎを変更する。このとき、ミスカウンタ４５のカウント値ＭＣは「２」であり、プリフェッチミスカウンタ４６のカウント値ＰＭＣは「１」である。従ってミス率ＭＲは「５０％」である。また、ヒットカウンタ４２のカウント値ＨＣは「３５」であり、アクセスカウンタ４１のカウント値ＡＣは「３７」である。従って、ヒット率ＨＲは「９４．５９４％」となる。このときの保持ヒット率ＢＨＲと保持ミス率ＢＭＲはともに「０％」である。従って、基準値算出部４９は、図６（ｂ），図７（ｂ）に示す選択方法に従って基準値ｍ，ｎを「１０，１０」とする。
【０１１２】
すると、基準値ｎ（＝１０）により、アドレス「２０２」（図１６（ａ）においてカウント値ＣＴ＝１８）が生成される。このアドレス「２０２」はキャッシュミスと判定され、バッファ３５ａ（図１参照）に格納される。同様に、基準値ｎ（＝１０）によりアドレス「２９６」が生成され、バッファ３５ａに格納される。
【０１１３】
同様に、生成されたアドレス「１６８」がキャッシュミスと判定されると、図２に示す基準値算出部４９は、ヒット率ＨＲ等により次の基準値ｍ，ｎに「１６，６」を設定する。尚、この例では、領域１２２，１２３に含まれるデータ数が少ないため、変更された基準値ｍ，ｎに応じたアドレスは含まれていないため、エントリなしとなる。
【０１１４】
図１９に示すように、アドレス「２３２」によるリードが行われると、このアドレス「２３２」のデータはキャッシュメモリ３１に格納されていないため、キャッシュミスと判定される。このキャッシュミスの発生により、図２に示す基準値算出部４９は、ヒット率ＨＲ等に基づき、基準値ｍ，ｎに「１６，６」を設定する。このアドレス「２３２」〜「２３５」のデータは読み出し中であるため、アドレス「２３２」はバッファ３５ａに格納されない。また、キャッシュミスに基づき生成される先読みアドレスは、この例では領域外である、つまりプリフェッチ先が存在しないことになる。
【０１１５】
更に、アドレス「２６４」によるリードが行われると、このアドレス「２６４」のデータはキャッシュメモリ３１に格納されていないため、キャッシュミスと判定される。そして、このアドレス「２６４」〜「２６７」のデータがメインメモリ１３から読み出され、キャッシュメモリ３１に書き込まれる。このキャッシュミスの発生により、図２に示す基準値算出部４９は、ヒット率ＨＲ等に基づき、基準値ｍ，ｎに「１０，６」を設定する。尚、キャッシュミスに基づき生成される先読みアドレスは、この例では領域外である、つまりプリフェッチ先が存在しないことになる。
【０１１６】
そして、アドレス「２９８」によるリードが行われると、このアドレス「２９８」のデータはキャッシュメモリ３１に格納されている（図１８の右端）ため、キャッシュヒットと判定され、キャッシュメモリ３１に格納されたデータがデータ処理部２１に出力される。そして、アドレス「２９９」のデータが出力されると、図１４に示す領域１２２，１２３に対する処理が終了する。
【０１１７】
次に、基準値ｍ，ｎを変更しない場合の処理例を説明する。
図２０〜図２２は、図１４に示す周辺の領域１２２を処理する場合を示す。また、図２０は、基準値ｍ，ｎを「８，８」に設定した場合の処理を示し、図２１は、基準値ｍ，ｎを「４，４」に設定した場合の処理を示し、図２２は、基準値ｍ，ｎを「２，２」に設定した場合の処理を示す。
【０１１８】
図２３〜図２５は、図１４に示す中央部分の領域１２３を処理する場合を示す。また、図２３は、基準値ｍ，ｎを「８，８」に設定した場合の処理を示し、図２４は、基準値ｍ，ｎを「４，４」に設定した場合の処理を示し、図２５は、基準値ｍ，ｎを「２，２」に設定した場合の処理を示す。
【０１１９】
領域１２２に対する処理の場合、図２０〜図２３のうちでは、基準値ｍ，ｎを「８，８」又は「４，４」に設定すればよいことが判る。一方、領域１２３に対する処理の場合、図２３〜図２５のうちでは、基準値ｍ，ｎを「４，４」に設定すればよいことが判る。また、図１４に示す画像１２１では、上記の領域１２２，１２３以外の部分で、最適な基準値ｍ，ｎが上記の値（「４，４」）と異なる場合がある。つまり、基準値ｍ，ｎを変更しない場合、画像１２１全体を通して最適な基準値ｍ，ｎを設定する必要がある。
【０１２０】
一方、この実施形態では、図１７〜図１９に示すように、データの読み出しにより算出するヒット率等に応じて基準値ｍ，ｎを動的に変更している。このため、図１４に示す画像１２１全体に対して予め基準値ｍ，ｎを設定する必要がない。そして、基準値算出部４９は、キャッシュメモリ３１のヒット率ＨＲと先読みアドレスのミス率ＭＲに基づいて、基準値ｍ，ｎを変更する。このため、ヒット率ＨＲを高い値に保つようにすることができる。
【０１２１】
図１２は、キャッシュのヒット率と処理速度の関係を示す特性図である。
キャッシュのヒット率は、リードレイテンシを１００サイクルとした場合の値である。処理速度は、「１」が最高速となるように正規化した値である。図１２により、ヒット率を高くするほど処理速度が上がることが判る。また、わずかにヒット率を高くする（図において例えば０．２％）ことで、処理速度を約１．５倍にすることが可能であることが判る。従って、この実施形態のように、ヒット率を高くするように基準値ｍ，ｎを変更することで、データの処理速度を高くする、つまりデータの処理時間を短縮することができる。
【０１２２】
以上記述したように、本実施形態によれば、以下の効果を奏する。
（１）基準値ｆに基づいてカウントされた値に対応するアドレスが発生するので、連続性を有するデータに対してキャッシュ判定を高速化することができる。従って、連続性を有するデータに対して処理を高速化することができる。
【０１２３】
（２）キャッシュミスが発生してメインメモリ１３へアクセスしている間に、基準値ｍ，ｎに基づいてカウントされた値に対応するアドレスが先読みアドレスＰＡＤとしてバッファ３５ａに格納される。そして、キャッシュミスによるメインメモリ１３へのアクセス終了後に、先読みアドレスＰＡＤに対応するデータがメインメモリ１３から読み出されてキャッシュメモリ３１に格納されるので、後のサイクルでキャッシュヒットとなる確率が高くなる。従って、連続性を有するデータに対して処理を高速化することができる。
【０１２４】
（３）カウント値ＣＴに対応するアドレスＡＤＲに対するキャッシュ判定に応じて基準値ｍ，ｎを動的に変更するため、データに対する処理、データの読み出しに応じた基準値ｍ，ｎにてアドレスを生成することができるようになり、データに対する処理の高速化を図ることができる。
【０１２５】
（４）基準値ｍ，ｎを動的に変更するため、予め最適な基準値ｍ，ｎを設定する必要がなく、更にはキャッシュのヒット率を高めることになり、性能を上げる事が可能になる。
（５）キャッシュメモリのヒット率ＨＲと先読みアドレスのミス率ＭＲを算出し、これらの値が高くなるように基準値ｍ，ｎを動的に変更することで、キャッシュのヒット率が高い状態を保つことができ、データに対する処理の高速化を図ることができる。
【０１２６】
尚、上記実施形態は、以下の態様で実施してもよい。
・上記実施形態では、基準値ｍ，ｎをそれぞれ変更するようにしたが、基準値ｍ，ｎを互いに同じ値に変更するようにしてもよい。例えば、基準値ｍの値を「１０」に変更した場合に、基準値ｎの値を「１０」に変更する。このようにしても、処理に応じて基準値ｍ，ｎを動的に変更することで、処理時間の短縮化を図ることが可能となる。
【０１２７】
・上記実施形態では、カウンタ部２２は、ウェイト信号ＷＴがアサートされていないとき、つまりキャッシュヒットの場合に、固定値「１」に基づいてカウントしてカウント値ＣＴを生成するようにしたが、データ処理部２１の構成、データのサイズ（１つの処理単位におけるビット数）、等に応じて、固定値を変更するようにしてもよい。
【０１２８】
・上記実施形態の構成（図１，２参照）に対し、キャッシュ装置１２とメインメモリ１３との間にメモリコントローラを介在させる構成としてもよい。
・上記実施形態では、基準値算出部４９の基準値テーブル４９ａを用いて基準値ｍ及び基準値ｎの値を変更するようにしたが、基準値ｍと基準値ｎとのそれぞれにテーブルを設け、それぞれのテーブルから値を選択するようにしてもよい。
【０１２９】
・上記実施形態では、ウェイト信号ＷＴに応答してカウンタ部２２が基準値の値を変更するようにしたが、そのたの制御信号、例えば、先読みアドレス生成要求のための信号に基づいて変更するようにしてもよい。
【０１３０】
・上記実施形態に対し、キャッシュ装置１２が変更値をカウンタ部２２に供給する構成としてもよい。
【符号の説明】
【０１３１】
１２  キャッシュ装置
１３  メインメモリ
２２  カウンタ部
３１  キャッシュメモリ
３２  キャッシュ制御部
３３  キャッシュ判定部
４３  ヒット率算出部
４７  ミス率算出部
４９  基準値算出部
ｆ，ｍ，ｎ  基準値
ＣＴ  カウント値
ＨＲ  ヒット率
ＭＲ  ミス率
【図１】
0005569312.tif 000002
【図２】
0005569312.tif 000003
【図３】
0005569312.tif 000004
【図４】
0005569312.tif 000005
【図５】
0005569312.tif 000006
【図６】
0005569312.tif 000007
【図７】
0005569312.tif 000008
【図８】
0005569312.tif 000009
【図９】
0005569312.tif 000010
【図１０】
0005569312.tif 000011
【図１１】
0005569312.tif 000012
【図１２】
0005569312.tif 000013
【図１３】
0005569312.tif 000014
【図１４】
0005569312.tif 000015
【図１５】
0005569312.tif 000016
【図１６】
0005569312.tif 000017
【図１７】
0005569312.tif 000018
【図１８】
0005569312.tif 000019
【図１９】
0005569312.tif 000020
【図２０】
0005569312.tif 000021
【図２１】
0005569312.tif 000022
【図２２】
0005569312.tif 000023
【図２３】
0005569312.tif 000024
【図２４】
0005569312.tif 000025
【図２５】
0005569312.tif 000026