(57)【要約】【課題】簡易な回路構成で処理能力の向上を図ることのできる命令先読み回路を提供すること。【解決手段】先読み制御部２４は、条件分岐命令が検出される場合に、その分岐発生頻度に基づいて先読み制御レジスタ２５に予め設定された制御フラグに従って、命令の先読みを停止させるか否かを判断する。【選択図】      図１
2004303081.tif 000002
【特許請求の範囲】
【請求項１】
メモリから命令を先読みする命令先読み回路において、
先読みした命令をデコードして分岐命令を検出する命令デコード部と、
前記命令デコード部により検出される分岐命令が絶対分岐命令の場合に先読みを停止させる先読み制御部とを備え、
前記先読み制御部には、前記命令デコード部により検出される分岐命令が条件分岐命令の場合に先読みを停止させるか否かを判断するための制御フラグが設定された先読み制御レジスタが備えられていることを特徴とする命令先読み回路。
【請求項２】
前記先読み制御レジスタを前記条件分岐命令の種類毎に設けたことを特徴とする請求項１記載の命令先読み回路。
【請求項３】
先読みする命令のアドレスが予め定めたアドレス範囲内のアドレスであるか否かを判断し、該判断結果に基づいて前記先読み制御レジスタに設定された制御フラグを切り替え可能とするアドレス範囲比較部を備えたことを特徴とする請求項１又は２記載の命令先読み回路。
【請求項４】
前記アドレス範囲比較部には、前記アドレス範囲を指定する第一のアドレスと第二のアドレスとが格納されるアドレス範囲設定レジスタが備えられていることを特徴とする請求項３記載の命令先読み回路。
【請求項５】
前記アドレス範囲を、先読みする命令が含まれる命令ルーチン毎に設定したことを特徴とする請求項３又は４記載の命令先読み回路。
【請求項６】
前記メモリから読み出されるデータパターンが予め定めた特定のデータパターンである場合に、前記先読み制御レジスタに設定された制御フラグを切り替え可能とするデータパターン検出部を備えたことを特徴とする請求項１乃至５の何れか一項記載の命令先読み回路。
【請求項７】
前記データパターン検出部には、前記特定のデータパターンを保持するデータ保持レジスタが備えられていることを特徴とする請求項６記載の命令先読み回路。
【請求項８】
前記メモリから読み出される命令が予め定めた特定の命令コードである場合に、前記先読み制御レジスタに設定された制御フラグを切り替え可能としたことを特徴とする請求項１乃至７の何れか一項記載の命令先読み回路。
【請求項９】
予め指定した条件分岐命令を検出する場合にカウントアップする第一のカウンタと、
前記予め指定した条件分岐命令が分岐発生した場合にカウントアップする第二のカウンタとを備え、
前記第一及び第二のカウンタのカウント値に基づいて前記条件分岐命令の分岐発生頻度を算出するためのアシスト回路を備えることを特徴とする請求項１乃至８の何れか一項記載の命令先読み回路。
【請求項１０】
請求項１乃至９の何れか一項記載の命令先読み回路を備えたことを特徴とするマイクロコントローラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、命令先読み回路及びマイクロコントローラに関するものである。
近年、マイクロコントローラは、ＣＰＵの動作周波数の高速化に伴い、メモリ等の周辺回路に比べて動作速度が相対的に速くなってきている。そこで、ＣＰＵによる命令の実行に先立って該命令をメモリから予め読み出して保持しておく命令先読み回路を搭載することで、ＣＰＵの処理速度の向上を図るようにした構成がある。このようなマイクロコントローラにおけるメモリアクセス効率の向上が要求されている。
【０００２】
【従来の技術】
従来、命令先読み機能を備える装置の１つとして、例えばＣＰＵ等のプロセッサにより読み出した命令が条件分岐命令である場合に命令の先読みを停止させるようにした構成がある（例えば特許文献１及び特許文献２参照）。
【０００３】
すなわち、この構成では、条件分岐命令の種類に依らず該分岐命令が検出される場合には、その命令による分岐先アドレスが確定するまで命令の先読みを停止することで、分岐が発生した場合に先読みされた命令が使用されずに無駄となることが防止される。その結果、命令先読みのためのメモリアクセスを必要最小限に抑えることが可能である。
【０００４】
【特許文献１】
特開平５−２７９７２号公報
【特許文献２】
特開２００１−３１２４０４号公報
【０００５】
【発明が解決しようとする課題】
ところが、上記従来技術のように、条件分岐命令が検出される場合に先読みが必ず停止されてしまうと、分岐命令で分岐が発生しない場合に先読み効率が低下するという問題があった。すなわち、条件分岐命令で条件が成立若しくは未成立のため分岐が発生しなかった際に必要な命令が前もって読み出されていないために、ＣＰＵの処理能力低下を招くという問題があった。
【０００６】
この問題を解消する手段として、条件分岐命令が検出される場合に分岐発生する場合と分岐発生しない場合の双方の命令アドレスを計算して先読みするようにした構成があるが（例えば特許文献２参照）、この構成では多くの命令を先読みする必要があり、結果としてＣＰＵの処理能力の低下を招くことになる。
【０００７】
また、他の手段として、過去の分岐発生頻度の情報を予め蓄えておき、条件分岐命令を検出したときに分岐するかしないかを予測して分岐先の命令を先読みするようにした構成があるが、このような分岐予測機能を備えた構成は、回路が複雑化するため、回路規模が増大するというデメリットがある。
【０００８】
本発明は上記問題点を解決するためになされたものであって、その目的は簡易な回路構成で処理能力の向上を図ることのできる命令先読み回路及びマイクロコントローラを提供することにある。
【０００９】
【課題を解決するための手段】
上記目的を達成するため、請求項１，１０に記載の発明によれば、命令先読み回路において、先読み制御部は、命令デコード部により検出される分岐命令が絶対分岐命令の場合には先読みを停止させる。また、先読み制御部は、命令デコード部により検出される分岐命令が条件分岐命令の場合には、先読み制御レジスタに設定されている制御フラグに基づいて先読みを停止させるか否かを判断する。このような構成では、分岐発生頻度の高い条件分岐命令が検出される場合には先読みを停止させ、逆に分岐発生頻度の低い条件分岐命令が検出される場合には先読みを続行させることができる。これにより、外部バスのバス帯域を有効利用して命令の先読みを効率よく行いながら、処理能力の向上を図ることができる。
【００１０】
請求項２に記載の発明によれば、前記先読み制御レジスタを前記条件分岐命令の種類毎にそれぞれ設けたため、より精度の高い先読み制御が可能である。
請求項３に記載の発明によれば、先読みする命令のアドレスが予め定めたアドレス範囲内のアドレスであるか否かを判断し、該判断結果に基づいて前記先読み制御レジスタに設定された制御フラグを切り替え可能とするアドレス範囲比較部を備えた。これにより、プログラム実行時に制御フラグを適宜切り替えることが可能となるため、より精度の高い先読み制御が可能である。
【００１１】
請求項４に記載の発明によれば、前記アドレス範囲比較部には、前記アドレス範囲を指定する第一のアドレスと第二のアドレスが格納されるアドレス範囲設定レジスタが備えられている。
【００１２】
請求項５に記載の発明によれば、前記アドレス範囲を、先読みする命令が含まれる命令ルーチン毎に設定した。これにより、プログラムに含まれる各命令ルーチン毎に条件分岐命令の分岐発生頻度がそれぞれ異なる場合にも精度の高い先読み制御が可能である。
【００１３】
請求項６に記載の発明によれば、メモリから読み出されるデータパターンが予め定めた特定のデータパターンである場合に、前記先読み制御レジスタに設定された制御フラグを切り替え可能とするデータパターン検出部を備えた。これにより、プログラム実行時に制御フラグを適宜切り替えることが可能となるため、より精度の高い先読み制御が可能である。
【００１４】
請求項７に記載の発明によれば、前記データパターン検出部には、前記特定のデータパターンを保持するデータ保持レジスタが備えられている。
請求項８に記載の発明によれば、メモリから読み出される命令が予め定めた特定の命令コードである場合に、前記先読み制御レジスタに設定された制御フラグを切り替え可能とした。これにより、プログラム実行時に制御フラグを適宜切り替えることが可能となるため、より精度の高い先読み制御が可能である。
【００１５】
請求項９に記載の発明によれば、予め指定した条件分岐命令を検出する場合にカウントアップする第一のカウンタと、前記予め指定した条件分岐命令が分岐発生した場合にカウントアップする第二のカウンタとを備え、前記第一及び第二のカウンタのカウント値に基づいて前記条件分岐命令の分岐発生頻度を算出するためのアシスト回路を備えた。これによって、先読み制御レジスタに設定する制御フラグの値を決定することができる。
【００１６】
【発明の実施の形態】
（第一実施形態）
以下、本発明を具体化した第一実施形態を図１及び図２に従って説明する。
【００１７】
図１は、第一実施形態の命令先読み回路を備えたマイクロコントローラを示す概略ブロック図である。
マイクロコントローラ１１は、ＣＰＵ１２と、命令先読み回路１３と、外部バスインターフェース（以下、バスＩ／Ｆと略す）１４とを含み、それらは同一の半導体チップ１５に形成されている。このマイクロコントローラ１１には、バスＩ／Ｆ１４に接続された外部バス１６を介してメモリ１７が接続され、メモリ１７には、ＣＰＵ１２が実行するプログラムやデータが格納されている。
【００１８】
命令先読み回路１３は、先読みアドレス生成部２１、先読みバッファ部２２、命令デコード部２３及び先読み制御部２４を含み、該先読み制御部２４には、先読み制御レジスタ２５が備えられている。
【００１９】
先読みアドレス生成部２１は、ＣＰＵ１２から出力されるアドレスに基づいてＣＰＵ１２が次に実行すべき命令のアドレスを生成する。具体的には、電源投入後やリセット後の最初の命令フェッチ、或いは後述する絶対分岐命令や条件分岐命令により分岐発生した後の最初の命令フェッチのときにロードしたアドレスを順次カウントアップして先読みする命令のアドレスを生成する。
【００２０】
先読みアドレス生成部２１により生成されたアドレスは、演算部２６及びバスＩ／Ｆ１４を介して外部バス１６に出力される。これにより、命令先読み回路１３は、各アドレスに対応する命令をメモリ１７から読み出す（先読みする）。
【００２１】
メモリ１７から先読みされた命令は、先読みバッファ部２２に保持されるとともに命令デコード部２３にてデコードされる。先読みバッファ部２２は、例えばＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ）メモリにて構成され、先読みされた命令を順次取り込んで、該取り込んだ命令を演算部２７を介してＣＰＵ１２に出力する。従って、ＣＰＵ１２は、命令先読み回路１３により先読みされた命令をデコードして順次処理を実行する。
【００２２】
尚、先読みされて先読みバッファ部２２内に保持されている命令は、後述する絶対分岐命令や条件分岐命令にて分岐発生した命令がＣＰＵ１２により実行される場合にクリアされるようになっている。
【００２３】
命令デコード部２３は、メモリ１７から先読みされた命令をデコードして分岐命令を検出する。詳しくは、命令デコード部２３は、先読みされる命令に含まれる絶対分岐命令と条件分岐命令を検出し、該検出結果として絶対分岐命令検出信号Ｉａｂと条件分岐命令検出信号Ｉｃｂを先読み制御部２４に出力する。また、本実施形態において、命令デコード部２３は、条件分岐命令を検出する場合には、該条件分岐命令の種類毎に応じた検出結果（検出信号）を先読み制御部２４に出力する。
【００２４】
図３は、絶対分岐命令と１つの条件分岐命令を検出する命令デコード部２３の一例を示すブロック図である。
命令デコード部２３は、第１及び第２コンパレータ３１，３２と、第１及び第２記憶部３３，３４と、第１及び第２アンド回路３５，３６とから構成されている。第１及び第２コンパレータ３１，３２には外部バスＩ／Ｆ１４からのリードデータＲＤが入力される。また、第１コンパレータ３１には第１記憶部３３の出力信号が入力され、第２コンパレータ３２には第２記憶部３４の出力信号が入力される。
【００２５】
第１及び第２記憶部３３，３４は、ＣＰＵ１２又は外部から書き換え可能なレジスタ、又はマスクＲＯＭ等の作り込まれたハードワイヤからなり、それぞれ絶対分岐命令と条件分岐命令が記憶されている。図４に示すように、命令３７は、オペコード部（ＯＰコード部）３８とオペランド部３９とから構成されている。第１記憶部３３には絶対分岐命令のＯＰコード部３８のデータが記憶され、第２記憶部３４には条件分岐命令のＯＰコード部３８のデータが記憶されている。第１及び第２記憶部３３，３４は、記憶したオペコード部３８のデータをそれぞれ出力する。
【００２６】
従って、第１コンパレータ３１は、リードデータＲＤと絶対分岐命令のＯＰコード部３８のデータとが入力され、両者を比較した結果に対応する信号を出力する。また、第２コンパレータ３２は、リードデータＲＤと条件分岐命令のＯＰコード部３８のデータとが入力され、両者を比較した結果に対応する信号を出力する。
【００２７】
第１アンド回路３５は、第１コンパレータ３１の出力信号と命令フェッチ信号ＳＦとが入力され、両信号に基づいて絶対分岐命令検出信号Ｉａｂを出力する。第２アンド回路３６は、第２コンパレータ３２の出力信号と命令フェッチ信号ＳＦとが入力され、両信号に基づいて条件分岐命令検出信号Ｉｃｂを出力する。命令フェッチ信号ＳＦは、外部バスＩ／Ｆ１４が入力してきたデータ（リードデータＲＤ）が命令なのかデータなのかを判断する信号である。
【００２８】
従って、命令デコード部２３は、リードデータＲＤが命令であり、絶対分岐命令を検出した場合には所定レベル（例えばＨレベル：１）の検出信号Ｉａｂを出力し、条件分岐命令を検出した場合には所定レベル（例えばＨレベル：１）の検出信号Ｉｃｂを出力する。
【００２９】
先読み制御部２４は、命令デコード部２３の検出結果に基づいて、命令の先読みを制御する（先読みを続行させるか停止させるかを判断する）。尚、先読み制御部２４は、前記先読みバッファ部２２に保持されたデータ（命令）が満杯状態になるときには、その状態を示す満杯フラグＦＦに基づいて、命令の先読みを停止させるようになっている。
【００３０】
詳述すると、先読み制御部２４は、命令デコード部２３により分岐命令が検出されない場合（検出信号Ｉａｂ，ＩｃｂがＬレベルの場合）、すなわち絶対分岐命令及び条件分岐命令のいずれも検出されない場合には命令の先読みを続行させる。
【００３１】
また、先読み制御部２４は、命令デコード部２３により絶対分岐命令が検出される場合には命令の先読みを停止させる。詳しくは、先読みアドレス生成部２１によるアドレスの生成を停止させる。
【００３２】
また、先読み制御部２４は、命令デコード部２３により条件分岐命令が検出される場合には、先読み制御レジスタ２５に予め設定されている制御フラグに従って命令の先読みを停止させるか否かを判断する。
【００３３】
ここで、先読み制御レジスタ２５について説明すると、該先読み制御レジスタ２５は、本実施形態ではプログラム中に含まれる条件分岐命令の各種類にそれぞれ対応して設けられている。従って、先読み制御部２４は、条件分岐命令が検出される場合には、その種類に応じて命令の先読みを個別に制御可能である。
【００３４】
例えば、ＣＰＵ１２が実行する条件分岐命令の種類がＡ〜Ｄの４種類であるとする場合、先読み制御部２４には、図２に示すように、各条件分岐命令Ａ〜Ｄにそれぞれ対応した４つの先読み制御レジスタ２５ａ〜２５ｄが設けられる。従って、先読み制御部２４は、命令デコード部２３により条件分岐命令Ａ〜Ｄの何れかが検出される場合には、それに対応した先読み制御レジスタ２５ａ〜２５ｄの何れかに設定されている制御フラグを参照することで、先読みを停止させるか否かを判断する。
【００３５】
このような先読み制御レジスタ２５（図２において先読み制御レジスタ２５ａ〜２５ｄ）の制御フラグは、プログラム開発段階のデバッグ時に設定される。
これは、プログラム中のどの命令で条件分岐命令の分岐発生が多発するかをプログラムデバッグ時に把握可能であり、それに従って条件分岐命令の種類（図２において条件分岐命令Ａ〜Ｄ）に応じた最適なレジスタ値（制御フラグ）の設定を行うことができるためである。
【００３６】
ここで、最適な制御フラグの設定は、分岐発生頻度が高い条件分岐命令に対応した先読み制御レジスタ２５の制御フラグを先読み停止を示す値に設定し、逆に分岐発生頻度が低い条件分岐命令に対応した先読み制御レジスタ２５の制御フラグを先読み続行を示す値に設定することである。
【００３７】
例えば、図２において、条件分岐命令Ａが分岐発生頻度の低い分岐命令である場合、先読み制御レジスタ２５ａには、先読み継続を示す値「０」の制御フラグが設定される。従って、先読み制御部２４は、条件分岐命令Ａが検出される場合には先読みを継続させる。
【００３８】
また、図２において、条件分岐命令Ｂが分岐発生頻度の高い分岐命令である場合、先読み制御レジスタ２５ｂには、先読み停止を示す値「１」の制御フラグが設定される。従って、先読み制御部２４は、条件分岐命令Ｂが検出される場合には先読みを停止させる。即ち、先読みアドレス生成部２１によるアドレスの生成を停止させる。
【００３９】
図５は、１つの条件分岐命令に対応して先読みを停止する先読み制御部２４のブロック図である。尚、図５は、図２に示す条件分岐命令Ｂを検出した場合に先読みを停止する先読み制御部である。
【００４０】
先読み制御部２４は、先読み制御レジスタ２５ｂと、組合せ回路４１と、フリップフロップ（ＦＦ）４２と、アンド回路４３とから構成されている。先読み制御レジスタ２５ｂには、図１のＣＰＵ１２からのライトデータが書き込まれる。先読み制御レジスタ２５ｂは、書き込まれたデータに応じたレベルの信号を出力する。組合せ回路４１は、先読み制御レジスタ２５ｂからの信号と、満杯フラグＦＦと、ＦＦ４２の出力信号とが入力され、それら信号の組合せにより決定されるレベルを持ち命令の先読みを制御するための信号を出力する。ＦＦ４２は、組合せ回路４１からの信号と、クロック信号ＣＬＫが入力される。ＦＦ４２は、クロック信号ＣＬＫに応答して組合せ回路４１から出力される信号と実質的に同一レベルの信号を出力する。その信号は、組合せ回路４１に出力される。従って、ＦＦ４２により、先読み制御レジスタ２５ｂのデータと満杯フラグＦＦの組合せ結果（ＦＦ４２の出力信号）が保持される。また、ＦＦ４２の出力信号はアンド回路４３に入力される。アンド回路４３には条件分岐命令検出信号Ｉｃｂ（条件分岐命令Ｂに対応した検出信号ＩＢ）が入力される。アンド回路４３は、両信号に基づいて生成した先読み停止信号ＦＳを図１の先読みアドレス生成部２１に出力する。
【００４１】
従って、先読み制御部２４は、先読みバッファ部２２に保持されたデータが満杯状態でなくＦＦ４２の出力が「１」（ＣＰＵ１２からのライトデータが「１」）、且つ条件分岐命令検出信号ＩＢが「１」の場合に先読み停止を指示する（レベルが「１」の先読み停止信号ＦＳを出力する）。
【００４２】
次に、上記のような命令先読み回路１３を搭載したマイクロコントローラ１１の作用について説明する。ここでは、図２に示すように、先読み制御部２４は、４種類の条件分岐命令Ａ〜Ｄにそれぞれ対応する４つの先読み制御レジスタ２５ａ〜２５ｄを備え、各レジスタ２５ａ〜２５ｄにそれぞれ「０」，「１」，「０」，「１」の制御フラグが設定される場合を想定する。尚、値「０」は先読み続行を示す制御フラグ、値「１」は先読み停止を示す制御フラグである。
【００４３】
命令先読み回路１３は、先読みした命令が絶対分岐命令である場合には先読みを停止させる。また、命令先読み回路１３は、先読みした命令が分岐発生頻度の高い条件分岐命令Ｂや条件分岐命令Ｄである場合には、それぞれ値「１」の制御フラグが設定された先読み制御レジスタ２５ｂ，２５ｄに従って先読みを停止させる。
【００４４】
従って、これらの場合には、命令先読み回路１３により先読みした命令が使用されずに無駄になることが未然に防止される。また、外部バス１６のバス帯域が開放されることで、ＣＰＵ１２によるメモリ１７へのデータアクセスや分岐後の命令フェッチ等を効率良く行うことが可能となる。
【００４５】
また、命令先読み回路１３は、先読みした命令が分岐発生頻度の低い条件分岐命令Ａや条件分岐命令Ｃである場合には、それぞれ値「０」の制御フラグが設定された先読み制御レジスタ２５ａ，２５ｃに従って命令の先読みを続行する。
【００４６】
従って、これらの場合には、分岐発生しなかった際に必要な命令を先読みバッファ部２２に前もって蓄えておくことができるため、ＣＰＵ１２の処理能力を低下させることはない。
【００４７】
以上記述したように、本実施形態によれば、以下の効果を奏する。
（１）先読み制御部２４は、条件分岐命令が検出される場合には、その分岐発生頻度に基づいて先読み制御レジスタ２５に予め設定された制御フラグに従って、命令の先読みを停止させるか否かを判断する。従って、分岐発生頻度の高い条件分岐命令が検出される場合には先読みを停止して先読みした命令が無駄となるのを未然に防止できる。その結果、ＣＰＵ１２の処理能力を向上させることができる。
【００４８】
（２）分岐発生頻度の高い条件分岐命令が検出される場合には先読みが停止されることで、外部バス１６のバス帯域を有効利用して命令の先読みを効率よく行うことが可能となる。
【００４９】
（３）分岐発生頻度の低い条件分岐命令が検出される場合には先読みが続行されることで、分岐発生しなかった際に必要な命令を前もって先読みバッファ部２２に蓄えておくことができる。従って、それによるＣＰＵ１２の処理能力低下を招くこともない。
【００５０】
（４）本実施形態では、先読み制御部２４に先読み制御レジスタ２５を備えた極めて簡易な構成で、精度の高い先読み制御を可能とした命令先読み回路１３を実現することができる。従って、分岐予測機能を備えた回路等は不要であり、回路規模の増大もない。
【００５１】
（５）本実施形態では、プログラムに含まれる条件分岐命令Ａ〜Ｄにそれぞれ対応する先読み制御レジスタ２５ａ〜２５ｄを備えたため、より精度の高い命令先読み制御が可能である。
【００５２】
（第二実施形態）
以下、本発明を具体化した第二実施形態を図６〜図８に従って説明する。
図６は、第二実施形態の命令先読み回路を備えたマイクロコントローラを示すブロック図である。尚、本実施形態は、第一実施形態の命令先読み回路１３にアドレス範囲比較部５１を新たに追加した構成であり、その他の構成は図１と同様である。
【００５３】
アドレス範囲比較部５１は、アドレス範囲設定レジスタ５２を備えている。
アドレス範囲設定レジスタ５２には、先読みされる命令のアドレスが予め指定したアドレス範囲内にあるかどうかを判断するための第一のアドレスと第二のアドレスとが格納されている。尚、本実施形態では、プログラムの各命令ルーチン毎にそれぞれ対応したアドレス範囲を示す先頭アドレス（第一のアドレス）と終了アドレス（第二のアドレス）とがそれぞれ格納されている。
【００５４】
アドレス範囲比較部５１は、ＣＰＵ１２から出力されるアドレス（即ちメモリ１７をアクセスするアドレス）と、前記レジスタ５２内に設定された第一及び第二のアドレスとを比較することにより、先読みされる命令のアドレスが予め指定したアドレス範囲内のアドレスであるか否かを判断する。
【００５５】
そして、アドレス範囲比較部５１は、その判断結果（範囲内か否か）に基づいて、先読みを制御するためのフラグ切替信号ＦＣを先読み制御部２４に出力する。
【００５６】
図７は、アドレス範囲設定レジスタ５２の具体例を示す説明図である。
本実施形態において、アドレス範囲設定レジスタ５２は、条件分岐命令の種類（図において条件分岐命令Ａ〜Ｄ）にそれぞれ対応する先読み制御レジスタ２５ａ〜２５ｄの制御フラグを個別に切り替え制御可能とする４つのレジスタを含む。
【００５７】
すなわち、アドレス範囲比較部５１は、アドレス範囲設定レジスタ５２ａ〜５２ｄを備え、それらに設定されたアドレス範囲に従って切り替え制御を行う。
ここで、各アドレス範囲設定レジスタ５２ａ〜５２ｄには、プログラムに含まれる各命令ルーチンに対応して、それぞれアドレス範囲Ｓ１００，Ｓ２００，Ｓ３００，…を示す先頭アドレスＡＤＳ１，ＡＤＳ２，ＡＤＳ３，…と終了アドレスＡＤＥ１，ＡＤＥ２，ＡＤＥ３，…とが記憶されている。
【００５８】
図８は、１つのアドレス範囲設定レジスタ５２ａに対応するアドレス範囲比較部５１ａのブロック図である。
このアドレス範囲比較部５１ａは、スタートアドレスレジスタ６１、エンドアドレスレジスタ６２、内外設定レジスタ６３、大小比較回路６４、排他的論理和（ＥＯＲ）回路６５から構成されている。スタートアドレスレジスタ６１には範囲の先頭を示すアドレスが格納され、エンドアドレスレジスタ６２には範囲の終わりを示すアドレスが格納される。内外設定レジスタ６３には、指定の領域がスタートアドレスからエンドアドレスの範囲内か範囲外かを示す設定値が格納される。例えば、内外設定レジスタ６３には、範囲内を指定する場合には「１」が、範囲外を指定する場合には「０」が格納される。
【００５９】
大小比較回路６４は、入力されるアドレスＡＤＤが先頭アドレスと終了アドレスの範囲に入っているか否かを検出するためのコンパレータであり、その検出結果を出力する。例えば、大小比較回路６４は、アドレスＡＤＤが先頭アドレスと終了アドレスの範囲内に入っている時には「１」の信号を出力し、アドレスＡＤＤがその範囲に入っていない時には「０」の信号を出力する。
【００６０】
ＥＯＲ回路６５は、大小比較回路６４の出力信号と内外設定レジスタ６３のデータとを排他的論理和演算して生成したフラグ切替信号ＦＣを出力する。
従って、アドレス範囲比較部５１ａは、上記の条件が一致している場合に例えばＨレベル（１）のフラグ切替信号ＦＣを出力し、少なくとも１つの条件が不一致の場合にＬレベル（０）のフラグ切替信号ＦＣを出力する。
【００６１】
以下、アドレス範囲設定レジスタ５２ａを例としてその作用を説明する。
ＣＰＵ１２によるプログラムの実行において、アドレス範囲比較部５１は、ＣＰＵ１２のアクセスアドレスを監視し、それが現在どの命令ルーチンに対応したアドレス範囲のアドレスであるかをチェックする。
【００６２】
ここで、ＣＰＵ１２のアクセスアドレスが例えば先頭アドレスＡＤＳ１と終了アドレスＡＤＥ１とで示されるアドレス範囲Ｓ１００内のアドレスである場合、アドレス範囲比較部５１は、先読みを継続させるようにフラグ切替信号ＦＣを生成する。
【００６３】
次いで、ＣＰＵ１２のアクセスアドレスが例えば先頭アドレスＡＤＳ２と終了アドレスＡＤＥ２とで示されるアドレス範囲Ｓ２００内のアドレスである場合、アドレス範囲比較部５１は、先読みを停止させるようにフラグ切替信号ＦＣを生成する。
【００６４】
次いで、ＣＰＵ１２のアクセスアドレスが例えば先頭アドレスＡＤＳ３と終了アドレスＡＤＥ３とで示されるアドレス範囲Ｓ３００内のアドレスである場合、アドレス範囲比較部５１は、先読みを継続させるようにフラグ切替信号ＦＣを生成する。
【００６５】
このように、アドレス範囲比較部５１は、ＣＰＵ１２のアクセスアドレスがどのアドレス範囲内にあるか（即ち先読みされる命令がどの命令ルーチンに含まれるか）を判断してフラグ切替信号ＦＣを生成する。そのフラグ切替信号ＦＣは図５に示す先読み制御部２４の組合せ回路４１に入力される。従って、先読み制御部２４は、フラグ切替信号ＦＣと満杯フラグＦＦと先読み制御レジスタ２５（図５において２５ｂ）との組合せと、条件分岐命令検出信号ＩＢが「１」の場合に先読みを制御する信号を出力する。
【００６６】
つまり、アドレス範囲比較部５１は、ＣＰＵ１２のアクセスアドレスがどのアドレス範囲内にあるかに応じて、命令先読みを続行させるか否かの制御を切り替える。尚、ここでは説明を省略するが、その他のアドレス範囲設定レジスタ５２ｂ〜５２ｄに関しても同様である。
【００６７】
以上記述したように、本実施形態では、先読み制御レジスタ２５（先読み制御レジスタ２５ａ〜２５ｄ）に設定された制御フラグを、プログラム実行時にＣＰＵ１２のアクセスアドレスが属するアドレス範囲に応じて切り替え可能とした。この構成では、各命令ルーチンで条件分岐命令（条件分岐命令Ａ〜Ｄ）の分岐発生頻度がそれぞれ異なる場合にも適切な先読み制御を行うことが可能である。従って、第一実施形態に比べて精度の高い先読み制御が可能である。
【００６８】
（第三実施形態）
以下、本発明を具体化した第三実施形態を図９，図１０に従って説明する。
図９は、第三実施形態の命令先読み回路を備えたマイクロコントローラを示すブロック図である。尚、本実施形態は、第一実施形態の命令先読み回路１３に、第二実施形態のアドレス範囲比較部５１に替えてデータパターン検出部７１を新たに追加した構成であり、その他の構成は図１と同様である。
【００６９】
データパターン検出部７１は、ＣＰＵ１２がメモリ１７から読み出す特定のデータパターンを保持するデータ保持レジスタ７２を備えている。
そして、データパターン検出部７１は、ＣＰＵ１２がアクセスしたデータパターンと、データ保持レジスタ７２に保持されているデータパターンとを比較し、それぞれのデータが一致する場合に、先読みを制御するためのフラグ切替信号ＦＣ１を先読み制御部２４に出力する。そのフラグ切替信号ＦＣ１は図５に示す先読み制御部２４の組合せ回路４１に入力される。従って、先読み制御部２４は、フラグ切替信号ＦＣ１と満杯フラグＦＦと先読み制御レジスタ２５（図５において２５ｂ）との組合せと、条件分岐命令検出信号ＩＢが「１」の場合に先読みを制御する信号を出力する。
【００７０】
尚、本実施形態のデータ保持レジスタ７２には、条件分岐命令の種類（図２において条件分岐命令Ａ〜Ｄ）にそれぞれ対応した先読み制御レジスタ２５ａ〜２５ｄの制御フラグをデータパターンに応じて個別に切り替え可能とする４つのレジスタが設けられている。
【００７１】
図１０は、１つのデータパターンと一致する条件分岐命令を検出するデータパターン検出部７１ａのブロック図である。
このデータパターン検出部７１ａは、複数のビット判定部８１、アンド回路８２，８３を備えている。ビット判定部８１は、図９のＣＰＵ１２がアクセスしたデータパターンの所定ビットが指定したデータのビットと一致するか否かを判定する回路である。従って、データパターン検出部７１ａは、判定するビット数に対応する数のビット判定部８１を備える。
【００７２】
ビット判定部８１は、データパターンレジスタ８４、マスクレジスタ８５、ビット比較回路８６、アンド回路８７を備えている。データパターンレジスタ８４とマスクレジスタ８５は１ビットのレジスタであり、データパターンレジスタ８４は図９のデータ保持レジスタ７２を構成する。データパターンレジスタ８４には、指定したデータパターンの１ビットが記憶されている。ビット比較回路８６は、ＣＰＵ１２がアクセスしたデータの１ビットとデータパターンレジスタ８４の内容とを比較し、その比較結果を出力する。例えば、ビット比較回路８６は、両データが一致する場合には「１」の信号を、それらが一致しない場合には「０」の信号を出力する。
【００７３】
アンド回路８７は、ビット比較回路８６の出力信号とマスクレジスタ８５のデータとを論理積演算して生成した信号を出力する。マスクレジスタ８５には、ＣＰＵ１２がアクセスしたデータの比較結果をマスクするデータが記憶されている。従って、アンド回路８７は、マスクレジスタ８５のマスクが「１」の場合にはビット比較回路８６の出力信号と実質的に同じレベルの信号を出力し、マスクレジスタ８５のマスクが「０」の場合には「１」レベルの信号を出力する。
【００７４】
従って、ビット判定部８１は、対応する位置のビットが一致するか否かを判定するとともに、その判定結果をマスクレジスタ８５の内容に基づいてマスクする。
【００７５】
アンド回路８２は複数入力素子であり、入力数はビット判定部８１の数に相当する。即ち、アンド回路８２は、複数のビット判定部８１の出力信号を入力し、それら信号を論理和演算した信号を出力する。従って、アンド回路８２は、複数のビット判定部８１におけるデータパターンと指定したデータとの比較判定が全て一致である場合に例えばＨレベルの信号を出力し、少なくとも一つが不一致である場合にＬレベルの信号を出力する。
【００７６】
アンド回路８３には、アンド回路８２の出力信号とデータアクセス信号ＡＣＣが入力され、フラグ切替信号ＦＣ１ａを出力する。
従って、データパターン検出部７１ａは、図９のＣＰＵ１２がアクセスしたデータのパターンが指定したデータ（データ保持レジスタ７２のデータの１ビット）のパターンと一致する場合に、先読みを制御するためのフラグ切替信号ＦＣ１ａを先読み制御部２４に出力する。上記と同様にして、そのフラグ切替信号ＦＣ１ａは図５に示す先読み制御部２４の組合せ回路４１に入力される。そして、先読み制御部２４は、フラグ切替信号ＦＣ１ａと満杯フラグＦＦと先読み制御レジスタ２５（図５において２５ｂ）との組合せと、条件分岐命令検出信号ＩＢが「１」の場合に先読みを制御する信号を出力する。
【００７７】
このようなデータパターン検出部７１を備える命令先読み回路１３では、先読み制御レジスタ２５（先読み制御レジスタ２５ａ〜２５ｄ）に設定された制御フラグを、プログラム実行時にＣＰＵ１２がアクセスするデータパターンに応じて変更することができる。従って、第一実施形態に比べて精度の高い先読み制御が可能となる。
【００７８】
尚、本実施形態では、特定のデータパターンを検出した場合にレジスタ設定を切り替えるようにしたが、特定のデータパターンが連続、もしくは複数種の固有のデータパタンが連続した場合にレジスタ設定を切り替えるようにしてもよい。
【００７９】
即ち、図１０において、フラグレジスタ８８とアンド回路８９を更に備える。フラグレジスタ８８は、アンド回路８３の出力信号を保持すると共に、その保持した信号と実質的に同じレベルの信号を出力する。アンド回路８９は、フラグレジスタ８８の出力信号とアンド回路８３の出力信号が入力され、フラグ切替信号ＦＣ１ｂを出力する。アンド回路８９の入力信号がともに「一致」を示す場合、即ち、図９のＣＰＵ１２が連続してアクセスしたデータのパターンが指定したデータのパターンとが一致する場合に、先読みを制御するためのフラグ切替信号ＦＣ１ｂを先読み制御部２４に出力する。そして、上記と同様に、先読み制御部２４は、フラグ切替信号ＦＣ１ｂと満杯フラグＦＦと先読み制御レジスタ２５（図５において２５ｂ）との組合せと、条件分岐命令検出信号ＩＢが「１」の場合に先読みを制御する信号を出力する。
【００８０】
また、図１１に示すようにデータパターン検出部７１ｂを構成する。このデータパターン検出部７１ｂは、複数（本例では４つ）の一致検出回路９１ａ〜９１ｄとステートマシン９２とから構成される。各一致検出回路９１ａ〜９１ｄは同じ構成であり、１つの一致検出回路９１ｄにて図示するように、図９のデータパターン検出部７１ａと同様にビット判定部８１とアンド回路８２とを備えている。そして、各一致検出回路９１ａ〜９１ｄのデータパターンレジスタ８４、即ち各一致検出回路９１ａ〜９１ｄのデータ保持レジスタ７２にはそれぞれ指定したデータ（指定データＤＡ〜ＤＤ：図において左下に記す）が格納される。従って、各一致検出回路９１ａ〜９１ｄは、図９のＣＰＵ１２がアクセスしたデータのパターンとそれぞれ指定データＤＡ〜ＤＤと一致するか否かを検出して信号を出力する。
【００８１】
ステートマシン９２は、各一致検出回路９１ａ〜９１ｄの出力信号に基づいて複数種の固有パターンのデータが連続した場合に先読みを制御するためのフラグ切替信号ＦＣ２を先読み制御部２４に出力する。詳しくは、ステートマシン９２はＣＰＵ１２がデータをアクセスする毎に各一致検出回路９１ａ〜９１ｄの出力信号に基づいて図１２に示される状態を遷移し、フラグ切替信号ＦＣ２をアサートする。
【００８２】
先ず、ステートマシン９２はリセット後にアイドル状態（ＩＤＬＥ）１０１にある。この時、ステートマシン９２は第１の一致検出回路９１ａにおいてＣＰＵ１２のアクセスデータと指定データＤＡとが一致する場合に第１の状態１０２に遷移する。次に、ステートマシン９２は、第２の一致検出回路９１ｂにおいてＣＰＵ１２のアクセスデータと指定データＤＢとが一致する場合に第２の状態１０３に遷移し、不一致の場合にアイドル状態１０１に遷移する。
【００８３】
同様に、ステートマシン９２は、第３の一致検出回路９１ｃにおいてＣＰＵ１２のアクセスデータと指定データＤＣとが一致する場合に第３の状態１０４に遷移し、不一致の場合にアイドル状態１０１に遷移する。更に、ステートマシン９２は、第４の一致検出回路９１ｄにおいてＣＰＵ１２のアクセスデータと指定データＤＤとが一致する場合に第５の状態１０５に遷移し、不一致の場合にアイドル状態１０１に遷移する。そして、第５の状態１０５において、ステートマシン９２はフラグ切替信号ＦＣ２をアサートし、アイドル状態１０１に遷移する。
【００８４】
従って、このデータパターン検出部７１ｂは、ＣＰＵ１２が連続してアクセスした４つのデータが各一致検出回路９１ａ〜９１ｄの指定データＤＡ〜ＤＤとそれぞれ一致し、且つ４つのデータの順番がステートマシン９２の状態遷移順と一致する場合にフラグ切替信号ＦＣ２をアサートする。
【００８５】
そのフラグ切替信号ＦＣ２は、上記と同様に図５に示す先読み制御部２４の組合せ回路４１に入力される。従って、先読み制御部２４は、フラグ切替信号ＦＣ２と満杯フラグＦＦと先読み制御レジスタ２５（図５において２５ｂ）との組合せと、条件分岐命令検出信号ＩＢが「１」の場合に先読みを制御する信号を出力する。
【００８６】
（第四実施形態）
以下、本発明を具体化した第四実施形態を図１３に従って説明する。
尚、本実施形態は、プログラムデバッグ時に、条件分岐命令の分岐発生頻度を算出して、上述した各実施形態における先読み制御レジスタ２５（先読み制御レジスタ２５ａ〜２５ｄ）の制御フラグの設定を行うためのアシスト回路について説明するものである。
【００８７】
図１３に示すように、アシスト回路１１０は、条件分岐命令格納レジスタ１１１、コンパレータ１１２、第一のカウンタ１１３、第二のカウンタ１１４及び制御回路１１５を含む。アシスト回路１１０は、マイクロコントローラ１１を構成する半導体チップ１５上に形成され、具体的にはメモリ１７から読み出された命令がバスＩ／Ｆ１４を介してＣＰＵ１２に転送されるデータバスに接続して形成される。
【００８８】
条件分岐命令格納レジスタ１１１には、プログラムデバッグに先立って該プログラムに含まれる条件分岐命令のうち何れかの命令（分岐発生頻度を把握したい命令）が予め格納される。
【００８９】
コンパレータ１１２は、デバッグ実行時にＣＰＵ１２により読み込まれた条件分岐命令と、前記レジスタ１１１内に予め格納されている条件分岐命令とを比較し、互いの命令が一致する場合に一致信号Ｓ１を第一のカウンタ１１３及び制御回路１１５に出力する。第一のカウンタ１１３は、そのコンパレータ１１２からの一致信号Ｓ１に応答してカウント値Ｎ１をカウントアップする。
【００９０】
制御回路１１５は、前記互いの命令が一致する場合において、それに該当する条件分岐命令が実際に分岐発生するときにＣＰＵ１２から出力される分岐発生信号ＢＥＮに応答して、第二のカウンタ１１４に分岐発生検出信号Ｓ２を出力する。第二のカウンタ１１４は、その制御回路１１５からの分岐発生検出信号Ｓ２に応答してカウント値Ｎ２をカウントアップする。
【００９１】
このように構成されるアシスト回路１１０では、プログラムを一度動作させ、カウント値Ｎ１に対するカウント値Ｎ２の割合を求めることで、前記レジスタ１１１に格納されている条件分岐命令の分岐発生頻度を算出することができる。
【００９２】
そして、このような操作をプログラムに含まれる全ての条件分岐命令に対して行うことで、それぞれの条件分岐命令について分岐発生頻度を算出することができる。
【００９３】
従って、このようなアシスト回路１１０を用いて求めた分岐発生頻度に基づいてレジスタ設定を行うことで、各条件分岐命令（図２において条件分岐命令Ａ〜Ｄ）に応じた最適なレジスタ値の設定を行うことができる。
【００９４】
以上記述したように、本実施形態によれば、以下の効果を奏する。
尚、上記各実施形態は、以下の態様で実施してもよい。
・第一実施形態の命令先読み回路１３に、第二実施形態のアドレス範囲比較部５１及び第三実施形態のデータパターン検出部７１を共に備える構成としてもよい。その場合、図５に示す先読み制御部２４の組合せ回路４１は、先読み制御レジスタ２５ｂからの信号と、満杯フラグＦＦと、フラグ切替信号ＦＣ，ＦＣ１と、ＦＦ４２の出力信号とが入力され、それら信号の組合せにより決定されるレベルを持ち命令の先読みを制御するための信号を出力する。そして、先読み制御部２４は、組合せ回路４１の出力信号が「１」、且つ条件分岐命令検出信号ＩＢが「１」の場合に先読み停止を指示する（レベルが「１」の先読み停止信号ＦＳを出力する）。
【００９５】
・各実施形態では、プログラムに含まれる条件分岐命令の種類毎に命令先読み制御を行うようにしたが、必ずしもその必要はなく、プログラム中の条件分岐命令のうち特定の条件分岐命令についてのみ行うようにしてもよい。
【００９６】
・各実施形態では、先読み制御レジスタ２５（先読み制御レジスタ２５ａ〜２５ｄ）の制御フラグを、ＣＰＵ１２が特定の命令コードを読み込むときに切り替えるようにしてもよい。但し、この場合には、プログラム中に特定の命令コードを予め設定しておく必要がある。
【００９７】
・第三実施形態では、データ保持レジスタ７２を備える代わりに、例えばＣＰＵ１２からの制御信号によって特定のデータパターンを検出するようにしてもよい。
【００９８】
上記各実施形態の特徴をまとめると以下のようになる。
（付記１）  メモリから命令を先読みする命令先読み回路において、
先読みした命令をデコードして分岐命令を検出する命令デコード部と、
前記命令デコード部により検出される分岐命令が絶対分岐命令の場合に先読みを停止させる先読み制御部とを備え、
前記先読み制御部には、前記命令デコード部により検出される分岐命令が条件分岐命令の場合に先読みを停止させるか否かを判断するための制御フラグが設定された先読み制御レジスタが備えられていることを特徴とする命令先読み回路。
（付記２）  前記先読み制御レジスタを前記条件分岐命令の種類毎に設けたことを特徴とする付記１記載の命令先読み回路。
（付記３）  前記制御フラグを前記条件分岐命令の分岐発生頻度に基づいて設定したことを特徴とする付記１又は２記載の命令先読み回路。
（付記４）  先読みする命令のアドレスが予め定めたアドレス範囲内のアドレスであるか否かを判断し、該判断結果に基づいて前記先読み制御レジスタに設定された制御フラグを切り替え可能とするアドレス範囲比較部を備えたことを特徴とする付記１乃至３の何れか一記載の命令先読み回路。
（付記５）  前記アドレス範囲比較部には、前記アドレス範囲を指定する第一のアドレスと第二のアドレスとが格納されるアドレス範囲設定レジスタが備えられていることを特徴とする付記４記載の命令先読み回路。
（付記６）  前記アドレス範囲設定レジスタを前記条件分岐命令の種類毎にそれぞれ設けたことを特徴とする付記５記載の命令先読み回路。
（付記７）  前記アドレス範囲を、先読みする命令が含まれる命令ルーチン毎に設定したことを特徴とする付記４乃至６の何れか一記載の命令先読み回路。
（付記８）  前記メモリから読み出されるデータパターンが予め定めた特定のデータパターンである場合に、前記先読み制御レジスタに設定された制御フラグを切り替え可能とするデータパターン検出部を備えたことを特徴とする付記１乃至７の何れか一記載の命令先読み回路。
（付記９）  前記データパターン検出部には、前記特定のデータパターンを保持するデータ保持レジスタが備えられていることを特徴とする付記８記載の命令先読み回路。
（付記１０）  前記データ保持レジスタを前記条件分岐命令の種類毎にそれぞれ設けたことを特徴とする付記９記載の命令先読み回路。
（付記１１）  前記メモリから読み出される命令が予め定めた特定の命令コードである場合に、前記先読み制御レジスタに設定された制御フラグを切り替え可能としたことを特徴とする付記１乃至１０の何れか一記載の命令先読み回路。
（付記１２）  予め指定した条件分岐命令を検出する場合にカウントアップする第一のカウンタと、
前記予め指定した条件分岐命令が分岐発生した場合にカウントアップする第二のカウンタとを備え、
前記第一及び第二のカウンタのカウント値に基づいて前記条件分岐命令の分岐発生頻度を算出するためのアシスト回路を備えることを特徴とする付記１乃至１１の何れか一記載の命令先読み回路。
（付記１３）  付記１乃至１２の何れか一記載の命令先読み回路を備えたことを特徴とするマイクロコントローラ。
【００９９】
【発明の効果】
以上詳述したように、本発明によれば、簡易な回路構成で処理能力の向上を図ることのできる命令先読み回路及びマイクロコントローラを提供することができる。
【図面の簡単な説明】
【図１】第一実施形態の命令先読み回路を示すブロック図である。
【図２】先読み制御レジスタを示す説明図である。
【図３】命令デコード部を示すブロック図である。
【図４】命令の構造を示す説明図である。
【図５】先読み制御部を示すブロック図である。
【図６】第二実施形態の命令先読み回路を示すブロック図である。
【図７】アドレス範囲設定レジスタを示す説明図である。
【図８】アドレス範囲比較部を示すブロック図である。
【図９】第三実施形態の命令先読み回路を示すブロック図である。
【図１０】データパターン検出部を示すブロック図である。
【図１１】別のデータパターン検出部を示すブロック図である。
【図１２】ステートマシンの状態遷移図である。
【図１３】第四実施形態を説明するブロック図である。
【符号の説明】
Ｉａｂ  絶対分岐命令検出信号
Ｉｃｂ  条件分岐命令検出信号
Ａ〜Ｄ  条件分岐命令
ＡＤＤ  アドレス
ＡＤＳ１，ＡＤＳ２，ＡＤＳ３，…  第一のアドレスとしての先頭アドレス
ＡＤＥ１，ＡＤＥ２，ＡＤＥ３，…  第二のアドレスとしての終了アドレス
Ｓ１００，Ｓ２００，Ｓ３００，…  アドレス範囲
Ｎ１，Ｎ２  カウント値
１１  マイクロコントローラ
１３  命令先読み回路
１７  メモリ
２３  命令デコード部
２４  先読み制御部
２５，２５ａ〜２５ｄ  先読み制御レジスタ
３７  命令
５１，５１ａ  アドレス範囲比較部
５２，５２ａ〜５２ｄ  アドレス範囲設定レジスタ
７１，７１ａ，７１ｂ  データパターン検出部
７２  データ保持レジスタ
１１０  アシスト回路
１１３  第一のカウンタ
１１４  第二のカウンタ
【図１】
2004303081.tif 000003
【図２】
2004303081.tif 000004
【図３】
2004303081.tif 000005
【図４】
2004303081.tif 000006
【図５】
2004303081.tif 000007
【図６】
2004303081.tif 000008
【図７】
2004303081.tif 000009
【図８】
2004303081.tif 000010
【図９】
2004303081.tif 000011
【図１０】
2004303081.tif 000012
【図１１】
2004303081.tif 000013
【図１２】
2004303081.tif 000014
【図１３】
2004303081.tif 000015