(57)【特許請求の範囲】
【請求項１】
命令ソースから命令情報を受け取りレジスタ・ファイルに格納する可変アドバンス命令ウインドウを実現する方法であって、
（１）レジスタ・ファイルに関連する命令情報を格納できる新規命令がいくつあるか決定するステップと、
（２）特定の命令のタグはその命令に関連する情報がレジスタ・ファイルに存在している限り変わることがないように、新規命令毎にタグを割り当てるステップと、
（３）各命令に関する情報をレジスタ・ファイル内のその命令に割り当てられたタグで指定された場所に格納し、前記レジスタ・ファイルは複数のレジスタと、複数の読み出しアドレス・ポート及び複数の読み出しデータポートとを備える、情報格納のステップと、
（４）キューのスロット毎にタグを１個づつ格納し、前記キューは所定の時点でレジスタ・ファイルに命令情報を入れられる上限の命令数に等しいスロット数を有し、タグは各命令に対する命令情報がレジスタ・ファイルに格納されるのと同じ順序でキューに入られ、前記キューはさらにスロット毎にスロット出力を有し、各スロット出カによって対応するスロットのタグをアクセスできるようになる、タグ格納のステップと、
（５）前記スロットの１個を対応するスロット出力を介してアクセスするステップと、
（６）そのスロットに格納されたタグをレジスタ・ファイルの前記複数の読み出しアドレス・ポートのうちの特定の１個に引き渡してレジスタ・ファイルがそのタグに対応する命令に関連する情報を前記読み出しアドレス・ポートに対応する特定の読み出しデータポートから出力するようにするステップと、
を含むことを特徴とする方法。
【請求項２】
情報格納の前記ステップ（３）が命令のメモリ・アドレスを格納してなることを特徴とする請求項１に記載の方法。
【請求項３】
情報格納の前記ステップ（３）が命令を格納してなることを特徴とする請求項１に記載の方法。
【請求項４】
さらにレジスタ・ファイルに入れられるべき新規命令の数と同じスロット数だけ前記キューをアドバンスさせるステップを有することを特徴とする請求項１に記載の方法。
【請求項５】
前記キューの中にタグ毎の有効ビットを格納するステップをさらに有し、有効ビットと対応しているタグに該当する命令が有効ならば有効ビットが設定されることを特徴とする請求項４に記載の方法。
【請求項６】
命令のソースから命令情報を受け取りレジスタ・ファイルに格納する可変アドバンス命令ウインドウを実現するシステムであって、
レジスタ・ファイルに関連命令情報を入れられる新規命令がいくつあるか決定し、特定の命令に関する情報がレジスタ・ファイルにある限りその命令のタグが変わることがないように新規命令毎にタグを割り当てる制御手段と、
前記制御手段に接続され、各命令に関する情報を前記レジスタ・ファイル内の１つの場所に格納し、前記場所はその命令に割り当てられたタグで指定され、前記レジスタ・ファイルは前記場所を形成する複数からなるレジスタと、
複数の読み出しデータポート及び複数の読み出しアドレス・ポートを有し、読み出しアドレス・ポートには読み出しデータポートが対応している、レジスタ・ファイルと、
前記制御手段及び前記レジスタ・ファイルに接続され、複数のスロットを有し、前記スロットには各々に前記レジスタ・ファイル内の場所のアドレスに対応する固有のタグが収められ、さらにスロット毎にスロット出力を有し、各スロット出力によって対応するスロットにあるタグをアクセスできるようになる、リサイクル型キューを備え、
スロットに格納されたタグをレジスタ・ファイルの前記複数の読み出しアドレス・ポートの特定の１個に引き渡してレジスタ・ファイルがそのタグに対応するレジスタ・ファイルの場所に格納された命令情報を対応する読み出しデータポートから出力するようにすることを特徴とするシステム。
【請求項７】
命令のソースから命令情報を受け取りメモリ素子に格納する可変アドバンス命令ウインドウを実現する方法であって、
（１）前記メモリ素子に入れる関連情報をもつ新規命令毎にタグを割り当て、各タグは前記メモリ素子の固有のアドレスに相当する値を有する、タグ割り当てのステップと、
（２）前記メモリ素子内のその対応するタグで識別されたアドレスに各命令に関する情報を格納するステップと、
（３）リサイクル型キューに入るタグの順序が前記メモリ素子に入る命令情報の順序に一致し、リサイクル型キューのスロットのタグの順序が前記メモリ素子から読み出される命令情報の正しい順序を識別するように、リサイクル型キューの最上部のスロットにタグを入れるステップと、
（４）前記メモリ素子から出ていく実行済みの命令に対応したタグをリサイクルし、前記メモリ素子に入る新規命令に前記リサイクルされたタグを割り当てるステップと、
を含むことを特徴とする方法。
【請求項８】
新規命令をいくつメモリ素子に入れられるか決定するステップをさらに含むことを特徴とする請求項７に記載の方法。
【請求項９】
命令のソースから命令情報を受け取りメモリ素子に格納する可変アドバンス命令ウインドウを実現するシステムであって、
複数のスロットを有するリサイクル型キューと、
タグによって識別されるアドレスに命令に関する情報を格納し、複数の読み出しアドレス・ポートと複数の読み出しデータポートを有するメモリ素子と、
前記メモリ素子に入れる関連情報をもつ新規命令毎にタグを割り当て、タグは各々前記メモリ素子の固有なアドレスに該当する値を有する、タグ割り当て手段と、
前記リサイクル型キューのスロットに入るタグの順序が命令情報が前記メモリ素子に入る順序に一致するように前記リサイクル型キューにタグを入れる手段と、
前記リサイクル型キューのタグの値を前記読み出しアドレス・ポートに送り、前記メモリ素子の命令情報が前記読み出しデータから読み出される順序を決定する手段と、
前記メモリ素子に入れる１つの新規命令情報にリサイクルされたタグを１個割り当てる手段と、
を備えることを特徴とするシステム。
【請求項１０】
新規命令をいくつメモリ素子に入れられるか決定する手段をさらに備えることを特徴とする請求項９に記載のシステム。
【請求項１１】
命令ソースから命令情報を受け取りメモリ素子に格納する可変アドバンス命令ウインドウを実現する方法であって、
（１）レジスタ・ファイルに関連命令情報を格納できる新規命令がいくつあるか決定するステップと、
（２）特定の命令のタグはその命令に関する情報がレジスタ・ファイルに存在する限り変わることがないように新規命令毎にタグを割り当てるステップと、
（３）各命令に関連する情報をレジスタ・ファイル内のその命令に割り当てられたタグで指定する場所に格納し、前記レジスタ・ファイルは複数のレジスタと、複数の読み出しアドレス・ポート及び複数の読み出しデータポートを含む、情報格納のステップと、
（４）キューのスロット毎にタグを１個づつ格納し、前記キューは所定の時点でレジスタ・ファイルに命令情報を入れられる上限の命令数に等しいスロット数を有し、タグは各命令に対する命令情報がレジスタ・ファイルに格納されるのと同じ順序でキューの中に入れられ、前記キューはスロット毎にスロット出力を有し、各スロット出力によって対応するスロットのタグをアクセスできるようになる、タグ格納のステップと、
（５）前記キューのスロットに格納されたタグをレジスタ・ファイルの複数からなる読み出しアドレス・ポートに引き渡してレジスタ・ファイルの複数の読み出しデータポートから命令に関する情報がレジスタ・ファイルに格納されたと同じ順序でレジスタ・ファイルが命令に関する情報を出力するようにするステップと、
を含むことを特徴とする方法。
【請求項１２】
命令のソースから命令情報を受け取りレジスタ・ファイルに格納する可変アドバンス命令ウインドウを実現するシステムであって、
レジスタ・ファイルに関連する命令情報を入れられる新規命令がいくつあるか決定し、特定の命令に関する情報がレジスタ・ファイルにある限りその命令のタグが変わることがないように新規命令毎にタグを割り当てる制御手段と、
前記制御手段に接続され、各命令に関する情報をレジスタ・ファイル内の１個の場所に格納し、前記場所はその命令に割り当てられたタグで指定され、レジスタ・ファイルは前記場所を形成する複数からなるレジスタと、
複数の読み出しデータポート及び複数の読み出しアドレス・ポートを有し、読み出しアドレス・ポートには読み出しデータポートが対応している、レジスタ・ファイルと、
前記制御手段及びレジスタ・ファイルに接続され、複数のスロットを有し、前記スロットには各々にレジスタ・ファイル内の場所のアドレスに対応する固有のタグが収められ、さらにスロット毎のスロット出力を有し、各スロット出力によって対応するスロットにあるタグをアクセスできるようになる、リサイクル型キューを備え、
前記リサイクル型キューのスロットに格納されたタグはレジスタ・ファイルの前記複数の読み出しアドレス・ポートに引き渡され、レジスタ・ファイルは前記複数の読み出しデータポートから命令情報がレジスタ・ファイルに格納されたと同じ順序でレジスタ・ファイルに格納されている命令情報を出カするようにすることを特徴とするシステム。
【発明の詳細な説明】
発明の背景
1.  産業上の利用分野
本発明は、一般的にスーパースカラ・コンピュータに関し、より具体的には、スーパースカラ型縮小命令セット・コンピュータ（RISC）に於て命令実行を制御するためタグを用いるシステム及び方法に関する。
2.  関連技術
従来のコンピュータ・システムで用いられるプロセサは、一般的に、プログラム命令を一度に一つづつ順次実行する。一つの命令を実行するプロセスにはいくつかのシーケンシャルなステップが含まれている。第１のステップは、普通、メモリ素子から命令を取り出すことである。第２のステップは、普通、命令をデコードしオペランドをアセンブルすることである。
第３のステップは、普通、命令を実行しその結果を格納することである。プロセサによっては、プロセサの一回のクロック・サイクルで各ステップを行うように設計されているものがある。あるいは、ステップ当たりのプロセサのクロック・サイクル数が命令によって変わるようにプロセサを設計することも可能である。
性能向上のため現代のコンピュータはパイプライン方式として知られる手法を用いる。パイプライン方式では、命令実行過程のシーケンシャルなステップが重なり合うことになる。例えば、プロセサは、一つの命令に対して実行ステップを行っている間に、同時に、第２の命令に対してはデコードのステップを行い、第３の命令に対しては取り出しを行うのである。このようにして、パイプライン方式は命令の一つのシーケンスにかかる実行時間を短縮することが出来る。
先に説明したシーケンシャルな３つのステップのサブステップと重なり合わせることによって性能を向上させる別の部類のプロセサは、スーパーパイプライン式プロセサと呼ばれる。
性能向上のためのまた別の手法では、複数の命令を同時に実行することになる。この手法を用いるプロセサは普通、スーパースカラ型プロセサと呼ばれる。２つ以上の命令を同時に実行するスーパースカラ型プロセサの能力は実行される命令によって異なる。例えば、限られた同じプロセサ資源（浮動小数点ユニットなど）の使用を共に必要とする２つの命令を同時に実行することは出来ない。この種の衝突は資源依存性として知られている。さらに、別の命令実行から得られた結果を使用する命令は、他の命令と同時に実行することは出来ない。別の命令の結果に依存する命令は他の命令に対してデータ依存性があるという。同様に、命令セットによって特定のタイプの命令は相対的な所定の順序で実行しなければならないことを指定することができる。こうした命令は手続き依存性があるという。
性能向上のための３番目の手法ではプログラムの順序に関係なく命令を実行することになる。この手法を用いるプロセサは普通、out−of−orderプロセサと呼ばれる。通常、out−of−orderプロセサはスーパースカラ型プロセサでもある。データ依存性及び手続き依存性は、スーパースカラ方式の実行を限定するのと同じようにout−of−order実行を限定する。
以降、本明細書において、複数の命令を同時に実行できるか、命令をプログラムの順序に関係なく実行できるか、またはその両方を実行できるプロセサをさして「スーパースカラ型プロセサ」という用語を用いる。
命令を同時にまたはプログラムの順序に関係なく（out of order）で実行するには、スーパースカラ型プロセサには実行ユニットと呼ばれるシステムが入っていなければならない。実行ユニットは命令を実行するための複数の機能ユニット（例えば、浮動小数点マルチプレクサ、加算器など）を含む。複数の機能ユニットに命令を送るにはスケデュールの制御が必要である。プログラムと同じ順序（in order）で命令を発行する場合には、デコードされた命令が資源衝突を起こすとか、まだ完了していない命令に対して真の依存性または出力依存性をもつといったことが起きれば、その時点でプロセサは命令のデコーディングを停止する。その結果、一つまたは複数の後続命令が実行可能な場合でも、プロセサは資源衝突や依存性を有する命令より先を見ることができなくなる。この制約を克服するために、プロセサは実行ステージからデコーダを切り離す。そうすることによって、即実行可能であるか否かにかかわらずデコーダは命令のデコーディングを続ける。この切り離しは、命令ウインドウと呼ばれるデコードと実行ステージの間のバッファによって実現される。
ルックアヘッドを活用するために、プロセサは命令をデコードしウインドウに余裕がある限りウインドウの中に収め、と同時にウインドウ内の命令に実行可能な命令（つまり、資源衝突や依存性のない命令）があるかどうか調べる。命令ウインドウは、ウインドウの大きさと命令ソースの機能によってのみ制約されるルックアヘッド機能をプロセサにもたらし、命令のプールとしての働きをする。従って、out−of−order（アウト・オブ・オーダー）命令発行にはデコーダと機能ユニットとの間に命令ウインドウと呼ばれるバッファが必要で、命令ウインドウ（インストラクション・ウインドウ）はコンピュータが実行するプログラムの一部分のスナップショットを提供する。
命令の実行が終了した後、新たな命令と入れ替わるように、命令をウインドウから除去しなければならない。現在の設計では先入れ先出しのキュー（FIFO）を活用する命令ウインドウが用いられている。特定の設計においては、新規命令がウインドウに入り、完了した命令が固定サイズのグループになってウインドウから出ていく。例えば、命令ウインドウに８つの命令（I0〜I7）が入っていると、４つの命令からなるグループに変えることができる。この場合、命令I0、I1、I2、及びI3が実行後にウインドウから除去されると同時に４つの新規命令がそのウインドウの中に入って来る。命令が固定サイズのグループで出入りする命令ウインドウは「固定アドバンス命令ウインドウ」と呼ばれる。
別のタイプの設計では、新規命令がウインドウに入り、完了した命令は様々なサイズのグループでウインドウを出ていく。例えば、命令ウインドウに８つの命令（I0〜I7）が入っているとすれば、１つの命令、２つの命令、または３つの命令からなるグループに変えることができる。この場合、命令I0、I1、もしいくはI2のいずれかが実行された後、ウインドウから除去されて新規命令がそのウインドウに入って来る。命令が様々なサイズで出入りする命令ウインドウは「可変アドバンス命令ウインドウ」と呼ばれる。
可変アドバンス命令ウインドウ（VAIW）を用いるプロセサは固定アドバンス命令ウインドウ（FAIW）のプロセサより性能が高くなりがちである。しかしながら、特定の命令がウインドウ内の決まった番号のロケーションにしか入れないので、固定アドバンス命令ウインドウの方がプロセサにとっては管理しやすい。例えば、８つの命令（I1〜I7）を収納し４つの命令からなるグループで命令を入れたり取り出したりする命令ウインドウでは、命令はウインドウ内の２つのロケーション（例えば、I0とI4）の一個所にしか入れない。可変アドバンス命令ウインドウでは、その命令はいろいろ異なる時点でウインドウ内のロケーションのどれにでも入ることができるので、可変アドバンス命令ウインドウのプロセサは、固定アドバンス命令ウインドウのプロセサに比べて、各命令の存在位置を捜し当てるのにより多くの資源がなければならない。
現在の設計は命令ウインドウを実現するのに大きなキューを用いている。キューを用いることは、次のような理由から、不都合である。つまり、大きなチップ面積資源を複数のキュー専用に割かなければならないが、可変アドバンス命令ウインドウを実現する場合には特にそうである。また、１個以上のキューを用いるシステムの設計は柔軟性に限りがある。さらに、キューに入っているデータを振り分ける制御ロジックが複雑で柔軟性に欠ける。
従って、必要なのは命令がウインドウを通過するのに伴ってその命令を「追跡」または監視する手法である。柔軟性に富みチップの面積が小さくてすむシステムでなければならない。
発明の要約
本発明は、複数の命令にタグを割り当てまた複数の命令を収める命令ウインドウを保持するシステムを用いて複数の命令が並列で且つプログラムの順序に関係なく実行されるのを監視する手法に関する。このシステムは、スーパースカラ・ユニットの１個の構成要素で、命令ソースと、命令を実行する機能ユニットとの間に接続される。スーパースカラ・ユニットの役割は、命令ウインドウの保持、実行ユニットの様々な機能ユニットに命令を振り分け、さらに命令が実行された後ソースから新規命令を受け取ることである。
本発明は、タグ・モニタ・システムを用いるが、このシステムはスーパースカラ・ユニットの一部である。タグ・モニタ・システムは、レジスタ・ファイルと、先入れ先出しに基づいて動作するキューを備える（キューはマルチ・アドバンス、多重出力でFIFOをリサイクルする）。キューはレジスタ・ファイルに接続される。レジスタ・ファイルは命令ソースに接続され、命令の情報（つまり、各命令の資源要件）を格納するのに用いられる。命令が命令ソースからレジスタ・ファイルに送られると、現在どの命令にも割り当てられていないタグがその命令に割り当てられる。命令の情報はその後命令のタグで示されたレジスタ・ファイル内のアドレス位置に格納される。一旦命令の情報がレジスタ・ファイルに格納されれば、それを「命令ウインドウ内」に入っているという。命令ウインドウ内の各命令のタグはキューに格納される。タグは、その対応する命令がプログラムで決められている順序と同じ順序でキューに入れられる。
命令が終了すると、キューがアドバンスし、命令のタグがキューの下部から事実上押し出される。次にそのタグは命令ウインドウに入る新規命令に再度割り当てられる。このように、タグはキューの最上部に送り返される（言い換えれば、リサイクルされる）ことになる。複数の命令が同時に終了した場合、同時に複数のタグをリサイクルすることも可能である。好適な実施例においては、命令はプログラムの順序通りに終了することが必要である。命令が間違って他の命令の結果を上書きすることがないようにするために、こうすることが必要なことが多い。例えば、メモリの同じロケーションに書き込む２つの命令がプログラムに入っているとしたら、プログラムで先行する命令が２番目の命令より前にメモリに書き込まれなければならない。従って、プログラムの順序に関係なく実行される命令の結果はどれか一時記憶領域に保持され、命令自体は全ての先行命令が実行され終わるまで命令ウインドウにそのまま残っていなければならない。１個のグループの命令が終了すると、その結果は全て一時記憶領域から本当のデスティネーションに移される。その後命令はウインドウから除去され、それらのタグはリサイクルされる。
レジスタ・ファイルは新規命令の情報を命令ソースから受け取る書き込みポートを有する。レジスタ・ファイルは、一回にウインドウに入れられる新規命令の数と同じ数の書き込みポートを有する。レジスタ・ファイルはウインドウの命令毎に１個のエントリを有する。レジスタ・ファイルはまたウインドウの全ての命令毎に１つの出力ポートを有する。出力ポート毎に対応するアドレス・ポートがある。アドレス・ポートを用いて、どのレジスタ・ファイルのエントリの内容をその対応する出力ポートで出力するか選択する。
キューはスロット（例えば、キュー内の特定のバッファの位置）毎に１個の出力ポートを有し、そのスロットに格納されたタグの値を示す。これらの出力はレジスタ・ファイルの読み出しアドレス・ポートに接続される。この接続によって、タグ・バルブが読み出しアドレス・ポートへのキューで表されていると、レジスタ・ファイルがエントリの内容をその対応出力ポートに表示するようになる。レジスタ・ファイルの出力はスーパースカラ・ユニット及び実行ユニットの様々なロケーションに送られ、そこでその命令情報は命令のスケデューリング、命令実行などのために使用される。
命令ウインドウのロケーションによっては所定の時点に空になることがある。この空のウインドウ・ロケーションは「バブル」と呼ばれる。命令がウインドウから出ていき命令ソースが直ちに別の命令を送って置き換えることができない場合、時々バブルが発生する。ウインドウにバブルがあると、レジスタ・ファイルのエントリによっては古い命令情報や虚偽の命令情報を収納することになる。レジスタ・ファイル内のデータは全て常時使用可能だから、レジスタ・ファイル内のデータを限定する何らかの方法が必要である。
本発明では、命令ウインドウのエントリ毎に「バリディティ・ビット」が対応付けられており、レジスタ・ファイル内の対応する命令情報が有効かどうかを示す。これらのバリディティ・ビットはタグの入っているタグFIFOに保持することができる。FIFO内のタグには各々に１つのバリディティ・ビットがある。これらのビットはタグがリサイクルされる度に更新される。タグが更新された時にもし有効な命令が割り当てられていれば、そのビットはアサートされる。そうでなければ、デアサートされる。
バリディティ・ビットは、レジスタ・ファイルの出力と共にタグ・モニタ・システムからの出力である。バリディティ・ビットはレジスタ・ファイルの出力と同じロケーションに送られ、それによってスーパースカラ・ユニットや実行ユニットがその命令情報を使用できるかどうかを知る。
本発明の特徴は、大きなキューに命令情報を格納しなくても命令ウインドウを保持できることである。そのため設計が簡素化されオペレーション上の柔軟性が高まる。例えば、ｎ個の命令を収めるウインドウがあるとすれば、タグ・モニタ・システムにはｎ個のエントリの入ったキュー、及びｎ個のエントリとｎ個の出力ポートを有するレジスタ・ファイルがある。キューの各出力がレジスタ・ファイルの対応する読み出しアドレス・ポートに接続されて（例えば、出力０は読み出しアドレス・ポート０に、出力１は読み出しアドレス・ポート１にといったようにそれぞれ接続される）いえば、レジスタ・ファイルの出力はプログラムと同じ順序（例えば、出力ポート０は命令０の情報を表示し、出力ポート１は命令１の情報を表示するといった具合）でウインドウ内の各命令に関する情報を「表示する」（つまり、出力ポートで使用可能にする）。ウインドウがアドバンスすると、キューがアドバンスし読み出しアドレス・ポートのアドレスが変わる。これによってレジスタ・ファイルの出力が変わりウインドウ内の命令の新たな配列を反映したものになる。命令情報がプログラムの順序で（in order）スーパースカラ・ユニットの他のところに送られるように、レジスタ・ファイル出力にプログラムの順序で命令情報が表示されることが必要である。スーパースカラ・ユニットが実行及びその完了をスケデュールできるように、スーパースカラ・ユニットはウインドウ内の命令の順序を知る必要がある。
本発明の様々な実施例の構成とオペレーションの他、本発明の更なる特徴及び優れた点については添付の図面との関連において以下に詳細に説明する。
【図面の簡単な説明】
第１図は本発明のスーパースカラ環境の代表的なブロック図を示す。
第２図は本発明のタグ・モニタ・システムの代表的なブロック図を示す。
第３図は第２図のタグ・モニタ・システムによるタグ・モニタに関する代表的なオペレーション・フローチャートを示す。
第４図は２個のレジスタ・ファイルを有するタグ・モニタ・システムを示す。
第５図は単純なFIFOの図を示す。
第６図は多重出力の単純なFIFOの図を示す。
第７図は複数の出力端子を有するFIFOを示す。
第８図はリサイクル型FIFOを示す。
第９図はマルチ・アドバンスのFIFOを示す。
第10図はリサイクル型マルチ・アドバンスのFIFOを示す。
発明の詳細な説明
1.0  システム環境
第１図はスーパースカラ環境101のブロック図である。スーパースカラ環境101は、命令ソース102、スーパースカラ・ユニット104、機能ユニット106を備える。スーパースカラ・ユニット104は機能ユニット106によって命令の実行を制御する。機能ユニット106は、浮動小数点ユニット（未表示）、整数ユニット（未表示）、ロード／ストア・ユニット（未表示）と、所望するアプリケーションによってプロセサが通常用いるようなその他のハードウエアを備えていてもよい。命令ソース102及び機能ユニット106の具体的な実現については当業者には明らかであろう。
命令ソース102はバス103を介してスーパースカラ・ユニット104に命令情報を送る。スーパースカラ・ユニット104は次に機能ユニット106に対して命令を発行する。普通、スーパースカラ・ユニット104は機能ユニット106の可用性を監視し、命令相互間の依存性を調べる。一旦命令が完了すると、命令ソース102はスーパースカラ・ユニット104にさらに命令情報を送る。
第１図に示すバスはデータ信号及び制御信号を表している。バス及び命令のサイズはアプリケーションにより異なっていてよい。以下に、スーパースカラ・ユニット104に対する命令を追跡するタグ・モニタ・システムを中心に説明する。
2.0  タグ・モニタ・システムの構成とオペレーション
A.構成
第２図はスーパースカラ・ユニット104の一部に組み込まれたタグ・モニタ・システム（第２図の内側の破線で表示した部分）のブロック図である。タグ・モニタ・システム222には、レジスタ・ファイル202、タグFIFO 204、制御ロジック207が含まれる。
タグFIFO 204はマルチ・アドバンス、多重出力のリサイクル型FIFOで、複数のスロット206にタグを格納する。「マルチ・アドバンス」とは、FIFOを一度にスロット幾つでもアドバンスさせることができることを意味する。例えば、マルチ・アドバンスのスロットは４個のFIFOを一度に０から３スロットまでアドバンスさせることができる。「多重出力」とはFIFOの各スロットの内容が使用可能であることを意味する。タグは命令が命令ウインドウに入ると命令毎に割り当てられる固有のラベルである。タグFIFO 204はウインドウ内の命令毎に１つのスロットを有する。スロット206は各々が出力203を有し、それによって対応するスロット206にあるタグの値を示す（つまり、出力する）。スロット206はまた各々が、スロット206のタグを割り当てられた命令が有効であるかどうかを示すバリディティ・ビットを有する。好適な実施例において、タグFIFO 204にはスロット206が８個ある。これらのスロット206に各々には０から７までの固有の２進数（タグ）が収めれている。例えば、タグが３ビット（例えば、000、001、010、といったように）で、バリディティ・ビットがあれば、各スロットに４ビットを保持させる。従って、出力232は各々４ビット幅である。チップの電源投入時またはリセット時にタグFIFO 204のスロット206の各々の固有のタグがロードされる。
一旦タグが命令に割り当てられると、タグは命令がウインドウからなくなるまでずっとその命令についたままである。一旦命令がウインドウから除去されると、そのタグはタグFIFO 204の最上部212に送り返される。最上部212に送られたタグは新規命令がウインドウに入るとそれに再び割り当てられる。このようにして、タグは「リサイクル」される、つまり、タグFIFO 204の中で再び一周する。普通、タグは最上部212から下部210に向かってタグFIFO 204の中をアドバンスする。そのため、タグFIFO 204をリサイクル型キューを呼ぶ。
レジスタ・ファイル202はタグFIFO 204と命令ソース102に接続されている。レジスタ・ファイル202は命令ソース102から送られてくる命令情報を格納する。命令ソース102からレジスタ・ファイル202に送ることができる情報のタイプは次の通りである。デコードされた命令情報、命令機能ユニット要件、命令によって実行されるオペレーションのタイプ、命令結果が格納される記憶場所を指定する情報、命令オペランドが格納されている記憶場所を指定する情報、コントロール・フロー命令のターゲット・アドレスを指定する情報、及び命令で指定したオペレーションで使用されるイミディエト・データを指定する情報である
レジスタ・ファイル202は、書き込みデータポート214、書き込みアドレス・ポート216、ライトイネーブル（書き込み可能）ポート218、読み出しアドレス・ポート220、及び読み出しデータポート224を備える。
書き込みデータポート214はバス103を介して命令ソース102から命令情報を受け取る。書き込みアドレス・ポート216は、書き込みデータポート214を経由して受け取った命令情報がレジスタ・ファイル202のどのアドレス指定可能なロケーションに格納されるかを指定する。書き込みアドレス・ポート216はバス226を介して制御ロジック207に接続されている。ライトイネーブル・ポート218は命令ソース102からのデータがいつレジスタ・ファイル202に書き込まれるかを示す。ライトイネーブル・ポートはバス228を介して制御ロジック207に接続されている。好適な実施例（第２図に表示）において、レジスタ・ファイル202はＡからＤのラベルのついた４つの書き込みデータポートを有する。書き込みデータポート214はＡからＤのラベルのついた対応する書き込みアドレス・ポート216と、ＡからＤのラベルのついた対応するライトイネーブル・ポート218とを有する。
読み出しアドレス・ポート220はバス230を介してタグFIFO 204に接続されている。バス230はタグFIFO 204のスロット206の各々の出力232を伝送する。読み出しアドレス・ポート220は読み出しデータポート224を経由してアクセスされる命令情報を選択する。読み出しアドレス・ポート220は各々対応する読み出しデータポート224を有する。好適な実施例（第２図に表示）において、命令ウインドウには８つのエントリ（つまり、タグFIFO 204の深さ）があり、レジスタ・ファイル202はウインドウ内の各命令に対して読み出しアドレス・ポート220を１個、読み出しデータポート224を１個有する。読み出しアドレス・ポート220には０から７までのラベルが付けられ、それに対応する読み出しデータポート224にも０から７までのラベルが付いている。
典型的には、レジスタ・ファイル202はスーパースカラ環境101内になる他の要素（例えば、表示されてはいないが、イシュア）に接続されている。
制御ロジック207は論理回路を備える。制御ロジック207はバス234と230を介してタグFIFO 204から機能ユニット106を監視する。制御ロジック207はバス238を介して命令ソース102に信号を送り、命令がウインドウから出ると新規命令情報をレジスタ・ファイル202に送る。制御ロジック207は命令ソース102が新規命令をいくつ送るべきかを知らせる。好適な実施例（第２図に表示）において、一回に送れる命令数は最大で４個であるが、これはレジスタ・ファイル202の書き込みデータポート214の総数に相当する。制御ロジック207は、命令がウインドウから出ていくとバス236を介してタグFIFO 204と同期をとりアドバンスする。このように、制御ロジック207のコマンドに基づいて、タグFIFO 204は一回にウインドウから出ていく命令数と同じステップだけアドバンスする。制御ロジック207はバス236を介してタグFIFO 204に格納されたバリディティ・ビットの保持もする。制御ロジック207の回路のインプリメンテーションについては当業者には明らかであろう。例えば、現在よく知られ既に市販されている論理合成やレイアウトのシステムを用いて動作記述（例えば、VerilogやV.H.D.L）をシリコンやチップの設計に変換することができる。
本明細書に記載の様々なバスのビット幅はパラレルまたはシリアルのアドレスやデータ転送をサポートする。インプリメンテーションに固有であるその選択は当業者には明らかであろう。
タグ・モニタ・システムに１個以上のレジスタ・ファイルを備えることも可能である。好適な実施例では、命令情報は複数のレジスタ・ファイル間に配られる。例えば、１個のレジスタ・ファイルには命令毎のデスティネーション・レジスタ・アドレスが入っている。別のレジスタ・ファイルには各命令の機能ユニット要件などが入っている。複数のレジスタ・ファイルを使用する利点の一つは、設計者が小さめのレジスタ・ファイルを用い、それらを使用する内容に接近した配置にすることができることである。そのためプロセサの物理的設計が容易になる。レジスタ・ファイルの読み出し及び書き込みの各アドレスは一つに接続され、出所は同じである。レジスタ・ファイルの書き込みアドレスも命令ソースからくるが、全てのレジスタ・ファイルが各命令に関する全ての情報を保持しなければならないというわけではない。各レジスタ・ファイルの出力は、レジスタ・ファイルに保持されているデータを必要とするところだけに送られる。
第４図は２個のレジスタ・ファイルを有するタグ・モニタ・システム222を示す。好適な実施例においては、各命令の情報の一部分だけがレジスタ・ファイル202aと202bの各々に格納される。従って、命令ソース102からバス103上を送られるデータは分割される。１個の部分103aはレジスタ・ファイル202aに送られ、もう１個の部分103bはレジスタ・ファイル202bに送られる。202aと202bの両レジスタ・ファイルはバス226と228に接続されており、バス226と228は制御ロジック207からの制御信号とバス230への制御信号を届け、バス230はタグFIFO 204からの出力を届ける。レジスタ・ファイル202aと202bの出力はスーパースカラ・ユニット104中の別々の場所にまた別のバス240aと240bを通って供給される。
タグFIFO 204について実施例との関連において説明する。
第５図はFIFO 500を示す。FIFO 500は４個のスロット504、508、512、516に４つのデータを保持する。その４個のスロットはバス506、510、514を介して接続されている。FIFO 500には入力502と出力518とがあり、そこを通ってデータがFIFO 500に出入りする。
FIFO 500はポジションが４個あるキューのように動作する。FIFO 500がアドバンスすると、スロット516にあるデータは出力518を通ってFIFO 500から出ていく。スロット512にあるデータはバス514を通ってスロット516に移動する。スロット508にあるデータはバス510を通ってスロット512に移動する。スロット514にあるデータはバス506を通ってスロット508に移動し、入力502にあるデータが移動してスロット504に入る。これらのデータ転送は各々FIFO 500がアドバンスする度に起きる。
第６図は複数の出力を有するFIFO 600を示す。FIFO 600は第５図のFIFO 500とほとんど同じ構成である。データは入力602からFIFO 600に入り、604、610、616、618の４個のスロットと通って移動し出力626から出ていく。FIFO 500とFIFO 600の相違点は、604、610、616、622の各スロットに格納されたデータは各スロットに入った時点からFIFO 600が次にアドバンスするまで対応するバス606、612、618、叉は624上で見ることができる（つまり、その４個のバスを読むことができる）ことである。出力606、612、618、叉は624によって所定の時点でFIFO 600にどんなデータが格納されているかをユーザは知ることができる。
好適な実施例においては、スロット604、610、616、及び622に格納されたデータは各スロットの出力バス上（つまり、バス608、614、620、及び626）で常時見ることができる。この場合、バス606、612、618、叉は624は不要である。この種の実施例を第７図に示す。バス706、710、及び714を用いてスロット１と４（704、708、712、及び716のそれぞれ）の間でデータを搬送し、スロット１、２、及び３、つまり704、708、712の内容も示す。出力バス718においては常にスロット716の内容を読むことができる。
第８図はリサイクル型FIFO 800を示す。リサイクル型FIFO 800は第５図に示したFIFO 500とほとんど同じように機能する。リサイクル型FIFO 800は４個のスロット804、808、812、816を備える。主たる相違点は、FIFO 800がアドバンスするとスロット816のデータがスロット804に移動する。FIFO 800は新規のデータをスロット804に入力する手段を有していないから、電源を入れたりリセットしたりする時には804、808、812、816の各スロットが何らかの値で初期化されるように設計する必要がある。これらの初期値は、周知のように再初期化されるまでFIFO 800中を巡回する。
一回で複数のステップでFIFOをアドバンスさせることが必要な場合がある。FIFOは１ステップ分アドバンスする度にデータの一部分を入力するから、FIFOには少なくともFIFOがアドバンスできる上限のステップ数と同じだけの入力がなければならない。FIFOは、各スロットからのデータや正しいデスティネーションへの入力を搬送するバス以外にもいくつかバスを有していなければならない。
第９図はマルチ・アドバンスのFIFO 900を示す。FIFO 900は一回で１、２、３、叉は４のステップ（つまり、スロット）でアドバンスさせることができる。FIFO 900は、４個の入力902、904、906、908と、４個のスロット904、922、930、938を有する。FIFO 900が４ステップでアドバンスする時には、入力902にあるデータはスロット938に行き、入力904がスロット930に、入力906がスロット922に、そして入力908がスロット914にそれぞれ移動する。FIFO 900が３ステップでアドバンスする時には、スロット914のデータがスロット938に、入力902がスロット930に、入力904がスロット922に、そして入力906がスロット914にそれぞれ移動する。この場合、入力908にあるデータはFIFO 900には入らない。FIFO 900が２ステップでアドバンスする場合、スロット922のデータがスロット938に、スロット914のデータがスロット930に、入力902がスロット922に、そして入力904がスロット914にそれぞれ移動する。最後に、単純なFIFOの場合であるが、１ステップでFIFOがアドバンスする時にはスロット930のデータがスロット938に、スロット922のデータがスロット930に、スロット914のデータがスロット922に、そして入力902にあるデータがスロット914にそれぞれ移動する。
一回に複数のステップでアドバンスするには、各スロットと幾つかのスロットの出力がそれ以外の複数のスロットに通じるように切り換え可能な方法で接続されていなければならない。従って、FIFO 900には４個のマルチプレクサがある。つまり、910、918、926、934にそれぞれ表示されたMUX1、MUX2、MUX3、MUX4である。これらのマルチプレクサを用いてFIFO 900がアドバンスする時に各スロットに移動するデータを選択する。各マルチプレクサへの入力はそれに対応するスロットに移動する必要があるかもしれないデータである。例えば、FIFO 900がアドバンスするステップ数いかんで、スロット914、スロット922、スロット930、もしくはスロット930からデータがスロット938に移動することになる。従って、934への入力は、スロット916、スロット924、スロット932、及び入力902からの出力である。マルチプレクサ910、918、926、934を制御するのに必要な論理回路の構成及びオペレーションについては当業者には明らかであろう。
内容をリサイクルするマルチ・アドバンスのFIFOを設計することも可能である。第８及び第９図に示すFIFOの組み合わせがこのFIFOである。リサイクル型マルチ・アドバンスのFIFO 1000を第10図に示す。FIFO 1000は一回に１ステップ、２ステップ、または３ステップのいずれでもアドバンスすることができる。FIFO 1000には４ステージ（1006、1014、1022、1030のラベルのついたスロット１〜４）あるから、４ステップでのアドバンスは論理的には全くアドバンスしないのと同じことである。従って、４ステップでのアドバンスは全く必要ないから、リサイクル型マルチ・アドバンスのFIFO 1000に用いるマルチプレクサの構成はマルチ・アドバンスのFIFO 900で示した構成とは異なる。FIFO 1000は第７図に示したFIFO 700のような多重出力のFIFOでもある。さらに、第８図のリサイクル型のFIFO 800のように、FIFO 1000は初期化のため何らかの手段を有してもいなければならない。
第５図、第６図、第７図、第８図、第９図、及び第10図は例として４ステージで表示している。４個以外のスロット数にするために設計を変更することは勿論可能である。そうした変更については当業者には明らかであろう。
B.オペレーション
第３図はタグ・モニタ・システム222のオペレーションを図解するフローチャートである。オペレーションのステップ310〜312について第１図と第２図のハードウエア要素との関連において説明する。
ステップ301でオペレーションを開始する。ステップ302で、制御ロジック207は命令ソースに命令情報を送るよう要求するリクエスト・データ信号238を送る。制御ロジック207は命令ウインドウ内の空きスペースの数と同じ数の命令の情報を要求する。好適な実施例において、命令ウインドウに新規の命令をいくつ入れるか決定した後に、キューの最上部の空のスロットを埋めるため命令ソース102に対して十分な命令情報を要求するのは、事実上、制御ロジックである。情報を送れる命令数には上限があるが、それはウインドウ内のスペース数以下である。
ステップ304で、書き込み可能及び書き込みアドレスを起動させ、タグを割り当て、バリディテイ・ビットを更新する。制御ロジック207は、イネーブル信号をバス226で、アドレス信号をバス228で、ライトイネーブル・ポート218と書き込みアドレス・ポート216にそれぞれ送る。各ポート216のアドレスによって、対応するデータポート214の命令情報をステップ306でレジスタ・ファイル202のどこに格納すべきか指定する。命令情報はバス103を介して命令ソース102からレジスタ・ファイル202に送られる。典型的には、バス226のイネーブル・ビットの総数は情報を一回に送れる命令の上限数に等しく、好適な実施例においては４である。
レジスタ・ファイル202内で各命令の情報が格納されているアドレスをその命令のタグで指定する。書き込みデータポート214のデータは必ずしもレジスタ・ファイル202に格納する必要はないから、制御ロジック207はバス228のイネーブル信号を用いて書き込まれるべきデータだけを選択する。例えば、命令ウインドウの最上部に１個だけ空きスペースがあるとすれば、制御ロジック207はバス228のキューの最上部のスロット212に収められているタグを書き込みアドレス・ポート216Aに送り、バス226を介してライトイネーブル・ポート218Aをアサートする。このオペレーションで書き込みデータポート214Aの命令情報がレジスタ・ファイル202内のタグFIFO 204の最上部のスロット212のタグで指定された場所に格納される。命令ウインドウに２個の空きスペースがあれば、制御ロジック207は２つのイネーブル信号をポート218Aと218Bに送り、ウインドウの最上部の２つのタグを書き込みアドレス・ポート216Aと216B（216Bに移動する最上部のスロット212のタグ）に送り、そうすることによってポート214Aと214Bの命令情報がレジスタ・ファイル202に格納されるようになる。命令情報はタグで指定されたレジスタ・ファイル202内の場所に格納されると、その命令はそのタグが「割り当てられた」という。制御ロジック207はステップ304でタグFIFO 204のバリディティ・ビットの更新もする。命令ソース102がステップ302でなされた全ての要求に対して命令を供給できなければ、制御ロジック207はステップ304で有効命令に割り当てられたタグのバリディティ・ビットだけしかアサートしない。割り当てられなかったタグについては、そのバリディティ・ビットは有効命令に割り当てられるまでアサートされないままにしておかれる。
ステップ308で、レジスタ・ファイル202の内容は全て読み出しデータ・ポート224から読み出される。使用されるのはレジスタ・ファイル202の全内容以下であるとの想定になっている。レジスタ・ファイル202から読み出されるべきデータは読み出しアドレス・ポート220を通ってレジスタ・ファイル202に入るアドレスで指定される。そしてデータはウインドウ内の一部か全ての命令の実行に使用される。好適な実施例においては、読み出しアドレス220は常時アサートされている。言い換えれば、各スロット206には常にタグが入っているということである。
判断のステップ310で、制御ロジック207はステップ308で実行された命令でどれかリタイアするか判断する。リタイアする命令がなければ、判断のステップ310の「NO」のパス311で示すように、継続してデータがレジスタ・ファイル202から読み出され、ウインドウ内の命令が実行され続ける。命令がリタイアする場合、制御ロジック207はステップ312に示すようにバス234を介してリタイアする命令数を知らせる情報を受け取る。バス234を通して受け取る情報はリタイアメント・ユニット（未表示）から送られてくる。リタイアメント・ユニットの詳細は本発明の実行に関係することではない。（但し、1992年５月15日出願の同時係属中の米国出願番号07/877,451に命令リタイアメント・ユニットの一例を記載している。）制御ロジック207はその後、バス236を介して、タグFIFO 204が何段アドバンスすべきかを知らせる。
第２図において、命令が１個リタイアするとすれば、タグFIFO 204は１ステップだけアドバンス（進捗）する。タグ１が下部の210から最上部の212に移動して現在タグ０がある場所に入り、それに伴って他のタグ全てがアドバンスする。タグ１が下部の210から最上部の212に移動すると、そのバリディティ・ビットはデアサートされる。タグ１は次に新しく命令ウインドウに入る命令に再び割り当てられる。タグ２は、ステップ312終了後、タグFIFO 204の下部210の位置にあるはずである。タグ・モニタ・システム222のオペレーションはブランチ314を介して先に説明したオペレーションのステップ302に戻ることによって継続される。
本発明の様々な実施例について説明してきたが、あくまで例題として提示したのであってそれにより限定されるものではないことが理解されるだろう。従って、本発明の広さと範囲は上述の典型的な実施例のいずれによっても限定されるものではなく、特許出願の請求範囲及びそれに均等のものによってのみ限定される。
【図１】
0003561915.tif 000002
【図２】
0003561915.tif 000003
【図３】
0003561915.tif 000004
【図４】
0003561915.tif 000005
【図５】
0003561915.tif 000006
【図６】
0003561915.tif 000007
【図７】
0003561915.tif 000008
【図８】
0003561915.tif 000009
【図９】
0003561915.tif 000010
【図１０】
0003561915.tif 000011