JP4699666B2 - インデックスおよび任意選択的ウェイ一致に基づいてデータをフォワードするストアバッファ - Google Patents

インデックスおよび任意選択的ウェイ一致に基づいてデータをフォワードするストアバッファ Download PDF

Info

Publication number
JP4699666B2
JP4699666B2 JP2001536680A JP2001536680A JP4699666B2 JP 4699666 B2 JP4699666 B2 JP 4699666B2 JP 2001536680 A JP2001536680 A JP 2001536680A JP 2001536680 A JP2001536680 A JP 2001536680A JP 4699666 B2 JP4699666 B2 JP 4699666B2
Authority
JP
Japan
Prior art keywords
store
load
data
address
hit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP2001536680A
Other languages
English (en)
Other versions
JP2003514299A5 (ja
JP2003514299A (ja
Inventor
ヒューズ,ウィリアム・エイ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2003514299A publication Critical patent/JP2003514299A/ja
Publication of JP2003514299A5 publication Critical patent/JP2003514299A5/ja
Application granted granted Critical
Publication of JP4699666B2 publication Critical patent/JP4699666B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/608Details relating to cache mapping
    • G06F2212/6082Way prediction in set-associative cache

Description

【0001】
【発明の分野】
本発明は、プロセッサの分野に関し、より特定的にはデータをストアバッファから従属するロードのためにフォワードすることに関する。
【0002】
【関連技術の説明】
プロセッサは典型的に、ストアメモリ動作をストアするためのバッファを用いる。このストアメモリ動作は、実行済みである(たとえばストアアドレスが既に生成されている、ストアデータがあるかもしれない)が、まだ投機的であるためメモリ(またはこのプロセッサが用いるデータキャッシュ)に記憶させる準備が整っていないものである。本明細書で用いている「メモリ動作」という用語は、プロセッサおよびメモリ間のデータ転送(この転送はキャッシュ内で行なわれる可能性がある)を指定する動作を意味する。ロードメモリ動作は、メモリからプロセッサへのデータ転送を指定し、ストアメモリ動作はプロセッサからメモリへのデータ転送を指定する。本明細書においては、ロードメモリ動作をより簡潔に「ロード」と呼ぶこともあり、同様に、ストアメモリ動作を「ストア」と呼ぶこともある。メモリ動作は、プロセッサが用いる命令セット次第で、メモリオペランドに直接アクセスして定められた機能(たとえば算術演算、論理など)を果たすための命令内で暗示されていることもあり、データ転送のみを行なう明示命令のこともある。一般的に、メモリ動作は、このメモリ動作の1以上のオペランドから生成されたアドレスを介して関係する記憶場所を指定する。本明細書ではこのアドレスのことを一般的に「データアドレス」と呼ぶ、または、(対応するメモリ動作がロードであれば)ロードアドレスと呼び、(対応するメモリ動作がストアであれば)ストアアドレスと呼ぶ。他方、命令そのもののメモリ内での場所を示すアドレスは「命令アドレス」と呼ぶ。
【0003】
ストアは、後に続くロードが実行される際にバッファ内で待ち行列に入れられていることがあり、そのため、典型的にプロセッサはバッファを検査して、ロードが読出す1以上のバイトを更新するストアがバッファ内で待ち行列に入れられているかどうか判断する(すなわちこのロードがストアに従属するのかまたはストアに「ヒット」するのか判断)。一般的には、ロードアドレスをストアアドレスと比較してロードがストアにヒットしているかどうか判断する。ヒットが検出されれば、このロードのためにストアデータをキャッシュデータの代わりにフォワードする。したがって、ヒットを、キャッシュからデータにアクセスするのに要する時間と同じまたはそれより短い時間で検出することが望ましい。
【0004】
ロードの待ち時間(たとえば、あるロードを実行してからこのロードによって読出されたデータを使用できるようになるまでの時間)を最短にすることは、多くのプロセッサの性能にとって重要である。あいにく、アドレスの比較は、アドレスのビット数が比較的多い(たとえば32ビット、または32ビットを超えて64ビットまでが一般的になりつつある)ため、時間のかかる作業である。したがって、ロードがバッファ内のストアにヒットしているかどうか判断するのに要する時間を短縮化することが、プロセッサの性能を高めることになる。なぜなら、この短縮化がロードの待ち時間の短縮になり得るからである。その代わりとしては、アドレスを比較するのにかかる時間が減少すれば、所与のサイクル時間および所与のロード待ち時間に対するタイミングの制約を満たしやすくなる。
【0005】
仮想アドレス指定およびアドレス変換を用いると、ロードアドレスをバッファ内のストアアドレスと照合する間に経過する時間を短縮するというさらなる問題が生じ得る。仮想アドレス指定を用いる場合、ロードおよびストアの実行により生成されるデータアドレスは、(たとえばページング変換方式によって)物理アドレスに変換される仮想アドレスである。複数の仮想アドレスが所与の物理アドレスに対応しているかもしれないため(「別名(エイリアス)」と呼ばれる)、ロードおよびストアの物理データアドレスを比較して確実にバッファから正確な転送を行なう(または行なわない)ようにする。不都合なことにロードの物理アドレスは、典型的に変換索引バッファ(TLB)から生成されるため、キャッシュアクセスがほぼ完了するまで利用できないことが多く、バッファ内のストアにヒットしていることを迅速だが正確なやり方で検出するという問題がさらに悪化する。
【0006】
【発明の概要】
上記の問題は主として、本明細書で説明するようにストアデータをロードのためにフォワードする装置により解決される。この装置は、ストアメモリ動作に対応する情報をストアするように構成されたバッファと、バッファにおいて示されたストアの1つにヒットするロードを検出する回路とを含む。より具体的には、この回路は、ロードアドレスのインデックス部をバッファにストアされているストアアドレスのインデックス部と比較する。これらのインデックスが一致しかつロードおよびストア双方がデータキャッシュ内でヒットしていれば、ロードおよびストアは同じキャッシュラインにアクセスしている。このキャッシュライン内の1以上のバイトがストアにより更新されロードにより読出されるならば、ストアデータはそのロードのためにフォワードされる。好都合なことに、この比較的小規模のロードおよびストアインデックス比較は速やかに完了する。加えて、(すべてではないにしても)ほとんどのインデックスが典型的には物理(変換されていない)ビットなので、比較は、変換されているロードアドレスよりも前に実施することができ、比較の正確性に大きな影響はない。
【0007】
ある実施例では、上記回路は、ロードおよびストアインデックスが一致しかつストアがデータキャッシュ内でヒットしていれば、データを投機的にフォワードする。次に、ロードがキャッシュ内でヒット/ミスしていると判断されると、このフォワーディングが、ロードのヒット/ミス表示を用いて検査される。セットアソシアティブの実施例では、ロードのヒットのウェイをストアのヒットのウェイと比較してフォワーディングの正確度をさらに検査する。
【0008】
概して、ある装置が意図されている。この装置は、バッファとバッファに結合された回路とを含む。バッファは複数のエントリを含み、複数のエントリは各々、(i)ストアメモリ動作のストアアドレスの少なくともインデックス部と、(ii)ストアメモリ動作がデータキャッシュ内でヒットしているかどうか示すヒット表示と、(iii)このストアメモリ動作に対応するストアデータとをストアするように構成される。回路は、(i)データキャッシュを検索するロードメモリ動作のロードアドレスのインデックス部と、(ii)ロードメモリ動作がデータキャッシュ内でヒットしているかどうか示すロードヒット信号とを受けるように結合される。この回路は、ストアデータを、複数のエントリのうち第1のエントリから、第1のエントリにストアされたインデックス部がロードアドレスのインデックス部に一致することに応じて、かつさらに、第1のエントリのヒット表示がヒットを示しロードヒット信号がヒットを示すことに応じて、フォワードするように構成される。
【0009】
さらに、データキャッシュとデータキャッシュに結合されたロード/ストアユニットとを含むプロセッサが意図されている。ロード/ストアユニットは、複数のエントリを含むバッファを備え、複数のエントリは各々、(i)ストアメモリ動作のストアアドレスの少なくともインデックス部と、(ii)ストアメモリ動作がデータキャッシュ内でヒットしているかどうか示すヒット表示と、(iii)このストアメモリ動作に対応するストアデータとをストアするように構成される。ロード/ストアユニットは、ロードアドレスを用いてデータキャッシュを探索し、それに応じてデータキャッシュからヒット信号を受けるように構成される。加えて、ロード/ストアユニットは、ストアデータを、複数のエントリのうち第1のエントリから、ロードアドレスのインデックス部が第1のエントリにストアされたインデックス部に一致することに応じて、かつさらに、第1のエントリのヒット表示がヒットを示しヒット信号がヒットを示すことに応じて、フォワードすると決定する。
【0010】
さらに、ある方法が意図されている。データキャッシュはロードアドレスを用いて検索される。ロードアドレスのインデックス部がバッファにストアされたストアアドレスのインデックス部と比較される。ストアアドレスに対応するストアデータが、ロードアドレスに対応するロードメモリ動作のためにフォワードされる。このフォワーディングは、比較によりロードアドレスのインデックス部がストアアドレスのインデックス部と一致すると判断されたことに応じて、かつさらに、ロードアドレスおよびストアアドレス双方がデータキャッシュ内でヒットしていることに応じて、行なわれる。
【0011】
本発明の上記以外の目的および利点は、以下の詳細な説明を読み添付の図面を参照することによって明らかになるであろう。
【0012】
本発明には種々の変形および代替形が可能であり、本発明の具体的な実施例が図面において例示され本明細書において詳細に説明されている。しかしながら、図面およびその詳細な説明は本発明を開示された特定の形態に限定することを意図したものではなく、反対に、前掲の特許請求の範囲において定められた本発明の精神および範囲に含まれるすべての変形、等価物および代替形を包含することを意図している。
【0013】
【好ましい実施例の詳細な説明】
次に図1を参照して、ストア待ち行列400、ヒット制御回路402ならびに比較器404および406の一実施例のブロック図が示される。この図1に示した装置は、ストアに関連する情報をストアがデータキャッシュ(および/またはメモリ)に与えられるまで保持するデータキャッシュを有するプロセッサにおいて用いることができ、さらに、ストアにヒットするロードを検出しストアデータをストア待ち行列400からロードのためにフォワードするのに用いることができる。他の実施例も可能であり意図されている。図1の実施例では、ストア待ち行列400は、実行されたストアに対応するストア情報を受けるように結合され、さらにヒット制御回路402ならびに比較器404および406に結合される。比較器404および406はさらに、ヒット制御回路402に結合される。ヒット制御回路402は、フォワード信号およびフォワード取消信号を与えるように結合される。
【0014】
概して、図1に示した装置は、ストア待ち行列400において示されているストアにヒットするロードを検出し、そのロードのためにストアに対応するデータを(データキャッシュからのキャッシュデータの代わりに)ストア待ち行列400からフォワードするように構成される。この装置は、ロードアドレス全体をストア待ち行列400にストアされたストアアドレスと比較するのではなく、ロードアドレスのインデックス部(「ロードインデックス」)をストアアドレスのインデックス部(「ストアインデックス」)と比較する。アドレスの一部を比較するため、この比較はより速やかに行なわれ、結果として、ロードがストア待ち行列400に示されたストアにヒットするかどうか判断するのに要する時間が短縮される。ロードおよびストア双方がデータキャッシュにおいてヒットしかつインデックス部が一致すれば、ロードおよびストアはデータキャッシュ内の同じキャッシュラインにアクセスしている。データキャッシュがダイレクトマッピングの場合、ロードおよびストアは同じキャッシュラインにアクセスしている。データキャッシュがセットアソシアティブの場合、ストアのヒットのウェイおよびロードのヒットのウェイを比較して、ロードおよびストアが同じキャッシュラインにアクセスしているかどうか判断することができる。ロードがヒットでありストアがミスである(またはその逆)の場合、ロードおよびストアは同じキャッシュラインにアクセスしていない(インデックス部はどれも仮想でないと仮定)。したがって、ロードはストアにヒットしておらず、ストアデータをストア待ち行列400からフォワードする必要はない。ロードおよびストア双方がミスの場合、ロードおよびストアは同じキャッシュラインにアクセスしているかもしれない。しかしながら、データキャッシュは、ロードがミスの場合データをキャッシュからロードのためにフォワードしておらず、したがって、ストアデータをストア待ち行列400からフォワードする必要はない。ロードを、データキャッシュがロードが読出したキャッシュラインで満たされた後に(または満たすデータをキャッシュに書込んでいる間に)再び試みてもよく、そのキャッシュラインへのストアがキャッシュを満たす間にヒットとなる可能性がある。こうして、再度ロードを試みる間に、ロードがストアにヒットすることが検出される可能性がある。
【0015】
典型的に、仮想アドレスから物理アドレスへの変換は、ページの粒度に対して実施される。最下位アドレスビットは、ページに対するオフセットを形成しこの変換では変更されない。最上位アドレスビットは仮想から物理に変換される。たとえば、32ビットの仮想アドレスおよび4キロバイトのページサイズを用いた実施例では、下位12ビットがページオフセットであり上位20ビットが変換される。これ以外のページサイズが意図されている。典型的には、アドレスのインデックス部の(すべてではないにしても)ほとんどの部分は、ページオフセット内にあるため、仮想から物理へのアドレス変換中に変更されることはない。したがって、ロードがストアにヒットするかどうか検出する際の正確度に対するエイリアスの影響を、減じるまたは排除することができる。さらに、仮想ロードアドレスを比較において用い、物理ストアアドレス(メモリなどに与えるために用いられる)をストア待ち行列400にストアしてもよい。インデックス部の1以上のビットが仮想−物理変換において変更されるならば、仮想ビットもストアすればよい。したがって、仮想ロードアドレスと比較するために仮想ストアアドレスをストアするのに追加する記憶量は最小でよい(たとえば変換されかつインデックスの一部でもあるビット)。
【0016】
図1に示した実施例を、セットアソシアティブデータキャッシュを用いたプロセッサで使用してもよい。ダイレクトマッピングデータキャッシュを用いる実施例では、ウェイ表示および関連する比較器はない。より具体的には、ストア待ち行列400が複数のエントリを含む。たとえば、図1にはエントリ408Aおよび408Bが示されており、ストア待ち行列400はさらなるエントリ(図示せず)を含み得る。各エントリ408は、ストアメモリ動作に対応する情報をストアするように構成されている。ストア待ち行列400は、ストアに対応する情報をこのストアの実行の際に受取り、この情報を、ストアがリタイア(終了処理)されてデータキャッシュおよび/またはメモリに与えられてしまうまで保持する。ここに示されている実施例では、ひとつのエントリは、有効表示(V)、ヒット表示(H)、リタイア表示(R)、アドレスタグ部(ADDR−Tag)、アドレスインデックス部(ADDR−Index)、オフセットおよびサイズ情報(Offset and Size)、ウェイ表示(Way)、およびデータ(Data)を含む。有効表示は、エントリが有効かどうか(たとえばストアがエントリ内の情報で表わされているかどうか)示す。ヒット表示は、ストアがデータキャッシュ内でヒットしているかどうか示す。リタイア表示は、ストアがリタイアされている(したがって、データキャッシュおよび/またはメモリに与えるのに適切である)かどうか示す。この有効、ヒットおよびリタイア表示に対しては適切な表示を用いればよい。たとえば、各表示は、セットされると一方の状態を示しクリアされると他方の状態を示すビットを含み得る。以下の説明(下記図5および6に示された実施例の説明を含む)では、有効、ヒットおよびリタイア表示のことを、有効、ヒットおよびリタイアビットと呼ぶ。しかしながら、他の実施例でこの符号化を逆にしたり他の符号化を用いることもある。アドレスタグ部はタグとしてデータキャッシュにストアされるアドレスの部分であり、アドレスインデックス部はインデックスとしてデータキャッシュが用いる部分である。オフセットおよびサイズ情報は、ストアにより更新されてキャッシュライン内にあるバイトを示す。ウェイ表示は、ヒットビットがセットされた場合(ストアのヒットを示す)、(セットアソシアティブの実施例において)ストアがデータキャッシュでヒットするウェイを示す。最後に、ここでのデータは、データキャッシュおよび/またはメモリに与えられるストアデータである。
【0017】
比較器404は、ストア待ち行列400の各エントリからストアインデックスを受けるように結合され、かつ、実行されているロードのロードインデックスを受けるように結合される。比較器404は、ロードおよびストアインデックスを比較し、一致が検出されるとヒット制御回路402に対し信号をアサートする。比較器404はこのように、ストア待ち行列400の各エントリに対する比較器回路を表わしており、各比較器回路が出力信号をヒット制御回路402に与える。同様に、比較器406はストア待ち行列400の各エントリにストアされたウェイ表示を受けるように結合され、かつ、ロードウェイ表示を受けるように結合される。比較器406は、ロードおよびストアのウェイ表示を比較し、一致が検出されるとヒット制御回路402に対し信号をアサートする。比較器406はこのように、ストア待ち行列400の各エントリに対する比較器回路を表わしており、各比較器回路が出力信号をヒット制御回路402に与える。なお、所望されれば比較器404および406を連想記憶装置(CAM)構成としてストア待ち行列400に組み込んでもよい。
【0018】
ヒット制御回路402は、各エントリからのヒットビットおよび実行されているロードについてのヒット信号を受けるように結合される。ロードインデックスおよびストア待ち行列400に示されたストアのストアインデックスが一致すれば、ロードおよびこのストアはヒットであり、ロードおよびこのストアのウェイ表示は一致し、ヒット制御回路402により、データがストア待ち行列400からロードのためにフォワードされる。より具体的には、ヒット制御回路402は、ストア待ち行列400に、ヒットしているエントリのエントリ番号の表示で知らせ、ストア待ち行列400は、このエントリからのデータを、データキャッシュからのキャッシュデータの代わりにフォワードするために与える。
【0019】
なお、ロードアドレスは、ロードによるデータキャッシュの探索の開始時に、比較のために利用でき、ロードヒット信号は、データキャッシュの探索の終了近くまで(たとえばロードアドレスが変換されてキャッシュタグと比較された後)決定されない。さらに、ロードのウェイ表示も、ヒット信号が決定されるまで決定されない。したがって、この実施例において、ヒット制御回路402は、ロードインデックスおよびストアインデックスの一致、ならびに、ストアのヒットビットがストアがヒットであると示すことに応じて、ストア待ち行列400からのデータフォワードを合図する(かつストア待ち行列400にデータをフォワードさせる)ように構成される。ヒット制御回路402は、図1に示したフォワード信号をアサートしてデータフォワーディングを知らせる。次に、ロードのために、ヒット信号およびウェイ表示を求める。ヒット制御回路402は、ロードがストアにヒットしていることを、ロードウェイ表示をストアウェイ表示と比較しヒット信号がアサートされてヒットを示していることを確認することにより、確かめる。ウェイ表示が一致しかつロードのヒット信号がヒットを示しているならば、ヒット制御回路402は、フォワーディングが正しいと判断する。他方、フォワーディングが誤りである場合、ヒット制御回路402は、図1に示したフォワード取消信号をアサートして、フォワードされたストアデータを受けたプロセッサの部分に、フォワードが誤りであると知らせる。ある具体的な実施例では、データのフォワードを第1のクロックサイクルで行ない、フォワードの取消しを第1のクロックサイクルに続く第2のクロックサイクルで行なう。
【0020】
上記は、図1に示した装置の、1つのロードが実行される場合の動作について説明したものである。しかしながら、複数のロードが同時に実行される実施例も意図されている。上記のように各ロードを同時に処理することができる。
【0021】
ロードおよびストアインデックス(ならびにデータアドレスのヒットウェイ)を比較して、ロードおよびストアが同じキャッシュラインにアクセスしていると判断する。さらなる情報を用いて、ロードが読出した少なくとも1バイトがストアにより更新されていると判断する。たとえば、アドレスのオフセット部分ならびにロードおよびストアに影響されるサイズ(すなわちバイト数)を用いることができる。オフセットおよびサイズ情報は、設計上の選択によって、何らかの適切なフォーマットで与えて符号化することができる。たとえば、オフセットおよびサイズ情報は、バイトイネーブルマスクを含み、ここで各バイトの1ビットがキャッシュラインにある。このビットがセットされると、対応するバイトがアクセスされる。ロードおよびストアに対するバイトイネーブルマスクの各ビットの論理和をとり、このバイトがロードにより読出されかつストアにより書込まれるかどうか判断する。バイトイネーブルマスクを、キャッシュラインの一部のために生成してもよく(たとえばキャッシュが1キャッシュラインあたり複数のバンクを有する場合)、バンク選択のために用いるオフセットの部分を、バイトイネーブルマスクビットの論理和に加え、ロードおよびストアアドレス間で比較する。ロードおよびストアアドレスのオフセットの部分を、インデックス比較に加えて、比較器404を用いて比較する。ヒット制御回路402は、(上記のインデックス比較、ヒットビットおよびウェイ表示に加えて)オフセットおよびサイズ情報を用いて、ストア待ち行列400にストアされたデータをロードのためにフォワードするかどうか判断する。
【0022】
なお、ロードの実行中にストア待ち行列400の2以上のエントリがヒットする場合がある。ヒット制御回路402は、ヒットしているエントリに対応するストアのうち、プログラム順序で最も新しい(最後に実行された)ストアを求め、データをそのエントリからフォワードする。また、ロードが読出した1以上のバイトを、ロードがヒットしたストアが、ロードが読出した1以上の他のバイトについては更新しない場合がある。その場合、データキャッシュは、ストアデータをキャッシュデータと組合せて、ロードが読出したバイトを与える。複数のストアが、あるロードが読出したバイトのうち異なるバイトを与える場合、このロードをリタイアして再び試みる。複数のストアのうち1以上をリタイアしてデータキャッシュに与え、これらストアにより更新されロードによって読出されたバイトを、データキャッシュから与える。その代わりとして、図1の装置は、異なるストアからのバイトを組合せてロードデータを与えてもよい。所望に応じ、これ以外の実施例において上記のモデルを他のやり方で処理してもよい。
【0023】
なお、ここで示されている比較器406は、ストア待ち行列400にストアされたウェイ表示をロードのウェイ表示と比較しているが、これに代わる実施例では、ロードのためにデータをフォワードするのに用いるエントリからウェイ表示を読出し(このフォワーディングがインデックス比較およびデータキャッシュにおけるストアヒットに基づく場合)、読出されたウェイ表示をロードウェイ表示と比較してロードおよびストアが同じウェイでヒットしているかどうか検査する。
【0024】
本明細書で用いているアドレスのインデックス部(または簡潔に「インデックス」)は、このアドレスに対応するデータをストアするのに適切な1以上のキャッシュエントリを選択するために用いる部分である。加えて、データアドレスは、データキャッシュ内で、このデータアドレスが識別するデータがそのデータキャッシュにストアされている場合に「ヒットする」。データアドレスは、データキャッシュ内で、このデータアドレスが識別するデータがそのデータキャッシュにストアされている場合に「ミスする」。さらに、セットアソシアティブデータキャッシュは、所与のインデックスに対応するキャッシュラインをストアするのに適切な複数のキャッシュエントリを含む。各エントリはそのインデックスに対しては異なるウェイである。
【0025】
図2は、ロード/ストアユニット内でストア待ち行列400を用いるプロセッサの実施例を示す。その代わりとして、このプロセッサおよびロード/ストアユニットは、図4−6に関連して説明する待ち行列構成を用いてもよい。図1の装置または図4−6の実施例を用いるこれ以外のプロセッサの実施例も意図されている。
【0026】
プロセッサ概観
次に図2を参照して、プロセッサ10の一実施例のブロック図が示される。これ以外の実施例が可能であり意図されている。図2に示すように、プロセッサ10は、プリフェッチ/プリデコードユニット12と、分岐予測ユニット14と、命令キャッシュ16と、命令アライメントユニット18と、複数のデコードユニット20A−20Cと、複数のリザベーション(保留、reservation)ステーション22A−22Cと、複数の機能ユニット24A−24Cと、ロード/ストアユニット26と、データキャッシュ28と、レジスタファイル30と、リオーダ(reorder)バッファ32と、MROMユニット34と、バスインターフェイスユニット37とを含む。本明細書において特定の参照番号およびこれに続く文字で示されている構成要素はまとめて、参照番号のみを用いて表わす。例として、デコードユニット20A−20Cはまとめてデコードユニット20と示す。
【0027】
プリフェッチ/プリデコードユニット12は、バスインターフェイスユニット37から命令を受けるように結合され、かつさらに、命令キャッシュ16および分岐予測ユニット14に結合される。同様に、分岐予測ユニット14は、命令キャッシュ16に結合される。さらに、分岐予測ユニット14は、デコードユニット20および機能ユニット24に結合される。命令キャッシュ16はさらに、MROMユニット34および命令アライメントユニット18に結合される。命令アライメントユニット18は、デコードユニット20に結合される。各デコードユニット20A−20Cは、ロード/ストアユニット26およびリザベーションステーション22A−22Cにそれぞれ結合される。リザベーションステーション22A−22Cはさらに、それぞれの機能ユニット24A−24Cに結合される。加えて、デコードユニット20およびリザベーションステーション22は、レジスタファイル30およびリオーダバッファ32に結合される。機能ユニット24はまた、ロード/ストアユニット26、レジスタファイル30およびリオーダバッファ32に結合される。データキャッシュ28は、ロード/ストアユニット26およびバスインターフェイスユニット37に結合される。バスインターフェイスユニット37はさらに、L2キャッシュへのL2インターフェイスおよびバスに結合される。最後に、MROMユニット34は、デコードユニット20に結合される。
【0028】
命令キャッシュ16は、命令をストアするために設けられた高速キャッシュメモリである。命令は、命令キャッシュ16からフェッチされデコードユニット20にディスパッチされる。ある実施例において、命令キャッシュ16は、64キロバイトまでの命令を、64のバイトライン(1バイトは8バイナリビットを含む)を有する2ウェイセットアソシアティブ構成内にストアするように構成される。その代わりとして、これ以外の所望の構成およびサイズを用いてもよい。例として、命令キャッシュ16を、フルアソシアティブ、セットアソシアティブまたはダイレクトマッピング構成として実現してもよい。
【0029】
命令は、プリフェッチ/プリデコードユニット12により、命令キャッシュ16にストアされる。命令を、要求される前に、命令キャッシュ16からプリフェッチ方法に従いプリフェッチしてもよい。プリフェッチ/プリデコードユニット12は、種々のプリフェッチ方法を用いることができる。プリフェッチ/プリデコードユニット12は、命令を命令キャッシュ16に転送する際、命令の各バイトにつき3つのプリデコードビットすなわちスタートビット、エンドビットおよび機能ビットを生成する。プリデコードビットは、各命令の境界を示すタグを形成する。プリデコードタグは、以下でより具体的に説明するように、所与の命令をデコードユニット20が直接デコードできるかどうか、または、命令をMROMユニット34が制御するマイクロコード手続を呼出すことにより実行するかどうかといった、さらなる情報も伝える。さらに、プリフェッチ/プリデコードユニット12を、分岐命令を検出し分岐命令に対応する分岐予測情報を分岐予測ユニット14にストアするように構成してもよい。これ以外の実施例において何らかの適切なプリデコード方法を用いてもよい。
【0030】
次に、可変バイト長命令セットを用いるプロセッサ10のある実施例においてプリデコードタグを符号化することについて説明する。可変バイト長命令セットは、異なる命令が異なる数のバイトを占める命令セットである。プロセッサ10の一実施例で用いる可変バイト長命令セットの一例としてx86命令セットを挙げる。
【0031】
ここで例として挙げる符号化では、所与のバイトがある命令の第1のバイトである場合、このバイトに対しスタートビットがセットされる。このバイトが命令の最終バイトである場合、このバイトに対しエンドビットがセットされる。デコードユニット20が直接デコードできる命令のことを「高速経路」命令と呼ぶ。残りのx86命令のことを、ある実施例ではMROM命令と呼ぶ。高速経路命令については、機能ビットは、命令に含まれる各プレフィックスバイトに対しセットされ、これ以外のバイトに対してはクリアされる。その代わりとして、MROM命令については、機能ビットは、各プレフィックスバイトに対しクリアされ、これ以外のバイトに対してはセットされる。命令の種類を、エンドバイトに対応する機能ビットを調べることによって決定できる。この機能ビットがクリアされている場合、命令は高速経路命令である。逆に、この機能ビットがセットされている場合、命令はMROM命令である。したがって、ある命令の演算コードの場所は、デコードユニット20により直接デコードされる命令内の、命令の第1のクリアの機能ビットに関連するバイトとして、求めることができる。たとえば、2つのプレフィックスバイト、Mod R/Mバイト、および中間バイトを含む高速経路命令は、以下のようなスタート、エンドおよび機能ビットを有する。
【0032】
スタートビット10000
エンドビット 00001
機能ビット 11000
MROM命令は、デコードユニット20がデコードするには複雑すぎると判断される命令である。MROM命令は、MROMユニット34を呼出すことによって実行される。より具体的には、MROM命令がある場合、MROMユニット34は、この命令を解析し規定された高速経路命令のサブセットに発行して所望の動作を実施する。MROMユニット34は、この高速経路命令のサブセットをデコードユニット20にディスパッチする。
【0033】
プロセッサ10は、条件付分岐命令に続く命令を投機的にフェッチするために分岐予測を用いる。分岐予測ユニット14は、分岐予測動作を行なうために含まれている。ある実施例では、分岐予測ユニット14は、命令キャッシュ16内の1つのキャッシュラインの16バイト部分につき2つまでの分岐ターゲットアドレスおよび対応する分岐発生/分岐非発生(taken/not taken)予測をキャッシュする分岐ターゲットバッファを用いる。この分岐ターゲットバッファは、たとえば2048のエントリまたはこれ以外の適切な数のエントリを含む。プリフェッチ/プリデコードユニット12は、特定のラインがプリデコードされたときに最初の分岐ターゲットを求める。続いて、キャッシュラインに対応する分岐ターゲットの更新が、キャッシュライン内で命令を実行したことによって発生する。命令キャッシュ16は、フェッチされている命令アドレスを示し、分岐予測ユニット14は、どの分岐ターゲットアドレスを選択して分岐予測を形成するか判断する。デコードユニット20および機能ユニット24は、分岐予測ユニット14に更新情報を与える。デコードユニット20は、分岐予測ユニット14が予測しなかった分岐命令を検出する。機能ユニット24は、分岐命令を実行し、予測された分岐方向が誤りかどうか判断する。分岐方向が「テイクン(発生)」となるのは、後続の命令が分岐命令のターゲットアドレスからフェッチされる場合である。逆に、分岐方向が「ノットテイクン(非発生)」であるのは、後続の命令が分岐命令に続く記憶場所からフェッチされる場合である。分岐命令予測誤りが検出されると、誤って予測された分岐に続く命令が、プロセッサ10の多様なユニットから廃棄される。これに代わる構成では、分岐予測ユニット14は、デコードユニット20および機能ユニット24ではなくリオーダバッファ32に結合されて、リオーダバッファ32から分岐予測誤り情報を受ける。分岐予測ユニット14は種々の適切な分岐予測アルゴリズムを用いることができる。
【0034】
命令キャッシュ16からフェッチされた命令は、命令アライメントユニット18に送られる。命令が命令キャッシュ16からフェッチされると、対応するプリデコードデータがスキャンされ、命令アライメントユニット18に(かつMROMユニット34に)、フェッチされた命令に関する情報が与えられる。命令アライメントユニット18は、スキャンデータを用いて各デコードユニット20に命令を整列させる。ある実施例において、命令アライメントユニット18は、3組の8命令バイトからの命令をデコードユニット20に整列させる。デコードユニット20Aは、現在デコードユニット20Bおよび20Cが受けている命令に(プログラム順序で)先行する命令を受ける。同様に、デコードユニット20Bは、現在デコードユニット20Cが受けている命令にプログラム順序で先行する命令を受ける。
【0035】
デコードユニット20は、命令アライメントユニット18から受けた命令をデコードするように構成される。レジスタオペランド情報が検出され、レジスタファイル30およびリオーダバッファ32に送られる。さらに、命令が1以上のメモリ動作の実施を要求するものであれば、デコードユニット20は、このメモリ動作をロード/ストアユニット26に送る。各命令は、機能ユニット24に対する1組の制御値にデコードされ、これらの制御値が、オペランドアドレス情報および命令に含まれた変位または即値データとともに、リザベーションステーション22に送られる。ある特定の実施例では、各命令は、2つまでの動作にデコードされ、機能ユニット24A−24Cにより別々に実行される。
【0036】
プロセッサ10は、命令順変更(アウトオブオーダ、out-of-order)実行をサポートし、そのため、リオーダバッファ32を用いて、レジスタの読出および書込動作の当初のプログラムシーケンスを追跡し、レジスタ再命名を実施し、投機的な命令が実行され分岐予測誤りが修復されるようにし、的確な例外にし易くすくする。リオーダバッファ32内の一時記憶場所を、レジスタを更新して投機的レジスタ状態をストアすることを含む命令のデコードの際に確保しておく。分岐予測が誤りであれば、予測誤り経路に沿い投機的に実行された命令の結果を、バッファにおいて、レジスタファイル30への書込み前に無効化することができる。同様に、特定の命令が結果として例外をもたらした場合、その特定の命令に続く命令を廃棄する。このようにして、例外は「的確」となる(すなわち例外を生じさせる特定の命令に続く命令は、その命令の前に完了しない)。なお、特定の命令は、プログラム順序でその特定の命令に先行する命令よりも先に実行される場合、投機的に実行される。先行する命令は、分岐命令または例外発生命令であり、その場合、リオーダバッファ32は投機的結果を廃棄する。
【0037】
デコードユニット20の出力で与えられた命令制御値および即値または変位データは直接それぞれのリザベーションステーション22に送られる。ある実施例では、各リザベーションステーション22が、対応する機能ユニットに発行されるのを待っている6つまでのペンディング命令についての命令情報(すなわち命令制御値、オペランド値、オペランドタグおよび/または即値データ)を保持できる。なお、図2の実施例では、各リザベーションステーション22は専用の機能ユニット24と関連付けられている。したがって、リザベーションステーション22および機能ユニット24により3つの専用「発行位置」が形成される。言換えれば、発行位置0がリザベーションステーション22Aおよび機能ユニット22Aにより形成される。整列してリザベーションステーション22Aにディスパッチされる命令を、機能ユニット24Aが実行する。同様に、発行位置1は、リザベーションステーション22Bおよび機能ユニット24Bにより形成され、発行位置2は、リザベーションステーション22Cおよび機能ユニット24Cにより形成される。
【0038】
特定の命令をデコードしたときに、必要なオペランドがレジスタ場所であった場合、レジスタアドレス情報が同時にリオーダバッファ32およびレジスタファイル30に送られる。当業者であれば、x86レジスタファイルが8つの32ビット実レジスタを含む(すなわち典型的にはEAX、EBX、ECX、EDX、EBP、ESI、EDIおよびESPと呼ばれる)ことがわかるであろう。x86プロセッサアーキテクチャを用いたプロセッサ10の実施例では、レジスタファイル30は、各32ビット実レジスタに対する記憶場所を含む。さらなる記憶場所がMROMユニット34が使用するためにレジスタファイル30内に含まれている。リオーダバッファ32に含まれる一時記憶場所は、こうしたレジスタの内容を変更してアウトオブオーダ(命令順変更)実行が行なえるようにするためのものである。リオーダバッファ32の一時記憶場所が、各命令に対して確保され、これは、デコードの際に実レジスタのうち1つの内容を変更するものと決定される。したがって、特定のプログラムの実行中の種々のポイントで、リオーダバッファ32は、所与のレジスタの投機的に実行された内容を含む1以上の場所を含み得る。所与の命令のデコードに続いて、リオーダバッファ32が所与の命令においてオペランドとして用いられたレジスタに割当てられた以前のひとつまたは複数の場所を有すると判断されれば、リオーダバッファ32は、対応するリザベーションステーションに、1)最後に割当てられた場所の値、または2)その値を、最終的には以前の命令を実行する機能ユニットが生成していない場合は、最後に割当てられた場所のタグを転送する。リオーダバッファ32が、所与のレジスタのために確保された場所を有していれば、オペランド値(またはリオーダバッファタグ)が、レジスタファイル30からではなくリオーダバッファ32から与えられる。リオーダバッファ32において必要とされるレジスタのために確保された場所がなければ、その値は直接レジスタファイル30から取込まれる。オペランドが記憶場所に対応していれば、オペランド値がロード/ストアユニット26を通してリザベーションステーションに与えられる。
【0039】
ある具体的な実施例において、リオーダバッファ32は、同時にデコードされた命令を1単位としてストアし操作するように構成される。この構成のことを本明細書では「ライン指向」と呼ぶ。いくつかの命令をまとめて処理することにより、リオーダバッファ32内で用いるハードウェアを単純化することができる。たとえば、この実施例に含まれるライン指向リオーダバッファは、デコードユニット20が1以上の命令をディスパッチするときは常に、3つの命令(各デコードユニット20から1つずつ)に関する命令情報に十分な記憶を割当てる。対照的に、従来のリオーダバッファでは、実際にディスパッチされる命令の数に応じて、可変量の記憶が割当てられる。この可変量の記憶を割当てるには比較的多数の論理ゲートが必要である。同時にデコードされた命令の各々が実行されたとき、命令結果は同時にレジスタファイル30にストアされる。したがって、記憶は、同時にデコードされる命令の別の組に割当てるために空いている。さらに、1命令当り用いられる制御論理回路の量は減少する。なぜなら、制御論理は同時にデコードされるいくつかの命令に対して償却されるからである。特定の命令を識別するリオーダバッファタグを、2つのフィールド、すなわちラインタグおよびオフセットタグに分割できる。ラインタグは、特定の命令を含む同時にデコードされた命令の組を識別し、オフセットタグは、この組内のどの命令が特定の命令に対応するか識別する。なお、命令結果をレジスタファイル30にストアし対応する記憶を空けることを、命令を「リタイアする」という。さらに、プロセッサ10の種々の実施例においていかなるリオーダバッファ構成を用いてもよい。
【0040】
先に述べたように、リザベーションステーション22は、命令を、その命令が対応する機能ユニット24によって実行されるまでストアする。ある命令が実行のために選択されるのは、(i)その命令のオペランドが既に与えられている場合、および(ii)同じリザベーションステーション22A−22Cにありプログラム順序で当該命令に先行している命令のためのオペランドがまだ与えられていない場合である。なお、ある命令を機能ユニット24の1つが実行すると、その命令の結果は直接、その結果を待っているリザベーションステーション22に送られ、同時にその結果が送られてリオーダバッファ32を更新する(この技術を一般に「結果フォワーディング」と呼ぶ)。ある命令は、実行のために選択されて機能ユニット24A−24Cに送られるが、これは、関連する結果がフォワードされるクロックサイクル中に行なわれる。この場合、リザベーションステーション22は、フォワードされた結果を機能ユニット24に送る。命令が複数の動作にデコードされて機能ユニット24により実行される実施例では、この動作は別々にスケジューリングされる。
【0041】
ある実施例において、各機能ユニット24は、加算および減算という整数算術演算、シフト、ローテート、論理演算ならびに分岐演算を行なうように構成されている。これらの動作(演算)は、デコードユニット20が特定の命令のためにデコードした制御値に応じて行なわれる。なお、浮動小数点ユニット(図示せず)を用いて浮動小数点演算に対応してもよい。浮動小数点ユニットは、コプロセッサとして動作し、MROMユニット34またはリオーダバッファ32から命令を受けた後にリオーダバッファ32と連絡してその命令を完了する。加えて、機能ユニット24は、ロード/ストアユニット26が実行するロードおよびストアメモリ動作のためにアドレス生成を行なうように構成されていてもよい。ある特定の実施例で、各機能ユニット24は、アドレスを生成するためのアドレス生成ユニットおよび残余の機能を果たすための実行ユニットを含む。これら2つのユニットは、1クロックサイクルにおいて異なる命令または動作に対し独立して動作する。
【0042】
各機能ユニット24はまた、条件付分岐命令の実行に関連する情報を分岐予測ユニット14に与える。分岐予測が誤っている場合、分岐予測ユニット14は、既に命令処理パイプラインに入っている誤って予測された分岐に続く命令をフラッシュし、命令キャッシュ16またはメインメモリから必要な命令をフェッチする。なお、こうした状況下では、当初のプログラムシーケンスにおいて予測誤り分岐命令後に発生した命令の結果は廃棄され、これは、投機的に実行され一時的にロード/ストアユニット26およびリオーダバッファ32にストアされているものを含む。なお、分岐実行結果は、機能ユニット24がリオーダバッファ32に与えるもので、これは、機能ユニット24に分岐の予測誤りを示す。
【0043】
機能ユニット24が生成した結果は、レジスタ値が更新されていればリオーダバッファ32に送られ、記憶場所の内容が変更されていればロード/ストアユニット26に送られる。結果をレジスタにストアするのであれば、リオーダバッファ32は、命令がデコードされたときにレジスタの値のために確保しておいた場所に結果をストアする。複数の結果バス38が、機能ユニット24およびロード/ストアユニット26から結果をフォワードするために含まれている。結果バス38は、発生した結果、および、実行されている命令を識別するリオーダバッファタグを送る。
【0044】
ロード/ストアユニット26は、機能ユニット24およびデータキャッシュ28間のインターフェイスを与える。ある実施例において、ロード/ストアユニット26は、データキャッシュ28にまだアクセスしていないペンディング中のロードまたはストアのデータおよびアドレス情報のための記憶場所を有する第1のロード/ストアバッファと、既にデータキャッシュ28にアクセスしているロードおよびストアのデータおよびアドレス情報のための記憶場所を有する第2のロード/ストアバッファとを含むように構成されている。たとえば、第1のバッファは12の場所を含み、第2のバッファは32の場所を含む。デコードユニット20は、ロード/ストアユニット26へのアクセスを調停する。第1のバッファが一杯であるとき、デコードユニットは、ペンディング中のロードまたはストア要求情報のための場所がロード/ストアユニット26にできるまで、待機しなければならない。ロード/ストアユニット26はまた、ロードメモリ動作の、ペンディング中のストアメモリ動作に対する従属性検査も行ない、データコヒーレンシ(一貫性)が確実に維持されるようにする。メモリ動作は、プロセッサ10およびメインメモリサブシステム間のデータ転送である。メモリ動作は、メモリにストアされたオペランドを用いる命令の結果である、または、データ転送を行なわせるが他の動作は行なわせないロード/ストア命令の結果である。加えて、ロード/ストアユニット26は、セグメントレジスタなどの特殊レジスタおよびx86プロセッサアーキテクチャが定めるアドレス変換メカニズムに関する他のレジスタのための特殊レジスタ記憶を含む。
【0045】
データキャッシュ28は、ロード/ストアユニット26およびメインメモリサブシステム間で転送されているデータを一時的にストアするために設けられた高速キャッシュメモリである。ある実施例では、データキャッシュ28には、2ウェイセットアソシアティブ構成において64キロバイトまでのデータをストアする容量がある。データキャッシュ28を、セットアソシアティブ構成、フルアソシアティブ構成、ダイレクトマッピング構成およびその他の構成の適切な大きさを含む、種々の特殊メモリ構成で実現できることがわかるであろう。
【0046】
x86プロセッサアーキテクチャを用いたプロセッサ10の特定の実施例では、命令キャッシュ16およびデータキャッシュ28は、線形的にアドレス指定され物理的にタグ付けされる。線形アドレスは、命令が特定するオフセットおよびx86アドレス変換メカニズムのセグメント部が特定するベースアドレスから形成される。任意選択として、線形アドレスをメインメモリへのアクセスのために物理アドレスに変換してもよい。線形−物理変換は、x86アドレス変換メカニズムのページング部によって指定されている。物理アドレスは、物理タグと比較されてヒット/ミス状態が判断される。
【0047】
バスインターフェイスユニット37は、コンピュータシステム内でバスを介してプロセッサ10とこれ以外の構成要素との間で連絡が行なえるように構成されている。たとえば、このバスは、Digital Equipment Corporationが開発したEV−6バス互換のものでもよい。その代わりとして、パケットに基づいたもの、単方向リンクまたは双方向リンクなどを含む適切な相互接続構成を用いてもよい。任意選択のL2キャッシュインターフェイスを用いてレベル2キャッシュに対するインターフェイスを設けてもよい。
【0048】
ロード/ストアユニット
次に、ロード/ストアユニット26のある実施例についてより詳細に説明する。これ以外の実施例が可能であり意図されている。図3は、プロセッサ10のある実施例に従う、ロード/ストアユニット26、リオーダバッファ32、データキャッシュ28、バスインターフェイスユニット(BIU)37、デコードユニット20A、リザベーションステーション22Aおよび機能ユニット24Aを示し、相互接続を強調している。他の実施例において、所望に応じてさらなる、代替のまたはこれに代わる相互接続を用いてもよい。デコードユニット20B−20C、リザベーションステーション22B−22C、機能ユニット24B−24Cおよび図3に示した他のユニット間の相互接続も図3に示したものと同様である。
【0049】
デコードユニット20Aは、命令アライメントユニット18から命令を受けてその命令をデコードする。デコードユニット20Aは、デコードした命令をリザベーションステーション22Aに与え、リザベーションステーション22Aは、デコードされた命令を、この命令が実行のために選択されるまでストアする。加えて、この命令がロードまたはストアメモリ動作を指定していれば、デコードユニット20Aは、L/Sライン46Aを介してロード/ストアユニット26に信号を送る。ロード/ストアユニット26はデコードユニット20B−20Cからも同様の信号を受ける。L/Sライン46Aは、デコードされている命令が指定しているのはロードメモリ動作なのか、ストアメモリ動作なのかまたは双方なのかを示す。たとえば、L/Sライン46Aは、ロードラインおよびストアラインを含み得る。何のメモリ動作も指定されていない場合、双方のラインの信号はデアサートされる。ロードライン上の信号は、ロードメモリ動作が指定された場合にアサートされ、同様に、ストアライン上の信号はストアメモリ動作が指定された場合にアサートされる。ロードメモリ動作およびストアメモリ動作双方が指定されていれば、これらの信号双方がアサートされる。L/Sライン46A上の信号に応答して、ロード/ストアユニット26は、含まれているロード/ストアバッファにエントリを割当てて、対応するメモリ動作をストアする。
【0050】
上記に加え、デコードユニット20Aは、リオーダバッファ32に、デコードされている命令に関する情報を与える。リオーダバッファ32は、この情報(同様の情報が他のデコードユニット20B−20Cから与えられる)を受け、これに応じてリオーダバッファエントリを割当てる。割当てられたリオーダバッファエントリは、命令タグバス48でロード/ストアユニット26に送られるリオーダバッファタグにより識別される。命令タグバス48は、可能な命令各々(たとえばこの実施例では3つありこれらはそれぞれデコードユニット20A−20Cからのものである)に対するタグを送るように構成される。これに代えて、前述のライン指向構成を用いる実施例では、リオーダバッファ32を、ラインのラインタグを送るように構成し、ロード/ストアユニット26が、特定のロードまたはストアを信号で知らせる発行位置のオフセットタグで、ラインタグを増大してもよい。
【0051】
リオーダバッファ32はさらに、命令のレジスタオペランドに対する従属性検査を実施するように構成されてもよい。レジスタオペランドは、デコードユニット20が送る命令情報において識別される。ストアメモリ動作については、ストアデータは、ロード/ストアユニット26がストアアドレスに加えて受けるソースオペランドである。したがって、リオーダバッファ32は、各ストアメモリ動作に対しストアデータを生成した命令を求め、ストアデータ/タグバス50で、ストアデータ(ストアメモリ動作のディスパッチの際にリオーダバッファ32またはレジスタファイル30で利用できる場合)、または、そのストアデータに対するストアデータタグを送る。ストアメモリ動作に対応する命令が、レジスタの内容をメモリにストアするという明示ストア命令であれば、ストアデータを生成する命令の命令タグ(利用できるならばストアデータ)が送られる。他方、命令がストアメモリ動作を暗示動作として含む場合は、命令そのものがストアデータを生成する。こうした場合、リオーダバッファ32は、この命令の命令タグをストアデータタグとして与える。
【0052】
図3では簡潔にするために示していないが、リザベーションステーション22Aは、リオーダバッファ32から、命令のオペランドタグおよび/またはデータも受ける。リザベーションステーション22Aは、オペランドタグおよび/またはデータを入手し、結果バス38から残りのオペランドデータ(オペランドタグが識別するもの)が送られるのを待つ。ある命令がそのオペランドを受けると、機能ユニット24Aはそれを実行することができる。より具体的にいえば、ここに示している実施例では、機能ユニット24Aは、実行ユニット(EXU)40およびアドレス生成ユニット(AGU)42を含む。実行ユニット40は、命令動作を行ない(たとえば算術演算および論理演算)、結果を生成し、その結果が結果バス38A(結果バス38の1つ)でロード/ストアユニット26、リザベーションステーション22およびリオーダバッファ32に転送される。AGU42は、データアドレスを生成しこのデータアドレスは命令が指定した1つまたは複数のメモリ動作で使用され、AGU42はこのデータアドレスをアドレスバス44Aを介してロード/ストアユニット26に送る。なお、AGU42および実行ユニット40が結果バス38Aを共有し機能ユニット24Aがアドレス生成およびその他命令実行動作を実施する実行ユニットのみを含む実施例を用いてもよい。ロード/ストアユニット26はさらに、他の機能ユニット24B−24C内の実行ユニットおよびAGUからの結果バスおよびアドレスバスを受けるように結合される。
【0053】
ここで示している実施例ではAGU42を用いているため、リザベーションステーション22Aはある命令のアドレス生成部を選択し、AGU42がこれを実行するが、これは、アドレスを形成するオペランドは既に受けているが命令が指定するさらなるオペランドをまだ受けていないときに行なわれる。AGU42は、発生したアドレスを、ロード/ストアユニット26に、アドレスバス44Aで、データアドレスを生成した命令の命令タグとともに送る。これに応じて、ロード/ストアユニット26は、アドレスバス44Aで受けたタグを、ロード/ストアバッファにストアされた命令タグと比較して、データアドレスが対応するのはロードなのかストアなのかを判断する。
【0054】
ロード/ストアユニット26は、結果バス38で与えられた結果タグをモニタして、ストアメモリ動作のストアデータを入手する。結果タグがロード/ストアユニット内のストアデータタグと一致していれば、ロード/ストアユニット26は、対応するデータを入手し、このデータを対応するストア命令と関連付ける。
【0055】
ロード/ストアユニット26は、データキャッシュインターフェイスを介してデータキャッシュ28に結合される。ロード/ストアユニット26は、メモリ動作を選択して、データキャッシュインターフェイスを介してデータキャッシュ28を探索し、データキャッシュインターフェイスから探索結果を受ける。一般的に、特定のメモリ動作に対するデータキャッシュの「探索」は、その特定のメモリ動作のデータアドレスをデータキャッシュ28に送りデータキャッシュ28によりデータアドレスがヒットしているかどうかを判断することを含む。データキャッシュ28は、探索結果(たとえばヒット/ミス表示)をロード/ストアユニット26に返す。加えて、特定のメモリ動作がロードでありヒットしていれば、データキャッシュ28は対応するロードデータを結果バス38Dでリザベーションステーション22、リオーダバッファ32およびロード/ストアユニット26にフォワードする。ある実施例において、データキャッシュ28は、2つのポートを含みこれに応じて2つまでの探索を同時に受ける。データキャッシュ28は、たとえばバンク構成を用いてもよく、この構成では、キャッシュラインが少なくとも2つのバンクにわたりストアされ、2つの探索が、異なるバンクにアクセスしている限り同時に処理される。ある特定の実施例では、データキャッシュ28は8つのバンクを用いる。データキャッシュインターフェイスの種々の実施例について以下でさらに詳しく説明する。
【0056】
データキャッシュ28は、ミスであった探索に応じてキャッシュラインを割当てるように構成され、バスインターフェイスユニット37と連絡してミスのキャッシュラインをフェッチする。加えて、データキャッシュ28は、取戻した変更されているキャッシュラインを、メインメモリ更新のためにバスインターフェイスユニット27に送る。
【0057】
バスインターフェイスユニット37は、データキャッシュ28に結合されまたスヌープインターフェイス52を介してロード/ストアユニット26にも結合される。バスインターフェイスユニット37がスヌープインターフェイス52を用いて、バスから受けるスヌープ動作に応じてコヒーレンシ(coherency)動作を行なう必要があるかどうかが判断される。一般的に、「スヌープ動作」は、バス上で、このバスに接続されたキャッシュに対するメモリのコヒーレンシを保つために(たとえばプロセッサ内で)行なわれる動作である。コヒーレンシが適切に保たれていれば、特定の記憶場所に対応しキャッシュの1つにストアされているデータのコピーは、他のキャッシュ各々にストアされたコピーと一致している。スヌープ動作は、明示動作である、または、特定の記憶場所のアドレスに対して実施される動作の暗示部分である。一般的に、スヌープ動作は、スヌープされるアドレス(「スヌープアドレス」)を指定し、かつ、アドレスがキャッシュにストアされている場合はキャッシュラインの所望の状態を指定する。バスインターフェイスユニットは、スヌープインターフェイス52を介してスヌープ要求をデータキャッシュ28およびロード/ストアユニット26に送り、スヌープ動作を行なう。
【0058】
リオーダバッファ32は、命令のリタイアを管理する。リオーダバッファ32は、リタイアインターフェイス54を介してロード/ストアユニット26と連絡をとり、リタイアされているかこれからリタイアされようとしている命令を識別する。たとえば、ある実施例では、ストアは、リタイアされるまでデータキャッシュ28(またはメインメモリ)を更新しない。加えて、いくつかのロード命令を非投機的実行に制限してもよい。リオーダバッファ32は、リタイアインターフェイス54を介してロード/ストアユニット26に、リタイアされているまたはリタイア可能なメモリ動作を示す。このように、デコードユニット20が各命令のためにリオーダバッファ32に与える命令情報は、この命令がロードまたはストア動作を含むかどうかを示す。ロード/ストアユニット26は、特定のメモリ動作がリタイアされたときにロギングされているという肯定応答をリオーダバッファ32に返し、リオーダバッファ32はこれに続いて対応する命令をリタイアさせる。
【0059】
ロード/ストアバッファは一杯になることがあるため、ロード/ストアユニット26は、フロー制御メカニズムを用い、デコードユニット20で、後続のメモリ動作を、その後続のメモリ動作のために十分なエントリがロード/ストアバッファにおいて(先のメモリ動作の完了によって)空になるまで、停止させる。たとえば、ロード/ストアユニット26は、空いているエントリの数のカウントをデコードユニット20に一斉に送り、デコードユニットは、このカウントが、デコードされている命令のメモリ動作に利用できるエントリが不十分であることを示す場合、停止する。ある特定の実施例に従うと、同時にデコードユニット20によりデコードされている命令は、ロックステップ(lockstep)でリザベーションステーション22に移動する。(図2に関して先に述べたようにラインが命令のためにリオーダバッファ32に割当てられる)このような実施例では、デコードユニット20は、同時にデコードされる命令の組内ですべてのメモリ動作に対して十分なエントリが利用できるまで停止する。これに代わるものとして、ロード/ストアユニット26が、後続のメモリ動作をバッファエントリが利用できるようになるまで停止させるための停止信号を用いてもよい。何らかの適切なフロー制御メカニズムを用いればよい。
【0060】
次に図4を参照して、ロード/ストアユニット26のある実施例のブロック図が示される。これ以外の実施例が可能であり意図されている。図4に示した実施例では、ロード/ストアユニット26は、第1のロード/ストアバッファ(LS1バッファ)60、第2のロード/ストアバッファ(LS2バッファ)62、LS1制御回路64、LS2制御回路66、一時バッファ68、セグメント加算器70、ポート0マルチプレクサ(mux)72、ポート1マルチプレクサ74、およびLS2再探索マルチプレクサ76を含む。セグメント加算器70は、機能ユニット24A−24C内のAGU42からデータアドレスを受けるように結合される。(たとえば図3に示したアドレスバス44Aの一部、アドレスバス44AAは、機能ユニット24A内のAGU42からのデータアドレスを送る。)マルチプレクサ70および72は、AGU42からのデータアドレスおよびセグメント加算器70の出力を受けるように結合され、LS1バッファ60にも結合される。マルチプレクサ72はまた、LS2再探索マルチプレクサ76からの入力を受ける。さらに、LS1バッファ60は、セグメント加算器70、LS1制御回路64、一時バッファ68、命令タグバス48、ストアデータ/タグバス50および結果バス38a(結果バス38の結果データ部分)に結合される。LS1制御回路64は、マルチプレクサ72および74ならびにLS2制御回路66に結合される。さらに、LS1制御回路64は、AGU42からのアドレスタグ(たとえば図3に示したアドレスタグバス44Aの一部、アドレスタグバス44ABは、機能ユニット24A内のAGU42からのアドレスタグを送る)、結果タグバス38bを介して結果タグ(結果バス38の結果タグ部分)、およびL/Sライン46(デコードユニット20AからのL/Sライン46Aを含む)を受けるように結合される。一時バッファ68およびLS2バッファ62は、結果バス38aおよび結果タグバス38bに結合される。LS2バッファ62はさらに、MABタグバス78上のミスアドレスバッファ(MAB)タグを受け、データキャッシュ28からの、物理アドレスバス80上の物理アドレスを受けるように結合される。LS2バッファ62はさらに、マルチプレクサ76、LS2制御回路66および一時バッファ68に結合される。LS2制御回路66はさらに、マルチプレクサ76、リタイアインターフェイス54、結果タグバス38b、スヌープインターフェイス52、データキャッシュ28からのヒット/ミス信号82、およびバスインターフェイスユニット37からの充填タグバス84に結合される。
【0061】
一般的に、ロード/ストアユニット26は、プリキャッシュバッファ(LS1バッファ60)およびポストキャッシュバッファ(LS2バッファ62)を含む。メモリ動作は、プロセッサ10内でディスパッチの際にLS1バッファ60に割当てられ、選択されてデータキャッシュ28の探索が行なわれるまでLS1バッファ60内にある。データキャッシュ28の探索に続き、メモリ動作は、探索状態(たとえばヒット/ミスなど)にかかわらず、LS2バッファ62に移される。
【0062】
ミスしたメモリ動作は、その後LS2再探索マルチプレクサ76およびポート0マルチプレクサ72を通して選択して、データキャッシュ28を再び探索すればよい。本明細書で用いる「再探索」という用語は、特定の動作に対する第1の探索の後に第2のまたは後続の試みとしてキャッシュを探索することを指す。加えて、ストアメモリ動作を、ストアがリタイアの状態になるまでLS2バッファ62内に保持しておいてもよい。
【0063】
L/Sライン46上の信号に応答して、LS1制御回路64は、LS1バッファ60内のエントリを識別されたロードおよびストアメモリ動作に割当てる。LS1制御回路64の制御により、LS1バッファ60はそれぞれの命令タグおよびストアデータ/タグ(適用できる場合)を割当てられたエントリに受ける。次に、対応するデータアドレスをAGUから受けて(LS1制御回路64が受けたアドレスタグにより識別される)、割当てられたエントリにストアする。
【0064】
メモリ動作はそのアドレスを受けるとデータキャッシュ28を探索できるようになる。LS1制御回路64は、メモリ動作を求めてLS1バッファエントリをスキャンしてデータキャッシュ28を探索し、ポート0マルチプレクサ72およびポート1マルチプレクサ74のために選択制御を生成する。したがって、ここで示している実施例では、1クロックサイクル当り2つまでのメモリ動作がデータキャッシュ28を探索することができる。ある具体的な実施例に従うと、LS1制御回路64は、データキャッシュ28を探索するためにプログラム順序でメモリ動作を選択する。よって、LS1制御回路64を、LS1バッファ60内の最も古いメモリ動作に対するスキャンに制限するように構成してもよい。メモリ動作の「プログラム順序」とは、命令のフェッチおよび実行が一度に1つずつ行なわれる場合の命令の実行順序である。さらに、投機的にフェッチされた命令のプログラム順序とは(たとえば分岐予測に従ったもの)、上記のようにこの投機が正しいと仮定した上で命令が実行される順序である。命令がプログラム順序で他の命令に先行する場合、前者の命令は他の命令よりも古いといえる。逆に、命令がプログラム順序で他の命令の後続命令の場合、前者の命令は他の命令よりも新しいといえる。なお、他の実現化例では、所望に応じ順序を崩してメモリ動作を選択しデータキャッシュ28を探索してもよい。
【0065】
LS1制御回路64は、メモリ動作を選択して、データアドレスを受けたときにデータキャッシュ28を探索するように構成される。(この実施例ではメモリ動作がLS1制御回路64によりスキャンされているエントリ内にあると仮定する。)AGU42から受けたアドレスタグがそうでなければ選択可能なメモリ動作の命令タグに一致していれば、LS1制御回路64は、マルチプレクサ72および74の一方を介してAGU42から受けた対応するデータアドレスを選択する。
【0066】
データアドレスは、ロード/ストアユニット26に与えられたときに選択され探索が行なわれるが、データアドレスは、セグメント加算器70の1つにも与えられる。この実施例では、セグメント加算器70は、x86アドレス指定方法のセグメント化部分を処理するために設けられている。x86命令セットアーキテクチャを用いない実施例では、セグメント加算器70がなくてもよい。一般的に、AGU42はメモリ動作に対応する論理アドレスを生成する。この論理アドレスは、命令のアドレスオペランドの加算により生成されるアドレスである。x86アーキテクチャでは、2段の変換方法が定められており、セグメント化方法により論理アドレスから線形アドレスに、次にページング方法により物理アドレスに変換される。AGU42は命令のアドレスオペランドを加算するため、AGUが与えるデータアドレスは論理アドレスである。しかしながら、現代の命令コードは一般的に「フラットアドレス指定モード」を用いており、このモードでは、セグメントベースアドレス(論理アドレスに加算されて線形アドレスを形成するもの)は、ゼロにプログラミングされる。したがって、ロード/ストアユニット26は、セグメントベースアドレスがゼロである(したがって論理および線形アドレスが等しい)と推定し、論理アドレスを選択してデータキャッシュ28を探索する。セグメント加算器70は、メモリ動作のために選択されたセグメントのセグメントベースアドレスを加算し、線形アドレスをマルチプレクサ72および74ならびにLS1バッファ60に送って記憶させる。特定のメモリ動作に対するセグメントベースアドレスが非ゼロであり、メモリ動作を選択して論理アドレスを受けた際にデータキャッシュ28を探索するのであれば、LS1制御回路64は、先行するアクセスを取消して(ロードデータがフォワードされないように)、対応する線形アドレスを対応するセグメント加算器70の出力から選択してデータキャッシュ28を探索する。これ以外の代替実施例では、AGU42がセグメントベースアドレスを受け線形アドレスを生成してもよい。さらに他の実施例では、フラットアドレス指定モードを要求してセグメントベースアドレスを無視してもよい。
【0067】
マルチプレクサ72および74は、LS1バッファ60内のエントリからデータアドレスを受けるようにも結合される。メモリ動作に対応するデータアドレスは、AGU42から受けた際にメモリ動作に割当てられるLS1エントリにストアされる。データアドレスが、メモリ動作選択に際してエントリから選択され、データキャッシュ28が探索される。なお、データアドレスに加え、他の情報をマルチプレクサ70および72を介してデータキャッシュ28に送ってもよい。たとえば、メモリ動作がロードであるかストアであるかを示すものを送ってもよい。メモリ動作の命令タグを送って、ロードメモリ動作のためのロードデータとともに結果バス38Dで転送することができる。この動作(適切なデータをマルチプレクスする)のサイズを送ることもできる。設計上の選択に応じて所望の情報を送ることができる。
【0068】
ストアデータはストアメモリ動作のために与えられ、ストアメモリ動作はLS1バッファ60にある。これに応じて、LS1制御回路64は結果タグバス38bをモニタする。LS1バッファ64内のストアデータタグに一致するタグが与えられると、結果バス38aのうち対応する結果バスからの対応するストアデータが、一致するストアデータタグを有するエントリ内に取り込まれる。
【0069】
LS1制御回路64は、LS1バッファ60から、メモリ動作を、メモリ動作のデータキャッシュ28探索に応じて除去する。ある具体的な実施例では、メモリ動作は、データキャッシュ28の探索のために選択された後のサイクルで除去される。当該後のサイクルを用いて、メモリ動作がAGU42の1つによりデータアドレスの生成が行なわれた際に選択された場合は、データアドレスをLS1バッファ60に伝搬してもよい。他の実施例では、メモリ動作が選択されたサイクル中にメモリ動作を除去することを選択してもよい。メモリ動作は選択された後のサイクルで除去されるため、LS1制御回路64は、LS1バッファ60内の最も古い4つのエントリをスキャンしてメモリ動作を選択してデータキャッシュ28を探索するように構成される(先行するクロックサイクルでは2つまでのエントリを選択し現在のクロックサイクルでは2つまでのエントリを選択できる)。
【0070】
LS1バッファ60から除去されたメモリ動作は、一時バッファ68に移される。一時バッファ68を設けて、LS1バッファ60からエントリを読出しこれらをLS2バッファ62に書込む際のタイミング上の制約を緩和してもよい。したがって、一時バッファ68は、設計上好都合であるに過ぎず、全く任意的選択である。メモリ動作が一時バッファ68に移された後のクロックサイクルで、メモリ動作はLS2バッファ62に移される。ストアデータは、ストアメモリ動作が一時バッファ68に保持されているクロックサイクル中に結果バス38上で与えられるので、一時バッファ68は、結果タグバス38b上の結果タグをモニタし、LS1バッファ60がデータを収集するのと同じやり方で結果バス38aからデータを収集する。
【0071】
このように、データキャッシュ28を探索したメモリ動作は、LS2バッファ62に与えられる。この実施例では、すべてのメモリ動作が、データキャッシュ28の最初の探索後にLS2バッファ62に与えられる。ストアは、データキャッシュ28に与えられるまでLS2バッファ62に保持される(すなわちデータキャッシュ28を更新できるようになるまで)。一般的に、ストアは、投機的でなくなったときに与えられる。ある実施例では、ストアは、リタイアに応じて(リタイアインターフェイス54を介して示される)またはその後いずれかの時点で与えられる。ロードは、この実施例でもリタイアまでLS2バッファ62に保持される。ロードヒットは、スヌープのためLS2バッファ62内に留まる。ロードミスは、少なくともロードがアクセスするキャッシュラインがデータキャッシュ28に送られるまではLS2に保持される。キャッシュライン(またはロードデータを含むその一部分)がキャッシュの更新にスケジューリングされていることに応じて、ロードミスはデータキャッシュ28の再探索にスケジューリングされる。再探索の際、ロードミスはロードヒットとなり(かつロードデータはデータキャッシュ28によりフォワードされる)、ヒットとしてリタイアまで保持される。
【0072】
LS2制御回路66は、データキャッシュ28を探索したメモリ動作のためにLS2バッファ62内にエントリを割当てる。加えて、LS2制御回路66は、データキャッシュ28から、ヒット/ミス信号82の各探索について、探索状態情報を受ける。ヒット/ミス情報は、探索状態が与えられたメモリ動作に対応するLS2バッファエントリにストアされる。ある実施例では、データキャッシュ28は、データキャッシュへのアクセスと並行して仮想アドレスを物理アドレスに変換しようと試みるアドレス変換回路を含む。アドレス変換回路で変換を行なうことができなければ、変換が行なわれるまで探索はミスであると識別される(たとえばメインメモリ内のソフトウェア管理変換テーブルを探索することによって)。ある具体的な実現化例では、データキャッシュ28内のアドレス変換回路は、32エントリレベル1TLBと、4ウェイセットアソシアティブ、256エントリレベル2TLBとを含む、2レベル変換索引バッファ(TLB)構成を有する。
【0073】
メモリ動作のデータアドレスをデータキャッシュ28が変換することができれば、対応する物理アドレスが物理アドレスバス28で与えられる。LS2制御回路は、対応するエントリが仮想アドレスを物理アドレスで上書きするようにする。しかしながら、再探索におけるインデックス付けのためにいくつかの仮想アドレスビットは別に保持しておき、ストアデータは、データキャッシュ28に対する仮想インデックス付けおよび物理的タグ付けが行なわれる実施例においては与えられる。
【0074】
データキャッシュ28にミスするメモリ動作に対し、データキャッシュ28はエントリを含まれているミスアドレスバッファ内に割当てる。ミスアドレスバッファは、ミスアドレスを、バスインターフェイスユニット37に送るために待ち行列に入れ、インターフェイスユニット37はアドレスをL2キャッシュからまたはメインメモリからフェッチする。ミスアドレスバッファ内のエントリを識別するタグ(MABタグ)が、ミスした各メモリ動作に対しMABタグバス78上に与えられる。なお、データキャッシュ28は、ミスアドレスバッファエントリをキャッシュラインに基づいて割当てる。したがって、後続の、同じキャッシュラインに対するミスは、同じMABタグを受け、さらなるミスアドレスバッファエントリが割当てられないようにする。
【0075】
次に、バスインターフェイスユニット37は、ミスのキャッシュラインをフェッチし、このキャッシュラインを充填データとしてデータキャッシュ28に戻す。バスインターフェイスユニット37はまた、キャッシュラインに対応するMABタグを充填タグとして充填タグバス84上に置く。LS2制御回路66は、充填タグをLS2バッファ62内のMABタグと比較する。ロードメモリ動作についてMABタグの一致が生じれば、そのロードを選択してデータキャッシュ28を再探索する。2以上の一致が検出されれば、最も古い一致ロードを、後続のクロックサイクル中に選択される他のメモリ動作とともに選択する。MABタグに一致するストアはヒットとしてマークされるが、データを与える試みを行なう前に非投機となるのを待つ。
【0076】
ある実施例では、データのキャッシュラインは、複数のパケットを用いて戻される。各ロードメモリ動作は、どのパケットにアクセスしているかを記録し(またはそのパケットはロードアドレスの適切なアドレスビットから区別される)、バスインターフェイスユニット37は、充填タグとともに戻されているパケットを識別する。このように、戻されるパケットにアクセスするロードのみを選択して再探索を行なう。
【0077】
バスインターフェイスユニット37は、充填データよりも前に充填タグを与えて、ロードが再探索のために選択されポート0を介してデータキャッシュ28に送られて、データキャッシュ28にデータのパケットが届くのと同時にデータ転送段に達するようにする。アクセスされたデータをこうして転送することができる。
【0078】
ストアがデータキャッシュ28の探索後にLS2バッファ62に送られ後続のロードがLS1バッファ60からデータキャッシュ28を探索しそこからデータをフォワーディングできるようになっているため、古いストアと同じ記憶場所にアクセスしている新しいロードは、古いストアがデータをデータキャッシュ28に与える前に、データキャッシュ28を探索することができる。ロードの正しい結果とは、その古いストアに対応するストアデータを受けることである。したがって、LS2制御回路66は、探索アドレスをモニタし、このアドレスへの古いストアがLS2バッファ62内にあるかどうか判断する。一致が検出されストアデータをLS2バッファ62内で利用できるのであれば、LS2制御回路66はデータキャッシュ28に信号で知らせフォワーディングのためにLS2バッファから与えられるデータを選択し、選択されたデータを与える。他方、一致が検出されストアデータをLS2バッファ62内で利用することができなければ、データキャッシュ28からのデータフォワーディングは取消される。ロードはLS2バッファ62に送られ、ストアデータを利用できるようになるまで探索のために選択される。ストアからロードへのフォワードについてのさらなる詳細事項については以下に示す。
【0079】
一般的に、LS2制御回路66は、LS2バッファ62内のエントリをスキャンしメモリ動作を選択してデータキャッシュ28を再探索するように構成されている。ロードミスを選択し、データがデータキャッシュ28に戻されることに応じて再探索を行なう。古いストアにヒットしたロードを選択し、現在再探索を行なっていないならば再探索を行なう。ストアを選択し、リタイアされたことに応じて再探索を行なう。複数のメモリ動作を選択できる場合、LS2制御回路66は、複数のメモリ動作のうち最も古いものを選択する。LS2制御回路66は、ポート0を使用している(ポート0マルチプレクサ72を介して)ならば、LS1制御回路64に信号で知らせ、制御回路64は、ポート0マルチプレクサ72を通してLS2入力を選択し、そのクロックサイクルでポート0上のLS1バッファ60からのメモリ動作の選択を不能にする。
【0080】
LS2制御回路66はさらに、スヌープインターフェイス52を介してバスインターフェイスユニット37からスヌープ要求を受けるように結合される。一般的に、LS2バッファ62内のメモリ動作はスヌープされる。なぜなら、このメモリ動作は既にデータキャッシュ28を探索しておりスヌープ動作に応じて訂正作業が必要だからである。たとえば、ロードヒット(従属する命令にデータをフォワード済み)は、廃棄されて再び実行されなければならない。ストアは、探索から変更の必要があるキャッシュ状態をストアしている。対照的に、LS1バッファ60内のメモリ動作は、データキャッシュ28を探索しておらずしたがってスヌープの必要はない。
【0081】
LS2制御回路66は、スヌープ要求を受け、LS2バッファエントリをスヌープ要求に対して調べて、スヌープインターフェイス52を介してバスインターフェイスユニット37に応答する。加えて、LS2制御回路66は、スヌープに応じてLS2バッファエントリ内で更新を行なってもよい。
【0082】
一般的に、バッファは、2以上の情報項目を後で検索するためにストアするのに用いられる記憶素子である。バッファは、複数のレジスタ、ラッチ、フリップフロップまたは他のクロックされた記憶装置を含む。その代わりとして、バッファが、適切に配列された1組のランダムアクセスメモリ(RAM)セルを含んでいてもよい。バッファは多数のエントリに分割され、各エントリは、バッファの設計対象である1つの情報項目をストアするように設計されている。エントリは、適切な方法で割当および割当解除可能である。たとえば、バッファは、シフト先入れ先出し(FIFO)バッファとして動作してもよく、この場合、エントリは、古いエントリが削除されるときにシフトダウンされる。それに代えて、ヘッドおよびテールポインタを用いてバッファ内の最も古いおよび最も新しいエントリを示してもよく、エントリは、削除されるまでバッファの特定の記憶場所に保持される。図1に示したストア待ち行列400は、一種のバッファである。本明細書で用いる「制御回路」という用語は、入力に対し動作を行なってこれに応じて出力を生成し上記の動作を実現する、組合せ論理回路、クロックト記憶回路および/またはステートマシンの組合せのことをいう。
【0083】
なお、ある実施例では、ロード/ストアユニット26は、LS1からのストア探索を同じポート上の古いストアのデータ提供と重畳しようとする。これが実施される理由は、ストア探索ではヒット/ミスについてデータキャッシュタグを検査しているだけでデータ記憶内のデータの検索または更新の試みがされていないからである。さらに、上記の説明では、すべてのメモリ動作がLS2バッファ62内にあるものとして実施例の説明をしているが、これ以外の実施例ではこのような方法で動作が行なわれないかもしれない。たとえば、ロードヒットは実施例によってはLS2バッファ62内にストアされないことがある。例として、こうした実施例は厳密なメモリ順序が望まれない場合に用いられる。
【0084】
ストア−ロードフォワーディング
図5は、ロード/ストアユニット26およびデータキャッシュ28の一部の一実施例を示す。これ以外の実施例が可能であり意図されている。図5の実施例では、ロード/ストアユニット26は、LS2バッファ62、LS2制御回路66、データフォワードマルチプレクサ100、ならびにアドレスおよびウェイ比較器102A−102Bを含む。加えて、図5に示した実施例では、データキャッシュ28は、ポート1データマルチプレクサ110およびポート0データマルチプレクサ112を含む。LS2バッファ62は、データフォワードマルチプレクサ100、比較器102A−102BおよびLS2制御回路66に結合される。LS2制御回路66はさらに、マルチプレクサ100、110および112に結合される。LS2制御回路66はさらに、比較器102A−102Bに結合される。比較器102A−102Bは、データキャッシュ28のポート0および1上に与えられたデータアドレスおよびウェイを受けるように結合される。マルチプレクサ112は、結果を結果バス38DAに与えるように結合され、同様に、マルチプレクサ110は、結果を結果バス38DBに与えるように結合される。結果バス38DA−38DBは、図3に示す結果バス38Dの一実施例を成す。
【0085】
一般的に、ロード/ストアユニット26は、ロードメモリ動作の探索がLS2バッファ62にストアされた古いストアメモリ動作にヒットする場合を処理するように構成される。ロード/ストアユニット26は、LS1バッファ60からデータキャッシュ28を探索するメモリ動作のデータアドレスのインデックス部を、LS2バッファ62内のメモリ動作のデータアドレスのインデックス部と比較する。これらのインデックスが一致しメモリ動作がデータキャッシュ28内でデータキャッシュ28と同じウェイにヒットしていれば、探索しているメモリ動作はLS2バッファ62内のストアにヒットしている。探索しているロードがLS2バッファ62内のストアにヒットしておりストアデータがLS2バッファ62で利用できるのであれば、ストアデータはデータキャッシュ28に送られてキャッシュにあるロードデータの代わりにフォワードされる。他方、探索しているロードが、ストアデータが利用できないLS2バッファ62内のストアにヒットするかもしれない。このような場合、データキャッシュ28からのデータフォワードは取消され、ロード記憶動作を選択して、ストアデータが利用できるようになるまでLS2バッファ62からの再探索を行なう。最終的に、ストアデータはLS2内で利用できるようになり、バッファから、ロードによる再探索中にフォワードされる、または、ストアがデータキャッシュ28を更新しデータがデータキャッシュ28からロードによる再探索中にフォワードされる。
【0086】
一般的に、ストアデータが記憶場所から「利用可能」であるのは、このストアデータが実際にその記憶場所にストアされている場合である。その後のある時点でデータが記憶場所にストアされるかもしれないがまだそこにストアされていない場合、データは、「利用可能でない」、「まだ利用可能でない」または「利用できない」。たとえば、ストアデータは、そのストアデータがストアデータのソースからLS2バッファエントリにまだ転送されていない場合は、LS2バッファエントリにおいて利用可能でない。ストアデータのソースとは、実行によりストアデータを発生させる命令であり、ストアが対応する命令と同じ命令である(メモリオペランドを宛先として指定する命令)、またはより古い命令である。ストアデータタグは、ストアデータのソースを識別し、よって、実行ユニット40からの結果タグと比較されてストアデータを収集する。
【0087】
上記のように、ロードアドレスおよびウェイ表示が、LS2バッファ62内のストアアドレスおよびウェイ表示と比較され、古いストアにヒットするロードが検出される。したがって、比較器102のような比較器が設けられる。比較器102は、データキャッシュ28の各ポート上のアドレスおよびウェイ表示をLS2バッファ62内にストアされたデータアドレスおよびウェイ表示と比較するために設けられる。さらに、所望されれば、比較器102をLS2バッファ62にCAM構成として組込んでもよい。
【0088】
ストアエントリ上のロードヒットが検出され対応するストアデータが利用可能の場合、LS2制御回路66は、データフォワードマルチプレクサ100を用いてストアデータを選択し、そのデータをポート0マルチプレクサ112またはポート1マルチプレクサ110のいずれかに、ヒットが検出されたポートに基づいて与える。したがって、データフォワードマルチプレクサ100は、各ポートに1つずつ、1組の独立したマルチプレクサを含む。加えて、LS2制御回路66は、データキャッシュ28に対して対応する信号をアサートし、データキャッシュ28が、ヒットしているロードに対しデータキャッシュ28から読出されたキャッシュデータの代わりにフォワードされたデータを選択できるようにする。
【0089】
さらに、この実施例は、LS2バッファ62を用いるものとして示されているが、他の実施例も意図されている。この他の実施例においては、上記のストアフォワードメカニズムが、従来のストア待ち行列とともに実施され、このストア待ち行列は、データキャッシュ28を既に探索しているストアメモリ動作のみをストアする。(たとえばストア待ち行列400をある特定の実施例で用いることができる)。またさらに、ここで示されているマルチプレクサ110および112はデータキャッシュ28内にあるが、この回路を所望に応じてロード/ストアユニット26内で用いてもよい。加えて、ここで示されているマルチプレクサ100はLS2バッファ62からデータを選択してフォワードするものであるが、マルチプレクサ100を省いて、読出エントリ番号をデータを読出したLS2バッファ62に与えてもよい。これは、LS2バッファ62が個別クロック記憶装置(たとえばレジスタ)ではなくRAM構成の場合である。
【0090】
さらに、ある具体的な実現化例では、ロード/ストアユニット26が、従属性リンクファイルを用いて、対応するストアデータが利用可能でないストアにヒットするロードが検出されたときにデータのフォワードを加速してもよい。このようなロードの検出に応じて、ロード/ストアユニット26は、ロードのために従属性リンクファイルにエントリを割当てる。従属性リンクファイルエントリは、ストアにヒットしたロードを識別するロード識別子(たとえばリオーダバッファ32がロードに対応する命令に割当てた命令タグ)およびロードがヒットしたストアに対応するストアデータのソースを識別するストアデータ識別子(たとえばストアデータタグ)をストアする。次に、ロード/ストアユニット26は、従属性リンクファイル内にストアされたストアデータタグに対し、結果バス38をモニタする。ストアデータが結果バス38の1つに与えられていることが検出されると、ロード/ストアユニット26は、データキャッシュ28に、対応する結果バスからのデータをデータキャッシュ28からの結果バスにフォワードさせる。加えて、対応するエントリからのロード識別子が結果タグとしてフォワードされる。なお、従属性リンクファイルは、全く任意選択の性能の向上のためのものである。従属性リンクファイルを用いない実施例も意図されている。
【0091】
次に図6を参照して、LS2制御回路66およびLS2エントリ94の一実施例の一部のブロック図が示される。これ以外の実施例および特定の実現化例が意図されている。図6の実施例は、比較器102AA、比較器102AB、ANDゲート120、ヒット制御回路132、およびデータ転送マルチプレクサ100を含む。ヒット制御回路132はヒットエントリレジスタ134を含む。比較器102AAは、ポート0からデータアドレスの少なくともインデックス部を受け(参照番号136)、かつ、エントリ94のアドレス−インデックスフィールド96Aにストアされたデータアドレスのインデックス部を受けるように結合される。比較器102AAは、出力をANDゲート120に与え、ANDゲート120はさらに、エントリ94からストア有効ビット(STVフィールド96B)およびヒットビット(Hフィールド96C)を受けるように結合される。ANDゲート120の出力は、ヒットストア信号としてヒット制御回路132に結合され、ヒット制御回路132はさらに、ポート0ロード信号(参照番号140)、ポート0ヒット信号(参照番号122)およびポート0オフセットおよびサイズ情報(参照番号124)を受ける。比較器102ABは、ウェイフィールド96Eの内容を受けるように結合され、かつ、ポート0ウェイ表示(参照番号142)を受けるように結合される。比較器102ABは、出力をヒットウェイ信号としてヒット制御回路132に与えるように結合される。ヒット制御回路132はさらに、データ有効フィールド96Gからデータ有効ビットを受け、オフセットおよびサイズフィールド96Fからオフセットおよびサイズ情報を受けるように結合される。ヒット制御回路132は、他のエントリに対応する、同様のヒットストア、ヒットウェイ、データ有効ならびにオフセットおよびサイズ信号を受ける。ヒット制御回路132は、リザベーションステーション22およびリオーダバッファ32に取消しデータFWD信号を与え(参照番号146)、データキャッシュ28にLS2信号を選択する(参照番号148)ように結合される。加えて、ヒット制御回路132は、選択制御をマルチプレクサ100に与えるように結合される。マルチプレクサ100は、ストアデータフィールド96Hからのストアデータ(および他のLS2バッファエントリからのストアデータ)を受けるように結合される。
【0092】
一般に、図6に示した論理では、エントリ94内のストアに対するポート0上のロードのヒットを検出する。ポート1およびエントリ94について、ならびに他のエントリに対する上記ポート双方について、同様の論理を用いることができる。より具体的には、比較器102AAは、ポート0上のデータアドレスのインデックス部をアドレス−インデックスフィールド96Cのインデックスと比較する。これらのインデックスが一致していれば、比較器102AAはその出力信号をアサートする。ANDゲート120は、比較器102AAの出力信号を受け、この出力信号をストア有効ビットおよびヒットビットと組合せる。ストア有効ビットは、エントリ94がストアメモリ動作に対応する情報をストアしているかどうかを示し(なぜならエントリ94および他のLS2バッファエントリはロードおよびストアいずれかに対応する情報をストアしている可能性があるため)、ヒットビットは、ストアがデータキャッシュ28を探索したときにデータキャッシュ28内でヒットしているかどうかを示す。したがって、ANDゲート120が与えるヒットストア信号は、アサートされたときに、ロードインデックスが、データキャッシュ28内でヒットであるストアインデックスにヒットしたことを示す。
【0093】
ヒット制御回路132は、エントリ94に対応するヒットストア信号、ポート0に対応する他のヒットストア信号、およびポート0ロード信号140を組合せて、ポート0上にメモリ動作のためのデータフォワード信号を生成する。この実施例では、ヒット制御回路132は、ロードについて2つの場合を検出する。すなわち(i)ヒットストア信号がアサートされ対応するデータ有効ビット96Gがセットされる。(ii)ヒットストア信号がアサートされ対応するデータ有効ビット96Gがクリアされる。アサートされるヒットストア信号がない場合、またはポート0上のメモリ動作がロードでない場合、ヒット制御回路132は、そのメモリ動作には使用されない。この実施例では、同様のヒット制御回路を用いてポート1上のメモリ動作を行なうことができる。
【0094】
(i)の場合、ヒット制御回路132は、データフォワードマルチプレクサ100に対しマルチプレクサ選択信号を生成し、これにより、データフォワードマルチプレクサ100は、アサートされたヒットストア信号に対応するLS2バッファエントリのストアデータフィールド96Hからのストアデータを選択する。たとえば、ANDゲート120が生成したヒットストア信号がアサートされる場合、ヒット制御回路132は、マルチプレクサ100が、エントリ94からストアデータフィールド96Hからのストアデータを選択するようにし、ポート0マルチプレクサ112に対応する選択LS2信号148をアサートする。選択されたデータは、データキャッシュ28によりフォワードされるが、これは図5について先に説明したとおりである。(ii)の場合、ヒット制御回路132は、転送(FWD)取消信号146をリザベーションステーション22およびリオーダバッファ32に対してアサートして、これらの構成要素に、そのクロックサイクル中ポート0上のロードに対してフォワードされたデータを無視するよう伝える。
【0095】
このように、ヒット制御回路132は、エントリ94からのデータを、エントリ94内のストアインデックスおよびロードインデックスの一致に基づいて、かつ、ストアがデータキャッシュ28内でヒットであることに基づいて、フォワードする。特に、ロードがデータキャッシュ28内でヒットしているかどうかまたはロードおよびストアが同じウェイでヒットしているかどうか判断されていないことがある。この情報は、ロードの探索が終了するまで利用できないかもしれない。このような事態は、この実施例では後続のクロックサイクルで生じる。したがって、ヒット制御回路132は、ヒットエントリレジスタ134内で、フォワードされたデータがもとあったLS2バッファ62のエントリ番号を収集する。次のクロックサイクル中に、ヒット制御回路132は、LS2バッファ62からのデータフォワードが正しいかどうか判断する。データフォワードが正しいのは、ロードがデータキャッシュ28内でヒットし(ポート0ヒット信号122で通知される)、ヒットエントリレジスタ134により識別されたエントリ内のロードおよびストアのウェイ表示が一致する場合(たとえば比較器102ABがポート0のウェイ表示およびウェイフィールド96Eからのウェイ表示が一致することを検出した場合、エントリ94がヒットエントリレジスタ134によって示されている場合)である。フォワーディングが誤りであれば、ヒット制御回路132は、フォワード取消信号146をアサートして、リザベーションステーション22および/またはリオーダバッファ32に、以前にフォワードされたポート0上のデータを無視するよう知らせる。ヒット制御回路132は、別のデータフォワード取消信号146を与えてフォワーディングを取消すようにしてもよい。これは、(上記のように)データが利用可能でないため、および、ストア(データはここからフォワードされた)と異なるウェイのミスまたはヒットであるロードに対する誤ったフォワーディングのためである。この信号は、同じロードに対して異なる時間にアサートし得る。
【0096】
図1に関して先に述べたように、ヒット制御回路132はさらに、LS2バッファ62からのストアデータをロードのためにフォワードすべきかどうかをロードおよびストアに対する(キャッシュライン内の)オフセットおよびサイズ情報を用いて判断し、ロードが読出す少なくとも1バイトをストアにより更新するかどうか決定する。オフセットおよびサイズ情報は上記のようにどのような適切なフォーマットで与えてもよい(たとえばアドレスビットおよびバイトイネーブルマスクの組合せ)。なお、ヒット制御回路132がロードおよびストアアドレスのオフセットの一部を比較する場合、その部分を、所望される場合はインデックス部に加えて比較器102AAで比較することができる。
【0097】
さらに、ヒット制御回路132は、所与のロードについて2以上のストアのヒットを検出してもよい。ヒット制御回路132は、データフォワードのためにロードよりも古い、最も新しいストアを求める。それに代えて、各LS2バッファエントリが、所与のアドレスを更新するLS2バッファ62内の最後のストアを識別するバッファ表示のうちの最終を含んでいてもよい。ANDゲート120内でLIB表示を用いて、ヒットストア信号が、LS2バッファ62内の最も新しいストアを除いてアサートされないようにする。このように、複数のヒットの優先順位をつけないようにする。ストアはLS2バッファ62内に置かれているため、そのLIBビットをセットし、同じアドレスへの古いストアのLIBビットをクリアしてもよい。
【0098】
なお、ここで示している比較器102ABは、LS2バッファエントリ94にストアされたウェイ表示をロードのウェイ表示と比較するが、代替実施例においては、ロードのためにデータをフォワードするのに用いるエントリからのウェイ表示を読出して(フォワーディングがインデックス比較およびストアのデータキャッシュでのヒットに基づいている場合)、読出されたウェイ表示をロードウェイ表示と比較して、ロードおよびストアが同じウェイでヒットしていることを確認する。ウェイ表示を、ヒットエントリレジスタ134と同様のレジスタにストアして、将来の比較に備えることができる。
【0099】
さらに、ロードが読出した1以上のバイトが、ロードが読出した1以上の他のバイトについてロードがヒットしたストアによって、更新されないことがある。このような場合、データキャッシュは、ストアデータをキャッシュデータと併合して、ロードが読出したバイトを与える。複数のストアが、ロードが読出したバイトのうち異なるバイトを与えるとき、このロードをリタイアさせて再探索する。複数のストアのうち1つ以上のストアをリタイアさせてデータキャッシュに与えてもよく、これらのストアが更新しロードが読出したバイトをデータキャッシュから与えてもよい。その代わりとして、図6の装置が、異なるストアからのバイトを併合してロードデータを与えてもよい。これ以外の実施例では、所望に応じて上記の方法を他のやり方で処理する。
【0100】
なお、図6に示した論理は例示にすぎない。適切な組合せ論理(ここで示している論理のブール等価物を含む)を用いることができる。なお、エントリ94はLS2バッファエントリの一例である。エントリ94は、設計上の選択に応じて図6に示したものの上にさらなる情報をストアしてもよい。
【0101】
次に図7を参照して、LS1バッファ60からデータキャッシュ28を探索するメモリ動作のパイプラインの例を示すタイミング図が示されている。異なるパイプラインを用いたこれ以外の実施例が可能であり意図されている。図7において、クロックサイクルは垂直方向の実線で区切られている。水平方向の点線も示されている。プロセッサ10の他の部分に関連するパイプライン段を示して、他の構成要素のロード/ストアユニット26へのインターフェイスを示している。
【0102】
クロックサイクルCLK0は、メモリ動作を指定する命令のデコード/ディスパッチサイクルである。クロックサイクルCLK0において、この命令をデコードするデコードユニット20は、メモリ動作に関しロード/ストアユニット26に信号を送る。LS1制御回路64は、対応する命令に対するデコード/ディスパッチ段においてメモリ動作のためにLS1バッファエントリを割当てる。加えて、デコードユニット20は、デコードされた命令を対応するリザベーションステーション22に送る。
【0103】
クロックサイクルCLK1において、アドレス生成ユニットは、このメモリ動作のためにデータアドレスを生成し、このデータアドレスをロード/ストアユニット26に送る。このクロックサイクル中に、メモリ動作が、LS1制御回路64による(与えられたデータアドレスにより行なう)スキャンに加わり、データキャッシュ28を探索するために選択される。このようにして、メモリ動作はLS1パイプラインのスキャンパイプライン段にある。
【0104】
クロックサイクルCLK2において、データアドレスはデータキャッシュ28に送られる。クロックサイクルCLK2内の矢印で示しているように、メモリ動作は、LS1バッファ60から、クロックサイクルCLK2の最後に一時バッファ68に移動する。メモリ動作は、クロックサイクルCLK2の間は、LS1パイプラインのデータキャッシュ段へのアドレスにある。
【0105】
クロックサイクルCLK3において、データアドレスはデータキャッシュ28にアクセスする。メモリ動作に対応するデータは(メモリ動作がロードの場合)、クロックサイクルCLK3の最後にフォワードされる。より具体的には、ロードアドレスのインデックス部がLS2バッファ62内のストアアドレスのインデックス部と一致し、かつ、ストアがデータキャッシュ28内でヒットしていれば、LS2バッファ62からのデータは、クロックサイクルCL3においてキャッシュデータの代わりにフォワードされる。加えて、メモリ動作は、一時バッファ68からLS2バッファ62に送られる。メモリ動作は、クロックサイクルCLK3においてはキャッシュアクセス段にある。
【0106】
クロックサイクルCLK4において、メモリ動作に従属する命令(メモリ動作がロードの場合)が実行される。したがって、図7に示したパイプラインでは、3クロックサイクルアドレス生成が、従属動作実行ロードレイテンシに対して与えられている。加えて、メモリ動作は、クロックサイクル4においては応答パイプライン段にある。データキャッシュ28は、この応答段においてヒット/ミス情報(ヒットのウェイ表示を含む)および物理アドレスを与える。このように、LS2制御回路66は、ヒット/ミス情報および物理アドレスをこの応答段においてメモリ動作と関連付ける。さらに、ロードに対するヒット/ミス表示およびウェイ表示を用いて、クロックサイクルCLK3においてLS2バッファ62からフォワードされたデータを確認する(利用できる場合)。フォワードされたデータが、ロードがミスであるまたは異なるウェイでヒットしたために誤ってフォワードされたものであれば、フォワード取消信号がアサートされる。
【0107】
クロックサイクルCLK5において、メモリ動作は応答2パイプライン段にある。この段の間、メモリ動作がアクセスしたキャッシュラインに割当てられたミスアドレスバッファエントリを識別するミスアドレスバッファタグ(メモリ動作がミスの場合)が、データキャッシュ28により与えられる。このように、LS2制御回路66は、データキャッシュ28から受けたMABタグを応答2段のメモリ動作に関連付ける。
【0108】
次に図8を参照して、LS2バッファ62からデータキャッシュ28を再探索するメモリ動作のパイプラインの例を示すタイミング図が示されている。異なるパイプラインを用いたこれ以外の実施例が可能であり意図されている。図8において、クロックサイクルは垂直方向の実線で区切られている。水平方向の点線も示されている。プロセッサ10の他の部分に関連するパイプライン段を示して、他の構成要素のロード/ストアユニット26へのインターフェイスを示している。
【0109】
クロックサイクルCLK0において、メモリ動作が、LS2バッファエントリのスキャンに加わり、データキャッシュ28を再探索するために選択される。クロックサイクルCLK0の下の矢印によって示しているように、このメモリ動作が選択されるのは、メモリ動作についてMABタグに一致する充填タグを受けた場合、メモリ動作がLS2バッファ62内のより古いストアにヒットしているロードである場合(データは過去の探索に利用可能でなかった)、または、メモリ動作がリオーダバッファ32がリタイアしたストアである場合、である。
【0110】
クロックサイクルCLK1において、スキャン1段で選択されたメモリ動作はスキャン2段に進む。スキャン2段において、メモリ動作はマルチプレクサ76および72を通して選択されてデータキャッシュ28に送られる。したがって、LS2制御回路66は、マルチプレクサ76を通してスキャン2段のメモリ動作を選択する。クロックサイクルCLK2、CLK3、CLK4およびCLK5は、LS2バッファ再探索パイプラインのデータキャッシュへのアドレス、キャッシュアクセス、応答、および応答2段であり、先に述べた対応する段と同様である。したがって、この実施例では、バスインターフェイスユニット37は、対応するデータを与える4クロック前にMABタグを与えて、対応する充填データにアクセスするロードの選択が、充填データがデータキャッシュ28に到達した(従って充填データはフォワードされた)クロックサイクルのキャッシュアクセス段において行なわれるようにする。
【0111】
なお、図7および8の点線の上の命令パイプライン段と点線の下のメモリ動作パイプライン段との間のタイミングを、図7および8に示したものから延長してもよい。たとえば、図7では、アドレスは、厳密にデコード/ディスパッチサイクル直後のクロックサイクルで生成されない場合がある。その代わりに、オペランドが利用できないまたはアドレス生成のために古い命令が選択される場合がある。さらに、メモリ動作は、アドレスが与えられたクロックサイクル中にアクセスのためにスキャンされないかもしれず、他の古いメモリ動作がその代わりにスキャンされるかもしれない。
【0112】
次に図9を参照して、ヒット制御回路132が、ロードの探索中にデータを選択してLS2バッファ62からフォワードする実施例の動作を示すフローチャートが示される(たとえばロードの探索のキャッシュアクセスパイプライン段)。他の実施例が可能であり意図されている。図9に示したステップは、理解しやすくするために特定の順序で示されているが、その他の適切な順序を用いてもよい。加えて、ステップを、ヒット制御回路132内で組合せ論理により並列に実行してもよい。
【0113】
ヒット制御回路132は、ロードがストアにヒットしストアがキャッシュヒットであるかどうかを判断する(判断ブロック150)。より具体的には、ヒット制御回路132は、ロードインデックスがストアインデックスに一致している(かつオフセットおよびサイズ情報が一致している)場合にロードがストアにヒットしていると判断する。この判断は、ロードヒット情報およびウェイ表示を後続のクロックサイクルで利用できるときに、その正誤が検査される(図10に示す)。判断ブロック150の結果が「イエス」であれば、ヒット制御回路132は、データキャッシュ28に信号を送り、キャッシュデータの代わりに、LS2バッファ62から与えられるデータを選択し、ヒットであるエントリからのデータをマルチプレクスし(ステップ152)、ヒットであるLS2バッファエントリをヒットエントリレジスタ134に記録する(ステップ154)。判断ブロック150の結果が「ノー」であれば、ヒット制御回路132はロードに関してそれ以上の作業は行なわない。
【0114】
図10は、ヒット制御回路132がロードの探索中にLS2バッファ62からのフォワーディングを検査する実施例の動作を示すフローチャートである(たとえばロードの探索の応答パイプライン段)。これ以外の実施の形態が可能であり意図されている。図10に示したステップは理解しやすくするために特定の順序で示されているが、これ以外の適切な順序を用いてもよい。加えて、これらのステップをヒット制御回路132内で組合せ論理により並列に実行してもよい。
【0115】
ヒット制御回路132は、エントリがヒットエントリレジスタ134に記録されているかどうか判断する(判断ブロック160)。たとえば、ヒットエントリレジスタ134は、データがインデックス比較およびストアがヒットであることに基づいてフォワードされたときにセットされ、ロードのヒットの検査およびウェイ表示の一致後にリセットされる、有効ビットを含み得る。エントリがヒットエントリレジスタ134に記録されていなければ、ヒット制御回路132はロードに関してさらなる作業は行なわない。エントリがヒットエントリレジスタ134に記録されていれば、ヒット制御回路134は、ロードウェイ表示がヒットエントリレジスタ134に記録されたエントリのストアウェイ表示に一致しているかどうか、および、ロードがヒットかどうか判断する(判断ブロック162)。ロードがミスであるまたはロードウェイ表示がストアウェイ表示に一致していなければ、ヒット制御回路132は、フォワード取消信号をアサートする(ステップ164)。ロードがヒットでありロードウェイ表示がヒットエントリレジスタ134に記録されたエントリのストアウェイ表示に一致していれば、ヒット制御回路132はロードに関しさらなる作業は行なわない。
【0116】
なお、ここでは種々の信号のアサートについて述べている。本明細書では、ある信号は、この信号が特定の状態を示す値を伝える場合に「アサートされる」。逆に、ある信号は、その信号が特定の状態がないことを示す値を伝える場合に「デアサートされる」。ある信号は、論理ゼロ値を伝える場合または逆に論理1値を伝える場合にアサートされると定義してもよい。
【0117】
コンピュータシステム
次に図11を参照して、バスブリッジ202を通して種々のシステム構成要素に結合されたプロセッサ10を含むコンピュータシステム200の一実施例のブロック図が示される。これ以外の実施例が可能であり意図されている。ここで示しているシステムでは、メインメモリ204はメモリバス206を通してバスブリッジ202に結合され、グラフィックスコントローラ208はAGPバス210を通してバスブリッジ202に結合される。最後に、複数のPCI装置212A−212BがPCIバス214を通してバスブリッジ202に結合される。第2のバスブリッジ216をさらに設けて、EISA/ISAバス220を通して1以上のEISAまたはISA装置218への電気的インターフェイスに対応するようにしてもよい。プロセッサ10は、CPUバス224を通してバスブリッジ202に結合され、任意的選択のL2キャッシュ228に結合される。CPUバス224およびL2キャッシュ228へのインターフェイスは、バスインターフェイスユニット37が結合されたインターフェイスを含むものでもよい。
【0118】
バスブリッジ202は、プロセッサ10、メインメモリ204、グラフィックスコントローラ208およびPCIバス214に取付けられた装置間のインターフェイスとなる。バスブリッジ202に接続されたこれら装置のうち1つから動作を受けると、バスブリッジ202はその動作のターゲットを識別する(たとえば特定の装置、または、PCIバス214の場合はターゲットがPCIバス214にあることを識別)。バスブリッジ202は、その動作をターゲットの装置に送る。一般的に、バスブリッジ202は、ある動作を、ソースである装置またはバスが用いるプロトコルから、ターゲットである装置またはバスが用いるプロトコルに変換する。
【0119】
第2のバスブリッジ216は、PCIバス214に対してISA/EISAバスへのインターフェイスを与えることに加え、所望に応じてさらなる機能を取入れてもよい。入出力コントローラ(図示せず)は、第2のバスブリッジ216外のものでもバスブリッジ216と一体化されたものであっても、コンピュータシステム200内に設けられて、所望に応じて、キーボードおよびマウス222のためのならびに種々のシリアルおよびパラレルポートのための動作支援を行なってもよい。他の実施例において、外部キャッシュユニット(図示せず)をさらに、プロセッサ10およびバスブリッジ202間でCPUバス224に結合してもよい。その代わりに、外部キャッシュをバスブリッジ202に結合し、外部キャッシュのためのキャッシュ制御回路をバスブリッジ202と一体化させてもよい。L2キャッシュ228が、プロセッサ10の裏側の構成として示されている。なお、L2キャッシュ228はプロセッサ10から離れていてもよく、プロセッサ10とともにカートリッジに組込まれていてもよく(たとえばスロット1またはスロットA)、またはプロセッサ10とともに半導体基板上に集積されてもよい。
【0120】
メインメモリ204は、アプリケーションプログラムがストアされているメモリであり、このメモリから、プロセッサ10は主として実行する。適切なメインメモリ204は、DRAM(ダイナミックランダムアクセスメモリ)を含む。たとえば、SDRAM(同期型(synchronous)DRAM)またはランバス(Rambus)DRAM(RDRAM)の複数のバンクが適切である。
【0121】
PCI装置212A−212Bは、例えばネットワークインターフェイスカード、ビデオアクセラレータ、オーディオカード、ハードまたはフロッピー(R)ディスクドライブまたはドライブコントローラ、SCSI(スモールコンピュータシステムインターフェイス)アダプタおよびテレホンカードといった種々の周辺装置の例である。同様に、ISA装置218は、モデム、サウンドカードおよび種々のデータ取得カード(たとえばGPIBまたはフィールドバスインターフェイスカード)といった種々の周辺装置の例である。
【0122】
グラフィックスコントローラ208は、テキストおよび画像のディスプレイ226へのレンダリングを制御するために設けられる。グラフィックスコントローラ208は、一般的に当該技術ではメインメモリ204におよびメインメモリ204から効果的にシフト可能な3次元データ構造をレンダリングする典型的なグラフィックスアクセラレータを実現している。グラフィックスコントローラ208はしたがって、バスブリッジ202内のターゲットインターフェイスにアクセスを要求しアクセスを受けることができ、従ってメインメモリ204へのアクセスを得るという点において、AGPバス210のマスタである。専用グラフィックスバスが、メインメモリ204からデータを迅速に取出すことができるようにする。いくつかの動作では、グラフィックスコントローラ208がさらに、AGPバス210上でPCIプロトコルトランザクションを生成するように構成されていてもよい。バスブリッジ202のAGPインターフェイスはこのように、AGPプロトコルトランザクションならびにPCIプロトコルターゲットおよびイニシエータトランザクション双方を支援する機能を有する。ディスプレイ226は、画像またはテキストを表示できる電子表示装置である。適切なディスプレイ226は、陰極線管(「CRT」)、液晶ディスプレイ(「LCD」)などを含む。
【0123】
上記の説明ではAGP、PCI、およびISAまたはEISAバスを例として用いているが、所望に応じていかなるバスアーキテクチャに代えてもよい。さらに、コンピュータシステム200は、さらなるプロセッサ(たとえばコンピュータシステム200の任意的選択構成要素としてのプロセッサ10a)を含む多重処理コンピュータシステムでもよい。プロセッサ10aはプロセッサ10と同様のものである。より具体的には、プロセッサ10aは、プロセッサ10をそのままコピーしたものである。プロセッサ10aは独立したバス(図11に示したもの)を介してバスブリッジ202に接続されていてもよく、プロセッサ10とCPUバス224を共有していてもよい。さらに、プロセッサ10aはL2キャッシュ228と同様の任意的選択のL2キャッシュ228aに結合されていてもよい。
【0124】
次に図12を参照して、コンピュータシステム300のもう1つの実施例が示されている。これ以外の実施例が可能であり意図されている。図12に示した実施例では、コンピュータシステム300は、数個の処理ノード312A、312B、312Cおよび312Dを含む。各処理ノードは、それぞれ処理ノード312A−312D内に含まれたメモリコントローラ316A−316Dを介してメモリ314A−314D各々に結合される。加えて、処理ノード312A−312Dは、処理ノード312A−312D間の連絡に用いられるインターフェイス論理を含む。たとえば、処理ノード312Aは、処理ノード312Bとの通信のためのインターフェイス論理318A、処理ノード312Cとの通信のためのインターフェイス論理318B、および、別のさらなる処理ノード(図示せず)との通信のための第3のインターフェイス論理318Cを含む。同様に、処理ノード312Bは、インターフェイス論理318D、318Eおよび318Fを含み、処理ノード312Cは、インターフェイス論理318G、318Hおよび318Iを含み、処理ノード312Dは、インターフェイス論理318J、318Kおよび318Lを含む。処理ノード312Dは、複数の入出力装置(たとえばデイジーチェーン構成の装置320A−320B)とインターフェイス論理318Lを介して通信するよう結合されている。同様にこれ以外の処理ノードが他のI/O装置と通信してもよい。
【0125】
処理ノード312A−312Dは、処理ノード間通信のためのパケットに基づいたリンクを実現する。この実施例において、このリンクは、単方向ラインの組として実現される。(たとえばライン324Aは処理ノード312Aから処理ノード312Bにパケットを転送するために用いられ、ライン324Bは処理ノード312Bから処理ノード312Aにパケットを転送するために用いられる。)図12に示されているように、これ以外のライン324C−324Hの組を用いて他の処理ノード間でのパケットの転送を行なう。一般的に、ライン324の組各々は、1以上のデータライン、このデータラインに対応する1以上のクロックラインおよび送られているパケットの種類を示す1以上の制御ラインを含む。リンクは、処理ノード間の通信に対してはキャッシュコヒーレントの態様で動作し、または、処理ノードおよびI/O装置間の(またはバスブリッジからPCIバスまたはISAバスといった従来の構成のI/Oバスへの)通信については、非コヒーレントな態様で動作する。さらに、リンクは、図示のようなI/O装置間のデイジーチェーン構成を用いて非コヒーレントな態様で動作してもよい。なお、1つの処理ノードから別の処理ノードに転送されるパケットは、1以上の中間ノードを通過し得る。たとえば、処理ノード312Aにより処理ノード312Dに転送されるパケットは、図12に示すように、処理ノード312Bまたは処理ノード312Cを通過する。任意の適切な経路指定アルゴリズムを用いることができる。コンピュータシステム300のこれ以外の実施例では、図12に示した実施例よりも多いまたは少ない処理ノードを含み得る。
【0126】
一般的に、パケットは、ノード間のライン324上で1以上のビットタイムとして転送される。ビットタイムとは、対応するクロックライン上のクロック信号の立上がりまたは立下がりエッジである。パケットは、トランザクション開始のためのコマンドパケット、キャッシュコヒーレント維持のための探索パケット、および探索およびコマンドへの応答のための応答パケットを含み得る。
【0127】
処理ノード312A−312Dは、メモリコントローラおよびインターフェイス論理に加えて、1以上のプロセッサを含む。一般的にいえば、処理ノードは少なくとも1つのプロセッサを含み、任意として、所望に応じてメモリおよび他の論理との通信のためのメモリコントローラを含む。具体的には、処理ノード312A−321Dはプロセッサ10を含む。外部インターフェイスユニット46は、ノード内のインターフェイス論理318およびメモリコントローラ316を含む。
【0128】
メモリ314A−314Dは、適切な記憶装置を含む。たとえば、メモリ314A−314Dは、1以上のランバスDRAM(RDRAM)、同期型DRAM(SDRAM)、スタティックRAMなどを含む。コンピュータシステム300のアドレス空間は、メモリ314A−314D間で分割される。各処理ノード312A−312Dは、どのアドレスがどのメモリ314A−314Dにマッピングされているかを判断して、特定のアドレスに対するメモリ要求をどの処理ノード312A−312Dに送るかを判断するために用いるメモリマップを含む。ある実施例では、コンピュータシステム300内のアドレスに対するコヒーレントなポイントは、アドレスに対応するバイトをストアするメモリに結合されたメモリコントローラ316A−316Dである。言い換えれば、メモリコントローラ316A−316Dは、対応するメモリ314A−314Dへの各メモリアクセスが確実にキャッシュコヒーレントな態様で生じるようにする。メモリコントローラ316A−316Dは、メモリ314A−314Dへのインターフェイスのための制御回路を含む。加えて、メモリコントローラ316A−316Dは、メモリ要求を待ち行列に入れるための要求待ち行列を含む。
【0129】
一般的に、インターフェイス論理318A−318Lは、リンクからパケットを受けるためかつそのリンク上で転送されるパケットをバッファするための種々のバッファを含む。コンピュータシステム300は、パケット転送のために適切なフロー制御メカニズムを用いる。たとえば、ある実施例では、各インターフェイス論理318は、そのインターフェイス論理が接続されたリンクの他端の受信装置内のバッファの各種類の数のカウントをストアする。インターフェイス論理は、受けたインターフェイス論理にパケットをストアする空きのバッファがないのであればパケットを転送しない。受けたバッファをパケットを送出することによって空にすれば、受けたインターフェイス論理は送ったインターフェイス論理にメッセージを送信してバッファが空になっていることを知らせる。こうしたメカニズムのことを「クーポンに基づいた」システムと呼ぶ。
【0130】
I/O装置320A−320Bは、任意の適切なI/O装置である。たとえば、I/O装置320A−320Bは、ネットワークインターフェイスカード、ビデオアクセラレータ、オーディオカード、ハードまたはフロッピー(R)ディスクドライブまたはドライブコントローラ、SCSI(スモールコンピュータシステムインターフェイス)アダプタおよびテレホンカード、モデム、サウンドカード、ならびに種々のデータ取得カード(GPIBまたはフィールドバスインターフェイスカードなど)を含む。
【0131】
上記の開示を十分に理解すれば当業者には多数の変形例および修正例が明らかになるであろう。前掲の特許請求の範囲はこうした変形例および修正例すべてを含むと解釈すべきものである。
【図面の簡単な説明】
【図1】 ストア待ち行列の一実施例のブロック図である。
【図2】 プロセッサの一実施例のブロック図である。
【図3】 図2に示したデコードユニット、リザベーションステーション、機能ユニット、リオーダバッファ、ロード/ストアユニット、データキャッシュおよびバスインターフェイスユニットの一実施例を示すブロック図であり、相互接続の一実施例を強調している。
【図4】 図2および3に示したロード/ストアユニットの一実施例のブロック図である。
【図5】 ロード/ストアユニットおよびデータキャッシュの一実施例の一部のブロック図である。
【図6】 図5に示した制御回路の一部を示すブロック図である。
【図7】 一実施例に従う図4に示したLS1バッファから選択されるメモリ動作に対応するタイミング図である。
【図8】 一実施例に従う図4に示したLS2バッファから選択されるメモリ動作に対応するタイミング図である。
【図9】 図6に示した制御回路の一実施例の、ストアアドレスにヒットするロードアドレスの検出中の動作を示すフローチャートである。
【図10】 図6に示した制御回路の一実施例の、ロードアドレスがストアアドレスにヒットすることを検査する際の動作を示すフローチャートである。
【図11】 コンピュータシステムの第1の実施例のブロック図である。
【図12】 コンピュータシステムの第2の実施例のブロック図である。

