(57)【特許請求の範囲】
【請求項１】
データ処理装置であって、
命令ストリームを処理するためのパイプラインプロセッサと、
複数のキャッシュラインを有する分岐キャッシュメモリであって、前記各々のキャッシュラインが、
前記命令ストリーム内の分岐命令のアドレスを識別するためのキャッシュタグと、
前記分岐命令に続いて処理されたネクスト分岐命令のアドレスを識別するネクスト分岐データとを記憶するように動作する、前記分岐キャッシュメモリと、
キャッシュライン内の最も最近に読まれた前記ネクスト分岐データが前記パイプラインプロセッサによって処理されるアドレスを示す時、前記複数の前記キャッシュタグを前記パイプラインプロセッサで処理される前記アドレスと比較するためのトリガをかけるように応答する、キャッシュ読み取りトリガ手段を含むことを特徴とする前記データ処理装置。
【請求項２】
請求項第１項記載の装置に於て、各キャッシュラインが、前記キャッシュライン内の前記ネクスト分岐命令の後で処理される、分岐先の命令のアドレスを示すための分岐先へのポインタを記憶するように動作可能であり、かつキャッシュライン内の前記最も最近に読み込まれたネクスト分岐データが、前記パイプラインプロセッサで処理される前記アドレスを示す時に、前記分岐先へのポインタを用いて前記命令ストリームの前記分岐先命令への分岐を制御するためのターゲットアドレス手段を含むことを特徴とする、前記装置。
【請求項３】
請求項第２項記載の装置に於て、各キャッシュラインが前記ターゲット命令を記憶するように動作可能であり、かつ前記最も最近に読み込まれたキャッシュラインの前記ネクスト分岐データが前記パイプラインプロセッサで処理される前記アドレスを識別した時に、前記キャッシュライン内の前記分岐先命令を前記パイプラインプロセッサに供給するためのターゲット命令手段を含むことを特徴とする、前記装置。
【請求項４】
請求項第１項記載の装置に於て、各キャッシュラインに対して、前記キャッシュタグが前記分岐命令の直前の命令のアドレスを含むことを特徴とする、前記装置。
【請求項５】
請求項第１項記載の装置に於て、各分岐ラインに対して、前記ネクスト分岐データが前記ネクスト分岐命令の直前の命令のアドレスを識別することを特徴とする、前記装置。
【請求項６】
請求項第５項記載の装置に於て、前記ネクスト分岐データがアドレスの下位ビットを含むことを特徴とする、前記装置。
【請求項７】
請求項第５項記載の装置が、前記パイプラインプロセッサで処理される前記アドレスを記憶するためのプログラムカウンタレジスタを含み、前記キャッシュ読み取りトリガ手段が前記プログラムカウンタレジスタからの前記アドレスと前記ネクスト分岐データとを比較し、前記分岐キャッシュメモリに対してイネーブル信号を生成する比較器とを含むことを特徴とする前記装置。
【請求項８】
請求項第１項記載の装置が、前記命令ストリーム内の分岐命令を検出し、分岐検出信号を発生させるための分岐命令検出器と、前記分岐検出信号に応答しキャッシュラインに対して前記パイプラインプロセッサで処理される前記アドレスから導かれたネクスト分岐データと、前記パイプラインプロセッサで処理されるアドレスから導かれたキャッシュタグとを、直前の分岐命令が検出されたときに書き込むためのキャッシュ書き込み手段とを含むことを特徴とする、前記装置。
【請求項９】
請求項第８項記載の装置に於て、各キャッシュラインが前記ターゲット命令を格納するように動作可能であり、前記最も最近に読み込まれたキャッシュラインの前記ネクスト分岐データが前記パイプラインプロセッサで処理される前記アドレスを識別する時、前記キャッシュラインの前記ターゲット命令を前記パイプラインプロセッサに対して供給するためのターゲット命令手段とを含み、前記キャッシュ書き込み装置が前記分岐命令をデコードし判定して前記キャッシュラインに前記分岐ターゲットポインタと前記ターゲット命令とを書き込むことを特徴とする前記装置。
【請求項１０】
データ処理方法であって、
命令ストリームをパイプライン処理し、
複数のキャッシュラインを有する分岐キャッシュメモリの、前記各キャッシュライン内へ、
前記命令ストリーム内の分岐命令のアドレスを識別するキャッシュタグと、
前記分岐命令に引き続いて処理されるネクスト分岐命令のアドレスを識別するネクスト分岐データとを記憶し、
最も最近に読み込まれたキャッシュラインの前記ネクスト分岐データが前記パイプラインプロセッサで処理されるアドレスを識別した時に応答し、前記複数のキャッシュラインの前記キャッシュタグと前記パイプラインプロセッサで処理される前記アドレスとの比較をトリガする手順を含むことを特徴とする前記データ処理方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は分岐キャッシュを使用したデータ処理の分野に関する。
【０００２】
【従来の技術】
各々の命令の実行を、いくつかのフェーズ（通常パイプラインステージと呼ばれる）に分割するパイプライン技術を具備するコンピュータが知られている。良好なパフォーマンスをこの様なシステムから得るために、スムーズでかつ連続した命令のフローがパイプラインを通ることが重要である。命令のストリーム内の分岐命令の実行はこの望まれるスムーズなフローを中断しがちである。分岐命令を実行するためには、その命令を分岐命令として認識し、もし該分岐が条件分岐の場合は、プロセッサは、分岐が行われるべきかどうかを判断し、分岐の分岐先アドレスを決定し、次の命令を分岐先アドレスからフェッチしなければならない。パイプライン処理システムの命令ストリーム内に分岐命令が存在するとパフォーマンスを低下させるが、それは次の命令がパイプラインに供給される前に上記の処理が実行される必要が有るためである。
【０００３】
上記の問題を軽減するために、分岐キャッシュを用意することが知られている。分岐キャッシュは、分岐の分岐先アドレスを分岐命令のデコードに依ってではなくキャッシュから供給することにより分岐命令の実行時間を短縮する。これは通常は分岐命令のアドレスであるキャッシュタグを備え、そのキャッシュデータが分岐先命令のアドレスである分岐キャッシュを具備することにより実現される。
パイプラインに供給される各々の命令は分岐キャッシュ内のキャッシュタグと比較されるそれ自身の命令アドレスを有し、キャッシュヒットが発生すると、次に分岐命令が識別され分岐先アドレスがブランチキャッシュから供給されて、プロセッサに分岐命令のフルデコードを必要とする事なくロード命令を開始させる。
【０００４】
この様なブランチキャッシュの例はＩＥＥＥのコンピュータに関する論文集、巻４２，第４号、１９９３年４月、３９６ページ、”分岐先バッファの設計と最適化”、クリス  エイチ．パーレベルグ並びにアラン  ジエイ  スミス著、及びＩＥＥＥ技術報告、第ＣＳＬ−ＴＲ−９２−５５３号、１９９２年１２月、”大規模自己履歴を用いた分岐予測”、ジョン  ディー．ジョンソンに記述されている。
【０００５】
この様なブランチキャッシュを使用することによって、パイプラインシステム内の分岐命令に起因する遅延を減少させることに成功する一方で、システムの電力消費を増加させるという問題が生ずる。パイプラインに供給された各々の命令の命令アドレスをキャッシュメモリの全てのキャッシュタグと比較しなければならないため、大量の電力を消費する不都合を生ずる。この技術分野で不変の目的は、携帯式電池で電力供給される機器製造を支援し、また熱消費問題を軽減する為に電力消費を削減することである。
【０００６】
【発明の目的と要約】
本発明の目的は、上記の問題を解決することである。
【０００７】
本発明の特徴の１側面は、
（ａ）命令ストリームを処理するためのパイプラインプロセッサ、
（ｂ）複数のキャッシュラインを有する分岐キャッシュメモリ、ここで前記各々のキャッシュラインは、
（ｉ）前記命令ストリーム内の分岐命令のアドレスを識別するためのキャッシュタグと、
（ｉｉ）前記分岐命令に続いて処理されたネクスト分岐命令のアドレスを識別するネクスト分岐データとを記憶するように動作する
（ｃ）最も最近に読まれたキャッシュラインの前記ネクスト分岐データが、前記パイプラインプロセッサで処理されるアドレスを識別した時に、前記複数の前記キャッシュタグと前記パイプラインプロセッサで処理される前記アドレスとの比較をトリガする、キャッシュリードトリガ手段とを含む、データプロセッサを提供することである。
【０００８】
分岐キャッシュ内にネクスト分岐データを用意することは好ましい結果を有し、すなわちこのデータをネクスト分岐命令がいつ発生するかの予測に使用することができ、従って処理される命令が分岐命令であると示される際に、キャッシュの読み出しを制御してキャッシュヒットをテストすることが可能である。このことにより、分岐キャッシュを行うために必要な読みだし操作数が削減され、従って分岐キャッシュにより得られる高パフォーマンスを維持しつつ、システムの電力消費を好適に低減する。
【０００９】
各々のキャッシュラインはキャッシュライン識別子用のキャッシュタグが識別する分岐命令に続いて実行される命令のアドレスを識別するためのデータを記憶できることが理解されよう。これは分岐キャッシュを構成する際の通常の方法である。しかしながら、この様な構成では、キャッシュヒットが識別されねばならず、キャッシュから取り出されるターゲットデータと処理に先だってプロセッサに供給されるターゲットデータは連続しているであろう。
【００１０】
本発明の提出された実施例では各キャッシュラインは前記キャッシュラインの前記ネクスト分岐命令の後に処理されるターゲット命令のアドレスを識別する分岐先ポインタを記憶するように動作し、前記最も最近に読まれたキャッシュラインの前記ネクスト分岐データが前記パイプラインプロセッサで処理される前記アドレスを識別した際に、前記分岐先ポインタを用いて前記命令ストリームを前記ターゲット命令に分岐制御させるためのターゲットアドレス装置を含む。
【００１１】
この様にして、個別の分岐命令に付随するキャッシュタグを具備した各キャッシュラインは、後続の分岐命令のターゲットアドレスを記憶する。そしてキャッシュラインがリードされる時に、該キャッシュラインからのネクスト分岐データはネクスト分岐が発生場所を識別し、キャッシュラインからの分岐先ポインタは、処理のネクスト分岐による移動先を識別する。従って、ネクスト分岐データが分岐に到達したことを示す時には、分岐先ポインタは既にキャッシュから取り出されており、プロセッサで直接使用することが可能である。
【００１２】
同様な方法で、本発明の提出された実施例では各キャッシュラインは前記ターゲット命令を記憶するように動作可能であり、前記最も最近に読み取られたキャッシュラインの前記ネクスト分岐データが前記パイプラインプロセッサで処理されるべき前記アドレスを識別する時に、前記キャッシュラインの前記ターゲット命令を前記パイプラインプロセッサに供給するためのターゲット命令装置を含む。
【００１３】
この特徴によれば、ネクスト分岐命令に対するターゲット命令は各キャッシュライン内に記憶されており、ネクスト分岐命令に到達した時に直ちに利用可能である。キャッシュは各分岐に対して複数の命令を記憶することも可能である。これは分岐を取り扱うために利用できる時間を増すことが出来るが、これは必要なキャッシュサイズの増大とのバランスである。
【００１４】
本発明の別の好適な特徴は、各キャッシュラインに対して前記キャッシュタグが前記分岐命令の直前の命令のアドレスを含むことである。
【００１５】
この様にして、各分岐命令は先行命令のアドレスによって識別されることが出来、従って先行命令がパイプラインに達すると、分岐命令に対するターゲットアドレスを回復するために、分岐命令自体をパイプラインの中に一度もロードする事なくブランチキャッシュ参照をトリガ出来る。
【００１６】
似た方法で、各分岐ラインに対して前記分岐データが前記ネクスト分岐命令の直前の命令のアドレスを識別することが好適である。
【００１７】
ネクスト分岐データが多数の形式を取り得ることが理解されよう。例えば、ネクスト分岐データはネクスト分岐命令に到達する前に実行される命令数の形式を取ることもできる。次にこの数は各々の命令が実行される毎に、ネクスト分岐命令に達するまでカウントダウンされる。別の代替方法は、ネクスト分岐命令の命令アドレスを利用することである。しかしながら本発明の提出された特徴では、前記ネクスト分岐データはアドレスの低位ビットを含む。
【００１８】
ネクスト分岐命令のアドレスの低位ビットのみをネクスト分岐データとして使用することは、ブランチキャッシュ内に記憶される必要のあるビット数を軽減するという特長を有する一方で、システムのパフォーマンスに大きな影響を与えることも無い。実際ほとんどの分岐は比較的短くアドレスの低位ビットはネクスト分岐命令のアドレスを特定する上で一般的に十分である。
【００１９】
キャッシュリードトリガ装置を実現するための簡便な方法は、前記パイプラインプロセッサで処理される前記アドレスを記憶するためのプログラムカウンターレジスタを用意し、そこで前記キャッシュリードトリガ装置が前記プログラムカウンターレジスタからの前記アドレスと前記ネクスト分岐データとを比較するための比較器を有し、前記ブランチキャッシュメモリにイネーブル信号を出力するやり方である。
【００２０】
ブランチキャッシュが有効データで簡便に満たされるようにするために好適なことは、分岐命令を検出するための分岐命令検出器を、前記命令ストリーム内に分岐検出信号を発生させる目的で具備し、前記分岐検出信号に応答し前記パイプラインプロセッサで処理される前記アドレスから導き出されたネクスト分岐データと、前記パイプラインプロセッサで処理されるアドレスから導き出されたキャッシュタグとを、直前の分岐命令が検出された時にキャッシュラインに書き込むためのキャッシュ書き込み手段を具備することである。
【００２１】
本発明の実施例に於てはまた、分岐先ポインタとターゲット命令とを各キャッシュライン内で使用しており、好適なことは前記キャッシュ書き込み装置が前記分岐命令をデコードして前記分岐先ポインタと前記ターゲット命令とを判定し前記キャッシュラインに書き込むことである。
【００２２】
別の特徴から見て、本発明は以下の手順を含むデータ処理方法を提供する、
（ａ）命令ストリームをパイプライン処理し、
（ｂ）複数のキャッシュラインを有する分岐キャッシュメモリの各キャッシュライン内へ、
（ｉ）前記命令ストリーム内の分岐命令のアドレスを識別するキャッシュタグと
（ｉｉ）前記分岐命令に引き続いて処理されるネクスト分岐命令のアドレスを識別するネクスト分岐データとを記憶し、
（ｃ）最も最近に読み込まれたキャッシュラインの前記ネクスト分岐データが前記パイプラインプロセッサで処理されるアドレスを識別したことに応答し、前記複数のキャッシュラインの前記キャッシュタグと前記パイプラインプロセッサで処理される前記アドレスとの比較をトリガする。
【００２３】
上記の、またその他の本発明の目的、特徴並びに特長は例示された実施例の以下の詳細な説明を添付図と組み合わせて読むことにより明かとなろう。
【００２４】
【実施例】
図１は分岐命令を含む命令のシーケンスを示す。命令の処理は順番に命令アドレスに沿って分岐命令、例えば命令Ｆまたは命令Ｙ、に達するまで進行する。パイプライン処理は通常多数のパイプラインステージ、例えば命令フェッチ、命令デコード、オペランドフェッチ、実行および結果書き込み、に細分される。従って分岐命令はパイプラインに沿っていくつかのステージを移動するまで完全には認識されず、その時間の間に、分岐の実行結果には従わない不適切な命令が命令アドレスのシーケンスからパイプラインに送出される。
【００２５】
図１に図示された場合では、分岐命令Ｆは命令Ｕへの分岐を引き起こす。従って命令Ｇ，Ｈ，Ｉ，Ｊ，．．．は分岐命令Ｆに続いて処理されるべきではない。同様に、命令Ｕへの分岐に続いて、処理は命令Ｖ，ＷおよびＸを通って別の分岐命令Ｙに達するまで進む。分岐命令Ｙは処理を命令Ｍに再び向け、ここから再び順番に進む。
【００２６】
パイプライン処理システム内でのこの様な分岐命令の発生に関する問題は知られている。表１はこれらの問題を図示し、図１に図示されたシーケンスを通して処理が進行する際の異なるパイプラインステージで実行される命令を示す。表１に於て分岐命令は、最終結果書き込みステージに達し、分岐が指し示すアドレスが使用可能となるまで完全には認識されず、またデコードされないものと仮定している。従って、表１に於て分岐命令Ｆに関する処理はパイプラインに沿ってそれが結果書き込みステージで完全に認識されるまで進行する。この時迄に命令Ｇ，Ｈ，ＩおよびＪは、これらは実際は分岐命令Ｆから見て実行されないにも係わらず先行のパイプラインステージに既にロードされてしまっている。これを処理するために、パイプラインプロセッサにはバックアウト機構が具備されており、ここでは部分的に実行された命令が廃棄される。これは表１のダッシュで示されている。
【００２７】
従って、分岐Ｆが結果書き込みステージに到達した時に、命令Ｇ，Ｈ，Ｉ及びＪは廃棄され分岐Ｆで示されるターゲットアドレスからターゲット命令Ｕが命令フェッチステージの中にロードされる。次にターゲット命令Ｕに続く命令Ｖ，Ｗ，Ｘ．．．のシーケンスが後続の処理サイクルの際にパイプラインの中にロードされる。
【００２８】
命令Ｇ，Ｈ，ＩおよびＪをパイプライン中への不必要なロードと、次にそれら命令を廃棄することにより、結果書き込みステージに達するまで、命令シーケンスが正しい順序でプロセッサ経由で送出される一方で、その間に該パイプラインプロセッサからは一切の有用な出力が得られない。４命令サイクルが生ずる。
【表１】
0003549595.tif 000002
【００２９】
表２はブランチキャッシュを有するシステムで同一の処理を行った場合示す。このシステムに於て、プロセッサの命令フェッチステージ内に送出された各命令はブランチキャッシュのキャッシュタグと比較される。このブランチキャッシュは対象としている分岐に関するターゲット命令アドレスを示す分岐命令のデータを含む。従って分岐命令Ｆが命令フェッチステージ内に送出される際に、ブランチキャッシュヒットが生じ、命令Ｕに対する命令アドレスがブランチキャッシュから取り出されて、命令Ｕを直ちに次の命令サイクルでロードすることを可能とする。
【表２】
0003549595.tif 000003
【００３０】
この様にして分岐命令Ｆはそれが結果書き込みステージに達するまでは完全にデコードされないにも係わらず、命令Ｕ，Ｖ，ＷおよびＸは先のパイプラインステージ内に既にロードされている。従って表１の中で示されているような分岐命令に続く冗長処理サイクルは発生しない。
【００３１】
表２に示されている動作は必要な分岐データはブランチキャッシュ内に存在すると仮定している。もしもそうでない場合は、分岐命令は表１に示されるようにデコードされる必要がある。この場合、分岐先を決定するために多数の冗長処理サイクルが結果として必要になる。同様のことが条件分岐にも言える。この場合もしも最も頻繁に起こる条件判定の結果、分岐が生じるのであれば、分岐データをキャッシュ内に記憶することが可能で、分岐はたとえそれが完全にデコードされていなくても実行するように仮定できる。平均として、これは処理時間を節約するであろう。条件分岐が起こりそうか否かの判定は、プログラムのコンパイルに際して行えるか、またはこれに代わって後方分岐が一般的に使用され、前方分岐は一般的には使用されないという様な規則を用いて行える。
【００３２】
表３は表２のブランチキャッシュシステムを洗練したものを示す。この場合、使用されるキャッシュタグは、分岐命令に先行する命令、例えば命令Ｅおよび命令Ｘの命令アドレスである。従ってこれらの命令がパイプラインの命令フェッチステージの中に挿入されキャッシュヒットが生じると、後続の命令は、分岐先既知の分岐命令であると認識される。従って分岐命令をパイプライン中に実際に置く必要はなく、分岐先の命令が直接パイプライン中に置かれる。表３に示されるように、この方法において処理は命令Ｅから命令Ｕへ、また命令Ｘから命令Ｍへ直接進行する。この洗練化により処理速度が上昇する。
【表３】
0003549595.tif 000004
【００３３】
図２はパイプラインプロセッサ２とブランチキャッシュ４とを含むシステムを図式的に示す。パイプラインプロセッサ２は５個のパイプラインステージ、命令フェッチ、命令デコード、オペランドフェッチ、実行および結果書き込み、を有する。しかしながらこれとは別の個数のパイプラインステージを有するパイプラインを使用できることも理解されよう。
【００３４】
命令はパイプライン２の命令フェッチステージ６の中へ、接続されている主記憶装置８（例えばＲＡＭまたはＲＯＭ）から、プログラムカウンタレジスタ１０の制御の下に送出され、このレジスタはパイプライン２の中へ送出される命令のアドレスを表わすプログラムカウンタ値ＰＣを記憶している。
【００３５】
ブランチキャッシュ４は複数のキャッシュライン１２を含み、その各々はキャッシュタグ（ＴＡＧ），到達値（ｒｅａｃｈ  ｖａｌｕｅ）（Ｒ；”ネクスト分岐データ”）、ターゲットアドレス（ＴＡ）そしてターゲット命令（ＴＩ）を記憶している。ブランチキャッシュ４は通常は低電力消費状態にあり、比較器１４からのイネーブル信号がＯＮの時にのみプログラムカウンタ値ＰＣと比較されるキャッシュタグを有する。ブランチキャッシュ４がイネーブルされると、プログラムカウンタ値ＰＣが、各キャッシュライン１２のキャッシュタグ値と並列に比較される。該比較時にキャッシュヒットが発生すると、到達値Ｒ、ターゲットアドレス値ＴＡおよびターゲット命令値ＴＩはブランチキャッシュ４から出力され、到達値ラッチ１６、ターゲットアドレスラッチ１８およびターゲット命令ラッチ２０に各々記憶される。
【００３６】
イネーブル信号は、比較器１４が到達値ラッチ１６内に現在記憶されている到達値Ｒとプログラムカウンタレジスタ１０の中に記憶されているプログラムカウンタ値ＰＣの下位ビットとが一致すると判定した時に、比較器１４によってＯＮとされる。もしも命令アドレスが１６ビットアドレスの場合、到達値Ｒには８ビットしか必要としないため、ブランチキャッシュ４内の記憶容量が節約される。この様にして到達値Ｒはプログラムカウンタ値ＰＣの下位８ビットと比較される。
【００３７】
到達値ラッチ１６と比較器１４の動作は、到達されるべきネクスト分岐命令を示す信号を生成することが理解されよう。しかしながら、到達値はフルアドレスのわずか８ビットであるため、到達値Ｒとプログラムカウンタ値ＰＣの下位８ビットが一致しても、ネクスト分岐命令の真の位置に到達することが出来ず、プログラムカウンタ値ＰＣがブランチキャッシュ４内のキャッシュタグと比較される時にキャッシュヒットが発生しない可能性がある。到達値の分解能は２８  ＝２５６であり、最悪の場合でもキャッシュヒットを導くためのブランチキャッシュ４を読み込む無駄な試行は２５６命令サイクル毎に一度しか生じない。これは全ネクスト分岐命令アドレスを保存しなければならないことに比較して、ブランチキャッシュ４内の記憶容量を節約すると言う点に於て価値のある妥協である。
【００３８】
比較器１４で生成されるイネーブル信号はネクスト分岐命令に到達出来ることを保証はしていないので、”真”のヒット信号はプログラムカウンタ値ＰＣがキャッシュタグに一致した時にブランチキャッシュ４から導かれる。このヒット信号は到達値ラッチ１６、ターゲットアドレスラッチ１８およびターゲット命令ラッチ２０にトリガを与え、キャッシュヒットを生成したキャッシュラインからのそれぞれの到達値Ｒ、ターゲットアドレスＴＡそしてターゲット命令ＴＩを記憶し、先行のキャッシュヒットからのそれらの内容をプログラムカウンタレジスタ１０および命令フェッチステージ６にそれぞれ出力する。到達値Ｒがネクスト分岐命令に到達したことを示す際には、プログラムカウンタ値ＰＣがキャッシュタグのいずれかと一致するか否かをチェックするためにキャッシュ読み込みが生じる。もしもキャッシュヒットが生じると、先行のキャッシュヒットからのターゲットアドレスＴＡおよびターゲット命令ＴＩがプログラムカウンタレジスタ１０と命令フェッチステージ６とにそれぞれ送られる一方で、今回のキャッシュヒットの結果である到達値Ｒ、ターゲットアドレスＴＡおよびターゲット命令ＴＩの新たな値がラッチされる。
【００３９】
分岐命令検出器２２はパイプラインプロセッサ２の命令フェッチステージ６の中に送出される命令を監視する。分岐命令が命令フェッチステージ６の中に置かれたことが分岐命令検出器２２で検出されると、分岐命令検出器２２は動作シーケンスにトリガを与え、その結果ブランチキャッシュ４のキャッシュライン１２の中にその分岐命令に対応するキャッシュデータが書き込まれる。
【００４０】
最初に、分岐命令に対応する先行のプログラムカウンタ値の下位ビット、ＰＣ−１が記憶される。次に、分岐命令がパイプラインプロセッサを通してその行き先をターゲットアドレスＴＡがすでに決定されているステージに向けると、これは記憶され、またターゲットアドレスＴＡが、対応するターゲット命令ＴＩを読み出すためにアクセスされている場合、これもまた記憶される。タグラッチ２４は先行キャッシュの直前の命令の全プログラムカウンタ値ＰＣを記憶するために用意されている。従って、タグラッチ２２は分岐命令を前回認識した時のプログラムカウンタ値ＰＣを今回の分岐命令まで記憶し、該カウンタＰＣは今回の分岐命令が生じた時点で今回の分岐命令に対するキャッシュタグとして使用される。キャッシュライン１２に対するデータが収集される四回に一度づつ、該データはブランチキャッシュの中に書き込まれる。
【００４１】
図３は図２のシステムがブランチキャッシュ４からデータを取り出す際の動作を図示する。図示されるように、ブランチキャッシュ４には既に要求された有効キャッシュデータがロードされている。プログラムカウンタ値ＰＣは命令Ａに対応するアドレスから開始し、順番に命令Ｂ，Ｃ．．と進行する。
【００４２】
先行する分岐命令（例えばＱ’）に行き当たったときに、キャッシュライン２６からデータがアクセスされて到達値ラッチ１６、ターゲットアドレスラッチ１８そしてターゲット命令ラッチ２０の中に読み込まれる。従って、到達値ラッチ１６は命令Ｅのアドレスの下位ビットに相当する値を記憶する。プログラムカウンタレジスタ１０が命令Ａ，Ｂ，Ｃ，．．．のアドレスを経て進むと比較器１４は到達値ラッチ１６の内容をプログラムカウンタ値ＰＣと比較し、これらが不一致であると判断してイネーブル信号をＯＦＦ状態にホールドする。イネーブル信号がＯＦＦ状態であることで、ブランチキャッシュ４は読み込まれず、ブランチキャッシュ４の不必要な読み込みの実行を避けることで、電力が節約できる。
【００４３】
図４は命令Ｅのパイプライン２での処理が開始し、命令Ｅが命令フェッチステージ６の中にロードされた時点を図示する。この時点でプログラムカウンタ値ＰＣは命令Ｅのアドレスに等しい。従ってプログラムカウンタ値ＰＣの下位８ビットは到達値ラッチ１６内の値に一致し、比較器１４はイネーブル信号をＯＮ
とする。イネーブル信号がＯＮであることにより、プログラムカウンタレジスタ１０からの全命令アドレスの値が全てのキャッシュタグと並行して比較され、分岐キャッシュヒットが真に生じたか否かの判定が行われる。
【００４４】
キャッシュヒットが真に生じた（すなわち、キャッシュライン２８に於て）時には、ヒット信号がＯＮとされ、到達値ラッチ１６が新たな到達値＆Ｘをラッチするようにさせ、ターゲットアドレスラッチ１８およびターゲット命令ラッチ２０がそれらの内容＆ＵおよびＵをプログラムカウンタレジスタ１０と命令フェッチステージ６とにそれぞれ出力するようにさせる。ヒット信号がＯＮとされることはまた、ターゲットアドレスラッチ１８およびターゲット命令ラッチ２０が、キャッシュヒットが生じたキャッシュライン２８から新たな値＆ＭおよびＭをラッチして記憶するようにさせる。
【００４５】
従って全体の動作はブランチキャッシュ読み込み試行は命令Ｅに到達した時にのみ実行され、この時点で分岐に引き続くターゲットアドレスＴＡおよびターゲット命令ＴＩが、分岐命令Ｆがデコードされたりまたはパイプラインプロセッサ２に入力されることなく回復されることとして理解される。
【００４６】
図５は分岐命令検出器２２が分岐命令Ｙに対応するブランチキャッシュデータを生成する際の動作を図示する。先行の分岐命令は命令Ｅである。命令Ｅに続くネクスト分岐命令にはまだ至っていないので、命令Ｅのアドレス＆Ｅを使用した分岐キャッシュヒットは行われていない。にもかかわらず、この命令アドレスはネクスト分岐命令に実際に遭遇した時にキャッシュタグとして使用するためにキャッシュタグラッチ２４内に記憶される。次にプログラムカウンタレジスタ１０は、ネクスト分岐命令Ｙが実際に命令フェッチステージ６の中に送り込まれるまで、主記憶装置８からパイプラインプロセッサ２への命令の回復制御を進行させる。
【００４７】
分岐命令検出器２２は分岐命令Ｙの存在を検出し、先行命令Ｘの命令アドレスの下位８ビットをＰＣ−１値としてセーブし、実際にデコードされた命令Ｙのターゲットアドレス、すなわち命令Ｍのアドレス＆Ｍ、およびターゲット命令Ｍ自身をセーブするためのトリガをかける。ターゲット命令Ｍはキャッシュラインを完成させるための最後のデータ項目であり、Ｍが決定すると上記データを含む新たなキャッシュライン３０が書き込まれる。
【００４８】
後続の処理中に命令Ｅに到達すると、分岐キャッシュヒットが発生し、キャッシュライン３０からのデータがブランチキャッシュ４から読み込まれる。その結果、命令Ｘがその後パイプラインの中にロードされた時に、比較器１４は到達値Ｒとの一致を検出し、ターゲットアドレス＆Ｍを命令Ｍに対して使用し、ターゲット命令自身をプログラムカウンタレジスタ１０および命令フェッチステージ６使用する。
【００４９】
図示された本発明の実施例を添付図を参照して詳細に説明してきたが、本発明はそれらの詳細な実施例では制限されず、種々の変更および改変が当業者により、添付の特許請求の項に定義された本発明の範囲並びに精神から逸脱することなく実現出来ることを理解されたい。
【図面の簡単な説明】
【図１】分岐命令を含む命令シーケンスを示す図。
【図２】ブランチキャッシュとパイプラインプロセッサの配置を示す図。
【図３】処理速度を上昇させるためにブランチキャッシュの使用したパイプラインプロセッサを示す図。
【図４】処理速度を上昇させるためのブランチキャッシュを使用したパイプラインプロセッサを示す図。
【図５】ブランチキャッシュへのデータの書き込みを示す図。
【符号の説明】
２  パイプライン
４  ブランチキャッシュ
１２  キャッシュライン
１６  到達値ラッチ
１８  ターゲットアドレスラッチ
２０  ターゲット命令ラッチ
【図１】
0003549595.tif 000005
【図２】
0003549595.tif 000006
【図３】
0003549595.tif 000007
【図４】
0003549595.tif 000008
【図５】
0003549595.tif 000009