(57)【特許請求の範囲】
【請求項１】
プロセッサがメモリから命令を取り出す方法であって、
前記メモリから以前に取り出された複数の未処理の分岐命令をプログラムの古い順に使用して複数の復号された目標アドレスを決定し、前記以前に取り出された複数の命令のうちの最後の命令を使用して復号された順次アドレスを決定するステップと、
前記複数の目標アドレスおよび前記順次アドレスの前記決定と並列に、前記複数の目標アドレスのうちの１つを指定するか、または前記順次アドレスを指定する復号された選択信号を生成するステップと、
前記選択信号を使用して、前記複数の目標アドレスのうちの１つまたは前記順次アドレスをメモリ要求アドレスとして選択するステップと、
前記メモリが前記プロセッサに少なくとも１つの命令を供給するようにするために、前記メモリ要求アドレスを前記プロセッサから前記メモリに伝送するステップと
を含む、命令取出方法。
【請求項２】
さらに、前記以前に取り出された複数の命令を、そこから命令が前記プロセッサによってディスパッチされる命令待ち行列内に格納するステップを含む、請求項１に記載の方法。
【請求項３】
前記生成するステップが、
前記以前に取り出された複数の命令に分岐命令が含まれるか否かを判定するステップと、
前記以前に取り出された複数の命令に分岐命令が含まれることの判定に応答して、前記複数の目標アドレスの中で前記分岐命令から決定される前記目標アドレスを指定する前記選択信号を生成するステップと、
前記以前に取り出された複数の命令に分岐命令が含まれないことの判定に応答して、前記順次アドレスを指定する前記選択信号を生成するステップと
を含む、請求項１に記載の方法。
【請求項４】
前記方法がさらに、前記分岐命令によって指定される目標実行経路が採用されるかどうかを判定するステップを含み、
前記複数の目標アドレスの中で前記分岐命令から決定される目標アドレスを指定する選択信号を生成する前記ステップが、前記分岐命令によって指定される前記目標実行経路が採用されることの判定に応答してのみ実行される
請求項３に記載の方法。
【請求項５】
前記以前に取り出された複数の命令が、第１分岐命令と第２分岐命令とを含み、前記生成するステップが、前記第１分岐命令および前記第２分岐命令のうちのプログラム順で古いものを指定する前記選択信号を生成するステップを含む、請求項１に記載の方法。
【請求項６】
前記選択するステップが、マルチプレクサを使用して、前記複数の目標アドレスおよび前記順次アドレスのうちの１つをメモリ要求アドレスとして選択するステップを含む、請求項１に記載の方法。
【請求項７】
さらに、前記選択の前に、前記複数の目標アドレスおよび前記順次アドレスを復号するステップを含む、請求項１に記載の方法。
【請求項８】
メモリから以前に取り出された複数の未処理の分岐命令をプログラムの古い順に使用して複数の復号された目標アドレスを決定し、前記以前に取り出された複数の命令のうちの最後の命令を使用して復号された順次アドレスを決定するための手段と、
前記複数の目標アドレスおよび前記順次アドレスの前記決定と並列に、前記複数の目標アドレスのうちの１つを指定するか、または前記順次アドレスを指定する復号された選択信号を生成するための手段と、
前記選択信号を使用して、前記複数の目標アドレスのうちの１つまたは前記順次アドレスをメモリ要求アドレスとして選択するための手段と、
前記メモリが少なくとも１つの命令をプロセッサに供給するようにするために、前記メモリ要求アドレスを前記プロセッサから前記メモリに伝送するための手段と
を含む、プロセッサ。
【請求項９】
さらに、前記以前に取り出された複数の命令を格納するための命令待ち行列を含み、命令が、前記プロセッサによって前記命令待ち行列からディスパッチされる、請求項８に記載のプロセッサ。
【請求項１０】
前記生成するための手段が、
前記以前に取り出された複数の命令に分岐命令が含まれるか否かを判定するための手段と、
前記以前に取り出された複数の命令に分岐命令が含まれることの判定に応答して、前記複数の目標アドレスの中で前記分岐命令から決定される目標アドレスを指定する前記選択信号を生成するための手段と、
前記以前に取り出された複数の命令に分岐命令が含まれないことの判定に応答して、前記順次アドレスを指定する前記選択信号を生成するための手段と
を含む、請求項８に記載のプロセッサ。
【請求項１１】
前記プロセッサがさらに、前記分岐命令によって指定される目標実行経路が採用されるかどうかを判定するための手段を含み、
前記複数の目標アドレスの中で前記分岐命令から決定された目標アドレスを指定する前記選択信号を生成するための前記手段が、前記分岐命令によって指定される前記目標実行経路が採用されることの判定に応答してのみ前記選択信号を生成する
請求項１０に記載のプロセッサ。
【請求項１２】
前記以前に取り出された複数の命令に、第１分岐命令および第２分岐命令が含まれ、生成するための前記手段が、前記第１分岐命令および第２分岐命令のうちのプログラム順で古いものを指定する前記選択信号を生成するための手段を含む、請求項８に記載のプロセッサ。
【請求項１３】
選択するための前記手段が、マルチプレクサを含む、請求項８に記載のプロセッサ。
【請求項１４】
さらに、前記選択の前に、前記複数の目標アドレスおよび前記順次アドレスを復号するための手段を含む、請求項８に記載のプロセッサ。
【請求項１５】
ディスパッチされた命令を実行する実行ユニットと、
ディスパッチされる複数の命令を含むことができる命令待ち行列と、
前記命令待ち行列内に含まれる、メモリから以前に取り出された複数の未処理の分岐命令をプログラムの古い順に使用して、複数の復号された目標アドレスを決定し、前記以前に取り出された複数の命令のうちの最後の命令を使用して、復号された順次アドレスを決定するアドレス決定回路と、
前記アドレス決定回路による前記複数の目標アドレスおよび前記順次アドレスの前記決定と並列に、前記複数の目標アドレスのうちの１つまたは前記順次アドレスをメモリ要求アドレスとして選択する復号された選択信号を発生する、優先順位論理と
を含む、関連するメモリを有するプロセッサ。
【請求項１６】
前記優先順位論理が、
前記以前に取り出された複数の命令に分岐命令が含まれるか否かを判定するための手段と、
前記以前に取り出された複数の命令に分岐命令が含まれることの判定に応答して、前記複数の目標アドレスの中で前記分岐命令から決定される前記目標アドレスを指定する前記選択信号を生成するための手段と、
前記以前に取り出された複数の命令に分岐命令が含まれないことの判定に応答して、前記順次アドレスを指定する前記選択信号を生成するための手段と
を含む、請求項１５に記載のプロセッサ。
【請求項１７】
さらに、前記優先順位論理に結合された、前記分岐命令によって指定される目標実行経路が採用されるかどうかを判定する分岐処理ユニットを含み、
前記複数の目標アドレスの中で前記分岐命令から決定された目標アドレスを指定する前記選択信号を生成するための前記手段が、前記分岐命令によって指定される前記目標実行経路が採用されることの前記分岐処理ユニットによる判定に応答してのみ前記選択信号を生成する
請求項１６に記載のプロセッサ。
【請求項１８】
前記以前に取り出された複数の命令に、第１分岐命令および第２分岐命令が含まれ、前記優先順位論理が、前記第１分岐命令および前記第２分岐命令のうちのプログラム順で古いものを選択する、請求項１５に記載のプロセッサ。
【請求項１９】
さらに、入力として前記複数の目標アドレスおよび前記順次アドレスを有するマルチプレクサを含み、前記マルチプレクサが、前記優先順位論理に結合された選択入力と、前記メモリに結合できる出力とを含む、請求項１５に記載のプロセッサ。
【請求項２０】
前記アドレス決定回路が、それぞれが前記優先順位論理による前記メモリ要求アドレスの選択の前に前記命令待ち行列内の前記複数の命令のうちの１つを復号する複数の命令デコーダを含む、請求項１５に記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、全般的にはデータ処理の方法およびシステムに関し、具体的には、プロセッサ内でメモリ要求アドレスを生成するプロセッサおよび方法に関する。さらに具体的に言うと、本発明は、複数の命令を復号し、復号された命令のそれぞれから取出アドレスを並列に生成し、その後、生成された取出アドレスのうちの１つをメモリ要求アドレスとして選択するプロセッサに関する。
【０００２】
【従来の技術】
プロセッサには、そこから１つまたは複数の実行ユニットへ実行のために命令がディスパッチされる命令待ち行列と、取出アドレスを計算し、その取出アドレスを使用してメモリから命令を取り出して命令待ち行列を満たす命令フェッチャが含まれる場合がある。通常のプロセッサでは、優先順位論理を使用して、命令待ち行列に含まれる命令のどれを使用して次の取出アドレスを生成するかが決定される。優先順位論理による命令の選択の後に、取出アドレスが、通常は選択された命令のアドレスに命令長オフセットを加算することによって、命令から生成される。選択された命令から生成された取出アドレスは、その後、要求アドレスによって指定されるメモリ位置に格納された１つまたは複数の命令を取得するために、要求アドレスとしてメモリに渡される。したがって、通常の命令取出サイクルは、順次実行される複数のステップからなる。
【０００３】
命令待ち行列内の命令の検査から始まり、メモリから取り出された命令の受取で終了する時間間隔を、命令取出サイクル時間と称する場合がある。プロセッサの命令取出サイクル時間を減らし、したがって、プロセッサの総合性能を強化する努力において、通常、たとえばより高速のメモリ技術の採用、命令キャッシュ・ヒット率の改善、プロセッサへのオンチップの追加レベルのキャッシュの組込みによるなど、メモリの個々の構成要素の設計および構成の改善に注意が集中される。これらの解決は、確実に命令取出サイクル時間を改善できるが、本発明には、命令取出サイクル内のステップを並列化することによっても命令取出サイクル時間を減らすことができるという認識が含まれる。
【０００４】
【発明が解決しようとする課題】
本発明の目的は、データ処理のための改良された方法およびシステムを提供することである。
【０００５】
本発明のもう１つの目的は、プロセッサ内でメモリ要求アドレスを生成する、改良されたプロセッサおよび方法を提供することである。
【０００６】
本発明のもう１つの目的は、複数の命令を復号し、復号された命令のそれぞれから取出アドレスを並列に生成し、生成された取出アドレスのうちの１つをメモリ要求アドレスとして選択するプロセッサを提供することである。
【０００７】
【課題を解決するための手段】
前述の目的は、これから説明する形で達成される。本発明の方法によれば、複数の以前に取り出された命令を使用するプロセッサによって複数の目標アドレスが決定され、複数の以前に取り出された命令のうちの最後の命令を使用して順次アドレスが決定される。目標アドレスおよび順次アドレスの決定と並列に、複数の目標アドレスのうちの１つまたは順次アドレスを指定する選択信号が生成される。この選択信号は、複数の目標アドレスのうちの１つまたは順次アドレスをメモリ要求アドレスとして選択するのに使用される。その後、メモリ要求アドレスが、プロセッサからメモリに伝送され、その結果、メモリが、少なくとも１つの命令をプロセッサに供給する。目標アドレスおよび順次アドレスの生成と選択信号の生成を並列に行うことによって、命令取出待ち時間が短縮される。
【０００８】
【発明の実施の形態】
ここで図面、具体的には図１を参照すると、請求項に記載された本発明に従って命令およびデータを処理するための、全体を１０として示されたプロセッサの実施例のブロック図が示されている。図示の実施例では、プロセッサ１０に、単一の集積回路スーパースカラ・マイクロプロセッサが含まれる。したがって、下でさらに述べるように、プロセッサ１０には、さまざまな実行ユニット、レジスタ、バッファ、メモリおよび他の機能ユニットが含まれ、これらのすべてが集積回路によって形成される。プロセッサ１０は、IBM Microelectronics社から入手できる、縮小命令セット・コンピューティング（ＲＩＳＣ）技法に従って動作するPowerPC（商標）系列のマイクロプロセッサのうちの１つを含むことが好ましい。しかし、当業者であれば、本発明を他のプロセッサにも適用できることを以下の説明から諒解するであろう。
【０００９】
図１からわかるように、プロセッサ１０は、プロセッサ１０内のバス・インターフェース・ユニット（ＢＩＵ）１２を介してプロセッサ・バス２３に結合される。ＢＩＵ１２は、バス調停に参加することによって、プロセッサ１０と、外部レベル２（Ｌ２）キャッシュや主記憶（図示せず）などのプロセッサ・バス２３に結合された他のデバイスとの間の情報の転送を制御する。プロセッサ１０、プロセッサ・バス２３および、プロセッサ・バス２３に結合された他のデバイスが、データ処理システムを形成する。
【００１０】
ＢＩＵ１２は、プロセッサ１０内の命令（Ｉ）キャッシュ１４およびデータ（Ｄ）キャッシュ１３に結合される。Ｉキャッシュ１４やＤキャッシュ１３などの高速キャッシュは、プロセッサ１０が、下位レベルのメモリからキャッシュに以前に転送されたデータまたは命令のサブセットへの比較的高速のアクセス時間を達成できるようにし、したがって、ホスト・データ処理システムの性能を高められるようにする。Ｉキャッシュ１４は、さらに、各サイクル中にＩキャッシュ１４から命令を取り出す命令ユニット１１に結合される。命令ユニット１１は、分岐命令を内部で処理するが、順次命令は、実行のためにプロセッサ１０の順次実行回路にディスパッチされる。
【００１１】
図示の実施例では、順次実行回路に、整数ユニット１５、ロード／ストア・ユニット（ＬＳＵ）１６および浮動小数点ユニット（ＦＰＵ）１７が含まれる。整数ユニット１５、ＬＳＵ１６およびＦＰＵ１７のそれぞれは、通常は、各プロセッサ・サイクル中に特定のタイプの順次命令のうちの１つまたは複数の命令を実行する。たとえば、整数ユニット１５は、指定された汎用レジスタ（ＧＰＲ）１８またはＧＰＲリネーム・バッファから受け取った整数オペランドに対して、加算、減算、論理和、論理積、排他的論理和などの算術論理演算を実行する。ある命令を実行した後に、整数ユニット１５は、結果のデータが存在するならば、そのデータをＧＰＲリネーム・バッファ２４に出力する。ＧＰＲリネーム・バッファ２４は、結果のデータをＧＰＲリネーム・バッファ２４から１つまたは複数のＧＰＲ１８に転送することによって完了ユニット２０の指示の下で命令が完了するまで、結果のデータのための一時記憶域を提供する。
【００１２】
ＦＰＵ１７は、通常は、浮動小数点レジスタ（ＦＰＲ）１９またはＦＰＲリネーム・バッファ２５から受け取ったソース・オペランドに対して、浮動小数点乗除算などの単精度および倍精度の浮動小数点算術論理演算を実行する。ＦＰＵ１７は、浮動小数点命令の実行からもたらされるデータを、選択されたＦＰＲリネーム・バッファ２５に出力する。このＦＰＲリネーム・バッファ２５は、結果のデータをＦＰＲリネーム・バッファ２５から選択されたＦＰＲ１９に転送することによって完了ユニット２０の指示の下で命令が完了するまで、結果データを一時的に記憶する。
【００１３】
名前からわかるように、ＬＳＵ１６は、通常は、メモリ（すなわちＤキャッシュ１３または主記憶のいずれか）から選択されたＧＰＲ１８またはＦＰＲ１９にデータをロードするか、ＧＰＲ１８、ＧＰＲリネーム・バッファ２４、ＦＰＲ１９またはＦＰＲリネーム・バッファ２５のうちの選択された１つからメモリにデータを格納するかのいずれかを行う浮動小数点命令および固定小数点命令を実行する。プロセッサ１０には、任意選択として、ＢＩＵ１２とＩキャッシュ１４の間に挿入され、下位レベルのメモリから受け取った命令をＩキャッシュ１４に事前復号された命令を格納する前に事前復号する、プリデコーダ２２を含めることができる。このような事前復号には、たとえば、命令ユニット１１による能率化された処理を容易にする均一な形式で分岐命令を配置することを含めることができる。
【００１４】
プロセッサ１０は、スーパースカラ・アーキテクチャの性能をさらに高めるために、命令のパイプライン化とアウト・オブ・オーダー実行の両方を使用することが好ましい。したがって、命令は、データ依存性が監視される限り、整数ユニット１５、ＬＳＵ１６およびＦＰＵ１７によってどのような順序でも実行できる。さらに、命令は、取出、復号／ディスパッチ、実行、終了および完了を含むパイプライン・ステージのシーケンスで、プロセッサ１０によって処理される。本発明に従い、下で詳細に述べるように、プロセッサ１０の総合性能は、取出パイプライン・ステージの命令取出サイクル時間を減らすことによって強化される。
【００１５】
ここで図２を参照すると、命令ユニット１１の詳細なブロック図が示されている。図からわかるように、命令ユニット１１には、命令待ち行列３０が含まれ、命令待ち行列３０には、Ｉキャッシュ１４から取り出した命令を一時的に格納する、実装依存の個数の項目が含まれる。命令は、命令待ち行列３０の最下部の項目からプログラムの順序でロードされる。ディスパッチ・ウィンドウ３２内の命令は、命令待ち行列３０内で最も古い命令を表すが、プロセッサ・クロックの各サイクル中にディスパッチのためにマルチプレクサ３４に提示される。ディスパッチ論理３６による適当な選択信号のアサートの際に、１つまたは複数の命令が、実行のために順次実行ユニットである整数ユニット１５、ＬＳＵ１６およびＦＰＵ１７にディスパッチされ、命令待ち行列３０から除去される。命令待ち行列３０に残っている命令は、ディスパッチの際に命令が除去される時に下にシフトされる。所望の実施態様に応じて、ディスパッチ論理３６を、実行資源（たとえば実行ユニットとオペランド）が使用可能になった時にプログラムの順序で命令をディスパッチするように制限することができ、その代わりに、データ依存性の観察を検証し、プログラム順序と異なる順序で命令をディスパッチできるようにすることができる。
【００１６】
図２からわかるように、命令待ち行列３０は、関連する取出ウィンドウ３８も有し、取出ウィンドウ３８は、ディスパッチ・ウィンドウ３２と部分的または完全に重なり合うか、ディスパッチ・ウィンドウ３２から外れている可能性がある。取出ウィンドウ３８内の各命令は、デコーダ４０のうちの対応する１つならびに優先順位論理４２および分岐処理ユニット（ＢＰＵ）４４によって入力として受け取られる。デコーダ４０は、取出ウィンドウ３８内の各命令が分岐命令であるという前提の下で動作する。したがって、命令の受け取りに応答して、デコーダ４０のそれぞれは、それぞれの命令が分岐命令であるかのようにその命令を復号して、「分岐」が行われる場合に実行の分岐先になる復号済み目標アドレスを決定する。デコーダ４０によって決定された復号済み目標アドレスは、マルチプレクサ５０の入力を形成する。
【００１７】
デコーダ４０が命令を復号する方法は、プロセッサ１０によって実行される命令セットのアーキテクチャと、所望の論理の複雑さの両方に依存する。すべての分岐命令が直接分岐を指定するかそれを指定すると仮定される、最も単純な場合では、デコーダ４０は、単純に分岐命令の即値フィールドの値を使用して、復号済み目標アドレスを決定する。相対分岐がサポートされるプロセッサ１０の実施例では、図１のプリデコーダ２２を使用して、相対分岐および即値分岐を前処理して一貫性のある形式にし、その結果、直接分岐命令と相対分岐命令の両方を、デコーダ４０が同一の形で処理できるようにすることが好ましい。この前処理は、たとえば、デコーダ４０が復号済み目標アドレスの計算に使用できる追加の複数ビット（たとえば５ビット）分岐フィールドを含めるために各分岐命令を拡張することが必要になる場合がある。さらに複雑な実施例では、レジスタ間接分岐もサポートされる可能性がある。レジスタ間接分岐は、PowerPC（商標）のリンク・レジスタおよびカウント・レジスタのうちの１つなど、アーキテクテッド・レジスタ内のアドレスへのプログラム・フローの分岐を指定する命令である。この実施例では、レジスタ間接分岐のアドレスを含む可能性があるアーキテクテッド・レジスタ４６の内容を、デコーダ４０が復号し、マルチプレクサ５０に入力することが好ましい。
【００１８】
下でさらに述べるように、命令待ち行列３０内の最後の（プログラム順序で）命令のアドレスは、取出ウィンドウ３８内にある場合もそうでない場合もあるが、その命令の長さと共に加算器４８に入力される。加算器４８は、命令アドレスと命令長の和を計算し、この和によって、次の順次命令のアドレスが指定される。この順次命令アドレスは、デコーダ４０によって復号され、マルチプレクサ５０に入力される。したがって、マルチプレクサ５０へのアドレス入力のすべてが、復号済みアドレスである。
【００１９】
デコーダ４０および加算器４８の動作と並列に、優先順位論理４２は、取出ウィンドウ３８内に命令がある場合に、どの命令が実際に分岐命令であり、どの分岐命令が取出ウィンドウ３８内で未処理の最も古い（プログラム順序で）分岐命令であるかを判定する。さらに、ＢＰＵ４４は、取出ウィンドウ３８内に分岐命令がある場合に、どの分岐命令で実際に分岐するかを判定する。したがって、ＢＰＵ４４は、優先順位論理４２に、どの命令が無条件分岐命令であるか、実際に分岐すると解決された条件分岐命令であるか、静的または動的な分岐予測のいずれかを使用して実際に分岐すると予測された条件分岐命令であるかを示す。当業者であれば理解できるように、静的予測は、通常はコンパイラによって分岐命令に関連付けられたビットに基づき、動的予測は、通常は、少なくとも部分的に、分岐命令の命令アドレスに基づく。図からわかるように、ＢＰＵ４４は、ディスパッチ論理３６に分岐予測と分岐解決も提供し、ディスパッチ論理３６は、この分岐予測および分岐解決を使用して、マルチプレクサ３４を制御する選択信号を生成する。
【００２０】
ＢＰＵ４４から受け取った入力と、取出ウィンドウ３８内に命令がある場合にどの命令が最も古い未処理の分岐命令であるかの判定とに基づいて、優先順位論理４２は、復号済みの選択信号５２を生成する。この選択信号５２は、マルチプレクサ５０の入力と同数であることが好ましい。選択信号５２は、マルチプレクサ５０に、アクティブな選択信号に対応する復号済み入力アドレスをメモリ要求アドレスとして選択させる。このメモリ要求アドレスの受け取りに応答して、Ｉキャッシュ１４は、そのメモリ要求アドレスに関連する１つまたは複数の命令を命令待ち行列３０に供給する。重要なことに、メモリ要求アドレスは、Ｉキャッシュ１４によるメモリ要求アドレスの受け取りの前に、命令ユニット１１内のデコーダ４０のうちの１つによって復号されるので、Ｉキャッシュ１４がメモリ要求アドレスを復号する必要がなくなる。これは命令取出サイクル時間の短縮をもたらす。というのは、優先順位論理４２の動作と並列に、デコーダ４０によってアドレス復号が実行されるからである。
【００２１】
ここで図３を参照すると、本発明に従って命令を取り出す方法の例の高水準論理流れ図が示されている。図からわかるように、この処理はブロック６０で開始され、その後、ブロック６２に進んで、１つまたは複数の取り出された命令を命令待ち行列３０の最上部にある項目内に格納する。命令待ち行列３０は、先行する項目が除去される際に命令待ち行列３０の最下部に向かって項目がシフトされるシフト式待ち行列として上で説明したが、本発明は、たとえば環状待ち行列など、命令待ち行列３０の他の実施態様にも同様に適用可能であることを理解されたい。その後、処理はブロック６２からブロック６４に進み、デコーダ４０が、取出ウィンドウ３８内の各命令から目標アドレスを決定する。さらに、ブロック６４では、加算器４８が、命令待ち行列３０内の最後の命令のアドレスと最後の命令の長さから、次の順次取出アドレスを計算する。
【００２２】
ブロック６４によって表される動作と並列に、ブロック７０ないしブロック７６によって表される動作が、優先順位論理４２およびＢＰＵ４４によって実行される。ブロック７０を参照すると、優先順位論理４２によって、取出ウィンドウ３８に未処理の分岐命令が含まれるか否かの判定が行われる。ブロック７０で取出ウィンドウ３８に未処理の分岐命令が含まれないと判定された場合、処理はブロック７２に進み、優先順位論理４２が、適当な選択信号を生成して、メモリ要求アドレスとして順次取出アドレスを選択する。その後、処理は、下で説明するブロック８０に進む。
【００２３】
ブロック７０に戻って、取出ウィンドウ３８に未処理の分岐命令が含まれると優先順位論理４２が判定した場合には、処理はブロック７４に進む。ブロック７４では、ＢＰＵ４４が、取出ウィンドウ３８内の分岐命令のそれぞれを解決または予測する。ブロック７４は、ブロック７０に続くものとして図示されているが、ブロック７０およびブロック７４に図示された動作は、タイミングの考慮に応じて、順次または並列のいずれかで実行できることを理解されたい。言い換えると、命令取出サイクル時間を最小にするために、ブロック７０ないしブロック７６に関連する遅延は、デコーダ４０および加算器４８の遅延のうちの最長の遅延より長くなってはならない。したがって、タイミングの考慮から必要になる場合には、ブロック７４を、任意選択として省略する（波線によって示されているように）ことができ、すべての分岐が実際に分岐すると仮定することができる。この実施例では、ＢＰＵ４４を使用して、ブロック８４に関して下で説明するように、誤って予測された実行経路に含まれる命令を後程取り消すことができる。処理は、ブロック７４からブロック７６に進み、優先順位論理４２が、取出ウィンドウ３８内の最も古い未処理の分岐命令から決定された目標アドレスを選択する選択信号を生成する。選択された目標アドレスは、デコーダ４０のうちで取出ウィンドウ３８内の命令に関連するものによって出力されるか、レジスタ間接分岐命令をサポートする場合には、アーキテクテッド・レジスタ４６に関連するデコーダ４０によって出力される可能性がある。その後、処理はブロック８０に進む。
【００２４】
ブロック８０では、マルチプレクサ５０が、選択信号５２に応答して、復号済み入力アドレスのうちの少なくとも１つを、メモリ要求アドレスとして選択する。その後、このメモリ要求アドレスは、マルチプレクサ５０からＩキャッシュ１４に送られる。投機分岐目標アドレスがメモリ要求アドレスとしてＩキャッシュ１４に供給される場合、優先順位論理４２は、マルチプレクサ５０に加算器４８によって計算された順次アドレスを副取出アドレスとしてＩキャッシュ１４へ供給させる選択信号５２も生成することができる。この形で、目標アドレスが正しいものとして解決された場合には、順次経路内の命令を破棄できる。その代わりに、目標アドレスが誤って予測された実行経路内にあることが後程判明した場合には、誤って予測された経路内の命令を破棄することができ、追加の待ち時間をこうむらずに順次実行経路内の命令を用いて命令処理を進めることができる。
【００２５】
ブロック８０の後に、処理はブロック８２に進み、メモリ要求アドレスによって指定される１つまたは複数の命令が命令待ち行列３０内で受け取られているかどうかを判定する。そうでない場合には、この処理は要求された命令を受け取るまで、単純にブロック８２を繰り返す。命令待ち行列３０が要求された命令を受け取ったことに応答して、命令取出サイクルが完了し、この処理は、任意選択のブロック８４に進む。任意選択のブロック８４では、ＢＰＵ４４が、予測された分岐を解決するか、分岐命令を予測（ブロック７４で予測を実行しない場合）して、取り出された命令がある場合にどの命令を破棄すべきかを決定する。重要なことに、ブロック８４に示された動作は、命令取出サイクルに含まれず、したがって、分岐が正しく予測された場合に命令取出待ち時間に寄与しない。その後、処理はブロック６２に戻る。
【００２６】
上で説明したように、本発明は、命令取出の改良された方法を使用して命令取出サイクル時間を減らすプロセッサを提供する。本発明によれば、複数の潜在的なメモリ要求アドレスが生成され、それらのアドレスの生成と並列に、少なくとも１つのアドレスがメモリ要求アドレスとして選択される。アドレスの生成とアドレスの選択をオーバーラップさせることによって、全体的な命令取出サイクル時間が短縮される。上で述べたように、潜在的なメモリ要求アドレスは、メモリ要求アドレスとしての１つのアドレスの選択の前に復号され、その結果、アドレス復号がクリティカルなタイミング・パスで実行されないようにすることが好ましい。
【００２７】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００２８】
（１）複数の以前に取り出された未処理の分岐命令をプログラムの古い順に使用して複数の目標アドレスを決定し、前記複数の以前に取り出された命令のうちの最後の命令を使用して順次アドレスを決定するステップと、
前記複数の目標アドレスおよび前記順次アドレスの前記決定と並列に、前記複数の目標アドレスのうちの１つを指定するか、または前記順次アドレスを指定する選択信号を生成するステップと、
前記選択信号を使用して、前記複数の目標アドレスのうちの１つまたは前記順次アドレスをメモリ要求アドレスとして選択するステップと、
メモリがプロセッサに少なくとも１つの命令を供給するようにするために、前記メモリ要求アドレスを前記プロセッサから前記メモリに伝送するステップと
を含む命令取出方法。
（２）さらに、前記複数の以前に取り出された命令を、そこから命令が前記プロセッサによってディスパッチされる命令待ち行列内に格納するステップを含む、上記（１）に記載の方法。
（３）前記生成するステップが、
前記複数の以前に取り出された命令に分岐命令が含まれるか否かを判定するステップと、
前記複数の以前に取り出された命令に分岐命令が含まれることの判定に応答して、前記複数の目標アドレスの中で前記分岐命令から決定される目標アドレスを指定する選択信号を生成するステップと、
前記複数の以前に取り出された命令に分岐命令が含まれないことの判定に応答して、前記順次アドレスを指定する選択信号を生成するステップと
を含む、上記（１）に記載の方法。
（４）前記方法がさらに、前記分岐命令によって指定される目標実行経路が採用されるかどうかを判定するステップを含み、
前記複数の目標アドレスの中で前記分岐命令から決定される目標アドレスを指定する選択信号を生成する前記ステップが、前記分岐命令によって指定される前記目標実行経路が採用されることの判定に応答してのみ実行される
上記（３）に記載の方法。
（５）前記複数の以前に取り出された命令が、第１分岐命令と第２分岐命令とを含み、前記生成するステップが、前記第１分岐命令および前記第２分岐命令のうちでプログラム順で古いものを指定する選択信号を生成するステップを含む、上記（１）に記載の方法。
（６）前記選択するステップが、マルチプレクサを使用して、前記複数の目標アドレスおよび前記順次アドレスのうちの１つをメモリ要求アドレスとして選択するステップを含む、上記（１）に記載の方法。
（７）さらに、前記選択の前に、前記複数の目標アドレスおよび前記順次アドレスを復号するステップを含む、上記（１）に記載の方法。
（８）複数の以前に取り出された未処理の分岐命令をプログラムの古い順に使用して複数の目標アドレスを決定し、前記複数の以前に取り出された命令のうちの最後の命令を使用して順次アドレスを決定するための手段と、
前記複数の目標アドレスおよび前記順次アドレスの前記決定と並列に、前記複数の目標アドレスのうちの１つを指定するか、または前記順次アドレスを指定する選択信号を生成するための手段と、
前記選択信号を使用して、前記複数の目標アドレスのうちの１つまたは前記順次アドレスをメモリ要求アドレスとして選択するための手段と、
メモリが少なくとも１つの命令をプロセッサに供給するようにするために、前記メモリ要求アドレスをプロセッサから前記メモリに伝送するための手段と
を含む、プロセッサ。
（９）さらに、前記複数の以前に取り出された命令を格納するための命令待ち行列を含み、命令が、前記プロセッサによって前記命令待ち行列からディスパッチされる、上記（８）に記載のプロセッサ。
（１０）前記生成するための手段が、
前記複数の以前に取り出された命令に分岐命令が含まれるか否かを判定するための手段と、
前記複数の以前に取り出された命令に分岐命令が含まれることの判定に応答して、前記複数の目標アドレスの中で前記分岐命令から決定される目標アドレスを指定する選択信号を生成するための手段と、
前記複数の以前に取り出された命令に分岐命令が含まれないことの判定に応答して、前記順次アドレスを指定する選択信号を生成するための手段と
を含む、上記（８）に記載のプロセッサ。
（１１）前記プロセッサがさらに、前記分岐命令によって指定される目標実行経路が採用されるかどうかを判定するための手段を含み、
前記複数の目標アドレスの中で前記分岐命令から決定された目標アドレスを指定する選択信号を生成するための前記手段が、前記分岐命令によって指定される前記目標実行経路が採用されることの判定に応答してのみ前記選択信号を生成する
上記（１０）に記載のプロセッサ。
（１２）前記複数の以前に取り出された命令に、第１分岐命令および第２分岐命令が含まれ、生成するための前記手段が、前記第１分岐命令および第２分岐命令のうちのプログラム順で古いものを指定する選択信号を生成するための手段を含む、上記（８）に記載のプロセッサ。
（１３）選択するための前記手段が、マルチプレクサを含む、上記（８）に記載のプロセッサ。
（１４）さらに、前記選択の前に、前記複数の目標アドレスおよび前記順次アドレスを復号するための手段を含む、上記（８）に記載のプロセッサ。
（１５）ディスパッチされた命令を実行する実行ユニットと、
ディスパッチされる複数の命令を含むことができる命令待ち行列と、
前記命令待ち行列内に含まれる複数の以前に取り出された命令を使用して、複数の目標アドレスおよび順次アドレスを決定するアドレス決定回路と、
前記アドレス決定回路による前記複数の目標アドレスおよび前記順次アドレスの前記決定と並列に、前記複数の目標アドレスのうちの１つまたは前記順次アドレスをメモリ要求アドレスとして選択する、優先順位論理と
を含む、関連するメモリを有するプロセッサ。
（１６）前記優先順位論理が、
前記複数の以前に取り出された命令に分岐命令が含まれるか否かを判定するための手段と、
前記複数の以前に取り出された命令に分岐命令が含まれることの判定に応答して、前記複数の目標アドレスの中で前記分岐命令から決定される目標アドレスを指定する選択信号を生成するための手段と、
前記複数の以前に取り出された命令に分岐命令が含まれないことの判定に応答して、前記順次アドレスを指定する選択信号を生成するための手段と
を含む、上記（１５）に記載のプロセッサ。
（１７）さらに、前記優先順位論理に結合された、前記分岐命令によって指定される目標実行経路が採用されるかどうかを判定する分岐処理ユニットを含み、
前記複数の目標アドレスの中で前記分岐命令から決定された目標アドレスを指定する選択信号を生成するための前記手段が、前記分岐命令によって指定される前記目標実行経路が採用されることの前記分岐処理ユニットによる判定に応答してのみ前記選択信号を生成する
上記（１６）に記載のプロセッサ。
（１８）前記複数の以前に取り出された命令に、第１分岐命令および第２分岐命令が含まれ、前記優先順位論理が、前記第１分岐命令および前記第２分岐命令のうちのプログラム順で古いものを選択する、上記（１５）に記載のプロセッサ。
（１９）さらに、入力として前記複数の目標アドレスおよび前記順次アドレスを有するマルチプレクサを含み、前記マルチプレクサが、前記優先順位論理に結合された選択入力と、前記メモリに結合できる出力とを含む、上記（１５）に記載のプロセッサ。
（２０）前記アドレス決定回路が、それぞれが前記優先順位論理による前記メモリ要求アドレスの選択の前に前記命令待ち行列内の前記複数の命令のうちの１つを復号する複数の命令デコーダを含む、上記（１５）に記載のプロセッサ。
【図面の簡単な説明】
【図１】本発明の方法およびシステムを有利に使用することができるデータ処理システムの実施例を示す図である。
【図２】図１に示されたデータ処理システムの命令ユニットの詳細なブロック図である。
【図３】本発明による、メモリから命令を取り出す方法を示す論理流れ図である。
【符号の説明】
１０  プロセッサ
１１  命令ユニット
１４  命令（Ｉ）キャッシュ
３０  命令待ち行列
３２  ディスパッチ・ウィンドウ
３４  マルチプレクサ
３６  ディスパッチ論理
３８  取出ウィンドウ
４０  デコーダ
４２  優先順位論理
４４  分岐処理ユニット（ＢＰＵ）
４６  アーキテクテッド・レジスタ
４８  加算器
５０  マルチプレクサ
５２  選択信号
【図１】
0003721002.tif 000002
【図２】
0003721002.tif 000003
【図３】
0003721002.tif 000004