Claims (24)

  1. 各々が、(i)ストアメモリ動作のストアアドレスの少なくともインデックス部と、(ii)前記ストアメモリ動作がデータキャッシュ内でヒットしているかどうかを示すヒット表示と、(iii)前記ストアメモリ動作に対応するストアデータとをストアするように構成された複数のエントリを含むバッファと、
    前記バッファに結合された回路とを含み、前記回路は、(i)前記データキャッシュを探索するロードメモリ動作のロードアドレスのインデックス部と、(ii)前記ロードメモリ動作が前記データキャッシュ内でヒットしているかどうかを示すロードヒット信号とを受けるように結合されるとともに、前記複数のエントリのうちの第1のエントリにストアされた前記インデックス部が前記ロードアドレスの前記インデックス部と一致しかつ前記第1のエントリ内の前記ヒット表示がヒットを示し、かつさらに前記ロードヒット信号がヒットを示すことに応じて、前記第1のエントリのストアデータが前記第1のエントリからフォワードされるように構成される、装置。
  2. 前記回路は、前記ロードアドレスの前記インデックス部が前記ストアアドレスの前記インデックス部と一致することに応じて、フォワード信号をアサートするように構成される、請求項1に記載の装置。
  3. 前記回路は、さらに前記ヒット表示がヒットを示すことに応じて、前記フォワード信号をアサートするように構成される、請求項2に記載の装置。
  4. 前記回路は、その後前記ロードヒット信号を受け、前記ロードヒット信号が前記ロードが前記データキャッシュ内でミスしていると示すことに応じて、フォワード取消信号をアサートするように構成される、請求項3に記載の装置。
  5. 前記複数のエントリの各々は、前記データキャッシュにおいて前記ストアメモリ動作がヒットするウェイを示すストアウェイ表示をストアするように構成される、請求項4に記載の装置。
  6. 前記回路はさらに、前記データキャッシュにおいて前記ロードメモリ動作がヒットするウェイを示すロードウェイ表示を受けるように結合されるとともに、前記第1のエントリにストアされた前記ストアウェイ表示が前記ロードウェイ表示と一致しないことに応じて前記フォワード取消信号をアサートするように構成される、請求項5に記載の装置。
  7. 前記複数のエントリの各々は、前記データキャッシュにおいて前記ストアメモリ動作がヒットするウェイを示すストアウェイ表示をストアするように構成される、請求項1に記載の装置。
  8. 前記回路はさらに、前記データキャッシュにおいて前記ロードメモリ動作がヒットするウェイを示すロードウェイ表示を受けるように結合されるとともに、さらに前記ロードウェイ表示および前記第1のエントリにストアされた前記ストアウェイ表示が一致することに応じて、前記ストアデータがフォワードされるように構成される、請求項7に記載の装置。
  9. データキャッシュと、
    前記データキャッシュに結合されたロード/ストアユニットとを含み、前記ロード/ストアユニットは、複数のエントリを含むバッファを含み、前記複数のエントリは各々、(i)ストアメモリ動作のストアアドレスの少なくともインデックス部と、(ii)前記ストアメモリ動作が前記データキャッシュ内でヒットしているかどうかを示すヒット表示と、(iii)前記ストアメモリ動作に対応するストアデータとをストアするように構成され、
    前記ロード/ストアユニットは、前記データキャッシュをロードアドレスを用いて探索し、それに応じて前記データキャッシュからヒット信号を受けるように構成されるとともに、前記ロードアドレスのインデックス部が前記複数のエントリの第1のエントリにストアされた前記インデックス部と一致していることに応じてかつさらに前記第1のエントリ内の前記ヒット表示がヒットを示し前記ヒット信号がヒットを示すことに応じて、ストアデータを、前記第1のエントリからフォワードすると決定するように構成される、プロセッサ。
  10. 前記ロード/ストアユニットは、前記データキャッシュに対しフォワードデータ信号をアサートするように構成され、前記データキャッシュは、前記ストアデータを前記データキャッシュから読出したキャッシュデータの代わりにフォワードするように構成される、請求項9に記載のプロセッサ。
  11. 前記ロード/ストアユニットは、前記ロードアドレスの前記インデックス部が前記第1のエントリにストアされたインデックス部と一致することに応じて、前記フォワードデータ信号をアサートするように構成される、請求項10に記載のプロセッサ。
  12. 前記ロード/ストアユニットは、さらに前記第1のエントリ内の前記ヒット表示がヒットを示すことに応じて前記フォワードデータ信号をアサートするように構成される、請求項11に記載のプロセッサ。
  13. 前記ロード/ストアユニットは、前記ヒット信号がミスを示すことに応じてフォワード取消信号をアサートするように構成される、請求項12に記載のプロセッサ。
  14. 前記フォワード取消信号を受けるように結合された1以上のリザベーションステーションをさらに含み、前記1以上のリザベーションステーションは、前記フォワード取消信号に応じて前記ロードのためにフォワードされた前記ストアデータを無効にするように構成される、請求項13に記載のプロセッサ。
  15. 前記複数のエントリの各々は、前記データキャッシュにおいて前記ストアメモリ動作がヒットするウェイを示すストアウェイ表示をストアするように構成される、請求項13に記載のプロセッサ。
  16. 前記データキャッシュは、前記データキャッシュにおいて前記ロードメモリ動作がヒットするウェイを示すロードウェイ表示を前記ロード/ストアユニットに与えるように構成され、前記ロード/ストアユニットは、前記第1のエントリ内の前記ストアウェイ表示が前記ロードウェイ表示と一致しないことに応じて前記フォワード取消信号をアサートするように構成される、請求項15に記載のプロセッサ。
  17. 前記複数のエントリの各々は、前記データキャッシュにおいて前記ストアメモリ動作がヒットするウェイを示すストアウェイ表示をストアするように構成される、請求項9に記載のプロセッサ。
  18. 前記データキャッシュは、前記データキャッシュにおいて前記ロードメモリ動作がヒットするウェイを示すロードウェイ表示を前記ロード/ストアユニットに与えるように構成され、前記ロード/ストアユニットは、さらに前記第1のエントリにストアされた前記ストアウェイ表示が前記ロードウェイ表示と一致することに応じて、ストアデータを前記第1のエントリからフォワードすると決定するように構成される、請求項17に記載のプロセッサ。
  19. 方法であって、
    データキャッシュをロードアドレスを用いて探索するステップと、
    前記ロードアドレスのインデックス部をバッファにストアされたストアアドレスのインデックス部と比較するステップと、
    前記ストアアドレスに対応するストアデータを、前記ロードアドレスに対応するロードメモリ動作のためにフォワードするステップとを含み、前記フォワードするステップは、前記比較により前記ロードアドレスの前記インデックス部が前記ストアアドレスの前記インデックス部と一致していると判断されたことに応じてかつさらに前記ロードアドレスおよび前記ストアアドレス双方がデータキャッシュ内でヒットしていることに応じて行なわれる、方法。
  20. 前記フォワードするステップは、前記比較により前記ロードアドレスの前記インデックス部が前記ストアアドレスの前記インデックス部と一致していると判断されたことに応じて、フォワードデータ信号をアサートするステップを含む、請求項19に記載の方法。
  21. 前記アサートするステップは、さらに前記ストアアドレスが前記データキャッシュにおいてヒットしていることに応じて行なわれる、請求項20に記載の方法。
  22. 前記フォワードするステップはさらに、前記ロードアドレスが前記データキャッシュ内でミスしていることに応じてフォワード取消信号をアサートするステップを含む、請求項21に記載の方法。
  23. 前記方法はさらに、前記バッファにストアされたストアウェイ表示を前記ロードアドレスに対応するロードウェイ表示と比較するステップを含み、前記ストアウェイ表示は、前記データキャッシュにおいて前記ストアアドレスがヒットするウェイを示し、前記ロードウェイ表示は、前記データキャッシュにおいて前記ロードアドレスがヒットするウェイを示し、前記方法はさらに、前記比較によりストアウェイ表示が一致しないと判断されたことに応じて、前記フォワード取消信号をアサートするステップを含む、請求項22に記載の方法。
  24. 前記方法はさらに、前記バッファにストアされたストアウェイ表示を前記ロードアドレスに対応するロードウェイ表示と比較するステップを含み、前記ストアウェイ表示は、前記データキャッシュにおいて前記ストアアドレスがヒットするウェイを示し、前記ロードウェイ表示は、前記データキャッシュにおいて前記ロードアドレスがヒットするウェイを示し、前記方法はさらに、さらに前記比較によりストアウェイ表示が一致すると判断されたことに応じて、前記ストアデータをフォワードするステップを含む、請求項19に記載の方法。
