(57)【特許請求の範囲】
【請求項１】
スーパースカラマイクロプロセッサ（２００）における非ブロッキングのロードメモリ動作を実現するためのロード／ストアユニット（２２２）であって、
未完了のメモリ動作に関する情報と、セットされると対応するメモリ動作がデータキャッシュミスをすることを示すミスビットとを、入力ポートから受取って記憶する複数の記憶ロケーションを含むバッファ（１００４）と、
前記バッファ内の前記複数の記憶ロケーションのうちの特定の１つに記憶される前記未完了のメモリ動作に関する情報を選択するように構成され、前記複数の記憶ロケーションのうちの前記特定の１つに記憶された前記情報に対応するデータアクセスコマンドをデータキャッシュ（２２４）に与えるように構成される出力制御ユニット（１００５）とを含み、
前記出力制御ユニット（１００５）は、前記ミスビットがセットされておらず、かつ、前記複数の記憶ロケーションのうちの前記特定の１つに対応するメモリ動作よりもプログラムの順番において前である複数のメモリ動作に対応する前記複数の記憶ロケーションの中の各々には前記ミスビットがセットされている、前記複数の記憶ロケーションのうちの前記特定の１つに記憶された情報を選択するように構成されることを特徴とする、ロード／ストアユニット。
【請求項２】
前記バッファ（１００４）は記憶ロケーションの線形アレイとして構成される、請求項１に記載のロード／ストアユニット。
【請求項３】
前記出力制御ユニット（１００５）は固定優先順位方式に従って選択するように構成される、請求項１または２に記載のロード／ストアユニット。
【請求項４】
前記出力制御ユニット（１００５）は、
投機的ではないストアメモリ動作には高い優先順位が与えられ、
投機的ではなく、かつ前記データキャッシュ（２２４）への以前のアクセスを介して前記データキャッシュ（２２４）をミスすることが知られているメモリ動作には中間の優先順位が与えられ、
以前に前記データキャッシュ（２２４）にアクセスしたことがないロードメモリ動作には低い優先順位が与えられる、方式に従って、選択するよう構成される、請求項１、２または３に記載のロード／ストアユニット。
【請求項５】
前記出力制御ユニット（１００５）はリオーダバッファ（２１６）により提供されるタグを備えるように構成され、前記タグは前記メモリ動作の投機的状態を示す、請求項４に記載のロード／ストアユニット。
【請求項６】
前記出力制御ユニット（１００５）は、前記タグにより投機的であることが示されている以前のロードメモリ動作に対応する記憶ロケーションに前記ミスビットがセットされているクロックサイクルの間、ロードメモリ動作に対応する前記複数の記憶ロケーションのうちの記憶ロケーションから情報を選択するように構成される、請求項５に記載のロード／ストアユニット。
【請求項７】
前記複数の記憶ロケーションのうちの１つが前記入力ポートからメモリ動作に関する情報を受取る第２のクロックサイクルの間に、前記複数の記憶ロケーションの１つに記憶された前記ミスビットがクリアされる、請求項１から６のいずれかに記載のロード／ストアユニット。
【請求項８】
前記複数の記憶ロケーションの各々に記憶される前記ミスビットは、前記データキャッシュ（２２４）がメインメモリから転送される複数のバイトで更新される第２のクロックサイクルの間にクリアされる、請求項１から７のいずれかに記載のロード／ストアユニット。
【請求項９】
前記バッファ（１００４）は、投機的で、かつ関連付けられた前記ミスビットがセットされた状態のミスメモリ動作に関する情報を、前記メモリ動作がメインメモリから前記データキャッシュ（２２４）へ複数のバイトを転送するのに選択されるクロックサイクルまで記憶するよう構成される、請求項１から８のいずれかに記載のロード／ストアユニット。
【請求項１０】
ロード／ストアバッファ（１００４）に記憶された情報を有する第１のメモリ動作が投機的であることを示しているクロックサイクルの間に、前記ロード／ストアバッファ（１００４）に記憶される第２のメモリ動作に関する情報を選択して、データキャッシュ（２２４）にアクセスする方法であって、
前記第１のメモリ動作が投機的であることを示し、かつ、前記ロード／ストアバッファにおける第１のメモリ動作に関する情報に関連付けられたミスビットがデータキャッシュミスしたことを示していることを判定するステップと、
前記第１のメモリ動作が投機的でありかつミスビットがキャッシュミスを示すと判定したことに応じて第２のメモリ動作に関する情報を選択するステップと、
選択された前記第２のメモリ動作に関する情報に対応するデータアクセスコマンドを前記データキャッシュに与えるステップとを含むことを特徴とする、方法。
【請求項１１】
前記第１のメモリ動作に関するデータアクセスコマンドが前記データキャッシュ（２２４）にアクセスし、ミスすることがわかったクロックサイクルの間、前記第１のメモリ動作に関連のある前記ミスビットをセットするステップをさらに含む、請求項１０に記載の方法。
【請求項１２】
前記第１のメモリ動作に関する情報が前記ロード／ストアバッファ（１００４）に記憶されるクロックサイクルの間に、前記第１のメモリ動作と関連のある前記ミスビットをクリアするステップをさらに含む、請求項１０または１１に記載の方法。
【請求項１３】
複数のバイトがメインメモリから前記データキャッシュ（２２４）へ転送されるクロックサイクルの間、前記第１のメモリ動作と関連のある前記ミスビットをクリアするステップをさらに含む、請求項１０、１１または１２に記載の方法。
【請求項１４】
前記第１のメモリ動作が非投機的であることが示され、かつ、複数のバイトをメインメモリから前記データキャッシュ（２２４）へ転送するよう選択されるクロックサイクルまで、前記第１のメモリ動作に関する情報を前記ロード／ストアバッファ（１００４）内に記憶するステップをさらに含む、請求項１０から１４のいずれかに記載の方法。
【請求項１５】
前記クリアするステップの後の第２のクロックサイクルの間、前記データキャッシュ（２２４）にアクセスするための前記第１のメモリ動作に関する前記情報を選択するステップをさらに含む、請求項１３に記載の方法。
【発明の詳細な説明】
発明の背景
１．発明の分野
この発明は、スーパースカラマイクロプロセッサに関し、より特定的にはスーパースカラマイクロプロセッサのロード／ストアユニットに関する。
２．背景技術の説明
ＥＰ−Ａ−０  ４３６  ０９２は、データの一貫性を確実にするため、追越し（アウト・オブ・シーケンス）フェッチ制御を利用する、データおよび命令記憶部を有するプロセッサを開示する。
Ｍ・ジョンソン(Johnson)の『スーパースカラマイクロプロセッサの設計（Superscalar Microprocessor Design）』の第８章「メモリのデータフロー（Memory Dataflow）』は、ロードおよびストアの性能を改善する既知の方法を開示する。
スーパースカラマイクロプロセッサは、多数の命令を同時に実行しようと試みることによって、コンピュータシステムにおいて高性能を達成する。スーパースカラマイクロプロセッサが高性能を達成する重要な方策の１つは、命令の投機的実行を使用することによる。ここでは、実行中のプログラムにより命令の実行が必要とされているとわかる前にその命令が実行される場合、その命令は投機的に実行されるという。たとえば、もしプログラム命令シーケンス内でその命令の前に分岐命令があり、プログラム内のどの経路をその分岐が選択するかをプロセッサがまだ計算していない場合、命令が投機的に実行されるであろう。スーパースカラマイクロプロセッサには、これ以外にも多くの投機的な命令の実行例がある。
ｘ８６アーキテクチャが広範に使用されかつ受入れられているため、マイクロプロセッサ設計者は、このアーキテクチャを実現するスーパースカラマイクロプロセッサを作るべく努力している。このアーキテクチャをサポートすることにより、設計者は、８０８６、８０２８６、８０３８６および８０４８６などのこれまでの実現例およびこれらの実現例用に書かれた大量のソフトウェアとの旧版互換性を有利に維持する。
スーパースカラマイクロプロセッサは、コンピュータシステム内で用いられる。これらのコンピュータシステムは、固定ディスクドライブ、ビデオディスプレイアダプタ、フロッピィディスクドライブなどを含むさまざまな他の装置を含むのが典型的である。また、コンピュータシステム内には、マイクロプロセッサが要求するまで、マイクロプロセッサが実行する命令およびマイクロプロセッサが操作するデータを記憶する比較的大きなメインメモリが必要である。このメモリは、ここでは「ＤＲＡＭ」と呼ぶ、ダイナミックランダムアクセスメモリチップで構成されるのが典型的である。ＤＲＡＭ内の記憶ロケーションの要求からＤＲＡＭチップの出力においてそのデータが利用可能になるまでに必要とされる時間の量を、ここではＤＲＡＭアクセス時間と呼ぶが、これは著しい減少を見てはいない。むしろ、半導体作製技術が改良されるに伴い、ＤＲＡＭ製造業者は、単一のモノリシックチップ上で利用可能なＤＲＡＭメモリの量を増加させることを選択してきた。現在のＤＲＡＭ内の単一のメモリロケーションは以前のＤＲＡＭ内のメモリロケーションよりもはるかに高速で反応できるが、より多数の利用可能なロケーションがＤＲＡＭの出力に負荷をかけ、そのためＤＲＡＭデバイスの世代間でＤＲＡＭアクセス時間は実質的に同一になっている。しかし、スーパースカラマイクロプロセッサ設計者は、より高速のクロック速度で動作し同時により多くの命令を実行することができるマイクロプロセッサを作り出すため、半導体製造技術の改良を使用している。ここで使用する「クロックサイクル」または「クロック速度」とは、マイクロプロセッサが命令実行、メモリ要求などのそのさまざまな機能を実行する時間の単位である。クロックサイクルの終わりに、そのサイクルの結果（たとえば命令実行手続きの結果など）がセーブされ、それによって、マイクロプロセッサの他の部分（すなわち続くパイプ段）が次のクロックサイクルにおいてこの結果を利用して次の操作または記憶することが可能である。上に説明した現在のマイクロプロセッサとＤＲＡＭメモリとの速度差のために、マイクロプロセッサのメモリ帯域幅要求は増加してきたが、利用可能なメモリ帯域幅は増加していない。言換えると、より最近のマイクロプロセッサは以前のマイクロプロセッサよりも実質的に高速で動作し、これまでの型のＤＲＡＭメモリと同様の速度で動作する（より大きなアプリケーションおよびデータセットが可能である）より大きなＤＲＡＭメモリに結合される。この構成においては、多くの場合マイクロプロセッサはメモリから供給されるべき命令およびデータを持つこととなり、そのコンピュータシステムの全体性能を減じるという、大きな性能の問題が認められる。
スーパースカラマイクロプロセッサ設計者たちは、低速のメモリにアクセスする問題を解決するため努力している。その解決策は一部分、マイクロプロセッサの設計の中にキャッシュを設けることを含んでいる。キャッシュは、マイクロプロセッサのコアと同じモノリシックチップ上に含まれるかまたはその近くに結合される小型の高速メモリである。マイクロプロセッサが最近使用したデータおよび命令は、典型的にはこれらのキャッシュ内に記憶され、その命令およびデータがある期間にわたってマイクロプロセッサによりアクセスされないと、その後メモリに再び書込まれる。命令およびデータがキャッシュから取除かれるまでに必要とされる時間の量およびそこで使用される特定のアルゴリズムは、マイクロプロセッサの設計によって大きく異なっており、広く知られている。データおよび命令は、組合せキャッシュまたはユニファイドキャッシュなどとさまざまに呼ばれる、共用キャッシュ内に記憶されるであろう。また、データおよび命令は、典型的には命令キャッシュおよびデータキャッシュと呼ばれる明確に別個のキャッシュ内に記憶されてもよい。
キャッシュは、「ライン」のアレイに編成されるのが典型的である。ここで使用する「ライン」という語は、メインメモリからのデータまたは命令の連続したバイトを記憶するため構成されるいくつかの数のメモリロケーションを指す。マイクロプロセッサがキャッシュにアクセスするとき、アドレスの一部がキャッシュを「インデックスする」ため使用される。キャッシュをインデックスするとは、要求されているアドレスの内容を探索して、アクセスするラインまたはラインの組を選択することである。もしこのようにして調べられたラインの１つが、メインメモリ内の要求されたアドレスにあるデータまたは命令を含んでいれば、このアクセスは「ヒット」であるという。もし上述のインデックスにしたがって選択されたラインがいずれもメインメモリ内の要求されたアドレスにあるデータまたは命令を含んでいなければ、このアクセスは「ミス」であるという。２つ以上のラインが所与のインデックスに関連付けられるようにキャッシュが構成されるとき、そのラインは典型的にはインデックスの「ウェイ」と呼ばれる。
いくつかのキャッシュは、多数のアクセスを同時に処理することができる。この態様で構成されるキャッシュは、「バンク」を有するであろうし、その場合キャッシュメモリのセルは別個にアクセス可能な部分に構成される。したがって、１つのアクセスが１つのバンクをアドレス指定することができ、第２のアクセスで第２の孤立したバンクをアドレス指定することができる。
スーパースカラマイクロプロセッサ設計者たちが、同時に実行される命令の数を増加させ続けるに伴い、大きい低速のメモリの関連する性能の問題に対する解決策としてはキャッシュは不十分なものとなっている。第１に、キャッシュはメインメモリよりもはるかに小さい。したがって、マイクロプロセッサが要求するデータまたは命令のいくつかが現在キャッシュ内に存在しないというのは常に真である。キャッシュを構築するために必要とされるチップおよび／またはシリコンの面積は高価であり、したがって、キャッシュを大きくするとコンピュータシステム全体のコストが著しく上がる。第２に、キャッシュは、典型的には、マイクロプロセッサが以前に要求したデータおよび命令を保持する。したがって、マイクロプロセッサが新しいプログラムを開始するかまたはあるメモリロケーションに初めてアクセスするときは常に、メインメモリへの相当数のアクセスが必要である。ここで説明するようなスーパースカラマイクロプロセッサの文脈で使用されるときは、アクセスとは、メモリロケーションの内容に対する要求またはメモリロケーションの内容の変更のいずれかを意味する。第３に、現代のマイクロプロセッサにおいては、キャッシュ内のデータまたは命令にアクセスするために必要な時間の量が、ＤＲＡＭアクセス時間がそうであったのと同じ態様で、性能の問題となっている。
キャッシュに関連する問題のいくつかを解決しようとする試みにおいて、いくつかのマイクロプロセッサは、近い将来にそれがアクセスするであろうメモリロケーションを推定しメインメモリにそれらの場所への要求を行わせるという、「プリフェッチアルゴリズム」を実現している。これらの方式はこれまでさまざまな程度の成功を収めている。しかし、これらの機構はある状況においてはマイクロプロセッサの性能に対し有害な影響を及ぼす可能性がある。相当数の誤った推定がなされるたびに、マイクロプロセッサはそれが必要としないメモリロケーションの内容と、キャッシュ内のデータまたは命令とを置換えることになる。これは今度は、プリフェッチされたデータにより置換えられたデータを検索するためのメモリ参照を引き起こすことになる。
メインメモリからのデータの取出しは、典型的には、スーパースカラマイクロプロセッサにおいてはロード命令を使用することによって行われる。この命令は明示的なものであってもよく、その場合ロード命令は実行されるソフトウェア内に実際にコード化される。またこの命令は暗黙のものであってもよく、その場合いくつかの他の命令（たとえば加算）が直接その入力オペランドの部分としてメモリロケーションの内容を要求する。
命令の結果をメインメモリに記憶し直すことは、典型的には、スーパースカラマイクロプロセッサにおいてはストア命令を使用することにより行われる。上述のロード命令と同様、ストア命令も明示的なものであっても暗黙のものであってもよい。ここでは、「メモリ動作」とは、ロード命令および／またはストア命令を指すために使用される。
現在のスーパースカラマイクロプロセッサにおいては、メモリ動作は、１以上のロード／ストアユニット内で実行されるのが典型的である。これらのユニットは、命令を実行し、要求されたデータを発見しようと試みて（もしあれば）データキャッシュにアクセスし、アクセスの結果を処理する。上に説明したように、データキャッシュへのアクセスは典型的には２つの結果、すなわちミスまたはヒットの１つである。
ロード／ストアユニットはまた、典型的には、メモリ動作に関連する他の特別な条件を扱う。たとえば、アクセスは「非整列」かまたは「誤整列」かもしれない。メモリ動作は、典型的にはバイトで測られる、特定のサイズのデータを要求または変更する。特定のメモリ動作についてのサイズは多くに依存しており、マイクロプロセッサが実装されるアーキテクチャおよびメモリ動作を生ぜしめた特定の命令を含む等に依存する。メモリ動作により計算されたアドレスが、その下位の２進けた（すなわち「ビット」）位置に、要求されたデータのサイズに等しくなるまで２を乗じた数の和から１を引いたもの以上の個数の０を有していなければ、そのメモリ動作は非整列または誤整列という。必要とされる最下位ゼロの数を計算するための式は、
２(メモリ要求のバイトサイズ)−１
である。非整列アクセスは、時に、データキャッシュおよび／またはメモリへの多数のアクセスを必要とする。
マイクロプロセッサが実行するほとんどの命令は最終的に、それらのオペランドを、メインメモリまたはデータキャッシュから受け取る。特定の命令が受け取るオペランドは、メモリから直接要求されたものかもしれず、または、メモリからオペランドを要求した何らかの他の命令の結果であるかもしれない。したがって、多数のプログラムを実行するときのスーパースカラマイクロプロセッサの性能は、ロード／ストアユニットがメモリ動作をどの程度速く実行できるかに大きく依存する。多くのスーパースカラマイクロプロセッサにおいては、ロード／ストアユニットはクロックサイクル当り１メモリ動作を実行する。また、もしメモリ動作がデータキャッシュでミスしたことが発見されれば、ロード／ストアユニットはしばしば、ミスされたアドレスがメインメモリから転送されるまで命令の実行を中止する。したがって、データキャッシュでミスしたメモリ動作は、たとえ次のメモリ動作がデータキャッシュでヒットであろうともそれらの実行を「ブロックする」。次のメモリアクセスをブロックすると、多くの場合、メモリアクセスからデータを要求する命令をブロックなしの場合ほど迅速に実行できないので、スーパースカラマイクロプロセッサの性能に有害な影響を及ぼす。
いくつかのスーパースカラマイクロプロセッサでは、データキャッシュとメインメモリインターフェイスとの間のバッファにミス要求を与えることによって、上述のブロックの問題を解決しようと試みる。バッファは、たとえば、特定の数のエントリの待ち行列として構成されてもよい。このバッファ機構は確かにブロックの問題の解決を助けるのだが、バッファおよびそれに関連する制御機能を実現するためにマイクロプロセッサチップ上により大きなシリコン面積が必要になる。さらに、キャッシュへのアクセスと現在待ち行列にあるアクセスとの間に比較器の形で複雑性が導入される。これらの比較器がないと、同一のミスラインへの複数の要求がバッファに入り得ることになり、メインメモリへのおよびメインメモリからの多数の転送が生じ、性能に悪影響が及ぼされる。必要なのはメインメモリへのまたはメインメモリからの１つの転送のみである。結果的に、同一のラインにアクセスする他のメモリ動作はそれらのデータをデータキャッシュからフェッチするであろう。もし、所与のラインの、メインメモリへのまたはメインメモリからの２つ以上の転送が待ち行列にあれば、これらの無関係な転送がメインメモリに対するさらなる要求を遅延させ、性能に有害な影響を与えるであろう。このようなバッファ解決策を実現するスーパースカラマイクロプロセッサの例示的形態は、ＩＢＭコーポレーションおよびモトローラ・インコーポレイテッド製造のPowerＰＣ６０１マイクロプロセッサおよびデジタル・イクイップメント・コーポレーション製造のAlpha２１１６４マイクロプロセッサを含む。
スーパースカラマイクロプロセッサの性能に直接影響するであろうロード／ストアユニットのもう１つの要素は、オペランドまたはデータキャッシュへのアクセスの機会を待っているメモリ動作を記憶するバッファエントリの数である。多くの実現例において、バッファとして待ち行列構造が使用される。典型的には、１つのバッファがロードメモリ動作のために設けられ、他の別個のバッファがストアメモリ動作のために設けられる。これらのバッファの１つが一杯になったときは、次のそのタイプのメモリ動作がバッファに入れるようになるまで、マイクロプロセッサ全体の命令実行の機能を停止させることとなり、性能に悪影響を及ぼす。メモリ動作は、ロード／ストアユニットにディスパッチされるとき、これらのバッファに置かれ、データキャッシュへのアクセスが試みられるとき、またはその後のある時点で取り除かれる。メモリ動作への動作の文脈で使用されるときは、「取り除く」という語は、そのメモリ動作を含む記憶ロケーションを無効にする作用を指す。無効にする作用は、たとえば、その記憶ロケーションに関連付けられる特定のビットの状態を変化させるかまたは新しいメモリ動作をその記憶ロケーションに重ね書きすることによって達成されるであろう。ロード／ストアユニットのための設計時間の多くは、これらのバッファが一杯になるために生じるプロセッサの機能停止時間の量が最小限になるよう、これらのバッファのサイズを選ぶことに費やされる。この選択は、バッファの実現のためにシリコン区域が必要であり、そのため、好きなだけ多数の待ち行列を使用することができないという事実によりさらに複雑になる。さらにこの選択は、一般のソフトウェアプログラムにおける命令の組合せは常に変化しており、より古いプログラムを研究して待ち行列のサイズを選んでも最適な設計とはならないであろうという事実によってさらに複雑になる。
発明の概要
これまでに概観した問題は、この発明による、非ブロッキングロード選択という方策を実現するロード／ストアバッファを備えるロード／ストアユニットを用いるスーパースカラマイクロプロセッサにより大部分解決される。一実施例において、ロードメモリ動作およびストアメモリ動作の両方を中に記憶することができるロード／ストアバッファが設けられる。選択されるメモリ動作が、データキャッシュでミスであったことがわかっておりバッファ内に記憶されているメモリ動作の次にプログラムの順番においてなっている場合も含めて、メモリ動作は、データキャッシュへのアクセスのためロード／ストアバッファから選択される。
一実施例において、この発明の装置は、データキャッシュでミスしたメモリ要求がメインメモリ要求を行うことができるようになる時などまで、メモリ要求を記憶するよう構成される。この態様において、ミスしたメモリ動作がメインメモリ要求を行う機械を待っている間に、データキャッシュへのアクセスの機会を待っているであろう他のメモリ動作は、そのようなアクセスを行うであろう。したがって、この発明の装置は先述の「ブロック」の問題を解決する。
メインメモリへの要求を行うためには１回のミスは許され、その要求に関連付けられたラインがデータキャッシュに記憶されると、ミスはデータキャッシュに再びアクセスすることができる。新たに受け取られたラインにそのアドレスが含まれているものが、次にデータキャッシュヒットとして完了するであろう。この実現例においては、以前の実現例においてデータキャッシュでのミスを記憶するために使用されたバッファが、これらのバッファの動作のために必要ないくつかの制御論理とともに取り除けるという効果を持つ。特に、ミスしたライン当り１回にアクセスを制限するために必要とされていた比較器が取り除かれる。代わって、ミスは、メインメモリからキャッシュへ１つのミスが転送されるまで、単一化されたバッファ内にとどまり、それから再びデータキャッシュを試みる。もし、メモリ動作がそのアクセス後もミスのままであれば、バッファにとどまり続け、メインメモリ転送に対する他の要素が開始されるであろう。
概括すると、この発明が目指すのはバッファおよび出力制御ユニットを含むロード／ストアユニットである。バッファは、未決の（pending）メモリ動作に関する情報を記憶するよう構成される複数の記憶ロケーションを含む。バッファはさらに、メモリ動作情報を受け取るよう構成される入力ポートを含む。バッファはまた、データアクセスコマンドをデータキャッシュへ伝えるよう構成されるデータキャッシュポートを含む。バッファ内の複数の記憶ロケーションの各々にミスビットが関連付けられる。関連付けられた記憶ロケーション内に記憶されたメモリ動作がデータキャッシュにアクセスしミスであることがわかるクロックサイクルの間、このミスビットがセットされる。
この発明の出力制御ユニットはバッファに結合され、データキャッシュにアクセスするためバッファ内の複数の記憶ロケーションの１つの中に記憶されるメモリ動作を選択するよう構成される。出力制御ユニットはさらに、動作に関連付けられるデータキャッシュアクセスコマンドをデータキャッシュに向けるよう構成される。
この発明は更に、ロード／ストアバッファ内に記憶された第１のメモリ動作が投機的であり、データキャッシュにおいてミスであると知られるクロックサイクルの間に、データキャッシュへのアクセスのためロード／ストアバッファ内に記憶される第２のメモリ動作を選択するための、２つのステップを含む方法を企図する。第１のステップは、前記第１のメモリ動作に関連付けられるミスビットがセットされていることを判定するため第１のメモリ動作を調べることを含む。第２のステップは、前記第１のメモリ動作に関連付けられる前記ミスビットがセットされているので、前記第２のメモリ動作を選択することである。
【図面の簡単な説明】
以下の詳細な説明を読み添付の図面を参照することによって、この発明の他の目的および利点が明らかとなるであろう。
図１は、データキャッシュ、６つの機能ユニットおよび６つのデコードユニットに結合されるロード／ストアユニットを含むスーパースカラマイクロプロセッサのブロック図である。
図２は、データキャッシュに結合される、この発明によるロード／ストアユニットのブロック図である。
図３は、この発明によるロード／ストアバッファのブロック図である。
図４Ａは、図３に示すロード／ストアバッファの記憶ロケーションの図である。
図４Ｂは、図３に示すロード／ストアバッファに特定の情報が到達するときおよびロード／ストアバッファの動作に関連する特定の他の機能を示すいくつかのクロックサイクルの図である。
図４Ｃは、ロード／ストアバッファ内のストアにより現在示されているアクセスメモリロケーションをロードするためのストアデータフォワーディングを示すブロック図である。
図４Ｄは、この発明のロード／ストアユニットのさまざまな区域のレイアウトを示すブロック図である。
この発明にはさまざまな変更および代替的形態が考えられるが、その特定の実施例を図に例として示しここで詳細に説明する。しかし、この図面および詳細な説明はこの発明を特定の開示される形態に限定することを意図するのではなく、逆に、添付の請求の範囲により規定されるこの発明の精神および範囲内にあるすべての変更例、均等物および代替案をカバーするよう意図されることが理解されねばならない。
発明の詳細な説明
次に図面を参照し、図１は、この発明によるロード／ストアユニット２２２を含むスーパースカラマイクロプロセッサ２００のブロック図を示す。図１の実施例に図示するように、スーパースカラマイクロプロセッサ２００は、命令キャッシュ２０４に結合されるプリフェッチ／プリデコードユニット２０２および分岐予測ユニット２２０を含む。命令整列ユニット２０６が、命令キャッシュ２０４と複数のデコードユニット２０８Ａ−２０８Ｆ（集合的にデコードユニット２０８と呼ぶ）との間に結合される。各デコードユニット２０８Ａ−２０８Ｆは、それぞれのリザベーションステーションユニット２１０Ａ−２１０Ｆ（集合的にリザベーションステーション２１０と呼ぶ）に結合され、各リザベーションステーションユニット２１０Ａ−２１０Ｆは、それぞれの機能ユニット２１２Ａ−２１２Ｆ（集合的に機能ユニット２１２と呼ぶ）に結合される。デコードユニット２０８、リザベーションステーション２１０、および機能ユニット２１２はさらに、リオーダバッファ２１６、レジスタファイル２１８およびロード／ストアユニット２２２に結合される。データキャッシュ２２４は最終的にロード／ストアユニット２２２に結合されることが図示され、ＭＲＯＭユニット２０９が命令整列ユニット２０６に結合されることが図示される。
一般に、命令キャッシュ２０４は、命令がデコードユニット２０８にディスパッチされる前に命令を一時的に記憶するため設けられる高速キャッシュメモリである。一実施例において、命令キャッシュ２０４は、各々１６バイト（各バイトは８ビットからなる）のラインに編成される命令コードを３２キロバイトまでキャッシュするよう構成される。動作の間、プリフェッチ／プリデコードユニット２０２を通じて（図示しない）メインメモリからコードをプリフェッチすることによって、命令キャッシュ２０４に命令コードが与えられる。命令キャッシュ２０４は、セット・アソシアティブ構成、フル・アソシアティブ構成またはダイレクトマップ構成で実現できるであろうことが注意される。
プリフェッチ／プリデコードユニット２０２は、命令キャッシュ２０４内での記憶のためメインメモリから命令コードをプリフェッチするために設けられる。一実施例において、プリフェッチ／プリデコードユニット２０２は、メインメモリからの６４ビット幅コードを命令キャッシュ２０４にバーストするよう構成される。プリフェッチ／プリデコードユニット２０２にさまざまな特定のコードプリフェッチング技術およびアルゴリズムを用いることができることが理解される。
プリフェッチ／プリデコードユニット２０２は、メインメモリから命令をフェッチするに伴い、命令コードの各バイトに関連付けられる３つのプリデコードビット、すなわち、開始ビット、終了ビットおよび「機能」ビットを発生する。プリデコードビットは、各命令の境界を示すタグを形成する。以下にさらに詳細に説明するように、プリデコードタグはまた、所与の命令がデコードユニット２０８により直接デコードされうるか否か、または、命令をＭＲＯＭユニット２０９により制御されるマイクロコード手続きを起動することにより実行しなければならないかどうかなどの付加的な情報を運ぶであろう。
表１は、プリデコードタグのエンコードの一例を示す。表に示すように、もし所与のバイトが命令の最初のバイトであれば、そのバイトに対し開始ビットがセットされる。もしそのバイトが命令の最後のバイトであれば、そのバイトに対し終了ビットがセットされる。もし特定の命令を、デコードユニット２０８により直接デコードすることができなければ、その命令の最初のバイトに関連付けられる機能ビットがセットされる。他方、もし命令を、デコードユニット２０８により直接デコードできれば、その命令の最初のバイトに関連付けられる機能ビットがクリアされる。特定の命令の第２のバイトに対する機能ビットは、もしオペレーションコード（opcode）が最初のバイトであればクリアされ、オペレーションコードが第２のバイトであればセットされる。オペレーションコードが第２のバイトである場合には、最初のバイトはプレフィックスバイトであることが注意される。命令バイト番号３から８についての機能ビットの値は、そのバイトがＭＯＤＲＭバイトであるかまたはＳＩＢバイトであるか、およびそのバイトが変位データまたは即値データを含むかどうかを示す。
0003732234.tif 000002
先述のように、一実施例において、ｘ８６命令セットのある命令は、デコードユニット２０８により直接デコードされるであろう。これらの命令は、「ファストパス」命令と呼ばれる。ｘ８６命令セットのうち残りの命令は、「ＭＲＯＭ命令」と呼ばれる。ＭＲＯＭ命令は、ＭＲＯＭユニット２０９を起動することによって実行される。ＭＲＯＭ命令に遭遇するとき、ＭＲＯＭユニット２０９は所望の動作を遂行するため、規定されたファストパス命令のサブセットへと命令を構文解析し逐次化する。ファストパス命令に類別される例示的なｘ８６命令のリストならびにファストパス命令およびＭＲＯＭ命令の両方を処理する態様の説明が以下にさらに示される。
命令整列ユニット２０６は、デコードユニット２０８Ａ−２０８Ｆにより形成される固定された発行位置に、命令キャッシュ２０４からの可変バイト長命令をチャネリングするまたは「経路分けする（funnel）」ために設けられる。命令整列ユニット２０６は、命令キャッシュ２０４によって境界を定められるライン内の命令の開始バイトの場所に依存して、指定されるデコードユニット２０８Ａ−２０８Ｆに命令コードをチャネリングするよう構成される。一実施例において、所与の命令がディスパッチされるであろう特定のデコードユニット２０８Ａ−２０８Ｆは、その命令の開始バイトの場所およびもしあればその前の命令の開始バイトの場所の両方の依存する。あるバイト場所で始まる命令の発行は、ただ１つの予め定められた発行位置にさらに限定されるであろう。以下に特定の詳細を示す。
ロード／ストアユニット２２２の詳細な説明に進む前に、図１の例示的なスーパースカラマイクロプロセッサ２００内で用いられる他のサブシステムに関する一般的局面について説明する。図１の実施例について、各デコードユニット２０８は、上に説明した予め定められたファストパス命令をデコードするためのデコード回路を含む。さらに、各デコードユニット２０８Ａ−２０８Ｆは、変位データおよび即値データを、対応するリザベーションステーションユニット２１０Ａ−２１０Ｆに経路づける。デコードユニット２０８からの出力信号は、機能ユニット２１２に対する、ビットエンコード実行命令ならびにオペランドアドレス情報、即値データおよび／または変位データを含む。
図１のスーパースカラマイクロプロセッサは、追いこし（out of order）実行をサポートし、したがって、レジスタの読出および書込動作のためもとのプログラムシーケンスを守り、レジスタのリネームを実現し、投機的命令実行および分岐の誤った予測からの回復を可能にし、正確な例外を容易にするため、リオーダバッファ２１６を用いる。当業者には理解されるであろうように、リオーダバッファ２１６内の一時的記憶ロケーションは、レジスタの更新に関わりしたがって投機的レジスタ状態を記憶する命令のデコードに際し予約される。リオーダバッファ２１６は、投機的結果が有効にされレジスタファイルに書込まれるに伴いバッファの「最後部」に移動し、それによってバッファの「頭部」に新たなエントリのための余地が作られる、先入れ先出し構成で実現されてもよい。リオーダバッファ２１６の他の特定の構成も、以下にさらに説明するように可能である。もし分岐予測が誤っていれば、誤って予測された経路に沿って投機的に実行された命令の結果は、レジスタファイル２１８にそれらが書込まれる前に、バッファ内で無効にすることができる。
デコードユニット２０８Ａ−２０８Ｆの出力において与えられる即値データおよびビットエンコード実行命令は、それぞれリザベーションステーションユニット２１０Ａ−２１０Ｆに直接経路づけられる。一実施例において、各リザベーションステーションユニット２１０Ａ−２１０Ｆは、対応する機能ユニットへの発行を待っている未決の３つの命令までの命令情報（すなわちビットエンコード実行ビットならびにオペランド値、オペランドタグおよび／または即値データ）を保持することができる。図１の実施例については、各デコードユニット２０８Ａ−２０８Ｆが専用されるリザベーションステーションユニット２１０Ａ−２１０Ｆに関連づけられ、各リザベーションステーションユニット２１０Ａ−２１０Ｆが同様に専用される機能ユニット２１２Ａ−２１２Ｆに関連づけられることが注意される。したがって、６つの専用「発行位置」が、デコードユニット２０８、リザベーションステーションユニット２１０および機能ユニット２１２により形成される。デコードユニット２０８Ａを通じて発行位置０に整列されディスパッチされた命令は、リザベーションステーションユニット２１０Ａに渡され続いて実行のため機能ユニット２１２Ａに渡される。同様に、デコードユニット２０８Ｂに整列されディスパッチされる命令は、リザベーションステーションユニット２１０Ｂおよび機能ユニット２１２Ｂへ渡される。
特定の命令のデコードに際し、もし要求されるオペランドがレジスタ場所であれば、レジスタアドレス情報がリオーダバッファ２１６およびレジスタファイル２１８に同時に経路づけられる。当業者は、以下にさらに説明するように、ｘ８６レジスタファイルが８つの３２ビットリアルレジスタ（すなわち典型的にはＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＢＰ、ＥＳＩ、ＥＤＩおよびＥＳＰと呼ばれるもの）を含むことを理解するであろう。リオーダバッファ２１６は、これらのレジスタの内容を変更する結果用の一時記憶ロケーションを含みそれによって追いこし実行を可能にする。リオーダバッファ２１６の一時記憶ロケーションは、デコードに際し実レジスタの１つの内容を変更する各命令に対し予約される。したがって、特定のプログラムの実行の間のさまざまな時点において、リオーダバッファ２１６の１つまたは２つ以上の場所には、投機的に実行された所与のレジスタの内容が含まれているかもしれない。もし所与の命令のデコードに続いて、リオーダバッファ２１６が所与の命令内のオペランドとして使用されるレジスタに対して割当てられた前の場所を有していると判断されたならば、リオーダバッファ２１６は、１）最も最近に割当てられた場所内の値、または２）最終的に前の命令を実行するであろう機能ユニットにより値がまだ生成されていなければ、最も最近に割当てられた場所に対するタグ、のいずれかを、対応するリザベーションステーションに送る。もし、リオーダバッファが所与のレジスタに対して予約される場所を有していれば、レジスタファイル２１８からではなくリオーダバッファ２１６からオペランド値（またはタグ）が与えられる。もしリオーダバッファ２１６内に要求されるレジスタに対して予約される場所がなければ、値は直接レジスタファイル２１８からとられる。もし、オペランドがメモリロケーションに対応するのであれば、オペランド値がロード／ストアユニット２２２を通じてリザベーションステーションユニットに与えられる。
適当なリオーダバッファの実現例に関する詳細は、マイク・ジョンソン（Mike Johnson）による刊行物『スーパースカラマイクロプロセッサの設計（Superscalar Microprocessor Design）』（１９９１年ニュージャージー、イングルウッド・クリフス、プレンティス・ホール）およびウィット（Witt）他による、１９９３年１０月２９日出願の同時係属中であり共通の譲渡人に譲渡される『高性能スーパースカラ・マイクロプロセッサ（High Performance Superscalar Microprocessor）』と題される特許出願連続番号第０８／１４６，３８２号に見られる。これらの文献はここに引用によりその全体として援用される。
リザベーションステーションユニット２１０Ａ−２１０Ｆは、対応する機能ユニット２１２Ａ−２１２Ｆにより投機的に実行されるべき命令情報を一時的に記憶するため設けられる。先述したように、各リザベーションステーションユニット２１０Ａ−２１０Ｆは、最大で３つの未決の命令に対し命令情報を記憶するであろう。６つのリザベーションステーション２１０Ａ−２１０Ｆは各々、対応する機能ユニットにより投機的に実行されるべきビットエンコード実行命令およびオペランド値を記憶するための場所を含む。もし特定のオペランドが利用可能でなければ、そのオペランドに対するタグが、リオーダバッファ２１６から与えられ、結果が生成される（すなわち前の命令の実行の完了によって）まで対応するリザベーションステーション内に記憶される。機能ユニット２１２Ａ−２１２Ｆの１つにより命令が実行されるとき、命令の結果が、その結果を待っている任意のリザベーションステーションユニット２１０Ａ−２１０Ｆに直接渡されると同時に、その結果がリオーダバッファ２１６を更新するため渡されることが注意される（この技術は一般に「結果送り（result forwarding）」と呼ばれる）。任意の要求されるオペランドの値が利用可能になった後、命令は実行のため機能ユニットへ発行される。すなわち、もしリザベーションステーションユニット２１０Ａ−２１０Ｆの１つの中の未決の命令に関連づけられるオペランドが、要求されるオペランドを変更する命令に対応するリオーダバッファ２１６内の前の結果の値の場所でタグづけされていれば、その命令は、前の命令に対するオペランドの結果が獲得されるまで、対応する機能ユニット１２に発行されない。したがって、命令が実行される順序は、もとのプログラムの命令シーケンスの順序とは同じではないであろう。リオーダバッファ２１６は、書込後読出依存性が生じる状況においてもデータの一貫性が維持されることを確実にする。
一実施例において、機能ユニット２１２は各々、加算および減算の整数算術演算ならびにシフト、回転、論理演算および分岐動作を実行するよう構成される。浮動小数点演算に対処するため（図示しない）浮動小数点ユニットも用いられるであろうことが注意される。
機能ユニット２１２は各々、また、条件付き分岐命令の実行に関する情報を分岐予測ユニット２２０に提供する。もし分岐予測が誤っていれば、分岐予測ユニット２２０は、予測誤り分岐命令後の命令処理パイプラインに入った命令をフラッシュし、プリフェッチ／プリデコードユニット２０２に要求される命令を命令キャッシュ２０４またはメインメモリからフェッチさせる。このような状況においては、投機的に実行されロード／ストアユニット２２２およびリオーダバッファ２１６内に一時的に記憶されるものを含む、予測誤り分岐命令の後に生じたもとのプログラムシーケンス内の命令の結果が廃棄されることが注意される。適切な分岐予測方式の例示的な構成は周知である。
機能ユニット２１２により生成された結果は、もしレジスタ値が更新されていれば、リオーダバッファ２１６に送られ、もしメモリロケーションの内容が変更されていればロード／ストアユニット２２２へ送られる。もしこの結果がレジスタ内に記憶されるのであれば、リオーダバッファ２１６は命令がデコードされたときにレジスタの値のために予約された場所内に結果を記憶する。先述したように、結果はまた、そこで未決の命令が、要求されるオペランド値を獲得するため前の命令の実行の結果を待つであろう、リザベーションステーションユニット２１０Ａ−２１０Ｆにもブロードキャストされる。
データキャッシュ２２４は、ロード／ストアユニット２２２とメインメモリサブシステムとの間で転送されるデータを一時的に記憶するため設けられる高速キャッシュメモリである。一実施例において、データキャッシュ２２４はデータ８キロバイトまでを記憶する能力を有する。データキャッシュ２２４を、セット・アソシアティブ構成を含むさまざまな特定のメモリ構成において実現できることが理解される。
一般に、ロード／ストアユニット２２２は、機能ユニット２１２Ａ−２１２Ｆとデータキャッシュ２２４との間のインターフェイスを提供する。一実施例において、ロード／ストアユニット２２２は、未決のロードまたはストアメモリ動作のためのデータおよびアドレス情報のための１６個の記憶ロケーションを備えるロード／ストアバッファを備えるよう構成され、記憶ロケーションは記憶ロケーションの線形アレイとして構成される。しかし、記憶ロケーションの数はこの発明のさらなる実施例においては変わるであろうことが理解される。機能ユニット２１２はロード／ストアユニット２２２へのアクセスのための調停を行なう。バッファが一杯になったとき、機能ユニットは、ロード／ストアユニット２２２が未決のロードまたはストア要求情報に対し余地を有するようになるまで待機しなければならない。ロード／ストアユニット２２２はまた、データの一貫性が維持されることを確実にするため、未決のストアメモリ動作に対してのロードメモリ動作の依存性チェックを行なう。ロード／ストアユニット２２２へ提供されたのとは異なる順序でロードメモリ動作がロード／ストアユニット２２２によって実行されるであろう。ストアメモリ動作は常に、それらが与えられたのと同じ順序で実行される。
一実施例において、デコードユニット２０８は、ロード／ストアユニット２２２に対し、所与のサイクルにおいて各デコードユニットがデコードするメモリ動作の種類を示す。デコードユニット２０８は４つの可能な条件の１つを示すであろう。すなわち、ロード／ストア動作はデコードされていない、ロード動作がデコードされている、ストア動作がデコードされている、またはロード−ｏｐ−ストア動作がデコードされている、である。ロード−ｏｐ−ストア動作は、ロード／ストアバッファ内の２つの記憶ロケーションを、すなわちロード動作用の１つとストア動作用の１つとを占める。これらの動作は、ロード／ストアバッファ内で個別の動作として処理される。少なくとも１クロックサイクル後に、機能ユニット２１２からロード／ストアユニット２２２へ（ストアのための）アドレスおよびデータが提供される。この情報は、アドレスおよびデータが関連づけられるメモリ動作を保持する記憶ロケーションへ転送される。この関連づけは、機能ユニット２１２により提供されるリオーダバッファタグとロード／ストアバッファ内に前に記憶されたリオーダバッファタグとを比較することにより決定される。
一実施例において、ロード／ストアバッファ内に記憶されたロードおよびストアメモリ動作は、リオーダバッファ２１６から少なくとも１つのポインタによって最早投機的ではないことが示される。このポインタは、ロード／ストアバッファ内に記憶されたメモリ動作の投機的ステータスを更新するため、ロード／ストアバッファ内の複数の記憶ロケーション内に記憶されるタグと、ロード／ストアユニット２２２により比較することができるタグ値である。他の実施例においては、リオーダバッファ２１６により提供されるポイントの数は２つである。
一実施例において、ロード／ストアユニットは、クロックサイクル当たり、データキャッシュにアクセスするためメモリ動作を２つまで選択する。ロード／ストアユニットは、選択を行なうため固定された優先順位方式を使用する。この機構は以下のとおりである。最早投機的ではないストアは最も高い優先順位を持ち、ミスであり最早投機的ではないロードは２番目に高い優先順位を持ち、投機的でありまだキャッシュにアクセスしていないロードが最も低い優先順位を持つ。ストアは、最早投機的ではない場合リオーダバッファ内で最も古い命令であるのでロードよりも高い優先順位を持ち、これらを可能な限り迅速にリタイヤすることが望ましい。ロードミスもまた、メインメモリ転送のレイテンシが長いために、非投機的になるまで処理されない。もし、ロードが取消されたならばそのデータは最早使用できなくなるだろうが、長いレイテンシは続き、メインメモリへのアクセスを必要とする他の転送をブロックするかもしれない。
データキャッシュにアクセスするのにどのメモリ動作が選択されるかということに影響を与える他の考慮点は、動作の整列と、あるメモリ動作がアクセスすることになるデータキャッシュのバンクとである。あるロードメモリ動作が所与のサイクルの第１のアクセスに選択され、整列していない場合、選択される第２のアクセスは整列されたメモリ動作となるか、または第２のアクセスは現在のサイクルでは行なわれないことになる。次のサイクルにおいて、非整列のロードメモリ動作の後半分が第１のアクセスとして選択される。ストアメモリ動作が所与のサイクルの第１のアクセスとして選択され、整列していない場合、そのサイクルで行なわれる第２のアクセスはストアメモリ動作の後半分である。いずれかのストアアクセスがデータキャッシュをミスすると、両半分とも打ち切られ、ミスを含むラインはメインメモリからデータキャッシュへ転送される。整列したメモリ動作が第１のアクセスとして選択され、非整列のロードメモリ動作が第２のアクセスとして選択される場合、次のクロックサイクルにおいて、選択される第２のアクセスは非整列のロードメモリ動作の後半分となる。整列したメモリ動作が第１のアクセスとして選択され、非整列のストアメモリ動作が第２のアクセスとして選択される場合、第２のアクセスはこのクロックサイクルにおいて行なわれない。
所与のサイクルにおいてデータキャッシュにアクセスするメモリ動作を選択する上で、バンク競合もまたロード／ストアユニットにより考慮される。所与のサイクルにおいて２つの動作がデータキャッシュにアクセスするよう選択され、それらのそれぞれのアドレスのビット２、３、および４が等しい場合、第２のアクセスはこのサイクルにおいて行なわれない。
別の実施例では、あるロードメモリ動作は、プログラムの順番においてそのロードメモリ動作の前のロードメモリ動作がデータキャッシュ２２４にアクセスしてミスしたことがわかっている場合、所与のサイクルにおいてデータキャッシュ２２４にアクセスするよう選択される。以前のメモリ動作がバッファ内に残るため、それらを記憶する余分なバッファは必要ではなく、シリコン面積が節約される。
図４Ａに示されるように、ロード／ストアユニット２２２のロード／ストアバッファの各エントリはミス／ヒットビットを含む。ミス／ヒットビットは、非ブロッキング機能を実現するために、データキャッシュにアクセスするメモリ動作を選択する際に用いられる。ミス／ヒットビットは、投機的であるロードメモリ動作をデータキャッシュへのアクセスのための選択について不適格とする。このように、データキャッシュをミスする投機的ロードメモリ動作の後の投機的ロードメモリ動作がデータキャッシュにアクセスするよう選択され得る。そのため、ロード／ストアユニット２２２は、データキャッシュをミスした投機的ロードメモリ動作がロード／ストアバッファ内に存在するクロックサイクルにおいてもロードメモリ動作がデータキャッシュにアクセスすることができる非ブロッキング機構を実現する。ある実施例では、８つのロケーション（ロード／ストアバッファの最後から始まる）がそのようなロードメモリ動作のためにスキャンされ、ブロッキングが起こるまでに７つの投機的ロードミスをロード／ストアバッファ内に記憶することができる。
ロード／ストアユニット２２２の非ブロッキング機構における別の重要な要素は、キャッシュラインごとにただ１つの要求がメモリシステムへなされることを確実にするのに以前の非ブロッキング機構で必要であった比較器を必要としないことである。上記のとおり、これらの比較器は以前の非ブロッキング機構においては、メインメモリシステムへのアクセスのため既に待ち行列にあるミスと同じラインへの第２のミスがメインメモリシステムにアクセスしないようにするのに必要である。典型的には、これらの以前の機構では、現在メインメモリからフェッチされるラインに対して第２の要求がなされるとブロッキングが起こった。ロード／ストアユニット２２２はミスをロード／ストアバッファ内に保持する。あるミスが非投機的なものとなると、これはメインメモリにアクセスするが、他のミスはバッファ内に残る。ミスしたアドレスに関連のあるデータがデータキャッシュ２２４内に転送されると、ロード／ストアバッファ内のミス／ヒットビットはリセットされ、関連のあるメモリ動作はもはやミスとして見なされなくなる。そのため、関連のあるメモリ動作がその後のクロックサイクルにおいてデータキャッシュ２２４にアクセスするよう選択されることになる。メモリ動作は今度はヒットである場合、これはデータキャッシュをヒットした他の投機的ロードメモリ動作と同様の態様で完了する。メモリ動作が依然としてミスである場合、ミス／ヒットビットはミスを示すようセットされ、メモリ動作は非投機的となるのを待つことになる。そのため、比較器は必要でなく、同じキャッシュラインに対して複数のミスが生じてもブロッキングは起こらない。
ある実施例では、ロードメモリ動作は、動作がデータキャッシュヒットである場合、ロード／ストアバッファから取除かれるよう選択される。さらに、ロード動作がデータキャッシュをミスし、（前述のリオーダバッファポインタにより示されるように）もはや投機的ではなくなり、そのミスを含むラインがメインメモリ（図示せず）からデータキャッシュへ転送されるよう選択される場合、ロードメモリ動作は取除かれるよう選択される、ストアメモリ動作は、そのストアメモリ動作が（前述のリオーダバッファポインタにより示されるように）非投機的であり、そのストアメモリ動作がデータキャッシュヒットである場合、ロード／ストアバッファから取除かれるよう選択される。ストアメモリ動作はさらに、そのストアメモリ動作が（前述のリオーダバッファポインタにより示されるように）非投機的であり、そのストアメモリ動作がデータキャッシュミスであり、そのミスを含むラインがメインメモリからデータキャッシュへ転送されるよう選択される場合、ロード／ストアバッファから取除かれるよう選択される。別の実施例では、メモリ動作は、そのメモリ動作に一致するリオーダバッファタグとともにリオーダバッファ２１６から取消信号を受取った場合、ロード／ストアバッファから取除かれるよう選択される。
次に、図２を参照すると、この発明によるロード／ストアユニットのブロック図が示される。示されるロード／ストアユニット２２２は、メモリ動作コマンドおよびこれらの動作に関連のある情報を受取るための入力ポート１０００を含む。ある実施例では、所与のクロックサイクルにおいて最大６つの動作がもたらされ得る。情報は、命令に関連のある線形アドレスと、メモリ動作がストアである場合はデータとを含む。この情報は、関連のあるメモリ動作コマンドがもたらされてから少なくとも１クロックサイクル後にもたらされる。図２に示されるように、ロード／ストアユニット２２２は、入力制御ユニット１００１、ストアポインタ１００２、ロードポインタ１００３、ロード／ストアバッファ１００４、出力制御ユニット１００５、入力リオーダバッファポインタ１００６および１００７ならびにデータキャッシュポート１００８を含む。ある実施例では、ロード／ストアバッファ１００４は記憶ロケーションの線形アレイとして構成される。
入力制御ユニット１００１は、メモリ動作１０００をロード／ストアバッファ１００４内の特定の記憶ロケーションへ向ける。ある実施例では、これは２つのポインタ、ストアポインタ１００２およびロードポインタ１００３を用いることにより向けられる。所与のクロックサイクルにおいて受取られる各ストアメモリ動作はロード／ストアバッファ１００４内の、ストアポインタ１００２により示される記憶ロケーションから始まり、その後受取られるストアメモリ動作ごとに記憶ロケーション番号が増加する記憶ロケーションに転送される。次にストアポインタ１００２は、クロックサイクルにおいて受取られたストア動作の数だけインクリメントされる。同様に、所与のクロックサイクルにおいて受取られた各ロードメモリ動作はロード／ストアバッファ１００４内の記憶ロケーション内に転送され、これはロードポインタ１００３により示される記憶ロケーションから始められ、その後受取られるロードメモリ動作ごとに記憶ロケーション番号が減少する。次にロードポインタ１００３は、クロックサイクルにおいて受取られたロード動作の数だけデクリメントされる。ストアポインタ１００２とロードポインタ１００３との間で記憶できる数のロードおよびストアメモリ動作だけをディスパッチするのはデコードユニット２０８の責任である。ロードユニットはロードポインタ１００３とストアポインタ１００２との差の形でデコードユニット２０８と交信し、この機能を行なう上でデコードユニットを助ける。
ある実施例では、ロード／ストアバッファが空である場合、ロード／ストアバッファ１００４においてストアポインタ１００２は最初の記憶ロケーションを、ロードポインタ１００３は最後の記憶ロケーションを示す。ストアポインタ１００２はロード／ストアバッファ内に受取られる各ストアメモリ動作ごとにインクリメントされ、ロードポインタ１００３はロード／ストアバッファ内に受取られる各ロードメモリ動作ごとにデクリメントされる。ロードメモリ動作がロード／ストアバッファ１００４から取除かれると、ロードポインタ１００３とロード／ストアバッファ１００４の終わりとの間の記憶ロケーションは、取除かれたロードメモリ動作により空いた記憶ロケーションに複写される。複写は、残ったメモリ動作がロード／ストアバッファ１００４の終わりにおいて連続した位置を占め、残ったメモリ動作が依然としてプログラムの順番通りに並ぶような態様で行なわれる。取除かれたロードメモリ動作はバッファ内で連続している必要はない。次に、ロードポインタ１００３は取除かれるロード命令の数だけインクリメントされる。同様に、ストアメモリ動作がロード／ストアバッファ１００４から取除かれると、ストアポインタ１００２とロード／ストアバッファ１００４の始めとの間の記憶ロケーションは、取除かれたストアメモリ動作により空いた上の記憶ロケーションに複写される。この複写は、残ったメモリ動作がロード／ストアバッファ１００４の始めにおいて連続した位置を占め、残ったメモリ動作が依然としてプログラムの順番通りに並んでいるような態様で行なわれる。取除かれたストアメモリ動作はバッファ内で連続している必要はない。次に、ストアポインタ１００２は取除かれたストアメモリ動作の数だけデクリメントされる。
出力制御ユニット１００５は、データキャッシュ２２４へのアクセスのため、ロード／ストアバッファ１００４内に記憶されるメモリ動作を選択する。ある実施例では、出力制御ユニット１００５は前述のアクセスのために最大２つのメモリ動作を選択する。出力制御ユニット１００５はメモリ動作を選択するのに上に説明した優先順位方式を実現する。上述のように、リオーダバッファポインタ１００６および１００７を用いてどのメモリ動作がもはや投機的ではないのかを示す。
次に図３を参照して、ロード／ストアバッファ１００４の実施例がより詳しく示される。陰影の付けられた領域１０１０はストアメモリ動作を保持している記憶ロケーションを示す。陰影の付けられた領域１０１１はロードメモリ動作を保持する記憶ロケーションを示す。この実施例では、記憶ロケーションはロケーションの線形アレイとして構成される。ロケーションの線形アレイとは、ひとつの番号を用いて、アレイ内で各ロケーションの位置が特定できるロケーション編成のことである。ストアメモリ動作は一方の端部からバッファ内に転送され、ロードメモリ動作はその反対の端部からバッファ内に転送される。このようにして、ロードメモリ動作およびストアメモリ動作を別個の待ち行列構造に記憶する属性が保たれる。しかしながら、この実施例では、ロードおよびストア待ち行列ロケーションの双方をもたらすために１組の記憶ロケーションを有利に用いている。ハードウェア、よってシリコン面積は、性能が等しくなるような数の別個のロードおよびストアバッファを使用するときと比較して節約される。たとえば、この実施例では１６個の記憶ロケーションが含まれる。どの時点においても最大１６個のストアメモリ動作、または代わりに１６個のロードメモリ動作をロード／ストアバッファ１００４に記憶される。そのため、性能が等しくなるような数の別個のロードおよびストアバッファを用いる場合は１６個のロードバッファおよび１６個のストアバッファが必要となる。これらのバッファの各々はロード／ストアバッファ１００４が含むのと同じ情報を含んでいる必要がある。そのため、スーパースカラマイクロプロセッサにおいて一般的に用いられる別個のロードおよびストアバッファの解決策ではロード／ストアバッファ１００４よりかなり大きいシリコン面積を消費する。
また図３には、ロードポインタ１００３およびストアポインタ１００２が示される。この実施例では１６個の記憶ロケーションが含まれるため、ロードポインタ１００３およびストアポインタ１００２は４ビットのポインタとして示される。他の実施例では、記憶ロケーションの数が異なることがあり、そのためロードポインタ１００３およびストアポインタ１００２の要するビット数も異なるであろう。また、他の実施例を、線形アレイ以外の何らかの構成としてロード／ストアバッファ１００４を備えたものとして構成してもよい。たとえば、二次元アレイを用いてもよく、二次元アレイでは、記憶ロケーションは２つの番号、すなわち行および列番号からなるポインタにより識別される。ロード／ストアバッファ１００４を構成するには他にも可能なやり方があることが理解される。ある実施例では、ストアポインタ１００２はロードポインタ１００３以上になることは許されない。このように、ロードメモリ動作およびストアメモリ動作はどの所与のクロックサイクルにおいても互いに区別される記憶ロケーションに記憶される。
また図３には出力ＬＳＣＮＴ［２：０］１０１２が示される。この出力はロードポインタ１００３とストアポインタ１００２との差であり、ある実施例では、いくつのメモリ動作をロード／ストアユニット２２２に転送できるかを示す。メモリ動作をロード／ストアユニット２２２へ転送するユニットはこの情報をそのアルゴリズムに用いて、所与のクロックサイクルにおいて転送されるメモリ動作の数を制限する。
次に図４Ａを参照すると、ロード／ストアバッファ１００４内の記憶ロケーションの図が示される。記憶ロケーションは３つのフィールドに分割される。ある実施例では、第１のフィールドは６ビットからなる。１つのビットは有効ビットであり、これはセットされると記憶ロケーションがメモリ動作を含むことを示し、セットされていないと記憶ロケーションがメモリ動作を含まないことを示す。第１のフィールドの残りの５ビットはタグを含み、これはリオーダバッファ２１６におけるどのエントリにメモリ動作が関連付けられているかを示す。
第２のフィールド１０２１は６６ビットからなる。そのフィールドの初めの３２ビットはメモリ動作が操作するアドレスである。次のビットはアドレス有効ビットであり、これはセットされると前述のアドレスが提供されていることを示し、セットされていないと前述のアドレスが提供されていないことを示す。フィールド１０２１における次の３２ビットは、メモリ動作に関連のあるデータである。ストアでは、これらのビットは前述のアドレスにおいて記憶すべきデータを含む。３２ビット幅より少ないデータでは、データはフィールド１０２１内に右寄せで記憶される。フィールド１０２１の最後のビットはデータ有効ビットであり、これはセットされると前述のデータが提供されていることを示し、セットされていないと前述のデータフィールドが提供されていないことを示す。
記憶ロケーションの第３のフィールド１０２２は、各メモリ動作のための他の重要な情報を含む。ある実施例では、次の情報が記憶される。すなわち、
操作すべきデータの大きさをバイトで測定したもの
データキャッシュ２２４におけるメモリ動作のミス／ヒット状態。このビットはセットされるとミスを示し、このビットがセットされていないと動作がデータキャッシュにアクセスしていないことを示す。
依存ビット。このビットはセットされるとロードメモリ動作がロード／ストアバッファの別の記憶ロケーションに記憶されるストアメモリ動作に依存することを示し、このビットがセットされていないとそのような依存が存在しないことを示す。
前述の依存を含む記憶ロケーションのエントリ番号。このフィールドは、前述の依存ビットがセットされていない場合にはランダムな情報を含む。
他の実施例では、フィールド１０２２にさらに種々の情報が記憶される。
次に図４Ｂを参照すると、ロード／ストアユニットの一実施例の典型的な動作を示すタイミングチャートの図が示される。３つの完全なクロックサイクルが示され、ＩＣＬＫ４、ＩＣＬＫ５およびＩＣＬＫ６と記されている。ＩＣＬＫ４では、ロードおよび／またはストアメモリ動作が矢印１０３０により示されるように受取られる。ロードポインタは矢印１０３１においてクロックサイクルＩＣＬＫ４において受取られたロードメモリ動作の数だけデクリメントされる。所与のクロックサイクルにおいて受取られるロードメモリ動作の数はゼロ以上であり得る。ストアポインタもまた、矢印１０３１においてＩＣＬＫ４において受取られたストアメモリ動作の数だけインクリメントされる。上記のロード動作と同様、所与のクロックサイクルにおいて受取られるストア動作の数はゼロ以上であり得る。矢印１０３２において、ロード／ストアユニットはＬＳＣＮＴ１０１２のための新しい値を計算しており、これはロードポインタ１００３のデクリメントされた値とストアポインタ１００２のインクリメントされた値との差である。
矢印１０３３により示されるようにＩＣＬＫ５の始めにおいて、ロード／ストアユニット２２２は、現在ロード／ストアバッファ１００４に存在するメモリ動作のタグを調べ、このサイクルのためのデータキャッシュにアクセスする動作を選択するプロセスを開始する。上に説明したような固定優先順位方式が選択基準として用いられる。矢印１０３４において、アドレスおよび／またはデータがもたらされるメモリ動作のためのタグがロード／ストアユニットへ機能ユニット２１２から転送される。この情報は矢印１０３５における選択プロセスにおいて用いられる。矢印１０３６では、選択プロセスは完了し、データキャッシュのための最大の２つのアクセスが選択されている。矢印１０３７では、（矢印１０３４において）このクロックサイクルにおいて転送されていることが示されたアドレスおよびデータが機能ユニット２１２によりもたらされる。アドレスおよびデータは矢印１０３８においてロード／ストアバッファ内の記憶ロケーションに転送される。
クロックサイクルＩＣＬＫ６では、データキャッシュ２２４がアクセスされる。またこのクロックサイクルでは、キャッシュにアクセスするメモリ動作の１つまたは両方がロードメモリ動作である場合、図４Ａのロードメモリ動作の第１のフィールド１０２０のタグはロード／ストアバッファ内に現在記憶されるどのストアのタグとも比較される。同時に、ロードメモリ動作のアドレスはロード／ストアバッファ内に現在記憶されるどのストアとも比較される。そのロードメモリ動作が前述のタグ比較を介してプログラムの順番においてストア動作の後であることがわかり、かつそのロードのアドレスが前述のアドレス比較を介してストアのアドレスと完全に重なることがわかった場合、ロードメモリ動作が取出そうと試みているデータは実際には、ストアメモリ動作記憶ロケーションにあるデータである。このデータはストアメモリ動作の記憶ロケーションのデータ部分から提供される。この文脈において、「完全に重なる」とは、ロードメモリ動作が取出そうとしているバイトのすべてがストアメモリ動作が更新しつつあるバイト内に含まれていることを意味する。また、「部分的に重なる」とは、ロードメモリ動作が取出そうとしているバイトのうちのいくつかがストアメモリ動作が更新しつつあるバイト内に含まれていることを意味する。前述のデータがロード／ストアユニットにもたらされていない場合、またはロードメモリ動作のアドレスがストアメモリ動作と部分的に重なる場合、ロードメモリ動作はそのデータをこのサイクルにおいては取出さない。代わりに、これはストアメモリ動作が実行されるまでロード／ストアバッファ内に残る。バッファにおけるストアメモリ動作がプログラムの順番においてロードメモリ動作より前であるがストアメモリ動作が依然として比較のための有効アドレスを含んでいない場合、ロードメモリ動作は、ストアアドレスがロードメモリ動作に部分的に重なっているかのように扱われる。ロードメモリ動作がロード／ストアバッファ内にあるどのストアメモリ動作より前であることがわかった場合、またはロードメモリ動作のアドレスがストアメモリ動作のアドレスのいずれとも一致しない場合、ロードメモリ動作のためのデータはデータキャッシュから提供される。ロードメモリ動作がデータキャッシュミスであり、前の一文に述べた条件が満たされる場合、このクロックサイクルにおいてロードメモリ動作にデータは提供されない。
矢印１０３９において、動作の結果はリオーダバッファ２１６に与えられる。矢印１０４０において、このクロックサイクルにおいてデータキャッシュにアクセスするメモリ動作のフィールド１０２２（図４Ａに示される）におけるミスビットおよび依存ビットは、検出されたアクセスのミス／ヒット状態とロード／ストアバッファにおけるストアへの依存性とにより更新される。
次に、図４Ｃを参照すると、前述のメモリ動作依存性チェックを実現する例示的なハードウェアが示される。矢印１０５０および矢印１０５１は、このクロックサイクルにおいてデータキャッシュにアクセスするよう選択される２つのメモリ動作のアドレスを示す。これらのアドレスは、それぞれ第１および第２のアクセスのためのＬＳＬＩＮＡＤ０［３１：２］およびＬＳＬＩＮＡＤ１［３１：２］と記された信号線対上で運搬される。これらのアドレスは比較器１０５２を用いてロード／ストアバッファ１００４内の記憶ロケーションの各々に記憶されるアドレスと比較される。比較器の出力においてアドレスの重なりが示されるか示されていないかにかかわらず、この情報は制御ユニット１０５３および１０５４に入力され、制御ユニット１０５３および１０５４はまた上記のタグ比較を実行する。タグ比較によりメモリ動作がロード／ストアバッファ内に存在する動作より後であることが示され、アドレス比較が完全な重なりを示す場合、ストアデータはそれぞれ、出力１０５５および１０５６として送られる。このデータは次に、ロードメモリ動作の結果として用いられる。ロードメモリ動作がストアメモリ動作に依存するが、ストアメモリ動作のデータが提供されていない場合、ロードメモリ動作はストアメモリ動作のデータが提供されるまでロード／ストアバッファ１０４４内に残る。
次に図４Ｄを参照すると、ロード／ストアユニット２２２の図が示される。ロード／ストアユニット２２２はいくつかの区画に分割される。ＬＳＣＴＬ１０６０は制御ブロックである。このブロックはロード／ストアバッファ１００４を制御するのに必要な論理ゲートと、ロード／ストアユニットの他の部分とを含む。ＬＤＳＴＳＴＡＴ１０６１は、ロード／ストアバッファ内の各記憶ロケーションのためのステータス情報を含む。すなわち、ＬＤＳＴＳＴＡＴ１０６１は図４Ａのフィールド１０２２の情報を含む。ＬＤＳＴＴＡＧＳ１０６２は、ロード／ストアバッファ１００４の各記憶ロケーションのための図４Ａのフィールド１０２０の情報を含む。ＬＤＳＴＡＤＲ１０６３は、ロード／ストアバッファ１００４の各記憶ロケーションのための図４Ａのフィールド１０２１のアドレス部分を含む。ＬＤＳＴＤＡＴ１０６４は、ロード／ストアバッファ１００４の各記憶ロケーションのための図４Ａのフィールド１０２１のデータ部分を含む。最後に、ＬＳＳＰＲＥＧ１０６５は、セグメントレジスタを含み、これについて以下にさらに説明する。
図４Ｄはまた、図２の入力１０００を示し、これはここでは一実施例において用いられる信号として示される。ＲＴＡＧｎＢ１０６６は、リオーダバッファ２１６内のメモリ動作の位置を識別するタグをもたらす１組の信号である。ＩＴＹＰＥｎＢ１０６７は、メモリ動作をロード動作、ストア動作またはロード−ｏｐ−ストア動作のいずれかとして識別する。ＲＥＳＬＡｎＢ１０７２は、メモリ動作のためのアドレスを提供し、ＲＥＳｎＢ１０７３はストアメモリ動作のためのデータを提供する。
また、図４Ｄはロード／ストアユニット２２２の出力を示す。ＬＳＲＥＳ０／ＸＬＳＲＥＳ０  １０６８はデータキャッシュ２２４への第１のアクセスのためのデータ出力である。２組の信号が差動入力としてリオーダバッファへ提供される。同様に、ＬＳＲＥＳ１／ＸＬＳＲＥＳ１  １０６９はデータキャッシュ２２４への第２のアクセスのためのデータ出力である。また、ＬＳＬＩＮＡＤ０  １０７０およびＬＳＬＩＮＡＤ１  １０７１は、それぞれ、第１および第２のデータキャッシュアクセスのためのアドレスである。
上述の説明によれば、ユニファイドロード／ストアバッファを用いたロード／ストアユニットを含む高性能スーパースカラマイクロプロセッサが説明され、これは実質的により小さいスペースで、一般的に用いられる別個のロードおよびストアバッファと性能が等しいバッファを実現するものである。ユニファイドバッファはロードおよびストアメモリ動作の両方を記憶し、バッファの一方の端部からロードを記憶し、他方の端部からストアを記憶する。このように、別個のバッファにおいてロードおよびストアを記憶することの属性が保たれ、同時にバッファに要する物理的空間は有利に減少する。
数多くの変形および修正が、ひとたび上記の開示が完全に理解されると当業者には明らかになるであろう。以下の請求の範囲はそのような変形および修正のすべてを包括すると解釈されることが意図される。
【図１】
0003732234.tif 000003
【図２】
0003732234.tif 000004
【図３】
0003732234.tif 000005
【図４Ａ】
0003732234.tif 000006
【図４Ｂ】
0003732234.tif 000007
【図４Ｃ】
0003732234.tif 000008
【図４Ｄ】
0003732234.tif 000009