(57)【特許請求の範囲】
【請求項１】
命令ストリームのフェッチアドレスを提供するプロセッサコアであって、前記命令ストリームは１つ以上の命令を含み、前記フェッチアドレスは、タグ及びインデックスを含むプロセッサコアと；
前記プロセッサコアから前記フェッチアドレスを受信する命令ループキャッシュと
を具えたマイクロプロセッサであって、
前記命令ループキャッシュは、
前記プロセッサコアに結合され、第１所定数のキャッシュエントリを記憶するキャッシュアレイであって、前記キャッシュエントリの各々がタグ識別番号（ＩＤ）を含むキャッシュアレイと、
前記プロセッサコア及び前記キャッシュアレイに結合されたタグ記憶部とを具え、
前記キャッシュアレイは、前記フェッチアドレスの前記インデックスが示す前記キャッシュエントリの前記タグＩＤを出力し、
前記タグ記憶部は、第２所定数のタグ値を記憶して、前記キャッシュアレイが出力する前記タグＩＤが示す前記タグ値を出力するように構成され、
前記命令ループキャッシュは、前記フェッチアドレスの前記タグと、前記タグ記憶部が出力する前記タグ値とのビット単位の比較に基づいて、キャッシュヒットが発生するかキャッシュミスが発生するかを判定する
ことを特徴とするマイクロプロセッサ。
【請求項２】
前記プロセッサコアは、後方分岐命令を取得する毎に、当該後方分岐命令に関係する少なくとも１つの前記タグ値を、前記命令ループキャッシュに送信することを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項３】
前記後方分岐命令に関係する前記少なくとも１つのタグ値が、前記後方分岐命令のターゲットアドレスのタグから始まる連続したタグ値であることを特徴とする請求項２に記載のマイクロプロセッサ。
【請求項４】
前記プロセッサコアは、ヒント命令をフェッチして認識する毎に、当該ヒント命令に関係する前記タグ値を前記命令ループキャッシュに送信することを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項５】
前記ヒント命令は、分岐条件が常に偽である条件分岐命令であり、前記ヒント命令に関係する前記タグ値は、前記条件分岐命令のターゲットアドレスの前記タグであることを特徴とする請求項４に記載のマイクロプロセッサ。
【請求項６】
前記ターゲットアドレスは、前記プロセッサコアが前記ヒント命令を実行した後に、前記プロセッサコアが実行すべき命令ループを指示することを特徴とする請求項５に記載のマイクロプロセッサ。
【請求項７】
前記ターゲットアドレスは、前記プロセッサコアが前記ヒント命令を実行した後に、前記プロセッサコアが実行すべき命令ループによって呼び出される関数を指示することを特徴とする請求項５に記載のマイクロプロセッサ。
【請求項８】
前記ヒント命令がノーオペレーション命令であり、前記ヒント命令は、前記プロセッサコアが実行する命令ループの直前に配置され、前記ヒント命令に関係する前記タグ値は、前記命令ループの最初の命令のフェッチアドレスの前記タグ値であることを特徴とする請求項４に記載のマイクロプロセッサ。
【請求項９】
前記キャッシュアレイの各々が、さらに有効ビットを具え、前記命令ループキャッシュが、さらに、
前記プロセッサコア、前記タグ記憶部、及び前記キャッシュアレイに結合された比較器を具え、この比較器は、前記フェッチアドレスの前記タグが、前記タグ記憶部が出力する前記タグ値に等しく、かつ前記フェッチアドレスの前記インデックスが示す前記キャッシュアレイの前記有効ビットがセットされている際に、ヒット信号をアサートしてキャッシュヒットを示し、さもなければ、前記ヒット信号をデアサートしてキャッシュミスを示すことを特徴とする請求項１〜８のいずれかに記載のマイクロプロセッサ。
【請求項１０】
前記キャッシュアレイが出力する前記タグＩＤが所定値に等しい際に、前記タグ記憶部が無効タグ値を出力し、この無効タグ値は、あらゆる前記フェッチアドレスの前記タグ値と異なる一意的な値であり、前記命令ループキャッシュが、さらに、
前記プロセッサコア及び前記タグ記憶部に結合された比較器であって、前記フェッチアドレスの前記タグが、前記タグ記憶部が出力する前記タグ値に等しい際に、ヒット信号をアサートしてキャッシュヒットを示し、さもなければ、前記ヒット信号をデアサートしてキャッシュミスを示すことを特徴とする請求項１〜８のいずれかに記載のマイクロプロセッサ。
【請求項１１】
前記キャッシュエントリの各々が、さらに命令を含み、前記命令ループキャッシュが、さらに、
前記プロセッサコア、前記キャッシュアレイ、前記タグ記憶部、及びメモリに結合されたコントローラを具え、このコントローラは、キャッシュヒットが発生した際に、前記フェッチアドレスの前記インデックスが示す前記キャッシュエントリの前記命令を、前記プロセッサコアに供給し、キャッシュミスが発生した際に、前記メモリ内の前記フェッチアドレスに位置する命令を、前記プロセッサコアに供給し、キャッシュミスが発生し、かつ、前記フェッチアドレスの前記タグが、前記タグ記憶部に記憶された前記タグ値の１つに等しく、かつ、前記フェッチアドレスの前記インデックスが示す前記キャッシュエントリが無効である際に、前記メモリ内の前記フェッチアドレスに位置する命令を、前記フェッチアドレスの前記インデックスが示す前記キャッシュエントリに入れることを特徴とする請求項１〜１０のいずれかに記載のマイクロプロセッサ。
【請求項１２】
前記コントローラは、前記プロセッサコアから受信した前記タグ値が、前記タグ記憶部に前から記憶されているすべての前記タグ値と異なる際に、前記タグ記憶部を、前記プロセッサコアから受信した前記タグ値で更新することを特徴とする請求項１１に記載のマイクロプロセッサ。
【請求項１３】
前記コントローラは、前記プロセッサコアから受信した前記タグ値を前記タグ記憶部内に追加することによって、あるいは、前記タグ記憶部に前から記憶されている前記タグ値を、前記プロセッサコアから受信したタグ値に置き換えて、前記キャッシュエントリの各々の前記タグＩＤまたは有効ビットをクリアすることによって、前記タグ記憶部を更新することを特徴とする請求項１２に記載のマイクロプロセッサ。
【請求項１４】
前記コントローラが、通常状態及び内側状態を含む有限状態マシンに関連し、前記コントローラが前記通常状態であり、前記プロセッサコアから受信した前記タグ値が、前記タグ記憶部に前から記憶されているすべての前記タグ値と異なる際に、前記コントローラは、前記タグ記憶部を、前記プロセッサコアから受信した前記タグ値で更新し、前記コントローラが前記内側状態であり、前記プロセッサコアから受信した前記タグ値が、前記タグ記憶部に前から記憶されているすべての前記タグ値と異なる際に、前記コントローラは前記通常状態に入り、前記コントローラが前記通常状態であり、内側信号を受信すると、前記コントローラは前記内側状態に入ることを特徴とする請求項１２または１３に記載のマイクロプロセッサ。
【請求項１５】
命令ループキャッシュを使用する方法であって、前記命令ループキャッシュが、通常状態及び内側状態を含む有限状態マシンに関連する方法において、
最初に通常状態に入るステップと、
現在状態が前記通常状態であり、プロセッサコアから前記命令ループキャッシュに送信されたタグ値が、前記命令ループキャッシュに前から記憶されているすべてのタグ値と異なる際に、前記命令ループキャッシュを、前記送信されたタグ値で更新するステップと、
現在状態が前記内側状態であり、前記プロセッサコアから前記命令ループキャッシュに送信されたタグ値が、前記命令ループキャッシュに前から記憶されているすべてのタグ値と異なる際に、前記通常状態に入るステップと、
現在状態が前記通常状態である際に、内側信号に応答して、前記内側状態に入るステップと、
前記プロセッサコアから前記命令ループキャッシュに送信されたフェッチアドレスのタグと、前記命令ループキャッシュに記憶されているタグ値の１つとの比較に基づいて、前記命令ループキャッシュにおいてキャッシュヒットが発生するかキャッシュミスが発生するかを判定するステップと
を含むことを特徴とする方法。
【請求項１６】
前記命令ループキャッシュを更新するステップが、
前記プロセッサコアから送信されたタグ値を、前記命令ループキャッシュ内に追加するか、あるいは、前記命令ループキャッシュ内に前から記憶されているタグ値を、前記プロセッサコアから送信された前記タグ値に置き換えることを含むことを特徴とする請求項１５に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令キャッシング（キャッシュ記憶）に関するものである。特に、本発明は、マイクロプロセッサによって実行される命令ループをキャッシングする方法に関するものである。
【背景技術】
【０００２】
命令キャッシュは、マイクロプロセッサに必須の構成要素である。マイクロプロセッサが命令をフェッチする必要がある際に、そのプロセッサコアが、その命令のフェッチアドレスを命令キャッシュに送信する。フェッチアドレスは、１つ以上の命令を含む命令ストリームに対応する。命令キャッシュは、命令が当該命令キャッシュ内に既に記憶されている際に、その命令を、当該命令キャッシュ自体からプロセッサコアに直接供給する。さもなければ、命令キャッシュは、その命令が存在するメモリから、その命令をフェッチして記憶すると共に、その命令をプロセッサコアに供給する。外部メモリから命令をフェッチすることは、命令キャッシュから命令をフェッチするよりも、ずっと長い時間を要し、かつ、すっと大きい電力を消費し、命令キャッシュは、電力消費を低減すると共に、マイクロプロセッサの処理速度を向上させる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
組込みシステム内のアプリケーションは、通常、最も内側のループ内で実行時間の大きな割合を費やす。従って、組込みシステムの電力消費及び命令フェッチは、最も内側のループに集中する。
【課題を解決するための手段】
【０００４】
従って、本発明は、電力消費を低減すると共に命令フェッチの効率を向上させるための、命令ループキャッシュを含むマイクロプロセッサ、及び命令ループキャッシュを使用する方法に指向したものである。
【０００５】
本発明の好適例によれば、マイクロプロセッサが提供される。このマイクロプロセッサは、プロセッサコア及び命令ループキャッシュを含む。プロセッサコアは、命令ストリームのフェッチアドレスを提供する。命令ストリームは１つ上の命令を含む。フェッチアドレスは、タグ及びインデックスを含む。命令ループキャッシュは、フェッチアドレスをプロセッサコアから受け取る。命令ループキャッシュは、キャッシュアレイ及びタグ記憶部を含む。キャッシュアレイは、プロセッサコアに結合されている。キャッシュアレイは、第１所定数のキャッシュエントリを記憶する。各キャッシュエントリは、タグ識別番号（ＩＤ）を含む。キャッシュアレイは、フェッチアドレスのインデックスが示すキャッシュエントリのタグＩＤを出力する。タグ記憶部は、プロセッサコア及びキャッシュアレイに結合されている。タグ記憶部は、第２所定数のタグ値を記憶して、キャッシュアレイが出力するタグＩＤが示すタグ値を出力するように構成されている。命令ループキャッシュは、フェッチアドレスのタグと、タグ記憶部が出力するタグ値との比較に基づいて、キャッシュヒットが発生するかキャッシュミスが発生するかを判定する。
【０００６】
本発明の他の好適例によれば、上述した命令ループキャッシュを使用する方法が提供される。この方法は次のステップを含む：命令ループキャッシュが、通常状態及び内側状態を含む有限状態マシンに関連し、最初に通常状態に入るステップ；現在状態が通常状態であり、タグ値が、命令ループキャッシュに前から記憶されているすべてのタグ値と異なる際に、命令ループキャッシュを、プロセッサコアから当該命令ループキャッシュに送信されたタグ値で更新するステップ；現在状態が内側状態であり、プロセッサコアから命令ループキャッシュに送信されたタグ値が、命令ループキャッシュに前から記憶されているすべてのタグ値と異なる際に、通常状態に入るステップ；現在状態が通常状態であり、内側信号を受信した際に、内側状態に入るステップ；及び、プロセッサコアから命令ループキャッシュに送信されたフェッチアドレスと、命令ループキャッシュに記憶されているタグ値の１つとの比較に基づいて、命令ループキャッシュにおいてキャッシュヒットが発生するかキャッシュミスが発生するかを判定するステップ。
【０００７】
本発明の他の好適例によれば、上述した命令ループキャッシュを使用する方法が提供される。この方法は、ヒント命令がフェッチされて認識される毎に、ヒント命令に関係するタグ値を命令ループキャッシュに送信するステップを含む。ヒント命令は、このタグ値を介して、当該ヒント命令が実行された後に実行される命令ループに関連する。命令ループキャッシュは、命令のフェッチアドレスのタグと、命令ループキャッシュに記憶されたタグ値の１つとの比較に基づいて、キャッシュヒットが発生するかキャッシュミスが発生するかを判定する。
【発明の効果】
【０００８】
本発明によって提供される命令ループキャッシュは、命令ループの命令を効果的にキャッシュ記憶することができる。この命令ループキャッシュは、微小サイズに構成して、電力及びチップ空間を節減することができる。この命令ループキャッシュは、命令ループの２回目の反復から命令を供給し始めることができ、このことは、ループ実行に対する非常に高速な応答となる。
【０００９】
添付する図面は、本発明のさらなる理解をもたらすために含め、本明細書に含まれ、本明細書の一部を構成する。これらの図面は、本発明の実施形態を図示し、その記述と共に、本発明の原理を説明する役割を果たす。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施形態によるマイクロプロセッサを示す概略図である。
【図２】本発明の実施形態によるメモリ内のキャッシュラインを示す概略図である。
【図３】本発明の実施形態によるマイクロプロセッサの命令ループキャッシュを示す概略図である。
【図４】本発明の実施形態によるマイクロプロセッサの命令ループを示す概略図である。
【図５】本発明の実施形態による、命令ループキャッシュを使用する方法を示すフローチャートである。
【図６】本発明の実施形態による命令ループを示す概略図である。
【図７】本発明の実施形態による他の命令ループを示す概略図である。
【図８】本発明の実施形態による、命令ループキャッシュを使用する方法を示すフローチャートである。
【図９】本発明の実施形態による、命令ループキャッシュに関連する有限状態マシンを示す概略図である。
【図１０】本発明の実施形態による命令ループを示す概略図である。
【図１１】本発明の実施形態によるマイクロプロセッサの命令ループキャッシュを示す概略図である。
【図１２】本発明の実施形態による命令ループを示す概略図である。
【発明を実施するための形態】
【００１１】
以下に、本発明の実施形態を詳しく参照し、それらの例を、添付する図面に示す。可能であれば常に、図面及び説明中では、同じ参照番号を用いて同一または同様の部分を参照する。
【００１２】
図１に、本発明の実施形態によるマイクロプロセッサ１００を示す。マイクロプロセッサ１００は、プロセッサコア１２０及び命令ループキャッシュ１４０を含む。命令ループキャッシュ１４０は、プロセッサ１２０及び外部メモリ１６０に結合されている。プロセッサコア１２０は、命令ストリームの１つ以上のフェッチアドレスを、命令ループキャッシュ１４０に与えることができる。命令ストリームは、１つ以上の命令を含むことができる。各フェッチアドレスは、タグ及びインデックスを含む。ここで、命令のフェッチアドレスとは、その命令がメモリ１６０に記憶されているアドレスを意味する。フェッチアドレスは、命令のオペランドに含まれるアドレスではない。
【００１３】
命令ループキャッシュ１４０は、プロセッサコア１２０が提供するフェッチアドレスを受信し、次に、このフェッチアドレスに応答して、キャッシュヒットが発生するかキャッシュミスが発生するかを判定する。キャッシュヒットが発生すると、命令ループキャッシュ１４０は、フェッチアドレスに対応する命令を、命令ループキャッシュ１４０自体からプロセッサコア１２０に直接提供する。キャッシュミスが発生すると、命令ループキャッシュ１４０は、フェッチアドレスに対応する命令をメモリ１６０からフェッチして、この命令を記憶すると共にプロセッサコア１２０に提供する。
【００１４】
プロセッサコア１２０は、後方分岐命令またはヒント命令に応答して、１つ以上のタグ値を、ループ−タグ信号１２５を介して命令ループキャッシュ１４０に提供することができる。ループ−タグ信号１２５で送信されるタグ値は、プロセッサコア１２０が命令ループキャッシュ１４０に送信するフェッチアドレスのタグと異なることができる。ループ−タグ信号１２５で送信されるタグ値は、プロセッサコア１２０が命令ループキャッシュ１４０に送信するフェッチアドレスに関連することもできる。こうした場合に、ループ−タグ信号を制御信号により実現して、フェッチアドレスがタグ値に関連することを示すことができる。より詳細なことは以下に開示する。
【００１５】
図２は、本発明の実施形態による、メモリ１６０内のキャッシュラインを示す概略図である。メモリ１６０のアドレスは、タグとインデックスに分割される。本実施形態では、アドレスが３２ビットを有し、タグは３０ビットを有し、インデックスは２ビットを有する。他の実施形態では、アドレスのビット数、タグのビット数、及びインデックスのビット数を異ならせることができる。同じキャッシュライン中のアドレスは、同じタグを有する。例えば、命令Ｉ０〜Ｉ３はアドレス０〜３に位置し、これらは同じキャッシュラインに属し、同じタグ０を有する。命令Ｉ４〜Ｉ７はアドレス４〜７に位置し、これらは同じキャッシュラインに属し、同じタグ１を有する。
【００１６】
図３は、本発明の実施形態による、マイクロプロセッサ１００の命令ループキャッシュ１４０を示す概略図である。命令ループキャッシュ１４０は、キャッシュアレイ３２０、タグ記憶部３４０、比較器３６０、及びコントローラ３８０を含む。キャッシュアレイ３２０は、プロセッサコア１２０及びメモリ１６０に結合されている。タグ記憶部３４０は、プロセッサコア１２０及びキャッシュアレイ３２０に結合されている。比較器３６０は、キャッシュアレイ３２０及びタグ記憶部３４０に結合されている。コントローラ３８０は、プロセッサコア１２０、メモリ１６０、キャッシュアレイ３２０、タグ記憶部３４０、及び比較器３６０に結合されている。簡単のため、タグ記憶部３４０とコントローラ３８０との結合は、図３に示していない。
【００１７】
キャッシュアレイ３２０は２N個のキャッシュエントリを記憶することができ、ここにＮは、プロセッサコア１２０が提供するフェッチアドレスのインデックスのビット数である。従って、本実施形態では、キャッシュアレイ３２０のサイズが、ちょうど１つのキャッシュラインである。キャッシュラインが小さいと、命令ループキャッシュは比較的微小である。
【００１８】
図３では、キャッシュアレイ３２０内の各キャッシュエントリを行として表す。各キャッシュエントリは、３つのフィールド、即ちタグ識別番号（ＩＤ）３２２、有効ビット３２４、及び命令３２６を含む。タグＩＤ３２２を用いて、タグ記憶部３４０に記憶されたタグ値のうち１つを選択する。有効ビット３２４は、キャッシュエントリが有効であるか否かを示す。キャッシュエントリは、その有効ビット３２４がセットされている際に有効である。命令３２６は、以前にメモリ１６０からフェッチされ、現在はキャッシュエントリに記憶されている命令である。キャッシュアレイ３２０は、プロセッサコア１２０が提供するフェッチアドレスのインデックスが示すキャッシュエントリのＩＤ３２２を出力する。換言すれば、キャッシュエントリは０〜２N−１の番号を付けることができ、キャッシュアレイ３２０は、フェッチアドレスのインデックスに一致する番号を有するキャッシュエントリのＩＤ３２２を出力することができる。
【００１９】
タグ記憶部３４０は、２M個のタグ値を記憶し、ここにＭは、各キャッシュエントリのタグＩＤ３２２のビット数である。タグ記憶部３４０内のタグ値は、０から２M−１まで番号付けされている。本実施形態ではＭが１である。タグ値はプロセッサコア１２０によって、上述したフェッチアドレスではなくループタグ信号１２５を介して提供される。タグ記憶部３４０は、アレイ３２０が出力したタグＩＤ３２２が示すタグ値を出力する。換言すれば、タグ記憶部３０は、キャッシュアレイ３２０が出力するタグＩＤ３２２と値が一致するタグ値を出力する。
【００２０】
比較器３６０は、プロセッサコアが提供するフェッチアドレスのタグと、タグ記憶部３４０が出力するタグ値との、ビット単位の比較を実行する。キャッシュアレイ３２０は、フェッチアドレスのインデックスが示すキャッシュエントリの有効ビット３２４を比較器３６０に出力する。比較器３６０は、フェッチアドレスのタグが、キャッシュ記憶部３４０が出力するタグ値に等しく、かつ、キャッシュアレイ３２０が出力する有効ビット３２４がセットされている際に、ヒット信号３６５をアサート（「真」の値に）してキャッシュヒットを示す。さもなければ、比較器３６０は、ヒット信号３６５をデアサート（「偽」の値に）してキャッシュミスを示す。
【００２１】
コントローラ３８０は、ヒット信号３６５に応じて、フェッチアドレスに対応する命令をプロセッサコア１２０に提供する。図３では、コントローラ３８０をマルチプレクサとして表しているが、コントローラ３８０は、実際にはマルチプレクサだけではない。より詳細なことは以下に開示する。
【００２２】
図４は、本発明の実施形態によるメモリ１６０内の命令ループを示す概略図である。メモリ１６０内に５つの命令Ｉ０〜Ｉ４が存在する。命令Ｉ０〜Ｉ３のアドレスは、同じタグＡを有する。命令Ｉ４のアドレスのタグはＡ＋１である。命令Ｉ４は後方分岐命令であり、その分岐ターゲットは命令Ｉ２である。従って、この命令ループは３つの命令Ｉ２〜Ｉ４を含む。
【００２３】
プロセッサコア１２０が後方分岐命令を実行し、この後方分岐命令を取得する毎に、プロセッサ１２０は、この後方分岐命令に関係する少なくとも１つのタグ値を命令ループキャッシュ１４０に送信する。この後方分岐命令に関係する少なくとも１つの値は、この後方分岐命令のターゲットアドレスのタグから始まる１つ以上の連続したタグ値とすることができる。本実施形態では、プロセッサコア１２０が、２つの連続したタグ値を送信し、命令Ｉ４のターゲットアドレスが、Ｉ２のフェッチアドレスである。従って、プロセッサコア１２０は、タグ値Ａ及びＡ＋１を、ループタグ信号１２５によって命令ループキャッシュ１４０に送信する。
【００２４】
図５は、本発明の実施形態による、命令ループキャッシュを使用する方法を示すフローチャートである。図５の方法は、命令ループキャッシュ１４０のコントローラ３８０によって実行することができる。ステップ５０５では、マイクロプロセッサ１００がリセットされると、コントローラ３８０が、すべてのキャッシュエントリの有効ビット３２４をクリアすることによって、すべてのキャッシュエントリを無効にする。ステップ５１０では、コントローラ３８０が、プロセッサコア１２０から送信された１つ以上のタグ値を受信して、プロセッサコア１２０から送信されたタグ値とタグ記憶部３４０に記憶されているタグ値とが異なるか否かを判定する。コントローラ３８０がプロセッサコア１２０から受信したタグ値のいずれかが、タグ記憶部３４０に前から記憶されているあらゆるタグ値と異なると、フローはステップ５１５に進む。さもなければ、フローはステップ５２０に進む。
【００２５】
ステップ５１５では、コントローラ３８０が、タグ記憶部３４０を、プロセッサコア１２０から受信した少なくとも１つのタグ値で更新する。タグ記憶部３４０が、プロセッサコア１２０から受信した少なくとも１つのタグ値用の空きを有する際には、コントローラ３８０は、プロセッサコア１２０から受信した少なくとも１つのタグ値を単にタグ記憶部３４０に追加することによってタグ記憶部３４０を更新する。さもなければ、コントローラ３８０は、記憶部３４０に前から記憶されているタグ値を、プロセッサコア１２０から受信した少なくとも１つのタグ値に置き換えて、各キャッシュエントリの有効ビット３２４をクリアすることによって、すべてのキャッシュエントリを無効にする。次に、フローはステップ５１０に戻る。
【００２６】
ステップ５２０では、コントローラ３８０が、命令のフェッチアドレスをプロセッサコア１２０から受信したか否かを判定する。フェッチアドレスを受信していないと、フローはステップ５１０に戻る。こうしたフェッチアドレスを受信すると、フローはステップ５２５に進む。ステップ５２５では、コントローラ３８０が、比較器３６０がヒット信号３６５をアサートしているか否かをチェックする。ヒット信号３６５がアサートされていないと、フローはステップ５３５に進む。ヒット信号３６５がアサートされていると、ステップ５３０では、コントローラ３８０が、プロセッサコア１２０が提供するフェッチアドレスのインデックスが示すキャッシュエントリの命令３２６を、プロセッサコア１２０に供給する。次に、フローはステップ５１０に戻る。
【００２７】
ステップ５３５では、コントローラ３８０が、フェッチアドレスに位置する命令をメモリ１６０からフェッチして、この命令をプロセッサコア１２０に供給する。ステップ５４０では、コントローラ３８０が、このフェッチアドレスのタグが、タグ記憶部３４０に記憶されているタグ値のいずれかに等しいか否か、及びこのフェッチアドレスのインデックスが示すキャッシュエントリが無効であるか否かをチェックする。ステップ５４０でチェックした条件が偽であると、フローはステップ５１０に戻る。ステップ５４０でチェックした条件が真であると、ステップ５４５では、コントローラ３８０が、メモリ１６０内のこのフェッチアドレスに位置する命令を、このフェッチアドレスのインデックスが示すキャッシュエントリに入れる。これに加えて、コントローラ３８０は、タグＩＤ３２２、及びこのキャッシュエントリの有効ビット３２４をセットする。次に、フローはステップ５１０に戻る。
【００２８】
次の表１は、マイクロプロセッサ１００が、図４に示すループの命令をキャッシュ記憶する方法を示す。以下の説明については、図３、図４及び図５を参照されたい。
【００２９】
【表１】
0005944458.tif 000002
【００３０】
表１中の「サイクル」は、マイクロプロセッサ１００のクロックサイクルを意味する。サイクル４では、プロセッサ１２０が、後方分岐命令Ｉ４を実行してＩ４を取得する。その結果、プロセッサコア１２０がタグ値Ａ及びＡ＋１を命令ループキャッシュ１４０に送信し、コントローラ３８０は、タグ値Ａ及びＡ＋１をタグ記憶部３４０に記憶する。サイクル７、１０及び１３では、プロセッサコア１２０がタグ値Ａ及びＡ＋１の送信を反復し、コントローラ３８０は、同じタグ値が既にタグ記憶部３４０に記憶されているので、これらを無視するだけである。
【００３１】
サイクル５〜７では、即ち、命令ループの２回目の反復では、まだキャッシュミスが存在する。しかし、コントローラ３８０は、フェッチアドレスが記憶部３４０内のタグ値と一致するので、メモリ１６０からフェッチした命令をキャッシュアレイ３２０に入れ始める。サイクル８、即ち、命令ループの３回目の反復からは、命令Ｉ２〜Ｉ４が既にキャッシュアレイ３２０に記憶されているので、キャッシュヒットが発生する。命令ループの３回目の反復、及びその後の反復の命令は、メモリ１６０の代わりに命令ループキャッシュ１４０から供給される。
【００３２】
表１に示すように、命令ループキャッシュ１４０のキャッシュ機能は、命令ループの３回目の反復から始まる。この場合、命令ループを２回だけ実行するならば、命令ループキャッシュ１４０は無用になる。本発明の他のいくつかの実施形態では、ヒント命令を用いて、少数回反復される命令ループ向けの強化を提供することができる。
【００３３】
図６は、本発明の実施形態による命令ループを示す概略図である。ヒント命令「ヒントＡ」が、２つの命令Ｉ０及びＩ１を含む命令ループの前に配置され、Ｉ１は後方分岐命令である。本実施形態では、ヒント命令が条件分岐命令であり、ターゲットアドレス及び分岐条件を有する。ヒント命令の分岐条件は常に偽である。例えば、ヒント命令は、「レジスタ０の値がレジスタ０”の値より大きければ、あるターゲットアドレスに分岐する」という形式にすることができる。互換性のため、ヒント命令は、マイクロプロセッサによって、命令ループキャッシュなしで、何の結果も影響もなしに安全に実行することができる。
【００３４】
ヒント命令は、コンパイラによって自動的に、あるいはプログラマーが手作業で、命令ループを含む命令ストリーム内に追加することができる。ヒント命令は、対応する命令ループがプロセッサコア１２０によって実行される前に、プロセッサコア１２０によって実行すべきである。ヒント命令のターゲットアドレスは、対応する命令ループを指示する。ヒント命令は、対応する命令ループが当該ヒント命令のターゲットアドレスの範囲内で到達可能で有る限り、固定的に配置することができる。従って、ヒント命令を命令ループから遠くに配置して、パイプラインのレイテンシ（待ち時間）を解消することができる。
【００３５】
プロセッサコア１２０がヒント命令をフェッチして認識する毎に、プロセッサコア１２０は、ヒント命令に関係するタグ値を命令ループキャッシュ１４０に送信する。本実施形態では、ヒント命令に関係するタグ値が、このヒント命令のターゲットアドレスのタグである。次の表２は、マイクロプロセッサ１００が図６に示す命令ループをキャッシュ記憶する方法を示す。
【００３６】
【表２】
0005944458.tif 000003
【００３７】
サイクル０では、プロセッサコア１２０がヒント命令をフェッチして認識する。その結果、プロセッサコア１２０は、タグ値Ａを命令ループキャッシュ１４０に送信し、コントローラ３８０は、タグ値Ａをタグ記憶部３４０に記憶する。サイクル１及び２では、即ち、命令ループの１回目の反復では、キャッシュミスが存在する。しかし、フェッチアドレスのタグが、タグ記憶部３４０内のタグ値Ａと一致するので、コントローラ３８０は、メモリ１６０からフェッチした命令をキャッシュアレイ３２０に入れ始める。サイクル２では、プロセッサコア１２０が後方分岐命令Ｉ１を実行してＩ１を取得する。その結果、プロセッサコア１２０は、タグ値Ａ及びＡ＋１を命令ループキャッシュに送信する。サイクル３、即ち、命令ループの２回目の反復からは、命令Ｉ０〜Ｉ１が既にキャッシュアレイ３２０に記憶されているので、キャッシュヒットが発生する。表２に示すように、命令ループキャッシュ１４０のキャッシュ機能は、表１に示す例よりも１回前の反復である２回目の反復から始まる。
【００３８】
本発明の他のいくつかの実施形態では、ヒント命令がターゲットアドレスを有する必要がない。これらの実施形態では、ヒント命令をノーオペレーション（無演算）命令とすることができる。互換性のため、このノーオペレーション・ヒント命令は、マイクロプロセッサによって、命令ループキャッシュなしで、何の結果も影響もなしに安全に実行することができる。ターゲットアドレスなしのヒント命令は、対応する命令ループの直前に配置すべきである。プロセッサコア１２０がターゲットアドレスなしのヒント命令をフェッチして認識する毎に、プロセッサコア１２０は、このターゲットアドレスなしのヒント命令に関係するタグ値を、命令ループキャッシュ１４０に送信し続ける。しかし、こうしたヒント命令に関係するタグ値は、対応する命令ループの最初の命令のフェッチアドレスのタグであり、即ち、このヒント命令のフェッチアドレスの次のフェッチアドレスのタグである。
【００３９】
図７は、本発明の実施形態による他の命令ループを示す概略図である。この実施形態は、関数呼出しを有する命令ループ向けの強化を提供する。図７に示す命令ストリームは、ヒント命令、命令ループ、及び関数を含む。このループの命令は同じタグＡを有するのに対し、関数の命令のアドレスは同じタグＢを有する。このループは２つの命令を有する。ループの第１命令が関数を呼び出す。ループの第２命令は後方分岐命令である。
【００４０】
本実施形態では、命令ループに関連するヒント命令「ヒントＢ」を用いて、プロセッサコア１２０がタグ値を事前に命令ループキャッシュ１４０に送信することができる。本実施形態では、ヒント命令が、分岐条件及びターゲットアドレスを有する条件分岐命令である。この分岐条件は常に偽である。ターゲットアドレスは、対応する命令ループ内で呼び出される関数を指示する。ヒント命令は、プロセッサコア１２０がこの命令ループを実行する前に、プロセッサコア１２０によって実行されるべきである。プロセッサコア１２０がヒント命令をフェッチして認識する毎に、プロセッサコア１２０は、このヒント命令に関係するタグ値を命令ループキャッシュ１４０に送信する。本実施形態では、ヒント命令に関係するタグ値が、対応する命令ループ内で呼び出される関数の第１命令のフェッチアドレスのタグである。
【００４１】
プロセッサコア１２０がヒント命令をフェッチして認識すると、プロセッサコア１２０は、タグ値Ｂを命令ループキャッシュ１４０に送信する。コントローラ３８０は、タグ値Ｂを命令ループキャッシュ１４０に記憶する。プロセッサコア１２０が１回目の反復において命令ループを実行すると、コントローラ３８０は、ループの命令をメモリ１６０からフェッチして、これらの命令をプロセッサコア１２０に提供する。１回目の反復では、タグＡがまだタグ記憶部３４０に記憶されていないので、コントローラ３８０は、ループの命令をキャッシュアレイ３２０に記憶しない。しかし、タグ値Ｂは既にタグ記憶部３４０に記憶されているので、コントローラ３８０は、１回目の反復中に呼び出される関数の命令をキャッシュアレイ３２０に記憶する。１回目の反復において、プロセッサコア１２０が後方分岐命令を実行すると、プロセッサコア１２０はタグ値Ａを命令ループキャッシュ１４０に送信し、コントローラ３８０は、タグ値Ａをタグ記憶部３４０に記憶する。その結果、２回目の反復では、コントローラ３８０が、ループの命令をキャッシュアレイ３２０に記憶する。この瞬間から、コントローラ３８０は、ループ及び関数の命令を、キャッシュアレイ３２０からプロセッサコア１２０に直接提供する。
【００４２】
本実施形態では、タグ記憶装置３４０が、２つのタグ値、即ち命令ループのタグ値Ａ及び関数のタグ値Ｂを記憶する。従って、キャッシュアレイ３２０は、ループの命令及び関数の命令を記憶することができる。
【００４３】
図８は、本発明の他の実施形態による、命令ループキャッシュ１４０を使用する方法を示すフローチャートである。この実施形態は、ネスト（入れ子）化されたループ、即ち、他のループ内のループ向けの強化を提供する。図８に示す方法は、コントローラ３８０によって実行することができる。本実施形態では、コントローラ３８０が、通常状態及び内側状態を含む有限状態マシンに関連する。内側状態が、ネスト化された（入れ子の）ループに相当する。図８のフローチャート内の一部のステップは、図５のフローチャート内の対応するものと同一である。これらのステップは、図５及び図８共に同じ番号を有し、ここではそれらの説明を省略する。以下の説明は、図５のフローチャートとは異なるステップに焦点を当てる。
【００４４】
ステップ８０５では、コントローラ３８０が通常状態に入り、キャッシュエントリの有効ビット３２４のすべてをクリアすることによって、キャッシュエントリを無効にする。ステップ８１２では、コントローラ３８０が、現在状態が通常状態であるか内側状態であるかをチェックする。コントローラ３８０が内側状態にある際には、ステップ８１８において、コントローラ３８０が通常状態に入り、フローはステップ５１０に戻る。コントローラ３８０が通常状態である際には、ステップ８１５において、コントローラ３８０が内側状態に入る。これに加えて、ステップ８１５では、コントローラ３８０が、ステップ５１５と同様の方法でタグ記憶部３４０を更新して、フローはステップ５１０に戻る。ステップ５３０後に、コントローラ３８０はステップ３８２において内側状態に入り、フローはステップ５１０に戻る。
【００４５】
図９は、本発明の実施形態によるコントローラ３８０に関連する有限状態マシンを示す概略図である。図８及び図９に示すように、ステップ８０５において、コントローラ３８０は最初に通常状態に入る。コントローラ３８０が内側信号を受信すると、コントローラ３８０は通常状態から内側状態に入る。内側信号は、内側ループが実行されていることを示すことを意図している。本実施形態では、コントローラ３８０がプロセッサコア１２０から受信した少なくとも１つのタグ値が、タグ記憶部３４０に前から記憶されているあらゆるタグ値と異なる際に、コントローラ３８０は、ステップ８１５において内側信号をアサートする。比較器３６０がヒット信号３６５をアサートすると、コントローラ３８０も、ステップ８３２において内側信号をアサートする。その代わりに、コントローラ３８０が受信したタグ値が、タグ記憶部３４０に前から記憶されているいずれかのタグ値と同一である際に、コントローラ３８０は内部側信号をアサートすることができる。２つの例を示しているが、他の多数の例が可能であり、こうした内側信号発生のすべてが、本開示の範囲内であることを意図している。
【００４６】
コントローラ３８０がプロセッサコア１２０から受信した少なくとも１つのタグ値が、タグ記憶部３４０に前から記憶されているあらゆるタグ値と異なる際に、ステップ８１８において、コントローラ３８０は内側状態から通常状態に入る。ステップ８１２及び８１８は、内側命令ループの命令を記憶しているキャッシュエントリを無効化することを回避する。ステップ８１２及び８１８により、コントローラ３８０は、内側状態においてタグ記憶部３４０に記憶されているタグ値を更新しない。コントローラ３８０は、通常状態のみにおいて、タグ記憶部３４０に記憶されているタグ値を更新する。
【００４７】
図１０は、本発明の実施形態による命令ループを示す概略図である。図１０の命令ループは、ネスト化された内側ループを含み、４つのキャッシュラインにわたり、それらのタグは、それぞれＡ、Ａ＋１、Ａ＋２及びＡ＋３である。命令ＪＢは、内側命令ループの後方分岐命令であるのに対し、命令ＪＡは、外側命令ループの後方分岐命令である。次の表３は、マイクロプロセッサ１００が図１０の命令をキャッシュ記憶する方法を示す。
【００４８】
【表３】
0005944458.tif 000004
【００４９】
サイクルＣ22では、プロセッサコア１２０が後方分岐命令ＪＢを実行してＪＢを取得する。その結果、プロセッサコア１２０は、タグ値Ａ＋２及びＡ＋３を命令ループキャッシュ１４０に送信し、コントローラ３８０は、タグ値Ａ＋２及びＡ＋３をタグ記憶部３４０に記憶する。これに加えて、コントローラ３３０は、通常状態から内側状態に入る。サイクルＣ23及びＣ24では、即ち、内側命令ループの２回目の反復では、フェッチアドレスのタグがタグ記憶部３４０内のタグ値と一致するので、コントローラ３８０は、メモリ１６０からフェッチした命令をキャッシュアレイ３２０に入れる。
【００５０】
サイクルＣ31では、マイクロプロセッサ１２０が後方分岐命令ＪＡをフェッチし、キャッシュミスが存在する。アレイのエントリが命令Ｂによって占有されているので、コントローラ３８０は、メモリ１６０からフェッチした命令ＪＡをキャッシュアレイ３２０に入れない。プロセッサコア１２０が後方分岐命令ＪＡを実行してＪＡを取得すると、プロセッサコア１２０は、タグＡ及びＡ＋１を命令ループキャッシュ１４０に送信する。コントローラ３８０が内側状態であるので、コントローラ３８０は、これらのタグ値を無視して通常状態に入る。フェッチアドレスのタグＡが、タグ記憶部３４０内のタグ値とは異なるので、サイクルＣ32ではキャッシュミスが存在する。
【００５１】
サイクルＣ41〜Ｃ44では、３回目及び４回目の反復において、内側命令ループが実行される。フェッチアドレスのタグが既にタグ記憶部３４０に記憶されているので、キャッシュヒットが存在する。サイクルＣ42では、このキャッシュヒットにより、コントローラ３８０が通常状態から内側状態に入る。
【００５２】
サイクルＣ51では、命令ＪＡがキャッシュアレイ３２０に記憶されていないので、キャッシュミスが存在する。プロセッサコア１２０が後方分岐命令ＪＡを実行してＪＡを取得すると、プロセッサコア１２０は、タグ値Ａ及びＡ＋１を命令ループキャッシュに送信する。コントローラ３８０は内側状態であるので、コントローラ３８０は、これらのタグ値を無視して通常状態に入る。フェッチアドレスのタグＡがタグ記憶部３４０のタグ値と異なるので、サイクルＣ52ではキャッシュミスが存在する。
【００５３】
本実施形態では、最も内側のループの命令が、すべて命令ループキャッシュ１４０内にキャッシュ記憶される。最も内側のループが最も頻繁に実行されるので、このことは最も効率的な方法である。
【００５４】
図１１は、本発明の他の実施形態による、マイクロプロセッサ１００の命令ループキャッシュ１４０を示す概略図である。この実施形態は、複数のキャッシュライン境界にまたがるループ向けの強化を提供する。本実施形態では、命令ループキャッシュ１４０が、キャッシュアレイ１１２０、タグ記憶部１１４０、比較器１１６０、及びコントローラ１１８０を含む。
【００５５】
タグ記憶部１１４０は、より長い命令ループ用に、より多数のタグ値を記憶するための、より大きな容量を有する。従って、プロセッサコア１２０は、後方分岐命令を実行して取得する際に、より多数のタグ値を命令ループキャッシュ１４０に送信することができる。さらに、すべてのキャッシュエントリの有効ビットをまとめて、同じキャッシュエントリのタグＩＤにする。図１１に示すように、キャッシュアレイ１１２０内の各キャッシュエントリが、２つのフィールド、即ちタグＩＤ１１２２及び命令１１２６を含む。命令フィールド１１２６は、図３の命令フィールド３２６と同じである。各キャッシュエントリのタグＩＤ１１２２はＭビットを有するのに対し、タグ記憶部１１４０は２M−１個のタグ値の容量を有する。本実施形態では、Ｍが２に等しい。タグ記憶部１１４０内のタグ値は、１〜２M−１に番号付けされている。キャッシュエントリのタグＩＤ１１２２を用いて、タグＩＤ１１２２と同じ数を有するタグ値を選択する。キャッシュアレイ１１２０は、プロセッサコア１２０が提供するフェッチアドレスのインデックスが示すキャッシュエントリのタグＩＤ１１２２を、タグ記憶部１１４０に対して出力する。タグ記憶部１１４０は、キャッシュアレイ１１２０が出力するタグＩＤ１１２２が示すタグ値を出力する。
【００５６】
キャッシュアレイ１１２０が出力するタグＩＤ１１２２が、本実施形態では０である所定値に等しい際に、タグ記憶部１１４０は、所定の無効タグ値を出力する。この無効タグ値は、あらゆるフェッチアドレスのタグと異なる一意的な値であり、このため、タグ記憶装置１１４０がこの無効タグ値を出力する際には、キャッシュヒットが存在しない。キャッシュエントリのタグＩＤ１１２２のタグ値が、この無効タグ値に相当する所定値である際に、このことは、このキャッシュエントリが無効であることを意味する。従って、コントローラ１１８０がキャッシュエントリを無効化する際に、コントローラ１１８０は、このキャッシュエントリのタグＩＤ１１２２をクリアして、上記無効タグ値に相当する所定値にする
【００５７】
比較器１１６０は、タグ記憶部１１４０が出力するタグ値と、プロセッサコア１２０が提供するフェッチアドレスのタグとのビット単位の比較を実行する。比較器１１６０は、フェッチアドレスのタグが、タグ記憶部１１４０が出力するタグ値に等しい際に、ヒット信号３６５をアサートしてキャッシュヒットを示す。さもなければ、比較器１１６０は、ヒット信号３６５をデアサートしてキャッシュミスを示す。
【００５８】
図１１の命令ループキャッシュ１４０についての他の詳細事項は、図３の命令ループキャッシュ１４０についての詳細事項と同じである。
【００５９】
図１２は、本発明の実施形態による命令ループを示す概略図である。図１２の命令ループは、分岐ターゲットが命令Ｉ２である前方分岐命令、及び分岐ターゲットが命令Ｉ０である後方分岐命令を含む。この実施形態は、図４に示す実施形態と似ているが、いくつかの相違がある。第１の相違は、タグ記憶部１１４０が、２つのタグ値の代わりに３つまでのタグ値を記憶することができる、ということである。第２の相違は、プロセッサコア１２０が後方分岐命令を実行して、この後方分岐命令を取得すると、プロセッサコア１２０は、２つの連続したタグ値の代わりに、３つの連続したタグ値を命令ループキャッシュ１４０に送信することである。従って、プロセッサコア１２０が図１２の後方分岐命令を実行して、この後方分岐命令を取得すると、プロセッサコア１２０は、３つの連続したタグ値Ａ、Ａ＋１及びＡ＋２を命令ループキャッシュ１４０に送信する。従って、２回目の反復では、命令ループキャッシュ１４０が、命令Ｉ０及びＩ２、即ち前方分岐命令及び後方分岐命令を記憶する。次に、３回目の反復では、命令ループキャッシュ１４０は、これらの命令を、キャッシュアレイ１１２０から直接供給することができる。
【００６０】
本発明の範囲を逸脱することなしに、本発明の構造に種々の変更及び変形を加えることができることは、当業者にとって明らかである。以上を考慮すれば、本発明の変更及び変形が以下の特許請求の範囲及びその等価物の範囲内に入るのであれば、本発明は、これらの変更及び変形をカバーすることを意図している。
【産業上の利用可能性】
【００６１】
本発明が提供する命令ループキャッシュは、命令ループの命令を効果的にキャッシュ記憶する。この命令ループキャッシュは、微小サイズに構成して、電力及びチップ空間を節減することができる。この命令ループキャッシュは、関数呼出し、複数のキャッシュライン境界をまたぐ命令ループ、及びネスト化された命令ループに適用可能である。これに加えて、この命令ループキャッシュは、命令ループの２回目の反復から命令を供給し始めることができ、このことは、ループ実行に対する非常に高速な応答となる。
【符号の説明】
【００６２】
１００：マイクロプロセッサ
１２０：プロセッサコア
１２５：ループタグ信号
１４０：命令ループキャッシュ
１６０：メモリ
３２０、１１２０：キャッシュアレイ
３２２、１１２２：タグＩＤ
３２４：有効ビット
３２６、１１２６：命令フィールド
３４０  １１４０：タグ記憶部
３６０、１１６０：比較器
３６５：ヒット信号
３８０、１１８０：コントローラ
Ｉ０〜Ｉ７、ヒントＡ、ヒントＢ、呼出しＦ、Ｆ、戻り、戻り、Ａ、Ｂ、ＪＡ、ＪＢ：命令
５０５〜５４５、８０５、８１２〜８１８、８３２：方法のステップ
【図１】
0005944458.tif 000005
【図２】
0005944458.tif 000006
【図３】
0005944458.tif 000007
【図４】
0005944458.tif 000008
【図５】
0005944458.tif 000009
【図６】
0005944458.tif 000010
【図７】
0005944458.tif 000011
【図８】
0005944458.tif 000012
【図９】
0005944458.tif 000013
【図１０】
0005944458.tif 000014
【図１１】
0005944458.tif 000015
【図１２】
0005944458.tif 000016