(57)【特許請求の範囲】
【請求項１】
命令制御ユニットを備えているパイプライン化プロセッサであって前記命令制御ユニットに対する命令の待行列を作る方法において、
ａ）複数の逐次命令を逐次命令待行列に編成するステップと、
ｂ）複数の分岐目標命令を分岐目標命令待行列に編成するステップと、
ｃ）前記逐次命令待行列および目標命令待行列から選択された逐次命令および分岐目標命令を前記命令制御ユニットに与えるステップと、
ｄ）前記命令制御ユニットに与えられた命令の内実行されるべき命令を、連続する命令中の特定の命令の後で命令のグループ化を終了する「後で区切る」排他規則と、前記パイプライン・プロセッサに使用できるハードウェア資源の用法に関連して考慮される命令の前で命令のグループ化を終了する「前で区切る」排他規則とを用いてグループ化するステップと、
ｅ）前記ステップにおいてグループ化されなかった命令を前記逐次待行列に再編入するステップと、
から成る方法。
【請求項２】
整数および浮動小数点機能ユニットを構成する整数パイプラインステージと浮動小数点パイプラインステージを備えているパイプライン化プロセッサでの複数の命令をグループ化し、前記整数機能ユニットおよび浮動小数点機能ユニットに対して同時に発行するとともに実行する方法において、
ａ）命令待行列からｍ個の命令を受取るステップと、
ｂ）前記ｍ個の命令のオプコードを復号するステップと、
ｃ）一つの命令から他の命令までカスケードにされているオペランドを検出するステップと、
ｄ）前記ｍ個の命令の各々に複数の排他規則を適用して前記命令を他の命令と関連して実行するため前記整数および浮動小数点機能ユニットに対して発行することから除外すべきか否かを判定するステップと、
ｅ）除外されない前記命令をグループ化し、それらを実行のため前記整数および浮動小数点機能ユニットに同時に発行するステップと、
ｆ）前記整数および浮動小数点機能ユニットの前記整数パイプラインステージの後段と前記浮動小数点パイプラインステージの前段が一部重なるようにして、同時に発行された前記グループ化された命令が実行されるステップと、
から成る方法。
【請求項３】
パイプライン化プロセッサで命令実行をパイプライン化する方法において、
ａ）n1個の整数演算を複数の逐次整数パイプラインステージによりパイプライン化するステップと、
ｂ）浮動小数点パイプラインステージの始めの方を前記整数パイプラインステージの後の方と重ねてn2個の浮動小数点演算を複数の逐次浮動小数点パイプラインステージを通じてパイプライン化するステップと、
から成る方法。
【請求項４】
パイプライン式プロセッサで整数の結果を発生する方法において、
ａ）レジスタデータおよび転送データを選択的にマルチプレクサし、その選択されたレジスタデータおよび転送データを出力するステップと、
ｂ）前記レジスタデータおよび転送データを選択的にシフトし、シフトしたデータを出力するステップと、
ｃ）前記レジスタデータおよび転送データを選択的に加算し、複数の第１の加算データを出力するステップと、
ｄ）アドレス、前記シフトデータ、および前記第１の加算データを選択的にマルチプレクサし、その選択されたアドレス、シフトデータ、および第１の加算データを出力するステップと、
ｅ）前記アドレスを選択的に加算し、その加算されたアドレスを出力するステップと、
ｆ）前記シフトデータおよび第１の加算データを選択的に加算し、第２の加算データを出力するステップと、
ｇ）前記シフトデータ、および第１および第２の加算データを選択的にマルチプレクサし、そのシ選択されたシフトデータ、および第１および第２の加算データを出力するステップと、
から成る方法。
【請求項５】
命令制御ユニットを備えているパイプライン化プロセッサで前記命令制御ユニットに対する命令の待行列を作る装置において、
ａ）複数の逐次命令の待行列を作る第１の待行列作成手段と、
ｂ）複数の分岐目標命令の待行列を作る第２の待行列作成手段と、
ｃ）前記第１および第２の待行列作成手段および前記命令制御ユニットに結合して、前記逐次命令および分岐目標命令の所定の命令を前記命令制御ユニットに与える第１のマルチプレクサ手段と、
ｄ）前記第１および第２の待行列作成手段および前記命令制御ユニットに結合して、該命令制御ユニットに与えられた命令の内実行されるべき命令を、連続する命令中の特定の命令の後で命令のグループ化を終了する「後で区切る」排他規則と、前記パイプライン・プロセッサに使用できるハードウェア資源の用法に関連して考慮される命令の前で命令のグループ化を終了する「前で区切る」排他規則とを用いてグループ化するグループ化手段と、
ｅ）前記グループ化手段によりグループ化されなかった命令を前記逐次待行列に再編入する第２のマルチプレクサ手段と、
から構成される装置。
【請求項６】
整数および浮動小数点機能ユニットを構成する整数パイプラインステージと浮動小数点パイプラインステージを備えているパイプライン化プロセッサでの複数の命令をグループ化し、前記整数機能ユニットおよび浮動小数点機能ユニットに対して同時に発行するとともに実行する装置において、
ａ）ｍ個の命令を命令待行列から受取る受領手段と、
ｂ）前記受領手段に結合して前記ｍ個の命令のオプコードを復号する復号手段と、
ｃ）前記受領手段に結合して、一つの命令から他の命令までカスケードされているオペランドを検出する検出手段と、
ｄ）前記復号手段および検出手段に結合して、複数の排他規則を前記ｍ個の命令の各々に適用して前記命令を他の命令と関連して実行するため前記整数および浮動小数点機能ユニットに対する発行から除外すべきか否かを判定し、除外されない前記命令をグループ化し、それらを実行のため前記整数および浮動小数点機能ユニットに対して同時に発行するグループ化手段と、
ｅ）前記整数および浮動小数点機能ユニットの前記整数パイプラインステージの後段と前記浮動小数点パイプラインステージの前段が一部重なるようにして、同時に発行された前記グループ化された命令を実行する命令実行手段と、
から構成されている装置。
【請求項７】
パイプライン化プロセッサで命令実行をパイプライン化する装置であって、
ａ）n1個の整数演算を複数の逐次整数パイプラインステージによりパイプライン化する整数パイプライン化手段と、
ｂ）前記整数パイプライン化手段に結合してn2個の浮動小数点演算を複数の逐次浮動小数点パイプラインステージによりパイプライン化するにあたって、前記浮動小数点パイプラインステージの始めの方を前記整数パイプラインステージの後の方と重ねて行う浮動小数点パイプライン化手段と、
から構成されている装置。
【請求項８】
パイプライン化プロセッサで整数の結果を発行する整数機能ユニットにおいて、
ａ）前記パイプライン化プロセッサの整数ユニットレジスタファイルおよび第２のマルチプレクサに結合し、その整数ユニットレジスタファイルおよび前記第２のマルチプレクサからデータを選択的に受取り、この受取ったデータを出力する第１のマルチプレクサと、
ｂ）前記第１のマルチプレクサに結合し、前記受取ったデータを選択的にシフトしてシフトデータを出力する少なくとも一つのシフタと、
ｃ）前記第１のマルチプレクサに結合し、前記受取りデータを選択的に加算して第１の加算データを出力する複数の第１の加算器と、
ｄ）前記整数ユニットレジスタファイル、前記少なくとも一つのシフタ、および前記複数の第１の加算器に結合して、アドレス、前記シフトデータ、および前記加算データを選択的に受取り、この受取ったアドレス、シフトデータ、および加算データを出力する第３のマルチプレクサと、
ｅ）前記第３のマルチプレクサに結合して前記受取ったアドレスを加算し、加算アドレスを出力する少なくとも一つのアドレス加算器と
ｆ）前記第２のマルチプレクサに結合して前記シフトデータおよび第１の加算データを選択的に加算し、第２の加算データを出力する少なくとも一つの第２の加算器と、
ｇ）前記第３のマルチプレクサおよび前記少なくとも一つの第２の加算器に結合して、前記シフトデータ、第１の加算データ、および第２の加算データを選択的に受取り、この受取ったデータを前記整数ユニットレジスタファイルおよび前記第１のマルチプレクサに出力する第２のマルチプレクサと、
から構成されている整数機能ユニット。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明はコンピュータシステムの分野に関し、特に、パイプライン化プロセッサを備えているコンピュータシステムに関する。更に詳細に述べれば、本発明は複数の命令をグループ化し、それらを同時に発行し、それらをパイプライン化プロセッサで実行することに関する。
【０００２】
【従来技術】
所定のコンピュータプログラムに必要な実行時間は三つの因子、すなわちプログラムの動的アセンブリ言語命令回数、命令あたりのサイクル数、およびプロセッサの基本クロック速度の積である。最初の因子は注目しているプログラムの動的命令回数の全数を減らすコンパイラ技術によって決まる。最後の因子は高速トランジスタ間に低キャパシタンス接続を作る際の集積回路製作技術の速度限界によって決まる。２番目の因子はプロセッサの構造、特に、命令の発令および実行に関する構造、によって決まるが、これが本発明の中心点である。
【０００３】
今日、実行性能を改善するため、多数のコンピュータシステムはパイプライン化プロセッサを備えている。パイプライン化は、複数の命令を実行時に同時に重ねて行うプロセッサの実施法である。パイプライン化は、パイプライン制御が付加されて個々の命令の実行時間がわずかに増大するにもかかわらず、プロセッサの命令実行の処理量、すなわちパイプラインを出る命令の割合を増加させる。
【０００４】
パイプライン化プロセッサは、各パイプラインのステージで実行中の命令の一部を完了する複数のステージから成る組立ラインに似ている。典型的には、パイプラインは六つのステージ、命令の取出し、命令の復号、データ記憶装置のアドレス発生、プロセッサに存在するオペランドの取出し、命令の実行、および結果の書込み、に分解することができる。複数の命令は一部重なるようにパイプステージを通して移動する。
【０００５】
伝統的に、すべてのステージは同時に準備完了し進行しなければならない。その結果、機械サイクル、すなわち命令をパイプライン中を１ステージ下方に動かすのに必要な時間、したがってパイプライン化プロセッサの処理量は最も低速のステージによって決まり、制限されている。このように、更に速いステージを使用するという明らかな方法に加えて、最新のパイプライン化プロセッサの多くは機能ユニットをそのそれぞれのペースで独立に進行することができるように設計されている。
【０００６】
しかし、機能ユニットをそれら自身のペースで独立に進行できるようにすることにより、パイプラインの種々なハザードが入ってきている。ハザードに遭遇すると、実行および後続の命令は失速しなければならないことになる。パイプラインのハザードには三つの種類がある。
【０００７】
１．プロセッサが同時に重なった実行の命令のあらゆる組合わせを支持するよう完全にはパイプライン化されていないとき、たとえば、レジスタファイル書込みポートが一つしかないパイプライン化プロセッサに二つのレジスタが同時に書込むときのような、資源の衝突による構造的ハザード。
２．命令が未だ利用可能になっていない初期の命令の結果に依存する。たとえば、後続ＡＤＤ命令が未だ利用可能になっていない初期のＳＵＢＴＲＡＣＴ命令の結果に依存する、ことによるデータのハザード、および
３．プログラムカウンタを変える分岐命令や他の命令をパイプライン化することによる制御のハザード。
【０００８】
したがって、最新のパイプライン化プロセッサは典型的にはパイプラインのハザードの発生の可能性を少なくするよう最適化されている。その他に、種々の同期化法の一つがパイプラインのハザードを処理するのに採用されている。同期化法の特定の例には次のようなものがある。
【０００９】
１）転送または迂回。これは算術論理装置（ＡＬＵ）の結果を常にＡＬＵ入力ラッチにフィードバックする簡単なハードウェア技法である。始めのＡＬＵ演算が現在のＡＬＵ演算の源に対応するレジスタに書込まれていれば、レジスタファイルから読取った値の代わりに転送した結果をＡＬＵ入力として選択する。
【００１０】
２）スコアボード。これは更にこみ入ったハードウェア技法であって、中央に集中した情報を維持してデータのハザードの周りの動的スケジュールを容易にする、すなわち、充分な資源を用い且つデータの依存性無しに順序の乱れた命令実行を可能とする。典型的には、スコアボードは発令されたまたは未決定の各命令の現在の状態を追跡する命令状態表、各機能ユニットの現在の状態を追跡する機能ユニット状態表、およびどの機能ユニットがレジスタに書込むかを追跡するレジスタ結果状態表を備えている。
【００１１】
３）Ｔｏｍａｓｕｌｏアルゴリズム。これはスコアボード法の中央集中を排除した変種であるが重要な二つの点で異なっている。
ａ．ハザード検出および実行制御を機能ユニット内の保留ステーションを用いて機能ユニットに分配し、ディスパッチされた命令を機能ユニットのすべての依存性および利用可能性について実行未定になっている解決を列を作って待つ。ｂ．実行結果を、レジスタを通して進めるのではなく直接機能ユニットから送る。
【００１２】
伝統的に、命令はその長さが可変であり、それらは読出されて一度に一つづつパイプラインにディスパッチされている。命令の長さは、記憶装置の費用が比較的高いので記憶装置内に命令を能率良く詰め込むことに対して高いプレミアムが設けられている。その結果、命令復号ステージでは多数の理論的ハードウェアが必要になっている。命令は、第１の命令が復号されるまで、次の命令の開始バイト位置を決定することができないので、順次に復号されていた。更に、各命令は復号するのに多数クロックサイクルを必要としている。
【００１３】
【発明が解決しようとする課題】
しかし、記憶装置の費用は比較的廉価になってきており、最新式のパイプライン化プロセッサの多くは、特に縮小命令集合を基準とするパイプライン化プロセッサは、現在は固定長の命令を発生している。その結果、命令復号ステージにはもはや多数の理論的ハードウェアは必要ではない。各命令の開始位置を決定することができるから、複数の命令を同時に復号することができる。更に、充分な資源を用いて、多数の命令を１クロックサイクルで復号することができる。
【００１４】
したがって、固定長命令では実行速度を増し、そのためパイプライン化プロセッサの処理量を増す新しい機会が提供される。それ故独立の機能ユニットに対する複数の命令を１クロックサイクルで取出し、復号し、発行することができることが望まれる。更に、複数の命令を集中式または非集中式のいずれの同期化についてもハードウェアの増加を最少限にして発令することが特に望ましい。
【００１５】
以下の開示から明らかなように、これらの目的および所要結果は、本発明の目的および所要結果に含まれるものであり、本発明は複数の命令を同時に取出し、復号し、発令することができ、これによりパイプライン化プロセッサの実行速度および処理量を増大する新しい方法を提供するものである。
パイプライン化に関するこれ以上の説明については、Ｊ．Ｌ．ＨｅｎｎｅｓｓｙとＤ．Ａ．Ｐａｔｔｅｒｓｏｎとの共著、Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ａ  Ｑｕａｎｔｉｔａｔｉｖｅ  Ａｐｐｒｏａｃｈ，  Ｍｏｒｇａｎ  Ｋａｕｆｍａｎｎ  Ｐｕｂｌｉｓｈｅｒｓ，  Ｉｎｃ．，  １９９０を参照されたい。
【００１６】
【課題を解決するための手段】
複数の命令をグループ化し、これらを同時に発行し、それらをパイプライン化プロセッサで実行する方法および装置を開示している。現在のところ好適な実施例のもとでは、一部重ねて実行するためクロックサイクルあたり最大ｍ個の命令を同時にグループ化して発行するパイプライン化プロセッサに命令待行列および命令制御ユニットが設けられている。他に、パイプライン化プロセッサはクロックサイクルあたりそれぞれ最大ｎ１個の整数結果およびｎ２個の浮動小数点結果を発生することができる整数ユニットおよび浮動小数点ユニットをも備えている。ここでｎ１およびｎ２はクロックサイクルあたり発行されるｍ個の命令を支持して命令待行列および命令制御ユニットを補足するに充分な大きさである。整数ユニットおよび浮動小数点ユニットにはそれ自身の整数レジスタファイルおよび浮動小数点レジスタファイルがそれぞれ設けられている。浮動小数点ユニットには浮動小数点演算待行列および浮動小数点演算制御ユニットも設けられている。更に、プロセッサのパイプラインステージは整数パイプラインステージおよび浮動小数点パイプラインステージに分割されており、始めの方の浮動小数点パイプラインステージが後の方の整数パイプラインステージに一部重なっている。
【００１７】
その現在のところ好適な形態においては、命令待行列は逐次待行列および目標待行列から成り、命令キャッシュから取出されたプログラムの逐次命令およびプログラムの分岐命令の目標命令をそれぞれ格納している。
その現在のところ好適な形態では、命令制御ユニットは先取りコントローラおよびスケジューラから構成されている。先取りコントローラは、分岐径路の予測および解決を含む、命令先取りを制御する。スケジューラはオプコード復号器、カスケード検出器、グループ化論理、および以前のグループ経歴を備えている。オプコード復号器は命令を復号する。カスケード検出器は命令から命令へのオペランドのカスケードを検出する。以前のグループ経歴は発令された命令グループを追跡する。グループ化論理は命令を、オプコード復号器およびカスケード検出器から受取った入力、以前のグループ経歴によって、保持されている経歴、および「前で区切る」および「後で区切る」除外規則（排他規則）の数の適用に基づき、多くともｍ個の命令の命令グループにグループ化する。「前で区切る」および「後で区切る」除外規則は資源の特性およびプロセッサの特定の実施法を反映するものである。グループ化された命令は一部重ねて実行するため整数ユニットおよび浮動小数点ユニットに対して同時に発行される。
【００１８】
一実施例では、整数ユニットは多数の加算器および少なくとも一つのシフタから構成され、ｎ１個の論理的加算器として協同で働いている。加算器の少なくとも一つはアドレス加算器であり、加算器の少なくとも二つはブール演算をも行う。
【００１９】
整数パイプラインステージは多数の命令取出しステージ、多数の命令復号ステージ、多数の実行ステージ、および少なくとも一つの書き戻しステージから構成されている。浮動小数点パイプラインステージは多数の復号ステージ、多数の実行ステージ、および少なくとも一つの書戻しステージから構成されている。浮動小数点命令復号ステージは後の方の整数実行ステージおよび書戻しステージと一部重なり合っている。
【００２０】
整数命令取出しステージで、命令は命令制御ユニットの先取りコントローラの制御のもとで命令キャッシュから適切な命令待行列へ先取りされる。整数命令復号ステージで、適切な命令が復号され、少なくともｍ個の命令から成る命令グループにグループ化され、命令制御ユニットのスケジューラにより一部重ねて実行するため同時に発行される。更に、整数命令復号ステージでは、データがレジスタから読出され、目標およびロード／格納の各アドレスが整数ユニットにより計算される。整数実行ステージで、データがデータキャッシュから読出され、整数演算が行われ、データが整数ユニットにより記憶装置からロードされる。更に、整数実行ステージでは、浮動小数点演算が発行され、例外が命令制御ユニットにより解決される。整数書戻しステージ（一つまたは複数）で、整数結果が整数ユニットにより書戻される。
【００２１】
浮動小数点命令復号ステージで、浮動小数点命令が浮動小数点演算制御ユニットにより復号され、データが浮動小数点ユニットによりレジスタから読出される。浮動小数点実行ステージで、浮動小数点演算が浮動小数点ユニットにより行われる。最後に、浮動小数点書戻しステージ（一つまたは複数）で、データが浮動小数点ユニットにより書戻される。
【００２２】
分岐命令はすべて命令制御ユニットの先取りコントローラにより取出されることを予測される。それぞれの場合において、目標命令が分岐方向が整数ユニットにより決められる前に先取りコントローラにより先取りされる。次の逐次命令が遅延命令と共にグループ化され、命令制御ユニットのスケジューラにより純理論的に発行される。分岐命令を取る必要があれば、分岐が解決されたとき、純理論的に発行された逐次命令を整数ユニットにより押しつぶす。分岐を取らなければ、分岐が解決されたとき、先取りした目標命令を捨て、逐次命令を復号し、スケジューラにより代わりに発行する。
【００２３】
【実施例】
複数の命令をグループ化し、それらを独立の機能ユニットを備えているパイプライン化プロセッサで実行するため同時に発行する方法および装置を開示する。説明の目的で以下の記述では、本発明を充分理解できるようにするため特定の数、材料、および構成を示してある。しかし、当業者には本発明をこの特定の細目無しで実用化し得ることが明らかであろう。その他の場合では、周知のシステムを本発明を不必要にあいまいにしないために図式の形でまたはブロック図の形で示してある。
【００２４】
次に図１には、本発明の教示を取入れている実施例パイプライン化プロセッサを示す機能ブロック図が図示されている。図示されているのは、プログラムカウンタ１２、多数の命令待行列１４、および命令制御ユニット１６から構成されている実施例パイプライン化プロセッサ１０である。プログラムカウンタ１２、命令待行列１４、および命令制御ユニット１６は互いに結合されている。共に、それらは協働してクロックサイクルあたり最大三つの命令を同時に発行する。
【００２５】
プログラムカウンタ１２が命令制御ユニット１６と協働する仕方の他は、大部分のパイプライン化プロセッサに見られる広範な部類のプログラムカウンタを表すつもりである。その基本的機能および構成は周知であり、これ以上説明しないことにする。命令待行列１４、命令制御ユニット１６、およびそれらが互いに協働する仕方、およびプログラムカウンタ１２を図３〜図９を参照して後に更に詳しく説明することにする。
【００２６】
本発明を理解しやすくするため、本発明をそのプログラムカウンタ１２、命令待行列１４、および命令制御ユニット１６が以下の説明に基づき、クロックサイクルあたり同時に最大三つの命令を発行する実施例プロセッサ１０を用いて説明しているが、代わりに本発明をすべての他の補足的設計考慮事項を対応させてして調節すれば、協同動作するこれらの要素を用いてクロックサイクルあたり最大ｍ個の命令を同時に発行するよう実用化し得ることが認められるであろう。更に、ｍの選択は、比較的小さいｍについて、実行性能ゲインのそれ以上の増大の命令グループの決定に必要な時間のそれ以上の増加に対する比と実施装置の複雑さとのかね合いによる。しかし、命令グループを決定するのに必要な時間および実施装置の複雑さはｍが増加するにつれて非線形的に増大し、或る点で、命令グループを決定するのに必要な時間および／または実施装置の複雑さは命令実行時間の節約より大きくなる。
【００２７】
図１を引き続き参照すると、パイプライン化プロセッサ１０は更に整数ユニットレジスタファイル１８および整数機能ユニット２０を備えている。整数ユニットレジスタファイル１８は命令制御ユニット１６および整数機能ユニット２０に結合されており、整数機能ユニット２０は命令制御ユニット１６にも結合されている。整数ユニットレジスタファイル１８および整数機能ユニット２０は、協働してクロックサイクルあたり最大二つの整数結果を発生する。
【００２８】
整数ユニットレジスタファイル１８は互いに無関係な４個のレジスタポートを備えている。互いに無関係な４個のレジスタポートは、時間多重すると、６個の読出しポートおよび２個の書込みポートと同等の容量を備え、２個のアドレスレジスタの同時読出し、または４個のデータレジスタの同時読出し、またはどれか２個のレジスタの同時書込みを支持するのに充分である。整数ユニットレジスタファイル１８の読み書き帯域幅、および整数ユニットレジスタファイル１８が整数機能ユニット２０と協同動作する仕方を除けば、整数ユニットレジスタファイル１８は大部分のパイプライン式プロセッサに見られる広範な部類のレジスタファイルを表すことを目的としている。その基本的機能および機能は周知であり、これ以上説明しないことにする。整数機能ユニット２０の一つの実施例、および整数機能ユニット２０が命令制御ユニット１６および整数ユニットレジスタファイル１８と協同動作する仕方を図２、図８〜図９を参照して後に更に詳しく説明する。
【００２９】
本発明を理解しやすくするため、本発明を、その整数ユニットレジスタファイル１８および整数機能ユニット２０が、以下の説明に基づいて、協働してクロックサイクルあたり最大二つの整数結果を発生する実施例プロセッサ１０を用いて説明しているが、代わりに本発明を、他のすべての補足的設計考慮事項、特に整数機能ユニット２０を対応させて調節すれば、協同動作するそれら要素を用いてクロックサイクルあたり最大ｎ１個の整数結果を発生するよう実用化し得ることが認められよう。
【００３０】
なおも図１を参照すると、実施例パイプライン化プロセッサ１０は、更に浮動小数点命令待行列２４、浮動小数点命令制御ユニット２６、浮動小数点ユニットレジスタファイル２８、浮動小数点機能ユニット３０、およびマルチプレクサ３２を備えている。浮動小数点命令待行列２４は命令制御ユニット１６および浮動小数点命令制御ユニット２６に結合されており、浮動小数点命令制御ユニット２６は浮動小数点ユニットレジスタファイル２８にも結合されている。浮動小数点ユニットレジスタファイル２８は浮動小数点機能ユニット３０およびマルチプレクサ３２にも結合されている。共に、これらはクロックサイクルあたり多くとも一つの浮動小数点結果を発生する。
【００３１】
浮動小数点命令待行列が命令制御ユニット１６と協同動作する仕方を除けば、浮動小数点命令待行列２４、浮動小数点命令制御ユニット２６、浮動小数点ユニットレジスタファイル２８、浮動小数点ユニット３０、およびマルチプレクサ３２は大部分のパイプライン化プロセッサに見られる広範な部類のこれら要素を表すことを目的としている。それらの基本的機能および構成は周知であり、これ以上説明しないことにする。浮動小数点命令待行列２４が命令制御ユニット１６と協同動作する仕方を図８〜図９を参照して後に更に詳しく説明する。
【００３２】
本発明を理解しやすくするため、その浮動小数点命令待行列２４、浮動小数点制御ユニット２６、浮動小数点ユニットレジスタファイル２８、浮動小数点機能ユニット３０、およびマルチプレクサ３２が、以下に説明することに基づき、クロックサイクルあたり多くとも一つの浮動小数点結果を発生する実施例プロセッサ１０を用いて説明しているが、代わりに本発明を、他のすべての補足的設計考慮事項、特に、浮動小数点命令待行列２４、浮動小数点命令制御ユニット２６、および浮動小数点機能ユニット３０を対応させて調節すれば、協同動作するこれら要素を用いてクロックサイクルあたり最大ｎ２個の浮動小数点結果を発生するように実施することができる。
【００３３】
なおも図１を参照すると、実施例パイプライン化プロセッサ１０は更に命令キャッシュ３４、データキャッシュ３６、共有記憶装置管理ユニット３８、書込みバッファ４０、およびキャッシュ・コヒーレント・バスインターフェースユニット４２を備えている。命令キャッシュ３４はプログラムカウンタ１２、命令待行列１４、命令制御ユニット１６、共有記憶装置管理ユニット３８、およびキャッシュ・コヒーレント・バスインターフェースユニット４２に結合されている。データキャッシュ３６は整数機能ユニット２０、浮動小数点ユニットレジスタファイル２８、マルチプレクサ３２、共有記憶装置管理ユニット３８、書込みバッファ４０、およびキャッシュ・コヒーレント・バスインターフェースユニット４２に結合されている。共有記憶装置管理ユニット３８および書込みバッファ４０は今度はキャッシュ・コヒーレント・バスインターフェースユニット４２にも結合している。共に、これらは協働して命令を命令待行列１４に、データを整数機能ユニット２０および浮動小数点機能ユニット３０、およびそれらのレジスタファイル、１８および２８、に供給する。
【００３４】
命令キャッシュ３４が命令待行列１４と協同動作する仕方の他は、命令制御ユニット１６、およびデータキャッシュ３６が整数機能ユニット２０、命令キャッシュ３４、データキャッシュ３６、共有記憶装置管理ユニット３８、書込みバッファ４０、およびキャッシュ・コヒーレント・バスインターフェースユニットと協同動作する仕方は大部分のパイプライン化プロセッサに見られるこれら要素の広範な部類を表すことを目的としている。それらの基本的機能および構成は周知であり、これ以上説明しないことにする。命令キャッシュ３４が命令待行列１４、命令制御ユニット１６と協同動作する仕方、およびデータキャッシュ３６が整数機能ユニット２０と協同動作する仕方を図３、図８、および図９を参照して後に更に詳細に説明する。
【００３５】
今度は図２を参照すると、図１の実施例パイプライン化プロセッサの整数機能ユニットの一実施例を示す機能ブロックが示されている。図示してあるのはアドレス加算器２２、データ加算器４４、４６、および４８、シフタ５０、および三つのマルチプレクサ５２、５４、および５６から構成されている整数機能ユニット２０である。共に、これらは協同動作してクロックサイクルあたり多くとも二つの整数結果を発生する。
【００３６】
アドレス加算器２２は第２のマルチプレクサ５４、データキャッシュ３６、および共有記憶装置管理ユニット３８に結合されており、第２のマルチプレクサ５４は整数ユニットレジスタファイル１８に結合されている。第１および第２のデータ加算器４４および４６、およびシフタ５０は第１および第２のマルチプレクサ５２および５４に結合されており、第１のマルチプレクサは整数ユニットレジスタファイル１８に結合されている。第３のデータ加算器４８は第２および第３のマルチプレクサ５４および５６に結合されており、第３のマルチプレクサはデータキャッシュ３６にも結合されている。他に、第１および第２のデータ加算器４４および４６は命令制御ユニット１６に結合されている。
【００３７】
アドレス加算器２２はアドレスを発生する。アドレス加算器２２はアドレスを整数ユニットレジスタファイル１８から第２のマルチプレクサ５４を介して入力として受取り、アドレスをデータキャッシュ３６および共有記憶装置管理ユニット３８に出力する。
【００３８】
３個のデータ加算器４４、４６、および４８、およびシフタ５０は共に整数機能ユニット結果を計算する２個の論理的加算器資源として働く。第１および第２の加算器４４および４６はブール演算を行うこともできる。第１のデータ加算器４４はデータを整数ユニットレジスタファイル１８から第１のマルチプレクサ５２を介して入力として受取り、データをプログラムカウンタ１２または第２のマルチプレクサ５４に出力するが、これらは第３のデータ加算器４８および／または第３のマルチプレクサ５６に選択的に供給される。第３のマルチプレクサ５６に供給されたデータはデータキャッシュ３６に選択的に供給され、または次の命令のため前に送られる。第２のデータ加算器４６およびシフタ５０はデータを整数ユニットレジスタファイル１８から受取り、またはデータをデータキャッシュ３６から受取るか、またはデータを第１のマルチプレクサ５２を介して入力として前に送り、状態コードまたはデータを命令制御ユニット１６または第２のマルチプレクサ５４に出力するが、これは第３のデータ加算器４８および／またはマルチプレクサ５６に選択的に供給される。同様に、第３のマルチプレクサ５６に供給されたデータは今度はデータキャッシュ３６に選択的に供給されるか、または次の命令のため前に送られる。
【００３９】
加算器２８、４４〜４８、およびシフタ５０はクロックサイクルあたり最大２個のアドレスレジスタのオペランドおよび最大４個のアドレスレジスタのオペランドを受取ることができる。加算器２２、４４〜４８の他にシフタ５０も各々、その動作を完了するのに半クロックサイクルしか必要としない。
【００４０】
理解しやすくするため、整数機能ユニット２０を、協同動作してクロックサイクルあたり多くとも２個の整数結果を発生する２個の論理的加算器を備えている上述の実施例を用いて説明しているが、上の実施例を協同動作してクロックサイクルあたり多くともｎ１個の整数結果を発生するｎ１個の論理的加算器を備えるよう拡張し得ることが認められよう。他に、整数機能ユニット２０を上の実施例を用いて説明しているが、本発明はクロックサイクルあたり充分な補足数の整数結果を発生する他の実施例を用いて実用化し得ることが認められよう。
【００４１】
今度は図３を参照すれば、図１の実施例パイプライン化プロセッサの命令待行列を示す機能ブロック図が示されている。図示されているのは、逐次待行列５８、分岐目標待行列６０、および２個のマルチプレクサ６２および６４から成る命令待行列１４である。共に、これらは協同動作してクロックサイクルあたり三つの命令を命令制御ユニット１６に供給する。
【００４２】
逐次待行列および分岐目標待行列、５８および６０、は命令キャッシュ３４および２個のマルチプレクサ６２および６４に結合されている。他に、逐次待行列５８、第１のマルチプレクサ６２、および第２のマルチプレクサ６４は命令制御ユニット１６にも結合されている。逐次待行列５８はプログラムカウンタ１２にも結合されている。
【００４３】
逐次待行列および分岐目標待行列、５８および６０、は命令制御ユニット１６に向けて候補命令を発生する。逐次待行列５８は命令を命令キャッシュから、最後のサイクルで発行された命令の数を命令制御ユニット１６から、および分岐路選択信号をプログラムカウンタ１２から入力として受取り、命令を二つのマルチプレクサ６２および６４に対して出力する。同様に、分岐目標待行列６０は命令を命令キャッシュ３４から入力として受取り、命令を両マルチプレクサ６２および６４に出力する。第１のマルチプレクサ６２は、命令制御ユニットの制御のもとに、分岐が取られるか否かにより、逐次待行列５８または目標待行列６０からの命令制御ユニット１６に供給する。第２のマルチプレクサ６４は、命令制御ユニット１６の制御のもとに、命令が実行のため発生され且つ分岐が取られているか否かにより、逐次待行列５８または目標待行列６０からの命令を逐次待行列５８に条件付きで供給する。命令キャッシュ３４から受取られた命令は逐次待行列５８または分岐目標待行列６０の末尾に付加される。
【００４４】
逐次待行列５８および分岐目標待行列６０の両者はクロックサイクルあたり４つの命令を命令キャッシュ３４から受取ることができる。逐次待行列５８には一度に４つまでの命令を保持する能力がある。逐次待行列５８および分岐目標待行列６０はクロックサイクルあたり最大三つの命令を命令制御ユニット１６に対し第１のマルチプレクサ６２を通して出力することもできる。
【００４５】
理解しやすくするため、命令待行列１４をクロックサイクルあたり三つの逐次命令および／または分岐目標命令を命令制御ユニット１６に供給することができる実施例により説明してきたが、命令待行列１４は、入力および出力の帯域幅および待行列の容量を対応させて調節すれば、ｍを３より大きいとして、クロックサイクルあたりｍ個の命令を命令制御ユニット１６に供給するよう拡張し得ることが認められよう。
【００４６】
次に図４を参照すると、図１の実施例パイプライン化プロセッサの命令制御ユニットを図解する機能ブロック図が示されている。図示されているのは先取りコントローラ６６およびスケジューラ６８を備えている命令制御ユニット１６である。共に、これらは協働してクロックサイクルあたり多くとも三つの命令を整数機能ユニットおよび／または浮動小数点命令待行列に対して発行する。
先取りコントローラ６６はプログラムカウンタ１２、命令待行列１４、命令キャッシュ３４、スケジューラ６８、および整数ユニットに結合されている。スケジューラ６８は命令待行列１４、先取りコントローラ６６、整数ユニットレジスタファイル、および浮動小数点命令待行列に結合されている。
【００４７】
先取りコントローラ６６は分岐路の予測および選択を行い、命令の先取りを制御する。先取りコントローラ６６は分岐路解答を整数ユニットから、命令取出し有効ビットおよび命令待行列の未使用容量を命令キャッシュ３４から、および命令選択結果をスケジューラから入力として受取り、分岐路予測および解答をプログラムカウンタ１２に、および制御信号を命令待行列１４に出力する。スケジューラ６８は命令を命令待行列１４から入力として受取り、レジスタ選択およびレジスタオペランドを整数ユニットレジスタファイルにおよび／または浮動小数点命令を浮動小数点待行列に、命令選択結果を先取りコントローラ６６に、および最後のサイクルで発行された命令の数を命令待行列１４およびプログラムカウンタ１２に出力する。
【００４８】
先取りコントローラ６６は、分岐が取られているか否かに基づき、制御信号を命令待行列１４に供給し、命令待行列１４にクロックサイクルあたり三つの命令をその逐次待行列または目標待行列の先頭からスケジューラ６８に供給させる。その他、先取りコントローラ６６は、命令が実行のため発行されているか否かに基づき、制御信号を命令待行列１４に条件付きで供給し、命令待行列に供給された命令の全部または幾つかを逐次待行列または目標待行列のいずれかから逐次待行列まで再循環させる。先取りコントローラ６６が分岐径路を予測し解答する仕方を図１０および図１１を参照して更に詳細に説明することにする。
【００４９】
スケジューラ６８は候補命令が現在の命令グループの一部として発行されているか否か判定する。スケジューラ６８は逐次待行列または目標待行列のいずれかからクロックサイクルあたり最大三つの命令を受取り、最大三つの命令を整数機能ユニットおよび／または浮動小数点命令待行列に向けて出力することができる。スケジューラ６８は、三つの命令が存在する場合、そのうちのどれを実行のため同時に発行することができるかを判定するのに１クロックサイクルより少ない時間しか必要としない。スケジューラ６８が判定を行う仕方を図６〜図７を参照して後に更に詳しく説明することにする。
【００５０】
理解しやすくするため、命令制御ユニット１６をクロックサイクルあたり全部で最大三つの命令を整数機能ユニットおよび／または浮動小数点命令待行列に供給することができる実施例を用いて説明してきたが、命令制御ユニット１６は、入力および出力の帯域幅およびスケジューラ６８を対応させて調節すれば、ｍを３より大きいとして、クロックサイクルあたり全部で最大ｍ個の命令を整数機能ユニットおよび／または浮動小数点待行列に供給するよう拡張し得ることが認められるであろう。
【００５１】
次に図５を参照すると、図４の命令制御ユニットのスケジューラを図解する機能ブロック図が示されている。図示されているのはオプコード復号器７０、カスケード検出器７２、グループ化論理７４、および以前のグループ経歴７６を備えているスケジューラ６８である。共に、これらは協働してクロックサイクルあたり最大３個の命令を実行のため整数機能ユニットおよび／または浮動小数点待行列に対して発行する。
オプコード復号器７０およびカスケード検出器７２の両者は命令待行列およびグループ化論理７４に結合されている。カスケード検出器７２は以前のグループ経歴７６に接続されている。グループ化論理７４は命令待行列、先取りコントローラ、以前のグループ経歴７６、整数ユニットレジスタファイル、および浮動小数点命令待行列にも結合されている。
【００５２】
オプコード復号器７０は候補命令のオプコードを復号する。オプコード復号器７０は命令オプコードを命令待行列から入力として受取り、各命令に関する命令形成情報をグループ化論理７４に出力する。
カスケード検出器７２は候補命令それ自身の間、および候補命令と前任命令との間、のデータ依存性を検出する。カスケード検出器７２は発信および宛先の各オペランド指標を命令待行列から、および後に到着する整数結果指数を以前のグループ経歴７６から入力として受取り、命令間オペランド依存性情報をグループ化論理７４に出力する。
【００５３】
グループ化論理７４は候補命令が現在の命令グループの一部として発行されているか否か判定する。グループ化論理７４は命令形式および命令間オペランド依存性情報をそれぞれオプコード復号器７０およびカスケード検出器７２から入力として受取り、整数ユニットレジスタファイルおよび／または浮動小数点命令に対するレジスタ選択およびレジスタオペランドを浮動小数点命令待行列に出力する。その他に、グループ化論理７４は命令の分類および発行の結果を以前のグループ経歴７６、先取りコントローラ、および命令待行列に出力する。
【００５４】
以前のグループ経歴は、命令グループ化および発行結果を蓄積し、発行した命令がパイプラインを出るまで保持する。以前のグループ経歴７６は最新のグループ経歴をグループ化論理７４から入力として受取り、グループ経歴をグループ化論理７４およびカスケード検出器７２に出力する。
オプコード復号器７０、カスケード検出器７２、およびグループ化論理７４はすべてクロックサイクルあたり最大三つの命令を受取り、分析し、出力することができる。同様に、以前のグループ経歴７６は、命令分類および発行結果をクロックサイクルあたり最大三つの命令について受取ることができる。
【００５５】
オプコード復号器７０が命令待行列およびグループ化論理７４と協同動作する仕方の他は、オプコード復号器７０は大部分のパイプライン化プロセッサに見られるオプコード復号器の広範な部類を表すことを目的としている。その基本的機能および構成は周知であり、これ以上説明しない。カスケード検出器７２およびグループ化論理７４は図６〜図７を参照して後に更に詳しく説明することにする。以前のグループ経歴７６がカスケード検出器７２およびグループ化論理７４と協同動作する仕方の他は、以前のグループ経歴７６は、大部分のパイプライン化プロセッサに見られる「スコアボード」の広範な部類を表すことを目的としている。その基本的機能および構成は周知であり、これ以上説明しないことにする。
【００５６】
理解しやすくするため、スケジューラ６８をクロックサイクルあたり全部で最大三つの命令を分類し、整数機能ユニットおよび／または浮動小数点命令待行列に対して発行することができる実施例により説明してきたが、スケジューラ６８は、入力および出力の帯域幅、オプコード復号器７０、カスケード検出器７２、グループ化論理７４、および以前のグループ経歴７６を対応させて調節すれば、ｍを３より大きいとして、クロックサイクルあたり全部で最大ｍ個までの命令を分類し、整数機能ユニットおよび／または浮動小数点命令待行列に対して発行するよう拡張し得ることが認められよう。
【００５７】
次に図６を参照すると、図５のスケジューラのカスケード検出器を図解する機能ブロック図が示されている。図示されているのは同等検出器の三つのグループ７８〜８２から成るカスケード検出器７２である。共に、これらは協同動作して候補命令そのものの間、および候補命令と前任命令との間のデータ依存性を決定する。各同等検出器８４ａ、・・・、または８４ｒはスケジューラの命令待行列およびグループ化論理に結合されている。その他、同等検出器の第３のグループ８２の各同等検出器８４ｇ、・・・、８４ｒはスケジューラの以前のグループ経歴にも結合されている。
【００５８】
同等検出器の第１のグループ７８は、第２および第３の候補命令の源オペランドにより第１の候補命令の結果オペランドに関するデータ依存性を検出する４個の同等検出器８４ａ〜８４ｄから構成されている。同等検出器の第１のグループ７８の各同等検出器８４ａ、８４ｂ、８４ｃ、または８４ｄは第１の候補命令の結果オペランド指標および第２および第３の命令の４個の源オペランド指標の一つを入力として受取る。応答して、各同等検出器８４ａ、８４ｂ、８４ｃ、または８４ｄは入力が互いに等しいか否かを示す指示子を出力する。
【００５９】
同等検出器の第２のグループ８０は、第３の候補命令の源オペランドにより第２の候補命令の結果オペランドに関するデータ依存性を検出する２個の同等検出器８４ｅ〜８４ｆから構成されている。同等検出器の第２のグループ８０の各同等検出器、８４ｅまたは８４ｆ、は第２の候補命令の結果オペランド指標および第３の候補命令の源オペランド指標の一つを入力として受取る。応答して、各同等検出器、８４ｅまたは８４ｆ、は入力が互いに等しいか否かを示す指示子を出力する。
【００６０】
同等検出器の第３のグループ８２は、第１、第２、および第３の候補命令の源オペランドによりパイプラインの実行ステージの後期に計算される二つの整数結果のいずれか一つに関するデータ依存性を検出する１２個の同等検出器８４ｇ〜８４ｒから構成されている。同等検出器の第３のグループ８２の各同等検出器、８４ｇ、・・・、または８４ｒは第３の候補命令の二つの前のグループの整数結果指標の一つおよび六つの源オペランド指標の一つを入力として受取る。応答して、各同等検出器、８４ｇ、・・・、または８４ｒ、は入力が互いに等しいか否かを示す指示子を出力する。
理解しやすくするためのカスケード検出器７２をクロックサイクルあたり三つの候補命令についてデータ依存性を検出することができる実施例により説明してきたが、カスケード検出器７２は、同等検出器の数を対応して増加すれば、ｍを３より大きいとして、クロックサイクルあたりｍ個の候補命令についてデータ依存性を検出するよう拡張し得ることが認められよう。
【００６１】
次に図７を参照すると、図５のスケジューラのグループ化論理を図解する機能ブロック図が示されている。図示されているのは三つの排他論理８６ａ〜８６ｃおよび三つの対応するＡＮＤゲート８８ａ〜８８ｃから成るグループ化論理７４である。他に、グループ化論理７４はエンコーダ９０および多数のラッチ９２を備えている。共に、これらは協働して１クロックサイクルに三つの候補命令から発行するための最大３個の命令を選択する。
排他論理８６ａ〜８６ｃ、およびＡＮＤゲート８８ａ〜８８ｃは対応して互いに結合されている。排他論理８６ａ〜８６ｃは命令待行列、オプコード復号器、カスケード検出器、および以前のグループ経歴にも結合されている。ＡＮＤゲート８８ａ〜８８ｃはエンコーダ９０およびラッチ９２に結合されている。エンコーダ９０はプログラムカウンタおよび命令待行列にも結合されている。ラッチ９２はオプコード復号器、カスケード検出器、以前のグループ経歴、先取りコントローラ、整数ユニットレジスタファイル、および浮動小数点命令待行列にも結合されている。
【００６２】
各排他論理８６ａ、８６ｂ、または８６ｃは、パイプライン化プロセッサの資源特性を反映して候補命令を現在の命令グループから排除すべきか否かを決定する多数の排他規則を実施する多数の組合わせ論理から構成されている。各排他論理８６ａ、８６ｂ、または８６ｃは候補命令有効信号を命令待行列から、  オプコードをオプコード復号器から、およびデータ依存性指示子をカスケード検出器から入力として受取る。応答して、  各排他論理８６ａ、８６ｂ、または８６ｃは候補命令を実行のため発行することになっている命令の現在のグループから排除すべきか否かを示す多数の排他信号を出力する。排他規則については後に更に詳しく説明する。
【００６３】
各ＡＮＤゲート８８ａ、８８ｂ、または  ８８ｃは候補命令を現在の命令グループに入れるべきか否かを決定する。各ＡＮＤゲート８８ａ、８８ｂ、または  ８８ｃは排他信号を対応する排他論理８６ａ、８６ｂ、  または８６ｃから入力として受取る。応答して、各ＡＮＤゲート８８ａ、８８ｂ、  または８８ｃは候補命令に対して候補命令を実行のため発行することになっている命令の現在のグループに入れるべきか否かを示す「取得」信号を出力する。
エンコーダ９０は現在の命令グループに対するグループサイズを発生する。エンコーダ９０は「取得」信号をＡＮＤゲート８８ａ〜８８ｃから入力として受取る。応答して、エンコーダ９０は現在のグループのサイズをプログラムカウンタおよび命令待行列に向けて出力する。
【００６４】
ラッチ９２は分類選択、分類経歴の更新、レジスタ選択およびオペランド、および浮動小数点命令を発生する。ラッチ９２は「取得」信号をＡＮＤゲート８８ａ〜８８ｃから、およびオプコードをオプコード検出器から、およびデータ依存性をカスケード検出器から入力として受取る。応答して、ラッチ９２は分岐選択を先取りコントローラに、分類経歴の更新を以前のグループ経歴に、レジスタ選択およびオペランドを整数ユニットレジスタファイルに、および浮動小数点命令を浮動小数点待行列に出力する。
排他論理８６ａ〜８６ｃ、およびＡＮＤゲート８８ａ〜８８ｃは次のように命令を分類し発行する。
【００６５】
三つの命令をｉ０、ｉ１、およびｉ２とし、
Ｒ０、Ｒ１、・・・、Ｒｎを排他規則とし、
Ｅｘｃｌｕｄｅｉ＿Ｒｊは、命令ｉを排他規則ｊ、ｉ＝０、１、２、およびｊ＝０、１、・・・ｎのもとで排除すべきことを意味し、
Ｇｒｏｕｐｉ＿Ｒｊは、命令ｉを排他規則ｊに基づいて分類することができることを意味し、
ｄＧｒｏｕｐｉは、命令ｉを、それに先行するすべての命令も分類されている場合
およびその場合に限りばらばらに分類することができることを意味し、
Ｇｒｏｐｕｉは、命令ｉを分類することができることを意味し、
！は反転を意味し、
＆＆は二進和を意味するとしよう。
【００６６】
そうすると、
0003575617.tif 000002
【００６７】
どの排他規則も一つの命令およびそれに続くどの命令をも同時に実行するためグループ化し且つ発行することから除外することができることが認められるであろう。
【００６８】
排他規則には基本的な二つの種類がある。すなわち「後で区切る」排他規則、および「前で区切る」排他規則である。「後で区切る」排他規則は命令の後で命令のグループ化を終結し、「前で区切る」排他規則は命令の前で命令のグループ化を終結する。各種類の場合、排他規則は、分析中の命令に基づく排他規則、前のグループに基づく排他規則、および例外に基づく排他規則に更に細分される。
【００６９】
「後で区切る」排他規則は次のものから成る。
ａ）最初の有効例外の後で区切る。
この排他規則は命令取出し段階中に命令アクセスの例外を受ける命令に続く現在の命令のグループ化を終結する。
ｂ）或る制御転送命令の後で区切る。
この排他規則は分岐と分岐に続く次の命令との間で現在の命令のグループ化を終結する。図１の実施例なパイプライン化プロセッサでは、遅延命令が常に分岐命令に基づいている。
【００７０】
ｃ）複数ステップ（ＭＵＬＳＣＣ）命令の後で、その結果が直ぐ後に続くＭＵＬＳＣＣ命令に直列に接続しないとき、区切る。
この排他規則は第１のＭＵＬＳＣＣ命令の宛先が直ぐ後に続く第２のＭＵＬＳＣＣ命令にカスケードしないとき二つの連続するＭＵＬＳＣＣ命令の後で現在の命令のグループ化を終結する。本実施例のパイプライン化プロセッサでは、ＭＵＬＳＣＣ命令は二つの３２ビットの整数を乗算して６４ビットの整数積を生ずるのに連続して３２回使用される。各ＭＵＬＳＣＣ命令は整数条件コードの現在の状態に依存する。ＭＵＬＳＣＣを実行するごとに単一ビットの積が生じ、新しい整数条件コードが発生する。
【００７１】
ｄ）カスケード実行段階で設定された条件コードの後で区切る。
この排他規則はカスケード実行段階で条件コードを設定する命令の直後に現在の命令のグループ化を終結する。その源引数の一つが現在の命令のグループ化の中の前の命令により発生されるとき命令はカスケード実行段階を利用する。
ｅ）無効分岐に続く最初の命令の後で区切る。
この排他規則は前の命令グループ（現在はパイプラインを更に下っている）が無効分岐を含んでいるとき最初の候補命令の直後に現在の命令のグループ化を終結する。この排他規則は複数の命令が無効分岐の遅延スロットで実行しないようにする。本実施例のパイプライン化プロセッサでは、二つの形式の分岐、遅延分岐および条件付取消しのある遅延分岐がある。分岐目標を計算し、目標アドレスで命令の流れを取出す潜伏期間は命令を各分岐の直後に各目的に実行することにより軽減される。この次の命令は分岐遅延命令と呼ばれる。条件付き取消しを有する遅延分岐は、条件付き分岐を取らない場合、遅延命令を押しつぶす。分岐命令の取扱いについては図１０〜図１１を参照して後に更に詳しく説明することにする。
【００７２】
ｆ）分岐結合の最初の目標アドレスにある最初の命令の後で区切る。
この排他規則はプロセッサが分岐結合を処理している途中にあるとき分岐の目標にある最初の命令を後で現在の命令のグループ化を終結する。この排他規則は複数の命令が、分岐結合の最初の目標命令が発行されているとき実行されないようにする。実施例パイプライン化プロセッサでは、分岐結合は分岐の遅延命令が他の分岐であるとき形成される。
【００７３】
「前で区切る」排他命令は次のものから構成されている。
ａ）無効例外の前で区切る。
この排他規則は命令制御ユニットが命令待行列から命令を待っているとき現在の命令のグループ化を終結する。命令待行列は三つより少ない有効命令を備えることが可能である。本実施例のパイプライン化プロセッサでは、命令アクセス除外の期間中に取出された命令さえ有効命令と考えられている。
ｂ）整数ユニットレジスタファイル読取りポートからはずれる前で区切る。
この排他規則は整数ユニットレジスタファイル読取りポートすべてが使用される前に現在の命令のグループ化を終結する。この排他規則はグループがあまり多数の整数ユニットレジスタファイル読取りポートを使用しないようにする
【００７４】
ｃ）第２のデータ記憶装置参照の前で区切る。
この排他規則は記憶装置が第２の時間についてもう一度参照される前に現在の命令のグループ化を終結する。実施例パイプライン化プロセッサでは、記憶装置へのポートが一つしか存在しない。この排他規則は単一ポートが複数の命令により同時に使用されないようにする。
ｄ）第２の浮動小数点演算の前で区切る。
この排他規則は第２の浮動小数点演算が浮動小数点命令待行列に送られる前に現在の命令のグループ化を終結する。本実施例パイプライン化プロセッサでは、命令制御ユニットから浮動小数点命令待行列までポートが一つしか存在しない。この排他規則は単一ポートが複数の命令により同時に使用されないようにする。
【００７５】
ｅ）第２のシフトの前で区切る。
この排他規則はシフトが第２の時間についてもう一度使用される前に現在の命令のグループ化を終結する。本実施例パイプライン化プロセッサでは、シフタが一つしか存在しない。この排他規則はシフタが複数の命令により同時に使用されないようにする。
ｆ）第２のカスケードの前で区切る。
この排他規則は第２のオペランドが後続の命令までカスケードされる前に現在の命令のグループ化を終結する。この排他規則は二つ以上のオペランドが一度にカスケードされないようにする。命令間のカスケードには二つの命令が必要である。第２のカスケードには三つの命令かまたは両源オペランドが実行段階の前半の結果である場合もう一つの命令が必要である。実行段階については図８〜図９を参照して後に更に詳しく説明することにする。
【００７６】
ｇ）シフトのカスケードされる前で区切る。
この排他規則はオペランドがシフタの使用を必要とする命令にカスケードされる前に現在の命令のグループ化を終結する。この排他規則はシフタが実行段の後半で必要となることがないようにする。本実施例パイプライン化プロセッサでは、シフタは一つしか存在せず、それは実行ステージの前半で使用されなければならないことになっている。
【００７７】
ｈ）レジスタ相対制御転送（ＪＭＰＬ）命令にカスケードする前に区切る。
この排他規則はオペランドがＪＭＰＬ命令にカスケードされる前に現在の命令のグループ化を終結する。この排他規則はＪＭＰＬ命令がＪＭＰＬ命令の源レジスタの一つを変える命令グループに分類されることがないようにする。本実施例パイプライン化プロセッサでは、その目標アドレスが整数ユニットレジスタファイルのエントリの内容に基づいて計算される分岐命令であるＪＭＰＬ命令を支持する。
【００７８】
ｉ）ロードデータカスケード使用の前で区切る。
この排他規則は現在の命令のグループ化に入っているロード命令の結果を使用する命令の前で現在の命令のグループ化を終結する。この排他規則はロード命令の結果が同じ命令グループ内の他の命令にカスケードされないようにする。本実施例パイプライン化プロセッサでは、データを記憶装置からロードするのに１クロックサイクル全部が必要である。それ故、データは後続グループの命令に対してだけ利用可能であり、同じ命令グループ内の他の命令にカスケードされることはできない。
【００７９】
ｊ）記憶装置基準アドレスにカスケードする前に区切る。
この排他規則は現在の命令のグループ化に入っている他の命令により修正されている記憶装置アドレスを基準とする命令の前に現在の命令のグループ化を終結する。この排他規則は記憶装置基準アドレスが同じ命令グループ内の先行命令からカスケードされた結果により修正されないようにする。
【００８０】
ｋ）前のグループが記憶装置基準にカスケードする前に区切る。
この排他規則は前の命令グループに入っている他のロード命令の結果を使用するロード命令の前で現在の命令のグループ化を終結する。この排他規則は二つのロード命令が二つの連続するグループに入ることがないようにする（「第２のロードの前で区切る」および「ロード使用の前で区切る」排他規則は二つの連続するロード命令が同じ命令グループ内に入らないようにする）。実施例パイプライン化プロセッサでは、記憶装置内のデータは実行ステージで参照される。記憶装置基準に対するアドレスは記憶装置基準が始まる半サイクル前に記憶装置アドレスレジスタポートを読取ることにより前のサイクルで計算される。その結果、アドレスレジスタに実行段の開始までに、ロード格納アドレスを発生する即時データを付加することができる。計算したアドレスをロード格納アドレス加算器に送るのに前送り径路が設けられている。
【００８１】
ｌ）逐次命令の前で区切る
この排他規則は、それ自身によってだけ実行されることができる命令の特定のグループの一員である命令の前で現在の命令のグループ化を終結する。この排他規則はこれら特定の命令が同じ命令グループに分類されないようにする。本実施例パイプライン化プロセッサでは、これら特定の命令は、制御レジスタにアクセスする命令、Ｉ／Ｏポートにアクセスする命令、整数の乗除を行う命令、浮動小数点分岐命令、信号装置を更新するのに使用される微細記憶装置基準、パイプラインの排出およびキャッシュを無効とする命令、および現在のレジスタウィンドウポインタを修正する命令、から構成されている。
【００８２】
ｍ）前のグループが整数条件コードを設定（ＳｅｔＣＣ）してから制御レジスタ読出しの前に区切る。
この排他規則は先行命令により修正されているプロセスで制御レジスタを読取る命令を入れる前に現在の命令のグループ化を終結する。この排他規則は制御レジスタが同じ命令グループ内の先行命令により修正されているとき制御レジスタが命令により読取られないようにする。本実施例パイプライン化プロセッサでは、整数条件コードが整数ユニットにより発生される。
【００８３】
ｎ）二つの隣接するＭＵＬＳＣＣの他は第２のＳｅｔＣＣの前で区切る。
この排他規則は、最初の二つの候補命令がＭＵＬＳＣＣでない場合には、第２のＳｅｔＣＣの前で現在の命令のグループ化を終結する。この排他規則は第２の候補命令の後でＭＵＬＳＣＣ対のグループ化をも終結する。これにより整数機能ユニットを用いて設定する条件コードの可能な源を制限する際の複雑さが少なくなる。実施例パイプライン化プロセッサでは、ＭＵＬＳＣＣ命令は単一命令グループで、または他のＭＵＬＳＣＣ命令を用いる二つの命令グループで実行される。
【００８４】
ｏ）現在グループがＳｅｔＣＣであるとき拡張算術の前で区切る。
この排他規則は、整数条件コードを設定する包含命令に続く拡張演算の前に現在の命令コードを終結する。この排他規則は拡張演算命令の整数条件コードが修正されないようにする。実施例パイプライン化プロセッサの命令では、実行段階中整数ユニットを通じて複数のパスが行われる。この第１のパスは後続反復に対する条件コードを修正する伝統的な演算命令である。後続パスは付加源引数として整数条件を使用する「拡張」演算命令を使用する。
【００８５】
ｐ）分岐が遅延命令それ自身でない限り遅延命令グループでの分岐の前で区切る。
この排他規則は含まれている遅延命令に続く分岐命令の前で現在の命令のグループ化を終結する。この排他規則は遅延命令それ自身が分岐である場合の他は別の分岐が遅延命令により開始されないようにする。
ｑ）分岐がレジスタ相対分岐である場合の他はＪＭＰＬ遅延スロットによる分岐の前で区切る。
この排他規則は、分岐命令がレジスタ相対分岐でもある場合の他は、レジスタ相対分岐の遅延スロットによる分岐命令の前で現在の命令のグループ化を終結する。この排他規則は命令キャッシュに至る分岐目標アドレス選択に対する設計の複雑さを少なくする。
【００８６】
ｒ）パイプラインが機能停止するとき最初の命令の前で区切る。
この排他規則はパイプラインが機能停止するとき現在の命令のグループ化を終結する。この排他規則は命令が、パイプラインが機能停止したとき、パイプラインに入らないようにする。実施例パイプライン化プロセッサでは、パイプラインはデータキャッシュの失敗や浮動小数点待行列の満杯状態により機能停止することがある。
【００８７】
今度は図８を参照すると、図１のパイプライン化プロセッサに組込まれている本発明のパイプライン段の現在のところ好適な実施例を図解するブロック図が示されている。図示されているのは、複数の整数パイプライン段１０２〜１１６、および複数の浮動小数点パイプラインステージ１１８〜１２６から成る本発明のパイプラインステージ  １００の現在のところ好適な実施例である。また図示されているのは７クロックサイクルから成る一連のクロックパルス１２８である。
【００８８】
整数パイプライン段１０２〜１１６は、二つの命令取出しステージ（ｆ０およびｆ１）１０２および１０４、三つの命令復号段（ｄ０、ｄ１、およびｄ２）１０６〜１１０、二つの実行段（ｅ０およびｅ１）１１２および１１４、および一つの書戻しステージ（ｗｂ）１１６から構成されている。浮動小数点パイプラインステージ１１８〜１２６は二つの命令復号ステージ（ｆｄおよびｆｒｆ）１１８および１２０、二つの実行ステージ（ｆａｄｄ／ｆｍｕｌおよびｆｎｏｒｍ／ｆｒｎｄ）１２２および１２４、および一つの書戻しステージ１２６から構成されている。浮動小数点実行ステージ（ｆａｄｄ／ｆｍｕｌおよびｆｎｏｒｍ／ｆｒｎｄ）１２２および１２４の他は、各パイプラインステージ１０２、・・・１２０、または１２６は半クロックサイクル必要である。各浮動小数点ステージ（ｆａｄｄ／ｆｍｕｌまたはｆｎｏｒｍ／ｆｒｎｄ）１２２または１２４は１クロックサイクルを必要とする。
本発明は、パイプライン化プロセッサの特定の実施形態に応じて、これら排他規則無しで、または別の排他規則を付加して実用化し得ることが認められよう。
【００８９】
次に図９を参照すると、図８のパイプラインの種々のパイプラインステージでの動作の流れを図解するブロック図が示されている。ステージｆ０およびｆ１で、命令キャッシュから、ステージごとに二つづつ四つの命令が取出される（ブロック１３２および１３４）。
【００９０】
ステージｄ０で、最大三つの命令が実行のため同時に整数機能ユニットおよび／または浮動小数点待行列に対して発行される（ブロック１３６）。ステージｄ１で、整数ユニットレジスタファイルに二つのアドレスレジスタが読取られ、分岐命令の目標アドレスが計算される（ブロック１３８）。ステージｄ２で、整数ユニットレジスタファイルの四つのデータレジスタが読取られ、ロード／格納命令のロード／格納アドレスが計算される（ブロック１４０）。
ステージｅ０で、データキャッシュがアクセスされ、浮動小数点動作が発行され、整数ユニットの第１の命令が実行される（ブロック１４２）。ステージｅ１で、整数ユニットの第２の命令が実行され、データがデータキャッシュ／記憶装置からロードされ、除外条件が解決される（ブロック１４４）。ステージｗｂで、二つの整数結果がデータキャッシュ／記憶装置または整数ユニットレジスタファイルに書込まれる（ブロック１４６）。
【００９１】
ステージfdで、浮動小数点命令が復号される（ブロック148）。ステージfrfで、浮動小数点レジスタファイルが読取られる（ブロック150）。ステージfadd/fmulで、浮動小数点和または浮動小数点積が計算される（ブロック152）。ステージfnorm/frndで、浮動小数点和が正規化されるかまたは浮動小数点積が丸められる（ブロック154）。ステージfwbで、浮動小数点結果が浮動小数点レジスタファイルに書戻される（ブロック156）。
次に図１０および図１１を参照すると、図９のパイプラインに対する分岐命令の取扱いを図解する二つのブロック図が示されている。図１０は分岐が取られる場合を示している。図１１は分岐が取られない場合を示している。
図１０に示されているのは整数パイプラインを通して移動する四つの実施例命令グループ162〜168である。時刻３で、命令制御ユニットは比較命令（ＣＭＰ）および等しくないとき分岐する命令（ＢＮＥ）から成る第１の実施例な二つの命令グループを実行のため整数機能ユニットに発行する。命令制御ユニットは命令グループを形成する途中で分岐命令を検出する。先取りコントローラは分岐が取られるように進むと仮定して、遅延命令が逐次命令待行列に存在するまで待ってから目標命令の流れを取出す。
【００９２】
時刻５で、命令制御ユニットは先取り遅延命令および次の逐次命令から成る第２の実施例な二つの命令グループを実行のため整数機能ユニットに対して発行する。同時に、命令制御ユニットは第１および第２の目標命令を目標命令待行列に編入させる。
時刻６で、分岐を取っている整数機能ユニットおよび従って更新されているプログラムカウンタにより分岐が解決される。それで、時刻７で、命令制御ユニットは第１の逐次命令を押しつぶし、先取りコントローラは目標命令待行列の内容を逐次命令待行列へ移動する。命令制御ユニットは、例外を生ぜしめて第１の逐次命令を押しつぶし、従ってプログラムカウンタを更新させる。同時に、命令制御ユニットは第１および第２の目標命令から成る第３の模範的な二つの命令グループを命令復号およびデータ依存性検出のためオプコード復号器およびカスケード検出器まで移動させる。更に、命令制御ユニットは第３および第４の目標命令を目標命令待行列に編入させる。
【００９３】
図１１に図示されているのは整数パイプラインを通して移動する四つの実施例命令グループ１６２’〜１６８’である。時刻３で、命令制御ユニットは、比較命令（ＣＭＰ）および等しくないとき分岐する命令（ＢＮＥ）から成る第１の実施例の二つの命令グループの実行のため整数機能ユニットに対して発行する。命令制御ユニットは命令グループを形成する途中で分岐命令を検出する。命令制御ユニットは分岐が取られるように進んでいると仮定して遅延命令が逐次命令待行列に存在するまで待ってから目標命令の流れを取出す。
【００９４】
時刻５で、命令制御ユニットは取出し遅延命令および次の逐次命令から成る第２の二つの命令グループを実行のため整数機能ユニットに対して発行する。同時に、命令制御ユニットは第１および第２の目標命令を目標命令待行列に編入させる。
時刻６で、分岐を取っている整数機能ユニットおよび従って更新されているプログラムカウンタにより分岐が解決される。それで、時刻７で、命令制御ユニットは、第１の逐次命令を押しつぶす例外を生ぜしめずに第１の逐次命令に整数パイプラインを下って移動し続けさせ、先取りコントローラは取出された第１および第２の目標命令を捨てる。同時に、命令制御ユニットは第２および第３の逐次命令から成る第３の二つの命令グループを命令復号およびデータ依存性検出のためオプコード復号器およびカスケード検出器に移動させる。更に、命令制御ユニットは第４および第５の逐次命令を逐次命令待行列に編入させる。
【００９５】
例外的取扱いを多様な既知の仕方で実施し得ることが認められよう。精密な例外機構を採用するのが望ましい。精密例外機構のこれ以上の説明については、１９９２年４月２９日に出願され、本発明と同じ譲受人、カリフォルニヤ州マウンテンビューのSun Microsystems、に譲渡されたスーパースカラーコンピュータ用精密例外機構という名称の米国特許出願、０７／８７５，９６３を参照されたい。
【００９６】
今度は図１２を参照すると、図１の実施例パイプライン化プロセッサによる実施例アプリケーションの実行を図解する図が示されている。図示されているのは、４回解かれる方程式Ａ（ｉ）＝Ｎ×Ｂ（ｊ）＋Ｃ（ｋ）をもちいるＬＩＮＰＡＣＫ  Ｄａｘｐｙ＿４プログラム１７０である。  結果を得るには全部で２７の命令を実行しなければならない。本実施例パイプライン化プロセッサの命令制御ユニットは、各グループ、１７２、・・・、または１９２、が重ねて実行する最大三つの命令から構成される１２の命令グループ１７２〜１９４の形で２７の命令を発行する。その結果、２７の命令を１２クロックサイクルで実行することができ、処理量がサイクルあたり２．２５命令のように改善される。
【００９７】
本発明を現在の好適なおよび代わりの実施例を用いて説明してきたが、当業者は本発明が記述した実施例に限定されないことを認めるであろう。本発明の方法および装置は特許請求の範囲の精神および範囲の中で修正および変形を行って実施することが可能である。したがって説明は本発明を限定するのではなく例示と見なすものとする。
【図面の簡単な説明】
【図１】本発明の教示を取入れたパイプライン化プロセッサの機能ブロック図を示す。
【図２】図１のパイプライン化プロセッサの整数機能ユニットの一実施例の機能ブロック図を示す。
【図３】図１のパイプライン化プロセッサに組込まれている本発明の命令待行列の現在のところ好適な実施例の機能ブロック図を示す。
【図４】図１のパイプライン化プロセッサに組込まれている本発明の命令制御機能ユニットの現在のところ好適な実施例の機能ブロック図を示す。
【図５】図４の命令制御ユニットのスケジューラの現在のところ好適な実施例の機能ブロック図を示す。
【図６】図５のスケジューラのカスケード検出器の現在のところ好適な実施例の機能ブロック図を示す。
【図７】図５のスケジューラのグループ化論理の現在のところ好適な実施例の機能ブロック図を示す。
【図８】図１のパイプライン化プロセッサのパイプラインステージの現在のところ好適な実施例を示す。
【図９】図８のパイプラインの動作の流れを図解する流れ図を示す。
【図１０】図４の命令制御機能ユニットによる分岐命令の取扱を示す。
【図１１】図４の命令制御機能ユニットによる分岐命令の取扱を示す。
【図１２】図１のパイプライン化プロセッサの実施例アプリケーションの実行を示す。
【符号の説明】
１０  パイプライン化プロセッサ
１２  プログラムカウンタ
１４  命令待行列
１６  命令制御ユニット
１８  整数ユニットレジスタファイル
２０  整数機能ユニット
２２  アドレス加算器
２４  浮動小数点命令待行列
２６  浮動小数点命令制御ユニット
２８  浮動小数点ユニットレジスタファイル
３０  浮動小数点機能ユニット
３４  命令キャッシュ
３６  データキャッシュ
３８  共有記憶装置管理ユニット
４０  書込みバッファ
４２  キャッシュコヒーレントバスインターフェースユニット
【図１】
0003575617.tif 000003
【図２】
0003575617.tif 000004
【図３】
0003575617.tif 000005
【図４】
0003575617.tif 000006
【図５】
0003575617.tif 000007
【図６】
0003575617.tif 000008
【図７】
0003575617.tif 000009
【図８】
0003575617.tif 000010
【図９】
0003575617.tif 000011
【図１０】
0003575617.tif 000012
【図１１】
0003575617.tif 000013
【図１２】
0003575617.tif 000014