(57)【要約】【課題】分岐履歴テーブルを用いた動的分岐予測を行う半導体装置の性能を維持しつつ、消費電力を抑制する。【解決手段】条件分岐命令を含む命令のフェッチ及び実行を処理する命令処理部は、「分岐する」と「分岐しない」のいずれか一方を示す分岐予測方向に固定することを指示する固定命令を実行可能とする。固定命令を実行した後の条件分岐命令に対しては、命令処理部は、分岐履歴テーブルＢＨＴを参照せずに、固定命令が指示する分岐予測方向に分岐予測をする（Ｓ１２０〜Ｓ１２２）。【選択図】図５
2013250593.tif 000002
【特許請求の範囲】
【請求項１】
命令のフェッチと実行を含む処理を行い、条件分岐命令の実行に際して分岐予測を行う命令処理部と、
条件分岐命令の実行の結果、分岐したか否かの履歴を格納するためのものであり、前記命令処理部により更新される分岐履歴テーブルとを備え、
前記命令処理部は、
「分岐する」と「分岐しない」のいずれか一方を示す分岐予測方向に固定することを指示する固定命令と、前記固定命令と対を成し、該固定命令が指示する前記分岐予測方向の固定を解除する固定解除命令とを実行することを可能とし、
条件分岐命令に対して、前記分岐履歴テーブルに格納された前記履歴を参照して分岐予測を行う動的分岐を行い、
前記固定命令を実行した後では、条件分岐命令に対して、前記分岐履歴テーブルを参照せずに、前記固定命令が指示する分岐予測方向に分岐予測をする固定予測を行う、
半導体装置。
【請求項２】
前記命令実行処理部は、
前記固定命令を実行した後は、前記条件分岐命令に対して前記固定予測を行う際には、その条件分岐命令の実行結果に基づいた前記分岐履歴テーブルの更新をしない、請求項１に記載の半導体装置。
【請求項３】
前記命令処理部は、
前記固定命令が指示する前記分岐予測の方向の固定を解除する固定を解除する固定解除命令を実行することを可能とし、
前記固定解除命令を実行した後は、条件分岐命令に対して、前記分岐履歴テーブルに格納された前記履歴を参照して分岐予測をする動的予測を行う共に前記条件分岐命令の実行結果に基づいて前記分岐履歴テーブルを更新する、請求項１に記載の半導体装置。
【請求項４】
命令のフェッチと実行を含む処理を行い、条件分岐命令の実行に際して分岐予測を行う命令処理部と、
条件分岐命令の実行の結果、分岐したか否かの履歴を格納するためのものであり、前記命令処理部により更新される分岐履歴テーブルとを備え、
前記命令処理部は、
「分岐する」と「分岐しない」のいずれか一方を示す分岐予測方向に固定することを示す固定指示が含まれる条件分岐命令である固定指示付き分岐命令を実行することを可能とし、
前記固定指示付き分岐命令に対して、前記分岐履歴テーブルを参照せずに、前記固定指示が示す分岐予測方向に分岐予測をする固定予測を行い、
前記固定指示が含まれない条件分岐命令に対して、前記分岐履歴テーブルに格納された前記履歴を参照して分岐予測をする動的予測を行うと共に、前記条件分岐命令の実行結果に基づいて前記分岐履歴テーブルを更新する、
半導体装置。
【請求項５】
前記命令実行処理部は、
前記固定命令を実行した後は、前記条件分岐命令に対して前記固定予測を行う際には、前記分岐履歴テーブルの更新をしない、請求項４に記載の半導体装置。
【請求項６】
命令のフェッチと実行を含む処理を行い、条件分岐命令の実行に際して分岐予測を行う命令処理部と、
条件分岐命令の実行の結果、分岐したか否かの履歴を格納するためのものであり、前記命令処理部により更新される分岐履歴テーブルとを備え、
前記命令処理部は、
少なくともカーネルモードとユーザモードを含む複数の動作モードを有し、
各前記動作モードに対して、動的予測の設定、または、「分岐する」と「分岐しない」のいずれか一方を示す分岐予測方向を含む固定予測の設定が可能であり、
前記動的予測の設定がされている動作モードのときに、条件分岐命令に対して、前記分岐履歴テーブルに格納された前記履歴を参照して分岐予測をすると共に、前記条件分岐命令の実行結果に基づいて前記分岐履歴テーブルを更新し、
前記固定予測の設定がされている動作モードのときに、条件分岐命令に対して、前記分岐履歴テーブルを参照せずに、該固定予測の設定に含まれる前記分岐予測方向に分岐予測をする一方、前記分岐履歴テーブルの更新をしない、
半導体装置。
【請求項７】
前記カーネルモードに対して、前記固定予測の設定がされており、
前記ユーザモードに対して、前記動的予測の設定がされている、
請求項６に記載の半導体装置。
【請求項８】
前記命令処理部は、
前記複数の動作モード間の切替えに伴って発生するコンテキストスイッチに応じて、前記動的予測と前記固定予測の切替えをする、
請求項６に記載の半導体装置。
【請求項９】
「分岐する」と「分岐しない」のいずれか一方の分岐予測方向に固定する固定予測と、動的予測とのいずれか一方の設定がなされている複数のエリアを有し、プログラムの実行領域を成すメモリと、
命令のフェッチと実行を含む処理を行い、条件分岐命令の実行に際して分岐予測を行う命令処理部と、
条件分岐命令の実行の結果、分岐したか否かの履歴を格納するためのものであり、前記命令処理部により更新される分岐履歴テーブルとを備え、
前記命令処理部は、
前記動的予測の設定がなされているエリアを実行領域とするプログラムの条件分岐命令に対して、前記分岐履歴テーブルに格納された前記履歴を参照して分岐予測をすると共に、前記条件分岐命令の実行結果に基づいて前記分岐履歴テーブルを更新し、
前記固定予測の設定がなされているエリアを実行領域とするプログラムの条件分岐命令に対して、前記分岐履歴テーブルを参照せずに、該エリアに対して設定された分岐予測方向に分岐予測をする一方、前記分岐履歴テーブルの更新をしない、
半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は半導体装置に関し、例えば分岐予測を行うプロセッサに関する。
【背景技術】
【０００２】
パイプライン処理プロセッサにおいて、パイプライン処理の効果を可能な限り維持し、性能を高めるために、プログラム実行の流れの中で条件分岐命令が分岐するかしないか（Ｔａｋｅｎ  ｏｒ  Ｎｏｔ−Ｔａｋｅｎ）の予測、所謂「分岐予測」が行われている（特許文献１〜５）。
【０００３】
分岐予測の手法は様々ある。例えば、特許文献２の［０００５］段落に開示されたように、動的分岐予測手法の１つとして、分岐履歴テーブル（ＢＨＴ：Ｂｒａｎｃｈ  Ｈｉｓｔｏｒｙ  Ｔａｂｌｅ）を用いる技術が知られている。
【０００４】
該技術は、条件分岐命令の実行に際して、分岐履歴テーブルに格納された履歴を参照して分岐予測を行うと共に、該条件分岐命令の実行結果に基づいて分岐履歴テーブルを更新することにより学習を行う。
【０００５】
また、既存のプロセッサの中では、上記機能が実装されていながら、制御レジスタにより該機能を無効にできるものがある。このプロセッサは、該機能が有効にされているときには、分岐履歴テーブルを用いた動的分岐予測を行い、該機能が無効にされているときには、全ての条件分岐命令に対して、Ｎｏｔ−Ｔａｋｅｎ（分岐しない）との予測を行う。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−０７９８４１号公報
【特許文献２】特開２００９−０４８６３３号公報
【特許文献３】特開２００７−０５８８７５号公報
【特許文献４】特開２００１−１４２７０５号公報
【特許文献５】特開平０８−２４９１８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
昨今において、プロセッサを備えた半導体装置は、高機能化と多機能化の一図を辿っており、必然的に消費電力も多くなる。このような背景において、機能性を維持しながらいかに消費電力を削減するかについて、半導体装置の開発者はしのぎを削っている。
【０００８】
分岐履歴テーブルを用いて動的分岐予測を行うプロセッサは、条件分岐命令を実行する度に、分岐履歴テーブルを参照するため、分岐履歴テーブルへのリードが必ず発生する。また、条件分岐命令の実行結果に基づいた分岐履歴テーブルの更新時には、分岐履歴テーブルへのライトも発生する。例えば、１ビット学習の場合には、分岐予測が失敗であるときにのみ分岐履歴テーブルへのライトが発生し、２ビット学習の場合には、分岐予測の成功と失敗のいずれのときにも分岐履歴テーブルへのライトが発生する。
【０００９】
分岐履歴テーブルは、メモリにより構成される。条件分岐命令の度に分岐履歴テーブルであるメモリへのアクセスはプロセッサの消費電力増加の１つの要因となる。
【００１０】
一方、分岐履歴テーブルを用いた動的分岐予測の機能を無効にしてしまうと、常にＮｏｔ−Ｔａｋｅｎの分岐予測が行われるため、分岐履歴テーブルへのアクセスを無くすことができるが、プロセッサの性能が低下する。
【００１１】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１２】
一実施の形態による半導体装置は、命令のフェッチと実行を含む処理を行い、条件分岐命令の実行に際して分岐予測を行う命令処理部と、条件分岐命令の実行の結果、分岐したか否かの履歴を格納するためのものであり、前記命令処理部により更新される分岐履歴テーブルとを備える。
【００１３】
命令処理部は、「分岐する」と「分岐しない」のいずれか一方を示す分岐予測方向に固定することを指示する固定命令を実行することを可能とする。
【００１４】
命令実行部は、条件分岐命令に対して、分岐履歴テーブルに格納された前記履歴を参照して分岐予測を行う動的分岐を行う。命令処理部は、固定命令を実行した後では、条件分岐命令に対して、前記分岐履歴テーブルを参照せずに、前記固定命令が指示する分岐予測方向に分岐予測をする固定予測を行う。
【００１５】
望ましくは、命令処理部は、条件分岐命令に対して固定予測を行う際には、その条件分岐命令の実行結果に基づいて分岐履歴テーブルを更新しないようにしてもよい。
【００１６】
さらに望ましくは、命令処理部は、固定命令が指示する分岐予測の方向の固定を解除する固定を解除する固定解除命令を実行することを可能としてもよい。固定解除命令を実行した後は、条件分岐命令に対して、命令処理部は分岐履歴テーブルに格納された履歴を参照して分岐予測をする動的予測を行うと共にこの条件分岐命令の実行結果に基づいて前記分岐履歴テーブルを更新する。
【００１７】
別の実施の形態によれば、命令処理部は、「分岐する」と「分岐しない」のいずれか一方を示す分岐予測方向に固定することを示す固定指示が含まれる条件分岐命令である固定指示付き分岐命令を実行することを可能とする。
【００１８】
命令処理部は、固定指示付き分岐命令に対して、分岐履歴テーブルを参照せずに、固定指示が示す分岐予測方向に分岐予測をする固定予測を行う。
【００１９】
命令処理部は、さらに固定指示が含まれない条件分岐命令に対して、分岐履歴テーブルに格納された前記履歴を参照して分岐予測をする動的予測を行うと共に、前記条件分岐命令の実行結果に基づいて前記分岐履歴テーブルを更新する。
【００２０】
なお、上記の又は後述の各実施の形態の装置を方法やシステムに置き換えて表現したもの、これらの装置または該装置の一部をコンピュータに実行せしめるプログラムなども、実施の形態として有効である。
【発明の効果】
【００２１】
上述した実施の形態によれば、分岐履歴テーブルを用いた動的分岐予測を行う半導体装置の性能を維持しつつ、消費電力を抑制することができる。
【図面の簡単な説明】
【００２２】
【図１】第１〜第３の技術を説明するための半導体装置を示す図である。
【図２】第１の技術を適用した場合、図１に示す半導体装置における命令処理部が対応する固定命令の例を示す図である。
【図３】第１の技術を適用した場合、図１に示す半導体装置における命令処理部が対応する固定解除命令の例を示す図である。
【図４】第１の技術を適用した場合のプログラムと従来のプログラムの比較例を示す図である。
【図５】第１の技術を適用した場合、図１に示す半導体装置における命令処理部が行う処理を示すフローチャートの例を示す図である。
【図６】第２の技術を適用した場合、図１に示す半導体装置における命令処理部が対応する固定指示付き分岐命令の例を示す図である。
【図７】第１の技術を適用した場合のプログラム例を示す図である。
【図８】第２の技術を適用した場合、図１に示す半導体装置における命令処理部が行う処理を示すフローチャートの例を示す図である。
【図９】第３の技術を適用した場合、図１に示す半導体装置における命令処理部が行う処理を示すフローチャートの例を示す図である。
【図１０】第４の技術を説明するための半導体装置を示す図である。
【図１１】図１０に示す半導体装置における命令処理部が行う処理を示すフローチャートの例を示す図である。
【図１２】第１の実施の形態にかかる半導体装置を示す図である。
【図１３】図１２に示す半導体装置におけるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を示す図である。
【図１４】第３の実施の形態の半導体装置におけるＣＰＵを示す図である。
【図１５】第４の実施の形態の半導体装置におけるＣＰＵを示す図である。
【図１６】図１５に示すＣＰＵにおける領域設定レジスタと、プログラムの実行領域との対応関係を示す図である。
【発明を実施するための形態】
【００２３】
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、ＣＰＵ、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００２４】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（ｔａｎｇｉｂｌｅ  ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００２５】
具体的な実施の形態の前に、実施の形態に適用される４つの技術を説明する。
まず、図１に示す半導体装置１０を参照して、第１〜３の技術を説明する。
【００２６】
半導体装置１０は、単一の半導体チップにより構成されるマイクロコンピュータを有する。半導体装置１０は例えば、この半導体チップと電気的に接続される外部端子を有し、半導体チップを内部に樹脂で封止して外部端子を露出される半導体パッケージの形態をなす。マイクロコンピュータは、命令処理部１２と分岐履歴テーブル１４を備え、パイプライン処理によりプログラムを構成する命令列を実行する。
【００２７】
命令処理部１２は、命令のフェッチと実行を含む処理を行い、条件分岐命令の実行に際して分岐予測を行う。
【００２８】
分岐履歴テーブル１４は、条件分岐命令の実行の結果、分岐したか否かの履歴を格納するためのものであり、命令処理部１２により更新される。
【００２９】
＜第１の技術＞
該第１の技術では、命令処理部１２は、固定命令と固定解除命令とを実行することを可能とする構成をなす。
固定命令は、分岐予測に際して、分岐予測方向を「分岐する」（Ｔａｋｅｎ）と「分岐しない」（Ｎｏｔ−Ｔａｋｅｎ）のいずれか一方に固定することを指示する命令である。
【００３０】
命令処理部１２は、条件分岐命令に対して、前記分岐履歴テーブルに格納された前記履歴を参照して分岐予測を行う動的分岐を行う。動的予測とは、分岐履歴テーブル１４に格納された履歴を参照して分岐予測をすることを意味する。
【００３１】
命令処理部１２は、固定命令を実行した後では、条件分岐命令に対し固定予測を行う。固定予測とは、条件分岐命令に対して、分岐履歴テーブル１４を参照せずに、該固定命令が指示する分岐予測方向に分岐予測をすることを意味する。また、命令処理部１２は、固定予測の対象である条件分岐命令の実行後に、分岐履歴テーブル１４の更新をしない。
【００３２】
命令処理部１２は、固定解除命令を実行した後では、条件分岐命令に対し動的予測を行うと共に、該条件分岐命令の実行結果に基づいて分岐履歴テーブル１４を更新する。
【００３３】
動的予測を行った条件分岐命令の実行後における分岐履歴テーブル１４の更新について、分岐履歴テーブルを用いて動的分岐予測を行う従来のプロセッサのように、命令処理部１２は、例えば、１ビット学習の場合には、分岐予測がミスであるときにのみ分岐履歴テーブル１４を更新し、２ビット学習の場合には、分岐予測が正しいときとミスであるときのいずれのときにも分岐履歴テーブル１４を更新する。
【００３４】
図２は、固定命令のフォーマットの例を示す。この例は、命令長を１６ビットとした場合のものである。図示のように、固定命令は、上部に示す固定命令ｂｐｔｆと、下部に示す固定命令ｂｐｎｆの２種類がある。
【００３５】
固定命令ｂｐｔｆは、上位１４ビットの「１０１０１１１１１１１１００」が、該命令が固定命令または固定解除命令であることを示し、下位２ビットの「００」が、該命令が分岐予測方向を「分岐する」（Ｔａｋｅｎ）に固定することを指示する固定命令であることを示す。
【００３６】
また、固定命令ｂｐｎｆは、上位１４ビットの「１０１０１１１１１１１１００」が、該命令が固定命令または固定解除命令であることを示し、下位２ビットの「０１」が、該命令が分岐予測方向を「分岐しない」（Ｎｏｔ−Ｔａｋｅｎ）に固定することを指示する固定命令であることを示す。
【００３７】
図３は、図２に示す固定命令に対応する固定解除命令の例を示す。図示のように、固定解除命令ｂｐｒは、上位１４ビットの「１０１０１１１１１１１１００」が、該命令が固定命令または固定解除命令であることを示し、下位２ビットの「１０」が、該命令が、直前にあった固定命令に対応する固定解除命令であることを示す。
【００３８】
命令処理部１２は、固定命令を実行した後、固定解除命令を実行するまでは、条件分岐命令に対しては常に固定予測を行う。固定解除命令を実行することによって命令処理部１２は固定予測による条件分岐を解除し、固定解除命令の後に実行される条件分岐命令に対して動的予測を行う。
【００３９】
図４は、ループ処理を実行させる従来のプログラム（図４左）と、該ループ処理を、固定命令と固定解除命令を含むプログラムで実行させるプログラム（図４右）の例を示す。なお、この例におけるループ処理は、０Ｃ００００００から始まるエリアを４ｘ１０００バイト分初期化する処理である。"ｍｏｖ"は転送命令を示し、最初の３つのｍｏｖ命令がループ処理の初期設定を行う。第１のｍｏｖ命令は初期化するバイト数（１０００）を、第２のｍｏｖ命令は初期値（１１２２３３４４）を、第３のｍｏｖ命令は初期化するエリアの先頭アドレス（０Ｃ００００００）を、それぞれレジスタｒ０、ｒ１、ｒ２に設定する命令である。ループ内において"ｍｏｖ"はレジスタｒ２の値で特定されるアドレス番地にレジスタｒ１の値を転送する転送命令である。"ａｄｄ"はレジスタｒ２の値に４を加算する加算命令である。"ｄｔ"はレジスタＲ０の値をデクリメントしてゼロ値となったときに特定のフラグに１をセットし、そうでないときは０とする命令である。"ｂｆ"は当該特定のフラグが０を示すときにＬｏｏｐに分岐し、フラグが１のときは分岐することなくＮＯＰ（Ｎｏ  ｏｐｅｒａｔｉｏｎ）となる分岐命令である。
【００４０】
分岐履歴テーブルを用いた分岐予測の機能を備えたプロセッサで図４の左部に示す従来のプログラムを実行する場合に、ループの各回の最後において、ループを繰り返すかループを脱出（正常終了）するかの分岐予測を行う。そのため、ループを繰り返した回数と、ループ実行の最後の分岐（ループの正常終了）の１回とを合わせた分（１０００回）、分岐履歴テーブルへのアクセス（リード）が生じる。また、２ビット学習の場合には、分岐予測が正しくても誤っても、分岐予測の後に分岐履歴テーブルへのアクセス（ライト）が生じ、１ビット学習の場合には、分岐予測が誤ったときに、分岐予測の後に分岐履歴テーブルへのアクセス（ライト）が生じる。
【００４１】
ところで、ループ処理を行わせるプログラムの場合、プログラムの作成者は、ループ実行の最後の分岐を除き、ループが繰り返されることを知っている。そのため、図４の右部に示すように、ループ処理に先立って、固定命令ｂｐｔｆを挿入することにより、その後の分岐予測方向を「分岐予測」に固定すると共に、ループの正常終了後に、固定解除命令ｂｐｒを挿入することにより、固定命令ｂｐｔｆによる分岐予測方向の固定を解除するようにプログラムを作成することができる。
【００４２】
図５は、命令処理部１２によるプログラムの実行のフローチャートの例を示す。図示のように、固定命令が無い場合（Ｓ１００：Ｙｅｓ）、または、固定命令があったものの、その後、固定解除命令があった場合（Ｓ１００：Ｙｅｓ、Ｓ１１４：Ｙｅｓ）、命令処理部１２は、条件分岐命令に対して、動的予測を行う。具体的には、条件分岐命令に対して、分岐履歴テーブル１４を参照して分岐予測を行うと共に、該条件分岐命令の実行後、実行結果に基づいて分岐履歴テーブル１４を更新する（Ｓ１０２：Ｙｅｓ、Ｓ１０６、Ｓ１０８、Ｓ１１０、Ｓ１１２）。
【００４３】
図４の左部に示す従来のプログラムの場合には、ステップＳ１０２〜ステップＳ１１２の処理がなされる。
【００４４】
一方、固定命令の後、固定解除命令の前の間（Ｓ１００：Ｙｅｓ、Ｓ１１４：Ｎｏ）、命令処理部１２は、条件分岐命令に対して、固定予測を行う。具体的には、条件分岐命令に対して、分岐履歴テーブル１４を参照せずに、固定命令が指示する分岐予測方向（ＴａｋｅｎまたはＮｏｔ−Ｔａｋｅｎ）に分岐予測を行い、該条件分岐命令の実行後には、実行結果に関わらず、分岐履歴テーブル１４の更新をしない（Ｓ１１６：Ｙｅｓ、Ｓ１２０、Ｓ１２２）。
【００４５】
図４の右部に示すプログラムの場合、命令処理部１２は、ループの正常終了まで、ループを繰り返すための分岐（Ｔａｋｅｎ）に分岐予測をする。そのため、ループ実行の最後の分岐（１０００回目）で予測が誤るが、他の全て（９９９回）の分岐予測が正しい結果になる。
【００４６】
なお、条件分岐命令以外の他の命令については、分岐予測が生じず、命令処理部１２は、通常のプロセッサと同様にこれらの命令のフェッチ及び実行をする（Ｓ１０２：Ｎｏ、Ｓ１０４）（Ｓ１１６：Ｎｏ、Ｓ１１８）。
【００４７】
該第１の技術では、命令処理部１２が固定命令と固定解除命令に対応し、固定命令と固定解除命令の間に位置する条件分岐命令に対して分岐予測を行う際に、分岐履歴テーブル１４の参照をせずに、常に固定命令が指示する分岐予測方向に分岐予測を行うと共に、条件分岐命令の実行結果に基づいた分岐履歴テーブル１４の更新をしない。そのため、ループなど、予め分岐するか否かが分かっているプログラムの場合、プログラムの作成者が固定命令を挿入することにより命令処理部１２に固定予測をさせることができる。固定予測の場合に、分岐履歴テーブル１４へのアクセスが発生しないため、半導体装置１０の消費電力を抑制することができる。
【００４８】
また、固定命令と対にして固定解除命令を使用することにより、固定命令の後に命令処理部１２が常に固定予測を行うことを回避することができる。従って、分岐するか否かが分からない条件分岐命令の場合には、分岐履歴テーブルへのアクセスを伴う通常の動的分岐予測が行われるようにすることができ、半導体装置の性能低下を防ぐことができる。
【００４９】
＜第２の技術＞
該第２の技術では、命令処理部１２は、固定指示付き分岐命令を処理することを可能とする構成をなす。
固定指示付き分岐命令は、「分岐する」と「分岐しない」のいずれか一方を示す分岐予測方向に固定することを示す固定指示が含まれる条件分岐命令である。
【００５０】
命令処理部１２は、固定指示付き分岐命令に対して、固定予測を行う。ここで、固定予測とは、該条件分岐命令（固定指示付き分岐命令）に対して、分岐履歴テーブル１４を参照せずに、該固定指示付き分岐命令に含まれる固定指示が示す分岐予測方向に分岐予測をすることを意味する。また、命令処理部１２は、固定指示付き分岐命令に含まれる条件分岐命令の実行後に、分岐履歴テーブル１４の更新をしない。
【００５１】
固定指示が含まれない通常の条件分岐命令に対しては、命令処理部１２は、分岐履歴テーブル１４に格納された履歴を参照して分岐予測をする動的予測を行う。動的予測と共に、命令処理部１２は、該条件分岐命令の実行後に、実行結果に基づいて分岐履歴テーブル１４を更新する。
【００５２】
図５は、固定指示付き分岐命令のフォーマットの例を示す。この例は、命令長を１６ビットとした場合のものである。図示のように、固定指示付き分岐命令は、上から下への順に、固定指示付き分岐命令ｂｐｔｔ、固定指示付き分岐命令ｂｐｆｔ、固定指示付き分岐命令ｂｐｔｆ、固定指示付き分岐命令ｂｐｆｆの４種類がある。
【００５３】
この４種類の固定指示付き分岐命令のいずれも、上位１３ビットの「１０１０１１１１１１１１０」が、該命令が固定指示付き分岐命令であることを示す。また、下位の３ビットのうちの上位の１ビットは、分岐条件（ＴｒｕｅまたはＦａｌｓｅ）を示し、他の２ビットは、分岐予測方向（ＴａｋｅｎまたはＮｏｔ−Ｔａｋｅｎ）を示す固定指示である。
【００５４】
固定指示付き分岐命令ｂｐｔｔは、分岐条件が「Ｔｒｕｅ」であり（Ｔｒｕｅであるときに分岐する）、固定指示が「分岐する」（Ｔａｋｅｎ）を示す。
【００５５】
固定指示付き分岐命令ｂｐｆｔは、分岐条件が「Ｆａｌｓｅ」であり（Ｆａｌｓｅであるときに分岐する）、固定指示が「分岐する」（Ｔａｋｅｎ）を示す。
【００５６】
固定指示付き分岐命令ｂｐｔｆは、分岐条件が「Ｔｒｕｅ」であり、固定指示が「分岐しない」（Ｎｏｔ−Ｔａｋｅｎ）を示す。
【００５７】
固定指示付き分岐命令ｂｐｆｆは、分岐条件が「Ｆａｌｓｅ」であり、固定指示が「分岐しない」（Ｎｏｔ−Ｔａｋｅｎ）を示す。
【００５８】
図７は、図４左部に示す従来のプログラムによるループ処理を、固定指示付き分岐命令を含むプログラムで実行させる場合の例を示す。
【００５９】
図７に示すように、この場合、図４左部に示す従来のプログラムにおけるループ処理の最下行の固定指示付き分岐命令「ｂｆ  Ｌｏｏｐ」の代わりに、固定指示付き分岐命令「ｂｐｆｔ  Ｌｏｏｐ」が用いられる。
【００６０】
前述したように、固定指示付き分岐命令ｂｐｆｔは、分岐条件が「Ｆａｌｓｅ」であり、固定指示が「分岐する」（Ｔａｋｅｎ）を示す。そのため、図７のプログラムにおける「ｂｆ  Ｌｏｏｐ」は、「ｒ０が０ではない場合（Ｆａｌｓｅ）にループを繰り返す」条件分岐命令と、「分岐予測方向をＴａｋｅｎ（ループを繰り返す）に固定する」固定指示を示すことになる。
【００６１】
図８は、命令処理部１２によるプログラムの実行のフローチャートの例を示す。図示のように、固定指示が含まれない条件分岐命令（Ｓ１３０：Ｙｅｓ、Ｓ１３４：Ｎｏ）に対して、命令処理部１２は、動的予測を行う。具体的には、分岐履歴テーブル１４を参照して分岐予測を行うと共に、該条件分岐命令の実行後、実行結果に基づいて分岐履歴テーブル１４を更新する（Ｓ１３６、Ｓ１３８、Ｓ１４０、Ｓ１４２）。
【００６２】
図４の左部に示す従来のプログラムのように、固定指示が含まれない条件分岐命令の場合には、ステップＳ１３６〜ステップＳ１４２の処理がなされる。
【００６３】
一方、固定指示付き分岐命令（Ｓ１３０：Ｙｅｓ、Ｓ１３４：Ｙｅｓ）に対して、命令処理部１２は、固定予測を行う。具体的には、岐履歴テーブル１４を参照せずに、該命令に含まれる固定指示が示す分岐予測方向に分岐予測を行い、該条件分岐命令の実行後には、実行結果に関わらず、分岐履歴テーブル１４の更新をしない（Ｓ１４４、Ｓ１４６）。
【００６４】
図７に示すプログラムの場合、命令処理部１２は、ループの正常終了まで、ループを繰り返すための分岐（Ｔａｋｅｎ）に分岐予測をする。そのため、ループ実行の最後の分岐（１０００回目）で予測が誤るが、他の全て（９９９回）の分岐予測が正しい結果になる。
【００６５】
なお、条件分岐命令以外の他の命令については、分岐予測が生じず、命令処理部１２は、通常のプロセッサと同様にこれらの命令のフェッチ及び実行をする（Ｓ１３０：Ｎｏ、Ｓ１３２）。
【００６６】
該第２の技術は、第１の技術と同様の効果を得ることができる。
さらに、該第２の技術では、固定指示が条件分岐命令に付属されており、命令処理部１２は、固定指示付き分岐命令に対してのみ固定予測を行う。そのため、第１の技術における固定解除命令を使用する必要がなく、命令数を減らすことができ、ひいては、半導体装置１０の性能を高めることができる。
【００６７】
＜第３の技術＞
上述した第１と第２の技術は、条件分岐命令が固定命令と固定解除命令の間に位置するか否か、または、条件分岐命令が固定指示付き分岐命令であるか否かに応じて固定予測と動的予測の切替えを行う。対して、第３の技術では、命令処理部１２は、動作モードに応じて固定予測と動的予測の切替えを行う。なお、夫々の動作モードに対して、「固定予測」か「動的予測」の設定が可能である。また、固定予測の設定には、分岐予測方向が含まれている。
【００６８】
ここでいう「固定予測」は、分岐履歴テーブル１４を参照せずに、固定予測の設定に含まれる分岐予測方向に分岐予測をすることを意味する。また、この場合、固定予測の対象となる条件分岐命令の実行後に、実行結果に関わらず、分岐履歴テーブル１４の更新をしない。
【００６９】
また、「動的予測」は、分岐履歴テーブル１４を参照して分岐予測をすることを意味する。この場合、動的予測の対象となる条件分岐命令の実行後に、実行結果に基づいて、分岐履歴テーブル１４を更新する。
【００７０】
プロセッサのＣＰＵは、最低でも２つの動作モードを有する。この２つの動作モードは、完全に無制限のＣＰＵ動作を許可するカーネルモード（特権モードや、スーパーバイザモードともいう）と、制限付きのＣＰＵ動作しか許可しないユーザモード（スレーブモードともいう）である。
【００７１】
本第３の技術では、命令処理部１２は、少なくともカーネルモードとユーザモードを含む複数の動作モードを有し、夫々の動作モードに対して、動的予測の設定、または、「分岐する」と「分岐しない」のいずれか一方を示す分岐予測方向を含む固定予測の設定が可能である。
【００７２】
命令処理部１２は、動的予測の設定がされている動作モードのときに、条件分岐命令に対して、分岐履歴テーブル１４に格納された履歴を参照して分岐予測をすると共に、該条件分岐命令の実行結果に基づいて分岐履歴テーブル１４を更新する。
【００７３】
また、固定予測の設定がされている動作モードのときに、命令処理部１２は、条件分岐命令に対して、分岐履歴テーブル１４を参照せずに、該固定予測の設定に含まれる分岐予測方向に分岐予測をする一方、分岐履歴テーブル１４の更新をしない。
【００７４】
図９は、命令処理部１２によるプログラムの実行のフローチャートの例を示す。該例では、命令処理部１２がカーネルモードとユーザモードの２つのモードを有し、片方のモード（第１のモード）に対して、動的予測の設定がなされており、他方のモード（第２のモード）に対して、固定予測の設定（分岐予測方向を含む）がなされているとする。
【００７５】
図９に示すように、命令処理部１２は、第１のモードで動作しているときに、条件分岐命令に対して（Ｓ１５０：Ｙｅｓ、Ｓ１５２、Ｙｅｓ）、動的予測を行う。具体的には、分岐履歴テーブル１４に格納された履歴を参照して分岐予測をすると共に、該条件分岐命令の実行後、実行結果に基づいて分岐履歴テーブル１４を更新する（Ｓ１５６、Ｓ１５８、Ｓ１６０、Ｓ１６２）。
【００７６】
第１のモードから第２のモードへの切替えが生じない限り（Ｓ１６４：Ｎｏ）、命令処理部１２は、条件分岐命令に対して、ステップＳ１５６〜ステップＳ１６２の動的予測を行う。
【００７７】
命令処理部１２は、第２のモードで動作しているときの条件分岐命令に対して（Ｓ１５０：Ｎｏ、Ｓ１６６、Ｙｅｓ）、固定予測を行う。具体的には、分岐履歴テーブル１４を参照せずに、該第２のモードに対して予め設定された分岐予測方向に分岐予測を行い、該条件分岐命令の実行後には、実行結果に関わらず、分岐履歴テーブル１４の更新をしない（Ｓ１７０、Ｓ１７２）。
【００７８】
第２のモードから第１のモードへの切替えが生じない限り（Ｓ１７４：Ｎｏ）、命令処理部１２は、条件分岐命令に対して、ステップＳ１７０〜ステップＳ１７２の固定予測を行う。
【００７９】
第１のモードから第２のモードへの切替えが生じた場合に（Ｓ１６４：Ｙｅｓ）、命令処理部１２は、その後、条件分岐命令に対して固定予測を行う（Ｓ１７０、Ｓ１７２）。
【００８０】
また、第２のモードから第１のモードへの切替えが生じた場合に（Ｓ１７４：Ｙｅｓ）、命令処理部１２は、その後、条件分岐命令に対して動的予測を行う（Ｓ１５６〜Ｓ１６２）。
【００８１】
なお、条件分岐命令以外の他の命令については、分岐予測が生じず、命令処理部１２は、通常のプロセッサと同様にこれらの命令のフェッチ及び実行をする（Ｓ１５２：Ｎｏ、Ｓ１５４）（Ｓ１６６：Ｎｏ、Ｓ１６８）。
【００８２】
プロセッサにおいて、ＣＰＵは、動作モードによって実行するプログラムの種類が異なる。例えば、通常、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のプログラムはカーネルモードで実行され、ユーザプログラムはユーザモードで実行される。また、同種類のプログラムの命令間の関連性より、ＯＳのプログラムとユーザプログラムのような種類の異なるプログラムの命令間の関連性が低い。
【００８３】
そのため、全てのプログラムに対して、分岐予測に際して、同様の分岐履歴テーブルの参照と学習を行うのでは、関連性の低い複数のプログラムにおける条件分岐命令の実行結果の履歴が混ざり合ってしまい、分岐予測がミスする確率が高くなるという問題が生じ得る。
【００８４】
本第３の技術は、夫々の動作モードに対して、分岐予測の方法（動的予測か固定予測）を設定可能にし、動作モードに応じて、該動作モードに対して設定された分岐予測の方法で分岐予測を行う。そのため、動作モードに応じて異なる分岐予測の方法を設定すれば、分岐予測の視点から、固定予測に設定された動作モードで実行されるプロフラムが、動的予測に設定された動作モードで実行されるプログラムに与える影響を失くすことができ、上記問題を回避することができる。
【００８５】
例えば、カーネルモードに対して固定予測の設定をし、ユーザモードに対して動的予測の設定をすることによって、ＯＳのプログラムにおける条件分岐命令の実行結果の影響を受けないユーザプログラム環境を構築することができる。
【００８６】
また、半導体装置１０のユーザは、消費電力の抑制を優先させたい場合には、より多くの動作モードに対して固定予測を設定し、性能を優先させたい場合には、より多くの動作モードに対して動的予測を設定するような運用も可能であり、消費電力の抑制と性能の維持のバランスの調整が柔軟である。
【００８７】
なお、通常、プロセッサにおいて、動作モード間の遷移が必要となったときに、コンテキストスイッチが発生する。そのため、動作モード間の切替えは、コンテキストスイッチの発生により検知可能である。本第３の技術では、命令処理部１２は、例えば、動作モード間の切替えに伴って発生するコンテキストスイッチにより動作モードの切替えを検出し、コンテキストスイッチに応じて、動的予測と固定予測の切替えをすることができる。
【００８８】
＜第４の技術＞
上述した第１の技術は、条件分岐命令が固定命令と固定解除命令の間に位置するか否かに応じて固定予測と動的予測の切替えを行う。第２の技術は、条件分岐命令が固定指示付き分岐命令であるか否かに応じて固定予測と動的予測の切替えを行う。また、第３の技術は、動作モードに応じて固定予測と動的予測の切替えを行う。
【００８９】
対して、本第４の技術は、プログラムの実行領域に応じて固定予測と動的予測の切替えを行う。図１０に示す半導体装置２０を参照して、第４の技術を説明する。
【００９０】
半導体装置２０は、例えばパイプライン処理を実行するマイクロコンピュータであり、命令処理部２２と、分岐履歴テーブル２４と、メモリ２６を備える。
【００９１】
命令処理部２２は、命令のフェッチと実行を含む処理を行い、条件分岐命令の実行に際して分岐予測を行う。
【００９２】
分岐履歴テーブル２４は、条件分岐命令の実行の結果、分岐したか否かの履歴を格納するためのものであり、命令処理部２２により更新される。
【００９３】
メモリ２６は、プログラムの実行領域を成し、複数のエリア（２６Ａ、２６Ｂ、２６Ｃ、・・・）を含む。該複数のエリアは、固定予測の設定と動的予測の設定のいずれか一方がされている。なお、固定予測の設定には、「分岐する」と「分岐しない」のいずれか一方である分岐予測方向が含まれている。
【００９４】
図１０において、例として、領域２６Ａは、「分岐する」（Ｔａｋｅｎ）の固定予測の設定がなされた固定予測領域である。また、領域２６Ｂは、「分岐しない」（Ｎｏｔ−Ｔａｋｅｎ）の固定予測の設定がなされた固定予測領域である。また、領域２６Ｃは、動的予測の設定がなされた動的予測領域である。
【００９５】
図１１は、命令処理部２２によるプログラムの実行のフローチャートの例を示す。図示のように、命令処理部２２は、動的予測の設定がされているエリアを実行領域とするプログラムの条件分岐命令に対して（Ｓ１８０：Ｙｅｓ、Ｓ１８４：Ｎｏ）、動的予測を行う。具体的には、分岐履歴テーブル２４に格納された履歴を参照して分岐予測をすると共に、該条件分岐命令の実行結果に基づいて分岐履歴テーブル２４を更新する（Ｓ１８６、Ｓ１８８、Ｓ１９０、Ｓ１９２）。
【００９６】
例えば、メモリ２６の動的予測領域２６Ｃを実行領域とするプログラム内の条件分岐命令に対して、命令処理部２２は、動的予測を行う。
【００９７】
一方、固定予測の設定がされているエリアを実行領域とするプログラムの条件分岐命令に対して（Ｓ１８０：Ｙｅｓ、Ｓ１８４：Ｙｅｓ）、命令処理部２２は、固定予測を行う。具体的には、分岐履歴テーブル２４を参照せずに、該エリアに対して設定された分岐予測方向に分岐予測をする（Ｓ１９４）。この場合、命令処理部２２は、該条件分岐命令の実行（Ｓ１９６）の後に、実行結果に関わらず、分岐履歴テーブル２４の更新をしない。
【００９８】
例えば、メモリ２６の固定予測領域２６Ａを実行領域とするプログラムの条件分岐命令に対して、命令処理部２２は、常に「Ｔａｋｅｎ」の分岐予測を行い、分岐履歴テーブル２４の更新をしない。
【００９９】
また、メモリ２６の固定予測領域２６Ｂを実行領域とするプログラムの条件分岐命令に対して、命令処理部２２は、常に「Ｎｏｔ−Ｔａｋｅｎ」の分岐予測を行い、分岐履歴テーブル２４の更新をしない。
【０１００】
なお、条件分岐命令以外の他の命令については、分岐予測が生じず、命令処理部２２は、通常のプロセッサと同様にこれらの命令のフェッチ及び実行をする（Ｓ１８０：Ｎｏ、Ｓ１８２）。
【０１０１】
本第４の技術は、プログラムの実行領域として、異なる分岐予測の方法が設定された複数のエリアを有するメモリ２６を提供すると共に、プログラムの実行領域となるエリアに応じて分岐予測の方法を切り替える。そのため、ユーザは、プログラムに含まれる条件分岐命令の多少や、条件分岐命令が分岐する場合と分岐しない場合の多少や、消費電力を優先させたいか性能を優先させたいかなどに応じて、プログラムが実行されるエリアを設定することにより、最適な分岐予測の方法を選択することができる。
【０１０２】
勿論、第３の技術のときに説明した、関連性の低い複数のプログラムにおける条件分岐命令の実行結果の履歴が混ざり合ってしまい、分岐予測がミスする確率が高くなるという問題を回避するためにも、本第４の技術が有効である。この場合、例えば、関連性が高いプログラムに対しては実行領域を同様の設定（動的予測または固定予測）がされたエリアに指定し、関連性の低い複数のプログラムに対しては実行領域を異なる設定がされたエリアに指定すればよい。
勿論、メモリ２６の各エリアの設定は、ユーザにより変更可能にしてもよい。
【０１０３】
以上の各技術を踏まえて、実施の形態を説明する。
＜第１の実施の形態＞
図１２は、第１の実施の形態にかかる半導体装置１１０を示す。半導体装置１１０は、単一の半導体チップにより構成されるマイクロコンピュータを有する。半導体装置１１０は例えば、この半導体チップと電気的に接続される外部端子を有し、半導体チップを内部に樹脂で封止して外部端子を露出される半導体パッケージの形態をなす。半導体装置１１０には外部デバイス１２０が接続される。外部デバイス１２０として種々の記憶装置が例示されている。この半導体装置１１０及び外部デバイス１２０により携帯電話を含むデジタル情報端末、またはデジタル家電などの電子機器１００が構成される。なお以下において半導体装置１１０は、「マイクロコンピュータ１１０」とも称する。
【０１０４】
外部デバイス１２０は、不揮発性メモリと揮発性メモリが含まれている。図１２において、揮発性メモリとしてＤＤＲ型ＤＲＡＭ（Ｄｏｕｂｌｅ  Ｄａｔａ  Ｒａｔｅ型Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ Ｍｅｍｏｒｙ。以下「ＤＤＲメモリ」と称す）１２１とＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１２２を例示しており、不揮発性メモリとしてフラッシュメモリ１２３を例示している。
【０１０５】
フラッシュメモリ１２３は、ブートプログラムと、ＯＳのプログラムと、ユーザプログラムが格納されている。電子機器１００の起動時又はリセット時に、フラッシュメモリ１２３からブートプログラムがＳＲＡＭ１２２にロードされ、マイクロコンピュータ１１０のＣＰＵ１１１により実行される。その後、ブートプログラムの実行に伴って、ＯＳのプログラムの一部もＳＲＡＭ１２２にロードされ、ＣＰＵ１１１により実行される。また、ユーザプログラムも、実行に際してＳＲＡＭ１２２にロードされる。
【０１０６】
すなわち、ＳＲＡＭ１２２は、プログラムの実行領域を構成する。フラッシュメモリ１２３に格納された各プログラムは、実行に際してＳＲＡＭ１２２にロードされる。
【０１０７】
ＤＤＲメモリ１２１は、ＳＲＡＭより高速アクセスが可能なメモリであり、ＳＲＡＭと同様にＯＳ、ユーザプログラムの実行領域として使用される。
【０１０８】
なお半導体装置（マイクロコンピュータ）１１０が外部デバイス１２０の一部又は全部を有する構成でもよい。例えばＳＲＡＭ１２２及びフラッシュメモリ１２３の一方又は双方がマイクロコンピュータと同じ半導体基板上に設けられても良いし、同一半導体パッケージ内のマイクロコンピュータと異なる半導体基板上に設けられてもよい。
【０１０９】
またＤＤＲメモリ１２１も同様に、マイクロコンピュータと同じ半導体基板上に設けられても良いし、同一半導体パッケージ内のマイクロコンピュータと異なる半導体基板上に設けられてもよい。
【０１１０】
マイクロコンピュータ１１０は、中央演算処理装置としてのＣＰＵ１１１、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送を行うＤＭＡコントローラ１１２、バス１１９、時間を計測するタイムユニット１１４、シリアル通信デバイス（図示せず）と接続するためのシリアル通信インタフェース１１５、タイムユニット１１４及びシリアル通信インタフェース１１５のバス１１９とのデータの受渡しを制御する周辺バスコントローラ１１３、ＤＤＲメモリ１２１へのアクセスを制御するＤＤＲコントローラ１１６、ＳＲＡＭ１２２とフラッシュメモリ１２３へのアクセスを制御するローカルバスコントローラ１１７、クロックを供給するクロック発信器（ＣＰＧ）１１８を有する。
【０１１１】
ＣＰＵ１１１、ＤＭＡコントローラ１１２、周辺バスコントローラ１１３、ＤＤＲコントローラ１１６、ローカルバスコントローラ１１７は、バス１１９に接続されている。
【０１１２】
なお、マイクロコンピュータ１１０において、ＤＭＡコントローラ１１２、周辺バスコントローラ１１３、タイムユニット１１４、シリアル通信インタフェース１１５、ＤＤＲコントローラ１１６、ローカルバスコントローラ１１７、クロック発信器１１８は、この種の半導体装置に備えられるものと同様であり、ここでは詳細な説明を省略する。
【０１１３】
図１３は、ＣＰＵ１１１を詳細に示す図である。ＣＰＵ１１１は、パイプライン処理により命令を実行し、命令フェッチ制御部１４０、予測結果判定部１４２、分岐履歴テーブル１４４、投機命令実行制御部１４６、命令キャッシュ１４８、プリデコーダ１５０、命令キュー１５２、命令デコーダ１５４、命令実行部１５６、汎用レジスタ１５８を有する。
【０１１４】
ＣＰＵ１１１において、分岐履歴テーブル１４４を除いた他の機能ブロックは、命令処理部を構成し、命令のフェッチと実行を含む処理を行い、条件分岐命令の実行に際して分岐予測を行う。
【０１１５】
分岐履歴テーブル１４４は、条件分岐命令の実行の結果、分岐したか否かの履歴を格納するためのものである。分岐履歴テーブル１４４は、命令フェッチ制御部１４０と投機命令実行制御部１４６により参照可能であり、更新は、命令フェッチ制御部１４０によりなされる。
【０１１６】
命令フェッチ制御部１４０は、バス１１９を介してローカルバスコントローラ１１７、ＤＤＲコントローラ１１６に接続されており、ＳＲＡＭ１２２、ＤＤＲメモリ１２１または命令キャッシュ１４８から命令をフェッチして、命令コードを、プリデコーダ１５０と、命令キュー１５２および命令デコーダ１５４に転送する。
【０１１７】
プリデコーダ１５０は、条件分岐命令をデコード（プリデコード）して、結果を命令キュー１５２、および命令フェッチ制御部１４０に転送する。
【０１１８】
命令デコーダ１５４は、命令キュー１５２、命令キャッシュ１４８からの命令をデコードして命令実行部１５６に出力する。
【０１１９】
命令実行部１５６は、命令デコーダ１５４からの命令を実行する。命令の実行に伴って、必要に応じて汎用レジスタ１５８からの読出しまたは書込みを行う。
【０１２０】
命令フェッチ制御部１４０は、プリデコーダ１５０によるプリデコードの結果に基づいて、下記のように次の命令をフェッチする。
【０１２１】
無条件分岐命令に対して、命令フェッチ制御部１４０は、プリデコーダ１５０によるプリデコードの結果から分岐先を取得し、該分岐先の命令をフェッチする。
【０１２２】
条件分岐命令に対して、命令フェッチ制御部１４０は、まず、分岐予測を行う。分岐予測の結果が「分岐する」（Ｔａｋｅｎ）である場合に、命令フェッチ制御部１４０は、プリデコーダ１５０によるプリデコードの結果から分岐先を取得し、該分岐先の命令をフェッチする。
【０１２３】
一方、分岐予測の結果が「分岐しない」（Ｎｏｔ−Ｔａｋｅｎ）である場合には、命令フェッチ制御部１４０は、該条件分岐命令のアドレスの次のアドレスから命令をフェッチする。
【０１２４】
投機命令実行制御部１４６は、命令フェッチ制御部１４０による分岐予測と協働して制御投機を行うものである。具体的には、条件分岐命令に対して命令フェッチ制御部１４０が分岐予測の結果に基づいてフェッチした命令をパイプラインに投入し、実行を開始させる。そして、分岐予測が正しい場合には、そのまま実行を継続させる。一方、分岐予測が誤った場合には、分岐予測の結果に基づいてパイプラインに投入した命令を無効化する。この場合、命令フェッチ制御部１４０は、分岐予測した方向とは反対の方向の命令をフェッチする。
【０１２５】
分岐予測の結果が正しいか否かの判断は、予測結果判定部１４２によりなされる。命令フェッチ制御部１４０は、予測結果判定部１４２による判定の結果に応じて、分岐予測した方向と反対の方向の命令をフェッチするか否かを決定する。
【０１２６】
以上に説明したＣＰＵ１１１による処理の流れは、命令フェッチ制御部１４０による分岐予測の手法を除き、分岐予測を行う通常のプロセッサによる処理と同様であるため、さらなる詳細な説明を省略する。
【０１２７】
ここで、命令フェッチ制御部１４０による分岐予測の手法を説明する。
命令フェッチ制御部１４０は、前述した第１の技術により分岐予測を行う。すなわち、命令フェッチ制御部１４０は、上述した固定命令及び固定解除命令に対応する。
【０１２８】
そして、固定命令と固定解除命令の間の条件分岐命令に対しては、命令フェッチ制御部１４０は、固定予測として、分岐履歴テーブル１４４を参照せずに、上記固定命令が指示する分岐予測方向に分岐予測を行う。また、この場合において、分岐予測が正しいか否かに関わらず、命令フェッチ制御部１４０は、分岐履歴テーブル１４４の更新をしない。
【０１２９】
また、それ以外の条件分岐命令に対しては、命令フェッチ制御部１４０は、動的分岐予測として、分岐履歴テーブル１４４を参照して分岐予測を行うと共に、該条件分岐命令の投機実行に対して予測結果判定部１４２が判断した結果に基づいて分岐履歴テーブル１４４を更新する。
【０１３０】
命令フェッチ制御部１４０によるこのような分岐予測は、第１の技術に基づいたものである。そのため、該第１の実施の形態にかかる半導体装置１１０は、第１の技術について述べた全ての効果を得ることができる。
【０１３１】
＜第２の実施の形態＞
第２の実施の形態も、半導体装置である。該半導体装置は、分岐予測の方法において第１の実施の形態の半導体装置１１０と異なる点を除き、半導体装置１１０と同様であるため、第２の実施の形態については、分岐予測の方法についてのみ説明する。また、簡潔のために、第２の実施の形態の半導体装置の図示を省略し、半導体装置１１０の機能ブロックを用いて説明する。
【０１３２】
第２の実施の形態の半導体装置において、命令フェッチ制御部１４０は、前述した第２の技術により分岐予測を行う。すなわち、命令フェッチ制御部１４０は、前述した固定指示が含まれる条件分岐命令（固定指示付き分岐命令）に対応する。
【０１３３】
そして、固定指示付き分岐命令に対しては、命令フェッチ制御部１４０は、固定予測として、分岐履歴テーブル１４４を参照せずに、該固定指示付き分岐命令に含まれる固定指示が示す分岐予測方向に分岐予測を行う。また、この場合において、分岐予測が正しいか否かに関わらず、命令フェッチ制御部１４０は、分岐履歴テーブル１４４の更新をしない。
【０１３４】
また、固定指示が含まれない条件分岐命令に対しては、命令フェッチ制御部１４０は、動的分岐予測として、分岐履歴テーブル１４４を参照して分岐予測を行うと共に、該条件分岐命令の投機実行に対して予測結果判定部１４２が判断した結果に基づいて分岐履歴テーブル１４４を更新する。
【０１３５】
このような分岐予測は、第２の技術に基づいたものである。そのため、該第２の実施の形態にかかる半導体装置は、第２の技術について述べた全ての効果を得ることができる。
【０１３６】
＜第３の実施の形態＞
本第３の実施の形態も、半導体装置である。該半導体装置は、ＣＰＵ１１１の代わりに、図１４に示すＣＰＵ２００が設けられた点を除き、図１２に示す半導体装置１１０と同様である。ここで、ＣＰＵ２００についてのみ説明する。また、ＣＰＵ２００についても、ＣＰＵ１１１と異なる点のみを説明する。
【０１３７】
図１４に示すように、ＣＰＵ２００は、命令フェッチ制御部１４０の代わりに命令フェッチ制御部２４０が設けられていると共に、ステータスレジスタ２１０を有する点を除き、半導体装置１１０におけるＣＰＵ１１１と同様である。
【０１３８】
ステータスレジスタ２１０は、複数ビットを有し、ＣＰＵ２００の動作モードや使用するレジスタバンクなどを示す情報を格納している。
【０１３９】
本実施の形態において、ＣＰＵ２００は、カーネルモードとユーザモードの２つの動作モードを有する。ＣＰＵ２００の現在の動作モードは、ステータスレジスタ２１０の１ビット（以下「動作モードビット」という）により示される。また、動作モードの切替え時に、コンテキストスイッチの発生に伴って、動作モードビットの値が変更される。
【０１４０】
ＣＰＵ２００において、命令フェッチ制御部２４０は、分岐予測の方法に関して、第１と第２の実施の形態の半導体装置におけるＣＰＵ１１１と異なる。
【０１４１】
ＣＰＵ２００は、前述した第３の技術が適用されている。具体的には、ＣＰＵ２００の２つの動作モードのうちカーネルモードに対しては固定予測の設定がされており、ユーザモードに対しては動的予測の設定がさている。これらの設定は、例えば、ステータスレジスタ２１０や、または図示しない別のレジスタに格納されており、起動時にブートプログラムの実行により書き込まれている。また、固定予測の設定には、「分岐する」と「分岐しない」のいずれかの分岐予測方向も含まれている。なお、例として、カーネルモードに対して設定された固定予測に含まれる分岐予測方向が、「分岐しない」であるとする。
【０１４２】
命令フェッチ制御部２４０は、条件分岐命令に対して、ＣＰＵ２００の現在の動作モードに対して設定された予測方法に従って分岐予測をする。具体的には、ＣＰＵ２００の現在の動作モードが、固定予測（分岐予測方向：分岐しない）が設定されたカーネルモードであるときに、命令フェッチ制御部２４０は、条件分岐命令に対して、分岐履歴テーブル１４４を参照せずに、常に「分岐しない」予測を行う。また、この場合において、分岐予測が正しいか否かに関わらず、命令フェッチ制御部１４０は、分岐履歴テーブル１４４の更新をしない。
【０１４３】
一方、ＣＰＵ２００の現在の動作モードが、動的予測が設定されたユーザモードであるときには、命令フェッチ制御部２４０は、条件分岐命令に対して、分岐履歴テーブル１４４を参照して分岐予測を行うと共に、該条件分岐命令の投機実行に対して予測結果判定部１４２が判断した結果に基づいて分岐履歴テーブル１４４を更新する。
【０１４４】
このような分岐予測は、第３の技術に基づいたものである。そのため、該第３の実施の形態にかかる半導体装置は、第３の技術について述べた全ての効果を得ることができる。
【０１４５】
＜第４の実施の形態＞
本第４の実施の形態も、半導体装置である。該半導体装置は、ＣＰＵ１１１の代わりに、図１５に示すＣＰＵ３００が設けられた点を除き、図１２に示す半導体装置１１０と同様である。ここで、ＣＰＵ３００についてのみ説明する。また、ＣＰＵ３００についても、ＣＰＵ１１１と異なる点のみを説明する。
【０１４６】
図１５に示すように、ＣＰＵ３００は、命令フェッチ制御部１４０の代わりに命令フェッチ制御部３４０が設けられていると共に、領域設定レジスタ３１０を有する点を除き、半導体装置１１０におけるＣＰＵ１１１と同様である。
【０１４７】
領域設定レジスタ３１０は、複数組（図示の例では２組）の設定が格納されている。各組の設定は、プログラム実行領域における上限アドレス、下限アドレス、分岐予測方向の３つの情報から構成される。これらの設定は、起動時にブートプログラムの実行により書き込まれている。
【０１４８】
例えば、組（１）の設定は、プログラム実行領域における上限アドレス「２０００００００」、下限アドレス「４０００００００」、「Ｔａｋｅｎ」の分岐予測方向の３つの情報が含まれている。また、組（２）の設定は、プログラム実行領域における上限アドレス「８０００００００」、下限アドレス「Ａ０００００００」、「Ｎｏｔ−Ｔａｋｅｎ」の分岐予測方向の３つの情報が含まれている。
【０１４９】
ＣＰＵ３００において、命令フェッチ制御部３４０は、分岐予測の方法に関して、第１〜第３の実施の形態の半導体装置におけるＣＰＵと異なる。
【０１５０】
ＣＰＵ３００は、前述した第４の技術が適用されている。具体的には、ＣＰＵ３００の命令フェッチ制御部３４０は、領域設定レジスタ３１０の各組の設定に基づいて、該組の設定に含まれる上限アドレスから下限アドレスまでのＳＲＡＭ１２２のエリアを「固定予測領域」と看做し、領域設定レジスタ３１０内に設定されていないエリアを「動的予測領域」と看做す。
【０１５１】
図１６は、領域設定レジスタ３１０に格納された設定の例と、ＳＲＡＭ１２２のエリアとの対応関係を示す。
【０１５２】
例えば、組（１）に、上限アドレス、下限アドレス、分岐予測方向として、「２０００００００」、「４０００００００」、「Ｔａｋｅｎ」が設定されているため、ＳＲＡＭ１２２における「２０００００００」〜「４０００００００」のエリアは、「Ｔａｋｅｎ」の固定予測が設定された固定予測領域に看做される。
【０１５３】
また、組（２）に、上限アドレス、下限アドレス、分岐予測方向として、「８０００００００」、「Ａ０００００００」、「Ｎｏｔ−Ｔａｋｅｎ」が設定されているため、プログラム実行領域における「８０００００００」〜「Ａ０００００００」のエリアは、「Ｎｏｔ−Ｔａｋｅｎ」の固定予測が設定された固定予測領域に看做される。
【０１５４】
ＳＲＡＭ１２２の他のエリアについては、領域設定レジスタ３１０において設定が無いため、動的予測が設定された動的予測領域に看做される。
【０１５５】
そして、条件分岐命令に対して分岐予測を行う際に、命令フェッチ制御部３４０は、該条件分岐命令が含まれるプログラムの実行領域に基づいて分岐予測を行う。
【０１５６】
具体的には、動的予測エリアと看做すエリアを実行領域とするプログラムの条件分岐命令に対して、命令フェッチ制御部３４０は、動的予測を行う。つまり、分岐履歴テーブル１４４を参照して分岐予測を行う共に、該条件分岐命令の投機実行に対して予測結果判定部１４２が判断した結果に基づいて分岐履歴テーブル１４４を更新する。
【０１５７】
例えば、図１６に示す例の場合、「００００００００」〜「２０００００００」、「４０００００００」〜「８０００００００」、「Ａ０００００００」〜「ＦＦＦＦＦＦＦＦ」の各エリアを実行領域とするプログラムの条件分岐命令に対して、動的予測を行う。
【０１５８】
一方、固定予測と看做すエリアを実行領域とするプログラムの条件分岐命令に対して、命令フェッチ制御部３４０は、固定予測を行う。つまり、分岐履歴テーブル１４４を参照せずに、該エリアに対して設定された分岐予測方向に分岐予測を行う。また、該条件分岐命令の投機実行に対して予測結果判定部１４２が判断した結果に関わらず、分岐履歴テーブル１４４を更新しない。
【０１５９】
例えば、図１６に示す例の場合、「２０００００００」〜「４０００００００」のエリアを実行領域とするプログラムの条件分岐命令に対して、「Ｔａｋｅｎ」の固定予測を行い、「８０００００００」〜「Ａ０００００００」のエリアを実行領域とするプログラムの条件分岐命令に対して、「Ｎｏｔ−Ｔａｋｅｎ」の固定予測を行う。
【０１６０】
このような分岐予測は、第４の技術に基づいたものである。そのため、該第４の実施の形態にかかる半導体装置は、第４の技術について述べた全ての効果を得ることができる。
【０１６１】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【０１６２】
１０  半導体装置
１２  命令処理部
１４  分岐履歴テーブル
２０  半導体装置
２２  命令処理部
２４  分岐履歴テーブル
２６  メモリ
２６Ａ  固定予測領域
２６Ｂ  固定予測領域
２６Ｃ  動的予測領域
１００  電子機器
１１０  半導体装置（マイクロコンピュータ）
１１１  ＣＰＵ
１１２  ＤＭＡコントローラ
１１３  周辺バスコントローラ
１１４  タイムユニット
１１５  シリアル通信インタフェース
１１６  ＤＤＲコントローラ
１１７  ローカルバスコントローラ
１１８  クロック発信器
１１９  バス
１２０  外部デバイス
１２１  ＤＤＲメモリ
１２２  ＳＲＡＭ
１２３  フラッシュメモリ
１４０  命令フェッチ制御部
１４２  予測結果判定部
１４４  分岐履歴テーブル
１４６  投機命令実行制御部
１４８  命令キャッシュ
１５０  プリデコーダ
１５２  命令キュー
１５４  命令デコーダ
１５６  命令実行部
１５８  汎用レジスタ
２００  ＣＰＵ
２１０  ステータスレジスタ
２４０  命令フェッチ制御部
３００  ＣＰＵ
３１０  領域設定レジスタ
３４０  命令フェッチ制御部
【図１】
2013250593.tif 000003
【図２】
2013250593.tif 000004
【図３】
2013250593.tif 000005
【図４】
2013250593.tif 000006
【図５】
2013250593.tif 000007
【図６】
2013250593.tif 000008
【図７】
2013250593.tif 000009
【図８】
2013250593.tif 000010
【図９】
2013250593.tif 000011
【図１０】
2013250593.tif 000012
【図１１】
2013250593.tif 000013
【図１２】
2013250593.tif 000014
【図１３】
2013250593.tif 000015
【図１４】
2013250593.tif 000016
【図１５】
2013250593.tif 000017
【図１６】
2013250593.tif 000018