(57)【要約】【課題】  分岐命令を予測するプリフェッチバッファから命令を効率よくフェッチすることのできるＣＰＵを備えるマイクロプロセッサを提供する。【解決手段】  マイクロプロセッサ１００は、命令を格納するメモリ３と、フェッチした命令をパイプライン処理するＣＰＵ１と、ＣＰＵ１からの要求アドレスおよびそれに後続する複数のアドレスの命令をメモリ３から先読みして格納するプリフェッチバッファ２とを備える。プリフェッチバッファ２は、メモリ３から先読みして格納した命令の中に分岐命令が含まれるかどうかの分岐予測を行って、その分岐予測結果をＣＰＵ１へ通知する。ＣＰＵ１は、プリフェッチバッファ２から通知された分岐予測結果にもとづいてプリフェッチバッファ２からの命令のフェッチを制御する。【選択図】  図１
2007310668.tif 000002
【特許請求の範囲】
【請求項１】
命令を格納したメモリと、フェッチした命令をパイプライン処理するＣＰＵと、前記ＣＰＵからの要求アドレスに対して、前記要求アドレスの命令とともに前記要求アドレスに後続する複数のアドレスの命令も前記メモリから先読みして格納しておき、前記ＣＰＵからのその後の要求アドレスに対応する命令を前記ＣＰＵへ出力するプリフェッチバッファと
を備え、
前記プリフェッチバッファは、
前記ＣＰＵからの要求アドレスを元に分岐予測を行い、分岐が行われると予測した場合には前記メモリから分岐先の命令を含む複数のアドレスの命令を先読みして格納するとともに、前記分岐が行われると予測した命令を前記ＣＰＵがフェッチする際に、その分岐予測結果を前記ＣＰＵへ通知し、
前記ＣＰＵは、
前記プリフェッチバッファから通知された前記分岐予測結果にもとづいて前記プリフェッチバッファからの命令のフェッチを制御する
ことを特徴とするマイクロプロセッサ。
【請求項２】
前記プリフェッチバッファは、
前記ＣＰＵからの要求アドレスが前記分岐命令と予測した命令のアドレスであるときは、前記ＣＰＵが前記要求アドレスの命令をフェッチするときに、その命令が分岐命令であることを予測していることを前記ＣＰＵへ通知し、
前記ＣＰＵは、
前記プリフェッチバッファから分岐命令であるとの予測を通知された命令をフェッチしたときは、前記プリフェッチバッファからの後続の命令のフェッチを停止し、
前記分岐命令であるとの予測を通知された命令が実行された後に、停止していた命令のフェッチを再開する
ことを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項３】
前記ＣＰＵは、
プリフェッチバッファへ命令読み出しの要求アドレスを出力するアドレス生成部と、
前記要求アドレスの命令を前記プリフェッチバッファからフェッチするフェッチ部と、
フェッチした命令をデコードするデコード部と、
デコードした命令を実行する実行部と、
前記フェッチ部のフェッチ動作の停止および再開を制御するフェッチ制御部と、
前記実行部で実行した命令が分岐命令であったかどうかを判定する分岐命令検出部と
を有し、
前記フェッチ制御部は、前記フェッチ部がフェッチした命令に対して前記プリフェッチバッファから分岐命令であるとの予測を通知されたときは、前記フェッチ部へ後続の命令のフェッチを停止するよう指示し、前記フェッチ部がフェッチした命令が前記実行部により実行されたときに、前記フェッチ部へ命令のフェッチを再開するよう指示することを特徴とする請求項２に記載のマイクロプロセッサ。
【請求項４】
前記フェッチ制御部は、前記プリフェッチバッファから分岐命令と予測していることを通知された命令が実行される前に、分岐命令検出部により別の分岐が検出されたとき、もしくは、例外あるいは割り込みの発生があったときは、前記フェッチ部へ命令のフェッチを再開するよう指示することを特徴とする請求項３に記載のマイクロプロセッサ。
【請求項５】
前記プリフェッチバッファは、前記分岐命令検出部から入力される分岐発生情報をもとに分岐履歴を生成し、前記分岐履歴に基づいて前記ＣＰＵからの要求アドレスに対する分岐予測を行うことを特徴とする請求項３に記載のマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサに関し、特に分岐予測を行うプリフェッチバッファおよびこのプリフェッチバッファからの命令をフェッチするＣＰＵを備えるマイクロプロセッサに関する。
【背景技術】
【０００２】
内蔵するフラッシュメモリに実行する命令を格納するマイクロプロセッサでは、フラッシュメモリの読み出し速度が遅いため、先読みした命令を格納しておくプリフェッチバッファを設けることが行われる。ＣＰＵがフラッシュメモリから命令を読み出す場合、一度の命令読み出し動作で、その命令のアドレスに後続する複数のアドレスの命令を先に読み出し、先読みした命令がプリフェッチバッファに格納される。そして、ＣＰＵへはプリフェッチバッファから１つずつ命令を供給し、プリフェッチバッファがＣＰＵへ命令を供給している間に、さらに続きの命令をフラッシュメモリから読み出し、プリフェッチバッファに格納するという動作が行なわれる。これにより、プログラムが順次実行される場合は、ＣＰＵへは命令が途切れることなく供給される。
【０００３】
ところが、プログラム実行中に分岐が発生すると、先読みしてプリフェッチバッファに格納していた命令が使用できず、その時点から新たに分岐先の命令をフラッシュメモリから読み出す必要が生じる。そのため、ＣＰＵからの命令読み出し要求に対する命令の供給が遅くなり、プログラムの実行が遅くなる。
【０００４】
そこで、このような遅れを回避するために、プリフェッチバッファに分岐予測手段を設け、分岐命令が実行されると予測されるときは、分岐先アドレスの命令をフラッシュメモリから先読みすることが行われる（例えば、特許文献１参照。）。
【０００５】
一方、ＣＰＵの命令実行を高速化する手法にパイプライン処理がある。パイプライン処理では、命令のフェッチ、命令のデコード、命令の実行という各ステージの処理を並行に行うことにより、複数の命令が並行に処理される。すなわち、ある命令の実行と、その次の命令のデコードと、その次の次の命令のフェッチが、並行に処理される。
【０００６】
このようなパイプライン処理を行うＣＰＵが、分岐予測を行うプリフェッチバッファにより分岐命令と予測された命令をこのプリフェッチバッファからフェッチした場合、その命令が実際に分岐するかどうかは、その命令が実行ステージに進むまで不明である。
【０００７】
そのため、従来のパイプライン処理を行うＣＰＵでは、プリフェッチバッファにより分岐命令と予測された命令をフェッチした場合、その命令とともにプリフェッチバッファにより先読みされた後続の命令を、その命令に引き続いてフェッチする。
【０００８】
ところが、プリフェッチバッファにより分岐命令と予測された命令が実際に分岐する場合、プリフェッチバッファにより先読みされた後続の命令の中には、実際には使用されない命令が含まれている。しかし、従来は、このような命令もそのままフェッチしていた。
【０００９】
上述したように、従来のパイプライン処理を行うＣＰＵには、分岐予測を行うプリフェッチバッファが分岐命令と予測した命令をこのプリフェッチバッファからフェッチするときに、実行不要な命令までフェッチしてしまい、その分無駄な電力を消費するなどの問題があった。
【特許文献１】特開平８−１０６３８７号公報  （第７ページ、図１０）
【発明の開示】
【発明が解決しようとする課題】
【００１０】
そこで、本発明の目的は、分岐命令を予測するプリフェッチバッファから命令を効率よくフェッチすることのできるＣＰＵを備えるマイクロプロセッサを提供することにある。
【課題を解決するための手段】
【００１１】
本発明の一態様によれば、命令を格納したメモリと、フェッチした命令をパイプライン処理するＣＰＵと、前記ＣＰＵからの要求アドレスに対して、前記要求アドレスの命令とともに前記要求アドレスに後続する複数のアドレスの命令も前記メモリから先読みして格納しておき、前記ＣＰＵからのその後の要求アドレスに対応する命令を前記ＣＰＵへ出力するプリフェッチバッファとを備え、前記プリフェッチバッファは、前記ＣＰＵからの要求アドレスを元に分岐予測を行い、分岐が行われると予測した場合には前記メモリから分岐先の命令を含む複数のアドレスの命令を先読みして格納するとともに、前記分岐が行われると予測した命令を前記ＣＰＵがフェッチする際に、その分岐予測結果を前記ＣＰＵへ通知し、前記ＣＰＵは、前記プリフェッチバッファから通知された前記分岐予測結果にもとづいて前記プリフェッチバッファからの命令のフェッチを制御することを特徴とするマイクロプロセッサが提供される。
【発明の効果】
【００１２】
本発明によれば、ＣＰＵは、プリフェッチバッファからフェッチした命令がプリフェッチバッファにより分岐命令と予測されているときは、その命令に後続する命令のフェッチを停止するので、命令の無駄なフェッチを少なくすることができる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の実施例を図面を参照して説明する。
【実施例】
【００１４】
図１は、本発明の実施例に係るマイクロプロセッサの基本構成を示すブロック図である。
【００１５】
本実施例のマイクロプロセッサ１００は、ＣＰＵ１と、プリフェッチバッファ２と、メモリ３とを備える。
【００１６】
ＣＰＵ１で実行する命令を格納するメモリ３は、例えばフラッシュメモリなどの読み出し速度の遅いメモリである。そこで、一度の読み出し動作で複数の連続した命令を読み出し、読み出し効率の向上を図る。ここでは、読み出しアドレスの入力から命令データの出力までにシステム・クロックの４クロックを要するものとし、１回の読み出し要求に対して４命令を出力するものとする。
【００１７】
プリフェッチバッファ２は、メモリ３から出力された複数の命令を一時格納しておき、ＣＰＵ１からの要求アドレスに一致するアドレスの命令データをＣＰＵ１へ供給する。
【００１８】
また、プリフェッチバッファ２は、メモリ３から出力されて一時格納した命令の中に分岐命令が含まれるかどうかを予測し、分岐命令と予測した命令があるときは、その分岐先と予測されるアドレスの命令をＣＰＵ１からの要求に先立ってメモリから読み出しておく。
【００１９】
プリフェッチバッファ２における分岐予測は、ＣＰＵ１から入力される分岐発生情報を記録した分岐履歴にもとづいて行われる。
【００２０】
さらに、プリフェッチバッファ２は、分岐命令と予測している命令の読み出しの要求をＣＰＵ１から受けたときは、その命令を分岐命令と予測していることを通知する分岐予測通知信号をＣＰＵ１へ出力する。
【００２１】
ＣＰＵ１は、プリフェッチバッファから供給された命令をパイプライン処理する。図２に、そのパイプライン処理の様子を示す。
【００２２】
ＣＰＵ１は、システム・クロックの１クロックごとに、命令のフェッチ、フェッチした命令のデコード、デコードした命令の実行、という各ステージの処理が実行される。この各ステージの処理は並行して実行されるので、先に入力された命令１がデコードされているときに、次の命令２がフェッチされ、この命令２がデコードされているときに、さらに次の命令３がフェッチされる。
【００２３】
次に、このようなパイプライン処理を行うＣＰＵ１に対して、プリフェッチバッファ２から分岐予測通知信号が出力されたときの動作を説明する。
【００２４】
図３は、プリフェッチバッファ２から分岐予測通知信号が出力されたときのＣＰＵ１のパイプラインの各ステージの動作の様子を示す図である。
【００２５】
プリフェッチバッファ２が分岐を予測している命令をＣＰＵ１がフェッチしたときに、プリフェッチバッファ２は、ＣＰＵ１に対して、分岐予測通知信号を出力する。
【００２６】
分岐予測通知信号が入力されると、ＣＰＵ１は、命令のフェッチ動作を停止する。これにより、プリフェッチバッファ２に格納されている後続の命令は、ＣＰＵ１にフェッチされない。
【００２７】
一方、ＣＰＵ１にフェッチされた、プリフェッチバッファ２により分岐が予測されている命令は、その後、デコードされ、実行される。この命令の実行が終了すると、ＣＰＵ１は、プリフェッチバッファ２により分岐が予測されている命令の実行が終了したことを示す、実行終了フラグを立てる。
【００２８】
実行終了フラグが立つと、ＣＰＵ１は、命令のフェッチを再開する。このとき、プリフェッチバッファ２による予測通り、分岐が発生したときは、プリフェッチバッファ２が予測してメモリ１から読み出しておいた分岐先の命令が使用できるので、この分岐先の命令が直ちにプリフェッチバッファ２から供給され、ＣＰＵ１にフェッチされる。
【００２９】
上述したように、本実施例のＣＰＵ１は、プリフェッチバッファ２から分岐予測通知信号が入力されると、命令のフェッチ動作を停止する。これにより、分岐が発生したときにはフェッチする必要のない、プリフェッチバッファ２に格納されている後続の命令を無駄にフェッチすることを防止することができる。
【００３０】
このプリフェッチバッファ２から分岐予測通知信号が出力されたときの本実施例のマイクロプロセッサの動作を図４〜６を用いてさらに詳しく説明する。
【００３１】
図４は、プリフェッチバッファ２の内部構成の例を示すブロック図である。
【００３２】
分岐履歴生成部２１は、ＣＰＵ１から入力された分岐発生情報にもとづいて、分岐発生アドレスと分岐先アドレスを１組のエントリ情報とした分岐履歴を生成し保存する。
【００３３】
分岐予測部２２は、ＣＰＵ１から入力された要求アドレスと分岐履歴生成部２１に保存されている分岐履歴とを照合し、この要求アドレスに基づいてメモリ３から読み出される複数の命令の中に分岐命令が含まれるかどうかを予測する。分岐命令が含まれると予測されたときは、その分岐先のアドレスを分岐履歴の該当のエントリ情報から抽出し、予測分岐先アドレス格納部２３へ出力する。
【００３４】
また、分岐予測部２２は、ＣＰＵ１から入力された要求アドレスが分岐命令と予測した命令のアドレスであるときは、分岐予測通知信号をＣＰＵ１へ出力する。
【００３５】
分岐予測部２２は、分岐予測部２２から出力された予測分岐先アドレスを格納する。
【００３６】
アドレス選択部２４は、分岐予測部２２により分岐が予測されたときは、分岐予測部２２に格納された予測分岐先アドレスを読み出しアドレスとしてメモリ３へ出力する。それ以外のときは、ＣＰＵ１からの要求アドレスにもとづいてメモリ３への読み出しアドレスを出力する。
【００３７】
命令バッファ２５は、メモリ３から読み出された複数の命令データを一時格納する。
【００３８】
命令選択部２６は、命令バッファ２５に格納された命令データの中から、ＣＰＵ１の要求アドレスに一致するアドレスの命令データをＣＰＵ１へ出力する。
【００３９】
図５は、ＣＰＵ１の内部構成の例を示すブロック図である。
【００４０】
アドレス生成部１１は、命令の読み出しを要求するアドレスを生成し、プリフェッチバッファ２へ要求アドレスとして出力する。アドレス生成部１１は、分岐命令検出部１８より分岐検出信号が入力された場合には、分岐先のアドレスを生成し、そうでない場合は、前回フェッチを行ったアドレスを単純にインクリメントしたアドレスを生成する。
【００４１】
フェッチ部１２は、パイプライン処理のフェッチステージに当たり、プリフェッチバッファ２から入力された命令データをフェッチする。
【００４２】
デコード部１３は、パイプライン処理のデコードテージに当たり、フェッチ部１２にフェッチされた命令データをデコードする。
【００４３】
実行部１４は、パイプライン処理の実行ステージに当たり、デコード部１３でデコードされた命令を実行する。
【００４４】
このフェッチ部１２、デコード部１３、実行部１４には、レジスタ１５、レジスタ１６、レジスタ１７が、それぞれ併設されている。
【００４５】
レジスタ１５へは、プリフェッチバッファ２からの分岐予測通知信号が入力される。レジスタ１５へ入力された分岐予測通知信号は、レジスタ１６、レジスタ１７へ順次転送される。この転送される分岐予測通知信号は、分岐予測通知信号とともにプリフェッチバッファ２から入力された分岐命令と予測されている命令の処理済みステージを示すフラグとして用いられる。したがって、レジスタ１７の出力は、分岐命令と予測されている命令の実行終了フラグに相当する。
【００４６】
分岐命令検出部１８は、実行部１４で実行された命令で分岐が発生したかどうかを検出する。分岐が発生ししたときは、分岐発生アドレスと分岐先アドレスを分岐発生情報としてプリフェッチバッファ２へ出力する。また、分岐が発生したときは、分岐先アドレスの生成をアドレス生成部１１へ指示する。
【００４７】
フェッチ制御部１９は、フェッチ部１２のフェッチ動作の停止および再開を制御する。プリフェッチバッファ２から分岐予測通知信号が入力されると、フェッチ制御部１９は、フェッチ部１２へフェッチ動作の停止を指示する。その後、レジスタ１７に実行終了フラグが出力されると、フェッチ制御部１９は、フェッチ部１２へフェッチ動作の再開を指示するとともに、アドレス生成部１１へ、フェッチを停止した時点のアドレスをインクリメントしてフェッチを再開することを指示するフェッチ再開信号を出力する。
【００４８】
また、レジスタ１７に実行終了フラグが出力される前に、分岐命令検出部１８から分岐検出を示す信号が出力されたとき、もしくは、例外あるいは割り込みの発生があったときも、フェッチ制御部１９は、フェッチ部１２へフェッチ動作の再開を指示する。
【００４９】
図６は、図４に示したプリフェッチバッファ２および図５に示したＣＰＵ１を用いたマイクロプロセッサのフェッチ制御動作の様子を示す動作波形図である。ここで、メモリ３の命令データの読み出しにはシステム・クロックの４クロックを要するものとし、１回の読み出し要求に対してメモリ３から４命令が出力されるものとする。また、システム・クロックのサイクル番号をｃ１、ｃ２、ｃ３、・・・と表すものとする。
【００５０】
いま、ｃ１でＣＰＵ１から要求アドレスＡ０が出力され、プリフェッチバッファ２がメモリ３へ読み出しアドレスＡ０を出力したとする。
【００５１】
このアドレスＡ０に対してプリフェッチバッファ２の分岐予測部２２が分岐予測した結果、分岐命令と予測され、その分岐先アドレスがＡ１２と判明したとすると、この分岐先アドレスＡ１２は予測分岐先アドレス格納部２３に格納される。
【００５２】
プリフェッチバッファ２から出力された読み出しアドレスＡ０に対して、メモリ３は、４クロック後のｃ５で、命令データＤ０〜Ｄ３を出力する。この命令データＤ０〜Ｄ３は、プリフェッチバッファ２に格納される。
【００５３】
また、このｃ５で、プリフェッチバッファ２は、予測分岐先アドレス格納部２３に格納されているアドレスＡ１２を、次の読み出しアドレスとして、メモリ３へ出力する。
【００５４】
同じくｃ５で、プリフェッチバッファ２に格納された命令データＤ０〜Ｄ３の中から、ＣＰＵ１からの要求アドレスＡ０に対する命令データＤ０がＣＰＵ１へ出力され、ＣＰＵ１のフェッチ部１２にフェッチされる。
【００５５】
このとき、プリフェッチバッファ２は、ＣＰＵ１に対して、分岐予測通知信号を出力する。
【００５６】
分岐予測通知信号の入力を受けて、ＣＰＵ１のフェッチ制御部１９は、フェッチ部１２へフェッチ動作の停止を指示する。その結果、プリフェッチバッファ２に格納されている命令データＤ０〜Ｄ３のうち、命令データＤ３は、フェッチ部１２にフェッチされない。
【００５７】
一方、ｃ５でフェッチ部１２にフェッチされた命令データＤ０は、ｃ６でデコード部１３によりデコードされ、ｃ７で実行部１４により実行される。その結果、ｃ８で、ＣＰＵ１のレジスタ１７から実行終了フラグが出力される。この実行終了フラグの出力を受けて、フェッチ制御部１９は、フェッチ部１２へフェッチ動作の再開を指示する。
【００５８】
また、ｃ７での命令データＤ０の実行の結果、プリフェッチバッファ２の予測通り分岐が発生し、その分岐先アドレスがＡ１２であったとすると、ＣＰＵ１は、ｃ８で、要求アドレスＡ１２を出力する。
【００５９】
次に、ｃ９で、メモリ３から、先にｃ５で入力された読み出しアドレスＡ１２に対する命令データＤ１２〜Ｄ１５が出力される。
【００６０】
このとき、プリフェッチバッファ２による分岐予測が当たっており、また、ＣＰＵ１のフェッチ部１２のフェッチ動作が再開しているので、メモリ３から出力された命令データＤ１２〜Ｄ１５のうち、命令データＤ１２が、直ちにＣＰＵ１のフェッチ部１２にフェッチされる。
【００６１】
このような本実施例によれば、プリフェッチバッファにおいて分岐予測を行い、分岐が予測される命令をＣＰＵがフェッチしたときに、分岐予測通知信号をＣＰＵへ出力する。この分岐予測通知信号の入力を受けて、ＣＰＵは後続の命令のフェッチ動作を停止する。これにより、ＣＰＵは、フェッチした命令が分岐命令と予測されるときは、プリフェッチバッファに格納されている命令の中で、分岐が発生したときにはフェッチする必要のない命令をフェッチしなくて済み、無駄なフェッチ動作を減らすことができる。その結果、マイクロプロセッサの消費電力を低減させることができる。
【図面の簡単な説明】
【００６２】
【図１】本発明の実施例に係るマイクロプロセッサの基本構成を示すブロック図。
【図２】本発明の実施例に係るマイクロプロセッサのＣＰＵのパイプライン処理を説明するための図。
【図３】本発明の実施例に係るマイクロプロセッサの動作を説明するための図。
【図４】本発明の実施例に係るマイクロプロセッサのプリフェッチバッファの構成の例を示すブロック図。
【図５】本発明の実施例に係るマイクロプロセッサのＣＰＵの構成の例を示すブロック図。
【図６】本発明の実施例に係るマイクロプロセッサの動作波形図。
【符号の説明】
【００６３】
１  ＣＰＵ
２  プリフェッチバッファ
３  メモリ
１１  アドレス生成部
１２  フェッチ部
１３  デコード部
１４  実行部
１５〜１７  レジスタ
１８  分岐命令検出部
１９  フェッチ制御部
２１  分岐履歴生成部
２２  分岐予測部
２３  分岐予測先アドレス格納部
２４  アドレス選択部
２５  命令バッファ
２６  命令選択部
１００  マイクロプロセッサ
【図１】
2007310668.tif 000003
【図２】
2007310668.tif 000004
【図３】
2007310668.tif 000005
【図４】
2007310668.tif 000006
【図５】
2007310668.tif 000007
【図６】
2007310668.tif 000008