(57)【特許請求の範囲】
【請求項１】
フェッチアドレスに対応した命令コードをキャッシュするキャッシュメモリと、
前記キャッシュメモリにキャッシュされる命令コードを制御するキャッシュ制御回路と、を備え、
前記キャッシュ制御回路は、
前記フェッチアドレスがサブルーチンへの分岐を示す場合、当該サブルーチンに対応する命令コードをキャッシュ対象とし、
前記キャッシュ対象とされた命令コードの数が予め設定された上限数を超えた場合、前記キャッシュ対象とされた命令コードを無効にする、
キャッシュメモリ装置。
【請求項２】
前記キャッシュ制御回路は、
前記フェッチアドレスがサブルーチンへの分岐を示す場合、前記キャッシュメモリに前記サブルーチンに対応する命令コードをキャッシュし、
前記キャッシュされた命令コードの数が予め設定された上限数を超えた場合、前記キャッシュされた命令コードを無効にする、
請求項１に記載のキャッシュメモリ装置。
【請求項３】
前記キャッシュメモリは、前記命令コードが格納されるメモリセル毎に設けられ、前記キャッシュされた各々の命令コードが有効であるか否かを示す有効フラグを保持可能に構成され、
前記キャッシュメモリに前記サブルーチンに対応する命令コードがキャッシュされる際に前記有効フラグが有効とされ、
前記キャッシュされた命令コードの数が予め設定された上限数を超えた場合、前記キャッシュされた命令コードの有効フラグが無効とされる、
請求項２に記載のキャッシュメモリ装置。
【請求項４】
前記キャッシュメモリに前記命令コードがキャッシュされる場合、前記有効フラグが無効となっているメモリセルに前記命令コードがキャッシュされる、
請求項３に記載のキャッシュメモリ装置。
【請求項５】
前記キャッシュ制御回路は、前記フェッチアドレスに対応した命令コードを一時的に保持可能なバッファを備え、
前記キャッシュ制御回路は、
前記フェッチアドレスがサブルーチンへの分岐を示す場合、前記バッファに前記サブルーチンに対応する命令コードを保持し、
あるサブルーチンへの分岐が示された後で、前記バッファに保持された前記あるサブルーチンへの分岐後の命令コードの数が予め設定された上限数を超える前に、新たなサブルーチンへの分岐が示された場合に、前記バッファに保持されている前記あるサブルーチンへの分岐後の命令コードを前記キャッシュメモリに転送し、
あるサブルーチンへの分岐が示された後で、前記バッファに保持された前記あるサブルーチンへの分岐後の命令コードの数が予め設定された上限数を超えた場合に、前記バッファに保持されている前記あるサブルーチンへの分岐後の命令コードを無効にする、
請求項１に記載のキャッシュメモリ装置。
【請求項６】
前記バッファは、前記命令コードが格納されるメモリセル毎に設けられ、前記格納された各々の命令コードが有効であるか否かを示す有効フラグを保持可能に構成され、
前記バッファに前記サブルーチンに対応する命令コードが保持される際に前記有効フラグが有効とされ、
前記保持された命令コードの数が予め設定された上限数を超えた場合、前記保持された命令コードの有効フラグが無効とされる、
請求項５に記載のキャッシュメモリ装置。
【請求項７】
前記バッファに前記命令コードが保持される場合、前記有効フラグが無効となっているメモリセルに前記命令コードが保持される、
請求項６に記載のキャッシュメモリ装置。
【請求項８】
前記命令コードの予め設定された上限数は、ＣＰＵがメモリにフェッチアドレスを出力してから前記メモリが前記命令コードを出力するまでのクロック数を、前記ＣＰＵが一つの命令コードを実行する際に必要なクロック数で除算した数である、請求項１乃至７のいずれか一項に記載のキャッシュメモリ装置。
【請求項９】
前記キャッシュ制御回路は、前記キャッシュメモリにおけるキャッシュの開始と停止を指示する更新制御回路を備え、
前記更新制御回路は、
前記キャッシュメモリに格納されたサブルーチンの命令コードの数をカウントするカウンタを備え、
前記命令コードの予め設定された上限数と前記カウンタの値とを比較し、前記カウンタの値が前記命令コードの予め設定された上限数を超えた場合に、前記キャッシュ対象とされた命令コードを無効にする、
請求項１乃至４のいずれか一項に記載のキャッシュメモリ装置。
【請求項１０】
前記キャッシュ制御回路は、前記バッファにおける分岐後の命令コードの保持の開始と停止を指示する更新制御回路を備え、
前記更新制御回路は、
前記バッファに保持された分岐後の命令コードの数をカウントするカウンタを備え、
前記命令コードの予め設定された上限数と前記カウンタの値とを比較し、前記カウンタの値が前記命令コードの予め設定された上限数を超えた場合に、前記キャッシュ対象とされた命令コードを無効にする、
請求項５乃至７のいずれか一項に記載のキャッシュメモリ装置。
【請求項１１】
前記キャッシュ制御回路は、前記フェッチアドレスがサブルーチンへ分岐したことを検出する分岐検出回路を備える、請求項１乃至１０のいずれか一項に記載のキャッシュメモリ装置。
【請求項１２】
前記キャッシュ制御回路は、前記フェッチアドレスのサブルーチンへの分岐を示すＣＰＵから出力された分岐通知信号に基づいて、前記フェッチアドレスがサブルーチンへ分岐したと判断する、請求項１乃至１０のいずれか一項に記載のキャッシュメモリ装置。
【請求項１３】
前記キャッシュ制御回路は、前記命令コードの上限数を設定する上限命令数設定回路を備え、
前記上限命令数設定回路は、
ＣＰＵから出力された、前記ＣＰＵが一つの命令コードを実行する際に必要なクロック数に関するクロック数情報と、メモリから出力された、前記ＣＰＵが前記メモリにフェッチアドレスを出力してから前記メモリが前記命令コードを出力するまでのクロック数に関するレイテンシ情報と、に基づき前記命令コードの上限数を設定する、
請求項１乃至１２のいずれか一項に記載のキャッシュメモリ装置。
【請求項１４】
ＣＰＵと、
前記ＣＰＵで実行される命令コードが格納されたメモリと、
前記ＣＰＵから出力されたフェッチアドレスに対応した命令コードをキャッシュするキャッシュメモリと、
前記キャッシュメモリにキャッシュされる命令コードを制御するキャッシュ制御回路と、を備え、
前記キャッシュ制御回路は、
前記フェッチアドレスがサブルーチンへの分岐を示す場合、当該サブルーチンに対応する命令コードをキャッシュ対象とし、
前記キャッシュ対象とされた命令コードの数が予め設定された上限数を超えた場合、前記キャッシュ対象とされた命令コードを無効にする、
マイクロプロセッサシステム。
【請求項１５】
フェッチアドレスに対応した命令コードをキャッシュするキャッシュメモリにおけるキャッシュ制御方法であって、
前記フェッチアドレスがサブルーチンへの分岐を示す場合、当該サブルーチンに対応する命令コードをキャッシュ対象とし、
前記キャッシュ対象とされた命令コードの数が予め設定された上限数を超えた場合、前記キャッシュ対象とされた命令コードを無効にする、
キャッシュ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はキャッシュメモリ装置、キャッシュ制御方法、およびマイクロプロセッサシステムに関し、特に命令コードを効率的にキャッシュすることが可能なキャッシュメモリ装置、キャッシュ制御方法、およびマイクロプロセッサシステムに関する。
【背景技術】
【０００２】
近年、ＡＶ機器や家電製品などを代表とする電子機器は、多機能化と高性能化が求められている。このため、これらの電子機器を制御するマイクロプロセッサシステムにおいても、高性能化が求められている。一般的に、マイクロプロセッサシステムでは、低速メモリから命令コードをフェッチする際の性能低下を防ぐために、プリフェッチバッファやキャッシュメモリ装置が用いられている。
【０００３】
プリフェッチバッファは、現在実行している命令の次のアドレス以降の命令コードを予めフリップフロップ等に格納することができる。これにより、通常の命令の実行時にメモリから命令コードを読み出す際、メモリの読み出し速度が遅いことに起因する性能の低下を防ぐことができる。キャッシュメモリ装置は、使用頻度の高い命令コードを予めＲＡＭ（Random Access Memory）に格納することができる。これにより、主にサブルーチンへの分岐時にメモリから命令コードを読み出す際、メモリの読み出し速度が遅いことに起因する性能の低下を防ぐことができる。
【０００４】
ここで、プリフェッチバッファやキャッシュメモリ装置のメモリは、サイズが大きい程、多くの命令コードを予め格納することができる。よって、メモリの読み出し速度が遅いことに起因する性能の低下をより確実に防ぐためには、メモリのサイズを大きくする必要がある。しかし、プリフェッチバッファやキャッシュメモリ装置のメモリサイズが大きくなると、チップ面積が増大し、製造コストが増大する。したがって、これらのメモリサイズは、性能とコストとのトレードオフを考慮し、必要最小限のメモリサイズで最大限の効果を発揮することができる容量を選択する必要がある。
【０００５】
特許文献１には、容量性の競合が発生し、命令キャッシュの性能が打ち消されてしまうことを防ぐことができるマイクロプロセッサシステムに関する技術が開示されている。図９は、特許文献１に開示されているマイクロプロセッサシステムを説明するためのブロック図である。図９に示すマイクロプロセッサシステムは、ＣＰＵ１０１、命令キャッシュ１０２、アドレスバス１０３、データバス１０４、およびカウンタ１０５を備える。
【０００６】
カウンタ１０５は、ＣＰＵ１０１から出力されたキャッシュアクセス通知信号Ｓ１及び分岐発生通知信号Ｓ２を受信し、命令キャッシュ１０２にキャッシュ機能停止信号Ｓ３を出力する。ここで、ＣＰＵ１０１は、命令キャッシュ１０２にアクセスする毎にキャッシュアクセス通知信号Ｓ１を発生する。このため、カウンタ１０５の値は、ＣＰＵ１０１が命令キャッシュ１０２にアクセスする毎に１デクリメントされる。また、ＣＰＵ１０１は、サブルーチンコールまたはマイナス方向への分岐が成立する毎に分岐発生通知信号Ｓ２を発生する。分岐発生通知信号Ｓ２が供給されると、カウンタ１０５は初期化され、カウンタ１０５の値がエントリ数とされる。さらに、カウンタ１０５の値が０のときには、カウンタ１０５はキャッシュ機能停止信号Ｓ３を命令キャッシュ１０２に出力して命令キャッシュ１０２の機能を停止させる。
【０００７】
次に、図９に示したマイクロプロセッサシステムの動作について説明する。図１１は、図１０に示すプログラムを実行した際に、命令キャッシュ１０２にキャッシュされる命令の遷移を示す図である。ＣＰＵ１０１は、図１０のプログラムのループ部分に入ると、メインメモリ（図示せず）から命令Ａ、Ｂ、Ｃ、Ｄを順次フェッチして命令キャッシュ１０２にロードすると共に実行する（ステップ２０１、２０２、２０３、２０４）。各ステップ２０１、２０２、２０３、２０４においては、ＣＰＵ１０１がキャッシュアクセス通知信号Ｓ１を発生するので、カウンタ１０５の値は、３、２、１、０と減少する。この結果、ステップ２０４の状態で、命令キャッシュ１０２のエントリのすべてが埋まることになり、以後は、カウンタ１０５のキャッシュ機能停止信号Ｓ３の発生により命令キャッシュ２のリプレースは発生しない。
【０００８】
次に、続けてメインメモリから命令Ｅ、Ｆ、Ｇ、Ｈを順次フェッチして実行する（ステップ２０５、２０６、２０７、２０８）。この場合、キャッシュ１０２のリプレースは発生しないので、命令Ａ、Ｂ、Ｃ、Ｄは命令キャッシュ１０２内に残る。
【０００９】
次に、分岐命令である命令Ｈを実行後、再び命令Ａを実行するものとする。この場合、命令Ａは既に命令キャッシュ１０２にロードされている。したがって、いわゆるキャッシュヒットとなる（ステップ２０９）。引き続き、命令Ｂ、Ｃ、Ｄを実行する場合も、命令Ｂ、Ｃ、Ｄは命令キャッシュ１０２にロードされているのでキャッシュヒットとなる。
【００１０】
このように、特許文献１に開示されているマイクロプロセッサシステムでは、ループを有するプログラムを実行した場合、命令キャッシュが満たされた時点でキャッシュ機能を無効化することで、命令キャッシュの性能を向上させることができる。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開平９−３０５４９０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、特許文献１に開示されているマイクロプロセッサシステムでは、サブルーチンに含まれる命令コードの数を考慮せずに、サブルーチンに含まれる命令コードをキャッシュメモリにキャッシュしている。このため、命令コードを効率的にキャッシュすることができないという問題があった。
【課題を解決するための手段】
【００１３】
本発明にかかるキャッシュメモリ装置は、フェッチアドレスに対応した命令コードをキャッシュするキャッシュメモリと、前記キャッシュメモリにキャッシュされる命令コードを制御するキャッシュ制御回路と、を備える。前記キャッシュ制御回路は、前記フェッチアドレスがサブルーチンへの分岐を示す場合、当該サブルーチンに対応する命令コードをキャッシュ対象とし、前記キャッシュ対象とされた命令コードの数が予め設定された上限数を超えた場合、前記キャッシュ対象とされた命令コードを無効にする。
【００１４】
本発明にかかるキャッシュメモリ装置では、キャッシュメモリにキャッシュされた命令コードの数が予め設定された上限数を超えた場合、キャッシュされた命令コードを無効としている。よって、命令コードの数が比較的少ないサブルーチンの命令コードを優先的にキャッシュメモリにキャッシュすることができるので、容量が比較的小さいキャッシュメモリであっても、命令コードを効率的にキャッシュメモリにキャッシュすることができる。
【００１５】
本発明にかかるマイクロプロセッサシステムは、ＣＰＵと、前記ＣＰＵで実行される命令コードが格納されたメモリと、前記ＣＰＵから出力されたフェッチアドレスに対応した命令コードをキャッシュするキャッシュメモリと、前記キャッシュメモリにキャッシュされる命令コードを制御するキャッシュ制御回路と、を備える。前記キャッシュ制御回路は、前記フェッチアドレスがサブルーチンへの分岐を示す場合、当該サブルーチンに対応する命令コードをキャッシュ対象とし、前記キャッシュ対象とされた命令コードの数が予め設定された上限数を超えた場合、前記キャッシュ対象とされた命令コードを無効にする。
【００１６】
本発明にかかるマイクロプロセッサシステムでは、キャッシュメモリにキャッシュされた命令コードの数が予め設定された上限数を超えた場合、キャッシュされた命令コードを無効としている。よって、命令コードの数が比較的少ないサブルーチンの命令コードを優先的にキャッシュメモリにキャッシュすることができるので、容量が比較的小さいキャッシュメモリであっても、命令コードを効率的にキャッシュメモリにキャッシュすることができる。
【００１７】
本発明にかかるキャッシュ制御方法は、フェッチアドレスに対応した命令コードをキャッシュするキャッシュメモリにおけるキャッシュ制御方法であって、前記フェッチアドレスがサブルーチンへの分岐を示す場合、当該サブルーチンに対応する命令コードをキャッシュ対象とし、前記キャッシュ対象とされた命令コードの数が予め設定された上限数を超えた場合、前記キャッシュ対象とされた命令コードを無効にする。
【００１８】
本発明にかかるキャッシュ制御方法では、キャッシュメモリにキャッシュされた命令コードの数が予め設定された上限数を超えた場合、キャッシュされた命令コードを無効としている。よって、命令コードの数が比較的少ないサブルーチンの命令コードを優先的にキャッシュメモリにキャッシュすることができるので、容量が比較的小さいキャッシュメモリであっても、命令コードを効率的にキャッシュメモリにキャッシュすることができる。
【発明の効果】
【００１９】
本発明により、命令コードを効率的にキャッシュすることが可能なキャッシュメモリ装置、キャッシュ制御方法、およびマイクロプロセッサシステムを提供することができる。
【図面の簡単な説明】
【００２０】
【図１】実施の形態１にかかるキャッシュメモリ装置を含むマイクロプロセッサシステムを示すブロック図である。
【図２】実施の形態１にかかるキャッシュメモリ装置の動作を説明するためのフローチャートである。
【図３】実施の形態１にかかるキャッシュメモリ装置の動作を説明するための図である。
【図４】実施の形態１にかかるキャッシュメモリ装置の動作を説明するための図である。
【図５】実施の形態２にかかるキャッシュメモリ装置を含むマイクロプロセッサシステムを示すブロック図である。
【図６】実施の形態３にかかるキャッシュメモリ装置を含むマイクロプロセッサシステムを示すブロック図である。
【図７】実施の形態４にかかるキャッシュメモリ装置を含むマイクロプロセッサシステムを示すブロック図である。
【図８】実施の形態４にかかるキャッシュメモリ装置の動作を説明するためのフローチャートである。
【図９】特許文献１に開示されている技術を説明するための図である。
【図１０】特許文献１に開示されている技術を説明するための図である。
【図１１】特許文献１に開示されている技術を説明するための図である。
【発明を実施するための形態】
【００２１】
＜実施の形態１＞
以下、図面を参照して本発明の実施の形態について説明する。
図１は、本実施の形態にかかるキャッシュメモリ装置を含むマイクロプロセッサシステムを示すブロック図である。図１に示すマイクロプロセッサシステム１は、ＣＰＵ１０、メモリ１１、キャッシュメモリ１２、およびキャッシュ制御回路１３を有する。キャッシュ制御回路１３は、分岐検出回路１６、更新制御回路１７、および上限命令数設定回路１９を有する。ここで、キャッシュメモリ１２とキャッシュ制御回路１３は、キャッシュメモリ装置を構成する。
【００２２】
ＣＰＵ１０は、メモリ１１、キャッシュメモリ１２、および分岐検出回路１６に、フェッチアドレス５１を出力する。また、ＣＰＵ１０は、メモリ１１から出力された命令コード５２、およびキャッシュメモリ１２から出力された命令コード５４を入力し、入力された命令コード５２、５４を実行する。ここで、命令コード５２はメモリ１１から出力された命令コードであり、フェッチアドレス５１に対応する命令コードがキャッシュメモリ１２にキャッシュされていない場合（キャッシュヒットしない場合）に、メモリ１１からＣＰＵ１０に出力される命令コードである。また、命令コード５４はキャッシュメモリ１２から出力された命令コードであり、フェッチアドレス５１に対応する命令コードがキャッシュメモリ１２にキャッシュされている場合（キャッシュヒットした場合）に、キャッシュメモリ１２からＣＰＵ１０に出力される命令コードである。
【００２３】
ＣＰＵ１０は、プリフェッチバッファ１４を備える。プリフェッチバッファ１４は、現在実行している命令の次のアドレス以降の命令コードを、予めフリップフロップ等に格納することができる。ＣＰＵ１０に供給される命令コード５２、５４は、一時的にプリフェッチバッファ１４に格納された後、ＣＰＵ１０において実行される。また、ＣＰＵ１０にはメモリ１１から命令コード格納イネーブル信号５３が供給される。命令コード格納イネーブル信号５３は、メモリ１１から有効な命令コード５２が出力されたことを示す信号である。プリフェッチバッファ１４は、メモリ１１から命令コード格納イネーブル信号５３が出力されたタイミングで、命令コード５２を格納する。
【００２４】
メモリ１１は、例えば比較的低速なメモリであるＤＲＡＭ（Dynamic Random Access Memory）等で構成することができる。メモリ１１には、フェッチアドレスに対応づけて命令コードが格納されている。メモリ１１は、ＣＰＵ１０から出力されたフェッチアドレス５１に対応した命令コード５２をＣＰＵ１０およびキャッシュメモリ１２に出力する。また、メモリ１１は、メモリ１１から有効な命令コード５２が出力されたことを示す命令コード格納イネーブル信号５３を、ＣＰＵ１０、キャッシュメモリ１２、および更新制御回路１７に出力する。
【００２５】
分岐検出回路１６は、ＣＰＵ１０から出力されたフェッチアドレス５１を監視し、当該フェッチアドレス５１がサブルーチンへの分岐を示す場合、更新制御回路１７に分岐通知信号５５を出力する。具体的には、分岐検出回路１６は、ＣＰＵ１０から出力されたフェッチアドレス５１が連続するアドレスから連続しないアドレスに変化した場合に、フェッチアドレス５１がサブルーチンへ分岐したと判断する。
【００２６】
上限命令数設定回路１９は、キャッシュメモリ１２に格納される命令コード数の上限を設定するための回路である。上限命令数設定回路１９は、設定された上限命令数を示す上限命令数信号５６を更新制御回路１７に出力する。例えば、上限命令数設定回路１９はレジスタ（不図示）を備え、このレジスタに上限命令数に対応する情報を格納することができる。ユーザは、外部からこのレジスタにアクセスして上限命令数を設定することができる。
【００２７】
更新制御回路１７は、キャッシュメモリ１２におけるキャッシュの開始と停止を指示するための回路である。更新制御回路１７は、分岐検出回路１６から出力された分岐通知信号５５と上限命令数設定回路１９から出力された上限命令数信号５６とを入力し、キャッシュメモリ１２にキャッシュ開始通知信号５７、キャッシュ停止通知信号５８、および有効フラグビットリセット信号５９を出力する。ここで、キャッシュ開始通知信号５７は、キャッシュメモリ１２が命令コード５２をキャッシュし始めるタイミングを通知する信号である。また、キャッシュ停止通知信号５８は、キャッシュメモリ１２における命令コード５２のキャッシュの終了を通知する信号である。有効フラグビットリセット信号５９は、キャッシュメモリ１２の有効フラグビット１５をリセットするための信号である。
【００２８】
また、更新制御回路１７はカウンタ１８を備える。カウンタ１８は、サブルーチンの命令数をカウントする回路である。カウンタ１８は、メモリ１１から命令コード格納イネーブル信号５３が出力される毎にカウンタ値をインクリメントする。すなわち、命令コード格納イネーブル信号５３は、メモリ１１から有効な命令コード５２が出力されたことを示す信号であり、キャッシュメモリ１２は命令コード格納イネーブル信号５３が出力される毎にキャッシュメモリ１２に命令コード５２を格納する。よって、カウンタ１８に命令コード格納イネーブル信号５３が供給される毎にカウンタ値をインクリメントすることで、キャッシュメモリ１２に格納される命令コードの数をカウントすることができる。そして、更新制御回路１７は、上限命令数信号５６が示す上限命令数とカウンタ値とを比較し、カウンタ値が上限命令数を超えた場合に、キャッシュメモリ１２に有効フラグビットリセット信号５９を出力する。
【００２９】
キャッシュメモリ１２は、メモリ１１よりも高速に動作可能なメモリで構成されている。例えば、キャッシュメモリ１２には高速に動作するＳＲＡＭ（Static Random Access Memory）を用いることができる。キャッシュメモリ１２は、更新制御回路１７から出力されたキャッシュ開始通知信号５７、キャッシュ停止通知信号５８、および有効フラグビットリセット信号５９、並びに、ＣＰＵ１０から出力されたフェッチアドレス５１、メモリ１１から出力された命令コード５２および命令コード格納イネーブル信号５３を入力し、ＣＰＵ１０に命令コード５４を出力する。
【００３０】
キャッシュメモリ１２は、ＣＰＵ１０から出力されたフェッチアドレス５１に対応した命令コードをキャッシュする。すなわち、キャッシュメモリ１２は、更新制御回路１７からキャッシュ開始通知信号５６が供給されると、命令コード格納イネーブル信号５３が供給される毎にメモリ１１から出力された命令コード５２を、フェッチアドレス５１と対応づけてキャッシュする。また、キャッシュメモリ１２は、更新制御回路１７からキャッシュ停止通知信号５７が供給されると、命令コード５２のキャッシュを停止する。
【００３１】
また、キャッシュメモリ１２は、命令コードが格納されるメモリセル毎に設けられた有効フラグビット（有効フラグ）１５を備えている。有効フラグビット１５は、キャッシュされた各々の命令コードが有効であるか否かを示すフラグである。キャッシュメモリ１２に命令コードがキャッシュされる際、有効フラグビット１５は有効とされる（例えば、有効を示す有効フラグビット１５の論理値を"１"とする）。そして、キャッシュされた命令コードの数（つまり、カウンタ１８の値）が予め設定された上限数（つまり、上限命令数設定回路１９で設定された上限命令数）を超えた場合、キャッシュされた命令コードの有効フラグビット１５は無効とされる（例えば、無効を示す有効フラグビット１５の論理値を"０"とする）。有効フラグビット１５を無効とする場合、更新制御回路１７はキャッシュメモリ１２に有効フラグビットリセット信号５９を出力する。一方、キャッシュされた命令コードの数が予め設定された上限数以下である場合、キャッシュされた命令コードの有効フラグビット１５は有効（"１"）のままとなる。
【００３２】
換言すると、フェッチアドレスがサブルーチンへの分岐を示す場合、サブルーチンに対応する命令コードがキャッシュメモリ１２へのキャッシュ対象とされ、キャッシュ対象とされた命令コードの数が予め設定された上限数を超えた場合、キャッシュ対象とされた命令コードが無効とされる。
【００３３】
なお、キャッシュメモリ１２に命令コードが新たにキャッシュされる場合、有効フラグビット１５が無効（"０"）となっているメモリセルに命令コードをキャッシュすることができる。また、キャッシュメモリ１２の容量が一杯となった場合は、最後に使用されてから最も長く時間が経過した命令コードを、新たにキャッシュする命令コードで上書きしてもよい。また、使用頻度の低い命令コードから順に上書きしてもよい。なお、上書きしたくない命令コードについては、有効フラグビット１５を有効（"１"）に固定することで、上書きを禁止することができる。
【００３４】
次に、本実施の形態にかかるキャッシュメモリ装置を含むマイクロプロセッサシステム１の動作について説明する。図２は、図１に示すキャッシュメモリ装置の動作を説明するためのフローチャートである。図３、図４は、図１に示すキャッシュメモリ装置の動作を説明するための図であり、命令コードがキャッシュされるキャッシュメモリ１２のメモリセルと有効フラグビットの状態を示している。図３、図４に示すように、有効フラグビットは、各メモリセルに対応するように設けられている。
【００３５】
まず、ＣＰＵ１０は、命令コードをメモリ１１から読み出すために、フェッチアドレス５１をメモリ１１に出力し始める（ステップＳ１）。分岐検出回路１６は、ＣＰＵ１０から出力されたフェッチアドレス５１を監視し、フェッチアドレス５１がサブルーチンへの分岐を示す場合（ステップＳ２：Ｙｅｓ）、更新制御回路１７に分岐通知信号５５を出力する。例えば、分岐検出回路１６は、ＣＰＵ１０から出力されたフェッチアドレス５１が連続するアドレスから連続しないアドレスに変化した場合に、プログラムがサブルーチンへ分岐したと判断する。なお、分岐検出回路１６は、フェッチアドレス５１がサブルーチンへの分岐を示さない場合（ステップＳ２：Ｎｏ）、ＣＰＵ１０から出力されたフェッチアドレス５１の監視を継続する。
【００３６】
更新制御回路１７は、分岐検出回路１６から分岐通知信号５５が供給されると、キャッシュ開始通知信号５７をキャッシュメモリ１２に出力する。これにより、キャッシュメモリ１２は、命令コード５２のキャッシュを開始する。
【００３７】
一方、メモリ１１は、フェッチアドレス５１が供給されると、このフェッチアドレス５１に対応した命令コード５２を、ＣＰＵ１０のプリフェッチバッファ１４およびキャッシュメモリ１２に出力する。また、メモリ１１は、メモリ１１から有効な命令コード５２が出力されたことを示す命令コード格納イネーブル信号５３を、ＣＰＵ１０のプリフェッチバッファ１４、キャッシュメモリ１２、および更新制御回路１７に出力する。なお、図２に示す動作例では、フェッチアドレス５１に対応する命令コードがキャッシュメモリ１２にキャッシュされていない場合（つまり、キャッシュヒットしない場合）を示している。
【００３８】
ＣＰＵ１０のプリフェッチバッファ１４は、メモリ１１から命令コード５２および命令コード格納イネーブル信号５３が供給されると、この命令コード５２をプリフェッチバッファ１４に格納する。
【００３９】
また、キャッシュメモリ１２は、メモリ１１から命令コード５２および命令コード格納イネーブル信号５３が供給されると、この命令コード５２をキャッシュメモリ１２のメモリセルにキャッシュする（ステップＳ３）。このとき、キャッシュメモリ１２は、命令コード５２を格納したメモリセルに対応する有効フラグビット１５の論理値を"１"に更新する（ステップＳ４）。すなわち、キャッシュメモリ１２に格納された命令コード５２を有効とする。
【００４０】
例えば、有効フラグビット１５は、メモリセルに有効な命令コードが格納されている場合は"１"、有効な命令コードが格納されていない場合は"０"となる。そして、次のサブルーチンの命令コードが格納される場合は、有効フラグビット１５が"０"となっているメモリセルに格納される。
【００４１】
また、更新制御回路１７のカウンタ１８は、メモリ１１から命令コード格納イネーブル信号５３が供給されると、カウンタ値をインクリメントする（ステップＳ５）。そして、更新制御回路１７は、上限命令数信号５６によって設定された命令コードの上限数と、カウンタ１８の値（キャッシュメモリ１２に格納された命令コードの数に対応）とを比較し、カウンタ１８の値が命令コードの上限数を超えたか否か判断する（ステップＳ６）。
【００４２】
カウンタ１８の値が命令コードの上限数を超えていない場合（つまり、カウンタ１８の値が命令コードの上限数以下である場合、ステップＳ６：Ｎｏ）、キャッシュされた命令コードの有効フラグビットを有効（"１"）のままとする。そして、分岐検出回路１６を用いてＣＰＵ１０から出力された次のフェッチアドレス５１を監視し、フェッチアドレス５１が新たなサブルーチンへの分岐を示さない場合（ステップＳ７：Ｎｏ）、ステップＳ３以降の動作を繰り返す。一方、ＣＰＵ１０から出力された次のフェッチアドレス５１が新たなサブルーチンへの分岐を示す場合（ステップＳ７：Ｙｅｓ）、カウンタ１８の値をリセットした後（ステップＳ８）、ステップＳ３以降の動作を繰り返す。
【００４３】
また、カウンタ１８の値が命令コードの上限数を超えた場合（ステップＳ６：Ｙｅｓ）、最後にキャッシュした命令コードを含むサブルーチンの全ての命令コードの有効フラグビットを無効（"０"）とする（ステップＳ９）。すなわち、更新制御回路１７は、カウンタ１８の値が上限命令数信号５６によって設定された命令コードの上限数を超えた場合（ステップＳ６：Ｙｅｓ）、キャッシュメモリ１２に有効フラグビットリセット信号５９を出力し、最後にキャッシュした命令コードを含むサブルーチンの全ての命令コードの有効フラグビットを無効（"０"）とする。また、更新制御回路１７は、キャッシュメモリ１２が命令コード５２をキャッシュすることを停止するために、キャッシュメモリ１２にキャッシュ停止通知信号５８を出力する。その後、ステップＳ２以降の動作を繰り返す。
【００４４】
上記のステップＳ１〜Ｓ８の動作について、図３を用いて具体的に説明する。ここで、図３に示す例では、上限命令数設定回路１９で設定された命令コードの上限数を４としている。また、図３のタイミングｔ１〜ｔ７のそれぞれは、ＣＰＵ１０からフェッチアドレス５１が出力され、キャッシュメモリ１２にフェッチアドレス５１に対応した命令コード５２がキャッシュされるタイミングに対応している。すなわち、図３のタイミングｔ１〜ｔ７毎に、ステップＳ３〜Ｓ６を含む処理が１回実施されている。
【００４５】
図３に示す例では、サブルーチンＡに対応する命令コードＡ１〜Ａ４、およびサブルーチンＢに対応する命令コードＢ１〜Ｂ３がキャッシュメモリ１２のメモリセルに格納される場合を示している。なお、命令コードＡ１〜Ａ４に対応するフェッチアドレスをａｄｄ_Ａ１〜ａｄｄ_Ａ４とし、命令コードＢ１〜Ｂ３に対応するフェッチアドレスをａｄｄ_Ｂ１〜ａｄｄ_Ｂ３とする。
【００４６】
まず、タイミングｔ１における動作について説明する。サブルーチンＡに対応するフェッチアドレスａｄｄ_Ａ１がＣＰＵ１０から出力されると、分岐検出回路１６は分岐を検出し、更新制御回路１７に分岐通知信号５５を出力する（ステップＳ２：Ｙｅｓ）。その後、キャッシュメモリ１２は、更新制御回路１７からキャッシュ開始通知信号５７が供給され、メモリ１１から命令コード格納イネーブル信号５３が供給されると、フェッチアドレスａｄｄ_Ａ１に対応する命令コードＡ１をメモリセルに格納する（ステップＳ３）。このとき、命令コードＡ１は、有効フラグビットの論理値が"０"のメモリセルに格納される。命令コードＡ１がメモリセルに格納されると、当該番地の有効フラグビット１５の論理値は"１"に更新される（ステップＳ４）。その後、ステップＳ５、Ｓ６を経て、ステップＳ７へと至る。
【００４７】
タイミングｔ２におけるフェッチアドレスａｄｄ_Ａ２は、サブルーチンＡにおけるフェッチアドレスであるので、ステップＳ７において、分岐はないと判断される（ステップＳ７：Ｎｏ）。そして、キャッシュメモリ１２は、メモリ１１から命令コード格納イネーブル信号５３が供給されると、フェッチアドレスａｄｄ_Ａ２に対応する命令コードＡ２をメモリセルに格納する（ステップＳ３）。命令コードＡ２がメモリセルに格納されると、当該番地の有効フラグビット１５の論理値は"１"に更新される（ステップＳ４）。その後、ステップＳ５、Ｓ６を経て、ステップＳ７へと至る。
【００４８】
以降、タイミングｔ３、ｔ４についても同様の動作となる。なお、タイミングｔ４では、カウンタ１８の値が４であり、上限命令数設定回路１９で設定された命令コードの上限数である４を超えていないので（ステップＳ６：Ｎｏ）、ステップＳ７へと進む。
【００４９】
そして、タイミングｔ５において、新たにサブルーチンＢのフェッチアドレスａｄｄ_Ｂ１がＣＰＵ１０から出力されると、分岐検出回路１６は分岐を検出し、更新制御回路１７に分岐通知信号５５を出力する（ステップＳ７：Ｙｅｓ）。更新制御回路１７は、分岐検出回路１６が分岐を検出したので、カウンタ１８の値をリセットする（ステップＳ８）。キャッシュメモリ１２は、メモリ１１から命令コード格納イネーブル信号５３が供給されると、フェッチアドレスａｄｄ_Ｂ１に対応する命令コードＢ１をメモリセルに格納する（ステップＳ３）。命令コードＢ１がメモリセルに格納されると、当該番地の有効フラグビット１５の論理値は"１"に更新される（ステップＳ４）。その後、ステップＳ５、Ｓ６を経て、ステップＳ７へと至る。
【００５０】
以降、タイミングｔ６、ｔ７についても同様の動作となる。なお、タイミングｔ７では、カウンタ１８の値が３であり、上限命令数設定回路１９で設定された命令コードの上限数である４を超えていないので、ステップＳ７へと進む。
【００５１】
次に、上記のステップＳ１〜Ｓ７、Ｓ９の動作（つまり、ステップＳ９（有効フラグビットのリセット）を含む動作）について、図４を用いて具体的に説明する。ここで、図４に示す例では、上限命令数設定回路１９で設定された命令コードの上限数を４としている。また、図４のタイミングｔ１〜ｔ１２のそれぞれは、ＣＰＵ１０からフェッチアドレス５１が出力され、キャッシュメモリ１２にフェッチアドレス５１に対応した命令コード５２がキャッシュされるタイミングに対応している。すなわち、図４のタイミングｔ１〜ｔ１２毎に、ステップＳ３〜Ｓ６を含む処理が１回実施されている。
【００５２】
図４に示す例では、サブルーチンＡに対応する命令コードＡ１〜Ａ４、サブルーチンＢに対応する命令コードＢ１〜Ｂ３がキャッシュメモリ１２のメモリセルに格納された場合、およびサブルーチンＣに対応する命令コードＣ１〜Ｃ５が一度キャッシュメモリ１２のメモリセルに格納された後、無効とされた場合を示している。なお、図４のタイミングｔ１〜ｔ７の動作は図３に示した動作と同様であるので、重複した説明は省略する。
【００５３】
タイミングｔ８において、新たにサブルーチンＣのフェッチアドレスａｄｄ_Ｃ１がＣＰＵ１０から出力されると、分岐検出回路１６は分岐を検出し、更新制御回路１７に分岐通知信号５５を出力する（ステップＳ７：Ｙｅｓ）。更新制御回路１７は、分岐検出回路１６が分岐を検出したので、カウンタ１８の値をリセットする（ステップＳ８）。キャッシュメモリ１２は、メモリ１１から命令コード格納イネーブル信号５３が供給されると、フェッチアドレスａｄｄ_Ｃ１に対応する命令コードＣ１をメモリセルに格納する（ステップＳ３）。命令コードＣ１がメモリセルに格納されると、当該番地の有効フラグビット１５の論理値は"１"に更新される（ステップＳ４）。その後、ステップＳ５、Ｓ６を経て、ステップＳ７へと至る。以降、タイミングｔ９〜ｔ１１についても同様の動作となる。
【００５４】
タイミングｔ１２におけるフェッチアドレスａｄｄ_Ｃ５は、サブルーチンＣにおけるフェッチアドレスであるので、ステップＳ７において、分岐はないと判断される（ステップＳ７：Ｎｏ）。そして、キャッシュメモリ１２は、メモリ１１から命令コード格納イネーブル信号５３が供給されると、フェッチアドレスａｄｄ_Ｃ５に対応する命令コードＣ５をメモリセルに格納する（ステップＳ３）。命令コードＣ５がメモリセルに格納されると、当該番地の有効フラグビット１５の論理値は"１"に更新される（ステップＳ４）。
【００５５】
また、更新制御回路１７のカウンタ１８はインクリメントされて（ステップＳ５）、カウント値が５となる。更新制御回路１７は、上限命令数信号５６によって設定された命令コードの上限数である４と、カウンタ１８の値である５とを比較する。この場合、カウンタ１８の値が命令コードの上限数を超えているので（ステップＳ６：Ｙｅｓ）、サブルーチンＣの全ての命令コードＣ１〜Ｃ５の有効フラグビットをリセット、つまり無効（"０"）とする（ステップＳ９）。すなわち、図４に示すように、命令コードＣ１〜Ｃ５が格納されているメモリセルに対応する有効フラグビットの値を、"１"から"０"に更新する。これにより、メモリセルに格納されている命令コードＣ１〜Ｃ５が無効とされ、以降、新たに命令コードが格納される際は、命令コードＣ１〜Ｃ５が格納されていたメモリセルに新たな命令コードが上書きされる。
【００５６】
背景技術で説明したように、マイクロプロセッサシステムでは、低速メモリから命令をフェッチする際の性能低下を防ぐために、プリフェッチバッファやキャッシュメモリ装置が用いられている。ここで、プリフェッチバッファは、現在実行している命令の次のアドレス以降の命令コードを予めフリップフロップ等に格納することができる。これにより、通常の命令の実行時にメモリから命令コードを読み出す際、メモリの読み出し速度が遅いことに起因する性能の低下を防ぐことができる。また、キャッシュメモリ装置は、使用頻度の高い命令コードを予めＲＡＭに格納することができる。これにより、主にサブルーチンへの分岐時にメモリから命令コードを読み出す際、メモリの読み出し速度が遅いことに起因する性能の低下を防ぐことができる。
【００５７】
例えば、２クロックに１回フェッチ可能なメモリ（フェッチレイテンシ＝２）が、バス幅６４ビットでＣＰＵと接続されているとする。ＣＰＵが１クロック毎に３２ビットの命令を実行可能な場合、ＣＰＵが命令を２クロック分（つまり、６４ビット）実行すると同時に、次のアドレスの命令（つまり、６４ビットの命令）がプリフェッチバッファに格納されるため、フェッチレイテンシの遅さを隠蔽できる。
【００５８】
しかしながら、プログラムの分岐が発生した場合は、プリフェッチバッファを用いたとしても、性能低下のペナルティを受けることになる。この理由は、プリフェッチバッファに格納されている先読みした命令コードが分岐の発生により使用されなくなるため、これらの命令コードを破棄し、改めて命令コードをフェッチするする必要があるからである。このとき、分岐により受けるペナルティの程度は、分岐後のサブルーチンの命令コードの数によって異なる。
【００５９】
命令コードの数が多いサブルーチン（例えば、１００命令とする）を実行する場合は、最初に分岐によるペナルティを受けるが、その後はプリフェッチバッファに命令コードが格納されることで、フェッチレイテンシの遅さを隠蔽することができる。よって、確実にペナルティを受けるのは、例えば１００クロックに１回となる。
【００６０】
これに対して、命令コードの数が少ないサブルーチン（例えば、３命令とする）を実行する場合は、最初に分岐によるペナルティを受け、その後、プリフェッチバッファに命令コードが格納される。しかし、この場合は、プリフェッチバッファを用いた効果が出てくる前に、次のサブルーチンへと分岐してしまうため、例えば３クロックに１回の割合と、相当高い割合でペナルティを受けることになる。
【００６１】
すなわち、マイクロプロセッサシステムでは、比較的命令コード数の多いサブルーチンはキャッシュメモリ装置に格納せず、比較的命令コード数の少ないサブルーチンの命令コードのみをキャッシュメモリ装置に格納することで、ペナルティを受ける確率を減らすことができ、少ないコストでマイクロプロセッサシステムのパフォーマンスを向上させることができる。
【００６２】
しかしながら、特許文献１に開示されているマイクロプロセッサシステムでは、サブルーチンに含まれる命令の数を考慮せずに、サブルーチンに含まれる命令をキャッシュメモリにキャッシュしていた。このため、命令コードを効率的にキャッシュすることができないという問題があった。
【００６３】
これに対して本実施の形態にかかるキャッシュメモリ装置では、キャッシュメモリ１２にキャッシュされた命令コードの数が予め設定された上限数を超えた場合、キャッシュされた命令コードを無効としている。換言すると、本実施の形態にかかるキャッシュメモリ装置では、予め設定された上限数を超える数の命令コードを含むサブルーチンの命令コードは、キャッシュメモリ１２にキャッシュされない。よって、命令コードの数が比較的少ないサブルーチンの命令コードを優先的にキャッシュメモリ１２にキャッシュすることができるので、容量が比較的小さいキャッシュメモリであっても、命令コードを効率的にキャッシュメモリにキャッシュすることができる。
【００６４】
通常、マイクロプロセッサシステムを制御するプログラムには、様々なタスクを実行するサブルーチンが存在する。例えば、組み込み系のマイクロプロセッサシステムでは、周辺機器からの割り込み信号を待つために同一の番地でループするようなサブルーチンや、一定時間経過するのを待つために、カウンタに所定の値をセットしてデクリメントしながらループし、０になったらループを抜けるようなサブルーチンなど、短いサブルーチンが多く存在する。本実施の形態にかかるキャッシュメモリ装置は、このように短いサブルーチンが多く存在するプログラムを実行するマイクロプロセッサシステムに用いることで、特に効果を発揮することができる。
【００６５】
また、上限命令数設定回路１９で設定される命令コードの上限数は、任意に設定可能であるが、少ないメモリ容量でキャッシュメモリ装置の性能を向上させるためには、メモリ１１のフェッチレイテンシ分のクロック数を待つ間にＣＰＵ１０が実行可能な数の命令コードを、キャッシュメモリ１２に保持していればよい。ここで、メモリ１１のフェッチレイテンシとは、ＣＰＵ１０がフェッチアドレス５１を出力してから、メモリ１１が命令コード５２を出力するまでのクロック数である。すなわち、命令コードの上限数＝（メモリ１１のフェッチレイテンシ）／（１命令コードを実行するのに必要なクロック数）で求められる命令コードの上限数が、少ないメモリ容量でマイクロプロセッサシステムの性能を向上させる最も効率のよい設定値となる。
【００６６】
以上で説明したように、本実施の形態にかかる発明により、命令コードを効率的にキャッシュすることが可能なキャッシュメモリ装置、キャッシュ制御方法、およびマイクロプロセッサシステムを提供することができる。
【００６７】
＜実施の形態２＞
次に、本発明の実施の形態２について説明する。図５は、本実施の形態にかかるキャッシュメモリ装置を含むマイクロプロセッサシステム２を示すブロック図である。図５に示すマイクロプロセッサシステム２は、ＣＰＵ２０、メモリ１１、キャッシュメモリ１２、およびキャッシュ制御回路２３を有する。キャッシュ制御回路２３は、更新制御回路１７および上限命令数設定回路１９を有する。ここで、キャッシュメモリ１２とキャッシュ制御回路２３は、キャッシュメモリ装置を構成する。
【００６８】
本実施の形態にかかるキャッシュメモリ装置を含むマイクロプロセッサシステム２では、図１に示した分岐検出回路１６を備えていない点が、実施の形態１にかかるマイクロプロセッサシステム１と異なる。これ以外は、実施の形態１にかかるマイクロプロセッサシステム１と同様であるので、同一の構成要素には同一の符号を付し、重複した説明は省略する。
【００６９】
図５に示すように、ＣＰＵ２０は、メモリ１１およびキャッシュメモリ１２にフェッチアドレス５１を出力する。また、ＣＰＵ２０は、メモリ１１から出力された命令コード５２、およびキャッシュメモリ１２から出力された命令コード５４を入力し、入力された命令コード５２、５４を実行する。
【００７０】
また、ＣＰＵ２０は、更新制御回路１７に分岐通知信号６４を出力する。ここで、分岐通知信号６４は、ＣＰＵ２０から出力されたフェッチアドレス５１がサブルーチンへの分岐を示す場合に、更新制御回路１７にサブルーチンへの分岐を通知するための信号である。ＣＰＵ２０は、自身の命令処理により分岐するため、更新制御回路１７に分岐通知信号６４を出力することができる。ここで、更新制御回路１７に供給される分岐通知信号６４は、実施の形態１にかかるマイクロプロセッサシステム１の更新制御回路１７に供給される分岐通知信号５５に対応している。
【００７１】
このように、本実施の形態にかかるマイクロプロセッサシステム２では、図２に示したステップＳ２、Ｓ７における分岐の検出をＣＰＵ２０で実施している。これ以外は、実施の形態１にかかるマイクロプロセッサシステム１と同様であるので、重複した説明は省略する。
【００７２】
本実施の形態にかかるマイクロプロセッサシステム２では、実施の形態１にかかるマイクロプロセッサシステム１で用いていた分岐検出回路１６を省略することができるので、キャッシュ制御回路を簡素化することができる。
【００７３】
＜実施の形態３＞
次に、本発明の実施の形態３について説明する。図６は、本実施の形態にかかるキャッシュメモリ装置を含むマイクロプロセッサシステム３を示すブロック図である。図６に示すマイクロプロセッサシステム３は、ＣＰＵ３０、メモリ３１、キャッシュメモリ１２、およびキャッシュ制御回路３３を有する。キャッシュ制御回路３３は、分岐検出回路１６、更新制御回路１７、および上限命令数設定回路３９を有する。ここで、キャッシュメモリ１２とキャッシュ制御回路３３は、キャッシュメモリ装置を構成する。
【００７４】
本実施の形態にかかるキャッシュメモリ装置を含むマイクロプロセッサシステム３では、上限命令数設定回路３９が、ＣＰＵ３０から出力されたクロック数情報７１とメモリ３１から出力されたレイテンシ情報７２とを用いて上限命令数を決定している点が、図１に示した実施の形態１にかかるマイクロプロセッサシステム１と異なる。これ以外は、実施の形態１にかかるマイクロプロセッサシステム１と同様であるので、同一の構成要素には同一の符号を付し、重複した説明は省略する。
【００７５】
ＣＰＵ３０は、上限命令数設定回路３９にクロック数情報７１を出力する。クロック数情報７１はＣＰＵ３０が１命令コードを実行するのに必要なクロック数に関する情報である。このクロック数情報７１は、ＣＰＵ３０が備えるレジスタ（不図示）に予め格納しておいてもよい。ＣＰＵ３０のこれ以外の構成および動作は、実施の形態１にかかるマイクロプロセッサ１のＣＰＵ１０と同様であるので、重複した説明は省略する。
【００７６】
メモリ３１は、上限命令数設定回路３９にレイテンシ情報７２を出力する。レイテンシ情報７２は、メモリ１１のフェッチレイテンシに関する情報である。メモリ３１のフェッチレイテンシは、ＣＰＵ３０がフェッチアドレス５１を出力してから、メモリ３０が命令コード５２を出力するまでのクロック数に対応している。このレイテンシ情報７２は、メモリ３１が備えるレジスタ（不図示）に予め格納しておいてもよい。メモリ３１のこれ以外の構成および動作は、実施の形態１にかかるマイクロプロセッサ１のメモリ１１と同様であるので、重複した説明は省略する。
【００７７】
上限命令数設定回路３９は、ＣＰＵ３０から出力されたクロック数情報７１とメモリ３１から出力されたレイテンシ情報７２とを用いて、キャッシュメモリ１２に格納される命令コードの上限数を設定する。上限命令数設定回路３９で設定される命令コードの上限数は任意に設定可能であるが、少ないメモリ容量でキャッシュメモリ装置の性能を向上させるためには、メモリ３１のフェッチレイテンシ分のクロック数を待つ間に、ＣＰＵ３０が実行する命令コード数をキャッシュメモリ１２が保持していればよい。すなわち、命令コードの上限数＝（メモリ３１のフェッチレイテンシ）／（１命令コードを実行するのに必要なクロック数）で求められる命令コードの上限数が、少ないメモリ容量でキャッシュメモリ装置の性能を向上させる最も効率のよい設定値となる。
【００７８】
上限命令数設定回路３９は、設定された命令コードの上限数を示す上限命令数信号７４を更新制御回路１７に出力する。ここで、更新制御回路１７に供給される上限命令数信号７４は、実施の形態１にかかるマイクロプロセッサシステム１の更新制御回路１７に供給される上限命令数信号５６に対応している。
【００７９】
本実施の形態にかかるマイクロプロセッサシステム２では、上限命令数設定回路３９において、ＣＰＵ３０から出力されたクロック数情報７１とメモリ３１から出力されたレイテンシ情報７２とを用いて、キャッシュメモリ１２に格納される命令コードの上限数を設定することができる。よって、使用するＣＰＵ３０やメモリ３１に応じて、命令コードの上限数をユーザが設定することなく自動的に設定することができる。
【００８０】
＜実施の形態４＞
次に、本発明の実施の形態４について説明する。図７は、本実施の形態にかかるキャッシュメモリ装置を含むマイクロプロセッサシステム４を示すブロック図である。図７に示すマイクロプロセッサシステム４は、ＣＰＵ１０、メモリ１１、キャッシュメモリ４２、およびキャッシュ制御回路４３を有する。キャッシュ制御回路４３は、分岐検出回路１６、更新制御回路１７、上限命令数設定回路１９、およびバッファ４５を有する。ここで、キャッシュメモリ４２とキャッシュ制御回路４３は、キャッシュメモリ装置を構成する。
【００８１】
本実施の形態にかかるキャッシュメモリ装置を含むマイクロプロセッサシステム４では、キャッシュ制御回路４３にバッファ４５を設け、このバッファ４５にメモリ１１から出力された命令コード５２を一時的に格納し、キャッシュメモリ４２に転送している点が、図１に示した実施の形態１にかかるマイクロプロセッサシステム１と異なる。これ以外は、実施の形態１にかかるマイクロプロセッサシステム１と同様であるので、同一の構成要素には同一の符号を付し、重複した説明は省略する。
【００８２】
キャッシュメモリ４２は、ＣＰＵ１０から出力されたフェッチアドレス５１、更新制御回路１７から出力された転送イネーブル信号８１、およびバッファ４５から出力されたキャッシュ対象命令コード８２を入力し、ＣＰＵ１０に命令コード５４を出力する。キャッシュメモリ４２には、バッファ４５に一時的に格納されていた命令コード（キャッシュ対象命令コード８２）が転送される。
【００８３】
バッファ４５は、メモリ１１から出力された命令コード５２を一時的に格納し、その後、キャッシュメモリ４２に転送する。バッファ４５は、メモリ１１から出力された命令コード５２および命令コード格納イネーブル信号５３、並びに、更新制御回路１７から出力されたキャッシュ開始通知信号５７、キャッシュ停止通知信号５８、および有効フラグビットリセット信号５９を入力し、キャッシュメモリ４２にキャッシュ対象命令コード８２を出力する。また、バッファ４５は、命令コードが格納されるメモリセル毎に設けられた有効フラグビット４８を備えている。
【００８４】
また、バッファ４５に格納された命令コードの数（つまり、カウンタ１８の値）が予め設定された上限数（つまり、上限命令数設定回路１９で設定された上限命令数）を超えた場合、バッファに格納された命令コードの有効フラグビット４８は無効とされる（例えば、無効を示す有効フラグビットの論理値を"０"とする）。有効フラグビット４８を無効とする場合、更新制御回路１７はバッファ４５に有効フラグビットリセット信号５９を出力する。一方、バッファに格納された命令コードの数が予め設定された上限数以下である場合、バッファに格納された命令コードの有効フラグビット４８は有効（"１"）のままとなる。そして、バッファに格納された命令コードの数が予め設定された上限数以下の状態で、分岐検出回路１６がサブルーチンへの分岐を検出した場合、バッファ４５はキャッシュメモリ４２に対して、一時的に格納していた命令コード（キャッシュ対象命令コード８２）を転送する。このとき、転送イネーブル信号８１はアクティブとなる。
【００８５】
次に、本実施の形態にかかるキャッシュメモリ装置を含むマイクロプロセッサシステム４の動作について説明する。図８は、図７に示すキャッシュメモリ装置の動作を説明するためのフローチャートである。本実施の形態にかかるキャッシュメモリ装置を含むマイクロプロセッサシステム４の動作は、命令コードがバッファ４５に一時的に格納される点（ステップＳ３'）、バッファ４５からキャッシュメモリ４２に命令コードが転送される点（ステップＳ１０）以外は、図２に示した実施の形態１にかかるマイクロプロセッサシステム１の動作と同様である。
【００８６】
まず、ＣＰＵ１０は、命令コードをメモリ１１から読み出すために、フェッチアドレス５１をメモリ１１に出力し始める（ステップＳ１）。分岐検出回路１６は、ＣＰＵ１０から出力されたフェッチアドレス５１を監視し、フェッチアドレス５１がサブルーチンへの分岐を示す場合（ステップＳ２：Ｙｅｓ）、更新制御回路１７に分岐通知信号５５を出力する。例えば、分岐検出回路１６は、ＣＰＵ１０から出力されたフェッチアドレス５１が連続するアドレスから連続しないアドレスに変化した場合に、プログラムがサブルーチンへ分岐したと判断する。なお、分岐検出回路１６は、フェッチアドレス５１がサブルーチンへの分岐を示さない場合（ステップＳ２：Ｎｏ）、ＣＰＵ１０から出力されたフェッチアドレス５１の監視を継続する。
【００８７】
更新制御回路１７は、分岐検出回路１６から分岐通知信号５５が供給されると、キャッシュ開始通知信号５７をバッファ４５に出力する。これにより、バッファ４５は、命令コード５２の格納を開始する。
【００８８】
一方、メモリ１１は、フェッチアドレス５１が供給されると、このフェッチアドレス５１に対応した命令コード５２を、ＣＰＵ１０のプリフェッチバッファ１４およびバッファ４５に出力する。また、メモリ１１は、メモリ１１から有効な命令コード５２が出力されたことを示す命令コード格納イネーブル信号５３を、ＣＰＵ１０のプリフェッチバッファ１４、バッファ４５、および更新制御回路１７に出力する。なお、図８に示す動作例では、フェッチアドレス５１に対応する命令コードがキャッシュメモリ４２にキャッシュされていない場合（つまり、キャッシュヒットしない場合）を示している。
【００８９】
ＣＰＵ１０のプリフェッチバッファ１４は、メモリ１１から命令コード５２および命令コード格納イネーブル信号５３が供給されると、この命令コード５２をプリフェッチバッファ１４に格納する。
【００９０】
また、バッファ４５は、メモリ１１から命令コード５２および命令コード格納イネーブル信号５３が供給されると、この命令コード５２をバッファ４５に格納する（ステップＳ３'）。このとき、バッファ４５は、命令コード５２を格納したメモリセルに対応する有効フラグビット４８の論理値を"１"に更新する（ステップＳ４）。すなわち、バッファ４５に格納された命令コード５２を有効とする。
【００９１】
例えば、有効フラグビット４８は、メモリセルに有効な命令コードが格納されている場合は"１"、有効な命令コードが格納されていない場合は"０"となる。そして、次のサブルーチンの命令コードが格納される場合は、有効フラグビット４８が"０"となっているメモリセルに格納される。
【００９２】
また、更新制御回路１７のカウンタ１８は、メモリ１１から命令コード格納イネーブル信号５３が供給されると、カウンタ値をインクリメントする（ステップＳ５）。そして、更新制御回路１７は、上限命令数信号５６によって設定された命令コードの上限数と、カウンタ１８の値（バッファ４５に格納された命令コードの数に対応）とを比較し、カウンタ１８の値が命令コードの上限数を超えたか否か判断する（ステップＳ６）。
【００９３】
カウンタ１８の値が命令コードの上限数を超えていない場合（つまり、カウンタ１８の値が命令コードの上限数以下である場合、ステップＳ６：Ｎｏ）、格納された命令コードの有効フラグビット４８を有効（"１"）のままとする。そして、分岐検出回路１６を用いてＣＰＵ１０から出力された次のフェッチアドレス５１を監視し、フェッチアドレス５１が新たなサブルーチンへの分岐を示さない場合（ステップＳ７：Ｎｏ）、ステップＳ３'以降の動作を繰り返す。一方、ＣＰＵ１０から出力された次のフェッチアドレス５１が新たなサブルーチンへの分岐を示す場合（ステップＳ７：Ｙｅｓ）、カウンタ１８の値をリセットする（ステップＳ８）。そして、バッファ４５はキャッシュメモリ４２に対して、一時的に格納していた命令コード（キャッシュ対象命令コード８２）を転送する（ステップＳ１０）。このとき、転送イネーブル信号８１はアクティブとなる。その後、ステップＳ３'以降の動作を繰り返す。
【００９４】
また、カウンタ１８の値が命令コードの上限数を超えた場合（ステップＳ６：Ｙｅｓ）、最後にバッファ４５に格納した命令コードを含むサブルーチンの全ての命令コードの有効フラグビット４８を無効（"０"）とする（ステップＳ９）。すなわち、更新制御回路１７は、カウンタ１８の値が上限命令数信号５６によって設定された命令コードの上限数を超えた場合（ステップＳ６：Ｙｅｓ）、バッファ４５に有効フラグビットリセット信号５９を出力し、最後に格納した命令コードを含むサブルーチンの全ての命令コードの有効フラグビット４８を無効（"０"）とする。また、更新制御回路１７は、バッファ４５が命令コード５２を格納することを停止するために、バッファ４５にキャッシュ停止通知信号５８を出力する。その後、ステップＳ２以降の動作を繰り返す。
【００９５】
このように、本実施の形態にかかるマイクロプロセッサシステム４では、一時的に命令コードを格納することができるバッファ４５を設け、このバッファ４５に有効フラグビット４８を設けている。そして、バッファ４５に格納された命令コードの数が予め設定された上限数以下である場合に、バッファ４５に一時的に格納されていた命令コードがキャッシュメモリ４２に転送される。よって、キャッシュメモリ４２に有効フラグビットを設ける必要がないため、キャッシュメモリの構成を簡素化することができる。
【００９６】
以上、本発明を上記実施形態に即して説明したが、上記実施形態の構成にのみ限定されるものではなく、本願特許請求の範囲の請求項の発明の範囲内で当業者であればなし得る各種変形、修正、組み合わせを含むことは勿論である。
【符号の説明】
【００９７】
１  マイクロプロセッサシステム
１０  ＣＰＵ
１１  メモリ
１２  キャッシュメモリ
１３  キャッシュ制御回路
１４  フェッチバッファ
１５  有効フラグビット
１６  分岐検出回路
１７  更新制御回路
１８  カウンタ
１９  上限命令数設定回路
５１  フェッチアドレス
５２、５４  命令コード
５３  命令コード格納イネーブル信号
５５  分岐通知信号
５６  上限命令数信号
５７  キャッシュ開始通知信号
５８  キャッシュ停止通知信号
５９  有効フラグビットリセット信号
【図１】
0005793061.tif 000002
【図２】
0005793061.tif 000003
【図３】
0005793061.tif 000004
【図４】
0005793061.tif 000005
【図５】
0005793061.tif 000006
【図６】
0005793061.tif 000007
【図７】
0005793061.tif 000008
【図８】
0005793061.tif 000009
【図９】
0005793061.tif 000010
【図１０】
0005793061.tif 000011
【図１１】
0005793061.tif 000012