(57)【要約】【課題】通常アクセスモードと同等のキャッシュヒット性能を持ちつつ、可能な限りの低消費電力でキャッシュメモリを動作させることができるキャッシュメモリ制御回路を提供する。【解決手段】キャッシュメモリ制御回路は、複数のウェイを所定の分割数で分割したキャッシュメモリの各ウェイあるいは２以上のウェイを、所定の順番で選択可能な選択部４２と、各ウェイにおけるキャッシュヒットを検出する比較部３３と、キャッシュヒットを検出すると、選択部４２における各ウェイの選択を停止させる制御部４１と、キャッシュメモリからのリードデータを二つのパスに伝播させて、一方が他方に対して所定の遅延量を有する２つのリードデータを比較する比較部６１，６２を有し、比較部６１，６２における２つのリードデータの一致あるいは不一致に応じて、所定の分割数を変更する分割数変更部１６ｂとを有する。【選択図】図３
2010026716.tif 000002
【特許請求の範囲】
【請求項１】
複数のウェイを所定の分割数で分割したキャッシュメモリの各ウェイあるいは２以上のウェイを、所定の順番で選択可能な選択部と、
前記各ウェイにおけるキャッシュヒットを検出するキャッシュヒット検出部と、
前記キャッシュヒットを検出すると、前記選択部における前記各ウェイあるいは２以上のウェイの選択を停止させる制御部と、
前記キャッシュメモリからのリードデータを、一方が他方に対して所定の遅延量を有する２つのリードデータバスに伝播させた後にそれぞれの値を比較する比較部を有し、該比較部における前記２つのリードデータの一致あるいは不一致に応じて、前記所定の分割数を変更する分割数変更部と、
を有することを特徴とするキャッシュメモリ制御回路。
【請求項２】
前記比較部は、それぞれが前記所定の分割数に応じた周波数のタイミングで前記２つのリードデータを比較する複数の比較器を有し、
前記分割数変更部は、前記複数の比較器における、前記２つのリードデータの一致あるいは不一致に応じて、分割する前記所定の分割数を変更する請求項１に記載のキャッシュメモリ制御回路。
【請求項３】
前記分割数変更部は、前記一致あるいは不一致のタイミングのパターン情報と、前記比較部における前記２つのリードデータの一致あるいは不一致のタイミングの情報とに基づいて、前記所定の分割数を変更することを特徴とする請求項１に記載のキャッシュメモリ制御回路。
【請求項４】
複数のウェイを所定の分割数で分割したキャッシュメモリの各ウェイあるいは２以上のウェイを、所定の順番で選択可能な選択部と、
前記各ウェイにおけるキャッシュヒットを検出するキャッシュヒット検出部と、
前記キャッシュヒットを検出すると、前記選択部における前記各ウェイあるいは２以上のウェイの選択を停止させる制御部と、
前記キャッシュメモリからのリードデータの誤りを検出する誤り検出部を有し、該誤り検出部において検出されたデータの誤りの情報に基づいて、前記所定の分割数を変更する分割数変更部と、
を有することを特徴とするキャッシュメモリ制御回路。
【請求項５】
複数のウェイを所定の分割数で分割したキャッシュメモリの各ウェイあるいは２以上のウェイを、所定の順番で選択可能な選択部と、前記各ウェイにおけるキャッシュヒットを検出するキャッシュヒット検出部と、前記キャッシュヒットを検出すると、前記選択部における前記各ウェイあるいは２以上のウェイの選択を停止させる制御部と、前記キャッシュメモリからのリードデータを、一方が他方に対して所定の遅延量を有する２つのリードデータバスに伝播させた後にそれぞれの値を比較する比較部を有し、該比較部における前記２つのリードデータの一致あるいは不一致に応じて、前記所定の分割数を変更する分割数変更部とを有するキャッシュメモリ制御回路と、
前記キャッシュメモリに接続されたCPUと、
を有することを特徴とするプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュメモリ制御回路及びプロセッサに関し、特に、複数のウェイを有するキャッシュメモリのキャッシュメモリ制御回路及びプロセッサに関する。
【背景技術】
【０００２】
従来より、プロセッサにおいて、主メモリからのデータの高速読み出しのために、キャッシュメモリが広く用いられている。キャッシュメモリは、中央処理装置（以下、CPUという）と主メモリの間に設けられる。
【０００３】
キャッシュメモリには、同じエントリアドレスのタグデータを複数記憶する、つまり、複数のウェイを有するものがある。そのようなキャッシュメモリでは、CPUからのアドレス中のエントリアドレスに基づいて、全てのウェイから同時にタグを読み出し、フレームアドレスとの比較を同時に行い、いずれかのタグが一致(ヒット)した場合には、ヒットしたウェイから読み出されたデータのうち、ワードアドレスで示されるワードをCPUへ出力する。
【０００４】
近年、プロセッサの省電力化のために、２つのアクセスモードを持つキャッシュメモリが提案されている（例えば、特許文献１参照）。その提案によれば、通常アクセスモードでは、全てのウェイに対してタグ比較を行い、唯一アクセスモードでは、選択されたウェイに対してのみ、タグ比較を行う。その結果、唯一アクセスモードでは、必要最小限のメモリ領域だけが動作することになるので、結果的に消費電力が削減される。
【０００５】
ところが、上記提案における唯一アクセスモードでは、使用されるキャッシュメモリ領域が限定されるため、同じソフトウェアを動作させても、通常アクセスモードに比べてキャッシュミスの頻度が上がる場合がある。そのような場合は、キャッシュリフィル動作が多く発生してしまうため、低消費電力化が十分に行われないことになる。
【０００６】
さらに、アクセスモードの切り換えが適切に行われないと、低消費電力化が十分に行われない恐れもある。
【特許文献１】特開2002-236616号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
そこで、本発明は、上述した問題に鑑み成されたものであり、通常アクセスモードと同等のキャッシュヒット性能を持ちつつ、可能な限りの低消費電力でキャッシュメモリを動作させることができるキャッシュメモリ制御回路及びプロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一態様によれば、複数のウェイを所定の分割数で分割したキャッシュメモリの各ウェイあるいは２以上のウェイを、所定の順番で選択可能な選択部と、前記各ウェイにおけるキャッシュヒットを検出するキャッシュヒット検出部と、前記キャッシュヒットを検出すると、前記選択部における前記各ウェイあるいは２以上のウェイの選択を停止させる制御部と、前記キャッシュメモリからのリードデータを、一方が他方に対して所定の遅延量を有する２つのリードデータバスに伝播させた後にそれぞれの値を比較する比較部を有し、該比較部における前記２つのリードデータの一致あるいは不一致に応じて、前記所定の分割数を変更する分割数変更部と、を有するキャッシュメモリ制御回路を提供することができる。
【発明の効果】
【０００９】
本発明によれば、通常アクセスモードと同等のキャッシュヒット性能を持ちつつ、可能な限りの低消費電力でキャッシュメモリを動作させることができるキャッシュメモリ制御回路及びプロセッサを実現することができる。
【発明を実施するための最良の形態】
【００１０】
以下、図面を参照して本発明の実施の形態を説明する。  
（第１の実施の形態）
１．構成
まず図１に基づき、本実施の形態に係わるキャッシュメモリを含むプロセッサの構成を説明する。図１は、本実施の形態に係わるプロセッサの構成を示す構成図である。
【００１１】
図１において、プロセッサ１は、CPU１１と、主メモリ１２と、システムバス１３とを含んで構成されている。CPU１１は、CPUコア１５と、キャッシュメモリ１６と、周波数設定レジスタ１７を含む。
【００１２】
CPU１１は、主メモリ１２に記憶された命令あるいはデータを、キャッシュメモリ制御回路を含むキャッシュメモリ１６と、システムバス１３を介して読み出して実行する。CPUコア１５は、プログラムの実行に必要な命令あるいはデータ（以下、単にデータともいう）を、キャッシュメモリ１６から読み出してそのプログラムを実行する。CPUコア１５は、主メモリ１２の実アドレスRAを、キャッシュメモリ１６に出力し、キャッシュメモリ１６は、キャッシュメモリ１６中に入力された実アドレスRA上のデータが存在すれば、そのデータDをCPUコア１５へ出力する。キャッシュメモリ１６中にストアされたデータが無ければ、リフィル処理により主メモリ１２からそのデータを読み出してキャッシュメモリ１６に書き込み、CPUコア１５に出力する。
【００１３】
なお、ここでは、説明を簡単にするためにメモリ管理ユニット（MMU）を有しない例を用いて説明するが、メモリ管理ユニット（ＭＭＵ）を有する場合は、CPUコア１５は、実アドレスではなく、仮想アドレスを出力する。
【００１４】
また、CPUコア１５は、キャッシュメモリ１６に対して、キャッシュメモリ１６を動作させるための信号として、チップイネーブル信号CEをキャッシュメモリ１６に対して出力する。従って、CPUコア１５は、キャッシュメモリ１６を使用する時に、チップイネーブル信号CEを出力する。
【００１５】
さらに、動作周波数設定部としての周波数設定レジスタ１７には、CPU１１の動作周波数の値が設定される。CPU１１の動作周波数の設定は、例えば、ユーザにより外部から与えられることにより行われる。周波数設定レジスタ１７に設定された動作周波数データFは、CPUコア１５に入力され、CPUコア１５は、その動作周波数データFをキャッシュメモリ１６に出力する。（Fは周波数設定レジスタから、CPUコアとキャッシュメモリの両方に出力されてもよい。）本実施の形態では、CPUコア１５は、１００MHZ、２００MHz、４００MHzのいずれかが設定可能に構成されている。  
また、キャッシュメモリ１６の動作周波数は、CPUコア１５の動作周波数F以上の動作周波数で動作する。ここでは、キャッシュメモリ１６の動作周波数は、４００MHzであるとする。
【００１６】
CPUコア１５は、例えば、３２ビット幅の実アドレスデータRAをキャッシュメモリ１６に出力し、キャッシュメモリ１６は、３２ビットのワードデータDをCPUコア１５に出力する。
【００１７】
また、キャッシュメモリ１６は、データを格納する小容量メモリ（図示せず）に加えて、制御回路としてのキャッシュアクセスコントローラ１６ａと分割数変更部１６ｂとを含む。キャッシュアクセスコントローラ１６ａと分割数変更部１６ｂの構成については後述する。
【００１８】
図２は、CPUコア１５から出力される実アドレスデータの構成例を示す図である。ここでは、実アドレスデータRAは、３２ビットであり、上位ビット側の２０ビットのフレームアドレスFAと、８ビットのエントリアドレスEAと、下位ビット側の４ビットのワードアドレスWAからなる。
【００１９】
図３は、キャッシュメモリ１６の構成例を説明するための図である。  
キャッシュメモリ１６は、データを記憶する小容量記憶部３１を有する。さらに、キャッシュメモリ１６は、アドレスデコーダ３２と、比較部３３と、ワードセレクタ部３４と、ウェイセレクタ部３５と、キャッシュアクセスコントローラ１６ａと、分割数変更部１６ｂとを含むキャッシュメモリ制御回路を有している。キャッシュアクセスコントローラ１６ａは、制御部４１と、選択部４２と、分割数指定部４３とを含む。小容量記憶部３１は、N個（Nは２以上の整数）のウェイ、ここでは４つのウェイ、からなるメモリであり、キャッシュメモリ１６は、４ウェイセットアソシアティブ方式のキャッシュメモリである。比較部３３とワードセレクタ部３４は、それぞれ、各ウェイにおいて選択されたラインLs（ここでは４つのライン）に対応して、複数の比較器（ここでは４つの比較器）と複数のワードセレクタ（ここでは４つのワードセレクタ）を有している。
【００２０】
ここでは、各ウェイが２５６ブロック、すなわち２５６ラインを有し、各ラインは、８ビットのエントリアドレスEAによって指定される。  
各ラインは、１６個のワードデータを含むデータ部と、フレームアドレスデータを含むタグ部を有する。１６個のワードデータのうちどのワードデータを読み出すかは、入力された実アドレスRA中の、４ビットのワードアドレスWAによって指定される。
【００２１】
キャッシュメモリ１６には、実アドレスデータRA、チップイネーブル信号CE、動作周波数データFが入力され、キャッシュメモリ１６は、リードデータDをCPUコア１５に出力する。
【００２２】
キャッシュアクセスコントローラ１６ａの制御部４１は、後述する比較部３３からの比較結果信号である一致信号c0からc3が入力される回路である。一致信号c0からc3は、キャッシュヒットを示す信号である。選択部４２は、制御部４１から制御信号CSと、チップイネーブル信号CEとが入力される回路である。後述するように、制御部４１は、一致信号c0からc3のいずれかが入力されると、選択部４２に制御信号CSを出力し、ウェイイネーブル信号WEの出力を停止させる。
【００２３】
選択部４２は、各ウェイに対するウェイイネーブル信号WEを出力する。選択部４２は、後述するように、４つのウェイ全てを同時に有効にする、あるいは各ウェイを所定の順番で時間的に重ならないように有効にする、さらにあるいは複数の（ここでは２つの）ウェイを所定の順番で時間的に重ならないように有効にするように、各ウェイを選択する。各ウェイに対するウェイイネーブル信号WEは、各ウェイを有効にする、すなわち動作させるための信号である。
【００２４】
分割数指定部４３は、動作周波数データＦと分割数変更部１６ｂからの分割数変更信号DNCが入力される回路である。分割数指定部４３は、入力された動作周波数データＦに対応する分割数データを、選択部４２に出力し、分割数変更信号DNCに応じて分割数を変更する。  
従って、キャッシュメモリ１６の複数のウェイは、指定された分割数で分割されて、分割された各ウェイあるいは２以上のウェイは、選択部４２において、所定の順番で選択される。
【００２５】
CPUコア１５の動作周波数Fは可変であり、上述したように、４００MHz、２００MHzあるいは１００MHzのいずれかで動作可能である。その動作周波数Fは、上述したようにユーザにより設定可能である。その指定された動作周波数のデータが分割数指定部４３に入力される。
【００２６】
分割数変更部１６ｂは、複数の、ここでは４つの、フリップフロップ（以下、FFと略す）５１〜５４と、複数の、ここでは２つの、比較器６１，６２を含む比較部と、順序回路６３とを含んで構成される。
【００２７】
FF５１から５４には、データバスのビット幅に等しいビット数のリードデータDが、ウェイセレクタ３５から入力されるが、特にFF５２と５４には、所定の数のバッファ回路５２ａ、５４ａを介して、リードデータDが入力される。すなわち、CPUコア１５のリードデータDは、そのデータをラッチする各F/F５１〜５４の入力ピンの直前で分岐されてから各FF５１から５４に入力され、特に、FF５２と５４については数段のバッファ回路を介して入力される。よって、ウェイセレクタ３５からのリードデータDは、一方が他方に対して所定の遅延量を有する２つのデータパスを伝播した後に、比較器６１，６２で比較される。
【００２８】
また、FF５１と５２には、４００MHzのクロック信号が入力され、FF５３と５４には、２００MHzのクロック信号が入力される。
【００２９】
各FFに入力されるクロック信号のタイミングは、CPUコア１５からキャッシュメモリ１６のレジスタへの実アドレスRAの入力タイミング及びCPUコア１５へのリードデータDの入力タイミングに同期している。より具体的には、各FFに入力されるクロック信号のタイミングは、CPUコア１５からキャッシュメモリ１６へのリードデータDの書き込みタイミング及びCPUコア１５によるキャッシュメモリ１６からのデータの読み出しのタイミングに、例えば、パルス信号の立ち上がりエッジのタイミングに、同期している。
【００３０】
比較部における２つの比較器６１，６２は、それぞれ４００MHzのクロックと２００MHzのクロックが、入力されているが、各クロックは、分割数に応じた周波数のタイミングのクロックである。よって、２つの比較器６１，６２は、それぞれが所定の分割数に応じた周波数のタイミングで、２つのリードデータを比較する。
【００３１】
比較器６１には、FF５１と５２の出力データが入力され、比較器６２には、FF５３と５４の出力データが入力される。各比較器６１，６２は、２つの入力データが一致すると、一致を示す信号「０」を出力し、不一致の場合は、不一致を示す信号「１」を出力する。後述するように、データをラッチする各FF５１から５４が保持するデータは、動作条件が良好なときは、常に等しく、各比較器６１，６２の出力は「０」（一致を表す値）となる。
【００３２】
分割数の変更の判定を行う判定部としての順序回路６３には、２つの比較器６１，６２の出力信号が入力される。そして、順序回路６３には、４００MHzのクロック信号が入力される。順序回路６３の出力信号は、分割数変更信号DNCであり、分割数指定部４３に出力される。
【００３３】
また、順序回路６３には、キャッシュメモリ１６の現在のアクセスモードの状態を示すアクセスモード信号（図示せず）も入力されている。順序回路６３がどのように動作するかは後述する。
【００３４】
ここで、チップ温度の上昇や電源電圧の低下などにより、トランジスタの動作速度が徐々に低下していく場合を考える。このような場合、CPUコア１５にとっては、キャッシュメモリ１６からのリードデータが、CPUコア１５がリードデータを読み出すために一時的にラッチするFF（図示せず）に到達するタイミングが徐々に遅くなっていく。しかし、このデータのパスにおいてタイミング違反が発生する前に、上述したウェイセレクタ３５からFF５２もしくはFF５４へのパスにおいてタイミング違反が発生するように、１以上のバッファ回路が設けられている。FF５２と５４の前段に設けられたバッファ回路５２ａと５４ａを含むパスは、そのバッファ回路の数の分だけ遅延量が大きい。
【００３５】
FF５１と５２を含むパスは、４００MHz時のタイミング違反を検出するためのパスであり、FF５３と５４を含むパスは、２００MHz時のタイミング違反を検出するためのパスである。FF５１と５２と比較器６１は、４００MHzタイミング違反検出回路を構成し、FF５３と５４と比較器６２は、２００MHzタイミング違反検出回路を構成する。
【００３６】
FF５２もしくはFF５４でタイミング違反が発生すると、FF５２やFF５４の全てあるいは一部の出力は、不定値になり、その結果、対応する比較器の出力は「１」（不一致を示す値）となる。
【００３７】
キャッシュメモリ１６のアクセスモードを示すアクセスモード信号と、各比較器６１，６２の出力信号は、順序回路６３に入力される。後述するように、４００MHzのタイミング違反、あるいは２００MHzのタイミング違反が発生すると、順序回路６３は、それぞれの違反を示す各比較器からの信号と、アクセスモード信号とに基づいて、分割数変更信号DNCを、分割数指定部４３に出力する。
【００３８】
従って、分割数変更部１６ｂは、リードデータを二つのパスに伝播させて、一方が他方に対して所定の遅延量を有する２つのリードデータを比較する比較器６１，６２を有し、比較器６１，６２における２つのリードデータの一致あるいは不一致に応じて、分割数を変更するための分割数変更信号DNCを出力する回路である。
【００３９】
キャッシュメモリアクセスコントローラ１６ａが分割数変更部１６ｂからの分割数変更信号DNCを受信すると、キャッシュメモリ１６のアクセスモードが変更される。すなわち、キャッシュアクセスコントローラ１６ａは、受信した分割数変更信号DNCに基づいて、複数のウェイの分割数を変更する。なお、アクセスモードの切り替えは、分割数変更信号DNCを受信したリードサイクルが終わった後、リードサイクルが行われない期間内に行われる。
【００４０】
例えば、CPUコア１５が１００MHzで動作しており、キャッシュメモリ１６が４００MHzモードで、すなわち１ウェイずつ最大４回検索するアクセスモードで動作しているときに、４００MHzのタイミング違反が検出された場合は、順序回路６３は、検出時のリードサイクルが終了すると、キャッシュメモリ１６のアクセスモードを、２００MHzモードへ、すなわち２ウェイずつ最大２回検索するアクセスモードへ、と切り替えさせるための分割数変更信号DNCを出力する。
【００４１】
同様に、キャッシュメモリ１６が２００MHzモードで動作しているときに、２００MHzのタイミング違反が検出された場合は、順序回路６３は、検出時のリードサイクルが終了すると、キャッシュメモリ１６のアクセスモードを、１００MHzモードへ、すなわち４ウェイまとめて検索するアクセスモード（つまり、従来の４ウェイキャッシュメモリの動作）へ、と切り替えさせるための分割数変更信号DNCを出力する。  
よって、比較器において、不一致と判定されると、分割数を減少させる分割数変更信号が出力される。
【００４２】
また、キャッシュメモリ１６の１００MHzモードから２００MHzモードへの切り替えは、２００MHzのタイミング違反が検出されなくなったリードサイクルの次のリードサイクルに行われ、２００MHzモードから４００MHzモードへの切り替えは、４００MHzのタイミング違反が検出されなくなったリードサイクルの次のリードサイクルに行われる。  
よって、比較器において、一致と判定されると、分割数を増加させる分割数変更信号が出力される。
【００４３】
なお、チップ温度や電源電圧の変動の速さは、一般的に、チップのクロックサイクル時間に比べて桁違いに遅い。よって、例えば、比較器の出力は、チップ温度が上昇するとしばらく「１」を保ち、数十分経ってチップ温度が下がって来ると「０」に戻る、という動作をする。
【００４４】
ところで、キャッシュメモリ１６に入力された実アドレスRAのエントリアドレスEAは、アドレスデコーダ３２に供給される。アドレスデコーダ３２は、エントリアドレスEAに対応するラインを、小容量記憶部３１の４つのウェイ#０から#３のそれぞれから選択する。エントリアドレスEAは８ビットであるので、各ウェイにおいて必ず１つのラインが選択される。
【００４５】
また、実アドレスデータRAのワードアドレスWAは、ワードセレクタ部３４に供給される。ワードセレクタ部３４の４つのワードセレクタは、それぞれ、ワードアドレスWAに対応するワードデータを、小容量記憶部３１の選択された４つのラインLsのそれぞれから選択する。ワードアドレスWAは、４ビットであるので、各ラインLsにおいて必ず１つのワードデータが選択される。各ワードセレクタで選択されたワードデータは、ウェイセレクタ部３５に出力される。
【００４６】
さらに、実アドレスRAのフレームアドレスFAは、比較部３３の４つの比較器のそれぞれの一方の入力に供給される。比較部３３の４つの比較器には、それぞれ、選択された４つのラインLsの４つのタグ部の４つのフレームアドレスデータが入力される。比較部３３の４つの比較器は、それぞれ、入力されたフレームアドレスFAと入力されたタグ部のフレームアドレスデータとを比較し、比較結果信号Cを出力する。比較部３３は、入力されたフレームアドレスFAと一致したタグ部のフレームアドレスデータがある場合は、キャッシュヒットを検出したことを示す一致信号c0からc3のいずれかを出力する。比較部３３は、各ウェイにおけるキャッシュヒットを検出するキャッシュヒット検出部を構成する。
【００４７】
キャッシュヒットの検出を示す一致信号c0からc3は、それぞれ４つのウェイ#０から#３に対応し、フレームアドレスFAとタグ部のフレームアドレスデータとが一致したことを示す信号である。
【００４８】
従って、入力されたフレームアドレスFAと入力されたタグ部のフレームアドレスデータとが一致しなければ、一致信号c0からc3のいずれも出力されない。入力されたフレームアドレスFAと入力されたタグ部のフレームアドレスデータとが一致したものがあれば、フレームアドレスFAとタグ部のフレームアドレスデータが一致した１つのウェイに対応する１つの一致信号が出力される。
【００４９】
一致信号c0からc3は、ウェイセレクタ部３５に入力される。ウェイセレクタ部３５は、ワードセレクタ部３４から入力されたワードデータのうち、一致信号に対応するウェイのラインのワードデータ（D）を出力する回路である。
【００５０】
また、選択部４２は、チップイネーブル信号CEが入力されると所定の順番で、ウェイを１つずつ（後述する４００ＭＨzモードの場合）あるいは２つずつ（後述する２００MHzモードの場合）選択して有効にするウェイイネーブル信号WEを出力する。なお、選択部４２は、チップイネーブル信号CEが入力されると、全てのウェイを同時に選択して有効にするウェイイネーブル信号WEを出力する場合もある（後述する１００MHzモードの場合）。  
制御部４１は、一致信号が入力されると、選択部４２に制御信号CSを出力し、ウェイイネーブル信号WEの出力を停止させる。従って、制御信号CSは、キャッシュヒットを検出すると、選択部４２によるウェイの選択を途中で停止させる停止指示信号である。
【００５１】
分割数指定部４３は、図４に示すような分割数テーブルDTを含み、分割数テーブルDTを参照して、入力された動作周波数データFに対応する分割数データを出力する。  
図４は、分割数テーブルDTの例を示す図である。図４に示すように、分割数テーブルDTは、各動作周波数、ここでは４００MHz、２００MHz及び１００MHzのそれぞれについて、１以上の分割数が設定され記憶されたテーブルである。さらに、分割数テーブルDTにおいて、分割数データは、動作周波数毎に優先度データと共に、設定されている。
【００５２】
図４に示すように、CPUコア１５の動作周波数Fが１００MHzの場合、３つの優先度１，２，３に対応して、３つの分割数４，２，１が設定され、CPUコア１５の動作周波数Fが２００MHzの場合、２つの優先度１，２に対応して、２つの分割数２，１が設定され、CPUコア１５の動作周波数Fが４００MHzの場合、１つの優先度１に対応して、１つの分割数１が設定されている。
【００５３】
本実施の形態では、CPUコア１５の動作周波数Fが指定されると、分割数指定部４３は、通常は、最高優先度、ここでは１，に対応する分割数のデータを選択して、選択部４２に出力する。例えば、CPUコア１５の動作周波数Fが１００MHzの場合、分割数指定部４３は、最高優先度１に対応する分割数４を示す分割数データを選択部４２に出力する。
【００５４】
なお、分割数は、ユーザが選択できるようにしてもよい。すなわち、CPUコア１５の動作周波数Fに対して、ユーザが、最高優先度以外の優先度に対応する分割数を指定して選択するようにしてもよい。例えば、CPUコア１５の動作周波数Fが１００MHzの場合、分割数指定部４３に対して優先度２に対応する分割数２を示す分割数データを選択部４２に出力するように、ユーザは、分割数指定部４３に設定するようにしてもよい。
【００５５】
以上のように、分割指定部４３は、設定されたCPUコア１５の動作周波数Fに対応した分割数を指定するデータを選択部４２に出力する。
【００５６】
そして、選択部４２は、指定された分割数で、１CPUサイクルを分割して、分割された各期間内において、各ウェイあるいは複数のウェイを選択するウェイイネーブル信号WEを各ウェイに出力する。
【００５７】
そして、分割数指定部４３は、上述した分割変更部１６ｂからの分割数変更信号DNCを受信すると、指定された分割数及び優先度に拘わらず、それまで動作していたアクセスモードの変更を行う。
【００５８】
２．動作
次に、上述したプロセッサ１のキャッシュメモリ１６の動作を説明する。  
２．１  モード変更がないときの動作
図５は、プロセッサ１の動作を説明するためのタイミングチャートである。キャッシュメモリ１６は、上述したように４００MHzで動作する。以下、CPUコア１５の動作周波数Fが、１００MHzで設定された場合で説明する。  
ユーザがCPUコア１５の動作周波数Fを１００MHzに設定すると、その設定された動作周波数データFは、周波数設定レジスタ１７にストアされ、CPUコア１５を介して分割数指定部４３に出力される。分割数指定部４３は、分割テーブルDTを参照して、最高優先度に対応する分割数データを選択部４２に出力する。選択部４２は、入力された分割数で１CPUサイクルを分割するように、各ウェイに対して、ウェイイネーブル信号WEを出力する。
【００５９】
従って、CPUコア１５の動作周波数Fが１００MHzに設定されると、最高優先度１に対応する４分割で、各ウェイが選択される（後述する４００ＭＨzモード）。
【００６０】
なお、CPUコア１５の動作周波数Fが２００MHzに設定されると、最高優先度１に対応する２分割で、各ウェイが選択される。さらになお、CPUコア１５の動作周波数Fが４００MHzに設定されると、最高優先度１に対応する１分割（すなわち分割せず）で、各ウェイが選択、すなわち全ウェイが同時に選択される。
【００６１】
このように、キャッシュメモリ１６に接続されたCPUコア１５の動作周波数に応じて、１CPUサイクルが分割されるので、選択部４２により１回の選択で選択されるウェイの数が変更される。
【００６２】
図５を用いて具体的に説明すれば、CPUコア１５の動作周波数Fが１００MHzに設定されると、プロセッサ１のシステムクロックCLKが４００MHzであり、CPUコア１５が、１００MHzで動作する。キャッシュメモリ１６は、４００MHzで動作しているので、CPUコア１５とキャッシュメモリ１６との周波数比は、１：４である。
【００６３】
分割数指定部４３には、１００MHzの動作周波数データFが入力されるので、分割テーブルDTを参照して、最高優先度１に対応する分割数４の分割数データを選択部４２に出力する。
【００６４】
その結果、選択部４２は、チップイネーブル信号CEを受信すると、ウェイイネーブル信号WE[0],WE[1],WE[2],WE[3]を一つずつ順番に出力するように動作を開始する。すなわち、キャッシュメモリ１６は、１CPUサイクルの間に、入力された実アドレスデータRAのフレームアドレスFAと各ウェイのタグ部のフレームアドレスとの比較を順番に実行しようとする。ここでは、ウェイ#０から#３の順でその比較が行われる。
【００６５】
まず、ウェイ#０に対応するウェイイネーブル信号WE[0]をHIGHにし、ウェイ#０から読み出されたタグ部のフレームアドレスが、入力されたフレームアドレスFAと一致しているかを比較する。一致していれば、比較結果信号Cにおいて、一致信号c0がHIGHとなり、キャッシュヒットとなる。
【００６６】
図５では、ウェイ#０から#３に対するウェイイネーブル信号WEとして、「０００１」を示す「１」が出力されている。そして、４つの一致信号c0からc3の比較結果信号Cとして、「０００１」を示す「１」が出力されている。比較結果信号Cの「０００１」において、キャッシュヒット[0]信号が「１」で示されている。
【００６７】
図５の例では、ウェイ#０に格納されていたタグ部のフレームアドレスと、入力されたフレームアドレスFAとを比較したときに、一致、すなわちヒットしたので、その一致後は、CPUコア１５へのデータは、有効（Valid）となる。そのため、CPUコア１５は、次のCPUサイクルの立ち上がりのタイミングで、リードデータとして、ウェイセレクタ３５の出力を取り込むことにより、ウェイ#０にキャッシュされていたデータを得る。
【００６８】
また、比較結果信号Cは、制御部４１に入力されているので、制御部４１は、キャッシュヒットを検出することができる。制御部４１は、キャッシュヒットを検出すると、選択部４２に対して、ウェイイネーブル信号WEの出力を停止させるための制御信号CSを出力する。選択部４２は、その制御信号CSを受信すると、それ以降、ウェイイネーブル信号WEの出力を停止する。よって、選択部４２は、その制御信号CSを受信すると、それ以降のウェイイネーブル信号WEの出力を停止するので、無駄なタグデータ読み出しが抑制される。
【００６９】
すなわち、ウェイイネーブル信号WE[0]がHIGHとなることにより、ウェイ#０は動作したが、その後は、ウェイイネーブル信号WE[1]からWE[3]がHIGHとならず、ウェイ#１から#３は動作しない。よって、キャッシュアクセスに関わる消費電力が抑えられる。
【００７０】
なお、キャッシュメモリ１６は、ウェイ#０から読み出されたタグ部のフレームアドレスが、入力されたフレームアドレスFAと一致していなければ、ミスアクセスとなり、次にウェイ#１に対応するウェイイネーブル信号WE[1]をHIGHにし、ウェイ#１から読み出されたタグ部のフレームアドレスが、入力されたフレームアドレスFAと一致しているかを比較する。
【００７１】
一致していれば、比較結果信号Cにおいて、一致信号c1がHIGHとなり、キャッシュヒットとなる。一致していなければ、ミスアクセスとなり、次にウェイ#２に対応するウェイイネーブル信号WE[1]をHIGHにし、ウェイ#２から読み出されたタグ部のフレームアドレスが、入力されたフレームアドレスFAと一致しているかを比較する。以下、同様に、ウェイ#３までキャッシュヒットしているかがチェックされる。
【００７２】
図６は、ウェイ#３でキャッシュヒットした場合のタイミングチャートである。選択部４２は、ウェイイネーブル信号WE[0]から[3]を順番に出力することによって、ウェイ#０から#３を順番に各分割期間において選択して、ウェイ#３で初めてキャッシュヒットしている。図６では、ウェイイネーブル信号WEとして、「０００１」、「００１０」、「０１００」及び「１０００」をそれぞれ示す「１」、「２」、「４」及び「８」が、順番に出力されている。
【００７３】
そして、比較結果信号Cにおいて、一致信号c3がHIGHとなり、キャッシュヒットとなる。図６では、キャッシュヒット[3]信号として、「１０００」を示す「８」が、１CPUサイクルの最後の分割期間において出力されている。
【００７４】
従って、キャッシュヒットがウェイイネーブル信号WE[1]又はWE[2]のタイミングで発生すれば、キャッシュヒット以降は、選択部４２は、ウェイイネーブル信号WEを出力せず、その後は、ウェイイネーブル信号WEがHIGHとならず、キャッシュアクセスに関わる消費電力が抑えられる。
【００７５】
以上のように、キャッシュメモリ１６は、１CPUサイクル中に、４つのウェイに対するタグ比較を４回所定の順番で、ここでは、ウェイ#０から#３の順に、実行しようとする。しかし、４回のうち、途中でキャッシュヒットすると、それ以降のウェイイネーブル信号WEは出力されない。よって、それ以降のウェイ動作に関わる消費電力が抑えられる。
【００７６】
また、以上の例は、CPUコア１５の動作周波数Fが１００MHzで、優先度１の分割数４が設定され、キャッシュメモリ１６は、各ウェイを順番に有効にする順次アクセスモードで動作する場合である。
【００７７】
しかし、CPUコア１５の動作周波数Fが４００MHzに設定された場合、１CPUサイクルを分割できず、キャッシュメモリ１６は、１CPUサイクル中に、４つのウェイに対してウェイイネーブル信号WE[0]から[3]を同時に出力し、４つのウェイを同時に有効にする通常アクセスモードで動作する。
【００７８】
また、キャッシュメモリ１６は、順次アクセスモードと通常アクセスモードとは、異なる中間モードのアクセスモードで、動作可能である。  
具体的には、図４の場合、CPUコア１５の動作周波数Fが１００MHzで、優先度２に対応する分割数２をユーザが指定した場合、あるいは、CPUコア１５の動作周波数Fを２００MHzに設定し、優先度１の分割数２が指定された場合、キャッシュメモリ１６は、中間モードで動作する（後述する２００ＭＨzモード）。
【００７９】
このような場合は、選択部４２は、１CPUサイクルの前半にウェイイネーブル信号WE[0]と[1]を同時に出力し、１CPUサイクルの後半にウェイイネーブル信号WE[2]と[3]を同時に出力する。
【００８０】
図７は、通常アクセスモードNM、順次アクセスモードSM及び中間モードIMの３つのアクセスモードにおける消費電力の状態を概念的に説明するための図である。  
通常アクセスモードNMでは、図７に示すように、４つのウェイが同時に有効にされるので、従来に比べて消費電力の低減はない。  
通常アクセスモードNMは、分割テーブルDTにおいて、分割数が１の場合である。上述した例であれば、CPUコア１５が１００MHzで動作し、優先度３に対応する分割数１が指定されている場合と、CPUコア１５が２００MHzで動作し、優先度２に対応する分割数１が指定されている場合と、CPUコア１５が４００MHzで動作し、優先度１に対応する分割数１が指定されている場合である。
【００８１】
順次アクセスモードSMでは、図７に示すように、一つずつウェイが所定の順番で有効にされるので、消費電力は、通常アクセスモードよりも低減可能である。  
本実施の形態では、ウェイは４つあるので、順次アクセスモードSMは、分割テーブルDTにおいて、分割数が４の場合である。上述した例であれば、CPUコア１５が１００MHzで動作し、優先度１に対応する分割数４が指定されている場合である。
【００８２】
順次アクセスモードSMでは、上述したように、順番に各ウェイを有効にしていくため、途中でキャッシュヒットする場合もあるので、消費電力は通常アクセスモードより低減可能である。上述した図５の場合が消費電力の低減効果が大きいベストの場合であり、その場合タグ比較は１回しか行われず、消費電力は、通常アクセスモードよりも約４分の１に低減している。
【００８３】
上述した図６の場合は消費電力の低減効果が大きくないワーストの場合であり、その場合、タグ比較は４回実行されているが、１CPUサイクル中に４回の比較が実行されるので、１００MHZで動作するCPUコア１５から見たときの、アクセスレイテンシは増加していない。
【００８４】
また、図７において中間モードIMでは、図７に示すように、２分割の前半でキャッシュヒットすれば、消費電力は、通常アクセスモードよりも約２分の１に低減可能である。  
本実施の形態では、ウェイは４つあるので、中間モードIMは、分割テーブルDTにおいて、分割数が２の場合である。上述した例であれば、CPUコア１５が１００MHzで動作し、優先度２に対応する分割数２が指定されている場合と、CPUコア１５が２００MHzで動作し、優先度１に対応する分割数２が指定されている場合である。
【００８５】
中間モードIMの場合、順番に２つずつウェイを有効にしていくため、途中でキャッシュヒットする場合もあるので、消費電力は、通常アクセスモードNMより低減可能である。さらに、中間モードIMの場合、タグ比較は２回実行されるが、１CPUサイクル中に２回の比較が実行されるので、CPUコア１５から見たときの、アクセスレイテンシは増加していない。
【００８６】
以上のように、上述した実施の形態に係るキャッシュメモリでは、選択部４２は、複数のウェイに対する複数のウェイイネーブル信号WEを、１つずつあるいは複数ずつ、所定の順番で、１CPUサイクル中に出力する。そして、途中でキャッシュヒットした場合、ウェイイネーブル信号WEの出力が停止される。その結果、アクセスレイテンシを増加させることなく、キャッシュメモリは、可能な限り低消費電力で動作する。
【００８７】
２．２  アクセスモード変更すなわち分割数変更の動作
次にアクセスモード変更、すなわち分割数変更があるときの動作について説明する。  
始めに、キャッシュメモリ１６の複数のウェイを１つずつ、ここでは４分割して、アクセスするアクセスモードで動作している場合に、動作マージンが大きいとき、すなわちタイミングにおける余裕があるとき、の動作を説明する。なお、複数のウェイを１つずつアクセスするときは、４００MHzのクロックタイミングでアクセスが行われるため、このアクセスモードを、以下、４００MHzモードという。同様に、２００MHz及び１００MHzのクロックタイミングでアクセスが行われるアクセスモードを、それぞれ、以下、２００MHzモード及び１００MHzモードという。さらに、以下の説明において、４つのウェイ＃０から＃３のデータを、それぞれW0からW3とする。また、データ取り込みタイミングは、各期間の立ち上がりエッジの時であり、例えば、期間ｔ１，ｔ２，ｔ３，ｔ４の立ち上がりエッジの時は、T1,T2,T3,T4とする。
【００８８】
図８は、キャッシュメモリ１６が４００MHzモードで動作し、かつ動作マージンが大きいときの、FF５１、５２の入力データと出力データ、及び比較器６１の出力の状態を示すタイミングチャートである。図８において、期間ｔ１からｔ４が、CPUコア１５における１CPUサイクルである。
【００８９】
ウェイセレクタ３５の出力であるリードデータであるウェイ＃０のデータW0が、FF５１に遅れなく入力され、FF５２には、バッファ回路５２ａの遅れ分だけ遅れて入力されている。このとき、FF５２の入力データは、FF５２のデータ取り込みタイミングである期間ｔ２の立ち上がりエッジの時T2よりも十分に早く確定しているため、期間ｔ２において、FF５１の出力データとFF５２の出力データは同一となる。そのため、比較器６１の出力は「０」になる。
【００９０】
続く期間ｔ２からｔ４においても、FF５１とFF５２への入力データであるデータW1からW3は、それぞれのデータ取り込みタイミングにおいて十分に早く確定しているため、比較器６１の出力は「０」になる。
【００９１】
順序回路６３は、キャッシュメモリ１６が４００MHzモードで動作しており、かつ期間ｔ２における比較器６１の出力が「０」であるので、４００MHzモードのタイミング違反は無し、として、キャッシュアクセスコントローラ１６ａの分割数指定部４３に、分割数変更信号DNCを出力しない。
【００９２】
なお、このとき、順序回路６３は、４００MHzモードのタイミング違反のないことを示す信号を、出力するようにしてもよい。さらになお、当然に、２００MHzのアクセスモード（以下、２００MHzモードいう）のタイミング違反もないので、順序回路６３は、２００MHzモードのタイミング違反のないことを示す信号も出力するようにしてもよい。そして、分割数指定部４３において、現在のキャッシュメモリ１６のアクセスモードと、タイミング違反の有無の信号とに基づいて、アクセスモードの変更が行われるようにしてもよい。以下に説明するアクセスモード時における動作においても同様である。
【００９３】
ａ）４００MHzモードで、４００MHzの動作マージンが小さいとき
次に、キャッシュメモリ１６が４００MHzモード（分割数が４）で動作している場合に、動作マージンが小さくタイミング違反があるときの動作を説明する。
【００９４】
図９は、キャッシュメモリ１６が４００MHzモードで動作していて、動作マージンが小さいときの、FF５１、５２の入力データと出力データ、及び比較器６１の出力の状態を示すタイミングチャートである。
【００９５】
チップの温度上昇等により、ウェイセレクタ３５の出力であるリードデータであるデータW0が、矢印A1で示すように、FF５１に遅れて入力され、FF５１のデータ取り込みタイミングであるT2に近づいている。一方、FF５２には、バッファ回路５２ａの遅れ分だけ遅れて入力され、データW0は、FF５２のデータ取り込みタイミングであるT2において、確定していない。データW0は、期間ｔ３の立ち上がりエッジのT3で確定して取り込まれる。その結果、期間ｔ２において、FF５１の出力データとFF５２の出力データは、不一致となる。そのため、比較器６１の出力は「１」になる。
【００９６】
順序回路６３は、キャッシュメモリ１６が４００MHzモードで動作しており、かつ期間ｔ２における比較器６１の出力が「１」であるので、４００MHzモードのタイミング違反が有り、として、キャッシュアクセスコントローラ１６ａの分割数指定部４３に、分割数変更信号DNCを出力する。すなわち、判定部としての順序回路６３は、複数の比較器からの比較結果である不一致の情報と、不一致のタイミング情報である期間の情報とに基づいて、分割数を減少させる判定を行って、分割数を４から２に変更する分割数変更信号DNCを出力する。
【００９７】
その結果、分割数指定部４３は、キャッシュメモリ１６が４００MHzモードで動作しており、かつ期間ｔ２における比較器６１の出力が「１」であるので、分割数を４から２へ減少させるように、アクセスモードを変更する。なお、この分割数の変更は、図９において、期間ｔ４に続く次の１CPUサイクル以降に行われる。例えば、キャッシュアクセスコントローラ１６ａは、リード動作が完了した後の次の１CPUサイクルにおいて、アクセスモードを２００MHzモードへ移行する。
【００９８】
ｂ）２００MHzモードで、４００MHzモードの動作マージンは小さく、かつ２００MHzモードの動作マージンが大きいとき
次に、キャッシュメモリ１６が２００MHzモード（分割数が２）で動作している場合に、４００MHzモードの動作マージンが小さく、かつ２００MHzモードの動作マージンが大きいときの動作を説明する。
【００９９】
図１０は、キャッシュメモリ１６が２００MHzモードで動作していて、４００MHzモードの動作マージンは小さく、２００MHモードの動作マージンが大きいときの、FF５１〜５４の入力データと出力データ、及び比較器６１、６２の出力の状態を示すタイミングチャートである。
【０１００】
チップの温度上昇等により、ウェイセレクタ３５の出力であるリードデータが、矢印A2で示すように、FF５３に遅れて入力され、FF５４にはバッファ回路５４ａの遅れ分だけ遅れて入力されるが、FF５３と５４の入力データは、ウェイ＃０のデータW0かウェイ＃１のデータW1のいずれかであるが、FF５３と５４のデータ取り込みタイミングである期間ｔ３の立ち上がりエッジの時において、確定している。そのため、FF５３と５４の入力データは、期間ｔ３の立ち上がりエッジで取り込まれる。その結果、期間ｔ３において、FF５３の出力データとFF５４の出力データは、一致する。そのため、比較器６２の出力は「０」になる。期間ｔ４、ｔ５においても、比較器６２の出力は「０」になる。
【０１０１】
順序回路６３は、キャッシュメモリ１６が２００MHzモードで動作しており、かつ期間ｔ３における比較器６２の出力が「０」であるので、２００MHzモードのタイミング違反は無し、として、キャッシュアクセスコントローラ１６ａの分割数指定部４３に、分割数変更信号DNCを出力しない。  
一方、FF５１と５２にも、ウェイセレクタ３５の出力であるリードデータが、矢印A2で示すように、FF５１に遅れて入力され、FF５２にはバッファ回路５２ａの遅れ分だけ遅れて入力される。FF５２の入力データは、FF５２のデータ取り込みタイミングである期間ｔ２の立ち上がりエッジの時T2において、不定値である。その結果、期間ｔ２において、FF５１の出力データとFF５２の出力データは、不一致となり、比較器６１の出力は「１」になる。
【０１０２】
しかし、FF５１と５２の入力データは、次の期間ｔ３の立ち上がりエッジの時T3において確定しており、期間ｔ３において、FF５１の出力データとFF５２の出力データは同一となり、比較器６１の出力は「０」になる。
【０１０３】
さらに、続く期間ｔ４では、FF５１には次のリードデータ（W2/3）が、すなわちウェイ＃２のデータW2かウェイ＃３のデータW3のいずれかが、FF５１のデータ取り込みタイミングである期間ｔ４の立ち上がりエッジの時T4において確定している。一方、FF５２の入力データは、期間ｔ４の立ち上がりエッジの時T4においては、まだ次のリードデータ（W2/3）は入力されておらず、前のリードデータ（W0/1）、すなわちウェイ＃０のデータW0かウェイ＃１のデータW1のいずれか、である。そのため、期間ｔ４において、FF５１の出力データとFF５２の出力データは、不一致となり、比較器６１の出力は「１」になる。  
期間ｔ４に続く次の期間ｔ５は、期間ｔ３の場合と同様であり、比較器６１の出力は「０」になる。
【０１０４】
以上のように、順序回路６３は、キャッシュメモリ１６が２００MHzモードで動作しており、かつ比較器６２の出力が期間ｔ３において「０」であるので、４００MHzモードの動作マージンは小さいが、２００MHzモードの動作マージンは大きいとして、キャッシュアクセスコントローラ１６ａの分割数指定部４３に、アクセスモードを変更させる分割数変更信号DNCを出力しない。その結果、キャッシュアクセスコントローラ１６ａは、２００MHzモードを維持する。
【０１０５】
ｃ）２００MHzモードで、２００MHzモードの動作マージンが小さいとき
次に、キャッシュメモリ１６が２００MHzモード（分割数が２）で動作している場合に、２００MHzモードの動作マージンが小さいときの動作を説明する。
【０１０６】
図１１は、キャッシュメモリ１６が２００MHzモードで動作していて、２００MHzモードの動作マージンが小さいときの、FF５１〜５４の入力データと出力データ、及び比較器６１、６２の出力の状態を示すタイミングチャートである。
【０１０７】
さらなるチップの温度上昇等により、ウェイセレクタ３５の出力であるリードデータが、すなわちウェイ＃０のデータW0かウェイ＃１のデータW1のいずれかが、矢印A3で示すように、FF５３に大きく遅れて入力される。そのリードデータは、FF５４にはバッファ回路５４ａの遅れ分だけさらに遅れて入力される。FF５３の入力データは、FF５３のデータ取り込みタイミングである期間ｔ３の立ち上がりエッジの時T3において、確定している。しかし、５４の入力データは、FF５４のデータ取り込みタイミングである期間ｔ３の立ち上がりエッジの時T3において、確定していない不定値である。その結果、期間ｔ３とｔ４において、FF５３の出力データとFF５４の出力データは、不一致となり、比較器６２の出力は「１」になる。
【０１０８】
順序回路６３は、キャッシュメモリ１６が２００MHzモードで動作しており、かつ期間ｔ３における比較器６２の出力が「１」であるので、２００MHzモードのタイミング違反が有り、として、キャッシュアクセスコントローラ１６ａの分割数指定部４３に、分割数変更信号DNCを出力する。すなわち、分割数を２から１に変更する信号が出力される。  
期間ｔ５の立ち上がりエッジの時T5では、FF５３の入力データはウェイ＃２のデータW2かウェイ＃３のデータW3のいずれかで確定しているが、FF５４の入力データは、まだウェイ＃０のデータW0かウェイ＃１のデータW1のいずれかであるため、比較器６２の出力は、「１」となる。
【０１０９】
一方、FF５１と５２にも、ウェイセレクタ３５の出力であるリードデータが、矢印A3で示すように、FF５１に大きく遅れて入力され、FF５２にはバッファ回路５２ａの遅れ分だけさらに遅れて入力される。ＦＦ５１とＦＦ５２の出力データは、期間ｔ２においては、確定していないため、比較器６１の出力は「１」となる。
【０１１０】
FF５１の入力データは、FF５１のデータ取り込みタイミングである期間ｔ３の立ち上がりエッジの時T3において、確定している。しかし、FF５２の入力データは、FF５２のデータ取り込みタイミングである期間ｔ３の立ち上がりエッジの時T3において、確定していない。その結果、期間ｔ３において、FF５１の出力データとFF５２の出力データは、不一致となる。そのため、比較器６１の出力は「１」になる。
【０１１１】
しかし、FF５１と５２の入力データは、次の期間ｔ４の立ち上がりエッジの時T4において確定しており、期間ｔ４において、FF５１の出力データとFF５２の出力データは同一となる。そのため、比較器６１の出力は「０」になる。
【０１１２】
さらに、期間ｔ４に続く次の期間ｔ５では、FF５１には次のリードデータ（W2/3）、すなわちウェイ＃２のデータW2かウェイ＃３のデータW3のいずれか、が入力され、FF５１のデータ取り込みタイミングである期間ｔ５の立ち上がりエッジの時T5において確定している。しかし、FF５２の入力データは、次の期間ｔ５の立ち上がりエッジの時T5においては、まだ次のリードデータ（W2/3）は入力されておらず、前のリードデータ（W0/1）である。そのため、次の期間ｔ５において、FF５１の出力データとFF５２の出力データは、不一致となる。そのため、比較器６１の出力は「１」になる。
【０１１３】
期間ｔ５に続く次の期間は、期間ｔ３の場合と同様であり、比較器６１の出力は「０」になる。
【０１１４】
順序回路６３は、キャッシュメモリ１６が２００MHzモードで動作しており、かつ比較器６２の出力が期間ｔ３において「１」であるので、２００MHzモードの動作マージンは小さいとして、キャッシュアクセスコントローラ１６ａの分割数指定部４３に、分割数変更信号DNCを出力する。すなわち、分割数を２から１に変更する信号が出力される。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを、１００ＭＨzモードに変更する。
【０１１５】
ｄ）２００ＭＨzモードで、２００MHzモードと４００MHzモードの動作マージンが共に大きいとき
次に、キャッシュメモリ１６が２００MHzモード（分割数が２）で動作している場合に、２００MHzモードと４００MHzモードの動作マージンが共に大きいときの動作を説明する。
【０１１６】
図１２は、キャッシュメモリ１６が２００MHzモードで動作していて、２００MHzモードと４００MHzモードの動作マージンが共に大きいときの、FF５１〜５４の入力データと出力データ、及び比較器６１、６２の出力の状態を示すタイミングチャートである。これは、過去に動作状態が悪化して４００MHzモードから２００MHzモードにアクセスモードが移行したが、その後に、動作状態が改善された場合である。
【０１１７】
その後のチップの温度低下等により、ウェイセレクタ３５の出力であるリードデータが、矢印A4で示すように、FF５３に遅れて入力され、FF５４にはバッファ回路５４ａの遅れ分だけさらに遅れて入力されても、FF５３と５４の入力データは、FF５３と５４のデータ取り込みタイミングである期間ｔ３の立ち上がりエッジの時T3において、確定している。その結果、期間ｔ３とｔ４において、FF５３の出力データとFF５４の出力データは、一致する。そのため、比較器６２の出力は「０」になる。
【０１１８】
期間ｔ３，ｔ４に続く次の期間においても同様の動作となる。
【０１１９】
一方、FF５１と５２にも、ウェイセレクタ３５の出力であるリードデータが、矢印A4で示すように、FF５１に遅れて入力され、FF５２にはバッファ回路５２ａの遅れ分だけさらに遅れて入力される。FF５１と５２の入力データは、FF５１と５２のそれぞれのデータ取り込みタイミングである期間ｔ２の立ち上がりエッジの時T2において、確定している。その結果、期間ｔ２において、FF５１の出力データとFF５２の出力データは、一致する。そのため、比較器６１の出力は「０」になる。
【０１２０】
期間ｔ２に続く次の期間ｔ３においても、FF５１と５２には同じデータが入力されているので、期間ｔ２の場合と同様に、比較器６１の出力は「０」になる。  
期間ｔ３に続く次の期間以降も、期間ｔ２，ｔ３の場合と同様であり、比較器６１の出力は「０」になる。
【０１２１】
順序回路６３は、キャッシュメモリ１６が２００MHzモードで動作しており、かつ比較器６１の出力は、期間ｔ２で「０」であるので、２００MHzモードと４００MHzモードの２つの動作マージンは大きいとして、キャッシュアクセスコントローラ１６ａの分割数指定部４３に、アクセスモードを変更する分割数変更信号DNCを出力する。
【０１２２】
すなわち、判定部としての順序回路６３は、複数の比較器からの比較結果である一致の情報と、一致のタイミング情報である期間とに基づいて、分割数を増加させる判定を行って、分割数を２から４に変更する分割数変更信号DNCを出力する。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを、次の１CPUサイクル以降のサイクルに、４００ＭＨzモードに変更する。
【０１２３】
ｅ）１００ＭＨzモードで、２００MHzモードの動作マージンが小さいとき
次に、キャッシュメモリ１６が１００MHzモード（分割数が１）で動作している場合に、２００MHzモードの動作マージンが小さいときの動作を説明する。
【０１２４】
図１３は、キャッシュメモリ１６が１００MHzモードで動作していて、２００MHzモードの動作マージンが小さいときの、FF５１〜５４の入力データと出力データ、及び比較器６１、６２の出力の状態を示すタイミングチャートである。これは、過去に動作状態が悪化してアクセスモードが１００MHzモードに移行し、その後も、動作状態が改善されていない場合である。
【０１２５】
ウェイセレクタ３５の出力であるリードデータDが、すなわち、ウェイ＃０のデータW0、ウェイ＃１のデータW1、ウェイ＃２のデータW2、あるいはウェイ＃３のデータW3のいずれかが、矢印A5で示すように、FF５３に遅れて入力され、FF５４にはバッファ回路５４ａの遅れ分だけさらに遅れて入力されても、FF５３の入力データは、FF５３のデータ取り込みタイミングである期間ｔ３の立ち上がりエッジの時T3において、確定している。しかし、FF５４の入力データは、FF５４のデータ取り込みタイミングである期間ｔ３の立ち上がりエッジの時T3において、確定していない。その結果、期間ｔ３とｔ４において、FF５３の出力データとFF５４の出力データは、不一致となる。そのため、比較器６２の出力は「１」になる。
【０１２６】
しかし、FF５３と５４の入力データは、FF５３と５４のデータ取り込みタイミングである期間ｔ５の立ち上がりエッジの時T5において、確定している。その結果、期間ｔ３とｔ４に続く期間ｔ５とその次の期間では、FF５３の出力データとFF５４の出力データは、一致する。そのため、比較器６２の出力は「０」になる。  
そして、期間ｔ３，ｔ４に続く期間ｔ５及びそれに続く期間においても同様の動作となる。
【０１２７】
一方、FF５１と５２にも、ウェイセレクタ３５の出力であるリードデータが、矢印A5で示すように、FF５１に遅れて入力され、FF５２にはバッファ回路５２ａの遅れ分だけさらに遅れて入力される。FF５１と５２の入力データは、FF５１と５２のそれぞれのデータ取り込みタイミングである期間ｔ２の立ち上がりエッジの時T2において、確定しておらず、不定値であるため、期間ｔ２において、FF５１の出力データとFF５２の出力データは、不一致となり、比較器６１の出力は「１」になる。
【０１２８】
FF５１の入力データは、FF５１のデータ取り込みタイミングである期間ｔ３の立ち上がりエッジの時T3において、確定しているが、FF５２の入力データは、T3において、確定しておらず、値は不定であるため、期間ｔ３において、FF５１の出力データとFF５２の出力データは、不一致となり、比較器６１の出力は「１」になる。
【０１２９】
期間ｔ３に続く次の期間ｔ４においては、FF５１と５２のそれぞれの入力データは確定しており、かつ同じデータが入力されているので、比較器６１の出力は「０」になる。  
期間ｔ４に続く次の期間ｔ５とその次の期間でも、FF５１の出力データとFF５２の出力データは一致しているので、比較器６１の出力は「０」になる。
【０１３０】
順序回路６３は、キャッシュメモリ１６が１００MHzモードで動作しており、かつ比較器６２の出力が期間ｔ３において「１」であるので、２００MHzモードの動作マージンは小さいとして、キャッシュアクセスコントローラ１６ａの分割数指定部４３に、アクセスモードを変更させる分割数変更信号DNCを出力しない。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを、１００ＭＨzモードに、維持する。
【０１３１】
ｆ）１００ＭＨzモードで、２００MHzモードの動作マージンが大きいとき
次に、キャッシュメモリ１６が１００MHzモード（分割数が１）で動作している場合に、２００MHzモードの動作マージンが大きいときの動作を説明する。
【０１３２】
図１４は、キャッシュメモリ１６が１００MHzモードで動作していて、２００MHzモードの動作マージンが大きいときの、FF５１〜５４の入力データと出力データ、及び比較器６１、６２の出力の状態を示すタイミングチャートである。これは、過去に動作状態が悪化してアクセスモードが１００MHzモードに移行し、その後に、動作状態が改善されている場合である。
【０１３３】
ウェイセレクタ３５の出力であるリードデータが、矢印A6で示すように、FF５３に遅れて入力され、FF５４にはバッファ回路５４ａの遅れ分だけさらに遅れて入力されても、FF５３の入力データとFF５４の入力データは、FF５３とFF５４のデータ取り込みタイミングである期間ｔ３の立ち上がりエッジの時T3において、確定している。その結果、期間ｔ３とｔ４において、FF５３の出力データとFF５４の出力データは、一致し、比較器６２の出力は「０」になる。
【０１３４】
また、FF５３と５４の入力データは、FF５３と５４のデータ取り込みタイミングである期間ｔ５の立ち上がりエッジの時T5においても、確定している。その結果、期間ｔ３とｔ４に続く期間ｔ５とその次の期間では、FF５３の出力データとFF５４の出力データは、一致し、比較器６２の出力は「０」になる。
【０１３５】
一方、FF５１と５２にも、ウェイセレクタ３５の出力であるリードデータが、矢印A6で示すように、FF５１に遅れて入力され、FF５２にはバッファ回路５２ａの遅れ分だけさらに遅れて入力される。FF５１と５２の入力データは、FF５１と５２のそれぞれのデータ取り込みタイミングである期間ｔ２の立ち上がりエッジの時T2において、確定しておらず、値は不定であるため、期間ｔ２において、FF５１の出力データとFF５２の出力データは、不一致となり、比較器６１の出力は「１」になる。
【０１３６】
FF５１とFF５２のそれぞれの入力データは、FF５１とFF５２のデータ取り込みタイミングである期間ｔ３の立ち上がりエッジの時T3において、確定しており、期間ｔ３において、FF５１の出力データとFF５２の出力データは、一致し、比較器６１の出力は「０」になる。
【０１３７】
期間ｔ３に続く次の期間ｔ４においても、FF５１と５２のそれぞれの入力データは確定しており、かつ同じデータが入力されているので、比較器６１の出力は「０」になる。  
期間ｔ４に続く次の期間ｔ５とその次の期間でも、FF５１の出力データとFF５２の出力データは一致しているので、比較器６１の出力は「０」になる。
【０１３８】
順序回路６３は、キャッシュメモリ１６が１００MHzモードで動作しており、かつ比較器６２の出力が期間ｔ３において「０」であるので、２００MHzモードの動作マージンは大きいとして、キャッシュアクセスコントローラ１６ａの分割数指定部４３に、アクセスモードを変更する分割数変更信号DNCを出力する。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを、２００MHzモードに変更する。
【０１３９】
以上のように、判定部としての順序回路６３は、複数の比較器からの比較結果である一致あるいは不一致の情報と、一致あるいは不一致のタイミング情報である期間とに基づいて、分割数を増加、あるいは減少させる判定を行って、必要な分割数変更信号DNCを出力する。
【０１４０】
従って、本実施の形態のキャッシュメモリ装置は、複数のウェイの選択をキャッシュヒットすると、それ以降の選択を停止し、かつ、複数の比較器の出力状態とキャッシュメモリ１６のアクセスモードとに基づいて、アクセスモードの変更をするようにしたので、通常アクセスモードと同等のキャッシュヒット性能を持ちつつ、可能な限りの低消費電力で動作することができる。
【０１４１】
（第２の実施の形態）
次に、本発明の第２の実施の形態を説明する。  
１．構成
第１の実施の形態では、キャッシュメモリ１６は、分割数変更部１６ｂには、複数の、例としては２つの、比較器を有して、複数の、例としては２つの、アクセスモードのタイミング違反を検出していた。本実施の形態では、複数のアクセスモードのタイミング違反を検出するための複数の比較器を設ける代わりに、１つのアクセスモードのタイミング違反を検出するための比較器の出力パターンに基づいて、分割数の変更をするようにした。
【０１４２】
本実施の形態に係わるプロセッサにおいて、第１の実施の形態と同じ構成要素については、同じ符号を付し、説明は省略する。本実施の形態のプロセッサは、分割数変更部の構成が、図１のプロセッサ１と異なる。
【０１４３】
図１５は、第２の実施の形態に係る、キャッシュメモリ１６Aの構成例を説明するための図である。図１５において、図３と同じ構成要素については、同じ符号を付し、説明は省略する。
【０１４４】
図１５に示すように、分割数変更部１６ｃは、４００ＭＨzのタイミング違反を検出するための２つのFF５１と５２と、比較器６１と、順序回路６４とを含む。分割数変更部１６ｃでは、図３における２００MHzで動作するFF５３，５４と、その後段に接続される比較器６２が取り除かれている。
【０１４５】
順序回路６４は、パターンデータ記憶部６４ａを有しており、パターンデータ記憶部６４ａには、一致あるいは不一致のタイミングのパターンデータが予め記憶されている。判定部としての順序回路６４は、比較器６１から入力された一致あるいは不一致のタイミング情報である出力パターンと、パターンデータ記憶部６４ａに記憶されたパターンデータとを比較し、一致したパターンデータに対応する分割数変更信号DNCを、分割数指定部４３に出力する。
【０１４６】
本実施の形態に係るキャッシュメモリでは、分割数の変更は、パターンデータ記憶部６４ａに記憶されたパターンデータに基づいて行われる。
【０１４７】
以下、アクセスモードと動作マージンの状態毎に、比較器６１の出力パターンと、パターンデータ記憶部６４ａに記憶されたパターンデータとに基づくキャッシュメモリ１６の動作について説明する。
【０１４８】
２．動作
始めに、キャッシュアクセスコントローラが４００MHzモードで動作し、４００MHzの動作マージンが大きいことは、上述した図８における比較器６１の出力パターンの期間ｔ２において、信号が「０」になっていることから判断される。
【０１４９】
すなわち、パターンデータ記憶部６４ａに、４００MHzモード時に、期間ｔ２におけるデータ「０」が記憶され、その記憶されたパターンデータと比較器６１の出力パターンが比較される。そして、このとき、順序回路６４は、４００MHzの動作マージンが大きいので、分割数変更信号DNCを出力しない。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを４００MHzモードに維持する。
【０１５０】
そのため、パターンデータ記憶部６４ａには、次のパターンデータＰ０が記憶されている。
【０１５１】
Ｐ０：＊  ０  ＊  ＊
なお、このパターンデータでは、「＊」は、いずれの値でもよいことを示し、期間ｔ１，ｔ２，ｔ３，ｔ４の順番の値が示されている（以下、同じ）。
【０１５２】
ａ）４００MHzモードで、４００MHzの動作マージンが小さいとき
４００MHzモードで動作している時に、４００MHzの動作マージンが小さいことは、上述した図９における比較器６１の出力が、期間ｔ２において、「１」になっていることから判断される。
【０１５３】
そのため、パターンデータ記憶部６４ａには、次のパターンデータＰａが記憶されている。  
Ｐａ：＊  １  ＊  ＊
すなわち、パターンデータ記憶部６４ａに、４００MHzモード時に、期間ｔ２におけるデータ「１」が記憶され、その記憶されたパターンデータと比較器６１の出力パターンが比較される。そして、この出力パターンの場合、４００MHzの動作マージンが小さいので、順序回路６４は、分割数変更信号DNCを出力する。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを４００MHzモードから２００MHzモードに移行する。
【０１５４】
ｂ）２００MHzモードで、４００MHzモードの動作マージンは小さく、かつ２００MHzモードの動作マージンが大きいとき
２００MHzモード動作時に、４００MHzの動作マージンは小さい（すなわち４００MHzのタイミング違反がある）が、２００MHz動作の動作マージンが大きいことは、上述した図１０の比較器６１の出力が、期間ｔ２において「１」で、期間ｔ３において「０」になっていることから判断される。
【０１５５】
そのため、パターンデータ記憶部６４ａには、次のパターンデータＰｂが記憶されている。  
Ｐｂ：＊  １  ０  ＊
すなわち、パターンデータ記憶部６４ａに、４００MHzモード時に、期間ｔ２におけるデータが「１」で、期間ｔ３におけるデータ「０」が記憶され、その記憶されたパターンデータと比較器６１の出力パターンが比較される。そして、ここの出力パターンの場合、４００MHzの動作マージンが小さく、かつ２００MHzモードの動作マージンが大きいので、順序回路６４は、分割数変更信号DNCを出力しない。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを２００MHzモードに維持する。
【０１５６】
ｃ）２００MHzモードで、２００MHzモードの動作マージンは小さいとき
２００MHzモード動作時に、２００MHz動作の動作マージンが小さいことは、上述した図１１の比較器６１の出力が、期間ｔ２において「１」で、期間ｔ３において「１」になっていることから判断される。
【０１５７】
そのため、パターンデータ記憶部６４ａには、次のパターンデータＰｃが記憶されている。  
Ｐｃ：＊  １  １  ＊
すなわち、パターンデータ記憶部６４ａに、２００ＭＨzモード時に、期間ｔ２におけるデータが「１」で、期間ｔ３におけるデータ「１」が記憶され、その記憶されたパターンデータと比較器６１の出力パターンが比較される。そして、この出力パターンの場合、２００MHzの動作マージンが小さいので、順序回路６４は、分割数変更信号DNCを出力する。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを２００MHzモードから１００MHzモードに移行する。
【０１５８】
ｄ）２００MHzモードで、２００MHzモードと４００MHzモードの動作マージンが共に大きいとき
２００MHzモード動作時に、４００MHzの動作マージンが大きいことは、上述した図１２の比較器６１の出力が、期間ｔ２において「０」になっていることから判断される。
【０１５９】
そのため、パターンデータ記憶部６４ａには、次のパターンデータＰｄが記憶されている。  
Ｐｄ：＊  ０  ＊  ＊
すなわち、パターンデータ記憶部６４ａに、２００MHzモード時に、期間ｔ２におけるデータ「０」が記憶され、その記憶されたパターンデータと比較器６１の出力パターンが比較される。そして、この出力パターンの場合、２００MHzモードと４００MHzモードの動作マージンが共に大きいので、順序回路６４は、分割数変更信号DNCを出力する。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを２００MHzモードから４００MHzモードに移行する。
【０１６０】
ｅ）１００MHzモードで、２００MHzモードの動作マージンが小さいとき
１００MHzモード動作時に、２００MHzの動作マージンが小さいことは、上述した図１３の比較器６１の出力が、期間ｔ３において「１」になっていることから判断される。
【０１６１】
そのため、パターンデータ記憶部６４ａには、次のパターンデータＰｅが記憶されている。  
Ｐｅ：＊  ＊  １  ＊
すなわち、パターンデータ記憶部６４ａに、１００MHzモード時に、期間ｔ３におけるデータ「１」が記憶され、その記憶されたパターンデータと比較器６１の出力パターンが比較される。そして、この出力パターンの場合、２００MHzモードの動作マージンが小さいので、順序回路６４は、分割数変更信号DNCを出力しない。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを１００MHzモードに維持する。
【０１６２】
ｆ）１００MHzモードで、２００MHzモードの動作マージンが大きいとき
１００MHzモード動作時に、２００MHzの動作マージンが大きいことは、上述した図１４の比較器６１の出力が、期間ｔ３において「０」になっていることから判断される。
【０１６３】
そのため、パターンデータ記憶部６４ａには、次のパターンデータＰｆが記憶されている。  
Ｐｆ：＊  ＊  ０  ＊
すなわち、パターンデータ記憶部６４ａに、１００MHzモード時に、期間ｔ３におけるデータ「０」が記憶され、その記憶されたパターンデータと比較器６１の出力パターンが比較される。そして、この出力パターンの場合、２００MHzモードの動作マージンが大きいので、順序回路６４は、分割数変更信号DNCを出力する。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを１００MHzモードから２００MHzモードに移行する。
【０１６４】
以上に説明したように、アクセスモード毎に、上述したような一致あるいは不一致のタイミングのパターンデータすなわちパターン情報を、パターンデータ記憶部６４ａに予め記憶させておき、比較器６１の出力パターン、すなわちリードデータの一致あるいは不一致のタイミング情報である出力パターンと比較することによって、動作マージンを判定でき、適切にアクセスモードを変更することができる。
【０１６５】
従って、本実施の形態によれば、第１の実施の形態における一つのタイミング違反検出用のFFと比較器を取り除いても、第１の実施の形態と同様の効果を生じ得、さらに、第１の実施の形態に比べてハードウェア資源を減らすことができる。
【０１６６】
（第３の実施の形態）
次に、本発明の第３の実施の形態を説明する。  
１．構成
上述した２つの実施の形態では、４００MHzのタイミング違反と２００MHzのタイミング違反を検出するために、２つのFFのうち一方の入力段に、遅延用のバッファ回路を設け、２つのFFの出力データの比較を行っている。これに対して、本実施の形態では、比較器の代わりに、データの誤りを検出する回路、例えば、パリティ検査回路、CRC回路等を利用して、動作マージンの大小が判断される。これは、タイミング違反が発生したFFが保持する値は不定値となり、偶奇パリティ、CRC等を含むデータの整合性が取れなくなるということを利用している。
【０１６７】
本実施の形態に係わるプロセッサにおいて、第１の実施の形態と同じ構成要素については、同じ符号を付し、説明は省略する。本実施の形態のプロセッサは、分割数変更部の構成が、図１のプロセッサ１と異なる。
【０１６８】
図１６は、第３の実施の形態に係る、キャッシュメモリ１６Bの構成例を説明するための図である。図１６において、図３と同じ構成要素については、同じ符号を付し、説明は省略する。
【０１６９】
図１６に示すように、分割数変更部１６ｄは、リードデータが入力される遅延用のバッファ回路５２ａと、そのバッファ回路５２ａの出力データを入力データとして入力するFF５２と、FF５２の出力データが入力されるパリティ検査回路７１と、順序回路６５とを含む。
【０１７０】
順序回路６５のパターンデータ記憶部６５ａには、パターンデータが予め記憶されており、順序回路６５は、パリティ検査回路７１の出力パターンと、パターンデータ記憶部６５ａに記憶されたパターンデータとを比較し、一致したパターンデータに対応する分割数変更信号DNCを、分割数指定部４３に出力する。
【０１７１】
本実施の形態に係るキャッシュメモリでは、分割数の変更は、パターンデータ記憶部６５ａに記憶されたパターンデータ、すなわちデータの誤り情報、に基づいて行われる。なお、データの誤り情報に基づくとは、データの誤り情報に基づくあるいは、正しいデータの情報に基づく、のいずれの場合も含む。
【０１７２】
以下、アクセスモードと動作マージンの状態毎に、パリティ検査回路７１の出力パターンと、パターンデータ記憶部６５ａに記憶されるパターンデータとに基づくキャッシュメモリ１６Bの動作について説明する。
【０１７３】
２．動作
始めに、キャッシュアクセスコントローラが４００MHzモードで動作し、４００MHzの動作マージンが大きい場合について説明する。  
図１７は、キャッシュアクセスコントローラが４００MHzモードで動作し、４００MHzの動作マージンが大きいときの、CPUコア１５のリードデータと、FF５２の入力データと出力データ、及びパリティ検査回路７１の出力の状態を示すタイミングチャートである。
【０１７４】
図１７の場合、リードデータの遅延量が少なく、期間ｔ２において、FF５２が正しくウェイ＃０のリードデータを取り込んでいる。FF５２の後段に接続されたパリティ検査回路７１は、リードデータとそれに付与されたパリティビットの整合性を確かめ、正常であることを示す「０」を出力している。そのため、次のCPUサイクルにおいても、キャッシュアクセスコントローラ１６ａは、４００MHz動作を維持する。
【０１７５】
すなわち、パターンデータ記憶部６５ａに、４００MHzモード時に、期間ｔ２におけるデータが「０」が予め記憶され、その記憶されたパターンデータとパリティ検査回路７１の出力パターンが比較される。このとき、順序回路６５は、４００MHzの動作マージンが大きいので、分割数変更信号DNCを出力しない。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを４００MHzモードに維持する。
【０１７６】
そのため、パターンデータ記憶部６５ａには、次のパターンデータＰ０が記憶されている。
【０１７７】
Ｐ０：＊  ０  ＊  ＊
ａ）４００MHzモードで、４００MHzの動作マージンが小さいとき
図１８は、４００MHzモードで動作している時に、４００MHzの動作マージンが小さいときの、CPUコア１５のリードデータと、FF５２の入力データと出力データ、及びパリティ検査回路７１の出力の状態を示すタイミングチャートである。
【０１７８】
図１８の場合、矢印A11で示すように、リードデータの遅延量が多く、期間ｔ２において、FF５２が正しくウェイ＃０のリードデータを取り込めず、不定値を含んだデータを取り込む。よって、FF５２の出力データは、不定値となり、パリティ検査回路７１においてエラーが検出される。その結果、パリティ検査回路７１は、エラーを示す「１」を出力している。そのため、次のCPUサイクルにおいて、キャッシュアクセスコントローラ１６ａは、２００MHz動作に移行する。
【０１７９】
４００MHzモードで動作している時に、４００MHzの動作マージンが小さいことは、上述した図１８におけるパリティ検査回路７１の出力が、期間ｔ２において、「１」になっていることから判断される。
【０１８０】
そのため、パターンデータ記憶部６５ａには、次のパターンデータＰａが記憶されている。  
Ｐａ：＊  １  ＊  ＊
すなわち、パターンデータ記憶部６５ａに、４００MHzモード時に、期間ｔ２におけるデータとして「１」が予め記憶され、その記憶されたパターンデータとパリティ検査回路７１の出力パターンが比較される。このとき、順序回路６５は、４００MHzの動作マージンが小さいので、分割数変更信号DNCを出力する。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを４００MHzモードから２００MHzモードに移行する。
【０１８１】
ｂ）２００MHzモードで、４００MHzモードの動作マージンは小さく、かつ２００MHzモードの動作マージンが大きいとき
図１９は、２００MHzモードで動作している時に、４００MHzの動作マージンが小さく、かつ２００MHzモードの動作マージンが大きいときの、CPUコア１５のリードデータと、FF５２の入力データと出力データ、及びパリティ検査回路７１の出力の状態を示すタイミングチャートである。
【０１８２】
図１９の場合、矢印A12で示すように、リードデータの遅延量が多く、期間ｔ２において、FF５２が正しくウェイ＃０又は＃１のリードデータを取り込めず、不定値を含んだデータを取り込む。よって、FF５２の出力データは、不定値となり、パリティ検査回路７１においてエラーが検出される。その結果、パリティ検査回路７１は、エラーを示す「１」を出力している。次の期間ｔ３では、FF５２の出力データは、正しくウェイ＃０又は＃１のリードデータを取り込んでいるため、パリティ検査回路７１は、「０」を出力する。
【０１８３】
しかし、その次の期間ｔ４では、期間ｔ２と同様に、FF５２が正しくウェイ＃２又は＃３のリードデータを取り込めず、FF５２の出力データは、不定値となり、パリティ検査回路７１は、エラーを示す「１」を出力している。次の期間ｔ５では、FF５２の出力データは、正しくウェイ＃２又は＃３のリードデータを取り込んでいるため、パリティ検査回路７１は、「０」を出力する。
【０１８４】
そのため、次のCPUサイクルにおいて、キャッシュアクセスコントローラ１６ａは、２００MHz動作を維持する。
【０１８５】
２００MHzモードで動作している時に、４００MHzの動作マージンが小さく、かつ２００MHzモードの動作マージンが大きいことは、上述した図１９におけるパリティ検査回路７１の出力が、期間ｔ２において「１」で、期間ｔ３において「０」になっていることから判断される。
【０１８６】
そのため、パターンデータ記憶部６５ａには、次のパターンデータＰｂが記憶されている。  
Ｐｂ：＊  １  ０  ＊
すなわち、パターンデータ記憶部６５ａに、２００MHzモード時に、期間ｔ２におけるデータとして「１」が、期間ｔ３におけるデータとして「０」が予め記憶され、その記憶されたパターンデータとパリティ検査回路７１の出力パターンが比較される。このとき、順序回路６５は、２００MHzの動作マージンが大きいので、分割数変更信号DNCを出力しない。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを２００MHzモードに維持する。
【０１８７】
なお、図２０は、キャッシュアクセスコントローラ１６ａが２００MHzで動作していて、４００MHzモードでの動作マージンが無し（すなわちタイミング違反有り）で、２００MHzの動作マージンが大きいときの、CPUコア１５のリードデータと、FF５２の入力データと出力データ、及びパリティ検査回路７１の出力の状態を示すタイミングチャートである。
【０１８８】
図２０の場合、矢印A13で示すように、リードデータの遅延量が多く、期間ｔ２においてリードデータは、不定値である。よって、パリティ検査回路７１の出力は「１」を示すが、期間ｔ３では、FF５２に正常値が取り込まれる。その結果、パリティ検査回路７１の出力は「０」となる。従って、図１９の場合と同様に、キャッシュアクセスコントローラ１６ａは、２００MHzモードを維持する。
【０１８９】
ｃ）２００MHzモードで、２００MHzモードの動作マージンは小さいとき
図２１は、２００MHzモードで動作している時に、２００MHzの動作マージンが小さいときの、CPUコア１５のリードデータと、FF５２の入力データと出力データ、及びパリティ検査回路７１の出力の状態を示すタイミングチャートである。
【０１９０】
図２１の場合、矢印A14で示すように、リードデータの遅延量が多く、期間ｔ３において、FF５２が正しくウェイ＃０又は＃１のリードデータを取り込めず、不定値を含んだデータを取り込む。よって、FF５２の出力データは、不定値となり、パリティ検査回路７１においてエラーが検出される。
【０１９１】
しかし、その次の期間ｔ４では、FF５２が正しくウェイ＃０又は＃１のリードデータを取り込んでいるため、パリティ検査回路７１は、「０」を出力する。さらに、次の期間ｔ５では、FF５２が正しくウェイ＃２又は＃３のリードデータを取り込めず、不定値を含んだデータを取り込む。よって、FF５２の出力データは、不定値となり、パリティ検査回路７１においてエラーが検出される。期間ｔ５の次の期間ｔ６では、FF５２の出力データは、正しくウェイ＃２又は＃３のリードデータを取り込んでいるため、パリティ検査回路７１は、「０」を出力する。
【０１９２】
そのため、次のCPUサイクルにおいて、キャッシュアクセスコントローラ１６ａは、１００MHz動作に移行する。
【０１９３】
２００MHzモードで動作している時に、２００MHzの動作マージンが小さいことは、上述した図２１におけるパリティ検査回路７１の出力が、期間ｔ３において、「１」になっていることから判断される。
【０１９４】
そのため、パターンデータ記憶部６５ａには、次のパターンデータＰｃが記憶されている。  
Ｐｃ：＊  ＊  １  ＊
すなわち、パターンデータ記憶部６５ａに、２００MHzモード時に、期間ｔ３におけるデータとして「１」が予め記憶され、その記憶されたパターンデータとパリティ検査回路７１の出力パターンが比較される。このとき、順序回路６５は、２００MHzの動作マージンが小さいので、分割数変更信号DNCを出力する。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを２００MHzモードから１００MHzモードに移行する。
【０１９５】
ｄ）２００MHzモードで、２００MHzモードと４００MHzモードの動作マージンが共に大きいとき
図２２は、２００MHzモードで動作している時に、４００MHzの動作マージンが大きく、かつ２００MHzモードの動作マージンが大きいときの、CPUコア１５のリードデータと、FF５２の入力データと出力データ、及びパリティ検査回路７１の出力の状態を示すタイミングチャートである。
【０１９６】
図２２の場合、矢印A15で示すように、リードデータの遅延量が少なく、期間ｔ２において、FF５２が正しくウェイ＃０又は＃１のリードデータを取り込んでいるため、パリティ検査回路７１は、「０」を出力する。その後も、FF５２の出力データは、正しくウェイ＃２又は＃３のリードデータを取り込んでいるため、パリティ検査回路７１は、「０」を出力する。
【０１９７】
そのため、次のCPUサイクルにおいて、キャッシュアクセスコントローラ１６ａは、４００MHzモードに移行する。
【０１９８】
２００MHzモードで動作している時に、４００MHzの動作マージンが大きく、かつ２００MHzモードの動作マージンが大きいことは、上述した図２２におけるパリティ検査回路７１の出力が、期間ｔ２において「０」になっていることから判断される。
【０１９９】
そのため、パターンデータ記憶部６５ａには、次のパターンデータＰｄが記憶されている。  
Ｐｄ：＊  ０  ＊  ＊
すなわち、パターンデータ記憶部６５ａに、２００MHzモード時に、期間ｔ２におけるデータが「０」が記憶され、パリティ検査回路７１の出力が、キャッシュアクセスコントローラ１６ａが２００MHzモードで動作していて、期間ｔ２において「０」のときに、４００MHzの動作マージンが大きいので、分割数変更信号DNCを出力する。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを２００MHzモードから４００MHzモードに移行する。
【０２００】
ｅ）１００MHzモードで、２００MHzモードの動作マージンが小さいとき
図２３は、１００MHzモードで動作している時に、２００MHzの動作マージンが小さいときの、CPUコア１５のリードデータと、FF５２の入力データと出力データ、及びパリティ検査回路７１の出力の状態を示すタイミングチャートである。
【０２０１】
図２３の場合、矢印A16で示すように、リードデータの遅延量が多く、期間ｔ３において、FF５２が正しくウェイ＃０から＃３のいずれかのリードデータを取り込めず、不定値を含んだデータを取り込む。よって、FF５２の出力データは、不定値となり、パリティ検査回路７１においてエラーが検出される。
【０２０２】
しかし、その次の期間ｔ４とそれ以降の期間では、FF５２が正しくウェイ＃０から＃３のいずれかのリードデータを取り込んでいるため、パリティ検査回路７１は、「０」を出力する。
【０２０３】
そのため、次のCPUサイクルにおいて、キャッシュアクセスコントローラ１６ａは、１００MHz動作を維持する。
【０２０４】
なお、期間ｔ２では、FF５２の入力データは不定値のため、パリティ検査回路７１の出力は「１」となる。
【０２０５】
１００MHzモードで動作している時に、２００MHzの動作マージンが小さいことは、上述した図２１におけるパリティ検査回路７１の出力が、期間ｔ３において、「１」になっていることから判断される。
【０２０６】
そのため、パターンデータ記憶部６５ａには、次のパターンデータＰｅが記憶されている。  
Ｐｅ：＊  ＊  １  ＊
すなわち、パターンデータ記憶部６５ａに、１００MHzモード時に、期間ｔ３におけるデータとして「１」が記憶され、その記憶されたパターンデータとパリティ検査回路７１の出力パターンが比較される。このとき、順序回路６５は、２００MHzの動作マージンが小さいので、分割数変更信号DNCを出力しない。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを１００MHzモードに維持する。
【０２０７】
ｆ）１００MHzモードで、２００MHzモードの動作マージンが大きいとき
図２４は、１００MHzモードで動作している時に、２００MHzモードの動作マージンが大きいときの、CPUコア１５のリードデータと、FF５２の入力データと出力データ、及びパリティ検査回路７１の出力の状態を示すタイミングチャートである。
【０２０８】
図２４の場合、矢印A17で示すように、リードデータの遅延量が少なく、期間ｔ３において、FF５２が正しくウェイ＃０から＃３のいずれかのリードデータを取り込んでいるため、パリティ検査回路７１は、「０」を出力する。その後も、FF５２の出力データは、正しくウェイ＃０から＃３のいずれかのリードデータを取り込んでいるため、パリティ検査回路７１は、「０」を出力する。
【０２０９】
そのため、次のCPUサイクルにおいて、キャッシュアクセスコントローラ１６ａは、２００MHz動作に移行する。
【０２１０】
１００MHzモードで動作している時に、２００MHzの動作マージンが大きいことは、上述した図２４におけるパリティ検査回路７１の出力が、期間ｔ３において「０」になっていることから判断される。
【０２１１】
そのため、パターンデータ記憶部６５ａには、次のパターンデータＰｆが記憶されている。  
Ｐｆ：＊  ＊  ０  ＊
すなわち、パターンデータ記憶部６５ａに、１００MHzモード時に、期間ｔ３におけるデータとして「０」が記憶され、その記憶されたパターンデータとパリティ検査回路７１の出力パターンが比較される。このとき、順序回路６５は、２００MHzの動作マージンが大きいので、分割数変更信号DNCを出力する。その結果、キャッシュアクセスコントローラ１６ａは、アクセスモードを１００MHzモードから２００MHzモードに移行する。
【０２１２】
以上のように、本実施の形態のキャッシュメモリ制御装置によれば、データの誤りを検出する誤り検出部としての、リードデータのパリティエラーを検査するパリティ検査回路によって、データの誤り情報が得られる。その得られたデータの誤り情報に基づいて、分割数変更信号DNCが出力される。
【０２１３】
従って、本実施の形態のキャッシュメモリ装置は、複数のウェイの選択をキャッシュヒットすると、それ以降の選択を停止し、かつ、データ誤り検査回路の出力状態とキャッシュメモリ１６のアクセスモードとに基づいて、アクセスモードの変更をするようにしたので、通常アクセスモードと同等のキャッシュヒット性能を持ちつつ、可能な限りの低消費電力で動作することができる。
【０２１４】
なお、誤り検出部としては、リードデータの連続する誤りを検査する巡回冗長検査回路でもよい。
【０２１５】
以上のように、上述した各実施の形態のキャッシュメモリは、メモリリードパスに付加した回路を用いてタイミング違反を検出するので、メモリリードパスで発生するタイミング違反を、従来よりも精度良く検出することができる。このため、消費電力が低いモードで動作する時間を、従来よりも長くすることが可能になり、キャッシュメモリの平均消費電力を下げることができる。
【０２１６】
なお、各実施の形態では、キャッシュメモリは４ウェイセットアソシアティブ方式の場合で、CPUのクロック周波数は１００MHz、キャッシュメモリのクロック周波数は４００MHz、キャッシュのアクセスモードは４００MHz，２００MHz，及び１００MHzのモードで説明したが、他のウェイ数、他の動作周波数であってもよい。
【０２１７】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【図面の簡単な説明】
【０２１８】
【図１】本発明の第１の実施の形態に係わるプロセッサの構成を示す構成図である。
【図２】本発明の第１の実施の形態に係わる実アドレスデータの構成例を示す図である。
【図３】本発明の第１の実施の形態に係わるキャッシュメモリの構成例を説明するための図である。
【図４】本発明の第１の実施の形態に係わる分割数テーブルの例を示す図である。
【図５】本発明の第１の実施の形態に係わるプロセッサの動作を説明するためのタイミングチャートである。
【図６】本発明の第１の実施の形態に係わる、ウェイ#３でキャッシュヒットした場合のタイミングチャートである。
【図７】本発明の第１の実施の形態に係わる、通常アクセスモード、順次アクセスモード及び中間モードの３つのアクセスモードにおける消費電力の状態を概念的に説明するための図である。
【図８】本発明の第１の実施の形態に係わる、キャッシュメモリが４００MHzモードで動作し、かつ動作マージンが大きいときの、２つのFFの入力データと出力データ、及び比較器の出力の状態を示すタイミングチャートである。
【図９】本発明の第１の実施の形態に係わる、キャッシュメモリが４００MHzモードで動作していて、動作マージンが小さいときの、２つのFFの入力データと出力データ、及び比較器の出力の状態を示すタイミングチャートである。
【図１０】本発明の第１の実施の形態に係わる、キャッシュメモリが２００MHzモードで動作していて、４００MHzモードの動作マージンは小さく、２００MHモードの動作マージンが大きいときの、４つのFFの入力データと出力データ、及び２つの比較器の出力の状態を示すタイミングチャートである。
【図１１】本発明の第１の実施の形態に係わる、キャッシュメモリが２００MHzモードで動作していて、２００MHzモードの動作マージンが小さいときの、４つのFFの入力データと出力データ、及び２つの比較器の出力の状態を示すタイミングチャートである。
【図１２】本発明の第１の実施の形態に係わる、キャッシュメモリが２００MHzモードで動作していて、２００MHzモードと４００MHzモードの動作マージンが共に大きいときの、４つのFFの入力データと出力データ、及び２つの比較器出力の状態を示すタイミングチャートである。
【図１３】本発明の第１の実施の形態に係わる、キャッシュメモリが１００MHzモードで動作していて、２００MHzモードの動作マージンが小さいときの、４つのFFの入力データと出力データ、及び２つの比較器の出力の状態を示すタイミングチャートである。
【図１４】本発明の第１の実施の形態に係わる、キャッシュメモリが１００MHzモードで動作していて、２００MHzモードの動作マージンが大きいときの、４つのFFの入力データと出力データ、及び２つの比較器の出力の状態を示すタイミングチャートである。
【図１５】本発明の第２の実施の形態に係る、キャッシュメモリの構成例を説明するための図である。
【図１６】本発明の第３の実施の形態に係る、キャッシュメモリの構成例を説明するための図である。
【図１７】本発明の第３の実施の形態に係る、キャッシュアクセスコントローラが４００MHzモードで動作し、４００MHzの動作マージンが大きいときの、CPUコアのリードデータと、FFの入力データと出力データ、及びパリティ検査回路の出力の状態を示すタイミングチャートである。
【図１８】本発明の第３の実施の形態に係る、４００MHzモードで動作している時に、４００MHzの動作マージンが小さいときの、CPUコアのリードデータと、FFの入力データと出力データ、及びパリティ検査回路の出力の状態を示すタイミングチャートである。
【図１９】本発明の第３の実施の形態に係る、２００MHzモードで動作している時に、４００MHzの動作マージンが小さく、かつ２００MHzモードの動作マージンが大きいときの、CPUコアのリードデータと、FFの入力データと出力データ、及びパリティ検査回路の出力の状態を示すタイミングチャートである。
【図２０】本発明の第３の実施の形態に係る、２００MHzモードで動作していて、４００MHzモードでの動作マージンが無し（すなわちタイミング違反有り）で、２００MHzの動作マージンが大きいときの、CPUコアのリードデータと、FFの入力データと出力データ、及びパリティ検査回路の出力の状態を示すタイミングチャートである。
【図２１】本発明の第３の実施の形態に係る、２００MHzモードで動作している時に、２００MHzの動作マージンが小さいときの、CPUコアのリードデータと、FFの入力データと出力データ、及びパリティ検査回路の出力の状態を示すタイミングチャートである。
【図２２】本発明の第３の実施の形態に係る、２００MHzモードで動作している時に、４００MHzの動作マージンが大きく、かつ２００MHzモードの動作マージンが大きいときの、CPUコアードデータと、FF５２の入力データと出力データ、及びパリティ検査回路の出力の状態を示すタイミングチャートである。
【図２３】本発明の第３の実施の形態に係る、１００MHzモードで動作している時に、２００MHzの動作マージンが小さいときの、CPUコアのリードデータと、FFの入力データと出力データ、及びパリティ検査回路の出力の状態を示すタイミングチャートである。
【図２４】本発明の第３の実施の形態に係る、１００MHzモードで動作している時に、２００MHzモードの動作マージンが大きいときの、CPUコアのリードデータと、FFの入力データと出力データ、及びパリティ検査回路の出力の状態を示すタイミングチャートである。
【符号の説明】
【０２１９】
１  プロセッサ、１１  CPU、１２  主メモリ、１３  バス、１５  CPUコア、１６  キャッシュメモリ、１６ａ  キャッシュアクセスコントローラ、１６ｂ、１６ｃ  分割数変更部、１７  周波数設定レジスタ、３１  小容量記憶部、３３  比較部、３４  ワードセレクタ、３５  ウェイセレクタ、５１  タイミング違反検出回路、５２ａ  バッファ、６１  比較器
【図１】
2010026716.tif 000003
【図２】
2010026716.tif 000004
【図３】
2010026716.tif 000005
【図４】
2010026716.tif 000006
【図５】
2010026716.tif 000007
【図６】
2010026716.tif 000008
【図７】
2010026716.tif 000009
【図８】
2010026716.tif 000010
【図９】
2010026716.tif 000011
【図１０】
2010026716.tif 000012
【図１１】
2010026716.tif 000013
【図１２】
2010026716.tif 000014
【図１３】
2010026716.tif 000015
【図１４】
2010026716.tif 000016
【図１５】
2010026716.tif 000017
【図１６】
2010026716.tif 000018
【図１７】
2010026716.tif 000019
【図１８】
2010026716.tif 000020
【図１９】
2010026716.tif 000021
【図２０】
2010026716.tif 000022
【図２１】
2010026716.tif 000023
【図２２】
2010026716.tif 000024
【図２３】
2010026716.tif 000025
【図２４】
2010026716.tif 000026