(57)【特許請求の範囲】
【請求項１】
キャッシュメモリ手段と、該キャッシュメモリ手段よりも下位のメモリ手段と、該キャッシュメモリ手段に格納された命令列を投機的に実行する手段を備えた命令制御装置における命令のフェッチを制御する命令フェッチ制御装置であって、
該キャッシュメモリ手段に命令フェッチ要求を出す命令フェッチ手段と、
続いてフェッチ要求を予定している命令列が、該キャッシュメモリ手段に存在しない場合には、該キャッシュメモリ手段に、該下位メモリ手段から該予定命令列を事前に転送しておく命令プリフェッチを行う命令プリフェッチ手段と、
分岐命令の成立の可否、及び成立の際の分岐先アドレスを予測する分岐予測手段と、
フェッチした命令列を格納するための１つ以上のバッファ手段をと、
を備え、
前記分岐予測手段によって分岐すると予測され、命令プリフェッチを行う際に、前記バッファ手段に空きがない状態であって、かつ、前記キャッシュメモリ手段内にフェッチ要求を予定している分岐予測先命令が存在しない場合には、前記キャッシュメモリ手段に、前記下位のメモリ手段から前記予測命令列を事前に転送しておくことを特徴とする装置。
【請求項２】
前記命令プリフェッチ手段は、インタロック要因によって、通常行われるべき命令フェッチ要求が出せない場合に、前記キャッシュメモリ手段に対して前記命令プリフェッチを行うことを特徴とする請求項１に記載の装置。
【請求項３】
更に、前記命令プリフェッチを含む命令フェッチの種別に応じた優先順位を設定し、該優先順位に従って前記キャッシュメモリ手段に対する命令フェッチあるいは命令プリフェッチを、前記命令フェッチ手段あるいは命令プリフェッチ手段に行わせる優先順位決定手段を備えることを特徴とする請求項１記載の装置。
【請求項４】
更に、前記命令プリフェッチによる前記キャッシュメモリ手段への命令列転送中に、当該命令列の命令フェッチが行われる場合、該命令フェッチが該命令プリフェッチを受け継ぐ、あるいは、該キャッシュメモリ手段への転送中の命令列を前記バッファ手段へバイパスする制御手段を備えることを特徴とする請求項１に記載の装置。
【請求項５】
前記命令プリフェッチ手段は、同じアドレスもしくは同じキャッシュブロックに対する前記命令プリフェッチを連続して行わないことを特徴とする請求項１に記載の装置。
【請求項６】
前記命令プリフェッチ手段は、前記命令プリフェッチされた命令列に対する命令プリフェッチを行うことを特徴とする請求項１に記載の装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パイプライン処理方式（スーパースカラ処理方式、あるいは、アウトオブオーダ処理方式を含む）を採用した情報処理装置に係り、特に、見かけ上のフェッチ時間を減少させ命令処理を高速化させるためのプリフェッチ処理に関する。
【０００２】
【従来の技術】
パイプライン処理方式などを採用した情報処理装置においては、一つの命令の実行の終了を待たずに、次々と後続命令列をフェッチして命令パイプラインに投入している。また、主記憶装置の動作が遅いため、キャッシュ機構を採用して後続命令列のフェッチを高速化している。
【０００３】
図４０は、分岐命令を複数含む命令列の例を示す図である。
同図において、（ａ）の行のＤＲは除算命令であり、（ｂ）の行のＢＣＲは条件分岐命令、（ｃ）の行のＢＣＲは無条件分岐命令であり、（ｄ）の行が分岐先命令である。
【０００４】
図４１は、従来の手法を用いた場合のマシンサイクルの遅延を説明する図である。
まず、（ａ）の行の命令が実行される。（ａ）の行の命令実行がＡステージであるとき、次の命令である（ｂ）の行が実行される。このように、パイプライン方式をはじめとする投機実行方式では、前の命令の実行完了を待つことなく次の命令をフェッチし、実行する。しかし、（ｂ）の行の命令は条件分岐命令であるので、Ａステージの後、Ｕステージまでの間、条件確定待ちしている。そして、その間に（ｃ）の行の命令が実行される。これも分岐命令（無条件分岐命令）であり、（ｂ）の行の分岐結果に影響を受けるので、Ｕステージの実行は、（ｂ）の行の命令の非分岐が確定するまで待ちの状態にある。（ｂ）の行の条件分岐命令の非分岐が決定すると、（ｃ）の行の無条件分岐命令が実行されることが確定するので、（ｃ）の行の無条件分岐命令のＵステージの実行が行われる。これを受けて、（ｄ）の行の分岐先命令（ＮＯＰ）のフェッチ指令が出され、該分岐先命令のフェッチ及び実行が行われる。
【０００５】
同図から明らかなように、（ｄ）行の分岐先命令のフェッチが遅れているため、（ａ）行から（ｃ）行までの命令は、順調にパイプライン処理が行われているが、（ｄ）行の命令になって処理の待ち状態が生じ、パイプライン処理が遅延を生じている。
【０００６】
【発明が解決しようとする課題】
まず、従来の手法の場合、第１の問題点として、キャッシュ機構の欠点、すなわちフェッチ要求を出した命令列がキャッシュにヒットしなかった場合に、そのペナルティ（遅延時間）が大きいということがある。この場合、命令フェッチ要求が真に必要なことが確定してから該命令フェッチ要求を出すと、キャッシュミスヒットの場合には、このペナルティがそのまま性能差に跳ね返ることになる。
【０００７】
しかしながら、第２の問題点として、先行する命令の実行結果が後続の命令の実行に影響を与える場合は、先行する命令の実行結果が後続命令の実行に影響しないことが判断できるまで、正しい後続の命令フェッチ要求を出して実行することができない。
【０００８】
従来技術では、該分岐命令の分岐先アドレスが計算されていても、該分岐命令よりも前に実行される分岐命令の処理が確定し、該分岐命令が実行されることが決定されるまで、該分岐命令の分岐先命令フェッチを行っていなかった。すなわち、該分岐命令の直前に存在する分岐命令の分岐条件が確定して（分岐予測の成功が判明して）から、該分岐命令が分岐予測失敗した場合に実行される命令列をフェッチするため、この命令フェッチ開始が待たされる分、命令実行にロスが生じていた。
【０００９】
本発明の課題は、パイプライン処理方式等を採用した情報処理装置において、命令処理の遅延時間を削減することのできる装置を提供することである。
【００１０】
【課題を解決するための手段】
本発明の第１の側面における装置は、キャッシュメモリ手段と、それよりも下位のメモリ手段と、該キャッシュメモリ手段に格納された命令列を投機的に実行する手段を備えた命令制御装置における命令のフェッチを制御する命令フェッチ制御装置であって、該キャッシュメモリ手段に命令フェッチ要求を出す命令フェッチ手段と、続いてフェッチ要求を予定している命令列が、該キャッシュメモリ手段に存在しない場合には、該キャッシュメモリ手段に、該下位メモリ手段から該予定命令列を事前に転送しておく命令プリフェッチを行う命令プリフェッチ手段とを備えることを特徴とする。
【００１１】
本発明の第２の側面における装置は、キャッシュメモリ手段と、それよりも下位のメモリ手段と、該キャッシュメモリ手段に格納された命令列を投機的に実行する手段を備えた命令制御装置における命令のフェッチを制御する命令フェッチ制御装置であって、該キャッシュメモリ手段に命令フェッチ要求を出す命令フェッチ手段と、条件分岐命令もしくは無条件分岐命令を実行する際に、分岐成立する場合の分岐先命令アドレスを求めるアドレス生成手段と、該分岐命令の分岐する場合の分岐先命令アドレスが求められた時点で、前記キャッシュメモリ手段に該分岐先命令の命令フェッチを要求する分岐先命令プリフェッチを行う分岐先命令プリフェッチ手段とを備えることを特徴とする。
【００１２】
本発明の方法は、キャッシュメモリと、下位メモリと、該キャッシュメモリに命令フェッチ要求を出す命令フェッチ装置と、該キャッシュメモリに格納された命令列を処理する命令制御装置とを備える装置における命令制御方法であって、（ａ）続いてフェッチ要求を予定している命令列が、該キャッシュメモリに存在しない場合には、該キャッシュメモリに、該下位メモリから該予定命令列を事前に転送しておく命令プリフェッチを行うステップを備えることを特徴とする。
【００１３】
本発明においては、フェッチ予定の命令列をプリフェッチするようにしたことにより、例えば、キャッシュミスヒットした場合、新たに、フェッチするために必要な命令列を下位メモリから転送しなくても良くなり、命令実行の遅延時間を抑制することが出来る。
【００１４】
また、分岐命令の場合、分岐予測を行って、予測された分岐先命令をフェッチしておくが、従来では、分岐予測がはずれると、分岐予測がはずれたことが判明した時点で命令列をフェッチし直さなくてはならなかったので、処理遅延が生じていた。しかし、本発明によれば、分岐予測されなかった方の分岐先の命令列を分岐命令プリフェッチすることにより、あらかじめ命令一時バッファに格納するようにする。従って、分岐予測がはずれたとしても、すぐにキャッシュメモリから必要な命令列をフェッチして実行することができるので、処理遅延をより抑制することが出来る。
【００１５】
また、他の側面においては、前に実行している命令が命令プリフェッチしようとしているアドレスの内容を書き換える可能性がある場合には、命令プリフェッチを取り下げるようにする。従って、ストア命令のような命令によって、アドレスの内容が書き換えられる場合にも、整合性のある命令プリフェッチを行うことが出来る。
【００１６】
【発明の実施の形態】
本発明の実施形態の概念を以下に述べる。
第１の問題を解決するための方法としては、事前に、命令実行される可能性の高いアドレス域をキャッシュ機構に伝達し、キャッシュ機構に該アドレスの命令列が登録されていなければ、実命令フェッチが行われるよりも前に、主記憶装置あるいは下位のキャッシュメモリ（キャッシュメモリが多段からなる場合）から出来る限り事前に命令列を登録し始めることを特徴とした命令プリフェッチ機構を用いる。
【００１７】
こうすることにより、キャッシュのミスヒット率を低下させることができ、性能向上に貢献することが可能となる。仮に実命令フェッチまでにキャッシュの登録作業が間に合わなかったとしても、実命令フェッチと、本発明の実施形態によるプリフェッチ要求との時間差だけ、従来技術よりも遅延時間（ミスヒットペナルティ）を減らすことが出来る。
【００１８】
更に、同じタイミングで複数のフェッチ・命令プリフェッチ要求を出すことが出来ないような装置においては、命令プリフェッチの優先順位を設定し、それに従って要求を出すようにする。
【００１９】
また、このような構成の場合、同じアドレスで複数回のプリフェッチ要求を出すのは無駄であるから、フラグを準備して、同じアドレスで複数回のプリフェッチ要求を出さないように抑制する。また、キャッシュ機構の形式によっては、フェッチするバイト長よりも大きなデータ単位を一つのまとまり（キャッシュブロック）として管理する形式のものもある。このときは、同一キャッシュブロックへの命令プリフェッチ要求を抑制する。すなわち、プリフェッチするアドレスが異なっていても、前回のプリフェッチでキャッシュメモリに格納されたキャッシュブロックの中に既に、そのアドレスの命令が含まれている場合には、再び命令プリフェッチを行って、主記憶からキャッシュメモリに命令を読み込むことは無駄となる。従って、このような場合には、プリフェッチ要求を出力しないようにする。
【００２０】
第２の問題点を解決するための方法としては、特に、命令フェッチ制御部に命令フェッチの要求をするが、命令フェッチ結果を命令デコード部に受け渡すか否かを保留することを可能とする、あるいは、命令フェッチ動作の途中で一時中断することを可能とすることを特徴とした、分岐命令プリフェッチ機構を用いる。
【００２１】
通常、該分岐命令が分岐する場合の分岐先アドレスは、条件コードの確定、すなわち、分岐するか否かが確定するよりも前に求めることが可能である。
例えば、演算命令と直後の条件分岐命令がパイプライン処理方式によって流れる場合、演算命令の実行（Ｘステージ）の結果、条件コードが決定し分岐するか否かが確定するタイミング（演算命令のＵステージ）よりも前に、後続の分岐命令の分岐先命令アドレスをＡステージで求めている。
【００２２】
しかしながら、図４０のように、（ａ）演算命令、（ｂ）条件分岐命令、（ｃ）無条件分岐命令と続く命令列の場合、従来技術では図４１のように（ｃ）無条件分岐命令が実行されることが確定されるまで、すなわち、（ｂ）条件分岐命令の非分岐が確定するまで、（ｃ）無条件分岐命令の分岐先命令を、命令フェッチすることが出来なかった。
【００２３】
ところが、図１に示すように、本発明の実施形態を適用することにより、（ｃ）行の無条件分岐命令の分岐先アドレスが確定した時点で、このアドレスで命令プリフェッチ（分岐命令プリフェッチ）を行うことができる。この後、（ａ）行の演算命令の実行により条件コードが確定し、（ｂ）行の条件分岐命令が非分岐であれば、（ｃ）行の無条件分岐命令は実行されるのだから、無条件分岐命令の後続でデコード、実行、あるいは、フェッチされている命令列はすべて棄却し、すでに始まっている分岐命令プリフェッチを実命令フェッチとして継続実行すれば良い。図１のケースでは、従来技術よりも３クロックの性能向上が達成できる。この際、もし他の分岐命令プリフェッチが行われていれば、これも不要であるから、棄却すればよい。逆に（ｂ）行の条件分岐命令の分岐が確定し、（ｃ）行の無条件分岐命令が実行されないことが分かったならば、この時点で、すでに始まっている分岐命令プリフェッチを中止、棄却すれば良い。
【００２４】
後者の（ｃ）行の無条件分岐命令が条件分岐命令であっても本発明の実施形態を適用可能であり、もちろん、上記命令列の（ｂ）行の条件分岐命令に対しても本発明の実施形態を適用可能である。また、二つの分岐命令の間に何らかの命令列が存在しても本発明の実施形態を適用可能であることは、当業者には容易に理解されよう。更に、ブランチヒストリに代表される分岐予測機構を併用した場合でも、条件分岐命令が分岐予測された場合には、後続命令（非分岐である場合の命令列）を分岐命令プリフェッチするようにすることで、同様の手法を適用可能である。すなわち、分岐予測された結果、分岐先と予測されたアドレスとは逆に、分岐しなかった場合の次の命令のアドレスを分岐命令プリフェッチによってプリフェッチするようにしておくことも可能である。
【００２５】
また、例えば、ＮＯＰ(No  Operation）命令の代用として用いられるような、必ず非分岐となる分岐命令においては、分岐先アドレスと称するアドレスへは分岐しないのだから、これを分岐命令プリフェッチするのは不利である。従って、このプリフェッチを抑止すれば、無駄な動作が抑止され、性能劣化しないことになる。同様に無条件分岐命令のように、絶対に分岐命令の後続命令が実行されない分岐命令においては、後続命令を分岐命令プリフェッチするのは不利である。従って、このプリフェッチを抑止することで、無駄な動作を抑止し、性能劣化を防ぐことができる。
【００２６】
第１の問題の解決法でも述べたように、同じタイミングで複数のフェッチ・分岐命令プリフェッチ要求を出すことが出来ないような装置においては、プリフェッチする命令間に優先順位を設定し、それに従って要求を出すことも可能である。
【００２７】
このようにして出される分岐命令プリフェッチは、必ずしも実行されるわけではないので、実行されることが分かっていなければならない。ここで、デコードされるより手前のステージで分岐命令プリフェッチされた命令列を一時保存しておく一時命令バッファを設ける。また、一時命令バッファを設ける代わりに、命令プリフェッチ動作の途中でインタロックをかけることも出来る。いずれの場合にも、所定の条件でインタロックを解除し、フェッチの続きあるいはデコード以降の処理を行えば良い。
【００２８】
特に、スーパースカラ処理方式などを採用した場合には、複数の分岐命令が時間的に近接して処理されることになるので、本発明の実施形態の手法を用いれば、連続あるいは、同時に複数の分岐命令プリフェッチを行う場合も考えられる。更に、これら複数の分岐命令プリフェッチに対応した一時命令バッファを設けることで、複数の分岐命令プリフェッチ要求に対応することも可能である。
【００２９】
特に、この場合には、それぞれの分岐命令プリフェッチを区別する方法を用いることができる。
主記憶にキャッシュメモリ機構がある場合、そのキャッシュメモリ機構の特性に応じて分岐命令プリフェッチ要求に工夫を加えると、更に性能向上する可能性がある。
【００３０】
キャッシュメモリが小さいなど性能が劣る場合、この分岐命令プリフェッチによって本来使われる頻度が高いはずの命令列がキャッシュメモリから消去される危険性が高くなる。特に、分岐性能が高くないので、この危険性は特に高くなる。このような危険性を回避するために、分岐命令プリフェッチの場合には、そのプリフェッチ命令がキャッシュに存在しない場合、主記憶から命令列を取り出してキャッシュメモリを更新することを抑制し、性能劣化を防ぐことができる。
【００３１】
逆に、キャッシュ機構の性能が良い場合でも、制御回路を設置しづらい場合もあり得る。このような場合には、キャッシュ機能の性能の良さを利用し、キャッシュにヒットしなかった場合にあらかじめ主記憶から命令列を読み込むようにして、実際に、これらの命令列が必要になった場合に、キャッシュミスヒットによるペナルティを最小限に抑えることが可能となる。すなわち、前述の第１の問題点の解決法を利用することができる。
【００３２】
ところで、命令セットの中には、メモリにデータを書き込む動作を含む命令（以下、ストア命令と呼ぶ）が存在する。ストア命令が、このような分岐命令プリフェッチデータ列を書き換える可能性が常に存在する。従って、分岐命令プリフェッチの場合でも、この可能性を検出する手段、及び、実際に該ストア命令が分岐命令プリフェッチデータ列を書き換えた場合には、その結果をこれらの命令列に反映するなどの対応をとる必要がある。
【００３３】
実際に分岐命令プリフェッチした命令列を書き換える手法の他に、該ストア命令によって実際に書き換えられる、あるいは書き換えられる可能性がある場合には、分岐命令プリフェッチを取りやめることもできる。分岐命令プリフェッチ要求によって得られる命令列は常に命令実行されるわけではない。従って、このような方法をとれば、回路構成が簡便になるメリットの方が大きくなる。
【００３４】
以下に、図面に基づいて各回路構成について詳細に説明する。ここで、図面に示された＜、及び、＞でくくられた数字は、ビット番号を示し、小さい番号のビットが上位ビットであり、大きい番号のビットが下位ビットである。従って、＜１＞がＭＳＢであり、＜３１＞がＬＳＢである。
【００３５】
図２は、本実施形態の装置の全体の概略構成（要部）を示す図である。
本実施形態においては、命令フェッチポートをＡ、Ｂの二つ持っており、いずれか一方が現在命令実行処理中のポートになり、もう一方が分岐予測機構（ブランチヒストリ）によって分岐予測された分岐先命令列を保持するようになっている。これらのポートの役割は動的に変更される。
【００３６】
以下は、同図及び後述の図における信号の対応を示す表である。
（１）命令フェッチ要求（＋ＩＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤ）
（２）命令プリフェッチ要求（＋ＩＦ ＰＲＥＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤ）
（３）データ
（４）フェッチ命令列
（５）デコードする命令列
（６）命令デコードした情報
（７）ストアデータ
（８）オペランドデータ
（９）再命令フェッチ要求（＋ＲＥ ＩＦＥＴＣＨ ＲＥＱＵＥＳＴ）
（１０）分岐命令プリフェッチ要求（＋ＢＲ ＰＲＥＦＣＨ ＲＥＱ ＶＡＬＩＤ）
（１１）分岐履歴情報
（１２）分岐予測情報
（１３）ストア命令によるフェッチ命令列の上書き可能性検出信号
（１４）ムーブイン（主記憶装置からキャッシュへのデータ複写）要求（＋ＭＯＶＥ ＩＮ ＲＥＱＵＥＳＴ）
（１５）命令フェッチアドレス
（１６）フェッチ出来ない状態であることを示す信号（＋ＳＵ ＢＵＳＹ）
（１７）命令プリフェッチ出来ない状態であることを示す信号（＋ＳＵ ＰＲＥＦＣＨ ＢＵＳＹ）
（１８）再命令フェッチアドレス
（１９）分岐予測先アドレス
（２０）分岐予測信号（＋ＢＲＨＩＳ ＨＩＴ）
（２１）分岐命令プリフェッチアドレス
（２２）分岐予測失敗信号（ＣＡＮＣＥＬ ＡＬＬ ＰＯＲＴ）
図２においては、主記憶装置１から命令データ（３）が命令キャッシュ２にフェッチされて送られ、次に、フェッチ命令列（４）が命令一時バッファ３に格納される。それから、デコードすべき命令列（５）が命令デコード部４に入力される。そして、命令デコード部４におけるデコードの結果に基づいて、各制御部（分岐命令制御部５、ストア命令制御部６、その他の命令の制御部７）に当該デコード情報が入力される。このとき、命令データと一緒にオペランドのデータがデータキャッシュ８に入力され、各制御部における処理に使用するために、デコードされた命令とともに、ストア命令制御部６やその他の命令の制御部７に入力される（８）。また、ストア命令制御部６は、処理の結果データをストアする場合には、ストアデータ（７）をデータキャッシュ８に書き込むとともに、データキャッシュ８から命令キャッシュ２には、命令列の書き換えデータが送られる。命令列が命令一時バッファ３に格納されている場合には、命令一時バッファ３にストアデータ（７）が送られる。また、書き換えられるべき命令列やオペランドが主記憶装置１に記憶されている場合には、ストアデータ（３）を主記憶装置１に送る。
【００３７】
また、命令フェッチ制御部９は、命令キャッシュ２に命令フェッチ要求（１）を出力して、命令列を命令一時バッファ３へフェッチさせるとともに、命令プリフェッチ要求（２）を出して、命令列を主記憶装置１から命令キャッシュ２にプリフェッチさせる。
【００３８】
分岐命令制御部５は、分岐命令を処理した結果、新しく命令のフェッチが必要になった場合には、再命令フェッチ要求（９）を命令フェッチ制御部９に出すとともに、分岐予測されなかった方の分岐のアドレスの命令をプリフェッチさせるために分岐命令プリフェッチ要求（１０）を命令フェッチ制御部９に出力する。また、分岐命令制御部５の分岐命令処理結果は、分岐履歴情報（１１）として、ブランチヒストリ９’に送られ、ブランチヒストリ９’において分岐予測情報（１２）を生成するために使用される。分岐予測情報（１２）は、命令フェッチ制御部９に送られ、分岐命令の分岐先アドレスの命令のフェッチに使用される。更に、分岐命令制御部５は、分岐予測に失敗したと判断した場合には、分岐予測失敗信号（２２）を命令キャッシュ２に送り、命令キャッシュ２にフェッチされた分岐先命令が格納されているポートをキャンセルさせる。
【００３９】
図３は、命令プリフェッチ機構の構成例を示す図である。
本実施形態においては、１クロックで１つの命令フェッチ要求を行うことができる。命令フェッチ要求には、シーケンシャルフェッチ（後続命令のフェッチ）、分岐ターゲットフェッチ（分岐予測先の命令のフェッチ）、再命令フェッチ（分岐予測失敗や割り込み発生などのフェッチ）、及び本実施形態による分岐ターゲットの並びにシーケンシャルの命令プリフェッチの５つがある。
【００４０】
これら５つの要求の優先順位が、再命令フェッチ、分岐ターゲットフェッチ、分岐ターゲットの命令プリフェッチ、シーケンシャルフェッチ、シーケンシャルの命令プリフェッチの順であるとすれば、優先順位決定回路９−３は、この優先順位で命令キャッシュ２に要求を出すようにする。
【００４１】
フェッチアドレス生成部９−１では、フェッチすべき命令のアドレスを生成し、セレクタ９−４に入力する。▲１▼の信号は、フェッチ要求を出したが、割り込みなどの要因で受け入れられなかった場合に、同じアドレスを出力するために設けられている。▲２▼の信号は、１６バイトの加算器から演算されて出力される、シーケンシャルフェッチに使用されるアドレスである。また、▲３▼の信号は、再命令フェッチ要求（９）に対応して入力される再命令フェッチアドレス（１８）を示す信号である。更に、▲４▼の信号は、前に出力されたフェッチアドレスからブランチヒストリ９−２が処理した結果得られた分岐予測先アドレス（１９）である。優先順位決定回路９−３は、ブランチヒストリ９−２から分岐予測信号２０を受け取ると、命令フェッチや命令プリフェッチの優先順位を勘案して、適切な場合に、フェッチアドレス選択信号ａを出力して、分岐予測先アドレス（１９）をセレクタ９−４に選択させて、命令フェッチアドレス（１５）として命令キャッシュ２に入力させる。このとき、優先順位決定回路９−３は、命令フェッチアドレス（１５）のアドレスの命令をフェッチさせたい場合には、命令フェッチ要求（１）を命令キャッシュに入力し、命令プリフェッチをさせたい場合には、命令プリフェッチ要求（２）を命令キャッシュ２に入力する。
【００４２】
命令キャッシュ２によって命令フェッチ要求（１）が受け入れられると、命令キャッシュ２から命令（４）が命令一時バッファ３に送られる。このとき、命令フェッチする命令が命令キャッシュ２に存在しない場合には、主記憶装置１から命令データ（３）が呼び込まれ、続いて命令一時バッファ３に命令（４）がフェッチされる。
【００４３】
命令キャッシュ２によって命令プリフェッチ要求（２）が受け入れられると、命令キャッシュは、ムーブイン要求（１４）を主記憶装置１に入力し、主記憶装置１の信号（１５）で入力されるアドレスから命令キャッシュへ命令をプリフェッチする。
【００４４】
命令キャッシュ２が命令フェッチ出来ない場合には、信号（１６）を、命令プリフェッチ出来ない場合には、信号（１７）を優先順位決定回路９−３に入力し、命令フェッチ制御部９に命令フェッチ、命令プリフェッチの再試行などを行わせる。
【００４５】
図４は、図３の優先順位決定回路の構成例を示す図である。
すなわち、本実施形態においては、再命令フェッチ許可信号（＋ＩＦ ＲＥＱ ＲＥＩＦＣＨ ＧＯ）は、再命令フェッチ要求（＋ＲＥ ＩＦＥＴＣＨ ＲＥＱＵＥＳＴ）が入力されたら、そのまま、再命令フェッチとして出力されるので、最優先で行われる。再命令フェッチ要求がない場合は、分岐ターゲットフェッチ信号（＋ＩＦ ＲＥＱ ＢＲＨＩＳ ＧＯ）は、分岐成立予測がされていて、（＋ＢＲＨＩＴ ＨＩＴが“Ｈ”）かつ、ターゲットフェッチ格納先となるフェッチポートが空いている（−ＦＣＨ ＰＯＲＴ ＡＬＬ ＢＵＳＹが“Ｈ”）場合にのみ行われる。すなわち、再命令フェッチ要求（＋ＲＥ ＩＦＥＴＣＨ ＲＥＱＵＥＳＴ）の論理をインバータ１０で反転した信号と、命令キャッシュ２からの信号である、フェッチポートがすべて埋まっていることを示す信号の論理が反転した信号（−ＦＣＨ ＰＯＲＴ ＡＬＬ ＢＵＳＹ）及び、分岐予測信号（＋ＢＲＨＩＳ ＨＩＴ）がＡＮＤ回路１４に入力され、これらの信号のＡＮＤ結果が、ＡＮＤ回路１４から分岐ターゲットフェッチ許可信号（＋ＩＦ ＲＥＱ ＢＲＨＩＳ ＧＯ）となる構成となっている。
【００４６】
それ以外の場合には、後続の命令のフェッチ信号（＋ＩＦ ＲＥＱ ＳＥＱＵＥＮＴＩＡＬ ＧＯ）（シーケンシャルフェッチ）が従来行われていたところを、それより優先順位が高いところに、分岐ターゲットの命令プリフェッチ許可信号（＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＢＲＨＩＳ ＧＯ）の優先順位を設定している。もちろん、再命令フェッチが行われておらず、かつ、分岐予測が成立していなければ分岐ターゲットの命令プリフェッチは、行われないので、＋ＲＥ ＩＦＥＴＣＨ ＲＥＱＵＥＳＴの論理反転信号と、＋ＢＲＨＩＳ ＨＩＴ信号と、分岐ターゲットの命令プリフェッチがまだ行われていないことを示す信号（−ＢＲＨＩＳ ＴＧＴ ＰＲＥＦＥＣＨ ＤＯＮＥ）の論理積をＡＮＤ回路１５でとって＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＢＲＨＩＳ ＧＯ信号を生成している。
【００４７】
同図の回路図だけでは、同時に＋ＩＦ ＲＥＱ ＢＲＨＩＳ ＧＯと＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＢＲＨＩＳ ＧＯが出てしまうが、アドレス選択の際には同じアドレスが用いられること、及び、キャッシュ機構への要求信号は、後述する図８の回路に示される通り実フェッチが優先されるので、これで問題は生じない。
【００４８】
シーケンシャルフェッチの許可信号（＋ＩＦ ＲＥＱ ＳＥＱＵＥＮＴＩＡＬ ＧＯ）は、＋ＲＥ ＩＦＥＴＣＨ ＲＥＱＵＥＳＴ信号のインバータ１０による論理反転信号と、＋ＢＲＨＩＳ ＨＩＴ信号の論理をインバータ１１によって反転したものと、−ＢＲＨＩＳ ＴＧＴ ＰＲＥＦＣＨ ＤＯＮＥ信号の論理をインバータ１２で反転したものと−Ｉ ＢＵＦＦ ＦＵＬＬ信号の論理積をＡＮＤ回路１６でとったものとなっている。これは、再命令フェッチ要求がなく、分岐予測信号が出力されておらず、分岐ターゲットの命令プリフェッチが行われており、命令キャッシュの命令バッファが一杯でない（−Ｉ ＢＵＦＦ ＦＵＬＬ信号が“Ｈ”）時に、シーケンシャルフェッチの要求が命令キャッシュ２に出力されることを意味する。
【００４９】
更に、シーケンシャル命令の命令プリフェッチ許可信号（＋ＩＦ ＲＥＱ ＰＲＥＦＥＣＨ ＳＥＱ ＧＯ）は、シーケンシャルフェッチの条件の内、再命令フェッチ、分岐予測信号、及び分岐ターゲットの命令プリフェッチについては、同じであり、更に、命令キャッシュの命令バッファが一杯である場合であって、次のシーケンシャル命令の命令プリフェッチが行われていない（−ＮＥＸＴ ＳＥＱ ＰＲＥＦＣＨ ＤＯＮＥ信号が“Ｈ”）場合に、ＡＮＤ回路１７から出力される。
【００５０】
このように、最下位にはシーケンシャル（後続）の命令プリフェッチ（＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＳＥＱ ＧＯ）を設定している。もちろん、一般的にはこれ以外の優先順位の設定も考えられる。それぞれのＧＯ信号（図４の右へ出ていく信号）は、図３におけるフェッチアドレス選択信号ａとして用いられる。
【００５１】
また、特に同じアドレス、あるいは、キャッシュ上の同じページへの要求を連続して出すことは無意味であるから、これを抑えてやることによって無駄なプリフェッチ要求が減り、従って、更に下位キャッシュあるいは主記憶装置１へフェッチ要求が出せるようになる。
【００５２】
図５は、同じアドレスの命令へのプリフェッチ要求を連続して出さないようにするためのフラグ生成回路（シーケンシャルプリフェッチの場合）の構成例を示す図である。
【００５３】
フラグは各フェッチポート（命令フェッチポート）毎に設けられ、フラグのＯＮ、ＯＦＦはそれぞれ独立して行われる。
優先順位決定回路９−３から出力されるシーケンシャル命令の命令プリフェッチ許可信号（＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＳＥＱ ＧＯ）、命令プリフェッチ要求（＋ＩＦ ＰＲＥＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤ）、及び、フェッチポート選択信号（＋ＰＯＲＴ ｘ ＳＥＬ；ここで、ｘは、ポートの識別子あるいは番号であって、同図の回路が担当するフェッチポートの選択信号が入力された場合に、フラグを立てるために用いられる）がＡＮＤ回路１８に入力され、すべてが“Ｈ”の場合、ＳＲ−ＦＦ（フリップフロップ）１９のＳＥＴ端子に論理“Ｈ”の信号が入力される。また、ＦＦ１９のＲＥＳＥＴ端子には、命令キャッシュ２の命令バッファが一杯であることを示す信号（＋Ｉ ＢＵＦＦ ＦＵＬＬ）が入力される。ＳＥＴ端子に論理“Ｈ”の信号が入力されると、次のシーケンシャル命令のプリフェッチが行われたので、出力端子Ｑからは、同一アドレスにはプリフェッチ要求を出さないように指示する信号（フラグ；＋ＮＥＸＴ ＳＥＱ ＰＲＥＦＣＨ ＤＯＮＥ）が“Ｈ”となって（ＯＮとなって）出力される。一方、＋Ｉ ＢＵＦＦ ＦＵＬＬ信号が論理“Ｈ”でＲＥＳＥＴ端子に入力されると、命令キャッシュ２のバッファが一杯になっていることを示すので、同一のアドレスの命令は既にフェッチされたことを意味し、従って、次の命令プリフェッチ要求は同じアドレスに対しては行われないはずであることになる。従って、＋ＮＥＸＴ ＳＥＱ ＰＲＥＦＣＨ ＤＯＮＥ信号の出力フラグは“Ｌ”（ＯＦＦ）となる。このような仕組みにより、命令キャッシュ２の同じアドレスに連続して要求を出さないようにすることが出来る。
【００５４】
図６は、同じキャッシュブロックに含まれている命令を繰り返してプリフェッチ要求を行わせないようにするためのフラグを生成する回路例である。
同図の回路も図５と同様に、フェッチポート毎に設けられる。
【００５５】
優先順位決定回路９−３から＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＳＥＱ ＧＯ信号が入力されると、命令プリフェッチ要求信号（＋ＩＦ ＰＲＥＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤ）とフェッチポート選択信号（＋ＰＯＲＴ ｘ ＳＥＬ）とのＡＮＤを取り、フリップフロップのＳＥＴ端子に入力され、プリフェッチ抑制信号（＋ＮＥＸＴ ＳＥＱ ＰＲＥＦＣＨ ＤＯＮＥ）が出力される。また、命令フェッチ要求（＋ＩＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤ）信号が入力されると、キャッシュブロックの最終ビット信号（＋ＩＦ ＥＡＧ＜２６＞と＋ＩＦ ＥＡＧ＜２７＞）が“１１”となっているか否か（ここでは、６４バイトのキャッシュブロックを想定しており、最終の２ビットは“１１”が設定されている）がＡＮＤ回路２１によって判断され、その結果が命令フェッチ要求とともにＡＮＤ回路２２に入力される。更に、ポート選択信号（＋ＰＯＲＴ ｘ ＳＥＬ）が入力され、ＡＮＤ回路２２でＡＮＤがとられて、ＯＲ回路に入力される。ＯＲ回路には、ポートを強制的にクリアする信号（＋ＣＬＥＡＲ ＩＦ ＰＯＲＴ ｘ）も入力され、命令フェッチ要求がキャッシュブロックの最終アドレスに来た場合か、ポートを強制的にクリアする場合に、フリップフロップをＲＥＳＥＴして、フラグの出力を“Ｌ”（ＯＦＦ）に設定する。
【００５６】
図７は、同一プリフェッチ要求抑制フラグ（分岐予測先プリフェッチの場合）の回路構成例を示す図である。
優先順位決定回路９−３から＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＢＲＨＩＳ ＧＯ信号が入力されると、命令プリフェッチ要求信号（＋ＩＦ ＰＲＥＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤ）との論理積をＡＮＤ回路２５で取り、フリップフロップのＳＥＴ端子に入力する。これにより、該論理積が“Ｈ”のとき、同じアドレスへの分岐予測先プリフェッチ要求を抑制するフラグ（＋ＢＲＨＩＳ ＴＧＴ ＰＲＥＦＣＨ ＤＯＮＥ）がＯＮとなって出力される。そして、強制的なポートクリア信号（＋ＣＬＥＡＲ ＩＦ ＰＯＲＴ）がＲＥＳＥＴ端子に入力されると、＋ＢＲＨＩＳ ＴＧＴ ＰＲＥＦＣＨ ＤＯＮＥ信号の出力が抑制される。
【００５７】
前述の優先順位決定回路９−３に基づき、命令プリフェッチ要求を出すことになった場合には、命令プリフェッチ要求は、他のフェッチ要求とは指令内容が異なるので、その区別をする必要がある。
【００５８】
図８は、フェッチ・プリフェッチ区別回路の構成例を示す図である。
優先順位決定回路から出力される命令フェッチ要求は、＋ＩＦ ＲＥＱ ＲＥＩＦＣＨ ＧＯ、＋ＩＦ ＲＥＱ ＢＲＨＩＳ ＧＯ、及び、＋ＩＦ ＲＥＱ ＳＥＱＵＥＮＴＩＡＬ ＧＯの３つの信号であるので、これらのＯＲを取り、フェッチ出来る状態であることを示す信号（−ＳＵ ＢＵＳＹ）とのＡＮＤをとって、現在、命令フェッチ要求（＋ＩＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤ）を生成する。
【００５９】
また、優先順位決定回路９−３から出力される命令プリフェッチ要求は、＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＢＲＨＩＳ ＧＯと＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＳＥＱ ＧＯの２つの信号であるので、これらのＯＲを取り、命令フェッチ要求が行われていないことを示す信号（−ＩＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤ）と、命令プリフェッチが出来る状態であることを示す信号（−ＳＵ ＰＲＥＦＣＨ ＢＵＳＹ）とのＡＮＤを取って、命令プリフェッチ要求（＋ＩＦ ＰＲＥＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤ）を出力する。
【００６０】
キャッシュ機構においては、キャッシュミスヒットしたときは通常、下位のキャッシュ機構もしくは主記憶装置からデータ転送を行う。従って、命令プリフェッチ要求を識別する信号（前述）に応じて、キャッシュヒット／ミスしたときの処理を変更すれば良い。すなわち、キャッシュミスヒットのときには、通常の命令フェッチでキャッシュミスヒットしたときと同じように、下位キャッシュもしくは主記憶装置へデータ要求すれば良い。
【００６１】
図９は、下位メモリへのデータ要求信号を生成する回路の構成例を示す図である。
命令プリフェッチ要求信号に１段ラッチをかませて得た信号（＋ＩＦ ＰＲＥＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤ ＬＣＨ）あるいは、命令フェッチ要求信号に１段ラッチをかませて得た信号（＋ＩＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤ ＬＣＨ）のいずれかが“Ｈ”となって入力されると、ＯＲ回路４７の出力が“Ｈ”になる。そして、命令キャッシュ２から得られるキャッシュミスヒットを示す信号（＋ＣＡＣＨＥ ＮＯＴ ＦＯＵＮＤ ＤＡＴＡ）とのＡＮＤを取る。これにより、キャッシュミスヒットが起きた場合に下位メモリへのデータ要求（ムーブイン；＋ＭＯＶＥ ＩＮ ＲＥＱＵＥＳＴ）が“Ｈ”となって出力される。このデータ要求信号は命令キャッシュ２に入力される。
【００６２】
また、下位キャッシュあるいは主記憶装置などの下位メモリにデータ要求する場合、いずれの場合にも、キャッシュデータを命令制御装置に送らないので、そのための抑制回路が必要である。本実施形態においては、フェッチリクエストのキャンセル信号を利用している。
【００６３】
図１０は、プリフェッチ要求時のキャッシュから命令制御装置へのデータ転送抑制信号を生成する回路例を示す図である。
命令プリフェッチ要求に１段ラッチをかませた信号（＋ＩＦ ＰＲＥＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤ ＬＣＨ）あるいは、分岐命令制御部から入力される分岐予測失敗を示す信号（＋ＣＡＮＣＥＬ ＡＬＬ ＰＯＲＴ）（２２）が入力されると、命令制御装置へのデータ転送抑制信号である＋ＣＡＮＣＥＬ ＰＯＲＴ ＰＲＥＦＣＨが出力される。
【００６４】
図１１は、第２の命令プリフェッチ機構の構成例を示す図である。
本実施形態においては、命令フェッチ制御部９は、分岐命令プリフェッチポートを二つ持っている。すなわち、最大二つの分岐命令プリフェッチ要求を出すことが可能である。また、１回の命令フェッチもしくは分岐命令プリフェッチで、主記憶部（もしくはキャッシュ）１’から１６バイトの命令列を確保することができるものとする。
【００６５】
分岐命令処理部５においては、４つの分岐命令リザベーションステーション５−１を持っており、最大４つの分岐命令の管理（処理）が可能である。
また、同図において、括弧付き番号で示される各信号は、図２で説明したとおりである。
【００６６】
キャッシュ／主記憶装置１’からフェッチ命令列（４）が命令フェッチ制御部９に送られ、フェッチポートＡあるいはＢに格納される。そして、フェッチされた命令列は、デコードする命令列（５）として、命令デコード部４に送られて、デコードされる。命令デコードした情報（６）は、それが分岐命令である場合には、分岐命令処理部５に入力され、分岐命令リザベーションステーション５−１に登録される。そして、アウトポインタ（ＯＵＴ−ＰＴＲ）５−２によって指示されるリザベーションステーション５−１を参照して、分岐命令プリフェッチ要求（１０）がキャッシュ／主記憶装置１’に送られるとともに、命令フェッチ制御部９の分岐命令プリフェッチポートＡあるいはＢに格納される。分岐命令プリフェッチアドレス（２１）がキャッシュ／主記憶装置１／２に送られる。また、命令フェッチが失敗した場合には、分岐命令処理部５から命令フェッチ制御部９に再命令フェッチ要求（９）が送られる。
【００６７】
分岐命令リザベーションステーション５−１は、図１２（ａ）のようなエントリを持っている。本実施形態においては、分岐命令の完了は最大１命令行えるものとし、次に完了させるべき分岐命令をポインタ５−２で管理しているものとする。図１２の各エントリの信号は、後述の回路で使用される。
【００６８】
図１３は、分岐命令の処理の流れを説明する図である。
まず、Ｄステージで、命令のデコードが行われ、Ａステージで分岐先命令アドレスの計算が行われる。それから、Ｘステージにおいて分岐・非分岐の確定するのを待つ。このＸステージにおいて、条件コード及び前分岐命令の確定が行われる。そして、次のＵステージで、分岐実行が行われ、Ｗステージで分岐命令が完了する。
【００６９】
すなわち、命令デコード部４でデコードされ分岐命令と判断された命令は、分岐命令リザベーションステーション５−１に登録されると同時に、アドレス生成部（不図示）において該命令が分岐する場合の分岐先アドレスを計算する。そして、該命令の直前に行われている演算命令の終了により条件コードが確定することによって、該分岐命令の動作が確定する。ここで、該分岐命令が、分岐予測による分岐判断と実際の動作が異なる場合、従来技術ではこの動作の確定時点で初めて（Ｕステージで）再命令フェッチを行うことになる。
【００７０】
図１４は、分岐命令リザベーションステーションの実行順序回路の構成例を示す図である。
図１１のアウトポインタ５−２から出力される、どの分岐命令リザベーションステーションにエントリされている分岐命令を処理するかを示す信号（ＲＳＢＲ ＯＵＴ ＰＴＲ＜０＞、＜１＞）に従って、各分岐命令リザベーションステーションの優先順位を決定する。アウトポインタ５−２から出力される信号は、２ビットからなっており、「００」の時は、０番目のリザベーションステーションＲＳＢＲ０が最も優先順位が高い。「１０」の時は、１番目のリザベーションステーションＲＳＢＲ１、「０１」の時は、２番目のリザベーションステーションＲＳＢＲ２、「１１」の時は、３番目のリザベーションステーションＲＳＢＲ３が最も高い優先順位を有するようになっている。最も高い優先順位より低い優先順位のリザベーションステーションは、サイクリックに優先順位が割り当てられる。
【００７１】
図１５は、分岐命令リザベーションステーションの実行順序別信号生成回路の例である。
同図の回路は、優先順位が最優先のものを１つ記載しているが、実際には、各優先順位毎に同様の回路が設けられている。
【００７２】
図１４の回路から入力される各信号▲１▼−０〜▲１▼−３と、分岐命令リザベーションステーションＲＳＢＲ０〜ＲＳＢＲ３のエントリである有効フラグ▲２▼−０〜▲２▼−３がそれぞれのＡＮＤ回路５０〜５３に入力され、信号▲１▼と信号▲２▼とがともに“Ｈ”となった時点で、その優先順位の分岐命令リザベーションステーションに対応する分岐命令を処理すべき旨を示す信号（同図の場合、＋ＲＳＢＲ ＴＯＱ ＶＡＬＩＤ）がそれらのＡＮＤ回路５０〜５３の出力が入力されるＯＲ回路５４を介して出力される。
【００７３】
図１６は、分岐命令プリフェッチアドレスの生成回路の構成例を示す図である。
同図の回路も、各分岐先リザベーションステーションＲＳＢＲ０〜ＲＳＢＲ３に対応してそれぞれ設けられる。
【００７４】
同図のセレクタ６１には、分岐命令リザベーションステーションＲＳＢＲｘ（ｘ＝０〜３）のエントリである分岐命令アドレスと分岐命令長とを加算したアドレス信号（＋ＲＳＢＲｘ ＩＡＲ＋ＩＬＣ＜１：３１＞）と、分岐先命令アドレス（＋ＲＳＢＲ ＴＩＡＲ＜１：３１＞）が入力される。これらは、それぞれプログラムの分岐命令の次の行に記述されている命令列のアドレスと、分岐先命令アドレスを示しており、分岐命令リザベーションステーションＲＳＢＲｘのエントリである分岐予測フラグ（＋ＲＳＢＲｘ ＢＲＨＩＳ ＨＩＴ）によってセレクタ６１が制御され、いずれかのアドレスが分岐命令プリフェッチアドレス（＋ＲＳＢＲｘ ＰＲＥＦＣＨ ＩＡＲ＜１：３１＞）として出力される。分岐予測フラグは、ブランチヒストリ９−２において、非分岐予測がなされた場合には、“０”、分岐予測がなされた場合には“１”となる。セレクタ６１は、分岐予測フラグが“０”のときは、分岐先命令アドレスを、“１”のときは分岐命令アドレスに分岐命令長を加算して得られる信号を、分岐命令プリフェッチアドレスとして選択出力する。
【００７５】
図１７は、分岐命令プリフェッチ可能信号の生成回路の構成例である。
なお、同図の回路は、各分岐命令リザベーションステーションＲＳＢＲｘのそれぞれに対応して設けられるものである。
【００７６】
同図の回路では、各分岐命令リザベーションステーションＲＳＢＲｘのエントリである分岐先アドレス確定フラグ（＋ＲＳＢＲｘ ＴＩＡＲ ＶＡＬＩＤ）と分岐予測フラグの論理反転した信号（−ＲＳＢＲｘ ＢＲＨＩＳ ＨＩＴ）とのＡＮＤが取られる。すなわち、分岐先アドレスが確定し、分岐予測が成立していない場合に、ＡＮＤ回路７１の出力が“１”となる。この信号は、分岐予測フラグ（＋ＲＳＢＲ ＢＲＨＩＳ ＨＩＴ）とともに、ＯＲ回路７２に入力され、更に、ＡＮＤ回路７３に入力される。そして、分岐命令リザベーションステーションＲＳＢＲｘのエントリである分岐条件コード確定フラグ（−ＲＳＢＲｘ ＲＥＳＯＬＶＥＤ）とのＡＮＤが取られ、分岐命令プリフェッチ可能信号（＋ＲＳＢＲｘ ＰＲＥＦＣＨ ＲＥＱ ＶＡＬＩＤ）が出力される。
【００７７】
図１８は、図１９に入力する信号を生成する中間回路の構成例である。
なお、同図の回路は、分岐命令リザベーションステーションＲＳＢＲ０〜ＲＳＢＲ３の優先順位の数だけ、すなわち、本実施形態の場合は、同図の回路も含めて３つが設けられる。
【００７８】
図１４及び図１７の回路からの出力信号をそれぞれＡＮＤ回路８０〜８３に入力し、分岐命令リザベーションステーションの実行順序が与えられ、分岐命令プリフェッチが可能となった時点で、該分岐命令プリフェッチに対応する分岐命令リザベーションステーションＲＳＢＲｘに格納される分岐命令のプリフェッチを要求するための信号を生成するための中間信号（１ＳＴ（ＴＯＱ） ＲＳＢＲ ＰＲＥＦＣＨ ＲＥＱ ＶＡＬＩＤ、この他に、優先順位が２ＮＤ、３ＲＤの信号も平行して生成される）を出力する。
【００７９】
図１９は、分岐命令プリフェッチ要求有効信号と選択信号を生成する回路の構成例である。
同図の回路は、図１８の出力を入力とし、優先順位最上位（１ＳＴ）の分岐命令リザベーションステーションＲＳＢＲｘのプリフェッチを最優先にし、順次２ＮＤ、３ＲＤと分岐命令プリフェッチ選択信号（＋１ＳＴ ＲＳＢＲ ＰＲＥＦＣＨ ＳＥＬ、＋２ＮＤ ＲＳＢＲ ＰＲＥＦＣＨ ＳＥＬ、＋３ＲＤ ＲＳＢＲ ＰＲＥＦＣＨ ＳＥＬ）を出力するものである。この選択信号により、どの分岐命令リザベーションステーションＲＳＢＲｘに登録されている分岐命令に対応する分岐先命令をプリフェッチするかが決定される。
【００８０】
また、いずれかの選択信号が出力された場合には、分岐命令プリフェッチ要求が生成されたものとして、分岐命令プリフェッチ要求（＋ＢＲ ＰＲＥＦＣＨ ＲＥＱ ＶＡＬＩＤ）が出力される。
【００８１】
本実施形態では、図１６〜図１９の回路構成のようにすることで、非分岐予測された場合には、分岐先アドレス計算がすんだ時点で分岐先命令プリフェッチの動作を、分岐予測された場合には命令が分岐リザベーションステーションに登録された時点で非分岐の場合の後続の分岐命令プリフェッチの動作を、直ちに開始することができる。この際、分岐命令プリフェッチ動作を行ったことを示すフラグ（ＲＳＢＲｘ ＰＲＥＦＣＨ ＤＯＮＥ）を分岐命令リザベーションステーションＲＳＢＲｘにセットし、同時に、使用した分岐命令プリフェッチポートが使用中であることを示すフラグを、同じく分岐命令リザベーションステーションＲＳＢＲｘにセットする。
【００８２】
図２０は、分岐命令プリフェッチポートの使用中を示すフラグを生成する回路の構成例である。
図１１で説明したように、分岐命令プリフェッチポートはＡとＢの２つが設けられているので、同図の回路もポートＡ用とポートＢ用の２つが設けられる。ただし、分岐命令プリフェッチポートが２以外の数だけ設けられている場合には、その数に対応して、同図の回路も設ける。
【００８３】
同図の回路は、分岐命令リザベーションステーションのエントリである＋ＲＳＢＲ ＰＲＥＦＣＨ ＰＯＲＴ ｘを入力し、フリップフロップ１０１を介して、プリフェッチに使用しているポートが使用中であることを示すフラグ＋ＰＲＥＦＣＨ ＰＯＲＴｘ ＢＵＳＹを出力する。また、図１１の（９）の信号である再命令フェッチ要求（図２０では、＋ＲＥＩＦＣＨと記載されている＋ＲＥ ＩＦＥＴＣＨ ＲＥＱＵＥＳＴ信号のことである）、あるいは、後述する図２３のプリフェッチポートのキャンセル信号＋ＰＦＣＨ ＰＯＲＴ ｘ ＣＡＮＣＥＬ、あるいは、命令キャッシュから入力されるプリフェッチをキャンセルする旨の信号＋ＣＡＮＣＥＬ ＰＲＥＦＣＨ ＰＯＲＴｘ ＦＲＯＭ ＳＵのいずれかがＯＲ回路１０２に入力された場合に、フリップフロップ１０１をＲＥＳＥＴし、分岐命令プリフェッチポートの使用中フラグ（＋ＰＲＥＦＣＨ ＰＯＲＴｘ ＢＵＳＹ）をリセットする。
【００８４】
そして、ＲＳＢＲｘ ＰＲＥＦＣＨ ＤＯＮＥフラグがセットされている場合は、条件コードが確定し（すなわち、分岐命令リザベーションステーションＲＳＢＲｘにＲＳＢＲｘ ＲＥＳＯＬＶＥＤフラグがセットされ）、かつ前の分岐命令が確定して（すなわち自分自身が優先順位第１位の分岐命令となって）いれば、該プリフェッチ要求を、条件コードに応じて棄却するか、実命令フェッチに切り替えるかすれば良い。
【００８５】
逆に、分岐命令プリフェッチが不要になれば該プリフェッチポートをキャンセルすれば良い。
図２１及び図２２は、分岐命令プリフェッチの実フェッチ化及びキャンセルのための回路例を示す図である。
【００８６】
図２１の回路では、リザベーションステーションＲＳＢＲｘから、分岐成立／不成立フラグ（＋ＲＳＢＲｘ ＴＡＫＥＮ）と、分岐予測フラグ（＋ＲＳＢＲ ＢＲＨＩＳ ＨＩＴ）をＥＸＯＲ回路１１１、１１２に入力し、排他論理和を取る。分岐成立／不成立フラグ（＋ＲＳＢＲｘ ＴＡＫＥＮ）と分岐予測フラグ（＋ＲＳＢＲｘ ＢＲＨＩＳ ＨＩＴ）の一方が“０”、すなわち、分岐が成立しており、分岐不成立を予測している場合、あるいは、分岐が不成立で、分岐成立を予測している場合には、“１”の分岐予測失敗フラグ（＋ＲＳＢＲｘ ＰＲＥＤＩＣＴ ＦＡＩＬＵＲＥ）をＥＸＯＲ回路１１１から出力する。逆に、分岐が成立しており、分岐成立を予測している場合、あるいは、分岐が不成立で、分岐不成立を予測している場合には、“０”の分岐予測成功フラグ（＋ＲＳＢＲｘ ＰＲＥＤＩＣＴ ＳＵＣＣＥＳＳ）を出力する。
【００８７】
図２２では、図２２（ａ）において、図２１の回路からの分岐予測成功／失敗フラグをＡＮＤ回路１２２−１〜１２２−３に入力するとともに、分岐命令リザベーションステーションＲＳＢＲｘから、プリフェッチ要求済みフラグ（＋ＲＳＢＲｘ ＰＲＥＦＣＨ ＤＯＮＥ）、分岐条件コード確定フラグ（＋ＲＳＢＲｘ ＲＥＳＯＬＶＥＤ）をインバータ１２１、及び、ＡＮＤ回路１２２−１〜１２２−３に入力する。そして、プリフェッチ要求済みフラグ（＋ＲＳＢＲｘ ＰＲＥＦＣＨ ＤＯＮＥ）は、ＡＮＤ回路１２２−２、１２２−３に入力されるとともに、ＡＮＤ回路１２２−１に論理反転されて入力される。また、分岐条件コード確定フラグ（＋ＲＳＢＲｘ ＲＥＳＯＬＶＥＤ）は、ＡＮＤ回路１２２−１〜１２２−３にそのまま入力される。また、分岐予測失敗フラグ（＋ＲＳＢＲｘ ＰＲＥＤＩＣＴ ＦＡＩＬＵＲＥ）は、ＡＮＤ回路１２２−１と１２２−２に入力され、分岐予測成功フラグ（＋ＲＳＢＲｘ ＰＲＥＤＩＣＴ ＳＵＣＣＥＳＳ）は、ＡＮＤ回路１２２−３に入力される。プリフェッチ要求が完了しておらず、分岐条件コードが確定し、分岐予測が失敗した場合には、ＡＮＤ回路１２２−１から分岐命令リザベーションステーションＲＳＢＲｘの命令の再フェッチリクエスト（＋ＲＳＢＲｘ ＲＥＩＦＣＨ ＲＥＱＵＥＳＴ）が出力される。プリフェッチ要求が完了しており、分岐条件コードが確定し、分岐予測が失敗した場合には、ＡＮＤ回路１２２−２から分岐命令リザベーションステーションＲＳＢＲｘのプリフェッチを実フェッチに変更する信号（＋ＲＳＢＲｘ ＰＲＥＦＣＨ ＴＯ ＲＥＡＬ）が出力される。また、プリフェッチ要求が完了しており、分岐条件コードが確定し、分岐予測が成功した場合には、命令プリフェッチせずに、命令を直接フェッチすればよいので、命令プリフェッチをキャンセルする信号（＋ＲＳＢＲｘ ＰＲＥＦＣＨ ＣＡＮＣＥＬ）がＡＮＤ回路１２２−３から出力される。
【００８８】
図２２（ｂ）の回路は、再命令フェッチ要求を行うための信号を生成する回路例である。
図２２（ａ）の回路から分岐命令リザベーションステーションＲＳＢＲ０〜ＲＳＢＲ３の再フェッチリクエスト信号（＋ＲＳＢＲ０〜３ ＲＥＩＦＣＨ ＲＥＱＵＥＳＴ）がそれぞれ入力され、図１４の分岐命令リザベーションステーションＲＳＢＲ０〜ＲＳＢＲ３の実行順序を示す信号（＋ＲＳＢＲ ＴＯＱ ＥＱ ０〜３）とのＡＮＤをＡＮＤ回路１２５−０〜１２５−３で取り、更に、これらのＯＲをＯＲ回路１２６で取ることにより、再命令フェッチ要求（＋ＲＥ ＩＦＥＴＣＨ ＲＥＱＵＥＳＴ）が生成される。従って、再フェッチリクエスト信号がいずれかの分岐命令リザベーションステーションＲＳＢＲｘに来ており、その分岐命令リザベーションステーションＲＳＢＲｘの実行順序に来ていたら、再命令フェッチ要求を出すことになる。
【００８９】
図２３は、分岐命令プリフェッチのポート毎のキャンセルを行う信号を生成する回路例である。
同図の回路は、図２２（ｂ）の回路から出力される再命令フェッチ要求（＋ＲＥ ＩＦＥＴＣＨ ＲＥＱＵＥＳＴ）をＯＲ回路１３０−１、１３０−２に入力するとともに、各分岐命令リザベーションステーションＲＳＢＲ０〜３に対応して設けられるＡＮＤ回路１３１−１〜１３１−４・・・からの入力を受けて、図１１に示される分岐命令プリフェッチポートＡ、Ｂのキャンセル信号を生成し、命令フェッチ制御部９に入力する。各分岐命令リザベーションステーションＲＳＢＲ０〜ＲＳＢＲ３については、それぞれ同様な回路構成となっているので、分岐命令リザベーションステーションＲＳＢＲ０について説明する。
【００９０】
まず、ＡＮＤ回路１３１−１には、図２２（ａ）の回路から命令プリフェッチキャンセル信号（＋ＲＳＢＲ０ ＰＲＥＦＣＨ ＣＡＮＣＥＬ）と分岐命令リザベーションステーションＲＳＢＲ０に格納されているプリフェッチポート番号の反対論理信号（−ＲＳＢＲ０ ＰＲＥＦＣＨ ＰＯＲＴ）が入力され、これらの信号のＡＮＤがＡＮＤ回路１３１−１により取られる。これにより、今、命令プリフェッチポートはＡとＢの二つなので、たとえば、“０”をポートＡに“１”をポートＢに割り当てていることを想定している。すると、ＡＮＤ回路１３１−１には、命令プリフェッチキャンセル信号が入力され、そのプリフェッチポートがＡの場合には、ＡＮＤ回路１３１−１はＯＲ回路１３０−１に論理“１”の信号を入力する。従って、ＯＲ回路１３０−１からポートＡのキャンセル信号（ＰＦＣＨ ＰＯＲＴ Ａ ＣＡＮＣＥＬ）が出力される。また、ポートＢの場合には、ＡＮＤ回路１３１−２に命令プリフェッチキャンセル信号が入力され、ポートＢが指定されていた場合には、ポートＢのキャンセル信号（ＰＦＣＨ ＰＯＲＴ Ｂ ＣＡＮＣＥＬ）が出力される。再命令フェッチ要求（＋ＲＥ ＩＦＥＴＣＨ ＲＥＱＵＥＳＴ）の場合には、ポートＡとＢの両方をキャンセルする。
【００９１】
このようにして、分岐命令リザベーションステーションＲＳＢＲ０〜３について、信号を処理し、１つでもキャンセルの条件がそろえば、ＯＲ回路１３０−１からはポートＡのキャンセル信号（ＰＦＣＨ ＰＯＲＴ Ａ ＣＡＮＣＥＬ）が、ＯＲ回路１３０−２からはポートＢのキャンセル信号（ＰＦＣＨ ＰＯＲＴ Ｂ ＣＡＮＣＥＬ）が出力される。
【００９２】
次に、ストア命令が実行命令列に存在した場合の制御について説明する。
ストア命令による書き込みアドレスとフェッチ要求された命令列のアドレスとの比較により該ストア命令がフェッチ命令列を書き換える可能性があることを検出する必要がある。これは通常の命令フェッチだけでなく、本発明の実施形態による分岐命令プリフェッチにおいても考慮すべき事項である。
【００９３】
主記憶装置（あるいは、キャッシュ機構）においては、要求された命令フェッチに対して、結果の命令列を命令制御部に返すまでにストア命令による書き込み指示があった場合には、該ストア命令による書き込みを反映した結果を返すことが出来るものが多い。この場合、結果を命令制御装置側で管理する方法、すなわちストア命令の書き込み管理がキャッシュ機構（あるいは主記憶装置）によって行われない回路を持つ場合のみに、該ストア命令が分岐命令プリフェッチ命令列を書き換える可能性があることを検出し、対策をとれば良い。もちろん、主記憶装置（あるいは、キャッシュ機構）にそのような機構が備わっていない場合は常にこの可能性を検出し、対策をとる必要がある。
【００９４】
分岐命令プリフェッチされる命令列は合計１６バイトであり、またストア系命令によってストアされるデータ列長が常に１６バイト以内であるとすれば、１つのアドレスに１バイトの書き込みが可能であることを考えると、ストア先アドレス値とプリフェッチアドレス値の差が以下の条件を満たす必要がある。すなわち、
−１６＜ストア先アドレス−プリフェッチアドレス＜１６
であるとき、前述の上書き可能性があることになる。
【００９５】
図２４は、ストア命令が分岐命令プリフェッチ命令列を書き換える可能性があることを検出する回路例を示す図である。
同図において、＋ＳＴＯＲＥ ＡＤＲはストア先アドレス、＋ＲＳＢＲｘ ＰＲＥＦＣＨ ＩＡＲは、分岐命令リザベーションステーションｘのプリフェッチアドレス（すなわち、図１６の出力）、＋ＳＴ ＭＮ Ｐｘ ＩＡＲは、この二つのアドレスの引き算の結果であり、分岐命令リザベーションステーションｘ上の分岐命令によって要求された分岐命令プリフェッチ命令列がストア命令によって書き換えられる可能性があることを検出したことを示す信号が、＋ＳＴ ＩＮ ＰＲＥＦＣＨ ｘである。
【００９６】
従って、本実施形態の場合、特に、この検出回路に必要なプリフェッチアドレスとして、分岐命令リザベーションステーションＲＳＢＲｘに記録されている、分岐命令自身の次の命令のアドレスもしくは分岐先アドレスを選択して与える回路は図１６となる。
【００９７】
ストア命令が該分岐命令プリフェッチ命令列を書き換える可能性があると判断された場合に、分岐命令プリフェッチ要求を棄却する場合には、該可能性判断信号を、その他の要求棄却要因との論理和をとって、命令キャッシュあるいは主記憶装置に送出すれば良い。
【００９８】
同図において、ストア先アドレス（＋ＳＴＯＲＥ ＡＤＲ）とプリフェッチアドレス（＋ＲＳＢＲｘ ＰＲＥＦＣＨ ＩＡＲ）の差を減算器１５０で求め、差信号（＋ＳＴ ＭＮ Ｐｘ ＩＡＲ）を生成する。次に、ＡＮＤ回路１５１−１では、＋ＳＴ ＭＮ Ｐｘ ＩＡＲのビットの内、下位４ビットを無視し、上位２７ビットを入力する。ストア先アドレスとプリフェッチアドレスの差が正で１６より小さい場合には、差信号の下位４ビットを除いた上位２７ビットはすべて“０”となる。従って、ＡＮＤ回路１５１−１の出力は“０”となる。一方、ＡＮＤ回路１５１−２には、＋ＳＴ ＭＮ Ｐｘ ＩＡＲをインバータ１５４により論理反転した信号の下位４ビットを除いた、上位２７ビットが入力される。上記アドレスの差が正で１６より小さい場合には、ＡＮＤ回路１５１−２に入力されるビットはすべて“１”となるので、ＡＮＤ回路１５１−２の出力は、“１”となる。これをＯＲ回路１５２で論理和を取り、ＡＮＤ回路５３に入力する。ＡＮＤ回路１５３には、分岐命令リザベーションステーションからプリフェッチ要求済みフラグ（＋ＲＳＢＲ ＰＲＥＦＣＨ ＤＯＮＥ）が入力されており、プリフェッチが要求済みの場合のみ、上書きされる危険性があることを示す信号（＋ＳＴ ＩＮ ＰＲＥＦＣＨ ｘ）を“Ｈ”にして出力する。
【００９９】
上記アドレスの差が負で−１６より大きいときは、上記処理において、ＳＴ ＭＮ Ｐｘ ＩＡＲの論理が反転するので、ＡＮＤ回路５１−１が“１”を出力し、ＡＮＤ回路１５１−２が“０”を出力する。この場合も、プリフェッチが要求済みである場合のみ、信号（＋ＳＴ ＩＮ ＰＲＥＦＣＨ ｘ）が出力される。そして、この信号（＋ＳＴ ＩＮ ＰＲＥＦＣＨ ｘ）を主記憶装置などに入力し、プリフェッチをキャンセルするようにすれば、上書きによる障害を回避することができる。
【０１００】
なお、上記実施形態において、ＲＳＢＲｘやＰＯＲＴｘなどの「ｘ」は、分岐命令リザベーションステーションの番号やポートの番号などを示しており、図面に「ｘ」を用いた信号を使って記載されている回路は、分岐命令リザベーションステーションの数、あるいは、ポートの数に対応した数だけ、それぞれが対応して設けられていることを意味している。
【０１０１】
また、上記実施形態では、プリフェッチアドレスの具体的計算方法を説明しなかったが、これは、本発明の実施形態に係る命令プリフェッチ機構を有効に利用できる場合に、当業者が必要に応じて適切なプリフェッチアドレスを算出させ、使用するようにする。このプリフェッチアドレスの演算の一実施形態としては、条件分岐命令の実行において、分岐予測された分岐先アドレスとは逆の、分岐予測されなかった先のアドレスを命令プリフェッチするようにすることが考えられる。これによれば、分岐予測に失敗しても、もう一つの分岐先である、分岐予測されなかった先のアドレスの命令がすでにプリフェッチされているので、命令処理速度の向上に非常に有効である。
【０１０２】
また、上記実施形態では、別々に説明したが、第１の問題点を解決する構成と第２の問題を解決する構成とをともに情報装置に組み込めば、より有効なことは、当業者によれば、容易に認識され、実現されるであろう。
【０１０３】
上記実施形態においては、命令プリフェッチを実命令フェッチに対して１回のみ行う構成を示したが、以下には、命令プリフェッチに対する更に次の命令のプリフェッチを行う実施形態について説明する。
【０１０４】
図２５は、前述の実施形態における命令実行の様子を説明する概念図である。
図２５において、実線の枠は、実命令フェッチを表している。すなわち、まず、現在フェッチされた命令列に対し、命令のデコードを行い、処理を行うと共に、分岐予測を行い、分岐先命令列をフェッチする。そして、この分岐先命令ののフェッチに伴って、分岐予測が発生し、更に先の分岐先命令列がフェッチされる。そして、この分岐先命令列の次の命令に対し、命令プリフェッチ（後続命令プリフェッチを行うか分岐予測を行って分岐先命令のプリフェッチを行う。
【０１０５】
しかしながら、前述の実施形態においては、命令プリフェッチ対象は「続いて命令フェッチ要求を予定している命令列」のみであった。これは命令プリフェッチの効果を自ら制限するものであった。前述の実施形態においては、命令デコードのための一時命令バッファは、
・アドレスが連続する、連続した命令列の長さ
・分岐予測により、アドレスは連続しないが実行経路として連続する（と予測される）命令列の、不連続点（分岐すると予測された分岐命令）の数
の２点で物理的に制限される。図２５に示されるように、この命令フェッチの物理制約の直後の後続命令あるいは分岐先命令に対して命令プリフェッチを行うこと、（あるいは、それぞれ分岐予測が失敗した場合に備えての、それぞれ非分岐側の後続の命令プリフェッチ）のみが可能であった。
【０１０６】
以下の実施形態では、これを更に一般化し、その更に先までトレースすることが可能なようにする。特に、「続いて命令プリフェッチ要求を予定している命令列」へ適用できるように拡張する。すなわち、命令フェッチの一時バッファの大きさなどの物理制約によって命令プリフェッチ要求が制限されなくなるようにする。
【０１０７】
図２６は、本実施形態の概念図である。
すなわち、図２６の上段に現在の命令列が実フェッチされ、命令のレコードが行われる処理が示されているが、このとき、分岐予測を行い、分岐先命令列の実命令フェッチが行われる。更に、分岐先命令列の分岐予測を行い、次の分岐先命令列の実フェッチを行う。そして、次の段において、分岐予測がなされ、後続命令のプリフェッチあるいは、分岐先命令のプリフェッチが行われる。本実施形態では、この命令プリフェッチされた分岐先命令列に基づいて、更に分岐予測を行い次の分岐先命令列の命令プリフェッチを行う。このようにして、１つ前に命令プリフェッチされた命令列に基づいて、更に次の命令列の命令プリフェッチを行う点が本実施形態の特徴である。
【０１０８】
この拡張により、トレースキャッシュ方式を採用していない一般のキャッシュメモリと、ブランチヒストリなどの分岐予測手段を組み合わせることで、少ないコストで簡単にトレースキャッシュと同程度の機能を構築することができる。
【０１０９】
図２７は、本実施形態の処理の基本的な流れを示すフローチャートである。
まず、最初ステップＳ１において、再命令フェッチが生じたとすると、ステップＳ２において、命令一時バッファが満杯か否かを判断する。命令一時バッファが満杯でない場合には、ステップＳ３において、命令フェッチ動作を行い、ステップＳ２に戻る。ステップＳ２において、命令一時バッファが満杯であるときには、分岐成立を予測したが分岐先フェッチが出来なかったか、分岐成立が予測されずに後続フェッチができなかったのかによって、ステップＳ４あるいはステップＳ５に進む。
【０１１０】
ステップＳ４においては、分岐予測成立を予測したが分岐先フェッチが出来なかった場合なので、分岐予測先命令プリフェッチ機構を起動し、命令プリフェッチアドレスを設定し、命令プリフェッチアドレスを有効化する。ステップＳ５においては、分岐成立が予測されずに後続フェッチができなかった場合なので、後続命令プリフェッチ機構を起動し、命令プリフェッチアドレスを設定し、命令プリフェッチアドレスを有効化する。
【０１１１】
ステップＳ６においては、再び再命令フェッチ要求が生じたか否かを判断する。再命令フェッチ要求が発生した場合には、ステップＳ７に進んで、命令一時バッファのクリアなどを行い、ステップＳ８において、命令プリフェッチアドレスを無効化してステップＳ１に戻る。
【０１１２】
ステップＳ６において、再命令フェッチ要求が生じていない場合には、ステップＳ９に進み、命令一時バッファが満杯か否かを判断する。命令一時バッファが満杯でない場合には、命令フェッチ動作を行い（ステップＳ１０）、ステップＳ６に戻る。
【０１１３】
ステップＳ９において、命令一時バッファが満杯であると判断されると、ステップＳ１１に進み、前回の命令プリフェッチで分岐予測がされたか否かが判断される。分岐予測された場合には、ステップＳ１２に進んで、分岐予測先命令プリフェッチ機構を起動し、命令プリフェッチアドレスを更新して、ステップＳ６に戻る。分岐予測されない場合には、ステップＳ１３において、後続命令プリフェッチ機構を起動し、命令プリフェッチアドレスを更新して、ステップＳ６に戻る。
【０１１４】
すなわち、後続の処理方向へのデマンドフェッチ（実命令フェッチ）が行える間は、そのデマンドフェッチを優先すべきで、従って、デマンドフェッチを行う。
【０１１５】
デマンドフェッチを行えない状況になった場合（ヘッジフェッチ（分岐予測された分岐先とは反対の予測されなかった方の命令列のフェッチ）を行うかどうかは実装により可変）、その後続処理（分岐予測を含む）命令列の命令プリフェッチを要求し、要求した命令プリフェッチアドレスを格納し、また、そのアドレスによって分岐予測機構を参照する。
【０１１６】
また、デマンドフェッチが行える場合には、それを優先するし、あるいは命令の実行系列が予測と異なった場合の再命令フェッチの要求が出された場合は命令プリフェッチのアドレスを無効化する。どれにも当てはまらなければ命令プリフェッチを起動し、前回登録したアドレスの次の実行系列（分岐予測がされたら、その分岐先、されなければ後続命令列）を命令プリフェッチし、そのアドレスを登録する。
【０１１７】
他にオルタネイトパス（実行予測されている方向以外の分岐方向の命令列など）の命令フェッチ（ヘッジフェッチ等）を持つ機構も存在するが、それはデマンドフェッチとプリフェッチの間で行えばよく、本質的な考え方は前述の通りである。
【０１１８】
ここで、命令プリフェッチ手段も通常の命令フェッチ要求と同様ＬＢＳ（Local  Buffer  Storage：一次キャッシュ）を動作させるので、命令プリフェッチによって、その後続の命令フェッチ要求（もしくは命令プリフェッチ要求）は阻害されうる。
【０１１９】
すなわち、命令プリフェッチ要求を大量に発行すると、最悪の場合、その命令プリフェッチによってＬＢＳと下位メモリ間のメモリ転送処理を行うために、その後本当に必要となった通常の命令フェッチ要求でさえ、かなり待たされる。
【０１２０】
図２８は、命令プリフェッチ要求の影響で命令フェッチ要求が遅延する場合を説明する図である。
図２８上段に記載されているように、分岐命令であるＢＣによって、分岐予測され、分岐先としてＸＸＸが予測されたとすると、図２８下段に記載されているように、ＢＣの処理がサイクルＩＡ、ＩＴ、ＩＢ、ＩＲと進行する間に、分岐先命令プリフェッチ（ＸＸＸのプリフェッチ）がサイクルＰＡ、ＰＴ、ＰＢと進む。ここで、分岐先命令プリフェッチがＰＢまで進むと、下位メモリから分岐先命令のプリフェッチを行うためデータの転送処理時間が必要となる。すると、ＢＣの次の命令であるＮＯＰの実行が始まっても、下位メモリにアクセスできないため、サイクルＩＡ、ＩＴと進んだ、ＮＯＰの実行は分岐先命令プリフェッチの転送処理の終了を待たなくてはならず、サイクルＩＢ、ＩＲの実行が非常に遅延してしまう。
【０１２１】
あるいは、命令フェッチ及び命令プリフェッチの優先順位の制御構成によっては、通常の命令フェッチ要求を出せなくなる可能性がある。
図２９は、命令プリフェッチ要求を制約なしに出せてしまうと問題となる場合について説明する図である。
【０１２２】
この例では、図２９上段に示されているように、計数分岐命令ＢＣＴにより一定回数だけＸＸＸとＢＣＴが繰り返し実行される命令列を示している。分岐予測により、ＢＣＴはＸＸＸに分岐することが予測されるので、図２９下段に示されるように、実行予測命令列は順に、・・・、ＮＯＰ、ＸＸＸ、ＢＣＴ、ＸＸＸ、ＢＣＴ、ＸＸＸ、ＢＣＴ、・・・となる。このうち、ＸＸＸ、ＢＣＴの命令列は、２回目以降は直前のＢＣＴの分岐先命令であるので、分岐先命令プリフェッチによるプリフェッチ要求が出続ける。すると、ＮＯＰの後続命令である１回目のＸＸＸ、ＢＣＴ命令列が最初に後続命令プリフェッチとして発行されていると、この分岐先命令プリフェッチの方が後続命令フェッチより優先順位が高い場合には、図２９のようになってしまい。このデマンドフェッチ（後続命令フェッチ）は発行できなくなる。
【０１２３】
したがって、命令プリフェッチ要求の頻度をある程度制限する手法が有効（あるいは実施方法によって必須）となる。
図３０は、命令プリフェッチ抑制回路の構成例を示す図である。
【０１２４】
前述の実施形態においては、命令フェッチポート毎に命令プリフェッチ完了のフラグを設置し、命令プリフェッチ要求の制御を行っていた。本実施形態においては、命令プリフェッチ先の命令プリフェッチのための制御が必要となる。
【０１２５】
本実施形態の第１の構成例として、簡易的な再帰的命令プリフェッチ手段を備える例を示す。
前述の実施形態のような優先順位回路を備える場合、分岐予測先命令プリフェッチ要求は、後続命令デマンドフェッチよりも優先順位が高いので、前述のように「はまる」（後続命令フェッチが分岐先命令プリフェッチの連続発行により、行えなくなる状態になる）可能性はある。したがって、例えば、分岐先命令プリフェッチ要求（＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＢＲＨＩＳ ＧＯ）が一定回数発行された場合には、デマンドフェッチが行われるまで命令プリフェッチ要求を抑制（＋ＳＵＰＲＥＳＳ ＢＲＨＩＳ ＴＧＴ ＰＲＥＦＣＨ）する論理を構成する。これが、図３０の構成である。図３０の構成においては、計数回路によって分岐先命令プリフェッチ要求が発行された回数を計数する構成となっている。この際、デマンドフェッチが行われれば、「はまり」状態からは回避できていることになるので、（命令プリフェッチではない）命令フェッチ要求を出したことを示す＋ＩＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤを計数回路のリセット信号としている。
【０１２６】
図３１は、命令プリフェッチとデマンドフェッチとを切り替えるために必要となるフェッチポート選択回路の構成例を示す図である。
図３１の命令フェッチポート選択回路は、命令フェッチを行う場合にどのポートを使うかを演算して、指示信号を出力する回路であり、詳細な構成は公知の技術と同様であるので説明を省略する。
【０１２７】
図３１の構成では、命令フェッチを行うポートは、Ａ、Ｂ、Ｃの３つがあるとしている。そして、これら３つの全てのセレクト信号が出力された場合に、命令フェッチポートが満杯である旨の信号＋ＩＢＵＦＦ ＦＵＬＬが出力される構成となっている。
【０１２８】
図３２は、図３０、図３１の構成を反映した優先順位決定回路の構成例を示す図である。
図３２の構成においては、前述の＋ＳＵＰＲＥＳＳ ＢＲＨＩＳ ＴＧＴ ＰＲＥＦＥＣＨによって制限されない限りは、優先順位に従い、その以前の要求がプリフェッチであるかデマンドフェッチであるかに関わらず、その要求に対応する分岐先命令プリフェッチ（あるいは後続命令プリフェッチ）を要求することが可能となる。すなわち、図３２の出力＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＢＲＨＩＳ ＧＯが図３０の計数回路に入力され、分岐先命令プリフェッチが生じた回数を計数し、所定回数になったら分岐先命令プリフェッチを抑制する−ＳＵＰＲＥＳＳ ＢＲＨＩＳ ＴＧＴ ＰＲＥＦＥＣＨが図３２の優先順位決定回路に入力され、＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＢＲＨＩＳ ＧＯの出力が抑制される。
【０１２９】
このような構成を取ることで、前述の「はまり」状態を回避しつつ、深い命令プリフェッチを発行することが可能である。
図３３は、前述の実施形態の命令プリフェッチによるブランチヒストリ検索回路を示す図である。
【０１３０】
アドレス演算器からのアドレス＋ＩＦ ＥＡＧがブランチヒストリに入力されると、対応するデータとＴＡＧが出力される。出力されたＴＡＧを用いてヒット検出を行い、出力されたデータの選択を行う。データの選択を行うのは、図３３がセットアソシエイティブ方式を採用していることを前提にしているからであり、採用する方式によっては、データ選択は行う必要がない場合がある。出力されたデータとヒット検出信号はＦＦを介して、＋ＩＢ ＢＲＨＩＳ ＤＡＴＡ、及び、＋ＩＢ ＢＲＨＩＳ ＨＩＴとして出力される。ここで、パイプラインにおいてインターロックが生じたことを示す信号＋ＰＩＰＥＬＩＮＥ ＩＮＴＥＲＬＯＣＫは、データ用及びヒット信号用ＦＦに入力され、インターロックが生じた場合には、その直前に検出されたブランチヒストリのヒットデータ及びヒット信号を保持するように構成されている。
【０１３１】
ここでは、ブランチヒストリの検索結果を得るのに２τ（τはマシンサイクル）かかるものとする。前述の実施形態では、キャッシュミスなどにより命令フェッチデータを待つ場合（パイプラインインタロックが発生する場合）にはブランチヒストリの検索結果をパイプラインに同期させるためにその間、＋ＰＩＰＥＬＩＮＥ ＩＮＴＥＲＬＯＣＫ信号によりホールドさせているが、命令プリフェッチはパイプラインインタロックとは無関係に動作するようにするために、別途制御する必要がある。
【０１３２】
図３４は、本実施形態を図３３のブランチヒストリ検索回路に適用した構成例を示す図である。
なお、ここにおいて、ブランチヒストリ、ヒット検出、データ選択、データ用及びヒット信号用ＦＦの動作は、図３３と同じなので説明を省略する。
【０１３３】
ここでは、ＩＡ、ＩＴ、ＩＢ、ＩＲの４段パイプラインによる命令フェッチを仮定している。検索の要求に関し、ＩＴサイクルでパイプラインインタロックが発生した場合の最初のＩＢサイクル、ＩＢサイクルでパイプラインインタロックが発生している場合、いずれでもパイプラインインタロックが発生しなかった場合の最初のＩＢサイクル、の３つで場合分けして、前述の実施形態の＋ＩＢ ＢＲＨＩＳ ＨＩＴと全く同じ信号を生成することができる。
【０１３４】
すなわち、図３４の＋１ＳＴ ＩＢ ＥＱ ＩＴ １Ｔ ＶＡＬＩＤ信号は、パイプラインインタロックが発生していない場合に、＋ＩＴ ＢＲＨＩＳ ＨＩＴ １Ｔ（ヒット信号）をそのまま＋ＩＢ ＢＲＨＩＳ ＨＩＴとして出力させる信号である。
【０１３５】
また、ＩＴサイクルでロックが生じた場合には、ＦＦ２００に−ＩＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤ ２Ｔが入力され、ロックしたために繰り返されるＩＴサイクルの内、２番目のＩＴサイクルにおいて生じたブランチヒストリヒット信号と、ＩＴサイクルのロックが解けて後の最初のＩＢサイクルにおいて生じたブランチヒストリヒット信号とがＦＦ２００に保持される。また、最初のＩＢサイクルにおいて生じたヒット信号は、パイプラインインタロックが生じた場合には、ＦＦ２０１にも保持される。そして、ＩＴサイクルがロックした場合に、＋１ＳＴ ＩＢ ＶＡＬＩＤ ＩＴ ＰＥＮＤＥＤがＦＦ２００からの＋ＩＴ ＢＲＨＩＳ ＨＩＴ ２Ｔ ＨＯＬＤを＋ＩＢ ＢＲＨＩＳ ＨＩＴとして出力させる。
【０１３６】
パイプラインインタロックが生じて、ＩＢサイクルで処理がロックした場合には、＋ＰＩＰＥＬＩＮＥ ＩＮＴＥＲＬＯＣＫＥＤがＦＦ２０１に入力され、ＩＢサイクルの２番目以降において生じたヒット信号がＦＦ２０１に保持される。そして、＋ＩＢ ＰＥＮＤＩＮＧによって、ＦＦ２０１から出力される＋ＩＢ ＢＲＨＩＳ ＨＩＴ ＰＥＮＤＩＮＧが＋ＩＢ ＢＲＨＩＳ ＨＩＴとして出力される。
【０１３７】
図３５は、図３４の動作を説明するタイミングチャートである。
図３５においては、ＩＴサイクルとＩＢサイクルの両方でインターロックが起こった場合を示している。
【０１３８】
まず、マシンサイクルがＩＡ、ＩＴ、ＩＴ、ＩＴ、ＩＢ、ＩＢ、ＩＢ、ＩＢ、ＩＲとなったとする。ブランチヒストリの検索結果を得るには、２τかかるので、ＩＡでブランチヒストリを検索した結果は、２番目のＩＴにおいて得られる。このとき、▲１▼−１で示されるように、＋ＩＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤ ２Ｔが立ち上がり、この時点のヒット信号がＦＦ２００に取り込まれる。＋ＰＩＰＥＬＩＮＥ ＩＮＴＥＲＬＯＣＫは、２番目と３番目のＩＴサイクルで立ち上がっているとする。すると、＋ＩＴ ＢＲＨＩＳ ＨＩＴ １Ｔが▲１▼−２に示すように立ち上がり、同じ信号がＦＦ２００にセットされている結果、▲１▼−３に示すように、＋ＩＴ ＢＲＨＩＳ ＨＩＴ ２Ｔ ＨＯＬＤが立ち上がる。
【０１３９】
そして、インタロックが解けて、ＩＴサイクルからＩＢサイクルに変わり、ＩＢサイクルの２番目から再びインタロックが生じたとすると、＋ＩＢ ＢＲＨＩＳ ＨＩＴ ＰＥＮＤＩＮＧの信号が立つ（▲２▼−２）。また、＋ＩＴ ＢＲＨＩＳ ＨＩＴ ２Ｔ ＨＯＬＤは、次回の＋ＩＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤ ２Ｔが立つまで同じ信号を保持している（▲２▼−１）。セレクタ２０２において、ＩＴサイクルでロックしたが、ＩＢサイクルではロックしなかった場合には、＋１ＳＴ ＩＢ ＶＡＬＩＤ ＩＴ ＰＥＮＤＥＤによって、＋ＩＴ ＢＲＨＩＳ ＨＩＴ ２Ｔ ＨＯＬＤが＋ＩＢ ＢＲＨＩＳ ＨＩＴとして出力され、ＩＢサイクルにおいてインタロックが生じた場合には、＋ＩＢ ＢＲＨＩＳ ＨＩＴ ＰＥＮＤＩＮＧが＋ＩＢ ＰＥＮＤＩＮＧによって＋ＩＢ ＢＲＨＩＳ ＨＩＴとして出力される（▲２▼−３）。
【０１４０】
以上の構成により、命令プリフェッチの命令プリフェッチがどのタイミングで出てもブランチヒストリにヒットしたことを検出することが出来る。また、データの方は、出力される度に、メモリに格納しておき、必要に応じて読み出す。
【０１４１】
本実施形態の第２の構成例として、本格的な再帰的命令プリフェッチ手段を備える例を示す。ここで、再帰的とは、プリフェッチに基づいて順次次のプリフェッチを行うことを示す。
【０１４２】
ここでは、命令プリフェッチアドレスを保持するレジスタを準備することで、トレース（再帰的に命令プリフェッチを行うためにアドレスを順次生成すること）を可能とする。
【０１４３】
命令プリフェッチアドレスは、実行予測命令列のアドレスをトレース出来れば良いので、そのアドレスの更新条件は、命令プリフェッチ要求が成立することである。
【０１４４】
また、再命令フェッチや割り込みなどにより命令実行をやり直す場合、先読みしていた命令プリフェッチ、すなわち予測されていた実行系列と実際の実行系列が変わるので、命令プリフェッチをトレースし直すための制御が必要になる。
【０１４５】
図３６は、命令フェッチ及びプリフェッチアドレスの生成回路の構成例を示す図である。
ここで、図中の命令フェッチ制御回路には、優先順位決定回路や図３１の命令フェッチポート選択回路などが含まれる。プリフェッチの機能を除いては前述の実施形態通りである。
【０１４６】
すなわち、ブランチヒストリの分岐予測結果は、ＢＲＨＩＳ−ＴＧＴ−ＩＡＲとして、セレクタ２１０に入力される。また、命令実行制御機構からの再命令フェッチ要求は、ＩＡＲＸとして、セレクタ２１０に入力される。セレクタ２１０の出力は、フェッチポートＩＡＲ−Ａ〜ＩＡＲ−Ｃ及び、プリフェッチ用ポートＰＦ−ＩＡＲの何れかに入力される。どのポートにセレクタ２１０の出力である命令フェッチアドレスあるいは命令プリフェッチアドレスを入力するかは、命令フェッチ制御回路の命令フェッチポート選択回路によって決定される。命令フェッチポート選択回路から＋ＩＢＵＦＦ ＦＵＬＬが出力された場合には、プリフェッチ用ポートＰＦ ＩＡＲが選択される。これら命令フェッチポートから出力されたアドレスは、所定の数値（ここでは、１６）が加算されて、後続の命令アドレスとしてセレクタ２１０から出力される。
【０１４７】
図３７は、プリフェッチアドレス生成回路の構成例を示す図である。
後述の優先順位決定回路により分岐予測先命令プリフェッチが行われた時、最初にその命令プリフェッチアドレスがセットされ、図３７の回路が有効となる。更に、図３７の回路が有効で有れば、優先順位決定回路により、再帰的命令プリフェッチが発行されたときに命令プリフェッチアドレスが更新される。また、再命令フェッチなどが発生した場合には、＋ＣＬＥＡＲ ＰＩＰＥＬＩＮＥが発行され、この回路が無効化される。
【０１４８】
すなわち、プリフェッチ要求が有効の場合には、＋ＩＦ ＰＲＥＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤ信号が立ち上がり、ＳＲ−ＦＦを介して、命令プリフェッチのイネーブル信号＋ＥＮＡＢＬＥ ＰＲＥＦＣＨ ＴＲＡＣＥが出力されると共に、＋ＩＦ ＰＲＥＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤ信号の立ち上がりのタイミングで入力される命令プリフェッチアドレスＩＦ ＥＡＧがＰＦ−ＩＡＲに取り込まれ、＋ＩＦ ＰＲＥＦＣＨ ＴＲＡＣＥ ＡＤＲＳとして出力される。＋ＣＬＥＡＲ ＰＩＰＥＬＩＮＥがＳＲ−ＦＦに入力される場合には、命令プリフェッチイネーブル信号＋ＥＮＡＢＬＥ ＰＲＥＦＣＨ ＴＲＡＣＥがリセットされるので、ＰＦ−ＩＡＲから出力される命令プリフェッチアドレスは無視される。
【０１４９】
図３８は、本構成例における優先順位決定回路の構成例を示す図である。
ここでは、命令実行系列が分岐予測と異なった場合や割り込み発生などによる再命令フェッチ（＋ＩＦ ＲＥＱ ＲＥＩＦＣＨ ＧＯ）が最も優先度が高く、続いて、分岐予測がなされたときの分岐先命令フェッチ（＋ＩＦ ＲＥＱ ＢＲＨＩＳ ＧＯ）、そして、その次の優先順位では、命令フェッチポートが全て埋まっていた場合で分岐予測がなされた場合には、命令プリフェッチの起動を兼ねて分岐先命令プリフェッチを行う（＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＢＲＨＩＳ ＧＯ）。その下に、分岐予測が行われなかった時の後続命令フェッチ（＋ＩＦ ＲＥＱ ＳＥＱＵＥＮＴＩＡＬ ＧＯ）、更に下に、命令プリフェッチの先の（トレースの）再帰命令プリフェッチ（分岐予測がされた場合（＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＴＲＡＣＥ ＢＲＨＩＳ ＧＯ）とされなかった場合（＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＴＲＡＣＥ ＳＥＱ ＧＯ））がある。
【０１５０】
図３９は、キャッシュに対するフェッチ・プリフェッチ要求信号の出力回路の構成例を示す図である。
なお、図３９の回路は、前述の図８の回路に置き換えられるべき回路であり、図８と同じ部分の説明は省略する。
【０１５１】
＋ＩＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤが出力されるときは、デマンド命令フェッチ（実命令フェッチ）であり、＋ＩＦ ＰＲＥＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤが出力されるときは、命令プリフェッチ要求である。
【０１５２】
＋ＩＦＣＨ ＲＥＱＵＥＳＴ ＶＡＬＩＤは、図３０のリセット信号としても使用される。また、図３９では、ＯＲ回路２１５の入力として、分岐先命令プリフェッチのイネーブル信号＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＢＲＨＩＳ ＧＯの他に、再帰的分岐先命令プリフェッチイネーブル及び、再帰的後続命令プリフェッチのイネーブル（＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＴＲＡＣＥ ＢＲＨＩＳ ＧＯ及び＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＴＲＡＣＥ ＳＥＱ ＧＯ）が設けられている。
【０１５３】
図８と比較すると、再帰的命令プリフェッチのためのイネーブルが追加されると共に、再帰的でない後続命令プリフェッチのイネーブル（＋ＩＦ ＲＥＱ ＰＲＥＦＣＨ ＳＥＱ ＧＯ）が無くなっている。これは、再帰的でない後続命令プリフェッチのイネーブルと再帰的後続命令プリフェッチのイネーブルを共用する構成としたからである。
【０１５４】
以上の本実施形態によれば、ハードウェアコストを少なくして、トレースキャッシュ方式のキャッシュメモリと同程度のプリフェッチ効果を期待できる。
したがって、命令キャッシュに対してトレースキャッシュを採用する必要が無くなり、ハードウェア量に対する性能効果が大きい。
本発明は以下の形態で実施が可能である。
（付記１）キャッシュメモリ手段と、それよりも下位のメモリ手段と、該キャッシュメモリ手段に格納された命令列を投機的に実行する手段を備えた命令制御装置における命令のフェッチを制御する命令フェッチ制御装置であって、
該キャッシュメモリ手段に命令フェッチ要求を出す命令フェッチ手段と、
続いてフェッチ要求を予定している命令列が、該キャッシュメモリ手段に存在しない場合には、該キャッシュメモリ手段に、該下位メモリ手段から該予定命令列を事前に転送しておく命令プリフェッチを行う命令プリフェッチ手段と、
を備えることを特徴とする装置。
（付記２）更に、
分岐命令の成立の可否、及び成立の際の分岐先アドレスを予測する分岐予測手段と、
フェッチした命令列を格納するための１つ以上のバッファ手段とを備え、
前記命令プリフェッチ手段は、
該分岐予測手段によって分岐すると予測されたにも関わらず、該バッファ手段が空いておらず、かつ、前記キャッシュメモリ手段内に、フェッチ要求を予定している分岐予測先命令列が存在しない場合には、前記キャッシュメモリ手段に前記下位メモリ手段から該予測命令列を事前に転送しておくことを特徴とする付記１に記載の装置。
（付記３）前記命令プリフェッチ手段は、インタロック要因によって、通常行われるべき命令フェッチ要求が出せない場合に、前記キャッシュメモリ手段に対して前記命令プリフェッチを行うことを特徴とする付記１に記載の装置。
（付記４）更に、前記命令プリフェッチを含む命令フェッチの種別に応じた優先順位を設定し、該優先順位に従って前記キャッシュメモリ手段に対する命令フェッチあるいは命令プリフェッチを、前記命令フェッチ手段あるいは命令プリフェッチ手段に行わせる優先順位決定手段を備えることを特徴とする付記１に記載の装置。
（付記５）更に、前記命令プリフェッチによる前記キャッシュメモリ手段への命令列転送中に、当該命令列の命令フェッチが行われる場合、該命令フェッチが該命令プリフェッチを受け継ぐ、あるいは、該キャッシュメモリ手段へ転送中の命令列を前記バッファ手段へバイパスする制御手段を備えることを特徴とする付記１に記載の装置。
（付記６）前記命令プリフェッチ手段は、同じアドレスもしくは同じキャッシュブロックに対する前記命令プリフェッチを連続して行わないことを特徴とする付記１に記載の装置。
（付記７）前記命令プリフェッチ手段は、前記命令プリフェッチされた命令列に対する命令プリフェッチを行うことを特徴とする付記１に記載の装置。
（付記８）前記命令プリフェッチの要求が際限なく発行されるのを抑制する抑制手段を更に備えたことを特徴とする付記７に記載の装置。
（付記９）前記命令プリフェッチのためのアドレスレジスタを更に備えることを特徴とする付記７に記載の装置。
（付記１０）前記アドレスレジスタの値が有効か否かを示すフラグを保持することを特徴とする付記９に記載の装置。
（付記１１）現実に実行されるべき命令列の再実行が必要になった場合、前記アドレスレジスタを無効化することを特徴とする付記９に記載の装置。
（付記１２）前記命令プリフェッチされた命令列に対する命令プリフェッチを行う場合に、分岐予測機構を使用することを特徴とする付記７に記載の装置。
（付記１３）キャッシュメモリ手段と、それよりも下位のメモリ手段と、該キャッシュメモリ手段に格納された命令列を投機的に実行する手段を備えた命令制御装置における命令のフェッチを制御する命令フェッチ制御装置であって、
該キャッシュメモリ手段に命令フェッチ要求を出す命令フェッチ手段と、
条件分岐命令もしくは無条件分岐命令を実行する際に、分岐成立する場合の分岐先命令アドレスを求めるアドレス生成手段と、
該分岐命令の分岐する場合の分岐先命令アドレスが求められた時点で、前記キャッシュメモリ手段に該分岐先命令の命令フェッチを要求する分岐先命令プリフェッチを行う分岐先命令プリフェッチ手段と、
を備えることを特徴とする装置。
（付記１４）更に、
前記分岐命令の成立の可否、及び成立の際の分岐先アドレスを予測する分岐予測手段を備え、
前記分岐命令プリフェッチ手段は、
該分岐予測手段により分岐予測された分岐命令の実行に際し、分岐しない場合の命令アドレスの命令フェッチを前記キャッシュメモリ手段に対して要求することを特徴とする付記１３に記載の装置。
（付記１５）更に、
１つ以上の実行中の分岐命令により、分岐命令プリフェッチを要求することが可能とされたそれぞれの分岐命令に優先順位を設定し、その優先順位に従って、前記分岐命令プリフェッチ手段に分岐命令プリフェッチを要求させる優先順位決定手段を備えることを特徴とする付記１４に記載の装置。
（付記１６）更に、
１つ以上の分岐命令プリフェッチ要求による命令列の保留のための１つ以上の命令バッファ手段を備えることを特徴とする付記１３に記載の装置。
（付記１７）前記分岐命令の実行及び分岐先が確定した時点で、該分岐命令の後続命令のフェッチ及び実行を中止棄却し、該分岐命令に対応する分岐命令プリフェッチを実命令フェッチへと変更して、該分岐命令フェッチを継続実行あるいは中断解除し、該分岐命令の分岐先命令を実行させることを特徴とする付記１３に記載の装置。
（付記１８）．前記分岐予測手段によって分岐することが予測された該分岐命令が、実行され、かつ、分岐しないことが確定した時点、あるいは、予測された分岐先と異なる分岐先へ分岐することが確定した時点で、該分岐命令の予測分岐先命令の命令フェッチおよび命令実行を中止棄却し、該分岐命令に対応する後続命令の分岐命令プリフェッチを実命令フェッチへと変更して、後続命令フェッチを継続実行あるいは中断解除し、上記後続命令を実行させることを特徴とする付記１４に記載の装置。
（付記１９）該分岐命令が条件分岐命令である場合に、該分岐命令が実行されること、あるいは、分岐せず後続命令を実行することが確定した時点、あるいは、該分岐命令が実行されないことが確定した時点で、それまで行っていた該分岐命令プリフェッチを棄却することを特徴とする付記１３に記載の装置。
（付記２０）前記分岐予測手段において分岐予測が成立している前記分岐命令が実行されること、あるいは、予測された該分岐命令の分岐先命令を実行することが確定した時点で、それまで行っていた該分岐命令プリフェッチを棄却することを特徴とする付記１４に記載の装置。
（付記２１）更に、
命令の実行の結果、分岐命令プリフェッチされるべき命令列を書き換える可能性があることを検出する検出手段を備えることを特徴とする付記１３に記載の装置。
（付記２２）前記検出手段は、
ストア命令のアドレス及び分岐命令プリフェッチ要求を出した分岐命令自身のアドレス、もしくは、該分岐命令の分岐先命令のアドレスを用いて、命令列の書き換えの可能性を検出することを特徴とする付記２１に記載の装置。
（付記２３）前記命令が実行された場合、前記分岐命令プリフェッチされるべき命令列が書き換えられることが判明した場合、該分岐命令プリフェッチ要求を棄却することを特徴とする付記２１に記載の装置。
（付記２４）前記分岐命令の分岐先命令のアドレスが求められた時点で、前記キャッシュメモリ手段に該アドレスに対応する命令が確保されていない場合に、前記下位メモリ手段から該キャッシュメモリ手段へ該分岐先命令を転送することを要求することを特徴とする付記１３に記載の装置。
（付記２５）前記分岐予測手段により分岐予測された分岐命令の実行に際し、前記キャッシュメモリ手段に、分岐しない場合の命令アドレスに対応する後続命令列が確保されていないと判明した場合には、前記下位メモリ手段から該キャッシュメモリ手段へ該後続命令列を転送することを要求することを特徴とする付記１４に記載の装置。
（付記２６）前記分岐先命令プリフェッチ手段は、前記分岐先命令プリフェッチを行った命令列に対して命令プリフェッチを行うことを特徴とする付記１３に記載の装置。
（付記２７）前記命令プリフェッチの要求が際限なく発行されるのを抑制する抑制手段を更に備えたことを特徴とする付記２６に記載の装置。
（付記２８）前記命令プリフェッチのためのアドレスレジスタを更に備えることを特徴とする付記２６に記載の装置。
（付記２９）前記アドレスレジスタの値が有効か否かを示すフラグを保持することを特徴とする付記２８に記載の装置。
（付記３０）現実に実行されるべき命令列の再実行が必要になった場合、前記アドレスレジスタを無効化することを特徴とする付記２８に記載の装置。
（付記３１）前記命令プリフェッチされた命令列に対する命令プリフェッチを行う場合に、分岐予測機構を使用することを特徴とする付記２６に記載の装置。
（付記３２）キャッシュメモリと、下位メモリと、該キャッシュメモリに命令フェッチ要求を出す命令フェッチ装置と、該キャッシュメモリに格納された命令列を処理する命令制御装置とを備える装置における命令制御方法であって、
（ａ）続いてフェッチ要求を予定している命令列が、該キャッシュメモリに存在しない場合には、該キャッシュメモリに、該下位メモリから該予定命令列を事前に転送しておく命令プリフェッチを行うステップを備えることを特徴とする方法。
（付記３３）更に、
（ｂ）分岐命令の分岐先命令を予測するステップと、
（ｃ）フェッチした命令列を格納するステップとを備え、
前記ステップ（ａ）では、
該ステップ（ｂ）によって分岐すると予測されたにも関わらず、該ステップ（ｃ）に命令列を格納できない場合に、前記キャッシュメモリへ、フェッチ要求を予定している分岐予測先命令列が存在しない場合にはキャッシュメモリに前記下位メモリから該予測命令列を事前に転送しておくことを特徴とする付記３２に記載の方法。
（付記３４）インタロック要因によって、通常行われるべき命令フェッチ要求が出せない場合に、命令プリフェッチ要求を行うことを特徴とする付記３２に記載の方法。
（付記３５）更に、（ｄ）前記命令プリフェッチを含む命令フェッチの種別に応じた優先順位を設定し、該優先順位に従って前記キャッシュメモリ手段に対する命令フェッチあるいは命令プリフェッチ要求を行うステップを備えることを特徴とする付記３２に記載の方法。
（付記３６）同じアドレスでの実命令フェッチが行われる際に、該命令プリフェッチによる前記キャッシュメモリへの命令列転送作業が間に合わなかった場合、該実命令フェッチが該命令プリフェッチを受け継ぐ、あるいは、該キャッシュメモリへ転送中の命令列を前記命令制御装置へバイパスすることを特徴とする付記３２に記載の方法。
（付記３７）同じアドレスもしくは同じキャッシュブロックに対する前記命令プリフェッチを連続して行わないことを特徴とする付記３２に記載の方法。
（付記３８）前記ステップ（ａ）は、前記命令プリフェッチされた命令列に対する命令プリフェッチを行うことを特徴とする付記３２に記載の方法。
（付記３９）キャッシュメモリと、下位メモリと、該キャッシュメモリに命令フェッチ要求を出す命令フェッチ装置とを備える装置における命令制御方法であって、
（ａ）条件分岐命令もしくは無条件分岐命令を実行する際に、分岐成立する場合の分岐先命令アドレスを求めるステップと、
（ｂ）該分岐命令の分岐する場合の分岐先命令アドレスが求められた時点で、該分岐命令の命令フェッチを要求する分岐命令プリフェッチを行うステップと、を備えることを特徴とする方法。
（付記４０）更に、
（ｃ）前記分岐命令の分岐先命令を予測するステップを備え、
前記ステップ（ｂ）では、
該ステップ（ａ）により分岐予測された分岐命令の実行に際し、分岐しない場合の命令アドレスの命令フェッチを要求することを特徴とする付記３９に記載の方法。
（付記４１）更に、
（ｄ）１つ以上の実行中の分岐命令により、それぞれの分岐命令の分岐命令プリフェッチを要求することが可能とされたものに優先順位を設定し、その優先順位に従って、前記分岐命令プリフェッチ手段に分岐命令プリフェッチを要求させるステップを備えることを特徴とする４０に記載の方法。
（付記４２）更に、
１つ以上の分岐命令プリフェッチ要求による命令列の保留するステップを備えることを特徴とする付記３９に記載の方法。
（付記４３）前記分岐命令の実行及び分岐先が確定した時点で、該分岐命令の後続命令フェッチ及び命令実行を中止棄却し、該分岐命令に対応する分岐命令プリフェッチを実命令フェッチへと変更して、分岐先命令フェッチを継続実行あるいは中断解除し、分岐先命令を実行することを特徴とする付記３９に記載の方法。
（付記４４）前記ステップ（ａ）によって分岐することが予測された該分岐命令が、実行され、かつ、分岐しないことが確定した時点、あるいは、予測された分岐先と異なる分岐先へ分岐することが確定した時点で、該分岐命令の予測分岐先命令の命令フェッチおよび命令実行を中止棄却し、該分岐命令に対応する後続命令の分岐命令プリフェッチを実命令フェッチへと変更して、後続命令フェッチを継続実行あるいは中断解除し、後続命令を実行することを特徴とする付記４０に記載の方法。
（付記４５）該分岐命令が条件分岐命令である場合に、該命令が実行されること、及び、分岐せず後続命令を実行することが確定した時点、あるいは、該命令が実行されないことが確定した時点で、それまで行っていた該分岐命令プリフェッチを棄却することを特徴とする付記３９に記載の方法。
（付記４６）前記ステップ（ａ）において分岐予測が成立している前記分岐命令が実行されること、及び、予測された該分岐命令の分岐先命令を実行することが確定した時点で、それまで行っていた該分岐命令プリフェッチを棄却することを特徴とする付記４０に記載の方法。
（付記４７）更に、
（ｅ）命令の実行の結果、分岐命令プリフェッチされるべき命令列を書き換える可能性があることを検出するステップを備えることを特徴とする付記３９に記載の方法。
（付記４８）前記ステップ（ｅ）では、
分岐命令プリフェッチ要求を出した分岐命令自身のアドレス、及び、分岐先命令アドレスを用いて、命令列の書き換えの可能性を検出することを特徴とする付記４７に記載の方法。
（付記４９）命令が実行された結果、前記分岐命令プリフェッチされるべき命令列を書き換えることが判明した場合、該分岐命令プリフェッチ要求を棄却することを特徴とする付記４７に記載の方法。
（付記５０）前記分岐命令の分岐先命令のアドレスが求められた時点で、前記キャッシュメモリに該アドレスに対応する命令が確保されていない場合に、該キャッシュメモリへの前記下位メモリからの該分岐先命令の転送を要求することを特徴とする付記３９に記載の方法。
（付記５１）前記ステップ（ａ）により分岐予測された分岐命令の実行に際し、前記キャッシュメモリに、分岐しない場合の命令アドレスに対応する後続命令列が確保されていないと判明した場合には、該キャッシュメモリへの前記下位メモリからの該後続命令列の転送を要求することを特徴とする付記４０に記載の方法。
（付記５２）前記ステップ（ａ）、（ｂ）は、前記分岐先命令プリフェッチを行った命令列に対して命令プリフェッチを行うことを特徴とする付記３９に記載の方法。
【０１５５】
【発明の効果】
本発明によれば、条件分岐命令などの遅延を生じさせる命令をプリフェッチすることにより、命令処理の遅延時間を縮小することが出来る。
【図面の簡単な説明】
【図１】本発明を適用した場合の命令列の実行の様子を示す図である。
【図２】本実施形態の装置の全体の概略構成を示す図である。
【図３】命令プリフェッチ機構の構成例を示す図である。
【図４】図３の優先順位決定回路の構成例を示す図である。
【図５】同じアドレスの命令へのプリフェッチ要求を連続して出さないようにするためのフラグ生成回路（シーケンシャルプリフェッチの場合）の構成例を示す図である。
【図６】同じキャッシュブロックに含まれている命令を繰り返してプリフェッチ要求を行わせないようにするためのフラグを生成する回路例である。
【図７】同一プリフェッチ要求抑制フラグ（分岐予測先プリフェッチの場合）の回路構成例を示す図である。
【図８】フェッチ・プリフェッチ区別回路の構成例を示す図である。
【図９】下位メモリへのデータ要求信号を生成する回路の構成例を示す図である。
【図１０】プリフェッチ要求時のキャッシュから命令制御装置へのデータ転送抑制信号を生成する回路例を示す図である。
【図１１】第２の命令プリフェッチ機構の構成例を示す図である。
【図１２】分岐命令リザベーションステーションのエントリ内容を例示する図である。
【図１３】分岐命令の処理の流れを説明する図である。
【図１４】分岐命令リザベーションステーションの実行順序回路の構成例を示す図である。
【図１５】分岐命令リザベーションステーションの実行順序別信号生成回路の例である。
【図１６】分岐命令プリフェッチアドレスの生成回路の構成例を示す図である。
【図１７】分岐命令プリフェッチ可能信号の生成回路の構成例を示す図である。
【図１８】図１９に入力する信号を生成する中間回路の構成例である。
【図１９】分岐命令プリフェッチ要求有効信号と選択信号を生成する回路の構成例である。
【図２０】分岐命令プリフェッチポートの使用中を示すフラグを生成する回路の構成例である。
【図２１】分岐命令プリフェッチの実フェッチ化及びキャンセルのための回路例を示す図（その１）である。
【図２２】分岐命令プリフェッチの実フェッチ化及びキャンセルのための回路例を示す図（その２）である。
【図２３】分岐命令プリフェッチのポート毎のキャンセルを行う信号を生成する回路例である。
【図２４】ストア命令が分岐命令プリフェッチ命令列を書き換える可能性があることを検出する回路例を示す図である。
【図２５】前述の実施形態における命令実行の様子を説明する概念図である。
【図２６】本実施形態の概念図である。
【図２７】本実施形態の処理の基本的な流れを示すフローチャートである。
【図２８】命令プリフェッチ要求の影響で命令フェッチ要求が遅延する場合を説明する図である。
【図２９】命令プリフェッチ要求を制約なしに出せてしまうと問題となる場合について説明する図である。
【図３０】命令プリフェッチ抑制回路の構成例を示す図である。
【図３１】命令プリフェッチとデマンドフェッチとを切り替えるために必要となるフェッチポート選択回路の構成例を示す図である。
【図３２】図３０、図３１の構成を反映した優先順位決定回路の構成例を示す図である。
【図３３】前述の実施形態の命令プリフェッチによるブランチヒストリ検索回路を示す図である。
【図３４】本実施形態を図３３のブランチヒストリ検索回路に適用した構成例を示す図である。
【図３５】図３４の動作を説明するタイミングチャートである。
【図３６】命令フェッチ及びプリフェッチアドレスの生成回路の構成例を示す図である。
【図３７】プリフェッチアドレス生成回路の構成例を示す図である。
【図３８】本構成例における優先順位決定回路の構成例を示す図である。
【図３９】キャッシュに対するフェッチ・プリフェッチ要求信号の出力回路の構成例を示す図である。
【図４０】分岐を複数含む命令列の例を示す図である。
【図４１】従来の手法を用いた場合のマシンサイクルの遅延を説明する図である。
【符号の説明】
１      主記憶装置
１’      キャッシュ／主記憶装置
２      命令キャッシュ
３      命令一時バッファ
４      命令デコード
５      分岐命令制御部
５−１      分岐命令リザベーションステーション
５−２      アウトポインタ
６      ストア命令制御部
７      その他の命令の制御部
８      データキャッシュ
９      命令フェッチ制御部
９−１      フェッチアドレス生成部
９−２      ブランチヒストリ
９−３      優先順位決定回路
９−４、６１、２０２      セレクタ
９’      ブランチヒストリ
１０〜１３、８２、９３、１２１、１５４      インバータ
１４〜１７、２０〜２２、２５、３０−１〜３０−３、３２、３６、４１−１〜４１−４・・・、４２、５０、５１−１、５１−２、５２、５３、７１、７３、８０〜８３、９４、９５、１２２−１〜１２２−３、１２５−０〜１２５−３、１３１ー１〜１３１−４。１５１−１、１５１−２、１５３      ＡＮＤ回路
１８、２４、３１、３５、４０−１、４０−２、４１、４５、５２、５４、７２、８４、９６、１０２、１２６、１３０−１、１３０−２、１５２、２１５ＯＲ回路
１９、２３、２６、１０１、２００、２０１      フリップフロップ
１１１、１１２      ＥＸＯＲ回路
１５０      減算器
【図１】
0003741945.tif 000002
【図２】
0003741945.tif 000003
【図３】
0003741945.tif 000004
【図４】
0003741945.tif 000005
【図５】
0003741945.tif 000006
【図６】
0003741945.tif 000007
【図７】
0003741945.tif 000008
【図８】
0003741945.tif 000009
【図９】
0003741945.tif 000010
【図１０】
0003741945.tif 000011
【図１１】
0003741945.tif 000012
【図１２】
0003741945.tif 000013
【図１３】
0003741945.tif 000014
【図１４】
0003741945.tif 000015
【図１５】
0003741945.tif 000016
【図１６】
0003741945.tif 000017
【図１７】
0003741945.tif 000018
【図１８】
0003741945.tif 000019
【図１９】
0003741945.tif 000020
【図２０】
0003741945.tif 000021
【図２１】
0003741945.tif 000022
【図２２】
0003741945.tif 000023
【図２３】
0003741945.tif 000024
【図２４】
0003741945.tif 000025
【図２５】
0003741945.tif 000026
【図２６】
0003741945.tif 000027
【図２７】
0003741945.tif 000028
【図２８】
0003741945.tif 000029
【図２９】
0003741945.tif 000030
【図３０】
0003741945.tif 000031
【図３１】
0003741945.tif 000032
【図３２】
0003741945.tif 000033
【図３３】
0003741945.tif 000034
【図３４】
0003741945.tif 000035
【図３５】
0003741945.tif 000036
【図３６】
0003741945.tif 000037
【図３７】
0003741945.tif 000038
【図３８】
0003741945.tif 000039
【図３９】
0003741945.tif 000040
【図４０】
0003741945.tif 000041
【図４１】
0003741945.tif 000042