(57)【特許請求の範囲】
【請求項１】
スーパースカラプロセッサにおける命令処理を制御するための命令処理制御方法であって、
（ａ）スーパースカラプロセッサによって実行されるべき命令を供給する段階と、
（ｂ）複数のスロットを含むキューに、前記複数のスロットの１つにそれぞれ記憶される複数のタグを記憶する段階と、
（ｃ）前記命令がリタイアされるまで前記命令のそれぞれを、複数のバッファロケーションからなるレジスタファイル内の固有なバッファロケーションを指定する前記複数のタグの１つと関連付ける段階と、
（ｅ）前記命令に関連付けられたタグによって指定されるバッファロケーションに、前記命令のそれぞれの少なくとも一部を記憶する段階と
を含むことを特徴とする、命令処理制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、スーパースカラプロセッサにおける命令処理を制御する命令処理制御方法に関する。
【０００２】
【従来の技術および発明が解決しようとする問題点】
従来のコンピュータ・システムで用いられるプロセッサは、一般的に、プログラム命令を一度に一つづつ順次実行する。一つの命令を実行するプロセスにはいくつかのシーケンシャルなステップが含まれている。第１のステップは、普通、メモリ素子から命令を取り出すことである。第２のステップは、普通、命令をデコードしオペランドをアセンブルすることである。
【０００３】
第３のステップは、普通、命令を実行しその結果を格納することである。プロセッサによっては、プロセッサの一回のクロック・サイクルで各ステップを行うように設計されているものがある。あるいは、ステップ当たりのプロセッサのクロック・サイクル数が命令によって変わるようにプロセッサを設計することも可能である。
【０００４】
性能向上のため現代のコンピュータはパイプライン方式として知られる手法を用いる。パイプライン方式では、命令実行過程のシーケンシャルなステップが重なり合うことになる。例えば、プロセッサは、一つの命令に対して実行ステップを行っている間に、同時に、第２の命令に対してはデコードのステップを行い、第３の命令に対しては取り出しを行うのである。このようにして、パイプライン方式は命令の一つのシーケンスにかかる実行時間を短縮することが出来る。
【０００５】
先に説明したシーケンシャルな３つのステップのサブステップと重なり合わせることによって性能を向上させる別の部類のプロセッサは、スーパーパイプライン式プロセッサと呼ばれる。
【０００６】
性能向上のためのまた別の手法では、複数の命令を同時に実行することになる。この手法を用いるプロセッサは普通、スーパースカラ型プロセッサと呼ばれる。２つ以上の命令を同時に実行するスーパースカラ型プロセッサの能力は実行される命令によって異なる。例えば、限られた同じプロセッサ資源（浮動小数点ユニットなど）の使用を共に必要とする２つの命令を同時に実行することは出来ない。この種の衝突は資源依存性として知られている。さらに、別の命令実行から得られた結果を使用する命令は、他の命令と同時に実行することは出来ない。別の命令の結果に依存する命令は他の命令に対してデータ依存性があるという。同様に、命令セットによって特定のタイプの命令は相対的な所定の順序で実行しなければならなことを指定することができる。こうした命令は手続き依存性があるという。
【０００７】
性能向上のための３番目の手法ではプログラムの順序に関係なく命令を実行することになる。この手法を用いるプロセッサは普通、ｏｕｔ―ｏｆ―ｏｒｄｅｒプロセッサと呼ばれる。通常、ｏｕｔ−ｏｆ−ｏｒｄｅｒプロセサはスーパースカラ型プロセッサでもある。データ依存性及び手続き依存性は、スーパースカラ方式の実行を限定するのと同じようにｏｕｔ−ｏｆ―ｏｒｄｅｒ実行を限定する。
【０００８】
以降、本明細書において、複数の命令を同時に実行できるか、命令をプログラムの順序に関係なく実行できるか、またはその両方を実行できるプロセッサをさして「スーパースカラ型プロセッサ」という用語を用いる。
【０００９】
命令を同時にまたはプログラムの順序に関係なく（ｏｕｔ  ｏｆ  ｏｒｄｅｒ）で実行するには、スーパースカラ型プロセッサには実行ユニットと呼ばれるシステムが入っていなければならない。実行ユニットは命令を実行するための複数の機能ユニット（例えば、浮動小数点マルチプレクサ、加算器など）を含む。複数の機能ユニットに命令を送るにはスケデュールの制御が必要である。プログラムと同じ順序（ｉｎ  ｏｒｄｅｒ）で命令を発行する場合には、デコードされた命令が資源衝突を起こすとか、まだ完了していない命令に対して真の依存性または出力依存性をもつといったことが起きれば、その時点でプロセッサは命令のデコーディングを停止する。その結果、一つまたは複数の後続命令が実行可能な場合でも、プロセッサは資源衝突や依存性を有する命令より先を見ることができなくなる。この制約を克服するために、プロセッサは実行ステージからデコーダを切り離す。そうすることによって、即実行可能であるか否かにかかわらずデコーダは命令のデコーディングを続ける。この切り離しは、命令ウインドウと呼ばれるデコードと実行ステージの間のバッファによって実現される。
【００１０】
ルックアヘッドを活用するために、プロセッサは命令をデコードしウインドウに余裕がある限りウインドウの中に収め、と同時にウインドウ内の命令に実行可能な命令（つまり、資源衝突や依存性のない命令）があるかどうか調べる。命令ウンドウは、ウインドウの大きさと命令ソースの機能によってのみ制約されるルックアヘッド機能をプロセッサにもたらし、命令のプールとしての働きをする。従って、ｏｕｔ―ｏｆ一ｏｒｄｅｒ（アウト・オブ・オーダー）命令発行にはデコーダと機能ユニットとの間に命令ウインドウと呼ばれるバッファが必要で、命令ウインドウ（インストラクション・ウインドウ）はコンピュータが実行するプログラムの一部分のスナップショットを提供する。
【００１１】
命令の実行が終了した後、新たな命令と入れ替わるように、命令をウインドウから除去なければならない。現在の設計では先入れ先出しのキュー（ＦＩＦＯ）を活用する命令ウインドウが用いられている。特定の設計においては、新規命令がウインドウに入り、完了した命令が固定サイズのグループになってウインドウから出ていく。例えば、命令ウインドウに８つの命令（Ｉ０−Ｉ７）が入っていると、４つの命令からなるグループに変えることができる。この場合、命令Ｉ０，Ｉ１、Ｉ２、及びＩ３が実行後にウインドウから除去されると同時に４つの新規命令がそのウインドウの中に入って来る。命令が固定サイズのグループで出入りする命令ウインドウは「固定アドバンス命令ウインドウ」と呼ばれる。
【００１２】
別のタイプの設計では、新規命令がウインドウに入り、完了した命令は様々なサイズのグループでウインドウを出ていく。例えば、命令ウインドウに８つの命令（Ｉ０−Ｉ７）が入っているとすれば、１つの命令、２つの命令、または３つの命令からなるグループに変えることができる。この場合、命令Ｉ０，Ｉ１、もしくはＩ２のいずれかが実行された後、ウインドウから除去されて新規命令がそのウインドウに入って来る。命令が様々なサイズで出入りする命令ウインドウは「可変アドバンス命令ウインドウ」と呼ばれる。
【００１３】
可変アドバンス命令ウインドウ（ＶＡＩＷ）を用いるプロセッサは固定アドバンス命令ウインドウ（ＦＡＩＷ）のプロセッサより性能が高くなりがちである。しかしながら、特定の命令がウインドウ内の決まった番号のロケーションにしか入れないので、固定アドバンス命令ウインドウの方がプロセッサにとっては管理しやすい。例えば、８つの命令（Ｉ１−Ｉ７）を収納し４つの命令からなるグループで命令を入れたり取り出したりする命令ウインドウでは、命令はウインドウ内の２つのロケーション（例えば、Ｉ０とＩ４）の一個所にしか入れない。可変アドバンス命令ウインドウでは、その命令はいろいろ異なる時点でウインドウ内のロケーションのどれにでも入ることができるので、可変アドバンス命令ウインドウのプロセッサは、固定アドバンス命令ウインドウのプロセッサに比べて、各命令の存在位置を捜し当てるのにより多くの資源がなければならない。
【００１４】
現在の設計は命令ウインドウを実現するのに大きなキューを用いている。キューを用いることは、次のような理由から、不都合である。つまり、大きなチップ面積資源を複数のキュー専用に割かなければならないが、可変アドバンス命令ウインドウを実現する場合には特にそうである。また、１個以上のキューを用いるシステムの設計は柔軟性に限りがある。さらに、キューに入っているデータを振り分ける制御ロジックが複雑で柔軟性に欠ける。
【００１５】
従って、必要なのは命令がウインドウを通過するのに伴ってその命令を「追跡」または監視する手法である。柔軟性に富みチップの面積が小さくてすむ装置でなければならない。
【００１６】
【課題を解決するための手段】
本発明は、複数の命令にタグを割り当てまた複数の命令を収める命令ウインドウを保持する装置を用いて複数の命令が並列で且つプログラムの順序に関係なく実行されるのを監視する手法に関する。この装置は、スーパースカラ・ユニットの１個の構成要素で、命令ソースと、命令を実行する機能ユニットとの間に接続される。スーパースカラ・ユニットの役割は、命令ウインドウの保持、実行ユニットの様々な機能ユニットに命令を振り分け、さらに命令が実行された後ソースから新規命令を受け取ることである。
【００１７】
本発明は、タグ・モニタ・システムを用いるが、このシステムはスーパースカラ・ユニットの一部である。タグ・モニタ・システムは、レジスタ・ファイルと、先入れ先出しに基づいて動作するキューを備える（キューはマルチ・アドバンス、多重出力でＦＩＦＯをリサイクルする）。キューはレジスタ・ファイルに接続される。レジスタ・ファイルは命令ソースに接続され、命令の情報（つまり、各命令の資源要件）を格納するのに用いられる。命令が命令ソースからレジスタ・ファイルに送られると、現在どの命令にも割り当てられていないタグがその命令に割り当てられる。命令の情報はその後命令のタグで示されたレジスタ・ファイル内のアドレス位置に格納される。一旦命令の情報がレジスタ・ファイルに格納されれば、それを「命令ウインドウ内」に入っているという。命令ウインドウ内の各命令のタグはキューに格納される。タグは、その対応する命令がプログラムで決められている順序と同じ順序でキューに入れられる。
【００１８】
命令が終了すると、キューで前進し、命令のタグがキューの下部から事実上押し出される。次にそのタグは命令ウインドウに入る新規命令に再度割り当てられる。このように、タグはキューの最上部に送り返される（言い換えれば、リサイクルされる）ことになる。複数の命令が同時に終了した場合、同時に複数のタグをリサイクルすることも可能である。好適な実施例においては、命令はプログラムの順序通りに終了することが必要である。命令が間違って他の命令の結果を上書きすることがないようにするために、こうすることが必要なことが多い。例えば、メモリの同じロケーションに書き込む２つの命令がプログラムに入っているとしたら、プログラムで先行する命令が２番目の命令より前にメモリに書き込まれなければならない。従って、プログラムの順序に関係なく実行される命令の結果はどれか一時記憶領域に保持され、命令自体は全ての先行命令が実行され終わるまで命令ウインドウにそのまま残っていなければならない。１個のグループの命令が完了すると、その結果は全て一時記憶領域から本当のデスティネーションに移される。その後命令はウインドウから除去され、それらのタグはリサイクルされる。
【００１９】
レジスタ・ファイルは新規命令の情報を命令ソースから受け取る書き込みポートを有する。レジスタ・ファイルは、一回にウインドウに入れられる新規命令の数と同じ数の書き込みポートを有する。レジスタ・ファイルはウインドウの命令毎に１個のエントリを有する。レジスタ・ファイルはまたウインドウの全ての命令毎に１つの出カポートを有する。出カポート毎に対応するアドレス・ポートがある。アドレス・ポートを用いて、どのレジスタ・ファイルのエントリの内容をその対応する出カポートで出力するか選択する。
【００２０】
キューはスロット（例えば、キュー内の特定のバッファの位置）毎に１個の出カポートを有し、そのスロットに格納されたタグの値を示す。これらの出力はレジスタ・ファイルの読み出しアドレス・ポートに接続される。この接続によって、タグ・バルブが読み出しアドレス・ポートヘのキューで表されていると、レジスタ・ファイルがエントリの内容をその対応出カポートに表示するようになる。レジスタ・ファイルの出力はスーパースカラ・ユニット及び実行ユニットの様々なロケーションに送られ、そこでその命令情報は命令のスケデューリング、命令実行などのために使用される。
【００２１】
命令ウインドウのロケーションによっては所定の時点に空になることがある。この空のウインドウ・ロケーションは「バブル」と呼ばれる。命令がウインドウから出ていき命令ソースが直ちに別の命令を送って置き換えることができない場合、時々バブルが発生する。ウインドウにバブルがあると、レジスタ・ファイルのエントリによっては古い命令情報や虚偽の命令情報を収納することになる。レジスタ・ファイル内のデータは全て常時使用可能だから、レジスタ・ファイル内のデータを限定する何らかの方法が必要である。
【００２２】
本発明では、命令ウインドウのエントリ毎に「バリディティ・ビット」が対応付けられており、レジスタ・ファイル内の対応する命令情報が有効かどうかを示す。これらのバリディティ・ビットはタグの入っているタグＦＩＦＯに保持することができる。ＦＩＦＯ内のタグには各々に１つのバリディテイ・ビットがある。これらのビットはタグがリサイクルされる度に更新される。タグが更新された時にもし有効な命令が割り当てられていれば、そのビットはアサートされる。そうでなければ、デアサートされる。
【００２３】
バリデイテイ・ビットは、レジスタ・ファイルの出力と共にタグ・モニタ・システムからの出力である。バリディティ・ビットはレジスタ・ファイルの出力と同じロケーションに送られ、それによってスーパースカラ・ユニットや実行ユニットがその命令情報を使用できるかどうかを知る。
【００２４】
本発明の特徴は、大きなキューに命令情報を格納しなくても命令ウインドウを保持できることである。そのため、設計が簡素化されオペレーション上の柔軟性が高まる。例えば、ｎ個の命令を収めるウインドウがあるとすれば、タグ・モニタ・システムにはｎ個のエントリの入ったキュー、及びｎ個のエントリとｎ個の出力ポートを有するレジスタ・ファイルがある。キューの各出力がレジスタ・ファイルの対応する読み出しアドレス・ポートに接続されて（例えば、出力０は読み出しアドレス・ポート０に、出力１は読み出しアドレス・ポート１にといったように夫々接続される）いれば、レジスタ・ファイルの出力はプログラムと同じ順序（例えば、出力ポート０は命令０の情報を表示し、出力ポート１は命令１の情報を表示するといった具合）でウインドウ内の各命令を「表示する」（つまり、出力ポートで使用可能にする）。ウインドウがアドバンスすると、キューがアドバンスし読み出しアドレス・ポートのアドレスが変わる。これによってレジスタ・ファイルの出力が変わりウインドウ内の命令の新たな配列を反映したものになる。命令情報がプログラムの順序で（ｉｎ  ｏｒｄｅｒ）スーパースカラ・ユニットの他のところに送られるように、レジスタ・ファイル出力にプログラムの順序で命令情報が表示されることが必要である。スーパースカラ・ユニットが実行及びその完了をスケジュールできるように、スーパースカラ・ユニットはウインドウ内の命令の順序を知る必要がある。本発明の様々な実施例の構成とオペレーションの他、本発明の更なる特徴及び優れた点については添付の図面との関連において以下に詳細に説明する。
【００２５】
【発明の実施の形態】
１．０システム環境
図１はスーパースカラ環境１０１のブロック図である。スーパースカラ環境１０１は、命令ソース１０２、スーパースカラ・ユニット１０４、機能ユニット１０６を備える。スーパースカラ・ユニット１０４は機能ユニット１０６によって命令の実行を制御する。機能ユニット１０６は、浮動小数点ユニット（未表示）、整数ユニット（未表示）、ロード／ストア・ユニット（未表示）と、所望するアプリケーションによってプロセサが通常用いるようなその他のハードウエアを備えていてもよい。命令ソース１０２及び機能ユニット１０６の具体的な実現については当業者には明らかであろう。
【００２６】
命令ソース１０２はバス１０３を介してスーパースカラ・ユニット１０４に命令情報を送る。スーパースカラ・ユニット１０４は次に機能ユニット１０６に対して命令を発行する。普通、スーパースカラ・ユニット１０４は機能ユニット１０６の可用性を監視し、命令相互間の依存性を調べる。一旦命令が完了すると、命令ソース１０２はスーパースカラ・ユニット１０４にさらに命令情報を送る。
【００２７】
図１に示すバスはデータ信号及び制御信号を表している。バス及び命令のサイズはアプリケーションにより異なっていてよい。以下に、スーパースカラ・ユニット１０４に対する命令を追跡するタグ・モニタ・システムを中心に説明する。
【００２８】
２．０タグ・モニタ・システムの構成とオペレーション
Ａ．構成
図２はスーパースカラ・ユニット１０４の一部に組み込まれたタグ・モニタ・システム（図２の内側の破線で表示した部分）のブロック図である。タグ・モニタ・システム２２２には、レジスタ・ファイル２０２、タグＦＩＦＯ２０４、制御ロジック２０７が含まれる。
【００２９】
タグＦＩＦＯ２０４はマルチ・アドバンス、多重出力のリサイクル型ＦＩＦＯで、複数のスロット２０６にタグを格納する。「マルチ・アドバンス」とは、ＦＩＦＯでデータを一度にスロット幾つでもアドバンスさせることができることを意昧する。例えば、マルチ・アドバンスのスロットは４個のＦＩＦＯを一度に０から３スロットまでデータをアドバンスさせることができる。「多重出力」とはＦＩＦＯの各スロットの内容が使用可能であることを意昧する。タグは命令が命令ウインドウに入ると命令毎に割り当てられる固有のラベルである。タグＦＩＦＯ２０４はウインドウ内の命令毎に１つのスロットを有する。スロット２０６は各々が出力２０３を有し、それによって対応するスロット２０６にあるタグの値を示す（つまり、出力する）。スロット２０６はまた各々が、スロット２０６のタグを割り当てられた命令が有効であるかどうかを示すバリディティ・ビットを有する。好適な実施例において、タグＦＩＦＯ２０４にはスロット２０６が８個ある。これらのスロット２０６の各々には０から７までの固有の２進数（タグ）が収められている。例えば、タグが３ビット（例えば、０００，００１，０１０、といったように）で、バリデイテイ・ビットがあれば、各スロットに４ビットを保持させる。従って、出力２３２は各々４ビット幅である。チップの電源投入時またはリセット時にタグＦＩＦＯ２０４のスロット２０６の各々の固有のタグがロードされる。
【００３０】
一旦タグが命令に割り当てられると、タグは命令がウインドウからなくなるまでずっとその命令についたままである。一旦命令がウインドウから除去されると、そのタグはタグＦＩＦＯ２０４の最上部２１２に送り返される。最上部２１２に送られたタグは新規命令がウインドウに入るとそれに再び割り当てられる。このようにして、タグは「リサイクル」される。つまり、タグＦ１ＦＯ２０４の中で再び一周する。普通、タグは最上部２１２から下部２１０に向かってタグＦＩＦＯ２０４の中をアドバンスする。そのため、タグＦＩＦＯ２０４をリサイクル型キューと呼ぶ。
【００３１】
レジスタ・ファイル２０２はタグＦＩＦＯ２０４と命令ソース１０２に接続されている。レジスタ・ファイル２０２は命令ソース１０２から送られてくる命令情報を格納する。命令ソース１０２からレジスタ・ファイル２０２に送ることができる情報のタイプは次の通りである。デコードされた命令情報、命令機能ユニット要件、命令によって実行されるオペレーションのタイプ、命令結果が格納される記憶場所を指定する情報、命令オペランドが格納されている記憶場所を指定する惰報、コントロール・フロー命令のターゲット・アドレスを指定する情報、及び命令で指定したオペレーションで使用されるイミディエト・データを指定する情報である。
【００３２】
レジスタ・ファイル２０２は、書き込みデータポート２１４、書き込みアドレス・ポート２１６、ライトイネーブル（書き込み可能）ポート２１８、読み出しアドレス・ポート２２０、及び読み出しデータポート２２４を備える。
【００３３】
書き込みデータポート２１４はバス１０３を介して命令ソース１０２から命令情報を受け取る。書き込みアドレス・ポート２１６は、書き込みデータポート２１４を経由して受け取った命令情報がレジスタ・ファイル２０２のどのアドレス指定可能なロケーションに格納されるかを指定する。書き込みアドレス・ポート２１６はバス２２６を介して制御ロジック２０７に接続されている。ライトイネーブル・ポート２１８は命令ソース１０２からのデータがいつレジスタ・ファイル２０２に書き込まれるかを示す。ライトイネーブル・ポートはバス２２８を介して制御ロジック２０７に接続されている。好適な実施例（第２図に表示）において、レジスタ・ファイル２０２はＡからＤのラベルのついた４つの書き込みデータポートを有する。書き込みデータポート２１４はＡからＤのラベルのついた対応する書き込みアドレス・ポート２１６と、ＡからＤのラベルのついた対応するライトイネーブル・ポート２１８とを有する。
【００３４】
読み出しアドレス・ポート２２０はバス２３０を介してタグＦＩＦＯ２０４に接続されている。バス２３０はタグＦＩＦＯ２０４のスロット２０６の各々の出力２３２を伝送する。読み出しアドレス・ポート２２０は読み出しデータポート２２４を経由してアクセスされる命令情報を選択する。読み出しアドレス・ポート２２０は各々対応する読み出しデータポート２２４を有する。好適な実施例（第２図に表示）において、命令ウインドウには８つのエントリ（つまり、タグＦＩＦＯ２０４の深さ）があり、レジスタ・ファイル２０２はウインドウ内の各命令に対して読み出しアドレス・ポート２２０を１個、読み出しデータポート２２４を１個有する。読み出しアドレス・ポート２２０には０から７までのラベルが付けられ、それに対応する読み出しデータポート２２４にも０から７までのラベルが付いている。
【００３５】
典型的には、レジスタ・ファイル２０２はスーパースカラ環境１０１内にある他の要素（例えば、表示されてはいないが、イシュア）に接続されている。
【００３６】
制御ロジック２０７は論理回路を備える。制御ロジック２０７はバス２３４と２３０を介してタグＦＩＦＯ２０４から機能ユニット１０６を監視する。制御ロジック２０７はバス２３８を介して命令ソース１０２に信号を送り、命令がウインドウから出ると新規命令情報をレジスタ・ファイル２０２に送る。制御ロジック２０７は命令ソース１０２が新規命令をいくつ送るべきかを知らせる。好適な実施例（第２図に表示）において、一回に送れる命令数は最大で４個であるが、これはレジスタ・ファイル２０２の書き込みデータポート２１４の総数に相当する。制御ロジック２０７は、命令がウインドウから出ていくとバス２３６を介してタグＦＩＦＯ２０４と同期をとり処理をアドバンスさせる。このように、制御ロジック２０７のコマンドに基づいて、タグＦＩＦＯ２０４は一回にウインドウから出ていく命令数と同じステップだけアドバンスする。制御ロジック２０７はバス２３６を介してタグＦＩＦＯ２０４に格納されたバリディティ・ビットの保持も実行する。制御ロジック２０７の回路のインプリメンテーションについては当業者には明らかであろう。例えば、現在よく知られ既に市販されている論理合成やレイアウトのシステムを用いて動作記述（例えば、Ｖｅｒｉ１ｏｇやＶ．Ｈ．Ｄ．Ｌ．）をシリコンやチップの設計に変換することができる。
【００３７】
本明細書に記載の様々なバスのビット幅はパラレルまたはシリアルのアドレスやデータ転送をサポートする。インプリメンテーションに固有であるその選択は当業者には明らかであろう。
【００３８】
タグ・モニタ・システムに１個以上のレジスタ・ファイルを備えることも可能である。好適な実施例では、命令情報は複数のレジスタ・ファイル間に配られる。例えば、１個のレジスタ・ファイルには命令毎のデスティネーション・レジスタ・アドレスが入っている。別のレジスタ・ファイルには各命令の機能ユニット要件などが入っている。複数のレジスタ・ファイルを使用する利点の一つは、設計者が小さめのレジスタ・ファイルを用い、それらを使用する内容に接近した配置にすることができることである。そのためプロセッサの物理的設計が容易になる。レジスタ・ファイルの読み出し及び書き込みの各アドレスは一つに接続され、出所は同じである。レジスタ・ファイルの書き込みアドレスも命令ソースからくるが、全てのレジスタ・ファイルが各命令に関する全ての情報を保持しなければならないというわけではない。各レジスタ・ファイルの出力は、レジスタ・ファイルに保持されているデータを必要とするところだけに送られる。
【００３９】
図４は２個のレジスタ・ファイルを有するタグ・モニタ・システム２２２を示す。好適な実施例においては、各命令の情報の一部分だけがレジスタ・ファイル２０２ａと２０２ｂの各々に格納される。従って、命令ソース１０２からバス１０３上を送られるデータは分割される。１個の部分１０３ａはレジスタ・ファイル２０２ａに送られ、もう１個の部分１０３ｂはレジスタ・ファイル２０２ｂに送られる。２０２ａと２０２ｂの両レジスタ・ファイルはバス２２６と２２８に接続されており、バス２２６と２２８は制御ロジック２０７からの制御信号とバス２３０への制御信号を届け、バス２３０はタグＦＩＦ０２０４からの出力を届ける。レジスタ・ファイル２０２ａと２０２ｂの出力はスーパースカラ・ユニット１０４中の別々の場所にまた別のバス２４０ａと２４０ｂを通って供給される。
【００４０】
タグＦＩＦＯ２０４について実施例との関連において説明する。
【００４１】
図５はＦＩＦＯ５００を示す。ＦｌＦＯ５００は４個のスロット５０４，５０８，５１２，５１６に４つのデータを保持する。その４個のスロットはバス５０６，５１０，５１４を介して接続されている。ＦＩＦＯ５００には入力５０２と出力５１８とがあり、そこを通ってデータがＦＩＦＯ５００に出入りする。
【００４２】
ＦＩＦＯ５００はポジションが４個あるキューのように動作する。ＦＩＦＯ５００でデータをアドバンスすると、スロット５１６にあるデータは出力５１８を通ってＦＩＦＯ５００から出ていく。スロット５１２にあるデータはバス５１４を通ってスロット５１６に移動する。スロット５０８にあるデータはバス５１０を通ってスロット５１２に移動する。スロット５１４にあるデータはバス５０６を通ってスロット５０８に移動し、入力５０２にあるデータが移動してスロット５０４に入る。これらのデータ転送は各々ＦＩＦＯ５００がアドバンスする度に起きる。
【００４３】
図６は複数の出力を有するＦＩＦＯ６００を示す。ＦＩＦＯ６００は図５のＦＩＦＯ５００とほとんど同じ構成である。データは入力６０２からＦＩＦＯ６００に入り、６０４，６１０，６１６，６１８の４個のスロットを通って移動し出力６２６から出ていく。ＦＩＦＯ５００とＦＩＦＯ６００の相違点は、６０４、６１０、６１６、６２２の各スロットに格納されたデータは各スロットに入った時点からＦＩＦＯ６００が次にアドバンスするまで対応するバス６０６、６１２、６１８、又は６２４上で見ることができる（つまり、その４個のバスを読むことができる）ことである。出力６０６、６１２、６１８、又は６２４によって所定の時点でＦＩＦＯ６００にどんなデータが格納されているかをユーザは知ることができる。
【００４４】
好適な実施例においては、スロット６０４、６１０、６１６、及び６２２に格納されたデータは各スロットの出カバス上（つまり、バス６０８、６１４、６２０、及び６２６）で常時見ることができる。この場合、バス６０６、６１２、６１８、又は６２４は不要である。この種の実施例を図７に示す。バス７０６、７１０、及び７１４を用いてスロット１と４（７０４、７０８、７１２、及び７１６のそれぞれ）の間でデータを搬送し、スロット１，２、及び３、つまり７０４、７０８、７１２の内容も示す。出カバス７１８においては常にスロット７１６の内容を読むことができる。
【００４５】
図８はリサイクル型ＦＩＦＯ８００を示す。リサイクル型ＦＩＦＯ８００は第５図に示したＦＩＦＯ５００とほとんど同じように機能する。リサイクル型ＦＩＦＯ８００は４個のスロット８０４，８０８，８１２，８１６を備える。主たる相違点は、ＦＩＦＯ８００がアドバンスするとスロット８１６のデータがスロット８０４に移動する。ＦＩＦＯ８００は新規のデータをスロット８０４に入力する手段を有していないから、電源を入れたりリセットしたりする時には８０４、８０８、８１２、８１６の各スロットが何らかの値で初期化されるように設計する必要がある。これらの初期値は、周知のように再初期化されるまでＦＩＦＯ８００中を巡回する。
【００４６】
一回で複数のステップでＦＩＦＯをアドバンスすることが必要な場合がある。ＦＩＦＯは１ステップ分アドバンスする度にデータの一部分を入力するから、ＦＩＦＯには少なくともＦＩＦＯがアドバンスできる上限のステップ数と同じだけの入力がなければならない。ＦＩＦＯは、各スロットからのデータや正しいデスティネーションヘの入力を搬送するバス以外にもいくつかバスを有していなければならない。
【００４７】
図９はマルチ・アドバンスのＦＩＦＯ９００を示す。ＦＩＦＯ９００は一回で１、２、３、又は４のステップ（つまり、スロット）でアドバンスすることができる。ＦＩＦＯ９００は、４個の入力９０２、９０４、９０６、９０８と、４個のスロット９０４、９２２、９３０、９３８を有する。ＦＩＦＯ９００が４ステップでアドバンスする時には、入力９０２にあるデータはスロット９３８に行き、入力９０４がスロット９３０に、入力９０６がスロット９２２に、そして入カ９０８がスロット９１４にそれぞれ移動する。ＦＩＦＯ９００が３ステップでアドバンスする時には、スロット９１４のデータがスロット９３８に、入カ９０２がスロット９３０に、入力９０４がスロット９２２に、そして入力９０６がスロット９１４にそれぞれ移動する。この場合、入力９０８にあるデータはＦＩＦＯ９００には入らない。ＦＩＦＯ９００が２ステップでアドバンスする場合、スロット９２２のデータがスロット９３８に、スロット９１４のデータがスロット９３０に、入力９０２がスロット９２２に、そして入力９０４がスロット９１４にそれぞれ移動する。最後に、単純なＦＩＦＯの場合であるが、１ステップでＦＩＦＯがアドバンスする時にはスロット９３０のデータがスロット９３８に、スロット９２２のデータがスロット９３０に、スロット９１４のデータがスロット９２２に、そして入力９０２にあるデータがスロット９１４にそれぞれ移動する。
【００４８】
一回に複数のステップでアドバンスするには、各スロットと幾つかのスロットの出力がそれ以外の複数のスロットに通じるように切り換え可能な方法で接続されていなければならない。従って、ＦＩＦＯ９００には４個のマルチプレクサがある。つまり、９１０、９１８、９２６、９３４にそれぞれ表示されたＭＵＸ１、ＭＵＸ２、ＭＵＸ３、ＭＵＸ４である。これらのマルチプレクサを用いてＦＩＦＯ９００がアドバンスする時に各スロットに移動するデータを選択する。各マルチプレクサヘの入力はそれに対応するスロットに移動する必要があるかもしれないデータである。例えば、ＦＩＦＯ９００がアドバンスするステップ数いかんで、スロット９１４、スロット９２２、スロット９３０、もしくはスロット９３０からデータがスロット９３８に移動することになる。従って、９３４への入力は、スロット９１６、スロット９２４、スロット９３２、及び入力９０２からの出力である。マルチプレクサ９１０，９１８，９２６，９３４を制御するのに必要な論理回路の構成及びオペレーションについては当業者には明らかであろう。
【００４９】
内容をリサイクルするマルチ・アドバンスのＦＩＦＯを設計することも可能である。第８及び第９図に示すＦＩＦＯの組み合わせがこのＦＩＦＯである。リサイクル型マルチ・アドバンスのＦＩＦＯ１０００を第１０図に示す。ＦＩＦＯ１０００は一回に１ステップ、２ステップ、または３ステップのいずれでもアドバンスすることができる。ＦＩＦＯ１０００には４ステージ（１００６、１０１４、１０２２、１０３０のラベルのついたスロット１〜４）あるから、４ステップでのアドバンスは論理的には全くアドバンスしないのと同じことである。従って、４ステップでのアドバンスは全く必要ないから、リサイクル型マルチ・アドバンスのＦＩＦＯ１０００に用いるマルチプレクサの構成はマルチ・アドバンスのＦＩＦＯ９００で示した構成とは異なる。ＦＩＦＯ１０００は図７に示したＦＩＦ０７００のような多重出力のＦＩＦＯでもある。さらに、図８のリサイクル型のＦＩＦＯ８００のように、ＦＩＦＯ１０００は初期化のため何らかの手段を有してもいなければならない。
【００５０】
図５、図６、図７、図８、図９、及び図１０は例として４ステージで表示している。４個以外のスロット数にするために設計を変更することは勿論可能である。そうした変更については当業者には明らかであろう。
【００５１】
Ｂ．オペレーション
図３はタグ・モニタ・システム２２２のオペレーションを図解するフローチャートである。オペレーションのステップ３１０〜３について図１と図２のハードウェア要素との関連において説明する。
【００５２】
ステップ３０１でオペレーションを開始する。ステップ３０２で、制御ロジック２０７は命令ソースに命令情報を送るよう要求するリクエスト・データ信号２３８を送る。制御ロジック２０７は命令ウインドウ内の空きスペースの数と同じ数の命令の情報を要求する。好適な実施例において、命令ウインドウに新規の命令をいくつ入れるか決定した後に、キューの最上部の空のスロットを埋めるため命令ソース１０２に対して十分な命令情報を要求するのは、事実上、制御ロジックである。情報を送れる命令数には上限があるが、それはウインドウ内のスペース数以下である。
【００５３】
ステップ３０４で、書き込み可能及び書き込みアドレスを起動させ、タグを割り当て、バリディテイ・ビットを更新する。制御ロジック２０７は、イネーブル信号をバス２２６で、アドレス信号をバス２２８で、ライトイネーブル・ポート２１８と書き込みアドレス・ポート２１６にそれぞれ送る。各ポート２１６のアドレスによって、対応するデータポート２１４の命令情報をステップ３０６でレジスタ・ファイル２０２のどこに格納すべきか指定する。命令情報はバス１０３を介して命令ソース１０２からレジスタ・ファイル２０２に送られる。典型的には、バス２２６のイネーブル・ビットの総数は情報を一回に送れる命令の上限数に等しく、好適な実施例においては４である。
【００５４】
レジスタ・ファイル２０２内で各命令の情報が格納されているアドレスをその命令のタグで指定する。書き込みデータポート２１４のデータは必ずしもレジスタ・ファイル２０２に格納する必要はないから、制御ロジック２０７はバス２２８のイネーブル信号を用いて書き込まれるべきデータだけを選択する。例えば、命令ウインドウの最上部に１個だけ空きスペースがあるとすれば、制御ロジック２０７はバス２２８のキューの最上部のスロット２１２に収められているタグを書き込みアドレス・ポート２１６Ａに送り、バス２２６を介してライトイネーブル・ポート２１８Ａをアサートする。このオペレーションで書き込みデータポート２１４Ａの命令情報がレジスタ・ファイル２０２内のタグＦＩＦＯ２０４の最上部のスロット２１２のタグで指定された場所に格納される。命令ウインドウに２個の空きスペースがあれば、制御ロジック２０７は２つのイネーブル信号をポート２１８Ａと２１８Ｂに送り、ウインドウの最上部の２つのタグを書き込みアドレス・ポート２１６Ａと２１６Ｂ（２１６Ｂに移動する最上部のスロット２１２のタグ）に送り、そうすることによってポート２１４Ａと２１４Ｂの命令情報がレジスタ・ファイル２０２に格納されるようになる。命令情報はタグで指定されたレジスタ・ファイル２０２内の場所に格納されると、その命令はそのタグが「割り当てられた」という。制御ロジック２０７はステップ３０４でタグＦＩＦＯ２０４のバリデイティ・ビットの更新もする。命令ソース１０２がステップ３０２でなされた全ての要求に対して命令を供給できなければ、制御ロジック２０７はステップ３０４で有効命令に割り当てられたタグのバリディティ・ビットだけしかアサートしない。割り当てられなかったタグについては、そのバリディティ・ビットは有効命令に割り当てられるまでアサートされないままにしておかれる。
【００５５】
ステップ３０８で、レジスタ・ファイル２０２の内容は全て読み出しデータ・ポート２２４から読み出される。使用されるのはレジスタ・ファイル２０２の全内容以下であるとの想定になっている。レジスタ・ファイル２０２から読み出されるべきデータは読み出しアドレス・ポート２２０を通ってレジスタ・ファイル２０２に入るアドレスで指定される。そしてデータはウインドウ内の一部か全ての命令の実行に使用される。好適な実施例においては、読み出しアドレス２２０は常時アサートされている。言い換えれば、各スロット２０６には常にタグが入っているということである。
【００５６】
判断のステップ３１０で、制御ロジツク２０７はステツプ３０８で実行された命令でどれかリタイアするか判断する。リタイアする命令がなければ、判断のステップ３１０の「ＮＯ」のパス３１１で示すように、継続してデータがレジスタ・ファイル２０２から読み出され、ウインドウ内の命令が実行され続ける。命令がリタイアする場合、制御ロジック２０７はステップ３１２に示すようにバス２３４を介してリタイアする命令数を知らせる情報を受け取る。バス２３４を通して受け取る情報はリタイアメント・ユニット（未表示）から送られてくる。リタイアメント・ユニットの詳細は本発明の実行に関係することではない。（但し、１９９２年５月１５日出願の同時係属中の米国出願番号０７／８７７，４５１に命令リタイアメント・ユニットの一例を記載している。）制御ロジック２０７はその後、バス２３６を介して、タグＦＩＦＯ２０４が何段アドバンスすべきかを知らせる。
【００５７】
第２図において、命令が１個リタイアするとすれば、タグＦＩＦＯ２０４は１ステップだけアドバンス（進捗）する。タグ１が下部の２１０から最上部２１２に移動して現在タグ０がある場所に入り、それに伴って他のタグ全てがアドバンスする。タグ１が下部の２１０から最上部の２１２に移動すると、そのバリディティ・ビットはデアサートされる。タグ１は次に新しく命令ウインドウに入る命令に再び割り当てられる。タグ２は、ステップ３１２終了後、タグＦＩＦＯ２０４の下部２１０の位置にあるはずである。タグ・モニタ・システム２２２のオペレーションはブランチ３１４を介して先に説明したオペレーションのステップ３０２に戻ることによつて継続される。
【００５８】
本発明の様々な実施例について説明してきたが、あくまで例題として提示したのであってそれにより限定されるものではないことが理解されるだろう。従って、本発明の広さと範囲は上述の典型的な実施例のいずれによっても限定されるものではなく、特許出願の請求範囲及びそれに均等のものによってのみ限定される。
【図面の簡単な説明】
【図１】本発明のスーパースカラ環境の代表的なブロツク図を示す。
【図２】本発明のタグ・モニタ・システムの代表的なブロツク図を示す。
【図３】図２のタグ・モニタ・システムによるタグ・モニタに関する代表的なオペレーション・フローチャートを示す。
【図４】２個のレジスタ・ファイルを有するタグ・モニタ・システムを示す。
【図５】単純なＦＩＦＯの図を示す。
【図６】多重出力の単純なＦＩＦＯの図を示す。
【図７】複数の出力端子を有するＦＩＦＯの図を示す。
【図８】リサイクル型ＦＩＦＯの図を示す。
【図９】マルチ・アドバンスのＦＩＦＯの図を示す。
【図１０】リサイクル型マルチ・アドバンスのＦＩＦＯの図を示す。
【符号の説明】
１０１・・・スーパースカラ環境、１０２・・・命令ソース、１０３・・・バス、１０４・・・スーパースカラユニット、１０６・・・機能ユニット、２０２・・・レジスタ・ファイル、２０４・・・タグＦＩＦＯ、２０６・・・スロット、２０７・・・制御ロジック、２１４・・・書き込みデータ・ポート、２１６・・・書き込みアドレス・ポート、２１８・・・ライトイネーブル・ポート、２２０・・・読み出しアドレス・ポート、２２２・・・タグ・モニタ・システム、２２４・・・読み出しデータ・ポート
【図１】
0003587260.tif 000002
【図２】
0003587260.tif 000003
【図３】
0003587260.tif 000004
【図４】
0003587260.tif 000005
【図５】
0003587260.tif 000006
【図６】
0003587260.tif 000007
【図７】
0003587260.tif 000008
【図８】
0003587260.tif 000009
【図９】
0003587260.tif 000010
【図１０】
0003587260.tif 000011