JP2001536680A 1999-11-10 2000-04-20 インデックスおよび任意選択的ウェイ一致に基づいてデータをフォワードするストアバッファ Expired - Lifetime JP4699666B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US16452699P 1999-11-10 1999-11-10
US60/164,526 1999-11-10
US09/482,399 2000-01-12
US09/482,399 US6662280B1 (en) 1999-11-10 2000-01-12 Store buffer which forwards data based on index and optional way match
PCT/US2000/010961 WO2001035212A1 (en) 1999-11-10 2000-04-20 Store buffer which forwards data based on index and optional way match

Publications (3)

Publication Number Publication Date
JP2003514299A JP2003514299A (ja) 2003-04-15
JP2003514299A5 JP2003514299A5 (ja) 2011-02-24
JP4699666B2 true JP4699666B2 (ja) 2011-06-15

Family

ID=26860645

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001536680A Expired - Lifetime JP4699666B2 (ja) 1999-11-10 2000-04-20 インデックスおよび任意選択的ウェイ一致に基づいてデータをフォワードするストアバッファ

Country Status (7)

Country Link
US (1) US6662280B1 (ja)
EP (1) EP1228426B1 (ja)
JP (1) JP4699666B2 (ja)
KR (1) KR100708010B1 (ja)
DE (1) DE60025028T2 (ja)
TW (1) TW548548B (ja)
WO (1) WO2001035212A1 (ja)

