(57)【特許請求の範囲】
【請求項１】
命令長の２倍以上の幅で命令を取り込み、プリフェッチした命令を蓄えておくプリフェッチバッファと、
前記プリフェッチバッファに蓄えられた命令をデコードするためのデコーダと、
前記デコードされた命令を実行するための演算器と、
分岐命令をデコードした時点で分岐先命令をプリフェッチ要求し、それ以外の時はシーケンシャルに命令のプリフェッチ要求を行う命令要求制御回路と、
分岐命令により分岐した場合に分岐先命令を前記プリフェッチバッファに取り込み、分岐しなかった場合は無視するプリフェッチ制御回路と
を有する情報処理装置。
【請求項２】
前記プリフェッチバッファは、命令キャッシュメモリを介してメインメモリから命令を取り込む請求項１記載の情報処理装置。
【請求項３】
前記プリフェッチ制御回路は、分岐が不成立の場合に分岐先の命令のプリフェッチ要求を取り消す制御信号を前記命令キャッシュメモリに出力することにより、キャッシュミスによるメモリメモリへのアクセスを禁止する請求項２記載の情報処理装置。
【請求項４】
前記プリフェッチバッファは、命令キャッシュメモリから命令長の２倍の幅で命令を取り込み、命令長の幅で前記デコーダに命令を出力する請求項２記載の情報処理装置。
【請求項５】
前記プリフェッチバッファは、最大４命令を蓄えることができる請求項４記載の情報処理装置。
【請求項６】
前記デコーダ及び前記演算器は、１命令単位で処理する請求項１記載の情報処理装置。
【請求項７】
前記命令要求制御回路及び前記プリフェッチ制御回路は、遅延分岐命令が現れた場合にはそれに続く命令の後に分岐先に分岐するものとして処理する請求項１記載の情報処理装置。
【請求項８】
前記分岐命令は、条件分岐命令及び／又は無条件分岐命令を含む請求項１記載の情報処理装置。
【請求項９】
さらに、前記演算器の実行結果を書き込むためのレジスタを有する請求項１記載の情報処理装置。
【請求項１０】
命令長の２倍以上の幅で命令を取り込みプリフェッチした命令を蓄えておく第１のプリフェッチステップと、
前記プリフェッチした命令をデコードするデコードステップと、
前記デコードされた命令を実行するための実行ステップと、
分岐命令をデコードした時点で分岐先命令をプリフェッチ要求し、それ以外の時はシーケンシャルに命令のプリフェッチ要求を行う命令要求ステップと、
分岐命令により分岐した場合に分岐先命令をプリフェッチし、分岐しなかった場合は無視する第２のプリフェッチステップと
を有する情報処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、情報処理技術に関し、特にパイプライン処理により命令フェッチ、命令デコード及び実行を行う情報処理技術に関する。
【０００２】
【従来の技術】
パイプライン処理により命令フェッチ、命令デコード及び実行を行う情報処理装置では、分岐命令を実行すると共に次の命令をデコードしなければならないので、実際に分岐した場合にはパイプラインに空きスロットが発生し、ペナルティとなってしまう。この問題を解決するために遅延分岐、分岐予測、デュアルフェッチなどの方法が取られている。
【０００３】
下記の特許文献１の情報処理装置は、分岐命令のシーケンシャル側とターゲット側の命令系列の両方をフェッチする命令フェッチ部と、命令フェッチ部からのフェッチ要求に応答してキャッシュメモリまたはメインメモリから命令をフェッチするキャッシュ制御部と、メインメモリへのアクセスを行うメモリバスアクセス部と、フェッチした命令を保持する命令バッファと、命令バッファに格納される分岐命令の分岐予測を分岐命令の実行に先行して行う分岐予測部とを有する。キャッシュ制御部は、分岐命令の分岐方向が未確定の場合に、分岐予測部からの分岐予測方向に応じて、キャッシュミス後のメインメモリへのメモリバスアクセスが制限される。キャッシュメモリを有するマイクロプロセッサにおいて、外部メインメモリへのアクセスに制限を加えて、メインメモリへのアクセス効率を高める。
【０００４】
【特許文献１】
特開２００１−１５４８４５号公報
【０００５】
【発明が解決しようとする課題】
上記の遅延分岐は、遅延分岐命令が現れた場合にはそれに続く命令（遅延スロット）の後に分岐先に分岐するものである。遅延分岐では、遅延スロットに入れる命令が無い場合はペナルティが残る問題があり、又、遅延スロットへ挿入できる命令は通常１命令であるため、命令フェッチに２サイクルかかるようなパイプライン構造では、ペナルティが発生する。
【０００６】
上記の分岐予測は、デコードにより分岐予測を行ってプリフェッチするものである。分岐予測では、予測が外れた場合には同じくペナルティが発生する。そのため、予測のヒット率を向上させなければならないが、そのための機構は複雑かつ大規模になる。
【０００７】
上記のデュアルフェッチは、分岐しない場合及び分岐する場合のための２ポート用意するものである。デュアルフェッチでは、プリフェッチバッファを用意し、その内容をプリデコードし、分岐命令であれば、分岐先命令とシーケンシャル側の命令の両方の命令をフェッチするが、フェッチ用のバスが２本必要になり、大規模で複雑なものになる。
【０００８】
さらに、分岐予測で予測に失敗した場合やデュアルフェッチの場合にキャッシュミスした場合には、外部のメインメモリへ無駄なアクセスが発生するためペナルティが大きくなる。
【０００９】
本発明の目的は、大規模な回路を使用せず、簡単な論理回路で分岐命令実行時のペナルティを無くす手法を提供することである。
【００１０】
【課題を解決するための手段】
本発明の一観点によれば、命令長の２倍以上の幅で命令を取り込み、プリフェッチした命令を蓄えておくプリフェッチバッファと、プリフェッチバッファに蓄えられた命令をデコードするためのデコーダと、デコードされた命令を実行するための演算器とを有する情報処理装置が提供される。命令要求制御回路は、分岐命令をデコードした時点で分岐先命令をプリフェッチ要求し、それ以外の時はシーケンシャルに命令のプリフェッチ要求を行う。プリフェッチ制御回路は、分岐命令により分岐した場合に分岐先命令をプリフェッチバッファに取り込み、分岐しなかった場合は無視する。
【００１１】
分岐命令をデコードした時点で分岐先命令をプリフェッチ要求し、それ以外の時はシーケンシャルに命令のプリフェッチ要求を行うことにより、分岐しない場合と分岐する場合のどちらの命令も用意することが可能となる。また、大規模な予測回路等を使用せず分岐成立／不成立に関わらず分岐ペナルティを無くすことが可能となる。
【００１２】
【発明の実施の形態】
図２は、本発明の実施形態の処理対象であるコンピュータプログラム（命令群）ａ〜ｖの例を示す。各命令ａ〜ｖは、それぞれ命令長が１６ビットである。アドレスの１つの番地には、１バイト（８ビット）が記憶可能である。例えば、２００番地〜２１０番地のアドレスには命令ａ〜ｆが記憶され、４００番地〜４０６番地のアドレスには命令ｓ〜ｖが記憶される。４００番地には、「ｌａｂｅｌ０」のラベルが付与されている。このプログラムを実行すると、まず命令ａを実行する。命令ａでは、例えばレジスタｒ０とｒ２の値を比較する。次に、命令ｂを実行する。命令ｂは、上記の比較の結果、レジスタｒ０とｒ２が同じであれば「ｌａｂｅｌ０」（４００番地）に分岐させ、同じでなければ分岐せずにシーケンシャルに命令を実行させるための命令である。このような命令ｂが分岐命令である。分岐命令は、条件分岐命令及び／又は無条件分岐命令を含む。条件分岐命令は、命令ｂのように比較結果等の条件に応じて分岐させる命令である。無条件分岐命令は、ＣＡＬＬ命令又はＪＵＭＰ命令のように無条件に分岐させる命令である。
【００１３】
分岐命令ｂは、特に遅延分岐命令（例えば「：Ｄ」で表す）である。遅延分岐命令について説明する。条件分岐命令は、条件に合致すれば分岐先に分岐し、条件に合致しなければ分岐しない。遅延分岐命令ｂは、分岐しない場合には命令ｂの後に命令ｃ、ｄ、ｅ及びｆをシーケンシャルに実行し、分岐する場合には命令ｂの後に命令ｃ、ｓ、ｔ、ｕ、ｖを順次実行する。すなわち、遅延分岐命令ｂの後の命令ｃは、分岐の有無にかかわらずに必ず実行し、その後に分岐することになる。遅延分岐命令ｂの後の命令ｃを、遅延スロット命令と呼ぶ。
【００１４】
図１は、本発明の実施形態による情報処理装置の構成図である。この情報処理装置は、命令（アドレス）要求ステージ（以下、ＩＡステージという）１３１、命令取り込み（フェッチ）ステージ（以下、ＩＦステージ）１３２、命令デコードステージ（以下、ＩＤステージという）１３３、実行ステージ（以下、ＥＸステージという）１３４、レジスタ書き込みステージ（以下、ＷＢステージという）１３５の５ステージのパイプライン処理を行う。命令ビット長が１６ビットの場合を例に説明する。
【００１５】
ＣＰＵ（中央演算処理装置）１０１は、命令キャッシュメモリ（以下、命令キャッシュという）１０２を介してメインメモリ１２１と接続される。以下、具体的に説明する。メインメモリ１２１は、例えばＳＤＲＡＭであり、３２ビット幅のバス１２２を介して外部バス１２０に接続される。命令キャッシュ１０２は、３２ビット幅のバス１１７を介して外部バス１２０に接続される。ＣＰＵ１０１は、３２ビット幅の命令用バス１１２を介して命令キャッシュ１０２に接続される。命令キャッシュ１０２は、頻繁に使用する命令（プログラム）の一部を予めメインメモリ１２１から読み込み記憶し、逆に使用されないものから追い出していく。ＣＰＵ１０１が要求する命令が命令キャッシュ１０２上にある場合をキャッシュヒットという。キャッシュヒットした場合には、ＣＰＵ１０１は命令キャッシュ１０２から命令を受け取ることができる。それに対し、ＣＰＵ１０１が要求する命令が命令キャッシュ１０２上にない場合をキャッシュミスという。キャッシュミスの場合は、命令キャッシュ１０２がバスアクセス信号１１６によりメインメモリ１２１に命令の読み出し要求を行う。ＣＰＵ１０１は、命令キャッシュ１０２を介してメインメモリ１２１から命令を読み出すことができる。バス１１２の転送速度は、外部バス１２０の転送速度に比べて極めて速い。したがって、キャッシュヒットした場合には、キャッシュミスした場合に比べ、命令読み出し速度が極めて速い。また、命令（プログラム）がシーケンシャルに読み出される可能性が高いことからキャッシュヒット率が高くなるので、命令キャッシュ１０２を設けることにより、ＣＰＵ１０１の命令読み出し速度が全体的に速くなる。
【００１６】
ＣＰＵ１０１は、命令キュー（プリフェッチバッファ）１０３、命令フェッチ制御部１０４、命令デコーダ１０５、分岐ユニット１０６、演算器１０７、ロード及びストア部１０８、及びレジスタ１０９を有する。命令キュー１０３は、例えば１６ビット長の命令を最大４個記憶可能であり、３２ビット幅のバス１１２を介して命令キャッシュ１０２に接続され、１６ビット幅のバス１１５を介して命令デコーダ１０５に接続される。すなわち、命令キュー１０３は、命令キャッシュ１０２からの命令を３２ビット単位で書き込み、１６ビット単位の命令を読み出して命令デコーダ１０５に出力する。命令フェッチ制御部１０４は、命令キャッシュ１０２に対してキャッシュアクセス制御信号１１０を入出力し、命令キュー１０３の入出力を制御する。命令デコーダ１０５は、命令キュー１０３に蓄えられた命令を１命令単位でデコードする。演算器１０７は、命令デコーダ１０５がデコードした命令を１命令単位で実行（演算）する。レジスタ１０９には、演算器１０７の実行結果が書き込まれる。ロード及びストア部１０８は、命令デコーダ１０５がデコーダした命令がロード又はストアであるときに、レジスタ１０９及びメインメモリ１２１間でロード又はストアを行う。
【００１７】
命令フェッチ動作は、ＣＰＵ１０１の状態に従い、命令フェッチ制御部１０４が命令キャッシュ１０２に命令要求を行い（ＩＡステージ１３１）、次のサイクルで命令キュー１０３に取り込む（ＩＦステージ１３２）ことで行う。ただし、本実施形態では、命令キュー１０３に後続命令を蓄えることにより分岐ペナルティを減らすことを特徴とするため、命令長の２倍である３２ビット単位（２命令）で命令フェッチ動作を行う。次に、命令キュー１０３の最初の命令を命令デコーダ１０５でデコードし（ＩＤステージ１３３）、次のサイクルで命令により指示された動作を行い（ＥＸステージ１３４）、レジスタ１０９への書き戻し（ＷＢステージ１３５）を行うことで一つの命令を完了する。ＣＰＵ１０１は、これらの動作をパイプラインで行うことを特徴とする。
【００１８】
命令デコーダ１０５は、命令デコーダ１０５がデコードした命令が分岐命令であるとき、分岐命令デコード通知信号１１３を命令フェッチ制御部１０４及び分岐ユニット１０６に出力する。命令フェッチ制御部１０４は、分岐命令デコード通知信号１１３を入力（分岐命令をデコード）した時点で分岐先命令をプリフェッチ要求し、それ以外の時はシーケンシャルに命令のプリフェッチ要求を行う。具体的には、命令フェッチ制御部１０４は、キャッシュアクセス制御信号１１０を命令キャッシュ１０２に出力することによりプリフェッチ要求する。プリフェット要求により、命令キャッシュ１０２から命令キュー１０３に命令がプリフェッチされる。
【００１９】
このように分岐命令を実行する前のデコードの段階で分岐先命令のプリフェッチ要求を行う。この後、分岐命令を実行した段階で、分岐の有無が決定する。すなわち、演算器１０７の演算により分岐命令の直前の命令が実行され、実行結果がレジスタ１０９に書き込まれる。このレジスタ１０９内の実行結果１１９は、分岐ユニット１０６に入力される。演算器１０７の演算により分岐命令が実行され、分岐条件が成立したかを示す情報が例えばレジスタ１０９内に設けられたフラグを介して分岐ユニット１０６に入力される。分岐ユニット１０６は、分岐命令デコード通知信号１１３及び分岐命令実行結果１１９に応じて、分岐命令実行通知信号１１４を命令フェッチ制御部１０４に出力する。すなわち、分岐命令の実行結果に応じて、分岐命令実行通知信号１１４を用いて分岐するか否かを通知する。命令フェッチ制御部１０４は、分岐する場合には上記でプリフェッチ要求した分岐先命令を命令キュー１０２にプリフェッチし、分岐しない場合には上記でプリフェッチ要求した分岐先命令のプリフェッチを行わずに無視し、シーケンシャルの命令のプリフェッチ、デコード及び実行を行うと共に、アクセスキャンセル信号１１１を命令キャッシュ１０２に出力する。命令キャッシュ１０２は、既に上記の分岐先のプリフェッチ要求を受けており、キャッシュミスした場合にはメインメモリ１２１にアクセスしようとしている。命令キャッシュ１０２は、アクセスキャンセル信号１１１を入力すると、メインメモリ１２１へのアクセスをキャンセルする。これにより、不要なメインメモリ１２１へのアクセスをなくし、性能低下を防止できる。
【００２０】
なお、実行結果１１９は、説明の簡単のために、レジスタ１０９から分岐ユニット１０６に入力されるように示したが、実際にはバイパス回路を用いることによりＥＸステージ１３４の実行完了を待たずに、実行結果１１９を分岐ユニット１０６に入力することができる。
【００２１】
図３は、参考のために、単純に１命令ずつ処理を行う通常の情報処理装置の動作を示すタイミングチャートである。図２のプログラムの処理を行う場合を例に説明する。キャッシュアクセスアドレスＩＡ１は、分岐しない場合に命令要求するアドレスを示す。キャッシュアクセスデータＩＦ１は、分岐しない場合に命令キャッシュ１１２が命令キュー１０３に出力するデータである。キャッシュアクセスアドレスＩＡ２は、分岐する場合に命令要求するアドレスを示す。キャッシュアクセスデータＩＦ２は、分岐する場合に命令キャッシュ１１２が命令キュー１０３に出力するデータである。
【００２２】
サイクルＣＹ１では、命令ａをＩＡステージ１３１で命令要求する。この際、キャッシュアクセスアドレスＩＡ１及びＩＡ２は命令ａのアドレスである。
【００２３】
次に、サイクルＣＹ２では、命令ａをＩＦステージ１３２でフェッチし、遅延分岐命令（条件分岐命令）ｂをＩＡステージ１３１で命令要求する。この際、キャッシュアクセスアドレスＩＡ１及びＩＡ２は命令ｂのアドレスであり、キャッシュアクセスデータＩＦ１及びＩＦ２は命令ａである。
【００２４】
次に、サイクルＣＹ３では、命令ａをＩＤステージ１３３でデコードし、遅延分岐命令ｂをＩＦステージ１３２でフェッチし、命令ｃ（遅延スロット）をＩＡステージ１３１で命令要求する。この際、キャッシュアクセスアドレスＩＡ１及びＩＡ２は命令ｃのアドレスであり、キャッシュアクセスデータＩＦ１及びＩＦ２は命令ｂである。
【００２５】
次に、サイクルＣＹ４では、命令ａをＥＸステージ１３４で実行し、遅延分岐命令ｂをＩＤステージ１３３でデコードし、命令ｃをＩＦステージ１３２でフェッチし、命令ｄをＩＡステージ１３１で命令要求する。この際、キャッシュアクセスアドレスＩＡ１及びＩＡ２は命令ｄのアドレスであり、キャッシュアクセスデータＩＦ１及びＩＦ２は命令ｃである。
【００２６】
上記の遅延分岐命令ｂのデコード後のＥＸステージ１３４で、分岐の有無が決定し、分岐の有無に応じてサイクルＣＹ５以降の処理が異なる。まず、分岐しない場合を説明する。
【００２７】
サイクルＣＹ５では、命令ａをＷＢステージ１３５でレジスタ書き込みし、遅延分岐命令ｂをＥＸステージ１３４で実行し、命令ｃをＩＤステージ１３３でデコードし、命令ｄをＩＦステージ１３２でフェッチし、命令ｅをＩＡステージ１３１で命令要求する。この際、キャッシュアクセスアドレスＩＡ１は命令ｅのアドレスであり、キャッシュアクセスデータＩＦ１は命令ｄである。
【００２８】
次に、サイクルＣＹ６では、遅延分岐命令ｂをＷＢステージ１３５でレジスタ書き込みし、命令ｃをＥＸステージ１３４で実行し、命令ｄをＩＤステージ１３３でデコードし、命令ｅをＩＦステージ１３２でフェッチし、命令ｆをＩＡステージ１３１で命令要求する。この際、キャッシュアクセスアドレスＩＡ１は命令ｆのアドレスであり、キャッシュアクセスデータＩＦ１は命令ｅである。
【００２９】
以下、サイクルＣＹ７以降も同様の処理を行う。以上のように、分岐しない場合には、命令ａからシーケンシャルに処理を行えばよく、空スロットはできず、効率的なパイプライン処理を行うことができる。
【００３０】
次に、分岐する場合を説明する。サイクルＣＹ５において、分岐する場合には、上記のサイクルＣＹ４で命令要求した命令ｄをキャンセルする。その結果、サイクルＣＹ４のＩＡステージ１３１は空スロットになり、無駄な処理になる。サイクルＣＹ５では、命令ａをＷＢステージ１３５でレジスタ書き込みし、遅延分岐命令ｂをＥＸステージ１３４で実行し、命令ｃをＩＤステージ１３３でデコードし、ＩＦステージ１３２は空スロットになり、分岐先命令ｓをＩＡステージ１３１で命令要求する。この際、キャッシュアクセスアドレスＩＡ２は命令ｓのアドレスであり、キャッシュアクセスデータＩＦ２は命令ｄである。
【００３１】
次に、サイクルＣＹ６では、遅延分岐命令ｂをＷＢステージ１３５でレジスタ書き込みし、命令ｃをＥＸステージ１３４で実行し、ＩＤステージ１３３は空スロットになり、分岐先命令ｓをＩＦステージ１３２でフェッチし、命令ｔをＩＡステージ１３１で命令要求する。この際、キャッシュアクセスアドレスＩＡ１は命令ｔのアドレスであり、キャッシュアクセスデータＩＦ１は命令ｓである。
【００３２】
次に、サイクルＣＹ７では、命令ｃをＷＢステージ１３５でレジスタ書き込みし、ＥＸステージ１３４は空スロットになり、分岐先命令ｓをＩＤステージ１３３でデコードし、命令ｔをＩＦステージ１３２でフェッチし、命令ｕをＩＡステージ１３１で命令要求する。この際、キャッシュアクセスアドレスＩＡ１は命令ｕのアドレスであり、キャッシュアクセスデータＩＦ１は命令ｔである。
【００３３】
以下、サイクルＣＹ８以降も同様の処理を行う。以上のように、分岐する場合には、ハッチで示した空スロットｄが生じ、効率的なパイプライン処理を行うことができない。分岐命令ｂのＥＸステージ１３４まで分岐するかどうかの条件判定が出来ないため、後続に分岐先命令をフェッチするのかそのままシーケンシャルの命令をフェッチするのかを、判定までウェイトしてペナルティを発生させることになる。分岐する場合は、命令cまでは分岐しない場合と同様の動作となるが、遅延分岐命令ｂのＥＸステージ１３４で分岐が成立することがわかり、ここではじめて分岐先命令sの命令要求を出すことになる。そのため、先に命令要求を出していた命令dは、キャンセルし、結果としてパイプライン上に空きスロットが発生することになる。また、分岐予測を行った場合でも予測が外れた場合は、ペナルティが発生する。
【００３４】
図４は、図１の本発明の実施形態による情報処理装置において分岐条件が成立し分岐する場合の動作を示すタイミングチャートである。図２のプログラムの処理を行う場合を例に説明する。キャッシュアクセスアドレスＩＡ１は、命令要求するアドレスを示す。キャッシュアクセスデータＩＦ１は、命令キャッシュ１１２がキャッシュヒットして命令キュー１０３に出力するデータである。
【００３５】
まず、サイクルＣＹ１では、２つの命令ａ及びｂをＩＡステージ１３１で命令要求する。命令ｂは、遅延分岐命令である。ＩＡステージ１３１では、３２ビットの２命令単位で命令要求を行うことができる。この際、キャッシュアクセスアドレスＩＡ１は命令ａ及びｂのアドレスである。
【００３６】
次に、サイクルＣＹ２では、２つの命令ａ及びｂをＩＦステージ１３２でフェッチし、２つの命令ｃ及びｄをＩＡステージ１３１で命令要求する。ＩＦステージ１３２では、３２ビットの２命令単位でフェッチを行うことができる。このフェッチ動作により、命令キュー１０３には命令ａ及びｂが格納される。この際、キャッシュアクセスアドレスＩＡ１は命令ｃ及びｄのアドレスであり、キャッシュアクセスデータＩＦ１は命令ａ及びｂである。
【００３７】
次に、サイクルＣＹ３では、１つの命令ａをＩＤステージ１３３でデコードし、２つの命令ｃ及びｄをＩＦステージ１３２でフェッチする。ＩＤステージ１３３では、１６ビットの１命令単位でデコードを行う。命令ｃ及びｄがフェッチのために入力され、命令ａがデコードのために出力されるので、命令キュー１０３には命令ｂ，ｃ，ｄが格納される。この際、キャッシュアクセスデータＩＦ１は命令ｃ及びｄである。この例では、命令キュー１０３が最大４命令格納可能としているので、このサイクルでは命令要求を行わない。
【００３８】
次に、サイクルＣＹ４では、命令ａをＥＸステージ１３４で実行し、命令ｂをＩＤステージ１３３でデコードし、２つの分岐先命令ｓ及びｔをＩＡステージ１３１で命令要求する。ＥＸステージ１３４では、１６ビットの１命令単位で実行を行う。命令キャッシュ１０３には、命令ｃ及びｄが格納される。この際、キャッシュアクセスアドレスＩＡ１は分岐先命令ｓ及びｔのアドレスである。
【００３９】
このサイクルＣＹ４において、命令デコーダ１０５は、分岐命令ｂをデコードすることにより、命令デコード通知信号１１３を出力する。命令フェッチ制御部１０４は、命令デコード通知信号１１３を受けて、分岐先命令ｓ及びｔの命令要求を行う。ここでは、命令キュー１０３の状態とは無関係に要求を行う。
【００４０】
次に、サイクルＣＹ５では、命令ａをＷＢステージ１３５でレジスタ書き込みし、遅延分岐命令ｂをＥＸステージ１３４で実行し、命令ｃをＩＤステージ１３３でデコードし、分岐先命令ｓ及びｔをＩＦステージ１３２でフェッチし、命令ｕ及びｖをＩＡステージ１３１で命令要求する。命令ｃ（遅延スロット）は、前が遅延分岐命令ｂであるために分岐したときにもＩＤステージ発行する。分岐命令ｂの実行により分岐条件の成立が決定し、命令ｕ及びｖの命令要求を行う。ＷＢステージ１３５では、１６ビットの１命令単位でレジスタ書き込みを行う。命令キャッシュ１０３には、命令ｓ及びｔが格納される。この際、キャッシュアクセスアドレスＩＡ１は命令ｕ及びｖのアドレスであり、キャッシュアクセスデータＩＦ１は命令ｓ及びｔである。
【００４１】
このサイクルＣＹ５において、分岐ユニット１０６は、分岐命令ｂの実行により分岐条件が成立し、分岐するための分岐命令実行通知信号１１４を出力する。命令フェッチ制御部１０４は、制御信号１１８により、命令キュー１０３内の命令ｄを削除する。
【００４２】
次に、サイクルＣＹ６では、遅延分岐命令ｂをＷＢステージ１３５でレジスタ書き込みし、命令ｃをＥＸステージ１３４で実行し、分岐先命令ｓをＩＤステージ１３３でデコードし、命令ｕ及びｕ及びｖをＩＦステージでフェッチする。命令キャッシュ１０３には、命令ｔ、ｕ及びｖが格納される。この際、キャッシュアクセスデータＩＦ１は命令ｕ及びｖである。
【００４３】
以下、サイクルＣＹ７以降も同様の処理を行う。以上のように、分岐する場合には、ハッチで示した空スロットｄを分岐先命令ｓのスロットで埋め、効率的なパイプライン処理を行うことができ、ペナルティが生じない。
【００４４】
本実施形態では、命令用バス１１２の幅をバス１１５の幅（命令長）の倍にすることにより命令供給のバンド幅を増やし、その余裕のできたバンド幅を利用して、分岐時のペナルティを減らしている。命令用バス１１２は、バス１１５の幅（命令長）の２倍以上であればよい。
【００４５】
以上のように、サイクルＣＹ５では、遅延条件分岐命令ｂの条件がＥＸステージで確定する。ここで分岐する場合、分岐ユニット１０６からの分岐命令実行通知信号１１４を使用し、命令フェッチ制御部１０４に分岐することを通知する。命令フェッチ制御部１０４は、その通知を受けて命令キュー１０３に以前までのデータｄを消去し、前のサイクルＣＹ４で要求した命令ｓ及びｔを取り込むことを指示する。従って、命令キュー１０３の状態は分岐先命令ｓとその後続命令ｔが存在することとなる。また、命令フェッチ制御部１０４は、分岐先の後続命令ｕ及びｖの命令要求を行う。上記のような命令フェッチ動作を行うことにより、サイクルＣＹ６で分岐先命令ｓをＩＤステージに発行できることとなり、分岐する場合にペナルティサイクルが発生しない。
【００４６】
図５は、図１の本発明の実施形態による情報処理装置において分岐条件が成立せず分岐しない場合の動作を示すタイミングチャートである。図２のプログラムの処理を行う場合を例に説明する。キャッシュアクセスアドレスＩＡ１は、命令要求するアドレスを示す。キャッシュアクセスデータＩＦ１は、命令キャッシュ１１２がキャッシュヒットして命令キュー１０３に出力するデータである。
【００４７】
サイクルＣＹ１〜ＣＹ４の動作は、図４の動作と同じであるため、説明を省略する。以下、サイクルＣＹ５以降の説明を行う。
【００４８】
サイクルＣＹ５では、命令ａをＷＢステージ１３５でレジスタ書き込みし、遅延分岐命令ｂをＥＸステージ１３４で実行し、命令ｃ（遅延スロット）をＩＤステージ１３３でデコードし、２つの命令ｅ及びｆをＩＡステージ１３１で命令要求する。命令ｃは、前が遅延分岐命令ｂであるために分岐したときにもＩＤステージ発行する。分岐命令ｂの実行により分岐条件の不成立が決定し、分岐先命令ｓ及びｔのフェッチを行わず、命令ｅ及びｆの命令要求を行う。命令キャッシュ１０３には、命令ｄが格納される。この際、キャッシュアクセスアドレスＩＡ１は命令ｅ及びｆのアドレスである。
【００４９】
このサイクルＣＹ５において、分岐ユニット１０６は、分岐命令ｂの実行により分岐条件が成立せず、分岐しないことを示す通知信号１１４を出力する。命令フェッチ制御部１０４は、キャッシュアクセス制御信号１１８により、命令キャッシュ１０２に命令ｅ及びｆの命令要求を行う。
【００５０】
次に、サイクルＣＹ６では、遅延分岐命令ｂをＷＢステージ１３５でレジスタ書き込みし、命令ｃをＥＸステージ１３４で実行し、命令ｄをＩＤステージ１３３でデコードし、命令ｅ及びｆをＩＦステージ１３２でフェッチする。命令キャッシュ１０３には、命令ｅ及びｆが格納される。この際、キャッシュアクセスデータＩＦ１は命令ｅ及びｆである。
【００５１】
以下、サイクルＣＹ７以降も同様の処理を行う。以上のように、分岐しない場合には、分岐先命令ｓの命令要求を行った後、ハッチで示すフェッチ以降の処理を行わずに、シーケンシャルの命令ｄのデコード等を行うので、効率的なパイプライン処理を行うことができ、ペナルティが生じない。サイクルＣＹ５で分岐命令ｂの条件が成立せず、分岐しない場合は、分岐ユニット１０６からの分岐命令実行通知信号１１４を使用して命令フェッチ制御部１０４に分岐命令で分岐しないことを通知する。それを受けて、命令フェッチ制御部１０４は、命令キュー１０３に分岐先命令の取り込みキャンセルを指示し、命令キュー１０３に存在する命令ｄの後続命令ｅ及びｆの要求を出す。
【００５２】
このようなフェッチ動作を行うことにより、サイクルＣＹ６では、遅延スロットｃの次の命令ｄをＩＤステージに発行することが可能となり、さらにその後続命令ｅ及びｆのフェッチがそのサイクルＣＹ６でできるため、分岐しない場合にもペナルティが発生しない。
【００５３】
さらに、サイクルＣＹ５で命令フェッチ制御部１０４からアクセスキャンセル信号１１１をアサートすることにより、分岐先命令ｓ及びｔの要求に対してキャッシュミスし、外部のメインメモリ１２１へアクセスすることを抑止することを可能とする。具体的には、命令キャッシュ１０２は、アクセスキャンセル信号１１１を入力すると、キャッシュミスした場合に、バスリクエスト１１６をアサートせずに、メインメモリ１２１へのアクセスを行わない。これにより、不要なバスアクセスを防止し、性能の低下を防ぐことができる。
【００５４】
本実施形態によれば、命令長の２倍以上の幅で命令を取り込み、プリフェッチした命令を蓄えておくプリフェッチバッファ１０３と、プリフェッチバッファに蓄えられた命令をデコードするためのデコーダ１０５と、デコードされた命令を実行するための演算器１０７とを有する情報処理装置が提供される。命令フェッチ制御部１０４は、分岐命令をデコードした時点で分岐先命令をプリフェッチ要求し、それ以外の時はシーケンシャルに命令のプリフェッチ要求を行う。また、命令フェッチ制御部１０４は、分岐命令により分岐した場合に分岐先命令をプリフェッチバッファ１０３に取り込み、分岐しなかった場合は無視する。
【００５５】
分岐命令をデコードした時点で分岐先命令をプリフェッチ要求し、それ以外の時はシーケンシャルに命令のプリフェッチ要求を行うことにより、分岐しない場合と分岐する場合のどちらの命令も用意することが可能となる。また、大規模な予測回路等を使用せずに分岐成立／不成立に関わらず分岐ペナルティを無くすことが可能となる。また、分岐命令実行時、分岐しなかった場合にそれを知らせる信号１１４を用意し、命令キャッシュ１０２又はメモリコントローラに通知することにより、キャッシュミスによるメインメモリ１２１への不要なアクセスを防止できる。大規模な予測回路等を使用せず単純な論理回路で、分岐命令の成立／不成立にかかわらずに分岐ペナルティを無くすことが可能となり、不要な外部バス１２０へのアクセスも行わずに済む。
【００５６】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【００５７】
【発明の効果】
以上説明したように、分岐命令をデコードした時点で分岐先命令をプリフェッチ要求し、それ以外の時はシーケンシャルに命令のプリフェッチ要求を行うことにより、分岐しない場合と分岐する場合のどちらの命令も用意することが可能となる。また、大規模な予測回路等を使用せず分岐成立／不成立に関わらず分岐ペナルティを無くすことが可能となる。
【図面の簡単な説明】
【図１】本発明の実施形態による情報処理装置の構成図である。
【図２】本発明の実施形態の処理対象であるコンピュータプログラム（命令群）の例を示す図である。
【図３】単純に１命令ずつ処理を行う通常の情報処理装置の動作を示すタイミングチャートである。
【図４】本発明の実施形態による情報処理装置において分岐条件が成立し分岐する場合の動作を示すタイミングチャートである。
【図５】本発明の実施形態による情報処理装置において分岐条件が成立せず分岐しない場合の動作を示すタイミングチャートである。
【符号の説明】
１０１  ＣＰＵ
１０２  命令キャッシュ
１０３  命令キュー
１０４  命令フェッチ制御部
１０５  命令デコーダ
１０６  分岐ユニット
１０７  演算器
１０８  ロード及びストア部
１０９  レジスタ
１２１  メインメモリ
１３１  ＩＡステージ
１３２  ＩＦステージ
１３３  ＩＤステージ
１３４  ＥＸステージ
１３５  ＷＢステージ
【図１】
0003683248.tif 000002
【図２】
0003683248.tif 000003
【図３】
0003683248.tif 000004
【図４】
0003683248.tif 000005
【図５】
0003683248.tif 000006