(57)【要約】【課題】複数のバスマスタにキャッシュメモリを内蔵しなくても、低速で動作するメモリからデータを読み出すアクセス時間を短縮する。【解決手段】バスモジュールは一次キャッシュメモリとキャッシュコントローラを備える。キャッシュコントローラは、各バスマスタから受信したリードコマンドが第１メモリに対するものである場合、一次キャッシュメモリに当該リードコマンドで指定されたデータが格納されているか否かを判定する処理（Ｓ８）と、データが一次キャッシュメモリに格納されていない場合（Ｓ８：ＮＯ）、二次キャッシュメモリにデータが格納されているか否かを判定する処理（Ｓ９）と、データが二次キャッシュメモリに格納されていなければ（Ｓ９：ＮＯ）、データを第１メモリから読み出して（Ｓ１０）二次キャッシュメモリ及び一次キャッシュメモリに格納し（Ｓ１３，Ｓ１７）、データをバスマスタに送信する処理（Ｓ１８）とを実行する。【選択図】図２
2014170262.tif 000002
【特許請求の範囲】
【請求項１】
読み出し専用の第1メモリ、アクセス速度が前記第1メモリより高速であり読み書き可能な第２メモリ、及び複数のバスマスタと通信可能なバスモジュールであって、
一次キャッシュメモリと、
前記第２メモリのメモリ空間の一部に二次キャッシュメモリを割り当て可能なキャッシュコントローラとを備え、
前記キャッシュコントローラは、
前記バスマスタから受信したリードコマンドが前記第１メモリに対するものである場合、前記一次キャッシュメモリに当該リードコマンドで指定されたデータが格納されているか否かを判定する第１処理と、
前記データが前記一次キャッシュメモリに格納されていれば前記一次キャッシュメモリから前記データを読み出して、前記バスマスタに前記データを送信する第２処理と、
前記データが前記一次キャッシュメモリに格納されていない場合、前記二次キャッシュメモリに前記データが格納されているか否かを判定する第３処理と、
前記データが前記二次キャッシュメモリに格納されていれば、前記二次キャッシュメモリから前記一次キャッシュメモリに前記データを書き込むと共に、前記データを前記バスマスタに送信する第４処理と、
前記データが前記二次キャッシュメモリに格納されていなければ、前記データを前記第1メモリから読み出して前記二次キャッシュメモリ及び前記一次キャッシュメモリに格納し、前記データを前記バスマスタに送信する第５処理とを実行する、
ことを特徴とするバスモジュール。
【請求項２】
前記キャッシュコントローラは、
前記バスマスタから受信したリードコマンドが前記第２メモリに対するものである場合、前記第２メモリから読み出したデータを当該バスマスタに送信する、
ことを特徴とする請求項１に記載のバスモジュール。
【請求項３】
前記第１処理、前記第２処理、前記第３処理、前記第４処理及び前記第５処理を実行するモードを第１モードとし、
前記キャッシュコントローラは、前記第１モードと第２モードとを選択して実行可能であり、
前記第２モードは、
前記バスマスタから受信したリードコマンドが前記第１メモリに対するものである場合、前記第１メモリからデータを読み出して、当該データを当該バスマスタに送信する処理と、
前記バスマスタから受信したリードコマンドが前記第２メモリに対するものである場合、前記一次キャッシュメモリに当該リードコマンドで指定されたデータが格納されているか否かを判定する処理と、
前記データが前記一次キャッシュメモリに格納されていれば前記一次キャッシュメモリから前記データを読み出して、前記バスマスタに前記データを送信する処理と、
前記データが前記一次キャッシュメモリに格納されていない場合、前記データを前記第２メモリから読み出して前記一次キャッシュメモリに格納し、前記データを前記バスマスタに送信する処理とを実行する、
ことを特徴とする請求項１又は２に記載のバスモジュール。
【請求項４】
前記キャッシュコントローラは、外部から供給される設定データに基づいて、前記第２メモリのメモリ空間の一部に割り当てる前記二次キャッシュメモリのメモリ容量を設定することを特徴とする請求項１乃至３のうちいずれか１項に記載のバスモジュール。
【請求項５】
請求項１乃至４のうちいずれか１項に記載のバスモジュールと、
前記第１メモリと、
前記第２メモリと、
前記複数のバスマスタとを、
備えたことを特徴とするデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュメモリを備えたバスモジュールに関する。
【背景技術】
【０００２】
コンピュータシステムにおいては、アクセス速度が遅いメインメモリに格納されたデータへのアクセス時間を短縮するため、メインメモリからアクセス速度が速いキャッシュメモリにデータを転送し、キャッシュメモリからデータを読み出すのが一般的である（例えば、特許文献１参照）。
このような従来の態様としては、以下に述べる３つの態様を例示できる。第１の態様は、キャッシュメモリを内蔵するＣＰＵである。第２の態様は、ＤＭＡＣ（Direct Memory Access Controler）を用い、低速のＲＯＭ（Read Only Memory）から高速メモリへＤＭＡ転送するメモリ制御方式である。この場合は、複数のバスマスタが高速メモリに格納されたデータにアクセスすることでアクセス時間を短縮できる。第３の態様は、低速のＲＯＭ自体にキャッシュメモリを内蔵することで、アクセス時間を短縮できる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−１９９６７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、ＣＰＵにキャッシュメモリを内蔵する第１の態様では、ＣＰＵ以外のバスマスタはキャッシュメモリの恩恵を受けられない。そこで、複数のバスマスタの各々がキャッシュメモリを内蔵することも考えられるが、小規模のメモリをたくさん持つことになり、回路面積の増大と制御が複雑になるという問題があった。くわえて、キャッシュメモリのサイズは固定であるので、実行するソフトウェアによっては、サイズが最適でない場合があった。
また、第２の態様では、高速メモリ上のデータを常に監視し、不要になったら、ＤＭＡＣを起動して、低速ＲＯＭ上のデータを高速メモリ上に再度コピーするといった制御が非常に煩雑であった。
また、第３の態様では、低速のＲＯＭに内蔵するキャッシュメモリのサイズとアクセス速度によっては、コストが上昇するといった問題があった。
【０００５】
本発明は、上述した事情に鑑みてなされたものであり、複数のバスマスタにキャッシュメモリを内蔵しなくても低速で動作するメモリからデータを読み出すアクセス時間を短縮することを解決課題の一つとする。
【課題を解決するための手段】
【０００６】
以上の課題を解決するために本発明に係るバスモジュールは、読み出し専用の第1メモリ、アクセス速度が前記第1メモリより高速であり読み書き可能な第２メモリ、及び複数のバスマスタと通信可能なものであって、一次キャッシュメモリと、前記第２メモリのメモリ空間の一部に二次キャッシュメモリを割り当て可能なキャッシュコントローラとを備え、前記キャッシュコントローラは、前記バスマスタから受信したリードコマンドが前記第１メモリに対するものである場合、前記一次キャッシュメモリに当該リードコマンドで指定されたデータが格納されているか否かを判定する第１処理と、前記データが前記一次キャッシュメモリに格納されていれば前記一次キャッシュメモリから前記データを読み出して、前記バスマスタに前記データを送信する第２処理と、前記データが前記一次キャッシュメモリに格納されていない場合、前記二次キャッシュメモリに前記データが格納されているか否かを判定する第３処理と、前記データが前記二次キャッシュメモリに格納されていれば、前記二次キャッシュメモリから前記一次キャッシュメモリに前記データを書き込むと共に、前記データを前記バスマスタに送信する第４処理と、前記データが前記二次キャッシュメモリに格納されていなければ、前記データを前記第1メモリから読み出して前記二次キャッシュメモリ及び前記一次キャッシュメモリに格納し、前記データを前記バスマスタに送信する第５処理とを実行することを特徴とする。
【０００７】
この発明によれば、複数のバスマスタは、低速の第１メモリに対するリードコマンドをバスモジュールに送信するだけで、低速の第１メモリに格納されているデータを短いアクセス時間で読み出すことができる。即ち、バスモジュールに内蔵された一次キャッシュメモリは、システム全体で共通のキャッシュとして機能する。よって、各バスマスタ及び第１メモリは、個別にキャッシュメモリを持つ必要がなくなる。
さらに、キャッシュコントローラは、ミスヒットを検出すると、自動的に低速な第１メモリから高速な第２メモリにデータを転送し、二次キャッシュメモリ及び一次キャッシュメモリのデータを更新する。従って、ソフトウェアによる煩雑な制御が不要となる。
くわえて、キャッシュの対象は読み出し専用の第１メモリに格納されたデータである。従って、複数のバスマスタ間のキャッシュコヒーレンシが問題とならないといった利点がある。
【０００８】
上述したバスモジュールにおいて、前記キャッシュコントローラは、前記バスマスタから受信したリードコマンドが前記第２メモリに対するものである場合、前記第２メモリから読み出したデータを当該バスマスタに送信する、ことを特徴とする。この場合、第２メモリの一部を二次キャッシュメモリとして使用しつつ、他の部分は通常のメモリとして使用することが可能となる。
【０００９】
上述したバスモジュールにおいて、前記第１処理、前記第２処理、前記第３処理、前記第４処理及び前記第５処理を実行するモードを第１モードとし、前記キャッシュコントローラは、前記第１モードと第２モードとを選択して実行可能であり、前記第２モードは、前記バスマスタから受信したリードコマンドが前記第１メモリに対するものである場合、前記第１メモリからデータを読み出して、当該データを当該バスマスタに送信する処理と、前記バスマスタから受信したリードコマンドが前記第２メモリに対するものである場合、前記一次キャッシュメモリに当該リードコマンドで指定されたデータが格納されているか否かを判定する処理と、  前記データが前記一次キャッシュに格納されていれば前記一次キャッシュメモリから前記データを読み出して、前記バスマスタに前記データを送信する処理と、前記データが前記一次キャッシュメモリに格納されていない場合、前記データを前記第２メモリから読み出して前記一次キャッシュメモリに格納し、前記データを前記バスマスタに送信する処理とを実行することを特徴とする。
【００１０】
この発明によれば、バスモジュールは、第２モードにおいて、第２メモリに対するキャッシュとして機能する。即ち、バスモジュールに内蔵された一次キャッシュメモリは、システム全体で共通のキャッシュとして機能するため、複数のバスマスタは、個別にキャッシュメモリを持たなくても、第２メモリに格納されたデータのアクセス時間を短縮することができる。
くわえて、バスモジュールは、第１モードと第２モードを選択可能である。即ち、第１モードにおいて一次キャッシュメモリは、第１メモリのキャッシュとして機能するが、第２モードにおいて一次キャッシュメモリは、第２メモリのキャッシュとして機能する。仮に、一次キャッシュメモリを第１メモリのキャッシュとしてのみ機能させると、第１メモリに格納されたデータを用いない場合、一次キャッシュメモリが無駄になってしまう。本発明では、モードによって一次キャッシュメモリの機能を切り替えることができるので、一次キャッシュメモリを有効に活用することが可能となる。
【００１１】
上述したバスモジュールにおいて、前記キャッシュコントローラは、外部から供給される設定データに基づいて、前記第２メモリのメモリ空間の一部に割り当てる前記二次キャッシュメモリのメモリ容量を設定することが好ましい。
第２メモリにおいて二次キャッシュメモリが割り当てられないメモリ空間は通常のメモリ領域として使用されるところ、二次キャッシュメモリのサイズが大きければ通常のメモリ領域が減少し、メモリ領域が大きければ二次キャッシュメモリのサイズが減少する。この発明によれば、二次キャッシュメモリをアクセス速度が高速な第２メモリの一部のメモリ空間を任意の大きさで割り当てることが可能なため、必要に応じて二次キャッシュメモリのサイズを変更することが可能となる。
【００１２】
本発明に係るデータ処理装置は、上述したバスモジュールと、前記第１メモリと、前記第２メモリと、前記複数のバスマスタとを備えたことを特徴とする。この発明によれば、バスモジュールに内蔵された一次キャッシュメモリは、システム全体で共通のキャッシュとして機能する。よって、各バスマスタ及び第１メモリは、個別にキャッシュメモリを持つ必要がなくなるといった効果がある。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態に係るデータ処理装置の構成を示すブロック図である。
【図２】バスモジュールの第１モードにおける処理内容を示すフローチャートである。
【図３】バスモジュールの第１モードにおけるハードウエアプリフェッチ処理の内容を示すフローチャートである。
【図４】バスモジュールの第２モードにおける処理内容を示すフローチャートである。
【図５】バスモジュールの第２モードにおけるハードウエアプリフェッチ処理の内容を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、図面を参照しつつ、本発明に係る実施形態を説明する。
＜１．データ処理装置の構成＞
図１は、本発明の実施形態に係るデータ処理装置１の主要構成を示すブロック図である。データ処理装置１は、複数のバスマスタ１１、１２、１３…、バスモジュール２０、第１メモリ３０、及び第２メモリ４０を備える。例えば、バスマスタ１１はＣＰＵであり、バスマスタ１２は画像処理を実行するモジュールであり、バスマスタ１３はサウンド処理を実行するモジュールである。この例では、バスマスタ１１はキャッシュメモリを内蔵するが、バスマスタ１２及び１３はキャッシュメモリを内蔵しない。即ち、バスモジュール２０に接続される各バスマスタは、必ずしもキャッシュメモリを内蔵する必要がない。
【００１５】
第１メモリ３０は、第２メモリ４０よりもアクセス速度が遅い読み出し専用のメモリである。例えば、ＲＯＭ（Read Only Memory）が該当する。一方、第２メモリ４０は、第１メモリよりもアクセス速度が速く、データの読み出し及び書き込みが可能なメモリであって、例えば、ＤＤＲ３ＤＲＡＭ（Double-Data-Rate3 Dynamic Random Access Memory）などが該当する。なお、第２メモリ４０のメモリ空間には、後述するように二次キャッシュメモリＭ２が割り当てられる。
【００１６】
バスモジュール２０は、バスマスタ１１、１２、１３…と第１メモリ３０及び第２メモリ４０との間に設けられ、第１メモリ３０及び第２メモリ４０へのアクセスを制御する。
バスモジュール２０は、データの読み出し及び書き込みを制御するキャッシュコントローラ２３と、バスマスタ１１、１２、１３…とキャッシュコントローラ２３との間に設けられたバス２１、キャッシュコントローラ２３と第１メモリ３０及び第２メモリ４０との間に設けられたバス２２、並びに一次キャッシュメモリＭ１を備える。一次キャッシュメモリＭ１は第２メモリ４０よりアクセス速度が高速である。
また、一次キャッシュメモリＭ１及び第２メモリ４０に割り当てられる二次キャッシュメモリＭ２は、データを記憶するＤＡＴＡアレイ、ＴＡＧアドレスを記憶するＴＡＧアレイ、プリフェッチ用のアドレスを記憶するＬＲＵアレイを含む。ＤＡＴＡアレイは、例えば、Ｎウエイ・Ｋラインで構成される。
なお、一次キャッシュメモリＭ１のサイズは固定であるが、二次キャッシュメモリＭ２のデータサイズは任意に変更できるようになっている。具体的には、キャッシュコントローラ２３は、第２メモリ４０に二次キャッシュメモリＭ２を割り当てる際に、任意のライン数を指定することによって、任意のデータサイズを設定する。
【００１７】
バスマスタ１１、１２、１３…はキャッシュコントローラ２３に対してマスタとして機能し、キャッシュコントローラ２３はバスマスタ１１、１２、１３…に対してスレーブとして機能する。一方、キャッシュコントローラ２３は第１メモリ３０及び第２メモリ４０に対してマスタとして機能し、第１メモリ３０及び第２メモリ４０はキャッシュコントローラ２３に対してスレーブとして機能する。
【００１８】
＜２．バスモジュールの動作＞
バスモジュール２０は、３つのモードで動作する。第１モードにおいて、キャッシュコントローラ２３は、第２メモリ４０のメモリ空間の一部に二次キャッシュメモリＭ２を割り当てる。そして、キャッシュコントローラ２３は、バスモジュール２０内の一次キャッシュメモリＭ１及び第２メモリ４０内の二次キャッシュメモリＭ２を第１メモリ３０のキャッシュとして機能させる。
次に、第２モードにおいて、キャッシュコントローラ２３は、バスモジュール２０内の一次キャッシュメモリＭ１を第２メモリ４０のキャッシュとして機能させる。この場合、一次キャッシュメモリＭ１の記憶内容がバスマスタ１１、１２、１３…により書き変わるようなことがあると一次キャッシュメモリＭ１と第２メモリ４０の記憶内容に整合性が取れなくなる。このため、キャッシュコントローラ２３は、一次キャッシュメモリＭ１のミスヒット後のデータの入れ替えの際に追い出したデータで第２メモリ４０に書き直すライトバック方式を採用する。従って、第２モードのキャッシュ機能は第１メモリ３０と無関係になる。
次に、第３モードにおいて、キャッシュコントローラ２３は、バスモジュール２０を単なるバスとして機能させる。
モードは、モード設定コマンドによって指定される。例えば、バスマスタ１１がＣＰＵである場合、バスマスタ１１が発行するモード設定コマンドによって、第１乃至第３モードのうち一つが設定される。なお、モードの設定は、キャッシュコントローラ２３の所定のレジスタにフラグを書き込むことによって実行してもよい。
【００１９】
＜２−１：第１モード＞
次に、第１モードの動作について説明する。第１モードでは、まず、キャッシュコントローラ２３は、第２メモリ４０のメモリ空間の一部に二次キャッシュメモリＭ２を割り当てる。ここで、二次キャッシュメモリＭ２のメモリ容量は任意に設定可能である。例えば、バスマスタ１１、１２、１３…からの要求に応じて、キャッシュコントローラ２３が二次キャッシュメモリＭ２のメモリ容量を決定する。あるいは、ＣＰＵなどの所定のバスマスタが二次キャッシュメモリＭ２のメモリ容量を指定するコマンドを発行し、当該コマンドをキャッシュコントローラ２３が受信し、当該コマンドに従ってキャッシュコントローラ２３が指定された容量の二次キャッシュメモリＭ２を第２メモリ４０のメモリ空間の一部に割り当ててもよい。
【００２０】
図２は、第１モードにおけるキャッシュコントローラ２３の動作内容を示すフローチャートである。キャッシュコントローラ２３はバスマスタ１１、１２、１３…がバスモジュール２０に送信したコマンドを受信すると、データの読み出しを指示するリードコマンドであるか否かを判定する（Ｓ１）。受信コマンドがリードコマンドでない場合、キャッシュコントローラ２３は、第２メモリ４０の非キャッシュ領域へのライトコマンドであるか否かを判定し（Ｓ２）、非キャッシュ領域へのライトコマンドである場合には、第２メモリ４０の非キャッシュ領域へデータを書き込む（Ｓ３）。一方、受信コマンドが非キャッシュ領域へのライトコマンドでない場合には、キャッシュコントローラ２３はエラー処理を実行する（Ｓ４）。
【００２１】
次に、受信コマンドがリードコマンドである場合、ステップＳ１の判定条件は肯定され、キャッシュコントローラ２３は、受信コマンドが第１メモリ３０へのリードコマンドであるか否かを判定する（Ｓ５）。受信コマンドが第１メモリ３０へのリードコマンドでない場合、キャッシュコントローラ２３は第２メモリ４０のデータを読み出して、当該コマンドを送信したバスマスタにデータを送信する（Ｓ６）。一方、受信コマンドが第１メモリ３０へのリードコマンドである場合には、キャッシュコントローラ２３は、後述するハードウエアプリフェッチ処理を並行して実行し（Ｓ７）、一次キャッシュメモリＭ１にデータが格納されているか否かを判定する（Ｓ８）。
【００２２】
一次キャッシュメモリＭ１にデータが格納されている場合には、キャッシュコントローラ２３は、一次キャッシュメモリＭ１からデータを読み出して、当該コマンドを送信したバスマスタにデータを送信する（Ｓ１８）。
一方、一次キャッシュメモリＭ１にデータが格納されていなかった場合、キャッシュコントローラ２３は、二次キャッシュメモリＭ２にデータが格納されているか否かを判定する（Ｓ９）。ステップＳ９の判定条件が否定される場合は、一次キャッシュメモリＭ１及び二次キャッシュメモリＭ２にデータが格納されていない。この場合、キャッシュコントローラ２３は、第１メモリ３０からデータを読み出す（Ｓ１０）。
【００２３】
次に、キャッシュコントローラ２３は、二次キャッシュメモリＭ２に空きが無いか否かを判定する（Ｓ１１）。二次キャッシュメモリＭ２に空きが無い場合、キャッシュコントローラ２３は、二次キャッシュメモリＭ２からラインの追い出しを実行する（Ｓ１２）。つまり、二次キャッシュメモリＭ２の所定のラインを無効化して空きを作る。この場合、キャッシュコントローラ２３は、最も古く読み出されたラインを追い出す。これにより、二次キャッシュメモリＭ２に空きができる。キャッシュコントローラ２３は、二次キャッシュメモリＭ２にステップＳ１０で第１メモリ３０から読み出したデータを、二次キャッシュメモリＭ２に書き込む（Ｓ１３）。なお、二次キャッシュメモリＭ２に空きが有り、ステップＳ１１の判定条件が否定された場合も、第１メモリ３０から読み出したデータを、二次キャッシュメモリＭ２に書き込む（Ｓ１３）。
【００２４】
この後、キャッシュコントローラ２３は、二次キャッシュメモリＭ２から、ステップＳ１３にて書き込んだデータを再度読み出す（Ｓ１４）。なお、二次キャッシュメモリＭ２にデータが格納されており、ステップＳ９の判定条件が肯定された場合も同様である。次に、キャッシュコントローラ２３は、一次キャッシュメモリＭ１に空きが無いか否かを判定する（Ｓ１５）。一次キャッシュメモリＭ１に空きが無い場合、キャッシュコントローラ２３は、一次キャッシュメモリＭ１からラインの追い出しを実行する（Ｓ１６）。この場合、キャッシュコントローラ２３は、最も古く読み出されたラインを追い出す。次に、キャッシュコントローラ２３は、一次キャッシュメモリＭ１にステップＳ１４で二次キャッシュメモリＭ２から読み出したデータを、一次キャッシュメモリＭ１に書き込む（Ｓ１７）。なお、一次キャッシュメモリＭ１に空きが有り、ステップＳ１５の判定条件が否定された場合も、二次キャッシュメモリＭ２から読み出したデータを、一次キャッシュメモリＭ１に書き込む（Ｓ１７）。この後、キャッシュコントローラ２３は、一次キャッシュメモリＭ１から、ステップＳ１７にて書き込んだデータを再度読み出して、当該コマンドを送信したバスマスタにデータを送信する（Ｓ１８）。
【００２５】
このように第１モードにおいて、キャッシュコントローラ２３は、バスマスタ１１、１２、１３…から受信したリードコマンドが低速で動作する第１メモリ３０に対するものである場合、一次キャッシュメモリＭ１に当該リードコマンドで指定されたデータが格納されているか否かを判定する処理（Ｓ８）と、データが一次キャッシュメモリＭ１に格納されていれば（Ｓ８：ＹＥＳ）、一次キャッシュメモリＭ１からデータを読み出して、バスマスタにデータを送信する処理（Ｓ１８）と、データが一次キャッシュメモリＭ１に格納されていない場合（Ｓ８：ＮＯ）、二次キャッシュメモリＭ２にデータが格納されているか否かを判定する処理（Ｓ９）と、データが二次キャッシュメモリＭ２に格納されていれば（Ｓ９：ＹＥＳ）、二次キャッシュメモリＭ２からデータを読み出して（Ｓ１４）一次キャッシュメモリＭ１にデータを書き込む（Ｓ１７）と共に、データをバスマスタに送信する処理（Ｓ１８）と、データが二次キャッシュメモリＭ２に格納されていなければ（Ｓ９：ＮＯ）、データを第１メモリ３０から読み出して（Ｓ１０）二次キャッシュメモリＭ２及び一次キャッシュメモリＭ１に格納し（Ｓ１３，Ｓ１７）、データをバスマスタに送信する処理（Ｓ１８）とを実行する。
【００２６】
これにより、バスマスタ１１、１２、１３…は、低速の第１メモリ３０に対するリードコマンドをバスモジュール２０に送信するだけで、低速の第１メモリ３０に格納されているデータを短いアクセス時間で読み出すことができる。即ち、バスモジュール２０に内蔵された一次キャッシュメモリＭ１は、システム全体で共通のキャッシュとして機能するため、バスマスタ１１、１２、１３…やバススレーブたる第１メモリ３０は、個別にキャッシュメモリを持つ必要がなくなる。
また、二次キャッシュメモリＭ２をアクセス速度が高速な第２メモリ４０の一部のメモリ空間を任意の大きさで割り当てることが可能なため、独立して二次キャッシュメモリＭ２を設ける必要がなく、チップ面積を削減することができる。
【００２７】
さらに、キャッシュコントローラ２３は、ミスヒットを検出すると（Ｓ９：ＮＯ）、自動的に低速な第１メモリ３０から高速な第２メモリ４０にデータを転送し、二次キャッシュメモリＭ２及び一次キャッシュメモリＭ１のデータを更新する（Ｓ１３、Ｓ１７）。従って、ソフトウェアによる煩雑な制御が不要となる。
くわえて、キャッシュの対象は読み出し専用の第１メモリ３０に格納されたデータである。従って、複数のバスマスタ１１、１２、１３…間のキャッシュコヒーレンシが問題とならないといった利点がある。
【００２８】
次に、第１モードにおけるハードウエアプリフェッチ処理について説明する。図３はハードウエアプリフェッチ処理の内容を示すフローチャートである。なお、以下の説明では、リードコマンドが示すデータが格納される第１メモリ３０のラインの次のラインのアドレスをプリフェッチアドレス、次のラインのデータをプリフェッチデータと称する。
受信したコマンドが第１メモリ３０に対するリードコマンドである場合、キャッシュコントローラ２３は、プリフェッチアドレスを生成し（Ｓ２０）、プリフェッチデータが、一次キャッシュメモリＭ１に格納されているか否かを判定する（Ｓ２１）。一次キャッシュメモリＭ１にプリフェッチデータが格納されている場合には、キャッシュコントローラ２３は、アイドル状態に移行する（Ｓ３３）。
【００２９】
一方、一次キャッシュメモリＭ１にプリフェッチデータが格納されていなかった場合、キャッシュコントローラ２３は、二次キャッシュメモリＭ２にプリフェッチデータが格納されているか否かを判定する（Ｓ２２）。ステップＳ２２の判定条件が否定される場合は、一次キャッシュメモリＭ１及び二次キャッシュメモリＭ２にプリフェッチデータが格納されていない。この場合、キャッシュコントローラ２３は、プリフェッチアドレスを生成し（Ｓ２３）。第１メモリ３０からプリフェッチデータを読み出す（Ｓ２４）。
【００３０】
次に、キャッシュコントローラ２３は、二次キャッシュメモリＭ２に空きが無いか否かを判定する（Ｓ２５）。二次キャッシュメモリＭ２に空きが無い場合、キャッシュコントローラ２３は、二次キャッシュメモリＭ２からラインの追い出しを実行する（Ｓ２６）。この場合、キャッシュコントローラ２３は、最も古く読み出されたラインを追い出す。キャッシュコントローラ２３は、ステップＳ２４で第１メモリ３０から読み出したプリフェッチデータを、二次キャッシュメモリＭ２に書き込み（Ｓ２７）。なお、二次キャッシュメモリＭ２に空きが有り、ステップＳ２５の判定条件が否定された場合も、第１メモリ３０から読み出したプリフェッチデータを、二次キャッシュメモリＭ２に書き込む（Ｓ２７）。
【００３１】
この後、キャッシュコントローラ２３は、二次キャッシュメモリＭ２からプリフェッチデータを読み出す（Ｓ２９）。なお、二次キャッシュメモリＭ２にプリフェッチデータが格納されており、ステップＳ２２の判定条件が肯定された場合も同様である。
次に、キャッシュコントローラ２３は、一次キャッシュメモリＭ１に空きが無いか否かを判定する（Ｓ３０）。一次キャッシュメモリＭ１に空きが無い場合、キャッシュコントローラ２３は、一次キャッシュメモリＭ１からラインの追い出しを実行する（Ｓ３１）。この場合、キャッシュコントローラ２３は、最も古く読み出されたラインを追い出す。次に、キャッシュコントローラ２３は、ステップＳ２９で二次キャッシュメモリＭ２から読み出したプリフェッチデータを、一次キャッシュメモリＭ１に書き込む（Ｓ３２）。なお、一次キャッシュメモリＭ１に空きが有り、ステップＳ３０の判定条件が否定された場合も、二次キャッシュメモリＭ２から読み出したプリフェッチデータを、一次キャッシュメモリＭ１に書き込む（Ｓ３２）。この後、キャッシュコントローラ２３は、アイドル状態に移行する（Ｓ３３）。
【００３２】
以上説明したように、キャッシュコントローラ２３は、第１メモリ３０へのリードコマンドに対応して、一次キャッシュメモリＭ１、二次キャッシュメモリＭ２、又は第１メモリ３０のいずれかからデータを読み出している間に並行して、次に読み出される可能性が高いプリフェッチデータが一次キャッシュメモリＭ１に格納されているか判定し、一次キャッシュメモリＭ１に格納されていなければ二次キャッシュメモリＭ２に格納されているか判定し、二次キャッシュメモリＭ２に格納されていれば一次キャッシュメモリＭ１にプリフェッチデータを格納し、二次キャッシュメモリＭ２に格納されていなければプリフェッチデータを第１メモリ３０から読み出して一次キャッシュメモリＭ１及び二次キャッシュメモリＭ２に格納する。
これにより、次に読み出される可能性が高いプリフェッチデータを一次キャッシュメモリＭ１に予め準備することができ、アクセス時間を短縮することができる。
【００３３】
＜２−２：第２モード＞
次に、第２モードの動作について説明する。第２モードでは、第２メモリ４０のメモリ空間の一部を二次キャッシュメモリＭ２として使用しない。従って、キャッシュコントローラ２３は、二次キャッシュメモリＭ２の割り当てを実行しない。
【００３４】
図４は、第２モードにおけるキャッシュコントローラ２３の動作内容を示すフローチャートである。キャッシュコントローラ２３はバスマスタ１１、１２、１３…がバスモジュール２０に送信したコマンドを受信すると、データの読み出しを指示するリードコマンドであるか否かを判定する（Ｓ４０）。受信コマンドがリードコマンドでない場合、キャッシュコントローラ２３は、第２メモリ４０へのライトコマンドであるか否かを判定し（Ｓ４１）、ライトコマンドである場合には、データを第２メモリ４０へ書き込む（Ｓ４２）。一方、受信コマンドがライトコマンドでない場合には、キャッシュコントローラ２３はエラー処理を実行する（Ｓ４３）。
【００３５】
次に、受信コマンドがリードコマンドである場合、ステップＳ４０の判定条件は肯定され、キャッシュコントローラ２３は、受信コマンドが第２メモリ４０へのリードコマンドであるか否かを判定する（Ｓ４４）。受信コマンドが第２メモリ４０へのリードコマンドでない場合は、キャッシュコントローラ２３は、第１メモリ３０のデータを読み出して、当該コマンドを送信したバスマスタにデータを送信する（Ｓ４５）。一方、受信コマンドが第２メモリ４０へのリードコマンドである場合には、キャッシュコントローラ２３は、後述するハードウエアプリフェッチ処理を並行して実行し（Ｓ４６）、一次キャッシュメモリＭ１にデータが格納されているか否かを判定する（Ｓ４７）。
【００３６】
一次キャッシュメモリＭ１にデータが格納されている場合には、キャッシュコントローラ２３は、一次キャッシュメモリＭ１からデータを読み出して、当該コマンドを送信したバスマスタにデータを送信する（Ｓ５２）。
一方、一次キャッシュメモリＭ１にデータが格納されていなかった場合、キャッシュコントローラ２３は、第２メモリ４０からデータを読み出す（Ｓ４８）。次に、キャッシュコントローラ２３は、一次キャッシュメモリＭ１に空きが無いか否かを判定する（Ｓ４９）。一次キャッシュメモリＭ１に空きが無い場合、キャッシュコントローラ２３は、一次キャッシュメモリＭ１からラインの追い出しを実行する（Ｓ５０）。この場合、キャッシュコントローラ２３は、最も古く読み出されたラインを追い出す。次に、キャッシュコントローラ２３は、ステップＳ４８で第２メモリ４０から読み出したデータを、一次キャッシュメモリＭ１に書き込む（Ｓ５１）。なお、一次キャッシュメモリＭ１に空きが有り、ステップＳ４９の判定条件が否定された場合も、第２メモリ４０から読み出したデータを、一次キャッシュメモリＭ１に書き込む（Ｓ５１）。この後、キャッシュコントローラ２３は、一次キャッシュメモリＭ１から、ステップＳ５１にて書き込んだデータを再度読み出して、当該コマンドを送信したバスマスタにデータを送信する（Ｓ５２）。
【００３７】
このように第２モードにおいて、キャッシュコントローラ２３は、バスマスタ１１、１２、１３…から受信したリードコマンドが第１メモリ３０に対するものである場合、第１メモリ３０から読み出したデータをバスマスタに送信する処理（Ｓ４５）と、リードコマンドが第２メモリ４０に対するものである場合、一次キャッシュメモリＭ１に当該リードコマンドで指定されたデータが格納されているか否かを判定する処理（Ｓ４７）と、データが一次キャッシュメモリＭ１に格納されていれば（Ｓ４７：ＹＥＳ）、一次キャッシュメモリＭ１からデータを読み出して、バスマスタにデータを送信する処理（Ｓ５２）と、データが一次キャッシュメモリＭ１に格納されていない場合（Ｓ４７：ＮＯ）、第２メモリ４０からデータを読み出して（Ｓ４８）一次キャッシュメモリＭ１にデータを書き込む（Ｓ５１）と共に、データをバスマスタに送信する処理（Ｓ５２）とを実行する。
【００３８】
これにより、バスモジュール２０は、第２メモリ４０に対するキャッシュとして機能する。即ち、バスモジュール２０に内蔵された一次キャッシュメモリＭ１は、システム全体で共通のキャッシュとして機能するため、バスマスタ１１、１２、１３…は、個別にキャッシュメモリを持たなくても、第２メモリ４０に格納されたデータのアクセス時間を短縮することができる。
【００３９】
くわえて、バスモジュール２０は、第１モードと第２モードを選択可能である。即ち、第１モードにおいて一次キャッシュメモリＭ１は、第１メモリ３０のキャッシュとして機能するが、第２モードにおいて一次キャッシュメモリＭ１は、第２メモリ４０のキャッシュとして機能する。仮に、一次キャッシュメモリＭ１を第１メモリ３０のキャッシュとしてのみ機能させると、第１メモリ３０に格納されたデータを用いない場合、一次キャッシュメモリＭ１が無駄になってしまう。本実施形態では、モードによって一次キャッシュメモリＭ１の機能を切り替えることができるので、一次キャッシュメモリＭ１を有効に活用することが可能となる。
【００４０】
次に、第２モードにおけるハードウエアプリフェッチ処理について説明する。図５は第２モードのハードウエアプリフェッチ処理の内容を示すフローチャートである。なお、以下の説明では、第１モードにおけるハードウエアプリフェッチ処理と同様に、リードコマンドが示すデータが格納される第２メモリ４０のラインの次のラインのアドレスをプリフェッチアドレス、次のラインのデータをプリフェッチデータと称する。
受信したコマンドが第２メモリ４０に対するリードコマンドである場合、キャッシュコントローラ２３は、プリフェッチアドレスを生成し（Ｓ６０）、プリフェッチデータが、一次キャッシュメモリＭ１に格納されているか否かを判定する（Ｓ６１）。一次キャッシュメモリＭ１にプリフェッチデータが格納されている場合には、キャッシュコントローラ２３は、アイドル状態に移行する（Ｓ６６）。
【００４１】
一方、一次キャッシュメモリＭ１にプリフェッチデータが格納されていなかった場合、キャッシュコントローラ２３は、第２メモリ４０からプリフェッチデータを読み出す（Ｓ６２）。この後、キャッシュコントローラ２３は、一次キャッシュメモリＭ１に空きが無いか否かを判定する（Ｓ６３）。一次キャッシュメモリＭ１に空きが無い場合、キャッシュコントローラ２３は、一次キャッシュメモリＭ１からラインの追い出しを実行する（Ｓ６４）。この場合、キャッシュコントローラ２３は、最も古く読み出されたラインを追い出す。キャッシュコントローラ２３は、ステップＳ６２で第２メモリ４０から読み出したプリフェッチデータを、一次キャッシュメモリＭ１に書き込む（Ｓ６５）。なお、一次キャッシュメモリＭ１に空きが有り、ステップＳ６３の判定条件が否定された場合も、第２メモリ４０から読み出したプリフェッチデータを、一次キャッシュメモリＭ１に書き込み（Ｓ６５）、アイドル状態に移行する（Ｓ６６）。
これにより、次に読み出される可能性が高いプリフェッチデータを一次キャッシュメモリＭ１に予め準備することができ、アクセス時間を短縮することができる。
【００４２】
＜３．変形例＞
本発明は上述した実施形態に限定されるものではなく、例えば、以下に述べる各種の変形が可能である。また、実施形態及び各種の変形例は適宜組み合わせてもよい。
（１）上述した実施形態では第１モード及び第２モードにおいてハードウエアプリフェッチ処理を実行したが、キャッシュコントローラ２３は、各モードでハードウエアプリフェッチ処理を実行するか否かを、バスモジュール２０の外部から供給される設定データに基づいて設定してもよい。
【００４３】
（２）上述した実施形態では、全てのバスマスタ１１、１２、１３…が、第１モードにおいて一次キャッシュメモリＭ１及び二次キャッシュメモリＭ２を利用し、第２モードにおいて一次キャッシュメモリＭ１を利用したが、本発明はこれに限定されるものではなく、バスモジュール２０の外部から供給される制御データに基づいて、キャッシュコントローラ２３はバスマスタごとに第１モード及び第２モードの適用を定めてもよい。
この場合、制御データは、ＣＰＵなどの所定のバスマスタがバスモジュール２０に供給してもよいし、各バスマスタが制御データをバスモジュール２０に供給してもよい。
【符号の説明】
【００４４】
１……データ処理装置、１０，１１，１２……バスマスタ、２０……バスモジュール、２３……キャッシュコントローラ、３０……第１メモリ、４０……第２メモリ、Ｍ１……一次キャッシュメモリ、Ｍ２……二次キャッシュメモリ。
【図１】
2014170262.tif 000003
【図２】
2014170262.tif 000004
【図３】
2014170262.tif 000005
【図４】
2014170262.tif 000006
【図５】
2014170262.tif 000007