(57)【要約】【課題】キャッシュメモリの性能向上を図る。【解決手段】キャッシュメモリ装置１０は、メインメモリ２０のデータに対応するキャッシュデータを記憶するデータメモリ１１、キャッシュデータを識別するタグ情報を記憶するタグメモリ１２、次にアクセスされる先読みアドレスを予想するアドレス予想部１３、記憶されたタグ情報に基づいて、先読みアドレスのキャッシュヒット判定を行うキャッシュヒット判定部１４、先読みアドレスのキャッシュヒット判定結果を保持するキャッシュヒット判定結果保持部１５、次にアクセスされた時、保持されたキャッシュヒット判定結果に基づいて、データメモリ１１またはメインメモリ２０へアクセスするアクセス制御部１６を備える。【選択図】図７
2018106227.tif 000002
【特許請求の範囲】
【請求項１】
メインメモリのデータに対応するキャッシュデータを記憶するデータメモリと、
前記キャッシュデータを識別するタグ情報を記憶するタグメモリと、
次にアクセスされる先読みアドレスを予想するアドレス予想部と、
前記記憶されたタグ情報に基づいて、前記先読みアドレスのキャッシュヒット判定を行うキャッシュヒット判定部と、
前記先読みアドレスのキャッシュヒット判定結果を保持するキャッシュヒット判定結果保持部と、
次にアクセスされた時、前記保持されたキャッシュヒット判定結果に基づいて、前記データメモリまたは前記メインメモリへアクセスするアクセス制御部と、
を備える、キャッシュメモリ装置。
【請求項２】
前記アクセス制御部は、
前記保持されたキャッシュヒット判定結果がキャッシュヒットである場合、前記データメモリにアクセスし、
前記保持されたキャッシュヒット判定結果がキャッシュミスである場合、前記メインメモリにアクセスする、
請求項１に記載のキャッシュメモリ装置。
【請求項３】
前記アクセス制御部は、前記先読みアドレスが今回アクセスされたアドレスと一致しているか否かを判定し、前記判定した先読みアドレスの判定結果と前記保持されたキャッシュヒット判定結果に基づいて、前記データメモリまたは前記メインメモリへアクセスする、
請求項１に記載のキャッシュメモリ装置。
【請求項４】
前記アクセス制御部は、前記先読みアドレスが前記今回アクセスされたアドレスと一致した場合、前記保持されたキャッシュヒット判定結果に基づいて、前記データメモリまたは前記メインメモリへアクセスする、
請求項３に記載のキャッシュメモリ装置。
【請求項５】
前記キャッシュヒット判定部は、前記先読みアドレスが前記今回アクセスされたアドレスと不一致の場合、前記今回アクセスされたアドレスのキャッシュヒット判定を行う、
請求項３に記載のキャッシュメモリ装置。
【請求項６】
前記アクセス制御部は、前記先読みアドレスが前記今回アクセスされたアドレスと不一致の場合、前記今回アクセスされたアドレスのキャッシュヒット判定結果に基づいて、前記データメモリまたは前記メインメモリへアクセスする、
請求項５に記載のキャッシュメモリ装置。
【請求項７】
前記アクセス制御部は、前記先読みアドレスが前記今回アクセスされたアドレスと不一致の場合、前記タグメモリ及び前記データメモリへアクセスし、前記今回アクセスされたアドレスのキャッシュヒット判定結果に基づいて、前記メインメモリへアクセスする、
請求項５に記載のキャッシュメモリ装置。
【請求項８】
前記先読みアドレスは、今回アクセスされたアドレスに連続する次のアドレスである、
請求項１に記載のキャッシュメモリ装置。
【請求項９】
前記先読みアドレスは、今回アクセスされたアドレスのデータに基づいて予想されるアドレスである、
請求項１に記載のキャッシュメモリ装置。
【請求項１０】
前記キャッシュヒット判定部は、今回アクセスされたアドレスのキャッシュヒット判定を行い、
前記アドレス予想部は、前記今回アクセスされたアドレスのキャッシュヒット判定がキャッシュミスである場合、前記先読みアドレスを予想する、
請求項１に記載のキャッシュメモリ装置。
【請求項１１】
前記アドレス予想部は、入力される先読み制御信号に基づいて、前記先読みアドレスを予想する、
請求項１に記載のキャッシュメモリ装置。
【請求項１２】
前記データメモリ及び前記タグメモリは、アクセスのために必要なサイクルが１クロックサイクルである、
請求項１に記載のキャッシュメモリ装置。
【請求項１３】
前記データメモリ及び前記タグメモリは、ＳＲＡＭ（Static Random Access Memory）である、
請求項１に記載のキャッシュメモリ装置。
【請求項１４】
メインメモリと、
前記メインメモリのデータを一時的に記憶するキャッシュメモリと、
前記キャッシュメモリを介して前記メインメモリへアクセスするマスタと、
前記マスタが次にアクセスする先読みアドレスを予想するアドレス予想部と、
を備え、
前記キャッシュメモリは、
前記メインメモリのデータに対応するキャッシュデータを記憶するデータメモリと、
前記キャッシュデータを識別するタグ情報を記憶するタグメモリと、
前記記憶されたタグ情報に基づいて、前記先読みアドレスのキャッシュヒット判定を行うキャッシュヒット判定部と、
前記先読みアドレスのキャッシュヒット判定結果を保持するキャッシュヒット判定結果保持部と、
次にアクセスされた時、前記保持されたキャッシュヒット判定結果に基づいて、前記データメモリまたは前記メインメモリへアクセスするアクセス制御部と、
を備える、半導体装置。
【請求項１５】
第１のキャッシュメモリと第２のキャッシュメモリとを備え、
前記第１のキャッシュメモリは、
メインメモリのデータに対応するキャッシュデータを記憶する第１のデータメモリと、
前記第１のデータメモリのキャッシュデータを識別するタグ情報を記憶する第１のタグメモリと、
前記第１のタグメモリに記憶されたタグ情報に基づいて、キャッシュヒット判定を行う第１のキャッシュヒット判定部と、
前記第１のキャッシュヒット判定部のキャッシュヒット判定結果に基づいて、前記第１のデータメモリまたは前記第２のキャッシュメモリへアクセスする第１のアクセス制御部と、
を備え、
前記第２のキャッシュメモリは、
前記メインメモリのデータに対応するキャッシュデータを記憶する第２のデータメモリと、
前記第２のデータメモリのキャッシュデータを識別するタグ情報を記憶する第２のタグメモリと、
次にアクセスされる先読みアドレスを予想する第２のアドレス予想部と、
前記第２のタグメモリに記憶されたタグ情報に基づいて、前記先読みアドレスのキャッシュヒット判定を行う第２のキャッシュヒット判定部と、
前記先読みアドレスのキャッシュヒット判定結果を保持する第２のキャッシュヒット判定結果保持部と、
次にアクセスされた時、前記保持されたキャッシュヒット判定結果に基づいて、前記第２のデータメモリまたは前記メインメモリへアクセスする第２のアクセス制御部と、
を備える、キャッシュメモリ装置。
【請求項１６】
前記第１のキャッシュメモリは、
次にアクセスされる先読みアドレスを予想する第１のアドレス予想部と、
前記先読みアドレスの第１のキャッシュヒット判定結果を保持する第１のキャッシュヒット判定結果保持部と、
を備え、
前記第１のアクセス制御部は、次にアクセスされた時、前記保持された第１のキャッシュヒット判定結果に基づいて、前記第１のデータメモリまたは前記第２のキャッシュメモリへアクセスする、
請求項１５に記載のキャッシュメモリ装置。
【請求項１７】
前記第２のアドレス予想部は、前記第１のキャッシュヒット判定結果がキャッシュミスである場合、前記先読みアドレスを予想する、
請求項１６に記載のキャッシュメモリ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュメモリ装置及び半導体装置に関し、例えば、データメモリとタグメモリを備えるキャッシュメモリ装置及び半導体装置に関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processing Unit）などのマスタ（マスタ装置）からメインメモリ（主記憶装置）へのアクセスの高速化を図るためにキャッシュメモリが利用されている。近年、ＣＰＵの高速化が進んでいるため、マイクロコンピュータなど多くの半導体装置にキャッシュメモリが実装されている。
【０００３】
キャッシュメモリは、アクセスを行うマスタとアクセス対象であるメインメモリとの間に配置される。メモリアクセスを高速化するため、キャッシュメモリは、まずマスタがメインメモリにアクセスした際に、そのアドレスとアクセスした内容を記録しておき、次に同じアドレスでアクセスした際に、メインメモリにアクセスすることなくマスタにアクセスされたデータを返す機能を有する。関連する技術として、特許文献１が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平５−１８１７４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１などの関連するキャッシュメモリは、上記の機能を実現するため、メインメモリの一部のデータを記憶するデータメモリと、メインメモリのデータをデータメモリに保持しているかどうかの情報を記憶するタグメモリを備えている。例えば、メインメモリを低速なＤＲＡＭ（Dynamic Random Access Memory）で構成し、データメモリ及びタグメモリを高速なＳＲＡＭ（Static Random Access Memory）やＦＦ（Flip Flop）で構成することにより、キャッシュメモリの高速化を図ることができる。さらに、タグメモリを用いてキャッシュヒット判定を行うことで不要なアクセスを抑えることが可能である。
【０００６】
しかしながら、関連する技術では、キャッシュメモリの性能向上を図ることが困難な場合があることを、本発明者は見出した。
【０００７】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００８】
一実施の形態によれば、キャッシュメモリ装置は、メインメモリのデータに対応するキャッシュデータを記憶するデータメモリと、キャッシュデータを識別するタグ情報を記憶するタグメモリを備えている。キャッシュメモリ装置は、次にアクセスされる先読みアドレスを予想し、タグメモリに記憶されたタグ情報に基づいて、予想した先読みアドレスのキャッシュヒット判定を行う。この先読みアドレスのキャッシュヒット判定結果を保持しておき、次にアクセスされた時、保持されたキャッシュヒット判定結果に基づいて、データメモリまたはメインメモリへアクセスする。
【発明の効果】
【０００９】
前記一実施の形態によれば、キャッシュメモリの性能向上を図ることができる。
【図面の簡単な説明】
【００１０】
【図１】実装例１のキャッシュメモリの構成を示す構成図である。
【図２】実装例１のキャッシュメモリの動作を示すタイミングチャートである。
【図３】実装例１のキャッシュメモリのアクセス動作を説明するための表である。
【図４】実装例２のキャッシュメモリの構成を示す構成図である。
【図５】実装例２のキャッシュメモリの動作を示すタイミングチャートである。
【図６】実装例２のキャッシュメモリのアクセス動作を説明するための表である。
【図７】実施の形態に係るキャッシュメモリ装置の概要構成を示す構成図である。
【図８】実施の形態に係るキャッシュメモリ装置の他の構成例を示す構成図である。
【図９】実施の形態に係るキャッシュメモリ装置の他の構成例を示す構成図である。
【図１０】実施の形態１に係るキャッシュメモリの構成例を示す構成図である。
【図１１】実施の形態１に係るキャッシュメモリの動作例を示すフローチャートである。
【図１２】実施の形態１に係るキャッシュメモリの動作を説明するためのタイミングチャートである。
【図１３】実施の形態１に係るキャッシュメモリの動作を説明するためのタイミングチャートである。
【図１４】実施の形態１に係るキャッシュメモリのアクセス動作を説明するための表である。
【図１５】実施の形態１に係るキャッシュメモリのアクセス動作を説明するための表である。
【図１６】実施の形態２に係るキャッシュメモリの動作例を示すフローチャートである。
【図１７】実施の形態２に係るキャッシュメモリの動作を説明するための図である。
【図１８】実施の形態２に係るキャッシュメモリの動作を説明するための図である。
【図１９】実施の形態３の基本例の並列キャッシュメモリの構成例を示す構成図である。
【図２０】実施の形態３の適用例１の並列キャッシュメモリの構成例を示す構成図である。
【図２１Ａ】実施の形態３の適用例１の並列キャッシュメモリの動作例を示すフローチャートである。
【図２１Ｂ】実施の形態３の適用例１の並列キャッシュメモリの動作例を示すフローチャートである。
【図２２】実施の形態３の適用例２の並列キャッシュメモリの構成例を示す構成図である。
【図２３Ａ】実施の形態３の適用例２の並列キャッシュメモリの動作例を示すフローチャートである。
【図２３Ｂ】実施の形態３の適用例２の並列キャッシュメモリの動作例を示すフローチャートである。
【図２３Ｃ】実施の形態３の適用例２の並列キャッシュメモリの動作例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、ＣＰＵ、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００１２】
（実施の形態に至る検討）
まず、実施の形態適用前の実装例１及び実装例２について検討する。
【００１３】
＜実装例１＞
図１は、実装例１のキャッシュメモリの構成を示している。図１に示すように、実装例１のキャッシュメモリ９０１は、タグメモリ１０１、データメモリ１０２、キャッシュヒット判定回路１０３、ＭＵＸ（マルチプレクサ）１０４、メモリアクセス制御部１１１を備えている。キャッシュメモリ９０１は、ＣＰＵ３００とメインメモリ２００との間に配置（接続）され、ＣＰＵ３００からのアクセス要求（リードアクセスやライトアクセス）に対し高速に応答する。
【００１４】
データメモリ１０２は、メインメモリ２００に記憶されている一部のリードデータ（キャッシュデータ）を一時的に記憶する。タグメモリ１０１は、データメモリ１０２に記憶されているデータに対応するメインメモリ２００のアドレス（キャッシュ登録の有無を示すタグ情報）を記憶する。上記のように、一般的に、メインメモリ２００は、低速なメモリ（ＤＲＡＭ等）により構成され、タグメモリ１０１及びデータメモリ１０２は、高速なメモリ（ＳＲＡＭやＦＦ等）により構成される。この例では、タグメモリ１０１及びデータメモリ１０２は、ともにＳＲＡＭで構成されている。
【００１５】
キャッシュヒット判定回路１０３は、タグメモリ１０１からリードしたリードデータを用いてキャッシュヒット判定を行う。すなわち、キャッシュヒット判定回路１０３は、タグメモリ１０１に記憶されたタグ情報をもとに、ＣＰＵ３００からアクセスされたアドレスのデータがデータメモリ１０２に記憶されているかどうかキャッシュヒット判定（キャッシュヒットまたキャッシュミスかどうかの判定）を行う。ＭＵＸ１０４は、キャッシュヒット判定回路１０３のキャッシュヒット判定結果に応じて、データメモリ１０２またはメインメモリ２００のいずれかのデータを選択しＣＰＵ３００へ出力する。
【００１６】
メモリアクセス制御部１１１は、各メモリへのアクセス（リードアクセスやライトアクセス）を制御する。メモリアクセス制御部１１１は、全てのメモリへのアクセスを制御してもよいし、一部のメモリへのアクセスを制御してもよい。例えば、図１においては、メモリアクセス制御部１１１が、タグメモリ１０１、データメモリ１０２、メインメモリ２００へのアクセスを制御してもよいし、メモリアクセス制御部１１１が、タグメモリ１０１へのアクセスを制御し、キャッシュヒット判定回路１０３が、データメモリ１０２、メインメモリ２００へのアクセスを制御してもよい。以下の実装例２や各実施の形態でも同様である。
【００１７】
図２は、実装例１のキャッシュメモリ９０１の動作タイミングを示している。クロックサイクルＴ１〜Ｔ２は、キャッシュメモリを使用しないキャッシュオフ時（データキャッシュ前）の動作を示し、クロックサイクルＴ４〜Ｔ６は、データキャッシュ後のキャッシュヒット時の動作を示し、クロックサイクルＴ８〜Ｔ１０は、データキャッシュ後のキャッシュミス時の動作を示している。
【００１８】
キャッシュオフ時の動作では、クロックサイクルＴ１において、ＣＰＵ３００からリード要求ＲＥＱ（リードアクセス）が出力されると、メモリアクセス制御部１１１はＣＰＵ３００へＡＣＫ信号（アクセス受付応答）を出力する。次のクロックサイクルＴ２において、メモリアクセス制御部１１１は、メインメモリ２００にアクセスを行い、メインメモリ２００がリードデータＲＤＡＴＡ及びＥＮＤ信号（アクセス完了）をＣＰＵ３００へ出力する。また、メモリアクセス制御部１１１は、タグメモリ１０１及びデータメモリ１０２にアクセスされた情報（データ及びアドレス）を登録し更新する。
【００１９】
キャッシュヒット時の動作では、クロックサイクルＴ４において、ＣＰＵ３００からリード要求ＲＥＱが出力されると、メモリアクセス制御部１１１はＣＰＵ３００へＡＣＫ信号を出力する。次のクロックサイクルＴ５において、メモリアクセス制御部１１１は、タグメモリ１０１にアクセスを行い、キャッシュヒット判定回路１０３は、タグメモリ１０１のリードデータに基づいて、アクセスされたメインメモリ２００の情報がデータメモリ１０２（キャッシュメモリ）にあるかないか判定（キャッシュヒット判定）を行う。
【００２０】
データメモリ１０２にアクセスされた情報を保持している場合（キャッシュヒット時）、次のクロックサイクルＴ６で、キャッシュヒット判定回路１０３（またはメモリアクセス制御部１１１）は、データメモリ１０２へアクセスを行い、ＭＵＸ１０４はデータメモリ１０２の出力を選択し、データメモリ１０２がリードデータＲＤＡＴＡ及びＥＮＤ信号をＣＰＵ３００へ出力する。
【００２１】
キャッシュミス時の動作では、クロックサイクルＴ４及びＴ５と同様に、クロックサイクルＴ８において、ＣＰＵ３００からのリード要求ＲＥＱに対しＡＣＫ信号を出力し、クロックサイクルＴ９において、タグメモリ１０１にアクセスを行って、キャッシュヒット判定回路１０３がキャッシュヒット判定を行う。データメモリ１０２にアクセスされた情報が記憶されていない場合（キャッシュミス時）、次のクロックサイクルＴ１０で、キャッシュヒット判定回路１０３（またはメモリアクセス制御部１１１）は、メインメモリ２００へアクセスを行い、ＭＵＸ１０４はメインメモリ２００の出力を選択し、メインメモリ２００がリードデータＲＤＡＴＡ及びＥＮＤ信号をＣＰＵ３００へ出力する。また、メモリアクセス制御部１１１は、タグメモリ１０１及びデータメモリ１０２にアクセスされた情報を登録し更新する。
【００２２】
図３は、実装例１のキャッシュメモリのアクセス動作概要を示している。実装例１では、キャッシュヒット時にデータメモリ１０２へアクセスを行い、キャッシュミス時にメインメモリ２００へアクセスを行う。実装例１では、キャッシュメモリ９０１がメインメモリ２００の情報を保持していない（キャッシュミス）時にはデータメモリ１０２へのアクセスを行わないため、不要なデータメモリアクセスを行わない。また、データメモリ１０２が複数のＷＡＹを備えるセットアソシアティブ方式の場合、キャッシュヒット時に、リードデータが登録されているデータメモリ１０２のＷＡＹに対してのみリードアクセスを実施することができる。
【００２３】
しかし、実装例１では、タグメモリ１０１にアクセスしキャッシュヒット判定を行った後に、（タグメモリアクセスの次のサイクルで）データメモリ１０２またメインメモリ２００へのアクセスを行うため、キャッシュミス・キャッシュヒットに関わらずリードサイクルに１サイクル余計にかかり、性能が低下するという問題がある。
【００２４】
＜実装例２＞
図４は、実装例２のキャッシュメモリの構成を示している。実装例２は、実装例１の性能低下を改善した例である。
【００２５】
図４に示すように、実装例２のキャッシュメモリ９０２は、実装例１と同様に、タグメモリ１０１、データメモリ１０２、キャッシュヒット判定回路１０３、ＭＵＸ１０４、メモリアクセス制御部１１２を備えている。実装例２では、メモリアクセス制御部１１２は、タグメモリ１０１とデータメモリ１０２へ同時にアクセスを行う。
【００２６】
図５は、実装例２のキャッシュメモリ９０２の動作タイミングを示している。クロックサイクルＴ２１〜Ｔ２２は、キャッシュオフ時の動作を示し、クロックサイクルＴ２４〜Ｔ２５は、キャッシュヒット時の動作を示し、クロックサイクルＴ２８〜Ｔ３０は、キャッシュミス時の動作を示している。
【００２７】
キャッシュオフ時の動作では、実装例１のクロックサイクルＴ１〜Ｔ２と同様に、クロックサイクルＴ２１において、ＣＰＵ３００からのリード要求ＲＥＱに対し、メモリアクセス制御部１１２はＡＣＫ信号を出力し、クロックサイクルＴ２２において、メインメモリ２００へアクセスを行い、リードデータＲＤＡＴＡ及びＥＮＤ信号をＣＰＵ３００へ出力する。
【００２８】
キャッシュヒット時の動作では、クロックサイクルＴ２４において、ＣＰＵ３００からリード要求ＲＥＱが出力されると、メモリアクセス制御部１１２は、ＣＰＵ３００へＡＣＫ信号を出力する。次のクロックサイクルＴ２５において、メモリアクセス制御部１１２は、タグメモリ１０１にアクセスを行うとともに、データメモリ１０２にアクセスを行い、キャッシュヒット判定回路１０３は、タグメモリ１０１のリードデータに基づいて、キャッシュヒット判定を行う。キャッシュヒット時、そのクロックサイクルＴ２５において、既にアクセスされているデータメモリ１０２からリードデータＲＤＡＴＡ及びＥＮＤ信号をＣＰＵ３００へ出力する。
【００２９】
キャッシュミス時の動作では、クロックサイクルＴ２４及びＴ２５と同様に、クロックサイクルＴ２８において、ＣＰＵ３００からのリード要求ＲＥＱに対しＡＣＫ信号を出力し、クロックサイクルＴ２９において、タグメモリ１０１及びデータメモリ１０２にアクセスを行って、キャッシュヒット判定回路１０３がキャッシュヒット判定を行う。キャッシュミス時、次のクロックサイクルＴ３０で、キャッシュヒット判定回路１０３（またはメモリアクセス制御部１１２）は、メインメモリ２００へアクセスを行い、メインメモリ２００がリードデータＲＤＡＴＡ及びＥＮＤ信号をＣＰＵ３００へ出力する。
【００３０】
図６は、実装例２のキャッシュメモリのアクセス動作概要を示している。実装例２では、アクセスが行われた際にタグメモリ１０１へのアクセスと同時にデータメモリ１０２へのアクセスを行い、キャッシュヒット判定結果に応じてデータメモリ１０２のリードデータをマスタへ出力する又はメインメモリ２００へアクセスを行う。実装例２では、タグメモリ１０１とデータメモリ１０２へ同時にアクセスするため、キャッシュヒット時、そのままマスタへリードデータを出力することができる。このため、キャッシュヒット時の性能を向上することができる。しかし、実装例２においても、キャッシュミス時にデータメモリ１０２へのアクセスが無駄になり、また、リードサイクルが１サイクル分余計にかかり、性能が低下するという問題がある。
【００３１】
なお、特許文献１を用いて、キャッシュヒット率の向上を図る手法も考えられる。この手法では、キャッシュミスである場合、メインメモリからリードデータを読み出し、ＣＰＵへリードデータを返すと同時に次にアクセスすると予想されるアドレスのキャッシュヒット判定を行う。そして、キャッシュミスとなった場合はメインメモリにリードアクセスを行い、あらかじめキャッシュに登録しておくことでキャッシュヒット率の向上を図る。
【００３２】
しかし、この手法の場合でも、キャッシュヒットの場合には、キャッシュヒットとなった次のアクセスのキャッシュヒット率を改善することはできない。また、キャッシュミスとなった次のアクセスが想定したアドレス以外のアクセスであった場合、あらかじめタグ先読みを行いメインメモリからリードデータを読み出し、データメモリにリードデータを登録する動作が無駄になる。
【００３３】
このように、実装例１では、キャッシュヒット時及びキャッシュミス時に性能が低下するという問題がある。実装例２では、キャッシュミス時にデータメモリへのアクセスが無駄になり、キャッシュミス時に性能が低下するという問題がある。また、実装例２では、セットアソシアティブ方式時、データメモリが複数のＷＡＹを有しているため、そのすべてのＷＡＹに対してアクセスする必要があるという問題もある。
【００３４】
さらに、特許文献１においても、キャッシュヒットとなった次のアクセスのキャッシュヒット率は変化せず、また、キャッシュミスとなった次のアクセスが想定したアドレス以外のアクセスである場合、メインメモリアクセスとキャッシュへの登録動作が無駄になるという問題がある。
【００３５】
（実施の形態の概要）
図７は、以下の実施の形態に係るキャッシュメモリ装置の概要構成を示している。図７に示すように、実施の形態に係るキャッシュメモリ装置１０は、データメモリ１１、タグメモリ１２、アドレス予想部１３、キャッシュヒット判定部１４、キャッシュヒット判定結果保持部１５、アクセス制御部１６を備えている。例えば、半導体装置１は、キャッシュメモリ装置１０、メインメモリ２０、マスタ３０を備えている。
【００３６】
データメモリ１１は、メインメモリ２０のデータに対応するキャッシュデータを記憶する。タグメモリ１２は、データメモリ１１におけるキャッシュデータを識別するタグ情報を記憶する。アドレス予想部１３は、マスタ３０から次にアクセスされる先読みアドレスを予想する。
【００３７】
キャッシュヒット判定部１４は、タグメモリ１２におけるタグ情報に基づいて、アドレス予想部１３が予想した先読みアドレスのキャッシュヒット判定を行う。キャッシュヒット判定結果保持部１５、キャッシュヒット判定部１４による先読みアドレスのキャッシュヒット判定結果を保持する。アクセス制御部１６は、マスタ３０から次にアクセスされた時、キャッシュヒット判定結果保持部１５に保持されたキャッシュヒット判定結果に基づいて、データメモリ１１またはメインメモリ２０へアクセスする。例えば、アクセス制御部１６は、保持されたキャッシュヒット判定結果がキャッシュヒットである場合、データメモリ１１にアクセスし、保持されたキャッシュヒット判定結果がキャッシュミスである場合、メインメモリ２０にアクセスする、アクセス制御部１６は、データメモリ１１、メインメモリ２０、タグメモリ１２へのアクセスを制御してもよい。
【００３８】
このように、予め次のアクセスの先読みアドレスを予想し、先読みアドレスのキャッシュヒット判定結果を保持しておく（これをタグ先読みと呼ぶ）。そして、次のアクセス時に、タグメモリへアクセスせずに、保持したキャッシュヒット判定結果に基づいて、データメモリまたはメインメモリへアクセスを行う。タグ先読みを行うことにより、次のアクセス時に、タグメモリを用いたキャッシュヒット判定動作を省略できるため、アクセスを高速化しつつ、無駄なメモリアクセスを防ぐことができ、性能の向上を図ることができる。
【００３９】
なお、図７は、実施の形態に係るキャッシュメモリ装置１０の構成の一例であり、図８や図９のように、キャッシュメモリ内部の構成の一部や制御を外部に設けてもよい。
【００４０】
図８は、実施の形態に係るキャッシュメモリ装置の他の構成例である。図８の例では、アドレス予想部１３を、キャッシュメモリ装置１０の外部に設けている。すなわち、半導体装置１は、キャッシュメモリ装置１０、メインメモリ２０、マスタ３０、アドレス予想部１３を備えており、キャッシュメモリ装置１０は、データメモリ１１、タグメモリ１２、キャッシュヒット判定部１４、キャッシュヒット判定結果保持部１５、アクセス制御部１６を備えている。
【００４１】
上記図７の例では、キャッシュメモリ装置１０内で、次にアクセスするアドレスを予測し、タグ先読みのためのアドレスを生成していた。これに対し、図８の例は、キャッシュメモリ装置１０の外部からタグ先読みを行うアドレスを受信し、そのアドレスを用いてタグ先読みを実施する。この例は、タグ先読みのアドレスをキャッシュメモリ装置内で生成するのではなく、外部から入力することが特徴となる。このような構成をとることで、キャッシュメモリ装置の外部で分岐予測等を行っているモジュールがある場合、そのモジュールから次の分岐先のアドレスを取得することで効率よくタグ先読みが可能になる。
【００４２】
図９は、実施の形態に係るキャッシュメモリ装置の他の構成例である。図９の例では、キャッシュメモリ装置の外部にタグ先読み制御部を備えている。すなわち、半導体装置１は、キャッシュメモリ装置１０、メインメモリ２０、マスタ３０、タグ先読み制御部１７を備えている。キャッシュメモリ装置１０の構成は、図７と同様である。タグ先読み制御部１７は、キャッシュメモリ装置１０のタグ先読み動作（先読みアドレスの予想、先読みアドレスのキャッシュヒット判定結果の保持）を制御する。
【００４３】
図９の例では、キャッシュメモリ装置の外部からタグ先読みを行うか否かを制御する信号を受信し、その制御信号に従い、タグ先読みの実施を行うか否かを制御する。上記図７の例では、キャッシュメモリ装置内で実施、未実施の判断を行い、その結果に基づいてタグ先読みを行うか行わないか制御していた。
【００４４】
図９の例は、外部から入力される信号を用いることでタグ先読みを行うか行わないか制御する機能を持つことが特徴となる。このような構成により、無駄なタグ先読みを削減することができる。例えば、キャッシュメモリ装置の外部にてアドレスが連続するか否かを判定し、アドレスが連続する場合のみ、タグ先読みを実施するといった制御が可能になる。
【００４５】
（実施の形態１）
以下、図面を参照して実施の形態１について説明する。
【００４６】
図１０は、本実施の形態に係るキャッシュメモリの構成例を示している。図１０に示すように、本実施の形態に係るキャッシュメモリ１００は、実装例１及び２と同様に、タグメモリ１０１、データメモリ１０２、キャッシュヒット判定回路１０３、ＭＵＸ１０４、メモリアクセス制御部１０８を備え、さらに、結果保持回路１０５、ＭＵＸ１０６、キャッシュヒット判定結果確認回路１０７、アドレス予想部１０９を備えている。実装例１及び２と同様に、タグメモリ１０１及びデータメモリ１０２はＳＲＡＭで構成されている。ＳＲＡＭは、例えば、アクセスサイクルが１クロックサイクルであり、タグ先読みを行うことで、このクロックサイクル分、アクセス速度を高速化することができる。
【００４７】
アドレス予想部１０９は、ＣＰＵ３００から次にアクセスされるアドレス（先読みアドレス）を予想する。本実施の形態では、回路を簡単にするため、アドレス予想部１０９で予想するアドレスは、前回アクセスされたアドレスに連続するアドレス（次のアドレス、インクリメントしたアドレス）を用いる。なお、より精度の高いアドレス予想方法を用いてもよい。例えば、今回アクセスされたアドレスのデータに基づいて予想されたアドレス（命令に基づいて次にアクセスされるアドレス）でもよい。
【００４８】
本実施の形態のメモリアクセス制御部１０８は、ＣＰＵ３００から受け付けたアクセスのアドレス以外にも、予想された次のアクセスのアドレスを用いてタグメモリ１０１へのアクセス（タグ先読み）を行う。また、メモリアクセス制御部１０８（またはアドレス予想部１０９）は、その予想した先読みアドレスを保持し、次のアクセス時に先読みアドレスがアクセスされた今回のアドレスと一致するか否か判定（タグ先読み判定）を行う。メモリアクセス制御部１０８は、このタグ先読み判定結果と、結果保持回路１０５に保持されている先読みアドレスのキャッシュヒット判定結果に基づいて（例えばタグ先読み当たり（一致）の場合）、データメモリ１０２またはメインメモリ２００へアクセスを行う。これにより、タグメモリ１０１へのアクセスが不要なため高速なアクセスが可能となる。
タグ先読み外れ（不一致）の場合は、キャッシュヒット判定を行って、この判定結果に基づいてデータメモリ１０２またはメインメモリ２００へアクセスを行う。この場合、例えば、実装例２と同様にタグメモリ１０１とメインメモリ２００へアクセスし、キャッシュヒット判定結果に基づいてメインメモリ２００へアクセス（またはデータメモリ出力）を行ってもよい。これにより、タグ先読みが外れた場合でも、実装例２と同様の性能を得ることができる。
【００４９】
それ以外にも、メモリアクセス制御部１０８は、キャッシュヒット判定の結果や受け付けたアクセスの情報を用いて、タグメモリ１０１のみ、データメモリ１０２のみ、もしくは、タグメモリ１０１及びデータメモリ１０２へのアクセスを行うことができる機能を有する。
【００５０】
キャッシュヒット判定回路１０３は、ＣＰＵ３００からアクセスされたアドレスのキャッシュヒット判定と、あらかじめ予想された先読みアドレスのキャッシュヒット判定を行う。結果保持回路（キャッシュヒット判定結果保持回路）１０５は、あらかじめ予想された先読みアドレスを用いたキャッシュヒット判定結果を保持する。
【００５１】
ＭＵＸ１０６は、メモリアクセス制御部１０８からの制御に応じて、キャッシュヒット判定回路１０３または結果保持回路１０５のいずれかのデータを選択しキャッシュヒット判定結果確認回路１０７へ出力する。あらかじめ予想された先読みアドレスのキャッシュヒット判定結果を確認して動作する場合、結果保持回路１０５を選択し、現在のアドレスのキャッシュヒット判定結果を確認して動作する場合、キャッシュヒット判定回路１０３を選択する。キャッシュヒット判定結果確認回路１０７は、あらかじめ予想された先読みアドレスのキャッシュヒット判定結果、もしくは現在のアドレスのキャッシュヒット判定結果に基づいて、データメモリ１０２またはメインメモリ２００へアクセスやいずれかの出力の選択を制御する。
【００５２】
図１１は、本実施の形態に係るキャッシュメモリの動作を示している。
【００５３】
図１１に示すように、あらかじめタグ先読み動作（Ｓ１２０〜Ｓ１２３）を実施する。すなわち、アドレス予想部１０９は、次にアクセスされるアドレス（先読みアドレス）を予想する（Ｓ１２０）。また、メモリアクセス制御部１０８（またはアドレス予想部１０９）は、その先読みアドレスを保持しておく。次に、メモリアクセス制御部１０８は、その予想された先読みアドレスを用いてタグメモリ１０１へのリードアクセスを行う（Ｓ１２１）。そして、キャッシュヒット判定回路１０３は、そのタグメモリ１０１のリードデータを用いて、（先読み）キャッシュヒット判定を行い（Ｓ１２２）、先読みキャッシュヒット判定結果を結果保持回路１０５に保持する（Ｓ１２３）。
【００５４】
図１２は、Ｓ１２０〜Ｓ１２３のタグ先読み動作を行うタグ先読み期間を示している。図１２に示すように、アドレス予想部１０９及びメモリアクセス制御部１０８が、アドレスを予想しタグ先読みを実施するタイミング（タグ先読み期間）は、前回（ｎ回目）アクセスを受け付けたクロックサイクルＴ４０（Ｔ４０の初め）から、今回（ｎ＋１回目）アクセスを受け付けるクロックサイクルＴ４３の１サイクル前（クロックサイクルＴ４２の終わり）までの期間とする。ただし、その期間でタグメモリ１０１を用いたキャッシュヒット判定の期間とタグメモリ１０１の更新期間（リード及びライトアクセス）を除く。例えば、図１１のＳ１０７、Ｓ１１０〜Ｓ１１１を除いた期間で、アドレス予想部１０９及びメモリアクセス制御部１０８は、Ｓ１２０以降の動作を実行する。
【００５５】
その後、ＣＰＵ３００から次のアクセス（リード要求）を受け付けたとき（Ｓ１００）、メモリアクセス制御部１０８（またはアドレス予想部１０９）は、保持している先読みアドレスと今回受け付けたアクセスのアドレスを比較し、タグ先読み判定を行う（Ｓ１０１）。
【００５６】
Ｓ１０１において、先読みアドレスとアクセスされたアドレスが一致していた場合（タグ先読み当たりの場合）、メモリアクセス制御部１０８は、ＭＵＸ１０６を切り替えて結果保持回路１０５から保持されていた先読みキャッシュヒット判定結果を出力し、キャッシュヒット判定結果確認回路１０７は、保持されていた先読みキャッシュヒット判定結果を確認する（Ｓ１０２）。
【００５７】
Ｓ１０２において、保持されていた先読みキャッシュヒット判定結果がキャッシュヒットである場合、キャッシュヒット判定結果確認回路１０７（またはメモリアクセス制御部１０８）は、データメモリ１０２へのリードアクセスを行い（Ｓ１０３）、ＭＵＸ１０４はデータメモリ１０２の出力を選択し、データメモリ１０２からＣＰＵ３００へリードデータを出力する（Ｓ１０４）。
【００５８】
また、Ｓ１０２において、保持されていた先読みキャッシュヒット判定結果がキャッシュミスである場合、キャッシュヒット判定結果確認回路１０７（またはメモリアクセス制御部１０８）は、メインメモリ２００へのリードアクセスを行い（Ｓ１０５）、ＭＵＸ１０４はメインメモリ２００の出力を選択し、メインメモリ２００からＣＰＵ３００へリードデータを出力する（Ｓ１０６）。また、そのリードデータにより、タグメモリ１０１及びデータメモリ１０２を更新する（Ｓ１０７）。
【００５９】
一方、Ｓ１０１において、先読みアドレスとアクセスされたアドレスが不一致の場合（タグ先読み外れの場合）、メモリアクセス制御部１０８は、今回アクセスされたアドレスで、タグメモリ１０１とデータメモリ１０２へのリードアクセスを同時に行う（Ｓ１１０）。そして、キャッシュヒット判定回路１０３は、タグメモリ１０１からのリードデータを用いて、キャッシュヒット判定を行う（Ｓ１１１）。このとき、メモリアクセス制御部１０８は、ＭＵＸ１０６を切り替えてキャッシュヒット判定回路１０３のキャッシュヒット判定結果を出力する。
【００６０】
Ｓ１１１において、アクセスされたアドレスのキャッシュヒット判定結果がキャッシュヒットである場合、キャッシュヒット判定回路１０３（またはキャッシュヒット判定結果確認回路１０７）の制御によりＭＵＸ１０４はデータメモリ１０２の出力を選択し、アクセスされているデータメモリ１０２からリードデータをそのまま出力する（Ｓ１１２）。
【００６１】
また、Ｓ１１１において、アクセスされたアドレスのキャッシュヒット判定結果がキャッシュミスである場合、上記Ｓ１０５〜Ｓ１０７と同じ動作となる。すなわち、キャッシュヒット判定回路１０３（またはキャッシュヒット判定結果確認回路１０７やメモリアクセス制御部１０８）は、メインメモリ２００へのリードアクセスを行い（Ｓ１０５）、メインメモリ２００からリードデータを出力し（Ｓ１０６）、タグメモリ１０１及びデータメモリ１０２を更新する（Ｓ１０７）。
【００６２】
図１３は、本実施の形態に係るキャッシュメモリの動作タイミングを示している。クロックサイクルＴ５１〜Ｔ５２は、キャッシュオフ時の動作を示し、クロックサイクルＴ５４〜Ｔ５５は、（タグ先読みオフで）キャッシュヒット時の動作を示し、クロックサイクルＴ５８〜Ｔ６０は、キャッシュミスかつタグ先読み外れ時の動作を示し、クロックサイクルＴ６１〜Ｔ６２は、キャッシュミスかつタグ先読み当たり時の動作を示している。
【００６３】
キャッシュオフ時の動作では、実装例１及び実装例２と同様に、クロックサイクルＴ５１において、ＣＰＵ３００からのリード要求ＲＥＱに対し、メモリアクセス制御部１０８はＡＣＫ信号を出力し、クロックサイクルＴ５２において、メインメモリ２００へアクセスを行い、リードデータＲＤＡＴＡ及びＥＮＤ信号をＣＰＵ３００へ出力する。
【００６４】
キャッシュヒット時の動作では、実装例２と同様に、クロックサイクルＴ５４において、ＣＰＵ３００からリード要求ＲＥＱに対し、メモリアクセス制御部１０８はＡＣＫ信号を出力し、クロックサイクルＴ５５において、タグメモリ１０１及びデータメモリ１０２にアクセスを行って、キャッシュヒット判定回路１０３は、キャッシュヒット判定を行う。キャッシュヒット時、そのクロックサイクルＴ５５において、アクセスされたデータメモリ１０２からリードデータＲＤＡＴＡ及びＥＮＤ信号をＣＰＵ３００へ出力する。
【００６５】
キャッシュミスかつタグ先読み外れ時の動作では、クロックサイクルＴ５８において、ＣＰＵ３００からのリード要求ＲＥＱに対し、メモリアクセス制御部１０８は、ＡＣＫ信号を出力し、リード要求ＲＥＱのアドレスと先読みアドレスの一致／不一致を確認する。タグ先読み外れ（リード要求ＲＥＱのアドレスと先読みアドレスが不一致）の時、次のクロックサイクルＴ５９において、メモリアクセス制御部１０８は、タグメモリ１０１及びデータメモリ１０２にアクセスを行って、キャッシュヒット判定回路１０３がキャッシュヒット判定を行う。キャッシュミス時、次のクロックサイクルＴ６０で、メモリアクセス制御部１０８は、メインメモリ２００へアクセスを行い、リードデータＲＤＡＴＡ及びＥＮＤ信号をＣＰＵ３００へ出力する。
【００６６】
キャッシュミスかつタグ先読み当たり時の動作では、クロックサイクルＴ６１において、ＣＰＵ３００からリード要求ＲＥＱが出力されると、メモリアクセス制御部１０８は、ＣＰＵ３００へＡＣＫ信号を出力し、リード要求ＲＥＱのアドレスと先読みアドレスの一致／不一致を確認する。タグ先読み当たり（リード要求ＲＥＱのアドレスと先読みアドレスが一致）の時、キャッシュヒット判定結果確認回路１０７は、保持している先読みキャッシュヒット判定結果を確認する。先読みキャッシュヒット判定結果がキャッシュミスとなった時、次のクロックサイクルＴ６２で、メモリアクセス制御部１０８は、メインメモリ２００へアクセスを行い、リードデータＲＤＡＴＡ及びＥＮＤ信号をＣＰＵ３００へ出力する。なお、先読みキャッシュヒット判定結果がキャッシュヒットである場合も同様に、次のクロックサイクルＴ６２で、メモリアクセス制御部１０８は、データメモリ１０２へアクセスを行い、リードデータＲＤＡＴＡ及びＥＮＤ信号をＣＰＵ３００へ出力する。
【００６７】
図１４及び図１５は、それぞれダイレクトマップ方式とセットアソシアティブ方式の場合における、本実施の形態に係るキャッシュメモリのアクセス動作概要を示している。
【００６８】
本実施の形態では、タグメモリに対するキャッシュヒット判定及びタグメモリを更新していない時に、次のアクセスのアドレスを予想し、そのアドレスに対してあらかじめキャッシュヒット判定を行い、その結果を保持する。そして、次に受け付けたアクセスのアドレスが一致していた場合（タグ先読み当たり）、保持していた結果を用いてキャッシュヒットまたはキャッシュミスであることを確認し、アクセス制御を行う動作を実現するための制御部や保持回路を持つことを特徴とする。
【００６９】
実装例２では、タグメモリ及びデータメモリを同時にアクセスし、タグメモリからのリードデータを用いてキャッシュヒット判定を行う。そして、キャッシュヒット判定結果がキャッシュミスである場合、アクセスを受け付けてからデータを出力するまでのサイクルは、タグメモリのリードサイクルとメインメモリのリードアクセスにかかるサイクルの合計になる。
【００７０】
これに対して、本実施の形態では、前述した特徴を有することで、タグ先読み当たりでキャッシュヒット判定結果がキャッシュミスであった場合、即座にメインメモリへのアクセスが行うことができる。そのため、図１４に示すように、本実施の形態では、リードデータにかかるサイクルからタグメモリにアクセスするために必要なサイクル分を削減することができ、性能を向上することができる。また、データメモリへの無駄なアクセスを防ぐことができる。
【００７１】
また、セットアソシアティブ方式のキャッシュメモリの場合、タグメモリとデータメモリを同時にアクセスする実装例２では、データメモリのすべてのＷＡＹに対してアクセスする必要がある。これに対し、図１５に示すように、本実施の形態では、予めキャッシュヒットとなったＷＡＹを保持でき、リードデータが存在するデータメモリの１つのＷＡＹのみアクセスすることができるため、消費電力の削減が可能となる。
【００７２】
なお、特許文献１を用いて、タグ先読みをキャシュミス時のみ実施することも考えられる、本実施の形態では、キャッシュヒット時もタグ先読みを行うため、キャシュミス及びキャッシュヒットである場合のキャッシュヒット率の向上を図ることができる。
【００７３】
また、タグ先読みのみを行うため、想定したアドレス以外のアクセスが来た場合、本実施の形態では、無駄なメインメモリへのリードアクセスを行わず、キャッシュへの登録動作を行わないので消費電力の削減を図ることができる。
【００７４】
（実施の形態２）
以下、図面を参照して実施の形態２について説明する。本実施の形態は、実施の形態１と比較して、タグ先読み時の動作のみ異なっており、キャッシュメモリの基本的な構成については、実施の形態１の図１０と同様である。
【００７５】
図１６は、本実施の形態に係るキャッシュメモリの動作を示している。図１６に示すように、本実施の形態では、タグ先読みの前にキャッシュヒット判定結果を保持しておき、保持したキャッシュヒット判定結果に基づいてタグ先読み動作を制御する。その他の動作は実施の形態１と同様である。
【００７６】
すなわち、ＣＰＵ３００からのリード要求（Ｓ１００）に対し、メモリアクセス制御部１０８が、タグメモリ１０１及びデータメモリ１０２へのリードアクセスを行い（Ｓ１１０）、キャッシュヒット判定回路１０３が、キャッシュヒット判定を行った後（Ｓ１１２）、結果保持回路１０５は、行ったキャッシュヒット判定結果を保持する（Ｓ１１７、Ｓ１１８）。
【００７７】
その後、タグ先読みを行う際、アドレス予想部１０９及びメモリアクセス制御部１０８は、結果保持回路１０５に保持していた直前のキャッシュヒット判定結果を確認し（Ｓ１２４）、直前のキャッシュヒット判定結果がキャッシュミスである場合に、Ｓ１２０以降のタグ先読み動作を実行する。保持していた直前のキャッシュヒット判定結果がキャッシュヒットである場合は、Ｓ１２０以降のタグ先読み動作を実行しない。
【００７８】
キャッシュメモリは、ＣＰＵから要求されるアドレスへアクセスを行うため、アクセスするアドレスは、ＣＰＵが実行するプログラムに依存している。例えば、実行するプログラムの処理がシーケンシャルな処理であれば、順次、連続した次のアドレス（インクリメントしたアドレス）がアクセスされる。一方、実行するプログラムの処理がループのように分岐を含む処理の場合、分岐が発生した次にアクセスされるアドレスは分岐先の離れたアドレスとなる。実施の形態１では、タグ先読みが実行可能な状況で分岐の発生を考慮していないため、分岐発生時のタグ先読みは分岐前の次のアドレスに対して行われる。このため、実施の形態１では、この時のタグ先読みが無駄になってしまう。
【００７９】
例えば、図１７に示すように、アドレス０から始まるプログラムがあり、アドレス５の内容がアドレス１への分岐命令であったとする。この時、アドレス０からプログラムが開始すると、実施の形態１では、アドレス５の時のタグ先読みの対象はアドレス６となる。しかし、実際にアクセスが行われるのはアドレス１となり、必ずタグ先読みが失敗する。
【００８０】
そこで、本実施の形態では、このようなタグ先読みを減らすために、上記のようにタグ先読みを行う条件を追加する。ここでは、“直前のキャッシュヒット判定がキャッシュミスだった場合のみタグ先読みを実行”という条件を追加する。必要に応じてこの条件を使用する・使用しないを選択できるように制御してもよい。
【００８１】
このように、本実施の形態は、実施の形態１に対しタグ先読みの条件を追加することが特徴である。これにより、図１７で示したような分岐を伴うプログラムでループ部分がキャッシュに収まるとき、無駄なタグ先読みを減らすことができる。
【００８２】
図１８は、図１７のプログラムのループ処理実行時の動作を示している。例えば、アドレス５に１回目にアクセスした際（ループ０回目）には、キャッシュは未登録である。そのため、無駄なタグ先読みが発生する。しかし、２回目以降（ループ１回目以降）にアドレス５にアクセスした場合、キャッシュ（タグメモリ及びデータメモリ）にデータが登録されておりキャッシュヒットとなるため、上記の条件に従いタグ先読みを行わない。そのため、本実施の形態では、無駄なタグ先読み回数を削減することができる。
【００８３】
（実施の形態３）
以下、図面を参照して実施の形態３について説明する。本実施の形態では、並列キャッシュメモリに実施の形態１のタグ先読み機能（回路）を適用する例について説明する。なお、実施の形態２も同様に適用可能である。
【００８４】
＜基本例＞
図１９は、並列キャッシュメモリの基本例の構成を示している。図１９に示すように、基本例の並列キャッシュメモリ１２０は、Ｌ１キャッシュメモリ１００ａ及びＬ２キャッシュメモリ１００ｂを備えている。Ｌ１キャッシュメモリ１００ａ及びＬ２キャッシュメモリ１００ｂは、ＣＰＵ３００とメインメモリ２００の間で、並列に接続されている。Ｌ１キャッシュメモリ（一次キャッシュメモリ、第１のキャッシュメモリ）１００ａは、Ｌ２キャッシュメモリ（二次キャッシュメモリ、第２のキャッシュメモリ）１００ｂよりも記憶容量が小さく低消費電力であり、またＬ２キャッシュメモリよりもアクセス速度が速い（もしくは同等の速度である）。なお、さらに複数のキャッシュメモリを並列に接続してもよい。
【００８５】
図１９では、一例として、Ｌ１キャッシュメモリ１００ａに実装例１のキャッシュメモリを適用し、Ｌ２キャッシュメモリに実装例２のキャッシュメモリを適用する。Ｌ１キャッシュメモリ１００ａは、実装例１と同様に、タグメモリ１０１ａ（第１のタグメモリ）、データメモリ１０２ａ（第１のデータメモリ）、キャッシュヒット判定回路１０３ａ（第１のキャッシュヒット判定回路）、メモリアクセス制御部１１１ａ（第１のメモリアクセス制御部）を備えている。Ｌ２キャッシュメモリ１００ｂは、実装例２と同様に、タグメモリ１０１ｂ（第２のタグメモリ）、データメモリ１０２ｂ（第２のデータメモリ）、キャッシュヒット判定回路１０３ｂ（第２のキャッシュヒット判定回路）、ＭＵＸ１０４ｂ、メモリアクセス制御部１１２ｂ（第２のメモリアクセス制御部）を備えている。また、並列キャッシュメモリ１２０は、Ｌ１キャッシュメモリ１００ａ及びＬ２キャッシュメモリ１００ｂのキャッシュヒット判定結果に応じて、Ｌ１キャッシュメモリ１００ａとＬ２キャッシュメモリ１００ｂとの出力を選択するＭＵＸ１１０を備えている。
【００８６】
Ｌ１キャッシュメモリ１００ａでは、タグメモリ１０１ａ及びデータメモリ１０２ａがともにＦＦで構成されている。Ｌ１キャッシュメモリ１００ａでは、実装例１と同様に、タグメモリ１０１ａのリードデータでキャッシュヒット判定を行い、キャッシュヒット時のみデータメモリ１０２ａにリードアクセスする。
【００８７】
Ｌ１キャッシュメモリ１００ａでは、タグメモリ１０１ａ及びデータメモリ１０２ａがＦＦで構成されているため、キャッシュヒット判定に１サイクルかからず、ＳＲＡＭで構成した場合である実装例１のように性能が低下するという問題は発生しない。しかし、タグメモリ１０１ａ及びデータメモリ１０２ａをＦＦで構成するため、回路面積はＳＲＡＭで構成した場合と比較して大幅に増加する。
【００８８】
Ｌ２キャッシュメモリ１００ｂは、タグメモリ１０１ｂ及びデータメモリ１０２ｂともにＳＲＡＭで構成されている。Ｌ２キャッシュメモリ１００ｂは、実装例２と同様に、タグメモリ１０１ｂとデータメモリ１０２ｂへ同時にアクセスを行い、キャッシュヒット時にデータメモリ１０２ｂからリードデータを出力し、キャッシュミス時にメインメモリ２００へリードアクセスを行う。
【００８９】
並列キャッシュメモリ１２０の動作を説明する。まず、並列キャッシュメモリ１２０は、ＣＰＵ３００からアクセスを受け付けると、Ｌ１キャッシュメモリ１００ａでキャッシュヒット判定を実施し、キャッシュヒットである場合、Ｌ１キャッシュメモリ１００ａのデータメモリ１０２ａからリードデータを出力する。Ｌ１キャッシュメモリ１００ａでキャッシュミスである場合、Ｌ２キャッシュメモリ１００ｂでキャッシュヒット判定を実施する。
【００９０】
Ｌ２キャッシュメモリ１００ｂでキャッシュヒットである場合、データメモリ１０２ｂからリードデータを出力し、Ｌ１キャッシュメモリ１００ａのタグメモリ１０１ａ及びデータメモリ１０２ａにアクセスしたリードデータを登録する。Ｌ２キャッシュメモリ１００ｂでもキャッシュミスである場合、メインメモリ２００へアクセスを行い、読み出したリードデータを出力するとともに、Ｌ１キャッシュメモリ１００ａのタグメモリ１０１ａ及びデータメモリ１０２ａ、Ｌ２キャッシュメモリ１００ｂのタグメモリ１０１ｂ及びデータメモリ１０２ｂにリードデータを登録する。
【００９１】
並列キャッシュメモリ１２０は、アクセスを受け付けたサイクルで、Ｌ１キャッシュメモリ１００ａ及びＬ２キャッシュメモリ１００ｂともに動作することができる。並列キャッシュメモリでは、Ｌ１キャッシュメモリとＬ２キャッシュメモリを並列に動作させることで、効率よくメモリアクセスを行うことができる。しかし、Ｌ１キャッシュメモリ及びＬ２キャッシュメモリともにキャッシュミスとなった場合、通常のキャッシュメモリと同様にメインメモリにアクセスすると、リードサイクルにＬ２キャッシュメモリのタグリードのアクセスサイクル分余計に必要となる。
【００９２】
そこで、本実施の形態では、並列キャッシュメモリに実施の形態１のタグ先読み機能（回路）を実装し、Ｌ２キャッシュメモリのみ、又は、Ｌ１キャッシュメモリ及びＬ２キャッシュメモリでタグ先読みを行う。このようにすることで、Ｌ１キャッシュメモリ及びＬ２キャッシュメモリでともにキャッシュミスとなり、メインメモリにアクセス行う場合、リードサイクルからタグメモリのアクセスに必要なサイクル分を削減することができる。
【００９３】
以下、適用例１では、Ｌ２キャッシュメモリのみでタグ先読みを行う例について説明し、適用例２では、Ｌ１キャッシュメモリ及びＬ２キャッシュメモリでタグ先読みを行う例について説明する。
【００９４】
＜適用例１＞
図２０は、本実施の形態の適用例１に係る並列キャッシュメモリの構成例を示している。図２０に示すように、適用例１の並列キャッシュメモリ１２１は、Ｌ１キャッシュメモリ１００ａとＬ２キャッシュメモリ１００ｂを備えており、Ｌ１キャッシュメモリ１００ａは基本例と同じ構成である。
【００９５】
適用例１のＬ２キャッシュメモリ１００ｂは、実施の形態１と同様に、タグメモリ１０１ｂ（第２のタグメモリ）、データメモリ１０２ｂ（第２のデータメモリ）、キャッシュヒット判定回路１０３ｂ（第２のキャッシュヒット判定回路）、ＭＵＸ１０４ｂ、結果保持回路１０５ｂ（第２の結果保持回路）、ＭＵＸ１０６ｂ、キャッシュヒット判定結果確認回路１０７ｂ（第２のキャッシュヒット判定結果確認回路）、メモリアクセス制御部１０８ｂ（第２のメモリアクセス制御部）、アドレス予想部１０９ｂ（第２のアドレス予想部）を備えている。
【００９６】
Ｌ２キャッシュメモリ１００ｂでは、タグメモリ１０１ｂ及びデータメモリ１０２ｂともにＳＲＡＭで構成されており、実施の形態１と同様に、予めタグ先読みを行い、先読みのキャッシュヒット判定結果に基づいて、データメモリ１０２ｂまたはメインメモリ２００へリードアクセスを行う。
【００９７】
図２１Ａ及び図２１Ｂは、本実施の形態の適用例１に係る並列キャッシュメモリの動作を示している。図２１Ａに示すように、まず、ＣＰＵ３００からリード要求を受けると（Ｓ１００）、Ｌ１キャッシュメモリ１００ａでは、基本例と同様に、キャッシュヒット判定を実施し、キャッシュヒットである場合、データメモリ１０２ａからリードデータを出力する（Ｓ１１０ａ〜Ｓ１１３ａ）。
【００９８】
その後、Ｌ１キャッシュメモリ１００ａのキャッシュヒット判定結果がキャッシュミスである場合、図２１Ｂに示すように、実施の形態１と同様に、先読みアドレスを判定する。タグ先読み当たりの場合、先読みキャッシュヒット判定結果がキャッシュヒットであれば、データメモリ１０２ｂへのアクセス及びリードデータの出力を行い、Ｌ１キャッシュメモリ１００ａのタグメモリ１０１ａ及びデータメモリ１０２ａにアクセスしたリードデータを登録する（Ｓ１０１ｂ〜Ｓ１０４ｂ、Ｓ１０８ｂ）。
【００９９】
また、先読みキャッシュヒット判定結果がキャッシュミスであれば、メインメモリ２００へのアクセス及びリードデータの出力を行い、Ｌ１キャッシュメモリ１００ａのタグメモリ１０１ａ及びデータメモリ１０２ａ、Ｌ２キャッシュメモリ１００ｂのタグメモリ１０１ｂ及びデータメモリ１０２ｂにリードデータを登録する（Ｓ１０５ｂ〜Ｓ１０７ｂ）。
【０１００】
一方、タグ先読み外れの場合、タグメモリ１０１ｂ及びデータメモリ１０２ｂへアクセスを行って、キャッシュヒット判定結果がキャッシュヒットであれば、データメモリ１０２ｂからリードデータを出力し、Ｌ１キャッシュメモリ１００ａのタグメモリ１０１ａ及びデータメモリ１０２ａにアクセスしたリードデータを登録する（Ｓ１１０ｂ〜Ｓ１１３ｂ）。また、キャッシュヒット判定結果がキャッシュミスであれば、上記Ｓ１０５ｂ〜Ｓ１０７ｂの動作となる。
【０１０１】
Ｌ２キャッシュメモリ１００ｂでのタグ先読みは、実施の形態１と同様に、Ｌ２キャッシュメモリのタグメモリ１０１ｂへのアクセスが行われていない際に、次のアドレス（先読みアドレス）を予想し、タグメモリ１０１ｂへアクセスを行って、先読みキャッシュヒット判定結果を保持する（Ｓ１２０ｂ〜Ｓ１２３ｂ）。
【０１０２】
＜適用例２＞
図２２は、本実施の形態の適用例２に係る並列キャッシュメモリの構成例を示している。図２２に示すように、適用例２の並列キャッシュメモリ１２２は、Ｌ１キャッシュメモリ１００ａとＬ２キャッシュメモリ１００ｂを備えており、Ｌ２キャッシュメモリ１００ｂは適用例１と同じ構成である。
【０１０３】
適用例２のＬ１キャッシュメモリ１００ａは、実施の形態１と同様に、タグメモリ１０１ａ（第１のタグメモリ）、データメモリ１０２ａ（第１のデータメモリ）、キャッシュヒット判定回路１０３ａ（第１のキャッシュヒット判定回路）、結果保持回路１０５ａ（第１の結果保持回路）、ＭＵＸ１０６ａ、キャッシュヒット判定結果確認回路１０７ａ（第１のキャッシュヒット判定結果確認回路）、メモリアクセス制御部１０８ａ（第１のメモリアクセス制御部）、アドレス予想部１０９ａ（第１のアドレス予想部）を備えている。
【０１０４】
Ｌ１キャッシュメモリ１００ａでは、タグメモリ１０１ａ及びデータメモリ１０２ａともにＦＦで構成されており、実施の形態１と同様に、予めタグ先読みを行い、先読みのキャッシュヒット判定結果に基づいて、データメモリ１０２ａのリードデータを出力する。
【０１０５】
図２３Ａ〜図２３Ｃは、本実施の形態の適用例２に係る並列キャッシュメモリの動作を示している。図２３Ｃに示すように、Ｌ１キャッシュメモリ１００ａでは、実施の形態１と同様に、Ｌ１キャッシュメモリのタグメモリ１０１ａにアクセスが行われていない時、予め次のアドレス（先読みアドレス）を予想し、タグメモリ１０１ａをリードし、先読みキャッシュヒット判定結果を保持する（Ｓ１２０ａ〜Ｓ１２３ａ）。
【０１０６】
その後、図２３Ａに示すように、ＣＰＵ３００からリード要求を受けると（Ｓ１００）、実施の形態１と同様に、先読みアドレスを判定し、タグ先読み当たりの場合、先読みキャッシュヒット判定結果がキャッシュヒットであれば、データメモリ１０２ａからリードデータを出力する（Ｓ１０１ａ〜Ｓ１０４ａ）。また、タグ先読み外れの場合、タグメモリ１０１ｂからデータをリードして、キャッシュヒット判定結果がキャッシュヒットであれば、データメモリ１０２ａからリードデータを出力する（Ｓ１１０ａ〜Ｓ１１３ａ）。
【０１０７】
一方、図２３Ｂに示すように、Ｌ２キャッシュメモリ１００ｂでは、タグ先読みを行う際、Ｌ１キャッシュメモリの先読みキャッシュヒット判定結果を確認し（Ｓ１２４ｂ）、Ｌ１キャッシュメモリの先読みキャッシュヒット判定結果がキャッシュミスである場合、適用例１と同様に、タグ先読みを行い（Ｓ１２０ｂ〜Ｓ１２３ｂ）、Ｌ１キャッシュメモリの先読みキャッシュヒット判定結果がキャッシュヒットである場合、タグ先読みを行わない。
【０１０８】
Ｌ２キャッシュメモリ１００ｂのタグ先読みの後、Ｌ１キャッシュメモリで先読みキャッシュヒット判定結果がキャッシュミスである場合、及び、タグ先読み外れでキャッシュヒット判定結果がキャッシュミスである場合、適用例１と同様に、先読みアドレスを判定する。タグ先読みアドレスの判定結果に基づいた動作は、適用例１と同様である（Ｓ１０１ｂ〜Ｓ１０８ｂ、Ｓ１１０ｂ〜Ｓ１１３ｂ）。
【０１０９】
並列キャッシュメモリのＬ１キャッシュメモリとＬ２キャッシュメモリの両方に単純にタグ先読み機能を実装した場合、Ｌ１キャッシュメモリとＬ２キャッシュメモリでタグ先読みを同時に行うため、Ｌ２キャッシュで無駄なタグ先読みを行ってしまう場合が考えられる。例えば、Ｌ１キャッシュでタグ先読みのキャッシュヒット判定結果がキャッシュヒットである場合、Ｌ２キャッシュでのタグ先読みは無駄なタグ先読みとなる。
【０１１０】
このような無駄なタグ先読みを回避するため、本実施の形態では、上記のようにＬ２キャッシュメモリでタグ先読みを行う条件を追加することで、無条件にＬ２キャッシュでのタグ先読みを行わないようにする。Ｌ２キャッシュメモリのタグ先読みを行う条件を追加することで無駄なタグ先読みの実行を抑止し、キャッシュメモリアクセス分の電力削減の効果を期待できる。
【０１１１】
Ｌ２キャッシュメモリのタグ先読みが無駄になるのは、Ｌ１キャッシュメモリでタグ先読みの対象となるアドレスのリードデータが登録されているときである。そのため、このような条件のとき、タグ先読みを行わない条件を追加する。例えば、Ｌ１キャッシュメモリでのタグ先読みのキャッシュヒット判定結果がキャッシュヒットとなったときなどが挙げられる。この時、Ｌ２キャッシュメモリでタグ先読みを行わないといった条件が考えられる。それ以外にも並列キャッシュメモリの構成によって、Ｌ２キャッシュメモリがタグ先読みを行う条件を挙げることができる。そのため、Ｌ２キャッシュメモリのタグ先読み条件は、並列キャッシュメモリの構成に応じて最適な条件としてもよい。
【０１１２】
次に、適用例２の具体例について説明する。前述したように、並列キャッシュメモリでの構成により、有効なＬ２キャッシュメモリのタグ先読み条件は異なる。ここではタグ先読み条件として、並列キャッシュメモリとこれにアクセスするマスタ（ＣＰＵ等）間のデータバス幅を６４ビット、キャッシュメモリとメインメモリ間のバス幅を１２８ビットとする。この場合ではデータメモリのリードデータの保持ビットは１２８ビットになる。以下の先読み条件は、マスタ‐キャッシュ間のバス幅がキャッシュ‐メインメモリ間のバス幅の１／２である場合に適用可能である。
【０１１３】
このような構成で、マスタから並列キャッシュメモリにアクセスが行われるとする。この時、並列キャッシュメモリの動作は、（１）Ｌ１キャッシュメモリでキャッシュヒット、（２）Ｌ１キャッシュメモリでキャッシュミス、（３）Ｌ１キャッシュメモリ及びＬ２キャッシュメモリともにキャッシュミス、という３つの状況が想定できる。
【０１１４】
（１）Ｌ１キャッシュメモリでキャッシュヒットとなった場合、キャッシュメモリは１２８ビットでリードデータを保持しているため、今回アクセスしたアドレスの前後いずれかのアドレスのリードデータは必ずＬ１キャッシュメモリに保持されている。
【０１１５】
（２）Ｌ１キャッシュメモリでキャッシュミスとなった場合、Ｌ２キャッシュメモリでキャッシュヒットとなったリードデータが、１２８ビットでＬ１キャッシュメモリに登録される。そのため、（１）の場合と同様に、次のアクセス時には今回アクセスしたアドレスの前後いずれかのアドレスのリードデータがＬ１キャッシュメモリに保持されている。
【０１１６】
（３）Ｌ１キャッシュメモリ及びＬ２キャッシュメモリともにキャッシュミスとなった場合も同様に、メインメモリから読み出された１２８ビットのリードデータがＬ１キャッシュメモリ及びＬ２キャッシュメモリに登録されるため、今回アクセスしたアドレスの前後いずれかのアドレスのリードデータがＬ１キャッシュメモリに保持されている。
【０１１７】
そのため、アドレスの下位４ビット００ｈであるアドレスに対してアクセスが行われた場合、リードデータが読み出された時点で、連続するアドレス０８ｈのリードデータはＬ１キャッシュメモリ内に登録されていることになる。つまり、００ｈ、０８ｈ、１０ｈと分岐せずにアドレスが連続してアクセスした場合、Ｌ２キャッシュメモリでの０８ｈに対するタグ先読みは必ず無駄になる。
【０１１８】
また、０８ｈの次アドレス（１０ｈ）の内容が、キャッシュメモリにデータ登録されていることは保証されていない。そのため、まず、Ｌ１キャッシュメモリでタグ先読みを実施し、その結果を持ってＬ２キャッシュメモリでタグ先読みを行うか否かを決定する。Ｌ１キャッシュメモリでキャッシュヒットとなった場合、Ｌ２キャッシュメモリへのタグ先読みを行わない。逆にＬ１キャッシュメモリでキャッシュミスとなった場合、Ｌ２キャッシュメモリでタグ先読みを実施する。
【０１１９】
これらのことより、“キャッシャブル領域の分岐でないアドレスの下位４ｂｉｔが８番地であるアドレスアクセス時に次の連続するアドレスである０番地のＬ１キャッシュメモリでタグ先読みを実施してキャッシュミスとなること”をＬ２キャッシュメモリのタグ先読み条件とすることで、Ｌ２キャッシュメモリにおける無駄なタグ先読みを削減することができる。
【０１２０】
上記実施の形態において、ＣＰＵで実行されるプログラムや、キャッシュメモリの動作をソフトウェアで実現する場合に必要となるプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（ｔａｎｇｉｂｌｅ  ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【０１２１】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【０１２２】
１      半導体装置
１０    キャッシュメモリ装置
１１    データメモリ
１２    タグメモリ
１３    アドレス予想部
１４    キャッシュヒット判定部
１５    キャッシュヒット判定結果保持部
１６    アクセス制御部
１７    タグ先読み制御部
２０    メインメモリ
３０    マスタ
１００  キャッシュメモリ
１００ａ  Ｌ１キャッシュメモリ
１００ｂ  Ｌ２キャッシュメモリ
１０１、１０１ａ、１０１ｂ  タグメモリ
１０２、１０２ａ、１０２ｂ  データメモリ
１０３、１０３ａ、１０３ｂ  キャッシュヒット判定回路
１０５、１０５ａ、１０５ｂ  結果保持回路
１０７、１０７ａ、１０７ｂ  キャッシュヒット判定結果確認回路
１０８、１０８ａ、１０８ｂ  メモリアクセス制御部
１０９、１０９ａ、１０９ｂ  アドレス予想部
１１１、１１１ａ  メモリアクセス制御部
１１２、１１２ｂ  メモリアクセス制御部
１２０、１２１、１２２  並列キャッシュメモリ
２００  メインメモリ
３００  ＣＰＵ
【図１】
2018106227.tif 000003
【図２】
2018106227.tif 000004
【図３】
2018106227.tif 000005
【図４】
2018106227.tif 000006
【図５】
2018106227.tif 000007
【図６】
2018106227.tif 000008
【図７】
2018106227.tif 000009
【図８】
2018106227.tif 000010
【図９】
2018106227.tif 000011
【図１０】
2018106227.tif 000012
【図１１】
2018106227.tif 000013
【図１２】
2018106227.tif 000014
【図１３】
2018106227.tif 000015
【図１４】
2018106227.tif 000016
【図１５】
2018106227.tif 000017
【図１６】
2018106227.tif 000018
【図１７】
2018106227.tif 000019
【図１８】
2018106227.tif 000020
【図１９】
2018106227.tif 000021
【図２０】
2018106227.tif 000022
【図２１Ａ】
2018106227.tif 000023
【図２１Ｂ】
2018106227.tif 000024
【図２２】
2018106227.tif 000025
【図２３Ａ】
2018106227.tif 000026
【図２３Ｂ】
2018106227.tif 000027
【図２３Ｃ】
2018106227.tif 000028