(57)【特許請求の範囲】
【請求項１】
ダイレクト・マッピングされるキャッシュを備えたシステムにて、メモリ・アドレスの内容に対するLOAD命令を処理する方法において、
LOAD命令をデコーダによりデコードする工程と、
前記デコード済みのLOAD命令をディスパッチする工程と、
前記ディスパッチされたデコード済みのLOAD命令を提供する工程とを備え、前記LOAD命令を提供する工程は、
前記ディスパッチされたデコード済みのLOAD命令がロード・バッファの先頭に届いた将来のある時期に、メモリ・アドレスの内容がダイレクト・マッピングされたキャッシュ内に存在しているか否かを演算する演算工程であって、該演算工程と将来のある時期との間の期間に１つ以上の古いLOAD命令がダイレクト・マッピングされたキャッシュを変更する可能性がある、前記演算工程と、
前記ロード・バッファ内のメモリ・アドレスの内容に対するLOAD命令の待ち行列を形成する待ち行列形成工程と、
全ての古いLOAD命令が処理されるまで待機する待機工程と、
全ての古いLOAD命令が処理されたことに応答して、演算工程により、メモリ・アドレスの内容がダイレクト・マッピングされたキャッシュ内に存在すると確定される場合、メモリ・アドレスの内容を検索するためにダイレクト・マッピングされたキャッシュにアクセスするアクセス工程とを含む、LOAD命令を処理する方法。
【請求項２】
ダイレクト・マッピングされたキャッシュはタグ・アレイ及びデータ・アレイを有し、演算工程の前に、
メモリ・アドレスはタグの記憶位置へダイレクト・マッピングされ、タグ・アレイ内のタグの記憶位置からタグを検索する検索工程と、
検索工程が行われる時に、メモリ・アドレスの内容がダイレクト・マッピングされたキャッシュ内に存在するか否かを確定する確定工程とを更に有する請求項１に記載のLOAD命令を処理する方法。
【請求項３】
アクセス工程は検索工程を繰り返すことなく行われる請求項２に記載のLOAD命令を処理する方法。
【請求項４】
タグ・アレイはランダム・アクセス・メモリである請求項２に記載のLOAD命令を処理する方法。
【請求項５】
タグ・アレイは２重ポートを有する請求項４に記載のLOAD命令を処理する方法。
【請求項６】
データ・アレイはランダム・アクセス・メモリである請求項２に記載のLOAD命令を処理する方法。
【請求項７】
キャッシュ、第２メモリ・システム及びロード・バッファを有するシステムにおいて、ロード・バッファは、LOAD命令が要求に従いキャッシュ又は第２メモリ・システムの何れかへのアクセスを待つ間に、LOAD命令を保持する先入れ先出しの待ち行列であり、ロード・バッファは待ち行列位置の先頭を有し、キャッシュへのアクセスは第１待ち時間を伴って起こり、第２メモリ・システムへのアクセスは第１待ち時間よりも長い第２待ち時間を伴って起きるLOAD命令をサービスする方法において、
第１LOAD命令が前記待ち行列位置の先頭に届いたときに、第１LOAD命令により要求されたデータがキャッシュ内にない時、第１LOAD命令に対する前記第２メモリ・システムにアクセスするアクセス工程と、
第１LOAD命令が前記待ち行列位置の先頭に届いたときに、第１LOAD命令により要求されたデータがキャッシュ内にある時、第１LOAD命令に対する前記キャッシュをアクセスするアクセス工程と、
第１LOAD命令が前記待ち行列位置の先頭にあり、かつ第１LOAD命令が前記キャッシュをアクセスしている時、待ち行列の先頭にまだ位置していない第２LOAD命令に対する前記第２メモリ・システムにアクセスするアクセス工程と、を有し、前記キャッシュ及び前記第２メモリ・システムはそれぞれ第１及び第２LOAD命令により同時にアクセスされ、全てのLOAD命令はロード・バッファ内の順序と同一の順序で実行される、LOAD命令をサービスする方法。
【請求項８】
第２メモリ・システムは２次キャッシュである請求項７に記載のLOAD命令をサービスする方法。
【請求項９】
キャッシュは仮想的に指標付けされるとともに、物理的にタグ付けされる請求項８に記載のLOAD命令をサービスする方法。
【請求項１０】
２次キャッシュは物理的に指標付けされ、物理的にタグ付けされる請求項９に記載のLOAD命令をサービスする方法。
【請求項１１】
ダイレクト・マッピングされるキャッシュを備えたシステムにて、メモリ・アドレスの内容に対してLOAD命令を処理する装置において、
命令ストリームからLOAD命令をデコードするデコーダ回路と、
デコード済みのLOAD命令をディスパッチするディスパッチ回路と、
ディスパッチされたデコード済みのLOAD命令を提供する提供回路とを備え、該提供回路は、
前記ディスパッチされたデコード済みのLOAD命令がロード・バッファの先頭に届いた将来のある時期に、メモリ・アドレスの内容がダイレクト・マッピングされたキャッシュ内に存在するか否かを演算するための演算回路であって、該演算回路の演算と将来のある時期との間の期間に１つ以上の古いLOAD命令がダイレクト・マッピングされたキャッシュを変更する可能性がある、前記演算回路と、
ロード・バッファ内のメモリ・アドレスの内容に対するLOAD命令の待ち行列を形成するための待ち行列形成回路と、全ての古いLOAD命令が処理されるまで待機させるための待機回路と、
メモリ・アドレスの内容がダイレクト・マッピングされたキャッシュ内に存在すると演算回路が確定した場合、メモリ・アドレスの内容を検索するために、全ての古いLOAD命令が処理された後、ダイレクト・マッピングされたキャッシュにアクセスするアクセス回路とを含む、LOAD命令を処理する装置。
【請求項１２】
ダイレクト・マッピングされたキャッシュはタグ・アレイ及びデータ・アレイを有し、メモリ・アドレスがタグの記憶位置へダイレクト・マッピングする、タグ・アレイ内のタグの記憶位置からタグを検索するための検索回路と、
検索回路が検索を行う時に、メモリ・アドレスの内容がダイレクト・マッピングされたキャッシュ内に存在するか否かを確定する確定回路とを有する請求項１１に記載のLOAD命令を処理する装置。
【請求項１３】
アクセス回路及び検索回路は、それぞれダイレクト・マッピングされたキャッシュのアクセスとタグの検索を同時に行わない請求項１２に記載のLOAD命令を処理する装置。
【請求項１４】
タグ・アレイはランダム・アクセス・メモリである請求項１２に記載のLOAD命令を処理する装置。
【請求項１５】
タグ・アレイは２重ポートを有する請求項１４に記載のLOAD命令を処理する装置。
【請求項１６】
データ・アレイはランダム・アクセス・メモリである請求項１２に記載のLOAD命令を処理する装置。
【請求項１７】
キャッシュ、第２メモリ・システム及びロード・バッファを有するシステムにおいて、ロード・バッファは、LOAD命令が要求に従いキャッシュ又は第２メモリ・システムの何れかへのアクセスを待つ間に、LOAD命令を保持する先入れ先出しの待ち行列であり、ロード・バッファは待ち行列位置の先頭を有し、キャッシュへのアクセスは第１待ち時間を伴って起こり、第２メモリ・システムへのアクセスは第１待ち時間よりも長い第２待ち時間を伴って起きるLOAD命令をサービスする装置において、
第１LOAD命令により要求されたデータがキャッシュ内にない時、待ち行列位置の先頭にある第１LOAD命令に対する第２メモリ・システムにアクセスするための第１アクセス回路と、
第１LOAD命令により要求されたデータがキャッシュ内にある時、待ち行列位置の先頭にある第１LOAD命令に対するキャッシュをアクセスするための第２アクセス回路と、
第１LOAD命令が待ち行列位置の先頭にあり、かつ第１LOAD命令がキャッシュをアクセスしている時、待ち行列位置の先頭にまだない第２LOAD命令に対する第２メモリ・システムにアクセスするための第３アクセス回路と、を有し、キャッシュ及び第２メモリ・システムはそれぞれ第１及び第２LOAD命令により同時にアクセスされ、全てのLOAD命令はロード・バッファ内の順序と同一の順序で実行されるLOAD命令をサービスする装置。
【請求項１８】
第２メモリ・システムは２次キャッシュである請求項１７に記載のLOAD命令をサービスする装置。
【請求項１９】
キャッシュは仮想的に指標付けされ、物理的にタグ付けされる請求項１８に記載のLOAD命令をサービスする装置。
【請求項２０】
２次キャッシュは物理的に指標付けされ、物理的にタグ付けされる請求項１９に記載のLOAD命令をサービスする装置。
【請求項２１】
第１LOAD命令が待ち行列の先頭に存在する前に、第１LOAD命令が待ち行列の先頭に届いたときに、第１LOAD命令により要求されたデータがキャッシュ内に存在しているか否かを演算する演算工程を更に備え、
第１LOAD命令に対する前記キャッシュをアクセスするアクセス工程は、前記演算工程において、第１LOAD命令が待ち行列の先頭に届いたときに、第１LOAD命令により要求されたデータがキャッシュ内に存在していると判断された場合に行われる、請求項７に記載のLOAD命令をサービスする方法。
【請求項２２】
第１LOAD命令が待ち行列の先頭に存在する前に、第１LOAD命令が待ち行列の先頭に届いたときに、第１LOAD命令により参照されたメモリ・アドレスの内容がキャッシュ内に存在しているか否かを演算する演算回路を更に備え、
前記第２アクセス回路は、前記演算回路が、第１LOAD命令が待ち行列の先頭に届いたときに、第１LOAD命令により要求されたデータがキャッシュ内に存在していると判断した場合に第１LOAD命令に対するキャッシュにアクセスする、請求項１７に記載のLOAD命令をサービスする装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプロセッサのロード／ストア・ユニットに係わる。詳しくは、ロード・バッファ及びキャッシュの維持管理に関する。
【０００２】
【従来の技術】
RISCとは縮小命令セット・コンピュータのことをいう。通常、RISCプロセッサは従来のCISC（複合命令セット・コンピュータ）プロセッサよりも命令数が少ない。使用命令数が少ないため、RISC技術を用いることにより、RISCプロセッサのコンパイラを書き込むタスクが少なくともある程度、簡略化される。更に、最大動作周波数を制限する使用頻度の低い複雑な命令よりも、むしろ使用頻度の高い重要な命令を実行し、かつ最適化することについて焦点を当ててプロセッサのデザインを行うことができる。こうした理由及びその他の理由により、ワーク・ステーション、更には末端のコンピュータ製造業者の間ではRISCプロセッサが好評である。
【０００３】
一般的に、RISCプロセッサではメモリに実際にアクセスする命令は非常に少ない。実際に実現されたものでは、メモリにアクセスするLOAD及びSTORE という２つの命令のみを有するものがある。通常、並行処理により同期及びメモリ更新を行うプロセッサによって、多少特殊な「アトミック」（"atomic"）オペレーションが支援される。ピーティーアール・プレンティス・ホール社（PTR Prentice Hall ）発行、スパーク・インターナショナル社（SPARC International, Inc. ）、ディー．エル．ウィーバー（D. L. Weaver）及びティー．ガーモンド（T. Germond）編、「スパーク  アーキテクチャ説明書  バージョン９（The SPARC Architecture Manual, Version 9）」、１９９４年、第１７頁を参照されたい。このような場合であっても、LOAD及びSTORは最も使用頻度の高いメモリ・アクセス命令である。LOAD命令を実行することにより、プロセッサのレジスタにはメイン・メモリ・アドレスに存在するデータが書き込まれる。STORE 命令を実行することにより、メイン・メモリ・アドレスにはプロセッサのレジスタに存在するデータが書き込まれる。従って、LOAD及びSTORE 命令はオペランドとしてレジスタ（１つ又は複数個）及び１つのメモリ・アドレスを指定する必要がある。幾つかの装置では、メモリ・アドレスを演算するために２つ若しくは１つのレジスタ及び１つの即値が用いられているものがある。多くの装置では、１つの命令を用いて１ワード以上のデータを転送する数種類のLOAD及びSTORE を備えるため、２つ以上のソース・レジスタ又は宛先レジスタが存在することがある。また、これらのソース・レジスタ又は宛先レジスタはそれぞれSTORE 命令又はLOAD命令においてオペランドとして指定される。
【０００４】
図１はスーパースカラ・プロセッサ１２を示す。スーパースカラ・プロセッサ１２はいくつかの並行機能ユニット１０，１１を有している。通常のスーパースカラ装置では浮動小数点、整数、分岐及びロード／ストアの機能ユニットを備えている。従って、４つの命令まで並行して実行することができる。また、大部分のスーパースカラ・プロセッサは、少なくともある程度はパイプライン化されている。パイプライン化により命令はステージ内にて処理されるため、１つの命令の処理が完了するまでに数クロック・サイクルを要する。しかしながら、パイプライン化されたプロセッサのアーキテクチャでは、各ステージにて命令を常に処理しているため、複数の命令を同時に処理することができる。
【０００５】
図２は、ロード／ストア・ユニット１０の概略を示すブロック図である。ロード／ストア機能ユニット１０の総処理量を最大にすべく、ロード・バッファ２０が設けられている。そのため、即座にサービスされることのないLOADであっても、ディスパッチされ得る。また、LOADはプロセッサ１２の演算を停止させることなく、サービス待ち可能である。ロード・バッファ２０は先入れ先出し（FIFO）待ち行列であり、LOADのソース・メモリ及び宛先レジスタを保持している。LOADの待ち行列を保持することにより、現在のLOADの演算が完了後、即座に別のLOADの演算を行えることから、LOAD及びSTORE 命令が用いるメモリ資源の利用が最大化される。
【０００６】
キャッシングは、多層メモリ・システムを用いて参照する記憶位置を利用するための一般的な技術である。基本的な考えは少量の高速アクセス・メモリと、多量の低速アクセス・メモリとを編成することにより、ほとんどのアクセスが少量の高速メモリに対して行われる。そのようなメモリ・システムの平均アクセス時間は、少量の高速メモリの有効記憶容量が多量のメモリのそれと同一であるものよりも僅かに優れている。
【０００７】
多層メモリ・システムの一般的な形態はキャッシュ・メモリ、即ち索引バッファ・メモリである。キャッシュ・メモリはプロセッサ１２とメイン・メモリとの間に配置された比較的小さな特殊メモリ装置である。キャッシュ・メモリは、プロセッサ１２によってアクセスされそうなメモリからコピーされたワードを保持している。キャッシュはメイン・メモリより高速であるため、アクセス頻度の高い記憶位置がキャッシュ内で見つかれば、ヒット率が高くなるとともに、メモリ・アクセスの平均時間は短くなる。キャッシュにより実行される方法は、プロセッサによって最近使用された他のワードの近くに位置するところのワードを保持することである。この方法により利用される局所参照とは、短時間のうちにメモリの小さな領域に群れをなすようにアクセスするメモリ・アクセスの傾向をいう。
【０００８】
キャッシュの記憶位置は冗長である。それは各記憶位置がより低速のメイン・メモリにも格納された情報のコピーに対して、更にアクセスし易くするように用いられるという意味からである。このため、キャッシュの存在によりアドレス可能な全記憶容量は、プログラマが見てとれるように増加するわけではない。むしろ、平易なプログラム方法において、キャッシュは同一のアドレス空間内に存在する記憶位置への平均アクセス時間を改善する。
【０００９】
キャッシュはメイン・メモリよりもかなり小型であるため、いつでもキャッシュされ得るのはメイン・メモリの記憶位置の少量のみである。従って、一般的にキャッシュ内に存在する各記憶位置、即ちキャッシュ・ラインは概念的に、タグ・フィールド及び内容フィールドという２つの部分を有する。読み出し又は書き込み動作が要求されるとき、指定されたアドレスはキャッシュ内の一定のラインのタグ・フィールドと比較される。その比較により整合が生じれば、整合しているタグを含むキャッシュ・ラインの内容フィールドが読み出し又は書き込まれる。メイン・メモリにアクセスする必要はない。これはキャッシュ・ヒットとして知られている。
【００１０】
図２に示すロード／ストア・ユニットは全てのLOAD命令を実行するとともに、一般的にメモリとの間の全てのインターフェイスの役割を担う。同図に示すように、ロード／ストア・ユニットは集積回路上の内部の１次キャッシュ２４を管理する。ロード／ストア・ユニットは、メモリ管理ユニット２６に接続された外部の２次キャッシュ２５との調整を行う。１次キャッシュ２４は、ダイレクト・マッピングされたキャッシュである。それは、キャッシュされる記憶位置のアドレスをキャッシュ内の指定された記憶位置へマッピングするものである。
【００１１】
ロード・バッファ２０の背後にある理論は、内部キャッシュ２４に格納するには大きすぎるワーキング・セット（working set ）を有するコードに対して、LOAD命令とその後続使用とが外部キャッシュ２５の待ち時間を少なくとも充分に補うほど長く分離され得ることである。このように、データを即座に返還することが不可能なLOADはパイプラインを機能停止させるのではなく、データを返還することが可能になるまで緩衝処理されるという点で、ロード・バッファ２０はロード／ストア・ユニット１０（図１に示す）及び他の機能ユニットが幾分か切り離されることを許容する。即ち、この典型的な例は、LOADが集積回路上の内部キャッシュ２４にミスし、外部キャッシュ２６にアクセスせねばならない場合である。この場合、LOADはロード・バッファ２０内に配置され、実行パイプラインはロードされているレジスタを必要とするまで、換言すれば「使用」命令に遭遇するまで動作し続ける。
【００１２】
図３は非連想又はダイレクト・マッピングされたキャッシュ３０を示す。ダイレクト・マッピングされたキャッシュ３０は、ヒットしたかを調べるためにキャッシュ３０内のアドレスを指定することにより、入力メモリ・アドレス３２の下位ビット３１を用いる。これらのビット３１はキャッシュ３０内の指標と呼ばれる。このため、記憶位置Ａはキャッシュ・ライン３３内のみに存在でき、キャッシュ内にあるライン３３のアドレス３２は、Ａのアドレスの下位ｋビットである。キャッシュ３０中の１つのライン３３内のみでキャッシュされるメモリ・アドレス３２が非常に拘束されることを許容すれば、連想メモリよりも安価で高密度なランダム・アクセス・メモリ（ＲＡＭ）を使用できる。ダイレクト・マッピングされるキャッシュ３０の他の重要で魅力的な特徴は、それがより簡素であるとともに、より少ない回路構成しか必要としないことを考慮すれば、より高速に動作する傾向にあることである。しかしながら、キャッシュ・ライン３３の拘束により、同一のｋ個の下位アドレス・ビット３１を共有する記憶位置は、また同一のキャッシュ・ライン３３を共有することが必要になる。各キャッシュ・ライン３３が、ある記憶位置の内容を記憶するためのみに備えられる場合、同一の下位ｋのアドレス・ビット３１を有する２つの記憶位置は同一のキャッシュ・ライン３３に対して競合するため、同時にキャッシュされ得ない。各キャッシュ・ライン３３内において、データ３４はタグ３５と共に格納される。単純にアドレスを指定する目的では、タグ３５のほんの少数のみが、キャッシュ・ライン３３内に格納された記憶位置の上位のアドレス・ビット３６となる。キャッシュ・ヒットが起きたか否かを確定するために、入力メモリ・アドレス３２の上位のアドレス・ビット３６が、入力されたメモリ・アドレス３２の下位のアドレス・ビット３１によってマッピングされた記憶位置内に格納されたタグ３５と比較される。下位ビット３１によって指標付けされたキャッシュ・ライン３３内に格納されたタグ３５が、入力されたメモリ・アドレスの上位ビット３６と一致していれば、それはキャッシュ・ヒットである。
【００１３】
図４に示すように、内部キャッシュ４０はデータメモリ４１及びタグメモリ４２という２つの別々のメモリを備える。概念的に、その挙動は図３に示すキャッシュ３０のそれと丁度同じである。これはデータ４１及びタグ４２の両方の部位が同様の方法で指標付けされるとともに、同じ数のラインを有するためである。データ・アレイ４１内の各データラインは、タグ・アレイ４２と対応する位置に対応タグを有している。
【００１４】
図２を再度参照すると、ロード・データが外部キャッシュ２５から返還されるとき、そのデータは内部キャッシュ２４に書き込まれる。この置き換え方法の背後にある原理は、最近使用されたデータは近い将来において再び使用される傾向にあるということである。内部キャッシュ２４に書き込むということは、両データＲＡＭ４１及びタグＲＡＭ４２（共に図４に示す）内の適切なラインを置き換えることを意味する。
【００１５】
LOADがディスパッチされたとき、ロード／ストア・ユニット１０（図１に示す）は指定された記憶位置が内部キャッシュ２４内にあるかどうかを調べる。ヒットが起きたか否かを確定するために、適切なタグがタグＲＡＭ４２（図４に示す）から検索されるとともに、要求された記憶位置に対するアドレスの適切な部分と比較される。これらのタグを検索している間、内部キャッシュ２４にミスした古いLOAD命令はデータ及びタグ情報を返還する。大部分のキャッシュ２４の置き換え方法は、キャッシュ２４内にて最も新たに参照したデータを必要とするため、内部キャッシュ２４は前回のミスによって返還されたデータ及びタグを保持するために更新されなければならない。そのため、同一の記憶位置が再び要求されると、それらの記憶位置は内部キャッシュ２４をヒットする。外部キャッシュ２５への待ち時間がゼロではなく、ロード・バッファ２０は外部キャッシュ２５にアクセスすべきLOADのサービスを遅らせる傾向にあるため、LOADがロード・バッファ内に配置されて数サイクル後に、外部キャッシュ２５からデータが返還される。古いLOADが外部キャッシュ２５からデータを返還しているのと同一のサイクルの間に新たなLOADがディスパッチされているなら、内部キャッシュ２４のタグＲＡＭのデータ・ポート４３（図４に示す）に衝突が起きる。
【００１６】
【発明が解決しようとする課題】
従来技術の問題は、１つでもLOADが内部キャッシュ２４にミスすると、１サイクル当たりに１つというLOADの処理量が達成され得ないことである。コードの厳格なループは疑う余地なく１サイクル当たり１つのLOADを発行するため、たとえ全てのLOADが内部キャッシュ２４にミスしたとしても、１サイクル当たり１つというLOADの処理量を維持することは重要である。ロード・バッファの待ち行列２０の先頭にある別のLOADが、前回の内部キャッシュ２４のミスにより内部キャッシュ２４へデータを返還しているのと同一のサイクル中に、内部キャッシュ２４に対するヒットを調べるため、新たにディスパッチされたLOADがタグＲＡＭのポート４３（図４に示す）へのアクセスが必要であるなら、そのサイクル中にそれらの内の１つのみが処理される。１サイクル当たり１つのLOADが発行されれば、タグＲＡＭのデータ・ポート４３（図４に示す）は、内部キャッシュ２４に対するヒットを調べるため各サイクルの間に使用される。従って、ロード・バッファからの古いLOADは、返還されたロード・データを書き込むべくタグＲＡＭにアクセスすることはできない。１サイクル当たり１つのLOADが発行されれば、入力されたLOADのうちの１つが内部キャッシュ２４にミスする時、最終的にプロセッサは停止する。そして、その後の全てのLOADは、ロード・バッファ２０内で待ち行列となる。ロード・バッファ２０内のLOADはタグＲＡＭのポート４３（図４に示す）にアクセスできないことから、ロード・バッファ２０は自身が保持する如何なるLOADに対しても首尾よくサービスできない。ロード・バッファ２０内に充分な数のLOADが蓄積されて、ロード・バッファ２０のメモリの空き領域がなくなることにより、そのサイクル中にLOADはディスパッチされ得ず、プロセッサ１２（図１に示す）は次のサイクル中に停止する。
【００１７】
この発明は前述した事情に鑑みてなされたものであって、その目的は、タグ・アレイ及びデータ・アレイを同時にアクセスできることを許容し、プロセッサを停止させることなく、そのプロセッサの１サイクル当たり１つのLOAD命令という処理量を維持することが可能な方法及び装置を提供することにある。
【００１８】
【課題を解決するための手段】
以下の手段により、上記目的を達成するための方法及び装置が構成されている。
【００１９】
プロセッサのロードストア・ユニットにおいて、各サイクル中にLOAD命令を含む命令ストリームを実行する際、プロセッサが停止することを防ぐために、１サイクル当たり１つのLOAD命令という処理量を維持することが望まれている。
【００２０】
ロード・バッファはLOAD命令の待ち行列を形成することから、新たなLOAD命令がキャッシュ・ヒットであるかを調べるべくタグ・アレイにアクセスしている時、キャッシュにミスした古いLOAD命令に対するキャッシュのタグは後で返還する。従って、古い返還されたタグ及び新たなLOADは、キャッシュのタグ・アレイに対して競合する。本発明に基づき、新たなLOAD命令がキャッシュ・ヒットであるかを調べるべくタグ・アレイにアクセスしているのと同一のサイクル中に、返還されている古いLOAD命令のデータのミスによるタグ・アレイの同時アクセスをキャッシュの２重ポートのタグ・アレイは許容する。
【００２１】
ロード／ストア・ユニットのキャッシュ内のデータ・アレイ・アクセスからタグ・アレイ・アクセスを切り離すための、ロード・バッファ内のヒット・ビットを演算しかつ管理するための方法及び装置により、新たにディスパッチされたLOADは古いLOADが全て処理されるまでロード・バッファ内の待ち行列で待機した後、その新たなLOADがキャッシュをヒットするか否かを確定する。このように、LOADがロード・バッファの待ち行列の先頭に届くとき、タグＲＡＭは再びアクセスされる必要はない。
【００２２】
ロード・バッファ中のデータ構造は、本発明の方法及び装置を容易にする。ロード・バッファのデータ・エントリは、LOAD命令を処理し、かつ緩衝されるべき今後のLOAD命令に対するヒット・ビットを演算するのに必要なヒット・ビット及び全ての情報を備えている。
【００２３】
キャッシュのデータ・アレイ部及びタグ・アレイ部のアクセスが切り離されているLOAD命令をサービスするための方法及び装置は、LOADがタグ・アレイに再度アクセスすることなくロード・バッファ内にて遅延した後、データ・アレイの遅延アクセスを許容する。そのため、１サイクル当たり１つのLOADという処理量の持続が達成される。
【００２４】
ロード・バッファ内における待ち行列の先頭にLOADが届き、そのLOADは１次キャッシュをミスする場合、かつロード・バッファ内の古い未決の各LOADがロード・バッファの待ち行列の先頭に届くとすぐに、１次キャッシュのヒットとなる場合、LOADがロード・バッファの待ち行列の先頭に届く前に、１次キャッシュをミスするであろうLOADに対する外部キャッシュへのアクセスが始まる。２次キャッシュのポインタはロード・バッファのエントリを参照する。そのエントリは外部キャッシュにアクセス可能な最も古い未決のLOAD命令を含む。従って、本発明に基づく方法及び装置は、ロード・バッファ内の２つの別々のLOADに対して、１次及び２次キャッシュへのアクセスが同時に起きることを許容する。
【００２５】
【発明の実施の形態】
近年のプロセッサは、物理アドレス空間とは別の仮想アドレス空間を支援する。仮想アドレスは、プロセッサが記憶位置を指定するために用いるラベルである。プロセッサは、自身が仮想アドレスの記憶位置にアクセスできる限り、実際に記憶位置が物理メモリ内のどこに存在するかについては関与しない。プロセッサ・アーキテクチャの仕様により、支援されるべき一定の仮想アドレス空間が定義される。コンピュータ・システムを管理するオペレーティング・システムは、仮想アドレス空間からどのように物理メモリへマッピングされるのかに関して、柔軟性がある。従って、仮想アドレスから物理アドレスへの変換が必要となる。
【００２６】
図５は、本発明に基づく機能ユニット５０を示す概略的なブロック図である。ロード・バッファ５４はタグＲＡＭ５８、データＲＡＭ５９及びメモリ管理ユニット５６に接続されている。メモリ管理ユニット５６はタグＲＡＭ５８及びデータＲＡＭ５９に接続されるとともに、両ＲＡＭ５８，５９を管理する。内部キャッシュ５１は、仮想的に指標付けされるとともに、物理的にタグ付けされている。仮想的に指標付けされたキャッシュでは、仮想アドレスの下位ビットはキャッシュ・ラインへのダイレクト・マッピング、即ち指標付けを提供するために使用される。これに対して、タグは物理アドレスの一部としての上位ビットである。従って、キャッシュ・ヒットが起きたか否かを確定するために、上位の物理アドレス・ビット５２は、指標によって参照されるキャッシュ・ラインに対するタグ・フィールド内に格納されているタグ５３と比較される。
【００２７】
未決のLOADは順に実行されるべきである。LOADが命令ストリーム内に連続して存在するなら、それらのLOADが返還するデータは、命令ストリーム内に存在した順にレジスタファイルへ書き込まれるべきである。プログラマーがそれとは正反対の順に使用するする場合、LOADは間違った順に返還されることが許容されるのであれば、古いLOADにより新たなLOADの結果が消去されてしまう。LOADが内部キャッシュ５１にミスする時、そのLOADはロード・バッファ５４の中で待ち行列をなす。その次のサイクル中に、内部キャッシュ５１内でヒットしたLOADはディスパッチされることがある。その結果、通常は検索が迅速に行われ、内部キャッシュ５１からデータが返還されることになる。しかしながら、メモリ管理ユニット５６を通じて第２キャッシュ・サブシステムとしての外部キャッシュ５５又はメイン・メモリにアクセスすべき未決の古いLOAD命令が存在するため、新たなLOADはロード・バッファ５４内で待ち行列をなす。そのため、未決のLOADが返還するまでそのLOADは返還されない。LOADが順にデータを返還すべき第２の理由、或いはより重要な理由は、ソフトウエアのトラップ及び割り込みが実行し難くなることから、LOADを間違った順に（アウト・オブ・オーダーで）実行するとロード／ストア・ユニットの複雑さを大幅に増大させてしまうことである。
【００２８】
ソフトウエアのトラップ及び割り込みのような例外的な条件を取り扱うために、ロード・バッファ５４内のLOADには最初にタグが付けられる。そのため、LOADはパイプライン化されたプロセッサの全てのステージを首尾よく通過することにより、そのLOADの実行が完了する。これよりも前に、例外的な条件が起きるなら、実行完了前の全てのLOADは消去されなければならないとともに、ロード・バッファ５４は「１つリセット」（"rewound" ）する。
【００２９】
ロード・バッファ５４は順にデータをレジスタへ返還する。古いLOADが外部キャッシュ５５へのアクセス待ちの状態であれば、内部キャッシュ５１をヒットする新たなLOADをサービスする１つの方法は、新たなLOADに対するデータを検索するとともに、古いLOADがそのデータを返還するまでそのデータを緩衝することである。しかしながら、LOADが数ワードのデータを返還することがあり、かついくつかのLOADが緩衝される必要があるため、この選択を実施することは非常に高価なものとなる。この全てのロード・データを緩衝する必要がある領域は、広すぎるため実際この選択を実施することはできない。
【００３０】
本発明に基づき、外部キャッシュ５５から古いLOADが返還されるのを待つ間、新たなLOADからのロード・データを緩衝する代わりに、ロード・バッファ５４は新たなLOADが内部キャッシュ５１にヒットしたかミスしたかを記録し、それが内部キャッシュ５１にヒットしたのであれば、その後に再び内部キャッシュ５１をアクセスする。ヒット／ミスの確定に必要な唯一のメモリ・ポートは、内部キャッシュ５１のタグ・ポート５７である。従って、ロード・バッファ５４が空でない時、パイプラインへ入力され新たにディスパッチされたLOADは、内部キャッシュ５１のタグＲＡＭ５８の一部のみにアクセスする。続いて、LOADがロード・バッファの待ち行列の先頭に来るとともに、内部キャッシュ５１にヒットしたことが記録される時、それは内部キャッシュ５１のデータ５９の一部のみにアクセスすることから、タグＲＡＭ５８を用いて新たにディスパッチされたLOADは影響を受けない。
【００３１】
内部キャッシュ５１を完全に更新するために、ロード・データが外部キャッシュ５５から返還される時、両タグＲＡＭ５８及びデータＲＡＭ５９は書き込まれなければならない。ロード・バッファ５４が空である場合、内部キャッシュ５１のデータＲＡＭ５９のポートは、内部キャッシュ５１にミスした古いLOADに対して用いられる。その古いLOADは、外部キャッシュ５５から返還されるとすぐに内部キャッシュ５１を満たす（割り付ける）。しかしながら、タグ・ポート５７はヒットしたかを調べるため、新たにディスパッチされたLOADにより使用されるので、そのポート５７は使用できない。本発明に基づき、プロセッサ１２（図１に示す）を停止させないようにすべく、かつ最適な性能を達成すべく、内部キャッシュ５１のタグＲＡＭ５８は第２ポート５５０を有する。そのポート５５０は主として、外部キャッシュ５５にアクセスしたロード・バッファ５４内の古いLOADから返還されたデータを有するタグＲＡＭ５８を満たすために備えられている。従って、タグＲＡＭ５８の第１ポート５７は、内部キャッシュ５１にヒットしたかを調べるべく新たにディスパッチされたLOADによって用いられ、タグＲＡＭ５８の第２ポート５５０は、ロード・バッファ５４内の古いLOADから返還された記憶位置のタグを有するタグＲＡＭ５８を満たすべく同時に用いられる。
【００３２】
また、第２タグＲＡＭのポート５５０は、多層キャッシュ及び／又は多重処理を行う環境において便利である。キャッシュの一貫性を確実にする処理である「詮索」（"snoops"）は、命令の発行を停止することなくこのポート５５０を使用することができる。ロード・バッファ５４が空であれば、その詮索により並行してサービスされ得る。ロード・バッファ５４が空でなければ、LOADは記録されたヒットしたビットと共に、通常の待ち行列をなす。この場合、その詮索によりヒットしたこれらのビットが適切に影響を受けることを保証する特別な機構がある。
【００３３】
本発明に基づき、ロード・バッファ５４へ転送される各エントリは「ヒット・ビット」（"hit bit" ）６０（図６に示す）を有する。そのビット６０は、LOADが最初にロード／ストア・ユニット１０（図１に示す）へディスパッチされる時、指定された記憶位置に対するタグがタグＲＡＭ５８内にあるか否かを示すものである。ロード・バッファ５４内にて待ち行列をなしていたLOADがついに待ち行列５５１の先頭に届く時に、ヒット・ビットが活性状態（asserted）であれば、ロード・バッファ５４によりデータ・アレイは盲目的にアクセスされる。最初のヒット／ミスの確定とLOADがロード・バッファ５４の待ち行列の先頭に届いた時との間の中間の時間に、与えられたLOADのヒット／ミスの状態を変更するという幾つかの事象が起きることがある。従って、内部キャッシュ５１のヒット情報をログするとともに、これらの事象が起きるように適切に維持管理することが重要である。
【００３４】
ヒット・ビット６０（図６に示す）に影響を及ぼす事象は、LOADがタグ・アレイ５８をアクセスした後であってデータ・アレイ５９をアクセスする以前に、内部キャッシュ５１の状態を変更する。古いLOADの割り付けが外部キャッシュ・ラインの内容を置き換える時、最初の事象が起きる。ここで、そのラインはロード・バッファ５４内の新たなLOADのソース・アドレスによってマッピングされたものである。これにより内部キャッシュ５１のヒットは内部キャッシュ５１のミスに変化される。例えば、アドレスＸ，Ｙが同一の内部キャッシュ・ラインへダイレクト・マッピングされる、以下に示すプログラムの一部を参照されたい。ＬＯＡＤ  Ｘ，ｒ０はメモリ・アドレスＸの内容をレジスタｒ０へロードするという要求である。
【００３５】
ＬＯＡＤ  Ｗ，ｒ1
ＬＯＡＤ  Ｘ，ｒ1
ＬＯＡＤ  Ｙ，ｒ2
ＬＯＡＤ  Ｚ，ｒ3
第１LOAD命令を実行する前に、Ｙが内部キャッシュ５１内でキャッシュされたと仮定する。加えて、第１LOADは内部キャッシュ５１にミスしたと仮定する。Ｙ（Ｘではない）は関連したキャッシュ・ラインを占有していることから、第２LOADがディスパッチされるとミスが起きる。第２LOADはロード・バッファ５４へ転送され、外部キャッシュ５５に現在アクセスしている第１LOAD命令の次に配置される。ここで、第３LOADがディスパッチされる。Ｙが内部キャッシュ５１内に位置することから、第３LOADは内部キャッシュ５１にヒットする。第１LOADがミスした時、ロード・データ返還の適切な順序を維持するために、たとえ後続のLOADが内部キャッシュ５１にヒットしても、後続のLOADはロード・バッファ５４内に緩衝されなければならない。そのため、第３LOADはロード・バッファ５４中へ転送され、第２LOADの次に配置される。外部キャッシュ５５が第１LOADを返還した後、第２LOADは外部キャッシュ５５へアクセスし始める。第２LOADが返還する時、そのLOADは関連する内部キャッシュ・ラインを割り付ける（満たす）。第３LOADがロード・バッファ５４の待ち行列５５１の先頭に届く時、第２LOADが内部キャッシュ５１内のラインを書き直したことにより、指定されたデータはもう内部キャッシュ５１内にはない。従って、第３LOADは古い第２LOADにより、ヒットからミスへ変更される。
【００３６】
ロード・バッファ５４内のLOADのヒット／ミスの状態に影響を及ぼす別の事象は、古いLOADにより指定されたデータの割り付けである。これは内部キャッシュ５１のミスから内部キャッシュ５１のヒットへの変化に影響を及ぼす。例えば、以下に示すプログラムの一部を参照されたい。
【００３７】
ＬＯＡＤ  Ｗ，ｒ1
ＬＯＡＤ  Ｘ，ｒ2
ＬＯＡＤ  Ｘ，ｒ3
Ｗ及びＸは共に内部キャッシュ５１内にはないと仮定する。第１LOADがディスパッチされる時、ミスが起きて第１LOADはロード・バッファ５４内に緩衝される。第２LOADがディスパッチされる時、ミスが起きて第２LOADは内部キャッシュ５５に現在アクセスしている第１LOADの次に位置するようにロード・バッファ５４に転送される。第３LOADがディスパッチされる時、Ｘはまだ内部キャッシュ５１内にはないため、更にミスが起きる。しかしながら、第２LOADがロード・バッファ５４の待ち行列の先頭に届いて内部キャッシュ５１を満たす時、Ｘはその後に内部キャッシュ５１内に位置する。このため、第３LOADはＸに対して外部キャッシュ５５へ転送される必要はなくなる。その代わりに、第３LOADに対するミスは第２LOADによってヒットに変更される。
【００３８】
本発明によれば、ロード・バッファの待ち行列５５１の先頭にあるLOADに対して、外部キャッシュ５５へのアクセスは、前回のLOADが外部キャッシュ５５の使用を完了した後、可能な限り早く開始される。これは、そのLOADのヒット／ミスの状態が分かっているからである。時には、外部キャッシュ５５へのアクセスは更に早く起きることさえある。例えば、待ち行列５５１の先頭にあるLOADが活性状態であるヒット・ビット６０（図６に示す）を有するなら、それは外部キャッシュ５５へアクセスする必要はない。このため、次に位置するLOADが不活性状態（deasserted）であるヒット・ビット６０（図６に示す）を有するなら、待ち行列の先頭の次に位置するLOADは、外部キャッシュ５５へアクセスし始めることができる。この方法を達成すべく、外部キャッシュ・ポインタが使用され、外部キャッシュ５５へアクセスする必要がある最も古いロード・バッファエントリを指定する。外部キャッシュ５５のミス、即ち例外が存在する場合、外部キャッシュ・ポインタは、内部キャッシュ５１をヒットした最も新たなLOADをとばしながら後方へ向かっている間に、リセットする機能を備えたロード／ストア・ユニットを提供する。
【００３９】
ロード・バッファ５４の設計は、一旦LOADがロード・バッファ５４に入ってからのヒット又はミスの状態を知ることに基づいているため、外部キャッシュ５５へのアクセスを可能な限り早く開始できる。ロード・バッファ５４の待ち行列５５１の先頭に届いた直後のLOADのヒット状態は、LOADがタグＲＡＭ５８にアクセスした時その最初の状態とは異なるという上記の２つの場合に、古いLOADが内部キャッシュ５１に影響を及ぼすことになる。従って、ロード・バッファ５４の新たなエントリに対するヒット・ビット６０（図６に示す）は、タグの比較５５２とロード・バッファ５４内に既に存在するLOADのアドレスとの結果から導出される。一旦ロード・バッファ５４中に書き込まれると、ヒット・ビット６０（図６に示す）は変更されない。このため、新たにディスパッチされたLOAD命令は、ロード・バッファ内で未決のLOADと比較される。必要であれば、ヒット・ビット６０はロード・バッファ５４へ転送される途中で変更される。例えば、同一のタグを伴い同一のラインに対する別のLOADが生じた時、LOADが内部キャッシュ５１にミスするとともに、外部キャッシュ５５にアクセスしているなら、後者のLOADをヒットに変更することを前もって知ることが望ましい。それにより、ロード／バッファ・ユニット５０はそのLOADに対して外部キャッシュ５５へ出向くことはない。同様に、第２LOADが同一のラインにあるが、そのLOADは内部キャッシュ５１内に存在するラインのタグを有するなら、そのLOADが未決のLOADと置き換えられることが望ましい。それにより、ロード／バッファ・ユニット５０は、そのLOADに対して実際にアクセスが起きる前に、外部キャッシュ５５へのアクセスを開始することができる。
【００４０】
図６は、ロード・バッファ６５内の情報の編成を示す。少なくとも、ロード・バッファ６５は宛先レジスタ・アドレス６１、内部キャッシュ５１（図５に示す）への指標６２、ロードされるメモリ・アドレスと関連したタグ６３、及びロードされるメモリ・アドレスのソース・アドレス６４を格納しなければならない。ロードされるソース・アドレス６４に関しては、アーキテクチャ内の仮想から物理への変換を行う場所に依存して、ロード・バッファ６５は物理アドレス又は仮想アドレスの何れかを格納する。どちらの場合においても、タグ６３又は指標６２の何れか、或いは両者６３，６２はソース・メモリ・アドレス６４の部分集合である。内部キャッシュ５１（図５に示す）が仮想的に指標付けされるとともに、仮想的にタグ付けされているなら、タグ６３及び指標６２は仮想アドレスとほぼ等しい。内部キャッシュ５１（図５に示す）が物理的に指標付けされるとともに、物理的にタグ付けされるなら、タグ６３及び指標６２は物理アドレスとほぼ等しい。内部キャッシュ５１（図５に示す）が仮想的に指標付けされるとともに、物理的にタグ付けされるなら、タグ６３は物理アドレスの上位ビットで表され、指標６２は仮想アドレスの下位ビットで表される。内部キャッシュ５１（図５に示す）が物理的に指標付けされるとともに、仮想的にタグ付けされるなら、タグ６３は仮想アドレスの上位ビットで表され、指標６２は物理アドレスの下位ビットで表される。図６に示すように、ロード・バッファ６５のデータ編成は、仮想的に指標付けされるとともに、物理的にタグ付けされたキャッシュ５１を伴って使用されるようになっている。そのキャッシュ５１内で行われる仮想から物理へのアドレス変換は、ロード・バッファ６５内のエントリに先立って行われる。従って、タグ６３は独立して格納されることはない。
新たにディスパッチされたLOADがロード・バッファ６５内で待ち行列となる時、LOADのヒット・ビット６０の演算が行われる。「未処理のヒット・ビット」（"raw hit bit" ）の値５５２（図５に示す）は、LOADのアドレスによって指標付けされたタグＲＡＭのエントリをそのアドレスのタグ６３と比較することにより確定される。LOADのアドレスの指標６２は、同時にロード・バッファ６５内の全ての指標と比較される。ロード・バッファ６５内の各エントリ６６に対して、先の比較により指標整合信号が生成される。指標整合信号が活性状態であるそれらのエントリのみが、未処理のヒット・ビット５５２（図５に示す）の値を変更できる。指標整合信号が活性状態である最新のエントリに対して、LOADのアドレスのタグは指標整合信号が活性状態である最新のエントリと比較される。これにより、「タグ整合信号」（"tag match signal"）が生成される。全てのエントリに対して、指標整合信号、及びタグ整合信号が活性状態であるとともに、未処理のヒット・ビット５５２（図５に示す）が不活性状態であるなら、新たなLOADに対するヒット・ビットは活性状態となる（活性状態生成工程）。この場合、古いLOADは、新たにディスパッチされたLOADがロード・バッファの待ち行列５５１（図５に示す）の先頭に届くまでに、内部キャッシュ５１（図５に示す）を指定されたデータで満たす。このため、ミスがヒットに変更される。一方、全てのエントリに対して、指標整合信号が活性状態であり、タグ整合信号が不活性状態であるとともに、未処理のヒット・ビット５５２（図５に示す）が活性状態であるなら、新たなLOADに対するヒット・ビットは不活性状態となる（不活性状態生成工程）。この場合、古いLOADは、新たにディスパッチされたLOADがロード・バッファの待ち行列５５２（図５に示す）の先頭に届くまでに、指定されたデータを書き換える。このため、ヒットがミスに変更される。複数のロード・バッファのエントリ６６が活性状態の指標整合信号を有している場合、最新のエントリは、新たにディスパッチされたLOADのヒット・ビット６０の確定を制御する。上述した論理は、以下の方法により達成される。ロード・バッファ内に１つでも指標の一致が見つかれば、新たにディスパッチされたLOADのヒット・ビット６０は、整合指標６２を有する最も新しいエントリのタグ６３の整合信号の値を受け取る。ロード・バッファ６５内に指標の一致が見つからなければ、ヒット・ビット６０は未処理のヒット・ビット５５２（図５に示す）の値を受け取る。
【００４１】
図７に示すように、４つの有効なエントリを有するハードウエアの構造は、ロード・バッファ内の新しいエントリに対するヒット・ビット７０の値を生成する。同図に示すように、指標0 ７１とタグ0 ７２はそれぞれ最も新しいエントリに対する指標６２とタグ６３（共に図６に示す）を表し、指標3 ７３とタグ3 ８９はそれぞれ最も古いエントリに対する指標６２とタグ６３（共に図６に示す）を表している。指標比較回路としての比較器７４は、新しいロード指標７５をロード・バッファ６５（図６に示す）内に現在ある全ての指標７６と比較する（比較工程）。指標整合信号活性状態生成回路としての優先順位回路７７は１つの出力（指標整合信号）を活性状態にしたり、全く出力を活性状態にしなかったりする。最も新しいエントリからの活性状態である整合信号のみが、優先順位回路７７の出力７８で活性状態となる。活性状態の入力７９が全くなければ、活性状態の出力７８も全く得られない。優先順位回路７７の出力７８のうち１つが活性状態であれば、パス・ゲート８０は対応するタグ８１をタグ比較バス８２上へ転送する。タグ比較回路としての比較器８３は新しいLOADのタグ８４を比較バス８２上のタグと比較する（比較工程）。両者が同一であると検出されたなら、タグ整合信号８５が活性状態となる。１つ以上の指標７６が一致したなら、論理和ゲート８６は、ヒット・ビットの値７０に対するタグ整合信号８５を選択するために、ヒット・ビット割り付け回路としてのマルチプレクサ８７へ制御する。どの指標７６も一致しないなら、論理和ゲート８６はヒット・ビットの値７０として未処理のヒット・ビット８８を選択するために、マルチプレクサ８７へ制御する。
【００４２】
上述したヒット・ビットの演算を行うハードウエアは、一例として表されている。同じ目的を達成する多くの論理的な実現方法がある。例えば、比較器７４の数を減らすことにより、ヒット・ビットを演算する待ち時間を減少させるべく、各ロード・バッファエントリに対する別々のタグ整合信号の生成を行ってもよい。特許請求の範囲は、そのような多数の別の実施形態を含んでいる。
【００４３】
本発明の好ましい実施形態は、上述した全ての特徴を含んでいる。図５は、好ましい実施形態に基づいた機能ユニット５０の構造を示す概略的なブロック図である。機能ユニット５０は、内部の１次キャッシュ５１及び外部の２次キャッシュ５５を備えている。両キャッシュ５０，５１はダイレクト・マッピングされる。内部キャッシュ５１（図５に示す）はタグＲＡＭアレイ５８及びデータＲＡＭアレイ５９に別れている。LOADは指定されたソース・データに対する仮想アドレスを指定する。タグＲＡＭ配列５８は２つのアクセス・ポート５７，５５０を有する。第１アクセス・ポートとしての第１ポート５７は主として、入力されたLOADのソース・アドレス５５３に対するタグ５３の検索に用いられる。第２アクセス・ポートとしての第２ポート５５０は主として、内部キャッシュ５１中に割り付けられている記憶位置に対する第２タグの書き込みに用いられる。２つのアクセス・ポート５２，５５０が別々であるため、第１タグ５３の検索及び第２タグの書き込みを同時に行うことができる。
【００４４】
内部キャッシュ５１は仮想的に指標付けされるとともに、物理的にタグ付けされている。外部キャッシュ５５は物理的に指標付けされるとともに、仮想的にタグ付けされている。そのため、仮想アドレスの下位ビットは内部キャッシュ５１内のキャッシュ・ラインを表し、物理アドレスの下位ビットは外部キャッシュ５５内のキャッシュ・ラインを表している。両キャッシュ５１，５５において、物理アドレスの上位ビットはタグを表している。変換索引バッファ５５４（TLB ）はアドレス変換器の一部を構成し、変換可能な仮想アドレスから物理アドレスへの変換の一部を格納する。キャッシュ５１，５５は物理的にタグ付けされているため、TLB ５５４の出力５５５の上位ビット５２は、タグＲＡＭ５８から検索されたタグ５３と比較される。タグ比較器５５６（未処理ヒット比較回路、及び未処理ヒット・ビット活性状態生成回路を構成する。）がその同一性を検出したら、指定されたデータは現在内部キャッシュ５１内に存在することになる。ロード・バッファ５４が空であれば、キャッシュ・ヒットにより内部キャッシュ５１のデータＲＡＭ配列５９からデータを即座に返還できる。しかしながら、全てのLOADがデータを順に返還する必要があることから、ロード・バッファ５４が空でない場合には、LOADは内部キャッシュ５１にヒットしたとしてもLOADは待ち行列をなす。ロード・バッファ５４が空でないなら、それは１つ以上のLOADが内部キャッシュ５１にミスしたことが原因である。このため、後続のLOADは内部キャッシュ５１をミスしたLOADを待たなければならない。
【００４５】
ロード・バッファ５４内にて待ち行列をなす前に内部キャッシュ５１にヒットしたLOADによって指定されたデータは、そのLOADがロード・バッファ５４の待ち行列５５１の先頭に届くまでに内部キャッシュ５１から取り除かれる。このため、LOADが内部キャッシュ５１の待ち行列５５１の先頭に届く時に、内部キャッシュ５１内で指定されたデータが用いられるか否かを予測すべく演算が行われる。演算は、タグ比較器５５６により生成されたヒット信号５５２や、ロード・バッファ５４内で待ち行列をなすLOADの指標６２及びタグ６３（共に図６に示す）を含む。
【００４６】
本発明は、幾つかの新規で非自明な特徴を含む望ましい実施形態に関して詳述されている。この実施形態は例として開示されている。本発明の趣旨を逸脱しない範囲おいて、添付の特許請求の範囲によりカバーされようとする創作力に富んだ特徴と均等なものが多々ある。
【図面の簡単な説明】
【図１】  スーパースカラ・プロセッサを示す概略的なブロック図。
【図２】  ロード機能ユニットを示す概略的なブロック図。
【図３】  ダイレクト・マッピングされるキャッシュの動作を示す図。
【図４】  ダイレクト・マッピングされるキャッシュの実行を示す図。
【図５】  本発明に基づくロード機能ユニットを示す概略的なブロック図。
【図６】  本発明に基づくロード・バッファ内のデータの編成を示す図。
【図７】  本発明に基づくヒット・ビットの演算を実行するハードウエアを示す概略図。
【符号の説明】
５０…ロード／バッファ・ユニット、５１…内部キャッシュ、５２…物理アドレス・ビット、５３…第１タグ、５４，６５…ロード・バッファ、５５…２次キャッシュとしての外部キャッシュ、５６…メモリ管理ユニット、５７…第１アクセス・ポートとしてのタグ・ポート、５８…タグ・アレイ、５９…データ・アレイ、６０…ヒット・ビット、６２…指標、６３…タグ、７４…指標比較回路、７７…指標整合活性状態生成回路としての優先順位回路、８３…タグ比較回路としてのタグ比較器、８７…ヒット・ビット割り付け回路としてのマルチプレクサ、５５０…第２アクセス・ポートとしての第２ポート、５５４…変換索引バッファ（５５４はアドレス変換器の一部を構成する）、５５６…未処理ヒット比較回路及び未処理ヒット・ビット活性状態生成回路としてのタグ比較器。
【図１】
0003875738.tif 000002
【図２】
0003875738.tif 000003
【図３】
0003875738.tif 000004
【図４】
0003875738.tif 000005
【図５】
0003875738.tif 000006
【図６】
0003875738.tif 000007
【図７】
0003875738.tif 000008