(57)【要約】【課題】  予測した分岐がプログラムのループ実行に伴う分岐であるかどうかを判定することのできる分岐予測付きプリフェッチバッファを提供する。【解決手段】  プリフェッチアドレスを格納するプリフェッチアドレスレジスタ１と、フラッシュメモリから読み出された命令データを格納する命令バッファ２と、分岐命令の実行履歴を格納する分岐履歴格納部３と、分岐履歴を解析し、分岐命令の実行が予想されるプリフェッチアドレスに対してその分岐先アドレスを予測する分岐先アドレス予測部４と、予測された分岐先アドレスを格納する分岐先アドレスレジスタ５と、実行が予想される分岐命令がプログラムのループ実行によるものであるかどうかを判定するループ判定部６と、ループ判定結果にもとづき、フラッシュメモリからの命令の読み出しを制御するメモリ読み出し制御部７および命令バッファ２の書き換えを制御する命令バッファ書き換え制御部８と、を有する。【選択図】  図１
2007286739.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵからメモリへの読み出し要求アドレスを含む連続する所定数のアドレスをプリフェッチアドレスとして格納するプリフェッチアドレス格納手段と、
前記メモリから読み出された前記プリフェッチアドレスの命令をそのアドレスデータとともに格納する命令バッファと、
前記ＣＰＵにおいて過去に実行された分岐命令の分岐履歴を解析し、前記プリフェッチアドレス格納手段に格納されている前記プリフェッチアドレスの中に分岐命令の実行が予想されるアドレスが含まれる場合は、その分岐先アドレスを前記分岐履歴から予測する分岐先アドレス予測手段と、
前記分岐先アドレス予測手段により予測された分岐先アドレスを格納する分岐先アドレス格納手段と、
前記命令バッファに格納されている前記アドレスデータおよび前記プリフェッチアドレス格納手段に格納されている前記プリフェッチアドレスを前記分岐先アドレス格納手段に格納されている前記分岐先アドレスと照合した結果にもとづき、前記実行が予想される分岐命令がプログラムのループ実行による分岐命令であるかどうかを判定するループ判定手段と、
前記ループ判定手段の判定結果にもとづき前記メモリからの命令の読み出しを制御するメモリ読み出し制御手段と、
前記ループ判定手段の判定結果にもとづき前記命令バッファの書き換えを制御する命令バッファ書き換え制御手段と
を有することを特徴とする分岐予測付きプリフェッチバッファ。
【請求項２】
前記ループ判定手段は、前記命令バッファに格納されている前記アドレスデータの中に前記分岐先アドレス格納手段に格納されている前記分岐先アドレスと一致するものがあるときに、前記実行が予想される分岐命令がプログラムのループ実行による分岐命令であると判定することを特徴とする請求項１に記載の分岐予測付きプリフェッチバッファ。
【請求項３】
前記ループ判定手段は、さらに、前記プリフェッチアドレス格納手段に格納されている前記プリフェッチアドレスの中に前記分岐先アドレス格納手段に格納されている前記分岐先アドレスと一致するものがあり、かつ、前記分岐命令の実行が予想されるアドレスの値が前記分岐先アドレスの値以上であるときに、前記実行が予想される分岐命令がプログラムのループ実行による分岐命令であると判定することを特徴とする請求項２に記載の分岐予測付きプリフェッチバッファ。
【請求項４】
前記メモリ読み出し制御手段は、前記ループ判定手段が前記実行が予想される分岐命令がプログラムのループ実行による分岐命令であると判定したときは、前記メモリからの命令の読み出しを禁止することを特徴とする請求項１乃至３のいずれか１項に記載の分岐予測付きプリフェッチバッファ。
【請求項５】
前記命令バッファ書き換え制御手段は、前記ループ判定手段が前記実行が予想される分岐命令がプログラムのループ実行による分岐命令であると判定したときは、前記命令バッファの書き換えを行わないことを特徴とする請求項１乃至３のいずれか１項に記載の分岐予測付きプリフェッチバッファ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサに内蔵のメモリから先読みした命令を格納するプリフェッチバッファに関し、特に分岐命令の分岐先アドレスの予測結果にもとづいてメモリの読み出しアドレスを制御する分岐予測付きプリフェッチバッファに関する。
【背景技術】
【０００２】
内蔵するフラッシュメモリに実行する命令を格納するマイクロプロセッサでは、フラッシュメモリの読み出し速度が遅いため、先読みした命令を格納しておくプリフェッチバッファを設けることが行われる。ＣＰＵがフラッシュメモリから命令を読み出す場合、一度の命令読み出し動作で、その命令のアドレスに後続する複数のアドレスの命令を先に読み出し、先読みした命令がプリフェッチバッファに格納される。そして、ＣＰＵへはプリフェッチバッファから１つずつ命令を供給し、プリフェッチバッファがＣＰＵへ命令を供給している間に、さらに続きの命令をフラッシュメモリから読み出し、プリフェッチバッファに格納するという動作が行なわれる。これにより、プログラムが順次実行される場合は、ＣＰＵへは命令が途切れることなく供給される。
【０００３】
ところが、プログラム実行中に分岐が発生すると、先読みしてプリフェッチバッファに格納していた命令が使用できず、その時点から新たに分岐先の命令をフラッシュメモリから読み出す必要が生じる。そのため、ＣＰＵからの命令読み出し要求に対する命令の供給が遅くなり、プログラムの実行が遅くなる。
【０００４】
そこで、このような遅れを回避するために、プリフェッチバッファに分岐予測手段を設け、分岐先アドレスを予め設定しておき、分岐予測が当たった場合、この予め設定した分岐先アドレスの命令をフラッシュメモリから読み出すことが行われる（例えば、特許文献１参照。）。
【０００５】
しかし、上述の方法では、プログラム実行中の分岐がプログラムのループ実行に伴う分岐の場合、分岐予測による分岐先アドレスとして同じアドレスが繰り返し設定される。その結果、分岐先アドレスが設定される都度、そのアドレスの命令をフラッシュメモリから読み出してＣＰＵへ供給するため、プログラムの実行が遅れるという問題があった。また、フラッシュメモリから同じ命令を繰り返し読み出すことに伴って消費電力が増加するという問題があった。
【特許文献１】特開平８−１０６３８７号公報  （第７ページ、図１０）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
そこで、本発明の目的は、予測した分岐がプログラムのループ実行に伴う分岐であるかどうかを判定することのできる分岐予測付きプリフェッチバッファを提供することにある。
【課題を解決するための手段】
【０００７】
本発明の一態様によれば、ＣＰＵからメモリへの読み出し要求アドレスを含む連続する所定数のアドレスをプリフェッチアドレスとして格納するプリフェッチアドレス格納手段と、前記メモリから読み出された前記プリフェッチアドレスの命令をそのアドレスデータとともに格納する命令バッファと、前記ＣＰＵにおいて過去に実行された分岐命令の分岐履歴を解析し、前記プリフェッチアドレス格納手段に格納されている前記プリフェッチアドレスの中に分岐命令の実行が予想されるアドレスが含まれる場合は、その分岐先アドレスを前記分岐履歴から予測する分岐先アドレス予測手段と、前記分岐先アドレス予測手段により予測された分岐先アドレスを格納する分岐先アドレス格納手段と、前記命令バッファに格納されている前記アドレスデータおよび前記プリフェッチアドレス格納手段に格納されている前記プリフェッチアドレスを前記分岐先アドレス格納手段に格納されている前記分岐先アドレスと照合した結果にもとづき、前記実行が予想される分岐命令がプログラムのループ実行による分岐命令であるかどうかを判定するループ判定手段と、前記ループ判定手段の判定結果にもとづき前記メモリからの命令の読み出しを制御するメモリ読み出し制御手段と、前記ループ判定手段の判定結果にもとづき前記命令バッファの書き換えを制御する命令バッファ書き換え制御手段とを有することを特徴とする分岐予測付きプリフェッチバッファが提供される。
【発明の効果】
【０００８】
本発明によれば、予測した分岐がプログラムのループ実行に伴う分岐であるかどうかを判定し、そのプログラムのループがプリフェッチ済みの命令へのループであるときは、そのプリフェッチ済みの命令をそのままバッファに保持してＣＰＵへ供給するので、命令の読み出し遅れのないプログラムの実行が可能となる。
【０００９】
また、そのとき、メモリからの命令の読み出しを禁止するので、メモリの読み出し回数を削減でき、メモリの消費電力を低減することができる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の実施例を図面を参照して説明する。
【実施例１】
【００１１】
図１は、本発明の実施例１に係る分岐予測付きプリフェッチバッファの要部の構成の例を示すブロック図である。本実施例の分岐予測付きプリフェッチバッファは、命令を格納するフラッシュメモリを内蔵するマイクロプロセッサにおいて、ＣＰＵとフラッシュメモリの間に設置されるものである。
【００１２】
本実施例の分岐予測付きプリフェッチバッファは、ＣＰＵからフラッシュメモリへの読み出し要求アドレスを先頭に連続する所定数のアドレスをプリフェッチアドレスとして格納するプリフェッチアドレスレジスタ１と、フラッシュメモリから読み出されたプリフェッチアドレスの命令をそのアドレスデータとともに格納する命令バッファ２と、ＣＰＵにおいて過去に実行された分岐命令の分岐履歴を格納する分岐履歴格納部３と、分岐履歴格納部３に格納されている分岐履歴を解析し、プリフェッチアドレスレジスタ１に格納されているプリフェッチアドレスの中に分岐命令の実行が予想されるアドレスが含まれる場合は、その分岐先アドレスを予測する分岐先アドレス予測部４と、分岐先アドレス予測部４により予測された分岐先アドレスを格納する分岐先アドレスレジスタ５と、を有する。
【００１３】
さらに、本実施例の分岐予測付きプリフェッチバッファは、分岐先アドレス予測部４の解析により実行が予想される分岐命令がプログラムのループ実行による分岐命令であるかどうかを判定するループ判定部６と、ループ判定部６の判定結果にもとづきフラッシュメモリからの命令の読み出しを制御するメモリ読み出し制御部７と、ループ判定部６の判定結果にもとづき命令バッファ２の書き換えを制御する命令バッファ書き換え制御部８と、を有する。
【００１４】
また、本実施例の分岐予測付きプリフェッチバッファは、フラッシュメモリへの読み出し要求アドレスにプリフェッチアドレスの数に等しい所定数を加算する所定数加算器１０と、所定数加算器１０の出力をフラッシュメモリから次に読み出す命令の先頭アドレスとして格納する先頭アドレスレジスタ１１と、フラッシュメモリへの読み出し要求アドレスを、ＣＰＵからの命令アドレスとするか、先頭アドレスレジスタ１１に格納されている先頭アドレスとするか、分岐先アドレスレジスタ５に格納されている分岐先アドレスとするかを選択するセレクタ１２と、フラッシュメモリからの命令データあるいは命令バッファに格納されている命令の中から、ＣＰＵからの命令アドレスに該当する命令を選択してＣＰＵへの命令データとして出力する出力制御部１３と、を有する。
【００１５】
プリフェッチアドレスレジスタ１に格納されるプチフェッチアドレスの所定数は、一度の命令読み出し動作でフラッシュメモリから読み出される命令の数に相当する。
【００１６】
命令バッファ２は、一度の命令読み出し動作でフラッシュメモリから読み出される命令を１つの単位として格納する複数のサブバッファから構成される。図１では、命令バッファ２が、命令バッファ２Ａ、命令バッファ２Ｂという２つのサブバッファから構成されている例を示す。なお、このサブバッファの個数は、２個に限られるものではなく、任意の個数とすることができる。
【００１７】
分岐履歴格納部３へは、ＣＰＵでプログラムの実行中に分岐が発生すると、分岐発生アドレスがＣＰＵから入力される。分岐履歴格納部３は、分岐発生アドレスがＣＰＵから入力されるごとに、そのときのＣＰＵからの命令アドレスを分岐先アドレスとして、分岐発生アドレスと分岐先アドレスを１組のエントリ情報とする分岐履歴を生成し、順次格納する。
【００１８】
分岐先アドレス予測部４は、プリフェッチアドレスレジスタ１に格納されているプリフェッチアドレスを、分岐履歴格納部３に格納されているエントリ情報に含まれる分岐発生アドレスと照合する。プリフェッチアドレスと一致する分岐発生アドレスがあった場合は、分岐発生予想信号を出力するとともに、そのエントリ情報に記載されている分岐先アドレスの命令が次に実行されると予測されるので、そのエントリ情報に記載されている分岐先アドレスを今後実行が予想される分岐命令の予測される分岐先アドレスとして出力する。
【００１９】
本実施例のループ判定部６は、分岐先アドレス予測部４から分岐発生予想信号が出力されたときに、命令バッファ２に格納されているアドレスデータを分岐先アドレスレジスタ５に格納されている分岐先アドレスと照合し、その結果にもとづいて、今後実行が予想される分岐命令が、プログラムのループ実行による分岐命令であるかどうかを判定する。
【００２０】
ここで、プログラムのループ実行とは、一連の命令実行中に、分岐命令により、現在の命令アドレスから、現在の命令アドレスよりもアドレス値の小さい過去に実行した命令アドレスに戻って、その戻ったアドレスから同じ命令を再度実行することをいう。
【００２１】
図２は、ループ判定部６の構成の例を示すブロック図である。
【００２２】
ループ判定部６は、命令バッファ２Ａに格納されているアドレスの中に分岐先アドレスレジスタ５に格納されている分岐先アドレスと一致するものがあるかどうかを比較する比較器６１と、命令バッファ２Ｂに格納されているアドレスの中に分岐先アドレスレジスタ５に格納されている分岐先アドレスと一致するものがあるかどうかを比較する比較器６２と、を有する。
【００２３】
ループ判定部６は、分岐先アドレス予測部４から分岐発生予想信号が出力され、かつ比較器６１あるいは比較器６２のいずれかが「一致あり」との結果を出力したときに、今後実行が予想される分岐命令がプログラムのループ実行による分岐命令であると判定し、これを「ループ判定」信号として出力する。
【００２４】
ループ判定部６が「ループ判定」信号を出力するということは、今後実行が予想される分岐先命令が既に命令バッファに格納されていることを意味する。すなわち、今後実行が予想される分岐先命令を、改めてフラッシュメモリから読み出す必要がなく、また、その分岐先命令を格納している命令バッファを書き換える必要がないことを意味する。
【００２５】
そこで、ループ判定部６から「ループ判定」信号が出力されると、メモリ読み出し制御部７は、フラッシュメモリ読み出し制御信号により、フラッシュメモリからの命令の読み出しを禁止する。また、命令バッファ書き換え制御部８は、分岐先命令を格納している命令バッファの書き換えを行わないように制御する。
【００２６】
次に、本実施例の分岐予測付きプリフェッチバッファの動作について図３〜６を用いて説明する。
【００２７】
図３は、分岐が発生しないときの動作の例を示す波形図である。なお、以降の説明では、フラッシュメモリの読み出しには４クロックを要し、一度の命令読み出し動作でフラッシュメモリから読み出される命令の数が４であるものとする。したがって、この場合、プリフェッチアドレスレジスタ１および所定数加算器１０で用いられる所定数は４となる。また、クロックのサイクル番号（ｃ１、ｃ２、・・・）を用いて動作の説明を行なう。
【００２８】
ｃ１で、ＣＰＵからの命令アドレスＡ０が入力されると、読み出し制御部７は、セレクタ１２を制御してこのアドレスＡ０をフラッシュメモリへの読み出し要求アドレスとして選択し、フラッシュメモリの読み出し制御信号をアクティブ（‘Ｈ’レベル）にする。これにより、フラッシュメモリからの命令の読み出しが開始される。
【００２９】
ｃ２で、プリフェッチアドレスレジスタ１にプリフェッチアドレスＡ０〜Ａ３が格納され、先頭アドレスレジスタ１１にＡ０に４を加算したアドレスＡ４が格納される。
【００３０】
ｃ５で、フラッシュメモリからの命令データが読み出され、アドレスＡ０の命令データは、そのままＣＰＵへの命令データとして出力制御部１３から出力される。
【００３１】
ｃ６で、命令バッファ２Ａに、アドレスＡ０〜Ａ３の命令データＤ０〜Ｄ３が、アドレスデータとともに格納される。ＣＰＵの命令が順次実行されているので、ｃ６以降、命令バッファ２Ａに格納された命令データＤ１〜Ｄ３が、出力制御部１３を介して、ＣＰＵへ順次供給される。
【００３２】
一方、ｃ５で、読み出し制御部７は、セレクタ１２を制御して、先頭アドレスレジスタ１１に格納されているアドレスＡ４をフラッシュメモリへの読み出し要求アドレスとして選択し、フラッシュメモリの読み出し制御信号をアクティブにする。
【００３３】
この読み出し要求に対して、ｃ９で、命令データＤ４〜Ｄ７がフラッシュメモリから読み出され、命令データＤ４は、そのままＣＰＵへの命令データとして出力制御部１３から出力される。
【００３４】
続いて、ｃ１０で、命令データＤ４〜Ｄ７が、アドレスデータＡ４〜Ａ７とともに命令バッファ２Ｂに格納される。命令バッファ２Ａに格納された命令データＤ４〜Ｄ７は、出力制御部１３を介して、ｃ１０以降、ＣＰＵへ順次供給される。
【００３５】
このように、プログラムが順次実行される場合は、ＣＰＵへの命令データの供給は、途切れることなく実行される。
【００３６】
次に、分岐の発生が予想されるときの動作について説明する。
【００３７】
プログラムの実行中に分岐命令が実行されると、分岐履歴格納部３に分岐履歴が格納される。図４に、分岐履歴格納部３に格納された分岐履歴の例を示す。分岐履歴は、分岐発生アドレスと分岐先アドレスを１組としたエントリ情報を１つの単位として記載されている。
【００３８】
図４には、分岐発生アドレスＡ７と分岐先アドレスＡ１を１組としたエントリ情報１と、分岐発生アドレスＡ３と分岐先アドレスＡ１２を１組としたエントリ情報２の例を示す。
【００３９】
エントリ情報１は、プログラムのループ実行に伴って発生した分岐の履歴であり、アドレスＡ７で分岐命令が実行され、その分岐先が分岐発生アドレスＡ７より小さい値のＡ１、すなわち既に実行済みの命令アドレスＡ１であることを示している。
【００４０】
一方、エントリ情報２は、分岐発生アドレスのアドレス値より分岐先アドレスのアドレス値が大きい分岐、すなわちジャンプ命令など、プログラムのループ実行を伴わない命令の実行によって発生した分岐の履歴を示している。
【００４１】
図５は、図４に示したエントリ情報１に記載された分岐と同じ分岐、すなわちプログラムのループ実行に伴う分岐が、今後発生すると予想されるときの本実施例の動作の例を示す波形図である。
【００４２】
いま、ｃ１で、フラッシュメモリへの読み出し要求アドレスＡ4が出力されたとする。また、このとき、フラッシュメモリからは、先行の読み出し要求により読み出された命令Ｄ０〜Ｄ３が出力されるものとする。
【００４３】
ｃ２で、プリフェッチアドレスレジスタ１にプリフェッチアドレスＡ４〜Ａ７が格納される。分岐先アドレス予測部４は、このプリフェッチアドレスＡ４〜Ａ７を分岐履歴格納部３に格納されている分岐履歴と比較する。その結果、プリフェッチアドレスの中のアドレスＡ7が、エントリ情報１に記載されている分岐発生アドレスと一致するため、分岐発生予想信号を出力するとともに、エントリ情報１に記載されている分岐先アドレスＡ１を出力する。
【００４４】
また、ｃ１でフラッシュメモリから読み出された命令Ｄ０〜Ｄ３は、そのアドレスＡ０〜Ａ３とともに、命令バッファ２Ａに格納されるものとする。
【００４５】
ｃ３で、分岐先アドレス予測部から出力された分岐先アドレスＡ１は、分岐先アドレスレジスタ５に格納される。
【００４６】
分岐先アドレス予測部４から分岐発生予想信号が出力されたのを受けて、ループ判定部６は、ループ判定のための動作を行なう。その結果、ループ判定部６の比較器６１が、分岐先アドレスレジスタ５に格納されている分岐先アドレスＡ１が命令バッファ２Ａに格納されているアドレスＡ１と一致することを検出する。
【００４７】
これにより、ｃ４で、ループ判定部６は、予想される分岐命令がプログラムのループ動作によるものを示す「ループ判定」信号を出力する。
【００４８】
ループ判定部６から「ループ判定」信号が出力されたのを受けて、メモリ読み出し制御部７は、通常ｃ５で‘Ｈ’を出力するフラッシュメモリの読み出し制御信号を‘Ｌ’のままとして、フラッシュメモリの読み出しを禁止する。また、命令バッファ書き換え制御部８は、命令バッファ２Ａの書き換えを行わないようにする。その結果、命令バッファ２Ａには、命令Ｄ０〜Ｄ３がそのまま保持される。
【００４９】
ｃ５で、フラッシュメモリから命令データＤ４〜Ｄ７が読み出され、ｃ６で、命令バッファ２Ｂに格納される。命令バッファ２Ｂに格納された命令データは、ｃ１１で使い終わるが、命令バッファ書き換え制御部８が、命令バッファ２Ｂの書き換えも行わないように制御するので、命令バッファ２Ｂに格納された命令データＤ４〜Ｄ７もそのまま保持される。
【００５０】
ｃ１１で、アドレスＡ７の命令が実行され、予想通り、アドレスＡ７への分岐命令であると、ｃ１２でＣＰＵからの命令アドレスＡ１が出力されたときに、出力制御部１３は、命令バッファ２Ａに格納されている命令データＡ１を選択して、次のサイクルのｃ１２でＣＰＵへ供給する。これにより、ＣＰＵは、プログラムのループ実行に遅延を生じさせることなく、命令を実行することができる。
【００５１】
一方、プログラムのループ実行を伴わない命令の実行によって発生した分岐の場合は、次のように動作する。
【００５２】
図６は、図４に示したエントリ情報２に記載された分岐と同じ分岐、すなわちプログラムのループ実行を伴わない命令の実行によって発生した分岐が、今後発生すると予想されるときの本実施例の動作の例を示す波形図である。
【００５３】
この例では、ｃ１で、フラッシュメモリへの読み出し要求アドレスＡ０が出力される。
【００５４】
ｃ２で、プリフェッチアドレスレジスタ１にプリフェッチアドレスＡ０〜Ａ３が格納される。分岐先アドレス予測部４は、このプリフェッチアドレスＡ０〜Ａ３を分岐履歴格納部３に格納されている分岐履歴と比較する。その結果、この例においても、プリフェッチアドレスの中のアドレスＡ３が、エントリ情報２に記載されている分岐発生アドレスと一致するため、分岐先アドレス予測部４は、分岐発生予想信号を出力するとともに、エントリ情報２に記載されている分岐先アドレスＡ１２を出力する。
【００５５】
ｃ３で、分岐先アドレス予測部から出力された分岐先アドレスＡ1２は、分岐先アドレスレジスタ５に格納される。
【００５６】
分岐先アドレス予測部４から分岐発生予想信号が出力されたのを受けて、ループ判定部６は、ループ判定のための動作を行なう。しかし、この例では、分岐先アドレスレジスタ５に格納されている分岐先アドレスＡ１２に該当するアドレスは、命令バッファ２Ａ、命令バッファ２Ｂのいずれにも格納されていない。そのため、ループ判定部６は、「ループ判定」信号を出力しない。
【００５７】
ループ判定部６から「ループ判定」信号が出力されないので、ｃ５で、メモリ読み出し制御部７は、フラッシュメモリの読み出し制御信号を‘Ｈ’とする。また、セレクタ１２を制御して、分岐先アドレスレジスタ５に格納されている分岐先アドレスＡ１２をフラッシュメモリへの読み出し要求アドレスとして出力する。
【００５８】
このｃ５では、フラッシュメモリから命令データＤ０〜Ｄ３が読み出され、この命令データＤ０〜Ｄ３は、ｃ６で、命令バッファ２Ａに格納される。
【００５９】
ｃ７で、ＣＰＵから命令アドレスＡ３が出力され、予想通り、アドレスＡ１２への分岐が発生したものとする。そこで、ｃ８で、ＣＰＵから命令アドレスA１２が出力される。
【００６０】
ｃ９で、フラッシュメモリから命令データＤ１２〜Ｄ１５が読み出され、命令データＤ１２は、そのまま出力制御部１３を介してＣＰＵへ出力される。これにより、分岐が発生しても、遅滞なく、命令データがＣＰＵへ供給される。
【００６１】
このような本実施例によれば、プログラムのループ動作に伴う分岐命令の実行が予想されるときは、実行済みの命令データを命令バッファにそのまま保持しておき、実際にプログラムのループ動作に伴う分岐命令が実行されるときは、命令バッファに保持されている命令データを再度使用する。これにより、ＣＰＵからの分岐命令の命令アドレスの送出に対して、次のサイクルで直ちに命令データをＣＰＵへ供給することができる。その結果、ＣＰＵは、プログラムのループ実行に遅延を生じさせることなく、命令を実行することができる。
【００６２】
また、ＣＰＵからの分岐命令の命令アドレスの送出に対して、メモリからの命令データの読み出しを行なわないので、メモリの読み出し回数を削減でき、メモリの消費電力を低減することができる。
【実施例２】
【００６３】
本実施例の分岐予測付きプリフェッチバッファは、図１に示した実施例１のループ判定部６を図７に示すループ判定部６Ａに変更したものである。その他の部分は、図１と同じであるので、ここでは、その図示および説明を省略する。
【００６４】
図７は、本実施例の分岐予測付きプリフェッチバッファのループ判定部６Ａの構成を示すブロック図である。
【００６５】
ループ判定部６Ａは、図２に示したループ判定部６を構成するブロックのほかに、さらに、プリフェッチバッファ１に格納されているプリフェッチアドレスの中に分岐先アドレスレジスタ５に格納されている分岐先アドレスと一致するものがあるかどうかを比較する比較器６３と、プリフェッチバッファ１に格納されているプリフェッチアドレスの中に、分岐履歴格納部３に格納されている分岐履歴に記載されている分岐発生アドレスと一致するものがないかを検索し、一致するものを検出したときは、検出した分岐発生アドレスを出力する分岐発生アドレス検出部６４と、分岐発生アドレス検出部６４から出力された分岐発生アドレスのアドレス値、すなわちプリフェッチアドレスの中に含まれる分岐発生アドレスのアドレス値が分岐先アドレスレジスタ５に格納されている分岐先アドレスのアドレス値以上であるかどうかを比較する比較器６５と、を備える。
【００６６】
ループ判定部６Ａは、ループ判定部６と同様、分岐先アドレス予測部４から分岐発生予想信号が出力され、かつ比較器６１あるいは比較器６２のいずれかが「一致あり」との結果を出力したときに、今後実行が予想される分岐命令がプログラムのループ実行による分岐命令であると判定し、これを「ループ判定」信号として出力する。
【００６７】
また、ループ判定部６Ａは、分岐先アドレス予測部４から分岐発生予想信号が出力され、かつ比較器６３が「一致あり」との結果を出力し、かつ比較器６５が、「プリフェッチアドレスの中に含まれる分岐発生アドレスのアドレス値が分岐先アドレスレジスタ５に格納されている分岐先アドレスのアドレス値以上」との結果を出力したときにも、「ループ判定」信号を出力する。
【００６８】
次に、分岐の発生が予想されるときの本実施例の分岐予測付きプリフェッチバッファの動作について、図８〜１１を用いて説明する。
【００６９】
図８は、分岐発生アドレスがＡ７、分岐先アドレスがＡ５というエントリ情報３が記載されている分岐履歴の例を示す。エントリ情報３は、分岐先アドレスＡ５のアドレス値が分岐発生アドレスＡ７より小さいので、プログラムのループ実行の際に作成されたエントリ情報である。いま、この分岐履歴が分岐履歴格納部３に格納されているものとする。
【００７０】
図９は、図８に示したエントリ情報３に記載された分岐と同じ分岐、すなわちプログラムのループ実行に伴う分岐が、今後発生すると予想されるときの本実施例の動作の例を示す波形図である。
【００７１】
いま、ｃ１で、フラッシュメモリへの読み出し要求アドレスＡ4が出力されたとする。
【００７２】
ｃ２で、プリフェッチアドレスレジスタ１にプリフェッチアドレスＡ４〜Ａ７が格納される。分岐先アドレス予測部４は、このプリフェッチアドレスＡ４〜Ａ７を分岐履歴格納部３に格納されている分岐履歴と比較する。その結果、プリフェッチアドレスの中のアドレスＡ7が、エントリ情報１に記載されている分岐発生アドレスと一致するため、分岐発生予想信号を出力するとともに、エントリ情報３に記載されている分岐先アドレスＡ５を出力する。
【００７３】
ｃ３で、分岐先アドレス予測部から出力された分岐先アドレスＡ１は、分岐先アドレスレジスタ５に格納される。
【００７４】
分岐先アドレス予測部４から分岐発生予想信号が出力されたのを受けて、ループ判定部６Ａは、ループ判定のための動作を行なう。
【００７５】
ループ判定部６Ａの比較器６３は、プリフェッチバッファ１に格納されているプリフェッチアドレスＡ４〜Ａ７の中に分岐先アドレスレジスタ５に格納されている分岐先アドレスＡ５と一致するアドレスＡ５があるので、「一致あり」との結果を出力する。
【００７６】
分岐発生アドレス検出部６４は、プリフェッチバッファ１に格納されているプリフェッチアドレスＡ４〜Ａ７の中に、分岐履歴格納部３に格納されている分岐履歴に記載されている分岐発生アドレスと一致するものがないかを検索する。その結果、エントリ情報３に記載されている分岐発生アドレスＡ７を検出し、検出した分岐発生アドレスＡ７を出力する。
【００７７】
比較器６５は、分岐発生アドレス検出部６４から出力されたアドレスＡ７のアドレス値がアドレスレジスタ５に格納されている分岐先アドレスＡ５のアドレス値より大きいので、「プリフェッチアドレスの中に含まれる分岐発生アドレスのアドレス値が分岐先アドレスレジスタ５に格納されている分岐先アドレスのアドレス値以上」との結果を出力する。
【００７８】
この比較器６３および比較器６５の出力結果より、ループ判定部６Ａは、「ループ判定」信号をｃ４で出力する。
【００７９】
ループ判定部６Ａから「ループ判定」信号が出力されたのを受けて、メモリ読み出し制御部７は、通常ｃ５で‘Ｈ’を出力するフラッシュメモリの読み出し制御信号を‘Ｌ’のままとして、フラッシュメモリの読み出しを禁止する。
【００８０】
また、ｃ５で、フラッシュメモリから命令データＤ４〜Ｄ７が読み出され、ｃ６で、命令バッファ２Ａに格納される。この命令バッファ２Ａに格納された命令データの間で、プログラムのループ動作が実行される。そこで、この命令データを保持するために、命令バッファ書き換え制御部８は、命令バッファ２Ａの書き換えを行わないように制御する。
【００８１】
これに対して、プログラムのループ実行を伴わない命令の実行によって発生した分岐の場合は、次のように動作する。
【００８２】
図１０は、分岐発生アドレスがＡ５、分岐先アドレスがＡ７というエントリ情報４が記載されている分岐履歴の例を示す。エントリ情報４は、分岐先アドレスＡ７のアドレス値が分岐発生アドレスＡ５より大きいので、プログラムのループ実行を伴わない分岐の際に作成されたエントリ情報である。いま、この分岐履歴が分岐履歴格納部３に格納されているものとする。
【００８３】
図１１は、図１０に示したエントリ情報４に記載された分岐と同じ分岐、すなわちプログラムのループ実行を伴わない命令の実行によって発生した分岐が、今後発生すると予想されるときの本実施例の動作の例を示す波形図である。
【００８４】
この例でも、ｃ１で、フラッシュメモリへの読み出し要求アドレスＡ４が出力される。
【００８５】
ｃ２で、プリフェッチアドレスレジスタ1にプリフェッチアドレスＡ４〜Ａ７が格納される。分岐先アドレス予測部４は、このプリフェッチアドレスＡ４〜Ａ７を分岐履歴格納部３に格納されている分岐履歴と比較する。その結果、この例では、プリフェッチアドレスの中のアドレスＡ５が、エントリ情報４に記載されている分岐発生アドレスと一致するため、分岐先アドレス予測部４は、分岐発生予想信号を出力するとともに、エントリ情報４に記載されている分岐先アドレスＡ７を出力する。
【００８６】
ｃ３で、分岐先アドレス予測部から出力された分岐先アドレスＡ７は、分岐先アドレスレジスタ5に格納される。
【００８７】
分岐先アドレス予測部４から分岐発生予想信号が出力されたのを受けて、ループ判定部６Ａは、ループ判定のための動作を行なう。
【００８８】
この例では、分岐先アドレスレジスタ５に格納されている分岐先アドレスＡ７に該当するアドレスは、命令バッファ２Ａ、命令バッファ２Ｂのいずれにも格納されていない。そのため、比較器６１および比較器６２は、ともに「不一致」の判定を行なう。
【００８９】
一方、比較器６３は、分岐先アドレスＡ７がプリフェッチアドレスＡ４〜Ａ７の中に含まれているため、「一致」の判定を行なう。
【００９０】
これに対して、比較器６５は、プリフェッチアドレスと分岐履歴との照合で分岐発生アドレス検出部６４により検出された分岐発生アドレスＡ５のアドレス値と、分岐先アドレスＡ７のアドレス値との大小を比較し、「分岐発生アドレスアドレス値は分岐先アドレスアドレス値未満」と判定する。
【００９１】
以上の各比較器の判定結果により、ループ判定部６Ａは、「ループ判定」信号を出力しない。
【００９２】
ループ判定部６Ａから「ループ判定」信号が出力されないので、ｃ５で、メモリ読み出し制御部７は、フラッシュメモリの読み出し制御信号を‘Ｈ’とする。また、セレクタ１２を制御して、先頭アドレスレジスタ１１に格納されている次にメモリから読み出す命令の先頭アドレスＡ８をフラッシュメモリへの読み出し要求アドレスとして出力する。
【００９３】
このｃ５では、フラッシュメモリから命令データＤ４〜Ｄ７が読み出され、この命令データＤ４〜Ｄ７は、ｃ６で、命令バッファ２Ａに格納される。
【００９４】
また、このｃ５で、ＣＰＵから命令アドレスA５が出力され、予想通り、アドレスＡ７への分岐が発生したものとする。そこで、ｃ７で、ＣＰＵから命令アドレスA７が出力され、ｃ８で、命令バッファ２Ａに格納されている命令データＤ７が出力制御部１３を介してＣＰＵへ出力される。これにより、分岐が発生しても、遅滞なく、命令データがＣＰＵへ供給される。
【００９５】
このｃ８で命令バッファ２Ａに格納されている命令データを使い終わり、また、ループ判定部６Ａから「ループ判定」信号が出力されていないので、命令バッファ書き換え制御部８は、命令バッファ２Ａを書き換え可能状態にする。
【００９６】
続いて、ｃ９で、フラッシュメモリから命令データＤ８〜Ｄ１１が読み出される。ｃ９以降、フラッシュメモリから読み出された命令データＤ８〜Ｄ１１が、出力制御部１３を介してＣＰＵへ供給される。
【００９７】
このような本実施例によれば、プリフェッチアドレスレジスタに格納されたアドレスデータを用いてループ判定を行なうので、現在メモリへ読み出し要求をしている命令の間で、プログラムのループ実行が行われるかどうかを判定することができる。
【図面の簡単な説明】
【００９８】
【図１】本発明の実施例１に係る分岐予測付きプリフェッチバッファの要部の構成の例を示すブロック図。
【図２】実施例１のループ判定部の構成の例を示すブロック図。
【図３】実施例１の分岐予測付きプリフェッチバッファの動作の例を示す波形図。
【図４】分岐履歴の例を示す図。
【図５】実施例１の分岐予測付きプリフェッチバッファの動作の例を示す波形図。
【図６】実施例１の分岐予測付きプリフェッチバッファの動作の例を示す波形図。
【図７】本発明の実施例２に係る分岐予測付きプリフェッチバッファのループ判定部の構成の例を示すブロック図。
【図８】分岐履歴の例を示す図。
【図９】実施例２の分岐予測付きプリフェッチバッファの動作の例を示す波形図。
【図１０】分岐履歴の例を示す図。
【図１１】実施例２の分岐予測付きプリフェッチバッファの動作の例を示す波形図。
【符号の説明】
【００９９】
１  プリフェッチアドレスレジスタ
２、２Ａ、２Ｂ  命令バッファ
３  分岐履歴格納部
４  分岐先アドレス予測部
５  分岐先アドレス
６、６Ａ  ループ判定部
７  読み出し制御部
８  命令バッファ書き換え制御部
６１、６２、６３、６５  比較器
６４  分岐発生アドレス検出部
【図１】
2007286739.tif 000003
【図２】
2007286739.tif 000004
【図３】
2007286739.tif 000005
【図４】
2007286739.tif 000006
【図５】
2007286739.tif 000007
【図６】
2007286739.tif 000008
【図７】
2007286739.tif 000009
【図８】
2007286739.tif 000010
【図９】
2007286739.tif 000011
【図１０】
2007286739.tif 000012
【図１１】
2007286739.tif 000013