(57)【要約】プロセッサーのフェッチセクションは命令を取得するための命令キャッシュといくつかのステージのパイプラインを備える。命令は、キャッシュライン境界を横切ってもよい。パイプラインステージは２つのアドレスを処理し完全な境界を横切る命令を回復する。そのような処理の期間に、命令の第２の部分がキャッシュに存在しないなら、第１のラインに関するフェッチは無効とされ再循環される。この第１のパスに対して、そのデータのいずれかをプロセッサーの後段のステージに渡すことなく、命令の第２の部分のためのアドレスの処理は、より高いレベルのメモリからキャッシュに命令データをロードするためのプリフェッチ要求として取扱われる。第１のラインアドレスが再びフェッチステージを通過すると、第２のラインアドレスが通常の順番で続き、命令の両方の部分は、キャッシュからフェッチすることができ、通常の方法で結合することができる。
2008541314.tif 000002
【特許請求の範囲】
【請求項１】
命令がメモリライン境界を横切るかもしれない、プログラマブルプロセッサーにおいて実行するためにメモリから命令をフェッチする方法において、
第１のアドレスに応答して命令データの第１のラインを最初にフェッチすることと、
命令データの第１のラインから、フェッチされる命令が、命令データの前記第１のラインと命令データの第２のラインとの間の境界を横切るか否かを決定することであって、命令データの前記フェッチされた第１ラインは、フェッチされる命令の第１の部分を含むことと、
フェッチされる前記命令が前記境界を横切ると決定すると、第２のアドレスに対応するキャッシュメモリのラインがフェッチされる前記命令の第２の部分を含むか否かを決定することと、
前記第２のアドレスに対応する前記キャッシュメモリがフェッチされる前記命令の前記第２の部分を含まないと決定すると、
（ａ）命令データの前記第１のラインの初期フェッチングを無効にし、前記第１のアドレスを再循環することと、
（ｂ）より高いレベルのメモリリソースから命令データの前記第２のラインをプリフェッチすることと、
（ｃ）前記再循環された第１のアドレスに応答して、命令データの前記第１のラインをフェッチすることと、
（ｄ）前記第２のアドレスに応答して、命令データの前記プリフェッチされた第２のラインをフェッチすることと、
（ｅ）命令データの前記フェッチされた前記第１および第２のラインから、フェッチされる命令の前記部分をコンパイルすることと、
を備えた方法。
【請求項２】
命令データの前記第１ラインの初期フェッチングを無効にすることは、命令データの前記初期フェッチされた第１のラインから、フェッチされる前記命令のいずれかを、前記プロセッサーの他のエレメントに出力することを防止する、請求項１の方法。
【請求項３】
前記プリフェッチングは、前記キャッシュメモリからの命令データの前記第２のラインの次のフェッチングの前に命令データの前記第２ラインのいずれかを前記プロセッサーの他のエレメントに出力することなしに、より高いレベルのメモリリソースからの命令データの前記第２のラインを前記キャッシュメモリにロードする、請求項２の方法。
【請求項４】
前記プリフェッチングのステップは、前記第２のアドレスに関するフェッチ動作を前記第２のアドレスに関するタッチ動作に変換することを含む、請求項３の方法。
【請求項５】
前記第２のアドレスに対応する前記キャッシュメモリが、フェッチされる前記命令の前記第２の部分を含まないと決定すると、次のアドレスに対してすでに始まったかもしれない任意のフェッチ関連処理をフラッシュすることをさらに備えた、請求項１の方法。
【請求項６】
プログラマブルプロセッサーのための命令をフェッチする方法において、
フェッチされる命令が命令ライン間の境界を横切ることを検出することと、
前記境界を横切る命令の第１の部分を含む命令データの第１のラインをフェッチすると、前記境界を横切る命令の第２の部分がキャッシュメモリに存在しないことを検出することと、
前記第２の部分が前記キャッシュメモリに存在しないことを検出することに応答して、命令データの前記第１のラインからフェッチされる命令のいずれかの出力なしに、命令データの前記第１のラインを再循環することと、
命令データの第２のラインをプリフェッチすることと、
前記再循環に基いて、命令データの前記第１のラインをフェッチし、命令データの前記プリフェッチされた第２のラインをフェッチすることと、
命令データの前記フェッチされた第１および第２のラインからの部分を結合し、前記境界を横切る命令を出力することと、
を備えた方法。
【請求項７】
前記第１のラインのフェッチの再循環は、前記第２の部分が前記キャッシュメモリに存在しないことを検出する前にフェッチされた前記第１のラインからフェッチされる前記命令の任意の部分を無効にすることを備えた、請求項６の方法。
【請求項８】
前記第２のラインのプリフェッチングは、前記第２のラインに関するフェッチング動作を前記第２のラインに関するプリフェッチング動作に変換することを含む、請求項６の方法。
【請求項９】
前記第２のラインのプリフェッチングと前記第１のラインの再循環されたフェッチングとの間の進行中の任意のフェッチ動作をフラッシュすることをさらに備えた、請求項６の方法。
【請求項１０】
下記を具備するパイプラインプロセッサーのためのフェッチセクション：
命令キャッシュ;
アドレスの入力ストリングにおいて各それぞれのアドレスに対応するキャッシュラインを識別するための第１の命令キャッシュ処理ステージ；
キャッシュラインの各識別に応答して、前記それぞれのアドレスに対応するキャッシュ内のメモリのラインから命令データを読む第２の命令キャッシュ処理ステージ；
前記第２の命令キャッシュ処理ステージにより読まれた命令データの１つまたはそれ以上のラインに応答して、フェッチされた命令を出力する命令データアライメントセクションであって、前記命令データアライメントセクションはまた、最初に前記命令キャッシュ内に発見されなかった任意の命令または部分に対してより高いレベルのメモリリソースからデータを取得する；
命令が前記第１および第２のアドレスに対応するライン間の境界を横切ることを検出し、第２のアドレスに対応する前記キャッシュのラインが最初は、前記境界を横切る命令の部分を含まないことを検出すると、前記第１の命令キャッシュ処理ステージへの第１のアドレスに関するフェッチを再循環し、前記第２のアドレスに関するフェッチをプリフェッチに変換し、前記命令データアライメントセクションに、より高いレベルのメモリリソースから前記命令キャッシュに命令データのラインをロードさせる手段。
【請求項１１】
前記命令キャッシュの各ラインは、２またはそれ以上の異なる長さの複数の命令を記憶することができる、請求項１０のフェッチステージ。
【請求項１２】
前記再循環する手段は、前記第１のアドレスを前記第１の命令キャッシュ処理ステージの入力に渡すための再フェッチステージを含む、請求項１０のフェッチステージ。
【請求項１３】
前記フェッチされた命令をデコードするためのデコードステージと、デコードされた命令に従って処理するためにオペランドデータを取得するための読み出しステージと、オペランドデータに対してデコードされた命令を実行するための実行ステージと、実行結果を記憶装置に書くためのライトバックステージとをさらに備えた、請求項１０のフェッチステージを備えたパイプラインプロセッサー。
【請求項１４】
下記を具備するパイプラインプロセッサーのためのフェッチセクション：
命令キャッシュ;
複数のアドレスの各々を順番に処理し、各それぞれのアドレスに対応する命令または部分を含んでいてもよい命令キャッシュ内のメモリのラインを識別し、識別されたラインからデータを読む、少なくとも１つの処理ステージ；
フェッチされる命令がキャッシュライン境界を横切ることを検出し、２つのアドレスされたキャッシュラインの第２のラインにおいて境界を横切る命令の部分の欠落を検出し、この検出に応答して、前記２つのキャッシュラインの第１のラインに相当するアドレスに関するフェッチを無効にし、少なくとも１つの処理ステージへの入力のために対応するアドレスを再循環し、より高いレベルのメモリから、第２のキャッシュラインに対する欠落の部分を含むデータをプリフェッチし、前記フェッチセクションを介して前記対応するアドレスの第２のフロー上の前記境界を横切る命令の完全なフェッチをイネーブルにする手段。
【請求項１５】
前記少なくとも１つの処理ステージは、下記を含む請求項１４のフェッチセクション：
アドレスの入力ストリング内の各それぞれのアドレスに対応するキャッシュラインを識別するための第１の命令キャッシュ処理ステージと、
キャッシュラインの各識別に応答して、前記それぞれのアドレスに対応するキャッシュ内のメモリのラインから命令データを読む第２の命令キャッシュ処理ステージと、
前記第２の命令キャッシュ処理ステージにより読まれた命令データの１つまたはそれ以上のラインに応答して、フェッチされた命令を出力する命令データアライメントセクション、前記命令データアライメントセクションはまた前記命令キャッシュに最初は発見されない任意の命令または部分に対してより高いレベルのメモリリソースからデータを取得する。
【請求項１６】
命令キャッシュの各ラインは、２またはそれ以上の異なる長さの複数の命令を記憶することができる、請求項１４のフェッチステージ。
【請求項１７】
前記再循環する手段は、前記少なくとも１つの処理ステージの入力に前記第１のアドレスを渡す再フェッチステージを含む、請求項１４のフェッチステージ。
【請求項１８】
さらに下記を具備する、請求項１４のフェッチステージを備えたパイプラインプロセッサー：
前記フェッチされた命令をデコードするデコードステージ、デコードされた命令に従って処理するためにオペランドデータを取得するための読みだしステージ、オペランドデータに対してデコードされた命令を実行する実行ステージ、実行結果を記憶装置に書くライトバックステージ。
【発明の詳細な説明】
【技術分野】
【０００１】
この主題は、特に、プロセッサーが命令をフェッチしようと試みているキャッシュに命令の第２の部分がまだ存在しない場合（キャッシュミス）に、キャッシュライン境界を横切る命令のフェッチを効率的に処理するための技術およびプロセッサーアーキテクチャに関する。
【背景技術】
【０００２】
現代のマイクロプロセッサーと他のプログラム可能なプロセッサー回路は、メモリのヒエラルキーを利用して命令を記憶し供給する。一般的なヒエラルキーは、プロセッサーのコア、例えば、プロセッサーチップ上に相対的に近接している命令キャッシュまたはＬ１キャッシュを含む。命令は、命令とデータの両方を記憶する、やや遠いキャッシュまたはＬ２キャッシュからＬ１命令キャッシュにロードされる。１つまたは両方のキャッシュには、メインメモリからの命令がロードされる。メインメモリには、プロセッサーを内蔵する装置のディスクドライブのようなより遠隔なソースからロードされてもよい。キャッシュメモリは性能を強化する。プロセッサーコアへの近接性のために、例えばＬ１キャッシュからの命令のフェッチは相対的に高速である。
【０００３】
多くの実施において、命令キャッシュのラインは多数の命令を保持する。命令あたりのビット数がすべての命令に対して固定であるなら、キャッシュラインはそのような命令の整数を保持するサイズに調節することができる。例えば、各命令が３２ビットならば、２５６ビットキャッシュラインは８つのそのような命令を保持するであろう。そして、ラインに記憶された最初の命令と最後の命令の境界は、キャッシュラインの境界と一致するかまたはそろえられる。しかしながら、プロセッサーが異なる長さの命令、例えば、３２ビット命令と１６ビット命令を処理する場合、所定のキャッシュライン内の命令はそのラインの境界とそろわないかもしれない。命令が２つのキャッシュラインに重ならないかもしれないことをプロセッサーアーキテクチャが命じるなら、多少の無駄があるであろう。しかしながら、多くのアーキテクチャはそのようなキャッシュ制限を課さない。後者の場合、一方のラインに一部が記憶され、他方のラインに残りが記憶された命令を読む際に問題が生じる。例えば、３２ビット命令において、１６ビットがキャッシュの１つのラインの終わりに記憶され、他の１６ビットが次のキャッシュラインの初めに記憶される場合である。
【０００４】
最新のプログラマブル処理回路はしばしば実行速度を改良するために、パイプライン処理アーキテクチャに依存する。パイプライン化されたプロセッサーは、パイプラインを移動する各命令をシーケンシャルに処理するために複数の処理ステージを含む。もちろん、一方のステージが命令を処理している間、パイプラインに沿った他方のステージは同時に他の命令を処理している。パイプラインの各ステージは、各プログラム命令の全体の処理において必要な異なる機能を実行する。順番および／または機能は多少変化してもよいが、典型的なシンプルなパイプラインは命令フェッチステージ、命令デコードステージ、メモリアクセスまたは読み出しステージ、命令実行ステージおよび結果ライトバックステージを含む。より進歩したプロセッサー設計は、これらのステージのいくつかまたはすべてをいくつかの別個のステージに分解してこれらの機能のサブ部分を実行する。スーパースカラー設計は、機能をさらに分解し、および／または二重の機能を提供し、同様の深さの並列パイプラインにおいて動作を実行する。
【０００５】
フェッチステージはヒエラルキーメモリシステムから命令を取得するパイプラインプロセッサーの部分です。多くのパイプライン設計において、フェッチ動作は２以上のステージに分解される。これらのステージのうち、１つのステージは、Ｌ１キャッシュからフェッチしたとき命令を収集し、より高いレベルのメモリと通信し、Ｌ１キャッシュに発見されなかった命令データを取得する。
【０００６】
命令の境界がキャッシュライン境界と交差しており、所望の命令の一部が今までのところＬ１キャッシュに存在しない場合にそのようなフェッチ動作において問題が起こり得る。例えば、Ｌ１キャッシュからフェッチされた命令を収集するステージが命令の第１の部分を受信するなら、そのステージは、命令がＬ１キャッシュ内に発見されたのでより高いレベルのメモリと通信しないであろう。同様に、そのステージがより高いレベルメモリからの第１の部分を含むラインをすでに取得しているなら、そのステージは、命令の他の部分を含むラインに対して第２の要求を開始しないであろう。代わりに、そのステージは、先行するステージにより次のキャッシュラインの処理から命令の残りを受信するために待つ。しかしながら、先行するステージが、所望の命令の残りの部分がＬ１キャッシュの適切なラインに存在しない（キャッシュミス）を検出するなら、命令の残りの部分を提供することができず、より高いレベルのメモリへの能力を有さず、命令の失われた部分を得ることができない。通常、ミスの場合には、このステージは、アドレスを次のステージに落とし、より高いレベルのメモリからデータを要求するが、次のステージは、分割された命令の第２の部分が先行するステージから来るのを待っている。いくつかの極端な場合において、フェッチ処理は、いずれのステージも要求することができない命令の一部を待っているある期間ロックするかもしれない。
【０００７】
上記の識別された問題を回避するために、パイプラインのフェッチセクション内の２以上のステージが他のメモリソースから命令を要求することを可能にすることは可能かもしれない。しかしながら、そのような解法は、フェッチステージの構成において、他のメモリリソースへのフェッチステージの相互接続において、およびフェッチステージへのおよびフェッチステージを介した命令のフローの管理において、複雑性を追加する。高性能プロセッサー設計の場合、できるだけ少ない場所からより高いレベルのメモリリソースに要求を出すことが望ましい。その理由は、例えば、各そのような要求は、要求されたデータの戻りを待っている間他の処理を遅延させるからである。それゆえ、命令がキャッシュライン境界を交差するかもしれない場合、命令をフェッチする際に改良の余地が依然としてさらにある。
【発明の開示】
【０００８】
本明細書における教示は、命令がキャッシュライン境界を交差する場合に、キャッシュミスのより効率的な処理を提供する。本質的に、命令の第１の部分のためのキャッシュラインに相当するアドレスは、キャッシュラインからの命令の関連する第１の部分のいずれもがパイプラインの後段のステージに落ちることなく、パイプラインのフェッチ部分の先頭に再循環される。命令の第２の部分のためのラインに相当するアドレス、すなわち、キャッシュミスを生じたアドレスは、プリフェッチ要求として取扱われる。ミスがあるので、プロセッサーは、必要な命令データを命令キャッシュにローディングすることを開始するが、このフェッチングシーケンスに関してこのデータもまたパイプラインの後段のステージに落下しない。第１のラインアドレスが再びフェッチステージを通過し、第２のラインアドレスが通常のシーケンスで続くと、命令のすべての部分が入手可能であり、フェッチすることができ通常の方法で結合することができる。
【０００９】
それゆえ、この教示の観点は、プログラマブルプロセッサーにおいて実行するためにメモリから命令をフェッチする方法を含む。この場合、命令はライン境界を横切るかもしれない。そのような方法の例は、フェッチされる命令が命令ライン間の境界を横切ることを検出することを含んでいるかもしれない。境界を横切る命令の第１の部分を含む命令データの第１のラインをフェッチすると、境界を横切る命令の第２の部分がキャッシュメモリに存在するか否かの決定がなされる。そうでなければ、データの第１のラインからいずれの命令も出力することなく、命令データの第１ラインのフェッチが再循環される。従って、この方法は、命令データの第２のラインをプリフェッチすることを含む。これは命令の欠けた部分を含む。第１ラインのためのフェッチを再循環した後、次に、処理は、命令データの第１のラインと命令データの第２のラインを伴う。命令データのフェッチされた第１および第２のラインからの部分は結合され、境界を横切る命令を出力する。
【００１０】
第１のラインに関する第２のフェッチ前に始まった任意の後のフェッチがあるなら、すなわち、再循環されたフェッチと、第２のラインのためのプリフェッチとの間に進行中の任意の他のフェッチ動作があるなら、任意のそのような介在するフェッチ処理は、フェッチパイプラインから一気に消去される。第１のラインに関するフェッチが再循環されると、イニシャルパスの期間にフェッチから生じたデータは無効とされ、データはフェッチセクションから脱落しない。
【００１１】
この教示の他の観点は、パイプラインプロセッサーのようなプログラマブルプロセッサーを介して処理するために命令をフェッチするフェッチセクションまたはシステムを含む。一例において、そのようなフェッチセクションは、命令キャッシュと、順にアドレスを処理するための少なくとも１つの処理ステージを含む。アドレス毎に、処理は、各それぞれのアドレスに対応する命令または命令の一部を含んでいてもよい命令キャッシュにおいてメモリの１ラインを識別する。処理はまた、識別されたラインからデータを読む。ライン間の境界を横切る命令とその命令のための第２のアドレスに対応するキャッシュのラインが最初は、境界を横切る命令の部分を含まないなら、第１のアドレスに関するフェッチを第１の命令キャッシュ処理ステージに再循環し、第２のアドレスに関するフェッチをプリフェッチに変換し、より高いレベルのメモリリソースから命令キャッシュへの命令データの１ラインのローディングを可能にする手段が提供される。
【００１２】
この教示の他の観点は、そのようなフェッチを内蔵するプログラマブルプロセッサー特にパイプラインプロセッサーを含む。
【００１３】
さらなる目的、利点および新規な特徴は、以下の記述に一部分述べられ、そして一部分は、以下の添付した図面を調べることにより当業者に明白になるであろうし、または例の生産または動作により学習してもよい。この教示の目的と利点は、特に添付されたクレームで指摘された方法論、手段および組み合わせの実施または使用により実現または達成されてもよい。
【発明を実施するための最良の形態】
【００１４】
作図は、限定する目的ではなく例示する目的でこの教示に従う１つ以上の実施を描く。図において、同一の参照数字は、同一または類似のエレメントを指す。
【００１５】
以下の詳細な記載において、関連する教示の完全な理解を提供するために一例として多数の特定の詳細が述べられる。しかしながら、この教示はそのような詳細が無くても実施してもよいことは当業者には明白でなければならない。他のインスタンスにおいて、この教示の不必要な不明瞭な観点を回避するために、詳細なしに、よく知られた方法、手続、コンポーネント、回路が相対的に高いレベルで記載されている。
【００１６】
ここに議論されるように、プロセッサーのための命令をフェッチするように意図されたプロセッサーのシステムまたはセクションの一例は、命令キャッシュおよび複数の処理ステージを含む。そのようなものとして、フェッチセクション自体は典型的には処理ステージのパイプラインから形成される。命令はキャッシュライン境界を横切ることが許される。より高いレベルのメモリへの要求がキャッシュライン境界を横切る命令の第１の部分を有しているとき、ステージは次のラインをチェックする。境界を横切る命令データの第２の部分がキャッシュ（Ｌ１）に含まれていないとそのステージが決定するなら、そのステージは第１のラインからの命令の一部のイニシャルフェッチを無効にし、第１のフェッチアドレスをフェッチパイプラインのスタートに戻す。第２のアドレスのための処理がそのステージに移動すると、第２のフェッチはタッチ(touch)またはプリフェッチ動作に変換される。それゆえ、処理はデータを命令キャッシュにロードするが、フェッチパイプラインを介したこの第１のパス(pass)上のデコードステージに第２ラインをパスしない。その結果、命令の第２の部分を含む命令ラインはキャッシュに存在する。（再循環の後で）フェッチステージが第１のアドレスを再び処理するとき、第２のアドレスが再び通常の順番で続き、第２アドレスのためのキャッシュ内のラインは現在境界を横切る命令の必要な第２の部分を含む。第２のラインからの所望の命令のための部分は、フェッチされた第１のラインに落とすことができ、（第１ライン内のデータのほかの不必要な断片を交換する）、フェッチステージからの１サイクルの出力内で所望の命令を完了する。
【００１７】
この例において、第２のフェッチを含む（先行する）ステージより高いパイプラインの任意のステージは、一気に消去される。その結果、命令フェッチパイプラインを介した第２のパスの期間に、所望の命令が１サイクルで結合されるまで命令ラインデータはフェッチパイプラインから出力されない。
【００１８】
添付された図面に図解され、以下に議論される例について詳細に言及される。図１は、パイプラインプロセッサーと関連するメモリのいくつかのステージを図解する。図２は全体的なパイプラインを描画するのに対し、図１は、メモリからのフェッチ命令に含まれるようにパイプラインの第１のセクションの多少より詳細と、ここに述べられるようにキャッシュライン境界を横切る命令を処理することを示す。
【００１９】
図２を参照すると、簡単化されたパイプラインプロセッサー１０は、パイプライン処理ステージの５つの主要な処理ステージを含む。すなわち、フェッチ１１、デコード１３、読み取り１５、実行１７、および書き戻し１９である。図における矢印は、論理的なデータフローを表し、必ずしも物理的な接続ではない。当業者は、これらのステージのいずれかまたは全ては、関連する機能の部分を実行する複数のステージに分解してもよいし、またはパイプラインは、さらなる機能性を提供するためにさらなるステージを含んでもよいことを認識するであろう。実際のスーパースカラー例は２以上の並列パイプラインから構成されてもよい。各々は例えば複数のステージからなる。議論の目的のために、ステージの大範疇のいくつかは単一のステージとして示される。しかし、典型的には、各々は２以上のステージに分解される。キャッシュライン境界を横切る命令の処理のこの議論に対する特定の関心のセクションはフェッチセクション１１である。それゆえ、そのセクションを形成する別個のステージは、図１においてより詳細に示される。図１と図２に別個に示されていないけれども、パイプライン１０の各ステージは、関連するロジック機能を実施する状態機械または同種のものおよび命令および／または任意の処理結果を次のステージにパスするまたはＧＰＲレジスタファイル２９に戻すための関連するレジスタを含む。
【００２０】
例示パイプライン１０において、パイプラインプロセッサー１０の第１のセクションは命令フェッチ機能１１を実行する。フェッチセクションは後段のステージによる処理のために命令を取得するための１つ以上のステーションを備える。フェッチステージ（複数の場合もある）は、一般的にメモリ２１により表されるメモリのヒエラルキーから命令を取得する。メモリ２１は典型的には、ときどきレベル１（Ｌ１）キャッシュ２３、レベル２（Ｌ２）キャッシュ２５と呼ばれる命令キャッシュとメインメモリ２７を含む。命令は他のソース、例えば、ブートＲＯＭまたはディスクドライブからメインメモリにロードされてもよい。命令キャッシュのようなメモリのいくつかは、プロセッサー１０のコア内にまたはコアに近接して存在していてもよいが、メインメモリのような他のメモリはプロセッサー１０の外側にまたは別個に存在するであろう。いくつかのアーキテクチャにおいて、命令キャッシュ２３は（図１の例に示すように）フェッチセクション１１のエレメントであってもよい。
【００２１】
Ｌ２キャッシュ２７は命令と処理されるデータ（オペランドデータ）の両方を記憶する。Ｌ２キャッシュ２７は、例えばステージ１５によりオペランドデータ読み取りの期間に使用される命令キャッシュ２３と（図示しない）データキャッシュの両方により共有される。Ｌ２キャッシュ２７は命令キャッシュ２３より大きくアクセスが遅い。同様に、メインメモリ２７はより大きくアクセスするのが遅いがかなりのより多くの情報を記憶する。例えば、命令キャッシュ２３からのフェッチは、３つの処理サイクルを必要とするかもしれない。Ｌ２キャッシュ２５からのフェッチは、１０かそこらの処理サイクルを消費するのに対して、メインメモリ２７からのフェッチは、おおよそ１００処理サイクルを必要とするかもしれない。
【００２２】
フェッチステージ１１は各命令をデコードステージ１３に供給する。命令デコードステージ１３のロジックは受信した命令バイトをデコードし、結果をパイプラインの次のステージに供給する。
【００２３】
ステージの次の大範疇は、ステージ１５により集合的に表される、データアクセスまたは読み取りを提供する。読み出しステージ（複数の場合もある）１５のロジックは、汎用レジスタ（ＧＰＲ）ファイル２９内の指定されたレジスタ内のオペランドデータをアクセスする。ある場合には、読み出しステージ（複数の場合もある）１５のロジックはメモリまたは（図示しない）他のリソースからオペランドデータを取得してもよい。
【００２４】
命令とオペランドデータは、実行機能を提供する１つ以上のステージ１７に渡される。実行ステージ（複数の場合も有る）は本質的には、検索されたオペランドデータ上の各命令の特定の機能を実行し、結果を生成する。実行機能を提供するステージまたはステージ群１７は、例えば算術論理演算ユニット（ＡＬＵ）を実施してもよい。ステージ１９は結果をファイル２９内のレジスタまたはＬ２キャッシュ２５および／またはメインメモリ２７のようなメモリに書き戻す。
【００２５】
上で述べたように、図１は、多少より詳細に、パイプライン、およびフェッチセクション１１を形成する関連したエレメントのステージを示す。そこに示されるように、例示フェッチセクション１１は、アドレスをシーケンシャルに処理するための３つのパイプラインステージ３１、３３、３５を含む。フェッチパイプラインセクション１１のステージを介したアドレスフローとして、いつでも１つのアドレスのみがステージ群の各自に存在し、ステージ群の各自で処理されている。一般的に、与えられたアドレスに対して、（ＩＣ１ステージ３１内の）第１のサイクルはアドレスを処理し、命令キャッシュ２３の適切なメモリラインのためのタグを識別する。（ＩＣ２ステージ３３内の）第２のサイクルはタグを用いて命令キャッシュ２３の特定ラインをアクセスする。フェッチパイプラインの命令データアライメント（ＩＤＡ）セクションは、ＩＣ２ステージ３３から落ちたアドレスデータを処理するためのＩＤＡステージ３５と、実際の命令を抽出するためにｉＣａｃｈｅ２３から落ちたデータを処理するためのＩＤＡデータステージ３９とを含む。それゆえ、（ＩＤＡエレメント３５および３９内の）第３のサイクルは命令キャッシュ２３の特定ラインからのデータを処理し、デコードステージ１３に出力するために、そのライン上の８以上の命令から少なくとも１つの命令、例えば１６ビットまたは３２ビット命令を回復する。プロセッサーは、ＩＤＡステージ内のキャッシュデータのラインから２以上の命令を抽出するように設計されてもよいことを当業者は理解するであろう。
【００２６】
さらに具体的に言うと、命令のアドレスは意図された実行の順番に第１のステージＩＣ１  ３１に供給される。多くの場合、順番はシーケンシャルである。しかし、プログラム実行は順番を変えてもよい。例えば、条件付分岐命令の場合に条件の発生に応じて変えてもよい。命令キャッシュ２３のメモリのラインは、対応するタグを用いてアクセスされる。第１の命令キャッシュ処理ステージ（ＩＣ１）３１はコンテンツアドレッサブルメモリ（ＣＡＭ）を用いて、受信した命令アドレスに応答して、キャッシュラインのためのタグを識別する。タグはキャッシュされた命令をサーチするために使用されたアドレスのサブセットである。本質的に、ＣＡＭ（ＩＣ１）ステージ３１はアドレス（タグ）を取り、それをキャッシュ２３において一致することができる可能なタグと比較し、サーチ結果のセットを作成する。アドレスがステージ３３にあるときにこれらはＣＡＭサイクルの終わりで捕らえられ、ＲＡＭ（ＩＣ２）サイクルの期間に使用される。従って、ＩＤＡデータステージ３９に捕らえられるようにキャッシュ２３から正しいデータを導く。パイプラインホールドがキャッシュによってＩＤＡに出力されるデータの迅速な捕獲を防止する場合に、図１のキャッシュ２３の出力において示されるラッチはトランスペアレントラッチである。
【００２７】
上述したように、１つのタグが命令キャッシュ２３内のメモリの１ラインに相当するが、各ラインは多数の命令を保持する。それゆえ、メモリからの指定されたラインを回復するために１つのタグの処理は、ＩＣ２ステージ３３における複数の記憶された命令を回復する。ここでＩＤＡ（命令データアライメント）ステージと呼ばれる第３のステージ３５は、ＩＤＡデータ処理セクション３９を制御し、選択された命令ラインからデータを受信し処理する。命令キャッシュ２３のボトムラインまたはレジスタ３７は、選択されたメモリラインからの命令データを保持する。ＩＤＡデータセクション３９はレジスタ４１を含みラッチ３７からデータを受信し処理する。一例において、レジスタ４１は６４ビットラッチであってもよい。ステージ３５およびレジスタ３７におけるＩＤＡ処理は本質的に命令キャッシュ２３のボトム３９から適切なビットを選択し、命令として改編するためにビットを整列するように必要に応じてこれらのビットを再組織化し、回復された命令をデコードステージ１３に出力する。後にさらに議論されるように、ＩＤＡデータセクション３９の他のエレメントはキャッシュミスの場合により高いレベルのメモリ２５および２７から命令データを取得するような関連した機能を実行する。
【００２８】
Advanced Risc Machines社によりライセンスされた'ARM'タイププロセッサーのようないくつかのプロセッサーアーキテクチャは少なくとも２つの命令セットをサポートする。この場合１つのセットの命令は他のセットの命令とは異なる長さを有する。例えば、ＡＲＭタイププロセッサーにおいて、標準命令は３２ビットの長さである。第２のまたはサム(Thumb)命令セットは、ＡＲＭ状態における対応物とは異なって符号化された１６ビットの圧縮された命令および３２ビットの命令から構成される。１６ビットサム(Thumb)命令は３２ビットのＡＲＭ等価物に解凍され、従って、通常の方法で処理することができる。しかしながら、低減された長さのために、１６ビットサム(Thumb)命令は種々のメモリ装置においてより少ない記憶を必要とし、またはプロセッサー１０と関連している。典型的に、より長い語長を有する命令はより広範囲の動作を提供し、および／またはより強力なまたはより複雑な動作を提供する。上述したように、より短い語長を有する命令は、より短い命令セットの限定された能力が適切であるプログラムまたはサブルーチンに対してメモリ節約を提供する。
【００２９】
マシンはいくつかの状態−ARM, Thumb, Jazelle-X/T2EE等の１つで動作し、その状態に対して設計された命令に対してのみ動作してもよい。ＡＲＭ状態は３２ビット命令のみを含み、任意のエンコーディングは５つの最上位ビットにおいて適法である。Ｔ２ＥＥがそうであるように、サム(Thumb)状態は１６ビット命令と３２ビット命令の混合物を含む。これらの状態において、５つの最上位ビットは、問題となっている命令が１６ビット命令かまたは３２ビット命令か否かを決定する。
【００３０】
図３に示されるように、２５６ビットキャッシュメモリラインの一例は、８つの３２ビット命令を保持していてもよい。ＡＲＭにおいて、すべての命令は３２ビットワードで構成され、すべての３２ビット命令は、例えば、命令キャッシュ２３のライン内の３２ビットワードライン境界と一致する。キャッシュラインが１６ビットのサム(Thumb)命令のみを含むなら、例えば、プロセッサーがサム(Thumb)モードで動作しているなら、図４に示すように同じキャッシュラインは１６の１６ビット命令を保持していてもよい。いくつかのプロセッサーおよび／またはサム(Thumb)を含むいくつかの動作モードは３２ビット命令と１６ビット命令の混合を可能にするであろう。従って１つのキャッシュラインは、３２ビット命令と１６ビット命令の混合を含むであろう。
【００３１】
図５は各キャッシュライン上で３２ビット命令と１６ビット命令の異なる組み合わせを保持する、２つの連続したラインを示す。ライン内の命令の配置は全く任意であり、プロセッサー１０が異なるＡＲＭ命令およびサム(Thumb)命令に対して動作するとき、時間に対して変化するであろう。時々、命令はキャッシュライン境界と一致するであろう。しかしながら、図５の例により表されるように、３２ビット命令が２つのキャッシュライン間の境界を横切る状況が生じるであろう。この例において、第１ラインＣＬ１上の最後の１６ビットは、３２ビット命令のハーフＡを保持する。第２ラインＣＬ２の最初の１６ビットは同じ３２ビット命令の他のハーフＢを保持する。今、図１のフェッチパイプライン１１を介したＡ−Ｂ命令の処理について考える。
【００３２】
第１の処理サイクルの期間に、ＩＣ１ステージ３１は、パートＡを含むラインＣＬ１に対応するアドレスを最初に受信し、そのアドレスを処理して、ラインＣＬ１のためのタグを回復する。次の処理サイクルにおいて、ＩＣ２ステージ３３はそのタグを用いて、ＣＬ１ラインをアクセスし、そのライン上のデータを命令キャッシュ２３のボトムにおけるラッチ３７に移動する。また、キャッシュ２３はヒット（Ｈ）またはミス（Ｍ）ライン４３にヒット表示を供給し、キャッシュのボトムにおけるラッチ３７に今存在するＣＬ１ラインは命令の所望のパートＡを含むことを表示する。ＩＣ２がＣＬ１のためのサーチ結果を処理している間、すなわち、第２の処理サイクルの期間、ＩＣ１ステージ３１は次のアドレス、この場合、パートＢを含むラインＣＬ２に対応するアドレスを受信する。ＩＣ１ステージ３１はそのアドレスを処理し、ラインＣＬ２のためのサーチ結果を回復する。
【００３３】
フェッチ処理の第３のサイクルにおいて、パートＡを含むラインＣＬ１のためのアドレスは、ＩＤＡステージ３５に落ちる。前のサイクルからのヒット（Ｈ）表示に応答して、ＩＤＡステージ３５の処理は、ＩＤＡデータセクション３９内のレジスタ４１に、命令キャッシュ２３のボトムのラッチ３７から、命令のパートＡの１６ビットを含むビットを捕らえさせる。同時に、ＩＣ２ステージ３３はラインＣＬ２のためのタグを使用してメモリのそのラインからデータを回復し、データを命令キャッシュ２３のボトムにおけるラッチ３７にロードする。
【００３４】
ＩＤＡステージ３５が第１のアドレスを受信すると、ラッチ３７から降りてくるデータを調べる。本質的に、それは所望の命令のためのデータを探している。その解析の一部として、それは、要求された命令がキャッシュライン境界を横切るかどうかを識別するであろう。
【００３５】
命令の例としてＡＲＭおよびサム(Thumb)を用いて、３２ビットサム(Thumb)命令は常に、５つの最上位ビットの３つの可能な値（１１１０１；１１１１０；１１１１１）の１つで始まる。本質的に、ロジックは、ラッチ４１内のデータの各１６ビット部分を見ることができる。５つの最上位ビットが３２ビット命令のための３つの必要な値の１つを有していないなら、１６ビットはサム(Thumb)命令を表す。しかしながら、５つの最上位ビットが３２ビット命令のために必要な３つの値の１つを有することをロジックが発見するごとに、ロジックは、１６ビットを３２ビット命令の最初のハーフとして認識する。スロットがキャッシュラインのトレーリングエンド(trailing end)にないとすると、ライン上の次の１６ビットは、３２ビット命令の他のハーフになるであろう。３２ビット命令のための３つの値の１つを有するスロットが、５つの最上位ビットとして、キャッシュラインのトレーリングエンドにあるなら、３２ビット命令はキャッシュライン境界を横切る。それゆえ、ＩＤＡステージ３５は、命令のパートＡが第１のラインＣＬ１の終わりにあると決定することができるが、所望の命令のパートＢを発見するために他のラインを見る必要がある。
【００３６】
最初に、我々は、この例のために、命令の他の部分は次のキャッシュラインＣＬ２に含まれると仮定した。フェッチ処理の第２のサイクルの期間に、キャッシュ２３はまた、キャッシュ２３のボトムにあるラッチ３７に今あるＣＬ２ラインは、命令の所望のパートＢを含むことを示すヒット（Ｈ）表示をＨ／Ｍライン４３に供給する。このようにして、パートＢは、キャッシュのボトムに現れる。ＩＤＡステージ３５は、キャッシュラインデータの１６ビットセクションを再び調べ、ラインＣＬ１とラインＣＬ２の間の境界を横切る命令の１６ビットの第２の部分を発見する。ＩＤＡステージ３５はレジスタ４１に所望の命令のさらなるパートＢを捕らえさせる。図６に図式的に表されるように、断片は適切に整列されていないかもしれないけれども、レジスタ４１を形成する６４ビットラッチは所望の命令の両方の断片を含む。ＩＤＡデータステージ３９とレジスタ４１によるさらなる処理は、図７に図式的に表すように、２つのパートＡおよびＢのデータビットを３２ビット命令に整列し結合し、結合された命令をデコードステージ１３に渡す。
【００３７】
先行する例は、所望の命令のパートＡとパートＢの両方が命令キャッシュ２３内のＣＬ１キャッシュラインとＣＬ２キャッシュライン内に存在する、すなわち、ヒット−ヒット状況であると仮定される。しかしながら、当業者は、これは常にそうなるとは限らないことを理解するであろう。命令キャッシュ２３のアクセスされたライン内の命令データに対して、命令の第２の部分をフェッチするための試みはキャッシュミスを生じるであろう状況が起こるであろう。今、ヒットミスについて考える。第１のパートＡはＣＬ１ライン（ヒット）に存在するがパートＢは、ＩＣ２ステージ３３の処理により回復されるとき（ミス）、ＣＬ２ライン内に最初は存在しない。
【００３８】
先の例のように、第１の処理サイクルの期間に、ＩＣ１ステージ３１は最初にパートＡを含むラインＣＬ１に対応するアドレスを受信し、そのアドレスを処理して、ラインＣＬ１のためのサーチ結果を回復する。次の処理サイクルにおいて、ＩＣ２ステージ３３は、これらのサーチ結果を用いてＣＬ１ラインをアクセスし、そのライン上のデータを命令キャッシュ２３のボトムのラッチ３７に移動する。キャッシュ２３はまた、キャッシュのボトムにおけるラッチ３７に今存在するＣＬ１ラインは、命令の所望のパートＡを含むことを表示するヒット（Ｈ）表示をライン４３上に供給する。ＩＣ２がＣＬ１のサーチ結果を処理している間、すなわち、第２の処理サイクルの期間、ＩＣ１ステージ３１は、次のアドレス、この場合、パートＢを含むと期待されているラインＣＬ２に対応するアドレスを受信する。ＩＣ１ステージ３１はそのアドレスを処理し、ラインＣＬ２のためのサーチ結果を回復する。
【００３９】
フェッチ処理の第３のサイクルにおいて、パートＡを含むラインＣＬ１のためのアドレスは、ＩＤＡステージに降りてくる。先のサイクルからのヒット（Ｈ）表示に応答して、ＩＤＡステージ３５の処理は、ＩＤＡデータセクション３９内のレジスタ４１に、命令キャッシュ２３のボトムにおけるラッチ３７から、命令のパートＡの１６ビットを含むビットを捕らえさせる。同時に、ＩＣ２ステージ３３は、ラインＣＬ２のためのサーチ結果を使用し、メモリのそのラインからデータを回復し、データを命令キャッシュ２３のボトムにあるラッチ３７にロードしようと試みる。
【００４０】
この点に関して、ヒット−ミス例の処理は本質的に第１のヒット−ヒット例と同じである。しかしながら、この第２の例において、そうでなければＩＣ２ステージ３３がＣＬ２ラインからのデータをラッチ３７に移動するとき、キャッシュ２３は、キャッシュ２３のボトムに今あるＣＬ２ラインは命令の所望のパートＢを含まないことを示すミス（Ｍ）をＨ／Ｍライン４３に供給する。
【００４１】
この例において、Ａ−Ｂ命令は、キャッシュライン境界を横切り、セクション１１内のロジックは、命令キャッシュ２３からアクセスされたデータの第１のラインＣＬ１内の命令データの第１のパートＡを（成功裏にフェッチした）が、命令データの第２のパートＢは、キャッシュ２３からアクセスされたデータの第２のラインＣＬ２に存在しないことを決定した。それゆえ、（任意の命令データをデコードステージ１３に通過させないように）ＩＤＡステージ３５のロジックは、ＣＬ１ラインに対応するアドレスのフェッチを無効にする。また、第２のフェッチアドレスを含む（先行する）ステージより高いパイプラインの任意のステージはフラッシュ(flushed)される。図解された３つのステージフェッチアーキテクチャにおいて、ＩＣ１ステージ３１は、ＣＬ２ラインのためのアドレスを保持するＩＣ２ステージの上の唯一のステージであるので、ＩＣ１ステージはフラッシュ(flushed)される。
【００４２】
この時点で、ＩＤＡステージ３５のロジックはまた、再フェッチステージ４５を介してＣＬ１に対応する第１のフェッチアドレスは、フェッチパイプライン１１の開始に戻す。再フェッチステージ４５は、次のサイクルにおいて、ＩＣ１ステージ３１への次のアドレス入力として再循環されたアドレスを供給し、アドレス入力のストリングをその第１のアドレスにリセットするので、次の入力アドレスは、再循環されたアドレスの後、この場合、ＣＬ１ラインおよび命令の部分Ａを識別したアドレスの後に順番に適切に続くアドレスである。特に注目すべきなのは、これは、その第１のアドレスに対して処理を再開するとき、部分Ｂを含むように期待されるラインＣＬ２に相当するアドレスは、フェッチパイプライン１１を最初に通過する場合のように、その第１のアドレスの後迅速にステージを再び流れることを意味することである。
【００４３】
第３の処理サイクルの期間、第２のラインＣＬ２がミスを生じたと決定したとき、ＩＣ２ステージ３３は、そのラインのためのフェッチをフェッチ（Ｆ）からタッチ（Ｔ）またはプリフェッチ動作に変換する。フェッチ動作は命令を検索し、デコードステージ１３に命令を渡し、次には、それを最終的な実行のために渡す。タッチ（Ｔ）またはプリフェッチ動作は、命令を取り出すだけであり、命令が命令キャッシュ２３にまだ存在していないなら、処理は命令をそのキャッシュ２３にロードするであろうことを知る。プリフェッチは、実行のために後のステージに命令を落とすことなく、後の処理のために命令キャッシュ２３に命令データが存在することを保証する。動作がミスを生じる場合、それは、タッチ処理は、Ｌ２キャッシュ２５および／またはメインメモリ２７のような他のメモリリソースから必要な命令データを取得するであろうことを意味し、命令データのラインは、関連するアドレスがフェッチセクション１１のステージを流れる次の時間に提供されるであろう。
【００４４】
ＩＣ２ステージ３３のロジックは、Ｔ／Ｆタイプフィールド４７、典型的にはフラッグビットを含むラッチまたは同種のものを含む。これは、そのステージ３３において処理中のアドレスがタッチ(Touch)またはフェッチタイプ動作に関連することを示す。ＩＤＡステージ３５のロジックは、類似のＴ／Ｆタイプフィールド４９を含むラッチまたは同種のものを含む。ＩＣ２ステージ３３がアドレスをＩＤＡステージ３５に渡すと、そのフィールド４７からのＴまたはＦタイプ表示をＩＤＡステージ３５内のフィールド４９に渡す。
【００４５】
この議論の目的のために注目すべきは、第２のアドレスがＩＣ２ステージ３３に最初に受信されると、ＩＣ２ステージはそれをフェッチ（Ｆ）動作として取扱うことである。しかしながら、キャッシュライン境界を横切る命令の場合、キャッシュが、ＣＬ２キャッシュライン上に第２の部分Ｂが存在しないことを示すライン４３にミス（Ｍ）を供給するとき、ＩＣ２ステージは、タイプフィールド４７内のＦをＴに変更し、フェッチをタッチに効率的に変換する。次に、図１の破線矢印により表されるように、ＩＣ２ステージは、タッチ（Ｔ）表示をＩＤＡステージ３５に渡す。
【００４６】
第４の処理サイクルにおいて、第１のアドレスが再フェッチステージ４５に渡されたとき、第２のアドレスはＩＤＡステージ３５に渡される。そのアドレスで、ＩＣ２ステージ３３は、今度は、例えば、ＩＤＡステージロジック内のフィールド４９に使用するためにタッチ表示（Ｔ）を渡すことによりプリフェッチ処理のためにのみアドレスが使用されるという表示を渡す。また、ＩＤＡステージ３５は、ライン４３上のミス（Ｍ）表示から、キャッシュ内のライン上に所望の命令データが存在しないことを知る。それゆえ、ＩＤＡステージ３５およびＩＤＡデータセクション３９は、より高いレベルのメモリリソース（複数の場合もある）から必要な命令データをロードするためのステップを開始することができる。ＩＤＡエレメント３５、３９、４１は、本質的に命令キャッシュ２３にデータをロードするために、プリフェッチとして第２のアドレスに対してタッチ処理を取扱うが、任意の結果をデコードステージ１３に渡さない。結果として、命令ラインは、より高いレベルのメモリからキャッシュ２３にロードされ、後の処理のために利用される。
【００４７】
再循環の後で、フェッチセクション１１が再び第１のアドレスに関する第１のフェッチを処理するとき、第２のアドレスが再び続くが、第２のアドレスのためのラインは今はＬ１命令キャッシュ２３に存在する。第２のラインＣＬ２からの所望の命令のための部分Ｂは、ＩＤＡ処理の期間に、フェッチされた第１のラインＣＬ２からの部分Ａとともに落ちることができ、ライン内の別の不必要なデータの部分を交換し、まさに上で述べたヒット−ヒット例の場合のように、フェッチセクション１１からの出力の１ライン内の所望の命令を完了する。しかしながら、これらの動作を理解するために、ＩＤＡステージに至る第２のラインアドレスのためのタッチの動作を多少より詳細に考察することは有効かもしれない。
【００４８】
パイプラインのフェッチセクション１１は、Ｌ２キャッシュ２５からＩＤＡセクション３９内のレジスタ４１への命令データの転送のために使用される、２つのフィル(fill)バッファ５１および５３を含む。指定されたアドレスのためのフェッチタイプ動作がＩＤＡステージ３５に到達し、ミス（Ｍ）を生じると、ＩＤＡデータセクション３９はミスした命令ラインのための要求をＬ２キャッシュ２５に送信する。Ｌ２キャッシュ２５は、要求されたラインのためのデータを含んでいてもよい。またはそうでなければ、Ｌ２キャッシュ２５は、典型的にメインメモリ２７から、要求されたラインのためのデータを取得する。Ｌ２キャッシュ２５はラインの半分をバッファ５１にロードし、他の半分をバッファ５３にロードする。ＩＤＡデータセクション３９のロジックは、キャッシュ２３内のラッチ３７からのそのデータのレジスタ４１へのロードと類似した方法で、キャッシュラインデータの関連する部分をレジスタ４１にロードする。同時に、バッファ５１と５３は、命令データの全体のラインを記憶と将来の使用のために命令キャッシュ２３に供給する。
【００４９】
我々のヒット−ミス例において、第２のキャッシュラインアドレスのためのタッチはＩＤＡエレメントとフィルバッファのこれらの動作を用いて、必要なラインＣＬ２のためのデータを命令キャッシュ２３にロードする。データはデコードステージに落とされないので、部分はＩＤＡデータセクションに行くかもしれないが、典型的には、ＩＤＡレジスタ４１にロードされない。ＩＤＡステージは、そのアドレスに関する第１のフローをタッチタイプ動作、すなわち、プリフェッチオンリーであるとみなす。
【００５０】
タッチが完了した後の次のサイクルにおいて、第１のアドレスは、ＩＣ１ステージ３１において再び処理され、第１のキャッシュラインＣＬ１のためのタグを識別する。ＩＣ１ステージ３１は第１のタグをＩＣ２ステージ３３に渡す。次のサイクルにおいて、ＩＣ２ステージは、キャッシュラインＩＣ１をリードし、一方第２のアドレスは、ＩＣ２ステージ３３において再び処理され、第１のキャッシュラインＣＬ２に対してタグを識別する。ＩＣ２ステージ３３の処理は、ＣＬ１ラインからラッチ３７にデータをロードし、次のサイクルにおいて、データのそのラインは、ＩＤＡレジスタ４１に流れる選択された部分とともに落ちる。レジスタ４１内の関連するＣＬ１データとともに、ＩＣ２ステージ３３はキャッシュラインＣＬ２をリードし、そのラインからのデータをラッチ３７にロードする。この第２のパスに対して、両方のキャッシュラインのリーディングは、先のヒット−ヒット例の場合のようにヒットを生成する。
【００５１】
このようにして、部分Ｂは、フェッチセクション１１のパイプラインを介した命令の第２のパス上のキャッシュのボトムに現れ、ＩＤＡステージ３５はレジスタ４１に所望の命令のそのさらなる部分を捕らえさせる。図６によって図式的に表されるように、部分は適切に整列されていないかもしれないけれども、レジスタ４１を形成する６４ビットラッチは、今所望の命令の両方の部分を含む。ＩＤＡデータステージ３９とレジスタ４１によるさらなる処理は、図７により図式的に表されるように、２つの部分ＡおよびＢのデータビットを整列して結合し、結合された命令を前の例のようにデコードステージ１３に渡す。
【００５２】
例において、処理が第１のフェッチアドレスをフェッチパイプライン１１のスタートに戻すと、デコードステージに渡さないように、その初期パスは、同時に無効にされる。また、第２のフェッチアドレスを含む（先行する）ステージより高いパイプラインの任意のステージはフラッシュ(flushed)される。第１のアドレスが再循環されると、第１のアドレスと、第２のアドレスのためのタッチ(touch)との間に進行中のアドレスは無い。プリフェッチが完了すると、ＩＤＡステージ３５は、ＩＤＡレジスタ４１内のアドレスと、関連するデータを破棄する。この結果、命令フェッチパイプラインを介した第２のパスの期間に所望の命令が結合されるまで、命令ラインデータはフェッチパイプライン１１から出力されない。
【００５３】
このタイプの処理の場合、ＩＤＡエレメントのみがより高いレベルのメモリリソースからフェッチを開始することができる。これは、より高いレベルのメモリリソースに要求する命令フェッチ処理において唯一つのステージがあるという点において高性能処理設計を容易にする。再循環された第１のアドレスは、通常、ＩＣ１、ＩＣ２およびＩＤＡに戻す前に再フェッチ４５において１サイクルを費やすにすぎない。これらの場合において、フェッチステージを介した第２のパスの時間内に、Ｌ２キャッシュ２５はすでに命令データの第２の部分をキャッシュ２３に戻すことは通常できない。それゆえ、ＩＤＡステージは休み、Ｌ２キャッシュ２５を待ち、フィルバッファ５１、５３から直接命令データの第２の半分を受信する。
【００５４】
先行する例において、キャッシュライン境界を横切る命令のための２つのラインの処理は、第１のラインが命令の一部を含むが、第２の例は含まないという点においてヒット−ミスを生じる。いずれのキャッシュラインも命令の所望の部分を含まない、すなわち、ミス−ミスの場合実質的に類似の処理が適用される。後者のケースにおいて、第１のラインのための処理は、Ｌ２キャッシュ２５またはメインメモリ２７からデータを取得し、命令データのラインを命令キャッシュ２３にロードする。第２のラインがミスであると決定すると、第１のアドレスは再循環され；第２のフェッチはタッチに変換され；処理はヒット−ミスの例のように続く。
【００５５】
第１のキャッシュラインは、所望の命令の一部を含まないが、第２のラインは含む（ミス−ヒット）場合は、ヒット−ヒットの場合と非常に良く似てフェッチセクション１１のステージを流れる。第１ラインの処理はミスを生じるが、ＩＤＡ処理はより高いレベルのメモリリソースから命令データの必要なラインを取得する。第１のラインのためのＩＤＡレジスタ４１を満たすためにフィルバッファ５１、５３からビットが選択される。その後、ラッチ３７からの第２ラインの処理（第２ライン上のヒット）は、ヒット−ヒット例の場合と同じである。
【００５６】
処理ロジックを要約するために、いつ命令フェッチ動作がＩＤＡステージ３５に到達したか、そして利用可能な目標となるキャッシュラインのための命令データのすべてを有したかの決定がなされる。ＩＤＡステージは命令がライン境界を横切るかどうかを決定する。そうでなければ、ＩＤＡステージは、通常の方法で命令を処理する。しかしながら、ライン境界の横切りがあるなら、ＩＤＡステージのロジックはキャッシュ２３からのヒット／ミス表示を見て、境界を横切る命令の第２の部分を含まなければならない次のライン上にヒットがあるか否かを決定する。そうであるなら、ＩＤＡステージは、キャッシュから第２の部分を捕捉することができ、完全な命令をデコードステージ１３に供給することができる。しかしながら、ＩＣ２ステージ３３に係属している次のライン上にミスがあるなら、すなわち、次のキャッシュラインが、境界を横切る命令の必要な第２の部分を含まないなら、ＩＤＡステージおよびＩＣ２ステージはここに開示された処理を実施する。
【００５７】
そのような場合、ＩＤＡステージ３５は、第１のアドレスに関する現在のフェッチを無効にし、例えば、再フェッチステージ４５を介して第１キャッシュラインのためのアドレスを再循環する。第２のラインのためのアドレスはＩＤＡステージ３５に落ちる。しかしながら、その際、第２アドレスのための処理はフェッチタイプ動作からプリフェッチタイプ動作に変換される。ＩＣ１ステージがフラッシュされる。ＩＤＡステージは、Ｌ２キャッシュ２５および／またはメインメモリ２７からの必要な命令データをロードするための動作を開始する。このアップロードが完了するときまでに、データは命令キャッシュ２３に記憶され、ＩＣ１ステージ３１は、再循環された第１のアドレスから処理を再開することができる。２度目にフェッチセクション１１のステージを介して２つのアドレスが流れるので、境界を横切る命令のためのすべての必要なデータは、キャッシュメモリ２３内の適切な２つのライン上に存在し、フェッチセクションはこれらの部分を検索することができ、ビットをコンパイルして１つの命令にし、例えばデコーディングのために、パイプライン１０の下の次のステージに命令を出力する。
【００５８】
命令キャッシュ２３が完全に動作可能であるとき、上で概要を述べた処理が適用される。しかしながら、命令キャッシュ２３がディスエーブルの場合、例えばスタートアップのとき、フィルバッファ５１、５３を介したデータのローディングに類似の処理が適用されてもよい。その場合、プロセスフローは本質的にキャッシュ２３のラインにミス−ミス状況を生じる。第２のアドレスがタッチに変換されるとき、フィルバッファの１つがテンポラリキャッシュとして使用され、命令部分Ｂのためのラインの関連する半分を保持する。第１の命令が循環されると、第１ラインの関連部分は、他のフィルバッファにロードされ、ＩＤＡデータセクションは、本質的にライン境界を横切らなかった命令に対して行うように、２つのバッファ５１、５３からの命令をコンパイルすることができる。
【００５９】
上で述べられたビットの数、例えば、異なるタイプの命令の１６ビット長および３２ビット長、キャッシュラインの８ワード長およびラッチ、レジスタおよびバッファの種々のサイズは例示に過ぎない。当業者は、命令長および種々のコンポーネントのサイズは、異なるプロセッサーアーキテクチャおよび実施において長くても良いしまたは短くても良いことを認識するであろう。また、構成において、より広範囲の可能な命令サイズ、例えば１６ビット、３２ビット、６４ビットまたはそれ以上のビットであってもよい。さらに、フェッチセクション１１またはパイプライン１０においてさえもステージの数はかなり変化してもよい。けれども、プロセッサーは、ここに述べた開示に従ってライン境界を横切る命令のフェッチ処理を実施してもよい。
【００６０】
上述の記載は、ベストモードと考えられるものおよび／または他の例ついて記載したけれども、種々の変更を実施してもよく、ここに開示された主題は、種々のフォームおよび例で実施してもよく、教示は、多くのアプリケーションに適用されてもよい。そのうちのいくつかのみをここに記載した。それは、この教示の真の範囲内に入る任意のおよびすべてのアプリケーション、変更および変形を請求するために以下のクレームにより意図される。
【図面の簡単な説明】
【００６１】
【図１】図１は、境界を交差する命令の効率的な処理のためのフェッチセクション実施技術の例示エレメントを含むプログラマブルプロセッサーの一部の高レベルブロック図である。
【図２】図２は図１に示すエレメントを包含してもよいプログラマブルプロセッサーのパイプライン実施の機能ブロック図である。
【図３】図３はキャッシュラインが８つの３２ビット命令を含む命令キャッシュのラインからの命令データを描画する。
【図４】図４はキャッシュラインが１６の１６ビット命令を含む命令キャッシュのラインからの命令データを描画する。
【図５】図５は、各々が１６ビット命令と３２ビット命令と境界を交差する３２ビット命令の一部を含む、命令キャッシュの２ラインからの命令データを描画する。
【図６】図６は、選択されたビットを１つの３２ビット命令に編集するための命令データアライメント処理の前の６４ビットレジスタ内のデータを描画する。
【図７】図７は、境界を横切る部分を含む２ラインをフェッチすることにより回復された結果として生じる３２ビット命令を描画する。
【図１】
2008541314.tif 000003
【図２】
2008541314.tif 000004
【図３】
2008541314.tif 000005
【図４】
2008541314.tif 000006
【図５】
2008541314.tif 000007
【図６】
2008541314.tif 000008
【図７】
2008541314.tif 000009
【国際調査報告】
2008541314.tif 000010
2008541314.tif 000011