(57)【特許請求の範囲】
【請求項１】
パイプライン方式のプロセッサにて行われる、分岐予測による分岐命令高速化方法において、
分岐先予測テーブルに、分岐命令の分岐命令アドレス、分岐命令の予測分岐先である分岐先命令の次命令の分岐先次命令アドレス、前記分岐先命令、および分岐予測時の分岐予測条件を格納するステップと、
命令アドレスレジスタに、命令キャッシュから命令を読み出す際に用いる当該命令の命令アドレスを保持させるステップと、
前記命令アドレスレジスタに保持された命令アドレスが前記分岐予測テーブルに格納された前記分岐命令アドレスと一致する分岐命令の命令アドレスである場合、前記分岐予測テーブルに格納された前記分岐先命令を前記分岐命令と差し替えて命令レジスタに保持させると共に、当該分岐先命令を前記分岐予測テーブルに格納された前記分岐予測条件と一緒に実行パイプに流し実行させるステップと、
前記実行パイプに流された前記分岐先命令を実行する際に、前記実行パイプに流された前記分岐予測条件と実際の分岐条件の値とを比較することにより分岐予測の成功／不成功を判断するステップとを有することを特徴とする、分岐予測による分岐命令高速化方法。
【請求項２】
前記命令アドレスレジスタに保持された命令アドレスが前記分岐予測テーブルに格納された前記分岐命令アドレスと一致する分岐命令の命令アドレスである場合、
前記命令アドレスレジスタに、前記分岐命令の命令アドレスを保持した次のサイクルで、前記分岐予測テーブルに格納された前記分岐先次命令アドレスを保持させるステップと、
前記命令レジスタに、前記分岐先命令を保持した次のサイクルで、前記命令アドレスレジスタに保持された前記分岐先次命令アドレスにより前記命令キャッシュから読み出した分岐先次命令を保持させると共に、当該分岐先次命令を前記実行パイプに流し実行させるステップとを有する、請求項１に記載の分岐予測による分岐命令高速化方法。
【請求項３】
前記命令アドレスレジスタに保持された命令アドレスが前記分岐予測テーブルに格納された前記分岐命令アドレスと一致しない場合、前記命令アドレスレジスタに保持された命令アドレスにより前記命令キャッシュから読み出した命令を前記命令レジスタに保持させると共に、当該命令を前記実行パイプに流し実行させるステップを有する、請求項１または２に記載の分岐予測による分岐命令高速化方法。
【請求項４】
パイプライン方式のプロセッサにおいて、
分岐命令の分岐命令アドレス、分岐命令の予測分岐先である分岐先命令の次命令の分岐先次命令アドレス、前記分岐先命令、および分岐予測時の分岐予測条件を格納する分岐先予測テーブルと、
各種の命令を格納する命令キャッシュと、
前記命令キャッシュから命令を読み出す際に用いる当該命令の命令アドレスを保持する命令アドレスレジスタと、
前記命令アドレスレジスタに保持された命令アドレスが前記分岐予測テーブルに格納された前記分岐命令アドレスと一致する分岐命令の命令アドレスである場合、前記分岐予測テーブルに格納された前記分岐先命令を前記分岐命令と差し替えて保持すると共に、当該分岐先命令を実行パイプに流す命令レジスタと、
前記命令アドレスレジスタに保持された命令アドレスが前記分岐予測テーブルに格納された前記分岐命令アドレスと一致する分岐命令の命令アドレスである場合、前記分岐予測テーブルに格納された前記分岐予測条件を前記分岐先命令と一緒に前記実行パイプに流す分岐予測条件レジスタと、
前記実行パイプに流された前記分岐先命令を実行する際に、前記実行パイプに流された前記分岐予測条件と実際の分岐条件の値とを比較することにより分岐予測の成功／不成功を判断する実行手段とを有することを特徴とするプロセッサ。
【請求項５】
前記命令アドレスレジスタは、前記命令アドレスレジスタに保持された命令アドレスが前記分岐予測テーブルに格納された前記分岐命令アドレスと一致する分岐命令の命令アドレスである場合、前記分岐命令の命令アドレスを保持した次のサイクルで、前記分岐予測テーブルに格納された前記分岐先次命令アドレスを保持し、
前記命令レジスタは、前記命令アドレスレジスタに保持された命令アドレスが前記分岐予測テーブルに格納された前記分岐命令アドレスと一致する分岐命令の命令アドレスである場合、前記分岐先命令を保持した次のサイクルで、前記命令アドレスレジスタに保持された前記分岐先次命令アドレスにより前記命令キャッシュから読み出した分岐先次命令を保持すると共に、当該分岐先次命令を前記実行パイプに流し前記実行手段に実行させる、請求項４に記載のプロセッサ。
【請求項６】
前記命令レジスタは、前記命令アドレスレジスタに保持された命令アドレスが前記分岐予測テーブルに格納された前記分岐命令アドレスと一致しない場合、前記命令アドレスレジスタに保持された命令アドレスにより前記命令キャッシュから読み出した命令を保持すると共に、当該命令を前記実行パイプに流し前記実行手段に実行させる、請求項４または５に記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パイプライン制御を行うパイプライン方式のプロセッサにおいて、分岐命令の分岐先を予測する分岐予測により分岐命令の処理速度を高速化する、分岐予測による分岐命令高速化方法、およびプロセッサに関するものである。
【０００２】
【従来の技術】
従来、プロセッサの処理速度を高速化するための方法として、パイプライン方式により実行サイクルを高速化する方法がある。このパイプライン方式では、命令キャッシュから分岐命令を読み出すと、分岐命令の実行が終了するまで、その分岐命令の後の命令の実行が待たされるという課題がある。
【０００３】
そのため、パイプライン方式のプロセッサでは、分岐命令の先行実行を行うために、分岐命令を命令キャッシュから読み出す時に、分岐命令の分岐先命令を予測する分岐予測を行い、その予測結果に基づいて分岐先命令の命令アドレスを分岐予測テーブルから先行して読み出す処理が行われている。
【０００４】
図４は、従来のプロセッサに設けられた分岐予測回路の一例を示す図である。
【０００５】
図４に示すように本従来例のプロセッサに設けられた分岐予測回路は、命令アドレスレジスタ（以下、「ＩＡ」と称する）１０と、命令キャッシュ（Icache）２０と、分岐予測テーブル５０と、命令レジスタ（以下、「ＩＲ」と称する）６０とを有している。
【０００６】
分岐予測テーブル５０は、分岐命令アドレスを格納する分岐命令アドレスバッファ３０と、分岐命令アドレスバッファ３０にアドレスが格納された分岐命令の実行結果の予測値として、分岐先命令アドレスを格納する分岐予測バッファ４０とから構成される。具体的には、分岐先命令アドレスとして、分岐命令の予測分岐先である分岐先命令のアドレスを格納する。
【０００７】
ＩＡ１０は、外部入力される命令アドレスを保持する。なお、ＩＡ１０は、分岐命令アドレスバッファ３０からの信号により、ＩＡ１０のアドレス値が分岐命令アドレスバッファ３０に格納されている分岐命令アドレスと一致する（分岐予測テーブルヒット）ことを認識した場合には、分岐予測バッファ４０から読み出された分岐先命令アドレスを選択して保持する。
【０００８】
命令キャッシュ２０は、ＩＡ１０のアドレス値により読み出される各種の命令を格納する。
【０００９】
ＩＲ６０は、ＩＡ１０のアドレス値により命令キャッシュ２０から読み出された命令を保持し、この命令を不図示の実行パイプに流す。実行パイプに流された命令は、不図示の実行ユニットにて実行される。
【００１０】
以下に、図４に示したプロセッサの動作について説明する。
【００１１】
命令キャッシュ２０からの命令の読み出しは、ＩＡ１０のアドレス値により命令キャッシュ２０を読み出すことにより行われ、読み出した命令はＩＲ６０に保持され、不図示の実行パイプに流され不図示の実行ユニットにて実行される。
【００１２】
分岐予測動作は、ＩＡ１０のアドレス値が分岐命令のアドレスであり、この分岐命令の実行結果の予測値が分岐予測バッファ４０に格納されている場合に行われる。すなわち、ＩＡ１０のアドレス値が分岐命令アドレスバッファ３０に格納されている分岐命令アドレスと一致した場合に行われる。
【００１３】
図５を参照すると、例えば、ＩＡ１０のアドレス値が分岐命令ＢＣのアドレスであり、この分岐命令ＢＣのアドレスが分岐命令アドレスバッファ３０に格納されている場合（分岐予測テーブルヒット）、ＩＡ１０は分岐予測バッファ４０から読み出された分岐先命令Nextの命令アドレスを選択して保持する。
【００１４】
従って、ＩＡ１０には、分岐命令ＢＣの命令アドレスが保持された次のサイクルで分岐命令ＢＣの直後の分岐先命令であるNext命令の命令アドレスが保持され、ＩＲ６０には、分岐命令ＢＣが保持された次のサイクルでNext命令が保持されることになる。なお、図５において、ＩＡ１０には、分岐命令ＢＣの命令アドレスが保持される前のサイクルで分岐命令ＢＣの直前の命令であるBefore命令の命令アドレスが保持され、ＩＲ６０には、分岐命令ＢＣが保持される前のサイクルでBefore命令が保持される。
【００１５】
実行ユニットは、ＩＲ６０に保持された、Before命令、ＢＣ命令、およびNext命令を順次実行し、分岐命令ＢＣを実行する際に、分岐予測条件と実際の分岐条件とを比較することで、分岐予測結果の成功／不成功を判定する。両者が一致している場合には分岐予測成功と判断し、分岐命令ＢＣを含む以降の命令を実行する。一方、両者が不一致の場合には分岐予測失敗と判断し分岐命令ＢＣを含む以降の命令を破棄し分岐命令ＢＣからの再実行を行う。
【００１６】
【発明が解決しようとする課題】
上述したような従来のプロセッサにおいては、分岐命令の分岐先を予測する場合には分岐命令の実行そのものが予測されている。そこで、本発明は、この点に着目し、分岐命令そのものの実行サイクルを削減することにより、分岐命令の実行速度を高速化し命令実行を高速化することができる、分岐予測による分岐命令高速化方法、およびプロセッサを提供することを目的とする。
【００１７】
【課題を解決するための手段】
上記目的を達成するために本発明の分岐予測による分岐命令高速化方法は、
パイプライン方式のプロセッサにて行われる、分岐予測による分岐命令高速化方法において、
分岐先予測テーブルに、分岐命令の分岐命令アドレス、分岐命令の予測分岐先である分岐先命令の次命令の分岐先次命令アドレス、前記分岐先命令、および分岐予測時の分岐予測条件を格納するステップと、
命令アドレスレジスタに、命令キャッシュから命令を読み出す際に用いる当該命令の命令アドレスを保持させるステップと、
前記命令アドレスレジスタに保持された命令アドレスが前記分岐予測テーブルに格納された前記分岐命令アドレスと一致する分岐命令の命令アドレスである場合、前記分岐予測テーブルに格納された前記分岐先命令を前記分岐命令と差し替えて命令レジスタに保持させると共に、当該分岐先命令を前記分岐予測テーブルに格納された前記分岐予測条件と一緒に実行パイプに流し実行させるステップと、
前記実行パイプに流された前記分岐先命令を実行する際に、前記実行パイプに流された前記分岐予測条件と実際の分岐条件の値とを比較することにより分岐予測の成功／不成功を判断するステップとを有することを特徴とするものである。
【００１８】
この構成では、命令アドレスレジスタに保持された命令アドレスが分岐予測テーブル中の分岐命令アドレスと一致する場合（分岐予測テーブルヒット）、命令レジスタが分岐先命令を分岐命令と差し替えて保持することにより、分岐命令は実行パイプには渡らないことになるため、分岐命令そのものの実行サイクルを削減することが可能となる。
【００１９】
また、前記命令アドレスレジスタに保持された命令アドレスが前記分岐予測テーブルに格納された前記分岐命令アドレスと一致する分岐命令の命令アドレスである場合、
前記命令アドレスレジスタに、前記分岐命令の命令アドレスを保持した次のサイクルで、前記分岐予測テーブルに格納された前記分岐先次命令アドレスを保持させるステップと、
前記命令レジスタに、前記分岐先命令を保持した次のサイクルで、前記命令アドレスレジスタに保持された前記分岐先次命令アドレスにより前記命令キャッシュから読み出した分岐先次命令を保持させると共に、当該分岐先次命令を前記実行パイプに流し実行させるステップとを有することとしても良い。
【００２０】
この構成では、分岐予測テーブルヒット時に、分岐先命令および分岐先次命令を実行パイプに順次流し実行させることが可能となる。
【００２１】
また、前記命令アドレスレジスタに保持された命令アドレスが前記分岐予測テーブルに格納された前記分岐命令アドレスと一致しない場合、前記命令アドレスレジスタに保持された命令アドレスにより前記命令キャッシュから読み出した命令を前記命令レジスタに保持させると共に、当該命令を前記実行パイプに流し実行させるステップを有することとしても良い。
【００２２】
上記目的を達成するために本発明のプロセッサは、
パイプライン方式のプロセッサにおいて、
分岐命令の分岐命令アドレス、分岐命令の予測分岐先である分岐先命令の次命令の分岐先次命令アドレス、前記分岐先命令、および分岐予測時の分岐予測条件を格納する分岐先予測テーブルと、
各種の命令を格納する命令キャッシュと、
前記命令キャッシュから命令を読み出す際に用いる当該命令の命令アドレスを保持する命令アドレスレジスタと、
前記命令アドレスレジスタに保持された命令アドレスが前記分岐予測テーブルに格納された前記分岐命令アドレスと一致する分岐命令の命令アドレスである場合、前記分岐予測テーブルに格納された前記分岐先命令を前記分岐命令と差し替えて保持すると共に、当該分岐先命令を実行パイプに流す命令レジスタと、
前記命令アドレスレジスタに保持された命令アドレスが前記分岐予測テーブルに格納された前記分岐命令アドレスと一致する分岐命令の命令アドレスである場合、前記分岐予測テーブルに格納された前記分岐予測条件を前記分岐先命令と一緒に前記実行パイプに流す分岐予測条件レジスタと、
前記実行パイプに流された前記分岐先命令を実行する際に、前記実行パイプに流された前記分岐予測条件と実際の分岐条件の値とを比較することにより分岐予測の成功／不成功を判断する実行手段とを有することを特徴とするものである。
【００２３】
また、前記命令アドレスレジスタは、前記命令アドレスレジスタに保持された命令アドレスが前記分岐予測テーブルに格納された前記分岐命令アドレスと一致する分岐命令の命令アドレスである場合、前記分岐命令の命令アドレスを保持した次のサイクルで、前記分岐予測テーブルに格納された前記分岐先次命令アドレスを保持し、
前記命令レジスタは、前記命令アドレスレジスタに保持された命令アドレスが前記分岐予測テーブルに格納された前記分岐命令アドレスと一致する分岐命令の命令アドレスである場合、前記分岐先命令を保持した次のサイクルで、前記命令アドレスレジスタに保持された前記分岐先次命令アドレスにより前記命令キャッシュから読み出した分岐先次命令を保持すると共に、当該分岐先次命令を前記実行パイプに流し前記実行手段に実行させることとしても良い。
【００２４】
また、前記命令レジスタは、前記命令アドレスレジスタに保持された命令アドレスが前記分岐予測テーブルに格納された前記分岐命令アドレスと一致しない場合、前記命令アドレスレジスタに保持された命令アドレスにより前記命令キャッシュから読み出した命令を保持すると共に、当該命令を前記実行パイプに流し前記実行手段に実行させることとしても良い。
【００２５】
【発明の実施の形態】
以下に、本発明の実施の形態について図面を参照して説明する。
【００２６】
図１は、本発明の一実施形態によるプロセッサに設けられた分岐予測回路を示す図である。
【００２７】
図１に示すように本発明の一実施形態によるプロセッサに設けられた分岐予測回路は、命令アドレスレジスタ（以下、「ＩＡ」と称する）１と、命令キャッシュ（Icache）２と、分岐予測テーブル５と、命令レジスタ（以下、「ＩＲ」と称する）６と、分岐予測条件レジスタ７とを有している。
【００２８】
分岐予測テーブル５は、分岐命令アドレスを格納する分岐命令アドレスバッファ３と、分岐命令アドレスバッファ３にアドレスが格納された分岐命令の実行結果の予測値として、図２に示すように、分岐先次命令アドレス、分岐先命令、および分岐予測条件を格納する分岐予測バッファ４とから構成される。具体的には、分岐先次命令アドレスとして、分岐命令の予測分岐先である分岐先命令の次命令の命令アドレスを格納し、分岐先命令として、分岐命令の予測分岐先命令そのものを格納し、分岐予測条件として、分岐命令により分岐判定を行うための条件となるフラグの分岐先予測時の値（分岐予測条件値）を格納する。
【００２９】
ＩＡ１は、外部入力される命令アドレスを保持する。なお、ＩＡ１は、分岐命令アドレスバッファ３からの信号により、ＩＡ１のアドレス値が分岐命令アドレスバッファ３に格納されている分岐命令アドレスと一致する（分岐予測テーブルヒット）ことを認識した場合には、分岐予測バッファ４から読み出された分岐先次命令アドレスを選択して保持する。
【００３０】
命令キャッシュ２は、ＩＡ１のアドレス値により読み出される各種の命令を格納する。
【００３１】
ＩＲ６は、ＩＡ１のアドレス値により命令キャッシュ２から読み出された命令を保持し、この命令を不図示の実行パイプに流す。なお、ＩＲ６は、分岐命令アドレスバッファ３からの信号により、分岐予測テーブルヒットを認識した場合には、分岐予測バッファ４から読み出された分岐先命令を選択して保持し、この命令を実行パイプに流す。実行パイプに流された命令は、不図示の実行ユニットにて実行される。
【００３２】
分岐予測条件レジスタ７は、分岐予測テーブルヒット時に、分岐予測バッファ４から読み出された分岐予測条件を保持し、実行パイプに流す。実行パイプに流された分岐予測条件は、不図示の実行ユニットにて分岐先命令実行時に分岐予測の成功／失敗を判断する際に用いられる。
【００３３】
以下に、図１に示したプロセッサの動作について説明する。
【００３４】
ＩＡ１のアドレス値が分岐命令アドレスバッファ３に格納されている分岐命令アドレスと一致しない場合には、従来技術と同様に、ＩＡ１のアドレス値により命令キャッシュ２から命令が読み出され、読み出された命令がＩＲ６に保持され、不図示の実行パイプに流され不図示の実行ユニットにて実行される。
【００３５】
これに対して、ＩＡ１のアドレス値が分岐命令のアドレスであり、その分岐命令の実行結果の予測値が分岐予測バッファ４に格納されている場合、すなわち、ＩＡ１のアドレス値が分岐命令アドレスバッファ３に格納されている分岐命令アドレスと一致する場合には、次のような動作が行われる。
【００３６】
図３を参照すると、例えば、ＩＡ１のアドレス値が分岐命令ＢＣのアドレスであり、この分岐命令ＢＣのアドレスが分岐命令アドレスバッファ３に格納されている場合（分岐予測テーブルヒット）、ＩＡ１は、分岐予測バッファ４から読み出された分岐先命令Next1の次命令Next2の命令アドレスを選択して保持し、ＩＲ６は、分岐予測バッファ４から読み出された分岐先命令Next1自体を保持して実行パイプへと渡し、分岐予測条件レジスタ７は、分岐予測バッファ４から読み出された分岐予測条件を保持して実行パイプへと渡す。
【００３７】
すなわち、ＩＲ６は、分岐予測テーブルヒット時には、分岐命令ＢＣ自体を保持せずに（分岐命令ＢＣはとばされる）、分岐先命令Next1を分岐命令ＢＣと差し替えて保持することになる。
【００３８】
従って、ＩＲ６には、分岐命令ＢＣの直前の命令であるBefore命令の次のサイクルで、分岐命令ＢＣの直後の分岐先命令であるNext1命令が保持されることになり、分岐命令ＢＣ自体は省略され、実行パイプには渡らないことになる。なお、ＩＲ６は、Next1命令を保持した次のサイクルでは、ＩＡ１の分岐先次命令アドレスにより命令キャッシュ２から読み出されたNext2命令を保持し、実行パイプに渡すことになる。
【００３９】
実行ユニットは、ＩＲ６０に保持された、Before命令、Next1命令、およびNext2命令を順次実行し、予測先命令であるNext1命令を実行する際に、分岐予測条件レジスタ７から渡された分岐予測条件と実際の分岐条件とを比較することで、分岐予測結果の成功／不成功を判定する。両者が一致している場合には分岐予測成功と判断し、Next1命令を含む以降の命令を実行する。一方、不一致の場合には分岐予測失敗と判断しNext1命令を含む以降の命令を破棄し分岐命令ＢＣからの再実行を行う。
【００４０】
【発明の効果】
以上説明したように本発明においては、分岐先予測テーブルに、分岐命令アドレス、分岐先次命令アドレス、分岐先命令、および分岐予測条件を格納しておき、命令アドレスレジスタに保持された命令アドレスが分岐予測テーブル中の分岐命令アドレスと一致する場合には（分岐予測テーブルヒット）、分岐予測テーブル中の分岐先命令を分岐命令と差し替えると共に、当該分岐先命令を分岐予測テーブル中の分岐予測条件と一緒に実行パイプに流し実行させる。
【００４１】
それにより、分岐命令そのものは実行パイプには渡らないことになり、分岐命令そのものの実行サイクルを削減することができるため、分岐命令の実行速度を高速化し命令実行を高速化することができる。
【図面の簡単な説明】
【図１】本発明の一実施形態によるプロセッサに設けられた分岐予測回路を示す図である。
【図２】図１に示した分岐予測バッファに格納されるデータを示す図である。
【図３】図１に示したＩＡおよびＩＲの分岐予測ヒット時の動作を説明するタイムチャートである。
【図４】従来のプロセッサに設けられた分岐予測回路の一例を示す図である。
【図５】図４に示したＩＡおよびＩＲの分岐予測ヒット時の動作を説明するタイムチャートである。
【符号の説明】
１    命令アドレスレジスタ（ＩＡ）
２    命令キャッシュ
３    分岐命令アドレスバッファ
４    分岐予測バッファ
５    分岐予測テーブル
６    命令レジスタ（ＩＲ）
７    分岐予測条件レジスタ
【図１】
0003709933.tif 000002
【図２】
0003709933.tif 000003
【図３】
0003709933.tif 000004
【図４】
0003709933.tif 000005
【図５】
0003709933.tif 000006