(57)【特許請求の範囲】
【請求項１】
ロードおよびストア命令を実行するよう構成されたロード/ストアユニット（２２２）を含むスーパースカラマイクロプロセッサ（２００）であって、前記ロード/ストアユニット（２２２）が、ロードミス命令を含むロードおよびストアタイプの未決命令を記憶するよう構成されたロード/ストアバッファ（３１０）を含み、前記ロード/ストアユニット（２２２）が、最古の未処理命令を識別することが可能なポインタを受けるようにさらに構成されており、かつロード/ストア命令が、前記ロード/ストアユニット（２２２）が受ける前記ポインタに応答して選択され実行されることを特徴とする、スーパースカラマイクロプロセッサ。
【請求項２】
ストア命令が前記ロード/ストアバッファ（３１０）に常駐する場合、前記ロード/ストアユニット（２２２）が、前記ポインタにより識別される前記ストア命令を実行するよう構成される、請求項１に記載のスーパースカラマイクロプロセッサ。
【請求項３】
データキャッシュ（２２４）をさらに含み、前記ロード/ストアユニット（２２２）は前記ポインタにより識別されるロード命令を実行するよう構成され、この場合、前記ロード命令は前記ロード/ストアバッファ（３１０）内に常駐し、事前にキャッシュミスであると決定される、請求項１または２に記載のスーパースカラマイクロプロセッサ。
【請求項４】
前記ポインタを発生するよう構成されたリオーダバッファ（２１６）をさらに含む、請求項１、２または３に記載のスーパースカラマイクロプロセッサ。
【請求項５】
前記ポインタが、リオーダバッファタグを伝達し、前記リオーダバッファタグが前記リオーダバッファ（２１６）内の命令を唯一的に識別する、請求項４に記載のスーパースカラマイクロプロセッサ。
【請求項６】
前記ロード/ストアバッファ（３１０）が、前記ロード/ストアバッファ内に記憶される各命令のためのリオーダバッファタグを記憶するよう構成され、かつ前記ロード/ストアユニット（３２２）が、前記ロード/ストアバッファ（３１０）内に記憶される前記リオーダバッファタグを、ポインタバス（２５５，２５６）上を伝達される前記リオーダバッファタグと比較するよう構成される、請求項５に記載のスーパースカラマイクロプロセッサ。
【請求項７】
前記ロード/ストアバッファ内に記憶される前記リオーダバッファタグが、前記ポインタバス（２５５，２５６）上を伝達される前記リオーダバッファタグに等しいクロックサイクルにおいて、前記ロード/ストアユニットが前記ロード/ストアバッファ（３１０）内に記憶される前記リオーダバッファタグに関連する前記命令を完了するようさらに構成されている、請求項６に記載のスーパースカラマイクロプロセッサ。
【請求項８】
前記ロード/ストアユニット（２２２）が、命令が完了されるクロックサイクルにおいて、前記リオーダバッファに信号を送るようさらに構成されている、請求項６に記載のスーパースカラマイクロプロセッサ。
【請求項９】
データキャッシュ（２２４）をさらに含み、前記ロード/ストアユニット（２２２）が、前記ストア命令に関連する前記リオーダバッファタグが前記ポインタ上を伝達される前記リオーダバッファタグに等しいクロックサイクルにおいて、前記データキャッシュ（２２４）内へストア命令に関連するデータを記憶するようさらに構成される、請求項６に記載のスーパースカラマイクロプロセッサ。
【請求項１０】
データキャッシュ（２２４）をさらに含み、前記ロード/ストアユニット（２２２）が、記憶場所を前記データキャッシュ（２２４）内へ転送させるようにさらに構成され、かつ前記記憶場所が、前記データキャッシュ内においてミスするロード命令に関連し、かつ前記記憶場所が、前記ロード命令に関連する前記リオーダバッファタグが前記ポインタバス（２５５，２５６）上を伝達される前記リオーダバッファタグに等しいクロックサイクルにおいて、転送されるようになっている、請求項６に記載のスーパースカラマイクロプロセッサ。
【請求項１１】
前記ロード/ストアユニット（２２２）が、前記データキャッシュ（２２４）にヒットするロード命令を実行するクロックサイクルにおいて、前記ロード/ストアユニット（２２２）が前記リオーダバッファ（２１６）に信号を送るようさらに構成される、請求項１０に記載のスーパースカラマイクロプロセッサ。
【請求項１２】
前記前記ロード/ストアユニット（２２２）が、複数の前記ポインタを受けるようさらに構成される、先行の請求項のいずれかに記載のスーパースカラマイクロプロセッサ。
【請求項１３】
前記ロード/ストアユニット（２２２）が、クロックサイクルにおいて、前記ロード/ストアバッファに記憶される複数の命令を完了するようさらに構成される、先行の請求項のいずれかに記載のスーパースカラマイクロプロセッサ。
【請求項１４】
前記複数の命令および前記複数のポインタの数が等しい、先行の請求項のいずれかに記載のスーパースカラマイクロプロセッサ。
【発明の詳細な説明】
発明の背景
発明の分野
本発明は、スーパースカラマイクロプロセッサの分野に関し、かつより詳細には、分岐予測誤りの回復およびロード/ストアリタイアに関する。
関連技術の説明
スーパースカラマイクロプロセッサは、可能な限り短いクロックサイクルで、複数の命令を同時に実行することにより、高性能を発揮する。本明細書中に使用する、「クロックサイクル」という用語は、スーパースカラマイクロプロセッサが、そのパイプライン内で採用されるさまざまなタスク（命令の処理等）を完了するのに必要とする時間の間隔を指す。高性能スーパースカラマイクロプロセッサにとって重要な２つの特徴は、分岐予測およびアウト・オブ・オーダ（追い越し）実行である。
分岐予測は、ある分岐命令が実行される前に、その分岐命令が選択する方向を投機的に選択するプロセスである。マイクロプロセッサは、順次命令を実行する。すなわち、第１の命令が実行されると、実行される第２の命令は、その第１の命令に隣接するメモリに記憶された命令ということになる。しかしながら分岐命令によって、実行される次の命令が次の順次命令または分岐命令によって特定される他の記憶場所にある命令とすることが可能である。分岐命令により特定される記憶場所は、一般的に、この分岐の「標的」と呼ばれる。どの命令を選択して実行するかは、一般に、その分岐命令がテストする条件による。例示的なテストされる条件は、レジスタに記憶された値であり、そのレジスタが０を含んでいる場合にはその分岐の標的が選択され、かつレジスタが０を含んでいない場合には、次の順次命令が選択される。なお、分岐命令には条件をテストしないものもある。無条件の分岐は、常に標的の経路を選択し、一般に次の順次記憶場所に特定的にコード化される命令はない。
分岐は、コンピュータプログラムにおいて比較的頻繁に発生する。多数の命令を同時に実行し続けるためには、スーパースカラマイクロプロセッサは、キャッシュ分岐命令がどの方向（またはどの「経路」）を選択するかを予測する、すなわち次の順序かまたは標的かを予測するのである。マイクロプロセッサは、そこで、予測した経路にある命令を投機的に実行する。スーパースカラマイクロプロセッサが、分岐命令が選択した経路を「誤って予測」した場合、投機的に実行された結果は廃棄され、正しい経路がフェッチされ実行される。分岐予測のメカニズムについてはさまざまなものが周知である。
分岐命令の予測誤りが発生するため、予測誤り回復機構が必要となる。予測誤り回復機構は、キャッシュから訂正されたフェッチアドレスをフェッチさせ、関連の命令が命令処理パイプラインにディスパッチされるようにする。訂正されたフェッチアドレスは、分岐命令が、次に実行する命令と見つけるために発生するアドレスである。予測誤り回復機構は、比較的少ないクロックサイクルで完了し、予測誤りが判別されるとすぐに正しい命令が実行されるようにする必要がある。一般に、予測誤りが発見されるクロックサイクルと訂正された命令が実行を開始するクロックサイクルとの間のクロックサイクルがアイドルサイクルである。スーパースカラマイクロプロセッサの全体的性能は、同プロセッサが持つ必要があるアイドルサイクルの数だけ劣化する。
スーパースカラマイクロプロセッサは、発展を遂げ、同時に実行する命令の数もますます増大している。しかしながら、分岐命令は引続き同じ頻度でプログラム内に発生する。したがって、スーパースカラマイクロプロセッサが実現する分岐予測スキームでは、所与のクロックサイクルで複数の分岐予測が未決となる可能性がある（すなわち複数の分岐経路を予測しても、これらが関連の分岐を実行することによって有効とならない）。所与のクロックサイクルで複数の分岐命令を実行する可能性がありかつしたがって複数の予測誤りが検出される可能性がある場合、予測誤り回復機構はより複雑なものとなる。しかしながら、比較的少ないクロックサイクルで完了するという予測誤り回復機構の重要性が減じられるわけではない。比較的数の少ないクロックサイクルで完了し、かつ正確に複数の分岐予測誤りを解決することができる予測誤り回復機構が求められている。
分岐予測とともに、スーパースカラマイクロプロセッサの性能を改善することを意図するもう１つの特徴は、追い越し（アウト・オブ・オーダ）実行である。追い越し実行は、プログラムの順序において特定の命令の前にある命令が実行されるクロックサイクルの前のクロックサイクルでその特定の命令を実行するプロセスである。プログラムの順序においてその前の命令により発生される結果に依存しない命令は、その前の命令が実行されるまで、その実行を遅らせる必要がない。この命令はいつかは実行する必要があるので、この命令を、さもなければクロックサイクルにおけるアイドルサイクルとなってしまったかもしれないパイプライン段において実行することにより、性能が向上するという利点がある。
残念ながら、ある種の命令については追い越しで実行することはできない。プログラムは、命令が順序通りに実行されることを仮定しており、したがって追い越し実行は、プログラムに対して透明な態様で採用される必要がある。追い越しで実行できない命令の例としては、データキャッシュおよびストア命令をミス（miss）するロード命令がある。ストア命令は、レジスタを修飾する他の命令と違い、メモリを修飾する。ストア命令が追い越しでデータキャッシュを修飾することは可能とされ、かつその後それに先立つ分岐予測誤りまたは割込によってキャンセルされると、そのデータキャッシュは間違ったデータを含むことになる。したがって、ストア命令は、それに先立つ命令が実行されてしまうまで、データキャッシュまたはメインメモリを修飾することができないようにしなければならず、ストア命令はキャンセルされない。データキャッシュをミスするロード命令も、以下に説明するように、追い越しで実行することができない。
データキャッシュは、スーパースカラマイクロプロセッサと同じシリコン基板上に実現されるかまたはその付近に結合されている。データキャッシュは、メインシステムメモリ（コンピュータシステムにおいて採用された場合）のコピーを記憶するよう構成された高速メモリである。ロードまたはストア命令が、データキャッシュにアクセスすると、このアクセスは「ヒット」または「ミス」のいずれかであることがわかる。アクセスがヒットである場合、関連のデータが現在データキャッシュに記憶されていることになる。アクセスがミスの場合、関連のデータはメインメモリにあることになる。データキャッシュを読出す場合に、ロード命令は追い越しで実行することが可能となる。しかしながら、ロード命令がデータキャッシュをミスする場合、順序に沿って実行する必要がある。さもなければ、ロードミスがメインメモリからの転送を開始しその後キャンセルされる可能性がある。このアクセスが使用する外部バスの帯域幅が無駄になる。さらに、転送されているデータによって、キャッシュからラインが除去されてしまう可能性がある。その除去されたラインが後に必要となった場合に、メインメモリから転送する必要が生じ、外部バスの帯域幅がさらに無駄にされることになる。したがって、データキャッシュミスのロード命令は、追い越しで実行すべきでない。データキャッシュミスであるロード命令およびストア命令を正しく順序決めする機構が必要である。
発明の概要
上にその概略を述べた問題は、本発明に従うロード/ストアユニットおよびリオーダバッファを採用するスーパースカラマイクロプロセッサにより、その大部分が解決される。ロード/ストアユニットは、リタイアの状態にない最も古い未処理（outstanding）の命令を識別する１対のポインタを受ける。ロード/ストアユニットは、これらポインタと、データキャッシュをミスするロード命令およびストア命令のデコーダバッファタグとを比較する。関連の命令がデータキャッシュおよびメインメモリシステムをアクセスする前に、一致を見つける必要がある。ポインタは最も古い未処理の命令を指示するので、ポインタ−比較機構によって、データキャッシュをミスするロード命令およびストア命令についての順序決め機構が提供される。
一実施例において、ロード/ストア順序決め機構によって、ロード/ストアユニットとリオーダバッファとの間の最小限のハンドシェイクで、順序決めを行なうことができるため有利である。１対のポインタをロード/ストアユニットとリオーダバッファとの間の通信信号に加える。より少ない数のインターフェイス信号で、ロード/ストアユニットおよびリオーダバッファの設計を簡素化するが、必要な機能は性能の劣化なしに提供される。
要約すれば、本発明は、ロードおよびストア命令を実行するよう構成されたロード/ストアユニットを備えるスーパースカラマイクロプロセッサを想起する。このロード/ストアユニットは、最も古い未処理の命令を識別する能力があるポインタを受ける構成になっている。ロード/ストアユニット内には、ロードおよびストアタイプの未決の命令を記憶するよう構成されたロード/ストアバッファが含まれる。
【図面の簡単な説明】
本発明の他の目的および利点については、以下の詳細な説明を読みかつ添付の図面を参照することによって、より明らかになるであろう。
図１は、本発明による機能ユニット、ロード/ストアユニットおよびリオーダバッファを採用するスーパースカラマイクロプロセッサのブロック図である。
図２は、機能ユニット、ロード/ストアユニットおよびリオーダバッファを示すスーパースカラマイクロプロセッサのより詳細な部分ブロック図である。
図３Ａは、図２に示す機能ユニットのうちの１つの図であり、本発明の実施例の要素を示す図である。
図３Ｂは、図２のロード/ストアユニットの図であり、本発明の実施例の要素を示す図である。
図３Ｃは、図２に示す分岐検出および最古未処理検出ブロックの一部として用いられるタグルーチング装置の図である。
図３Ｄは、本発明の実施例の典型的なリオーダバッファエントリの図である。
本発明にはさまざまな変形および代替形態が可能であるが、その特定の実施例につき図面に例示しかつ以下により詳細に説明することにする。しかしながら、図面およびその詳細な説明は、本発明を特定の開示された形態の限定するものではなく、逆に、添付の請求項に規定される本発明の精神および範囲内にあるすべての変更例、等価物および代替例を包含することを理解されたい。
発明の詳細な説明
ここで、図面を参照して、図１は、スーパースカラマイクロプロセッサ２００のブロック図であり、同マイクロプロセッサ２００は、本発明による機能ユニット２１２Ａから２１２Ｆ、ロード/ストアユニット２２２およびリオーダバッファ２１６を含む。図１の実施例に示すとおり、スーパースカラマイクロプロセッサ２００は、命令キャッシュ２０４に結合された、プリフェッチ/プリデコードユニット２０２および分岐予測ユニット２２０を含む。命令整列ユニット２０６は、命令キャッシュ２０４と複数のデコードユニット２０８Ａから２０８Ｆ（デコードユニット２０８と総称する）との間に結合される。各デコードユニット２０８Ａから２０８Ｆは、それぞれのリザベーションステーションユニット２１０Ａから２１０Ｆ（リザベーションステーション２１０と総称する）に結合され、各リザベーションステーション２１０Ａから２１０Ｆは、それぞれの機能ユニット２１２Ａから２１２Ｆ（機能ユニット２１２と総称する）に結合される。デコードユニット２０８、リザベーションステーション２１０および機能ユニット２１２は、リオーダバッファ２１６、レジスタファイル２１８およびロード/ストアユニット２２２にさらに結合される。データキャッシュ２２４が、最終的にロード/ストアユニット２２２に結合されるところが示され、ＭＲＯＭユニット２０９が命令整列ユニット２０６に結合されているところが示される。
一般に、命令キャッシュ２０４は、デコードユニット２０８へのディスパッチに先立ち命令を一時的に記憶するために設けられる高速キャッシュメモリである。一実施例において、命令キャッシュ２０４は、各１６バイト（１バイトは８ビットから構成される）の線に構成された３２キロバイトまでの命令をキャッシュするよう構成されている。動作の際には、プリフェッチ/プリデコードユニット２０２を介してメインメモリ（図示せず）からコードをプリフェッチすることにより命令キャッシュ２０４へ命令コードが付与される。なお、命令キャッシュ２０４を、セットアソシアティブ、フリーアソシアティブまたはダイレクトマップド構成で実現することも可能である。
プリフェッチ/プリデコードユニット２０２は、メインメモリから命令コードをプリフェッチして命令キャッシュ２０４に記憶するために設けられる。一実施例において、プリフェッチ/プリデコードユニット２０２は、メインメモリからの６４ビット幅のコードを命令キャッシュ２０４内にバーストするように構成される。もちろん、さまざまな特定のコードプリフェッチ技術およびアルゴリズムをプリフェッチ/プリデコードユニット２０２に採用することも可能である。
プリフェッチ/プリデコードユニット２０２は、メインメモリから命令をフェッチし、命令コードの各バイトに関連する３つのプリデコードビット、すなわちスタートビット、エンドビットおよび「機能」ビットを発生する。プリデコードビットは、各命令の境界を示すタグを構成する。プリデコードタグは、所与の命令がデコードユニット２０８により直接デコードできるか否かまたはＭＲＯＭユニット２０９により制御されるマイクロコードプロシージャーを呼出すことにより実行する必要があるかどうか等についての付加的な情報も伝達し得るが、これについて以下により詳細に説明することにする。
表１は、プリデコードタグのコード化を示す。表内に示すとおり、所与のバイトがある命令の第１のバイトである場合、そのバイトのスタートビットがセットされる。このバイトが命令の最後のバイトである場合、そのバイトのエンドビットがセットされる。特定の命令をデコードユニット２０８で直接デコードすることができない場合、その命令の第１のバイトに関連する機能ビットがセットされる。一方、その命令がデコードユニット２０８で直接的にデコードすることが可能な場合、その命令の第１のバイトに関連する機能ビットがクリアされる。オペコードが第１のバイトである場合、特定の命令の第２のバイトの機能ビットがクリアされ、かつオペコードが第２のバイトである場合に同機能ビットがセットされる。なお、オペコードが第２のバイトである場合には、第１のバイトはプレフィックスバイトである。命令バイト番号３から８の機能ビットの値は、そのバイトがＭＯＤＲＭ、またはＳＩＢバイトのいずれであるかを示し、また、そのバイトが変位（ディスプレイスメント）または即値データを含んでいるかどうかを示す。
0003717524.tif 000002
先にも述べたとおり、一実施例において、ｘ８６命令セット内のあるいくつかの命令が、デコードユニット２０８により直接的にデコードされ得る。これらの命令は、「高速経路」命令と呼ぶ。ｘ８６命令セットの残りの命令は、「ＭＲＯＭ命令」と呼ぶ。ＭＲＯＭ命令は、ＭＲＯＭユニット２０９を呼出すことにより実行される。ＭＲＯＭ命令に出合うと、ＭＲＯＭユニット２０９は、この命令を分析し確定した高速経路命令のサブセットに逐次化して、希望する動作を実施する。高速経路命令として分類される例示的ｘ８６命令の一覧を以下に示し、かつ高速経路およびＭＲＯＭ命令両方の取扱い方法についての説明を行なう。
命令整列ユニット２０６を設けて、命令キャッシュ２０４からのさまざまなバイト長の命令を、デコードユニット２０８Ａから２０８Ｆにより構成される固定の発行位置へチャネルする。命令整列ユニット２０６は、命令コードを、命令キャッシュ２０４により規定されるライン内の命令のスタートバイトの場所に応じて、指定されたデコードユニット２０８Ａから２０８Ｆへ命令コードをチャネルするよう構成される。一実施例においては、所与の命令がディスパッチされ得る特定のデコードユニット２０８Ａから２０８Ｆが、その命令のスタートバイトの場所およびそれ以前に命令があれば、その命令のスタートバイトの場所に依存する。あるバイト場所で始まる命令は、ある所定の発行位置にのみ発行されるようにさらに制限してもよい。詳細については以下に説明する。
機能ユニット２１２、ロード/ストアユニット２２２およびリオーダバッファ２１６の詳細な説明を行なう前に、図１に例示するスーパースカラマイクロプロセッサ２００内で採用される他のサブシステムに関する概要を説明する。図１に示す実施例については、デコードユニット２０８の各々が、上に述べた所定の高速経路命令をデコードするためのデコード回路系を備える。さらに、各デコードユニット２０８Ａから２０８Ｆは、変位および即値データを対応のリザベーションステーションユニット２１０Ａから２１０Ｆへルーチングする。デコードユニット２０８からの出力信号は、機能ユニット２１２のビットコード化実行命令およびオペランドアドレス情報、即値データおよび／または変位データを含む。
図１のスーパースカラマイクロプロセッサは、追い越し実行を支持し、したがって、リオーダバッファ２１６を使用して、レジスタの読出および書込動作のための元のプログラムシーケンスを追跡し、レジスタの再ネーミングを行なって、投機的命令の実行および分岐予測誤り回復を図り、かつ正確な除外を容易にする。当業者には理解されるとおり、リオーダバッファ２１６内の一時記憶場所は、レジスタの更新を含む命令のデコードの際にリザーブされ、それにより投機的レジスタの状態が記憶される。リオーダバッファ２１６は、投機的な結果が有効とされかつレジスタファイルに書込まれる際にバッファの「底」へ移動する、ファースト・イン・ファースト・アウト構成で実現することが可能なので、バッファの「上部」に新たなエントリのための余裕ができる。リオーダバッファ２１６は他の特定の構成でも可能であり、それについて以下に詳細に説明する。分岐予測が誤っている場合、誤り予測経路に沿って投機的に実行された命令の結果を、これら結果がレジスタファイル２１８に書込まれる前に、バッファにおいて無効にすることができる。
デコードユニット２０８Ａから２０８Ｆの出力で与えられる命令および即値データのビットコード化実行は、それぞれのリザベーションステーションユニット２１０Ａから２１６Ｆへ直接的にルーチングされる。一実施例において、各リザベーションステーションユニット２１０Ａから２１０Ｆは、対応の機能ユニットへの発行を待っている未決の命令３つまでについての命令情報（すなわちビットコード化実行ビット、オペランド値、オペランドタグおよび／または即値データ）を保持することができる。なお、図１に示す実施例については、各デコードユニット２０８Ａから２０８Ｆが、専用のリザベーションステーションユニット２１０Ａから２１０Ｆと関連しており、かつ各リザベーションステーションユニット２１０Ａから２１０Ｆも同様に専用の機能ユニット２１２Ａから２１２Ｆに関連する。よって、６つの専用「発行位置」が、デコードユニット２０８、リザベーションステーションユニット２１０および機能ユニット２１２により構成される。デコードユニット２０８Ａを介して位置０を発行するために整列されかつディスパッチされる命令は、リザベーションステーションユニット２１０Ａへ送られかつその後機能ユニット２１２Ａに送られて実行される。同様に、整列しかつデコードユニット２０８Ｂに対しディスパッチされる命令は、リザベーションステーションユニット２１０Ｂへ送られかつ機能ユニット２１２Ｂに送られ、かつ以下同様である。
特定の命令のデコードに際し、要求されるオペランドがレジスタ場所であれば、レジスタアドレス情報が、同時にリオーダバッファ２１６およびレジスタファイル２１８へルーチングされる。当業者であれば、ｘ８６レジスタファイルが、８個の３２ビットリアルレジスタ（すなわち一般にＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＢＰ、ＥＳＩ、ＥＤＩおよびＥＳＰと呼ばれる）を含むことが理解されるであろう。これについて以下により詳細に説明する。リオーダバッファ２１６は、これらレジスタの内容を変更して、追い越し実行を可能にする結果のための一時記憶場所を含む。リオーダバッファ２１６の一時記憶場所は、各命令についてリザーブされており、デコードの際に、リアルレジスタのうちの１つの内容を修飾する。したがって、特定のプログラムの実行の際にさまざまなポイントで、リオーダバッファ２１６は、所与のレジスタの投機的に実行された内容を含む１以上の場所を有することが可能である。所与の命令のデコーダに引続いて、リオーダバッファ２１６が、その所与の命令におけるオペランドとして使用されるレジスタに割当てられた先立つ場所を有していることがわかると、リオーダバッファ２１６は、対応のリザベーションステーションに対し、１）最も最近に割当てられた場所における値かまたは２）その値が先の命令を最終的に実行することになる機能ユニットによりまだ生成されていない場合には最も最近割当てられた位置に関するタグを進める。リオーダバッファが、所与のレジスタについてリザーブされた場所を有している場合には、オペランドの値（またはタグ）が、レジスタファイル２１８ではなくリオーダバッファ２１６から与えられる。リオーダバッファ２１６において必要とされるレジスタについて何らの場所がリザーブされていない場合には、この値はレジスタファイル２１８から直接的に取込まれる。オペランドがメモリの場所に対応している場合には、このオペランドの値がロード/ストアユニット２２２を介してリザベーションステーションユニットへ付与される。
適切なリオーダバッファの実現に関する詳細については、「スーパースカラマイクロプロセッサ設計」と題する刊行物、マイク・ジョンソン、プレンティスホール、イングルウッド、クリフス、ニュージャージー州、１９９１年（“Superscalar Microprocessor Design”by Mike Johnson，Prentice-Hall，Englewood Cliffs，New Jersey，1991）およびウィット他（Witt，et al.）による、１９９３年１０月２９日出願の、同時係属中で、本件と同一譲受人の特許出願「高性能スーパースカラマイクロプロセッサ」（High Performance Superscalar Microprocessor）、連続番号第０８／１４６，３８２号に記載されている。これらの文献について、その全文にわたりここに引用により援用する。
リザベーションステーションユニット２１０Ａから２１０Ｆは、対応の機能ユニット２１２Ａから２１２Ｆが投機的に実行することなる命令情報を、一時的に記憶するために設けられる。先ほども述べたとおり、各リザベーションステーションユニット２１０Ａから２１０Ｆは、未決の情報３つまでについての命令情報を記憶することができる。６つのリザベーションステーション２１０Ａから２１０Ｆの各々が、対応の機能ユニットにより投機的に実行されるビットコード化実行命令を記憶する場所およびオペランドの値を含む。特定のオペランドが入手可能でなければ、そのオペランドに関するタグがリオーダバッファ２１６から付与されかつ結果が発生されるまで（すなわち先の命令の実行が完了するまで）、対応のリザベーションステーション内に記憶される。なお、機能ユニット２１２Ａから２１２Ｆのうちの１つにより命令が実行される場合、その命令の結果は、その結果を待っているいずれかのリザベーションステーションユニット２１０Ａから２１０Ｆに直接的に送られかつ同時にその結果はリオーダバッファ２１６を更新するためにも送られる（この技術は一般に「結果フォワーデイング」（result forwarding）と呼ばれる）。いずれかの要求されたオペランド（単数または複数）の値が入手可能になった後、命令が機能ユニットに対して発行されて実行される。すなわち、リザベーションステーションユニット２１０Ａから２１０Ｆのうちの１つの中にある未決の命令に関連するオペランドに、要求されたオペランドを修飾する命令に対応するリオーダバッファ２１６内の先立つ結果の値の場所でタグされている場合、その命令はその先立つ命令に関するオペランドの結果が入手されるまで、対応の機能ユニット２１２に対して発行されない。したがって、命令が実行される順序は、元のプログラム命令シーケンスの順序と同じでない可能性がある。リオーダバッファ２１６は、リード・アフター・ライトの関係が発生するような状況において、データの一貫性が確実に維持されるようにする。
一実施例において、機能ユニット２１２の各々は、加算および減算の整数の算術演算および変位、回転、論理演算および分岐演算を実行するよう構成されている。なお、浮動小数点ユニット（図示せず）も採用して、浮動小数点演算に対応するようにしてもよい。
機能ユニット２１２の各々も、条件分岐命令の実行に関する情報を分岐予測ユニット２２０に付与する。分岐予測が正しくない場合、分岐予測ユニット２２０は、命令処理パイプラインにエントリした、予測が誤った分岐に続く命令をフラッシュして、プリフェッチ/プリデコードユニット２０２に、命令キャッシュ２０４またはメインメモリから必要な命令をフェッチさせる。なお、このような場合、ロード/ストアユニット２２２およびリオーダバッファ２１６において投機的に実行されかつ一時的に記憶されたものを含め、この予測が誤っている分岐命令の後に発生する元のプログラムシーケンスにおける命令の結果は廃棄される。適切な分岐予測機構の例示的構成については周知である。機能ユニット２１２と分岐予測ユニット２２０との間の通信に関する詳細について以下に説明することにする。
機能ユニット２１２が生成する結果は、レジスタの値が更新されている場合にはリオーダバッファ２１６に送られ、かつ記憶場所の内容が変更されている場合には、ロード/ストアユニット２２２へ送られる。この結果がレジスタ内に記憶される場合には、リオーダバッファ２１６は、命令がデコードされた場合にレジスタの値についてリザーブされた場所にこの結果を記憶する。先に述べたとおり、結果は、未決の命令が、先行する命令の結果を待っている可能性があるリザベーションステーションユニット２１０Ａから２１０Ｆに同報で送られ、必要なオペランドの値が得られる。
データキャッシュ２２４は、ロード/ストアユニット２２２とメインメモリサブシステムとの間で転送されるデータを一時的に記憶するために設けられる高速キャッシュメモリである。一実施例において、データキャッシュ２２４は、８キロバイトまでのデータを記憶する能力がある。もちろん、データキャッシュ２２４を、セットアソシアティブ構成を含む、さまざまな特定のメモリ構成に実現してもよい。
一般に、ロード/ストアユニット２２２は、機能ユニット２１２Ａから２１２Ｆとデータキャッシュ２２４との間にインターフェイスを提供する。一実施例において、ロード/ストアユニット２２２は、未処理のロードまたはストアメモリ動作に関するデータおよびアドレス情報について１６の記憶場所を備えるロード/ストアバッファで構成される。機能ユニット２１２は、ロード/ストアユニット２２２へのアクセスを調停する。ロード/ストアユニット２２２は、ロードメモリ動作の、未決のストアメモリ動作に対する依存度をチェックして、データの一貫性が確実に維持されるようにする。
ここで、図２を参照して、図２は、機能ユニット２１２、リオーダバッファ２１６およびロード/ストアユニット２２２を示すブロック図である。図２は、ここに示すユニット間の接続を詳細に示しかつまたリオーダバッファ２１６を詳細に示す。２つの機能ユニット（２１２Ａおよび２１２Ｆ）について示すが、同様の接続が他の機能ユニット２１２の各々について行なわれている。リオーダバッファ２１６は、分岐ポインタバス２５０上で分岐ポインタを機能ユニット２１２へ伝達する。機能ユニット２１２は、分岐予測ユニット２２０へアドレスを伝達する、訂正されたフェッチアドレスバス２５１にも接続される。リオーダバッファ２１６は、最も古いポインタバス対２５５および２５６上でロード/ストアユニット２２２へ最も古いポインタの対（すなわち最も古いポインタとその次に古いポインタ）を伝達する。命令の脈において用いられる場合には、「最も古い」という用語は、有効な結果を未だ有してはいないが、リオーダバッファ内のそれに先立つ各命令が有効な結果を有している命令を意味する。
一般に、分岐ポインタバス２５０上でリオーダバッファ２１６が伝達する分岐ポインタは、リオーダバッファ２１６内に現在記憶される最も古い分岐命令を識別する。機能ユニット２１２は、分岐ポインタを、現在実行している命令を示すポインタに比較する。この比較によって一致が示されると、関連の機能ユニットは、その訂正されたフェッチアドレスを訂正されたフェッチアドレスバス２５１上で分岐予測ユニット２２０へ伝達することができる。機能ユニットは、関連の分岐命令が、分岐予測ユニット２２０により誤って予測されたものである場合には、訂正されたフェッチアドレスを伝達する。最も古いポインタバス２５５および２５６上を伝達される最も古いポインタは、リタイアの状態にない最も古い命令を示す。ロード/ストアユニット２２２は、最も古いポインタと、ロード/ストアユニット２２２内のロード/ストアバッファ内に記憶される未処理のロードミスおよびストア命令を識別する。比較によって一致が示される場合、対応のロードまたはストア命令を、関連する記憶場所をキャッシュ（必要であれば）へ転送し、かつストア情報に関するデータをデータキャッシュへ記憶するかまたはロード情報に関連するデータを標的レジスタにフォワード（送る）することにより行なわれる。したがって、分岐予測回復のための機構およびプログラムオーダにおけるデータキャッシュミスおよびストア命令であるロード命令を行なうための機構が作り出される。ある命令を実行した結果がリオーダバッファ２１６に伝達されている場合には、その命令は「リタイアの状態」であると判定される。「リタイア」（retirement）という語は、リオーダバッファ２１６からの命令を取除くことを意味する。
分岐ポインタは、分岐検出器回路２５３を用いてリオーダバッファ２１６により発生される。分岐検出器回路２５３は、リオーダバッファアレイ２５２内の最も古い命令を記憶するあるいくつかのエントリをスキャンする。一実施例において、スキャンされるエントリの数は６である。リオーダバッファアレイ２５２は、先の図１に関して説明したスーパースカラマイクロプロセッサ２００において現在未処理の命令（すなわちディスパッチされたが未だリタイアの状態にない命令）に関連する情報を記憶する。リオーダバッファアレイ２５２内の最も古い６つのエントリ内の最も古い分岐命令の関連する「リオーダバッファタグ」（リオーダバッファ２１６内の命令を一意的に識別する）は、分岐検出器回路２５３により選択されかつ分岐ポインタにより伝達される。したがって、本実施例における分岐ポインタはリオーダバッファタグである。
この実施例において、分岐検出器回路２５３は１つのタグルーチング装置を採用する。タグルーチング装置については、図３Ｃを参照して以下により詳細に説明するが、一般には各エントリに関連するビットに依存してリオーダバッファアレイ２５２の複数のエントリからリオーダバッファタグを選択する装置である。分岐検出器回路２５３の場合には、このビットが分岐としての命令を示す。最も古いエントリが分岐である場合には、その関連のリオーダバッファタグが機能ユニット２１２へルーチングされる。同様に、２番目に古いエントリが分岐でありかつ最も古いエントリが分岐でない場合には、その２番目に古いエントリのタグが機能ユニット２１２へルーチングされ、かつ残りのスキャンされるリオーダバッファエントリについても同様である。分岐検出器回路２５３によりスキャンされるエントリの中に分岐命令が見つからない場合には、無効タグが機能ユニット２１２へルーチングされる。
最も古いポインタバス２５５および２５６上を伝達される最も古いポインタの対は、最も古い未処理検出器回路２５４（これ以降検出器回路２５４とする）により発生される。分岐検出器回路２５３と同様、検出器回路２５４は、リオーダバッファ２１６内の最も古い命令を記憶するあるいくつかのエントリをスキャンする。リタイアの状態にない最も古い命令および２番目に古い命令に関連するリオーダバッファのタグが検出器回路２５４によりロード/ストアユニット２２２へルーチングされる。ある例では、スキャンされるリオーダバッファエントリの数は１２である。
一実施例において、検出器回路２５４は、下に図３Ｃを参照して説明するとおり、２つのタグルーチング装置を含む。第１のタグルーチング装置は、分岐検出器回路２５３のタグルーチング装置と類似するリオーダバッファタグをルーチングするが、ただしリオーダバッファタグを選択するのに使用されるリオーダバッファアレイ２５２からのビットが、関連の命令がリタイアの状態にないことを示す点が異なる。第２のタグルーチング装置は、リタイアの状態にない命令に関連する２番目に古いリオーダバッファタグをルーチングするよう構成されている。したがって、第２のタグルーチング装置に付与される選択ビットは、リタイアの状態にない命令を示すビットと、その命令が第１のタグルーチング装置により選択されていないことを示すビットとの論理積である。この選択ビットは、図３Ｃを参照して以下にも説明するとおり、タグルーチング装置により優先的にコード化される。
この実施例において、ロード/ストアユニット２２２は、リオーダバッファへロード命令に関連するデータを返す必要がありかつリオーダバッファに対し、記憶が行なわれたことを示すために必要である。データキャッシュにおいてヒットするロード命令が、リオーダバッファへ関連のデータを送ることにより完了する。しかしながら、データキャッシュをミスし（かつデータを返すことができない）ロード命令およびストア命令は、それらに関連するリオーダバッファのタグが最も古いポインタのうちの１つ上に示されるまでロード/ストアバッファ内に留まる。その後、ロード/ストアユニットは、メインメモリからデータキャッシュ内へデータを転送するためのロードミス命令またはデータキャッシュ内にデータを記憶するためのストア命令を選択することができる。ロード/ストアユニットが、これらの動作を行なった場合、そのデータを返すかまたはその記憶が完全である（それぞれ）ことを示す。引続くクロックサイクルで、最も古いポインタがリオーダバッファ２１６内の次に古い命令へ移動する。したがって、データキャッシュをミスするロード命令およびストア命令は、順序通りに実行される。
他の実行例において、分岐ポインタバス２５０および最も古い未処理のバス２５５は、同じポインタを各クロックサイクルにおいて伝達するように動作する。したがって、分岐ポインタバス２５０および最も古い未処理のバス２５５は、この実施例については共通のバス内に組合せることができ、かつ分岐検出器回路２５３を除くことができる。以下に説明するとおり、機能ユニット２１２は、分岐命令を行なっている場合に有効な訂正されたフェッチアドレスを発生し、かつそれ以外の場合には無効な訂正されたフェッチアドレスを発生する。したがって、分岐ポインタバス２５０が非分岐命令を伝達し、かつポインタが現在実行されている命令を示すポインタと一致する場合、分岐予測ユニット２２０は無効な訂正されたフェッチアドレスを受けることになる。
さてここで図３Ａを参照して、機能ユニット２１２のうちの１つの内部論理回路が示される。機能ユニット２１２は、各々、現在のクロックサイクルにおいて実行されている命令のリオーダバッファタグを記憶するレジスタ３００を備えて構成される。レジスタ３００は、分岐ポインタバス２５０にも接続される比較器回路３０１に接続される。したがって、比較器回路３０１は、分岐ポインタバス２５０上を伝達される分岐ポインタを、レジスタ３００内に記憶されるリオーダバッファタグに比較する。分岐ポインタバス２５０は、関連の命令が分岐である場合にのみ有効なリオーダバッファタグを伝達するので、比較器の出力が、分岐命令が機能ユニットにより実行されているクロックサイクルにおいて一致を示す。比較器３０１の出力はトライステートドライバ回路３０３のイネーブルに結合される。トライステートドライバ回路３０３は、実行されている分岐命令が予測を誤った分岐である場合に訂正されたフェッチアドレスを発生し、かつこの分岐が正確に予測されるかまたは命令が分岐でない場合に有効なアドレスを発生するよう構成される、訂正されたアドレス論理ブロック３０２に結合される。トライステートドライバ回路は、比較器回路３０１が一致を示す場合には訂正されたアドレス論理ブロック３０２が生成するアドレスを伝達し、かつ比較器回路３０１が一致を示さない場合には何ものも伝達しない。したがって、１つの機能ユニットのみが所与のクロックサイクル内でポインタバス２５０上を伝達されるポインタに一致するリオーダバッファタグを含むことができるため、複数の機能ユニット２１２は、同じ訂正されたフェッチアドレスバス２５１に接続することができる。分岐予測ユニット２２０は、訂正されたフェッチアドレスに対してのみ作用しかつ無効なアドレスが無視されるように、無効なアドレスを認識するよう構成される。なお、機能ユニット２１２は、他の命令同様、分岐命令を実行した結果をリオーダバッファ２１６に報告する。
スーパースカラマイクロプロセッサ内に機能ユニット２１２を採用することにより、完了するまでのクロックサイクルが比較的少なくてすむ分岐予測誤り回復機構が実現され得る。分岐が実行されかつ予測誤りであることがわかるクロックサイクルが、訂正されたフェッチアドレスが分岐予測ユニット２２０へ伝達されるサイクルである。それに引続くサイクルにおいて、訂正されたフェッチアドレスが命令キャッシュにアクセスしかつ関連の命令がディスパッチされることになる。さらに、分岐予測誤り回復機構は、最も古い分岐命令に関連する訂正されたフェッチアドレスを伝達することにより複数の分岐予測を取扱う。
ここで、図３Ｂを参照して、ロード/ストアユニット２２２についてより詳細に示す。ロード/ストアユニット２２２は、リオーダバッファ２１６からの最も古いポインタバス２５５および２５６を受けかつデータキャッシュ２２４をアクセスするためのロードまたはストア命令を選択する。一実施例において、ロード/ストアユニット２２２は、各クロックサイクルにおいてデータキャッシュをアクセスするための、２つまでのロード/ストア命令を選択する。ロード/ストアユニット２２２は、未処理のロードおよびストア命令に関連する情報を記憶するよう構成されたロード/ストアバッファ３１０を備えて構成される。ロード/ストアバッファ３１０内に記憶される情報に含まれるのは、図３Ｂに示すとおり、各命令のリオーダバッファタグである。各エントリについてのリオーダバッファタグは、比較器回路３１２および３１３を用いて、最も古いポインタに比較される。データキャッシュ入力選択論理ブロック３１１（これ以降選択論理ブロック３１１とする）は、比較器の出力およびロード/ストアバッファ３１０の内容を受け、データキャッシュ２２４について命令を２つまで発生する。選択論理ブロック３１１は、関連の比較器回路が最も古いポインタと一致を示すまで、データキャッシュをミスすることがわかっているロード命令を選択しない。同様に、選択論理ブロック３１１は、関連の比較器回路が最も古いポインタとの一致を示すまで、ストア命令を選択しない。一実施例において、選択論理ブロック３１１は、データキャッシュ２２４をアクセスするための命令を選択するための優先スキームを採用する。最も高い優先順位が、最も古いポインタバス２５５上を転送される最も古いポインタに一致するリオーダバッファタグを有するロードミスまたはストア命令に与えられる。中間の優先順位が最も古いポインタバス２５６上を転送される最も古いポインタに一致するリオーダバッファタグを有するロードミスまたはストア命令に与えられる。最も低い優先順位は、未だデータキャッシュ２２４をアクセスしていないロード命令に与えられる。
最も古いポインタを生成するスーパースカラマイクロプロセッサにおいてロード/ストアユニット２２２を採用することにより、データキャッシュ２２４をミスするロード命令およびストア命令を順序通りに実行する。それらのリオーダバッファタグが最も古いポインタに伝達されて、それらがリタイアの状態にない最も古い未処理の命令であることを示すまで、これら２つのタイプの命令のいずれもデータキャッシュ２２２またはメインメモリサブシステムにアクセスを許されない。したがって、このロードまたはストア命令に先立つ命令の各々は完了されかつこのロードまたはストア情報を実行することができる。
ここで図３Ｃを参照して、分岐検出器回路２５３（図２に示す）内で採用されるタグルーチング装置３２０および最も古い未処理検出器回路２５４（図２に示す）の実施例を示す。タグルーチング装置３２０は、リオーダバッファアレイ２５２からのリオーダバッファタグを受けるマルチプレクサ３２１を含む。キャッシュリオーダバッファタグに関連するのは、このタグがタグルーチング装置３２０によりルーチングを検討されるべきである場合、論理１を伝達する信号である。図３Ｃに示す実施例は、マルチプレクサ３２１に結合される信号線３２２が示すとおり、関連する信号が論理１である場合に、最も古いタグを選択する優先順位コード化機構である。このコード化機構は、その関連する信号が論理１を伝達しかつ最も古いタグに関連する信号が論理０を伝達する場合に、２番目に古いタグを選択する。したがって、信号線３２３（２番目に古いタグを選択する）がＡＮＤゲート３２４により発生される。最も古いタグに関連する信号およびその次に古いタグに関連する信号の双方が論理０を伝達しかつ３番目に古いタグに関連する信号が論理１を伝達する場合には、３番目に古いタグが選択される。したがって、信号線３２５（３番目に古いタグを選択する）が、ＡＮＤゲート３２６により発生される。マルチプレクサ３２１用の付加的な選択信号も同様に発生される。
ここで図３Ｄを参照して、リオーダバッファアレイ２５２のための例示的リオーダバッファエントリ３３０を示す。タグエントリ３３０は、４つのフィールド、すなわちリオーダバッファタグフィールド３３１、分岐ビット３３２、リタイアビット３３３および命令フィールド３３４を有する。命令フィールド３３４は、このリオーダバッファエントリ用の命令とともにリオーダバッファ２１６の特定の実施例が必要とし得る他のデータを含む。リオーダバッファタグフィールド３３１は、リオーダバッファタグを記憶しかつ分岐検出器回路２５３に接続されかつアレイにおける最も古い命令を含むよう構成されるリオーダバッファアレイエントリのための最も古い未処理検出器回路２５４にも結合される。分岐ビット３３２は、リオーダバッファエントリに記憶される命令が分岐命令である場合には論理１を記憶し、それ以外の場合には、論理０を記憶する。分岐ビット３３２は、分岐検出器回路２５３のタグルーチング装置のための選択信号のうちの１つを構成する。リタイアビット３３３は、リオーダバッファアレイエントリ３３０に記憶される命令がリタイアの状態にある場合には論理１を記憶し、かつそれ以外の場合には論理０を記憶する。リタイアビット３３３を反転したものを使用し、最も古い未処理検出回路２５４内のタグルーチン装置３２０の選択信号の１つを形成する。
さらに他の実施例においては、クロックサイクルにおいて、機能ユニット２１２の各々が他の機能ユニット２１２の各々に対し、分岐ポインタに対する比較結果および予測誤りがあった分岐命令を実行しているか否かを連絡する。分岐ポインタに対する一致が機能ユニット２１２内で検出されない場合には、図４のフロー図に示すように、優先順位スキームが呼出される。優先順位スキームは、以下のような訂正されたアドレスバス２５１を駆動する機能ユニットを選択する。すなわち、機能ユニット２１２Ａは、予測誤りがある分岐命令を含んでいる場合には訂正されたフェッチアドレスバス２５１を駆動し、機能ユニット２１２Ｂは、予測誤りがある分岐命令を含みかつ機能ユニット２１２Ａが予測誤りがある分岐命令を含んでいない場合には、訂正されたフェッチアドレスバス２５１を駆動し、機能ユニット２１２Ｃは、予測誤りがある分岐命令を含みかつ機能ユニット２１２Ａまたは機能ユニット２１２Ｂのいずれもが予測に誤りがある分岐命令を含んでいない場合には、訂正されたフェッチアドレスバス２５１を駆動し、かつ残りの機能ユニットについても同様である。このようにして、訂正されたフェッチアドレスバス２５１が、各クロックサイクルにおいて値を伝達する。
なお、本発明の他の実施例においては、さまざまな数の機能ユニットおよびロード/ストアユニットを採用することが可能である。さらに、分岐ポインタおよび最も古いポインタの数は実施例ごとに変更することができる。ロード/ストアユニット２２２は、この実施例においては、統合されたロード/ストアバッファを備えて構成されるが、他の実施例においては、ロード/ストアユニット２２２を、複数のロード/ストアバッファを備えて構成してもよく、またロードおよびストア命令を別々のバッファに記憶することもできる。
上記の開示により、分岐予測誤り回復およびロード/ストア順序決めのための機構について説明した。分岐予測誤り回復機構は、予測誤りが発見されると完了に１クロックサイクルを要し、分岐予測誤りによるアイドルクロックサイクルの数を最小にすることにより高性能化を図る。ロード/ストア順序決め機構によって、ユニット間のハンドシェイク量が最小限で、ロード/ストアの順序決めが図られる。この最小限のハンドシェイクによって、インターフェイス信号の数が低減されかつスーパースカラマイクロプロセッサの設計が簡素化される。
上の開示を十分に理解すれば、当業者にはさまざまな変更および修正が明らかであろう。以下の請求項は、そのようなすべての変更および修正を包含するものと解釈されることを意図する。
【図１】
0003717524.tif 000003
【図２】
0003717524.tif 000004
【図３Ａ】
0003717524.tif 000005
【図３Ｂ】
0003717524.tif 000006
【図３Ｃ】
0003717524.tif 000007
【図３Ｄ】
0003717524.tif 000008