(57)【要約】  複数のウェイがそれぞれタグを１個のみ備えるマイコンであって、第１アクセスと第２アクセスが互いに連続して実行され、連続するアドレスへのアクセスであり、第２アクセスが第１ウェイを介するアクセスであるとき、キャッシュ制御部は次の動作を行う。第２アクセスが第１アクセスに対してアドレスが増加する方向でのアクセスのときには、第１ウェイに対応するタグ値よりも１小さいタグ値を持つウェイに対してデータの先読みを行ない、アドレスが減少する方向でのアクセスのときには、第１ウェイに対応するタグ値よりも１大きいウェイに対してデータの先読みを行う。これにより、複数ウェイで構成されるキャッシュメモリにおいて、そのまま複数ウェイとして機能するか、２ウェイが互いのウェイの先読みデータの格納先として、１つのウェイとして機能するかを、アクセス履歴に応じて自律的に切り替えることができる。
2014068694.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、メモリと、複数のタグと、前記タグに格納されるタグ値を基準アドレスとして前記メモリの連続するアドレスの複数のデータをそれぞれ格納可能な複数のウェイと、キャッシュ制御部を備える半導体装置であって、
前記複数のウェイのそれぞれに、前記ウェイに対する直近の２回のアクセスがアドレスの増加または減少のどちらかの方向を示すアドレス変化方向フラグを設け、
前記キャッシュ制御部は、前記プロセッサから前記メモリに対して連続して行う第１アクセスと第２アクセスが互いに連続するアドレスへのアクセスであり、前記第２アクセスが第１ウェイを介するアクセスであり、前記第１ウェイに対応するアドレス変化方向フラグと一致するアドレス変化方向フラグを持ち、前記第１ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向と逆方向で連続するタグ値を持つ、第２ウェイに対して、前記第１ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向で連続するタグ値で示されるデータの先読みを可能に構成される、半導体装置。
【請求項２】
請求項１において、前記キャッシュ制御部は、前記第２アクセスが前記第１アクセスと同一のウェイで且つ同一のタグ値へのアクセスであるときに、前記第２アクセスの対象アドレスが前記第１アクセスの対象アドレスより小さいとき、前記アドレス変化方向フラグをセット可能に構成される、半導体装置。
【請求項３】
請求項１において、前記キャッシュ制御部は、キャッシュミスのとき、前記ウェイに格納されるデータの合計のデータ長の整数分の１のデータ長の単位で、キャッシュフィルを実行可能に構成される、半導体装置。
【請求項４】
請求項３において、前記キャッシュ制御部は、前記複数のウェイのそれぞれに、前記キャッシュフィルのデータ長の単位ごとに、有効フラグを備え、キャッシュミスが発生したとき、キャッシュフィルの対象のウェイに対応する前記有効フラグを全てクリアし、キャッシュフィルしたデータに対応する前記有効フラグをセット可能に構成される、半導体装置。
【請求項５】
請求項４において、前記キャッシュ制御部は、前記第２アクセスの後、前記第１ウェイに対応するアドレス変化方向フラグによって示される方向で、対応する前記有効フラグがセットされていない前記第１ウェイ内の領域へのデータの先読みを可能に構成される、半導体装置。
【請求項６】
請求項５において、前記キャッシュ制御部は、前記第２ウェイに対応するアドレス変化方向フラグと前記第１ウェイに対応するアドレス変化方向フラグとが一致し、前記第２ウェイに対応するタグ値が前記第１ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向と逆方向で連続するときに、前記第１ウェイ内の領域へのデータの先読みの後に、前記第２ウェイに対するデータの先読みを可能に構成され、
前記第２ウェイに対応するアドレス変化方向フラグと前記第１ウェイに対応するアドレス変化方向フラグとが一致せず、または、前記第２ウェイに対応するタグ値が前記第１ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向と逆方向で連続しないときに、前記第１ウェイ内の領域へのデータの先読みの後に、前記第１ウェイ内の前記第２アクセスの後、前記第１ウェイに対応するアドレス変化方向フラグによって示される方向と逆方向の、前記第１ウェイ内の領域へのデータの先読みを可能に構成される、半導体装置。
【請求項７】
請求項１において、前記プロセッサは、前記第２アクセスの終了後、前記キャッシュメモリが前記先読みを完了する前に、前記第２アクセスの後続のアクセスを実行可能に構成される、半導体装置。
【請求項８】
請求項１において、前記複数のウェイのそれぞれは、前記メモリの任意のアドレスのデータをキャッシュすることが可能に構成される、半導体装置。
【請求項９】
請求項１において、命令キャッシュをさらに備え、前記複数のウェイは、前記プロセッサに対するデータキャッシュである、半導体装置。
【請求項１０】
プロセッサとメモリの間に設けられ、複数のタグと前記タグに格納されるタグ値を基準アドレスとして前記メモリの連続するアドレスの複数のデータをそれぞれ格納可能な複数のウェイとを備える、キャッシュメモリにおけるデータ先読み方法であって、
前記プロセッサから前記メモリに対する第１アクセスと連続する第２アクセスが互いに連続するアドレスへのアクセスであるか否かを判定する第１ステップと、
前記第１ステップの判定結果が連続アドレスへのアクセスであるとき、前記第１アクセスと前記第２アクセスが前記複数のウェイのうちの同一ウェイに対する同一タグ値によるアクセスであるとき、前記ウェイに対する直近の２回のアクセスがアドレスの増加または減少のどちらの方向かを示すアドレス変化方向属性を付与する第２ステップと、
前記第２アクセスによって第１ウェイをアクセスする第３ステップと、
前記第１ウェイと同一のアドレス変化方向属性を持ち、前記第１ウェイのタグ値に対して、前記同一のアドレス変化方向属性が示す方向と逆方向に連続するタグ値を持つ第２ウェイの有無を判定する第４ステップと、
前記第４ステップの有の判定結果に基づいて、前記第２ウェイを対象として、前記アドレス変化方向属性が示す方向で連続するタグ値で示されるデータの先読みを行う、第５ステップとを含む、データ先読み方法。
【請求項１１】
請求項１０において、前記第３ステップがキャッシュヒットかキャッシュミスかに関わらず、前記第４ステップは前記第３ステップの後に実行され、前記第３ステップがキャッシュミスであるときは、前記第３ステップは前記第１ウェイのタグ値を更新し、前記第５ステップは更新された前記第１ウェイのタグ値に基づいて前記先読みを行うか否かの判定を行う、データ先読み方法。
【請求項１２】
請求項１０において、前記第１ステップは、前記第２アクセスが前記第１アクセスと同一のウェイで且つ同一のタグ値へのアクセスであるときに、前記第２アクセスの対象アドレスが前記第１アクセスの対象アドレスより小さいとき、前記アドレス変化方向属性としてアドレス減少方向をセットする、データ先読み方法。
【請求項１３】
請求項１０において、前記第３ステップは、キャッシュミスのとき、前記ウェイに格納されるデータの合計のデータ長の整数分の１のデータ長の単位で、キャッシュフィルを行う、データ先読み方法。
【請求項１４】
請求項１３において、前記複数のウェイのそれぞれは、前記キャッシュフィルのデータ長の単位ごとに、有効フラグを備え、前記第３ステップでキャッシュミスが発生したとき、キャッシュフィルの対象のウェイに対応する前記有効フラグを全てクリアし、キャッシュフィルしたデータに対応する前記有効フラグをセットする、データ先読み方法。
【請求項１５】
請求項１４において、前記第３ステップの後、前記第１ウェイに対応するアドレス変化方向属性によって示される方向で、対応する前記有効フラグがセットされていない前記第１ウェイ内の領域へのデータの先読みを行う、第６ステップをさらに含む、データ先読み方法。
【請求項１６】
請求項１５において、前記第６ステップの後で前記第４ステップを実行し、前記第４ステップの無の判定結果に基づいて、前記第１ウェイに対応するアドレス変化方向属性によって示される方向と逆の方向で、対応する前記有効フラグがセットされていない前記第１ウェイ内の領域へのデータの先読みを行う、第７ステップをさらに含む、データ先読み方法。
【請求項１７】
プロセッサと、メモリと、互いに１：１対応する複数のタグと複数のウェイとキャッシュ制御部を備える半導体装置であって、
前記プロセッサから前記メモリに対する第１アクセスと第２アクセスが互いに連続して実行され、連続するアドレスへのアクセスであり、前記第２アクセスが第１ウェイを介するアクセスであるとき、
前記キャッシュ制御部は、前記第２アクセスが前記第１アクセスに対してアドレスが増加する方向でのアクセスであるときには、前記第１ウェイに対応するタグ値よりも１小さいタグ値を持つウェイに対するデータの先読みを可能とし、前記第２アクセスが前記第１アクセスに対してアドレスが減少する方向でのアクセスであるときには、前記第１ウェイに対応するタグ値よりも１大きいウェイに対するデータの先読みを可能に構成される、半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュメモリへのデータ先読み技術に関し、特にキャッシュメモリを備えた半導体装置に適用して有効な技術に関する。
【背景技術】
【０００２】
ＩＣカード（Integrated Circuit Card）などに用いられるセキュアマイコンにおいて、近年、ＣＰＵ（Central Processing Unit）の動作周波数が高まり、合せて大容量の不揮発メモリが搭載される傾向にある。ＣＰＵと大容量不揮発メモリの動作周波数の差が顕著となってきており、それを吸収するためにキャッシュメモリを搭載するものが増えてきている。しかし、ＩＣカードなどでの利用を許容するために、回路規模や消費電力が極めて小さく制限されている。【０００３】
キャッシュメモリには、種々の方式が提案されている。例えば、命令キャッシュとデータキャッシュに分ける技術、キャッシュメモリを複数のウェイで構成する技術、命令コードを含むデータの先読みをする技術、などである。セキュアマイコンにおいても、このような技術の採用は有効であるが、一方、回路規模や消費電力に対する厳しい制約を満たす必要もある。【０００４】
特許文献１及び２には、キャッシュメモリにおけるデータの先読み技術が開示されている。特許文献１には、キャッシュミスが発生したとき、アクセス対象のデータを含むデータブロックを読込み、さらに、設定された隣接方向のデータブロックを先読みする技術が開示されている。設定される隣接方向は、アクセス履歴に追随して更新されるので、先読みの方向も追随させることができる。特許文献２には、複数ウェイのセットアソシャティブ方式のキャッシュメモリにおいて、次に読み出されると予想されるデータを予め複数のウェイのいずれから読み出されるかを予想して先読みしておき、実際のアクセスにおいて不要なウェイにアクセスすることを防止する技術が開示されている。【０００５】
特許文献３には、不揮発メモリにおいて、ロウアドレス系選択動作により１ページ分のデータを一括してプリリードキャッシュに読み出し、その後カラムアドレス系動作でその一部を選択して読み出す技術が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平06-75853号公報
【特許文献２】特開2005-84999号公報
【特許文献３】特開2012-38385号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１、２、及び３について本発明者が検討した結果、以下のような新たな課題があることがわかった。【０００８】
ＩＣカードなどに用いられるセキュアマイコンにおいても、命令キャッシュとデータキャッシュに分ける技術、複数のウェイで構成する技術、及び、データの先読みをする技術は、有効であると考えられる。暗号技術では、長大なビット長の暗号鍵を使った暗号の復号演算などがあり、一連のデータの連続アクセスが予想されるので、先読み技術が有効である。認証のための照合処理では、２つのデータ系列からの連続アクセスが予想されるので、複数ウェイの採用が有効である。【０００９】
複数ウェイのキャッシュを採用した場合、暗号の復号演算などの一連のデータの連続アクセスでは、１つのウェイのみが使われ、他のウェイが使われない恐れがある。それぞれのウェイに容量の大きなメモリアレイを備えることができれば、大きな問題ではないが、１ウェイに不揮発メモリの１ブロック分（１ライン分）の容量のメモリアレイしか搭載できない場合には、データの先読みをしても次に先読みをするデータを格納すべき領域は残らない。１ライン毎に必ずキャッシュミスが発生し、キャッシュフィルのためオーバーヘッドが発生する。２ウェイ分の容量のメモリアレイを１ウェイとして用いれば、その１ウェイ内で先読みが実行でき、１ライン毎のキャッシュミスは発生しないが、２つのデータ系列からの連続アクセスの場合には、データアクセスごとにキャッシュミスが発生する。【００１０】
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１１】
本願において開示される発明のうち代表的なものについて簡単に説明すれば下記のとおりである。【００１２】
すなわち、プロセッサと、メモリと、互いに対応する複数のタグと複数のウェイとキャッシュ制御部を備える半導体装置であって、以下のような動作が可能に構成される。【００１３】
キャッシュ制御部は、第１アクセスと第２アクセスが互いに連続して実行される、連続するアドレスへのアクセスであり、第２アクセスが第１ウェイを介するアクセスであるとき、次の動作を行う。第２アクセスが第１アクセスに対してアドレスが増加する方向でのアクセスであるとき、第１ウェイに対応するタグ値よりも１小さいタグ値を持つウェイに対するデータの先読みを行う。第２アクセスが第１アクセスに対してアドレスが減少する方向でのアクセスであるとき、第１ウェイに対応するタグ値よりも１大きいウェイに対するデータの先読みを行う。
【発明の効果】
【００１４】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。【００１５】
すなわち、複数ウェイで構成されるキャッシュメモリにおいて、そのまま複数ウェイとして機能するか、２ウェイが互いのウェイの先読みデータの格納先として、１つのウェイとして機能するかを、アクセス履歴に応じて自律的に切り替えることができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、一実施形態に係る半導体装置の動作例を表すフローチャートである。
【図２】図２は、一実施形態に係る半導体装置の構成例を表すブロック図である。
【図３】図３は、一実施形態に係る半導体装置の詳細な動作例を表すフローチャート（１／４）である。
【図４】図４は、一実施形態に係る半導体装置の詳細な動作例を表すフローチャート（２／４）である。
【図５】図５は、一実施形態に係る半導体装置の詳細な動作例を表すフローチャート（３／４）である。
【図６】図６は、一実施形態に係る半導体装置の詳細な動作例を表すフローチャート（４／４）である。
【図７】図７は、一実施形態に係る２ウェイのキャッシュが独立に動作する場合の動作例を表す説明図である。
【図８】図８は、一実施形態に係る２ウェイのキャッシュが互いに他の先読み対象となって１ウェイとして、アドレスがインクリメント方向（デクリメントフラグ＝０）の先読み動作する場合の動作例を表す説明図である。
【図９】図９は、一実施形態に係る２ウェイのキャッシュが互いに他の先読み対象となって１ウェイとして、アドレスがデクリメント方向（デクリメントフラグ＝１）の先読み動作する場合の動作例を表す説明図である。
【図１０】図１０は、比較例に係る半導体装置の動作例を表すタイミングチャート（１／４）である。
【図１１】図１１は、比較例に係る半導体装置の動作例を表すタイミングチャート（２／４）である。
【図１２】図１２は、比較例に係る半導体装置の動作例を表すタイミングチャート（３／４）である。
【図１３】図１３は、比較例に係る半導体装置の動作例を表すタイミングチャート（４／４）である。
【図１４】図１４は、２ウェイのキャッシュが互いに他の先読み対象となって１ウェイとして先読み動作する場合の動作例を表すタイミングチャート（１／３）である。
【図１５】図１５は、２ウェイのキャッシュが互いに他の先読み対象となって１ウェイとして先読み動作する場合の動作例を表すタイミングチャート（２／３）である。
【図１６】図１６は、２ウェイのキャッシュが互いに他の先読み対象となって１ウェイとして先読み動作する場合の動作例を表すタイミングチャート（３／３）である。
【図１７】図１７は、２ウェイのキャッシュがそれぞれ独立して動作する場合の動作例を表すタイミングチャート（１／２）である。
【図１８】図１８は、２ウェイのキャッシュがそれぞれ独立して動作する場合の動作例を表すタイミングチャート（２／２）である。
【発明を実施するための形態】
【００１７】
１．実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００１８】
〔１〕＜逆方向に連続するタグ値を持つウェイへの先読み＞
プロセッサ（５３）と、メモリ（５５）と、複数のタグ（６５）と、前記タグに格納されるタグ値を基準アドレスとして前記メモリの連続するアドレスの複数のデータをそれぞれ格納可能な複数のウェイ（６４）と、キャッシュ制御部（６３）を備える半導体装置（５０）であって、以下の通り構成される。
【００１９】
前記複数のウェイのそれぞれに、前記ウェイに対する直近の２回のアクセスがアドレスの増加または減少のどちらかの方向を示すアドレス変化方向フラグ（６６）を設ける。
【００２０】
前記キャッシュ制御部は、前記プロセッサから前記メモリに対して連続して行う第１アクセスと第２アクセスが互いに連続するアドレスへのアクセスであり（１）、前記第２アクセスが第１ウェイを介するアクセスであるとき、以下の条件を満たす第２ウェイに対して、所定の先読み動作を可能に構成される。前記条件とは、前記第１ウェイに対応するアドレス変化方向フラグと一致するアドレス変化方向フラグを持ち、前記第１ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向と逆方向で連続するタグ値を持つこと（４）である。前記所定の先読み動作とは、前記第１ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向で連続するタグ値で示されるデータの先読み（５）である。
【００２１】
これにより、複数ウェイで構成されるキャッシュメモリにおいて、そのまま複数ウェイとして機能するか、２ウェイが互いのウェイの先読みデータの格納先として、１つのウェイとして機能するかを、アクセス履歴に応じて自律的に切り替えることができる。
【００２２】
〔２〕＜デクリメントフラグの更新＞
項１において、前記キャッシュ制御部は、前記第２アクセスが前記第１アクセスと同一のウェイで且つ同一のタグ値へのアクセスであるときに、前記第２アクセスの対象アドレスが前記第１アクセスの対象アドレスより小さいとき、前記アドレス変化方向フラグをセット（２）可能に構成される。
【００２３】
これにより、アドレス変化方向フラグ（６６）が、キャッシュメモリへのアクセス履歴に基づいて、キャッシュ制御部によって自律的にセット可能に構成することができる。
【００２４】
〔３〕＜ワード単位のキャッシュフィル＞
項１において、前記キャッシュ制御部は、キャッシュミスのとき、前記ウェイに格納されるデータの合計のデータ長の整数分の１のデータ長の単位で、キャッシュフィルを実行可能に構成される。
【００２５】
これにより、キャッシュフィルのための消費電力を低く抑えることができる。
【００２６】
〔４〕＜バリッドフラグ＞
項３において、前記キャッシュ制御部は、前記複数のウェイのそれぞれに、前記キャッシュフィルのデータ長の単位ごとに、有効フラグ（６７）を備え、キャッシュミスが発生したとき、キャッシュフィルの対象のウェイに対応する前記有効フラグを全てクリアし（２３）、キャッシュフィルしたデータに対応する前記有効フラグをセット（２５）可能に構成される。
【００２７】
これにより、ウェイに格納される所定のデータ長のデータ単位で、キャッシュヒット／ミスを判定し、データの出力またはキャッシュフィルを行うことができる。
【００２８】
〔５〕＜バリッドフラグを使った同一ウェイ後方へのデータの先読み＞
項４において、前記キャッシュ制御部は、前記第２アクセスの後、前記第１ウェイに対応するアドレス変化方向フラグによって示される方向で、対応する前記有効フラグがセットされていない前記第１ウェイ内の領域へのデータの先読み（１２、１３、１４）を可能に構成される。
【００２９】
これにより、連続アクセスの状態が崩れ、連続方向とは逆のアドレス方向へのアクセスが実行されたときにも、同一ウェイ内のデータであればヒットするように、同一ウェイ後方（連続方向とは逆のアドレス方向）への先読みを実施することができる。
【００３０】
〔６〕＜同一ウェイのアドレス変化方向へのデータの先読み後、逆方向へのデータの先読み＞
項５において、前記キャッシュ制御部は、以下の動作を可能に構成される。
【００３１】
前記第２ウェイに対応するアドレス変化方向フラグと前記第１ウェイに対応するアドレス変化方向フラグとが一致し、前記第２ウェイに対応するタグ値が前記第１ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向と逆方向で連続するときに、前記第１ウェイ内の領域へのデータの先読みの後に、前記第２ウェイに対するデータの先読みを行う。
【００３２】
前記第２ウェイに対応するアドレス変化方向フラグと前記第１ウェイに対応するアドレス変化方向フラグとが一致せず、または、前記第２ウェイに対応するタグ値が前記第１ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向と逆方向で連続しないときに、以下の先読み動作を行う。前記第１ウェイ内の領域へのデータの先読みの後に、前記第１ウェイ内の前記第２アクセスの後、前記第１ウェイに対応するアドレス変化方向フラグによって示される方向と逆方向の、前記第１ウェイ内の領域へのデータの先読みを行う。
【００３３】
これにより、２ウェイに跨って先読み動作を行う場合であっても、連続アクセスの状態が崩れ、連続方向とは逆のアドレス方向へのアクセスが実行されたときに、キャッシュミスの確率を減らすように、同一ウェイ後方（連続方向とは逆のアドレス方向）への先読みを実施することができる。
【００３４】
〔７〕＜先読み実行サイクルの隠蔽＞
項１において、前記プロセッサは、前記第２アクセスの終了後、前記キャッシュメモリが前記先読みを完了する前に、前記第２アクセスの後続のアクセスを実行可能に構成される。
【００３５】
これにより、先読みを実行するためのサイクルを隠蔽することができ、単位時間あたりに実行される有効な命令サイクル数を増やすことができる。
【００３６】
〔８〕＜フルアソシアティブ＞
項１において、前記複数のウェイのそれぞれは、前記メモリの任意のアドレスのデータをキャッシュすることが可能に構成される。
【００３７】
これにより、各ウェイは格納するデータのメモリでのアドレスに制約されることなく、任意のアドレスのデータもキャッシュすることができる。
【００３８】
〔９〕＜データキャッシュ＞
項１において、前記半導体装置は命令キャッシュをさらに備え、前記複数のウェイは、前記プロセッサに対するデータキャッシュである。
【００３９】
これにより、データに特化したキャッシュを構成することができる。一般にデータは、命令と比較して連続アクセスの場合のアドレスの規則性が単純である。一連のデータの連続アクセスと、それぞれで連続する２系列のデータを交互にアクセスする場合が極めて多い。この特徴を踏まえて、キャッシュ回路、特にキャッシュ制御部を単純化することができる。
【００４０】
〔１０〕＜データ先読み方法＞
プロセッサ（５３）とメモリ（５５）の間に設けられ、複数のタグ（６５）と前記タグに格納されるタグ値を基準アドレスとして前記メモリの連続するアドレスの複数のデータをそれぞれ格納可能な複数のウェイ（６４）とを備える、キャッシュメモリ（６０）におけるデータ先読み方法であって、以下の各ステップを含んで構成される。
【００４１】
前記プロセッサから前記メモリに対する第１アクセスと連続する第２アクセスが互いに連続するアドレスへのアクセスであるか否かを判定する第１ステップ（１）。
【００４２】
前記第１ステップの判定結果が連続アドレスへのアクセスであるとき、前記第１アクセスと前記第２アクセスが前記複数のウェイのうちの同一ウェイに対する同一タグ値によるアクセスであるとき、前記ウェイに対する直近の２回のアクセスがアドレスの増加または減少のどちらの方向かを示すアドレス変化方向属性を付与する第２ステップ（２）。
【００４３】
前記第２アクセスによって第１ウェイをアクセスする第３ステップ（３）。
【００４４】
前記第１ウェイと同一のアドレス変化方向属性を持ち、前記第１ウェイのタグ値に対して、前記同一のアドレス変化方向属性が示す方向と逆方向に連続するタグ値を持つ第２ウェイの有無を判定する第４ステップ（４）。
【００４５】
前記第４ステップの有の判定結果に基づいて、前記第２ウェイを対象として、前記アドレス変化方向属性が示す方向で連続するタグ値で示されるデータの先読みを行う、第５ステップ（５）。
【００４６】
これにより、複数ウェイで構成されるキャッシュメモリにおいて、そのまま複数ウェイとして機能するか、２ウェイが互いのウェイの先読みデータの格納先として、１つのウェイとして機能するかを、アクセス履歴に応じて自律的に切り替えることができる。
【００４７】
〔１１〕＜キャッシュヒット／ミスに関わらずにデータ先読み＞
項１０において、前記第３ステップがキャッシュヒットかキャッシュミスかに関わらず、前記第４ステップは前記第３ステップの後に実行される（２１、２２…Ｃ２…４）。前記第３ステップがキャッシュミスであるときは、前記第３ステップは前記第１ウェイのタグ値を更新し（２６）、前記第５ステップは更新された前記第１ウェイのタグ値に基づいて前記先読みを行うか否かの判定を行う。
【００４８】
これにより、キャッシュミスによるオーバーヘッドの発生を防止することができる。キャッシュミスしてキャッシュフィルする場合に限らず、キャッシュヒットしている期間にもデータの先読みをするので、連続アクセスの間、継続的にキャッシュヒットさせることができる。例えば、一方のウェイにヒットしている期間の空きサイクルに、他方のウェイの先読みを行うような動作により、常時どちらかのウェイにキャッシュヒットさせることができる。
【００４９】
〔１２〕＜デクリメントフラグの更新＞
項１０において、前記第１ステップは、前記第２アクセスが前記第１アクセスと同一のウェイで且つ同一のタグ値へのアクセスであるときに（１７）、前記第２アクセスの対象アドレスが前記第１アクセスの対象アドレスより小さいとき（１８）、前記アドレス変化方向属性としてアドレス減少方向をセットする（２０）。
【００５０】
これにより、アドレス変化方向属性が、キャッシュメモリへのアクセス履歴に基づいて、キャッシュ制御部によって自律的にセット可能に構成することができる。
【００５１】
〔１３〕＜ワード単位のキャッシュフィル＞
項１０において、前記第３ステップは、キャッシュミスのとき、前記ウェイに格納されるデータの合計のデータ長の整数分の１のデータ長の単位で、キャッシュフィルを行う。
【００５２】
これにより、キャッシュフィルのための消費電力を低く抑えることができる。
【００５３】
〔１４〕＜バリッドフラグ＞
項１３において、前記複数のウェイのそれぞれは、前記キャッシュフィルのデータ長の単位ごとに、有効フラグ（６７）を備え、前記第３ステップでキャッシュミスが発生したとき、キャッシュフィルの対象のウェイに対応する前記有効フラグを全てクリアし（２３）、キャッシュフィルしたデータに対応する前記有効フラグをセットする（２５）。
【００５４】
これにより、ウェイに格納される所定のデータ長のデータ単位で、キャッシュヒット／ミスを判定し、データの出力またはキャッシュフィルを行うことができる。
【００５５】
〔１５〕＜バリッドフラグを使った同一ウェイ後方へのデータの先読み＞
項１４において、前記第３ステップの後、前記第１ウェイに対応するアドレス変化方向属性によって示される方向で、対応する前記有効フラグがセットされていない前記第１ウェイ内の領域へのデータの先読みを行う、第６ステップ（１３）をさらに含む。
【００５６】
これにより、連続アクセスの状態が崩れ、連続方向とは逆のアドレス方向へのアクセスが実行されたときにも、同一ウェイ内のデータであればヒットするように、同一ウェイ後方（連続方向とは逆のアドレス方向）への先読みを実施することができる。
【００５７】
〔１６〕＜同一ウェイのアドレス変化方向へのデータの先読み後、逆方向へのデータの先読み＞
項１５において、前記第６ステップの後で前記第４ステップを実行し、前記第４ステップの無の判定結果に基づいて、前記第１ウェイに対応するアドレス変化方向属性によって示される方向と逆の方向で、対応する前記有効フラグがセットされていない前記第１ウェイ内の領域へのデータの先読みを行うために、第６ステップ（１３）を繰り返すループをさらに含む、データ先読み方法。
【００５８】
これにより、２ウェイに跨って先読み動作を行う場合であっても、連続アクセスの状態が崩れ、連続方向とは逆のアドレス方向へのアクセスが実行されたときに、キャッシュミスの確率を減らすように、同一ウェイ後方（連続方向とは逆のアドレス方向）への先読みを実施することができる。
【００５９】
〔１７〕＜逆方向に連続するタグ値を持つウェイへの先読み＞
プロセッサ（５３）と、メモリ（５５）と、互いに１：１対応する複数のタグ（６５）と複数のウェイ（６４）とキャッシュ制御部（６３）を備える半導体装置（５０）であって、以下のように構成される。
【００６０】
前記プロセッサから前記メモリに対する第１アクセスと第２アクセスが互いに連続して実行され、連続するアドレスへのアクセスであり、前記第２アクセスが第１ウェイを介するアクセスであるとき（１）、以下の動作を可能に構成される。
【００６１】
前記キャッシュ制御部は、前記第２アクセスが前記第１アクセスに対してアドレスが増加する方向でのアクセスであるときには、前記第１ウェイに対応するタグ値よりも１小さいタグ値を持つウェイに対するデータの先読み行う（４、４０）。前記第２アクセスが前記第１アクセスに対してアドレスが減少する方向でのアクセスであるときには、前記第１ウェイに対応するタグ値よりも１大きいウェイに対するデータの先読みを行う（４、４５）。
【００６２】
これにより、複数ウェイで構成されるキャッシュメモリにおいて、そのまま複数ウェイとして機能するか、２ウェイが互いのウェイの先読みデータの格納先として、１つのウェイとして機能するかを、アクセス履歴に応じて自律的に切り替えることができる。
【００６３】
２．実施の形態の詳細
実施の形態について更に詳述する。なお、発明を実施するための形態を説明するための全図において、同一の機能を有する要素には同一の符号を付して、その繰り返しの説明を省略する。
【００６４】
〔実施形態の概要〕
図２は、一実施形態に係る半導体装置の構成例を表すブロック図である。
【００６５】
一実施形態に係る半導体装置には、プロセッサ５３とメモリ５５の間にキャッシュメモリ６０が設けられている。メモリ５５は例えばフラッシュメモリなどの不揮発メモリであって良く、プロセッサ５３のメモリ空間に割り付けられる如何なるメモリであっても良い。キャッシュメモリ６０は、命令キャッシュ６２とデータキャッシュ６１を含む。データキャッシュ６１は、複数のタグ６５＿０〜６５＿３とそのタグに格納されるタグ値を基準アドレスとしてメモリ５５の連続するアドレスの複数のデータをそれぞれ格納可能な複数のウェイ６４＿０〜６４＿３とを備える。タグ６５＿０〜６５＿３とウェイ６４＿０〜６４＿３とは１：１に対応付けられ、タグ６５＿０に格納されるタグ値を起点として、例えば１６アドレス分のデータＤ０〜Ｄ７がウェイ６４＿０に格納される。ウェイとタグの数は任意で、少なくとも２組あれば良い。１個のウェイに格納されるデータの数、１データ当たりのデータ長（ビット長）も任意である。プロセッサ５３からのアクセス単位や、キャッシュ対象の不揮発メモリ５５とのインターフェースを考慮して適切に決めることができる。図２には、他の構成要素も描かれているが、それらについては後述する。
【００６６】
図１は、一実施形態に係る半導体装置の動作例を表すフローチャートである。
【００６７】
プロセッサ５３から不揮発メモリ５５に対するアクセスである、データリード要求があると、そのデータリード要求と直前のデータリード要求が互いに連続するアドレスへのデータリード要求であるか否かを判定する（ステップ１）。その結果、連続アドレスへのデータリード要求であると判定されたとき、連続する２回のデータリード要求が同一ウェイに対する同一タグ値によるアクセスであるとき、そのウェイに対する直近の２回のアクセスがアドレスの増加または減少のどちらの方向かを示すアドレス変化方向属性を付与する（ステップ２）。今回のデータリード要求によってそのウェイ（アクセス対象ウェイ）をアクセスする（ステップ３）。
【００６８】
次に、ステップ３でアクセスされたウェイ（アクセス対象ウェイ）と同一のアドレス変化方向属性を持ち、アクセス対象ウェイのタグ値に対して、そのアドレス変化方向属性が示す方向と逆方向に連続するタグ値を持つ別のウェイ（先読み対象ウェイ）の有無を判定する（ステップ４）。前記第４ステップの有の判定結果に基づいて、先読み対象ウェイに対して、アクセス対象ウェイのアドレス変化方向属性が示す方向で連続するタグ値で示されるデータの先読みを行う（ステップ５）。
【００６９】
これにより、複数ウェイで構成されるキャッシュメモリにおいて、そのまま複数ウェイとして機能するか、２ウェイが互いのウェイの先読みデータの格納先として、１つのウェイとして機能するかを、アクセス履歴に応じて自律的に切り替えることができる。
【００７０】
動作原理の理解を助けるために、ウェイが２個の場合を考える。ウェイ０（６４＿０）とタグ０（６５＿０）が対応し、ウェイ１（６４＿１）とタグ１（６５＿１）が対応する。今、ウェイ０（６４＿０）へのアクセスがアドレスＡからのリードであるとき、まず、ウェイ０（６４＿０）にアドレス変化方向属性を付与する（ステップ２）。ウェイ０（６４＿０）への直前のアクセスがアドレスＡ−１へのアクセスであった場合は、アドレスは増加方向であり、逆に直前のアクセスがアドレスＡ＋１へのアクセスであった場合は、アドレスは減少方向である。アドレス変化方向属性は各ウェイに付与される。ウェイ０（６４＿０）に対応するタグ０（６５＿０）には、アドレスＡの上位アドレスが格納される。ウェイ０（６４＿０）に対するアクセスが、キャッシュミスであったときは、キャッシュフィルにより、タグ０（６５＿０）には、アドレスＡの上位アドレスが格納される。
【００７１】
次に、先読みに適するウェイを探索する。今、ウェイが２個のみの場合を仮定しているので、アクセス対象のウェイ０（６４＿０）に対し、ウェイ１（６４＿１）が先読み対象として適するか否かの判定をする場合について考える。判定の条件は、同一のアドレス変化方向属性を持ち、アクセス対象ウェイのタグ値に対して、そのアドレス変化方向属性が示す方向と逆方向に連続するタグ値を持つか否かである（ステップ４）。ウェイ１（６４＿１）がウェイ０（６４＿０）と同一のアドレス変化方向属性を持つとは、どちらのウェイも同じアドレスの変化方向で連続アクセスされてきたという、アクセス履歴を反映したものである。さらに、ウェイ１（６４＿１）に対応するタグ１（６５＿１）が、そのアドレス変化方向属性が示す方向と逆方向に、ウェイ０（６４＿０）に対応するタグ０（６５＿０）に格納されるタグ値と連続するタグ値を持つとは、ウェイ１（６４＿１）が既にアクセスされたウェイであることを示すものである。したがって、この条件を満たせば、ウェイ１（６４＿１）は同じ系列のデータで連続してアクセスされてきており、既にアクセスされたウェイである可能性が高い。したがって、ウェイ１（６４＿１）は再度アクセスされる確率は低く、ウェイ０（６４＿０）へのアクセスに続く先読み対象として適するものであると判断できる。そこで、ウェイ１（６４＿１）を先読みの対象として、そのアドレス変化方向属性が示す方向にデータの先読みを実行する（ステップ５）。例えば、アドレス変化方向が増加方向で、タグ０（６５＿０）にアドレスＡの上位アドレスであるＡ’がタグ値として格納されているとき、ウェイ１（６４＿１）が同じデータ系列の一連のアクセスで既にアクセスされたウェイである場合には、対応するタグ１（６５＿１）には、Ａ’−１が格納されているはずである。逆に、この条件が満たされない場合には、ウェイ１（６４＿１）は別のアドレス領域に格納されている別の系列のデータをキャッシュするために使われている可能性が高い。そのため、先読み対象としては適切でなく、先読みは実行されない。
【００７２】
このように、本実施形態では、アドレス変化方向属性とタグ値が連続しているか否かに基づいて、先読み対象として適切なウェイか否かを判定している。先読み対象に適するウェイがあれば、アクセス対象のウェイと先読み対象のウェイを組合せて、あたかも先読み機能を備えた１つのウェイとして機能させる。一方、先読み対象に適するウェイがなければ、各ウェイは独立のウェイとして、本来の複数ウェイのとして機能させる。一般にデータの先読みをすべきか否かの判断は、アクセス履歴に基づいて行われる。本実施形態では、タグ値がアクセス履歴を反映している点に着目し、その方向を示すアドレス変化方向属性を付与するだけで、外部からの特別な制御を受けずに、キャッシュ制御部が自律的に判断して、ウェイの先読み機能を切り替えている。キャッシュ回路はアクセス履歴を、アドレス変化方向属性とタグ値が連続しているか否かという情報に集約して保持しているので、自律的に判断することができる。
【００７３】
ここで注意すべきは、１つのウェイに複数のタグを備えるのではなく、ウェイとタグが１：１に対応付けられる点である。換言すれば、１つのウェイが１ラインとそれに対応する１個のタグのみで構成される。最小限２ライン分のキャッシュを備えれば、それを、先読み機能を持つ１ウェイキャッシュまたは２ウェイのキャッシュのいずれかとして自律的に切り替えながら機能させることができる。本実施形態は、大規模なキャッシュ回路ではなく、ＩＣカードなどに搭載可能なセキュアマイコンなどの、回路規模と消費電力に対して極めて厳しい要求があるような、小型かつ低消費電力のキャッシュ回路に適用すると、特に有効である。
【００７４】
〔実施形態（構成例）〕
図２は、一実施形態に係る半導体装置の構成例を表すブロック図である。実施形態の概要で説明したよりも、より詳細な構成例について説明する。本実施形態に係る半導体装置５０は、例えば、ＩＣカードに用いられるマイコン５０であって、単一の半導体基板上に公知の半導体製造技術を用いて形成され、或いは、不揮発メモリ５５などを別チップとしたマルチチップモジュールとして形成される。本実施形態は、半導体装置の実装方法によって制限されるものではない。
【００７５】
マイコン５０は、アドレスバス５１とデータバス５２を介して互いに接続される、ＣＰＵ５３、ＤＭＡＣ５４、ＲＯＭ５６、ＲＡＭ５７、周辺モジュール５８を備える。ＤＭＡＣ（Direct Memory Access Controller）５４は、ＣＰＵ５３によって設定される転送パラメータに基づいて、ＣＰＵとは独立にメモリにアクセスしてデータ転送を実行することができる。ＲＯＭ（Read Only Memory）５６とＲＡＭ（Random Access Memory）５７はメモリであり、ＲＯＭ５７はＣＰＵ５３で実行されるプログラムの命令コードやデータの初期値を格納し、ＲＡＭ５７はプログラムで使われる変数の値を格納する。周辺モジュール５８は、例えば、タイマモジュールや通信インターフェースモジュールである。この他、図示されないバス調停回路、割り込み制御回路などを備えることができる。
【００７６】
不揮発メモリ５５は、キャッシュメモリ６０を介して、アドレスバス５１とデータバス５２に接続されており、ＣＰＵ５３、ＤＭＡＣ５４などのバスマスタからアクセスされることができる。不揮発メモリ５５とキャッシュメモリ６０は、専用のアドレスバス５１＿１とデータバス５２＿１を介して、相互に接続されている。
【００７７】
不揮発メモリ５５は、例えば、フラッシュメモリ、相変化メモリ、強誘電体メモリ、などの不揮発メモリである。不揮発メモリ５５は、ＣＰＵ５３のメモリ空間に割り付けられている如何なる記憶素子にも置き換えることができる。ＤＲＡＭ、ＳＤＲＡＭなどの揮発メモリであってもよく、半導体以外のメモリであっても良い。不揮発メモリ５５は、例えば、リードバッファ７８とセレクタ７９を備えて構成される。アドレスバス５１＿１の上位ビットで指定されるアドレスのデータをメモリ部７７から読み出してリードバッファ７８に一時格納し、そのうちの一部をセレクタ７９で選択してデータバス５２＿１に出力する。リードバッファ７８の大きさは、メモリ部７７において１本のワード線に接続されるメモリセルのビット数と一致させることにより、不揮発メモリ５５のアクセスのための消費電力を低く抑えることができる。さらに、特許文献３に記載される、プリリードキャッシュを備えると、消費電力低減をより効果的に実現することができ好適である。本実施形態では、特に制限されないが、リードバッファ７８は１６バイトとし、データバス５２＿１は４バイトとして説明する。
【００７８】
キャッシュメモリ６０は、データキャッシュ６１と命令キャッシュ６２とキャッシュ制御部６３とを含む。データキャッシュ６１には、４個のウェイ６４＿０〜６４＿３を備える。各ウェイには、それぞれ、タグ６５＿０〜６５＿３、デクリメントフラグ６６＿０〜６６＿３、バリッドフラグ６７＿０〜６７＿３が対応付けられる。キャッシュの制御には、例えば、ＬＲＵ（Least Recently Used）方式を採用することができる。キャッシュミスが発生したときに、最も過去に使われた（Least Recently Used）ウェイにキャッシュフィルを行う方式である。キャッシュ制御部６３には、アドレス制御部６８とデータ制御部６９とが設けられ、アドレスバス５１とデータバス５２を介したＣＰＵ５３などとのアクセスコマンドのインターフェース、及び、不揮発メモリ５５とのインターフェースを制御する。キャッシュ制御部６３はさらに、ＬＲＵフラグ７０とＬＲＵ制御部７１、タグ制御部７２、デクリメントフラグ制御部７３、及び、バリッドフラグ制御部７４を備え、データキャッシュのタグ６５＿０〜６５＿３、デクリメントフラグ６６＿０〜６６＿３、及び、バリッドフラグ６７＿０〜６７＿３を制御する。ＬＲＵ制御部７１、タグ制御部７２、デクリメントフラグ制御部７３、及び、バリッドフラグ制御部７４は、内部アドレスバス７５＿１と内部データバス７６＿１に接続されている。
【００７９】
ウェイ６４＿０〜６４＿３は、それぞれ、複数のデータを保持することができる。各ウェイ内のデータは、アドレスの連続するデータで構成される。ウェイに格納されるデータのアドレスに共通する上位アドレスが対応するタグに格納される。本実施形態では、１アドレス当たりのデータを１バイト（８ビット）とし、ウェイを構成するデータのビット長は２バイト（１６ビット）として説明する。各ウェイには２バイトのデータを８個格納することができ、アドレスの下位４ビットを除く上位ビットが、タグ値に対応する。データバス５２は２バイトの幅を持つとする。キャッシュはフルアソシアティブ方式とすることができる。各ウェイに格納されるデータは、ＣＰＵ５３のメモリ空間のどこのアドレスでも良い。
【００８０】
デクリメントフラグ６６＿０〜６６＿３は、各ウェイ６４＿０〜６４＿３へのアクセスが同じウェイへの直前のアクセスに対して、アドレスの増加方向のアクセスか、減少方向のアクセスかを示すフラグである。ウェイごとに設けられる。バリッドフラグ６７＿０〜６７＿３は、各ウェイ６４＿０〜６４＿３のデータが有効か否かを表すフラグである。ウェイ６４＿０〜６４＿３を構成するデータに対して、１回のキャッシュフィルのデータサイズごとに１ビットのフラグを備える。例えば、ウェイ６４＿０〜６４＿３を構成するデータＤ０〜Ｄ７がそれぞれ２バイト（１６ビット）のデータであるとし、４バイト（３２ビット）ごとにキャッシュフィルされるとき、４バイトごとに１ビットのフラグを備え、各フラグを合計４ビットＶ０〜Ｖ４で構成する。本実施形態では、アドレスが１バイト毎に割り付けられているので、２バイトのデータリード要求であれば、アドレスが偶数で連続することを、連続アドレスと呼び、４バイトのデータリード要求であれば、アドレスが４の倍数で連続することを、連続アドレスと呼ぶ。
【００８１】
データと命令のそれぞれにキャッシュを設けることにより、それぞれに特化したキャッシュ方式を採用することができる。一般にデータは、命令と比較して連続アクセスの場合のアドレスの規則性が単純である。一連のデータの連続アクセスと、それぞれで連続する２系列のデータを交互にアクセスする場合が極めて多い。この特徴を踏まえて、キャッシュ回路、特にキャッシュ制御部を単純化することができる。この実施形態では４ウェイの例を示したが、２ウェイとすることができる。最小限２ウェイを備えれば、一連のデータの連続アクセスと、それぞれで連続する２系列のデータを交互にアクセスする場合とに対応することができる。一方、データと命令を区別せず、１つのキャッシュメモリにキャッシュする構成とすることもできる。その場合は、ウェイ数を多くすることにより、動作状態においてデータをキャッシュするウェイと命令をキャッシュするウェイに分かれることが期待される。制御が一元化される点でメリットがある。データキャッシュについて採用した実施形態について説明しているが、同様の構成を命令キャッシュに採用することもできる。各ウェイは、フルアソシアティブとすることができる。これにより、各ウェイは格納するデータのメモリでのアドレスに制約されることなく、任意のアドレスのデータもキャッシュすることができる。
【００８２】
キャッシュフィルのビット長は、例えば４バイトとすることができる。これにより、内部データバス７６＿１及びそれに接続される、ＬＲＵ制御部７１、タグ制御部７２、デクリメントフラグ制御部７３、及び、バリッドフラグ制御部７４のインターフェース回路は、それぞれ４バイトずつ備えればよい。これにより、回路規模を抑え、消費電力を低減することができる。また、ウェイに格納される４バイト単位で、キャッシュヒット／ミスを判定し、データの出力またはキャッシュフィルを行うことができる。一方、ウェイごとに備えるデータ数を、不揮発メモリの１ワード線に接続されるデータ数と一致させることもできる。この場合には、不揮発メモリ５５に備えるリードバッファ７８とセレクタ７９を不要とし、１本のワード線から読み出されるデータを一括してウェイにフィルすることができ、キャッシュフィルの高速化を図ることができる。この時のバリッドフラグは、ウェイごとに１ビットとすることができる。また、バリッドフラグを備えない構成も可能とすることができる。キャッシュフィルのビット長は、以上のような回路規模、消費電力、及びキャッシュフィルの速度を勘案して、適切に設計することができる。
【００８３】
〔動作フロー〕
図２に示した半導体装置の詳細な動作例について説明する。図３、図４、図５及び図６は、一実施形態に係る半導体装置の詳細な動作例を表すフローチャートである。
【００８４】
ＣＰＵ５３またはＤＭＡＣ５４などのバスマスタから、アドレスバス５１とデータバスに５２を介してバスコマンドが発行されると、キャッシュメモリ６０のキャッシュ制御部６３は、そのバスコマンドが命令フェッチであるのか、データアクセスであるのか、特に不揮発メモリ５５へのデータリード要求であるか否かを判定する（ステップ１１）。不揮発メモリ５５へのデータリード要求でない場合には、キャッシュの全ウェイ６４＿０〜６４＿３の全データ領域が全て有効か否かを判定する（ステップ１２）。バリッドフラグ６７＿０〜６７＿３のそれぞれを構成するＶ０〜Ｖ４のうち、１がセットされていないフラグの有無を判定する。有効ではないデータが存在するとき、即ち、バリッドフラグ６７＿０〜６７＿３のそれぞれを構成するＶ０〜Ｖ４のうち、１がセットされていないフラグがあるとき、不揮発メモリ５５からデータをリードし、そのデータ領域にライトする（ステップ１３）。ライトしたウェイのデータ領域に対応するバリッドフラグを１にセットする（ステップ１４）。これにより、バスコマンドが発行されていない期間を有向に利用して、データの先読み、もしくは同じタグで示されるウェイの先読み方向とは逆方向のデータ（後方のデータ）を、事前に予備的に読み込んでおくことができ、キャッシュミスの確率を減らすことができる。
【００８５】
発行されたバスコマンドが、不揮発メモリ５５へのデータリード要求である場合には（ステップ１１）、キャッシュメモリ６０のキャッシュ制御部６３は、そのバスコマンドのアドレスを取り込み（ステップ１５）、今回のリード要求のアドレスが、直前のリード要求のアドレスと連続しているか否かを判定する（ステップ１６）。連続している場合には、ウェイにアドレス変化方向属性を付与するステップ２に進み、連続していない場合は、ウェイにアクセスするステップ３に進む。図３と図４にはコネクタＣ２として表示する。
【００８６】
ウェイにアドレス変化方向属性を付与するステップ２では、デクリメントフラグ６６＿０〜６６＿３の設定と更新を行う。今回のリード要求のアドレスがキャッシュのいずれか１つのウェイのタグと一致するか否かの判定を行う（ステップ１７）。一致しない場合は、ウェイにアクセスするステップ３に進む。図３と図４にはコネクタＣ２として表示する。タグ値が一致したウェイがあれば、連続アクセスのアドレスがインクリメント方向かデクリメント方向かを判定する（ステップ１８）。その結果、インクリメント方向であれば対象ウェイのデクリメントフラグに０を設定し（ステップ１９）、デクリメント方向であれば対象ウェイのデクリメントフラグに１を設定する（ステップ２０）。その後、ウェイにアクセスするステップ３に進む。図３と図４にはコネクタＣ３として表示する。
【００８７】
連続アクセスでない場合（ステップ１６）、または、連続アクセスであっても、今回のリード要求のアドレスと一致するタグ値を持つウェイがない場合（ステップ１７）は、コネクタＣ２を経由して、ウェイにアクセスするステップ３に進む（図４）。まずキャッシュヒットか否かを判定する（ステップ２２）。キャッシュヒットの場合は、ヒットしたウェイが最新になるようにＬＲＵフラグ７０を更新し（ステップ３３）、ヒットしたウェイからリードデータを出力する（ステップ３４）。キャッシュミスした場合は、ＬＲＵフラグ７０によって指示される、最も古いデータを格納しているウェイにキャッシュフィルを行う。具体的には、最も古いデータを格納しているウェイのバリッドフラグの全ビット（Ｖ０〜Ｖ３）を０にクリアし（ステップ２３）、不揮発メモリ５５からデータを読みこんで対象のウェイのデータ領域に書き込み（ステップ２４）、書き込んだウェイのデータ領域に対応するバリッドフラグを１にセットする（ステップ２５）。次に、書き込んだウェイのタグにアクセス対象のアドレスを設定し（ステップ２６）、データを書き込んだウェイが最新になるようにＬＲＵフラグ７０を更新する（ステップ２７）。データを書き込んだウェイからリードデータを出力する（ステップ２８）。
【００８８】
図３に示した、ウェイにアドレス変化方向属性を付与するステップ２を経て、ウェイにアクセスするステップ３にコネクタ３を経由して進んだ場合も、まず、キャッシュヒットか否かの判定を行う（ステップ２１）。キャッシュヒットの場合は、ヒットしたウェイが最新になるようにＬＲＵフラグ７０を更新し（ステップ３３）、ヒットしたウェイからリードデータを出力する（ステップ３４）。キャッシュミスの場合であっても、ステップ１７において、今回のリード要求のアドレスと同一のタグ値を持つウェイがあることがわかっているので、その対象のウェイのデータ領域に、不揮発メモリ５５からのデータを書き込む（ステップ２９）。これは、リード要求のアドレスと同一のタグ値を持つウェイはあるが、アクセス対象アドレスのデータは有効でない（バリッドフラグがセットされていない）場合のフローである。不揮発メモリ５５からデータを読みこんで対象のウェイのデータ領域に書き込んだ後（ステップ２９）、書き込んだウェイのデータ領域に対応するバリッドフラグを１にセットする（ステップ３０）。次に、書き込んだウェイのタグにアクセス対象のアドレスを設定し（ステップ２６）、データを書き込んだウェイが最新になるようにＬＲＵフラグ７０を更新する（ステップ２７）。データを書き込んだウェイからリードデータを出力する（ステップ２８）。以上示したように、今回のリード要求がキャッシュヒットかキャッシュミスかに関わらず、コネクタＣ４を経て図５に示す、先読みに適するウェイがあるか否かについての判定ステップに進む。
【００８９】
まず、アクセスしたウェイのデータ領域を起点に、デクリメントフラグが示す方向のデータ領域はフィルされているかを判定する（ステップ３５）。アクセスされたウェイのデクリメントフラグが０の場合、アクセスされたデータ領域からアドレスの増加方向のバリッドフラグのうち、０クリアされたものがないかを調べる。アクセスされたウェイのデクリメントフラグが１の場合、アクセスされたデータ領域からアドレスの減少方向のバリッドフラグのうち、０クリアされたものがないかを調べる。バリッドフラグが１に設定されていないデータ領域があれば、不揮発メモリ５５からデータを読込み、対象のウェイのそのデータ領域に書き込み（ステップ３６）、書き込んだウェイのデータ領域に対応するバリッドフラグ７０に１をセットする（ステップ３７）。この操作は、アクセスされたデータ領域を起点に、デクリメントフラグが示す方向のウェイの末端までの全てのデータ領域に、有効なデータが書き込まれる（フィルされる）まで、繰り返される。
【００９０】
次に、最新のウェイとデクリメントフラグの値が一致し、且つ、デクリメントフラグが示す方向と逆方向に連続したタグ値を持つウェイを探索する（ステップ４）。もしなければ、不揮発メモリ５５へのデータリード有無を判定するステップ１１に戻る（図ではコネクタＣ１によって接続されるフローとして示す）。一方、そのような条件を満たすウェイ６４があれば、コネクタＣ５を経由して、図６に示すデータの先読みステップに進む。
【００９１】
まず、最新のウェイと上記条件が一致したウェイのデクリメントフラグの値を調べ（ステップ３８）、最新のウェイと上記条件を満たしたウェイのデクリメントフラグの値が共に０の場合、ステップ３９に進む。上記条件を満たしたウェイは、先読みデータを書き込むのに適したウェイと判定されたウェイである。条件が一致したウェイのタグ値を、最新のウェイのタグ値＋１ライン分の値に更新する（ステップ３９）。先読み対象のウェイのデータ領域が、デクリメントフラグが示す方向、即ちアドレスの増加方向に全てフィルされていなければ、不揮発メモリから読み込むデータのアドレスをインクリメントし（ステップ４３）、次のデータを不揮発メモリ５５から転送し（ステップ４０）、対応するデータ領域のバリッドフラグに１をセットする（ステップ４１）。先読み対象のウェイのデータ領域が、デクリメントフラグが示す方向に全てフィルされるまで（ステップ４２）、ステップ４０からステップ４３の操作を繰り返す。
【００９２】
最新のウェイと上記条件が一致したウェイのデクリメントフラグの値を調べ（ステップ３８）、最新のウェイと上記条件を満たしたウェイのデクリメントフラグの値が共に１の場合、ステップ４４に進む。上記条件を満たしたウェイもまた、先読みデータを書き込むのに適したウェイと判定されたウェイである。上記条件が一致したウェイのタグ値を、最新のウェイのタグ値−１ライン分の値に更新する（ステップ４４）。先読み対象のウェイのデータ領域が、デクリメントフラグが示す方向、即ちアドレスの減少方向に全てフィルされていなければ、不揮発メモリから読み込むデータのアドレスをデクリメントし（ステップ４８）、次のデータを不揮発メモリ５５から転送し（ステップ４５）、対応するデータ領域のバリッドフラグ６７に１をセットする（ステップ４６）。先読み対象のウェイのデータ領域が、デクリメントフラグが示す方向に全てフィルされるまで（ステップ４７）、ステップ４５からステップ４８の操作を繰り返す。
【００９３】
先読み対象のウェイの全てのデータ領域にデータがフィルされたときは（ステップ４２、４７）、不揮発メモリ５５へのデータリード有無を判定するステップ１１に戻る（図ではコネクタＣ１によって接続されるフローとして示す）。
【００９４】
以上述べたように、先読みデータを書き込むのに適したウェイがあれば、そのウェイは、アクセス対象のウェイに対して先読みデータを書き込むために使われる。その後、そのままデクリメントフラグ６６が示す方向で連続アクセスが続き、先読み対象のウェイがアクセス対象になった時点では、アクセス対象だったウェイが、先読みデータを書き込むのに適したウェイとしての条件を満たすこととなる。２つのウェイの間で、互いにアクセス対象と先読み対象の関係を入れ替えながら、継続的に先読みを続けることができる。これは、ステップ３においてキャッシュヒットであってもキャッシュミスであっても、次の先読みデータを書き込むのに適したウェイの判定ステップに進むように構成されているため、キャッシュヒットが続いても先読みが実行されるためである。
【００９５】
本実施形態に示したように、４個のウェイで構成した場合であっても、２個のウェイがあれば、上記のように一連のデータの連続アクセスに当たって、継続的にキャッシュヒットし続けるように動作させることができる。即ち、２個のウェイを組合せて、キャッシュミスによるオーバーヘッドが発生しないように、先読みを継続する１個のウェイとして機能させることができる。このとき、この２個のウェイは、条件を満たさなくなると自律的に２個の独立したウェイに戻る。全体を４ウェイで構成した場合、他の２個のウェイもまた、先読みを継続する１個のウェイとして機能させることもできるし、２個の独立したウェイとして機能させることもできる。先読みを継続する１個のウェイとして機能させるか、２個の独立したウェイとして機能させるかの切り替えは、デクリメントフラグとタグ値の比較のみによって行われる。一般にデータの先読みをすべきか否かの判断は、アクセス履歴に基づいて行われる。本実施形態では、タグ値がアクセス履歴を反映している点に着目し、その方向を示すデクリメントフラグを新たに設けるだけで、外部からの制御を受けずに、キャッシュ制御部が自律的に判断して切り替えることができる。
【００９６】
〔動作例〕
本実施形態の動作例について説明する。図７は、２ウェイのキャッシュが独立に動作する場合の動作例を表す説明図である。図８は、２ウェイのキャッシュが互いに他の先読み対象となって１ウェイとして、アドレスがインクリメント方向（デクリメントフラグ＝０）に先読み動作する場合の動作例を表す説明図である。図９は、２ウェイのキャッシュが互いに他の先読み対象となって１ウェイとして、アドレスがデクリメント方向（デクリメントフラグ＝１）に先読み動作する場合の動作例を表す説明図である。それぞれウェイ数が２の場合を例示する。ウェイ数が３以上であっても、同様に作用する。２個のウェイ６４＿０、６４＿１はそれぞれ、８個の２バイトデータＤ０〜Ｄ７を保持し、対応するタグ６５＿０、６５＿１、及び、デクリメントフラグ６６＿０、６６＿１を備える。データ２個（４バイト）に対して１ビットのバリッドフラグＶ０〜Ｖ３が設けられている。ＬＲＵフラグ７０は、ＷＡＹ０またはＷＡＹ１のいずれか最も過去にアクセスされたウェイを示す。アドレスは１バイトのデータに対して１アドレスが割り付けられており、８個の２バイトデータＤ０〜Ｄ７は１６アドレス分のデータに相当する。タグには下位４ビットよりも上位のアドレス値がタグ値として格納される。Ｄ０はタグ値を基準にタグ値の下の下位４ビットに０ｘ０を付加したアドレスに対応するデータが格納される。Ｄ２，Ｄ３，Ｄ４・・・Ｄ７は、それぞれ、タグ値に０ｘ２、０ｘ４、０ｘ８、・・・０ｘＥを付加したアドレスに対応するデータが格納される。図７、図８、図９のそれぞれにおいて、アドレス０ｘ００２００８のデータリードが要求された場合を例に採り、各図の上側にはアクセス前の状態を、各図の下側にはアクセス後の状態を、それぞれ模式的に示す。アドレス０ｘ００２００８に対応するタグ値は、０ｘ００２００であり、アドレス０ｘ００２００８のデータは、Ｄ４の位置に格納されることになる。ここで、「０ｘ」は後続の数値が１６進表記であることを示す記号である。
【００９７】
図７において、アクセス前は、ウェイ０（６４＿０）のＤ２とＤ３のみが有効で、バリッドフラグＶ１に１がセットされ他のバリッドフラグＶ０，Ｖ２，Ｖ３は０にクリアされている。タグ６５＿０には０ｘ００１１Ｃが格納されている。ウェイ１（６４＿１）はＤ０，Ｄ１，Ｄ２，Ｄ３が有効で、バリッドフラグＶ０，Ｖ１に１がセットされ、他のバリッドフラグＶ２，Ｖ３は０にクリアされている。タグ６５＿１には０ｘ００３２４が格納されている。
【００９８】
アドレス０ｘ００２００８のデータリードが要求されると、いずれのウェイにもヒットしない。アドレス０ｘ００２００８に対応するタグ値は０ｘ００２００であり、タグ６５＿０、６５＿１に格納されているタグ値とも異なるため、キャッシュミスと判定される（ステップ１７、ステップ２２）。ＬＲＵフラグ７０はウェイ０を指しているので、ウェイ０に対してキャッシュフィルを行う（ステップ２３〜２８）。ウェイ０（６４＿０）のバリッドフラグＶ０〜Ｖ３を全て０にクリアする（ステップ２３）。不揮発メモリのアドレス０ｘ００２００８からデータを読込み、ウェイ０（６４＿０）のＤ４とＤ５に書き込む（ステップ２４）。対応するバリッドフラグＶ２に１をセットする（ステップ２５）。タグ６５＿０に０ｘ００２００をセットする（ステップ２６）。ＬＲＵフラグをＷＡＹ１に変更する（ステップ２７）。キャッシュフィルした、ウェイ０（６４＿０）のＤ４からデータを出力する（ステップ２８）。その後、データの先読みは、Ｄ６，Ｄ７に進む。データの先読みが行われると、バリッドフラグ６７＿０のＶ３に１がセットされる。デクリメントフラグ６６＿０が示すアドレスの増加方向での先読みが終了したとき、ステップ４の条件判定を行う。デクリメントフラグ６６＿０と６６＿１は増加方向で一致している。ウェイ１のタグ６５＿１は０ｘ００３２４であって、デクリメントフラグ６６＿０と６６＿１とは逆方向の減少方向で、ウェイ０のタグ値０ｘ００２００と連続したタグ値０ｘ００１ＦＦとは異なる。よって、ウェイ１は先読みの対象としては適切でないと判定されることとなる（ステップ４）。ウェイ１（６４＿１）のデータは保持され、タグ６５＿１と一致しデータの有効なＤ０〜Ｄ３に対するアクセスがあった場合に、キャッシュヒットする。ウェイ１（６４＿１）はウェイ０（６４＿０）とは独立のウェイとして機能する。
【００９９】
ウェイ０（６４＿０）のＤ４とＤ５がキャッシュフィルされ、Ｄ６とＤ７に先読みデータが書き込まれた時点では、ウェイ０（６４＿０）のＤ０〜Ｄ３のバリッドフラグＶ０とＶ１は０にクリアされたままである。これ以降、空きサイクルを使って、ステップ１２、１３、１４によって、ウェイ０（６４＿０）のＤ０〜Ｄ３のデータが読み込まれる。Ｄ０〜Ｄ３のデータはキャッシュフィルされたアドレス０ｘ００２００８のデータから見て、デクリメントフラグ６６＿０が示すアドレスの増加方向とは逆方向のデータである。先読み方向とは逆方向のデータを、空きサイクルを利用してキャッシュに読み込んでおくことにより、連続アクセスの状態が崩れ、連続方向とは逆のアドレス方向へのアクセスが実行されたときにも、同一ウェイ内のデータであればキャッシュヒットさせることができ、キャッシュミスの確率を低減することができる。
【０１００】
図８において、アクセス前は、ウェイ０（６４＿０）のＤ２とＤ３のみが有効で、バリッドフラグＶ１に１がセットされ、他のバリッドフラグＶ０，Ｖ２，Ｖ３は０にクリアされている。タグ６５＿０には０ｘ００２００が格納されている。ウェイ１（６４＿１）はＤ０，Ｄ１，Ｄ２，Ｄ３が有効で、バリッドフラグＶ０，Ｖ１に１がセットされ他のバリッドフラグＶ２，Ｖ３は０にクリアされている。タグ６５＿１には０ｘ００１ＦＦが格納されている。
【０１０１】
アドレス０ｘ００２００８のデータリードが要求されると、ウェイ０にヒットする。アドレス０ｘ００２００８に対応するタグ値は０ｘ００２００であり、タグ６５＿０に格納されているタグ値と一致するため、デクリメントフラグの更新が実行される（ステップ１７〜２０）。連続アクセスのアドレスがインクリメント方向であればデクリメントフラグ６６＿０の値を０とし（ステップ１９）、デクリメント方向であれば１とする（ステップ２０）。図８では、インクリメント方向とする。
【０１０２】
次にキャッシュヒット／ミスを判定する（ステップ２１）。タグ６５＿０は一致するがアドレス０ｘ００２００８に対応するデータが格納されているべき、Ｄ４のバリッドフラグ６７＿０のＶ２は０であるので、ウェイ０（６４＿０）にはアドレス０ｘ００２００８に対応するデータは格納されていない。よって、キャッシュミスと判定される。不揮発メモリ５５からアドレス０ｘ００２００８から４バイト分のデータを読み込んで、Ｄ４とＤ５に書き込み（ステップ２９）、対応するバリッドフラグ６７＿０のＶ２に１をセットする（ステップ３０）。アクセスしたウェイ０が最新になるように、ＬＲＵフラグ７０をＷＡＹ１に更新する（ステップ３１）。キャッシュフィルした、ウェイ０（６４＿０）のＤ４からデータを出力する（ステップ３２）。
【０１０３】
その後、データの先読みは、Ｄ６，Ｄ７に進む。データの先読みが行われると、バリッドフラグ６７＿０のＶ３に１がセットされる。デクリメントフラグ６６＿０が示すアドレスの増加方向での先読みが終了したとき、ステップ４の条件判定を行う。ウェイ１のタグ６５＿１は０ｘ００１ＦＦであって、デクリメントフラグ６６＿０と６６＿１が示すアドレスの増加方向とは逆方向で、ウェイ０のタグ値０ｘ００２００と連続したタグ値０ｘ００１ＦＦと一致するので、ウェイ１は先読みの対象として適切であると判定される（ステップ４）。最新のウェイであるウェイ０と先読み対象としての条件を満たしたウェイ１のデクリメントフラグ６６＿０と６６＿１は共に０で一致している（ステップ３８）。先読み対象としての条件を満たしたウェイ１のタグ６５＿１の値を、最新のウェイ０のタグ６５＿０のタグ値０ｘ００２００＋１である、０ｘ００２０１に更新する（ステップ３９）。その後、ウェイ１のデータＤ０〜Ｄ７が全てフィルされるまで（ステップ４２）、アドレスをインクリメントしながら（ステップ４３）、不揮発メモリ５５からデータを順次読み込み、ウェイ１のデータＤ０〜Ｄ７に、アドレス０ｘ００２０１０〜０ｘ００２０１Ｆのデータを書き込み（ステップ４０）、対応するバリッドフラグ６７＿１のＶ０〜Ｖ３を順次１に更新する（ステップ４１）。これにより、ウェイ１はウェイ０の先読み対象として機能する。以降、連続アクセスが続く限り、ウェイ０とウェイ１が交互にアクセス対象と先読み対象として機能し、キャッシュミスは発生しない。
【０１０４】
ウェイ１（６４＿１）のＤ０〜Ｄ７への先読みを完了した後、ＣＰＵ５３からのアクセスが未だウェイ０に対してであって、アクセスサイクルに空きがある場合には、図７を用いて説明したのと同様に、ステップ１２、１３、１４によって、ウェイ０（６４＿０）に先読み方向とは逆方向のデータを読み込んでおくこともできる。これにより、２ウェイに跨って先読み動作を行う場合であっても、連続アクセスの状態が崩れ、連続方向とは逆のアドレス方向へのアクセスが実行されたときに、キャッシュミスの確率を減らすように、同一ウェイ後方（連続方向とは逆のアドレス方向）への先読みを実施することができる。
【０１０５】
図９を使って、連続アクセスの方向がアドレスの減少方向である場合の動作例を示す。アクセス前は、ウェイ０（６４＿０）のＤ２とＤ３のみが有効で、バリッドフラグＶ１に１がセットされ他のバリッドフラグＶ０，Ｖ２，Ｖ３は０にクリアされている。タグ６５＿０には０ｘ００２００が格納されている。ウェイ１（６４＿１）はＤ０，Ｄ１，Ｄ２，Ｄ３が有効で、バリッドフラグＶ０，Ｖ１に１がセットされ他のバリッドフラグＶ２，Ｖ３は０にクリアされている。タグ６５＿１には０ｘ００２０１が格納されている。デクリメントフラグ６６＿０と６６＿１には共に１がセットされている。
【０１０６】
アドレス０ｘ００２００６のデータリードが要求された例について説明する。アドレス０ｘ００２００６のデータリードが要求されると、ウェイ０にヒットする。アドレス０ｘ００２００６に対応するタグ値は０ｘ００２００であり、タグ６５＿０に格納されているタグ値と一致するため、デクリメントフラグの更新が実行される（ステップ１７〜２０）。連続アクセスのアドレスがデクリメント方向であるので、デクリメントフラグ６６＿０の値を１とする（ステップ２０）。タグ６５＿０が一致し、アドレス０ｘ００２００６に対応するデータが格納されているべき、Ｄ２のバリッドフラグ６７＿０のＶ１は１であるので、ウェイ０（６４＿０）にはアドレス０ｘ００２００６に対応するデータが格納されている。よって、キャッシュヒットと判定される（ステップ２１）。ＬＲＵフラグ７０を更新し（ステップ３３）、ヒットしたウェイ０（６４＿０）のＤ２からデータを出力する（ステップ３４）。
【０１０７】
その後、データの先読みは、Ｄ０，Ｄ１に進む。データの先読みが行われると、バリッドフラグ６７＿０のＶ０に１がセットされる。デクリメントフラグ６６＿０が示すアドレスの減少方向での先読みが終了したとき、ステップ４の条件判定を行う。ウェイ１のタグ６５＿１は０ｘ００２０１であって、デクリメントフラグ６６＿０と６６＿１が示すアドレスの減少方向とは逆方向で、ウェイ０のタグ値０ｘ００２００と連続したタグ値０ｘ００２０１と一致するので、ウェイ１は先読みの対象として適切であると判定される（ステップ４）。最新のウェイであるウェイ０と先読み対象としての条件を満たしたウェイ１のデクリメントフラグ６６＿０と６６＿１は共に１で一致している（ステップ３８）。先読み対象としての条件を満たしたウェイ１のタグ６５＿１の値を、最新のウェイ０のタグ６５＿０のタグ値０ｘ００２００−１である、０ｘ００１ＦＦに更新する（ステップ４４）。その後、ウェイ１のデータＤ０〜Ｄ７が全てフィルされるまで（ステップ４７）、アドレスをインクリメントしながら（ステップ４８）、不揮発メモリ５５からデータを順次読み込み、ウェイ１のデータＤ０〜Ｄ７に、アドレス０ｘ００１ＦＦＦ〜０ｘ００１ＦＦ０のデータを書き込み（ステップ４５）、対応するバリッドフラグ６７＿１のＶ０〜Ｖ３を順次１に更新する（ステップ４６）。これにより、図８を使って説明したアドレスが増加方向の連続アクセスの場合と同様に、ウェイ１はウェイ０の先読み対象として機能する。以降、連続アクセスが続く限り、ウェイ０とウェイ１が交互にアクセス対象と先読み対象として機能し、キャッシュミスは発生しない。
【０１０８】
ウェイ１（６４＿１）のＤ０〜Ｄ７への先読みを完了した後、先読みしたウェイ１へのＣＰＵ５３からのアクセスを始める前であって、アクセスサイクルに空きがある場合には、図７を用いて説明したのと同様に、ステップ１２、１３、１４によって、ウェイ０（６４＿０）に先読み方向とは逆方向のデータＤ４〜Ｄ７を読み込んでおくこともできる。これにより、アドレスが増加方向の連続アクセスの場合と同様に、２ウェイに跨って先読み動作を行う場合であっても、連続アクセスの状態が崩れ、連続方向とは逆のアドレス方向へのアクセスが実行されたときに、キャッシュミスの確率を減らすように、同一ウェイ後方（連続方向とは逆のアドレス方向）への先読みを実施することができる。
【０１０９】
〔動作タイミング〕
本実施形態の動作例についてタイミングチャートを使ってさらに詳しく説明する。
【０１１０】
図１０〜１３は、比較例に係る半導体装置の動作例を表すタイミングチャートである。図１４〜１６は、２ウェイのキャッシュが互いに他の先読み対象となって１ウェイとして先読み動作する場合の動作例を表すタイミングチャートである。図１７〜１８は、２ウェイのキャッシュがそれぞれ独立して動作する場合の動作例を表すタイミングチャートである。各図において、横軸は時間軸であり、クロックサイクル単位でＴ１から順に表記する。縦軸方向には、上から順に、クロック、ＣＰＵのアクセス要求、ＣＰＵが発行するアドレス、ＣＰＵへのリードデータが示される。次にキャッシュメモリ６０の動作が示される。キャッシュ制御回路６３のアクセス要求、キャッシュメモリ６０から不揮発メモリ５５に対して発行されるアドレスと、不揮発メモリ５５からキャッシュメモリ６０に対して出力されるリードデータが示される。さらに次にはウェイ０とウェイ１の内部状態が示される。ウェイ０とウェイ１のそれぞれについて、上から順にデクリメントフラグ６６＿０と６６＿１、タグ［２３：４］（６５＿０と６５＿１）の値、データＤ０〜Ｄ７の値が示される。最下段には、ＬＲＵフラグ７０の値が示される。
【０１１１】
図１０において、ＣＰＵ５３はサイクルＴ１にアドレス０ｘ００２００Ｃからの２バイトのデータリードを要求している。このとき、ウェイ０のタグ６５＿０の値は０ｘ０１２１９、ウェイ１のタグ６５＿１の値は０ｘ００１ＦＦであり、ＬＲＵフラグ７０はウェイ０を指している。データリードを要求されているアドレス０ｘ００２００Ｃに対応するタグ値０ｘ００２００に一致するタグはないので、キャッシュミスが発生する。キャッシュミスの判断に２サイクル要するとし、サイクルＴ３においてキャッシュメモリ６０が不揮発メモリ５５に対してアドレス０ｘ００２００Ｃを出力する。キャッシュフィルの対象は、ＬＲＵフラグ７０が示すウェイ０である。サイクルＴ３でＬＲＵフラグ７０はウェイ１に更新され、サイクルＴ４でウェイ０のタグ６５＿０が、０ｘ００２００に更新される。不揮発メモリ５５内ではデータの読み出しが実行されるが、３サイクルを要するとして、サイクルＴ６でアドレス０ｘ００２００Ｃの値＠００２００Ｃが読み出され、サイクルＴ７でウェイ０（６４＿０）のＤ６／Ｄ７に書き込まれ、合わせてＣＰＵ５３にも出力される。キャッシュフィルは４バイト単位で行われるので、アドレス０ｘ００２００Ｃから０ｘ００２００Fまでの４バイトのデータがウェイ０（６４＿０）のＤ６とＤ７に書き込まれる。ＣＰＵ５３からのデータリード要求は２バイトであるから、Ｄ６に格納される２バイトが、ＣＰＵ５３に返送される。
【０１１２】
図１１において、ＣＰＵ５３はサイクルＴ８にアドレス０ｘ００２００Ｅからの２バイトのデータリードを要求している。アドレス０ｘ００２００Ｅのデータは、先のキャッシュフィルにより、ウェイ０（６４＿０）のＤ７に書き込まれている。サイクルＴ１でのデータリード要求が、アドレス０ｘ００２００Ｃからの２バイトのデータリードを要求であったので、サイクルＴ１でのデータリード要求は、アドレス増加方向での連続リードの要求である。ウェイ０のデクリメントフラグ６６＿０は、アドレス増加方向を示す０のまま維持される。アドレス０ｘ００２００Ｅのデータは、ウェイ０（６４＿０）のＤ７に格納されているので、キャッシュヒットであり、サイクルＴ９に＠００２００ＥとしてＣＰＵのリードデータとして出力される。サイクルＴ１２に、ＣＰＵ５３がさらに次の連続アドレスである０ｘ００２０１０からの２バイトのデータリードを要求している。アドレス０ｘ００２０１０のデータはキャッシュされていないのでキャッシュミスを発生する。キャッシュ制御回路は、それまでの間（サイクルＴ９〜Ｔ１３）は、アクセス要求を発行しない。
【０１１３】
図１２において、サイクルＴ１４においてキャッシュメモリ６０が不揮発メモリ５５に対してアドレス０ｘ００２０１０を出力する。キャッシュフィルの対象は、ＬＲＵフラグ７０が示すウェイ１である。サイクルＴ１４でＬＲＵフラグ７０はウェイ０に更新され、サイクルＴ１５でウェイ１のタグ６５＿１が、０ｘ００２０１に更新される。不揮発メモリ５５内ではデータの読み出しが３サイクルを要して実行され、サイクルＴ１７でアドレス０ｘ００２０１０の値＠００２０１０が読み出され、サイクルＴ１８でウェイ１（６４＿１）のＤ０／Ｄ１に書き込まれ、合わせてＣＰＵ５３にも出力される。
【０１１４】
以上のように、連続アクセスに対する先読み機能がない場合には、キャッシュラインの境界ごとに、キャッシュミスが発生し、キャッシュミス処理期間がオーバーヘッドとなる。
【０１１５】
図１４〜１６は、２ウェイのキャッシュが互いに他の先読み対象となって１ウェイとして先読み動作する場合の動作例を表すタイミングチャートである。
【０１１６】
図１４において、ＣＰＵ５３はサイクルＴ１にアドレス０ｘ００２００Ｃからの２バイトのデータリードを要求している。このとき、ウェイ０のタグ６５＿０の値は０ｘ０１２１９、ウェイ１のタグ６５＿１の値は０ｘ００１ＦＦであり、ＬＲＵフラグ７０はウェイ０を指している。データリードを要求されているアドレス０ｘ００２００ｃに対応するタグ値０ｘ００２００に一致するタグはないので、キャッシュミスが発生する。キャッシュミスの判断に２サイクル要するとし、サイクルＴ３においてキャッシュメモリ６０が不揮発メモリ５５に対してアドレス０ｘ００２００Ｃを出力する。キャッシュフィルの対象は、ＬＲＵフラグ７０が示すウェイ０である。サイクルＴ３でＬＲＵフラグ７０はウェイ１に更新され、サイクルＴ４でウェイ０のタグ６５＿０が、０ｘ００２００に更新される。不揮発メモリ５５内ではデータの読み出しが実行されるが、３サイクルを要するとして、サイクルＴ６でアドレス０ｘ００２００Ｃの値＠００２００Ｃが読み出され、図１５に示すサイクルＴ７でウェイ０（６４＿０）のＤ６／Ｄ７に書き込まれ、合わせてＣＰＵ５３にも出力される。キャッシュフィルは４バイト単位で行われるので、アドレス０ｘ００２００Ｃから０ｘ００２００Ｆまでの４バイトのデータがウェイ０（６４＿０）のＤ６とＤ７に書き込まれる。ＣＰＵ５３からのデータリード要求は２バイトであるから、Ｄ６に格納される２バイトが、ＣＰＵ５３に返送される。
【０１１７】
図１５において、ＣＰＵ５３はサイクルＴ８にアドレス０ｘ００２００Ｅからの２バイトのデータリードを要求している。サイクルＴ１でのデータリード要求が、アドレス０ｘ００２００Ｃからの２バイトのデータリードを要求であったので、サイクルＴ１でのデータリード要求は、アドレス増加方向での連続リードの要求である。ウェイ０のデクリメントフラグ６６＿０は、アドレス増加方向を示す０のまま維持される。アドレス０ｘ００２００Ｅのデータは、先のキャッシュフィルにより、ウェイ０（６４＿０）のＤ７に書き込まれている。アドレス０ｘ００２００Ｅのデータは、ウェイ０（６４＿０）のＤ７に格納されているので、キャッシュヒットであり、サイクルＴ９に＠００２００ＥとしてＣＰＵのリードデータとして出力される。
【０１１８】
これと並行して、図３〜図６のフローチャートに示したデータ先読み動作が開始される。サイクルＴ１のアドレス０ｘ００２００Ｃからの２バイトのデータリード要求によって発生したキャッシュフィルの後、ウェイ０のＤ６／Ｄ７を起点にデクリメントフラグ６６＿０が示す方向のデータ領域は、フィルされているので（ステップ３５）、先読みに適するウェイがあるか否かについての判定ステップに進む。最新のウェイであるウェイ０とデクリメントフラグの値が一致し、且つ、デクリメントフラグが示す方向と逆方向に連続したタグ値を持つウェイを探索する（ステップ４）。デクリメントフラグ６６＿０と６６＿１はともにアドレス増加方向を示して一致しており、ウェイ１のタグ値は０ｘ００１ＦＦでデクリメントフラグ６６＿０と６６＿１が示す方向とは逆のアドレス減少方向で、ウェイ０のタグ値０ｘ００２００と連続しているので、ウェイ１は先読みの対象として適すると判定される。サイクルＴ８でタグ６５＿１に０ｘ００２００に１を加えた０ｘ００２０１に更新される（ステップ３９）。サイクルＴ９以降、不揮発メモリ５５からアドレス０ｘ００２０１０以降のデータ＠００２０１０、＠００２０１４、＠００２０１８、＠００２０１Ｃが順次読み出され、それぞれウェイ１のＤ０／Ｄ１，Ｄ２／Ｄ３，Ｄ４／Ｄ５，Ｄ６／Ｄ７に書き込まれる。
【０１１９】
サイクルＴ１２に、ＣＰＵ５３がさらに次の連続アドレスである０ｘ００２０１０からの２バイトのデータリードを要求している。この時点で、アドレス０ｘ００２０１０のデータはウェイ１に先読みされているので、キャッシュヒットし、図１６に示すサイクルＴ１３で読み出される。比較例では、アドレス０ｘ００２０１０のデータはキャッシュされていなかったのでキャッシュミスが発生し、アドレス０ｘ００２０１０のデータが読み出されたのは、サイクルＴ１８である。本実施形態の先読みを行うことにより、キャッシュミスの発生が抑えられ、実行サイクルが５サイクル短縮される。２バイトのデータリードは、キャッシュヒットしたとき２サイクルで実行され、キャッシュミスしたとき、７サイクルを要する。１ウェイ＝１ラインを１６バイトで構成し、２バイトずつの連続アクセスを行うとき、ウェイ内のみの先読みを行う比較例では、８回の連続アクセスに対して７回のキャッシュヒットと１回のキャッシュミスが発生するので、２１サイクルを要することとなる。一方、本実施形態に示すように、２個のウェイを交互にアクセス対象と先読み対象として機能させることにより、キャッシュミスは発生せず１６サイクルで済む。
【０１２０】
また、図１４〜１６に示すように、データ先読みの期間中も命令フェッチとデータリードサイクルは、実行可能である。先読みを実行するためのサイクルは隠蔽することができる。
【０１２１】
また、ウェイ１へのデータの先読み終了後、図１６に示すサイクル１５、１６、１７、１８において、既にアクセスされたウェイ０のデータＤ６／Ｄ７から、デクリメントフラグ６６＿０が示すのとは逆方向のＤ０／Ｄ１，Ｄ２／Ｄ３，Ｄ４／Ｄ５に、対応するデータが読み込まれる。これは、図３〜図６に示したフローチャートのステップ１２〜ステップ１４が実行された結果である。連続アクセスが乱れた場合に、キャッシュミスの確率を減らすことができる。一方、ステップ１２〜ステップ１４を実行しないように設計することもできる。その場合は、連続アクセスが継続された場合に無駄になる、デクリメントフラグ６６＿０が示すのとは逆方向の読み込みを中止することができ、その分の消費電力を低減することができる。
【０１２２】
図１７〜１８は、２ウェイのキャッシュがそれぞれ独立して動作する場合の動作例を表すタイミングチャートである。
【０１２３】
図１７において、ＣＰＵ５３はサイクルＴ１にアドレス０ｘ００２００８からの２バイトのデータリードを要求している。このとき、ウェイ０のタグ６５＿０の値は０ｘ０１２１９、ウェイ１のタグ６５＿１の値は０ｘ０１２１Ａであり、ＬＲＵフラグ７０はウェイ０を指している。データリードを要求されているアドレス０ｘ００２００８に対応するタグ値０ｘ００２００に一致するタグはないので、キャッシュミスが発生する。キャッシュミスの判断に２サイクル要するとし、サイクルＴ３においてキャッシュメモリ６０が不揮発メモリ５５に対してアドレス０ｘ００２００８を出力する。キャッシュフィルの対象は、ＬＲＵフラグ７０が示すウェイ０である。サイクルＴ３でＬＲＵフラグ７０はウェイ１に更新され、サイクルＴ４でウェイ０のタグ６５＿０が、０ｘ００２００に更新される。不揮発メモリ５５内ではデータの読み出しが実行されるが、３サイクルを要するとして、サイクルＴ６でアドレス０ｘ００２００８の値＠００２００８が読み出され、図１８に示すサイクルＴ７でウェイ０（６４＿０）のＤ４／Ｄ５に書き込まれ、合わせてＣＰＵ５３にも出力される。
【０１２４】
図１８において、ＣＰＵ５３はサイクルＴ８にアドレス０ｘ００２００Ａからの２バイトのデータリードを要求している。サイクルＴ１でのデータリード要求が、アドレス０ｘ００２００８からの２バイトのデータリードを要求であったので、サイクルＴ１でのデータリード要求は、アドレス増加方向での連続リードの要求である。ウェイ０のデクリメントフラグ６６＿０は、アドレス増加方向を示す０のまま維持される。アドレス０ｘ００２００Ａのデータは、先のキャッシュフィルにより、ウェイ０（６４＿０）のＤ５に書き込まれているので、キャッシュヒットであり、サイクルＴ９に＠００２００ＡとしてＣＰＵのリードデータとして出力される。
【０１２５】
一方、図３〜図６のフローチャートに示したデータ先読み動作が開始される。サイクルＴ１のアドレス０ｘ００２００８からの２バイトのデータリード要求によって発生したキャッシュフィルの後、ウェイ０のＤ４／Ｄ５を起点にデクリメントフラグ６６＿０が示す方向のデータ領域Ｄ６／Ｄ７は、まだフィルされていない（ステップ３５）。そこで、サイクルＴ６で不揮発メモリ５５に対してアドレス０ｘ００２００Ｃを発行し、図１８に示すサイクルＴ７で読み込まれるデータ＠０ｘ００２００ｃをサイクルＴ８でデータ領域Ｄ６／Ｄ７に書き込む（ステップ３６）。その後、ステップ４に進むが、ウェイ０とウェイ１のタグ値は連続しないので、ステップ３８〜４８に示すデータの先読みは実行されない。代わりに、ステップ１２〜１４により、図１８に示すサイクルＴ８，Ｔ９，Ｔ１０に、ウェイ０のＤ０／Ｄ１，Ｄ２／Ｄ３に、それぞれアドレス０ｘ００２０００と０ｘ００２００４のデータが読み込まれる。一方、ウェイ１のデータは維持される。２ウェイのキャッシュメモリとして機能する。
【０１２６】
これにより、本実施形態のキャッシュ制御回路は、２ウェイのキャッシュとして機能するか、２個のウェイをまとめて交互に先読み対象として機能させるかを、タグの値とデクリメントフラグを参照するだけで、自律的に切替えることが可能となっている。
【０１２７】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１２８】
例えば、データキャッシュについての実施形態に限らず、命令キャッシュやユニファイドキャッシュにも適用することができる。また、ウェイ数は２に限定されず任意に決めることができ、キャッシュヒット／ミスの判定に費やすサイクル数は、適宜最適に設計することができ、また、不揮発メモリのデータリードのためのサイクル数は、任意の値であってよい。
【産業上の利用可能性】
【０１２９】
本発明はキャッシュメモリへのデータ先読み技術に関し、特にキャッシュメモリを備えた半導体装置に広く適用することができる。
【符号の説明】
【０１３０】
１  連続するアクセスのアドレスが連続するか否かを判定するステップ
２  ウェイにアドレス変化方向属性（デクリメントフラグ）を付与するステップ
３  ウェイにアクセスするステップ
４  先読み動作に適合するか否かを判定するステップ
５  先読みを実行するステップ
５０  半導体装置（セキュアマイコン）
５１  アドレスバス
５２  データバス
５３  プロセッサ（ＣＰＵ）
５４  ＤＭＡ（Direct Memory Access）コントローラ
５５  不揮発メモリ
５６  ＲＯＭ（Read Only Memory）
５７  ＲＡＭ（Random Access Memory）
５８  周辺モジュール
６０  キャッシュメモリ
６１  データキャッシュ
６２  命令キャッシュ
６３  キャッシュ制御部
６４  ウェイ
６５  タグ
６６  デクリメントフラグ
６７  バリッドフラグ
６８  アドレス制御部
６９  データ制御部
７０  ＬＲＵ（Least Recently Used）フラグ
７１  ＬＲＵ制御部
７２  タグ制御部
７３  デクリメントフラグ制御部
７４  バリッドフラグ制御部
７５  キャッシュ制御部内部アドレスバス
７６  キャッシュ制御部内部データバス
７７  メモリ部
７８  リードバッファ
７９  セレクタ
【図１】
2014068694.tif 000003
【図２】
2014068694.tif 000004
【図３】
2014068694.tif 000005
【図４】
2014068694.tif 000006
【図５】
2014068694.tif 000007
【図６】
2014068694.tif 000008
【図７】
2014068694.tif 000009
【図８】
2014068694.tif 000010
【図９】
2014068694.tif 000011
【図１０】
2014068694.tif 000012
【図１１】
2014068694.tif 000013
【図１２】
2014068694.tif 000014
【図１３】
2014068694.tif 000015
【図１４】
2014068694.tif 000016
【図１５】
2014068694.tif 000017
【図１６】
2014068694.tif 000018
【図１７】
2014068694.tif 000019
【図１８】
2014068694.tif 000020
【手続補正書】
【提出日】平成28年2月8日(2016.2.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサと、メモリと、複数のタグと、前記タグに格納されるタグ値を基準アドレスとして前記メモリの連続するアドレスの複数のデータをそれぞれ格納可能な複数のウェイと、キャッシュ制御部を備える半導体装置であって、
前記複数のウェイのそれぞれに、前記ウェイに対する直近の２回のアクセスがアドレスの増加または減少のどちらかの方向を示すアドレス変化方向フラグを設け、
前記キャッシュ制御部は、前記プロセッサから前記メモリに対して連続して行う第１アクセスと第２アクセスが互いに連続するアドレスへのアクセスであり、前記第２アクセスが第１ウェイを介するアクセスであり、前記第１ウェイに対応するアドレス変化方向フラグと一致するアドレス変化方向フラグを持ち、前記第１ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向と逆方向で連続するタグ値を持つ、第２ウェイに対して、前記第１ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向で連続するタグ値で示されるデータの先読みを可能に構成される、半導体装置。
【請求項２】
請求項１において、前記キャッシュ制御部は、前記第２アクセスが前記第１アクセスと同一のウェイで且つ同一のタグ値へのアクセスであるときに、前記第２アクセスの対象アドレスが前記第１アクセスの対象アドレスより小さいとき、前記アドレス変化方向フラグをセット可能に構成される、半導体装置。
【請求項３】
請求項１において、前記キャッシュ制御部は、キャッシュミスのとき、前記ウェイに格納されるデータの合計のデータ長の整数分の１のデータ長の単位で、キャッシュフィルを実行可能に構成される、半導体装置。
【請求項４】
請求項３において、前記キャッシュ制御部は、前記複数のウェイのそれぞれに、前記キャッシュフィルのデータ長の単位ごとに、有効フラグを備え、キャッシュミスが発生したとき、キャッシュフィルの対象のウェイに対応する前記有効フラグを全てクリアし、キャッシュフィルしたデータに対応する前記有効フラグをセット可能に構成される、半導体装置。
【請求項５】
請求項４において、前記キャッシュ制御部は、前記第２アクセスの後、前記第１ウェイに対応するアドレス変化方向フラグによって示される方向で、対応する前記有効フラグがセットされていない前記第１ウェイ内の領域へのデータの先読みを可能に構成される、半導体装置。
【請求項６】
請求項５において、前記キャッシュ制御部は、前記第２ウェイに対応するアドレス変化方向フラグと前記第１ウェイに対応するアドレス変化方向フラグとが一致し、前記第２ウェイに対応するタグ値が前記第１ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向と逆方向で連続するときに、前記第１ウェイ内の領域へのデータの先読みの後に、前記第２ウェイに対するデータの先読みを可能に構成され、
前記第２ウェイに対応するアドレス変化方向フラグと前記第１ウェイに対応するアドレス変化方向フラグとが一致せず、または、前記第２ウェイに対応するタグ値が前記第１ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向と逆方向で連続しないときに、前記第１ウェイ内の領域へのデータの先読みの後に、前記第１ウェイ内の前記第２アクセスの後、前記第１ウェイに対応するアドレス変化方向フラグによって示される方向と逆方向の、前記第１ウェイ内の領域へのデータの先読みを可能に構成される、半導体装置。
【請求項７】
請求項１において、前記プロセッサは、前記第２アクセスの終了後、前記キャッシュメモリが前記先読みを完了する前に、前記第２アクセスの後続のアクセスを実行可能に構成される、半導体装置。
【請求項８】
請求項１において、前記複数のウェイのそれぞれは、前記メモリの任意のアドレスのデータをキャッシュすることが可能に構成される、半導体装置。
【請求項９】
請求項１において、命令キャッシュをさらに備え、前記複数のウェイは、前記プロセッサに対するデータキャッシュである、半導体装置。
【請求項１０】
プロセッサとメモリの間に設けられ、複数のタグと前記タグに格納されるタグ値を基準アドレスとして前記メモリの連続するアドレスの複数のデータをそれぞれ格納可能な複数のウェイとを備える、キャッシュメモリにおけるデータ先読み方法であって、
前記プロセッサから前記メモリに対する第１アクセスと連続する第２アクセスが互いに連続するアドレスへのアクセスであるか否かを判定する第１ステップと、
前記第１ステップの判定結果が連続アドレスへのアクセスであるとき、前記第１アクセスと前記第２アクセスが前記複数のウェイのうちの同一ウェイに対する同一タグ値によるアクセスであるとき、前記ウェイに対する直近の２回のアクセスがアドレスの増加または減少のどちらの方向かを示すアドレス変化方向属性を付与する第２ステップと、
前記第２アクセスによって第１ウェイをアクセスする第３ステップと、
前記第１ウェイと同一のアドレス変化方向属性を持ち、前記第１ウェイのタグ値に対して、前記同一のアドレス変化方向属性が示す方向と逆方向に連続するタグ値を持つ第２ウェイの有無を判定する第４ステップと、
前記第４ステップの有の判定結果に基づいて、前記第２ウェイを対象として、前記アドレス変化方向属性が示す方向で連続するタグ値で示されるデータの先読みを行う、第５ステップとを含む、データ先読み方法。
【請求項１１】
請求項１０において、前記第３ステップがキャッシュヒットかキャッシュミスかに関わらず、前記第４ステップは前記第３ステップの後に実行され、前記第３ステップがキャッシュミスであるときは、前記第３ステップは前記第１ウェイのタグ値を更新し、前記第５ステップは更新された前記第１ウェイのタグ値に基づいて前記先読みを行うか否かの判定を行う、データ先読み方法。
【請求項１２】
請求項１０において、前記第１ステップは、前記第２アクセスが前記第１アクセスと同一のウェイで且つ同一のタグ値へのアクセスであるときに、前記第２アクセスの対象アドレスが前記第１アクセスの対象アドレスより小さいとき、前記アドレス変化方向属性としてアドレス減少方向をセットする、データ先読み方法。
【請求項１３】
請求項１０において、前記第３ステップは、キャッシュミスのとき、前記ウェイに格納されるデータの合計のデータ長の整数分の１のデータ長の単位で、キャッシュフィルを行う、データ先読み方法。
【請求項１４】
請求項１３において、前記複数のウェイのそれぞれは、前記キャッシュフィルのデータ長の単位ごとに、有効フラグを備え、前記第３ステップでキャッシュミスが発生したとき、キャッシュフィルの対象のウェイに対応する前記有効フラグを全てクリアし、キャッシュフィルしたデータに対応する前記有効フラグをセットする、データ先読み方法。
【請求項１５】
請求項１４において、前記第３ステップの後、前記第１ウェイに対応するアドレス変化方向属性によって示される方向で、対応する前記有効フラグがセットされていない前記第１ウェイ内の領域へのデータの先読みを行う、第６ステップをさらに含む、データ先読み方法。
【請求項１６】
請求項１５において、前記第６ステップの後で前記第４ステップを実行し、前記第４ステップの無の判定結果に基づいて、前記第１ウェイに対応するアドレス変化方向属性によって示される方向と逆の方向で、対応する前記有効フラグがセットされていない前記第１ウェイ内の領域へのデータの先読みを行う、第７ステップをさらに含む、データ先読み方法。
【請求項１７】
プロセッサと、メモリと、互いに１：１対応する複数のタグと複数のウェイとキャッシュ制御部を備える半導体装置であって、
前記プロセッサから前記メモリに対する第１アクセスと第２アクセスが互いに連続して実行され、連続するアドレスへのアクセスであり、前記第２アクセスが第１ウェイを介するアクセスであるとき、
前記キャッシュ制御部は、前記第２アクセスが前記第１アクセスに対してアドレスが増加する方向でのアクセスであるときには、前記第１ウェイに対応するタグ値よりも１小さいタグ値を持つウェイに対するデータの先読みを可能とし、前記第２アクセスが前記第１アクセスに対してアドレスが減少する方向でのアクセスであるときには、前記第１ウェイに対応するタグ値よりも１大きいタグ値を持つウェイに対するデータの先読みを可能に構成される、半導体装置。
【国際調査報告】
2014068694.tif 000021
2014068694.tif 000022
2014068694.tif 000023
2014068694.tif 000024