(57)【特許請求の範囲】
【請求項１】
複数のウェイを有するキャッシュメモリの各ウェイをあるいは所定の２以上のウェイを、所定の順番で選択し、かつ前記キャッシュメモリに接続されたCPUの動作周波数に応じて設定された分割数で、１CPUサイクルを分割して、その分割された各期間内において、前記各ウェイあるいは前記所定の２以上のウェイの選択を行う選択部と、
前記選択部により選択されたウェイにおけるキャッシュヒットを検出するキャッシュヒット検出部と、
前記キャッシュヒット検出部が前記キャッシュヒットを検出すると、前記選択部における前記各ウェイあるいは前記所定の２以上のウェイの選択を停止させる制御部と、
を有することを特徴とするキャッシュメモリ制御回路。
【請求項２】
前記CPUの動作周波数について複数の分割数が設定された分割テーブルを有し、
前記選択部は、前記分割テーブルに設定された前記分割数で、前記１CPUサイクルを分割することを特徴とする請求項１に記載のキャッシュメモリ制御回路。
【請求項３】
前記キャッシュメモリ制御回路におけるクリティカルパスに関わるクロック信号が入力され、前記クリティカルパスの遅延量だけ遅延させる遅延回路と、
前記遅延量に所定の遅延量だけ付加して、前記遅延量と前記所定の遅延量を合わせた遅延量が、前記クロック信号の１サイクル分以上になるのを検知する検知回路と、
を有し、
前記選択部は、前記検知回路が前記合わせた遅延量が前記クロック信号の１サイクル分以上になるのを検知すると、前記分割テーブルに設定された前記複数の分割数の中から選択した、現在の分割数よりも少ない分割数で、前記１CPUサイクルを分割することを特徴とする請求項２に記載のキャッシュメモリ制御回路。
【請求項４】
複数のウェイを有するキャッシュメモリの各ウェイをあるいは所定の２以上のウェイを、所定の順番で選択し、前記キャッシュメモリに接続されたCPUの動作周波数に応じて設定された分割数で、１CPUサイクルを分割して、その分割された各期間内において、前記各ウェイあるいは前記所定の２以上のウェイの選択を行う選択部と、
前記選択部により選択されたウェイにおけるキャッシュヒットを検出するキャッシュヒット検出部と、
前記キャッシュヒット検出部が前記キャッシュヒットを検出すると、前記選択部における前記各ウェイあるいは前記所定の２以上のウェイの選択を停止させる制御部と、
を有するキャッシュメモリ制御回路と、
前記キャッシュメモリに接続されたCPUと、
前記CPUの動作周波数を設定する動作周波数設定部と
を有することを特徴とするプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュメモリ制御回路及びプロセッサに関し、特に、複数のウェイを有するキャッシュメモリのキャッシュメモリ制御回路及びプロセッサに関する。
【背景技術】
【０００２】
従来より、プロセッサにおいて、主メモリからのデータの高速読み出しのために、キャッシュメモリが広く用いられている。キャッシュメモリは、中央処理装置（以下、CPUという）と主メモリの間に設けられる。
【０００３】
キャッシュメモリには、同じエントリアドレスを有する複数のウェイを有するものがある。そのようなキャッシュメモリでは、CPUからのアドレスデータ中のエントリアドレスに基づいて、アドレスデコーダが、全てのウェイについて、フレームアドレス比較すなわちタグ比較を同時に行い、キャッシュメモリから読み出されたデータのうち、ワードアドレスで示されるワードをCPUへ出力する。
【０００４】
近年、プロセッサの省電力化のために、２つのアクセスモードを持つキャッシュメモリが提案されている（例えば、特許文献１参照）。その提案によれば、通常アクセスモードでは、全てのウェイに対してタグ比較を行い、唯一アクセスモードでは、選択されたウェイに対してのみ、タグ比較を行う。その結果、唯一アクセスモードでは、必要最小限のメモリ領域だけが動作することになるので、結果的に消費電力が削減される。
【０００５】
ところが、上記提案における唯一アクセスモードでは、使用されるキャッシュメモリ領域が限定されるため、同じソフトウェアを動作させても、通常アクセスモードに比べてキャッシュミスの頻度が上がる場合がある。そのような場合は、キャッシュリフィル動作が多く発生してしまうため、低消費電力化が十分に行われないことになる。
【特許文献１】特開2002-236616号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
そこで、本発明は、上述した問題に鑑み成されたものであり、通常アクセスモードと同等のキャッシュヒット性能を持ちつつ、可能な限りの低消費電力で動作するアクセスモードでキャッシュメモリを動作させることができるキャッシュメモリ制御回路及びプロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一態様によれば、複数のウェイを有するキャッシュメモリの各ウェイをあるいは所定の２以上のウェイを、所定の順番で選択し、かつ前記キャッシュメモリに接続されたCPUの動作周波数に応じて設定された分割数で、１CPUサイクルを分割して、その分割された各期間内において、前記各ウェイあるいは前記所定の２以上のウェイの選択を行う選択部と、前記選択部により選択されたウェイにおけるキャッシュヒットを検出するキャッシュヒット検出部と、前記キャッシュヒット検出部が前記キャッシュヒットを検出すると、前記選択部における前記各ウェイあるいは前記所定の２以上のウェイの選択を停止させる制御部と、を有するキャッシュメモリ制御回路を提供することができる。
【発明の効果】
【０００８】
本発明によれば、通常アクセスモードと同等のキャッシュヒット性能を持ちつつ、可能な限りの低消費電力で動作するアクセスモードでキャッシュメモリを動作させることができるキャッシュメモリ制御回路及びプロセッサを実現することができる。
【発明を実施するための最良の形態】
【０００９】
以下、図面を参照して本発明の実施の形態を説明する。  
（第１の実施の形態）
（構成）
まず図１に基づき、本実施の形態に係わるキャッシュメモリを含むプロセッサの構成を説明する。図１は、本実施の形態に係わるプロセッサの構成を示す構成図である。
【００１０】
図１において、プロセッサ１は、CPU１１と、主メモリ１２と、システムバス１３とを含んで構成されている。CPU１１は、CPUコア１５と、キャッシュメモリ１６と、周波数設定レジスタ１７を含む。
【００１１】
CPU１１は、主メモリ１２に記憶された命令あるいはデータを、キャッシュメモリ制御回路を含むキャッシュメモリ１６と、システムバス１３を介して読み出して実行する。CPUコア１５は、プログラムの実行に必要な命令あるいはデータ（以下、単にデータともいう）を、キャッシュメモリ１６から読み出してそのプログラムを実行する。CPUコア１５は、主メモリ１２の実アドレスデータRAを、キャッシュメモリ１６に出力し、キャッシュメモリ１６は、キャッシュメモリ１６中に入力された実アドレスデータRAのデータが存在すれば、そのデータDをCPUコア１５へ出力する。キャッシュメモリ１６中にストアされたデータが無ければ、リフィル処理により主メモリ１２からそのデータを読み出してキャッシュメモリ１６に書き込み、CPUコア１５に出力する。
【００１２】
なお、ここでは、説明を簡単にするためにメモリ管理ユニット（MMU）を有しない例を用いて説明するが、メモリ管理ユニット（ＭＭＵ）を有する場合は、CPUコア１５は、実アドレスではなく、仮想アドレスを出力する。
【００１３】
また、CPUコア１５は、キャッシュメモリ１６に対して、キャッシュメモリ１６を動作させるための信号として、チップイネーブル信号CEをキャッシュメモリ１６に対して出力する。従って、CPUコア１５は、キャッシュメモリ１６を使用する時に、チップイネーブル信号CEを出力する。
【００１４】
さらに、動作周波数設定部としての周波数設定レジスタ１７には、CPU１１の動作周波数の値が設定される。CPU１１の動作周波数の設定は、例えば、ユーザにより外部から与えられることにより行われる。周波数設定レジスタ１７に設定された動作周波数データFは、CPUコア１５に入力され、CPUコア１５は、その動作周波数データFをキャッシュメモリ１６に出力する。本実施の形態では、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とが入力される回路である。選択部４２は、各ウェイに対するウェイイネーブル信号WEを出力する。選択部４２は、後述するように、４つのウェイ全てを同時に有効にする、あるいは各ウェイを所定の順番で時間的に重ならないように有効にする、さらにあるいは複数の（ここでは２つの）ウェイを所定の順番で時間的に重ならないように有効にするように、各ウェイを選択する。各ウェイに対するウェイイネーブル信号WEは、各ウェイを有効にする、すなわち動作させるための信号である。
【００２２】
分割数指定部４３は、動作周波数データＦが入力される回路である。分割数指定部４３は、入力された動作周波数データＦに対応する分割数データを、選択部４２に出力する。
【００２３】
CPUコア１５の動作周波数Fは可変であり、上述したように、４００MHz、２００MHzあるいは１００MHzのいずれかで動作可能である。その動作周波数Fは、上述したようにユーザにより設定可能である。その指定された動作周波数のデータが分割数指定部４３に入力される。
【００２４】
キャッシュメモリ１６に入力された実アドレスデータ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が入力されると所定の順番で、ウェイを１つずつあるいは２つずつ選択して有効にするウェイイネーブル信号WEを出力する。なお、選択部４２は、チップイネーブル信号CEが入力されると、全てのウェイを同時に選択して有効にするウェイイネーブル信号WEを出力する場合もある。  
制御部４１は、一致信号が入力されると、選択部４２に制御信号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を各ウェイに出力する。
【００３７】
（動作）
次に、上述したプロセッサ１のキャッシュメモリ１６の動作を説明する。  
図５は、プロセッサ１の動作を説明するためのタイミングチャートである。キャッシュメモリ１６は、上述したように４００MHzで動作する。以下、CPUコア１５の動作周波数Fが、１００MHzで設定された場合で説明する。  
ユーザがCPUコア１５の動作周波数Fを１００MHzに設定すると、その設定された動作周波数データFは、周波数設定レジスタ１７にストアされ、CPUコア１５を介して分割数指定部４３に出力される。分割数指定部４３は、分割テーブルDTを参照して、最高優先度に対応する分割数データを選択部４２に出力する。選択部４２は、入力された分割数で１CPUサイクルを分割するように、各ウェイに対して、ウェイイネーブル信号WEを出力する。
【００３８】
従って、CPUコア１５の動作周波数Fが１００MHzに設定されると、最高優先度１に対応する４分割で、各ウェイが選択される。
【００３９】
また、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に設定し、優先度１の分割数２が指定された場合、キャッシュメモリ１６は、中間モードで動作する。
【００５８】
このような場合は、選択部４２は、１CPUサイクルの前半にウェイイネーブル信号WE[0]と[1]を同時に出力し、１CPUサイクルの後半にウェイイネーブル信号WE[2]と[3]を同時に出力する。
【００５９】
図７は、通常アクセスモード、順次アクセスモード及び中間モードの３つのアクセスモードにおける消費電力の状態を概念的に説明するための図である。  
通常アクセスモード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の出力が停止される。その結果、アクセスレイテンシを増加させることなく、キャッシュメモリは、可能な限り低消費電力で動作する。
【００６６】
以上のように、本実施の形態のキャッシュメモリ装置は、通常アクセスモードと同等のキャッシュヒット性能を持ちつつ、可能な限りの低消費電力で動作することができる。
【００６７】
（第２の実施の形態）
次に、本発明の第２の実施の形態を説明する。  
（構成）
第１の実施の形態では、キャッシュメモリ１６は、設定あるいは指定された分割数で、１CPUサイクルを分割して、その分割された期間内で一つあるいは複数のタグ比較を行っていた。しかし、指定された分割数で分割してタグ比較を行った場合に、キャッシュメモリの方が高い周波数で動作するため、キャッシュメモリにおいてタイミング違反が発生する虞がある。
【００６８】
そこで、第２の実施の形態では、実際にタイミング違反が発生する前に、タイミング違反の発生しそうな状態を検出し、タイミング違反が発生しそうな場合には、分割数を変更するようにした。
【００６９】
図８は、本実施の形態に係わるプロセッサ１Aの構成の例を示す構成図である。図１と同じ構成要素については、同じ符号を付し、説明は省略する。プロセッサ１Aはタイミング違反検出部５１を有する点が、図１のプロセッサ１と異なる。タイミング違反検出部５１の構成については後述する。
【００７０】
図９は、第２の実施の形態に係る、キャッシュメモリ１６Aの構成例を説明するための図である。図９において、図３と同じ構成要素については、同じ符号を付し、説明は省略する。
【００７１】
図９に示すように、タイミング検出部５１は、２つのタイミング違反検出回路５１A，５１Bを有する。タイミング違反検出回路５１A、５１Bのそれぞれの出力信号VOA、VOBは、選択部４２に入力されている。タイミング違反検出回路５１A、５１Bは、それぞれ４００MHz用と２００MHz用のタイミング違反検出用の回路である。より正確には、タイミング違反検出回路５１A、５１Bは、それぞれ４００MHz用と２００MHz用のタイミング違反が発生しそうな状態を検出するための回路である。タイミング違反検出回路５１A、５１Bは、それぞれ、キャッシュメモリ１６Aのクリティカルパスにおいて、動作条件が厳しくない場合、論理値「０」（LOW）を出力し、動作条件が厳しい状態、すなわちタイミング違反が発生しそうな状態になると、論理値「１」（HIGH）を出力する回路である。クリティカルパスは、CPU１１のチップ内で最も動作が遅い論理パスである。
【００７２】
図１０は、タイミング違反検出回路５１Aの構成の例を示すブロック図である。なお、タイミング違反検出回路５１Aと５１Bの構成は同じなので、タイミング違反検出回路５１Aについて図１０を用いて説明する。
【００７３】
図１０に示すように、タイミング違反検出回路５１Aは、３個のフリップフロップ（以下、FFと略す）６１ａ，６１ｂ及び６１ｃと、複数のインバータ回路６２ａと、複数のインバータ回路６２ｂと、１つのインバータ回路６２ｃと、排他的論理和（以下、EXORと略す）回路６３とを有して構成されている。この複数のインバータ回路６２ａにより第１の遅延部が構成され、複数のインバータ回路６２ｂにより第２の遅延部が構成される。
【００７４】
FF６１ａの出力は、直列に接続された複数のインバータ回路６２ａに入力される。複数のインバータ回路６２ａの出力は、直列に接続された複数のインバータ回路６２ｂに入力される。また、FF６１ａとFF６１ｃとの間に含まれる複数のインバータ回路は、偶数個のインバータ回路により構成する。
【００７５】
タイミング違反検出回路５１Aには、キャッシュメモリ１６Aにおけるクリティカルパスの４００MHzのクロック信号CLKが供給される。各FF６１ａ〜６１ｃは、クロック信号CLKの立ち上がりエッジにおいて動作する。なお、各FF６１ａ〜６１ｃは、各クロック信号CLKの立ち下がりエッジにおいて動作するようにしてもよい。
【００７６】
さらになお、タイミング違反検出回路５１Bには、キャッシュメモリ１６Aにおけるクリティカルパスに関わるタイミングの２００MHzのクロック信号CLKが供給される。
【００７７】
クリティカルパスは、例えば、データの読み出しのパスであり、具体的には、アドレスデコーダ３２においてエントリアドレスEAをデコードしてからフレームアドレスを比較するウェイセレクタ部３５の選択までのパスである。第１の遅延部である複数のインバータ回路６２ａは、入力された信号をそのパスの遅延量T1だけ遅延させる。また、第２の遅延部である複数のインバータ回路６２ｂは、さらに、所定の付加的な遅延量αだけ、入力された信号を遅延させる。
【００７８】
FF６１ａは、クロック信号CLKの立ち上がりエッジのタイミングにおいて、複数のインバータ回路６２ａの内、初段のインバータ回路６２ａの出力を取り込み、初段のインバータ回路６２ａ及びEXOR回路６３に出力信号を供給する。初段のインバータ回路６２ａは、FF６１ａからの出力を反転し、FF６１ａ及び次段のインバータ回路６２ａに出力する。即ち、FF６１ａでは、クロック信号CLKの立ち上がりエッジのタイミングにおいて、初段のインバータ回路６２ａにより反転された信号が取り込まれる。
【００７９】
初段のインバータ回路６２ａに供給された信号は、インバータチェーンである複数のインバータ回路６２ａ及び６２ｂを伝播し、FF６１ｂに供給される。即ち、FF６１ａの出力は、FF６１ａとFF６１ｂとの間に含まれるインバータ回路の段数分だけ遅延されFF６１ｂに供給される。このインバータ回路６２ａと６２ｂの数は、第１と第２の遅延部の遅延量に相当する所定の遅延量（T1＋α）が得られるように設定されている。温度条件などが変わり、クリティカルパスの遅延量が変化すると、複数のインバータ回路６２ａ、６２ｂによる遅延量も同様に変化する。
【００８０】
FF６１ｂは、クロック信号CLKの立ち上がりエッジにおいて、最終段のインバータ回路６２ｂの出力を取り込み、EXOR回路６３に出力する。  
EXOR回路６３は、FF６１ａとFF６１ｂから入力された値の排他的論理和演算を施し、その演算結果をFF６１ｃに出力する。
【００８１】
FF６１ｃは、クロック信号CLKの立ち上がりエッジにおいて、入力された排他的論理和演算結果を取り込み、インバータ回路６２ｃに出力する。  
インバータ回路６２ｃは、FF６１ｃからの入力を反転し、出力信号VOAとして、選択部４２Aに出力する。  
クリティカルパスにおいて、入力された信号が、クロック信号CLKの１サイクル（すなわち１クロック分の時間）以上遅延すると、タイミング違反が発生してしまうので、タイミング違反が発生する前に、タイミング違反検出回路５１は、タイミング違反の発生しそうな状態を検出するように構成されている。
【００８２】
FF６１ａ、６１ｂの２つの出力は、EXOR回路６３に入力される。図１０に示すタイミング違反検出回路５１では、EXOR回路６３の出力は、２つの入力（すなわちFF６１ａと６１ｂの２つの出力）が、１サイクル以内の時間差を有しているうちは、HIGHであるが、１サイクル以上の時間差があると、LOWとなる。
【００８３】
クリティカルパスの回路に相当する第１の遅延部における遅延量が温度変化等の原因で増加し、その遅延量がクロック信号CLKの１サイクル以上になる前の状態、すなわちタイミング違反が発生しそうな状態に、出力信号VOAは、HIGHとなる。これは、クリティカルパスの遅延量T1に所定の遅延量αを予め付加しておき、その遅延量（T1＋α）が温度変化等によってクロック信号CLKの１サイクル分以上になるのを、EXOR回路６３の出力が変化することにより検知しているからである。
【００８４】
なお、タイミング違反は、CPU１１の電源電圧の低下によって発生する場合がある。例えば、CPU１１の省電力制御によって、大きな計算能力が不要なときに消費電力を抑えるために、CPU１１の動作周波数を下げることに加えて、電源電圧を通常時の電圧よりも下げるような制御が行われたときに、タイミング違反が発生する場合がある。
【００８５】
以上のような構成と同様のタイミング違反検出回路５１Bが、キャッシュメモリ１６Aの動作周波数が２００MHzの場合に対応するタイミング違反検出回路として２つ設けられている。
【００８６】
２つのタイミング違反検出回路５１A,５１Bは、CPU１１のチップ上で常に動作している。  
また、選択部４２Aは、チップイネーブル信号CEと分割数データに基づいて４つのウェイを所定の順番で有効にすると共に、タイミング違反検出回路５１A、５１Bがタイミング違反の発生しそうな状態を検出すると、１CPUサイクルの分割数を、動作中の現在の分割数よりも少ない分割数に変更するように、４つのウェイへのウェイイネーブル信号WEの出力を変更する。
【００８７】
（動作）
次に、上述した構成に係るキャッシュメモリの動作について説明する。第１の実施の形態と同じ動作をする同じ構成要素については、説明は省略し、第１の実施の形態と異なる動作について説明する。
【００８８】
２つのタイミング違反検出回路５１A,５１Bは、タイミング違反が発生しそうな状態を検出すると、それぞれ、その状態を示す出力信号VOA,VOBをキャッシュメモリ１６Aのキャッシュアクセスコントローラ１６ａに出力する。キャッシュアクセスコントローラ１６ａは、２つのタイミング違反検出回路５１A、５１Bの出力信号VOA,VOBを受けて、上述したモードを変化させる。  
例えば、CPUコア１５が１００MHzで、キャッシュメモリ１６Aが４００MHzで動作しており、最高優先度１の分割数4で、キャッシュメモリ１６Aが、図７に示す順次アクセスモードSMで動作しているとする。その時の動作は、図５及び図６のような動作である。そして、このような順次アクセスモードSMで動作中に、図示しない省電力制御により、CPU１１の電源電圧が下がり、４００MHz用のタイミング違反検出回路５１Aでタイミング違反が発生しそうな状態が検出されたとする。そのとき、タイミング違反検出回路５１Aの出力信号VOAがHIGH、すなわち「１」となる。
【００８９】
選択部４２Aは、タイミング違反検出回路５１Aからの出力信号VOAが「１」になると、分割数の優先度を下げる。具体的には、図４において点線の矢印A1で示すように、分割テーブルDT中に設定された複数の分割数の中から、優先度を１から２に下げて、分割数を現在の分割数４よりも少ない分割数２に変更する。
【００９０】
分割数が２になると、キャッシュメモリ１６Aは、図７の中間モードIMで動作、すなわち２００MHzでタグ比較を行うことになる。その時の動作は、図１１のような動作である。  
図１１は、分割数が２の場合のプロセッサ１Aの動作を説明するためのタイミングチャートである。タイミング違反検出回路５１Aが、タイミング違反が発生しそうな状態を検出して、出力信号VOAを出力すると、選択部４２Aは、キャッシュメモリ１６Aを２００MHzで、タグ比較を行うようにウェイイネーブル信号WEを出力する。
【００９１】
図１１に示すように、選択部４２Aは、ウェイイネーブル信号WEとして、１CPUサイクルの前半で、「３」を出力する、すなわち、各ウェイ#０から#３に対して「００１１」を出力する。図１１の場合、その前半ではキャッシュヒットしなかったので、選択部４２Aは、１CPUサイクルの後半では、「C」を出力する、すなわち、各ウェイ#０から#３に対して「１１００」を出力する。図１１の場合、後半でウェイ#２がヒットしたので、キャッシュヒットを示す比較結果信号Cとして、「４」すなわち「０１００」が出力されている。  
その結果、タイミング違反が発生しそうな状態はなくなる。
【００９２】
しかし、さらに、その後、CPU１１の電源電圧の低下、あるいは温度変化等により、２００MHz用のタイミング違反検出回路５１Bでタイミング違反が発生しそうな状態が検出されたとする。そのとき、タイミング違反検出回路５１Bの出力信号VOBがHIGH、すなわち「１」となる。
【００９３】
選択部４２Aは、タイミング違反検出回路５１Bからの出力信号VOBも「１」になったので、分割数の優先度をさらに下げる。具体的には、図４において点線の矢印A2で示すように、分割テーブルDT中に設定された複数の分割数の中から、優先度を２から３に下げて、分割数を現在の分割数２よりも少ない分割数１に変更する。分割数が１になると、キャッシュメモリ１６Aは、図７の通常アクセスモードNMで動作、すなわち１００MHzでタグ比較を行うことになる。  
その結果、タグ比較は、タイミング違反が発生しそうな状態はなくなる。
【００９４】
上述したタイミング違反検出回路５１Aは、CPUコア１５の動作周波数が１００MHzの場合に、１CPUサイクルを４分割したときの、すなわち分割数４に対応するタイミング違反検出回路である。そして、タイミング違反検出回路５１Bは、CPUコア１５の動作周波数が１００MHzの場合に、１CPUサイクルを２分割したときの、すなわち分割数２に対応するタイミング違反検出回路である。よって、タイミング違反検出部５１は、分割数に応じた複数のタイミング違反検出回路を有しているということができる。
【００９５】
以上の例は、CPU１１が１００MHzで動作している場合であるが、CPU１１が２００MHzで動作している場合は、２００MHz用のタイミング違反検出回路５１Bが、タイミング違反が発生しそうな状態を検出すると、選択部４２Aは、優先度を下げる。具体的には、図４において点線の矢印A3で示すように、優先度を１から２に変更して、分割数を１に変更する。分割数が１になると、キャッシュメモリ１６Aは、図７の中間モードIMで動作していたのを、図７の通常アクセスモードNMで動作、すなわち１００MHzでタグ比較を行うことになる。  
その結果、タグ比較は、タイミング違反が発生しそうな状態はなくなる。
【００９６】
なお、その後、タイミング違反検出回路５１Bが、２００MHzのタイミング違反が発生しそうな状態に無くなると、出力信号VOBは「０」になるので、選択部４２Aは、優先度を上げる。さらに、その後、タイミング違反検出回路５１Aが、４００MHzのタイミング違反が発生しそうな状態に無くなると、出力信号VOAは「０」になるので、選択部４２Aは、優先度を下げる。
【００９７】
以上のように、本実施の形態のキャッシュメモリ１６Aによれば、通常アクセスモードと同等のキャッシュヒット性能を持ちつつ、可能な限りの低消費電力で動作することができる。さらに、キャッシュメモリ１６Aによれば、CPU１１の省電力制御によって電源電圧の低下等があった場合であっても、タイミング違反が発生しそうな状態になると、タイミング違反が発生する前に、キャッシュメモリ１６Aにおける動作モードを変更する。その結果、タイミング違反の発生を未然に防ぐことができ、さらに、CPU１１の省電力制御による電源電圧を下げる余地を与えることができる。
【００９８】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【図面の簡単な説明】
【００９９】
【図１】本発明の第１の実施の形態に係わるプロセッサの構成を示す構成図である。
【図２】本発明の第１の実施の形態に係わる実アドレスデータの構成例を示す図である。
【図３】本発明の第１の実施の形態に係わるキャッシュメモリの構成例を説明するための図である。
【図４】本発明の第１の実施の形態に係わる分割数テーブルの例を示す図である。
【図５】本発明の第１の実施の形態に係わるプロセッサの動作を説明するためのタイミングチャートである。
【図６】本発明の第１の実施の形態に係わる、ウェイ#３でキャッシュヒットした場合のタイミングチャートである。
【図７】本発明の第１の実施の形態に係わる、通常アクセスモード、順次アクセスモード及び中間モードの３つのアクセスモードにおける消費電力の状態を概念的に説明するための図である。
【図８】本発明の第２の実施の形態に係わるプロセッサの構成の例を示す構成図である。
【図９】本発明の第２の実施の形態に係るキャッシュメモリの構成例を説明するための図である。
【図１０】本発明の第２の実施の形態に係るタイミング違反検出回路の構成の例を示すブロック図である。
【図１１】本発明の第２の実施の形態に係わる、分割数が２の場合のプロセッサの動作を説明するためのタイミングチャートである。
【符号の説明】
【０１００】
１、１A  プロセッサ、１１  CPU、１２  主メモリ、１３  バス、１５  CPUコア、１６、１６Ａ  キャッシュメモリ、１６ａ  キャッシュアクセスコントローラ、１７  周波数設定レジスタ、３１  小容量記憶部、３３  比較部、３４  ワードセレクタ、３５  ウェイセレクラ、５１  タイミング違反検出回路、６１ａ、６１ｂ、６１ｃ  FF、６２ａ、６２ｂ  インバータ回路、６３  EXOR回路
【図１】
0004635063.tif 000002
【図２】
0004635063.tif 000003
【図３】
0004635063.tif 000004
【図４】
0004635063.tif 000005
【図５】
0004635063.tif 000006
【図６】
0004635063.tif 000007
【図７】
0004635063.tif 000008
【図８】
0004635063.tif 000009
【図９】
0004635063.tif 000010
【図１０】
0004635063.tif 000011
【図１１】
0004635063.tif 000012