(57)【特許請求の範囲】
【請求項１】
複数個のブロックを有する命令キャッシュ部分と、
複数個のワードを有するプリフェッチバッファ部分とを含み、複数個のワードの数は、複数個のブロックの数に等しく、さらに、
前記プリフェッチバッファ部分に記憶された命令ワードの有効性を示す第１の組の有効ビットと、
前記命令キャッシュ部分に命令ワードを書込むことと命令ワードをデコーダに送ることとが独立した動作であるように、命令ワードが前記命令キャッシュ部分で更新されたかどうかを示す第２の組の有効ビットとを含む、プリフェッチバッファおよび命令キャッシュの組合せ。
【請求項２】
前記プリフェッチバッファ部分は、書込カウンタおよび読出カウンタを含む、請求項１に記載のプリフェッチバッファおよび命令キャッシュの組合せ。
【請求項３】
前記プリフェッチバッファ部分は、先入れ先出しの態様で動作するよう構成され、前記先入れ先出しの構成により前記プリフェッチバッファの命令書込および読出時の先頭部分と末尾部分とが規定される、請求項２に記載のプリフェッチバッファおよび命令キャッシュの組合せ。
【請求項４】
プリフェッチバッファおよび命令キャッシュの組合せを利用して中央処理装置に命令ワードを与えるための方法であって、前記方法は、
ａ）  要求される命令が命令キャッシュ部分にないとき、要求される命令を外部メモリからフェッチするステップと、
ｂ）  前記プリフェッチバッファおよび命令キャッシュの組合せのプリフェッチバッファ部分によって、前記外部メモリから与えられた要求される命令を記憶するステップと、
ｃ）  前記プリフェッチバッファ部分に記憶された前記要求される命令が有効であることを示すように第１の組のビットをセットするステップと、
ｄ）  前記プリフェッチバッファ部分によって、前記命令キャッシュ部分および中央処理装置に前記要求される命令を送るステップと、
ｅ）  前記要求される命令を前記命令キャッシュ部分に書込むことと前記要求される命令を前記中央処理装置に与えることとが独立した動作であるように、前記要求される命令が前記命令キャッシュ部分で更新されるとき第２の組のビットをセットするステップとを含む、方法。
【発明の詳細な説明】
【０００１】
【関連出願の相互参照】
この出願は、ジョンソン（Ｊｏｈｎｓｏｎ  ）らによる「メモリ内のデータをアクセスするための方法、メモリシステムおよびメモリ制御システム」と題された出願、ジョンソンらによる「コンピュータメモリシステム、データキャッシュ動作の方法およびデータキャッシュシステム」と題された出願、およびトラン（Ｔｒａｎ）による「ラッチ回路、データの受取りを制御するための装置、ラッチングを遅延させる方法、およびプリチャージ値の受取りを阻止する方法」と題された出願に関する。
【０００２】
上に列挙した出願は、すべて本出願と同日に提出されており、本発明の譲受人に譲渡されたものであって、またすべてここで引用により全体的に再現されるかのように援用される。
【０００３】
【発明の分野】
この発明は電子デジタルデータ処理システムに関し、より特定的にはメインメモリだけでなくキャッシュメモリをも含む、電子デジタルデータ処理システムに関する。
【０００４】
【関連技術の説明】
データ処理システムの改良は、一般に所与の命令を実行するのに要求される平均時間の短縮か、そのような命令を実行するのに要求される装置のコストの低減かのどちらかに向けられてきた。典型的になされてきた設計上のトレードオフの１つは、データの記憶のためのメモリのユニットにおける、コスト対スピードについてのものである。たとえば、テープメモリは伝統的にディスクメモリより速度が低く費用が少ない。それに対しディスクメモリはいくつかのタイプが利用可能であり、コスト／スピードのかねあいでどれか１つのタイプを他のタイプに優先させて選択することもできる。ディスクメモリは固体メモリよりも低速だが、より安価であり、固体メモリ自体もいくつかのタイプが入手可能であってその選択はやはりコスト／スピードのトレードオフに関わるものである。したがって、より安価で迅速なメモリを提供するか、それができなければ現在あるタイプのメモリにおける効率を高めることが、当該技術分野において依然として必要である。この発明はこの第２のタイプの改良に関する。特定的にはこの発明は、関連のキャッシュメモリとメインメモリとを有するホスト中央処理装置（ＣＰＵ）が、そのどちらのメモリからも記憶されたデータを得るのに必要な平均時間を短縮するための装置および動作の方法を提供する。
【０００５】
背景として、コンピュータシステムには一般に１つより多くのタイプのメモリが提供されるということを認識されたい。単一の迅速なメモリは非常に高くつくだろうということを考えて、コンピュータ設計者らはこれまでデータおよび命令を保持するのにさまざまな装置を用いており、各情報を入れておくところは、ＣＰＵがどれくらい緊急にその情報を必要とするかに基づいて選択される。すなわち、一般に迅速ではあるが高価なメモリはＣＰＵがおそらく即座に必要とする情報を記憶するのに用いられ、低速だが費用の少ない装置は、将来使うために情報を確保しておくのに用いられる。
【０００６】
これまで、コンピュータシステムには多数のメモリおよび記憶装置が使われてきた。長期にわたる記憶は、一般にディスクおよびテープの記憶装置を用いてなされる。ディスクおよびテープで実現されたデータ記憶は、通常使用されているすべてのメモリおよび記憶装置の中で現在最も遅く、一般にプロセッサによって実際に使用されてはいないデータおよびプログラムを保持するのに用いられる。ディスクおよびテープに記憶された情報をメインメモリに動かすには、比較的長い時間が必要であるが、ディスクおよびテープの記憶装置からデータを動かすのは時たまのことであり、ＣＰＵが全面的に注意を向けずとも行なうことができるので、この遅さは許容できるものである。
【０００７】
もう１つのメモリ装置は、リードオンリメモリまたはＲＯＭである。典型的なアクセス時間が５０から２００ナノセカンドの間であるＲＯＭは、コンピュータがオフになってもその内容を保持する。ＲＯＭメモリは、典型的には機械を使用するために準備を行なう始動プログラムを保持する。
【０００８】
システムのメインメモリに最もよく使われるもう１つのメモリ装置は、ＲＡＭメモリであって、これはＣＰＵがすぐに用いるための、ディスクまたはテープから持って来られたデータおよびプログラム命令の記憶に使用される。メインメモリは通常、いくつかのダイナミックＲＡＭ（「ＤＲＡＭ」）チップを含む。プロセッサはこれらＤＲＡＭの内容を約１００ナノセカンドで検索できるので、このタイプのメモリはスピードではＲＯＭに匹敵する。
【０００９】
さらにもう１つのタイプのメモリ装置は、キャッシュメモリである。キャッシュメモリは、普通いくつかのスタティックＲＡＭ（「ＳＲＡＭ」）チップを含む。キャッシュメモリはメインメモリより最高で１０倍動作が速く、ＣＰＵが次に最も必要としそうな動作命令およびデータを保持するように設計されているので、コンピュータの動作速度を高めるものである。
【００１０】
最後に、ＣＰＵ内の少量のメモリは、ＣＰＵメモリまたはレジスタと呼ばれる。スピードのために最適化されたスタティックＲＡＭ回路でできた、プロセッサ内のデータレジスタは、すべての中で最も速いメモリである。プログラムレジスタは次のプログラム命令のメモリにおける記憶位置を記憶し、一方命令レジスタは実行されている命令を保持し、汎用レジスタは処理中の短い間、データを記憶する。
【００１１】
前述のことに基づき、コンピュータシステムの中にキャッシュメモリ構成を含み、ひんぱんにアクセスされるデータの迅速な局所記憶のための位置を提供することが、当業者には知られているということを認識されたい。キャッシュシステムはマイクロプロセッサのメモリ参照の各々をインタセプトし、要求されるデータのアドレスがキャッシュ内にあるかどうかを調べる。データが実際にキャッシュの中にあれば（「ヒット」）、そのデータはメインシステムメモリにアクセスするのに必要な待ち状態を招くことなく即座にマイクロプロセッサに戻される。データがキャッシュの中になければ（「ミス」）、メモリアドレス参照がメインメモリ制御装置に送られ、データはメインメモリから検索される。キャッシュヒットは局所的にサービスされるので、局所キャッシュメモリの外で動作するプロセッサは「バス利用度」がずっと低く、それによりシステムが要求するバス帯域幅が減じられて、より多くのバス帯域幅が他のバスマスタに利用可能になる。これは重要なことであるが、なぜかというと当業者にはよく知られているように、コンピュータの中のバス、すなわちＣＰＵとシステムのメモリおよび記憶装置との間の通信チャネルは、主要な障害だからである。処理されるべきすべての命令およびすべてのデータは、事実上このルートを少なくとも１回は移動しなければならない。特に単一のメモリと複数のプロセッサとを含むシステムでは、バスを効率的に使用してシステムの性能を最大限にすることが不可欠である。
【００１２】
前述のように、キャッシュメモリシステムはメモリ参照をインタセプトし、それらがキャッシュ内で「ミス」であった場合のみシステムメモリに送る。先行技術の米国特許の多くはキャッシュメモリおよびメモリにアクセスする方法のさまざまな局面に向けられており、これらは以下の特許を含むキャッシュメモリ部分を含む。すなわちジーグラー（Ｚｉｅｇｌｅｒ  ）らへの米国特許第４，７９４，５２１号、ウェザフォード（Ｗｅａｔｈｅｒｆｏｒｄ  ）らへの米国特許第４，６４６，２３３号、モレノ（Ｍｏｒｅｎｏ）らへの米国特許第４，７８０，８０８号、ジーグラーらへの米国特許第４，７８３，７３６号、ジョイス（Ｊｏｙｃｅ  ）らへの米国特許第４，１９５，３４２号、クロフト（Ｋｒｏｆｔ  ）らへの米国特許第４，３７０，７１０号、ドッド（Ｄｏｄｄ）への米国特許第４，４７６，５２６号、シューネマン（Ｓｃｈｅｕｎｅｍａｎ）への米国特許第４，０７０，７０６号、カプリンスキー（Ｋａｐｌｉｎｓｋｙ  ）への米国特許第４，６６９，０４３号、ハムストラ（Ｈａｍｓｔｒａ  ）への米国特許第４，８１１，２０３号、ジョイスらへの米国特許第４，７８５，３９８号、ギャノン（Ｇａｎｎｏｎ）らへの米国特許第４，１８９，７７０号、およびランゲ（Ｌａｎｇｅ  ）らへの米国特許第３，８９６，４１９号である。キャッシュメモリシステムに多くの関心が寄せられ、上に列挙した米国特許によってそのようなシステムに対し数多くの進歩が明示されているにもかかわらず、そのようなシステムには、まだいくつかの短所および欠点が残っている。たとえば、プロセッサによりフェッチされる最も最近の命令を記憶するための命令キャッシュとそれに伴なう命令プリフェッチバッファとでシステムを構成することが知られている。現在、命令キャッシュと命令プリフェッチバッファとは２つの別個のブロックとして実現されている。そのような実現例では、命令はデコード／実行に送られる際にだけ命令キャッシュを更新する。命令キャッシュはワードのブロック１つにつき有効ビット１つで形成されてもよいし、キャッシュ内の各ワードにつき１つの有効ビットで形成されてもよい。ワードのブロックごとに有効ビットが１つある場合、バスインタフェースユニットは他のアクセスを許容する前にバスにブロック全体をフェッチさせる。ワードごとに有効ビットが１つある場合、取られた分岐はプリフェッチされたバッファ内のすべての命令を無効にする。上に述べたことは各々、実際上設計における短所である。命令キャッシュとプリフェッチバッファとを２つの独立したブロックとして実現することのもう１つの不利な点は、データをプリフェッチバッファから命令キャッシュへ転送するのに、３２ビットバスが要求されるということである。
【００１３】
【発明の概要】
上で記述された短所および欠点を克服するため、この発明は命令キャッシュと、命令キャッシュに直接かつ作動的に接続されるプリフェッチバッファとを含む、キャッシュメモリシステムを提供する。そのような命令キャッシュおよびプリフェッチバッファの組合せは、２つの素子を相互接続するバスのいかなる必要性をも回避し、さらにはプリフェッチされた命令の使用を改良しかつ電力およびシリコン領域の使用を減じて、命令バッファがデータを効率的にキャッシュに書込めるようにする。
【００１４】
この発明は、命令が要求されていることを判断するステップと、要求される命令が命令キャッシュおよびプリフェッチバッファシステムの命令キャッシュ部分にあるかどうかを判断するステップと、もしそこにあれば要求される命令を命令キャッシュ部分からフェッチするステップと、もし命令キャッシュ部分になければ要求される命令を外部メモリからフェッチするステップとを含む、マイクロプロセッサ内の命令を操作するための方法をも提供する。さらにこの発明の教示に従う方法は、命令キャッシュおよびプリフェッチバッファシステムのプリフェッチバッファ部分の中の外部メモリからのフェッチされた命令を受取るステップと、フェッチされた命令を同時に前記マイクロプロセッサの命令キャッシュ部分と処理ユニット部分とに送って実行させるステップとを含む。
【００１５】
したがって、この発明の目的はデータをキャッシュに書込むための命令バッファを効果的に実現することである。
【００１６】
この発明の別の目的は、プリフェッチされた命令をより有効に使用するプリフェッチバッファおよび命令キャッシュの組合せを提供することである。
【００１７】
この発明のさらに別の目的は、それが取って替わる先行技術の装置よりも使用する電力およびシリコンスペースが少ないプリフェッチバッファおよび命令キャッシュの組合せを提供することである。
【００１８】
この発明の他の目的、利点および新規な特徴は、以下に述べる発明の詳しい説明に基づき、添付の図面との関連で明らかになるであろう。
【００１９】
【発明の詳しい説明】
この発明を説明する際に便宜を図りかつわかりやすくするため、まずこの発明の教示に従って組合せられてよい、命令キャッシュの特定の一例とプリフェッチバッファの特定の一例とについて説明する。次に、組合せられた命令キャッシュおよびプリフェッチバッファを特徴とするこの発明の一実施例が説明される。この説明に続き、この発明の代替的実施例を案出するべく引き出され得るさまざまな教示を論じるつもりである。
【００２０】
ここで、同じまたは類似の要素がいくつかの図面に一貫して同一の参照番号で表されている図面、より特定的には図１を参照すると、包括的に参照番号１０で表される命令キャッシュが示される。命令キャッシュ１０はもちろん、この発明の実施例においてその１または２以上が使用され得る、同じまたは類似の機能を行なうことのできるいくつかのキャッシュのただ１例にすぎない。そのことを念頭に置いて、示されている命令キャッシュ１０はキャッシュアレイ１２とタグステータスアレイ１４とを含む。キャッシュアレイ１２は（さらに後の部分で詳しく説明する）４キロバイトのツーウェイセットアソシアティブキャッシュである。キャッシュ１０におけるブロックのサイズは４ワード（１６バイト）である。キャッシュ１０は従来、関連のプロセッサ（図示せず）によって最も最近にフェッチされた命令を記憶し、かつさらに各キャッシュブロックのためのステータス情報を維持する。
【００２１】
命令キャッシュ１０は、構成レジスタ内の命令キャッシュ不能化ビットによって能動化されたり不能化されたりしてよい。命令キャッシュ１０が能動化されると、命令のフェッチはキャッシュ１０によって満たされるだろう。命令キャッシュ１０が不能化されると、命令のフェッチは外部の命令／データメモリによってのみ満たされ、キャッシュ１０はフェッチされた命令を記憶しない。さまざまな命令がキャッシュ１０を無効にするだろう。
【００２２】
キャッシュ１０内のクリティカルルーチンを保つには、命令キャッシュ１０内のブロックは上述の構成レジスタの命令キャッシュロックフィールドによってロックされてよい。命令キャッシュロックフィールドは、キャッシュ１０内のすべてのブロックをロックすることもできるし、特定の列内のブロックをロックすることもできる。ブロックがロックされた場合、それが有効であれば交換することはできない。ロックされたブロックは無効であれば割当てられてよく、これによりクリティカルルーチンは単にそのルーチンをキャッシュ１０が無効にされた後で実行するだけでキャッシュ１０の中にロードできるようになる。ロックされたブロックはまた、キャッシュも不能化されていない限り無効にはできないが、その場合不能化がロックに優先する。
【００２３】
命令キャッシュ１０は１ワード当り１つの有効ビットを有するので、部分的に有効なブロックをフェッチしかつ記憶することができる。リロードの間、ワードの有効ビットは、そのワードがキャッシュに書込まれる際にセットされる。すべての有効ビットはプロセッサリセットによって、または前述の無効化命令の１つを実行することによって、単一のサイクルの間にクリアされる。
【００２４】
各命令キャッシュブロックは、キャッシュインタフェースレジスタおよび／またはキャッシュデータレジスタを介してアクセス可能であろう。キャッシュインタフェースレジスタはアクセスされたブロックへのポインタを含み、アクセスされたフィールドを特定する。キャッシュデータレジスタはデータをキャッシュへおよびキャッシュから転送するのに用いられてよい。そのようなキャッシュデータレジスタの内容は、キャッシュの書込またはレジスタの読出の際に消えてしまうかもしれないので、キャッシュ１０はキャッシュのリローディングからの干渉を防ぐためキャッシュフィールドが読出や書込をされている間は不能化されるべきである。
【００２５】
ここで図２を参照すると、包括的に参照番号１６で表される個々の命令キャッシュブロックの編成が示される。図２では、ブロック１６が複数個の命令ワード１８を関連のアドレスタグおよびステータス表示部２０とともに含むということが見てとれるだろう。考えられるステータスの表示としては、図２で示される「有効」の他に、スーパバイザモードであるかユーザモードであるかの表示、アドレスが（変換された／されていない、および物理アドレス／仮想アドレス）であるといった表示が含まれる。キャッシュ１０にはそのようなブロック１６が２５６個あり、各々１２８ブロックの２つの列として編成される。アクセスには、特定の列およびブロックが第１のフィールドにおけるいくつかのビット（すなわち命令アドレスにおけるビット１０−４）によって選択される。次に、ブロック内のアクセスされたフィールドは第２のフィールド（すなわちビット３１：１１）と比較される。命令ワードがアクセスされると、命令はさらにアドレスの下位の２ビット（すなわちビット３−２）によって選択される。もちろん、当業者には明らかであろうように、そうしなければアクセスがすぐに悪影響を受ける。
【００２６】
ここで図３を参照すると、キャッシュデータレジスタ内の、包括的に参照番号２２で表される命令ワードが示される。図３は、３２ビット命令が命令キャッシュ１０（図１を参照）から読出され、またはそこへ書込まれてよいということを示す。
【００２７】
ここで図４を参照して、キャッシュデータレジスタ内の命令アドレスタグおよびブロックステータスが示される。図４では、（包括的に参照番号２４で表される）ビット３１ないし１１が命令アドレスタグフィールドを構成することが見てとれるだろう。命令アドレスタグフィールド２４は、キャッシュブロックによってどのアドレスが満たされるかを特定する。図４で示される特定の実施例では、たとえばビット１０ないし６（参照番号２６で表される）が予約されている。ビット５ないし２（包括的に参照番号２８で示される）は有効ビットである。対応する命令ワードが有効であれば、このフィールドにはビットがセットされる。ここで説明される特定の実施例では、最上位ビットはブロック内の４番目のワードのための有効ビットであり、最下位ビットはブロック内の第１のワードのための有効ビットである（図２参照）。キャッシュ内のすべての有効ビットは単一のサイクルでプロセッサリセットによって、および無効化命令の実行によってクリアされる。最後に、図４で示される特定の実施例では、ビット１−０（包括的に参照番号３０で表される）はステータスビットである。
【００２８】
キャッシュヒットおよびミスに関連して、サイクルごとに、プロセッサのプログラムカウンタのビットがキャッシュアレイ１２およびタグアレイ１４（図１参照）にアクセスするのに用いられる。プログラムカウンタのビット１０−４はキャッシュアレイ１２およびタグアレイ１４の列０および１にアクセスするのに用いられる。タグフィールドがアレイから読出される際、プログラムカウンタのビット３１−１１は各列のタグエントリにおいて命令アドレスタグフィールド（たとえば図４のフィールド２４）と比較される。列の１つに対してプログラムカウンタのビット３１−１１が命令アドレスタグフィールド（たとえばフィールド２４）と一致し、かつステータスビットが一致し、アクセスされたワードの有効なステータスビットが１であり、命令キャッシュが不能化されていれば、キャッシュヒットが検出される。いずれかの列のブロックに対してこれらの条件があてはまらなければ、キャッシュミスが起こる。
【００２９】
キャッシュミスが検出されてキャッシュ１０が能動化されると、プロセッサは外部命令フェッチを開始することによって求められている命令をキャッシュ内に位置付けようとする。これは「キャッシュリローディング」と呼ばれる。キャッシュ１０が不能化されると、プロセッサは不能化されたキャッシュを更新しないので、求められている命令はキャッシュの中に位置付けられない。同様に、プロセッサはロックされた列内の有効なブロックを交換しない。
【００３０】
ミスが検出されると、普通は交換のために候補ブロックが選択され、リロードされた命令は選択されたブロックの中に位置付けられる。多くの交換アルゴリズムを使用することができるが、その１つは以下のようなものである。
【００３１】
・キャッシュサーチの間にアクセスされたブロックの１つが無効であれば、この無効ブロックは選択されて交換される。双方の列が無効ブロックを含んでいれば、列０のブロックが選択される。
【００３２】
・双方のブロックが有効であり、かつどちらもロックされていない場合、交換されるブロックは任意に選択される。
【００３３】
・列０のブロックがロックされておりかつ有効であり、列１のブロックがロックされていなければ、列１のブロックが選択される。
【００３４】
・キャッシュ全体がロックされており、どちらの列にあるブロックも有効であれば、どのブロックも交換することはできない。命令のフェッチは外部メモリによって満たされ、命令はキャッシュの中に入れられない。
【００３５】
一旦候補ブロックが選択されると、そのタグは求められているアドレスに応じてセットされ、すべての有効ビットがリセットされる。外部命令フェッチは、プロセッサが要求する命令で始まり、分岐または優先度の高い外部アクセスが起こるかキャッシュ１０の中に命令が見つかるまで続く。プロセッサは最初の命令が受け取られるとすぐに命令を実行し始め、実行と並行して残りのキャッシュリロードが起こる。最初の命令がフェッチされた後、後に続くブロック内の命令がフェッチされ、外部メモリから受け取られるにつれてキャッシュの中に書込まれる。ワードのための有効ビットは、フェッチにＤＲＡＭエラーが全くないと仮定すると、ワードが書込まれたときにセットされるが、エラーがあれば有効ビットはセットされない。プロセッサパイプラインがプリフェッチの間に立ち往生すると、ブロックの残りのために受け取られた命令は（後に説明する）プリフェッチバッファの中に入れられ、デコード段がそれらを受入れられるようになるまでそこに留まる。
【００３６】
リロードの間に取られた分岐が起こるか、優先度の高い動作（たとえばＤＭＡ、ロードミス、またはストアされたバッファがいっぱいになってしまったこと）のためにメモリインタフェースが必要とされる場合、リロードは即座に止められ、分岐が取られるか、または他の外部アクセスが行なわれる。その後、次に要求される命令がキャッシュの中になければリロードが再開されるだろう。分岐の場合、目標とされる命令のためにリロードが生じるかもしれない。
【００３７】
命令のプリフェッチに関連して、プロセッサは外部フェッチを開始した後、求められているワードを越えても命令を外部でフェッチし続けなければならないかもしれない。実行に先立ってそのような命令が要求された場合、外部メモリには、そのメモリに十分な帯域幅があれば、待ち状態なしでフェッチを行なうのに余るほど十分な時間を与えられる。これは、バーストモードまたはページモードのメモリシステムに特に適切である。
【００３８】
理想的には、命令キャッシュ１０でのように命令キャッシュを使用するシステムは、キャッシュミスをサービスしながら次にシーケンシャルなキャッシュブロックがあるか否かを確認する。そのような場合、現在のブロックのフェッチが完了する前に、プロセッサは次のブロックが存在するかどうかを知る。プロセッサはブロック内のすべての命令が有効であれば、次のブロックが存在するものと考える。有効でない命令が１つでもあれば、プロセッサはブロック全体が存在しないものと考えて外部フェッチを続け、必要であればタグフィールドをセットすることによってブロックを割り当てる。プロセッサは現在のブロックのためのすべてのフェッチを開始してしまえば即座に次のブロックに対するプリフェッチを開始することができるが、現在のブロックの中に次のブロックを不必要なものとする取られた分岐がにある場合はその限りではない。
【００３９】
外部でフェッチされた命令は、それらが受け取られた後のサイクルでプリフェッチバッファ（図５参照）に入れられる。プリフェッチバッファから、命令はキャッシュに書込まれ、デコーダに送られる。デコーダがパイプラインの立ち往生（ｓｔａｌｌ）  のために命令を受入れられない場合、その命令は立ち往生の状態がもはやなくなるまでプリフェッチバッファの中に留まる。命令は、デコーダに送られキャッシュに書込まれて初めてプリフェッチバッファから回収される（ｒｅｔｉｒｅｄ）  。
【００４０】
したがって、プリフェッチバッファの主な目的は、命令キャッシュを含むシステムがプロセッサのデコーダ段に直接に結合されることによる複雑化を伴わずに外部命令フェッチを中断するための、便利な、および／または効果的な点に到達できるようにすることである。たとえばロードミスは、命令キャッシュのリロードのキャンセルを待って、リロードがキャンセルされるまでパイプラインホールドを引起こす。パイプラインホールドの間、デコーダはリロードされた命令を受取ることには使えない。パイプラインホールドの状態が検出されるとき、プロセッサはフェッチのさまざまな段にある３つの命令を有する。プリフェッチバッファはこれらの命令をキャッシュ１０に書込むおよび／またはデコーダに送ることができるようになるまで記憶しておくのに用いられる。パイプラインホールドの間に受け取られる命令は、そうするための自由なサイクルがあるにもかかわらず、キャッシュ１０に書込まれることはない。それを行なうと、キャッシュプログラム制御装置がプロセッサのフェッチプログラム制御装置と違ったものになり、プロセッサによって必要とされる命令がキャッシュ１０からすぐに入手可能でないため、パイプラインの再開始を複雑にするだろう。パイプラインホールドの間、プロセッサが要求する次の命令はプリフェッチバッファの中で保持される。このことはフェッチ装置の動作を簡略化する。すなわちパイプラインホールドに応じてプリフェッチバッファとキャッシュとの間で切換えを行なうよりも、リロードの間命令は常にプリフェッチバッファによって供給されると仮定する方が簡単なのである。
【００４１】
この発明の命令キャッシュを含む、より大きいシステムの実施例では、プリフェッチすることで、次の要求されるブロックがキャッシュ１０にあると判断されるまでキャッシュの割当、外部フェッチ、およびリローディングが続くようにされ得る。次に要求されるブロックは順次的にアドレス指定されてもよいし、非順次的にアドレス指定されてもよい。順次的アドレス指定では、プロセッサは現在のブロックのリロードに関してあるきまった時間にヒットについて知る。対照的に、非順次的フェッチはリロード中のどの時点でも起こり得る。
【００４２】
分岐のため命令のプリフェッチを終わらせることは、いくつかの要素によって複雑化される。第１に、命令はブロックがリロードされている間に実行されるので、分岐は現在のブロックをリロードしている間のどの時点でも起こり得る。第２に、目標とされる命令は、キャッシュ１０の中でヒットすることもあり得るしミスすることもあり得る。目標がヒットであれば、プロセッサは外部フェッチを終了する。目標がミスであれば、プロセッサは現在のフェッチを止めて新しいフェッチを再開しなければならない。最後に、現在のブロックのリロードは目標とされる命令がフェッチされ得るより前にキャンセルされなければならない。
【００４３】
分岐がプリフェッチの間にとられるならば、次の順次的なアドレス指定されたブロックのプリフェッチを止めるのには、このブロックが必要とされるのは、たとえば次のブロックに分岐遅延命令があるためにその分岐がブロックにおける最後の命令である場合のみであっても、決して十分な時間はない。したがって、いくらかの外部メモリ容量が、必要とされるフェッチのために分岐を越えてとられ、これらの命令はキャッシュ１０の中に存在しなくても排棄される。命令キャッシュとバッファされたデータキャッシュとを両方とも含むシステムでは、外部メモリインタフェースが同時に命令とデータアクセスとのために必要とされることはまれである。しかしながら、命令がキャッシュリロードの間にデコードされた場合、もし命令のリロードの間にデータキャッシュ内でロードがミスするか、または一杯になった書込バッファに記憶が行なわれるならば、命令およびデータアクセスの間で衝突があるかもしれない。
【００４４】
データアクセスが命令のアクセスと衝突した場合、命令のフェッチはデータアクセスをサービスする前にキャンセルされるだろう。データアクセスを作り出すロードまたは記憶の命令は、リロードがキャンセルされるのを待っている間に実行を完了することを許される。しかしながら、ロードまたは記憶はライトバック段で保持され、後に続く命令はもっと早いパイプライン段に保持される。これにより、外部ロード／記憶アクセスは命令のフェッチがキャンセルされた直後に開始することができる。
【００４５】
一旦データアクセスのサービスが完了すると、外部フェッチを再び始めることができる。これは、キャッシュのミスを検出しかつ外部フェッチを開始するのに用いられる通常のメカニズムによってトリガされてよい。別のデータアクセスがリロードが始まる前に要求される場合（すなわち別のロードまたは記憶が命令のストリームの中で第１のロードまたは記憶のすぐ後に続く場合）、リロードの前に第２のロードまたは記憶が行なわれる。
【００４６】
ロードまたは記憶が分岐の遅延命令であり、分岐の目標がキャッシュ１０の中でミスである場合、その分岐の目標とされる命令のフェッチはロードまたは記憶のための外部アクセスが行われる前に完了されてよい。
【００４７】
命令キャッシュ１０がマッピングされたＤＲＡＭアドレスでアクセスされた場合、ＤＲＡＭマッピングがキャッシュ１０における命令のマッピングに影響を与えるようなやり方で変化させられると必ず、キャッシュ１０のすべての内容はフラッシュされる（ｆｌｕｓｈ）  だろう。フラッシュは各キャッシュブロックのすべての有効ビットをリセットすることによって達成される。有効ビットは、プロセッサのリセットによって、ならびに割込復帰および／または無効または類似の機能を実行することによって単一の各サイクルの中でリセットされてよい。
【００４８】
無効化命令が実行される場合、システムは、次の分岐または次のキャッシュブロック境界のうちどちらか先のものが来るまで有効ビットをリセットしない。無効化命令がブロックにおける最後の命令であれば、無効化が起こるブロック境界は次のブロックの終わりにある。これにより、プロセッサパイプラインは無効化命令が実行されるとデコード中の命令の実行を完了できるようになり、それを強制的にパイプラインの中で無効化し外部で再フェッチすることはない。
【００４９】
命令キャッシュと命令プリフェッチバッファとを個別に説明してきたが、これよりこの発明の教示に従ったそれらの組合せについて論じる。そのような組合せを説明するにあたって便宜を図りかつわかりやすくするために、たくさんの可能な例の中からただ一例に焦点をあてる。この例は４ワード命令プリフェッチバッファ、すなわち命令キャッシュ（図２参照）のブロックのサイズと同じ数のワードを有するバッファを仮定する。キャッシュ自体は各々３２ビットを備える４つのブロックとして編成され、各キャッシュブロックに４つのプリフェッチバッファが実現される。プリフェッチバッファはキャッシュと直接に接続されて実現されるので、バスは全く必要ではない。
【００５０】
ここで図５を参照すると、この発明の教示に従う組合せの命令キャッシュおよびプリフェッチバッファが示される。より特定的には、図５では命令キャッシュの第１のブロック（包括的に参照番号３２で表される）、および同じ命令キャッシュの第２のブロック（包括的に参照番号３４で表される）が、その間に配設されかつ直接に接続されたプリフェッチバッファ（包括的に参照番号３６で表される）とともに示される。プリフェッチバッファ３６は４ワードバッファとして表され、命令キャッシュのブロックサイズと、ワード数の点で対応する。構造および動作についてのさらなる詳細は以下で述べられる。しかしながら、一般に図５で示される装置は外部メモリの代わりとなる迅速なメモリとして働くものである。
【００５１】
図５で表される装置の動作をこれより説明するが、要求される命令がキャッシュの中にない場合、それらは外部メモリからフェッチしなくてはならない。プリフェッチバッファ（たとえばバッファ３６）は命令を受取り、それらを記憶のためのキャッシュと実行のための中央処理装置との双方に送る。
【００５２】
場合によっては、キャッシュには現在の命令のブロックはあっても次の命令のブロックはないかもしれない。そのような場合には、次のブロックをプリフェッチすることができる。現在のブロックの完了にあたって、次の命令がすでにプリフェッチバッファの中に存在するだろう。これにより、デコードユニットへの命令のストリームが中断されないということが確実になる。次のブロックで早くとられた分岐は、デコードユニットに送る際にキャッシュを更新するだけなので、プリフェッチ命令のほとんどを無駄にするだろう。
【００５３】
プリフェッチバッファ３６は通常書込および読出のカウンタで実現される。新しくフェッチされた命令は書込カウンタを増加させ、読出カウンタは命令がデコードに送られる際に増加する。書込カウンタは命令バッファの先頭を指し、読出カウンタは命令バッファの末尾を指す。命令バッファは先入れ先出しで動作する。プリフェッチバッファ３６内の有効な命令を示すのには、１組の有効ビットを用いることもできる。もう１組の有効ビットを、命令がキャッシュを更新したかどうかを示すために用いることができる。キャッシュに書込を行ない、デコードに命令を送るために１組の制御を行なう代わりに、２つの動作は独立している。このためにかかるのはキャッシュへのデータの書込を示すための追加された４つの有効ビットである。
【００５４】
プリフェッチバッファ３６内の命令はブロックアドレス（すなわち４ワードのブロック内のワード）とともにアドレスを有していなければならない。そのような装置の最も大きな利点は、次の命令のブロックがプリフェッチされたときに顕著となる。そのような場合、プログラムカウンタが次のブロックまで増加するにつれて、プリフェッチされた命令のすべてが即座にキャッシュを更新することができる。キャッシュを一度に更新することによって、動作電力の要求は低減される。分岐がとられると、インタフェースユニットは通常必要な命令を越えていくつかのワードをフェッチする。ブロック内のこれら余分なワードはここでキャッシュに入れることができる。
【００５５】
前述のように、図５の実施例はこの発明の教示に従うプリフェッチバッファおよび命令キャッシュの組合せにおける可能な実施例の１つにすぎない。図５の実施例はマッピングの形式、すなわち１つのセットの要素と別のセットの要素との間に直接な対応関係が確立される動作を用いる。図６ないし８はマッピングの代替例を表わす。図６はダイレクトマッピングを示す。ダイレクトマッピングの配列では、各アドレスはデータアレイの中のデータの単一のセットに対応する。そのような配列ではリクエストの上位ビット３８は、タグアレイ４０の中へ送り込まれ、リクエストの下位ビット４２はデコーダ４４に送り込まれる。デコーダ４４とタグアレイ４０とは次に協働してデータアレイ４８のデータの選択ブロック４６に導かれる。
【００５６】
図７はツーウェイセットアソシアティブマッピングを表わす。図７で表されるツーウェイセットアソシアティブマッピングは、図６で表されるダイレクトマッピングとは２つのタグ５０および５２、ならびに２つのデータのブロック５４および５６が互いに対応するという点で異なっている、すなわち図６の配列のように単に１対１の対応関係があるわけではない。
【００５７】
図８はさらに別の代替的なマッピング技術、すなわちフルアソシアティブマッピングを表わす。フルアソシアティブマッピングではタグアレイ４０とデータアレイ４８とのそれぞれの間に直接的な完全にアソシアティブな関係があり、デコーダの必要性を回避している。
【００５８】
前に述べたことすべてに基づいて、当業者はこの発明がプリフェッチバッファを直接作動的に接続された命令キャッシュを含むキャッシュメモリシステムを提供するものであるということを今や完全に理解かつ認識しているはずである。この発明はまた、プロセッサ内の命令を操作するための方法をも提供する。この発明の実施例は、命令キャッシュおよびプリフェッチバッファを相互接続するバスが必要とされず、命令バッファがプリフェッチされた命令の利用を改良し、電力とシリコンスペースとの使用を減じてキャッシュ内にデータを効果的に書込むことができるようになるので、先行技術に勝る改良となる。この発明の実施例を構成するにあたり、ダイレクトマッピング、ツーウェイセットアソシアティブマッピング、およびフルアソシアティブマッピングのようなマッピングを何タイプ用いてもよい。
【００５９】
上の教示に照らして、この発明に対し数多くの修正および変形がなされてよいことは明らかである。したがって、前掲の特許請求の範囲内で、この発明は本文中で特定的に述べられたものと異なって実施されてもよい。
【図面の簡単な説明】
【図１】命令キャッシュ編成のブロック図である。
【図２】命令キャッシュ内の命令ブロックの図である。
【図３】キャッシュデータレジスタ内の命令ワードの図である。
【図４】キャッシュデータレジスタ内の命令アドレスタグおよびブロックステータスの図である。
【図５】この発明の教示に従う、プリフェッチバッファおよび命令キャッシュの組合せの図である。
【図６】ダイレクトマッピング、すなわちこの発明の実施例で用いられてよい１コンセプトを表わす図である。
【図７】ツーウェイセットアソシアティブマッピング、すなわちこの発明の実施例で用いられてよい１コンセプトを表わす図である。
【図８】フルアソシアティブマッピング、すなわちこの発明の実施例で用いられてよい１コンセプトを表わす図である。
【符号の説明】
１０  命令キャッシュ
１２  キャッシュアレイ
１４  タグステータスアレイ
３２  命令キャッシュの第１のブロック
３４  命令キャッシュの第２のブロック
３６  プリフェッチバッファ
【図１】
0003577331.tif 000002
【図２】
0003577331.tif 000003
【図３】
0003577331.tif 000004
【図４】
0003577331.tif 000005
【図５】
0003577331.tif 000006
【図６】
0003577331.tif 000007
【図７】
0003577331.tif 000008
【図８】
0003577331.tif 000009