(57)【要約】マイクロプロセッサ（１００）は、読み出し／書き込みオペレーションのディスパッチを行うように構成されたディスパッチユニット（１０４）と、ディスパッチユニット（１０４）がディスパッチする読み出し／書き込みオペレーションに関連付けられる情報を記録するように構成された読み出し／書き込みユニット（１２６）を含み得る。読み出し／書き込みユニット（１２６）は複数のエントリ（３２０）を備えたＳＴＬＦ（Store-to-Load Forwarding）バッファ（３０５）を含む。読み出し／書き込みユニット（１２６）は読み出しオペレーションの少なくとも一部のアドレスに対応してインデックスを生成するように構成されており、生成されたインデックスは複数のエントリ（３２０）のうちの１つを選択するように、また、読み出しオペレーションの結果として複数のエントリ（３２０）の１つに含まれるデータを転送するように使用される。
2007527563.tif 000002
【特許請求の範囲】
【請求項１】
マイクロプロセッサ（１００）であって、
読み出し／書き込みオペレーションのディスパッチを行うように構成されたディスパッチユニット（１０４）、及び、
前記ディスパッチユニット（１０４）によりディスパッチされた読み出し／書き込みオペレーションに関連付けられた情報を記録するように構成された読み出し／書き込みユニット（１２６）、を含み、前記読み出し／書き込みユニット（１２６）はＳＴＬＦ（Store-to-Load Forwarding）バッファ（３０５）を含み、前記ＳＴＬＦバッファ（３０５）は複数のエントリ（３２０）を備えており、
前記読み出し／書き込みユニット（１２６）は、読み出しオペレーションの少なくとも一部のアドレスに基づいたインデックスを生成するように構成され、前記インデックスは前記複数のエントリ（３２０）のうちの１つを選択するために、また、前記読み出しオペレーションの結果として前記複数のエントリ（３２０）のうちの前記少なくとも１つに含まれるデータを転送するために使用される、マイクロプロセッサ（１００）。
【請求項２】
前記読み出し／書き込みユニット（１２６）は、前記複数のエントリ（３２０）のうち前記１つのエントリに含まれる情報が、前記読み出しオペレーションに関連付けられる情報とマッチしない場合は、前記読み出しオペレーションの結果として前記複数のエントリ（３２０）のうちの前記１つのエントリに含まれるデータを転送することがないように構成される、請求項１記載のマイクロプロセッサ（１００）。
【請求項３】
前記読み出し／書き込みユニット（１２６）は、書き込みオペレーションの少なくとも一部のアドレスに対応する付加的インデックスを生成することによって、複数のエントリ（３２０）のうち、前記書き込みオペレーションへ割り当てるエントリを選択するように構成される、請求項１記載のマイクロプロセッサ（１００）。
【請求項４】
前記読み出し／書き込みユニット（１２６）は、前記ＳＴＬＦバッファ（３０５）のオペレーションを検証するように構成されるＳＴＬＦチェッカー（３０３）を含む、請求項１記載のマイクロプロセッサ（１００）。
【請求項５】
前記ＳＴＬＦチェッカー（３０３）はアソシアティブアドレス比較を行い、前記読み出しオペレーションと同じアドレスを目標にする全ての発行済みの書き込みオペレーションを識別するように、また、前記読み出しオペレーションよりも古い、発行済みの最新の書き込みオペレーションを選択するために、ファインドファーストアルゴリズムを実装するように構成される、請求項４記載のマイクロプロセッサ（１００）。
【請求項６】
コンピュータシステム（９００）であって、
システムメモリ（２００）と、
前記システムメモリ（２００）に結合されたマイクロプロセッサ（１００）と、を含み、
前記マイクロプロセッサ（１００）は、
読み出し／書き込みオペレーションのディスパッチを行うように構成されたディスパッチユニット（１０４）と、
前記ディスパッチユニット（１０４）によりディスパッチされた読み出し／書き込みオペレーションに関連付けられた情報を記録するように構成された読み出し／書き込みユニット（１２６）と、を含み、前記読み出し／書き込みユニット（１２６）はＳＴＬＦ（Store-to-Load Forwarding）バッファ（３０５）を含み、前記ＳＴＬＦバッファ（３０５）は複数のエントリ（３２０）を含むものであって、
前記読み出し／書き込みユニット（１２６）は、読み出しオペレーションの少なくとも一部のアドレスに対応するインデックスを生成するように構成されており、前記インデックスは複数のエントリのうち１つを選択するように、また、前記読み出しオペレーションの結果として前記複数のエントリ（３２０）のうちの前記１つのエントリに含まれるデータを転送するように使用される、コンピュータシステム（９００）。
【請求項７】
読み出しオペレーションのアドレスを受信するステップ、
前記アドレスに対応するインデックスを生成するステップ、
インデックスを使用して、ＳＴＬＦ（Store-to-Load Forwarding）バッファ（３０５）に含まれる複数のエントリ（３２０）から１つのエントリを選択するステップ、及び、
前記読み出しオペレーションの結果として前記エントリに含まれるデータを転送するステップ、を含む方法。
【請求項８】
前記読み出しオペレーションと同じアドレスを目標にする全ての発行済み書き込みオペレーションを識別するために、アソシアティブアドレス比較を行うことによって、ＳＴＬＦバッファ（３０５）のオペレーションを検証するステップと、前記読み出しオペレーションよりも古い、発行済みの最新のオペレーションを選択するために、ファインドファーストアルゴリズムを実装するステップを更に含む、請求項７記載の方法。
【請求項９】
前記検証ステップがＳＴＬＦバッファ（３０５）の誤ったオペレーションを識別する場合に、前記読み出しオペレーションをリプレイするステップを更に含む、請求項８記載の方法。
【請求項１０】
前記読み出しオペレーションの結果として、前記ＳＴＬＦバッファ（３０５）に含まれる前記エントリの前記データの転送に応答して、投機的な値として前記読み出しオペレーションの結果を識別するステップと、
前記検証ステップが、前記読み出しオペレーションに対して正確に動作したことを検証する場合に、前記読み出しオペレーションの前記結果は投機的でないことを識別するステップとを更に含む、請求項８記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサ技術分野に関し、より具体的には、マイクロプロセッサにおいてストア−ロードフォーワード（ＳＴＬＦ：store-to-load forwarding）を行う方法に関する。
【背景技術】
【０００２】
高性能のマイクロプロセッサでは、一般に読み出し／書き込みユニットはＬ１キャッシュへのアクセスを待ついくつかの未処理の読み出し及び書き込みオペレーション用の記録装置を備えている。このタイプのマイクロプロセッサアーキテクチャに適用可能な一般的な性能向上手法として、は、古い書き込みオペレーション（プログラム順で先に発生する書き込みオペレーション）から新しい（若い）読み出しオペレーション（プログラム順で後で発生する読み出しオペレーション）へデータ転送を行うメカニズムを実装することが挙げられる。
【０００３】
このストア−ロードフォーワードは、Ｌ１データキャッシュへのアクセスを回避することにより実行効率を高くする。ＳＴＬＦによって一般的に実現される方法は、読み出しオペレーションが実行パイプラインのデータキャッシュアクセスステージにある間に全ての古い書き込みオペレーションを検索することである。読み出しオペレーションのアドレスは読み出し／書き込みユニットにある全ての書き込みオペレーションのアドレスと比較される。まず、読み出しオペレーションと同じアドレスを目標にする全ての書き込みオペレーションが識別され、次に読み出しオペレーションよりも新しい全ての書き込みオペレーションを取り除くことによってこのグループの絞込みが行われる。読み出しオペレーションよりも古い全ての書き込みオペレーションが識別されると、読み出しオペレーションよりも古い書き込みオペレーションのうち、最も新しいものを見つけるために、これらの書き込みオペレーションが相対的に、これらの新旧が比較される。次いでこの最も新しい書き込みオペレーションに関連付けられたデータは、読み出しオペレーションへ転送（フォワーディング）され、Ｌ１データキャッシュへのアクセスを必要とすることなく、通常通りに処理を完了することができる。
【０００４】
読み出しオペレーションと同一の目標アドレスを持つ最も新しい書き込みオペレーションを検出するために使用されるアドレス比較及び検索アルゴリズムは比較的複雑であり、実装するには多くのレベルの組合せ論理を必要とする。一般に読み出し／書き込みユニットはＬ１へアクセスすることによる処理の完了を待つオペレーションを記録する。この記録装置の各ラインはロードもしくは書き込みオペレーションのために複数のエントリを備えている。読み出しオペレーションのアドレスが利用可能になると、そのアドレスは各エントリのアドレスと比較され、マッチする全てのエントリは書き込みオペレーションとして検証される必要がある。読み出しオペレーションの目標にされたアドレスとマッチする全ての書き込みオペレーションエントリが識別されると、ファインドファースト(find-first)アルゴリズムが採用されて、読み出しオペレーションよりも古い、最も新しいマッチする書き込みオペレーションが識別される。次に、適切なエントリからのデータは読み出しオペレーションへ転送される。
【０００５】
高性能マイクロプロセッサに対して、一般にこのＳＴＬＦの機能性は読み出しオペレーションを完了するためのクリティカルパス(critical path)の一部であり、そのため実質的に実効的なロードレイテンシに影響を与える。上述の各手順を実行するために必要な時間がこの実効的ロードレイテンシをもたらし、またある場合では、マイクロプロセッサが動作できる最大周波数を制限する。
【発明の開示】
【０００６】
インデックス付ストア−ロードフォーワードを実施するための方法とシステムの様々な実施形態が開示されている。一実施形態では、マイクロプロセッサはロード及び書き込みオペレーションをディスパッチ（発送）するために構成されたディスパッチユニットと、ディスパッチユニットによってディスパッチされるロード及び書き込みオペレーションに関連付けられた情報を記録するように構成された読み出し／書き込みユニットを備え得る。読み出し／書き込みユニットは複数のエントリを含むＳＴＬＦ（Store-to-Load Forwarding）バッファを備えている。読み出し／書き込みユニットは、読み出しオペレーションのアドレスに対応するインデックスを生成するように構成され、そのインデックスは複数のエントリのうちの１つのエントリを選択するために使用され、かつ、読み出しオペレーションの結果として複数のエントリのうちの１つのエントリに含まれるデータを転送する。ＳＴＬＦバッファの複数のエントリのうちの、選択されたこの１つのエントリは、書き込みオペレーションに関連付けられたアドレス、データ、及びデータサイズ、を記録するように構成され得る。このインデックスはアドレスに含まれる全ての、もしくは一部のアドレスから生成され得る。アドレスは物理的もしくは仮想アドレスであり得る。インデックス付ＳＴＬＦバッファを含むマイクロプロセッサはコンピュータシステムに含まれ得る。
【０００７】
一実施形態では、読み出し／書き込みユニットは、複数のエントリのうちの１つのエントリに含まれる情報が読み出しオペレーションに関連付けられる情報とマッチしない場合、読み出しオペレーションの結果として複数のエントリのうちの１つに含まれるデータを転送しないように構成され得る。
【０００８】
読み出し／書き込みユニットは、書き込みオペレーションのアドレスの少なくとも一部に対応する付加的インデックスを生成することによって、複数のエントリのうち、書き込みオペレーションへ割り当てるエントリを選択するように構成され得る。ある実施形態では、読み出し／書き込みユニットは、書き込みオペレーションのアドレスと、書き込みオペレーションによって動作するデータのバイト数のどちらにも対応して付加的インデックスを生成するように構成され得る。同様に、読み出し／書き込みユニットは読み出しオペレーションのアドレスと読み出しオペレーションにより動作するデータのバイト数のどちらにも対応して読み出しオペレーションに対するインデックスを生成するように構成され得る。一実施形態では、付加的インデックスは書き込みオペレーションによって動作するデータバイト数の２を底とする対数に等しい分だけ、書き込みオペレーションが目標にするアドレスの下位部分を右にシフトして生成され得る。
【０００９】
読み出し／書き込みユニットはＳＴＬＦバッファの動作を検証するように構成されるＳＴＬＦチェッカーを含み得る。このＳＴＬＦチェッカーはアソシエイティブアドレス比較(associative address comparison)を行い、読み出しオペレーションと同じアドレスを目標にする発行済みの全ての書き込みオペレーションを識別するように、また、読み出しオペレーションよりも古い、発行済みの最も新しい書き込みオペレーションを選択するように、ファインドファーストアルゴリズムを実装するために構成され得る。ＳＴＬＦチェッカーは、ＳＴＬＦバッファの誤った動作をＳＴＬＦチェッカーが識別する場合に、読み出しオペレーションをリプレイするように構成され得る。ＳＴＬＦチェッカーはまた、ＳＴＬＦバッファの誤った動作をＳＴＬＦチェッカーが検出する場合に、読み出しオペレーションに依存する１つもしくはそれ以上の追加の動作をリプレイするようにも構成される。読み出し／書き込みユニットは、読み出しオペレーションの結果としてＳＴＬＦバッファに含まれる複数のエントリのうちの１つのエントリのデータ転送に応答して、投機的な値として読み出しオペレーションの結果を識別するように構成され得る。読み出しオペレーションに対してＳＴＬＦバッファが正常に動作したことをＳＴＬＦチェッカーが検証する場合、読み出し／書き込みユニットは、読み出しオペレーションの結果は投機的ではないことを示すように構成される。
【発明の詳細な説明】
【００１０】
本発明は、添付の図面に関連した以下の詳細な説明を参照することによって、よりよく理解することができる。
本発明は様々な変更や代替形態が可能であるが、本発明の個別の実施形態は、各図面において例示として示されたものであり、ここでは詳細に説明されている。しかしながら、ここで行われている実施形態の説明は、本発明を開示された特定の形態に限定することを意図するものではなく、逆に、本発明は、添付の特許請求の範囲により定義されるような本発明の精神や範囲の範疇であるすべての変更、等価物、及び代替物を含むものであることは理解すべきである。本明細書中の見出しは文章構成のためのものに過ぎず、本明細書の説明または特許請求の範囲を限定または解釈のために用いるべきものではないことに注意されたい。さらに、本明細書において用いられる「できる“may”」という用語は、許可的な意味合い（つまり、そのような可能性を持つ、または可能である）に用いられ、強制的な意味合いではない（つまり、must；しなければいけない）ことに注意すべきである。「include;含む」という用語およびその派生語は「含むが、それに限定されない」ことを意味する。「接続される」という用語は「直接的または間接的に接続される」ことを意味し、「結合される」という用語は「直接的または間接的に結合される」ことを意味する。
【発明を実施するための最良の形態】
【００１１】
図１はストア−ロードフォーワード（ＳＴＬＦ）バッファ１４０を組込んだマイクロプロセッサ１００の一実施形態に含まれるロジカルコンポーネントのブロック図である。マイクロプロセッサ１００はシステムメモリ２００に記録された命令を実行するように構成される。これらの命令の多くはシステムメモリ２００に記録されたデータ上で動作するものである。システムメモリ２００はコンピュータシステム全体に物理的に配置可能であり、一つ又はそれ以上のマイクロプロセッサ１００からアクセスできる。いくつかの実施形態では、マイクロプロセッサ１００はｘ８６アーキテクチャと互換性を持つように設計され得る。マイクロプロセッサ１００は本文に示されているコンポーネントに加えて、その他多くの要素を含んでいてもよく、またそれらに結合されてもよいことに注意すべきである。例えば、マイクロプロセッサ１００とシステムメモリ２００との間には（マイクロプロセッサ１００の内部もしくは外部に）追加のキャッシュレベルが含まれ得る。同様に、いくつかの実施形態では、マイクロプロセッサ１００はシステムメモリ２００を制御するように構成されたメモリコントローラを含み得る。
【００１２】
マイクロプロセッサ１００は命令（インストラクション）キャッシュ１０６およびデータキャッシュ１２８を含む。マイクロプロセッサ１００はシステムメモリ２００に結合されたプリフェッチユニット１０８を含む。プリフェッチユニット１０８は命令キャッシュ１０６に記録するためにシステムメモリ２００から命令コードをプリフェッチすることができる。一実施形態では、プリフェッチユニット１０８はシステムメモリ２００から命令キャッシュ１０６にコードをバースト転送するように構成することができる。プリフェッチユニット１０８は様々な特定のコードプリフェッチ技術およびアルゴリズムを採用することができる。命令は、命令キャッシュ１０６でミスした所与のアドレスに応答して、システムメモリからフェッチされ得る。
【００１３】
ディスパッチユニット１０４は命令キャッシュか１０６から命令を受信して、デコードされたオペレーション、及び／または部分的にデコードされたオペレーションをトレースキャッシュ１６０から受信するように構成され得る。ディスパッチユニット１０４は命令キャッシュ１０６から受信した命令をデコードするためのデコードユニット１４０を含み得る。ディスパッチユニット１０４はまた、マイクロコード命令を処理する場合に用いるマイクロコードユニットも含み得る。
【００１４】
ディスパッチユニット１０４はスケジューラ１１８にオペレーションのディスパッチを行うように構成される。１以上のスケジューラ１１８はディスパッチユニット１０４から発送されたオペレーションを受信し、一以上の実行コア１２４にオペレーションを発行するように結合できる。実行コア１２４は、データキャッシュ１２８へのアクセスを実行するように構成された読み出し／書き込みユニット１２６を含む。実行コア１２４によって生成された結果は、結果バス１３０に出力され得る。これらの結果は続いて発行される命令のためのオペランド値として使用可能であり、および／またはレジスタファイル１１６に記録することができる。リタイアキュー（retire queue）１０２はスケジューラ１１８およびディスパッチユニット１０４に結合される。このリタイアキューは、発行されたオペレーションのそれぞれがいつ中止可能であるかを決定するように構成される。
【００１５】
命令キャッシュ１０６は命令を、ディスパッチユニット１０４がそれらを受信する前に、一時的に記録することができる。命令コードは、システムメモリ２００からプリフェッチユニット１０８を介してコードをプリフェッチすることにより、命令キャッシュ１０６に供給される。命令キャッシュ１０６は様々な構成で実装可能である（例えば、セットアソシアティブ、フルアソシアティブ、またはダイレクトマッピング）。
【００１６】
ディスパッチユニット１０４は、オペランドアドレス情報、即値データ（immediate data）および／または変位データ（displacement data）とともに、実行コア１２４が実行可能なビット符号化されたオペレーションを含む信号を出力する。デコードユニット１４０はある種の命令を実行コア１２４内で実行可能な一以上のオペレーションにデコードするために使用され得る。単純な命令は単一のオペレーションに対応する。より複雑な命令は複数のオペレーションに対応する。レジスタの更新を含むオペレーションを受信すると、ディスパッチユニット１０４はレジスタファイル１１６中のあるレジスタ位置が推測レジスタ状態を記録するために予約される（別の実施形態では、リオーダバッファが各レジスタに対する一以上の推測レジスタ状態を記録するために用いられる）。レジスタマップは、レジスタのリネームを容易にするために、ソースおよび目的オペランドの論理レジスタ名を物理レジスタ名に変換することができる。そのようなレジスタマップは、レジスタファイル１１６内のどのレジスタが現在割り当てられているか、及び割り当てられていないか、を追跡できる。
【００１７】
オペレーションがディスパッチユニット１０４によって処理される場合に、要求されているオペランドがレジスタの位置であるときは、レジスタアドレス情報がレジスタマップまたはリオーダバッファに送られる。例えば、ｘ８６アーキテクチャにおいては、８つの３２ビット論理レジスタがある（例えば、ＥＡＸ，ＥＢＸ，ＥＣＸ，ＥＤＸ，ＥＢＰ，ＥＳＩ，ＥＤＩおよびＥＳＰ）。物理レジスタファイル１１６（またはリオーダバッファ）はこれらの論理レジスタの内容を変更する結果のための記録装置を含み、アウトオブオーダー実行を許可する。レジスタファイル１１６内の物理レジスタは、論理レジスタの一つの内容を修正する各オペレーションの結果を記録するために割り当てられる。従って、特定のプログラムを実行している間の任意の時点において、レジスタファイル１１６（または、他の実施形態では、リオーダバッファ）は、与えられた論理レジスタの投機的に実行された内容を含む１以上のレジスタを持つ。
【００１８】
レジスタマップは物理レジスタをあるオペレーションの目的オペランドとして指定された特定の論理レジスタに割り当てる。レジスタファイル１１６は、所与のオペレーションにおいてソースオペランドとして指定された論理レジスタに割り当てられた、既に割り当てられた１以上の物理レジスタを有し得る。このレジスタマップはその論理レジスタに最近に割り当てられた物理レジスタのためのタグを供給することができる。このタグは、レジスタファイル１１６内のオペランドのデータ値にアクセスするために用いることができ、または結果バス１３０において転送される結果を介してデータ値を受信することができる。もしオペランドがメモリ位置に対応するならば、そのオペランド値は読み出し／書き込みユニット１２６を介して結果バスに供給される（結果転送および／またはレジスタファイル１１６への記録のため）。スケジューラ１１８の１つからオペレーションが発行されると、オペランドデータ値が実行コア１２４に供給される。他の実施形態においては、オペレーションがディスパッチされると、オペランド値が対応するスケジューラ１１８に供給される（そのオペレーションが発行されたときに対応する実行コア１２４に供給する代わりに）。
【００１９】
ディスパッチユニット１０４の出力で与えられたビット符号化されたオペレーションと即値データ（immediate data）は、一つ又はそれ以上のスケジューラ１１８にルーティングされ得る。本文に記載されたように、スケジューラはオペレーションの実行の準備ができたことを検出し、一つ又はそれ以上の実行ユニットに準備オペレーションを発行するデバイスである。例えば、予約ステーションはスケジューラである。各スケジューラ１１８は、実行コア１２４への発行を待つ幾つかのペンディング中のオペレーションに関するオペレーション情報（例、オペランド値、オペランドタグ、及び／又は即値データと同様のビット符号化された実行ビット）を保持することができる。ある種の実施形態では、各スケジューラ１１８は、オペランド値を記録することはできない。その代わりに、オペランド値が実行コア１２４によって（レジスタファイル１１６又は結果バス１３０から）読み出し可能となる時点を判定するために、レジスタファイル１１６において利用可能な発行されたオペレーション及び結果を各スケジューラが監視し得る。ある種の実施形態では、各スケジューラ１１８は専用の実行コア１２４に関連付けられ得る。他の実施形態では、シングルスケジューラ１１８が１つ以上の実行コア１２４にオペレーションを発行し得る。
【００２０】
スケジューラ１１８は、実行コア１２４によって実行されるオペレーション情報を一時記録するために提供されうる。上述のとおり、各スケジューラ１１８はペンディング中のオペレーションのためにオペレーション情報を記録することができる。さらに、各スケジューラは、すでに実行済みであるが再発行される可能性のあるオペレーションのためのオペレーション情報を記録することができる。実行のために利用可能となった任意の必要とされるオペランドの値に応答して、オペレーションが、実行コア１２４で実行されるよう発行される。従って、オペレーションが実行される順番は、元のプログラム命令シーケンスの順番とは同じでない可能性がある。
【００２１】
一実施形態では、実行コア１２４の各々は、シフト、ローテート、論理演算、及び分岐オペレーションと同様に加算及び減算の整数演算オペレーションも実行するように構成されるコンポーネントを含み得る。浮動小数点演算を行うように浮動小数点ユニットを含めることもできる。読み出し／書き込みユニット１２６によって実施される読み出し及び書き込みメモリオペレーション用のアドレス生成を行うように、一つ又はそれ以上の実行コア１２４が構成され得る。
【００２２】
実行コア１２４内のコンポーネントによって生成された結果は、レジスタの値が更新されていれば、結果バス１３０においてレジスタファイル１１６に対して出力される。メモリ位置の内容が変更されていれば、実行コア１２４内で生成された結果は、読み出し／書き込みユニット１２６に対して供給される。
【００２３】
読み出し／書き込みユニット１２６は実行コア１２４とデータキャッシュ１２８との間にインターフェースを提供する。一実施形態では、読み出し／書き込みユニット１２６はペンディング中の読み出し又は書き込みに関するデータ及びアドレス情報の幾つかのストレージロケーションを備えた読み出し／書き込みバッファで構成され得る。読み出し／書き込みユニット１２６はまた、ペンディング中の書き込み命令に対するロード命令の依存性チェックも行い、データのコヒーレンシーが確実に維持されるようにする。
【００２４】
データキャッシュ１２８は、読み出し／書き込みユニット１２６とシステムメモリ２００との間で転送されたデータを一時的に記録するために提供されるキャッシュメモリである。上述の命令キャッシュ１０６と同様に、データキャッシュ１２８はセットアソシアティブ構成を含む、様々な特定のメモリ構成において実装可能である。さらに、データキャッシュ１０６および命令キャッシュ１２８は、ある実施形態においては統一されたキャッシュとして実装可能である。
読み出し／書き込みユニット
【００２５】
図２に一実施形態によるストア−ロードフォーワード（ＳＴＬＦ）バッファ３０５を含む読み出し／書き込みユニット１２６を例示する。読み出し／書き込みユニット１２６は、既にディスパッチ済みであるが未だ中止されていない未処理オペレーション用のオペレーション記録装置３０７も備えている。オペレーション記録装置３０７は読み出し／書き込みユニット１２６内の全ての未処理オペレーションを追跡することができる。オペレーション記録装置３０７はディスパッチされた読み出しオペレーションのそれぞれとディスパッチされた書き込みオペレーションのそれぞれのためにエントリ３１０を含み得る。
【００２６】
エントリ３１０には、当該エントリ３１０が読み出しオペレーション又は書き込みオペレーションへ割り当てられているかどうかを示す情報３１３を含み得る。（もしくは、ある種の実施形態では、エントリが、メモリアドレスから読み出された値にオペレーションを行ってその結果をメモリアドレスへ記録するというオペレーションに対応する場合には、そのエントリは読み出しオペレーションと書き込みオペレーションの両方を含むことを示し得る。更に、エントリ３１０はタグ３１５（例えば、マイクロプロセッサ１００内のオペレーション及び／又はその結果を識別する）、アドレス３１７、及び／又はデータ３１９を含み得る。エントリ３１０は、オペレーションをディスパッチするディスパッチユニット１０４に応答して割り当てられ、また、オペレーションを中止するリタイアキュー１０２に応答して割り当てが解除される。
【００２７】
ＳＴＬＦバッファ３０５の各エントリ３２０は固有のインデックスにより選択され得る。読み出し／書き込みユニット１２６はオペレーションの全てのアドレス、もしくは一部のアドレスからインデックスを生成し、そのインデックスを使用してオペレーションがアクセスするエントリを選択する。例えば、読み出し／書き込みユニット１２６はアドレスにおけるビットのサブセットからインデックスを生成することができる。使用されるアドレスは、物理アドレス又は仮想アドレスであり得る。ある種の実施形態では、インデックスはオペレーションのデータサイズにも対応する。
【００２８】
ある種の実施形態では、書き込みオペレーションに対するアドレスとデータのどちらも利用可能である場合、書き込みオペレーションは同一アドレスを目標にする、より新しい読み出しオペレーションへ書き込みオペレーションのデータを転送することができる。その時点で、読み出し／書き込みユニットはＳＴＬＦバッファ３０５のエントリ３２０を書き込みオペレーションへ割り当てることができる。読み出し／書き込みユニット１２６は、少なくとも一部の書き込みオペレーションのアドレスからインデックスを算出することによって、書き込みオペレーションへ割り当てるエントリ３２０を選択することができる。そのインデックスが選択したエントリ３２０を書き込みオペレーションへ割り当てることができる。ＳＴＬＦバッファ３０５のエントリ３２０は、そのエントリを割り当てる書き込みオペレーションのアドレス３２１、データ３２７、及びデータサイズ３２９（例えば、書き込みオペレーションが動作するデータのバイト数）、の全ての、もしくは一部を含み得る。ＳＴＬＦバッファ３０５の全エントリは、書き込みオペレーションに関連付けられ得る最大量のデータを記録する十分な容量を備えている。
【００２９】
読み出しオペレーションのアドレスが利用可能になるときは、常に、読み出し／書き込みユニット１２６は、ＳＴＬＦバッファ３０５内のエントリ３２０を選択するために、全ての、又は一部の読み出しオペレーションのアドレスに基づいてインデックスを生成する。選択したエントリ３２０に含まれるアドレス情報３２１及び／又はデータサイズ情報３２９が、読み出しオペレーションに関連付けられたアドレス情報及び／又はデータサイズ情報とマッチングする場合、ＳＴＬＦバッファ３０５は読み出しオペレーションの結果としてデータ３２７をそのエントリに転送する。なお、ここでいう“マッチング”は、アドレス情報３２１、データサイズ情報３２９、及び／又はエントリ３２０に含まれるその他のすべての情報が、読み出しオペレーションに関連付けられた情報に少なくとも一部がマッチする場合に発生するものである。例えば、読み出しオペレーションに関連付けられる情報がエントリ情報のサブセットもしくは一部にマッチングしたことに応答して、エントリがマッチングしたと考えられる。その他の実施形態では、エントリの情報が読み出しオペレーションの情報と完全にマッチングする場合にのみ、マッチングが発生する。
【００３０】
ある実施形態では、エントリ３２０のインデックスはオペレーションのアドレスの下位ビットを含み得る。その他の実施形態では、オペレーションのアドレスにある変換関数を実施することによってインデックスを生成することができる。ある種の実施形態では、任意の与えられたアドレスとデータサイズのペアが単一のインデックスをマッピングするようにインデックスが生成され得る（複数の異なるアドレスから同一のアドレスが形成され得る点に留意されたい）。従って、ＳＴＬＦバッファ３０５にインデックスを付けるために読み出しオペレーションのアドレスを使用するときは常に単一のエントリ３２０が選択される。インデックス付きのＳＴＬＦバッファ３０５を使用したストア−ロードフォーワードは、従来のＳＴＬＦバッファを使用したストア−ロードフォーワードよりも、少ないサイクルで実施することができる。
【００３１】
ある実施形態では、ＳＴＬＦバッファ３０５のサイズは制限されており、そのため、記録できるエントリ数は限られており、読み出し／書き込みユニットのオペレーション記録装置３０７に記録されるオペレーション数よりも少ない。。これにより、ある条件下ではＳＴＬＦバッファ３０５のエントリ３２０にコンフリクトが生じる。例えば、ＳＴＬＦバッファ３０５は０ｘ０ｈから０ｘＦｈまでのアドレスに対応する１６個のエントリを記録することができる。命令シーケンスは、各々が４バイトのデータを記録する、一連の書き込みオペレーションを発行する。この一連の書き込みオペレーションは、第１、第２、第３の書き込みオペレーションがそれぞれ、アドレス０ｘ００ｈ、０ｘ０４ｈ、０ｘ０８ｈ、を目標にするように、シーケンシャルなメモリアドレスを目標にする。ダイレクトマッピングインデックス法を使用する実施形態では、初めの４つの書き込みオペレーションはＳＴＬＦバッファ３０５のエントリ３２０を、インデックス０ｘ０ｈ、０ｘ４ｈ、０ｘ８ｈ、及び０ｘＣｈで生成する。この一連のオペレーションにおける次の書き込みオペレーションは、アドレス０ｘ１０ｈを目標にし、また、この書き込みオペレーションのエントリ３２０用に生成されたインデックスは０ｘ０ｈである。このインデックスとアドレス０ｘ００ｈを目標にした、第１書き込みオペレーション用に生成されたインデックスは同じであるため、これらの読み出し／書き込みユニット１２６はこれらの２つの書き込みオペレーションに対して、ＳＴＬＦバッファにおいて同じエントリ３２０を選択する。
【００３２】
アドレス０ｘ１０ｈを持つ書き込みオペレーションとアドレス０ｘ００ｈを持つ書き込みオペレーションは同一エントリにインデックスを付けることから、ＳＴＬＦバッファ３０５のその他のエントリが同時に割り当てられなくても、両書き込みオペレーションは、ＳＴＬＦバッファにおいて同時に表すことはできない。ＳＴＬＦバッファ３０５において、新しい書き込みオペレーション用にエントリが割り当てられない場合は、読み出し／書き込みユニット１２６は新しい書き込みオペレーションに関連付けられたデータを、同一アドレスを目標にする読み出しオペレーションへすぐに転送することができない。他方、アドレス０ｘ１０ｈを持つ新しい書き込みオペレーションへエントリが割り当てられ、アドレス０ｘ００ｈを持つ書き込みオペレーション用に情報の上書きを行う場合は、読み出し／書き込みユニット１２６は古い書き込みオペレーションに関連付けられたデータを、同一アドレスを目標にする読み出しオペレーションへすぐに転送することができない。
【００３３】
ＳＴＬＦバッファ３０５にインデックスを生成する際に、ハッシング関数、又はその他の変換をアドレスへ適用することによって、連続したアドレスへアクセスする一連の書き込みオペレーション間に発生するコンフリクトの可能性を小さくされ得る。一実施形態では、読み出し／書き込みユニット１２６は、オペレーションのアドレスをｌｏｇ２（データサイズ）に等しい分だけ右へシフトすることによって各インデックスを形成する。上記に挙げた例では、このハッシング関数を適用することによって、アドレス０ｘ００ｈを目標にする書き込みオペレーションをインデックス０ｘ０ｈにおけるエントリ３２０に変換する。アドレス０ｘ０４ｈを目標にする書き込みオペレーションに対しては、読み出し／書き込みユニット１２６は、エントリをインデックス０ｘ１ｈに割り当てるであろう。同様に、読み出し／書き込みユニットは、インデックス０ｘ２ｈが選択したエントリを、アドレス０ｘ０８ｈを持つ書き込みオペレーションへ割り当てる。アドレス０ｘ００ｈを目標にする書き込みオペレーションと以前にコンフリクトした、アドレス０ｘ１０ｈを目標にする書き込みオペレーションには、０ｘ４のインデックスにより選択されるエントリが割り当てられ、従ってもはやコンフリクトを引き起こすことはない。従って、ＳＴＬＦバッファ３０５のエントリ３２０のためのインデックス生成にハッシング関数もしくはその他の変換を組込むことによって、ＳＴＬＦバッファの記録容量の利用率が高まる。
【００３４】
読み出し及び書き込みオペレーションに対する目標アドレスを上述のように変換してＳＴＬＦバッファ３０５の中にインデックスを生成することにより、同じ最大データサイズセグメント内の様々なバイトに対して割り当てられた、複数の書き込みオペレーションへのエントリは、ＳＴＬＦバッファ３０５内に同時に存在することができる。しかし、下位ビットがシフトアウトすると正確さがある程度失われろ。また、アドレス３２１とデータサイズ３２９の両方を比較し、ＳＴＬＦバッファ３０５内のヒットを判断することが必要である。例えば、各アドレス０ｘ００ｈ、０ｘ０２ｈ、及び０ｘ０４ｈに対する２バイトの書き込みオペレーション用のエントリはそれぞれ、インデックス位置０ｘ０ｈ、０ｘ１ｈ、及び０ｘ２ｈでＳＴＬＦバッファ３０５に共存する。アドレス０ｘ０４を目標とする４バイトの読み出しオペレーションをマッチングさせようとする場合有効エントリが見つけられるであろう０ｘ１ｈのインデックスがＳＴＬＦバッファ３０５内に生成されることになる。。しかし、０ｘ１ｈでエントリを生成した書き込みオペレーションは、２バイトのデータでしかオペレートしていないので、このマッチングに対して、読み出し／書き込みユニットはミスを発行する必要がある。読み出しオペレーションのアドレスとデータサイズの両方をＳＴＬＦバッファ３０５のエントリと比較することにより、少なくともある程度の誤ったマッチを妨げることができる。
【００３５】
ある種の実施形態では、アドレスを変換してＳＴＬＦバッファ３０５の中にインデックスを生成する場合でさえも、２以上の書き込みオペレーションが同じＳＴＬＦバッファエントリ３２０をマッピングするという状況が発生する。このような状況では、これらの書き込みオペレーションと同一のアドレスを目標にする読み出しオペレーションが、誤った書き込みオペレーションからデータを転送する可能性がある。ＳＴＬＦバッファ３０５が間違ってデータを転送し得るという、ある種の実施形態では、ＳＴＬＦバッファ３０５は転送された結果が投機的であると識別する。例えば、転送されたデータに関連付けられるビットは、そのデータが投機的であることを識別するように設定される。これらの結果は、ＳＴＬＦチェッカー３０３などの検証機構によって検証されるまでは投機的であると識別される。
【００３６】
ＳＴＬＦチェッカー３０３は、ＳＴＬＦオペレーションの正確性検証手段である。。ある種の実施形態では、ＳＴＬＦチェッカー３０３はアソシエイティブルックアップ(associative lookup)を実行し、またファインドファーストアルゴリズムを実装する従来のＳＴＬＦバッファとして実装され得る。従って、ＳＴＬＦチェッカー３０３は読み出しオペレーションのアドレスと、読み出し／書き込みユニット１２６のオペレーション記録装置３０７の全ての書き込みオペレーションとを比較する。マッチする全てのエントリ３１０が識別されると、ＳＴＬＦチェッカー３０７はファインドファーストアルゴリズムを採用して、読み出しオペレーションよりも古い、最も新しい書き込みオペレーションに割り当てられたエントリ３１０を識別する。識別されたエントリ３１０からのデータ３１９は、読み出しオペレーションの結果として転送される値として選択される。ＳＴＬＦチェッカー３０３は、ストア−ロードフォーワードを実施するために、ＳＴＬＦバッファ３０５よりも実質的に多くのサイクルを必要とする。
【００３７】
ＳＴＬＦチェッカー３０３は読み出しオペレーションへ転送されるデータに対する正しいソースを正確に識別する。ＳＴＬＦチェッカー３０３とＳＴＬＦバッファ３０５が、同じオペレーションを、所与の読み出しオペレーションの結果としてデータを転送するソースとして識別すると、読み出しオペレーションの結果としてＳＴＬＦバッファ３０５が転送するデータは既に投機的ではなく、また、読み出し／書き込みユニットはその趣旨の表示をする。例えば、転送されたデータに関連付けられたビットはクリアされ、データが既に投機的ではないことが示される。一方、ＳＴＬＦバッファ３０３が、ＳＴＬＦバッファ３０５からデータを転送するために使用されたオペレーションとは違う書き込みオペレーションを識別した場合、読み出しオペレーションとそれに続いて投機的データ上で動作したいずれのオペレーションも、無効な結果を生成したおそれがある。ＳＴＬＦチェッカー３０３はまた、読み出しオペレーションが先の書き込みオペレーションからデータを転送すべきであったにもかかわらず、読み出しオペレーションの結果としてＳＴＬＦバッファ３０５がデータを転送しなかった状況も検出する。
【００３８】
ＳＴＬＦチェッカー３０３は間違ってＳＴＬＦバッファ３０５へ転送された読み出しオペレーション、もしくは間違ってＳＴＬＦバッファ３０５に転送されなかった読み出しオペレーションのどちらも中止することができる。そのような場合、ＳＴＬＦチェッカー３０３は読み出しオペレーションをリプレイさせる（例えば、スケジューラ１１８へ信号を送ることによって）。ＳＴＬＦチェッカー３０３は、書き込みオペレーションを識別する情報を生成し、間違って転送された（もしくは、間違って、転送されなかった）読み出しオペレーションを転送する必要がある。読み出し／書き込みユニット１２６内で読み出しオペレーションがリプレイされると、読み出し／書き込みユニット１２６は、読み出しオペレーションの結果としてＳＴＬＦチェッカー３０３が識別した書き込みオペレーションからデータ転送を行うためにこの情報を使用する。別の形態では、読み出し／書き込みユニット１２６はＳＴＬＦチェッカー３０３が中止し、ＳＴＬＦバッファ３０５の誤ったオペレーションに起因となってリプレイさせた読み出しオペレーションに対して、結果を転送しないように構成することもできる。
【００３９】
図３は一実施形態によるストア−ロードフォーワードバッファを含むマイクロプロセッサを動作させる方法のフローチャートである。書き込みオペレーションの目標アドレスと関連データのどちらも有効である場合（４０５）、全ての又は一部の書き込みオペレーションのアドレス及び／又はデータサイズから生成されるインデックスに基づき、書き込みオペレーションへ割り当てるためにストア−ロードフォーワードバッファのエントリが選択される（４１０）。選択されたエントリは書き込みオペレーションのために目標アドレスの全て又は一部を記録する（例えば、エントリはインデックス生成に使用されない目標アドレスの上位ビットを含むタグを記録する）。このエントリはまた、データサイズを表す値とともに、書き込みオペレーションに関連付けられたデータの記録も行う。
【００４０】
読み出しオペレーションに関連付けられたアドレスを受信すると（４１５）、読み出し／書き込みユニットはそのアドレスに基づきＳＴＬＦバッファの中にインデックスを生成する（４２０）。インデックスが選択したエントリが有効である場合、４２５において、読み出し／書き込みユニットはエントリのアドレスとデータサイズを読み出しオペレーションのエントリのアドレスとデータサイズと比較する（４２５）。マッチングエントリからのデータは、読み出しオペレーションの結果として転送される。選択したエントリのアドレス及び／またはデータサイズが読み出しオペレーションのそれらとマッチしない場合、読み出しオペレーションの結果として転送されるデータはない。
【００４１】
図４は、マイクロプロセッサを動作させる方法のフローチャートであって、本発明によるインデックス付ストア−ロードフォーワードバッファに加え、ＳＴＬＦチェッカーが組み込まれている。読み出しオペレーション用のアドレスを受信すると（５０５）、図３のオペレーション４２０−４３５に従って、ＳＴＬＦチェッカーはオペレーション記録装置内の検索を開始し、マッチする目標アドレスを持つ、オペレーション記録装置内の全ての書き込みオペレーションを識別する（５１０）。読み出しオペレーションよりも古い書き込みオペレーショングループから、ＳＴＬＦチェッカーはデータに対する正しいソースとして最も新しいオペレーションを選択し、読み出しオペレーションへ転送する（５１５）。読み出し／書き込みユニットはＳＴＬＦバッファから読み出しオペレーションへデータ転送を行うように選択された書き込みオペレーションと（４３０）ＳＴＬＦチェッカーが識別した書き込みオペレーションとを比較する（５２０）。ＳＴＬＦチェッカーが識別した書き込みオペレーション以外の任意の書き込みオペレーションから読み出しオペレーションへデータ転送が行われた場合（５１５）、もしくは、読み出しオペレーションへデータ転送が行われず（４３５）にＳＴＬＦチェッカーがマッチング書き込みオペレーションを識別した場合（５１５）、読み出し／書き込みユニットは後続のいずれのオペレーションとともに読み出しオペレーションをリプレイし得る。これは読み出しオペレーションの結果に応じてなされる（５２５）。ある実施形態では、読み出し／書き込みユニットは、５１５で識別された書き込みオペレーションを、その後の読み出しオペレーションの再処理で使用するため読み出しオペレーションへ転送すべきデータの正しいソースであると識別する。その他の実施形態では、読み出し／書き込みユニットは、読み出しオペレーションのその後の再処理にストア−ロードフォーワードを行うことを禁止し得る。
［例示的コンピュータシステム］
【００４２】
図５は、バスブリッジ９０２を介して様々なシステムコンポーネントに結合されたプロセッサ１００を含むコンピュータシステム９００の一実施形態のブロック図を示す。プロセッサ１００は、上述したようにＳＴＬＦバッファ３０５とチェッカー３０３を含む読み出し／書き込みユニットを含む。コンピュータシステムの他の実施形態が、可能であり、また考えられる。図示されたシステムにおいて、メインメモリ２００は、メモリバス９０６を介してバスブリッジ９０２に結合され、画像コントローラ９０８は、ＡＧＰバス９１０を介してバスブリッジ９０２に結合される。いくつかのＰＣＩデバイス９１２Ａ〜９１２Ｂは、ＰＣＩバス９１４を介してバスブリッジ９０２に結合される。第２バスブリッジ９１６も、ＥＩＳＡ／ＩＳＡバス９２０を介してＥＩＳＡ又はＩＳＡデバイス９１８のうちの１つ又はそれ以上に電気的インターフェースを適用するように供給されることが可能である。この実施例では、プロセッサ１００は、ＣＰＵバス９２４と任意のＬ２キャッシュ９２８を介してバスブリッジ９０２に結合される。ある実施形態では、プロセッサ１００は統合されたＬ１キャッシュ（図示せず）を含むことが可能である。
【００４３】
バスブリッジ９０２は、プロセッサ１００、メインメモリ２００、画像コントローラ９０８と、ＰＣＩバス９１４に接合されたデバイス間のインターフェースを与える。オペレーションがバスブリッジ９０２に接続されたデバイスの１つから受信されると、バスブリッジ９０２はこのオペレーションの目標（例えば、特定のデバイスもしくはＰＣＩバス９１４の場合、目標がＰＣＩバス９１４上にあるデバイス）を識別する。バスブリッジ９０２がオペレーションを目標となるデバイスに伝送する。バスブリッジ９０２は通常、ソースデバイス又はバスによって使用されるプロトコル、あるいはターゲットデバイス又はバスによって使用されるプロトコルからのオペレーションを変換する。
【００４４】
ＰＣＩバス９１４のためにＩＳＡ／ＥＩＳＡバスにインターフェースを供給することに加えて、第２バスブリッジ９１６は、更なる機能性を内蔵し得る。第２バスブリッジ９１６の外部あるいは第２バスブリッジに統合されているうちの何れかである入力／出力コントローラ（図示せず）は、コンピュータシステム９００内に含むことができ、キーボード及びマウス９２２と様々なシリアル及びパラレルポートに関するオペレーショナルサポートを提供する。他の実施形態では、外部のキャッシュユニット（図示せず）は、プロセッサ１００とバスブリッジ９０２間のＣＰＵバス９２４にも結合され得る。他の形態では、外部のキャッシュはバスブリッジ９０２に結合することができ、外部のキャッシュのキャッシュコントロールロジックは、バスブリッジ９０２に統合可能である。Ｌ２キャッシュ９２８はプロセッサ１００の裏面の構成に示される。Ｌ２キャッシュ９２８は、プロセッサ１００から分離し得、プロセッサ１００でカートリッジ（例、スロット１又はスロットＡ）内に統合可能であり、あるいはプロセッサ１００で半導体基板上にも統合可能である。
【００４５】
メインメモリ２００はアプリケーションプログラムが記録され、プロセッサ１００が主に実行するメモリである。適合可能なメインメモリ２００は、ＤＲＡＭ（Dynamic Random Access Memory）を含み得る。例えば、複数のＳＤＲＡＭ（同期ＤＲＡＭ）あるいはＲａｍｂｕｓ  ＤＲＡＭ （ＲＤＲＡＭ；Rambus 社開発のＤＲＡＭ）が適合可能であり得る。
【００４６】
ＰＣＩデバイス９１２Ａ〜９１２Ｂは、ネットワークインターフェースカード、ビデオアクセラレータ、オーディオカード、ハードあるいはフロッピーディスクドライブあるいはドライブコントローラ、ＳＣＳＩ（Small Computer System Interface）アダプタ及びテレフォニーカードのような多様な周辺デバイスを示す。同様に、ＩＳＡデバイス９１８はモデム、サウンドカード、及びＧＰＩＢあるいはフィールドバスインターフェースカードのような周辺デバイスの様々な形式を表す。
【００４７】
グラフィックスコントローラ９０８は、モニタ９２６上のテキスト及び画像のレンダリングをコントロールするよう提供される。グラフィックスコントローラ９０８は、メインメモリ２００に、及びメインメモリ２００から実効的にシフト可能である３次元データ構造を表現する技術分野で通常、知られる一般的なグラフィックスアクセラレータを実施可能である。それ故、グラフィックスコントローラ９０８は、バスブリッジ９０２内のターゲットインターフェースへのアクセスを要求可能であり、又受信可能であり、それによってメインメモリ２００へのアクセスを入手するＡＧＰバス９１０のマスターであり得る。専用のグラフィックスバスは、メインメモリ２００からのデータの高速検索に対応する。ある種のオペレーションに関して、グラフィックスコントローラ９０８は、ＡＧＰバス９１０上にＰＣＩプロトコルトランザクションを生成するよう更に構成可能である。それ故、バスブリッジ９０２のＡＧＰインターフェースは、ＰＣＩプロトコルターゲットとイニシエータトランザクションと同様にＡＧＰプロトコルトランザクションの双方を支援するよう機能性を含み得る。モニタ９２６は、画像あるいはテキストが表示可能である電気的モニタの全てである。適切なモニタ９２６は、ブラウン管（“ＣＲＴ；Cathode Ray Tube”）、液晶モニタ（“ＬＣＤ；Liquid Crystal Display”）を含む。
【００４８】
ＡＧＰ、ＰＣＩ及びＩＳＡ又はＥＩＳＡバスは、上述した記載の例として使用されており、所望に応じて全てのバスアーキテクチャが上書きされることに注目される。コンピュータシステム９００が追加のプロセッサ（例えば、コンピュータシステム９００の任意のコンポーネントとして示されるプロセッサ１００ａ）を含むマルチプロセッシングコンピュータシステムであることが更に注目される。プロセッサ１００ａは、プロセッサ１００と同様であり得る。より具体的には、プロセッサ１００ａは、プロセッサ１００の同一のコピーであり得る。プロセッサ１００ａは、独立したバスを介して（図３に示されるように）バスブリッジ９０２に接続されるか、あるいはプロセッサ１００とＣＰＵバス９２４を共有することができる。更に、プロセッサ１００ａは、Ｌ２キャッシュ９２８と同様の任意のＬ２キャッシュ９２８ａに結合することができる。
【００４９】
図６を参照すると、上述したようにプロセッサ１００を含むコンピュータシステム９００の他の実施形態が示される。他の実施形態が可能であり、考えられる。図６の実施形態においては、コンピュータシステム９００はいくつかのプロセッシングノード１０１２Ａ、１０１２Ｂ、１０１２Ｃ及び１０１２Ｄを含む。各プロセッシングノードは、各プロセッシングノード１０１２〜１０１２Ｄ内に含まれるメモリコントローラ１０１６Ａ〜１０１６Ｄを介して各メモリ２００Ａ〜２００Ｄに結合される。加えて、プロセッシングノード１０１２Ａ〜１０１２Ｄは、プロセッシングノード１０１２Ａ〜１０１２Ｄ間を通信するように使用されるインターフェースロジックを含む。例えば、プロセッシングノード１０１２Ａは、プロセッシングノード１０１２Ｂと通信するためのインターフェースロジック１０１８Ａ、プロセッシングノード１０１２Ｃと通信するためのインターフェースロジック１０１８Ｂ、及び更なる他のプロセッシングノード（図示せず）と通信するための第３インターフェースロジック１０１８Ｃを含む。同様に、プロセッシングノード１０１２Ｂは、インターフェースロジック１０１８Ｄ、１０１８Ｅ及び１０１８Ｆを含み、プロセッシングノード１０１２Ｃは、インターフェースロジック１０１８Ｇ、１０１８Ｈ、及び１０１８Ｉを含み、プロセッシングノード１０１２Ｄは、インターフェースロジック１０１８Ｊ、１０１８Ｋ、及び１０１８Ｌを含む。プロセッシングノード１０１２Ｄは、インターフェースロジック１０１８Ｌを介して複数の入力／出力デバイス（例、デイジーチェーン構成におけるデバイス１０２０Ａ〜１０２０Ｂ）と通信するよう結合される。他のプロセッシングノードは、同様の方法で他のＩ／Ｏデバイスと通信し得る。
【００５０】
プロセッシングノード１０１２Ａ〜１０１２Ｄは、インタープロセッシングノード通信用にパケットベースのリンクを実装する。本実施形態において、リンクが単方向ライン（ユニディレクタルライン）のセット（例えば、ライン１０２４Ａがプロセッシングノード１０１２Ａからプロセッシングノード１０１２Ｂへパケットを伝送するように使用され、ライン１０２４Ｂは、プロセッシングノード１０１２Ｂからプロセッシングノード１０１２Ａにパケットを伝送するように使用される）として実装される。その他のライン１０２４Ｃ−１０２４Ｈのセットは、図６に例示しているように、その他のプロセッシングノード間にパケットを伝送するように使用される。一般的に、ライン１０２４の各セットは、１つ又はそれ以上のデータラインを含み、このデータラインに応じた１つ又はそれ以上のクロックラインを含み、伝送されるパケット形式を示す１つ又はそれ以上のコントロールラインを含む。リンクは、プロセッシングノード間の通信用にキャッシュコヒーレントに、あるいはプロセッシングノードとＩ／Ｏデバイス（あるいはＰＣＩバス又はＩＳＡバスのような従来の構造のＩ／Ｏバスへのバスブリッジ）間の通信用には非コヒーレントに動作させてもよい。更に、リンクは、図示されるようにＩ／Ｏデバイス間のデイジーチェーン構造を使用して非コヒーレントに動作され得る。１つのプロセッシングノードから別のプロセッシングノードに伝送されるパケットは、１つ又はそれ以上の中間ノードを通じて伝送し得る。例えば、プロセッシングノード１０１２Ａによってプロセッシングノード１０１２Ｄまで伝送されたパケットは、図６に示すプロセッシングノード１０１２Ｂあるいはプロセッシングノード１０１２Ｃの何れかを介して伝送し得る。全ての適合可能なルーティングアルゴリズムが使用され得る。コンピュータシステム９００の他の実施形態は、図６に示す実施形態より多いか、あるいは少ないプロセッシングノードを含み得る。
【００５１】
通常、パケットはノード間のライン１０２４に１つ又はそれ以上のビット時間として伝送され得る。ビット時間は、対応するクロックラインのクロック信号の立ち上がり又は立ち下がりエッジであり得る。パケットはトランザクションを開始するためのコマンドパケット、キャッシュコヒーレンシーを維持するためのプローブパケット、及びプローブとコマンドに応答するための応答パケットを含み得る。
【００５２】
メモリコントローラとインターフェースロジックに加えて、プロセッシングノード１０１２Ａ〜１０１２Ｄは、１つ又はそれ以上のプロセッサを含み得る。大まかに言って、プロセッシングノードは少なくとも１プロセッサを含み、所要に応じて任意的にメモリと他の論理と通信するためのメモリコントローラを含み得る。より具体的には、各プロセッシングノード１０１２Ａ〜１０１２Ｄは、１つ又はそれ以上のプロセッサ１００のコピーを含み得る。外部のインターフェースユニットは、メモリコントローラ１０１６Dと同様にノード内にインターフェースロジック１０１８Lを含み得る。
【００５３】
メモリ２００Ａ〜２００Ｄは、適合可能な全てのメモリデバイスを含み得る。例えば、メモリ２００Ａ〜２００Ｄは、１つ又はそれ以上のＲＡＭＢＵＳ  ＤＲＡＭ（ＲＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ），静的ＲＡＭ等を含み得る。コンピュータシステム９００のアドレススペースは、メモリ２００Ａ〜２００Ｄ間に分割される。各プロセッシングノード１０１２Ａ〜１０１２Ｄは、何れのアドレスが何れのメモリ２００Ａ〜２００Ｄにマップされるかを決定し、従って、プロセッシングノード１０１２Ａ〜１０１２Ｄの何れに特定的なアドレスのメモリ要求が送信されなければならないかのを決定するよう使用されるメモリマップを含み得る。一実施形態において、コンピュータシステム９００におけるアドレスのコヒーレンシーポイントはこのアドレスに対応するバイトを記録するメモリに結合されたメモリコントローラ１０１６Ａ〜１０１６Ｄである。言い換えれば、メモリコントローラ１０１６Ａ〜１０１６Ｄは、対応するメモリ２００Ａ〜２００Ｄへの各アクセスがキャッシュコヒーレントにおいて生じることを確実にする役目を担う。メモリコントローラ１０１６Ａ〜１０１６Ｄは、メモリ２００Ａ〜２００Ｄへインターフェースするためのコントロール回路を含み得る。加えて、メモリコントローラ１０１６Ａ〜１０１６Ｄは、メモリ要求をキューするための要求キューを含み得る。
【００５４】
インターフェースロジック１０１８Ａ〜１０１８Ｌは、リンクからのパケットを受信し、リンク上に伝送されるパケットをバッファリングする様々なバッファを含み得る。コンピュータシステム９００は、パケットを伝送する適合可能なフローコントロール機構の全てを使用し得る。例えば、一実施形態において、各インターフェースロジック１０１８は、インターフェースロジックが接続されるリンクの他の末端におけるレシーバ内のバッファの各形式の数のカウントを記録する。インターフェースロジックは、受信するインターフェースロジックがパケットを記録するための空いているバッファを有さない場合は、パケットを伝送しない。受信するバッファが伝送されるパケットを送信することによって解除されるので、受信するインターフェースロジックが、メッセージを送信インターフェースロジックに伝送し、バッファが解除されたことを示す。そのような機構は、“クーポンベースの”システムと称される。
【００５５】
Ｉ／Ｏデバイス１０２０Ａ〜１０２０Ｂは、適合可能なＩ／Ｏデバイスであり得る。例えば、Ｉ／Ｏデバイス１０２０Ａ〜１０２０Ｂが、これらのデバイスが結合され得る他のコンピュータシステム（例、ネットワークインターフェースカードあるいはモデム）と通信するデバイスを含み得る。更に、Ｉ／Ｏデバイス１０２０Ａ〜１０２０Ｂは、ビデオアクセラレータ、オーディオカード、ハード又はフロッピーディスクドライブ又はドライブコントローラ、ＳＣＳＩ（Small Computer System Interface）アダプタ、及びテレフォニーカード、サウンドカード、及びＧＰＩＢ又はフィールドバスインターフェースカードのような様々なデータ入手カードを含む。用語“Ｉ／Ｏデバイス”と“周辺デバイス”は、同義語として本文に意図される。
【００５６】
ここで使用されるように、用語“クロックサイクル”は、命令プロセッシングパイプラインの様々なステージがタスクを完了する時間間隔を意味する。命令及び計算された値は、クロックサイクルを定義するクロック信号に従ってメモリ素子（レジスタあるいはアレイなど）によって取得される。例えば、メモリ素子は、クロック信号の立ち上がり又は立ち下がりエッジに従って値を取得することができる。
【００５７】
上述した明細書は信号を“表された（asserted）”ものとして説明するものである。情報の特定的な一部を示す値を伝送するとき、信号は“表された”ものとして定義され得る。特定的な信号では、バイナリ値が「１」の信号を伝送するとき、あるいはバイナリ値が「０」の値を伝送する場合に、「表された」として定義され得る。
【００５８】
これまでの開示を完全に理解したならば、当業者には様々な変形及び変更が可能であることが明白であろう。添付の特許請求の範囲はそのような変形及び変更の全てを包含するように解釈されることを意図したものである。
【産業上の利用可能性】
【００５９】
本発明は、概してマイクロプロセッサの技術分野に利用可能である。
【図面の簡単な説明】
【００６０】
【図１】一実施形態に従ったＳＴＬＦバッファを備えたマイクロプロセッサを示す図。
【図２】一実施形態に従った読み出し／書き込みユニットのブロック図。
【図３】一実施形態に従った現在のＳＴＬＦバッファを備えたマイクロプロセッサを動作させる方法を例示したフローチャート。
【図４】一実施形態に従ったストア−ロードフォーワードバッファに加え、ＳＴＬＦチェッカーを組み込んだマイクロプロセッサを動作させる方法を例示したフローチャート。
【図５】一実施形態に従ったＳＴＬＦバッファを備えたマイクロプロセッサを組み込んだ一般的なコンピュータシステムを示した図。
【図６】別の実施形態に従った一般的なコンピュータシステムを示した図。
【図１】
2007527563.tif 000003
【図２】
2007527563.tif 000004
【図３】
2007527563.tif 000005
【図４】
2007527563.tif 000006
【図５】
2007527563.tif 000007
【図６】
2007527563.tif 000008
【国際調査報告】
2007527563.tif 000009
2007527563.tif 000010