(57)【要約】  命令を実行するためのパイプラインを有するディジタルプロセッサにおいて使用する方法および装置が提供される。本方法は、資源に書込みをする命令およびその資源から読取りをする命令のためのパイプライン内で命令を監視すること；前記資源に対して書込みをするそれぞれの命令に対して、書込み命令タイプおよび書込み命令追跡データを記憶すること；前記資源から読取りをするそれぞれの命令に対して、読取り命令タイプを特定して、書込み命令タイプおよび読取り命令タイプに基づいて待ち時間値を生成すること；および前記待ち時間値および前記書込み命令追跡データに応答してある数のストールサイクルだけ、前記資源から読取りをする命令の実行をストールさせることを含む。
2006517322.tif 000002
【特許請求の範囲】
【請求項１】
命令を実行するためのパイプラインを有するディジタルプロセッサにおいて使用する方法であって、
資源に書込みをする命令およびその資源から読取をする命令のためのパイプライン内で命令を監視すること；
前記資源に対して書込みをするそれぞれの命令に対して、書込み命令タイプおよび書込み命令追跡データを記憶すること；
前記資源から読取りをするそれぞれの命令に対して、読取り命令タイプを特定して、前記書込み命令タイプおよび前記読取り命令タイプに基づいて待ち時間値を生成すること；および
前記待ち時間値および前記書込み命令追跡データに応答してある数のストールサイクルだけ、前記資源から読取りをする命令の実行をストールさせることを含む、前記方法。
【請求項２】
書込み命令追跡データを記憶することが、該書込み命令追跡データを各クロックサイクル毎に更新することを含む、請求項１に記載の方法。
【請求項３】
書込み命令追跡データを記憶することが、シフトレジスタに書込み命令追跡データを記憶することを含む、請求項２に記載の方法。
【請求項４】
書込み命令追跡データを更新することが、該書込み命令追跡データをシフトレジスタ内でシフトさせることを含む、請求項３に記載の方法。
【請求項５】
書込み命令追跡データを更新することが、シフトレジスタ内に完遂サイクル値を記憶し、該完遂サイクル値を前記シフトレジスタ内でシフトすることによって、前記完遂サイクル値を各クロックサイクル毎に更新することを含む、請求項４に記載の方法。
【請求項６】
命令の実行をストールさせることが、書込み命令追跡データをシフトレジスタにロードして、待ち時間値の関数としてシフト量を決定し、前記書込み命令追跡データを前記シフトレジスタ内で前記シフト量だけシフトしてストールサイクル数を提供することを含む、請求項１に記載の方法。
【請求項７】
シフト量を待ち時間データの関数として決定することが、前記待ち時間値のビット・バイ・ビット逆数に等しい値を有するシフト量を生成することを含む、請求項６に記載の方法。
【請求項８】
命令の実行をストールさせることが、待ち時間値、書込み命令追跡データ、およびその他の潜在的ハザードを指示するデータに応じて前記命令をストールさせることを含む、請求項１に記載の方法。
【請求項９】
命令の実行をストールさせることが、ストールサイクル数とその他の潜在的ハザードを指示するデータの大きい方に応じて、あるサイクル数だけ前記命令の実行をストールさせることを含む、請求項１に記載の方法。
【請求項１０】
書込み命令タイプの群を定義することをさらに含み、書込み命令タイプを記憶することが、前記書込み命令タイプの群から書込み命令タイプを選択することを含む、請求項１に記載の方法。
【請求項１１】
読取り命令タイプの群を定義することをさらに含み、読取り命令タイプを決定することが、前記読取り命令タイプの群から読取り命令タイプを選択することを含む、請求項１に記載の方法。
【請求項１２】
命令を実行するためのパイプラインを有するディジタルプロセッサにおいて使用する装置であって、
前記資源に書込みをするそれぞれの命令に対して書込み命令タイプを供給し、かつ前記資源から読取りをするそれぞれの命令に対して、読取り命令タイプを供給するために、資源に書込みをする命令およびその資源から読取をする命令のためのパイプライン内で命令を監視する手段；
前記資源に対して書込みをするそれぞれの命令に対して、書込み命令追跡データを記憶する手段；
前記書込み命令タイプおよび前記読取り命令タイプに基づいて待ち時間値を生成する手段；および
前記待ち時間値および前記書込み命令追跡データに応答して、ある数のストールサイクルだけ、前記資源から読取りをする命令の実行をストールさせる手段を含む、前記装置。
【請求項１３】
書込み命令追跡データを記憶する手段が、該書込み命令追跡データを各クロックサイクル毎に更新する手段を含む、請求項１２に記載の装置。
【請求項１４】
書込み命令追跡データを記憶する手段が、シフトレジスタを含む、請求項１３に記載の装置。
【請求項１５】
書込み命令追跡データを更新する手段が、該書込み命令追跡データをシフトレジスタ内でシフトさせる手段を含む、請求項１４に記載の装置。
【請求項１６】
書込み命令追跡データを記憶する手段が、シフトレジスタ内に完遂サイクル値を記憶するとともに、前記完遂サイクル値を各クロックサイクル毎に更新する、請求項１５に記載の装置。
【請求項１７】
命令の実行をストールさせる手段が、書込み命令追跡データをシフトレジスタにロードして、待ち時間値の関数としてシフト量を決定し、前記書込み命令追跡データを前記シフトレジスタ内で前記シフト量だけシフトしてストールサイクル数を提供することを含む、請求項１２に記載の装置。
【請求項１８】
命令の実行をストールさせる手段が、待ち時間値のビット・バイ・ビット逆数に等しい値を有するシフト量を決定する、請求項１７に記載の装置。
【請求項１９】
命令の実行をストールさせる手段が、待ち時間値、書込み命令追跡データ、およびその他の潜在的ハザードを指示するデータに応じてサイクル数を表わすデータを生成する手段を含む、請求項１２に記載の装置。
【請求項２０】
命令の実行をストールさせる手段が、ストールサイクル数とその他の潜在的ハザードを指示するデータの大きい方に応じて、あるサイクル数だけ前記命令の実行をストールさせる手段を含む、請求項１２に記載の装置。
【請求項２１】
書込み命令タイプの群を定義する手段をさらに含み、書込み命令タイプを供給する手段が、前記書込み命令タイプの群から書込み命令タイプを選択する手段を含む、請求項１２に記載の装置。
【請求項２２】
読取り命令タイプの群を定義する手段をさらに含み、読取り命令タイプを供給する手段が、前記読取り命令タイプの群から読取り命令タイプを選択する手段を含む、請求項１２に記載の装置。
【請求項２３】
命令を実行するためのパイプラインを有するディジタルプロセッサにおいて使用する装置であって、
資源に書込みをするパイプライン内の命令を受け取り、前記資源に書込みをするそれぞれの命令に対する書込み命令タイプを供給し、かつ前記資源から読取りをするそれぞれの命令に対する読取命令タイプを供給する、復号器回路；
前記資源に書込みをするそれぞれの命令に対して書込み命令追跡データを記憶するための書込み追跡回路；
前記書込み命令タイプおよび前記読取り命令タイプに基づいて待ち時間値を供給する待ち時間回路；および
前記待ち時間値および前記書込み命令追跡データを受け取り、前記待ち時間値および前記書込み命令追跡データに応答して、前記資源から読取りをする命令の実行を、ある数のストールサイクルだけストールさせる信号を供給する、ストール信号回路を含む、前記装置。
【請求項２４】
書込み追跡回路が書込み命令追跡データを各クロックサイクル毎に更新する、請求項２３に記載の装置。
【請求項２５】
書込み追跡回路が、書込み命令追跡データを記憶するためのシフトレジスタを含む、請求項２４に記載の装置。
【請求項２６】
書込み追跡回路が、書込み命令追跡データをシフトレジスタ内でシフトすることによって前記書込み命令追跡データを更新する、請求項２５に記載の装置。
【請求項２７】
書込み追跡回路が、完遂サイクル値をシフトレジスタ内に記憶し、前記完遂サイクル値を前記シフトレジスタ内でシフトすることによって、前記完遂サイクル値を各クロックサイクル毎に更新する、請求項２６に記載の装置。
【請求項２８】
ストール信号回路が、書込み命令追跡データを記憶するためのシフトレジスタを含み、前記ストール信号回路は、待ち時間値に基づいてあるシフト量だけ書込み命令追跡データをシフトする、請求項２３に記載の装置。
【請求項２９】
ストール信号回路が、待ち時間値のビット・バイ・ビット逆数に応じてシフト量を決定する、請求項２８に記載の装置。
【請求項３０】
ストール信号回路が、待ち時間値、書込み命令追跡データ、およびその他の潜在的なハザードを指示するデータに応じてあるサイクル数を表わすデータを供給する、請求項２３に記載の装置。
【請求項３１】
ストール信号回路が、ストールサイクル数とその他の潜在的なハザードを指示するデータの内の大きい方に応じて、あるサイクル数を表わすデータを供給する、請求項２３に記載の装置。
【請求項３２】
待ち時間回路が、それぞれが書込み命令タイプ‐読取り命令タイプペアに対応する待ち時間値を含む、複数の場所を有するルックアップ表を含む、請求項２３に記載の装置。
【請求項３３】
命令を実行するパイプラインを有するディジタルプロセッサにおいて使用する方法であって、
１つまたは２つ以上の資源に書込みをする命令および１つまたは２つ以上の資源から読取をする命令のためのパイプライン内で命令を監視すること；
１つまたは２つ以上の資源に対して書込みをするそれぞれの命令に対して、少なくとも１つの書込み命令タイプおよび書込み命令追跡データを記憶すること；
１つまたは２つ以上の資源から読取りをするそれぞれの命令に対して、少なくとも１つの読取り命令タイプを特定して、少なくとも１つの書込み命令タイプおよび少なくとも１つの読取り命令タイプに基づいて少なくとも１つの待ち時間値を生成すること；および
前記少なくとも１つの待ち時間値および前記書込み命令追跡データに応答して、ある数のストールサイクルだけ、１つまたは２つ以上の資源から読取りをする命令の実行をストールさせることを含む、前記方法。
【請求項３４】
パイプライン化ディジタルプロセッサにおいて命令を実行する方法であって、
資源にアクセスする、書込み命令および読取り命令に対する待ち時間値を記憶すること、
前記書込み命令がパイプライン化プロセッサ中を前進するときに、前記書込み命令たのめの完遂サイクル値を維持すること；および
前記読取り命令をストールさせるためのストール値を得るための、待ち時間値で完遂サイクル値を修正すること含む、前記方法。
【請求項３５】
パイプライン化プロセッサにおいて命令を実行する方法であって、
資源に書込みをする命令およびその資源から読取をする命令に対して、パイプライン化プロセッサ内で命令を監視すること；
前記資源にアクセスするそれぞれの書込み命令に対して、保留書込み表内に書込み命令タイプおよび完遂サイクル値を記憶すること；
書込み命令がパイプライン化プロセッサを通過して前進するときに、完遂サイクル値を更新すること；
前記資源にアクセスするそれぞれの読取り命令に対して、前記書込み命令タイプおよび前記読取り命令タイプに基づいて待ち時間を決定すること；
前記待ち時間値によって完遂サイクル値を修正して、必要なストールサイクル数を提供すること；および
読取り命令を、必要なストールサイクル数だけストールさせることを含む、前記方法。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
本発明は、ディジタルプロセッサに関し、より具体的には、パイプライン化ディジタルプロセッサにおけるハザード検出および管理のための方法および装置に関する。
【０００２】
発明の背景
多くのディジタルプロセッサはパイプラインを備える。パイプラインにおいては、命令を実行するのに使用されるハードウエアは、一連の段階に分割されている。例えば、１つの段階ではオペランドをフェッチし、第２の段階で算術演算を実施し、そして第３の段階で結果を記憶することができる。命令がパイプラインにロードされて、連続するクロックサイクルでパイプラインの連続する段階を通過する。
【０００３】
パイプラインの１つの利点は、先行の命令が完了する前に、命令を開始できる（すなわち命令の復号を開始できる）ことである。したがって、いくつかの命令が異なる実行段階に同時に存在することができる。このアプローチは、一般に、「パイプライン化（pipelining）」と呼ばれる。例えば、前述の３段階パイプラインにおいては、第１の命令がフェッチオペランド段階に供給され、この命令がフェッチオペランド段階を出た後に、次の段階で処理されている間に、第２の命令をフェッチオペランド段階に供給することができる。パイプライン化はスループットを改善し、それによってプロセッサの性能レベルを向上させる。
【０００４】
しかしながら、先行の命令が完了する以前に、命令を開始することに関連する潜在的なハザードがある。１つのタイプのハザードは、ある命令が先行命令の結果を使用する場合におこる。そのような場合は、本明細書においては「リード・アフタ・ライト（ＲＡＷ：read-after-write）」と呼ぶ。これらの従属性（dependency）を検出して適切に管理することによって、データを記憶しそれにアクセスする順序が、パイプライン化なしで行われる順序と違わないことを保証しなくてはならない。そうでないと、以下で述べるような誤りが発生することになる。
【０００５】
以下の命令順序は、ＲＡＷ従属性の例を示している。
Ｒ０＝Ｒ１＊Ｒ２
Ｒ３＝Ｒ０＋Ｒ４
この命令順序において、第１の命令はある値を計算して、その値をレジスタＲ０に書き込む（すなわち記憶する）。第２の命令は、Ｒ０の値を読み出してその値をＲ３の値を計算するのに使用する。このシーケンスをパイプライン化した場合には、第２の命令は、新規の値が記憶される以前にレジスタＲ０を読み出す可能性がある。その場合には、第２の命令は間違った値を使用し、誤った結果を生じさせる。したがって、第１の命令の結果が利用可能になるのに十分に長く、第２の命令をストール（stall）させるのが慣例である。
【０００６】
上記の例は、データレジスタに対するＲＡＷ従属性を示しているが、ＲＡＷ従属性は、それに限定はされないが、データレジスタ、アキュムレータ、条件コード（ｃｃ：condition code）レジスタ（例えば、１ビット幅レジスタ）、および／または記憶場所（memory location）を含む、任意のタイプの資源について発生する可能性がある。そのような資源は、必須ではないが、実行パイプラインに内部に常駐することがある。
ＲＡＷ従属性を検出して、結果が利用可能になるのに十分に長く命令をストールさせる方法は現在、存在している。１つのアプローチにおいては、各資源に対して状態ビットを維持し、各状態ビットが２つの可能な状態、「有効（valid）」および「無効（not valid）」を有する。資源に対する状態ビットは、その資源に書き込みする命令が検出されるときに、「無効」に設定される。状態ビットは、命令が完了するか、またはデータ（例えば、結果）が別の方法で利用可能なときに、「有効」に設定される。資源から読み出しする命令は、その資源に対する状態ビットが「有効」状態に設定されるまで、ストールされる。ストールさせることは、誤った結果を回避するためには必要であるが、それは性能を低下させるのものであり、できる限り制限すべきである。
【０００７】
結果が利用可能になるのに必要な時間の量は、プロセッサによって、または命令によっても変る可能性がある。データが利用可能な時期を判定して状態ビットを「有効」に設定するには、複雑な組み合せ論理回路が必要なことが多い。
したがって、現行の方法および装置によって提供される性能のレベルにもかかわらず、パイプライン化ディジタルプロセッサにおけるリードアフタライト従属性を管理するための改良型の方法および装置が必要とされている。
【０００８】
発明の概要
本発明の一観点によれば、命令を実行するためのパイプラインを有するディジタルプロセッサにおいて使用するための方法が提供される。この方法は、資源に書込みをする命令およびその資源から読取りをする命令のためのパイプライン内で命令を監視すること；前記資源に対して書込みをするそれぞれの命令に対して、書込み命令タイプ（write instruction type）および書込み命令追跡データ（write instruction tracking data）を記憶すること；前記資源から読取りをするそれぞれの命令に対して、読取り命令タイプを特定して、前記書込み命令タイプおよび前記読取り命令タイプに基づいて待ち時間値（latency value）を生成すること；および前記待ち時間値および前記書込み命令追跡データに応答してある数のストールサイクルだけ、前記資源から読取りをする命令の実行をストールさせることを含む。
【０００９】
本発明の別の観点によれば、命令を実行するためのパイプラインを有するディジタルプロセッサにおいて使用するための装置が提供される。この装置は、前記資源に書込みをするそれぞれの命令に対して書込み命令タイプを供給し、かつ前記資源から読取りをするそれぞれの命令に対して、読取り命令タイプを供給するために、資源に書込みをする命令およびその資源から読取をする命令のためのパイプライン内で命令を監視する手段；前記資源に対して書込みをするそれぞれの命令に対して、書込み命令追跡データを記憶する手段；前記書込み命令タイプおよび前記読取り命令タイプに基づいて待ち時間値を生成する手段；および前記待ち時間値および前記書込み命令追跡データに応答して、ある数のストールサイクルだけ、前記資源から読取りをする命令の実行をストールさせる手段を含む。
【００１０】
本発明の別の観点によれば、命令を実行するためのパイプラインを有するディジタルプロセッサにおいて使用するための装置が提供される。この装置は、資源に書込みをするパイプライン内の命令を受け取り、前記資源に書込みをするそれぞれの命令に対する書込み命令タイプを供給し、かつ前記資源から読取りをするそれぞれの命令に対する読取命令タイプを供給する、復号器回路；前記資源に書込みをするそれぞれの命令に対して書込み命令追跡データを記憶するための書込み追跡回路；前記書込み命令タイプおよび前記読取り命令タイプに基づいて待ち時間値を供給する待ち時間データ発生器回路（latency data generator circuit）；および前記待ち時間値および前記書込み命令追跡データを受け取り、前記待ち時間値および前記書込み命令追跡データに応答して、前記資源から読取りをする命令の実行を、ある数のストールサイクルだけストールさせる信号を供給する、ストール信号回路を含む。
【００１１】
本発明の別の観点によれば、命令を実行するためのパイプラインを有するディジタルプロセッサにおいて使用するための方法が提供される。この方法は、１つまたは２つ以上の資源に書込みをする命令および１つまたは２つ以上の資源から読取をする命令のためのパイプライン内で命令を監視すること；１つまたは２つ以上の資源に対して書込みをするそれぞれの命令に対して、少なくとも１つの書込み命令タイプおよび書込み命令追跡データを記憶すること；１つまたは２つ以上の資源から読取りをするそれぞれの命令に対して、少なくとも１つの読取り命令タイプを特定して、前記少なくとも１つの書込み命令タイプおよび前記少なくとも１つの読取り命令タイプに基づいて少なくとも１つの待ち時間値を生成すること；および前記少なくとも１つの待ち時間値および前記書込み命令追跡データに応答して、ある数のストールサイクルだけ、１つまたは２つ以上の資源から読取りをする命令の実行をストールさせることを含む。
【００１２】
本発明の１つまたは２つ以上の観点の１つまたは２つ以上の実施態様のいずれの潜在的効果にもかかわらず、本発明の任意の観点の任意の実施態様が従来技術の欠点に対処するという絶対的な必要性がないことを理解すべきである。
【００１３】
詳細な説明
図１は、本発明の一態様によるデータ従属性管理回路（以下、データ従属性マネージャまたはＤＤＭ：Data Dependency Managerと記す）を使用するパイプライン３０を有するディジタルプロセッサの一例を示す。パイプライン３０は、一連の段階、すなわちＩＦ１、ＩＦ２、ＩＦｎ、ＡＣ１、ＡＣ２、ＡＣｎ、ＬＳ、ＥＸ０、ＥＸ１、ＥＸ２、ＥＸ３、ＥＸ４およびＷＢに分割されており、命令フェッチユニット３２、命令復号ユニット３３、データアドレス発生器（ＤＡＧ）３４、データロード／記憶ユニット３６、データレジスタファイル３７、実行ユニット３８、および記憶ユニット４０を含む。パイプライン３０は、単一モノリシック集積回路として構成することができるが、それに限定されるものではない。
【００１４】
動作に際しては、命令がパイプライン３０にロードされて、連続クロックサイクルでパイプライン中を進行する。特に、ＩＦ１段階において、命令フェッチユニット３２によって、メモリから、または命令キャッシュから命令４２がフェッチされる。ＩＦ２段階において、命令４２は、命令復号ユニット３３によって復号されて、ＤＡＧ命令（すなわち、ＤＡＧを必要とする命令）として、または非ＤＡＧ命令（すなわち、ＤＡＧを必要としない命令）として識別される。命令４２がＤＡＧ命令である場合には、ＤＡＧ３がアクセスしようとするデータのアドレスを発生して、それらのアドレスがロード／記憶ユニット３６に供給される。命令がＤＡＧ命令でない場合には、命令復号器３３は、復号された命令を出力し、それが最終的にロード／記憶ユニット３６および実行ユニット３８に到達する。
【００１５】
ＬＳ段階において、ＤＡＧ３４によって生成されるアドレス（および／またはオペランドのソースを識別する、その他の信号）が、ロード／記憶ユニット３６に供給されて、このユニットが、それに応じてデータをロードする。ＥＸ０段階においては、そのようなデータがデータレジスタファイル３７に供給される。ＥＸ１〜ＥＸ４段階においては、実行ユニット３８が、命令を受け取って、適当に実行する。ＷＢ段階においては、記憶ユニット４０が、実行ユニット３８からの結果（複数を含む）をメモリまたは別の指定資源に記憶し（書き込み）、それによって命令４２の実行を完了する。
【００１６】
実行ユニット３８はｎ個の実行段階を有し、その内の４つ、ＥＸＵ段階３８ａ、ＥＸＵ段階３８ｂ、ＥＸＵ段階３８ｃ、およびＥＸＵ段階３８ｄを示してある。それぞれの実行段階は、パイプラインの特定の段階と関連させることができる。例えば、ＥＸＵ段階３８ａはパイプライン段階ＥＸ１と関連し、ＥＸＵ段階３８ｂはパイプライン段階ＥＸ２と関連させることができるなどである。この態様において、ＥＸＵ段階３８ａは、加算演算を実行し、ＥＸＵ段階３８ｂは積算演算を実行し、ＥＸＵ段階３８ｃはシフト動作を実行し、そしてＥＸＵ段階３８ｄは論理演算を実行する。その他の実行段階は、例えば、同じ、または異なる動作（複数を含む）を実行することができる。
【００１７】
実行ユニット３８は、データ経路４６、４８、５０を含み、これらは、結果を１つの実行段階から次の実行段階へと移動させるのに使用される。これは、「転送（forwarding）」と呼ばれることもある。転送は、ＷＢ段階において実際に書き込まれる以前（すなわち、命令が完了する以前）に、命令の結果を利用可能にする。ＷＢ段階について以下に述べる。実際に、プロセッサは多くのそのようなデータ経路を含むことがある。図１の態様において、データ経路４６は、ＥＸＵ段階３８ａの出力を、ＥＸＵ段階３８ａの入力へとともに、データレジスタファイル３７の入力へと転送する。データ経路４８は、ＥＸＵ段階３８ｂの出力を、ＥＸＵ段階３８ｂの入力、ＥＸＵ段階３８ａおよびデータレジスタファイル３７へと転送する。データ経路５０は、ＥＸＵ段階３８ｃの出力を、ＥＸＵ段階３８ｃ、ＥＸＵ段階３８ｂ、ＥＸＵ段階３８ａおよびデータレジスタファイル３７の入力に転送する。
【００１８】
前述のように、ＲＡＷ従属性を検出して、資源から読取りをする命令をストールさせて、先の書込み命令によってデータが更新される以前に、その命令がその資源からデータの読取りをしないことを保証することが重要である。これを達成するために、パイプライン３０には、データ従属性マネージャ６０（以後はＤＤＭ６０と記す）が設けられている。ＤＤＭ６０は、パイプライン３０内の命令を監視して、（ａ）１つまたは２つ以上の資源に書込みをする保留中（pending）の命令、および（ｂ）１つまたは２つ以上の資源から読取りをする保留中の命令を識別する。ＤＤＭ６０は、信号線６１で表わされた、信号線（複数を含む）から命令を受け取る。「資源から読取りをする命令」という語句は、（１）資源からデータを受け取る命令、および（２）転送によってデータを受け取る命令（すなわち、その資源のために生成されるが、その資源中にまた記憶されていないデータ）を含むことを意味するものである。以下では、１つまたは２つ以上の資源に書込みをする命令を、「書込み命令（write instruction）」と呼ぶことがある。また、１つまたは２つ以上の資源から読取りをする命令を、「読取り命令（read instruction）」と呼ぶことがある。命令によっては、（１）オペランドを読み取り、かつ（２）結果を書き込むことができるものもある。そのような命令は、読取り命令および書込み命令の両方として見なすことができる。
【００１９】
ＤＤＭ６０が、保留中の読取り命令を検出すると、ＤＤＭ６０は、この命令をストールさせる必要があるかどうかを判定する。ＤＤＭ６０が判定を行う方法は、図２〜４を参照して以下に述べる。読取り命令をストールさせる必要がある場合には、ＤＤＭ６０は、信号線６６によって表わされる信号線（複数を含む）上に制御信号を生成し、それによって命令はパイプラインの主流の外へと進路を変えられて、バッファ７０（例えば、レジスタのバンク、時にはスキッドバッファ（skid buffer）と呼ばれる）に中に入る。この命令は、適当なサイクル数の間、バッファ７０内に残り、その後に、命令はバッファ７０を出て、パイプライン３０を通過するコースを再開する。バッファ７０は通常、先入れ先出し（すなわち、ＦＩＦＯ：first-in-first-out）であり、バッファ７０中へと進路を変えられる最初の命令は、バッファ７０から出る最初の命令でもあることを意味する。また、ＤＤＭ６０は、（上流命令を上流スキッドバッファ７２に進路を変えることによって）上流命令をストールさせる制御信号６８を生成して、バッファ７０に記憶する必要のある命令数を制限することもできる。ＤＤＭ６０は、また、制御信号（図示せず）を生成して、追加の命令がパイプライン３０にロードされるのを防止することができる。
【００２０】
図１に示すＤＤＭ６０は、ＤＤＭ段階６２およびＤＤＭ段階６４を含む。ＤＤＭ段階６２は、パイプライン３０のＡＣ１段階に位置し、ＤＤＭ段階６４は、パイプライン３０のＡＣ２段階に位置する。ＤＤＭ６０をこれらの段階に配置することによって、ＬＳ段階（ロード／記憶段階）に先行して、読取り命令をストールさせることが可能になる。これによって、命令をストールさせることに伴うオーバヘッドを取り扱うのが容易となる。例えば、読取り命令がＬＳ段階後にストールされた場合には、ストールされた命令に関連するデータを記憶するのに追加のバッファが必要となる。このような利点にもかかわらず、ＤＤＭ６０をＡＣ段階に配置すること、またはさらにロード／記憶段階の上流に配置することは、必要条件ではない。
【００２１】
図２は、ＤＤＭ６０の一態様のブロック図である。このＤＤＭ６０の態様は、ＤＤＭ段階６２およびＤＤＭ段階６４を含む。段階６２は、復号器１１０を含む。段階６４は、保留書込み追跡ユニット（pending write tracking unit）１１２、待ち時間ユニット（latency unit）１１３、およびストール持続時間発生器（stall duration generator）１１４を含む。
動作に際して、命令は、信号線（複数を含む）６１を介して復号器１１０に供給される。復号器が書込み命令を検出すると、復号器１１０は２つの信号、すなわち書込み資源信号（write resource signal）および書込みタイプ信号（write type signal）を生成する。書込み資源信号は、書込み命令によってそれに書き込まれる資源を指示する。書込みタイプ信号は、書込み命令のタイプまたはカテゴリを指示する。例えば、この態様においては、ＥＸＵ段階３８ａを使用して資源に書き込まれる結果を生成する命令は、書込みタイプ１と呼ぶ。ＥＸＵ段階３８ｂを使用して資源のための結果を生成する命令は、書込みタイプ２と呼ぶ。ＥＸＵ段階３８ｃを使用して資源に対する結果を生成する命令は、書込みタイプ３と呼ぶ、などである。
【００２２】
書込みタイプ信号および書込み資源信号は、それぞれ信号線１１６、１１７を介して保留書込み追跡ユニット１１２へと供給される。書込み追跡ユニット１１２は、各資源に対して最後に検出された書込み命令の書込みタイプおよび実行状態を追跡する。この特定の態様においては、保留書込み追跡ユニット１１２が記憶するのは、各資源に対して２つのタイプの情報、すなわち（１）各資源に対して最後に検出された書込み命令の書込みタイプ、および（２）その資源に対して最後に検出された書込み命令に対する書込み追跡データである。書込み追跡データは、（ａ）パイプライン内部での書込み命令の位置を特定する、（ｂ）書込み命令の書込み部分が完全かどうかを判定する、および（ｃ）書込み命令の書込み部分が完全になるまでに残留するサイクル数を求める、ことができる。この態様においては、書込み追跡データは、書込み命令の書込み部分を完了するのに必要なサイクル数（本明細書においては、完遂サイクル（cycle-to-commit）を意味する）を表わす。書込み追跡データは、通常、命令がパイプラインを通過して前進するときに更新される。保留書込み追跡ユニット１１２の一態様について図５を参照して説明する。
【００２３】
復号器１００が読取り命令を検出すると、復号器１１０は、読取り資源信号をよび読取りタイプ信号を生成する。読取り資源信号は、読取り命令によって読み取られることになる資源を指示する。読取りタイプ信号は、読取り命令の読取りタイプまたはカテゴリを指示する。例えば、この態様においては、資源を読み取ってＥＸＵ段階３８ａのためのオペランドを取得する命令は、読取りタイプ１と呼ばれる。資源を読み取ってＥＸＵ段階３８ｂのオペランドを取得する命令は、読取りタイプ２と呼ばれる。資源を読み取ってＥＸＵ段階３８ｃのオペランドを取得する命令は、読取りタイプ３と呼ばれる。
【００２４】
読取りタイプ信号は、信号線１１８を介して、以下に説明する待ち時間ユニット１１３に供給される。読取り資源信号は、信号線１１９を介して、保留書込み追跡ユニット１１２に供給される。保留書込み追跡ユニット１１２は、読取り資源に対する最後に検出された書込み命令に関する情報を提供することによって応答する。この特定の態様においては、保留書込み追跡ユニット１１２は、２種類の信号、すなわち（１）記憶書込みタイプ（stored write type）信号、および（２）書込み追跡（write tracking）信号を供給する。記憶書込みタイプ信号は、読取り命令において識別された資源に対して最後に検出された書込み命令の書込みタイプを指示する。書込み追跡信号は、読取り命令において識別される資源に対して最後に検出された書込み命令の書込み部分を完了するのに必要なサイクル数を指示する。書込み追跡信号は、信号線１２１上で、以下に説明する、ストール持続時間発生器（stall duration generator）１１４に供給される。記憶書込みタイプ信号は、信号線１２０上で待ち時間ユニット１１３に供給されて、このユニットは、上述のように、信号線１１８上で読取りタイプ信号も受け取る。
【００２５】
この待ち時間ユニット１１３は、様々なタイプの書込み命令と様々なタイプの読取り命令との間の必要な待ち時間（または遅延）を指示するデータを記憶する。例えば、この特定の態様においては、待ち時間ユニット１１３は、書込みタイプ１の書込み命令と読取りタイプ１の読取り命令の間の必要な遅延を指示するデータを記憶する。待ち時間ユニット１１３はまた、書込みタイプ１の書込み命令と読取りタイプ２の読取り命令との間の必要な遅延を指示するデータも記憶する。待ち時間ユニット１１３は、１つまたは２つ以上のルックアップ表として実装することができる。待ち時間ユニット１１３の１つの態様について、図３を参照して次に述べる。
【００２６】
待ち時間ユニット１１３は、資源に対して最後に検出された書込み命令のタイプと、資源から読み取られる読取り命令のタイプとの間に必要な待ち時間を指示する待ち時間信号を出力する。待ち時間は、クロックサイクルまたはその他の任意適当な測度単位（複数を含む）で表わすことができる。
待ち時間信号は、信号線１２２上でストール持続時間発生器１１４に供給されて、ストール持続時間発生器１１４は書込み追跡信号も受け取る。ストール持続時間発生器１１４は、読取り命令をストールさせるのに適当なサイクル数を決定することによって応答する。適当なストールサイクル数を指示する出力信号は信号線６６上で供給される。ストール持続時間発生器の一態様について、図７Ａ〜７Ｃを参照して以下に説明する。
【００２７】
図３は、待ち時間ユニット１１３用のルックアップ表の一態様を示す。このルックアップ表は、ｎ個の書込みタイプ（すなわち、ｎ個のタイプの書込み命令）およびｍ個の読取りタイプ（すなわち、ｍ個のタイプの読取り命令）を収容する。この態様においては、書込みタイプ１は、（この態様においては加算演算を実行する）ＥＸＵ段階３８ａからの結果を生成する命令を意味する。書込みタイプ２は、（この態様においては積算演算を実行する）ＥＸＵ段階３８ｂからの結果を生成する命令を意味する。書込みタイプ３は、（この態様においてはシフト動作を実行する）ＥＸＵ段階３８ｃからの結果を生成する命令を意味する。書込みタイプ４は、（この態様においては、シフト動作を実行する）ＥＸＵ段階３８ｄからの結果を生成する命令を意味する。同様に、読取りタイプ１は、それのオペランドがＥＸＵ段階３８ａに供給されるべき命令を意味する。読取りタイプ２は、それのオペランドがＥＸＵ段階３８ｂに供給されるべき命令を意味する。読取りタイプ３は、それのオペランドがＥＸＵ段階３８ｃに供給されるべき命令を意味する。読取りタイプ４は、それのオペランドがＥＸＵ段階３８ｄに供給されるべき命令を意味する。
【００２８】
ルックアップ表内の各値は、（本明細書においては、「書込みタイプ‐読取りタイプ組合せ」と呼ぶ）特定のタイプの書込み命令と特定のタイプの読取り命令との間の、（クロックサイクル数で表わした）必要な待ち時間を表わしている。例えば、書込みタイプ１と読取りタイプ１との間（すなわち、「書込みタイプ１‐読取りタイプ１組合せ」）の待ち時間は、１クロックサイクルに等しい。書込みタイプ１と読取りタイプ２の間の待ち時間はゼロに等しい。書込みタイプ１と読取りタイプ３との間の待ち時間も、ゼロに等しく、書込みタイプ１と読取りタイプ４の間の待ち時間もゼロクロックサイクルに等しい。書込みタイプ４と読取りタイプ１、２、および３の間の待ち時間は、すべて７クロックサイクルに等しい。
【００２９】
この態様においては、ルックアップ表内の各場所は３ビットを含み、したがって０〜７クロックサイクルの待ち時間を表わすことができる。異なるパイプラインアーキテクチャは、ルックアップ表内で異なるビット数を必要とするとともに、異なる待ち時間を必要とする可能性がある。この態様においては、表内の値は固定されており、したがってルックアップ表は、読取り専用メモリ（ＲＯＭ）またはプログラマブル読取り専用メモリとして実装することが可能であるが、これは本発明の必要条件ではない。
【００３０】
パイプライン３０（図１）における、特定の書込みタイプ‐読取りタイプ組合せに対する待ち時間値を生成する１つの方法は、以下のとおりである。（書込み命令によって）書き込まれようとする結果が、その結果を（読取り命令に）供給すべきパイプライン段階の上流で生成される場合には、読取り命令をストールさせる必要は無く、待ち時間値はゼロに設定される。そうでない場合には、待ち時間値は、転送経路が、結果が生成されるパイプライン段階と、結果が供給されるパイプライン段階との間に設けられるかどうかによって決まる。転送経路が設けられる場合には、待ち時間値は、その転送経路を通過する遅延に等しく設定される。転送経路が設けられていない場合には、待ち時間値は、７クロックサイクル（すなわち、レジスタの読取りとレジスタの書込みとの間のパイプライン段階数、これはこの態様においてはパイプランの終了点で発生する）に設定され、その結果、読取り命令が、書込み命令の書込み部分を完了するのに十分に長くストールされる。特定の用途における待ち時間値は、パイプラン深さおよび構成に依存することが理解されるであろう。
【００３１】
上記の方法の実現例を以下に示す。ここで、データ経路４６、４８、５０を通過する遅延は、以下の表１に示したとおりであると仮定する。
表１
【表１】
2006517322.tif 000003
【００３２】
実施例１：書込みタイプ１と読取りタイプ１の間の待ち時間
図３のルックアップ表が示すように、書込みタイプ１と読取りタイプ１の間の待ち時間は１クロックサイクルに等しい。その根拠は次のとおりである。（書込み命令によって）記憶すべき結果は、（読取り命令に従って）段階３８ａの出力において供給される。この結果は、段階３８ａの入力に供給されることになる。段階３８ａへの入力が、段階３８ａの出力の上流であるので、待ち時間は、転送経路が設けられているかどうかによって決まる。この態様においては、段階３８ａの出力と段階３８ａの入力との間に転送経路が設けられており（データ経路４６を参照）、その経路を通過する遅延は１クロックサイクルである（表１の項目２を参照）。
【００３３】
実施例２：書込みタイプ１と読取りタイプ２の間の待ち時間
図３のルックアップ表は、書込みタイプ１と読取りタイプ２の間の待ち時間がゼロに等しいことを指示している。その根拠は次のとおりである。（書込み命令によって）記憶すべき結果は、段階３８ａの出力において提供される。この結果は、（読取り命令に従って）段階３８ｂの入力に供給されるものである。結果は、供給すべき段階の上流で生成されるので、待ち時間はゼロに等しく設定される。
【００３４】
実施例３：書込みタイプ４と読取りタイプ１の間の待ち時間
図３のルックアップ表は、書込みタイプ４と読取りタイプ１の間の待ち時間は７クロックサイクルに等しいことを示している。その根拠は次のとおりである。（書込み命令によって）記憶すべき結果は、段階３８ｄの出力において提供される。この結果は、（読取り命令に従って）段階３８ａの入力に供給される。段階３８ａへの入力は、段階３８ｄの出力の上流であるので、待ち時間は、転送経路が設けられているかどうかによって決まる。この態様においては、段階３８ｄとその他任意の段階との間に転送経路は設けられていない。したがって、待ち時間は７クロックサイクルに設定し（すなわち、レジスタの読取りとレジスタの書込みとの間のパイプライン段階の数、この態様においては、これはパイプラインの端部で発生する）、それによって読取り命令は、書込み命令の書込み部分を完了するのに十分長くストールされる。
【００３５】
図４は、図２の保留書込み追跡ユニット１１２の一態様を示す。この態様においては、保留書込み追跡ユニット１１２は、保留書込みタイプ表１４０および完遂サイクル表（cycles-to-commit table）１４２を含む。保留書込みタイプ表１４０は、複数のマルチビットレジスタ１４４０〜１４４ｋ−１およびマルチプレクサ１５２を含む。それぞれのレジスタ１４４０〜１４４ｋ−１は、ＤＤＭ６０（図１）によってサポートされる資源のそれぞれ１つに対応する。例えば、レジスタ１４４０は、資源０に対応する。レジスタ１４４ｋ−１は資源ｋ−１に対応する。同様に、サイクル完遂表１４２は、複数のマルチビットレジスタ１４６０〜１４６ｋ−１およびマルチプレクサ１６２を含む。レジスタ１４６０〜１４６ｋ−１のそれぞれは、ＤＤＭ６０によってサポートされる資源の１つとそれぞれ対応する。例えば、レジスタ１４６０は資源０に対応する。レジスタ１４６ｋ−１は資源ｋ−１に対応する。
【００３６】
復号器１１０（図２）からの書込み資源信号は、レジスタ１４４０〜１４４ｋ−１の入力と結合されて、復号器１１０からの書込みタイプ信号はレジスタ１４４０〜１４４ｋ−１のデータ入力と結合される。書込み命令が検出されると、書き込もうとする資源に対応するマルチビットレジスタが、書込み資源信号によって選択されて、書込み命令の書込みタイプが選択されたレジスタに書き込まれる。
マルチビットレジスタ１４４０〜１４４ｋ−１の出力は、マルチプレクサ１５２のそれぞれの入力に供給される。マルチプレクサ１５２は、信号線１２０上に書込みタイプ信号を供給する出力を有する。マルチプレクサ１５２は、信号線１１９上の読取り資源信号によって制御される。読取り命令が検出されると、マルチプレクサ１５２は、読み取るべき資源に対して最後に検出された書込み命令の書込みタイプを出力する。
【００３７】
復号器１１０（図２）からの書込み資源信号は、レジスタ１４６０〜１４６ｋ−１の制御入力と結合され、論理「１」がレジスタ１４６０〜１４６ｋ−１のデータ出力に結合される。資源に対する書込み命令が検出されると、書込みをすべき資源に対応するマルチビットレジスタが、書込み資源信号によって選択されて、選択されたレジスタが、図５Ａに関して以下に述べるように、すべて１に初期化される。レジスタ１４６０〜１４６ｋ−１の出力は、マルチプレクサ１６２のそれぞれの入力に供給される。マルチプレクサ１６２は、信号線１２１上に書込み追跡信号を供給する出力を有する。マルチプレクサ１６２は、信号線１１９上の読取り資源信号によって制御される。資源に対する読取り命令が検出されると、マルチプレクサ１６２は、読取りしようとする資源に対して最後に検出された書込み命令の書込み部分を完了するのに必要なサイクル数を出力する。
【００３８】
サイクル完遂表１４２におけるそれぞれのレジスタ１４４０〜１４４ｋ−１は、好ましくはシフトレジスタである。図５Ａは、使用することのできるシフトレジスタの一態様を示す。この態様においては、シフトレジスタにおけるビット数は７、すなわちレジスタの読取りとレジスタの書込みの間の段階数であり、これはこの態様ではパイプラインの端部において発生する。シフトレジスタ内の１の数は、保留書込み命令が結果を資源に書き込むまでに残っているサイクル数を指示する。ＤＤＭ６０が書込み命令を検出すると、関連するシフトレジスタのすべてのビットは１に設定される。各クロックサイクルについて、各レジスタ内の項目は、１ビット右にシフトされる（０が最左端ビットにシフトされる）。これによって、シフトレジスタ内の１の数が減少し、書込み命令がパイプラインの終端に１サイクル近づいたことを指示する。ビット列「１１１１１１１」は、書込み命令がパイプラインの終端に到達するのに７サイクルが必要であることを意味する（図５Ｂを参照）。ビット列「０００００００」は、書込み命令がパイプラインの終端に到達し、すでに保留中ではないことを示す（図５Ｃ参照）。
【００３９】
図６は、完遂サイクル表１４２において使用されるシフトレジスタの一態様を示す。この態様においては、各シフトレジスタは、Ｎ段階（シフトレジスタ内の１ビットに対して１つ）を含む、そのうちの７つ、すなわち３０００、３００１、３００２、３００３、３００４、３００５、３００Ｎ−１を示してある。段階３０００〜３００Ｎ−１のそれぞれは、マルチプレクサおよびラッチを含む。ラッチの出力は、全体としてＣＴＣ信号を形成する。各マルチプレクサのＩＮ１入力は、論理ハイ信号（例えば、１）を受け取る。各マルチプレクサの制御入力は、書込み資源信号を受け取る。各マルチプレクサの出力は、それぞれの段階に対するラッチの入力に供給される。段階３００Ｎ−１を除いて、各マルチプレクサのＩＮ０入力は、ＣＴＣ信号の第２最上位ビットに関連する段階のラッチの出力を受け取る。例えば、段階３０００のマルチプレクサの入力ＩＮ０は、段階３００１のラッチからの出力を受け取る。論理ロー信号（例えば、０）が、段階３００Ｎ−１のマルチプレクサのＩＮ０入力に供給される。
【００４０】
シフトレジスタの動作は次のとおりである。書込み資源信号がアサートされると、段階３０００〜３００Ｎ−１のそれぞれは、クロックがハイになるときに、１をロードする。書込み資源信号がアサートされない場合には、データは、クロックがハイになるときに、１ビットＬＳＢの方向にシフトする。
図７Ａは、図２のストール持続時間発生器１１４の一態様を示す。この態様においては、ストール持続時間発生器１１４は、シフトユニット１７０およびＯＲゲート１７４ａ、１７４ｂ．．．．１７４ｎを含む。待ち時間信号は、シフトユニット１７０に供給されて、シフトユニットは、書込み追跡信号を待ち時間値の逆値に等しい量だけ右シフトさせる。シフトユニット１７０の出力における１の数は、必要なストールサイクル数または読取り書込みデータ従属性に対応するためのＮＯＰｓを指示する。この態様においては、データ従属性に対応するのに必要なストールサイクル数は、対応する読取り命令が検出されるときの、ルックアップ表からの待ち時間値から書込み命令が前進したサイクル数を引いた待ち時間値に等しい。
【００４１】
シフトユニット１７０の出力は、ＯＲゲート１７４ａ、１７４ｂ、．．．１７４ｎに供給され、これらのＯＲゲートは、信号線６６上で、その他のハザード信号を受け取り、ＲＡＷ従属性のためのストールサイクルまたはＮＯＰｓの必要数、またはその他のハザードに対する必要なストールサイクル数のいずれか大きい方を指示することによって、マルチビット出力信号を提供する。この態様においては、マルチビット出力信号における１の数は、必要なストールサイクル数を指示する。しかしながら、ここで、本発明はこの形態に限定されないことを認識すべきである。
【００４２】
図７Ｂは図７Ａのシフトユニット１７０の一態様を示す。シフトユニット１７０は、８対１マルチプレクサ１８０を含み、８つの入力および出力結果のそれぞれは、７ビットである。マルチプレクサ１８０への入力は、書込み追跡信号（ＷＴ）、１ビット右シフトされた書込み追跡信号（ＷＴ＞＞１）、２ビット右シフトされた書込み追跡信号（ＷＴ＞＞２）、．．．および７ビット右シフトされた書込み追跡信号（ＷＴ＞＞７）である。右シフトされた書込み追跡信号は、７ビット書込み追跡信号をマルチプレクサ１８０の入力に適当に配線することによって得られる。マルチプレクサ１８０への制御入力は、待ち時間値である。マルチプレクサ１８０は、７ビット出力結果を生成する。待ち時間値と出力エ結果との関係を、図７Ｃの表に示してある。上述のように、出力結果内の論理１の数は、必要なストールサイクル数を表わす。
【００４３】
ＤＤＭ６０の一態様の動作例を図８Ａ〜８Ｆに示してある。特に、図８Ａ〜８Ｆは、ＤＤＭ６０（図１）の一態様に対する１つの特定の命令系列についての、パイプライン３０の連続状態を示している。ここで、この例においては、パイプライン３０（図１）のＡＣ段階の数は、３であり、ＤＤＭ６０は、図１に示すように、ＡＣ１段階とＡＣ２段階に位置していることに留意されたい。
【００４４】
図８Ａを参照すると、この図はパイプラインの第１の状態を示しており、命令系列は、（段階ＡＣ１における）積算命令および（段階ＩＦｎにおける）加算命令を含む。この命令系列は、積算命令がレジスタＲ０に結果を書き込み、加算命令がそのレジスタＲ０内のデータをオペランドとして使用することにおいて、ＲＡＷ従属性を表わす。ＤＤＭ６０は、積算命令がレジスタＲ０に書込みをすること、および積算命令が書込みタイプ２であることを特定する。
【００４５】
図８Ｂを参照すると、この図はパイプラインの第２の状態を示しており、積算命令は、ＡＣ２段階へと前進し、ＤＤＭ６０はＲ０用の完遂サイクルレジスタを上述のように「１１１１１１１」に設定する。加算命令は、ＡＣ１段階へと前進する。ＤＤＭは、加算命令がレジスタＲ０から読み取ること、加算命令は読取りタイプ１であることを特定する。
【００４６】
図８Ｃを参照すると、この図はパイプラインの第３の状態を示しており、積算命令はＡＣ３段階に進み、ＤＤＭ６０はＲ０用の完遂サイクルレジスタを「０１１１１１１」に右シフトする。加算命令はＡＣ２段階に進む。図３のルックアップ表は、書込みタイプが２であり、読取りタイプ１である場合に、２つのクロックサイクルの待ち時間が必要であることを指示する。したがって、この態様における必要なストールサイクル数は１、すなわち待ち時間値から、対応する読取り命令が検出されるときに、書込み命令が前進したサイクル数を引いたものである。
【００４７】
図８Ｄを参照すると、この図はパイプラインの第４の状態を示しており、積算命令はＬＳ段階へと進む。加算命令は、ＡＣ３段階へと進み、１ストールサイクルの間、スキッドバッファ（図１）中へと進路を変えられる。
図８Ｅを参照すると、この図はパイプラインの第５の状態を示しており、積算命令は、ＥＸ０段階へと進む。パイプラインに「ＮＯＰ」が挿入されて、ＬＳ段階まで前進する。ストールサイクル数は満了しているので、加算命令はスキッドバッファから出て、ＡＣ３段階への戻る。
図８Ｆを参照すると、この図はパイプラインの第６の段階を示しており、積算命令は、ＥＸ１段階へと進む。「ＮＯＰ」がＥＸ０段階へと進む。加算命令は、ＬＳ段階へと進む。３つの命令すべての実行は、さらなるストールサイクルなしに進行する。
【００４８】
１つの資源に書込みをする書込み命令と１つの資源から読取りをする読取り命令について、ＤＤＭ６０を説明したが、本発明はそれに限定されるものではない。
例えば、態様によっては、２つ以上のオペランドを有する読取り命令を使用し、したがって２つ以上の資源から読取りが行われる。リード・アフタ・ライト（read-after-write）従属性が、いずれの資源についても発生する可能性がある。したがって、読取り命令を十分長くストールさせて、読取り命令の読取りがいずれのデータについても早すぎないことを保証するのが望ましい。
【００４９】
同様に、態様によっては、２つ以上の資源に書込みをする書込み命令を使用するものがある。例えば、命令によっては、結果を生成して、次いでその結果を複数の資源に書き込むものがある。さらに、態様によっては、２つ以上の書込みタイプを有する書込み命令を使用し、これは、結果が２つ以上の実行段階で生成されることを意味する。
例えば、命令によっては、複数の命令を開始して、複数の結果を生成し、そレらの結果のそれぞれが、異なる資源に書き込まれるようにすることができる。結果の１つがＥＸＵ段階３８ａによって生成され、その結果の別の１つがＥＸＵ段階３８ｂによって生成される場合には、この命令は、第１の結果に関しては書込みタイプ１、第２の結果に関しては書込みタイプ２とみなすことができる。
【００５０】
同様に、読取り命令は、２つ以上の読取りタイプを有することがあり、これはその命令が２つ以上の実行段階からデータを読み取ることを意味する。例えば、ある命令は２つの資源を読み取ることができる。１つの資源からのデータが、ＥＸＵ段階３８ａに供給され、第２の資源からのデータがＥＸＵ段階３８ｂへ供給されると、その命令は、第１の資源に関しては読取りタイプ１であり、第２の資源に関しては読取りタイプ２であるとみなすことができる。
【００５１】
図９は、ＤＤＭ６０（図１）の別の態様のブロック図である。この態様においては、ＤＤＭ６０は、（１）２つまでの資源に書込みをする書込み命令、および（２）２つまでの資源から読取りをする読取り命令を、収容する。このＤＤＭの態様は、段階２００および２０２を含む。第１の段階２００は、復号器２１０を含む。第２の段階２０２は、保留書込み追跡ユニット２１２、待ち時間ユニット２１３およびストール持続時間発生器２１４を含む。
【００５２】
動作に際しては、命令は信号線（複数を含む）６１を介して復号器２１０に供給される。復号器が書込み命令を検出すると、復号器２１０は少なくとも２つの信号、すなわち（１）write resource1信号、および（２）write typeresource1信号を生成する。write resource1信号は、その書込み命令によって書き込まれるべき第１の資源を指示する。write typeresource1信号は、第１の資源に関する書込み命令の書込みタイプまたはカテゴリを指示する。復号器が、書込み命令が２つ以上の資源への書込みをすると判定した場合には、復号器２１０は、さらに２つの信号、すなわち（１）write resource2信号、および（２）write typeresource２信号を生成する。write resource2信号は、書込み命令によって書き込まれるべき第２の資源を指示する。write typeresource２信号は、第２の資源に関する書込み命令の書込みタイプまたはカテゴリを指示する。
【００５３】
信号write typeresource1、write typeresource２、write resource1、write resource2は、信号線２１６、３１６、２１７、３１７をそれぞれ介して保留書込み追跡ユニット２１２に供給される。保留書込み追跡ユニット２１２は、各資源に対して最後に検出された書込み命令の、書込みタイプおよび実行／完了状態を追跡する。図２に示し上述した、保留書込み追跡ユニット１１２と同様に、保留書込み追跡ユニット２１２は、各資源に対して２つのタイプの情報、すなわち（１）その資源に対して最後に検出された書込み命令の書込みタイプ、および（２）その資源に対して検出された最後の書込み命令のための書込み追跡データ、を記憶する。書込み追跡データは、例えば、書込み命令の書込み部分を完了するのに必要なサイクル数を表わすことができる。書込み追跡データは、通常、命令がパイプラインを前進するにつれて、更新される。
【００５４】
復号器２１０が読取り命令を検出すると、復号器２１０は少なくとも２つの信号、すなわち（１）read resource1信号、および（２）read typeresource1信号を生成する。read resource1信号は、その読取り命令によって読み取られるべき第１の資源を指示する。read typeresource1信号は、その第１の資源に対する読取り命令の読取りタイプまたはカテゴリを指示する。復号器２１０が、その読取り命令が２つ以上の資源から読取りをすると判定する場合には、復号器２１０はさらに２つの信号、すなわち（１）read resource2信号、および（２）read typeresource2信号を生成する。read resource2信号は、その読取り命令によって読み取るべき第２の資源を指示する。read typeresource2信号は、第２の資源に対する、読取り命令の読取りタイプまたはカテゴリを指示する。
【００５５】
read typeresource1信号およびread typeresource2信号は、信号線２１８、３１８をそれぞれ介して、待ち時間ユニット２１３に供給される。read resource1信号およびread resource2信号は、信号線２１９、３１９を介して保留書込み追跡ユニット２１２に供給される。保留書込み追跡ユニット２１２は、その読取り命令によって読み取られるべき資源（複数を含む）に対する、最後に検出された書込み命令に関する情報を提供することによって応答する。この特定の態様においては、保留書込み追跡ユニット２１２は、４つの信号、すなわち（１）stored write typeresource1信号、（２）write trackingresource1信号、（３）stored write typeresource2信号、および（４）write trackingresource2信号を供給する。stored write typeresource1信号は、読み取るべき第１の資源に対して、最後に検出された書込み命令の書込みタイプを指示する。
【００５６】
write trackingresource1信号は、その読取り命令によって読み取るべき第１の資源に対して最後に検出された書込み命令の書込み部分を完了するのに要するサイクル数を指示する。２つ以上の資源を読み取るべき場合には、stored write trackingresource２信号は、読み取るべき第２の資源に対して、最後に検出された書込み命令の書込みタイプを指示する。write trackingresource2信号は、その読取り命令によって読み取るべき第２の資源に対して最後に検出された書込み命令の書込み部分を完了するのに要するサイクル数を指示する。
【００５７】
write trackingresource1信号およびwrite trackingresource2信号は、それぞれ信号線２２１、２３１上に供給されて、持続時間発生器２１４をストールさせる。stored write typeresource1信号およびstored write typeresource2信号は、それぞれ信号線２２０、３２０上で、待ち時間ユニット２１３に供給されて、この待ち時間ユニットは、上述のように、それぞれ信号線２１８、３１８上でread typeresource1信号およびread typeresource2信号も受け取る。
待ち時間ユニット２１３は、通常、様々なタイプの書込み命令と様々なタイプの読取り命令の間に必要となる、待ち時間（または遅延）を指示するデータを記憶する。待ち時間ユニット２１３は、１つまたは２つ以上のルックアップ表として実現することができる。
【００５８】
待ち時間ユニット２１３は、少なくとも１種の信号、latency1を出力し、この信号は、読み取るべき第１の資源に対する最後に検出された書込み命令のタイプと、第１の資源から読み取るべき読取り命令のタイプとの間に必要な待ち時間を指示する。読取り命令によって２つ以上の資源を読み取るべき場合には、待ち時間ユニットは、第２の信号、latency2を出力し、この信号は、読み取るべき第２の資源に対して最後に検出された書込み命令のタイプと、第２の資源から読み取るべき読取り命令のタイプとの間に必要な待ち時間を指示する。
【００５９】
latency1、latency2信号は、それぞれ信号線２２２、３２２上で、ストール持続時間発生器２１４に供給されて、この持続時間発生器２１４は、上述のように、それぞれ信号線２２１、３２１上でwrite trackingresource1、write trackingresource2信号も受け取る。ストール持続時間発生器２１４は、読取り命令をストールさせるのに適当なサイクル数を求めることによって応答する。適当なストールサイクル数を指示する出力信号が、信号線６６上に供給される。
様々な態様を、図１のパイプライン３０と関連する使用に対して提示したが、ここで認識すべきことは、本発明はそのようなパイプラインに限定はされないことである。例えば、パイプラインによっては、互いに直列ではない、積算、シフトおよび／または論理それぞれのユニットを有する。さらに、パイプライン３０は、命令の系列を保存するが、その他のパイプラインはそうでないことがある。さらに、命令は、パイプライン３０のすべての段階で作用を受ける必要はないことは明白である。
【００６０】
ここで、特に断らない限りは、例えば「備える（comprise）」、「有する（has）」、「含む（include）」などの用語、およびそれらのすべての形態は、拡張可能であると考え、追加の要素および／または特徴を除外するものではないことに留意されたい。
また、特に断らない限りは、例えば、「〜に応答して（in response to）」、「〜に基づいて（based on）」、「〜の関数である（is a function of）」、および「〜と関連して（in accordance with）」などの語句は、それぞれ「少なくとも〜に応答して」、「少なくとも〜に基づいて」、「少なくとも〜の関数として」、および「少なくとも〜と関連して」を意味し、例えば、２つ以上のもの、に応答する、に基づく、の関数である、または、と関連することを除外しない。
【００６１】
様々な態様を示して説明したが、当業者であれば、それらの態様は例として提示したものにすぎず、本発明はそのような態様に限定されるものではないこと、および本発明の主旨と範囲から逸脱することなく様々な変更および修正を加えることができることを理解するであろう。したがって、本発明は、添付のクレームとその均等物によってのみ限定される。
【図面の簡単な説明】
【００６２】
【図１Ａ】本発明の一態様によるデータ従属性マネージャが使用されている、ディジタルプロセッサパイプラインの概略図である。
【図１Ｂ】本発明の一態様によるデータ従属性マネージャが使用されている、ディジタルプロセッサパイプラインの概略図である。
【図２】図１のデータ従属性マネージャの一態様を示すブロック図である。
【図３】図２のレーテンシユニットの一態様に使用されるルックアップ表を示す概略図である。
【図４】図２の保留書込み追跡ユニットの一態様を示す概略図である。
【図５Ａ】図４Ｃの完遂サイクル表に使用するシフトレジスタフォーマットを示す概略図である。
【図５Ｂ】命令が関連する資源に対して７サイクルで書込みをする場合のシフトレジスタの状態を示す概略図である。
【図５Ｃ】関連する資源に書込みをする保留命令がない場合の、シフトレジスタの状態を示す概略図である。
【図６】図４Ｃの完遂サイクル表に使用されるシフトレジスタの一態様を示す概略図である。
【図７Ａ】図２のデータ従属性マネジャーに使用されるストール持続時間発生器の一態様を示す概略図である。
【図７Ｂ】図７Ａに示すシフトユニットの一態様を示す概略図である。
【図７Ｃ】待ち時間値とシフトユニットの出力結果との関係の一態様を示す表である。
【図８Ａ】命令系列の一例に対する、図１のパイプラインの連続状態を示す概略図である。
【図８Ｂ】命令系列の一例に対する、図１のパイプラインの連続状態を示す概略図である。
【図８Ｃ】命令系列の一例に対する、図１のパイプラインの連続状態を示す概略図である。
【図８Ｄ】命令系列の一例に対する、図１のパイプラインの連続状態を示す概略図である。
【図８Ｅ】命令系列の一例に対する、図１のパイプラインの連続状態を示す概略図である。
【図８Ｆ】命令系列の一例に対する、図１のパイプラインの連続状態を示す概略図である。
【図９】図１のデータ従属マネージャ回路の別の態様を示すブロック図である。
【図１Ａ】
2006517322.tif 000004
【図１Ｂ】
2006517322.tif 000005
【図２】
2006517322.tif 000006
【図３】
2006517322.tif 000007
【図４】
2006517322.tif 000008
【図５Ａ】
2006517322.tif 000009
【図５Ｂ】
2006517322.tif 000010
【図５Ｃ】
2006517322.tif 000011
【図６】
2006517322.tif 000012
【図７Ａ】
2006517322.tif 000013
【図７Ｂ】
2006517322.tif 000014
【図７Ｃ】
2006517322.tif 000015
【図８Ａ】
2006517322.tif 000016
【図８Ｂ】
2006517322.tif 000017
【図８Ｃ】
2006517322.tif 000018
【図８Ｄ】
2006517322.tif 000019
【図８Ｅ】
2006517322.tif 000020
【図８Ｆ】
2006517322.tif 000021
【図９】
2006517322.tif 000022
【国際調査報告】
2006517322.tif 000023
2006517322.tif 000024
2006517322.tif 000025