(58)【調査した分野】(Int.Cl.,DB名)
プロセッサと、メモリと、複数のタグと、前記タグに格納されるタグ値を基準アドレスとして前記メモリの連続するアドレスの複数のデータをそれぞれ格納可能な複数のウェイと、キャッシュ制御部を備える半導体装置であって、
前記複数のウェイのそれぞれに、前記ウェイに対する直近の2回のアクセスがアドレスの増加または減少のどちらかの方向を示すアドレス変化方向フラグを設け、
前記キャッシュ制御部は、前記プロセッサから前記メモリに対して連続して行う第1アクセスと第2アクセスが互いに連続するアドレスへのアクセスであり、前記第2アクセスが第1ウェイを介するアクセスであり、前記第1ウェイに対応するアドレス変化方向フラグと一致するアドレス変化方向フラグを持ち、前記第1ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向と逆方向で連続するタグ値を持つ、第2ウェイに対して、前記第1ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向で連続するタグ値で示されるデータの先読みを可能に構成される、半導体装置。
請求項1において、前記キャッシュ制御部は、前記第2アクセスが前記第1アクセスと同一のウェイで且つ同一のタグ値へのアクセスであるときに、前記第2アクセスの対象アドレスが前記第1アクセスの対象アドレスより小さいとき、前記アドレス変化方向フラグをセット可能に構成される、半導体装置。
請求項1において、前記キャッシュ制御部は、キャッシュミスのとき、前記ウェイに格納されるデータの合計のデータ長の整数分の1のデータ長の単位で、キャッシュフィルを実行可能に構成される、半導体装置。
請求項3において、前記キャッシュ制御部は、前記複数のウェイのそれぞれに、前記キャッシュフィルのデータ長の単位ごとに、有効フラグを備え、キャッシュミスが発生したとき、キャッシュフィルの対象のウェイに対応する前記有効フラグを全てクリアし、キャッシュフィルしたデータに対応する前記有効フラグをセット可能に構成される、半導体装置。
請求項4において、前記キャッシュ制御部は、前記第2アクセスの後、前記第1ウェイに対応するアドレス変化方向フラグによって示される方向で、対応する前記有効フラグがセットされていない前記第1ウェイ内の領域へのデータの先読みを可能に構成される、半導体装置。
請求項5において、前記キャッシュ制御部は、前記第2ウェイに対応するアドレス変化方向フラグと前記第1ウェイに対応するアドレス変化方向フラグとが一致し、前記第2ウェイに対応するタグ値が前記第1ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向と逆方向で連続するときに、前記第1ウェイ内の領域へのデータの先読みの後に、前記第2ウェイに対するデータの先読みを可能に構成され、
前記第2ウェイに対応するアドレス変化方向フラグと前記第1ウェイに対応するアドレス変化方向フラグとが一致せず、または、前記第2ウェイに対応するタグ値が前記第1ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向と逆方向で連続しないときに、前記第1ウェイ内の領域へのデータの先読みの後に、前記第1ウェイ内の前記第2アクセスの後、前記第1ウェイに対応するアドレス変化方向フラグによって示される方向と逆方向の、前記第1ウェイ内の領域へのデータの先読みを可能に構成される、半導体装置。
請求項1において、前記プロセッサは、前記第2アクセスの終了後、前記キャッシュメモリが前記先読みを完了する前に、前記第2アクセスの後続のアクセスを実行可能に構成される、半導体装置。
プロセッサとメモリの間に設けられ、複数のタグと前記タグに格納されるタグ値を基準アドレスとして前記メモリの連続するアドレスの複数のデータをそれぞれ格納可能な複数のウェイとを備える、キャッシュメモリにおけるデータ先読み方法であって、
前記プロセッサから前記メモリに対する第1アクセスと連続する第2アクセスが互いに連続するアドレスへのアクセスであるか否かを判定する第1ステップと、
前記第1ステップの判定結果が連続アドレスへのアクセスであるとき、前記第1アクセスと前記第2アクセスが前記複数のウェイのうちの同一ウェイに対する同一タグ値によるアクセスであるとき、前記ウェイに対する直近の2回のアクセスがアドレスの増加または減少のどちらの方向かを示すアドレス変化方向属性を付与する第2ステップと、
前記第2アクセスによって第1ウェイをアクセスする第3ステップと、
前記第1ウェイと同一のアドレス変化方向属性を持ち、前記第1ウェイのタグ値に対して、前記同一のアドレス変化方向属性が示す方向と逆方向に連続するタグ値を持つ第2ウェイの有無を判定する第4ステップと、
前記第4ステップの有の判定結果に基づいて、前記第2ウェイを対象として、前記アドレス変化方向属性が示す方向で連続するタグ値で示されるデータの先読みを行う、第5ステップとを含む、データ先読み方法。
請求項10において、前記第3ステップがキャッシュヒットかキャッシュミスかに関わらず、前記第4ステップは前記第3ステップの後に実行され、前記第3ステップがキャッシュミスであるときは、前記第3ステップは前記第1ウェイのタグ値を更新し、前記第5ステップは更新された前記第1ウェイのタグ値に基づいて前記先読みを行うか否かの判定を行う、データ先読み方法。
請求項10において、前記第1ステップは、前記第2アクセスが前記第1アクセスと同一のウェイで且つ同一のタグ値へのアクセスであるときに、前記第2アクセスの対象アドレスが前記第1アクセスの対象アドレスより小さいとき、前記アドレス変化方向属性としてアドレス減少方向をセットする、データ先読み方法。
請求項10において、前記第3ステップは、キャッシュミスのとき、前記ウェイに格納されるデータの合計のデータ長の整数分の1のデータ長の単位で、キャッシュフィルを行う、データ先読み方法。
請求項13において、前記複数のウェイのそれぞれは、前記キャッシュフィルのデータ長の単位ごとに、有効フラグを備え、前記第3ステップでキャッシュミスが発生したとき、キャッシュフィルの対象のウェイに対応する前記有効フラグを全てクリアし、キャッシュフィルしたデータに対応する前記有効フラグをセットする、データ先読み方法。
請求項14において、前記第3ステップの後、前記第1ウェイに対応するアドレス変化方向属性によって示される方向で、対応する前記有効フラグがセットされていない前記第1ウェイ内の領域へのデータの先読みを行う、第6ステップをさらに含む、データ先読み方法。
請求項15において、前記第6ステップの後で前記第4ステップを実行し、前記第4ステップの無の判定結果に基づいて、前記第1ウェイに対応するアドレス変化方向属性によって示される方向と逆の方向で、対応する前記有効フラグがセットされていない前記第1ウェイ内の領域へのデータの先読みを行う、第7ステップをさらに含む、データ先読み方法。
【発明を実施するための形態】
【0017】
1.実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【0018】
〔1〕<逆方向に連続するタグ値を持つウェイへの先読み>
プロセッサ(53)と、メモリ(55)と、複数のタグ(65)と、前記タグに格納されるタグ値を基準アドレスとして前記メモリの連続するアドレスの複数のデータをそれぞれ格納可能な複数のウェイ(64)と、キャッシュ制御部(63)を備える半導体装置(50)であって、以下の通り構成される。
【0019】
前記複数のウェイのそれぞれに、前記ウェイに対する直近の2回のアクセスがアドレスの増加または減少のどちらかの方向を示すアドレス変化方向フラグ(66)を設ける。
【0020】
前記キャッシュ制御部は、前記プロセッサから前記メモリに対して連続して行う第1アクセスと第2アクセスが互いに連続するアドレスへのアクセスであり(1)、前記第2アクセスが第1ウェイを介するアクセスであるとき、以下の条件を満たす第2ウェイに対して、所定の先読み動作を可能に構成される。前記条件とは、前記第1ウェイに対応するアドレス変化方向フラグと一致するアドレス変化方向フラグを持ち、前記第1ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向と逆方向で連続するタグ値を持つこと(4)である。前記所定の先読み動作とは、前記第1ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向で連続するタグ値で示されるデータの先読み(5)である。
【0021】
これにより、複数ウェイで構成されるキャッシュメモリにおいて、そのまま複数ウェイとして機能するか、2ウェイが互いのウェイの先読みデータの格納先として、1つのウェイとして機能するかを、アクセス履歴に応じて自律的に切り替えることができる。
【0022】
〔2〕<デクリメントフラグの更新>
項1において、前記キャッシュ制御部は、前記第2アクセスが前記第1アクセスと同一のウェイで且つ同一のタグ値へのアクセスであるときに、前記第2アクセスの対象アドレスが前記第1アクセスの対象アドレスより小さいとき、前記アドレス変化方向フラグをセット(2)可能に構成される。
【0023】
これにより、アドレス変化方向フラグ(66)が、キャッシュメモリへのアクセス履歴に基づいて、キャッシュ制御部によって自律的にセット可能に構成することができる。
【0024】
〔3〕<ワード単位のキャッシュフィル>
項1において、前記キャッシュ制御部は、キャッシュミスのとき、前記ウェイに格納されるデータの合計のデータ長の整数分の1のデータ長の単位で、キャッシュフィルを実行可能に構成される。
【0025】
これにより、キャッシュフィルのための消費電力を低く抑えることができる。
【0026】
〔4〕<バリッドフラグ>
項3において、前記キャッシュ制御部は、前記複数のウェイのそれぞれに、前記キャッシュフィルのデータ長の単位ごとに、有効フラグ(67)を備え、キャッシュミスが発生したとき、キャッシュフィルの対象のウェイに対応する前記有効フラグを全てクリアし(23)、キャッシュフィルしたデータに対応する前記有効フラグをセット(25)可能に構成される。
【0027】
これにより、ウェイに格納される所定のデータ長のデータ単位で、キャッシュヒット/ミスを判定し、データの出力またはキャッシュフィルを行うことができる。
【0028】
〔5〕<バリッドフラグを使った同一ウェイ後方へのデータの先読み>
項4において、前記キャッシュ制御部は、前記第2アクセスの後、前記第1ウェイに対応するアドレス変化方向フラグによって示される方向で、対応する前記有効フラグがセットされていない前記第1ウェイ内の領域へのデータの先読み(12、13、14)を可能に構成される。
【0029】
これにより、連続アクセスの状態が崩れ、連続方向とは逆のアドレス方向へのアクセスが実行されたときにも、同一ウェイ内のデータであればヒットするように、同一ウェイ後方(連続方向とは逆のアドレス方向)への先読みを実施することができる。
【0030】
〔6〕<同一ウェイのアドレス変化方向へのデータの先読み後、逆方向へのデータの先読み>
項5において、前記キャッシュ制御部は、以下の動作を可能に構成される。
【0031】
前記第2ウェイに対応するアドレス変化方向フラグと前記第1ウェイに対応するアドレス変化方向フラグとが一致し、前記第2ウェイに対応するタグ値が前記第1ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向と逆方向で連続するときに、前記第1ウェイ内の領域へのデータの先読みの後に、前記第2ウェイに対するデータの先読みを行う。
【0032】
前記第2ウェイに対応するアドレス変化方向フラグと前記第1ウェイに対応するアドレス変化方向フラグとが一致せず、または、前記第2ウェイに対応するタグ値が前記第1ウェイに対応するタグ値に対して、前記アドレス変化方向フラグが示す方向と逆方向で連続しないときに、以下の先読み動作を行う。前記第1ウェイ内の領域へのデータの先読みの後に、前記第1ウェイ内の前記第2アクセスの後、前記第1ウェイに対応するアドレス変化方向フラグによって示される方向と逆方向の、前記第1ウェイ内の領域へのデータの先読みを行う。
【0033】
これにより、2ウェイに跨って先読み動作を行う場合であっても、連続アクセスの状態が崩れ、連続方向とは逆のアドレス方向へのアクセスが実行されたときに、キャッシュミスの確率を減らすように、同一ウェイ後方(連続方向とは逆のアドレス方向)への先読みを実施することができる。
【0034】
〔7〕<先読み実行サイクルの隠蔽>
項1において、前記プロセッサは、前記第2アクセスの終了後、前記キャッシュメモリが前記先読みを完了する前に、前記第2アクセスの後続のアクセスを実行可能に構成される。
【0035】
これにより、先読みを実行するためのサイクルを隠蔽することができ、単位時間あたりに実行される有効な命令サイクル数を増やすことができる。
【0036】
〔8〕<フルアソシアティブ>
項1において、前記複数のウェイのそれぞれは、前記メモリの任意のアドレスのデータをキャッシュすることが可能に構成される。
【0037】
これにより、各ウェイは格納するデータのメモリでのアドレスに制約されることなく、任意のアドレスのデータもキャッシュすることができる。
【0038】
〔9〕<データキャッシュ>
項1において、前記半導体装置は命令キャッシュをさらに備え、前記複数のウェイは、前記プロセッサに対するデータキャッシュである。
【0039】
これにより、データに特化したキャッシュを構成することができる。一般にデータは、命令と比較して連続アクセスの場合のアドレスの規則性が単純である。一連のデータの連続アクセスと、それぞれで連続する2系列のデータを交互にアクセスする場合が極めて多い。この特徴を踏まえて、キャッシュ回路、特にキャッシュ制御部を単純化することができる。
【0040】
〔10〕<データ先読み方法>
プロセッサ(53)とメモリ(55)の間に設けられ、複数のタグ(65)と前記タグに格納されるタグ値を基準アドレスとして前記メモリの連続するアドレスの複数のデータをそれぞれ格納可能な複数のウェイ(64)とを備える、キャッシュメモリ(60)におけるデータ先読み方法であって、以下の各ステップを含んで構成される。
【0041】
前記プロセッサから前記メモリに対する第1アクセスと連続する第2アクセスが互いに連続するアドレスへのアクセスであるか否かを判定する第1ステップ(1)。
【0042】
前記第1ステップの判定結果が連続アドレスへのアクセスであるとき、前記第1アクセスと前記第2アクセスが前記複数のウェイのうちの同一ウェイに対する同一タグ値によるアクセスであるとき、前記ウェイに対する直近の2回のアクセスがアドレスの増加または減少のどちらの方向かを示すアドレス変化方向属性を付与する第2ステップ(2)。
【0043】
前記第2アクセスによって第1ウェイをアクセスする第3ステップ(3)。
【0044】
前記第1ウェイと同一のアドレス変化方向属性を持ち、前記第1ウェイのタグ値に対して、前記同一のアドレス変化方向属性が示す方向と逆方向に連続するタグ値を持つ第2ウェイの有無を判定する第4ステップ(4)。
【0045】
前記第4ステップの有の判定結果に基づいて、前記第2ウェイを対象として、前記アドレス変化方向属性が示す方向で連続するタグ値で示されるデータの先読みを行う、第5ステップ(5)。
【0046】
これにより、複数ウェイで構成されるキャッシュメモリにおいて、そのまま複数ウェイとして機能するか、2ウェイが互いのウェイの先読みデータの格納先として、1つのウェイとして機能するかを、アクセス履歴に応じて自律的に切り替えることができる。
【0047】
〔11〕<キャッシュヒット/ミスに関わらずにデータ先読み>
項10において、前記第3ステップがキャッシュヒットかキャッシュミスかに関わらず、前記第4ステップは前記第3ステップの後に実行される(21、22…C2…4)。前記第3ステップがキャッシュミスであるときは、前記第3ステップは前記第1ウェイのタグ値を更新し(26)、前記第5ステップは更新された前記第1ウェイのタグ値に基づいて前記先読みを行うか否かの判定を行う。
【0048】
これにより、キャッシュミスによるオーバーヘッドの発生を防止することができる。キャッシュミスしてキャッシュフィルする場合に限らず、キャッシュヒットしている期間にもデータの先読みをするので、連続アクセスの間、継続的にキャッシュヒットさせることができる。例えば、一方のウェイにヒットしている期間の空きサイクルに、他方のウェイの先読みを行うような動作により、常時どちらかのウェイにキャッシュヒットさせることができる。
【0049】
〔12〕<デクリメントフラグの更新>
項10において、前記第1ステップは、前記第2アクセスが前記第1アクセスと同一のウェイで且つ同一のタグ値へのアクセスであるときに(17)、前記第2アクセスの対象アドレスが前記第1アクセスの対象アドレスより小さいとき(18)、前記アドレス変化方向属性としてアドレス減少方向をセットする(20)。
【0050】
これにより、アドレス変化方向属性が、キャッシュメモリへのアクセス履歴に基づいて、キャッシュ制御部によって自律的にセット可能に構成することができる。
【0051】
〔13〕<ワード単位のキャッシュフィル>
項10において、前記第3ステップは、キャッシュミスのとき、前記ウェイに格納されるデータの合計のデータ長の整数分の1のデータ長の単位で、キャッシュフィルを行う。
【0052】
これにより、キャッシュフィルのための消費電力を低く抑えることができる。
【0053】
〔14〕<バリッドフラグ>
項13において、前記複数のウェイのそれぞれは、前記キャッシュフィルのデータ長の単位ごとに、有効フラグ(67)を備え、前記第3ステップでキャッシュミスが発生したとき、キャッシュフィルの対象のウェイに対応する前記有効フラグを全てクリアし(23)、キャッシュフィルしたデータに対応する前記有効フラグをセットする(25)。
【0054】
これにより、ウェイに格納される所定のデータ長のデータ単位で、キャッシュヒット/ミスを判定し、データの出力またはキャッシュフィルを行うことができる。
【0055】
〔15〕<バリッドフラグを使った同一ウェイ後方へのデータの先読み>
項14において、前記第3ステップの後、前記第1ウェイに対応するアドレス変化方向属性によって示される方向で、対応する前記有効フラグがセットされていない前記第1ウェイ内の領域へのデータの先読みを行う、第6ステップ(13)をさらに含む。
【0056】
これにより、連続アクセスの状態が崩れ、連続方向とは逆のアドレス方向へのアクセスが実行されたときにも、同一ウェイ内のデータであればヒットするように、同一ウェイ後方(連続方向とは逆のアドレス方向)への先読みを実施することができる。
【0057】
〔16〕<同一ウェイのアドレス変化方向へのデータの先読み後、逆方向へのデータの先読み>
項15において、前記第6ステップの後で前記第4ステップを実行し、前記第4ステップの無の判定結果に基づいて、前記第1ウェイに対応するアドレス変化方向属性によって示される方向と逆の方向で、対応する前記有効フラグがセットされていない前記第1ウェイ内の領域へのデータの先読みを行うために、第6ステップ(13)を繰り返すループをさらに含む、データ先読み方法。
【0058】
これにより、2ウェイに跨って先読み動作を行う場合であっても、連続アクセスの状態が崩れ、連続方向とは逆のアドレス方向へのアクセスが実行されたときに、キャッシュミスの確率を減らすように、同一ウェイ後方(連続方向とは逆のアドレス方向)への先読みを実施することができる。
【0059】
〔17〕<逆方向に連続するタグ値を持つウェイへの先読み>
プロセッサ(53)と、メモリ(55)と、互いに1:1対応する複数のタグ(65)と複数のウェイ(64)とキャッシュ制御部(63)を備える半導体装置(50)であって、以下のように構成される。
【0060】
前記プロセッサから前記メモリに対する第1アクセスと第2アクセスが互いに連続して実行され、連続するアドレスへのアクセスであり、前記第2アクセスが第1ウェイを介するアクセスであるとき(1)、以下の動作を可能に構成される。
【0061】
前記キャッシュ制御部は、前記第2アクセスが前記第1アクセスに対してアドレスが増加する方向でのアクセスであるときには、前記第1ウェイに対応するタグ値よりも1小さいタグ値を持つウェイに対するデータの先読み行う(4、40)。前記第2アクセスが前記第1アクセスに対してアドレスが減少する方向でのアクセスであるときには、前記第1ウェイに対応するタグ値よりも1大きいウェイに対するデータの先読みを行う(4、45)。
【0062】
これにより、複数ウェイで構成されるキャッシュメモリにおいて、そのまま複数ウェイとして機能するか、2ウェイが互いのウェイの先読みデータの格納先として、1つのウェイとして機能するかを、アクセス履歴に応じて自律的に切り替えることができる。
【0063】
2.実施の形態の詳細
実施の形態について更に詳述する。なお、発明を実施するための形態を説明するための全図において、同一の機能を有する要素には同一の符号を付して、その繰り返しの説明を省略する。
【0064】
〔実施形態の概要〕
図2は、一実施形態に係る半導体装置の構成例を表すブロック図である。
【0065】
一実施形態に係る半導体装置には、プロセッサ53とメモリ55の間にキャッシュメモリ60が設けられている。メモリ55は例えばフラッシュメモリなどの不揮発メモリであって良く、プロセッサ53のメモリ空間に割り付けられる如何なるメモリであっても良い。キャッシュメモリ60は、命令キャッシュ62とデータキャッシュ61を含む。データキャッシュ61は、複数のタグ65_0〜65_3とそのタグに格納されるタグ値を基準アドレスとしてメモリ55の連続するアドレスの複数のデータをそれぞれ格納可能な複数のウェイ64_0〜64_3とを備える。タグ65_0〜65_3とウェイ64_0〜64_3とは1:1に対応付けられ、タグ65_0に格納されるタグ値を起点として、例えば16アドレス分のデータD0〜D7がウェイ64_0に格納される。ウェイとタグの数は任意で、少なくとも2組あれば良い。1個のウェイに格納されるデータの数、1データ当たりのデータ長(ビット長)も任意である。プロセッサ53からのアクセス単位や、キャッシュ対象の不揮発メモリ55とのインターフェースを考慮して適切に決めることができる。
図2には、他の構成要素も描かれているが、それらについては後述する。
【0066】
図1は、一実施形態に係る半導体装置の動作例を表すフローチャートである。
【0067】
プロセッサ53から不揮発メモリ55に対するアクセスである、データリード要求があると、そのデータリード要求と直前のデータリード要求が互いに連続するアドレスへのデータリード要求であるか否かを判定する(ステップ1)。その結果、連続アドレスへのデータリード要求であると判定されたとき、連続する2回のデータリード要求が同一ウェイに対する同一タグ値によるアクセスであるとき、そのウェイに対する直近の2回のアクセスがアドレスの増加または減少のどちらの方向かを示すアドレス変化方向属性を付与する(ステップ2)。今回のデータリード要求によってそのウェイ(アクセス対象ウェイ)をアクセスする(ステップ3)。
【0068】
次に、ステップ3でアクセスされたウェイ(アクセス対象ウェイ)と同一のアドレス変化方向属性を持ち、アクセス対象ウェイのタグ値に対して、そのアドレス変化方向属性が示す方向と逆方向に連続するタグ値を持つ別のウェイ(先読み対象ウェイ)の有無を判定する(ステップ4)。前記第4ステップの有の判定結果に基づいて、先読み対象ウェイに対して、アクセス対象ウェイのアドレス変化方向属性が示す方向で連続するタグ値で示されるデータの先読みを行う(ステップ5)。
【0069】
これにより、複数ウェイで構成されるキャッシュメモリにおいて、そのまま複数ウェイとして機能するか、2ウェイが互いのウェイの先読みデータの格納先として、1つのウェイとして機能するかを、アクセス履歴に応じて自律的に切り替えることができる。
【0070】
動作原理の理解を助けるために、ウェイが2個の場合を考える。ウェイ0(64_0)とタグ0(65_0)が対応し、ウェイ1(64_1)とタグ1(65_1)が対応する。今、ウェイ0(64_0)へのアクセスがアドレスAからのリードであるとき、まず、ウェイ0(64_0)にアドレス変化方向属性を付与する(ステップ2)。ウェイ0(64_0)への直前のアクセスがアドレスA−1へのアクセスであった場合は、アドレスは増加方向であり、逆に直前のアクセスがアドレスA+1へのアクセスであった場合は、アドレスは減少方向である。アドレス変化方向属性は各ウェイに付与される。ウェイ0(64_0)に対応するタグ0(65_0)には、アドレスAの上位アドレスが格納される。ウェイ0(64_0)に対するアクセスが、キャッシュミスであったときは、キャッシュフィルにより、タグ0(65_0)には、アドレスAの上位アドレスが格納される。
【0071】
次に、先読みに適するウェイを探索する。今、ウェイが2個のみの場合を仮定しているので、アクセス対象のウェイ0(64_0)に対し、ウェイ1(64_1)が先読み対象として適するか否かの判定をする場合について考える。判定の条件は、同一のアドレス変化方向属性を持ち、アクセス対象ウェイのタグ値に対して、そのアドレス変化方向属性が示す方向と逆方向に連続するタグ値を持つか否かである(ステップ4)。ウェイ1(64_1)がウェイ0(64_0)と同一のアドレス変化方向属性を持つとは、どちらのウェイも同じアドレスの変化方向で連続アクセスされてきたという、アクセス履歴を反映したものである。さらに、ウェイ1(64_1)に対応するタグ1(65_1)が、そのアドレス変化方向属性が示す方向と逆方向に、ウェイ0(64_0)に対応するタグ0(65_0)に格納されるタグ値と連続するタグ値を持つとは、ウェイ1(64_1)が既にアクセスされたウェイであることを示すものである。したがって、この条件を満たせば、ウェイ1(64_1)は同じ系列のデータで連続してアクセスされてきており、既にアクセスされたウェイである可能性が高い。したがって、ウェイ1(64_1)は再度アクセスされる確率は低く、ウェイ0(64_0)へのアクセスに続く先読み対象として適するものであると判断できる。そこで、ウェイ1(64_1)を先読みの対象として、そのアドレス変化方向属性が示す方向にデータの先読みを実行する(ステップ5)。例えば、アドレス変化方向が増加方向で、タグ0(65_0)にアドレスAの上位アドレスであるA’がタグ値として格納されているとき、ウェイ1(64_1)が同じデータ系列の一連のアクセスで既にアクセスされたウェイである場合には、対応するタグ1(65_1)には、A’−1が格納されているはずである。逆に、この条件が満たされない場合には、ウェイ1(64_1)は別のアドレス領域に格納されている別の系列のデータをキャッシュするために使われている可能性が高い。そのため、先読み対象としては適切でなく、先読みは実行されない。
【0072】
このように、本実施形態では、アドレス変化方向属性とタグ値が連続しているか否かに基づいて、先読み対象として適切なウェイか否かを判定している。先読み対象に適するウェイがあれば、アクセス対象のウェイと先読み対象のウェイを組合せて、あたかも先読み機能を備えた1つのウェイとして機能させる。一方、先読み対象に適するウェイがなければ、各ウェイは独立のウェイとして、本来の複数ウェイのとして機能させる。一般にデータの先読みをすべきか否かの判断は、アクセス履歴に基づいて行われる。本実施形態では、タグ値がアクセス履歴を反映している点に着目し、その方向を示すアドレス変化方向属性を付与するだけで、外部からの特別な制御を受けずに、キャッシュ制御部が自律的に判断して、ウェイの先読み機能を切り替えている。キャッシュ回路はアクセス履歴を、アドレス変化方向属性とタグ値が連続しているか否かという情報に集約して保持しているので、自律的に判断することができる。
【0073】
ここで注意すべきは、1つのウェイに複数のタグを備えるのではなく、ウェイとタグが1:1に対応付けられる点である。換言すれば、1つのウェイが1ラインとそれに対応する1個のタグのみで構成される。最小限2ライン分のキャッシュを備えれば、それを、先読み機能を持つ1ウェイキャッシュまたは2ウェイのキャッシュのいずれかとして自律的に切り替えながら機能させることができる。本実施形態は、大規模なキャッシュ回路ではなく、ICカードなどに搭載可能なセキュアマイコンなどの、回路規模と消費電力に対して極めて厳しい要求があるような、小型かつ低消費電力のキャッシュ回路に適用すると、特に有効である。
【0074】
〔実施形態(構成例)〕
図2は、一実施形態に係る半導体装置の構成例を表すブロック図である。実施形態の概要で説明したよりも、より詳細な構成例について説明する。本実施形態に係る半導体装置50は、例えば、ICカードに用いられるマイコン50であって、単一の半導体基板上に公知の半導体製造技術を用いて形成され、或いは、不揮発メモリ55などを別チップとしたマルチチップモジュールとして形成される。本実施形態は、半導体装置の実装方法によって制限されるものではない。
【0075】
マイコン50は、アドレスバス51とデータバス52を介して互いに接続される、CPU53、DMAC54、ROM56、RAM57、周辺モジュール58を備える。DMAC(Direct Memory Access Controller)54は、CPU53によって設定される転送パラメータに基づいて、CPUとは独立にメモリにアクセスしてデータ転送を実行することができる。ROM(Read Only Memory)56とRAM(Random Access Memory)57はメモリであり、ROM57はCPU53で実行されるプログラムの命令コードやデータの初期値を格納し、RAM57はプログラムで使われる変数の値を格納する。周辺モジュール58は、例えば、タイマモジュールや通信インターフェースモジュールである。この他、図示されないバス調停回路、割り込み制御回路などを備えることができる。
【0076】
不揮発メモリ55は、キャッシュメモリ60を介して、アドレスバス51とデータバス52に接続されており、CPU53、DMAC54などのバスマスタからアクセスされることができる。不揮発メモリ55とキャッシュメモリ60は、専用のアドレスバス51_1とデータバス52_1を介して、相互に接続されている。
【0077】
不揮発メモリ55は、例えば、フラッシュメモリ、相変化メモリ、強誘電体メモリ、などの不揮発メモリである。不揮発メモリ55は、CPU53のメモリ空間に割り付けられている如何なる記憶素子にも置き換えることができる。DRAM、SDRAMなどの揮発メモリであってもよく、半導体以外のメモリであっても良い。不揮発メモリ55は、例えば、リードバッファ78とセレクタ79を備えて構成される。アドレスバス51_1の上位ビットで指定されるアドレスのデータをメモリ部77から読み出してリードバッファ78に一時格納し、そのうちの一部をセレクタ79で選択してデータバス52_1に出力する。リードバッファ78の大きさは、メモリ部77において1本のワード線に接続されるメモリセルのビット数と一致させることにより、不揮発メモリ55のアクセスのための消費電力を低く抑えることができる。さらに、特許文献3に記載される、プリリードキャッシュを備えると、消費電力低減をより効果的に実現することができ好適である。本実施形態では、特に制限されないが、リードバッファ78は16バイトとし、データバス52_1は4バイトとして説明する。
【0078】
キャッシュメモリ60は、データキャッシュ61と命令キャッシュ62とキャッシュ制御部63とを含む。データキャッシュ61には、4個のウェイ64_0〜64_3を備える。各ウェイには、それぞれ、タグ65_0〜65_3、デクリメントフラグ66_0〜66_3、バリッドフラグ67_0〜67_3が対応付けられる。キャッシュの制御には、例えば、LRU(Least Recently Used)方式を採用することができる。キャッシュミスが発生したときに、最も過去に使われた(Least Recently Used)ウェイにキャッシュフィルを行う方式である。キャッシュ制御部63には、アドレス制御部68とデータ制御部69とが設けられ、アドレスバス51とデータバス52を介したCPU53などとのアクセスコマンドのインターフェース、及び、不揮発メモリ55とのインターフェースを制御する。キャッシュ制御部63はさらに、LRUフラグ70とLRU制御部71、タグ制御部72、デクリメントフラグ制御部73、及び、バリッドフラグ制御部74を備え、データキャッシュのタグ65_0〜65_3、デクリメントフラグ66_0〜66_3、及び、バリッドフラグ67_0〜67_3を制御する。LRU制御部71、タグ制御部72、デクリメントフラグ制御部73、及び、バリッドフラグ制御部74は、内部アドレスバス75_1と内部データバス76_1に接続されている。
【0079】
ウェイ64_0〜64_3は、それぞれ、複数のデータを保持することができる。各ウェイ内のデータは、アドレスの連続するデータで構成される。ウェイに格納されるデータのアドレスに共通する上位アドレスが対応するタグに格納される。本実施形態では、1アドレス当たりのデータを1バイト(8ビット)とし、ウェイを構成するデータのビット長は2バイト(16ビット)として説明する。各ウェイには2バイトのデータを8個格納することができ、アドレスの下位4ビットを除く上位ビットが、タグ値に対応する。データバス52は2バイトの幅を持つとする。キャッシュはフルアソシアティブ方式とすることができる。各ウェイに格納されるデータは、CPU53のメモリ空間のどこのアドレスでも良い。
【0080】
デクリメントフラグ66_0〜66_3は、各ウェイ64_0〜64_3へのアクセスが同じウェイへの直前のアクセスに対して、アドレスの増加方向のアクセスか、減少方向のアクセスかを示すフラグである。ウェイごとに設けられる。バリッドフラグ67_0〜67_3は、各ウェイ64_0〜64_3のデータが有効か否かを表すフラグである。ウェイ64_0〜64_3を構成するデータに対して、1回のキャッシュフィルのデータサイズごとに1ビットのフラグを備える。例えば、ウェイ64_0〜64_3を構成するデータD0〜D7がそれぞれ2バイト(16ビット)のデータであるとし、4バイト(32ビット)ごとにキャッシュフィルされるとき、4バイトごとに1ビットのフラグを備え、各フラグを合計4ビットV0〜V4で構成する。本実施形態では、アドレスが1バイト毎に割り付けられているので、2バイトのデータリード要求であれば、アドレスが偶数で連続することを、連続アドレスと呼び、4バイトのデータリード要求であれば、アドレスが4の倍数で連続することを、連続アドレスと呼ぶ。
【0081】
データと命令のそれぞれにキャッシュを設けることにより、それぞれに特化したキャッシュ方式を採用することができる。一般にデータは、命令と比較して連続アクセスの場合のアドレスの規則性が単純である。一連のデータの連続アクセスと、それぞれで連続する2系列のデータを交互にアクセスする場合が極めて多い。この特徴を踏まえて、キャッシュ回路、特にキャッシュ制御部を単純化することができる。この実施形態では4ウェイの例を示したが、2ウェイとすることができる。最小限2ウェイを備えれば、一連のデータの連続アクセスと、それぞれで連続する2系列のデータを交互にアクセスする場合とに対応することができる。一方、データと命令を区別せず、1つのキャッシュメモリにキャッシュする構成とすることもできる。その場合は、ウェイ数を多くすることにより、動作状態においてデータをキャッシュするウェイと命令をキャッシュするウェイに分かれることが期待される。制御が一元化される点でメリットがある。データキャッシュについて採用した実施形態について説明しているが、同様の構成を命令キャッシュに採用することもできる。各ウェイは、フルアソシアティブとすることができる。これにより、各ウェイは格納するデータのメモリでのアドレスに制約されることなく、任意のアドレスのデータもキャッシュすることができる。
【0082】
キャッシュフィルのビット長は、例えば4バイトとすることができる。これにより、内部データバス76_1及びそれに接続される、LRU制御部71、タグ制御部72、デクリメントフラグ制御部73、及び、バリッドフラグ制御部74のインターフェース回路は、それぞれ4バイトずつ備えればよい。これにより、回路規模を抑え、消費電力を低減することができる。また、ウェイに格納される4バイト単位で、キャッシュヒット/ミスを判定し、データの出力またはキャッシュフィルを行うことができる。一方、ウェイごとに備えるデータ数を、不揮発メモリの1ワード線に接続されるデータ数と一致させることもできる。この場合には、不揮発メモリ55に備えるリードバッファ78とセレクタ79を不要とし、1本のワード線から読み出されるデータを一括してウェイにフィルすることができ、キャッシュフィルの高速化を図ることができる。この時のバリッドフラグは、ウェイごとに1ビットとすることができる。また、バリッドフラグを備えない構成も可能とすることができる。キャッシュフィルのビット長は、以上のような回路規模、消費電力、及びキャッシュフィルの速度を勘案して、適切に設計することができる。
【0083】
〔動作フロー〕
図2に示した半導体装置の詳細な動作例について説明する。
図3、
図4、
図5及び
図6は、一実施形態に係る半導体装置の詳細な動作例を表すフローチャートである。
【0084】
CPU53またはDMAC54などのバスマスタから、アドレスバス51とデータバスに52を介してバスコマンドが発行されると、キャッシュメモリ60のキャッシュ制御部63は、そのバスコマンドが命令フェッチであるのか、データアクセスであるのか、特に不揮発メモリ55へのデータリード要求であるか否かを判定する(ステップ11)。不揮発メモリ55へのデータリード要求でない場合には、キャッシュの全ウェイ64_0〜64_3の全データ領域が全て有効か否かを判定する(ステップ12)。バリッドフラグ67_0〜67_3のそれぞれを構成するV0〜V4のうち、1がセットされていないフラグの有無を判定する。有効ではないデータが存在するとき、即ち、バリッドフラグ67_0〜67_3のそれぞれを構成するV0〜V4のうち、1がセットされていないフラグがあるとき、不揮発メモリ55からデータをリードし、そのデータ領域にライトする(ステップ13)。ライトしたウェイのデータ領域に対応するバリッドフラグを1にセットする(ステップ14)。これにより、バスコマンドが発行されていない期間を有向に利用して、データの先読み、もしくは同じタグで示されるウェイの先読み方向とは逆方向のデータ(後方のデータ)を、事前に予備的に読み込んでおくことができ、キャッシュミスの確率を減らすことができる。
【0085】
発行されたバスコマンドが、不揮発メモリ55へのデータリード要求である場合には(ステップ11)、キャッシュメモリ60のキャッシュ制御部63は、そのバスコマンドのアドレスを取り込み(ステップ15)、今回のリード要求のアドレスが、直前のリード要求のアドレスと連続しているか否かを判定する(ステップ16)。連続している場合には、ウェイにアドレス変化方向属性を付与するステップ2に進み、連続していない場合は、ウェイにアクセスするステップ3に進む。
図3と
図4にはコネクタC2として表示する。
【0086】
ウェイにアドレス変化方向属性を付与するステップ2では、デクリメントフラグ66_0〜66_3の設定と更新を行う。今回のリード要求のアドレスがキャッシュのいずれか1つのウェイのタグと一致するか否かの判定を行う(ステップ17)。一致しない場合は、ウェイにアクセスするステップ3に進む。
図3と
図4にはコネクタC2として表示する。タグ値が一致したウェイがあれば、連続アクセスのアドレスがインクリメント方向かデクリメント方向かを判定する(ステップ18)。その結果、インクリメント方向であれば対象ウェイのデクリメントフラグに0を設定し(ステップ19)、デクリメント方向であれば対象ウェイのデクリメントフラグに1を設定する(ステップ20)。その後、ウェイにアクセスするステップ3に進む。
図3と
図4にはコネクタC3として表示する。
【0087】
連続アクセスでない場合(ステップ16)、または、連続アクセスであっても、今回のリード要求のアドレスと一致するタグ値を持つウェイがない場合(ステップ17)は、コネクタC2を経由して、ウェイにアクセスするステップ3に進む(
図4)。まずキャッシュヒットか否かを判定する(ステップ22)。キャッシュヒットの場合は、ヒットしたウェイが最新になるようにLRUフラグ70を更新し(ステップ33)、ヒットしたウェイからリードデータを出力する(ステップ34)。キャッシュミスした場合は、LRUフラグ70によって指示される、最も古いデータを格納しているウェイにキャッシュフィルを行う。具体的には、最も古いデータを格納しているウェイのバリッドフラグの全ビット(V0〜V3)を0にクリアし(ステップ23)、不揮発メモリ55からデータを読みこんで対象のウェイのデータ領域に書き込み(ステップ24)、書き込んだウェイのデータ領域に対応するバリッドフラグを1にセットする(ステップ25)。次に、書き込んだウェイのタグにアクセス対象のアドレスを設定し(ステップ26)、データを書き込んだウェイが最新になるようにLRUフラグ70を更新する(ステップ27)。データを書き込んだウェイからリードデータを出力する(ステップ28)。
【0088】
図3に示した、ウェイにアドレス変化方向属性を付与するステップ2を経て、ウェイにアクセスするステップ3にコネクタ3を経由して進んだ場合も、まず、キャッシュヒットか否かの判定を行う(ステップ21)。キャッシュヒットの場合は、ヒットしたウェイが最新になるようにLRUフラグ70を更新し(ステップ33)、ヒットしたウェイからリードデータを出力する(ステップ34)。キャッシュミスの場合であっても、ステップ17において、今回のリード要求のアドレスと同一のタグ値を持つウェイがあることがわかっているので、その対象のウェイのデータ領域に、不揮発メモリ55からのデータを書き込む(ステップ29)。これは、リード要求のアドレスと同一のタグ値を持つウェイはあるが、アクセス対象アドレスのデータは有効でない(バリッドフラグがセットされていない)場合のフローである。不揮発メモリ55からデータを読みこんで対象のウェイのデータ領域に書き込んだ後(ステップ29)、書き込んだウェイのデータ領域に対応するバリッドフラグを1にセットする(ステップ30)。次に、書き込んだウェイのタグにアクセス対象のアドレスを設定し(ステップ26)、データを書き込んだウェイが最新になるようにLRUフラグ70を更新する(ステップ27)。データを書き込んだウェイからリードデータを出力する(ステップ28)。以上示したように、今回のリード要求がキャッシュヒットかキャッシュミスかに関わらず、コネクタC4を経て
図5に示す、先読みに適するウェイがあるか否かについての判定ステップに進む。
【0089】
まず、アクセスしたウェイのデータ領域を起点に、デクリメントフラグが示す方向のデータ領域はフィルされているかを判定する(ステップ35)。アクセスされたウェイのデクリメントフラグが0の場合、アクセスされたデータ領域からアドレスの増加方向のバリッドフラグのうち、0クリアされたものがないかを調べる。アクセスされたウェイのデクリメントフラグが1の場合、アクセスされたデータ領域からアドレスの減少方向のバリッドフラグのうち、0クリアされたものがないかを調べる。バリッドフラグが1に設定されていないデータ領域があれば、不揮発メモリ55からデータを読込み、対象のウェイのそのデータ領域に書き込み(ステップ36)、書き込んだウェイのデータ領域に対応するバリッドフラグ70に1をセットする(ステップ37)。この操作は、アクセスされたデータ領域を起点に、デクリメントフラグが示す方向のウェイの末端までの全てのデータ領域に、有効なデータが書き込まれる(フィルされる)まで、繰り返される。
【0090】
次に、最新のウェイとデクリメントフラグの値が一致し、且つ、デクリメントフラグが示す方向と逆方向に連続したタグ値を持つウェイを探索する(ステップ4)。もしなければ、不揮発メモリ55へのデータリード有無を判定するステップ11に戻る(図ではコネクタC1によって接続されるフローとして示す)。一方、そのような条件を満たすウェイ64があれば、コネクタC5を経由して、
図6に示すデータの先読みステップに進む。
【0091】
まず、最新のウェイと上記条件が一致したウェイのデクリメントフラグの値を調べ(ステップ38)、最新のウェイと上記条件を満たしたウェイのデクリメントフラグの値が共に0の場合、ステップ39に進む。上記条件を満たしたウェイは、先読みデータを書き込むのに適したウェイと判定されたウェイである。条件が一致したウェイのタグ値を、最新のウェイのタグ値+1ライン分の値に更新する(ステップ39)。先読み対象のウェイのデータ領域が、デクリメントフラグが示す方向、即ちアドレスの増加方向に全てフィルされていなければ、不揮発メモリから読み込むデータのアドレスをインクリメントし(ステップ43)、次のデータを不揮発メモリ55から転送し(ステップ40)、対応するデータ領域のバリッドフラグに1をセットする(ステップ41)。先読み対象のウェイのデータ領域が、デクリメントフラグが示す方向に全てフィルされるまで(ステップ42)、ステップ40からステップ43の操作を繰り返す。
【0092】
最新のウェイと上記条件が一致したウェイのデクリメントフラグの値を調べ(ステップ38)、最新のウェイと上記条件を満たしたウェイのデクリメントフラグの値が共に1の場合、ステップ44に進む。上記条件を満たしたウェイもまた、先読みデータを書き込むのに適したウェイと判定されたウェイである。上記条件が一致したウェイのタグ値を、最新のウェイのタグ値−1ライン分の値に更新する(ステップ44)。先読み対象のウェイのデータ領域が、デクリメントフラグが示す方向、即ちアドレスの減少方向に全てフィルされていなければ、不揮発メモリから読み込むデータのアドレスをデクリメントし(ステップ48)、次のデータを不揮発メモリ55から転送し(ステップ45)、対応するデータ領域のバリッドフラグ67に1をセットする(ステップ46)。先読み対象のウェイのデータ領域が、デクリメントフラグが示す方向に全てフィルされるまで(ステップ47)、ステップ45からステップ48の操作を繰り返す。
【0093】
先読み対象のウェイの全てのデータ領域にデータがフィルされたときは(ステップ42、47)、不揮発メモリ55へのデータリード有無を判定するステップ11に戻る(図ではコネクタC1によって接続されるフローとして示す)。
【0094】
以上述べたように、先読みデータを書き込むのに適したウェイがあれば、そのウェイは、アクセス対象のウェイに対して先読みデータを書き込むために使われる。その後、そのままデクリメントフラグ66が示す方向で連続アクセスが続き、先読み対象のウェイがアクセス対象になった時点では、アクセス対象だったウェイが、先読みデータを書き込むのに適したウェイとしての条件を満たすこととなる。2つのウェイの間で、互いにアクセス対象と先読み対象の関係を入れ替えながら、継続的に先読みを続けることができる。これは、ステップ3においてキャッシュヒットであってもキャッシュミスであっても、次の先読みデータを書き込むのに適したウェイの判定ステップに進むように構成されているため、キャッシュヒットが続いても先読みが実行されるためである。
【0095】
本実施形態に示したように、4個のウェイで構成した場合であっても、2個のウェイがあれば、上記のように一連のデータの連続アクセスに当たって、継続的にキャッシュヒットし続けるように動作させることができる。即ち、2個のウェイを組合せて、キャッシュミスによるオーバーヘッドが発生しないように、先読みを継続する1個のウェイとして機能させることができる。このとき、この2個のウェイは、条件を満たさなくなると自律的に2個の独立したウェイに戻る。全体を4ウェイで構成した場合、他の2個のウェイもまた、先読みを継続する1個のウェイとして機能させることもできるし、2個の独立したウェイとして機能させることもできる。先読みを継続する1個のウェイとして機能させるか、2個の独立したウェイとして機能させるかの切り替えは、デクリメントフラグとタグ値の比較のみによって行われる。一般にデータの先読みをすべきか否かの判断は、アクセス履歴に基づいて行われる。本実施形態では、タグ値がアクセス履歴を反映している点に着目し、その方向を示すデクリメントフラグを新たに設けるだけで、外部からの制御を受けずに、キャッシュ制御部が自律的に判断して切り替えることができる。
【0096】
〔動作例〕
本実施形態の動作例について説明する。
図7は、2ウェイのキャッシュが独立に動作する場合の動作例を表す説明図である。
図8は、2ウェイのキャッシュが互いに他の先読み対象となって1ウェイとして、アドレスがインクリメント方向(デクリメントフラグ=0)に先読み動作する場合の動作例を表す説明図である。
図9は、2ウェイのキャッシュが互いに他の先読み対象となって1ウェイとして、アドレスがデクリメント方向(デクリメントフラグ=1)に先読み動作する場合の動作例を表す説明図である。それぞれウェイ数が2の場合を例示する。ウェイ数が3以上であっても、同様に作用する。2個のウェイ64_0、64_1はそれぞれ、8個の2バイトデータD0〜D7を保持し、対応するタグ65_0、65_1、及び、デクリメントフラグ66_0、66_1を備える。データ2個(4バイト)に対して1ビットのバリッドフラグV0〜V3が設けられている。LRUフラグ70は、WAY0またはWAY1のいずれか最も過去にアクセスされたウェイを示す。アドレスは1バイトのデータに対して1アドレスが割り付けられており、8個の2バイトデータD0〜D7は16アドレス分のデータに相当する。タグには下位4ビットよりも上位のアドレス値がタグ値として格納される。D0はタグ値を基準にタグ値の下の下位4ビットに0x0を付加したアドレスに対応するデータが格納される。D2,D3,D4・・・D7は、それぞれ、タグ値に0x2、0x4、0x8、・・・0xEを付加したアドレスに対応するデータが格納される。
図7、
図8、
図9のそれぞれにおいて、アドレス0x002008のデータリードが要求された場合を例に採り、各図の上側にはアクセス前の状態を、各図の下側にはアクセス後の状態を、それぞれ模式的に示す。アドレス0x002008に対応するタグ値は、0x00200であり、アドレス0x002008のデータは、D4の位置に格納されることになる。ここで、「0x」は後続の数値が16進表記であることを示す記号である。
【0097】
図7において、アクセス前は、ウェイ0(64_0)のD2とD3のみが有効で、バリッドフラグV1に1がセットされ他のバリッドフラグV0,V2,V3は0にクリアされている。タグ65_0には0x0011Cが格納されている。ウェイ1(64_1)はD0,D1,D2,D3が有効で、バリッドフラグV0,V1に1がセットされ、他のバリッドフラグV2,V3は0にクリアされている。タグ65_1には0x00324が格納されている。
【0098】
アドレス0x002008のデータリードが要求されると、いずれのウェイにもヒットしない。アドレス0x002008に対応するタグ値は0x00200であり、タグ65_0、65_1に格納されているタグ値とも異なるため、キャッシュミスと判定される(ステップ17、ステップ22)。LRUフラグ70はウェイ0を指しているので、ウェイ0に対してキャッシュフィルを行う(ステップ23〜28)。ウェイ0(64_0)のバリッドフラグV0〜V3を全て0にクリアする(ステップ23)。不揮発メモリのアドレス0x002008からデータを読込み、ウェイ0(64_0)のD4とD5に書き込む(ステップ24)。対応するバリッドフラグV2に1をセットする(ステップ25)。タグ65_0に0x00200をセットする(ステップ26)。LRUフラグをWAY1に変更する(ステップ27)。キャッシュフィルした、ウェイ0(64_0)のD4からデータを出力する(ステップ28)。その後、データの先読みは、D6,D7に進む。データの先読みが行われると、バリッドフラグ67_0のV3に1がセットされる。デクリメントフラグ66_0が示すアドレスの増加方向での先読みが終了したとき、ステップ4の条件判定を行う。デクリメントフラグ66_0と66_1は増加方向で一致している。ウェイ1のタグ65_1は0x00324であって、デクリメントフラグ66_0と66_1とは逆方向の減少方向で、ウェイ0のタグ値0x00200と連続したタグ値0x001FFとは異なる。よって、ウェイ1は先読みの対象としては適切でないと判定されることとなる(ステップ4)。ウェイ1(64_1)のデータは保持され、タグ65_1と一致しデータの有効なD0〜D3に対するアクセスがあった場合に、キャッシュヒットする。ウェイ1(64_1)はウェイ0(64_0)とは独立のウェイとして機能する。
【0099】
ウェイ0(64_0)のD4とD5がキャッシュフィルされ、D6とD7に先読みデータが書き込まれた時点では、ウェイ0(64_0)のD0〜D3のバリッドフラグV0とV1は0にクリアされたままである。これ以降、空きサイクルを使って、ステップ12、13、14によって、ウェイ0(64_0)のD0〜D3のデータが読み込まれる。D0〜D3のデータはキャッシュフィルされたアドレス0x002008のデータから見て、デクリメントフラグ66_0が示すアドレスの増加方向とは逆方向のデータである。先読み方向とは逆方向のデータを、空きサイクルを利用してキャッシュに読み込んでおくことにより、連続アクセスの状態が崩れ、連続方向とは逆のアドレス方向へのアクセスが実行されたときにも、同一ウェイ内のデータであればキャッシュヒットさせることができ、キャッシュミスの確率を低減することができる。
【0100】
図8において、アクセス前は、ウェイ0(64_0)のD2とD3のみが有効で、バリッドフラグV1に1がセットされ、他のバリッドフラグV0,V2,V3は0にクリアされている。タグ65_0には0x00200が格納されている。ウェイ1(64_1)はD0,D1,D2,D3が有効で、バリッドフラグV0,V1に1がセットされ他のバリッドフラグV2,V3は0にクリアされている。タグ65_1には0x001FFが格納されている。
【0101】
アドレス0x002008のデータリードが要求されると、ウェイ0にヒットする。アドレス0x002008に対応するタグ値は0x00200であり、タグ65_0に格納されているタグ値と一致するため、デクリメントフラグの更新が実行される(ステップ17〜20)。連続アクセスのアドレスがインクリメント方向であればデクリメントフラグ66_0の値を0とし(ステップ19)、デクリメント方向であれば1とする(ステップ20)。
図8では、インクリメント方向とする。
【0102】
次にキャッシュヒット/ミスを判定する(ステップ21)。タグ65_0は一致するがアドレス0x002008に対応するデータが格納されているべき、D4のバリッドフラグ67_0のV2は0であるので、ウェイ0(64_0)にはアドレス0x002008に対応するデータは格納されていない。よって、キャッシュミスと判定される。不揮発メモリ55からアドレス0x002008から4バイト分のデータを読み込んで、D4とD5に書き込み(ステップ29)、対応するバリッドフラグ67_0のV2に1をセットする(ステップ30)。アクセスしたウェイ0が最新になるように、LRUフラグ70をWAY1に更新する(ステップ31)。キャッシュフィルした、ウェイ0(64_0)のD4からデータを出力する(ステップ32)。
【0103】
その後、データの先読みは、D6,D7に進む。データの先読みが行われると、バリッドフラグ67_0のV3に1がセットされる。デクリメントフラグ66_0が示すアドレスの増加方向での先読みが終了したとき、ステップ4の条件判定を行う。ウェイ1のタグ65_1は0x001FFであって、デクリメントフラグ66_0と66_1が示すアドレスの増加方向とは逆方向で、ウェイ0のタグ値0x00200と連続したタグ値0x001FFと一致するので、ウェイ1は先読みの対象として適切であると判定される(ステップ4)。最新のウェイであるウェイ0と先読み対象としての条件を満たしたウェイ1のデクリメントフラグ66_0と66_1は共に0で一致している(ステップ38)。先読み対象としての条件を満たしたウェイ1のタグ65_1の値を、最新のウェイ0のタグ65_0のタグ値0x00200+1である、0x00201に更新する(ステップ39)。その後、ウェイ1のデータD0〜D7が全てフィルされるまで(ステップ42)、アドレスをインクリメントしながら(ステップ43)、不揮発メモリ55からデータを順次読み込み、ウェイ1のデータD0〜D7に、アドレス0x002010〜0x00201Fのデータを書き込み(ステップ40)、対応するバリッドフラグ67_1のV0〜V3を順次1に更新する(ステップ41)。これにより、ウェイ1はウェイ0の先読み対象として機能する。以降、連続アクセスが続く限り、ウェイ0とウェイ1が交互にアクセス対象と先読み対象として機能し、キャッシュミスは発生しない。
【0104】
ウェイ1(64_1)のD0〜D7への先読みを完了した後、CPU53からのアクセスが未だウェイ0に対してであって、アクセスサイクルに空きがある場合には、
図7を用いて説明したのと同様に、ステップ12、13、14によって、ウェイ0(64_0)に先読み方向とは逆方向のデータを読み込んでおくこともできる。これにより、2ウェイに跨って先読み動作を行う場合であっても、連続アクセスの状態が崩れ、連続方向とは逆のアドレス方向へのアクセスが実行されたときに、キャッシュミスの確率を減らすように、同一ウェイ後方(連続方向とは逆のアドレス方向)への先読みを実施することができる。
【0105】
図9を使って、連続アクセスの方向がアドレスの減少方向である場合の動作例を示す。アクセス前は、ウェイ0(64_0)のD2とD3のみが有効で、バリッドフラグV1に1がセットされ他のバリッドフラグV0,V2,V3は0にクリアされている。タグ65_0には0x00200が格納されている。ウェイ1(64_1)はD0,D1,D2,D3が有効で、バリッドフラグV0,V1に1がセットされ他のバリッドフラグV2,V3は0にクリアされている。タグ65_1には0x00201が格納されている。デクリメントフラグ66_0と66_1には共に1がセットされている。
【0106】
アドレス0x002006のデータリードが要求された例について説明する。アドレス0x002006のデータリードが要求されると、ウェイ0にヒットする。アドレス0x002006に対応するタグ値は0x00200であり、タグ65_0に格納されているタグ値と一致するため、デクリメントフラグの更新が実行される(ステップ17〜20)。連続アクセスのアドレスがデクリメント方向であるので、デクリメントフラグ66_0の値を1とする(ステップ20)。タグ65_0が一致し、アドレス0x002006に対応するデータが格納されているべき、D2のバリッドフラグ67_0のV1は1であるので、ウェイ0(64_0)にはアドレス0x002006に対応するデータが格納されている。よって、キャッシュヒットと判定される(ステップ21)。LRUフラグ70を更新し(ステップ33)、ヒットしたウェイ0(64_0)のD2からデータを出力する(ステップ34)。
【0107】
その後、データの先読みは、D0,D1に進む。データの先読みが行われると、バリッドフラグ67_0のV0に1がセットされる。デクリメントフラグ66_0が示すアドレスの減少方向での先読みが終了したとき、ステップ4の条件判定を行う。ウェイ1のタグ65_1は0x00201であって、デクリメントフラグ66_0と66_1が示すアドレスの減少方向とは逆方向で、ウェイ0のタグ値0x00200と連続したタグ値0x00201と一致するので、ウェイ1は先読みの対象として適切であると判定される(ステップ4)。最新のウェイであるウェイ0と先読み対象としての条件を満たしたウェイ1のデクリメントフラグ66_0と66_1は共に1で一致している(ステップ38)。先読み対象としての条件を満たしたウェイ1のタグ65_1の値を、最新のウェイ0のタグ65_0のタグ値0x00200−1である、0x001FFに更新する(ステップ44)。その後、ウェイ1のデータD0〜D7が全てフィルされるまで(ステップ47)、アドレスをインクリメントしながら(ステップ48)、不揮発メモリ55からデータを順次読み込み、ウェイ1のデータD0〜D7に、アドレス0x001FFF〜0x001FF0のデータを書き込み(ステップ45)、対応するバリッドフラグ67_1のV0〜V3を順次1に更新する(ステップ46)。これにより、
図8を使って説明したアドレスが増加方向の連続アクセスの場合と同様に、ウェイ1はウェイ0の先読み対象として機能する。以降、連続アクセスが続く限り、ウェイ0とウェイ1が交互にアクセス対象と先読み対象として機能し、キャッシュミスは発生しない。
【0108】
ウェイ1(64_1)のD0〜D7への先読みを完了した後、先読みしたウェイ1へのCPU53からのアクセスを始める前であって、アクセスサイクルに空きがある場合には、
図7を用いて説明したのと同様に、ステップ12、13、14によって、ウェイ0(64_0)に先読み方向とは逆方向のデータD4〜D7を読み込んでおくこともできる。これにより、アドレスが増加方向の連続アクセスの場合と同様に、2ウェイに跨って先読み動作を行う場合であっても、連続アクセスの状態が崩れ、連続方向とは逆のアドレス方向へのアクセスが実行されたときに、キャッシュミスの確率を減らすように、同一ウェイ後方(連続方向とは逆のアドレス方向)への先読みを実施することができる。
【0109】
〔動作タイミング〕
本実施形態の動作例についてタイミングチャートを使ってさらに詳しく説明する。
【0110】
図10〜13は、比較例に係る半導体装置の動作例を表すタイミングチャートである。
図14〜16は、2ウェイのキャッシュが互いに他の先読み対象となって1ウェイとして先読み動作する場合の動作例を表すタイミングチャートである。
図17〜18は、2ウェイのキャッシュがそれぞれ独立して動作する場合の動作例を表すタイミングチャートである。各図において、横軸は時間軸であり、クロックサイクル単位でT1から順に表記する。縦軸方向には、上から順に、クロック、CPUのアクセス要求、CPUが発行するアドレス、CPUへのリードデータが示される。次にキャッシュメモリ60の動作が示される。キャッシュ制御回路63のアクセス要求、キャッシュメモリ60から不揮発メモリ55に対して発行されるアドレスと、不揮発メモリ55からキャッシュメモリ60に対して出力されるリードデータが示される。さらに次にはウェイ0とウェイ1の内部状態が示される。ウェイ0とウェイ1のそれぞれについて、上から順にデクリメントフラグ66_0と66_1、タグ[23:4](65_0と65_1)の値、データD0〜D7の値が示される。最下段には、LRUフラグ70の値が示される。
【0111】
図10において、CPU53はサイクルT1にアドレス0x00200Cからの2バイトのデータリードを要求している。このとき、ウェイ0のタグ65_0の値は0x01219、ウェイ1のタグ65_1の値は0x001FFであり、LRUフラグ70はウェイ0を指している。データリードを要求されているアドレス0x00200Cに対応するタグ値0x00200に一致するタグはないので、キャッシュミスが発生する。キャッシュミスの判断に2サイクル要するとし、サイクルT3においてキャッシュメモリ60が不揮発メモリ55に対してアドレス0x00200Cを出力する。キャッシュフィルの対象は、LRUフラグ70が示すウェイ0である。サイクルT3でLRUフラグ70はウェイ1に更新され、サイクルT4でウェイ0のタグ65_0が、0x00200に更新される。不揮発メモリ55内ではデータの読み出しが実行されるが、3サイクルを要するとして、サイクルT6でアドレス0x00200Cの値@00200Cが読み出され、サイクルT7でウェイ0(64_0)のD6/D7に書き込まれ、合わせてCPU53にも出力される。キャッシュフィルは4バイト単位で行われるので、アドレス0x00200Cから0x00200Fまでの4バイトのデータがウェイ0(64_0)のD6とD7に書き込まれる。CPU53からのデータリード要求は2バイトであるから、D6に格納される2バイトが、CPU53に返送される。
【0112】
図11において、CPU53はサイクルT8にアドレス0x00200Eからの2バイトのデータリードを要求している。アドレス0x00200Eのデータは、先のキャッシュフィルにより、ウェイ0(64_0)のD7に書き込まれている。サイクルT1でのデータリード要求が、アドレス0x00200Cからの2バイトのデータリードを要求であったので、サイクルT1でのデータリード要求は、アドレス増加方向での連続リードの要求である。ウェイ0のデクリメントフラグ66_0は、アドレス増加方向を示す0のまま維持される。アドレス0x00200Eのデータは、ウェイ0(64_0)のD7に格納されているので、キャッシュヒットであり、サイクルT9に@00200EとしてCPUのリードデータとして出力される。サイクルT12に、CPU53がさらに次の連続アドレスである0x002010からの2バイトのデータリードを要求している。アドレス0x002010のデータはキャッシュされていないのでキャッシュミスを発生する。キャッシュ制御回路は、それまでの間(サイクルT9〜T13)は、アクセス要求を発行しない。
【0113】
図12において、サイクルT14においてキャッシュメモリ60が不揮発メモリ55に対してアドレス0x002010を出力する。キャッシュフィルの対象は、LRUフラグ70が示すウェイ1である。サイクルT14でLRUフラグ70はウェイ0に更新され、サイクルT15でウェイ1のタグ65_1が、0x00201に更新される。不揮発メモリ55内ではデータの読み出しが3サイクルを要して実行され、サイクルT17でアドレス0x002010の値@002010が読み出され、サイクルT18でウェイ1(64_1)のD0/D1に書き込まれ、合わせてCPU53にも出力される。
【0114】
以上のように、連続アクセスに対する先読み機能がない場合には、キャッシュラインの境界ごとに、キャッシュミスが発生し、キャッシュミス処理期間がオーバーヘッドとなる。
【0115】
図14〜16は、2ウェイのキャッシュが互いに他の先読み対象となって1ウェイとして先読み動作する場合の動作例を表すタイミングチャートである。
【0116】
図14において、CPU53はサイクルT1にアドレス0x00200Cからの2バイトのデータリードを要求している。このとき、ウェイ0のタグ65_0の値は0x01219、ウェイ1のタグ65_1の値は0x001FFであり、LRUフラグ70はウェイ0を指している。データリードを要求されているアドレス0x00200cに対応するタグ値0x00200に一致するタグはないので、キャッシュミスが発生する。キャッシュミスの判断に2サイクル要するとし、サイクルT3においてキャッシュメモリ60が不揮発メモリ55に対してアドレス0x00200Cを出力する。キャッシュフィルの対象は、LRUフラグ70が示すウェイ0である。サイクルT3でLRUフラグ70はウェイ1に更新され、サイクルT4でウェイ0のタグ65_0が、0x00200に更新される。不揮発メモリ55内ではデータの読み出しが実行されるが、3サイクルを要するとして、サイクルT6でアドレス0x00200Cの値@00200Cが読み出され、
図15に示すサイクルT7でウェイ0(64_0)のD6/D7に書き込まれ、合わせてCPU53にも出力される。キャッシュフィルは4バイト単位で行われるので、アドレス0x00200Cから0x00200Fまでの4バイトのデータがウェイ0(64_0)のD6とD7に書き込まれる。CPU53からのデータリード要求は2バイトであるから、D6に格納される2バイトが、CPU53に返送される。
【0117】
図15において、CPU53はサイクルT8にアドレス0x00200Eからの2バイトのデータリードを要求している。サイクルT1でのデータリード要求が、アドレス0x00200Cからの2バイトのデータリードを要求であったので、サイクルT1でのデータリード要求は、アドレス増加方向での連続リードの要求である。ウェイ0のデクリメントフラグ66_0は、アドレス増加方向を示す0のまま維持される。アドレス0x00200Eのデータは、先のキャッシュフィルにより、ウェイ0(64_0)のD7に書き込まれている。アドレス0x00200Eのデータは、ウェイ0(64_0)のD7に格納されているので、キャッシュヒットであり、サイクルT9に@00200EとしてCPUのリードデータとして出力される。
【0118】
これと並行して、
図3〜
図6のフローチャートに示したデータ先読み動作が開始される。サイクルT1のアドレス0x00200Cからの2バイトのデータリード要求によって発生したキャッシュフィルの後、ウェイ0のD6/D7を起点にデクリメントフラグ66_0が示す方向のデータ領域は、フィルされているので(ステップ35)、先読みに適するウェイがあるか否かについての判定ステップに進む。最新のウェイであるウェイ0とデクリメントフラグの値が一致し、且つ、デクリメントフラグが示す方向と逆方向に連続したタグ値を持つウェイを探索する(ステップ4)。デクリメントフラグ66_0と66_1はともにアドレス増加方向を示して一致しており、ウェイ1のタグ値は0x001FFでデクリメントフラグ66_0と66_1が示す方向とは逆のアドレス減少方向で、ウェイ0のタグ値0x00200と連続しているので、ウェイ1は先読みの対象として適すると判定される。サイクルT8でタグ65_1に0x00200に1を加えた0x00201に更新される(ステップ39)。サイクルT9以降、不揮発メモリ55からアドレス0x002010以降のデータ@002010、@002014、@002018、@00201Cが順次読み出され、それぞれウェイ1のD0/D1,D2/D3,D4/D5,D6/D7に書き込まれる。
【0119】
サイクルT12に、CPU53がさらに次の連続アドレスである0x002010からの2バイトのデータリードを要求している。この時点で、アドレス0x002010のデータはウェイ1に先読みされているので、キャッシュヒットし、
図16に示すサイクルT13で読み出される。比較例では、アドレス0x002010のデータはキャッシュされていなかったのでキャッシュミスが発生し、アドレス0x002010のデータが読み出されたのは、サイクルT18である。本実施形態の先読みを行うことにより、キャッシュミスの発生が抑えられ、実行サイクルが5サイクル短縮される。2バイトのデータリードは、キャッシュヒットしたとき2サイクルで実行され、キャッシュミスしたとき、7サイクルを要する。1ウェイ=1ラインを16バイトで構成し、2バイトずつの連続アクセスを行うとき、ウェイ内のみの先読みを行う比較例では、8回の連続アクセスに対して7回のキャッシュヒットと1回のキャッシュミスが発生するので、21サイクルを要することとなる。一方、本実施形態に示すように、2個のウェイを交互にアクセス対象と先読み対象として機能させることにより、キャッシュミスは発生せず16サイクルで済む。
【0120】
また、
図14〜16に示すように、データ先読みの期間中も命令フェッチとデータリードサイクルは、実行可能である。先読みを実行するためのサイクルは隠蔽することができる。
【0121】
また、ウェイ1へのデータの先読み終了後、
図16に示すサイクル15、16、17、18において、既にアクセスされたウェイ0のデータD6/D7から、デクリメントフラグ66_0が示すのとは逆方向のD0/D1,D2/D3,D4/D5に、対応するデータが読み込まれる。これは、
図3〜
図6に示したフローチャートのステップ12〜ステップ14が実行された結果である。連続アクセスが乱れた場合に、キャッシュミスの確率を減らすことができる。一方、ステップ12〜ステップ14を実行しないように設計することもできる。その場合は、連続アクセスが継続された場合に無駄になる、デクリメントフラグ66_0が示すのとは逆方向の読み込みを中止することができ、その分の消費電力を低減することができる。
【0122】
図17〜18は、2ウェイのキャッシュがそれぞれ独立して動作する場合の動作例を表すタイミングチャートである。
【0123】
図17において、CPU53はサイクルT1にアドレス0x002008からの2バイトのデータリードを要求している。このとき、ウェイ0のタグ65_0の値は0x01219、ウェイ1のタグ65_1の値は0x0121Aであり、LRUフラグ70はウェイ0を指している。データリードを要求されているアドレス0x002008に対応するタグ値0x00200に一致するタグはないので、キャッシュミスが発生する。キャッシュミスの判断に2サイクル要するとし、サイクルT3においてキャッシュメモリ60が不揮発メモリ55に対してアドレス0x002008を出力する。キャッシュフィルの対象は、LRUフラグ70が示すウェイ0である。サイクルT3でLRUフラグ70はウェイ1に更新され、サイクルT4でウェイ0のタグ65_0が、0x00200に更新される。不揮発メモリ55内ではデータの読み出しが実行されるが、3サイクルを要するとして、サイクルT6でアドレス0x002008の値@002008が読み出され、
図18に示すサイクルT7でウェイ0(64_0)のD4/D5に書き込まれ、合わせてCPU53にも出力される。
【0124】
図18において、CPU53はサイクルT8にアドレス0x00200Aからの2バイトのデータリードを要求している。サイクルT1でのデータリード要求が、アドレス0x002008からの2バイトのデータリードを要求であったので、サイクルT1でのデータリード要求は、アドレス増加方向での連続リードの要求である。ウェイ0のデクリメントフラグ66_0は、アドレス増加方向を示す0のまま維持される。アドレス0x00200Aのデータは、先のキャッシュフィルにより、ウェイ0(64_0)のD5に書き込まれているので、キャッシュヒットであり、サイクルT9に@00200AとしてCPUのリードデータとして出力される。
【0125】
一方、
図3〜
図6のフローチャートに示したデータ先読み動作が開始される。サイクルT1のアドレス0x002008からの2バイトのデータリード要求によって発生したキャッシュフィルの後、ウェイ0のD4/D5を起点にデクリメントフラグ66_0が示す方向のデータ領域D6/D7は、まだフィルされていない(ステップ35)。そこで、サイクルT6で不揮発メモリ55に対してアドレス0x00200Cを発行し、
図18に示すサイクルT7で読み込まれるデータ@0x00200cをサイクルT8でデータ領域D6/D7に書き込む(ステップ36)。その後、ステップ4に進むが、ウェイ0とウェイ1のタグ値は連続しないので、ステップ38〜48に示すデータの先読みは実行されない。代わりに、ステップ12〜14により、
図18に示すサイクルT8,T9,T10に、ウェイ0のD0/D1,D2/D3に、それぞれアドレス0x002000と0x002004のデータが読み込まれる。一方、ウェイ1のデータは維持される。2ウェイのキャッシュメモリとして機能する。
【0126】
これにより、本実施形態のキャッシュ制御回路は、2ウェイのキャッシュとして機能するか、2個のウェイをまとめて交互に先読み対象として機能させるかを、タグの値とデクリメントフラグを参照するだけで、自律的に切替えることが可能となっている。
【0127】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【0128】
例えば、データキャッシュについての実施形態に限らず、命令キャッシュやユニファイドキャッシュにも適用することができる。また、ウェイ数は2に限定されず任意に決めることができ、キャッシュヒット/ミスの判定に費やすサイクル数は、適宜最適に設計することができ、また、不揮発メモリのデータリードのためのサイクル数は、任意の値であってよい。