(57)【要約】ある実施例において、プログラム可能なプロセッサが、スペキュレーティブ・カウント・レジスタを包含するために適合される。命令がコミットする前に、スペキュレーティブ・カウント・レジスタに、命令に関連するデータがロードされる。しかしながら、命令がコミットする前に命令が終了する場合、スペキュレーティブ・カウント・レジスタが調整される。カウンタのセットは、スペキュレーティブ・カウント・レジスタおよびその構成上の対応部間の差異をモニタする。
2004516572.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサ内の条件を検出する段階と、
前記プロセッサのパイプライン内のステージで調整値を計算する段階と、
前記条件に関連する命令が前記パイプライン内で終了するときに、前記調整値のうちの１つでレジスタを更新する段階と、
から構成されることを特徴とする方法。
【請求項２】
前記調整値を計算する段階は、
前記条件が検出されるときに前記調整値をインクリメントする段階と、
前記命令が前記ステージを出るときに前記調整値をディクリメントする段階と、
を含むことを特徴とする請求項１記載の方法。
【請求項３】
条件を検出する段階は、指定された記憶場所へのアクセスを検出する段階を含むことを特徴とする請求項１記載の方法。
【請求項４】
前記条件を検出する段階は、ハードウェア・ループ内で命令を検出する段階を含むことを特徴とする請求項１記載の方法。
【請求項５】
前記ハードウェア・ループ内で前記命令を検出する段階は、ボトム・マッチを検出する段階を含むことを特徴とする請求項４記載の方法。
【請求項６】
条件を検出する段階は、ウォッチ・ポイントを検出する段階を含むことを特徴とする請求項１記載の方法。
【請求項７】
前記調整値のうちの１つで前記レジスタを更新する段階は、前記終了が生じた前記ステージに存在するカウンタによって決定される量によって前記レジスタを調整する段階を含むことを特徴とする請求項１記載の方法。
【請求項８】
前記レジスタを更新する段階は、前記スペキュレーティブ・レジスタを更新する段階を含むことを特徴とする請求項１記載の方法。
【請求項９】
第１レジスタと、
第２レジスタと、
前記第１レジスタおよび前記第２レジスタ間の差異をモニタするカウンタのセットと、
から構成されることを特徴とする装置。
【請求項１０】
前記第１レジスタがスペキュレーティブ・レジスタであり、前記第２レジスタが構成レジスタであることを特徴とする請求項９記載の装置。
【請求項１１】
前記第１レジスタがスペキュレーティブ・カウント・レジスタであり、前記第２レジスタが構成カウント・レジスタであることを特徴とする請求項１０記載の装置。
【請求項１２】
前記第１レジスタ、第２レジスタ、およびカウンタのセットは、制御ユニットによって制御されるマルチステージ・パイプラインに存在し、前記カウンタのセットは、前記第１レジスタが存在するステージおよび前記第１レジスタが存在するステージの後のステージで維持されるカウンタを含むことを特徴とする請求項９記載の装置。
【請求項１３】
前記カウンタのセットは、パイプラインのｎ番目のステージの前のステージに存在するカウンタから構成され、ｎは、分岐ペナルティよりも短いかまたは等しい時間で、命令が前記パイプラインを通って流れることを可能にするポイントを定義することを特徴とする請求項１２記載の装置。
【請求項１４】
前記パイプライン内の命令の終了に続いて、前記制御ユニットは、前記終了が生じたステージで維持される特定のカウンタによって決定される量によって、前記第１レジスタを調整するために適合されることを特徴とする請求項１２記載の装置。
【請求項１５】
前記制御ユニットは、
検出された条件のために前記第１レジスタが調整されるときに、前記カウンタをインクリメントし、
前記命令が前記カウンタのそれぞれに関連するそれぞれのステージを出るときに、それぞれのカウンタをディクリメントする、
ために適合されることを特徴とする請求項１２記載の装置。
【請求項１６】
スタティック・ランダム・アクセス・メモリ装置と、
第１レジスタと、
第２レジスタと、
カウンタのセットと、
前記スタティック・ランダム・アクセス・メモリ装置に結合されたプロセッサと、
から構成され、前記プロセッサは、
検出された条件のために前記第１レジスタが調整されるときに、前記カウンタをインクリメントし、
前記命令が前記カウンタのそれぞれに関連する前記パイプラインのそれぞれのステージを出るときに、それぞれのカウンタをディクリメントする、
ために適合された実行パイプラインおよび制御ユニットを含む、
ことを特徴とするシステム。
【請求項１７】
前記パイプラインの終了に続いて、前記制御ユニットが、前記第１レジスタを調整するために適合されることを特徴とする請求項１６記載のシステム。
【請求項１８】
前記制御ユニットは、前記カウンタのセットのうちの１つによって決定された量によって前記第１レジスタを調整するために適合されることを特徴とする請求項１７記載のシステム。
【請求項１９】
前記カウンタのセットの１つが、前記終了が生じた前記パイプラインのステージに存在する特定のカウンタであることを特徴とする請求項１８記載のシステム。
【請求項２０】
前記終了がｎ番目のステージ以降の前記パイプラインのステージで生じる場合に、前記制御ユニットは、アボートされない命令を排出し、かつ前記第２レジスタ内で前記第１レジスタに前記データを書き込むために適合されることを特徴とする請求項１７記載のシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラム可能なプロセッサ内で実行されるスペキュレーティブ・レジスタ（ｓｐｅｃｕｌａｔｉｖｅ ｒｅｇｉｓｔｅｒ）に関する。
【０００２】
【従来の技術】
デジタル信号プロセッサのような従来型のプログラム可能なプロセッサは、プロセッサの性能を改善し、かつソフトウェア命令が実行される速度を増加させるために設計された多種多様のハードウェアを含む。しかしながら、付加的なハードウェアは、典型的にはプロセッサの電力消費を増大させる。
【０００３】
「パイプライン方式（ｐｉｐｅｌｉｎｉｎｇ）」は、全体的に処理速度を増加させるために、命令が実行において重複する従来型のプログラム可能なプロセッサ内で使用される技術である。パイプライン方式のプロセッサは、典型的には複数のステージの命令を処理する。命令は、システム・クロックに従って、あるステージから次のステージへ移動するが、典型的にはパイプライン内で最も遅いステージによって決定されたクロック周波数を有する。
【０００４】
命令を処理している間、「ハザード（ｈａｚａｒｄｓ）」が、時々、命令ストリームにおける次の命令の実行を妨げる。例えば、ある命令が、パイプライン内で処理を終了していない前の命令の結果に依存するとき、データ・ハザードが発生する。ある命令がパイプライン内での処理を終了したときにのみ、その結果が構成レジスタに書き込まれるが、ここでは、その結果は、一般にパイプライン内の後続の命令へアクセス可能である。したがって、データ・ハザードは、パイプラインを「ストール（ｓｔａｌｌ）」させ、パイプラインの性能を低下させる。
【０００５】
パイプラインの処理能力を改善し、かつストールを回避するために行われるハードウェアの追加の１つのタイプが、スペキュレーティブ・レジスタである。スペキュレーティブ・レジスタは、パイプライン内の命令の処理が終了したときに、構成レジスタが有する値を推測または予測するレジスタである。しかしながら、時々、スペキュレーティブ・レジスタに書き込む命令は、それが構成レジスタに書き込む前に終了することがある。このような場合には、スペキュレーティブ・レジスタは調整を必要とする。
【０００６】
【実施例の詳細な説明】
図１は、プログラム可能なプロセッサ２を図示するブロック図である。プロセッサ２は、実行パイプライン４および制御ユニット６を含む。制御ユニット６は、システム・クロックに従って、パイプライン４を通って命令および／またはデータのフローを制御する。例えば、命令の処理中に、制御ユニット６は、命令をデコードし、また、例えば結果をメモリにライト・バックすることを含む、対応する動作を正確に実行することを、パイプライン４の多様なコンポーネントに命令する。
【０００７】
命令はパイプライン４の第１ステージにロードされ、後続のステージを通って処理される。あるステージは、他のステージと同時に処理される。データは、システムのサイクル中にパイプライン４のステージ間を通過する。命令の結果は、パイプライン４の終端に間断なく出現する。
【０００８】
プロセッサ２は、パイプライン４内での処理を終えた１つ以上の命令の結果を格納する１つ以上の構成レジスタを含む。さらに、プロセッサ２は、構成レジスタが将来有するであろう値を予測することができる１つ以上のスペキュレーティブ・レジスタを含む。以下に詳述されるように、いくつかの例では、スペキュレーティブ・レジスタは調整を必要とすることがある。したがって、プロセッサ２は、スペキュレーティブ・レジスタを調整するために、ここで記述される１つ以上の技術を実行する。
【０００９】
図２は、パイプラインの一例を図示するブロック図である。パイプライン４は、複数の命令の実行を同時に進めることができる複数のステージを有する。パイプライン４内で、命令は、最初のクロック・サイクルで命令フェッチ（ＩＦ）ステージ１２に入る。そして、その命令は、続くクロック・サイクルでパイプラインを下流へ送られる。典型的には、追加の命令が、続くクロック・サイクル中にそれぞれＩＦステージ１２に入る。パイプライン４のステージ数は、パイプライン４が同時に処理できる命令の数を定義する。
【００１０】
パイプライン４の異なるステージは以下のように動作する。命令はフェッチ・ユニット１３によってＩＦステージ１２の間にフェッチされ、デコード（ＤＥＣ）ステージ１４の間に命令レジスタ１５からデコードされる。アドレス計算（ＡＣ）ステージ１８の間に、１つ以上のデータ・アドレス生成器１９が、その動作を実行するために用いられるあらゆるメモリ・アドレスを計算する。
【００１１】
実行ステージ２２Ａ−２２Ｎの間、実行ユニット２３は、例えば２つの数の加算または乗算のような指定された動作を行なう。実行ユニット２３は、例えば１つ以上の算術論理演算ユニット（ＡＬＵ）、浮動小数点ユニット（ＦＰＵ）およびバレル・シフタを含む動作を行なうために特殊なハードウェアを含んでもよいが、本発明の範囲はこれらの事項に制限されない。データ・アドレス生成器１９によって生成されたアドレス、メモリから検索されたデータ、またはデータ・レジスタから検索されたデータのような多様なデータが、実行ユニット２３に与えられる。ライト・バック（ＷＢ）ステージ３０の間に、パイプライン４の外部の記憶場所またはデータ・レジスタ、あるいは構成レジスタ３２のようなパイプライン４内のデータ・レジスタに、結果がライト・バックされる。パイプライン４のステージは、データの格納のために、フリップフロップのような１つ以上の格納回路を含んでもよい。
【００１２】
一旦命令がパイプライン４内での処理を終了した、したがって、システムに「コミットされる（ｃｏｍｍｉｔｔｅｄ）」と、構成レジスタ３２が一般にロードされる。これは、典型的には、例えばＷＢステージ３０が終結したときに生じる。したがって、構成レジスタ３２は、一般に、命令がパイプライン４に入った後のいくつかのクロック・サイクルで書き込まれる。
【００１３】
しかしながら、命令がコミットする前に、命令に関連するデータにアクセスするほうが有利であるとされる多くのシナリオがある。この理由により、パイプライン４は、構成レジスタ３２のための値を推測または「予測（ｐｒｅｄｉｃｔ）」するために使用される１つ以上のスペキュレーティブ・レジスタ３４を実行する。一般に、スペキュレーティブ・レジスタ３４は、命令がコミットする前に、命令に関連するデータで書き込まれる。
【００１４】
構成レジスタ３２とは異なり、スペキュレーティブ・レジスタ３４は、典型的には、プロセッサ２の命令セットによってサポートされない。したがって、プログラム・コードは、スペキュレーティブ・レジスタ３４に直接アクセスするためには使用されない。この理由により、プログラマは、構成レジスタ３２でできるのと同じ方法で、スペキュレーティブ・レジスタ３４の中に、あるいは外へデータを移動させることができない。
【００１５】
例えば、スペキュレーティブ・レジスタが非常に有利な場合の一例が「ハードウェア・ループ」である。ハードウェア・ループは、ループ構成内でソフトウェア命令を処理するために使用される専用ハードウェアである。ループ・セットアップ命令は、例えば、ハードウェアを初期化する。その後、ループ命令はローカル・レジスタまたはバッファにキャッシュされ、ループの繰り返しの間にローカル・レジスタから発行される。このように、ハードウェア・ループにキャッシュされた命令は、複数回メモリからフェッチされる必要がない。
【００１６】
スペキュレーティブ・レジスタ３４は、プロセッサ２がより速くハードウェア・ループを検出し初期化することを可能にするので、ハードウェア・ループ・コンテキストにおいて非常に有利である。以上で述べたように、ループ・セットアップ命令におけるデータは、命令がコミットするまで構成レジスタ３２に書き込まれない。したがって、構成レジスタ３２がハードウェア・ループを初期化するために使用される場合、ハードウェア・ループの第１命令は、ループ・セットアップ命令がコミットするまでパイプライン４に入ることができない。例えば、ループ・セットアップ命令がコミットする前に、ループの第１命令がパイプライン４に入る場合、構成レジスタ３２は、命令をループの一部であると認めるためにセット・アップされない。さらに、この問題は、パイプライン４の深さが増加するにつれて大きくなる。
【００１７】
このような理由で、ループ・セットアップ命令は、スペキュレーティブ・レジスタ３４に、ハードウェア・ループのループ条件、例えばループのトップ、ボトム、およびカウント値、を書き込むために使用することができる。そして、スペキュレーティブ・レジスタ３４は、ループ・セットアップ命令がコミットする前にハードウェア・ループをセット・アップするために使用することができる。この理由で、１つ以上のスペキュレーティブ・レジスタ３４を実行することにより、ループ・セット・アップ・ペナルティを削減または回避してプロセッサ２の処理速度を増加することができる。
【００１８】
ハードウェア・ループの例において、例えば、スペキュレーティブ・レジスタ３４Ａに書き込まれるトップ値は、ループの最初の命令を指す。例えば、スペキュレーティブ・レジスタ３４Ｂに書き込まれるボトム値は、ループの最後の命令を指す。例えば、スペキュレーティブ・レジスタ３４Ｃに書き込まれたカウント値は、ループの複数の繰り返しを指定する。プログラム・カウンタがトップ命令を指すときにハードウェア・ループを初期化し、さらに、プログラム・カウンタがボトム命令を指すたびにカウント値をディクリメントする（例えば、スペキュレーティブ・カウント・レジスタ３４Ｃをディクリメントする）ことによって、ハードウェア・ループがセットアップされて、プロセッサ２によって効率的に実行される。
【００１９】
スペキュレーティブ・レジスタが有利である他の例は、ウォッチ・ポイントを伴う使用である。ウォッチ・ポイントは、プログラム可能なプロセッサのデバッギング・プロセスにおいてプログラマを支援するために実行される。ウォッチ・ポイントは、特定の命令、特定タイプの命令、指定された記憶場所へのアクセス、または命令に関連するあらゆる他の条件を、モニタあるいは「ウォッチ（ｗａｔｃｈ）」するためにセット・アップされる。例えば、ウォッチされている命令が、パイプライン内で定義された回数実行される場合、システムは特定の例外を実行する。
【００２０】
ウォッチ・ポイントは、さらに、コードの特定のセットがいつ実行されるかを決定するために有用である。例えば、特定の命令が１０回以上発行されるとき、あるいは特定の記憶場所が１０回以上アクセスされるときは常に、補正アルゴリズムまたは「コード・パッチ」が実行される必要がある。ウォッチ・ポイントは、特定の命令をウォッチするために使用され、特定の命令が実行されるたびにウォッチ・カウント・レジスタをディクリメントさせる。
【００２１】
ハードウェア・ループのセットアップ値と同様に、ウォッチ・ポイントはできるだけ早く検出される必要がある。この理由で、スペキュレーティブ・レジスタ３４は、例えば、システムに入っている「ウォッチされた（ｗａｔｃｈｅｄ）」命令の数をカウントするために使用することができる。これらおよび他のシナリオは、スペキュレーティブ・レジスタを実行することにより、改善されたシステム性能を見出すことができる。
【００２２】
図３は、スペキュレーティブ・レジスタの使用によって実現されるタイミングの利点を図示するフロー図である。図３に示されるように、１つ以上の条件が１つ以上のスペキュレーティブ・レジスタにロードされる（４０）。次に、これらの条件は検出され（４２）、その後、スペキュレーティブ・レジスタに書き込まれる条件を生じる命令がコミットする（４４）。
【００２３】
すべての利点と共に、スペキュレーティブ・レジスタの実行は、さらにいくつかの課題ももたらす。例えば、スペキュレーティブ・レジスタ・データを調整する必要があることから、スペキュレーティブ・レジスタの使用を導入することによって一つの課題が生じる。パイプライン４がイベント（例えば、割込みまたは例外）を処理しなければならない場合、パイプラインの現在の動作が終了する必要がある。この終了が、スペキュレーティブ・レジスタ３４が書き込まれた後であって、各構成上の対応部３２が書き込まれる前に生じる場合、スペキュレーティブ・レジスタ３４の値は、対応する構成レジスタ３２のそれと一致しないことがある。そのような場合には、スペキュレーティブ・レジスタ３４のうちの１つが調整を必要とする。言いかえれば、スペキュレーティブ・レジスタ３４が早期に書き込まれるので、命令がコミットされる前にパイプライン４内の終了が生じる場合には、スペキュレーティブ・レジスタ３４のうちの１つを調整することが必要となる。
【００２４】
図４は、スペキュレーティブ・レジスタ３４の調整に関する動作モードを図示するフロー図である。図４で示されるように、スペキュレーティブ・レジスタ３４が書き込まれる（５０）。図４の実施例において、スペキュレーティブ・レジスタは、すなわち、スペキュレーティブ・トップ３４Ａ、スペキュレーティブ・ボトム３４Ｂ、およびハードウェア・ループを処理するために実行されるスペキュレーティブ・カウント３４Ｃレジスタである。構成レジスタ３２が書き込まれる（５４）前に、パイプライン内で終了が生じる場合（５２）、アボートされない命令がパイプライン４から排出され（５６）、そして、スペキュレーティブ・レジスタ３４は、それぞれの構成上の対応部３２に収容されたデータを書き込むことにより調整される（５８）。
【００２５】
連続したハードウェア・ループに対処するとき、図４で図示された動作モードは特に有用である。例えば、第２ループがコミットする前にそれが終了する場合、第１ループは、パイプライン内に残っている命令をまだ実行する必要がある。図４の調整技術は、スペキュレーティブ・レジスタを適切に調整することによって、この遷移に対処する方法を提供する。
【００２６】
スペキュレーティブ・カウント・レジスタの調整は、特定の課題を提示することがある。上述のように、スペキュレーティブ・カウント・レジスタは、ハードウェア・ループ内の命令、ウォッチ・ポイントを有する命令、または他のシナリオをカウントするために実行される。しかしながら、スペキュレーティブ・カウント・レジスタに影響を与える命令が、それがコミットする前に終了するとき、スペキュレーティブ・カウント・レジスタ内のデータは不正確である。
【００２７】
終了の後に続くスペキュレーティブ・カウント・レジスタ・データを修正する１つの方法は、終了の前に命令をコミットさせ、その後、その構成上の対応部をスペキュレーティブ・カウント・レジスタを書き込むことである。しかしながら、分岐ペナルティが、パイプラインから排出するための時間よりも短い場合、追加のペナルティが加わることがある。
【００２８】
図５は、スペキュレーティブ・カウント・レジスタを調整するための効率的な方法を図示する。図５は、ハードウェア・ループのコンテキストにおける調整を図示するが、本発明の範囲はこの事項に制限されていない。図示のように、ループ・セットアップ命令がＡＣステージに入った後（８０）、スペキュレーティブ・カウント・レジスタに書き込まれる（８２）。この時点で、カウント・データがパイプラインを下流へ送られる（８４）。終了（８５）が生じる場合、アボートされない命令が排出され（８６）、スペキュレーティブ・カウント・レジスタにその構成上の対応部のデータが書き込まれる（８７）。
【００２９】
ボトム・マッチ（９０）で、例えば、プログラム・カウンタが、命令ループのボトム命令を指しているとき、有効なディクリメント・ビットがパイプラインの下流へ送られる（９２）。有効なディクリメント・ビットを送った命令が各パイプ・ステージを出るとき（９４）、その終了したパイプ・ステージのカウンタが１だけディクリメントされる（９６）。換言すると、パイプ・ステージのカウンタは、有効なディクリメント・ビットが送られるときにインクリメントされ（例えば９２で）、そして、有効なディクリメント・ビットを送った命令がパイプ・ステージを出るときに、個々のカウンタがディクリメントされる（例えば９６で）。各ステージのそれぞれのカウンタは、そのステージと、スペキュレーティブ・カウント・レジスタが存在するステージとの間のパイプライン内に存在する有効なディクリメントの数を表わす。したがって、ステージで終了が生じるときは常に、そのステージのカウンタは、スペキュレーティブ・カウント・レジスタを調整するために使用することができる。
【００３０】
終了がパイプライン内で生じる場合（９８）、スペキュレーティブ・カウント・レジスタは、終了ステージでカウンタによってカウントされる有効なディクリメント・ビットの数によって調整される（８８）。すべてのループ命令がパイプラインを出るまで、図５のステップが繰り返される（１００）。
【００３１】
スペキュレーティブ・カウント・レジスタは、すべてのボトム・マッチでディクリメントされる（例えば、ハードウェア・ループを通ってすべてのパスを説明しながら）。しかしながら、すべてのボトム・マッチの後に、全体のカウント値をパイプラインの下流に伝播するのではなく、単一の有効なディクリメント・ビットだけがパイプラインの下流へ送られる。このようにして、プロセッサ２内でハードウェアの削減を実現することができる。カウンタのセットは、有効なディクリメント・ビット、およびそれらのビットを送らせる関連する命令をモニタする。そのため、カウンタのセットは、スペキュレーティブ・カウント・レジスタおよびその構成上の対応部間の差異をモニタする。
【００３２】
図６はパイプライン内のカウンタを図示するブロック図である。図示のように、カウンタは、ＤＥＣの後のパイプラインのすべてのステージで維持される（１１０，１１１，１１２，１１３）。したがって、スペキュレーティブ・カウント・レジスタおよびその構成上の対応部間の差異をモニタするために、単一の有効なディクリメント・ビットがパイプラインを下流へ伝播される。カウンタは、マルチプレクサ１２０の入力に接続される。マルチプレクサ１２０は、もしあれば、いずれのカウンタがスペキュレーティブ・カウント・レジスタ３４Ｃを調整するために使用されるかを決定する。必要ならば、マルチプレクサ１２０は、適切な調整を行う調整信号１５６を出力する。
【００３３】
他の実施例において、終了は、あるステージでは生じないことがあり、また、あるステージにある命令が存在するときには制限されることがある。そのような実施例では、ハードウェアの削減は、終了が制限されるステージでカウンタを実行しないことにより実現することができる。
【００３４】
カウンタ１１０，１１１，１１２，１１３の幅は、必要に応じて変更することができる。例えば、カウンタ１１０は１ビット・カウンタであり、１１１は２ビットのカウンタであってもよい。カウンタ１１２，１１３の最低の深さは、パイプライン内のステージの数に依存する。カウンタ１１０は常に１または０のいずれかの値を有するので、１ビットのカウンタである。例えば、ボトム・マッチ命令が現在ＡＣにある場合には、１の値を有する。命令がＡＣを出ると、カウンタは０に戻る。
【００３５】
本発明の範囲はこの点に制限されないが、カウンタ１１１および次のカウンタ（例えばステージＥＸ２のための）は、２ビットのカウンタである。これは、カウンタ１１１（例えばＥＸ１カウンタ）が２の最大値を持ち、ＥＸ２カウンタが３の最大値を持つからである。ＥＸ３カウンタは４の最大値を持ち、従って、３ビットを必要とする。同様に、次の３つのカウンタ（例えばＥＸ４からＥＸ６）は、５から７の間の値を表すことができる３ビットのカウンタである。
【００３６】
各ステージのカウンタの幅は、カウンタが保持する必要がある最大値を考慮することにより決定される。ハードウェア・ループの例において、これは、ループが単一の命令ループである場合に対応する。したがって、カウンタの深さは、単に、カウンタとＡＣとの間のステージの数に対応する。再び、しかしながら、サイズは、さらに終了が特定のステージで生じるかどうかに依存し、したがって、いくつかのステージはカウンタを必要としない。
【００３７】
他の動作モードは、スペキュレーティブ・カウント・レジスタを調整するためのハイブリッドな方法である。パイプラインの選択されたステージに存在するカウンタは、パイプラインの排出に関連するペナルティが分岐ペナルティよりも大きい場合に、スペキュレーティブ・カウント・レジスタを調整するために使用される。しかしながら、排出ペナルティが分岐ペナルティよりも小さいか、あるいは等しい場合、パイプライン内の命令はコミットすることを許され、その結果、スペキュレーティブ・カウント・レジスタは、その構成上の対応部から調整される。システムの動作は、パイプライン内のどこで終了が生じたかに依存して選択される。あるケースでは、３つの実行ステージを有するパイプラインは、終了がＥＸ３ステージまたはＷＢステージで生じる場合に排出されるが、終了がＥＸ３ステージの前に生じる場合にはパイプラインが排出されず、スペキュレーティブ・カウント・レジスタが調整される。
【００３８】
図７は、動作のハイブリッド・モードを図示するフロー図である。図示のように、終了がパイプラインのｎ番目のステージの前に生じる場合（１３０）、カウンタはスペキュレーティブ・カウント値を調整する（１２８）。しかしながら、終了がｎ番目のステージの後に生じる場合（１３０）、パイプライン内の命令は、パイプラインを通って流れて、コミットすることを許される（１３２）。その後、スペキュレーティブ・レジスタは、それらの構成上の対応部内のデータで更新される（１３３）。変数ｎは、分岐ペナルティよりも短いかまたは等しい時間で、命令がパイプラインを通って流れることができるポイントを定義する（１３４）。
【００３９】
図８は、ＡＣステージおよび最初のｎ−１実行ステージにカウンタを有するハイブリッド回路を図示する。この回路は、終了がｎ番目の実行ステージまたはそれ以後に生じる場合に、パイプラインが終了に続く命令を実行することを可能にする。しかしながら、この回路は、終了が（ｎ−１）番目の実行ステージ、またはそれ以前に生じる場合に、終了に続くスペキュレーティブ・カウント・レジスタを調整する。再び、変数ｎは、分岐ペナルティよりも短いかまたは等しい時間で、命令がパイプラインを通って流れることができるポイントを定義する。他のケースにおいて、変数ｎは、パイプライン内のより早期（例えば分岐ペナルティがより大きいところ）に存在する。さらに別のケースにおいて、変数ｎは、実行ステージの数ではなくステージの数に関して定義される。
【００４０】
図９は、ハードウェア・ループのシナリオにおけるスペキュレーティブ・カウント・レジスタ１５０をインクリメントするための典型的な回路を図示する。ループのそれぞれのパス上で、マルチプレクサ１５４がスペキュレーティブ・カウント・レジスタ１５０をディクリメントする。しかしながら、調整が必要な場合（例えば、それがコミットする前にループ命令が終了する場合）、調整信号１５６がスペキュレーティブ・カウント・レジスタ１５０を適当に調整する。一旦ループが最終の繰り返しを終了すると、比較器１５８は表示されているとおりに信号１６０を送る。
【００４１】
発明の多様な実施例が記述された。例えば、スペキュレーティブ・レジスタを調整するための多様な技術が、プロセッサ内のインプリメンテーションのために記述された。プロセッサは、汎用計算機システム、ディジタル処理システム、ラップトップ・コンピュータ、パーソナル・デジタル情報処理端末（ＰＤＡ）および携帯電話を含む多種多様のシステムで実行することができる。そのようなシステムでは、プロセッサは、フラッシュ・メモリ装置、またはオペレーティング・システムおよび他のソフトウェア・アプリケーションを格納するスタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）のようなメモリ装置に結合される。これらおよび他の実施例は、添付の請求項の範囲内である。
【図面の簡単な説明】
【図１】本発明の実施例に従ってプログラム可能なプロセッサを図示するブロック図である。
【図２】本発明の実施例に従ってパイプラインの一例を図示するブロック図である。
【図３】本発明の実施例に従ってスペキュレーティブ・レジスタの使用によって実現されるタイミングの利点を図示するフロー図である。
【図４】本発明の実施例に従ってスペキュレーティブ・レジスタの調整に関する動作モードを図示するフロー図である。
【図５】本発明の実施例に従ってスペキュレーティブ・カウント・レジスタを調整する効率的な方法を図示するフロー図である。
【図６】本発明の実施例に従って回路内のカウンタを図示するブロック図である。
【図７】本発明の実施例に従ってハイブリッドの動作モードを図示するフロー図である。
【図８】本発明の実施例に従ってハイブリッド回路を図示するブロック図である。
【図９】本発明の実施例に従ってハードウェア・ループのシナリオにおいてスペキュレーティブ・レジスタをインクリメントするための回路例を図示する。
【図１】
2004516572.tif 000003
【図２】
2004516572.tif 000004
【図３】
2004516572.tif 000005
【図４】
2004516572.tif 000006
【図５】
2004516572.tif 000007
【図６】
2004516572.tif 000008
【図７】
2004516572.tif 000009
【図８】
2004516572.tif 000010
【図９】
2004516572.tif 000011
【国際公開パンフレット】
2004516572.tif 000012
2004516572.tif 000013
2004516572.tif 000014
2004516572.tif 000015
2004516572.tif 000016
2004516572.tif 000017
2004516572.tif 000018
2004516572.tif 000019
2004516572.tif 000020
2004516572.tif 000021
2004516572.tif 000022
2004516572.tif 000023
2004516572.tif 000024
2004516572.tif 000025
2004516572.tif 000026
2004516572.tif 000027
2004516572.tif 000028
2004516572.tif 000029
2004516572.tif 000030
2004516572.tif 000031
2004516572.tif 000032
2004516572.tif 000033
2004516572.tif 000034
2004516572.tif 000035
2004516572.tif 000036
2004516572.tif 000037
2004516572.tif 000038
2004516572.tif 000039
2004516572.tif 000040
2004516572.tif 000041
2004516572.tif 000042
2004516572.tif 000043
2004516572.tif 000044
2004516572.tif 000045
【国際公開パンフレット（コレクトバージョン）】
2004516572.tif 000046
【国際調査報告】
2004516572.tif 000047
2004516572.tif 000048
2004516572.tif 000049
2004516572.tif 000050
2004516572.tif 000051