(57)【要約】【課題】本発明は、キャッシュの更新を容易に行うキャッシュコントローラ、マイクロプロセッサシステム、記憶装置を提供することを目的とする。【解決手段】命令コードをメモリからプリフェッチしてキャッシュに格納させるキャッシュコントローラであって、プロセッサから命令フェッチアドレスが比較アドレスに一致したときには、比較アドレスに対応するプリフェッチアドレスを出力するアドレス出力部と、出力されたメモリのプリフェッチアドレスからキャッシュに命令コードをロードするロード制御部と、を有することを特徴とするキャッシュコントローラ。【選択図】図２
2008090492.tif 000002
【特許請求の範囲】
【請求項１】
命令コードをメモリからプリフェッチしてキャッシュに格納するキャッシュコントローラであって、
プロセッサからの命令フェッチアドレスが所定アドレスに一致したときに、所定アドレスに対応するプリフェッチアドレスを出力するアドレス出力部と、
出力されたプリフェッチアドレスからキャッシュに命令コードをロードするロード制御部と、
を有することを特徴とするキャッシュコントローラ。
【請求項２】
アドレス出力部は、所定アドレスとプリフェッチアドレスとの対応テーブルを有することを特徴とする請求項１記載のキャッシュコントローラ。
【請求項３】
所定アドレスは、無条件分岐命令のアドレスの値より所定値小さいことを特徴とする請求項１記載のキャッシュコントローラ。
【請求項４】
命令コードを格納するメインメモリと、  
命令コードをメモリからプリフェッチして格納するキャッシュと、
キャッシュを制御するキャッシュコントローラと、を有し、  
キャッシュコントローラが、
プロセッサからの命令フェッチアドレスが所定アドレスに一致したときに、所定アドレスに対応するプリフェッチアドレスを出力するアドレス出力部と、
出力されたプリフェッチアドレスからキャッシュに命令コードをロードするロード制御部と、
を有することを特徴とするマイクロプロセッサシステム。
【請求項５】
記録媒体にデータをリード又は／及びライトする記憶装置において、
命令コードを格納するメインメモリと、  
命令コードをメモリからプリフェッチして格納するキャッシュと、
キャッシュを制御するキャッシュコントローラと、を有し、  
キャッシュコントローラが、
プロセッサからの命令フェッチアドレスが所定アドレスに一致したときに、所定アドレスに対応するプリフェッチアドレスを出力するアドレス出力部と、
出力されたプリフェッチアドレスからキャッシュに命令コードをロードするロード制御部と、
を有することを特徴とする記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
命令コードの一部をキャッシュに配置する仕組みを持つキャッシュコントローラ、マイクロプロセッサシステム、記憶装置に関する。
【背景技術】
【０００２】
ディスク装置のプログラムは、一般的に不揮発性のメモリにブートプログラムが組み込まれていることが多い。そのため、電源投入後、不揮発性のメモリに書き込まれたブートプログラムを用いて、ディスク媒体上からブートプログラム以外のプログラムが読み出される。このようにして読み出されたプログラムは、一旦、アクセス速度の遅いＤＲＡＭ（Dynamic Random Access Memory）からなるメモリ上に格納される。そして、一部はキャッシュとして、アクセス速度の早いＳＲＡＭ（Static Random Access Memory）に格納される。メモリからキャッシュへのプログラムの転送は、キャッシュコントローラによって、制御される。そして、キャッシュに格納されたプログラムの命令コードは、ＭＰＵ（Micro Processing Unit）により、フェッチされる。このキャッシュとしては、２段のキャッシュＡ、キャッシュＢが用いられる例がある。プログラムが、分岐命令を含まない命令コードの場合がある。このような場合には、ＭＰＵがキャッシュＡ内のプログラムを実行することで、命令コードのフェッチ位置がキャッシュＡの所定サイズまで達した場合に、キャッシュＡに格納されているプログラムの後続のプログラムの命令コードをメモリからキャッシュＢに格納する。プログラムが、分岐命令を含まない命令コードの場合には、このようなキャッシュ機能であらかじめ将来実行する予定の命令コードをメモリからキャッシュにプリフェッチし続けることができるため、キャッシュミスによるメモリ上へのフェッチが減少する。その結果、実行処理時間を速めることができる。
【０００３】
しかし、例えばキャッシュＡの命令コードをＭＰＵがフェッチしたときに、その命令コードが、例えば分岐命令であるサブルーチン呼び出し命令の場合には、キャッシュコントローラは、サブルーチンの命令コードがキャッシュＡまたはＢにあるか否かを判定する。そしてどちらのキャッシュにもない場合には、キャッシュミスとしてサブルーチンの命令コードをメモリからキャッシュＢに格納する。また、このサブルーチンの命令コードのサイズがキャッシュサイズよりも大きい場合には、サブルーチンの実行中にキャッシュＡには、サブルーチンのプログラムの後続の命令コードが格納される。やがて、サブルーチンの処理が終了したときには、戻り先のコードはすでにキャッシュＡから排除されて別のコードがキャッシュされているため、キャッシュミスとして再度サブルーチンの戻り先の命令コードをキャッシュする必要がある。このように、メモリからキャッシュへの命令コードの転送のやり直しは、メモリに対して余分な負荷を与えることになり、プログラムの実行時間にも影響をあたえている。このため、キャッシュの更新が必要な命令コードのフェッチの前に予め、キャッシュの更新を行う方法が提案されている(特許文献１)。
【特許文献１】特開平１１−１４３７７５号公報（第４頁段落００３５、図１）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
この方法は、ユーザによって記述されたプログラム命令を使用して、メモリ上にマッピングされたキャッシュコントローラ内のコマンドレジスタにデータをライトする転送命令を実行させる。そして、キャッシュコントローラは、コマンドレジスタの内容からデータが格納されている先頭アドレスを得る。次に、ＤＭＡＣ（Direct Memory Access Control）を駆動してメモリからキャッシュにデータを格納する。この結果、キャッシュの更新が必要な場所について、ユーザがプログラム上に記述することで、キャッシュヒットを高めることができる。しかし、キャッシュの更新が必要な場所について、プログラム上にすべて命令コードを記述する必要があるため、プログラム全体の容量に影響を与える。本発明は、プログラムに命令コードを追加することなくキャッシュの更新を事前に行うキャッシュコントローラ、マイクロプロセッサシステム、記憶装置を提供する。
【課題を解決するための手段】
【０００５】
本発明のキャッシュコントローラ、マイクロプロセッサシステム、記憶装置は、命令コードをメモリからプリフェッチしてキャッシュに格納するために、プロセッサからの命令フェッチアドレスが所定アドレスに一致したときに、所定アドレスに対応するプリフェッチアドレスを出力するアドレス出力部と、出力されたプリフェッチアドレスからキャッシュに命令コードをロードするロード制御部と、を有する構成である。この構成により、所定アドレスに対応するプリフェッチアドレスを出力するので、ＭＰＵは、命令フェッチサイクルにおいて、キャッシュミスが少なくなる。
【発明の効果】
【０００６】
マイクロプロセッサのキャッシュヒットが向上するため、マイクロプロセッサシステム、記憶装置の処理能力が向上する。
【発明を実施するための最良の形態】
【０００７】
（実施例１）
図１は、ハードディスク装置内部の構造を示したブロック図である。ハードディスク装置３１は、ホストとのインタフェースを制御する通信制御部３２、プログラムを格納するプログラムメモリ４、キャッシュ３等を制御するバッファ制御部３３、書き込みデータのコード変調、リードデータのコード復調を行うリードライトチャネルＩＣ３４、リードアンプとライトドライバを内蔵するヘッドＩＣ３５、ＭＰＵ２、データを格納するバッファメモリ３６、ブートプログラムを格納する不揮発性メモリ３７、ディスク媒体４２を回転させる回転制御やヘッドアクチュエータの動作の制御を行うサーボ制御部３８、ヘッドアクチュエータを実際に動かすボイスコイルモータ（ＶＣＭ）３９、ディスク媒体４２を回転させるスピンドルモータ（ＳＰＭ）４０、リードライト用のヘッド４１、ディスク媒体４２、内部のコモンバス４３を示す。プログラムメモリ４とバッファ制御部３３との間はローカルバスである。ホスト５１からのライトデータは、通信制御部３２を経由してバッファメモリ３６に格納される。格納されたライトデータは、リードライトチャネルＩＣ３４によりコード変調され、ヘッドＩＣ３５により、ヘッド４１を経てディスク媒体４２にライトされる。ディスク媒体４２からヘッド４１でリードされたデータは、ヘッドＩＣ３５で増幅されてリードライトチャネルＩＣ３４によりコード復調されてバッファメモリ３６に格納される。格納されたデータは、通信制御部３２によりホスト５１に送信される。
【０００８】
図２は、マイクロプロセッサシステムの構成図である。マイクロプロセッサシステム２１は、キャッシュコントローラ１、ＭＰＵ２、キャッシュ３、プログラムメモリ４を有する。キャッシュコントローラ１は、キャッシュ３の制御をするものである。ＭＰＵ２は、命令コードをキャッシュ３からフェッチし、実行するマイクロプロセッサである。キャッシュ３は、命令コードを一時的に格納するＳＲＡＭである。キャッシュ１８、キャッシュ１９の２つからなる。キャッシュ１８、キャッシュ１９の容量は、例えば各６４バイトとする。プログラムメモリ４は、ハードディスク装置３１を動作させるプログラムを格納するＳＤＲＡＭ（Synchronous DRAM）である。キャッシュコントローラ１は、アドレス出力部１１とアドレス比較部１２と、ロード制御部１５、アドレス変換部１６、転送制御部１７を有する。アドレス比較部１２は、ＭＰＵ２が命令コードをフェッチするために出力するフェッチアドレスがキャッシュ３の命令コードの格納アドレスの範囲内にあるか否かを判断する。そして、その範囲内にあれば、キャッシュヒット信号を出力し、範囲外にあれば、キャッシュミス信号をフェッチアドレスとともに出力する。そのため、アドレス比較部１２は、ＭＰＵ２の命令コードフェッチアドレスとの比較のためのアドレスをアドレスレジスタＡ〜Ｄ（図示せず）に格納している。アドレスレジスタＡ〜Ｄは、キャッシュ１８が格納している命令コードの先頭アドレスを格納するアドレスレジスタＡと、最終アドレスを格納するアドレスレジスタＢがある。また、キャッシュ１９が格納している命令コードの先頭アドレスを格納するアドレスレジスタＣと、最終アドレスを格納するアドレスレジスタＤがある。従って、アドレス比較部１２は、キャッシュ３へのフェッチアドレスが、アドレスレジスタＡに格納されているアドレスからアドレスレジスタＢに格納されているアドレスまでのアドレス範囲内に含まれているか否かを判断する。また、キャッシュ３へのフェッチアドレスが、アドレスレジスタＣに格納されているアドレスからアドレスレジスタＤに格納されているアドレスまでのアドレス範囲内に含まれているか否かを判断する。
【０００９】
図３にアドレス出力部の説明図を示す。アドレス出力部１１は、テーブル１３、出力部１４よりなる。テーブル１３は、特定されたプログラムについてキャッシュ３へのロードを開始するためのロード開始アドレスとその特定されたプログラムを格納しているアドレスとの対応を示す。テーブル１３−１とテーブル１３−２の２つを有する。テーブル１３−１は、プログラムメモリ４上のサブルーチンの格納アドレスを記憶するためのテーブルである。また、サブルーチンのリターン先アドレスが1箇所のみの場合のリターン先アドレスを格納するためのテーブルである。テーブル１３−２は、サブルーチンのリターン先アドレスを複数指定するためのテーブルである。出力部１４は、テーブル１３から出力されたアドレスについて、プリフェッチアドレス、一致信号、転送禁止データを出力する。
【００１０】
図４にテーブルの説明図を示す。図４（ａ）は、プログラムの中で同一サブルーチンが、１箇所のみで使用されている場合の例である。図４（b）は、プログラムの中で同一サブルーチンが複数箇所で使用されている場合の例である。テーブル１３−１は、プログラムメモリ４からキャッシュ３へ転送を開始するロード開始アドレスと、所定のプログラムを格納するプログラム格納アドレスとの対応を示す。ＭＰＵ２のプリフェッチアドレスとロード開始アドレスが一致する場合には、ロード開始アドレスに対応するプログラム格納アドレスをプリフェッチアドレスとして出力する。プログラム格納アドレスとして１６進で００００が格納されているときには、プリフェッチアドレスを出力しないことを示す。また、ロード開始アドレスと転送禁止データとの対応を示す。転送禁止データは、「１」のとき、転送禁止である。「０」のときは、転送可である。この転送禁止データは、ロード開始アドレスによりサブルーチンをキャッシュ３に格納したあとに、そのキャッシュ３がアクセスされると、呼び出し側のキャッシュ３に自動的にプログラムをプログラムメモリ４からフェッチすることを禁止するために設けてある。サブルーチンの容量が、キャッシュ３の容量内のときに使用される。
【００１１】
一方、テーブル１３−２は、プログラムメモリ４からキャッシュ３へ転送を開始するロード開始アドレスと、所定のプログラムを格納するプログラム格納アドレスとの対応を示す。ＭＰＵ２のフェッチアドレスが、ロード開始アドレスと一致すると、ロード開始アドレスに対応するプログラム格納アドレスが出力される。そして、そのプログラム格納アドレスは、出力部１４のメモリＢ６４に格納される。また、プログラム格納アドレスとして１６進で００００が格納されているときには、プリフェッチアドレスを出力しないことを示す。また、ロード開始アドレスと許可データとの対応を示す。許可データは、「１」のとき、出力部１４のメモリＢ６４からプリフェッチアドレスを取得し、出力する。一方、「０」のときは、メモリＢ６４からプリフェッチアドレスを取得しない。
【００１２】
図３の説明に戻る。まず、テーブル１３について、図４（ａ）の例で説明する。プログラムの中で同一サブルーチンは、１箇所のみで使用されている場合の例である。テーブル１３−１は、ＭＰＵ２からのフェッチアドレスＡ０〜Ａｎが入力されると、そのアドレスがサブルーチンのプログラムをキャッシュ３に格納するロード開始アドレスＡＤＲ１、ＡＤＲ２の場合には、対応するサブルーチンのプリフェッチアドレスＡＤＲＣ1、ＡＤＲＣ２のデータＤ０〜Ｄｎ、転送禁止データDｎ＋１を出力する。また、ＭＰＵ２からのフェッチアドレスＡ０〜Ａｎが入力されると、そのアドレスがサブルーチンのリターン先アドレス以降のプログラムをキャッシュ３に格納するロード開始アドレスＡＤＲ３の場合には、対応するプリフェッチアドレスＡＤＲＲ３のデータＤ０〜Ｄｎ、転送禁止データDｎ＋１を出力する。
【００１３】
次に、出力部１４は、テーブル１３−１をアクセスした出力が、００００であれば不一致信号、それ以外であれば一致信号として出力する検出器Ａ６１を有する。また、一致信号のときは、メモリＡ６２にデータＤ０〜Ｄｎ＋１をラッチする。ラッチされた信号は、プリフェッチアドレスＰＡ０〜ＰＡｎ、転送禁止データとして、一致信号とともに出力する。一方、テーブル１３−２には、プログラム格納アドレスとして００００が格納されているので、００００がＤ２０〜Ｄ２ｎとして出力され、出力部１４の検出器Ｂ６３で不一致と判断される。その結果、出力部１４のメモリＢ６４に格納されない。その結果、プリフェッチアドレスＱＡ０〜ＱＡｎは、出力されない。また許可データＤ２ｎ＋１は、「０」のため、メモリＢ６４からはプリフェッチアドレスを取得しない。
【００１４】
次に、テーブル１３について、図４（b）の例で説明する。プログラムの中で同一サブルーチンが複数箇所で使用されている場合の例である。テーブル１３−１は、ＭＰＵ２からのフェッチアドレスＡ０〜Ａｎが入力されると、そのアドレスがサブルーチンのプログラムをキャッシュ３に格納するためのロード開始アドレスＡＤＲ１、ＡＤＲ２の場合には、対応するサブルーチンのプリフェッチアドレスＡＤＲＣ1、ＡＤＲＣ２のデータＤ０〜Ｄｎ、転送禁止データDｎ＋１を出力する。また、ＭＰＵ２からのフェッチアドレスＡ０〜Ａｎが入力されると、そのアドレスがサブルーチンのリターン先アドレス以降のプログラムをキャッシュ３に格納するためのロード開始アドレスＡＤＲ３が入力された場合には、００００が出力される。次に、出力部１４は、テーブル１３−１をアクセスした出力が、００００であれば不一致信号、それ以外であれば一致信号として出力する検出器Ａ６１を有する。また、一致信号のときは、メモリＡ６２にデータＤ０〜Ｄｎ＋１をラッチする。ラッチされた信号は、プリフェッチアドレスＰＡ０〜ＰＡｎ、転送禁止データとして、一致信号とともに出力する。
【００１５】
一方、テーブル１３−２は、ＭＰＵ２からのフェッチアドレスＡ０〜Ａｎが入力されると、そのアドレスがサブルーチンのプログラムをキャッシュ３に格納するためのロード開始アドレスＡＤＲ１、ＡＤＲ２の場合には、対応する００００またはＡＤＲＲ３のデータＤ２０〜Ｄ２ｎを出力する。また、許可データＤ２ｎ＋１は、「０」である。また、ＭＰＵ２からのフェッチアドレスＡ０〜Ａｎが入力されると、そのアドレスがサブルーチンのリターン先アドレス以降のプログラムをキャッシュ３に格納するためのロード開始アドレスＡＤＲ３が入力された場合には、出力は、００００であるが、許可データを示すＤ２ｎ＋１に「１」を出力する。
【００１６】
次に、出力部１４は、テーブル１３−２をアクセスした出力が、００００であれば不一致信号、それ以外であれば一致信号として検出する検出器Ｂ６３を有する。ロード開始アドレスが、ＡＤＲ２の場合は、一致信号が出力されるため、Ｄ２０〜Ｄ２ｎとして出力されるサブルーチンのリターン先アドレスＡＤＲＲ３をメモリＢ６４に格納する。また、出力部１４は、許可データＤ２ｎ＋１が「１」のときには、メモリＢ６４に格納したサブルーチンのリターン先アドレスＡＤＲＲ３をプリフェッチアドレスＱＡ０〜ＱＡｎとして出力する。また、同時に、一致信号を出力する。一致信号は、許可データをもとに検出器Ｂ６３が生成している。このように、プログラムの中で、複数箇所で同一のサブルーチンを使用する場合、プログラムの各箇所のロード開始アドレスに対応するサブルーチンのリターン先アドレスをテーブル１３−２に予め設定できる。そして、サブルーチンの中でロード開始アドレスが検出されると、各箇所に対応するサブルーチンのリターン先アドレスをメモリＢ６４から出力できる。メモリＢ６４は、ＦＩＦＯ構造であり、サブルーチン中のサブルーチンの場合に対応するように構成されている。また、ロード開始アドレスの決め方は、次のようである。まず、ユーザは、無条件分岐命令、復帰命令を探す。そして、無条件分岐命令、復帰命令が見つかったならば、そのアドレスから固定バイト数前のアドレスを確定する。そして、確定されたアドレスをロード開始アドレスとする。
【００１７】
図２の説明に戻る。ロード制御部１５は、プログラムメモリ４からキャッシュ３へのプログラムの命令コードの転送開始アドレスを示すキャッシュ開始レジスタ、ロード先のキュッシュ３を指定するキャッシュ指定アドレス、プログラムメモリ４からキャッシュ３へのバースト転送駆動回路を有する。アドレス比較部１２の出力が、キャッシュミスの不一致信号の場合に、転送制御部１７から転送開始信号を受けると、キャッシュ開始レジスタに設定されたＭＰＵ２のフェッチアドレスをもとに、プログラムメモリ４からキャッシュ３への命令コード格納のためのバースト転送を駆動する。１回のバースト転送で例えば８ワードをプログラムメモリ４からキャッシュ３に取り込む設定にしてある。そして、４回のバースト転送を行い、３２ワードをキャッシュ３に格納する。バースト転送が終了する転送終了信号を転送制御部１７に出力する。また、出力部１４の出力が一致信号の場合は、転送制御部１７から転送開始信号を受けるとキャッシュ開始レジスタに設定されたプリフェッチアドレスをもとに、プログラムメモリ４からキャッシュ３への命令コード格納のためのバースト転送を駆動する。バースト転送が終了する転送終了信号を転送制御部１７に出力する。
【００１８】
アドレス変換部１６は、アドレス比較部１２の出力が、アドレスレジスタの示す範囲内にあるキャッシュヒットの一致信号出力のときには、フェッチアドレスをキャッシュ３のアクセスアドレスに変換する。この結果、キャッシュ３から命令コードが出力され、ＭＰＵ２のレジスタにフェッチアドレスに対応する命令コードが格納される。
【００１９】
転送制御部１７は、ロード制御部１５のキャッシュ開始レジスタにフェッチアドレス、またはプリフェッチアドレスをセットする。次に、命令コードをプログラムメモリ４からロードすべきキャッシュ３を指定する。そして、転送開始信号をロード制御部１５に出力する。電源投入後の初期状態のときは、キャッシュ１８に格納する。また、ロード制御部１５からの転送終了通知を受けたときは、命令コードをロードすべきキャッシュ３を判定する。具体的には、プログラムメモリ４からキャッシュ３への命令コードのロードが完了し、アドレス比較部１２からの一致信号が出力されているキャッシュ３とは別のキャッシュ３をロード先のキャッシュ３と判定する。そして、プログラムメモリ４からのロードを開始するか否かを判断する。例えば転送禁止データがオンならば転送しない。
【００２０】
図５にアドレス空間の説明図を示す。アドレスが００００〜ＦＦＦＦまでのアドレス空間の例である。例えば、１０００〜７ＦＦＦまでがプログラム領域、Ｅ０００〜Ｅ０７Ｆまでが、キャッシュ３の領域である。キャッシュ領域は、キャッシュ１８のＥ０００〜Ｅ０３Ｆ、キャッシュ１９のＥ０４０〜Ｅ０７Ｆまでの２つに分割されている。 
【００２１】
次に、ＭＰＵ２の命令コードフェッチ動作概要について説明する。ＭＰＵ２からアドレスバス上に命令コードをフェッチするためのフェッチアドレスが出力され、リード制御信号線がアサートされる。次にＭＰＵ２の命令コードのフェッチアドレスと、キャッシュ３に格納されている命令コードのアドレスとを比較する。このため、アドレス比較部１２は、フェッチアドレスがキャッシュ１８、キャッシュ１９に格納されている命令コードの格納アドレス範囲に含まれているか否かをチェックする。アドレス比較部１２がＭＰＵ２の指定したアドレスの命令コードが、キャッシュ１８またはキャッシュ１９内に取り込み済みと判断し、キャッシュヒットの一致信号を出力すれば、アドレス変換部１６は、ＭＰＵ２のフェッチアドレスからキャッシュ１８またはキャッシュ１９の格納アドレスに変換して、命令コードが格納されているキャッシュ１８またはキャッシュ１９のアドレスからこの命令コードをデータバス上に出力する。そして、ＭＰＵ２が、このデータバス上命令コードを取り込む。一致信号が出力された場合のアドレス変換部１６の変換方法は、ＭＰＵ２のフェッチアドレスが１０１０とし、アドレスレジスタの先頭アドレスが１０００、最終アドレスが、１０３Ｆであれば、キャッシュアドレスがＥ０００のため、先頭アドレスとフェッチアドレスの差分にＥ０００のアドレスを加算するアドレス変換をし、Ｅ０１０がフェッチするアドレスとして出力される。一方、アドレス比較部１２がＭＰＵ２の指定したアドレスと不一致と判断し、不一致信号を出力すると、転送制御部１７は、キャッシュ開始レジスタへフェッチアドレスをセットする。そして、ロード制御部１５に転送開始信号を出力する。次に、ロード制御部１５は、フェッチアドレスを行アドレス、列アドレスに分解して、所定のタイミングで、プログラムメモリ４に対して、起動コマンドと行アドレス、リードコマンドと列アドレスをプログラムメモリ４に出力する。その結果、プログラムメモリ４から命令コードが８ワード分出力され、例えばキャッシュ１８にライトされる。キャッシュ１８は、６４バイトのため、この転送を４回行えば、キャッシュ１８をフルに、命令コードを転送できる。その結果、１命令１ワードの場合は、３２命令コードが格納される。
【００２２】
フェッチアドレスの先頭アドレスをアドレスレジスタＡ、Ｂにキャッシュ開始レジスタのセットと同時に格納してある。最終アドレスは、プログラムメモリ４から命令コードをキャッシュ１８に転送するごとに、アドレスレジスタＢのアドレスを更新しながらセットしていく。キャッシュ１８へのバースト転送が終了すると、ＭＰＵ２のフェッチアドレスに該当する命令コードは、データバス上に出力される。そして、ＭＰＵ２が、このデータバス上の命令コードを取り込む。バースト転送の格納先のキャッシュ３とＭＰＵ２がアクセスするキャッシュ３が同一の場合は、ＭＰＵ２は、バースト転送間で命令コードのフェッチが可能である。一方、バースト転送の格納先のキャッシュ３とＭＰＵ２がアクセスするキャッシュ３が異なる場合は、プログラムメモリ４とキャッシュ３間は、ローカルバスのため、ＭＰＵ２は、バースト転送中でも命令コードのフェッチが可能である。
【００２３】
次に、プログラムに無条件分岐命令が含まれる例について説明する。図６にサブルーチン動作の説明図１を示す。テーブル１３にサブルーチンをキャッシュ３に格納するためのロード開始アドレスと、サブルーチンを格納するプログラム格納アドレスとの対応テーブルを登録してある。例えば、図４（ａ）にサブルーチンのプログラムをキャッシュ３に格納するロード開始アドレスＡＤＲ１とサブルーチンのプログラムを格納しているプログラムメモリ４上の格納先アドレスＡＤＲＣ１および転送禁止データ「１」との対応を示す。ＡＤＲ２、ＡＤＲ３のテーブルは使用されないものとする。プログラムの中で、サブルーチンを呼び出す箇所は、１箇所の例である。まず、プログラムが、キャッシュ１８、キャッシュ１９に格納されているものする。このときのキャッシュ１８のアドレスレジスタの先頭アドレスは、２０００、最終アドレスは、２０３Ｆとする。アドレスは、１６進表示である。キャッシュ１８には、CALL命令（サブルーチン呼び出し命令）、CALL命令の次アドレスにXXXX命令、キャッシュ１８の最終アドレスにZZZZ命令が格納されているものとする。また、キャッシュ１９の先頭アドレスは、１ＦＣ０で、最終アドレス１ＦＦＦとする（図６（ａ）参照）。
【００２４】
次に、ＭＰＵ２からのフェッチアドレスにより、キャッシュ１８の命令コードが順次アクセスされる。そして、フェッチアドレスを基にテーブル１３がアクセスされる。ＭＰＵ２からの命令コードのフェッチアドレスＡＤＲ１がテーブル１３に入力されると、出力部１４は、一致信号とともにＡＤＲ１に対応するアドレスＡＤＲＣ１を出力する。転送制御部１７は、一致信号を検出すると、キャッシュ開始レジスタにＡＤＲＣ１を設定する。また格納先キャッシュ３としてキャッシュ１９を設定する。そして、ロード制御部１５に転送開始信号を出力する。また転送制御部１７は、転送禁止データ「１」を記憶する。ロード制御部１５は、キャッシュ１９にサブルーチンの格納を開始する。そして、サブルーチン容量、例えば６４バイトとすると、キャッシュ１９の容量分の６４バイトをロードする。キャッシュ１９に格納されている元の命令コードは、上書きされる。キャッシュ１９のアドレスレジスタＣにサブルーチンの先頭アドレスＡＤＲＣ１が格納される。アドレスレジスタDの最終アドレスは、ＡＤＲＣ１＋００３Ｆである（図６（ｂ）参照）。
【００２５】
次にＭＰＵ２は、キャッシュ１８に格納されている命令を順次命令を実行し、ＣＡＬＬ命令を実行すると、キャッシュ１９にサブルーチンのプログラムが含まれているため、ＣＡＬＬ命令の実行先アドレスＡＤＲＣ１の命令コードが格納されているキャッシュ１９からサブルーチンの命令コードを取り出してＭＰＵ２のレジスタにセットする。転送制御部１７は、このときＡＤＲ１に対応する転送禁止データを記憶しているため、プログラムメモリ４のＡＤＲＣ１＋００４０アドレスからキャッシュ１８への命令コードの格納を自動ロードしない。キャッシュ１９のプログラムの命令コードが順次実行され、ＡＤＲＣ１＋００３ＦのＲＴＳ（サブルーチン復帰命令）をＭＰＵ２が実行すると、ＣＡＬＬ命令の次のアドレスからＭＰＵ２は、命令フェッチを行う（図６（ｃ））。キャッシュ１８のアクセスが開始される。
【００２６】
図７にサブルーチン動作の説明図２を示す。図４（ａ）に、サブルーチンのプログラムをキャッシュ３に格納するロード開始アドレスＡＤＲ２とサブルーチンのプログラムを格納しているプログラムメモリ４上の格納先アドレスＡＤＲＣ２および転送禁止データ「０」との対応を示す。ＡＤＲ１のテーブルは使用されないものとする。プログラムの中で、サブルーチンを呼び出す箇所は、１箇所の例である。また、サブルーチンのリターン先アドレス以降のプログラムをキャッシュに格納するロード開始アドレスＡＤＲ３とサブルーチンリターン先アドレスを格納しているプログラムメモリ４上の格納先アドレスＡＤＲＲ３および転送禁止データ「０」との対応を示す。まず、プログラムが、キャッシュ１８、キャッシュ１９に格納されているものする。このときのキャッシュ１８のアドレスレジスタの先頭アドレスは、３０００、最終アドレスは、３０３Ｆとする。アドレスは、１６進表示である。キャッシュ１８には、CALL命令、CALL命令の次アドレスにXXXX命令、キャッシュ１８の最終アドレスにZZZZ命令が格納されているものとする。また、キャッシュ１９の先頭アドレスは、２ＦＣ０で、最終アドレス２ＦＦＦとする（図７（ａ）参照）。
【００２７】
次に、ＭＰＵ２からのフェッチアドレスにより、キャッシュ１８の命令コードが順次アクセスされる。そして、フェッチアドレスを基にテーブル１３がアクセスされる。ＡＤＲ２がテーブル１３に入力されると、出力部１４は、一致信号とともにＡＤＲ２に対応するアドレスＡＤＲＣ２を出力する。転送禁止データは０が出力される。転送制御部１７は、一致信号を検出すると、キャッシュ開始レジスタにＡＤＲＣ２を設定する。また、格納先キャッシュ３としてキャッシュ１９を設定する。そして、ロード制御部１５に転送開始信号を出力する。ロード制御部１５は、キャッシュ１９にサブルーチンの格納を開始する。そして、サブルーチン容量、例えば９６バイトとすると、その中のキャッシュ１９の容量分の６４バイトのみをロードする。キャッシュ１９に格納されている元の命令コードは、上書きされる。キャッシュ１９のアドレスレジスタＣにサブルーチンの先頭アドレスＡＤＲＣ２が格納される。アドレスレジスタDの最終アドレスは、ＡＤＲＣ２＋００３Ｆである（図７（ｂ）参照）。
【００２８】
次にＭＰＵ２は、順次命令を実行し、ＣＡＬＬ命令を実行すると、キャッシュ１９にサブルーチンのプログラムが含まれているため、ＣＡＬＬ命令の実行先アドレスＡＤＲＣ２の命令コードが格納されているキャッシュ１９からサブルーチンの命令コードを取り出してＭＰＵ２のレジスタにセットする。一方、転送制御部１７は、転送禁止データが「０」のため、キャッシュ１９へのサブルーチンのロード完了およびキャッシュ１９へのアクセスが開始したと判断して、キャッシュ開始レジスタに、ＡＤＲＣ２＋００４０を設定する。また格納先キャッシュ３としてキャッシュ１８を設定する。そして転送開始信号をロード制御部１５に出力する。この結果、ロード制御部１５は、サブルーチンの残りの容量３２バイトを含めて６４バイトをキャッシュ１８にロードする。キュッシュ３１の先頭アドレスは、ＡＤＲＣ２＋００４０である（図７（ｃ）参照）。次に、サブルーチンの命令コードのフェッチアドレスがＡＤＲＣ２＋００３Ｆ番地の最終アドレスにいたると、ＭＰＵ２は、ＡＤＲＣ＋００４０番地を出力するため、アドレス比較部１２による比較により、キャッシュ１８の先頭アドレスがヒットし、その格納されている命令コードが出力される。
【００２９】
図８にサブルーチン動作の説明図３を示す。ＭＰＵ２からのフェッチアドレスにより、キャッシュ１８の命令コードが順次アクセスされる。そして、フェッチアドレスを基にテーブル１３がアクセスされる。ＡＤＲ３がテーブル１３に入力されると、出力部１４からＡＤＲ３に対応するアドレスＡＤＲＲ３と一致信号が出力されるので、転送制御部１７は、キャッシュ開始レジスタにＡＤＲＲ３を設定する。そして、ロード制御部１５に転送開始信号を出力する。ロード制御部１５は、プログラムメモリ４からキャッシュ１９にＣＡＬＬ命令の次のアドレスから６４バイトを格納する。キャッシュ１９のアドレスレジスタＣ、ＤにＣＡＬＬ命令の次のアドレスＡＤＲＲ３が格納される。そして、アドレスレジスタDは、順次アドレス更新され、最終アドレスとしては、ＡＤＲＲ３＋００３Ｆ番地が格納される（図８（ｄ）参照）。次にＭＰＵ２は、順次命令を実行し、ＲＴＳ命令を実行すると、キャッシュ１９にＣＡＬＬ命令の次のアドレスが格納されているため、キャッシュ１９から対応する命令コードを取り出して実行する。
【００３０】
一方、プログラムの中に、同一のサブルーチンを複数の箇所で使用している場合には、図４（ｂ）のテーブルが使用される。前述のプログラムの中でサブルーチンを呼び出す箇所が１箇所の例の説明と異なる部分を主にして図７、図８に基づいて説明を行う。
【００３１】
図７（ｂ）は、ロード開始アドレスＡＤＲ２に対応するプログラムメモリ４上の格納先アドレスＡＤＲＣ２から、サブルーチンのプログラムをキャッシュ１９に格納する例を示す。まず、ＭＰＵ２のフェッチアドレスがキャッシュ１８を順次アクセスし、ロード開始アドレスＡＤＲ２に一致したときに、プリフェッチアドレスＡＤＲＣ２を出力すると同時に、サブルーチンのリターン先のアドレスＡＤＲＲ３が出力部１４のメモリＢ６４に格納される。次に、プログラムメモリ４上の格納先アドレスＡＤＲＣ２から、サブルーチンのプログラムがキャッシュ１９に格納される。その後、処理が進み、図８（ｄ）の例に示すように、ＭＰＵ２からのフェッチアドレスにより、キャッシュ１８の命令コードが順次アクセスされる。そして、ＭＰＵ２の命令コードのフェッチアドレスがＡＤＲ３のときに、許可データ「１」が出力され、メモリＢ６４からＡＤＲＲ３が読み出される。そして、ＡＤＲＲ３がプリフェッチアドレスとして出力部１４から出力される。この結果、プログラムメモリ４のＡＤＲＲ３からキャッシュ１９にプログラムが転送される。そして、図８（ｄ）の例に示すように、ＭＰＵ２が、キャッシュ１８のアクセスにより、順次命令を実行し、ＲＴＳ命令を実行すると、キャッシュ１９にＣＡＬＬ命令の次のアドレスが格納されているため、キャッシュ１９から対応する命令コードを取り出して実行することができる。
【００３２】
一方、キャッシュへの命令コードの格納は、分岐命令の実行により、変動するため、無条件分岐命令の格納されているキャッシュ３と、ロード開始アドレスが指すキャッシユ３とが分離している場合がある。分離しているときは、無条件分岐命令の格納されているキャッシュ３が破壊されるため、実行できない。そのため、ロード開始アドレスを無視する。この状態を検出するため、出力部１４から一致信号が出力されたときに、転送制御部１７は、出力部１４のアドレスとそのキャッシュ３の最終アドレスとの差分を計算する。その差分が固定バイト未満ならば、プリフェッチを中止するために、転送開始信号を出力しない。固定バイト数以上であれば、プリフェッチするため、転送開始信号を出力する。また、キャッシュ３への自動ロード中にロード開始アドレスを検出した場合には、自動ロードをキャンセルし、ロード開始アドレスに対応するアドレスのプログラムをキャッシュ３へロードする。また、無条件分岐命令として、このほかに、ジャンプ命令もある。さらに、無条件分分岐命令に限らず、同一のアドレスに複数回ジャンプすることが多い命令にも適用できる。このように、無条件分岐命令の実行にあたり、キャッシュヒットするように、事前にキャッシュ内容を更新するので、ＭＰＵ２の処理を高速に処理できる。
【００３３】
以上の実施例１を含む実施形態に関し、更に以下の付記を開示する。
（付記１）命令コードをメモリからプリフェッチしてキャッシュに格納するキャッシュコントローラであって、プロセッサからの命令フェッチアドレスが所定アドレスに一致したときに、所定アドレスに対応するプリフェッチアドレスを出力するアドレス出力部と、出力されたプリフェッチアドレスからキャッシュに命令コードをロードするロード制御部と、を有することを特徴とするキャッシュコントローラ。
（付記２）アドレス出力部は、所定アドレスとプリフェッチアドレスとの対応テーブルを有することを特徴とする付記１記載のキャッシュコントローラ。
（付記３）所定アドレスは、無条件分岐命令のアドレスの値より所定値小さいことを特徴とする付記１記載のキャッシュコントローラ。
（付記４）所定アドレスは、サブルーチンからの復帰命令の格納アドレスの値より所定値小さいことを特徴とする付記１記載のキャッシュコントローラ。
（付記５）対応テーブルは、サブルーチンの呼び出し命令のアドレスより所定値小さいアドレスとサブルーチンの開始アドレスとの対応、サブルーチンからの復帰命令のアドレスの値より所定値小さいアドレスと、サブレーチンの戻り先のアドレスとの対応を格納することを特徴とする付記２記載のキャッシュコントローラ。
（付記６）命令コードを格納するメインメモリと、命令コードをメモリからプリフェッチして格納するキャッシュと、キャッシュを制御するキャッシュコントローラと、を有し、キャッシュコントローラが、プロセッサからの命令フェッチアドレスが所定アドレスに一致したときに、所定アドレスに対応するプリフェッチアドレスを出力するアドレス出力部と、出力されたプリフェッチアドレスからキャッシュに命令コードをロードするロード制御部と、を有することを特徴とするマイクロプロセッサシステム。
（付記７）アドレス出力部は、所定アドレスとプリフェッチアドレスとの対応テーブルを有することを特徴とする付記６記載のマイクロプロセッサシステム。
（付記８）所定アドレスは、無条件分岐命令のアドレスの値より所定値小さいことを特徴とする付記６記載のマイクロプロセッサシステム。
（付記９）所定アドレスは、サブルーチンからの復帰命令の格納アドレスの値より所定値小さいことを特徴とする付記６記載のマイクロプロセッサシステム。
（付記１０）対応テーブルは、サブルーチンの呼び出し命令のアドレスより所定値小さいアドレスとサブルーチンの開始アドレスとの対応、サブルーチンからの復帰命令のアドレスの値より所定値小さいアドレスと、サブレーチンの戻り先のアドレスとの対応を格納することを特徴とする付記７記載のマイクロプロセッサシステム。
（付記１１）記録媒体にデータをリード又は／及びライトする記憶装置において、命令コードを格納するメインメモリと、命令コードをメモリからプリフェッチして格納するキャッシュと、キャッシュを制御するキャッシュコントローラと、を有し、キャッシュコントローラが、プロセッサからの命令フェッチアドレスが所定アドレスに一致したときに、所定アドレスに対応するプリフェッチアドレスを出力するアドレス出力部と、出力されたプリフェッチアドレスからキャッシュに命令コードをロードするロード制御部と、を有することを特徴とする記憶装置。
（付記１２）アドレス出力部は、所定アドレスとプリフェッチアドレスとの対応テーブルを有することを特徴とする付記１１記載の記憶装置。
（付記１３）所定アドレスは、無条件分岐命令のアドレスの値より所定値小さいことを特徴とする付記１１記載の記憶装置。
（付記１４）所定アドレスは、サブルーチンからの復帰命令の格納アドレスの値より所定値小さいことを特徴とする付記１１記載の記憶装置。
（付記１５）対応テーブルは、サブルーチンの呼び出し命令のアドレスより所定値小さいアドレスとサブルーチンの開始アドレスとの対応、サブルーチンからの復帰命令のアドレスの値より所定値小さいアドレスと、サブレーチンの戻り先のアドレスとの対応を格納することを特徴とする付記１２記載の記憶装置。
【図面の簡単な説明】
【００３４】
【図１】ハードディスク装置内部の構造を示したブロック図
【図２】プロセッサシステムの構成図
【図３】アドレス出力部の説明図
【図４】テーブルの説明図
【図５】アドレス空間の説明図
【図６】サブルーチン動作の説明図１
【図７】サブルーチン動作の説明図２
【図８】サブルーチン動作の説明図３
【符号の説明】
【００３５】
１    キャッシュコントローラ    
２    ＭＰＵ
３、１８、１９  キャッシュ
４    プログラムメモリ
１１  アドレス出力部
１２  アドレス比較部
１３、１３−１、１３−２  テーブル
１４  出力部
１５  ロード制御部
１６  アドレス変換部
１７  転送制御部
２１  マイクロプロセッサシステム
３１  ハードディスク装置
３２  通信制御部
３３  バッファ制御部
３４  リードライトチャネルＩＣ
３５  ヘッドＩＣ
３６  バッファメモリ
３７  不揮発性メモリ
３８  サーボ制御部
３９  ボイスコイルモータ
４０  スピンドルモータ
４１  ヘッド
４２  ディスク媒体
４３  内部のコモンバス
５１  ホスト  
６１  検出器Ａ
６２  メモリＡ
６３  検出器Ｂ
６４  メモリＢ
【図１】
2008090492.tif 000003
【図２】
2008090492.tif 000004
【図３】
2008090492.tif 000005
【図４】
2008090492.tif 000006
【図５】
2008090492.tif 000007
【図６】
2008090492.tif 000008
【図７】
2008090492.tif 000009
【図８】
2008090492.tif 000010