(57)【特許請求の範囲】
【請求項１】
分岐命令のシーケンシャル側とターゲット側の命令系列の両方をフェッチする命令フェッチ部と、前記命令フェッチ部からのフェッチ要求に応答してキャッシュメモリまたはメインメモリから命令をフェッチするキャッシュ制御部と、前記メインメモリへのアクセスを行うメモリバスアクセス部と、前記フェッチした命令を保持する命令バッファとを有する情報処理装置において、
前記命令バッファに格納される分岐命令の分岐予測を分岐命令の実行に先行して行う分岐予測部を有し、
前記分岐命令の分岐方向が未確定の場合に、前記キャッシュ制御部は、キャッシュメモリから命令フェッチを行い、前記分岐命令の分岐予測方向の命令についてキャッシュミスを起こした場合は、前記メインメモリへのメモリバスアクセスを行って命令フェッチを行い、分岐予測方向ではない命令についてキャッシュミスを起こした場合は、メモリバスアクセスを行わないで命令フェッチを中止することを特徴とする情報処理装置。
【請求項２】
分岐命令のシーケンシャル側とターゲット側の命令系列の両方をフェッチする命令フェッチ部と、前記命令フェッチ部からのフェッチ要求に応答してキャッシュメモリまたはメインメモリから命令をフェッチするキャッシュ制御部と、前記メインメモリへのアクセスを行うメモリバスアクセス部と、前記フェッチした命令を保持する命令バッファとを有する情報処理装置において、
前記命令バッファに格納される分岐命令の分岐予測を分岐命令の実行に先行して行う分岐予測部を有し、
前記分岐命令の分岐方向が未確定の場合に、前記キャッシュ制御部は、キャッシュメモリから命令フェッチを行い、前記分岐命令の分岐予測方向がシーケンシャル側にある場合で、ターゲット側の命令についてキャッシュミスを起こした場合は、メモリバスアクセスを行わないで命令フェッチを中止することを特徴とする情報処理装置。
【請求項３】
請求項１または２の請求項において、
前記キャッシュ制御部は、前記分岐命令が確定している場合に、当該確定した分岐方向の命令についてキャッシュミスした命令のメモリバスアクセスを行うことを特徴とする情報処理装置。
【請求項４】
請求項３において、分岐命令の分岐方向が未確定の場合は、キャッシュヒットした命令をプリフェッチして、前記命令バッファに格納することを特徴とする情報処理装置。
【請求項５】
請求項３において、分岐予測部の分岐方向に応じて、前記命令バッファの命令の前記シーケンシャル側またはターゲット側のいずれかの命令が選択されて命令デコードされることを特徴とする情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パイプライン処理により命令フェッチ、命令保持、命令デコード、実行を行う情報処理装置のメモリバスアクセス方式に関し、特に分岐成立側命令系列（以下、ターゲット側命令系列）と分岐非成立側命令系列（以下、シーケンシャル側命令系列）を、平行してフェッチするデュアル命令フェッチ型の情報処理システムにおける効率的なメモリバスアクセス方式を提供する。
【０００２】
【従来の技術】
パイプライン処理により命令フェッチ、命令保持、命令デコード、命令実行を行うマイクロプロセッサ（または情報処理装置）は、連続する命令列の命令フェッチを先行して行って、実行ユニットでの実行ステージに空きが発生することをなくし、高速処理を実現する。しかし、命令系列内に分岐命令が存在する場合は、その分岐命令の実行を待ってターゲット側命令系列に分岐するのか、シーケンシャル側命令系列を続けるのかに従って、次にフェッチする命令系列が異なる。その結果、一時的に実行ユニットの実行サイクルに空きが生じる。ここで、ターゲット側命令系列とは、分岐命令を実行した結果、分岐が成立した時に実行される分岐先の命令系列であり、シーケンシャル側命令系列とは、分岐命令を実行した結果、分岐が不成立の時に実行される命令系列である。
【０００３】
かかる事態を防止するために、ターゲット側命令系列とシーケンシャル側命令系列との両方の命令列に対して、ＣＰＵが同時に命令フェッチ要求を出して、ＣＰＵ内の２つの命令バッファにそれぞれ格納するデュアル命令フェッチ型の情報処理装置が提案されている。このデュアル命令フェッチ型であれば、分岐命令の実行結果がターゲット側への分岐または非分岐のいずれであっても、次に実行される命令系列が命令バッファに保持されているので、分岐命令の分岐方向の予測ミスに伴う新たな命令フェッチに伴う実行ステージの遅れをできるだけ少なくすることができる。
【０００４】
また、マイクロプロセッサであるＣＰＵは、命令フェッチを高速化するために、キャッシュメモリを利用する。外部のメモリバスを介してでなければ、命令やデータ等が格納されている外部のメインメモリから、それらの命令やデータをフェッチすることはできない。かかるメモリバスアクセスは、比較的長い時間（多くのパイプラインサイクル）を要するので、メインメモリ内の命令やデータを格納するキャッシュメモリがＣＰＵに隣接して設けられる。通常、ＣＰＵからの命令フェッチには、キャッシュメモリに対して要求され、フェッチされた命令が命令バッファに格納される。キャッシュメモリに格納されておらず、キャッシュミスした場合は、メモリバスを介してメインメモリからフェッチ対象の命令をフェッチし、命令バッファに格納すると共にキャッシュメモリにも格納する。
【０００５】
【発明が解決しようとする課題】
しかしながら、メインメモリから命令フェッチするメモリバスアクセスを頻繁に行うと、メモリバス内のトラフィックが増大する。かかるメモリバスのトラフィックの増大は、メモリバスアクセスの遅延を招く。特に、分岐命令を実行する前の段階で、実際には実行されないかもしれないターゲット側またはシーケンシャル側の命令をメインメモリから取得する結果、分岐命令の実行の結果必要になった命令をメインメモリからフェッチすることに、長時間を要するようになるのは、好ましくない。
【０００６】
そこで、本発明の目的は、過剰なメモリバスアクセスを軽減し、より効率的な命令フェッチを可能にする情報処理装置のメモリバスアクセス方式を提供することにある。
【０００７】
【課題を解決するための手段】
上記の目的を達成するために、本発明の一つの側面は、分岐命令のシーケンシャル側とターゲット側の命令系列の両方をフェッチする命令フェッチ部と、命令フェッチ部からのフェッチ要求に応答してキャッシュメモリまたはメインメモリから命令をフェッチするキャッシュ制御部と、メインメモリへのアクセスを行うメモリバスアクセス部と、フェッチした命令を保持する命令バッファとを有する情報処理装置において、
前記命令バッファに格納される分岐命令の分岐予測を分岐命令の実行に先行して行う分岐予測部を有し、前記キャッシュ制御部は、前記分岐命令の分岐方向が未確定の場合に、分岐予測部からの分岐予測方向に応じて、前記メインメモリへのメモリバスアクセスを行うことを特徴とする。
【０００８】
上記の発明において、より好ましい第１の実施例では、前記分岐命令の分岐方向が未確定の場合に、キャッシュ制御部は、分岐命令の分岐予測方向の命令についてキャッシュミスを起こした場合は、メインメモリへのメモリバスアクセスを行って命令フェッチを行い、分岐予測方向ではない命令についてキャッシュミスを起こした場合は、メモリバスアクセスを行わないで命令フェッチを中止する。
【０００９】
即ち、第１に、分岐命令の分岐予測方向がターゲット側にある場合で、シーケンシャル側の命令についてキャッシュミスを起こした場合は、メモリバスアクセスを行わないで命令フェッチを中止し、第２に、分岐命令の分岐予測方向がシーケンシャル側にある場合で、ターゲット側の命令についてキャッシュミスを起こした場合は、メモリバスアクセスを行わないで命令フェッチを中止する。それ以外の場合は、キャッシュ制御部は、メモリバスアクセスを行って命令フェッチを行う。それ以外の場合は、キャッシュミス後にメモリバスアクセスを許可する。
【００１０】
上記の発明において、より好ましい第２の実施例では、前記分岐命令の分岐方向が未確定の場合に、キャッシュ制御部は、分岐命令の分岐予測方向がシーケンシャル側にある場合で、ターゲット側の命令についてキャッシュミスを起こした場合は、メモリバスアクセスを行わないで命令フェッチを中止する。それ以外の場合は、キャッシュ制御部は、メモリバスアクセスを行って命令フェッチを行う。従って、上記第１の実施例と異なり、第２の実施例では、分岐予測方向がターゲット側の場合であってシーケンシャル側の命令についてキャッシュミスを起こしたら、メモリバスアクセスにより命令フェッチを行う。シーケンシャル側の命令フェッチがキャッシュミスする確率は低く、そのような頻度の少ないケースにおいてメモリバスアクセスを禁止する必要性が少ないからである。
【００１１】
上記の目的を達成するために、本発明の別の側面は、分岐命令のシーケンシャル側とターゲット側の命令系列の両方をフェッチする命令フェッチ部と、命令フェッチ部からのフェッチ要求に応答してキャッシュメモリまたはメインメモリから命令をフェッチするキャッシュ制御部と、メインメモリへのアクセスを行うメモリバスアクセス部と、フェッチした命令を保持する命令バッファとを有する情報処理装置において、
前記命令バッファに格納される分岐命令の分岐予測を分岐命令の実行に先行して行う分岐予測部を有し、前記キャッシュ制御部は、前記分岐命令の分岐方向が未確定の場合に、キャッシュミスしたらメモリバスアクセスを行わないで命令フェッチを中止し、前記分岐命令が確定している場合に、当該確定した分岐方向の命令についてキャッシュミスしたらメモリバスアクセスを行うことを特徴とする。
【００１２】
上記の発明によれば、分岐確定後の分岐方向の命令についてのみ、キャッシュミス後のメモリバスアクセスを行うことになり、メモリバスのトラフィックスを軽減することができる。即ち、分岐未確定の段階では、使用されるか否か不明であるので、キャッシュミス後のメモリバスアクセスは全面的に禁止する。また、分岐未確定時のターゲット側の命令は、キャッシュメモリに格納されている範囲内で、命令バッファへのプリフェッチが行われる。
【００１３】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態例を説明する。しかしながら、かかる実施の形態例が、本発明の技術的範囲を限定するものではない。
【００１４】
図１は、本発明の実施の形態例における情報処理装置のシステム図である。図１に示された情報処理装置は、マイクロプロセッサであり、チップ内にＣＰＵ４０と、キャッシュメモリユニット５０と、メモリバスアクセス部６０とを有する。メモリバスアクセス部６０から左側がチップ外であり、外部のメモリバス６２を介してメインメモリ６４に接続される。
【００１５】
ＣＰＵ４０は、命令をデコードしてその命令を実行する命令デコーダ及び命令実行部４９を有する。図１に示されたＣＰＵ４０は、分岐命令のシーケンス側とターゲット側との命令を両方、同時にフェッチを行うデュアル命令フェッチ方式の命令フェッチ部４１０，４１１を有する。更に、ＣＰＵ４０は、シーケンス側とターゲット側のフェッチされた命令を格納する命令バッファ４７０，４７１を有し、当該命令バッファの命令のうち、セレクタ４８で選択された側の命令が、命令デコーダ４９に供給される。セレクタ４８の選択は、後述する分岐命令の分岐予測信号Ｓ４３０，Ｓ４３１に従って行われる。
【００１６】
命令デコーダでデコードされた命令は、命令実行部４９で実行され、図示しない所定のレジスタなどに実行結果が書き込まれる。命令デコーダ及び命令実行部４９は、分岐命令の分岐先アドレス情報Ｓ１２を分岐側アドレス生成部４６に供給する。分岐側アドレス生成部４６は、その分岐先アドレス情報Ｓ１２に従って、分岐先アドレスＡ１０を生成し、分岐先アドレスバッファ４５に供給する。分岐先アドレスバッファ４５は、その供給されたターゲット側の命令のアドレスである分岐先アドレスを、その後の命令フェッチのために保持する。更に、連続側アドレスバッファ４４は、シーケンシャル側の命令のアドレスをインクリメントして生成し、保持する。
【００１７】
命令フェッチ部４１０，４１１は、それぞれアドレス選択部４２０，４２１を有する。アドレス選択部４２０，４２１には、連続側アドレスバッファ４４からシーケンシャル側のアドレスＡ１が、分岐先アドレスバッファ４５からターゲット側の分岐先アドレスＡ２が、そして、命令実行部４９から命令実行の結果生成したアドレスＡ３がそれぞれ供給され、その中から選択されたアドレスが、キャッシュメモリユニット５０に命令フェッチ要求Ｓ２０と共に供給される。命令フェッチ部４１０，４１１は、命令実行部４９から供給される分岐確定信号Ｓ１０に応答して、一方がシーケンシャル側の命令フェッチ部になり、他方がターゲット側の命令フェッチ部になる。また、分岐確定信号Ｓ１０に従って、命令フェッチが分岐未確定段階のプリフェッチか、分岐が確定したあとのフェッチかの区別を、命令フェッチ要求Ｓ２０に添付して、キャッシュメモリユニットに与える。
【００１８】
キャッシュメモリユニット５０は、キャッシュメモリ５２と、キャッシュ制御部５４，５６を有する。キャッシュ制御部５４，５６は、命令フェッチ部４１０，４１１からのフェッチ要求Ｓ２０に応答してキャッシュメモリ５２またはメインメモリ６４から命令をフェッチする。従って、キャッシュメモリユニット５０は、シーケンシャル側とターゲット側の命令フェッチ要求を同時に受け付けることができる２ポート形式になっている。キャッシュ制御部５４，５６は、キャッシュメモリ５２に対してアドレスＡＤを与えて命令をフェッチするが、その命令フェッチに対してキャッシュヒットしたかキャッシュミスしたかを示すヒット・ミス信号CHMが、キャッシュメモリ５２からそれぞれのキャッシュ制御部５４，５６に返信される。
【００１９】
各キャッシュ制御部５４，５６は、フェッチ要求Ｓ２０に応答してキャッシュメモリに命令フェッチした結果、キャッシュヒットした場合は、そのフェッチした命令を、対応する命令バッファ４７０，４７１に供給して格納する。キャッシュ制御部５４，５６は、キャッシュミスした場合は、後述するアルゴリズムに従って、メインメモリ６４から命令をフェッチするようメモリバスアクセス部６０にメモリバスアクセス要求を行う。但し、本実施の形態例では、このメモリバスアクセスは、分岐未確定の段階では一部制限されている。
【００２０】
メモリバスアクセス部６０は、外部のメモリバス６２を介してメインメモリ６４に接続され、メモリバス６２の制御を行い、キャッシュ制御部５４，５６からのメインメモリ６４へのフェッチ要求に応答して、メモリバスアクセスを行う。メインメモリ６４からフェッチされた命令は、それぞれ対応するキャッシュ制御部５４，５６に供給され、対応する命令バッファ４７０，４７１に格納されると共に、キャッシュメモリ５２にも記憶される。
【００２１】
キャッシュ制御部５４，５６は、フェッチ要求信号Ｓ２０に応答して、キャッシュメモリ５２から命令をフェッチしたか、メモリバスアクセスしてメインメモリ６４から命令をフェッチしたか、或いは命令フェッチを中止したかについての完了通知信号Ｓ２２を、対応するアドレス選択部４２０，４２１に供給する。
【００２２】
図１の情報処理装置は、ＣＰＵ４０内に分岐予測部４３０，４３１を有する。この分岐予測部４３０，４３１は、命令バッファに格納される命令コードが有する分岐予測ビットＳ３０，Ｓ３２に従って、そのフェッチされた分岐命令の分岐予測を行い、分岐予測情報Ｓ４３０，Ｓ４３１を適宜アドレス選択部４２０，４２１に供給する。アドレス選択部４２０，４２１は、フェッチ要求信号Ｓ２０に、その分岐予測情報、フェッチ先アドレス、及び分岐確定か否かの情報を加えて、キャッシュ制御部５４，５６に供給する。
【００２３】
図１に示された情報処理装置は、デュアル命令フェッチ方式であり、命令列のシーケンシャル側の命令列とターゲット側の命令列との両方をフェッチし、命令バッファ４７０，４７１に格納する。かかる命令フェッチは、分岐命令が命令実行部４９で実行されて分岐が確定する前の分岐未確定の段階で行われ、そのプリフェッチされたシーケンシャル側とターゲット側の命令列が、命令バッファ４７０，４７１に格納される。従って、分岐命令が実行された結果、いずれの方向に分岐が確定しても、分岐命令が確定した後の命令のデコードと実行のステージを、パイプラインのサイクルを乱すことなく行うことができる。
【００２４】
更に、図１に示された情報処理装置は、分岐予測部４３０，４３１によってフェッチされた命令の分岐予測を行い、分岐予測結果Ｓ４３０，Ｓ４３１に応じて、命令バッファ４７０，４７１の一方の命令をデコードする。分岐命令が確定する前に、分岐予測に従って命令のデコードをすることにより、分岐確定時におけるパイプライン処理のサイクルの乱れを少なくすることができる。
【００２５】
キャッシュ制御部５４，５６は、一般的には、フェッチ要求に応答して、キャッシュメモリ５２から命令をフェッチし、キャッシュヒットした場合は、そのフェッチした命令を命令バッファに格納し、キャッシュミスした場合は、メモリバスアクセス部６０にメモリバスアクセス要求を出して、メインメモリ６４から命令をフェッチする。
【００２６】
しかしながら、キャッシュメモリユニット５０内のデータバスは高速であるのに対して、外部にあるメモリバス６２は、その動作周波数が遅くまたバス幅も狭い。従って、メモリバスアクセスが頻繁に行われるとメモリバス６２へのトラフィックが増大し、メモリバスアクセス自体が時間を要することになる。従って、外部のメモリバス６２へのアクセス頻度を高くすると、例えば急に必要になった命令のフェッチをメインメモリから行わなければならなくなった時、そのメモリバスアクセスに時間がかかるという課題を有する。
【００２７】
本実施の形態例におけるキャッシュ制御部５４，５６は、後述する通り、分岐が確定していない場合は、必要に応じてまたは全て、キャッシュミスした後のメモリバスアクセスを行わないで命令フェッチを中止する。
【００２８】
第１の実施例では、分岐予測方向でない命令については、上記のキャッシュミス後のメモリバスアクセスを行わないで、命令フェッチを中止する。分岐予測方向でない命令の場合は、その後分岐命令が確定した時点でその命令フェッチが無駄になる可能性が高いので、かかる命令に対するメモリバスアクセスは行わないほうが効率的である。但し、分岐予測方向の命令については、キャッシュミス後にメモリバスアクセスを行う。
【００２９】
第２の実施例では、分岐予測方向がシーケンシャル側であって、ターゲット側の命令についてキャッシュミスを起こした場合は、そのメモリバスアクセスは行わないで命令フェッチを中止する。但し、分岐予測の方向がターゲット側であって、シーケンシャル側の命令についてキャッシュミスを起こした場合は、分岐予測方向と違う側の命令であっても、メモリバスアクセスを行って、命令フェッチを完了させる。その理由は、キャッシュミスをしてメモリバスアクセスされる場合は、その命令と連続するアドレスの命令が一括してキャッシュメモリ５２にフェッチされるので、シーケンシャル側の命令系列がキャッシュミスを起こす可能性は低い。従って、かかる頻度の低いメモリバスアクセスを許可しても、メモリバス６２のトラフィックの増大にはあまりつながらないからである。第２の実施例の場合、分岐予測方向の命令に対しては、キャッシュミス後にメモリバスアクセスを許可する。
【００３０】
第３の実施例としては、分岐命令が未確定の間は、キャッシュヒットした命令のみ命令バッファに格納し、キャッシュミスしたらメモリバスアクセスは行わずに命令フェッチを中止し、分岐命令が確定した後において、キャッシュミスした命令のメモリバスアクセスを行うようにする。この場合でも、以前にフェッチした命令がキャッシュメモリに記録されている限り、デュアル命令フェッチ方式により、両側の命令をプリフェッチして命令バッファに格納することができる。そして、確実に使用される分岐確定後の分岐方向の命令に対してのみメモリバスアクセスを行うので、メモリバスへのアクセス頻度を下げることができる。
【００３１】
図２は、キャッシュ制御部のブロック図である。前述した通り、ＣＰＵ４０からフェッチ要求Ｓ２０Ｂが、フェッチアドレスＳ２０Ａと分岐予測情報Ｓ２０Ｃと共に供給される。アドレスＳ２０Ａはキャッシュメモリ５２に供給されると共に、バスアクセスアドレス保持部７２で保持される。また、フェッチ要求信号Ｓ２０Ａと分岐予測情報Ｓ２０Ｃとは、バスアクセス要否判定部７０に供給される。
【００３２】
バスアクセス要否判定部７０は、キャッシュメモリ５２からのキャッシュ・ヒット・ミス信号CHMによるキャッシュヒット判定結果と、分岐予測情報Ｓ２０Ｃと、現在シーケンシャル側かターゲット側かのステータスなどに応じて、メモリバスアクセスを要求するか否かを判定する。また、バスアクセス要否判定部７０は、その判定結果を、バスアクセス要求信号Ｓ７１としてバスアクセス制御部７４に供給し、バスアクセス不要信号Ｓ７０を完了通知判定部７８に供給する。
【００３３】
上記の判定でメモリバスアクセスが必要と判定された場合は、バスアクセス制御部７４は、バスアクセス要求信号Ｓ７１に応答して、メモリバスアクセス部６０にバスアクセス要求信号Ｓ７６を送ると共に、バスアクセスアドレス保持部７２に制御信号Ｓ７５を出力して、保持しているフェッチアドレスを出力させる。また、上記の判定でメモリバスアクセスが不要と判定された場合は、バスアクセス制御部７４は、メモリバスアクセスは行わない。この判定は、上記の実施例１，２，３のアルゴリズムに従う。
【００３４】
メモリバスアクセスに応答して、メインメモリ６４からデータが返信されたときは、バスアクセス制御部７４は、メモリバスアクセス部６０からデータ有効信号Ｓ７７を受信し、それに応答して、バスアクセス完了信号Ｓ７４を完了通知判定部７８に供給する。完了通知判定部７８は、バスアクセス完了信号Ｓ７４やバスアクセス不要信号Ｓ７０に従って、命令をキャッシュメモリ５２からフェッチしたのか、命令フェッチを中止したのか、メモリバスアクセスによりメインメモリからフェッチしたのかの完了通知信号Ｓ２２を、ＣＰＵの命令フェッチ部に送る。
【００３５】
メインメモリからフェッチされた命令は、キャッシュ制御部を介して、キャッシュメモリに格納されると共に、命令バッファにも格納される。
【００３６】
以下、上記の第１、第２、第３の実施例におけるメモリバスアクセスを行わないアルゴリズムについて、説明する。
【００３７】
図３は、上記の第１の実施例における命令フェッチの動作を示す図表である。図表に沿ってその命令フェッチの動作を説明する。第１の実施例では、
（1）分岐命令の分岐方向が確定していない場合には、
(1-1)分岐予測部による分岐予測方向がターゲット側の場合には、第１に、シーケンシャル側の命令フェッチは、命令キャッシュミスを起こしたら、メモリバスアクセスしないで、命令フェッチを中止し、メモリバスアクセスをしない。第２に、ターゲット側の命令フェッチは、命令キャッシュミスを起こしたら、メモリバスアクセスして命令フェッチを完了する。
(1-2)分岐命令実行での分岐予測方向がシーケンシャル側の場合には、第１に、ターゲット側の命令フェッチは、命令キャッシュミスを起こしたら、メモリバスアクセスしないで、命令フェッチを中止し、メモリバスアクセスをしない。第２に、シーケンシャル側の命令フェッチは、命令キャッシュミスを起こしたら、メモリバスアクセスして命令フェッチを完了する。
（2）分岐命令の分岐方向が確定している場合には、
分岐方向が確定した側（シーケンシャル側、または、ターゲット側）のみを命令フェッチする。その場合は、キャッシュミスを起こしたらメモリバスアクセスして命令フェッチを完了する。
【００３８】
以上の通り、第１の実施例では、分岐方向が未確定の間は、分岐予測方向の命令フェッチについてのみ、キャッシュミス後のメモリバスアクセスを行うことを許可し、分岐予測方向ではない命令フェッチは、キャッシュミス後のメモリバスアクセスは禁止して、無駄になる可能性の高い命令フェッチのためのメモリバスアクセスは行わない。いずれの場合でもキャッシュヒットした場合は、それでフェッチされた命令は命令バッファ内に格納され、命令フェッチは完了する。
【００３９】
また、命令フェッチ部４１０，４１１内のアドレス選択部４２０，４２１は、命令フェッチが完了しなかった命令であって、分岐確定信号Ｓ１０により分岐が確定した方向の命令については、改めて命令フェッチ要求を出す。この時にキャッシュミスが生じたら、メモリバスアクセスを行って
必要な命令のフェッチを行う。そのとき、それに連続する命令列もキャッシュメモリ５２に格納される。
【００４０】
図４は、第１の実施例を改良した第２の実施例における命令フェッチの動作を示す図表である。図表に沿ってその命令フェッチの動作を説明する。第２の実施例では、
（1）分岐命令の分岐方向が確定していない場合には、
(1-1)分岐予測部の分岐予測方向がターゲット側の場合には、第１に、シーケンシャル側の命令フェッチは、命令キャッシュミスを起こしたら、メモリバスアクセスして、命令フェッチを完了する。第２に、ターゲット側の命令フェッチは、命令キャッシュミスを起こしたら、メモリバスアクセスして、命令フェッチを完了する。
(1-2)分岐命令実行での分岐予測方向がシーケンシャル側の場合には、第１に、ターゲット側の命令フェッチは、命令キャッシュミスを起こしたら、メモリバスアクセスしないで、命令フェッチを中止し、メモリバスアクセスをしない。第２に、シーケンシャル側の命令フェッチは、命令キャッシュミスを起こしたらメモリバスアクセスして、命令フェッチを完了する。
（2）分岐命令の分岐方向が確定している場合には、
分岐方向が確定した側（シーケンシャル側、または、ターゲット側）のみを命令フェッチする。その場合は、キャッシュミスを起こしたらメモリバスアクセスして命令フェッチを完了する。
【００４１】
第２の実施例が第１の実施例と異なるところは、分岐予測方向がターゲット側であってシーケンシャル側の命令フェッチに対してキャッシュミスが生じた場合は、分岐予測方向とは異なる側の命令ではあるが、メモリバスアクセスをして命令フェッチを完了することにある。かかるケースは、極めて可能性が低いので頻度が低く、従って、メモリバスアクセスを許可してもメモリバスのトラフィックを増大することにはならない。
【００４２】
図５は、第３の実施例における命令フェッチの動作を示す図表である。図表に沿ってその命令フェッチの動作を説明する。第３の実施例では、
（1）分岐命令の分岐方向が確定していない場合は、
(1-1)分岐予測部の分岐予測方向がターゲット側の場合には、第１に、シーケンシャル側の命令フェッチは、命令キャッシュミスを起こしたら、メモリバスアクセスしないで、命令フェッチを中止し、メモリバスアクセスをしない。第２に、ターゲット側の命令フェッチも、命令キャッシュミスを起こしたら、メモリバスアクセスしないで、命令フェッチを中止し、メモリバスアクセスをしない。
（1-2）分岐予測部の分岐予測方向がシーケンシャル側の場合には、第１に、ターゲット側の命令フェッチは、命令キャッシュミスを起こしたら、メモリバスアクセスしないで、命令フェッチを中止し、メモリバスアクセスをしない。第２に、シーケンシャル側の命令フェッチも、命令キャッシュミスを起こしたら、メモリバスアクセスしないで、命令フェッチを中止し、メモリバスアクセスをしない。
（2）分岐方向が確定している場合には、
分岐方向が確定した側（シーケンシャル側、または、ターゲット側）のみを命令フェッチする。この場合、キャッシュミスを起こしてもメモリバスアクセスしてメインメモリから命令をフェッチして命令フェッチを完了する。
【００４３】
第３の実施例は、分岐命令が実行されず分岐未確定の間は、一切のメモリバスアクセスを禁止し、分岐方向が確定した命令についてのみメモリバスアクセスを許可する。分岐未確定の場合は、メモリバスアクセスのよる命令フェッチが無駄になる可能性があるので、そのメモリバスアクセスを禁止してメモリバスのトラフィックを少なくする。キャッシュメモリには、分岐確定した命令が予め格納されるので、キャッシュミス自体はそれほど高い確率で発生するものではない。従って、キャッシュメモリからの命令フェッチだけでプリフェッチして、命令デコーダにシーケンス側とターゲット側の両方の命令系列を格納するだけでも、全体のパイプライン動作をあまり乱すことなく命令の実行を行うことが可能である。
【００４４】
最後に、第４の実施例として、上記以外のメモリバスアクセスを減らす方法について説明する。図６は、第４の実施例における命令フェッチの動作を示す図表である。図表に沿ってその命令フェッチの動作を説明する。第４の実施例では、（1）分岐命令の分岐方向が確定していない場合
（1-1）分岐予測部での分岐予測方向がターゲット側の場合には、シーケンシャル側の命令フェッチは、命令キャッシュミスを起こしたら、メモリバスアクセスしないで、命令フェッチを中止し、メモリバスアクセスをしない。一方で、ターゲット側の命令フェッチは、命令キャッシュミスを起こしたら、メモリバスアクセスして命令フェッチを完了する。
（1-2）分岐予測部での分岐予測方向がシーケンシャル側の場合には、第１に、ターゲット側の命令フェッチは、命令キャッシュミスを起こしたらメモリバスアクセスして、命令フェッチを完了する。第２に、シーケンシャル側の命令も、命令キャッシュミスを起こしたら、メモリバスアクセスして、命令フェッチを完了する。
（2）分岐命令の分岐方向が確定している場合
分岐方向が確定した側（シーケンシャル側、または、ターゲット側）のみを命令フェッチする。この場合は、キャッシュミスに対してメモリバスアクセスを行った命令フェッチを完了する。
【００４５】
上記第４の実施例の場合は、分岐命令の分岐未確定の場合は、少なくとも分岐予測方向がターゲット側であって、シーケンシャル側の命令フェッチでキャッシュミスを起こしたらメモリバスアクセスは行わない。これにより、その分だけメモリバスアクセスの回数を減らすことができる。
【００４６】
上記第４の実施例と同様に、分岐未確定の時に、任意の命令フェッチに対してメモリバスアクセスを禁止するようにしても、その分だけメモリバスアクセスの回数を減らすことはできる。但し、それに伴って分岐予測されている方向の命令プリフェッチができない場合も発生する。メモリバスアクセスの禁止と命令プリフェッチの失敗とのバランスを考慮して、設定することが望ましい。
【００４７】
上記４つの実施例のうち、メモリバスアクセスの禁止と命令プリフェッチの失敗とをある程度バランスさせている第２の実施例の動作について、図１を参照して説明する。前提として、シーケンシャル側の命令フェッチは、ポート０側で行われ、ターゲット側の命令フェッチは、ポート１側で行われると仮定する。
（1）分岐命令の分岐方向が確定していない場合において、
（1-1）分岐予測部430,431での分岐予測方向がターゲット側の場合には、シーケンシャル側の命令フェッチは、ＣＰＵ４０の命令フェッチ部410（Port-0）が命令フェッチ要求S20をキャッシュメモリユニット５０内のキャッシュ制御部５４（Port-0）に供給し、その命令フェッチ要求が命令キャッシュメモリ５２に渡される。この命令フェッチ要求には、フェッチアドレスに加えて、分岐未確定か否かの情報、分岐予測情報なども添付される。
【００４８】
命令キャッシュメモリ５２において、命令キャッシュミスを起こしたら、その信号CHMがキャッシュ制御部５４に返され、キャッシュ制御部５４は、メモリバスアクセス部６０にメモリバスアクセス要求を出す。それに応答して、メモリバスアクセス部６０はメモリバス６２にアクセスして、命令を主記憶６４から読み出して、キャッシュ制御部５４に渡し、メモリキャッシュ５２に書き込み、且つ、ＣＰＵ４０内命令バッファ(0)４７０に格納して、命令フェッチを完了する。命令フェッチ完了信号Ｓ２２が、命令フェッチ部４１０に返信される。
【００４９】
シーケンシャル側の命令フェッチのキャッシュミスの頻度はそれほど高くないので、この場合にメモリバスアクセスを許可しても全体のメモリバスの効率を低下させることにはあまりならない。
【００５０】
ターゲット側の命令フェッチは、ＣＰＵ４０内の命令フェッチ部４１１から命令フェッチ要求をキャッシュ制御部５６（Port-1）に供給し、その命令フェッチ要求が命令キャッシュメモリ５２に渡される。
【００５１】
命令キャッシュメモリ５２において、命令キャッシュミスを起こしたら、キャッシュ制御部５６（Port-1）がメモリバスアクセス部６０にメモリバスアクセス要求を出し、メモリバスアクセス部６０はメモリバス６２にアクセスして、命令を主記憶６４から読み出して、キャッシュ制御部５６（Port-1）に渡し、キャッシュメモリ５２に書き込み、且つ、CPU４０の命令バッファ(1)４７１に格納して、命令フェッチを完了する。そして、命令フェッチ完了信号が命令フェッチ部４１１に返信される。
【００５２】
この場合は、使用確率が高い分岐予測方向の命令がキャッシュミスしているので、メモリバスアクセスを許可して、プリフェッチを完了することが、分岐後のパイプライン動作の乱れを防止することになる。
（1-2）分岐予測部での分岐予測方向がシーケンシャル側の場合には、ターゲット側の命令フェッチは、CPU４０内の命令フェッチ部４１１から命令フェッチ要求がキャッシュ制御部５６（Port-1）に出され、その命令フェッチ要求が命令キャッシュメモリに渡される。
【００５３】
命令キャッシュメモリ５２において、命令キャッシュミスを起こしても、キャッシュ制御部（Port-１）５６がメモリバスアクセス部６０にメモリバスアクセス要求を出さない。その結果、メモリバスアクセス部６０はメモリバスアクセスしない。そして、キャッシュ制御部５６は、命令フェッチを中止し、アドレス選択部４２１に命令フェッチをキャンセルした結果信号を返信する。
【００５４】
一方、シーケンシャル側の命令フェッチは、CPU４０内の命令フェッチ部４１０から命令フェッチ要求がキャッシュ制御部（Port-0）５４に出され、その命令フェッチ要求が命令キャッシュメモリ５２に渡される。
【００５５】
命令キャッシュメモリ５２において、命令キャッシュミスを起こしたら、キャッシュ制御部５４がメモリバスアクセス部６０にメモリバスアクセス要求を出し、メモリバスアクセス部６０はメモリバス６２にアクセスして、命令を主記憶６４から読み出して、キャッシュ制御部５４に返す。キャッシュ制御部５４は、その命令をキャッシュメモリ５２に書き込み、且つ、CPUの命令バッファ(0)４７０に格納して、命令フェッチを完了する。
（2）分岐命令の実行により分岐方向が確定している場合
命令フェッチ部４２０，４２１は、分岐命令の実行により分岐方向が確定した側（シーケンシャル側、または、ターゲット側）のみを、命令フェッチする。その時、分岐確定方向がシーケンシャル側の場合には、命令フェッチ部４２０が、キャッシュ制御部（Port-0）５４を介して、メモリバスアクセス部６０にバスアクセスを要求する。メモリバスアクセス部６０は、フェッチ要求された命令を主記憶６４から読み出し、キャッシュ制御部５４を介して、命令バッファ（０）４７０とキャッシュメモリ５２に命令を格納して、命令フェッチを完了する。
【００５６】
分岐確定方向がターゲット側の場合には、命令フェッチ部４１１が、キャッシュ制御部（Port-1）５６を介して、メモリバスアクセス部６０にバスアクセスを要求する。メモリバスアクセス部６０が、フェッチ要求された命令を主記憶６４からを読み出し、キャッシュ制御部５６を介して、命令バッファ（１）４７１に命令を格納して、命令フェッチを完了する。なお、分岐確定方向がターゲット側になった時点で、ターゲット側はシーケンシャル側に、シーケンシャル側はターゲット側に交代する。
【００５７】
図７は、上記の第１または第２の実施例によりメモリバスアクセスが制限された場合の、具体的なパイプライン動作を示す図表である。この例は、図７の表の下に示したシーケンシャル側の命令列01〜09と分岐命令03に対応するターゲット側の命令列51〜54を例にして、パイプライン動作を示すものである。この例では、分岐命令03についての分岐予測は、分岐しない、つまりシーケンシャル側の方向が予測されている場合である。
【００５８】
パイプライン動作は、次のステージで構成される。
Ｐ：命令フェッチ要求ステージ：ＣＰＵがキャッシュ制御部に命令フェッチ要求をする。この段階では、分岐未確定のプリフェッチか、分岐確定後のフェッチかの区別を付けて命令フェッチ要求される。
Ｔ：フェッチステージ：キャッシュメモリでヒットミス判定を行い命令を取り出す準備をする。
Ｃ：命令バッファステージ：命令バッファに命令を取りこむ。
Ｄ：デコードステージ：命令デコーダが命令を解読し制御信号を生成する。
Ｅ：実行ステージ：デコード結果の制御信号に応答して命令を実行する。
Ｗ：書き込みステージ：命令を実行した結果をレジスタに書き込む。
Ｍ：キャッシュミス：キャッシュミスが発生した。
Ｂ：バスアクセス保持ステージ：メモリバスにアクセスするためアドレスをバスアクセスアドレス保持部にて保持する。
Ｒ：バスアクセス要求ステージ：メモリバスアクセス部に読み出しリクエストを出す。バスアクセスして命令が読み出されるまで１８サイクルを要すると仮定する。
【００５９】
図７に戻り、命令01は、サイクル１の命令フェッチ要求ステージＰ、サイクル２のフェッチステージＴによりキャッシュメモリから命令をフェッチすることができ、サイクル３で命令バッファに命令が取り込まれる（ステージＤ）。そして、サイクル５，６，７の３サイクルで命令が実行される（ステージＥ）。実行後に命令実行結果が各種レジスタに書き込まれる（ステージＷ）。
【００６０】
命令02も、ステージＰ、Ｔ、Ｃを経て、命令が命令バッファに取り込まれる。そして、命令01の実行ステージＥが終了した次のサイクル８で、デコードステージＤで待機していた命令02が実行され（ステージＥ）、実行結果がレジスタに書き込まれる（ステージＷ）。
【００６１】
命令03は、命令バッファステージＣの時点で、分岐予測部により分岐命令であることが判別され、分岐方向はシーケンシャル側であると予測される。従って、サイクル６からターゲット側の命令列51、52，53も命令プリフェッチが開始される。
【００６２】
命令03〜07までは、全てキャッシュヒットしてパイプラインサイクルを乱すことなく、それぞれの実行ステージＥが実行される。そして、命令08〜10がキャッシュミス（ステージＭ）を起こしたとする。また、ターゲット側の命令51〜53もキャッシュミス（ステージＭ）を起こしたとする。
【００６３】
命令08は、サイクル８の時点では分岐命令03の分岐が未確定であり、分岐未確定の命令プリフェッチとして要求される（ステージＰ）。そこで、サイクル１０でキャッシュミスを起こすが、第１または第２の実施例では、分岐予測がシーケンシャル側の時にシーケンシャル側の命令がキャッシュミスを起こすと、そのメモリバスアクセスを許可している。従って、サイクル１１でバスアクセス保持ステージＢ、サイクル１２からバスアクセス要求ステージＲに入る。バスアクセス要求ステージＲは、１８サイクルを要すると仮定したので、サイクル３０でフェッチされた命令が命令バッファに格納され、命令バッファステージＣになる。
【００６４】
命令08のメモリバスアクセスに伴い、それに後続する命令もメインメモリからフェッチされてキャッシュメモリに格納されるので、命令09以降の命令バッファステージＣは、命令08のステージＣに続いて起こることになる。
【００６５】
一方、命令51は、サイクル８の時点でキャッシュミスを起こすが、分岐予測方向がシーケンシャル側であるので、ターゲット側の命令51に対するメモリバスアクセスは禁止される。命令52、53も同様にメモリバスアクセスは禁止される。従って、命令08がメモリバスアクセス要求するしたサイクル１２では、メモリバスは空き状態にあり、即メモリバスアクセスを行うことができ、サイクル３２で命令08が実行される（ステージＥ）。
【００６６】
尚、命令11、12は、それぞれ分岐が確定した後に分岐確定後の命令フェッチステージＰを迎えるので、キャッシュミスしてもメモリバスアクセスは実行される。但し、図７の例では、すでに命令08のメモリバスアクセスでキャッシュメモリに命令11、12が格納されているので、キャッシュミスは起こしていない。
【００６７】
図７の例は、第１の実施例でも第２の実施例でも、同様の動作になる。即ち、分岐未確定時の命令08のプリフェッチに対してキャッシュミスを起こしても、分岐予測方向側の命令08に対しては、メモリバスアクセスは許可される。
【００６８】
第３の実施例の場合は、分岐未確定時の命令08のプリフェッチに対して、キャッシュミス後のメモリバスアクセスは禁止される。その場合は、分岐確定後に再度命令フェッチ部からの命令フェッチに応答して、キャッシュミス後にメモリバスアクセスにより命令がフェッチされる。その場合のメモリバスアクセスは、高速に行われる。
【００６９】
図８は、従来例のメモリバスアクセスが制限されていない場合の、具体的なパイプライン動作を示す図表である。この例も、図７の場合と同じ命令列に対するパイプライン動作を示すものである。
【００７０】
この例では、命令51は分岐予測方向ではないが、メモリバスアクセスを許可される。従って、サイクル１０からバスアクセス要求ステージＲになっている。このステージＲは１８サイクルを要するので、命令08がサイクル１０でキャッシュミス（ステージＭ）を起こしても、メモリバスがビジー状態であり、そのメモリバスアクセスＲは、サイクル２８まで待たされることになる。その結果、命令08の実行ステージＥは、サイクル４８まで遅れることになる。
【００７１】
このように、従来例に比較して、本実施例では、分岐未確定の段階でのメモリバスアクセスを制限したので、使用可能性が高い命令に対するメモリバスアクセスを効率的に行うことができ、パイプラインサイクルの乱れを最小限に止めることができる。
【００７２】
以上、本発明の保護範囲は、上記の実施の形態例に限定されるものではなく、特許請求の範囲に記載された発明とその均等物にまで及ぶものである。
【００７３】
【発明の効果】
以上、本発明によれば、分岐未確定の場合の命令フェッチに対して、キャッシュミスした時のメインメモリへのアクセスを適宜制限したので、分岐予測方向の命令や分岐確定後の命令に対するメインメモリへのアクセスをより効率的に行うことができる。
【図面の簡単な説明】
【図１】本発明の実施の形態例における情報処理装置のシステム図である。
【図２】キャッシュ制御部のブロック図である。
【図３】第１の実施例における命令フェッチの動作を示す図表である。
【図４】第２の実施例における命令フェッチの動作を示す図表である。
【図５】第３の実施例における命令フェッチの動作を示す図表である。
【図６】第４の実施例における命令フェッチの動作を示す図表である。
【図７】第１または第２の実施例によりメモリバスアクセスが制限された場合の、具体的なパイプライン動作を示す図表である。
【図８】従来例の場合の具体的なパイプライン動作を示す図表である。
【符号の説明】
４０            ＣＰＵ
410,411          命令フェッチ部
430,431          分岐予測部
５０            キャッシュメモリユニット
５２            キャッシュメモリ
５４，５６      キャッシュ制御部
６０            メモリバスアクセス部
６２            メモリバス
６４            メインメモリ
【図１】
0004111645.tif 000002
【図２】
0004111645.tif 000003
【図３】
0004111645.tif 000004
【図４】
0004111645.tif 000005
【図５】
0004111645.tif 000006
【図６】
0004111645.tif 000007
【図７】
0004111645.tif 000008
【図８】
0004111645.tif 000009