Families Citing this family (60)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7065632B1 (en) * 2000-04-07 2006-06-20 Ip First Llc Method and apparatus for speculatively forwarding storehit data in a hierarchical manner
JP3727244B2 (ja) * 2001-01-30 2005-12-14 Necエレクトロニクス株式会社 キャッシュシステムの制御回路
US6735604B2 (en) * 2001-10-09 2004-05-11 Arthur O. Miller Method for storing and retrieving data objects
US6845233B2 (en) * 2001-10-09 2005-01-18 Freescale Semiconductor, Inc. RF receivers with reduced spurious response for mobile stations and methods therefor
US6842822B2 (en) * 2002-04-05 2005-01-11 Freescale Semiconductor, Inc. System and method for cache external writing
US6845442B1 (en) 2002-04-30 2005-01-18 Advanced Micro Devices, Inc. System and method of using speculative operand sources in order to speculatively bypass load-store operations
US7222226B1 (en) 2002-04-30 2007-05-22 Advanced Micro Devices, Inc. System and method for modifying a load operation to include a register-to-register move operation in order to forward speculative load results to a dependent operation
US7028166B2 (en) * 2002-04-30 2006-04-11 Advanced Micro Devices, Inc. System and method for linking speculative results of load operations to register values
US7114043B2 (en) * 2002-05-15 2006-09-26 Broadcom Corporation Ambiguous virtual channels
US7471675B2 (en) * 2002-07-12 2008-12-30 Intel Corporation Arrangements facilitating ordered transactions
US7089400B1 (en) 2002-08-29 2006-08-08 Advanced Micro Devices, Inc. Data speculation based on stack-relative addressing patterns
US7024537B2 (en) * 2003-01-21 2006-04-04 Advanced Micro Devices, Inc. Data speculation based on addressing patterns identifying dual-purpose register
US7321964B2 (en) 2003-07-08 2008-01-22 Advanced Micro Devices, Inc. Store-to-load forwarding buffer using indexed lookup
US7181590B2 (en) * 2003-08-28 2007-02-20 Intel Corporation Method for page sharing in a processor with multiple threads and pre-validated caches
EP1719290A1 (en) * 2004-02-27 2006-11-08 Actix Limited Data storage and processing systems
US7937569B1 (en) 2004-05-05 2011-05-03 Advanced Micro Devices, Inc. System and method for scheduling operations using speculative data operands
US7263600B2 (en) * 2004-05-05 2007-08-28 Advanced Micro Devices, Inc. System and method for validating a memory file that links speculative results of load operations to register values
US8775740B2 (en) * 2004-08-30 2014-07-08 Texas Instruments Incorporated System and method for high performance, power efficient store buffer forwarding
US7464242B2 (en) * 2005-02-03 2008-12-09 International Business Machines Corporation Method of load/store dependencies detection with dynamically changing address length
US7533236B1 (en) * 2006-05-11 2009-05-12 Nvidia Corporation Off-chip out of order memory allocation for a unified shader
US7533237B1 (en) 2006-05-11 2009-05-12 Nvidia Corporation Off-chip memory allocation for a unified shader
US7600097B1 (en) * 2006-09-05 2009-10-06 Sun Microsystems, Inc. Detecting raw hazards in an object-addressed memory hierarchy by comparing an object identifier and offset for a load instruction to object identifiers and offsets in a store queue
US7603527B2 (en) * 2006-09-29 2009-10-13 Intel Corporation Resolving false dependencies of speculative load instructions
US7594100B2 (en) * 2006-09-29 2009-09-22 Sun Microsystems, Inc. Efficient store queue architecture
US7721066B2 (en) * 2007-06-05 2010-05-18 Apple Inc. Efficient encoding for detecting load dependency on store with misalignment
US8468306B2 (en) * 2008-02-15 2013-06-18 International Business Machines Corporation Microprocessor and method for deferred store data forwarding for store background data in a system with no memory model restrictions
US8214602B2 (en) * 2008-06-23 2012-07-03 Advanced Micro Devices, Inc. Efficient load queue snooping
US8521992B2 (en) * 2009-12-22 2013-08-27 International Business Machines Corporation Predicting and avoiding operand-store-compare hazards in out-of-order microprocessors
US8468325B2 (en) 2009-12-22 2013-06-18 International Business Machines Corporation Predicting and avoiding operand-store-compare hazards in out-of-order microprocessors
US8601240B2 (en) * 2010-05-04 2013-12-03 Oracle International Corporation Selectively defering load instructions after encountering a store instruction with an unknown destination address during speculative execution
US8626963B2 (en) 2010-05-04 2014-01-07 Mediatek Inc. Packet based data transfer system and method for host-slave interface
US8904153B2 (en) * 2010-09-07 2014-12-02 International Business Machines Corporation Vector loads with multiple vector elements from a same cache line in a scattered load operation
US20120144118A1 (en) * 2010-12-07 2012-06-07 Advanced Micro Devices, Inc. Method and apparatus for selectively performing explicit and implicit data line reads on an individual sub-cache basis
US9152570B2 (en) * 2012-02-27 2015-10-06 Vmware, Inc. System and method for supporting finer-grained copy-on-write page sizes
US9996348B2 (en) * 2012-06-14 2018-06-12 Apple Inc. Zero cycle load
US8984254B2 (en) * 2012-09-28 2015-03-17 Freescale Semiconductor, Inc. Techniques for utilizing translation lookaside buffer entry numbers to improve processor performance
US9116817B2 (en) * 2013-05-09 2015-08-25 Apple Inc. Pointer chasing prediction
US9632947B2 (en) * 2013-08-19 2017-04-25 Intel Corporation Systems and methods for acquiring data for loads at different access times from hierarchical sources using a load queue as a temporary storage buffer and completing the load early
GB2521227B (en) * 2013-12-16 2020-11-25 Advanced Risc Mach Ltd Invalidation of index items for a temporary data store
US9418018B2 (en) 2013-12-31 2016-08-16 Samsung Electronics Co., Ltd. Efficient fill-buffer data forwarding supporting high frequencies
JP6340894B2 (ja) * 2014-04-24 2018-06-13 富士通株式会社 演算処理装置および演算処理装置の制御方法
US9710268B2 (en) 2014-04-29 2017-07-18 Apple Inc. Reducing latency for pointer chasing loads
US11068271B2 (en) 2014-07-28 2021-07-20 Apple Inc. Zero cycle move using free list counts
US9483409B2 (en) 2015-02-05 2016-11-01 International Business Machines Corporation Store forwarding cache
US9996356B2 (en) * 2015-12-26 2018-06-12 Intel Corporation Method and apparatus for recovering from bad store-to-load forwarding in an out-of-order processor
CN111831337B (zh) 2019-04-19 2022-11-29 安徽寒武纪信息科技有限公司 数据同步方法及装置以及相关产品
JP7073580B2 (ja) * 2019-04-04 2022-05-23 中科寒武紀科技股▲分▼有限公司 データ処理方法、装置、及び関連製品
CN111782577B (zh) 2019-04-04 2023-03-24 安徽寒武纪信息科技有限公司 数据处理装置及方法以及相关产品
TWI714116B (zh) * 2019-06-05 2020-12-21 大陸商合肥沛睿微電子股份有限公司 記憶體控制器、記憶體控制方法、以及電腦系統
US11200062B2 (en) 2019-08-26 2021-12-14 Apple Inc. History file for previous register mapping storage and last reference indication
US11416254B2 (en) 2019-12-05 2022-08-16 Apple Inc. Zero cycle load bypass in a decode group
US11416400B1 (en) 2021-05-07 2022-08-16 Ventana Micro Systems Inc. Hardware cache coherency using physical address proxies
US11868263B2 (en) 2021-05-07 2024-01-09 Ventana Micro Systems Inc. Using physical address proxies to handle synonyms when writing store data to a virtually-indexed cache
US11416406B1 (en) 2021-05-07 2022-08-16 Ventana Micro Systems Inc. Store-to-load forwarding using physical address proxies stored in store queue entries
US11841802B2 (en) 2021-05-07 2023-12-12 Ventana Micro Systems Inc. Microprocessor that prevents same address load-load ordering violations
US11481332B1 (en) 2021-05-07 2022-10-25 Ventana Micro Systems Inc. Write combining using physical address proxies stored in a write combine buffer
US11860794B2 (en) 2021-05-07 2024-01-02 Ventana Micro Systems Inc. Generational physical address proxies
US11397686B1 (en) * 2021-05-07 2022-07-26 Ventana Micro Systems Inc. Store-to-load forwarding using physical address proxies to identify candidate set of store queue entries
US11836080B2 (en) 2021-05-07 2023-12-05 Ventana Micro Systems Inc. Physical address proxy (PAP) residency determination for reduction of PAP reuse
TW202331504A (zh) * 2021-12-21 2023-08-01 美商賽發馥股份有限公司 處理器管線之儲存-載入轉送

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998002804A1 (en) * 1996-07-16 1998-01-22 Advanced Micro Devices, Inc. Load/store unit and method for non-blocking completion of loads in a superscalar microprocessor
US6065103A (en) * 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5276828A (en) 1989-03-01 1994-01-04 Digital Equipment Corporation Methods of maintaining cache coherence and processor synchronization in a multiprocessor system using send and receive instructions
US5487156A (en) 1989-12-15 1996-01-23 Popescu; Valeri Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched
JP2645163B2 (ja) * 1990-03-13 1997-08-25 三菱電機株式会社 非接触型icカード
US5440752A (en) 1991-07-08 1995-08-08 Seiko Epson Corporation Microprocessor architecture with a switch network for data transfer between cache, memory port, and IOU
JP3199465B2 (ja) 1992-07-22 2001-08-20 株式会社日立製作所 情報処理装置
DE69329778T2 (de) 1992-09-29 2001-04-26 Seiko Epson Corp System und verfahren zur handhabung von laden und/oder speichern in einem superskalar mikroprozessor
IE80854B1 (en) 1993-08-26 1999-04-07 Intel Corp Processor ordering consistency for a processor performing out-of-order instruction execution
US5878245A (en) 1993-10-29 1999-03-02 Advanced Micro Devices, Inc. High performance load/store functional unit and data cache
US5666537A (en) * 1994-08-12 1997-09-09 Intel Corporation Power down scheme for idle processor components
US6216200B1 (en) 1994-10-14 2001-04-10 Mips Technologies, Inc. Address queue
US5832297A (en) 1995-04-12 1998-11-03 Advanced Micro Devices, Inc. Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations
US5887152A (en) 1995-04-12 1999-03-23 Advanced Micro Devices, Inc. Load/store unit with multiple oldest outstanding instruction pointers for completing store and load/store miss instructions
US5848433A (en) * 1995-04-12 1998-12-08 Advanced Micro Devices Way prediction unit and a method for operating the same
US5802588A (en) 1995-04-12 1998-09-01 Advanced Micro Devices, Inc. Load/store unit implementing non-blocking loads for a superscalar microprocessor and method of selecting loads in a non-blocking fashion from a load/store buffer
US5625835A (en) 1995-05-10 1997-04-29 International Business Machines Corporation Method and apparatus for reordering memory operations in a superscalar or very long instruction word processor
US5761712A (en) 1995-06-07 1998-06-02 Advanced Micro Devices Data memory unit and method for storing data into a lockable cache in one clock cycle by previewing the tag array
US5652859A (en) 1995-08-17 1997-07-29 Institute For The Development Of Emerging Architectures, L.L.C. Method and apparatus for handling snoops in multiprocessor caches having internal buffer queues
US5987561A (en) * 1995-08-31 1999-11-16 Advanced Micro Devices, Inc. Superscalar microprocessor employing a data cache capable of performing store accesses in a single clock cycle
US5751983A (en) 1995-10-03 1998-05-12 Abramson; Jeffrey M. Out-of-order processor with a memory subsystem which handles speculatively dispatched load operations
US5781790A (en) 1995-12-29 1998-07-14 Intel Corporation Method and apparatus for performing floating point to integer transfers and vice versa
US5742791A (en) 1996-02-14 1998-04-21 Advanced Micro Devices, Inc. Apparatus for detecting updates to instructions which are within an instruction processing pipeline of a microprocessor
US5768555A (en) 1997-02-20 1998-06-16 Advanced Micro Devices, Inc. Reorder buffer employing last in buffer and last in line bits
US6021485A (en) 1997-04-10 2000-02-01 International Business Machines Corporation Forwarding store instruction result to load instruction with reduced stall or flushing by effective/real data address bytes matching
US6266744B1 (en) * 1999-05-18 2001-07-24 Advanced Micro Devices, Inc. Store to load forwarding using a dependency link file
FR2804819B1 (fr) * 2000-02-03 2002-05-03 Gemplus Card Int Gestion de temps au niveau communication pour entite du type carte a puce
JP2001266094A (ja) * 2000-03-15 2001-09-28 Toshiba Corp 非接触通信装置及び非接触通信装置の制御方法
US20020166075A1 (en) * 2001-05-04 2002-11-07 Sanjay Agarwal Low power interface between a control processor and a digital signal processing coprocessor

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998002804A1 (en) * 1996-07-16 1998-01-22 Advanced Micro Devices, Inc. Load/store unit and method for non-blocking completion of loads in a superscalar microprocessor
US6065103A (en) * 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer

