(57)【要約】【課題】  高速でコンパクトなスーパースケーラマイクロプロセッサを実現する。【解決手段】  １つ以上の各命令に同時にアドレスを付与するスーパースカラーレジスタリネーミング回路と、命令をプログラム順序外で実行する複数の機能ユニットと、命令の実行結果をストアするバッファであって、各命令に付与されたアドレスが、実行結果をストアするバッファ内の位置を示すバッファと、リタイアされた命令の実行結果を提供するように参照される複数のアレイ位置を含むレジスタアレイと、実行された命令がリタイア可能か否かを決定するリタイアメント制御ブロックと、リタイア可能な命令群の各命令の実行結果をレジスタアレイ内のアレイ位置に同時に関連付けてリタイア可能な命令群を同時にリタイアさせる命令リタイアメントユニットを備えた１つ以上の命令をプログラム順序外で実行するように構成したものである。【選択図】        図１
2006134361.tif 000002
【特許請求の範囲】
【請求項１】
１以上の命令をプログラム順序不同に実行可能なスーパースケーラーマイクロプロセッサであって、
複数の命令を格納する命令ウィンドウと、
プログラム順序不同に実行された命令の実行結果を格納するバッファと、
前記バッファにおける、命令の実行結果が格納される位置を示す情報を含むタグを、実行された命令に対して一義的に割り当てるレジスタリネーム部と、
前記命令ウィンドウに格納されていると共に他の命令の実行結果に依存する命令のオペランドを、前記タグを用いて前記バッファから取得するオペランド取得部とを備えるスーパースケーラマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はスーパースケーラマイクロプロセサに関する。
【背景技術】
【０００２】
関連ある特許申請
下記のものは、所有権を同じくし、係属中の特許申請である: 
＊スパースケーラーRISC命令スケジューリング」、出願番号07/260,719、1991年3月31日に申請(Attorney Docket No.SPO35); 
＊「高性能RISCマイクロプロセサアーキテクチャ」、出願番号07/817,810、1992年1月8日申請(Attorney Docket No.SPO15)。
【０００３】
上記特許申請の明細書は、参考文献として本申請に含める。
【０００４】
マイクロプロセサを基礎にしたシステムの性能を向上させるひとつの方法は、パイプラインと呼ばれる技術を用いて異なる命令のステップを重複させることである。パイプライン動作において、命令実行(取り出し、デコード、実行等)の多くのステップが、パイプライン・ステージと呼ばれる独立したユニットで行われる。ステップは多くのパイプライン・ステージで並列に行われるので、プロセサは一時に２つ以上の命令を取り扱うことができる。
【０００５】
パイプラインの結果、プロセサを基礎にしたシステムは、典型的に、クロックサイクル当り２つ以上の命令を実行することができる。この方法によって命令実行速度がクロック速度を越えることが可能になる。１クロックサイクル当り多くの独立した命令を発したり、その実行を始めるプロセサはスーパースケーラープロセサとして知られている。
【０００６】
スーパースケーラープロセサは、１つの命令当りの平均サイクル数を通常のパイプラインシステムよりさらに減少さすことが可能である。スーパースケーラーシステムではハードウェアは、１つのクロックサイクル中に独立した少数の命令を実行することが可能である。データ従属性、手続き従属性、又は資源に関する不一致がないかぎり１つのクロックサイクル中に複数の命令を実行することが可能である。そのような従属性又は不一致があるときには、命令列のうち最初のもののみが実行可能となる。その結果、スーパースケーラーアーキテクチャの複数の機能ユニットを十分に活用できなくなる。
【０００７】
スーパースケーラーアーキテクチャをより有効に用いるため、プロセサ設計者はプロセサ先読み機能を充実させてきた;それは、即時に実行可能な独立した命令を探し出すため、現実行ポイントより先の命令を検査するプロセサの機能である。例えば、もし命令従属性又は資源における不一致のため命令実行が抑止されている場合には、先読み機能を持ったプロセサは現在の命令より先を見、独立した命令を見つけ、それを実行することが可能である。
【０００８】
その結果、より有効なプロセサは、命令を実行する際、命令を取り出す順序より、命令を実行する順序により大きな重点を置くのである。さらにその結果、命令は順不同に実行される。
【０００９】
スーパースケーラープロセサに関するさらに詳しい議論には、ジョンソン(Johnson) 、スーパ−スケーラーマイクロプロセサ設計（Superscalar Microprocessor Design)、Prentice Ha11,1nc.(1991)を参照のこと。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
命令の実行が中断されたり変更されたりして、その命令の実行が正しい順序で再開されなくてはならないような状況がある。そのような２つの状況を以下に述べる。
【００１１】
第１の状況では、多くのプロセサ設計では、先読み動作中に、現在行っている命令実行に続いてプログラムが行うだろうブランチを予測する予測方式を採用している。これらのシステムでは、先読み動作の結果として取り出され、実行される命令は、予測したコードのブランチからの命令である。選択されたブランチは正しく予測され例外は起こらないという仮定の下に命令を取り出し、発することにより高い命令処理速度が達成される。憶測命令実行として知られるこの方式は、命令実行をそれ以前の命令の完了を待たずに行うことを可能にする。言い換えれば、ブランチターゲット命令ストリームの実行が、条件付きブランチがとられるかどうかを決定する以前に開始されるのである。
【００１２】
ブランチの決定はときには間違いをおこすため、プロセサには、予測で実行された命令の効果をキャンセルする回復機構が必要となる。プロセサには、正しい命令列を再確立するリスタート機構もなくてはならない。
【００１３】
第２の状況では、順不同に完了することが例外を作ることを困難にする。例外は、命令をハードウエアのみで正しく実行できない場合にその命令によって作られる。これらの例外は、普通には割り込みによって処理され、ソフトウエアルーティーンがその状況を訂正する。一旦そのルーティーンが完了すれば、その例外が起きる以前のごとくプログラムの実行を続けるため、割り込まれたプログラムの実行をリスタートしなくてはならない。
【００１４】
プロセサは、プログラムを一時停止し、次に、命令実行を継続するよう記憶されている情報を持っている。この情報はプロセサの‘状態’として知られている。状態情報は特色として、プログラムカウンタ（PC）、割り込みアドレスレジスタ(IAR)、及びプログラムステータスレジスタ(PSR;program status register)を含む;PSRは、割り込み可能(interrupt enable ) 及び条件コード(condition codes) のようなステータスフラッグを含んでいる。
【００１５】
プログラムの命令が実行されるに従い、状態マシンはその命令に基づいて更新されていく。命令が停止され、しかも後でリスタートが必要なとき（即ち、上の２つの状況のうちの１つの場合）には、プロセサは実行をリスタートさせる方法に関する情報を求めるべく状態マシンに頼る。スーパースケーラープロセサでは、復元とリスタートが頻繁に行われるので、それらは高速でなされなくてはならない。
【００１６】
従来のいくつかのシステムでは、命令が順不同で行われるとき、マシンの状態も順不同で更新される(即ち、命令が実行されたのと同じ順序で)。したがって、プロセサが命令をリスタートするため後戻りすると、マシンの状態も、命令がもう一度開始できるような条件にマシンをするため‘後戻し’しなくてはならない。
【００１７】
従来のシステムを理解するためには、共通した用語を理解するのが有用である。イン−オーダ状態は、連続した一連の既に実行された命令から生じた、最新の命令結果割り当てからできている。順不同で完了しているが、それより以前の命令は完了していないような命令によって作られた割り当ては、この状態には含まれない。
【００１８】
ある命令が完了し、しかもそれ以前のすべての命令が完了しているときには、その命令の結果をイン−オーダ状態に記憶することが可能である。命令がイン−オーダ状態に記憶されたとき、マシンはそれより以前の命令からの結果にアクセスする必要はなく、その命令はリタイア（retire)したと見倣される。
【００１９】
先読み状態は、最初の未完了の命令から始まり、完了及び未完了のすべての未来の割り当てからできている。完了した命令及び未完了の命令があるため、先読み状態には、実際のレジスタ値のほか保留レジスタ値も含まれている。
【００２０】
最後に、アーキテクチャ状態は、完了した命令の連続したストリング中の一番最近に完了した割り当ておよび各レジスタヘのすべての保留割り当てからできている。その後に現われ、順不同で実行される命令は、アーキテクチャ状態にアクセスし、もし命令を順序通り実行するなら、レジスタはどの状態にいるかということを決定しなくてはならない。
【００２１】
間違ったブランチ及び例外から回復するため従来のシステムで用いられるひとつの方法は、チェックポイント修復として知られている。チェックポイント修復では、プロセサは、いくつかの論理空間を提供するが、その内の１つのみが現命令実行に用いられる。他の論理空間は、実行における前のポイントに対応した、イン−オーダ状態のバックアップコピーを含んでいる。チェックポイントは、実行中に、現在のアーキテクチャ状態をバックアップ空間にコピーすることによって得られる。このとき、最も古いバックアップ状態は放棄される。チェックポイントは、イン−オーダ状態に達するまで、命令が実行されるごとに更新される。もし例外が発生すれば、以前のすべての命令が実行され、従ってチェックポイントがイン−オーダ状態に来ることになる。
【００２２】
必要なオーバヘッド量を最小限にするため、チェックポイントはすべての命令に対して行われない。例外が起きたときには、リスタートは、例外の時点に先立つチェックポイントされた状態の内容をロードし、続いて例外の時点まで順序通り命令を実行していくことによって行われる。ブランチ予測外れに対する回復に関しては、チェックポイントがすべてのブランチで行われ、命令実行を即座にリスタートできる正確な状態を含むようになっている。
【００２３】
チェックポイント修復の欠点は、論理空間に対し非常に大きな記憶容量を必要とすることである。この記憶のためのオーバーヘッドは、マイクロプロセサの貴重で限られた資源であるチップ面積をさらに必要とすることになる。
【００２４】
従来の他のシステムでは、新しい状態により無効にされた古い状態を記憶するヒストリバッファを用いている。このアーキテクチャでは、レジスタバッファはアーキテクチャ状態を含んでいる。ヒストリバッファは、ラースト−イン  ファースト−アウト(LIFO)スタックで、先読み値によって無効にされたイン−オーダ状態の項目（即ち、新しい値により置き換えられた古い値）を含んでいる。それ故、ヒストリの名前がついている。
【００２５】
命令の宛先レジスタの現在値（デコードの前）はスタックに押し込まれる。スタックの底にある値は、それに付随した命令が既に完了していれば、廃棄される。例外が起これば、プロセサはデコーディングを一時中止し、他のすべての保留された命令が完了するまで待機し、レジスタファイルを適宜更新する。すべての値はついでLIFOの順にヒストリバッファからポップし、レジスダファイルに書き戻される。レジスタファイルは、例外の時点でのイン−オーダ状態にある。
【００２６】
ヒストリバッファ方式の欠点は、イン−オーダ状態を復元するのにいくつかのクロックサイクルが必要なことである。
【００２７】
従来の、さらに異なったシステムでは、例外及び予測外れの後リスタートするのに、リオーダバッファをファースト−イン  ファースト−アウト(FIFO)待ち行列として用いている。リオーダバッファは先読み状態を含み、レジスタファイルはイン−オーダ状態を含む。これら2つは組み合わさってアーキテクチャ状態を決定することが可能である。命令がデコードされるとき、それはリオーダバッファの一番上のエントリを割り当てられる。命令が完了すると、その得られた値はその割り当てられたエントリに書き込まれる。その値がバッファの底に達したとき、もし例外がなければ、それはレジスタファイルに書き込まれる。底に達したとき命令が完了していなければ、命令が完了するまでリオーダバッファは先に進まない。例外が起きれば、リオーダバッファは廃棄され、イン−オーダ状態がアクセスされる。
【００２８】
この方式の欠点は、イン−オーダ及び先読み状態を組み合わせるために連想ルックアップを必要とすることである。さらに、連想ルックアップは、与えられたレジスタに対して２つ以上の割り当てがあれば、最も最近の割り当てを決定しなくてはならないため、単純明快というわけにはいかない。このことにより、リオーダバッファは、より簡単な循環的にアドレスされるレジスタアレーではなく、真のFIFOとして実現されなくてはならない。
【００２９】
したがって、我々が必要とするものは、マシンの現状態を維持し、順不同に実行された命令の結果に基づいてシステムレジスタを更新するものである。これは最小限のチップ面積と電力を用いるもので、例外の時点までマシンの状態を素早く回復することを可能にするものでなくてはならない。さらに、システムは、レジスタの最も最近の値を得るため、連想ルックアップの複雑なステップを必要とすべきではない。
【課題を解決するための手段】
【００３０】
本発明のスーパースカラープロセッサは、命令グループの１つ以上の各命令に同時にユニークなアドレスを付与するスーパースカラーレジスタリネーミング回路と、命令をプログラム順序外で実行する複数の機能ユニットと、命令の実行結果をストアするバッファであって、各命令に付与されたユニークなアドレスが、実行結果をストアするバッファ内の位置を示すバッファと、リタイアされた命令の実行結果を提供するように参照される複数のアレイ位置を含むレジスタアレイと、実行された命令がリタイア可能か否かを決定するリタイアメント制御ブロックと、リタイア可能な命令群の各命令の実行結果をレジスタアレイ内のアレイ位置に同時に関連付けてリタイア可能な命令群を同時にリタイアさせる命令リタイアメントユニットを備えた命令グループから１つ以上の命令をプログラム順序外で実行するように構成されたことを特徴としている。
【発明の効果】
【００３１】
本発明は、順不同に実行された命令の結果は、それ以前の命令がすべて実行されるまで臨時バッファに記憶される。それ以前の命令がすべて実行され、それらの結果が順序通りレジスタアレーに記憶されると、当命令の結果がレジスタアレーに書き込まれ、その命令はリタイァしたと見倣される。
【００３２】
レジスタアレーにはマシンの現状態が含まれている。レジスタアレーのデータの完全性を維持するため、ある命令より以前のすべての命令の結果がデータアレーに書き込まれるまでその命令の結果は書き込まれない。このようにして、マシンの状態は順序通り更新され、例外及びブランチの予測外れのようを状況は素早くしかも効率的に処理される。
【発明を実施するための最良の形態】
【００３３】
以下、本発明の実施の形態について説明する。
１．概要
本発明は、プログラムに対しては命令が元のプログラムの順序通り順番に実行されているようにみえるように、完了した命令をリタイアさせるシステム及び方法を提供する。本発明の方式は、順不同の命令の結果(プログラムの順序通り実行されていない命令の結果）をすべて、それ以前のすべての命令が例外なく宗了するまで、一時バッファに記憶することである。その後その結果は一時バッファから、公式な状態を表すレジスタアレーに転送される。
【００３４】
命令がリタイアするときには、それ以前のすべての命令は既に完了しており、リタイアする命令はその時点で正式に完了する。本発明の方式によって命令がリタイアするときには、マシンの状態は順序通り更新される。それ故、例外が起きると、順不同の実行は一時中止され、その例外より以前の未完了のすべての命令が実行されリタイアする。したがって、マシンの状態は、例外が起きた時点までアップデイトされる。例外が完了すると、例外の時点から順不同の実行が再開される。ブランチの予測外れが見っかると、そのブランチ以前のすべての命令が実行されリタイアする。マシンの状態は現状態を表し、マシンはその点からリスタートすることが可能である。不適切なブランチの命令から得た、一時バッファにあるすべての結果は無視される。正しいブランチからの新しい命令が実行されるに従い、それらの結果は、思惑的に実行した命令ストリームから得られたすべての結果をオーバライトして、一時バッファに書き込まれる。
２．環境
図１は、順不同命令を発することが可能な、スーパースケーラ命令実行ユニット(IEU;Instruction Execution Unit)のブロックダイアグラムである。図１において、汎用レジスタを持ち、多重ポートを持つ2つのレジスタファイル102A、102Bがある。各レジスタファイル102は、5つの読み込みポート及び2つの書き込みポートを提供する。書き込みポートのそれぞれはサイクル当り２つの書き込みが可能である。一般的に、レジスタファイル102Aは整数データのみを保持するが、レジスタファイル102Bはフローティングポイント及び整数データの双方を保持する。
【００３５】
機能ユニット104はプロセス機能を行うためである。この例では、機能ユニット104は3つの算術論理演算ユニット(ALU)104A 、１つのシフタ104B、フローティングポイントALU104C、及びフローティングポイント乗算器104Dである。フローティングポイントALU104C及びフローティングポイント乗算器104Dは、整数演算及びフローティングポイント演算の双方を実行することが可能である。
【００３６】
バイパスマルチプレクサ106は、どの機能ユニット104の出力もどの機能ユニット104の入力として用いられることを可能にする。この方式は、あるクロックサィクルで実行された命令の結果が、次のクロックサイクルで他の命令の実行に必要なときに用いられる。バイパスマルチプレクサ106を用いて、必要な結果を適切な機能ユニット104に直接入力することが可能となる。それらの結果を必要とする命令を同一クロックサイクルに発することができる。バイパスマルチプレクサ106がなければ、実行された命令の結果は、あるクロックサイクルで、レジスタファイル102に書き込まれ、そして次のクロックサイクルで機能ユニット104に出力されなければならない。このように、バイパスマルチプレクサ106がなければ、１つの完全なクロックサイクルが失われることになる。この方式は、フオアオーディングとしても知られているが、この分野で周知で、ヘネシー(Hennessy)等のコンピュータアーキテクチャ定量的方法(Computer Architecture a Quantitative Approach) 、Morgan Kaufmann Publishers(1990)ページ260-262に詳しく述べられている。
【００３７】
選択マルチプレクサ108は機能ユニット104からレジスタファイル102に書き込む結果を選択する手段を与える。
【００３８】
図２は、図１に示されたIEU用のIEU制御ロジック200のブロックダイアグラムを示す。IEU制御ロジック200は命令ウインドウ202を含んでいる。命令ウインドウ202は、IEU制御ロジック200が１クロックサイクル中に発する可能性のある命令を定義している。命令ウインドウ202は、命令バッファの底の2つの場所を表しているが、それは実行すべき命令を含んだFIFOレジスタである。この命令バッファは、命令FIFOとも呼ばれる。命令が完了すると、それらは底から放出され、新しい命令が上から落とされる。命令ウインドウ202の底の場所はバケット０と呼ばれ、命令ウインドウ202 の上部の場所はバケット１と呼ばれる。
【００３９】
バケット０の４つの命令がすべてリタイアしてしまうと、それらはバケット０から放出され、バケット１の命令がバケット０に落ち、４つの命令からなる新しいグループがバケット１に入る。命令ウインドウ202は、多くの方法で実現できる。そのひとつの方法は、所有権を同じくし、係属中の特許申請である「スパースケーラーRISC命令スケジューリング」(出願番号07/860,719;AttomeyDocketNo..SPO35/1397.0170000、1992年3月31日申請)に詳しく述べられている。上記特許申請の明細書は、参考文献として本申請に含める。
【００４０】
本件の例では命令ウインドウ202は８つの命令を含んでいる。それ故、IEU 制御ロジック200は、各クロックサイクルの間にそれら８つの中からできるだけ多くの数の命令を発しようとする。命令デコーディングはデコーダ203で行われる。命令デコーディングは、IEU制御ロジック200で中断なく継続して行われるプロセスである。命令は、従属性チェック(以下で述べる)並びその命令の発行及び実行の前にデコードされなくてはならない。
【００４１】
IEU制御ロジック200は、互いに関係し合う２つの機能を行うレジスタリネーミング回路204(RRC;register renaming circuitry)も含んでいる。第１の機能はデータ従属性チェックである。データ従属性チェックが完了すると、RRC204は、命令オペランドと結果の場所を記録するのに用いるタグを各命令に付ける。
【００４２】
RRC204の中にあるデータ従属性チェックロジックは、命令の従属性のチェックに用いられる。従属性をチェックするのに、データ従属性チェックロジックは、次の命令を実行する前に、ひとつまたはそれ以上のそれ以前の命令を実行しなくてはならないかどうかを決めるため、多くのレジスタファイルソース及び宛先アドレスを見る。さらに図３は命令ウインドウ202及び命令FIFOを示す。図３を参照して、命令10の多くのレジスタファイルソース及び宛先アドレス302が他の命令のソース及び宛先アドレスに対してチェックされなくてはならない。
【００４３】
図２に戻って、この例の命令ウインドウ202は８つの命令を含むことができるため、IEUは、スケジュールの目的で８つの命令を見ることができる。ソースレジスタアドレスのすべてをそれより以前の宛先アドレスと比べなくてはならない。もしある命令が、それ以前の命令の完了に従属していれば、これら２つの命令を順不同で行うことはできない。言い換えると、もし命令12が命令11の結果を必要とするなら、従属性が存在し、11は12の前に実行されなくてはならない。命令がロングワードの命令である場合には、従属性チェックの際特別の注意を要する。ロングワードの命令は２つのレジスタを占めるが、その命令の従属性をチェックする際には、その２つのレジスタ双方ともチェックしなくてはならない。
【００４４】
RRC204で行われるもうひとつの機能はタグ割り当てである。適切なタグ割り当ては、本発明の効果的な命令リタイアには極めて重要である。命令ウインドウ202のそれぞれの命令は、命令ウインドウ202中のその命令の位置及び上述したデータ従属性チェックの結果に基づいてタグが割り当てられる。各命令に割り当てられたタグは、その命令がリタイアするまでその命令の結果が一時バッファのどこに記憶されているかということ、及び、その命令が従属するすべてのそれ以前の命令が完了したかどうかを示している。タグ割り当て及び一時バッファについては以下に詳しく述べる。
【００４５】
IEU制御ロジック200が行う他の機能は、どの命令を発行してもよいかを決定することである。命令発行器208は、適切な機能ユニット104に命令を発し実行させる。RRC204内の回路は、命令ウインドウ202中のどの命令が命令発行ができる状態にあるかを決定し、命令発行器208にビットマップを送り、どの命令が命令発行のできる状態にあるかを示す。
【００４６】
命令デコードロジック203は、各命令に対する資源に関する要求事項を示している。発行器208も機能ユニット104から資源の入手可能性に関する情報を得る。この情報は発行器208によりスキャンされ、発行する命令が選択される。
命令発行器208は、マルチプレクサ210に制御信号209を出力し、機能ユニット104にどの命令を送るべきかを伝える。「命令発行器208は、さらに制御信号211をマルチプレクサ212に送り、それが、その命令の結果を受け取るレジスタを構成するための適切なレジスタアドレスをそのレジスタに送れるよう、そのマルチプレクサを構成する。機能ユニット104の状況によって、命令発行器208は、ひとつのクロックサイクルに複数の命令を発してもよい。
【００４７】
再び図１、図２に戻って、一旦命令が機能ユニット104に発行され、それによって実行されれば、レジスタファイル102A及び102Bはマシンの現状態を反映するよう更新されなくてはならない。例外又はブランチの予測外れのためマシンが‘後退し’実行をリスタートしなければならないときには、マシンの状態は、例外又はブランチの予測外れが起きたときの最新の状態を反映しなくてはならない。命令が、順不同で発せられ実行されたとしても、マシンの状態は、例外又はブランチングが起きたときの現状態を反映するか、それに戻れるかしなくてはならない。
【００４８】
本発明の命令リタイアメントユニット(IRU)は、命令があたかも順序通りに実行されたかのようにリタイアさせる。このように、マシンの状態は、順序通りに、完了した一連の命令中最も最近の命令の時点に更新される。
【００４９】
本発明は、例外又はブランチ予測外れのためリスタートが必要なとき、その時点までの現状態が、順不同の命令実行の効果を相殺するようレジスタファイルが再構築されるのを待つことなく回復可能になるよう、命令をリタイアさせ、マシンの状態を更新するユニークなシステムと方法を提供する。
３．実現法
図４は命令リタイアメントユニット400(IRU400と呼ぶ)の高水準ダイアグラムを示す。IRU400及びその機能は主にレジスタファイル102及びリタイアメント制御ブロック409(RCB;retirement control b1ock) に含まれている。図４に示すごとく、環境によって行われる機能も、適切な命令リタイアに極めて重要である。
【００５０】
図４を参照して、IRU400の動作を説明する。この出願のサブセクション２で述べたように、スーパースケーラープロセサの環境で実行される命令は順不同で実行され、そのような順不同に得られた結果はそれより以前のすべての命令の結果が順序通りに書き込まれるまでレジスタに書き込まれない。レジスタアレー404はマシンの順序通りの状態を表す。例外なしに完了したすべての命令で、しかもそれより以前の不完了の命令がないものの結果はレジスタアレー404に記憶される。いったん結果がレジスターアレイ404に記憶されると、それらの結果に対し責任のある命令は“リタイアされた”とみなされる。
【００５１】
もし命令が順不同で完了し、しかもそれ以前の命令で完了していないものがあれば、その命令の結果は一時バッファ403に一時的に記憶される。考慮中の命令より以前のすべての命令が実行され、それらの結果がレジスタアレー404に転送されてしまえば、その命令はリタイアすることができ、その結果は一時バッファ403よりレジスタアレー404に転送される。これがなされれば、命令はリタイアしたと見倣される。即ち、リタイアできる命令は、次の２つの条件が満足されるものである:(1)命令が完了している、(2)プログラムの順序でそれより以前に出てくる命令で実行されてないものがない。
【００５２】
もし実行された命令の結果がその後の命令に必要なときには、これらの結果は、それらが一時バッファ403にあろうが、レジスタアレー404にあろうが、適切な機能ユニット104で得られることができる。
【００５３】
図１、図２および図４を参照して、IRU400をより詳しく説明する。レジスタファイル102は、一時バッファ403、レジスタアレー404及び撰択ロジック408を含んでいる。２つの入力ポート110があり、それらは、結果を一時バッファ403及びレジスタアレー404に転送するのに用いられる。IEU制御ロジック200で生成された制御信号(ここに示されていない)は、選択マルチプレクサ108にある結果を、それらがレジスタファイル102に記憶される準備ができたとき、選択するのに用いられる。選択マルチプレクサ108はデータを多くの機能ユニットから入力し、このデータを入力ポート110上で多重化する。
【００５４】
本実施例の各レジスタファイル102への２つの入力ポート110は、同時に２つのレジスタ動作を行うことを可能にする。したがって、入力ポート110は、一時バッファ403に書き込まれるべき、２つの全レジスタ幅のデータ値を入力する。これは、１つのクロックサイクルで複数のレジスタの場所に書き込むことを可能にする。１つのクロックサイクルで複数のレジスタのアドレス場所に書き込む方法に関して以下に説明する。
【００５５】
図５（ａ）及び図５（ｂ）は一時バッファ403の割り当てを示す。図５（ａ）は命令ウインドウ202の構成を示し、図５（ｂ）は、一時バッファ403のデータ結果の順序づけの例を示す。前に述べたように、いつの時点でも最大８つの待機中の命令がある。各命令は、それが通常の長さかロングワードかによって、一時バッファ403の８つのレジスタ位置0-7の中ひとつまたは２つが必要である。
【００５６】
命令ウインドウ202にある８つの待機中の命令は４つのペアにグループ化される。バケット０及び１の第１の命令(即ち10及び14)は第１のペアである。11及び15等の他のペアも同様にして作られる。10の結果(10RD) はレジスタ位置０に記憶され、14の結果(14RD)はレジスタ位置１に記憶される。もし10がロングワードのエントリなら、ローワードの結果(ロングワードの命令の前半の結果)の10RDは、前と同じく位置０に記憶されるが、ハイワードの結果(IORD+1、命令の後半の結果)は位置1に記憶される。これは、14のローワードの結果は、一時メモリ403にスペースがないことを意味しており、したがって、この時点ではこの命令は発行されない。
【００５７】
タグはRRC204で生成され各命令に割り当てられる。それぞれのタグは、例えば、３ビットを持ち、命令の結果を一時バッファ403に書き込むアドレスを示す。これら３ビットは、命令ウインドー202にある命令の位置によって割り当てられる。表１はこれら３つのタグビットに対する代表的な割り当てを示している。
【００５８】
【表１】
2006134361.tif 000003
【００５９】
命令ウインドー202の各位置は、一時バッファ403に対応した位置をもつ。最下位のビットは、命令ウインドー202のその命令が出てきたバケットを示している。このビットは、命令が入っているバケットが変われば、異なって解釈される。例えば、バケット０の４つのすべての命令がリタイアすると、バケット１の命令がバケット０に落ちる。これが起きるとタグのLSB(最下位ビット) は前にはバケット１を示していたのが、今はバケット０を示すことになる。例えば表１で、LSB1はバケット１の命令を表している。これらの命令がバケット０に落ちると、そのLSBは変化せず、LSB1はバケット０を意味するようになる。タグは各命令をどう処理するかということに関する情報を持っている。
【００６０】
命令が実行されその結果が機能ユニットから出力されると、タグもそれに従う。各命令に付いたタグの３ビットは、その命令の結果が記憶されるレジスタの位置をただひとつ決定する。この概念について以下に詳しく述べる。一時書き込みブロック(ここには示されていない)は、機能ユニット104、命令の結果及びタグを見る。各機能ユニット104には1ビットがあり、それは結果が次のクロックサイクルでその機能ユニットから出力されるかどうかを表している。一時書き込みブロックは、次のクロックサイクルで得られるそれぞれの結果のタグを得る。一時書き込みブロックは、今から来る結果が一時バッファ403に記憶されるアドレス(タグに基づいて)を生成する。一時書き込みブロックは、その結果が機能ユニット104で準備できる次のクロツクサィクルでRRC204をへて一時バッファ403をアドレスする。
【００６１】
タグの第２の機能は、ある機能ユニット104の結果を機能ユニット104のオペランド入力に直接転送できないかどうかをチェックすることである。これは、機能ユニツト104が即座にレジスタ値を必要とするときに起きる。結果はレジスタアレー404又は一時バッファ403にも記憶することができる。
【００６２】
それに加えて、タグはIEUに、すぐ次のクロックサイクルに実行する命令に即座に用いられるよう、いつそれらの結果をバイパスマルチプレクサ106に直接返すかを示す。命令の結果は、バイパスマルチプレクサ106若しくはレジスタファィル102の一方か、又はその両者に送られてもよい。
【００６３】
順不同に実行されたすべての命令の結果は、まず一時バッファ403に記憶される。上述したように一時バッファ403には８つの記憶場所がある。この数は命令ウインドー202のサイズに対応している。上で議論した例において、命令ウインドー202には８つの場所があり、したがって最高８つまでの保留命令が存在する。その結果、最高８つまでの命令結果を一時バッファ403に記憶する必要があるかもしれない。
【００６４】
もし命令が順序通り完了すれば、即ち、それ以前のすべての命令が既に完了し、その結果がレジスタアレー404に書き込まれていれば、その命令の結果も直接レジスタアレー404に書き込むことができる。RCB409は結果がレジスタアレー404に直接行くことができるかどうかを知っている。この状況では、RCB409は、レジスタアレー404に対して書き込み動作を可能にする外部書き込みビットをセットする。この実施例においては、この状態での結果はまだ一時バッファ403に書き込まれることに注意。これは簡単さのために行われる。
【００６５】
一時バッファ403の各命令結果に対して、それ以前のすべての命令が例外又はブランチ予想外れがなく完了しているとき、その結果は一時バッファ403から撰択ロジック408を経てレジスタアレー404に転送される。もし命令が順不同で完了しているがそれ以前の命令がすべては完了していないときには、その命令の結果は、それ以前のすべての命令が完了するまで一時バッファ403に留まる。１つ又はそれ以上の命令が完了しており、それらは皆プログラムの順序中でそれより以前の命令の完了を待っている場合には、それらの命令はリタイアできない。しかし、それ以前の命令が完了すれば、その全グループがリタイア可能になりリタイアされる。
【００６６】
完了ブロック420はプロセサのもうひとつの状態マシンである。完了ブロック420は、どの命令が完了したかの記録を取り、これらの命令にダンフラッグを用い‘ダン’のマークを付ける。完了ブロックはリタイア制御ブロック409にどの命令が済んだかを知らせる。リタイア制御回路を持つリタイア制御ブロック409は、ダンフラッグをチェックし、各保留命令のそれ以前のすべての命令が完了しているかどうかを見る。リタイア制御ブロック409が保留命令より前の(プログラムの順序で)すべての命令が完了したという報告を受けると、リタイア制御ブロック409はその保留命令がリタイア可能と決定する。
【００６７】
図６はレジスタアレー404への書き込みを表すタイミングダイアグラムで、図７は一時バッファ403からレジスタアレー404へのデータの転送を示すタイミングダイアグラムである。図４、図６及び図７を参照してレジスタアレー404への書き込み方法を述べる。
【００６８】
一時バッファ403にはレジスタアレー404ヘデータを転送するのに用いる出力ポートF、G、H、および1がある。レジスタアレー404には、一時バッファ403又は機能ユニット104からの命令結果を入力する入力ポートA’及びB’がある。書き込み可能信号602および604は、603で示されるように、それぞれ一時バッファ403およびレジスタアレー404への書き込みを可能にする。書かれてはいないが、レジスタアレー404に対して実際には2つの書き込み可能信号604がある。これら書き込み可能信号604の１つは、入力ポートA’への書き込みを可能にするもので、他のものは入力ポートB’への書き込みを可能にするものである。２つの入力ポートA’及びB’があるため、レジスタアレー404への２つの書き込みを同時に行うことが可能である。
【００６９】
レジスタアレー404へ書き込まれるデータは、一時バッファ403または機能ユニット104(選択マルチプレクサ108及びバス411を通して)のいずれかより入力される。制御信号606は、転送ロジック408でデータを選択するのに用いられる。制御信号606が、例えば、論理ハイのときには、データは一時バッファ403より選択される。信号410は書き込みアドレスで、一時バッファ403又はレジスタアレー404のいずれかにデータが書き込まれる場所を決定する。データ信号608は、一時バッファ403からレジスタアレー404へ転送されるデータを表している。あるいは、データ信号608は、機能ユニット104から選択マルチプレクサ108を経て送られるデータ110を表している。
【００７０】
レジスタアレー404は、1つのクロックサイクルで４つの場所に書き込みを行うことが可能である。アドレス信号410及び書き込み可能信号604が最初アサートされ、その後データ608及び制御信号606がアサートされる。制御信号606は605で示されているようにアサートされる。サイクルの前半で命令10及び11に対応するレジスタが更新される。サイクルの後半で命令12及び13に対応するレジスタが更新される。もし結果のどれかがロングワードなら、ワードの上半分は第２のサイクルに更新される。従って、２つの結果が同時に転送され、２つの命令がクロックサイクルの半サイクルで同時にリタイア可能となる。
【００７１】
図７を参照して、読み出しアドレス612F、612G、612H及び612Iが一時バッファ403の出力ポートF--1に対して得られる。データ614F、614G、614H及び614Iが一時バッファ403から615で示されるようにクロックサイクルの先頭で得られる。アドレス410Aは入力ポートA’に対して生成され、アドレス410Bは入力ポートB’に対して生成される。同様に、入力ポートA’に対する書き込み可能信号604A及び入力ポートB’に対する書き込み可能信号604Bはクロックサイクルの半分毎に生成される。611A及び611Bで示されるように、クロックサイクルの前半に現われるアドレス410は、605A及び605Bで示されるように、前半に現われる動作可能信号604の間にデータが書き込まれる場所である。同様に、データは後半のクロックサイクルに613A及び613Bで示されているように、そのときに現われているアドレス410に書き込まれる。データはA′及びB′に同時に書き込まれるので、１クロックサイクルに最大４つの命令結果をレジスタアレー404に書き込むことが可能である。したがって、１クロックサイクルに最大４つの命令がリタイア可能である。
【００７２】
制御ロジック408のラッチは、適切なアドレス410が出、書き込み可能信号604がデータ書き込みを許可するまでデータを一定に保持する。
【００７３】
一時バッファ403からレジスタアレー404へ結果を転送するプロセスを、上述したように、リタイアと呼ぶ。命令がリタイアすると、それは正式に完了したと見倣される。その命令より前のすべての命令はブランチ予測外れや例外なく完了し、マシンの状態はそれより前の時点に決定し直さなくてよい。その結果プロセサで走っているプログラムにとっては、命令は順番に更新され実行されているように見える。
【００７４】
命令は順不同に発せられ実行されるので、後に続く命令がレジスタアレー404に記憶されている値を始め一時バッファ403にあるレジスタ値にアクセスする必要がある場合がある。
【００７５】
一時バッファ403及びレジスタアレー404への読み出しアクセスはレジスタリネーミング回路RRC204によって制御されている。そのような読み出しアクセスは、前に実行された命令の結果を命令実行に必要とするような命令にとって必要となる。上のサブセクション２の議論でRRC204がデータ従属性チェックをすることを述べた。RRC204はどの命令がどの命令に従属し、どの命令が完了したかを知っている。RRC204はある命令に必要な結果がそれ以前の命令で生成されなくてはならないかどうか、即ち、従属性が存在するかどうかを決定する。もし従属性が存在するときには、前の命令を先に実行しなくてはならない。しかし、従属性が存在するときには、もうひとつのステップが必要となる。このステップは命令の結果がどこにあるかを決定する。RRC204はどの命令が完了したかを知っているので、それはそれらの命令の結果が一時バッファ403にあるのか又はレジスタアレー404にあるのかも知っている。
【００７６】
RRC204は、一時バッファ403及びレジスタアレー404ヘポート読み出しアドレス410を出力し、データを正しい場所から出力ライン412に読み出す。読み出しアドレス410の１ビットは、その場所が一時バッファ403にあるか又はレジスタアレー404にあるかを示す。
【００７７】
本発明の実施例では、一時バッファ403及びレジスタアレー404の出力ポートA--Eの各々はそれ自身のアドレスラインを持っている。即ち、どの記憶場所からもすべてのポートに出力できる。
【００７８】
４．本発明の追加的特徴
IRU200は他のユニットにもいつ命令がリタイアするかを通知する。
IRU200は、命令取り出しユニット(IFU;instruction fetch unit)にいつIRUがプロセサの状態を変更したかを通知する。このようにして、IFUはIEUIOOと一貫性を維持することができる。IFUに送られる状態情報は、プログラムカウンタを更新しIFUからさらに命令を要求するのに必要な情報である。上の例では、４つの命令がリタイアするとき、IFUはPCを４だけ進め、４つの命令のバケットをもうひとつ取り出すことが可能である。
【００７９】
IFUの例は、所有権を同じくし、係属中の特許申請で、出願番号07/817,810、「高性能RISCマイクロプロセサ  アーキテクチャ」に示されている。
【００８０】
さらに、本発明の実施例によると、状況ビットおよび条件コードも順序通りにリタイアする。命令ウインドー202の８つの命令はそれぞれ状況ビットおよび条件コードの自分自身のコピーを持っている。もし命令が状況ビットのどれにも影響しなければ、それは前の命令からの状況ビットを伝搬させる。
【００８１】
命令がリタイアする時、その状況ビットのすべてが正式に更新されなければならない。１サイクル中に２つ以上の命令がリタイアするときには、最も最近の(順序どおりで)命令の状況ビットを更新用に用いる。
【００８２】
本発明の多くの実施例について上に述べたが、それらは例として挙げられたものであり、限度を示すためのものではない。従って、本発明の精神と範囲は、上述したいかなる典型的な実施例もその限界を与えるものではなく、特許請求範囲及びそれと同等のものに従ってのみ規定される。
【産業上の利用可能性】
【００８３】
本発明によれば、高速でコンパクトなスーパースケーラマイクロプロセッサを実現できるので産業上の利用価値は大きい。
【図面の簡単な説明】
【００８４】
【図１】スーパースケーラ命令実行ユニットのデータパスを示す図である。
【図２】スーパースケーラ命令実行ユニットの機能を示すブロック図である。
【図３】命令FIFO及び命令ウインドーを示す図である。
【図４】本発明による命令リタイアを示す図である。
【図５】命令ウインドーの構成及び一時バッファの記憶場所への命令結果の割り当てを示す図である。
【図６】本発明によるデータアレーへのデータ書き込みを示すタイミング図である。
【図７】本発明によるクロックサイクル毎の４つのレジスタ場所への結果の書き込みを示すタイミング図である。
【符号の説明】
【００８５】
１０２…レジスタファイル、１０４…機能ユニット、１０６…バイパスマルチプレクサ、１０８…選択マルチプレクサ、２００…命令実行制御ユニット、２０２…命令ウインドウ、２０３…デコーダ、２０４…レジスタリネーミング回路、２０８…命令発行器、４０３…一時バッファ、４０４…レジスタアレー、４０８…選択ロジック、４０９…リタイア制御ブロック、４２０…完了ブロック。
【図１】
2006134361.tif 000004
【図２】
2006134361.tif 000005
【図３】
2006134361.tif 000006
【図４】
2006134361.tif 000007
【図５】
2006134361.tif 000008
【図６】
2006134361.tif 000009
【図７】
2006134361.tif 000010
【手続補正書】
【提出日】平成18年2月24日(2006.2.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
１以上の命令をプログラム順序不同に実行可能なスーパースケーラーマイクロプロセッサであって、
所定数の命令を含む命令グループを先入れ先出し方式にて複数保持し、実行対象となる命令グループを保持するエントリを有する命令ウィンドウと、
前記エントリに保持されている命令グループに含まれる所定数の命令がすべてリタイアされた場合には、現在対象とされている命令グループの次の命令グループを前記エントリに移行させる命令ウィンドウ制御手段と、
プログラム順序不同に実行された命令の実行結果を格納するバッファと、
前記命令ウィンドウにおける各前記命令に対応付けられているタグであって、前記命令ウィンドウにおける前記命令グループの移行にかかわらず、前記バッファにおける、命令の実行結果が格納される同一の位置を示す情報を含むタグを、実行された命令に対して一義的に割り当てるレジスタリネーム部と、
前記命令ウィンドウに格納されていると共に他の命令の実行結果に依存する命令のオペランドを、前記タグを用いて前記バッファから取得するオペランド取得部とを備えるスーパースケーラマイクロプロセッサ。