(57)【特許請求の範囲】
【請求項１】
可変命令長を持つプロセッサにおけるキャッシュ管理の方法であって、該方法は、
固定数の逐次命令を含む第１の複数の命令のそれぞれを検査して各命令の対応する長さを決定することと、前記第１の複数の命令は第１の命令長もつ第１の命令と、前記第１の命令長とは異なる第２の命令長をもつ第２の命令とを含み、
前記第１の複数の命令のそれぞれを予め定められた境界に沿って整列させることと、
整列された前記第1の複数の命令をキャッシュの第１のキャッシュラインに記憶すること、
前記固定数の逐次命令を含む第２の複数の命令を前記キャッシュの第２のキャッシュラインに記憶すること、
前記キャッシュ内に、前記第１のキャッシュラインの近くに、
次のフェッチアドレスと、
前記第１のキャッシュラインに関連するキャッシュラインタグに加算されると前記次のフェッチアドレスが得られるオフセットと、
のうちの１つを記憶すること、
を含む方法。
【請求項２】
前記第１の複数の命令を前記第１のキャッシュラインに置く前に、前記次のフェッチアドレスと前記オフセットとのうちの少なくとも１つを決定すること、をさらに含む請求項１の方法。
【請求項３】
前記第１の複数の命令のそれぞれに関連する対応する予め定められた命令境界を確認することをさらに含む請求項２の方法。
【請求項４】
前記整列させることは、前記第１の複数の命令のそれぞれを前記第１のキャッシュラインの対応する予め定められた境界を用いて整列させることを含む請求項１の方法。
【請求項５】
各予め定められた境界は、関連する語アドレスをもつ語境界である請求項４の方法。
【請求項６】
前記固定数の命令を記憶した後、前記第１のキャッシュラインは空きの部分を含む請求項１の方法。
【請求項７】
前記固定数は４である請求項１の方法。
【請求項８】
第１の命令と第２の命令とを含む予め定められた数の逐次命令を記憶する第１のキャッシュラインと、前記第１の命令は第１の命令長をもち、前記第２の命令は前記第１の命令長とは異なる第２の命令長をもち、
前記予め定められた数の逐次命令を記憶する第２のキャッシュラインと、
を含む命令キャッシュと、
各命令の対応する長さを決定し、各命令を前記キャッシュの対応する語境界に沿って整列させ、前記整列された命令を前記キャッシュへ渡すプレデコーダと、ここで、前記プレデコーダは前記予め定められた数の逐次命令のそれぞれを、前記第１のキャッシュラインの対応する予め定められた語境界を用いて整列させる、
を備え、
前記第１のキャッシュラインは、さらに、
次のフェッチアドレスと、
前記第１のキャッシュラインに関連するキャッシュラインタグに加算されると前記次のフェッチアドレスが得られるオフセットと、
のうちの１つを記憶する、プロセッサ。
【請求項９】
前記プレデコーダは、前記第１のキャッシュラインに書き込まれる最後の命令に続く次の命令の前記次のフェッチアドレスを計算し、前記次の命令の前記次のフェッチアドレスと前記オフセットとのうちの１つを前記第１のキャッシュラインに記憶する、請求項８のプロセッサ。
【請求項１０】
可変長の命令を実行する命令実行パイプラインをさらに備える請求項８のプロセッサ。
【請求項１１】
可変命令長を持つプロセッサにおけるキャッシュ管理の方法であって、該方法は、
複数のキャッシュラインを備えるキャッシュのキャッシュライン毎に記憶可能な固定数の命令を決定することと、ここで前記固定数は１より大きく、
前記固定数の命令を含む複数の逐次命令のそれぞれに対応する長さを決定するために、前記複数の逐次命令のそれぞれを検査することと、ここで、前記複数の逐次命令は第１の命令長をもつ第１の命令と前記第１の命令長とは異なる第２の命令長をもつ第２の命令とを含み、
前記複数の逐次命令のそれぞれを対応する予め定められた境界に沿って整列させることと、
前記複数のキャッシュラインのうちの第１のキャッシュラインに整列された前記複数の逐次命令を記憶することと、
を含む方法。
【請求項１２】
前記複数の逐次命令のそれぞれは、前記第１のキャッシュラインに関連する語長を越えない対応する命令長をもつ、請求項１１の方法。
【請求項１３】
少なくとも１つの予め定められた境界は語境界である請求項１１の方法。
【請求項１４】
前記キャッシュ内に、前記第１のキャッシュラインの近くに次のフェッチアドレスを記憶すること、をさらに含む請求項１１の方法。
【請求項１５】
前記第１のキャッシュラインに前記複数の逐次命令を記憶する前に、前記次のフェッチアドレスを決定すること、をさらに含む請求項１４の方法。
【請求項１６】
前記キャッシュ内に、前記第１のキャッシュラインの近くに、前記第１のキャッシュラインに関連するキャッシュラインタグに加算されると次のフェッチアドレスが得られるオフセットを記憶すること、をさらに含む請求項１１の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般にプロセッサの分野に係り、特に可変長命令の固定数を記憶する命令キャッシュを持つプロセッサに関する。
【背景技術】
【０００２】
マイクロプロセッサは、携帯用電子機器を含む種々様々のアプリケーションにおいて計算上のタスクを行なう。多くの場合、プロセッサの性能を最大限にすることは、補助機能と特徴が携帯用電子機器および他のアプリケーションで実施されることを可能にするために主な設計目標である。さらに、電力消費は、制限されたバッテリー容量を持つ携帯用電子機器において特別の関係である。従って、性能を増加させて、電力消費を減少させるプロセッサ設計は望ましい。
【０００３】
最も現代のプロセッサは１つ以上の命令実行パイプラインを使用し、多くのマルチステップの逐次命令の実行が全面的なプロセッサの性能を改善するために重複される。ほとんどのプログラムの空間的かつ時間的局所参照性特例を利用して、最近、実行される命令が実行パイプラインによって即座のアクセスのために、キャッシュ（高速、通常オンチップ・メモリ）に記憶される。
【０００４】
多くのプロセッサの命令セット・アーキテクチャ（ＩＳＡ）が可変長命令を含んでいる。すなわち、メモリから読み出された命令オペレーションコードは、必ずしもすべて同じ量のスペースを占めない。これは、算術または論理命令を用いたオペランドの包含、非常に長い命令語（ＶＬＩＷ）への多重オペレーションの融合、あるいは他のアーキテクチャの特徴に起因するかもしれない。可変長命令にとって１つの不利は、命令キャッシュから命令を取り込む際、プロセッサは各命令の境界を確認しなければならないということであり、その計算上のタスクは電力を消費し、性能を減少させる。
【０００５】
可変長命令の存在のもとで命令キャッシュアクセスを改善することへの技術における既知のアプローチは、キャッシュにそれらを記憶する前に命令を「プレデコード」し、さらに、命令と共にキャッシュラインにおけるある命令境界情報を記憶することである。これは、デコードタスクに置かれる命令境界を確認する付加的な計算上の負担を減少させるが、しかし除去しない。
【０００６】
また、同じコンパクトな形式のキャッシュにそれらがメモリから読み出される命令を詰め込むことによって、命令は１つのキャッシュラインの終わりに命令の一部が記憶され、残りが連続したキャッシュラインの初めに記憶されることによって、時々誤整列される。この命令を取り込むことは２つのキャッシュアクセスを必要とし、特に２つのアクセスが命令実行するごとに必要とされるので、さらに性能を減少し、電力消費を増加させる。
【０００７】
図１は可変長命令（Ｉ１−Ｉ９）を記憶する先行技術命令キャッシュの２つのライン１００、１４０の代表的な図を示す。この代表的な例において、各キャッシュラインは１６バイトを含み、３２ビットの語長が仮定される。ほとんどの命令は一語幅、即ち４バイトである。いくつかの命令は２バイトを含む半語幅である。第1のキャッシュライン１００および関連するタグフィールド１２０は、命令Ｉ１ないしＩ４、および命令Ｉ５の半分を含んでいる。関連するタグフィールド１６０を有する第２のキャッシュライン１４０は、命令Ｉ５の後半および命令Ｉ６ないしＩ９を含んでいる。命令長とそれらのアドレスは次の表で要約される：
【表１】
0005341163.tif 000002
【０００８】
キャッシュライン１００、１４０からこれらの命令を読み出すために、プロセッサは、命令境界を決定する付加的な計算上の労力（電力消費と遅れを犠牲にして）を消費しなければならない。命令をプレデコードし、かつキャッシュライン１００、１４０中の、またはそれに関係した境界情報を記憶することにより、このタスクが支援されてもよいが、補足計算は除去されない。さらに、命令Ｉ５の取り込みは２つのキャッシュアクセスを要求するだろう。キャッシュから誤整列された命令を取り込むこの２重のアクセスは付加的な電力消費およびプロセッサ遅れを引き起こす。
【発明の概要】
【０００９】
可変長命令の固定数が命令キャッシュの各ラインに記憶される。可変長命令は予め定められた境界に沿って整列される。ラインにおける各命令の長さ、従って命令が占めるメモリのスパンが知られていないので、次に続く命令のアドレスが計算され、キャッシュラインで記憶される。命令境界を確認し、命令を整列させて、次のフェッチアドレスを計算することは、キャッシュに命令を置く前にプレデコーダで行なわれる。
【００１０】
一実施例では、可変命令長を持つプロセッサにおいてキャッシュ管理の方法はキャッシュラインごとに命令の固定数を記憶することを含む。
【００１１】
別の実施例では、プロセッサは、可変長の命令を実行するように作動する命令実行パイプラインと、キャッシュラインごとに可変長命令の固定数を記憶するように作動する命令キャッシュを含んでいる。プロセッサはさらに、キャッシュラインに命令を書き込む前に予め定められた境界に沿って可変長命令を整列させるように作動するプレデコーダを含んでいる。
【図面の簡単な説明】
【００１２】
【図１】可変長命令を記憶する先行技術命令キャッシュの図である。
【図２】プロセッサの機能ブロック図である。
【図３】予め定められた境界に沿って整列された可変長命令の固定数を記憶する命令キャッシュの図である。
【発明を実施するための形態】
【００１３】
図２は、パイプラインアーキテクチャと階層的記憶構造の両方を使用する、代表的なプロセッサ１０の機能ブロック図を示す。プロセッサ１０は制御論理１４にしたがって命令実行パイプライン１２で命令を実行する。パイプラインはパイプ段階に組織化された様々なレジスタあるいはラッチ１６、および１つ以上の論理演算装置（ＡＬＵ）１８を含んでいる。多目的レジスタ（ＧＰＲ）ファイル２０は、記憶階層のトップを含むレジスタを提供する。
【００１４】
パイプラインは命令側変換索引バッファ（ＩＴＬＢ）２４によって管理されたメモリアドレッシングとパーミッションで命令キャッシュ（Ｉ-キャッシュ）２２から命令を取り込む。プレデコーダ２１は、Ｉ-キャッシュ２２にそれらを記憶する前にメモリから取り込まれた命令を検査する。下に議論されるように、プレデコーダ２１は命令境界を確認し、命令を整列させて、命令をＩ-キャッシュ２２に記憶する次のフェッチアドレスを計算する。
【００１５】
データは主変換索引バッファ（ＴＬＢ）２８によって管理されたメモリアドレッシングとパーミッションでデータキャッシュ２６からアクセスされる。様々な実施例では、ＩＴＬＢ２４はＴＬＢ２８の一部のコピーを含んでもよい。代わりに、ＩＴＬＢ２４およびＴＬＢ２８は統合されてもよい。同様に、プロセッサ１０の様々な実施例では、Ｉ-キャッシュ２２およびＤ-キャッシュ２６は統合、即ち一体にされてもよい。Ｉ-キャッシュ２２および/またはＤ-キャッシュ２６におけるミスは、メモリインタフェース３０の制御の下で、主（オフチップ）メモリ３２へのアクセスを引き起こす。
【００１６】
プロセッサ１０は様々な周辺機器３６へのアクセスを制御する、入力／出力（Ｉ／Ｏ）インターフェース３４を含んでいてもよい。当業者はプロセッサ１０の多くの変形が可能であることを認識するだろう。例えば、プロセッサ１０はＩおよびＤ-キャッシュ２２、２６のいずれかあるいは両方について第２のレベル（Ｌ２）キャッシュを含んでいてもよい。さらに、プロセッサ１０で示された機能ブロックの１つ以上は、特別の実施例から省略されてもよい。
【００１７】
ここに示された１つ以上の実施例によれば、プロセッサ１０は各キャッシュラインに可変長命令の固定数を記憶する。その命令は、好ましくは、例えば語境界のような予め定められた境界に沿って整列される。これは、命令境界を計算し、高速演算を可能にし、したがってプロセッサの性能を改善する必要から、デコードパイプ段階を緩和する。Ｉ-キャッシュ２２にこのように命令を記憶することは、また命令長検査および一度整列動作を行なうことにより電力消費を減少させる。Ｉ-キャッシュ２２のヒット率が一般に高い９０％であるので、毎回命令がＩ-キャッシュ２２から実行される命令境界を確認する必要の除去により、相当な省電力が実現され得る。
【００１８】
プレデコーダ２１は主メモリ３２およびＩ-キャッシュ２２間のパス中に挿入された論理を含む。プレデコーダ２１の論理は、メモリから検索されたデータを検査し、命令の数および長さを確認する。プレデコーダは、キャッシュラインに記憶されるキャッシュへの整列された命令を渡す前に、予め定められた、例えば語、境界に沿って命令を整列させる。
【００１９】
図３は、図１からの可変長命令の固定数をそれぞれ含んでいる、Ｉ-キャッシュ２２の２つの代表的ライン２００および２６０を示す（この例において、４つの命令が各キャッシュライン２００、２６０に記憶される）。キャッシュライン２００および２６０は１６バイトである。語境界が破線によって示される；半語境界は点線によって示される。命令は語境界に沿って整列される（即ち、各命令は語アドレスから開始する）。命令がパイプライン１２によってＩ-キャッシュ２２から取り込まれる場合、デコードパイプ段階は、キャッシュライン２００、２６０から適切な語を単に多重化し、直ちにオペレーションコードをデコードし始める。半語命令（例えばＩ３とＩ８）の場合には、キャッシュライン２００、２６０中のスペースの半語はそれぞれ未使用であり、図３で陰影により示される。
【００２０】
図１で示された先行技術キャッシュと比較して、図３のキャッシュ２２は２つのキャッシュラインに、９つではなく、８つの命令しか記憶しないことに注意を要す。Ｉ９の長さに対応する語スペース（オフセット０×０Ａおよび０×１Ｅにおける半語）は利用されない。キャッシュ２２に命令を記憶する効率のこの減少は、図３で示されたキャッシュ利用の単純性、改善されたプロセッサ・パワーおよびより低い電力消費の代償である。
【００２１】
さらに、キャッシュライン２００、２６０に可変長命令の固定数を割り当て、予め定められた境界に沿って命令を整列させることによって、命令は図１のＩ５のように、キャッシュラインを横切って誤整列されて記憶されない。したがって、単一命令を検索するため２つのキャッシュ２２のアクセスによって起される性能ペナルティおよび過大電力消費は、完全に除去される。
【００２２】
既知の全体長さ（キャッシュラインの長さ）を持つ命令の可変数ではなく、可変長命令の固定数が記憶されるので、次の逐次命令のアドレスはキャッシュライン２００のメモリサイズによって、１つのキャッシュライン２００のタグ２２０を単にインクリメントすることによって確認することができない。従って、一実施例では、命令が整列されるとき（Ｉ-キャッシュ２２にそれらを記憶する前に）、次のフェッチアドレスがプレデコーダ２１によって計算され、次のフェッチアドレスはキャッシュライン２００と共にフィールド２４０に記憶される。
【００２３】
次のフェッチアドレスの計算および記憶の代わりとして、一実施例によれば、タグ２２０からのオフセットが計算され、オフセットフィールド２４０におけるようにキャッシュライン２００と共に記憶される。したがって、次のフェッチアドレスはタグアドレスにオフセットを加えることにより容易に計算され得る。この実施例は、連続のアドレスフェッチがキャッシュラインを横切るたびごとにこの加算を行なうため処理遅延および電力消費を招く。他の実施例では、次のフェッチアドレスの計算を助けるために他の情報が記憶されてもよい。例えば、キャッシュライン２４０中の命令の固定数と等しい一組のビットが、例えば、全語長命令を示す１と半語長命令を示す０が対応する命令「スロット」に記憶されることにより、記憶されてもよい。メモリ中の命令のアドレス、従って次の逐次命令のアドレスは、その後この情報から計算されてもよい。当業者は、追加の次のアドレス計算援助が次の命令フェッチアドレスを計算するために工夫され記憶されることを容易に認識するだろう。
【００２４】
様々な実施例が、語および半語命令長を含む代表的なＩＳＡに関してここに詳説されたが、本発明はこれらの実施例に制限されていない。一般に、どんな可変長命令も予め定められた境界に沿って整列され、命令キャッシュ２２に固定数で有利に記憶され得る。さらに、ここに示されたそれとは異なっているサイズのキャッシュライン２４０、３００が様々な実施例の実行において利用されてもよい。
【００２５】
本発明の実施例は、ここに特別の特徴、その態様および実施例に関して記述されたが、多数の変形、修正および他の実施例が本発明の広い範囲内で可能であることは明白であり、従って、すべての変形、修正および実施例は発明の範囲内であると見なされるべきである。それ故、本実施例は例証され限定的でないものとしてすべての態様で解釈され得、添付請求項の意味および均等範囲内に入るすべての変更は、そこに包含されるように意図される。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［１］キャッシュラインごとに命令の固定数を記憶することを含む、可変命令長を持つプロセッサにおけるキャッシュ管理の方法。
［２］それらの長さを決定する命令を検査し、キャッシュにそれらを置く前に予め定められた境界に沿って命令を整列させることをさらに含む［１］の方法。
［３］各キャッシュラインを用いて次のフェッチアドレスを記憶することをさらに含む［１］の方法。
［４］キャッシュに命令を置く前に次のフェッチアドレスを決定することをさらに含む［３］の方法。
［５］各キャッシュラインを用いてオフセットを記憶し、オフセットはキャッシュライン・タグに加えられた時、次のフェッチアドレスを生じることをさらに含む［１］の方法。
［６］可変長の命令を実行するように作動する命令実行パイプラインと、
キャッシュラインごとに可変長命令の固定数を記憶するように作動する命令キャッシュと、
キャッシュラインに命令を書き込む前に予め定められた境界に沿って可変長命令を整列させるように作動するプレデコーダを含むプロセッサ。
［７］各キャッシュラインに関連した次のフェッチアドレスフィールドをさらに含む［６］のプロセッサ。
［８］プレデコーダがキャッシュラインに書き込まれた最後の命令に従う命令のアドレスを計算し、かつキャッシュラインの次のフェッチアドレスフィールドにアドレスを記憶するように作動する、［７］のプロセッサ。
【図１】
0005341163.tif 000003
【図２】
0005341163.tif 000004
【図３】
0005341163.tif 000005