(57)【要約】 【課題】  低消費電力とプログラムの高速実行との要求に対して柔軟に対応する。【解決手段】  命令のフェッチ制御部（５）と、前記フェッチ制御部によりフェッチされた命令を保持する命令バッファ（１５）と、前記命令バッファに保持された命令を所定の順番にパイプラインで実行する実行部（６）とを含む。フェッチ制御部は、分岐命令の命令アドレスを用いて条件分岐の予測方向とその確度を示す予測情報を取得し、条件分岐命令における分岐予測側の命令のフェッチと分岐非予測側の命令のフェッチを行なうことが可能であると共に、前記予測情報に応じて選択的に分岐非予測側の命令のフェッチを抑止する。前記フェッチ制御部は、前記予測情報による分岐予測の確度が相対的に高いときに前記非予測側の命令のフェッチを抑止する。【選択図】        図１
2006048258.tif 000002
【特許請求の範囲】
【請求項１】
命令のフェッチ制御部と、前記フェッチ制御部によりフェッチされた命令を保持する命令バッファと、前記命令バッファに保持された命令を所定の順番にパイプラインで実行する実行部とを含み、
前記フェッチ制御部は、分岐命令の命令アドレスを用いて条件分岐の予測方向とその確度を示す予測情報を取得し、条件分岐命令における分岐予測側の命令のフェッチと分岐非予測側の命令のフェッチを行なうことが可能であると共に、前記予測情報に応じて選択的に分岐非予測側の命令のフェッチを抑止するデータプロセッサ。
【請求項２】
前記フェッチ制御部は、前記予測情報による分岐予測の確度が相対的に高いときに前記非予測側の命令のフェッチを抑止する請求項１記載のデータプロセッサ。
【請求項３】
命令のフェッチ制御部と、前記フェッチ制御部によりフェッチされた命令を保持する命令バッファと、前記命令バッファに保持された命令を所定の順番にパイプラインで実行する実行部とを含み、
前記フェッチ制御部は、分岐命令の命令アドレスを用いて条件分岐の予測方向とその確度を示す予測情報を取得し、条件分岐命令における分岐予測側の命令のフェッチと分岐非予測側の命令のフェッチの双方を行なう第１フェッチモードと、前記分岐予測側の命令のフェッチを行なうと共に前記予測情報に応じて選択的に分岐非予測側の命令のフェッチを抑止する第２フェッチモードとの選択が可能にされるデータプロセッサ。
【請求項４】
前記フェッチ制御部は、第２フェッチモードにおいて前記予測情報による分岐予測の確度が相対的に高いときに前記非予測側の命令のフェッチを抑止する請求項３記載のデータプロセッサ。
【請求項５】
設定値に応じて前記第１フェッチモード又は第２フェッチモードを指定する制御レジスタを有する請求項４記載のデータプロセッサ。
【請求項６】
前記制御レジスタの設定値は前記実行部による命令実行により可変である請求項５記載のデータプロセッサ。
【請求項７】
前記予測情報は複数ビットを有し、その値の違いによって各々異なる分岐予測及びその確度を表し、
前記フェッチ制御部は、条件分岐命令の命令アドレスの一部を用いてインデックスされ、前記予測情報を複数格納する予測情報テーブル部を有し、
前記フェッチ制御部は、条件分岐命令の分岐が確定したとき、その条件分岐命令を用いてインデックスされた予測情報がヒットであった場合には当該予測情報をその予測の最高確度を限度に当該確度が高くなる方向に更新し、その条件分岐命令を用いてインデックスされた予測情報がミスであった場合には当該予測情報をその予測の確度が低くなる方向に更新する請求項６記載のデータプロセッサ。
【請求項８】
前記分岐予測情報の最大値は条件分岐命令における条件成立による分岐予測の確度最大を意味し、最小値は条件分岐命令における条件不成立による分岐予測の確度最大を意味する請求項７記載のデータプロセッサ。
【請求項９】
命令のフェッチ制御部と、前記フェッチ制御部によりフェッチされた命令を保持する命令バッファと、前記命令バッファに保持された命令を所定の順番にパイプラインで実行する実行部とを含み、
前記フェッチ制御部は、条件分岐命令の命令アドレスの一部を用いてインデックスされ、分岐予測情報を複数格納する予測情報テーブル部と、分岐予測に対するヒット又はミスの分岐結果をシフト入力して最新より複数の分岐結果を分岐履歴情報として保持するシフトレジスタ部とを有し、
前記分岐予測情報はその値に応じて条件分岐の予測方向を示し、
前記フェッチ制御部は、条件分岐命令における分岐予測側の命令のフェッチと分岐非予測側の命令のフェッチを行なうことが可能であると共に、前記シフトレジスタ部が保有する分岐履歴情報から分岐確度を判定し、分岐確度が高いときは分岐非予測側の命令のフェッチを抑止するデータプロセッサ。
【請求項１０】
前記フェッチ制御部は、シフトレジスタ部が保有する分岐履歴情報の半分以上の分岐結果が予測ヒットを示しているとき、分岐予測の確度は高いと判定する請求項９記載のデータプロセッサ。
【請求項１１】
命令のフェッチ制御部と、前記フェッチ制御部によりフェッチされた命令を保持する命令バッファと、前記命令バッファに保持された命令を所定の順番にパイプラインで実行する実行部とを含み、
前記フェッチ制御部は、条件分岐命令の命令アドレスの一部を用いてインデックスされ、分岐予測情報を複数格納する予測情報テーブル部と、分岐予測に対するヒット又はミスの分岐結果をシフト入力して最新より複数の分岐結果を分岐履歴情報として保持するシフトレジスタ部とを有し、
前記分岐予測情報はその値に応じて条件分岐の予測方向を示し、
前記フェッチ制御部は、分岐命令の命令アドレスを用いて条件分岐の予測方向を示す予測情報を取得し、条件分岐命令における分岐予測側の命令のフェッチと分岐非予測側の命令のフェッチの双方を行なう第１フェッチモードと、前記分岐予測側の命令のフェッチを行なうと共に前記シフトレジスタ部より取得した分岐履歴情報が高い分岐確度を示しているときは分岐非予測側の命令のフェッチを抑止する第２フェッチモードとの選択が可能にされるデータプロセッサ。
【請求項１２】
設定値に応じて前記第１フェッチモード又は第２フェッチモードを指定する制御レジスタを有する請求項１１記載のデータプロセッサ。
【請求項１３】
前記制御レジスタの設定値は前記実行部による命令実行により可変である請求項１２記載のデータプロセッサ。
【請求項１４】
命令のフェッチ制御部と、前記フェッチ制御部によりフェッチされた命令を保持する命令バッファと、前記命令バッファに保持された命令を所定の順番にパイプラインで実行する実行部とを含み、
前記フェッチ制御部は、条件分岐命令における分岐予測側の命令をＮ１個と分岐非予測側の命令をＮ２個フェッチする第１のフェッチ機能と、条件分岐命令に対する予測確度を示す情報が高い予測確度を示しているときには、予測側の命令をＮ３個フェッチする第２のフェッチ機能を有し、Ｎ３＜Ｎ１，Ｎ２であるデータプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パイプラインによる命令実行が可能なデータプロセッサ（パイプラインプロセッサ）における条件分岐命令の分岐予測による命令フェッチ制御に関する。
【背景技術】
【０００２】
条件分岐命令の分岐予測とは、予め分岐する方向を予測して、その予測に基づいたアドレスの命令をパイプラインにつめてパイプラインの無駄をなくする技術である。さらに、前記分岐予測による命令実行の効率化の効果を上げるために、分岐予測が確定する前に予測した分岐方向の命令実行を許すると共にその予測が外れたときに命令実行の矛盾を解消するようにした投機実行という技術を採用することができる。
【０００３】
特許文献１には、分岐予測および投機的実行機能を備えるパイプラインプロセッサにおいて、分岐予測失敗による消費電力効率の悪化を防止するために、分岐予測が当たりにくい条件分岐命令を判断し、分岐予測が当たりにくい条件分岐命令については後続命令の投機的実行を行わず、分岐条件が確定するまで、後続命令の実行を待機する。分岐条件検証結果を受け取った後、分岐条件が成立したかどうかを判定し、分岐条件が成立していれば条件分岐命令の次アドレスの命令から実行し、分岐条件が成立していなければ分岐飛び先アドレスの命令から実行する。
【０００４】
【特許文献１】特開２０００−３２２２５７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明者は、低消費電力且つ高速動作を達成するマイクロプロセッサにおける命令フェッチ部の低消費電力化について検討した。携帯情報機器などの組み込み分野向けプロセッサでは、アプリケーションの複雑化に伴い高速化が必要となる。また携帯応用であるため低消費電力化も必要である。しかしながら、特許文献１記載の如く、分岐予測が当たりにくい条件分岐命令を検出すると、常にその分岐命令以降の命令列の実行を停止すると、プログラムの高速実行性能が低下する場合のあることが本発明者によって見出された。
【０００６】
本発明の目的は、低消費電力とプログラムの高速実行との要求に対して柔軟に対応することができるデータプロセッサを提供することにある。
【０００７】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００８】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【０００９】
〔１〕データプロセッサは、命令のフェッチ制御部（５）と、前記フェッチ制御部によりフェッチされた命令を保持する命令バッファ（１５）と、前記命令バッファに保持された命令を所定の順番にパイプラインで実行する実行部（６）とを含む。前記フェッチ制御部は、分岐命令の命令アドレスを用いて条件分岐の予測方向とその確度を示す予測情報（３３）を取得し、条件分岐命令における分岐予測側の命令のフェッチと分岐非予測側の命令のフェッチを行なうことが可能であると共に、前記予測情報に応じて選択的に分岐非予測側の命令のフェッチを抑止する。例えば、前記フェッチ制御部は、前記予測情報による分岐予測の確度が相対的に高いときに前記非予測側の命令のフェッチを抑止する。
【００１０】
条件分岐命令における分岐予測側の命令のフェッチと分岐非予測側の命令のフェッチの双方を行なうことにより、条件分岐予測がミスしても、非予測側の命令フェッチが行われているため、条件分岐予測ミス時のパイプラインにおけるストールサイクル数が低減されプログラムの高速実行に資することができる。一方、予測情報によりその条件分岐予測が高い確率でヒットすると判断される場合に非予測側の命令フェッチを抑止することができるから、プログラムの実行において、実際には必要とされない命令のフェッチ回数が抑止され、命令フェッチのためのメモリ読み出し回数を低減でき、メモリ読み出しに必要な電力の低減に資することができる。前記非予測側命令に対するフェッチの抑止は前記予測情報に応じて選択的に行うことが可能であるから、低消費電力とプログラムの高速実行との要求に対して柔軟に対応することができる。
【００１１】
〔２〕本発明の別の観点によるデータプロセッサは、命令のフェッチ制御部と、前記フェッチ制御部によりフェッチされた命令を保持する命令バッファと、前記命令バッファに保持された命令を所定の順番にパイプラインで実行する実行部とを含み、前記フェッチ制御部は、分岐命令の命令アドレスを用いて条件分岐の予測方向とその確度を示す予測情報を取得し、条件分岐命令における分岐予測側の命令のフェッチと分岐非予測側の命令のフェッチの双方を行なう第１フェッチモードと、前記分岐予測側の命令のフェッチを行なうと共に前記予測情報に応じて選択的に分岐非予測側の命令のフェッチを抑止する第２フェッチモードとの選択が可能にされる。前記フェッチ制御部は、第２フェッチモードにおいて前記予測情報による分岐予測の確度が相対的に高いときに前記非予測側の命令のフェッチを抑止する。
【００１２】
条件分岐命令において、第１フェッチモードでは、条件分岐命令において、予測側命令フェッチ及び非予測側命令フェッチを行なうため、本来必要のない命令フェッチが発生する。例えば、条件分岐命令の実行回数が２，０００回として、ほぼ一回の条件分岐あたり非予測側の命令フェッチが１回発生するとすれば、プログラム全体で２，０００回の非予測側の命令フェッチが発生する。条件分岐予測のヒット率が９０％とすれば、この内非予測側で実行されない命令のための命令フェッチ回数は、２，０００×０．９＝１，８００回である。第２フェッチモードでは、条件分岐予測が高い確率でヒットすると予測される場合、非予測側の命令フェッチを抑止して、メモリ読み出し回数を低減できる。また、条件分岐予測が低い確率でヒットすると予測される場合は、非予測側の命令フェッチも行なうため、実際に予測がはずれた場合でも、非予測側の命令フェッチが既に行なわれているため、実際の分岐方向の命令列の実行に課せられるパイプラインストールサイクル数が低減され、プログラムの高速実行が可能になる。分岐予測機構を備えるパイプラインプロセッサでは、プログラム実行時の命令フェッチ部及びメモリ部での消費電力が、全体の消費電力の１０〜３０％を占める場合もあり、第２フェッチモードでの命令フェッチ回数低減が、全体の消費電力低減に効果がある。
【００１３】
本発明の具体的な形態では、設定値に応じて前記第１フェッチモード又は第２フェッチモードを指定する制御レジスタを有する。前記制御レジスタの設定値は前記実行部による命令実行により可変である。
【００１４】
本発明の別の具体的な形態では、前記予測情報は複数ビットを有し、その値の違いによって各々異なる分岐予測及びその確度を表す。前記フェッチ制御部は、条件分岐命令の命令アドレスの一部を用いてインデックスされ、前記予測情報を複数格納する予測情報テーブル部を有する。前記フェッチ制御部は、条件分岐命令の分岐が確定したとき、その条件分岐命令を用いてインデックスされた予測情報がヒットであった場合には当該予測情報をその予測の最高確度を限度に当該確度が高くなる方向に更新し、その条件分岐命令を用いてインデックスされた予測情報がミスであった場合には当該予測情報をその予測の確度が低くなる方向に更新する。これによってダイナミックな分岐予測が可能になる。
【００１５】
このとき、前記分岐予測情報の最大値は条件分岐命令における分岐条件成立による分岐予測の確度最大を意味し、最小値は条件分岐命令における分岐条件不成立による分岐予測の確度最大を意味する。
【００１６】
〔３〕本発明の更に別の観点によるデータプロセッサは、命令のフェッチ制御部と、前記フェッチ制御部によりフェッチされた命令を保持する命令バッファと、前記命令バッファに保持された命令を所定の順番にパイプラインで実行する実行部とを含み、前記フェッチ制御部は、条件分岐命令の命令アドレスの一部を用いてインデックスされ、分岐予測情報を複数格納する予測情報テーブル部（３２Ａ）と、分岐予測に対するヒット又はミスの分岐結果をシフト入力して最新より複数の分岐結果を分岐履歴情報として保持するシフトレジスタ部（２１）とを有する。前記分岐予測情報（３３Ａ）はその値に応じて条件分岐の予測方向を示す。前記フェッチ制御部は、条件分岐命令における分岐予測側の命令のフェッチと分岐非予測側の命令のフェッチを行なうことが可能であると共に、前記シフトレジスタ部が保有する分岐履歴情報（２２）から分岐確度を判定し、分岐確度が高いときは分岐非予測側の命令のフェッチを抑止する。例えば、前記フェッチ制御部は、シフトレジスタ部が保有する分岐履歴情報の半分以上の分岐結果が予測ヒットを示しているとき、分岐予測の確度は高いと判定する。予測情報を最小の１ビットで構成することができ、大域的な分岐履歴によって非予測側命令のフェッチを選択的に抑止することができる。
【００１７】
〔４〕本発明の更に別の観点によるデータプロセッサは、命令のフェッチ制御部と、前記フェッチ制御部によりフェッチされた命令を保持する命令バッファと、前記命令バッファに保持された命令を所定の順番にパイプラインで実行する実行部とを含み、前記フェッチ制御部は、条件分岐命令の命令アドレスの一部を用いてインデックスされ、分岐予測情報を複数格納する予測情報テーブル部と、分岐予測に対するヒット又はミスの分岐結果をシフト入力して最新より複数の分岐結果を分岐履歴情報として保持するシフトレジスタ部とを有し、前記分岐予測情報はその値に応じて条件分岐の予測方向を示す。前記フェッチ制御部は、分岐命令の命令アドレスを用いて条件分岐の予測方向を示す予測情報を取得し、条件分岐命令における分岐予測側の命令のフェッチと分岐非予測側の命令のフェッチの双方を行なう第１フェッチモードと、前記分岐予測側の命令のフェッチを行なうと共に前記シフトレジスタ部より取得した分岐履歴情報が高い分岐確度を示しているときは分岐非予測側の命令のフェッチを抑止する第２フェッチモードとの選択が可能にされる。
【００１８】
本発明の具体的な形態では、設定値に応じて前記第１フェッチモード又は第２フェッチモードを指定する制御レジスタを有する。前記制御レジスタの設定値は前記実行部による命令実行により可変である。
【００１９】
〔５〕本発明の更に別の観点によるデータプロセッサは、命令のフェッチ制御部と、前記フェッチ制御部によりフェッチされた命令を保持する命令バッファと、前記命令バッファに保持された命令を所定の順番にパイプラインで実行する実行部とを含み、前記フェッチ制御部は、条件分岐命令における分岐予測側の命令をＮ１個と分岐非予測側の命令をＮ２個フェッチする第１のフェッチ機能と、条件分岐命令に対する予測確度を示す情報が高い予測確度を示しているときには、予測側の命令をＮ３個フェッチする第２のフェッチ機能を有し、Ｎ３＜Ｎ１，Ｎ２である。
【発明の効果】
【００２０】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。すなわち、低消費電力とプログラムの高速実行との要求に対して柔軟に対応することができる。
【発明を実施するための最良の形態】
【００２１】
図１にはデータプロセッサの一例が示される。データプロセッサ７は、特に制限されないが、相補型ＭＯＳ集積回路製造技術によって単結晶シリコンのような1個の半導体基板に形成される。データプロセッサ７はプロセッサコア部（ＰＣＯＲ）１を有し、このプロセッサコア部１は制御レジスタ（ＣＲＥＧ）１６、命令のフェッチ制御を行なうフェッチ制御部（ＦＣＮＴ）５、前記フェッチ制御部５によりフェッチされた命令を保持する命令バッファ（ＩＢＵＦ）１５、及び前記命令バッファ１５に保持された命令を所定の順番にパイプラインで実行するパイプライン実行部（ＰＥＸＥＣ）６などから成る中央処理装置（ＣＰＵ）を有する。前記フェッチ制御部５、制御レジスタ１６及びパイプライン実行部６は内部バス４に接続される。内部バス４には内蔵メモリとしてキャッシュメモリ（ＣＡＣＨ）２とワークＲＡＭ（ＷＲＡＭ）３が接続される。キャッシュメモリ２とワークＲＡＭ３はバスステートコントローラ（ＢＳＣ）１３を介して外部バス８、ＤＭＡＣ（ダイレクトメモリアクセスコントローラ）１４及び周辺バス５とインタフェース可能にされる。外部バス８には代表的に示された外部メモリ（ＥＸＭＥＭ）９が接続される。周辺バス５には、代表的に示された割り込みコントローラ（ＩＮＴＣ）１０、ＣＰＧ（クロックパルジェネレータ）１１及びＴＭＵ（タイマーユニット）１２が接続される。
【００２２】
フェッチ制御部５は、内部バス４を経由して、キャッシュメモリ２から命令列をフェッチする。キャッシュメモリ２がキャッシュミスのときはフェッチ対象の命令列が外部メモリ９からキャッシュメモリ２に供給されることになる。フェッチ制御部５でフェッチされた命令は命令バッファ１５に格納され、命令バッファ１５に格納された命令はパイプライン実行部６に投入され、パイプラインにより実行される。パイプライン実行部６による命令実行結果のうちの所定の結果は信号１８により命令フェッチ制御部５に反映される。例えば分岐条件成立または不成立を決定するための情報などが前記信号１８により命令フェッチ制御部５に供給される。
【００２３】
フェッチ制御部５は条件分岐命令の分岐予測を行ない、その予測に基づいたアドレスの命令をパイプラインにつめてパイプラインの無駄をなくす。そしてパイプライン実行部６は、分岐予測が確定する前に予測した分岐方向の命令実行を許すると共にその予測が外れたときに命令実行の矛盾を解消するようにした投機実行の制御を行なう。
【００２４】
ここで、データプロセッサにおけるパイプラインステージについて説明する。図２にはデータプロセッサ７のパイプラインステージが例示される。パイプラインステージは７段であり、各ステージの処理内容は以下のようになる。ステージＩ１およびステージＩ２は内部バス４を経由して命令フェッチを行なう命令フェッチステージであり、ステージＩ１でフェッチコマンドをキャッシュメモリ２に発行する。ステージＩ２ではフェッチされた命令を命令バッファ１５に格納すると共に、分岐命令を検出する。図２の例では１回の命令フェッチサイクルで最大４命令フェッチすることができ、命令Ａ，Ｂ，Ｃ，ＤがステージＩ１でフェッチされ、Ｉ２ステージで命令バッファに格納される。ステージＩＤは命令デコードステージであり、命令バッファ１５から供給された命令をデコードする。フェッチされた命令が次のサイクルで、デコードされる場合はＩ２ステージから、ＩＤステージに処理が進む。パイプラインストールなどで、フェッチされた命令がすぐにＩＤステージに進めない場合は、フェッチされた命令は、命令バッファ１５内に留まり、分岐命令の検出を続行する。この期間をプリデコードステージＰＤと呼ぶ。ステージＥ１，Ｅ２、Ｅ３は実行ステージであり、命令のデコード結果に応じて演算を行なう。ステージＷＢはライトバックステージであり、演算結果をレジスタやメモリに書き込む。前記ＩＤ、Ｅ１、Ｅ２、Ｅ３、ＷＢの各ステージはパイプライン実行部６で処理される。
【００２５】
フェッチ制御部５は、内部バス４を経由して、キャッシュメモリ２から命令列をフェッチする。フェッチ制御部５でフェッチされた命令は、命令バッファ１５に格納される。フェッチ制御部５は、Ｉ２およびＰＤステージで分岐命令を検索する。条件分岐命令を検出すると、その命令アドレスに応ずる予測情報などに基づいて条件分岐方向を予測する。フェッチ制御部５は、条件分岐命令における分岐予測側の命令のフェッチと分岐非予測側の命令のフェッチの双方を行なう第１フェッチモードと、前記分岐予測側の命令のフェッチを行なうと共に前記予測情報に応じて選択的に分岐非予測側の命令のフェッチを抑止する第２フェッチモードとの選択が可能にされる。前記第１フェッチモードか第２フェッチモードのいずれが選択されているかは前記制御レジスタ１６のフェッチモード切替ビット１７の値によって決定される。制御レジスタ１６の設定値は前記パイプライン実行部６による命令実行により可変とされる。
【００２６】
図２では、第１フェッチモードが選択されているとき、予測された分岐方向の命令フェッチ及び非予測側の命令フェッチを発行し、内部バス経由でフェッチされた命令を命令バッファ１５に格納する例が示されている。すなわち、条件分岐命令ＣをサイクルＣ２のＩ２ステージで検出したとき、サイクルＣ３のＰＤステージで条件分岐方向を予測する。条件分岐命令Ｃの分岐予測が分岐成立予測（Taken）予測であれば、分岐成立側（Taken側）の命令ストリームをサイクルＣ４でフェッチする。更にこのフェッチモードでは、非予測側となる分岐不成立（NotTaken側）の命令ストリームもサイクルＣ５でフェッチし、命令バッファに格納する。サイクルＣ３以前の非予測側命令フェッチは図示しないサイクルＣ１以前にフェッチされた命令に対する予測に基づいている。
【００２７】
図３では、第２フェッチモードが選択されているとき、分岐予測の確度が高い場合には非予測側の命令ストリームのフェッチを抑止する例が示される。この場合、非予測側の命令ストリームは分岐不成立（Not Taken）側であり、Not Taken側の命令ストリームのフェッチが抑止されている。要するにサイクルＣ３のＰＤステージにおける条件分岐方向の予測結果に対して、サイクルＣ４、Ｃ５では予測側の命令列がフェッチされ、非予測側の命令列に対するフェッチは抑止されている。
【００２８】
図４には前記フェッチモードに従った命令フェッチ制御のために構成が例示される。ここでフェッチすべき命令アドレスはパイプライン実行部６で実行される実行命令アドレスに対して複数命令先行するプリフェッチアドレスを生成するフェッチアドレス生成回路２０が生成する。生成されたフェッチアドレスはフェッチアドレスバッファ（ＦＡＢＵＦ）３８が保有し、そのフェッチアドレスＦＡＤＲが内部バス４に出力され、キャッシュメモリ２から命令ＩＮＳＴがフェッチされる。命令フェッチは内部バス４の空きサイクルを利用して行なわれる。フェッチアドレス生成回路２０は命令バッファ１５にフェッチされた命令の中から条件分岐命令を検索し、条件分岐命令を検索したときは当該条件分岐命令の命令アドレスを条件分岐命令アドレスバッファ３１に保持する。条件分岐命令アドレスバッファ３１に保持された条件分岐命令アドレスは分岐予測テーブル（分岐予測情報テーブル部）３２に対する連想アクセスに用いられる。分岐予測テーブル３２は命令アドレスの下位側複数ビットのインデックスアドレスによってインデックスされるテーブルエントリを複数有し、インデックスされたテーブルエントリは当該命令アドレスの下位側複数ビットのオフセットアドレスによって選択可能な複数の分岐予測情報３３を保有する。分岐予測テーブル３２が保有する分岐予測情報は命令アドレスに相関を有する。ここでは分岐予測情報３３は複数ビットを有し、その値によって予測方向とその予測の確度を表す。分岐予測情報は対応する条件分岐命令の分岐予測に対する実際の分岐状態を反映する方向に更新されるようになっている。分岐予測情報の更新についてその詳細は後述する。分岐予測テーブル３２から読み出された分岐予測情報３３はフェッチ方向判定部３４及びフェッチ抑止部３６に供給される。フェッチ方向判定部３４は分岐予測情報に従って命令フェッチの予測方向を示す予測フェッチ信号３５を生成する。例えば、予測フェッチ信号３５は予測方向が分岐成立（taken）側の場合にはハイレベル、予測方向が分岐不成立(not taken)側の場合にはローレベルとされる。フェッチ抑止部３６はフェッチモード切替ビット１７の値と分岐予測情報３３とを入力し、第１フェッチモードにおいては非予測側フェッチ抑止信号３７をネゲートし（非活性化レベルとし）、非予測側命令のフェッチを許容する。第２フェッチモードにおいては分岐予測情報３３より予測方向の確度を判定し、その確度が高いと判定したときは非予測側フェッチ抑止信号をアサートし（活性化レベルとし）、非予測側命令フェッチの抑止を指示する。第２フェッチモードにおいて分岐予測情報３３より判定された予測方向の確度が低いと判定したときは非予測側フェッチ抑止信号をネゲートし、非予測側命令フェッチの許容を指示する。前記予測フェッチ信号３５及び非予測側フェッチ抑止信号３７が与えられるフェッチアドレス生成回路２０は、非予測側命令フェッチの抑止が指示されていなければ、フェッチアドレスバッファ３８にその条件分岐命令の予測側アドレスと非予測側アドレスをセットして、内部バスの空きサイクルなどを利用して、予測側の命令と非予測側の命令の双方をフェッチしていく。一方、非予測側命令フェッチの抑止が��示されているときは、フェッチアドレス生成回路２０は、フェッチアドレスバッファ３８にその条件分岐命令の予測側アドレスをセットして、内部バスの空きサイクルなどを利用して予測側の命令をフェッチし、非予測側命令のフェッチは行なわない。その条件分岐命令の条件分岐方向の確定情報はパイプライン実行部から信号１８によりフェッチ制御部４に返され、フェッチ制御部４はその予測の当否に従って対応する予測情報３３の確度または予測方向を更新する。信号１８は条件分岐命令のE３ステージで生成され、この情報により、確定した条件分岐命令のアドレスに対応する分岐予測テーブルの予情報が更新される。
【００２９】
図５には前記分岐予測情報を活用した命令フェッチフローが例示される。パイプラインステージのＩ２及びＰＤステージでのフローは、Ｓ１、Ｓ２，Ｓ３，Ｓ４のステップで構成され、パイプラインステージのＩ１ステージは、Ｓ５、Ｓ６，Ｓ７のステップで構成される。ステップＳ１では、命令バッファ１５を検索して条件分岐命令を検出する。Ｓ２では、検出された分岐命令のアドレスから分岐予測テーブル３２を引き、当該条件分岐命令の分岐予測方向および予測の確度を取得する。Ｓ３では、フェッチモード切替ビット１７により第２フェッチモードが指示されているかを判定する。第２フェッチモードが指示されているとき、Ｓ４において、当該条件分岐の予測確度が高いかを判定する。Ｓ４で当該条件分岐予測の予測確度が高いと判定された場合、Ｓ６で、予測側の命令をフェッチし、以降の空きサイクルでの非予測側の命令フェッチを抑止する。Ｓ４で当該条件分岐予測の予測確度が低いと判定された場合、または、Ｓ３でフェッチモードが第１フェッチモードと判定された場合には、Ｓ５において予測側の命令をフェッチし、以降の空きサイクルでの非予測側の命令フェッチを抑止しない。図５のフローでは、パイプラインステージのＩ２ステージでのフローは、Ｓ１、Ｓ２，Ｓ３，Ｓ４のステップで構成され、当該ステージで条件分岐命令が検出された場合、当該条件分岐命令の分岐先または非分岐先命令のＩ１ステージが、Ｓ５、Ｓ６，Ｓ７のステップで構成される。
【００３０】
ここで、前記フェッチ制御部４は第1フェッチモードにおいて条件分岐命令における分岐予測側の命令をＮ１個と分岐非予測側の命令をＮ２個フェッチするとき、第２フェッチモードにおいて条件分岐命令に対する予測確度を示す情報が高い予測確度を示しているときには、予測側の命令をＮ３個フェッチする。このとき、Ｎ３＜Ｎ１，Ｎ２に関係を満足することが望ましい。無駄な命令フェッチを省いて低消費電力を企図する観点よりすれば、確度が高い場合であっても非予測側命令を併せてフェッチする場合よりも多い数の予測側の命令をフェッチしたのでは、低消費電力効果を十分に発揮できなくなる虞があるからである。
【００３１】
図６には分岐予測情報の意義と予測確度の算出方法が示される。分岐予測テーブルに格納される分岐予測情報は３３は、２ビットの予測ビットにより構成されている。たとえば、分岐予測情報３３のエントリ数は２５６個などとされる。分岐予測情報３３の状態は対応する条件分岐命令の過去の分岐成立（Taken）、分岐不成立（Not Taken）に対する予測の履歴を反映した値を保持する。各分岐予測情報の予測状態は４つある。状態０は分岐不成立（NotTaken）強予測であり、条件分岐の方向としては、NotTaken方向の確度が高い状態を示す。状態１は分岐不成立（NotTaken）弱予測であり、条件分岐の方向としては、NotTaken方向の予測であるが、その確度は低い状態を示す。状態２は分岐成立（Taken）弱予測であり、条件分岐の方向としては、Taken方向の予測であるが、その確度は低い状態を示す。状態３は分岐成立（Taken）強予測であり、条件分岐の方向としては、Taken方向の確度が高い状態を示す。２ビットの予測情報３３の遷移は、当該条件分岐命令の確定した分岐方向がTakenであれば、１加算し、ビット最大値に到達すれば、最大値に飽和させる。また当該条件分岐命令の確定した分岐方向がNotTakenであれば、１減算し、ビット最小値に到達すれば、最小値に飽和させる。本予測情報３３の更新タイミングは、現在予測されている条件分岐命令の方向が確定する時点であり、この条件分岐方向の確定情報はパイプライン実行部から信号１８により反映される。この情報は、条件分岐命令のE３ステージで生成される。
【００３２】
図７には制御レジスタ１６のフェッチモード切り替えビット１７が例示される。フェッチモード切替ビット１７はＣＰＵの制御レジスタ１６における所定のビットフィールドに定義され、本ビットが論理値０のとき、非予測側の命令フェッチを抑止しない第１フェッチモードを指定し、本ビットが論理値１のとき、非予測側の命令フェッチを選択的に抑止する第２フェッチモードを指定する。この制御レジスタ１６のフェッチモード切替ビット１７の値により、命令フェッチ制御部４は、条件分岐命令の分岐先および非分岐先命令のフェッチ動作を変えることが可能になる。
【００３３】
図８には命令フェッチモードを制御する命令列を例示する。命令列８１および命令列８２に示すＣＰＵ命令により、プログラムから命令フェッチモードの切替が可能となる。第１フェッチモードの設定命令列８２では、フェッチモード切替ビット１７を保持する制御レジスタ１６のアドレスをロードし、制御レジスタの値をロードし、当該モード値を第１フェッチモードの値（論理値０）に変更した値を制御ビット１７に書き込むことで、第１フェッチモードを設定する。第２フェッチモードの設定命令列８１では、フェッチモード切替ビット１７を保持する制御レジスタ１６のアドレスをロードし、制御レジスタの値をロードし、当該モード値を第２フェッチモードの値（論理値１）に変更した値を制御ビット１７に書き込むことで、第２フェッチモードを設定する。要するに、命令で制御レジスタ１６の制御ビット１７を書き換えることにより命令フェッチモードを動的に切り替え可能である。
【００３４】
図９には図８のような命令フェッチモードの制御コードの生成方法が示される。ここでは、低消費電力で動作させたいプログラムの実行に合わせて第２フェッチモードを選択できるようにする。ステップＴ１にて、対象となるプログラムをコンパイルする。Ｔ２にてＴ１で生成されたプログラムをシミュレータで実行し、ソースコード上の関数単位での経過サイクル数などの実行プロファイルを取得する。Ｔ３にて、実行プロファイルを解析し、実行サイクル数の大きな関数を選択する。Ｔ４にて、当該関数の分岐予測ヒット率が高いかを判断する。もし、当該関数の分岐予測ヒット率が高ければ、Ｔ５にて、ソースファイルの書き換えを行なう。これは、当該関数での命令フェッチモードを低消費電力向けの第２フェッチモードにする命令コードを当該関数の開始ポイントに挿入を指示するプラグマ指示文の挿入で実現される。Ｔ４にて当該関数の分岐予測ヒット率が低ければ、第１フェッチモードのコードを挿入するが、運用上、第１フェッチモードがデフォルトの設定とすれば、当該関数のソースコードでは書き換え不要となる。Ｔ６にて、プログラムを再コンパイルすることにより、プログラムの低消費電力向けコンパイルが完了する。この方法により、ソフトウエアプログラマがフェッチモードの切替を制御する命令列をソフトウエアに組み込むことが可能となる。
【００３５】
図１０には前記ソースコード上での命令フェッチモード設定プラグマ指示文の例を示す。プラグマとはコンパイラに特定の情報を渡すために使用するコンパイラ指令であり、これによってコンパイル内容を詳細に制御できる。図１０のコード１００において、関数“func0 （  ）”を命令の第２フェッチモードでコンパイルする場合は、プラグマ指示文“#pragma fetch_mode_2 （func0）”をソースコードに記述する。当該プラグマ指示文を認識するコンパイラはコード１０１に示す命令列を生成する。
【００３６】
以上説明した分岐予測を用いたフェッチ制御部５によれば、条件分岐命令の実行において、予測側の命令フェッチおよび非予測側の命令フェッチを行なう第１フェッチモードでは、条件分岐予測がミスしても、非予測側の命令フェッチが行われているため、条件分岐予測ミス時のパイプラインにおけるストールサイクル数が低減されプログラムの高速実行に寄与する。条件分岐命令の実行において、条件分岐方向を示す予測ビットの状態に応じて、非予測側の命令フェッチをする、しないを決定して命令フェッチ動作を行なえる第２フェッチモードでは、条件分岐方向を示す予測ビットの状態に応じて、その条件分岐予測が高い確率でヒットすると判断される場合に、非予測側の命令フェッチを抑止するため、プログラムの実行において、実際には必要とされない命令のフェッチ回数が抑止されメモリ読み出し回数が低減され、メモリ読み出しに必要な電力が低減される。第２のフェッチモードでは、条件分岐予測が高い確率でヒットすると予測される場合、非予測側の命令フェッチを抑止して、メモリ読み出し回数を低減でき、消費電力低減に効果がある。また、条件分岐予測が低い確率でヒットすると予測される場合は、非予測側の命令フェッチも行なうため、実際に予測がはずれた場合でも、非予測側の命令フェッチがすでに行なわれているので実際の分岐方向の命令列の実行に課せられるパイプラインストール サイクル数が低減され、高速実行が可能である。フェッチモードは切り替えビット１７により可変可能であり、第２フェッチモードにおいて前記非予測側命令に対するフェッチの抑止は前記予測情報３３に応じて選択的に行うことが可能であるから、低消費電力とプログラムの高速実行との要求に対して柔軟に対応することができる。
【００３７】
図１１にはフェッチ制御部４の別の構成が示される。図４との相違点は、予測情報３３Ａのビット数を１ビットにして分岐予測テーブル３２Ａのサイズを小さくし或いはエントリ数を増加し、また、分岐予測に対す確度を指標するために分岐予測に対するヒット又はミスの分岐結果をシフト入力して最新より複数の分岐結果を分岐履歴情報２２として保持するシフトレジスタ部２１を採用したことである。前記分岐予測情報３３Ａはその値に応じて条件分岐の予測方向を示す。論理値０は分岐不成立（not taken）予測、論理値1は分岐成立(taken)予測を意味する。パイプラインステージＩ２において、フェッチアドレス生成回路２０は条件分岐命令を検索する。条件分岐命令のアドレスはバッファ３１に格納され、その条件分岐命令のTaken側アドレスおよびNotTaken側アドレスは条件分岐命令のアドレスと対応付けられてフェッチアドレスバッファ３８に格納される。条件分岐命令の命令フェッチアドレスの一部を用いて分岐予測テーブル３２Aをアクセスする。分岐予測テーブル３２Aは、前述の如く命令アドレスと相関を有して予測情報を保持する連想メモリとされる。フェッチ方向判定部３４Ａは分岐予測テーブル３２Ａから出力された予測情報３３Ａを入力し、その論理値に応じて予測フェッチ信号４５を生成する。また、フェッチ抑止部３６Ａは、シフトレジスタ部２１から分岐ヒットの大域的な履歴を表す分岐履歴情報２２を入力し、分岐予測確度を過去の分岐履歴から判定し、非予測側の命令フェッチ抑止信号３７を生成する。条件分岐方向の確定情報はパイプライン実行部から信号１８により反映される。この情報は、条件分岐命令のE３ステージで生成される。この情報により、確定した条件分岐命令のアドレスに対応する分岐予測情報テーブル３２Ａが更新される。また、信号１８の情報によりシフトレジスタ部２１の分岐履歴情報２２が1ビットシフト入力されて更新される。
【００３８】
図１２にはシフトレジスタ部２１が保有する分岐履歴情報２２とそれによる分岐予測確度の判定動作を示す。例えば分岐履歴情報は４ビットから構成されており、現在の条件分岐命令より過去の予測成功を論理値１で表し、予測失敗を論理値０で表すビットを４つ保持する。図の右側から左側ビットに行くほど過去の情報を示し、各条件分岐命令の方向が確定するパイプラインステージで、確定した予測成功・失敗を示すビットを左側にシフトインする。条件分岐予測確度は、このシフトレジスタ部２１が保有する分岐履歴情報２２の状態により判定する。例えば、過去４回の予測のうち、３回成功していたら、すなわち、論理値１のビットが３つ以上あったら、現在の条件分岐予測の確度は高いと判定する。このシフトレジスタ２２の更新タイミングは、現在予測されている条件分岐命令の方向が確定する時点であり、条件分岐命令のE３ステージで生成される。また、過去４回の予測のうち、予測成功が３回未満なら、すなわち、論理値１がたつビットが３個未満なら、現在の条件分岐予測の確度は低いと判定する。一般に、シフトレジスタ２２のビット数はＮビットとし、確度判定の閾値は論理値１がたつビット数をＭビットとし、それ以上で現在の条件分岐予測の確度が高いと判定し、それ未満で当該確度が低いと判定することによって実現することができる。第２フェッチモードでは前述と同様に、予測確度が高い場合には非予測方向の命令フェッチを抑止し、予測方向の命令フェッチを行なう。予測角度が低い場合には予測方向及び非予測方向双方の命令フェッチを行なう。
【００３９】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００４０】
例えば、分岐予測情報のビット数は上記１ビット又は２ビットに限定されない。分岐履歴情報も４ビットに限定されない。パイプライン段数、１回の命令フェッチでフェッチ可能な命令数も適宜変更可能である。更にデータプロセッサが保有する回路モジュールは図１に限定されず、例えばプロセッサコアに浮動小数点演算ユニットを含んだり、周辺回路バスを持たなかったり、別の周辺モジュールを備えたり、といった種々の変形が可能である。データプロセッサは汎用のマイクロプロセッサだけでなく、システムオンチップの特定制御用とに特化した半導体集積回路であってもよい。
【図面の簡単な説明】
【００４１】
【図１】データプロセッサの一例を示すブロック図である。
【図２】第１フェッチモードが選択されているとき、予測された分岐方向の命令フェッチ及び非予測側の命令フェッチを発行し、内部バス経由でフェッチされた命令を命令バッファ１５に格納するときのパイプラインステージを例示する動作説明図である。
【図３】第２フェッチモードが選択されているとき、分岐予測の確度が高い場合には非予測側の命令ストリームのフェッチを抑止するときのパイプラインステージを例示する動作説明図である。
【図４】フェッチモードに従った命令フェッチ制御のための構成を例示するブロック図である。
【図５】分岐予測情報を活用した命令フェッチフローを例示するフローチャートである。
【図６】分岐予測情報の意義と予測確度の算出方法を例示する説明図である。
【図７】フェッチモー切り替えビットを有する制御レジスタのフォーマット図である。
【図８】命令フェッチモードを制御する命令列を例示する説明図である。
【図９】命令フェッチモードの制御コードの生成方法を示すフローチャートである。
【図１０】ソースコード上での命令フェッチモード設定プラグマ指示文を例示する説明図である。
【図１１】フェッチ制御部の別の構成を例示するブロック図である。
【図１２】シフトレジスタ部が保有する分岐履歴情報とそれによる分岐予測確度の判定動作を示す説明図である。
【符号の説明】
【００４２】
１  プロセッサコア
２  キャッシュメモリ
４  内部バス
５  フェッチ制御部
６  パイプライン実行部
７  データプロセッサ
１３  バスステートコントローラ
１５  命令バッファ
１６  制御レジスタ
１７  フェッチモード切替ビット
２０  フェッチアドレス生成回路
３１  条件分岐命令アドレスバッファ
３２，３２Ａ  分岐予測テーブル（予測情報テーブル）
３３，３３Ａ  分岐予測情報
３４，３４Ａ  フェッチ方向判定部
３５  予測フェッチ信号
３６，３６Ａ  フェッチ抑止部
３７  非予測側フェッチ抑止信号
３８  フェッチアドレスバッファ
【図１】
2006048258.tif 000003
【図２】
2006048258.tif 000004
【図３】
2006048258.tif 000005
【図４】
2006048258.tif 000006
【図５】
2006048258.tif 000007
【図６】
2006048258.tif 000008
【図７】
2006048258.tif 000009
【図８】
2006048258.tif 000010
【図９】
2006048258.tif 000011
【図１０】
2006048258.tif 000012
【図１１】
2006048258.tif 000013
【図１２】
2006048258.tif 000014