Also Published As

Publication number Publication date
DE60025028D1 (de) 2006-01-26
US6662280B1 (en) 2003-12-09
DE60025028T2 (de) 2006-08-24
EP1228426A1 (en) 2002-08-07
TW548548B (en) 2003-08-21
KR100708010B1 (ko) 2007-04-16
EP1228426B1 (en) 2005-12-21
KR20020087929A (ko) 2002-11-23
WO2001035212A1 (en) 2001-05-17
JP2003514299A (ja) 2003-04-15

Similar Documents

Publication Publication Date Title
JP4699666B2 (ja) インデックスおよび任意選択的ウェイ一致に基づいてデータをフォワードするストアバッファ
JP2003514299A5 (ja)
US6622237B1 (en) Store to load forward predictor training using delta tag
US6651161B1 (en) Store load forward predictor untraining
US7213126B1 (en) Method and processor including logic for storing traces within a trace cache
US6393536B1 (en) Load/store unit employing last-in-buffer indication for rapid load-hit-store
US6523109B1 (en) Store queue multimatch detection
US6151662A (en) Data transaction typing for improved caching and prefetching characteristics
US5944815A (en) Microprocessor configured to execute a prefetch instruction including an access count field defining an expected number of access
KR100880686B1 (ko) 2개 레벨의 분기 예측 캐시를 갖는 분기 예측
US6694424B1 (en) Store load forward predictor training
US6481251B1 (en) Store queue number assignment and tracking
KR100747128B1 (ko) 발행 후에 명령의 비투기적 성질을 발견하고 상기 명령을 재발행하는 스케줄러
US6427192B1 (en) Method and apparatus for caching victimized branch predictions
US20070050592A1 (en) Method and apparatus for accessing misaligned data streams
US6564315B1 (en) Scheduler which discovers non-speculative nature of an instruction after issuing and reissues the instruction
JP2004503870A (ja) 変換索引バッファのフラッシュフィルタ
US6542986B1 (en) Resolving dependencies among concurrently dispatched instructions in a superscalar microprocessor
US20070033385A1 (en) Call return stack way prediction repair
US20030074530A1 (en) Load/store unit with fast memory data access mechanism
US6453387B1 (en) Fully associative translation lookaside buffer (TLB) including a least recently used (LRU) stack and implementing an LRU replacement strategy
US6363471B1 (en) Mechanism for handling 16-bit addressing in a processor
US6704854B1 (en) Determination of execution resource allocation based on concurrently executable misaligned memory operations
US7321964B2 (en) Store-to-load forwarding buffer using indexed lookup
US7555633B1 (en) Instruction cache prefetch based on trace cache eviction

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070405

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070405

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100518

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100727

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100928

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101221

A524 Written submission of copy of amendment under article 19 pct

Free format text: JAPANESE INTERMEDIATE CODE: A524

Effective date: 20101221

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110208

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110303

R150 Certificate of patent or registration of utility model

Ref document number: 4699666

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term