(57)【要約】【課題】メモリアクセスに起因した電力消費を低減し、排他的アクセスを可能とするキャッシュメモリ装置および処理方法を提供する。【解決手段】複数のプロセッサそれぞれから複数のコマンドを受け付けるコマンド受付手段３０１と、コマンド受付手段３０１が受け付けたコマンドに対応する処理を行う処理手段と、処理手段がコマンドを処理しているときに、処理手段による処理中のコマンドに対するキャッシュラインアドレスと同一のキャッシュラインアドレスに対するコマンドをコマンド受付手段３０１が受け付けた場合に、コマンド受付手段３０１が受け付けたコマンドをキュー３３０に格納する格納手段とを備えた。【選択図】        図２
2007323192.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサそれぞれから複数のコマンドを受け付けるコマンド受付手段と、
前記コマンド受付手段が受け付けたコマンドに対応する処理を行う処理手段と、
前記処理手段が前記コマンドを処理しているときに、前記処理手段による処理中の前記コマンドに対するキャッシュラインアドレスと同一のキャッシュラインアドレスに対するコマンドを前記コマンド受付手段が受け付けた場合に、前記コマンド受付手段が受け付けた前記コマンドをキューに格納する格納手段と
を備えたことを特徴とするキャッシュメモリ装置。
【請求項２】
前記処理が完了した場合に、前記キューに格納されている前記コマンドを読み出す読出手段をさらに備え、
前記処理手段は、前記読出手段により読み出された前記コマンドに対する処理を行うことを特徴とする請求項１に記載のキャッシュメモリ装置。
【請求項３】
前記読出手段は、前記キューに複数のコマンドが格納されている場合に、前記キューに格納された時期が最も古いコマンドから順に読み出すことを特徴とする請求項２に記載のキャッシュメモリ装置。
【請求項４】
前記処理手段は、前記コマンドに対するコマンド処理として、ロック処理を行うことを特徴とする請求項２または３に記載のキャッシュメモリ装置。
【請求項５】
前記コマンドの種類ごとに設けられ、各コマンドの処理状態を監視する複数の第１ステートマシンをさらに備え、
前記処理手段は、前記コマンドに対応する前記第１ステートマシンを動作させ、
前記読出手段は、前記第１ステートマシンの処理が終了した場合に、前記キューに格納されている前記コマンドを読み出すことを特徴とする請求項２から４のいずれか一項に記載のキャッシュメモリ装置。
【請求項６】
前記格納手段は、所定の種類のコマンドに対するすべての前記第１ステートマシンが使用されているときに、前記コマンド受付手段が当該種類のコマンドを受け付けた場合に、前記コマンド受付手段が受け付けた前記コマンドを前記キューに格納することを特徴とする請求項５に記載のキャッシュメモリ装置。
【請求項７】
前記第１ステートマシンにより呼び出される第２ステートマシンであって、前記第１ステートマシンの数より少ない数の前記第２ステートマシンと、
前記第２ステートマシンを呼び出すべき複数の前記第１ステートマシンの待ち行列を作り、前記待ち行列に格納された時期が最も古い前記第１ステートマシンから順に前記第２ステートマシンを呼び出し可能とする調停手段と
をさらに備えたことを特徴とする請求項５または６に記載のキャッシュメモリ装置。
【請求項８】
前記第１ステートマシンにより利用される機器であって、前記第１ステートマシンの数より少ない数の前記機器と、
前記機器を利用すべき複数の前記第１ステートマシンの待ち行列を作り、前記待ち行列に格納された時期が最も古い前記第１ステートマシンから順に前記機器を利用可能とする調停手段と、
前記機器を利用している前記第１ステートマシンの種類に応じた利用時間を管理するタイマと
をさらに備え、
前記調停手段は、前記タイマが前記利用時間をカウントした場合に、前記機器を利用可能であると判断し、前記待ち行列に格納された時期が最も古い前記第１ステートマシンに対し、前記機器を利用可能とすることを特徴とする請求項５から７のいずれか一項に記載のキャッシュメモリ装置。
【請求項９】
複数のプロセッサそれぞれから複数のコマンドを受け付けるコマンド受付手段と、
前記コマンド受付手段が受け付けたコマンドに対応する処理を行う処理手段と、
コマンドの種類ごとに設けられ、各コマンドの処理状態を監視する複数の第１ステートマシンと、
所定の種類のコマンドに対するすべての前記第１ステートマシンが使用されているときに、前記コマンド受付手段が当該種類のコマンドを受け付けた場合に、前記コマンド受付手段が受け付けた前記コマンドを前記キューに格納する格納手段と
を備えたことを特徴とするキャッシュメモリ装置。
【請求項１０】
キャッシュメモリ装置における処理方法であって、
複数のプロセッサそれぞれから複数のコマンドを受け付けるコマンド受付ステップと、
前記コマンド受付ステップにおいて受け付けたコマンドに対応する処理を行う処理ステップと、
前記処理ステップにおいて前記コマンドを処理しているときに、処理中の前記コマンドに対するキャッシュラインアドレスと同一のキャッシュラインアドレスに対するコマンドを受け付けた場合に、受け付けた前記コマンドをキューに格納する格納ステップと
を有することを特徴とする処理方法。
【請求項１１】
キャッシュメモリ装置における処理方法であって、
複数のプロセッサそれぞれから複数のコマンドを受け付けるコマンド受付ステップと、
前記コマンド受付ステップにおいて受け付けたコマンドに対応する処理を行う処理ステップと、
コマンドの種類ごとに設けられ、各コマンドの処理状態を監視する複数の第１ステートマシンのうち所定の種類のコマンドに対するすべての前記第１ステートマシンが使用されているときに、当該種類のコマンドを受け付けた場合に、受け付けた前記コマンドを前記キューに格納する格納ステップと
を有することを特徴とする処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサそれぞれからコマンドを受け付けるキャッシュメモリ装置およびキャッシュメモリ装置における処理方法に関するものである。
【背景技術】
【０００２】
近年における半導体微細加工技術の進展により、一つの半導体基板上に複数のプロセッサを集積することが可能となった。一方、メモリのレーテンシを隠蔽するためのキャッシュメモリ技術は広く使用されており、キャッシュメモリのスループットを向上させることはシステムの性能を向上させるのに不可欠な要素となっている。さらに、複数のプロセッサ間で排他的アクセスを行う機構は、並列プログラムを記述する上で必要不可欠な機能である。排他的アクセスを行う機構としては、例えばバスにロック信号を設けて、この信号がＶａｌｌｄである間は同じアドレスに対するプロセッサからのアクセスを行えなくする技術が開示されている（例えば、「特許文献１参照」）。
【０００３】
【特許文献１】米国特許第５２７６８４７号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、複数のプロセッサがキャッシュを共有する装置において、同じキャッシュラインに対する複数の要求が出され、最初のアクセスがキャッシュの状態を書き換える前に次のアクセスが起こった場合には、次のアクセスも最初のアクセスと同様の動作を行うこととなり不都合がある。
【０００５】
また、キャッシュにミスした場合には次の階層、すなわち一般的にはメインメモリをアクセスすることになるがこのアクセスは遅い上に多くの電力を消費してしまう。また、複数アクセスを同時に行えることとするとキャッシュの排他的アクセスを行うことができない。
【０００６】
本発明は、上記に鑑みてなされたものであって、メモリアクセスに起因した電力消費を低減し、排他的アクセスを可能とするキャッシュメモリ装置および処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するために、本発明は、キャッシュメモリ装置であって、複数のプロセッサそれぞれから複数のコマンドを受け付けるコマンド受付手段と、前記コマンド受付手段が受け付けたコマンドに対応する処理を行う処理手段と、前記処理手段が前記コマンドを処理しているときに、前記処理手段による処理中の前記コマンドに対するキャッシュラインアドレスと同一のキャッシュラインアドレスに対するコマンドを前記コマンド受付手段が受け付けた場合に、前記コマンド受付手段が受け付けた前記コマンドをキューに格納する格納手段とを備えたことを特徴とする。
【０００８】
また、本発明の他の形態は、キャッシュメモリ装置であって、複数のプロセッサそれぞれから複数のコマンドを受け付けるコマンド受付手段と、前記コマンド受付手段が受け付けたコマンドに対応する処理を行う処理手段であり、コマンドの種類ごとに設けられ、各コマンドの処理状態を監視する複数の第１ステートマシンと、所定の種類のコマンドに対するすべての前記第１ステートマシンが使用されているときに、前記コマンド受付手段が当該種類のコマンドを受け付けた場合に、前記コマンド受付手段が受け付けた前記コマンドを前記キューに格納する格納手段とを備えたことを特徴とする。
【０００９】
また、本発明の他の形態は、キャッシュメモリ装置における処理方法であって、複数のプロセッサそれぞれから複数のコマンドを受け付けるコマンド受付ステップと、前記コマンド受付ステップにおいて受け付けたコマンドに対応する処理を行う処理ステップが存在し、前記処理ステップにおいて前記コマンドを処理しているときに、処理中の前記コマンドに対するキャッシュラインアドレスと同一のキャッシュラインアドレスに対するコマンドを受け付けた場合に、受け付けた前記コマンドをキューに格納する格納ステップとを有することを特徴とする。
【００１０】
また、本発明の他の形態は、キャッシュメモリ装置における処理方法であって、複数のプロセッサそれぞれから複数のコマンドを受け付けるコマンド受付ステップと、前記コマンド受付ステップにおいて受け付けたコマンドに対応する処理を行う処理ステップが存在し、コマンドの種類ごとに設けられ、各コマンドの処理状態を監視する複数の第１ステートマシンのうち所定の種類のコマンドに対するすべての前記第１ステートマシンが使用されているときに、当該種類のコマンドを受け付けた場合に、受け付けた前記コマンドを前記キューに格納する格納ステップとを有することを特徴とする。
【発明の効果】
【００１１】
本発明にかかるキャッシュメモリ装置によれば、コマンド受付手段が、複数のプロセッサそれぞれから複数のコマンドを受け付け、処理手段が、コマンド受付手段が受け付けたコマンドに対応する処理を行い、格納手段が、処理手段がコマンドを処理しているときに、処理手段による処理中のコマンドに対するキャッシュラインアドレスと同一のキャッシュラインアドレスに対するコマンドをコマンド受付手段が受け付けた場合に、コマンド受付手段が受け付けたコマンドをキューに格納するので、メモリアクセスに起因した電力消費を低減し、排他的アクセスを可能とすることができるという効果を奏する。
【００１２】
また、本発明の他の形態にかかるキャッシュメモリ装置によれば、コマンド受付手段が、複数のプロセッサそれぞれから複数のコマンドを受け付け、処理手段が、コマンド受付手段が受け付けたコマンドに対応する処理を行い、複数の第１ステートマシンが、コマンドの種類ごとに設けられ、各コマンドの処理状態を監視し、格納手段が、所定の種類のコマンドに対するすべての第１ステートマシンが使用されているときに、コマンド受付手段が当該種類のコマンドを受け付けた場合に、コマンド受付手段が受け付けたコマンドをキューに格納するので、プロセッサが再度コマンドを送付する必要がなくなり、プロセッサとキャッシュメモリ装置間の通信を低減し、電力消費の低減という効果を奏する。
【００１３】
また、本発明の他の形態にかかる処理方法によれば、コマンド受付ステップにおいて、複数のプロセッサそれぞれから複数のコマンドを受け付け、処理ステップにおいて、コマンド受付ステップにおいて受け付けたコマンドに対応する処理を行い、格納ステップにおいて、処理ステップにおいてコマンドを処理しているときに、処理中のコマンドに対するキャッシュラインアドレスと同一のキャッシュラインアドレスに対するコマンドを受け付けた場合に、受け付けたコマンドをキューに格納するので、メモリアクセスに起因した電力消費を低減し、排他的アクセスを可能とすることができるという効果を奏する。
【００１４】
また、本発明の他の形態にかかる処理方法によれば、コマンド受付ステップにおいて、複数のプロセッサそれぞれから複数のコマンドを受け付け、処理ステップにおいて、コマンド受付ステップにおいて受け付けたコマンドに対応する処理を行い、格納ステップにおいて、コマンドの種類ごとに設けられ、各コマンドの処理状態を監視する複数の第１ステートマシンのうち所定の種類のコマンドに対するすべての第１ステートマシンが使用されているときに、当該種類のコマンドを受け付けた場合に、受け付けたコマンドをキューに格納するので、プロセッサが再度コマンドを送付する必要がなくなり、プロセッサとキャッシュメモリ装置間の通信を低減し、電力消費の低減という効果を奏する。
【発明を実施するための最良の形態】
【００１５】
以下に、本発明にかかるキャッシュメモリ装置およびキャッシュメモリ装置における処理方法の実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１６】
図１は、実施の形態にかかるバスシステム１の全体構成を示す図である。バスシステム１は、８つのプロセッサ１０Ａ〜１０Ｈと、Ｉ／Ｏデバイス５０と、Ｌ２（レベル２）キャッシュ３０と、メモリコントローラ４０と、内蔵ＥＤＲＡＭ４３と、外部ＳＤＲＡＭ４４とを備えている。８つのプロセッサ１０Ａ〜１０Ｈは、Ｌ２キャッシュ３０に接続している。さらに、Ｉ／Ｏデバイス５０がＬ２キャッシュ３０に接続している。Ｌ２キャッシュ３０は、さらにメモリコントローラ４０に接続している。
【００１７】
アドレス情報は、プロセッサ１０Ａ〜１０Ｈから、Ｌ２キャッシュ３０に伝達される。Ｌ２キャッシュ３０は、プロセッサ１０Ａ〜１０Ｈから要求される情報がＬ２キャッシュ３０にキャッシュされているかどうかをチェックし、チェックの結果に応じて所定の動作を行う。キャッシュされていない場合には、メモリコントローラ４０がアドレスに応じて内蔵ＥＤＲＡＭ４３および外部ＳＤＲＡＭ４４をアクセスする。
【００１８】
なお、アドレス情報には、プロセッサが要求するメモリのアドレスの他、コマンドの種類（ＲｅａｄまたはＷｒｉｔｅなど）、データ転送の大きさ（キャッシュラインまたはバイトなど）などの情報が含まれており、これらの情報が同時に転送される。
【００１９】
Ｌ２キャッシュ３０は、複数のプロセッサ１０Ａ〜１０Ｈから共有されている。複数のプロセッサ１０Ａ〜１０Ｈそれぞれがコマンドを発生するので、Ｌ２キャッシュは、これらすべてのコマンドを処理する必要がある。なお、各プロセッサ１０Ａ〜１０Ｈには、Ｌ１キャッシュ１１Ａ〜１１Ｈが設けられており、Ｌ１キャッシュにミスした要求がコマンドとしてＬ２キャッシュ３０に伝達される。
【００２０】
図２は、Ｌ２キャッシュ３０におけるアドレスパスを示す図である。各プロセッサ１０Ａ〜１０Ｈからのコマンドはバスのアービトレーション機構を介して、Ｌ２キャッシュ３０のコマンド受付部３０１に入力される。最大でも２サイクルに１回しかＬ２コントローラにコマンドが入力されないような制限を設けるのが好ましい。具体的には、例えばバスの周波数をＬ２コントローラの周波数の１／２にしてもよい。これにより、ハードウェアの機構を簡単にすることができる。
【００２１】
Ｌ２キャッシュ３０に入力されたアドレスのうち下位アドレスは、Ｌ２キャッシュ３０のタグのインデックスとして使用され、タグＲＡＭ３０２に送られる。また、上位アドレスはタグＲＡＭ３０２から出力された結果と比較される。本実施の形態においては、４Ｗａｙのキャッシュが実現されている。
【００２２】
ディスパッチ処理部３０４により、タグを引いた結果に応じてＬ２コントローラのステートマシンがディスパッチされる。本実施の形態においては、ステートマシンとして、４つのＲＣマシン３０６、２つのＣＰＢＫマシン３０８、および２つのＬｏｃｋマシン３１０が用意されている。ＲＣマシン３０６は、Ｌ２キャッシュ３０へのＲｅａｄ要求を扱うステートマシンである。ＣＰＢＫマシン３０８は、Ｌ２キャッシュ３０へのＬ１キャッシュ１１Ａ〜１１Ｈからのコピーバックを扱うステートマシンである。Ｌｏｃｋマシン３１０は、Ｌ２キャッシュ３０へのロック要求を扱うステートマシンである。
【００２３】
それぞれのステートマシンは一つのコマンドに対応して動作する。Ｌ２キャッシュ３０は同時に複数のコマンドを扱う。したがって、複数のステートマシンが同時に動作する場合がある。
【００２４】
アドレスバッファ（ＯｕｔｓｔａｎｄｉｎｇＡｄｄｒｅｓｓＢｕｆｆｅｒ）３２０として、４つのＲＣマシン３０６、２つのＣＰＢＫマシン３０８および２つのＬｏｃｋマシン３１０それぞれに対応するレジスタが設けられている。ステートマシンがディスパッチされると同時に、アドレスバッファ３２０の対応するレジスタには、それぞれのステートマシンが処理しているアドレスが保持される。そして、それぞれのステートマシンが終了すると、対応するアドレスバッファ３２０のレジスタのアドレスがクリアされる。
【００２５】
アドレスバッファ３２０と、アドレスバッファ３２０のレジスタそれぞれに対応して設けられた比較器３２２は、Ｌ２コントローラが処理中のアドレス（すなわちＲＣマシン、ＣＰＢＫマシン、Ｌｏｃｋマシンのいずれかが処理中のアドレス）と同一のアドレスに対する新たな要求がＬ２コントローラに入ってきたことを検出するために使用される。
【００２６】
プロセッサ１０Ａ〜１０Ｈからコマンドが送られると、このコマンドのアドレスの上位ビットが比較器３２２に送られる。比較器３２２において、対応するレジスタに格納されている各アドレスの上位ビットと比較される。比較器３２２のうち一つが一致を示すと、そのコマンドおよびアドレスはリサイクルキュー（ＲｅｃｙｃｌｅＱ４ｅｎｔｒｙ）３３０に格納される。
【００２７】
先行するコマンド、すなわち実行中のコマンドが終了すると、リサイクルキュー３３０に格納されているコマンドおよびアドレスはリサイクルキュー３３０から取り出される。そして、Ｌ２コントローラが実行を開始し、リサイクルキュー３３０から取り出されたアドレスの上位ビットは、再び比較器３２２に送られる。そして、一致するアドレスがなければ、ディスパッチ処理部３０４によりコマンドに対応するディスパッチが行われる。
【００２８】
なお、リサイクルキュー３３０にコマンド等が投入されるのは、比較器３２２が一致を示した場合だけではない。例えば、ＲＣマシン、ＣＰＢＫマシンおよびＬｏｃｋマシンのうちいずれかがＦｕｌｌの状態である場合に、Ｆｕｌｌの状態を示すマシンに対するコマンドが投入された場合にも、コマンドとアドレスがリサイクルキュー３３０に投入される。前述したようにコマンドは２サイクルに１回しかＬ２コントローラに投入されない。したがって、Ｆｕｌｌが判定されたときには、次のコマンドがシャドウレジスタ３２４に入っており、このコマンドがリサイクルキュー３３０に格納される。リサイクルキューがＦｕｌｌの場合には、プロセッサからＬ２コントローラへのパイプラインをストールさせる。すなわち、Ｌ２コントローラへのコマンド投入はできない。
【００２９】
図３は、リサイクルキュー３３０の構成を示す図である。リサイクルキュー３３０には、４つのエントリ３３２が設けられている。各エントリ３３２には、バリッド領域、アドレス／コマンド領域、ＲＣ＃領域が設けられている。アドレス／コマンド領域には、アドレスおよびコマンドが格納される。アドレス／コマンド領域にアドレスおよびコマンドが格納されると、バリッド領域に１が格納される。ＲＣ＃領域には、コマンドがいずれの原因でエントリに入れられたのかを示す情報、すなわちステートマシンを識別する情報が入れられる。
【００３０】
本実施の形態においては、合計８個のステートマシンがディスパッチされることから、ＲＣ＃には８ビットが割り当てられる。具体的には、ビット７がＲＣマシン３に対応している。また、ビット６がＲＣマシン２に、ビット５がＲＣマシン１に、ビット４がＲＣマシン０に、ビット３がＣＰＢＫマシン１に、ビット２がＣＰＢＫマシン０に、ビット１がＬｏｃｋマシン１に、ビット０がＬｏｃｋマシン０にそれぞれ対応している。
【００３１】
例えば、ＲＣマシン２のアドレスにマッチしてリサイクルキュー３３０に入れられた場合には、アドレス／コマンド領域にはコマンドとアドレスがセットされ、対応するＲＣ＃領域においてビット６が立てられる。
【００３２】
また、例えばＲＣマシンが４つとも使用されている状態などＲＣマシン、ＣＰＢＫマシンおよびＬｏｃｋマシンのいずれかがＦｕｌｌの状態で、リサイクルキューに入れられる場合には、対応するエントリ３３２のＲＣ＃領域はすべてのビットに１が立てられる。
【００３３】
フリーリスト３３１は、４つのエントリ３３２に対応した４ビットが割り当てられたレジスタである。エントリが空いているときは対応するビットは０となる。エントリが使用されているときは対応するビットは１となる。
【００３４】
リサイクルキュー３３０にアドレスが投入されると、フリーリスト３３１のレジスタのうち０になっているビットであって、最もＬＳＢ（Ｌｅａｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）側のビットに１がセットされる。エントリ管理部３３３は、フリーリスト３３１のうち１がセットされたビットであって最もＬＳＢ側のビットに対応するエントリ３３２に情報をセットする。さらに、４つのシフトレジスタ３３４のうち、情報がセットされたエントリ３３２に対応するシフトレジスタのＭＳＢ（Ｍｏｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）に１をセットする。そして、ＭＳＢに１をセットした以外の３つのシフトレジスタ３３４すべてを右シフトする。
【００３５】
このように、シフトレジスタ３３４は、エントリに情報がセットされるごとに右シフトするので、ビット位置がより右にあるシフトレジスタに対応するエントリがより古いものとなる。デコーダ３３５は、シフトレジスタ３３４のビット位置にしたがい、より古いエントリを特定することができる。
【００３６】
次に、リサイクルキュー３３０に実行可能なコマンドが存在するか否かを判断する処理について説明する。ＲＣマシン、ＣＰＢＫマシン、Ｌｏｃｋマシンのいずれかの動作が終わると、リサイクルキュー３３０に入れられていたコマンドのうちいずれかのコマンドが選択される。具体的には、リサイクルキュー３３０のすべてのエントリ３３２のＲＣ＃領域と、終了したステートマシンに対応するビットとが比較される。終了したステートマシンに対応するビットとＲＣ＃領域のビットとが一致する場合には、一致したエントリに対応するレディレジスタ３３６に１がセットされる。すなわち、このＲＣ＃領域に対応するコマンドが選択される。
【００３７】
このように、レディレジスタ３３６が１になっていることにより、対応するエントリに再実行可能な候補がセットされていることがわかる。レディレジスタ３３６の情報により、リサイクルキュー３３０に実行可能なコマンドが存在するか否かを判断することができる。
【００３８】
エントリ３３２には、同一のステートマシンが複数セットされている場合がある。すなわち、レディレジスタ３３６が１になっているエントリ３３２が複数ある場合がある。この場合には、デコーダ３３５は、複数のコマンドの中からＬ２コントローラが再実行するコマンドとしていずれか１つを選択する。
【００３９】
具体的には、シフトレジスタ３３４のビットに基づいて、コマンドを選択する。前述のように、各エントリ３３２に情報がセットされると対応するシフトレジスタ３３４に１が立つ。そして、新たなエントリがセットされる度に右シフトされる。したがって、４つのシフトレジスタ３３４のうち最も右側にビットが立っているものに対応するエントリにセットされている情報が最も古いものである。本実施の形態においては、エントリにセットされたまま永遠に実行されないことを防ぐべく、最も古いエントリを選択することとする。
【００４０】
リサイクルキュー３３０のエントリからコマンドが出力される際には、選択されたエントリに対応するレディレジスタ３３６のビット、対応するフリーリスト３３１のビットおよび対応するシフトレジスタ３３４のビットがすべてリセットされる。また選択されたエントリのバリッド領域は１から０に変更される。そして、選択されたエントリのコマンド、アドレスの情報がＬ２コントローラにより再実行される。
【００４１】
Ｌ２コントローラは、プロセッサのコマンドとリサイクルキュー３３０に入れられていたコマンドのいずれから実行するか選択する必要がある。ここでは、リサイクルキュー３３０に実行可能なコマンドがある場合には、必ずリサイクルキュー３３０から選択することとする。この処理は、コマンド受付部３０１により行われる。なお、コマンド受付部３０１はリサイクルキュー３３０のコマンドの読出手段としても機能する。
【００４２】
本実施の形態においては、プロセッサ１０Ａ〜１０ＨからＬ２コントローラへのパイプがストールするのは、次の２つのケースである。すなわち、リサイクルキュー３３０がＦｕｌｌの場合およびリサイクルキュー３３０に実行可能なコマンドが存在する場合である。
【００４３】
図４は、シフトレジスタにおいて最も右側に１が立っているものを選択するためのデコードロジックを示す図である。図４に示す例においては、ｓｉｆｔが１になるとすべてのビットは右シフトを行う。実施の形態にかかるリサイクルキュー３３０は４エントリであるので、シフトレジスタも４組設けられている。
【００４４】
リサイクルキュー３３０のそれぞれのエントリに対応するレディレジスタ３３６のビットは、それぞれＲｅａｄｙ０からＲｅａｄｙ３に接続される。ＩＮ０からＩＮ３は、シフトレジスタ３３４の入力である。リサイクルキュー３３０に新たなエントリがセットされると対応するＩＮ入力に１が入る。Ｏｕｔ０からＯｕｔ３までは対応するエントリが選択されたときに１になる。具体的には、Ｒｅａｄｙが１のエントリのシフトレジスタ３３６の中で、最も右側に１が立っているものが選択される。
【００４５】
リサイクルキュー３３０の構成は、実施の形態に限定されるものではない。例えば、リサイクルキュー３３０のエントリ数は、必要とされる性能に応じて決定されればよく、実施の形態に限定されるものではない。リサイクルキュー３３０のエントリ数が少な過ぎる場合には、容易にプロセッサからＬ２コントローラへのパイプラインがストールし、性能が低下する。エントリ数が多すぎる場合には、ストールの可能性は少なくなるがリサイクルキュー３３０の使用効率が低くなり面積の無駄となる。これらの観点から適当なエントリ数を決定するのが好ましい。
【００４６】
また、実施の形態にかかるリサイクルキュー３３０においては、タグを引いて実行できることが確実なオペレーションのみをリサイクルキュー３３０から引き出していたが、ハードウェアの構成を簡単にすべく、シフトレジスタ３３４にかえて単なるＦＩＦＯ構造を用いてもよい。このように、リサイクルキュー３３０は、各エントリのうち１つを選択できるものであればよい。ただし、ＦＩＦＯ構造においては、ＦＩＦＯから出されたエントリがアドレスバッファ３２０のアドレスにヒットし、再びリサイクルキュー３３０に入れられる場合がある。
【００４７】
さらに、本実施の形態においては、古いエントリが永遠にリサイクルキュー３３０にとどまるスタベーションを防ぐべく、リサイクルキュー３３０に入れられた時期の古いものから順に、リサイクルキュー３３０から引き出したが、他の例としては、ある一定の時間がたったエントリは優先して取り出すこととしてもよい。このように、永遠に選択されないエントリが生じないような構成であればよい。
【００４８】
以上のように、本実施の形態によれば、処理中のアドレスと同一のアドレスに対する要求はリサイクルキュー３３０に入れられ、同一アドレスに対する処理が終了した後に再実行されるので、Ｌ２コントローラが同時に２つ以上の同一のアドレスに対する処理を行わないことが保証される。
【００４９】
また、本実施の形態によれば、アクセスするアドレスが同一の場合には、リサイクルキュー３３０に入れられ、メモリアクセスを行わないので、性能が向上し、消費電力を低減することができる。
【００５０】
次に、ロック機構について説明する。上述のように、実施の形態にかかるＬ２コントローラにおいては、同一のアドレスに対する要求が２つ以上起こらないことが保証されている。したがってプロセッサ１０Ａ〜１０Ｈからの特定のコマンドがＬ２キャッシュ３０のデータを排他的に読み書きできれば、ロック機構を実現することができる。
【００５１】
本実施の形態においては、プロセッサ１０Ａ〜１０Ｈからのロック命令をＬ１キャッシュ１１Ａ〜１１Ｈを介さずに直接Ｌ２キャッシュ３０に伝える。Ｌ２キャッシュ３０では、ロック命令用のステートマシン（Ｌｏｃｋマシン）を起動する。Ｌｏｃｋマシンは、Ｌ２キャッシュ３０にヒットした場合はＬ２キャッシュ３０の内容を読み出し、さらにＬ２キャッシュ３０の内容を更新する。これと同時に、Ｌ２キャッシュ３０から読み出した内容をプロセッサ１０Ａ〜１０Ｈに送る。Ｌ２キャッシュ３０にミスした場合は、メモリ４３，４４から読み出した内容をプロセッサ１０Ａ〜１０Ｈに送り、読み出した内容を更新してＬ２キャッシュ３０に書き込む。
【００５２】
より具体的には、プロセッサ１０Ａ〜１０Ｈのロック命令としてＴｅｓｔ＆Ｓｅｔ命令を実装する。プロセッサ１０Ａ〜１０Ｈは、Ｔｅｓｔ＆Ｓｅｔ命令を検出すると、Ｌ１キャッシュ１１Ａ〜１１ＨにミスしたものとみなしてＬ２キャッシュ３０にアドレスとコマンドを転送する。
【００５３】
なお、ハードウェアを簡単にするために、Ｔｅｓｔ＆Ｓｅｔはキャッシュライン中で１箇所のみに対して行われることとする。例えば、Ｔｅｓｔ＆Ｓｅｔはキャッシュライン中の最も小さいアドレスのバイトに対して行われ、バイト中の最下位ビットが１にセットされることとする。Ｔｅｓｔ＆Ｓｅｔが行われるキャッシュラインの最下位ビット以外のデータは、意味の無いデータとなっている。
【００５４】
Ｌ２キャッシュ３０では、Ｔｅｓｔ＆Ｓｅｔ命令に対して次のような動作が行われる。すなわち、まず、Ｌ２キャッシュ３０のタグをチェックする。この時点でリサイクルキュー３３０の働きにより同じアドレスに対して動作しているステートマシンはないことが保証されている。Ｌ２キャッシュ３０においてヒットした場合には、ヒットしたＬ２キャッシュ３０のデータをプロセッサ１０Ａ〜１０Ｈに送る。次に、上述のようにキャッシュライン中の最下位ビットが１にセットされたデータをキャッシュラインに書き込む。プロセッサ１０Ａ〜１０Ｈでは書き込む前のデータを読むことができる。Ｌ２キャッシュ３０においてミスした場合には、メモリ４３，４４からデータをＬ２キャッシュ３０に読み込む。次にＬ２キャッシュ３０のデータをプロセッサ１０Ａ〜１０Ｈに送る。さらに、キャッシュライン中の最下位ビットに１をセットする。プロセッサ１０Ａ〜１０Ｈではこの１を書き込む前のデータを読むことができる。
【００５５】
図５は、Ｌ２キャッシュ３０におけるデータパスを示す図である。以下、７つのケースにおけるデータの流れを説明する。
１．  Ｌ２キャッシュ３０にＲｅａｄでヒットした場合
２．  Ｌ２キャッシュ３０にＲｅａｄでミスした場合
３．  Ｌ２キャッシュ３０にＷｒｉｔｅでヒットした場合
４．  Ｌ２キャッシュ３０にＷｒｉｔｅでミスした場合
５．  Ｌ２データメモリ３５０からのコピーバック
６．  Ｌ２キャッシュ３０にロック命令（Ｔｅｓｔ＆Ｓｅｔ）でヒットした場合
７．  Ｌ２キャッシュ３０にロック命令（Ｔｅｓｔ＆Ｓｅｔ）でミスした場合
【００５６】
Ｌ２キャッシュ３０にＲｅａｄでヒットした場合には、Ｌ２データメモリ３５０のアドレスがアドレス系からＬ２データメモリ３５０に供給される。このアドレスは対応するＲＣマシンが示しているアドレスである。Ｌ２データメモリ３５０から読み出されたデータはプロセッサ１０Ａ〜１０Ｈへ送られる。
【００５７】
Ｌ２キャッシュ３０にＲｅａｄでミスした場合には、メモリコントローラ４０より送られたデータは、ＭＲＬＤバッファ３５２、ＭＵＸ（マルチプレクサ）３５４、ロック用ロジック３５６を経由してＬ２データメモリ３５０に書き込まれる。Ｌ２データメモリ３５０のアドレスは対応しているＲＣマシンが示しているアドレスである。Ｌ２データメモリ３５０の内容は、読み出され、プロセッサ１０Ａ〜１０Ｈに送られる。
【００５８】
Ｌ２キャッシュ３０にＷｒｉｔｅでヒットした場合には、プロセッサ１０Ａ〜１０ＨよりＭＵＸ３５４およびロック用ロジック３５６を経由してＬ２データメモリ３５０にデータが書き込まれる。ＭＵＸ３５４は、プロセッサ１０Ａ〜１０Ｈからのデータとメモリコントローラ４０からのデータのどちらかのパスを選択する。Ｌ２データメモリ３５０のアドレスは対応するＣＰＢＫマシンが示しているアドレスである。
【００５９】
Ｌ２キャッシュ３０にＷｒｉｔｅでミスした場合には、プロセッサ１０Ａ〜１０Ｈからのデータはバイパスバッファ３６０、ＭＵＸ３６２を経由してメモリコントローラ４０に送られる。Ｌ２データメモリ３５０に書き込まれることはない。
【００６０】
Ｌ２データメモリ３５０からのコピーバックは、Ｌ２にＲｅａｄでミスした場合、またはロック命令がミスした場合に行われる。新たなキャッシュラインを確保するためコピーバックが必要な場合には、Ｌ２データメモリ３５０の内容が読み出され、ＭＣＰＢＫバッファ３６４およびＭＵＸ３６２を経由してメモリコントローラ４０に送られる。Ｌ２データメモリ３５０のアドレスはＭＣＰＢＫマシンが示すアドレスである。
【００６１】
Ｌ２キャッシュ３０にロック命令（Ｔｅｓｔ＆Ｓｅｔ）でヒットした場合には、Ｌ２データメモリ３５０から読み出されたデータは、プロセッサ１０Ａ〜１０Ｈに送られる。次にロック用ロジック３５６はデータとして最下位ビットが１となったデータを用意し、Ｌ２データメモリ３５０に書き込む。Ｌ２データメモリ３５０のアドレスは対応するＬｏｃｋマシンのアドレスである。
【００６２】
Ｌ２キャッシュ３０にロック命令（Ｔｅｓｔ＆Ｓｅｔ）でミスした場合には、メモリコントローラ４０からのデータは、ＭＲＬＤバッファ３５２、ＭＵＸ３５４、ロック用ロジック３５６を経由してＬ２データメモリ３５０に書き込まれる。次にＬ２データメモリ３５０のデータが読み出されてプロセッサ１０Ａ〜１０Ｈに送られる。最後にロック用ロジック３５６はデータとして最下位ビットが１となったデータを用意し、Ｌ２データメモリ３５０に書き込む。Ｌ２データメモリ３５０のアドレスは対応するＬｏｃｋマシンのアドレスである。ロック用ロジック３５６は、最下位ビットが１となったデータを生成するためのロジックである。
【００６３】
なお、本実施の形態にかかるＬ２キャッシュ３０のアドレスパスおよびデータパスを構成する機構およびコマンドに応じた処理を行う部分は、処理手段に相当する。
【００６４】
図６は、ロック用ロジック３５６の処理を説明するための図である。図に示すように、ロック用ロジック３５６は、通常時は入力をそのまま出力するが、ロックのためのデータを書き込むときには出力に１を出す。このように、実施の形態にかかるロック用ロジック３５６は、ロックをかけるアドレスの内容がどのような内容であっても１を上書きするものであるが、これにかえて、例えば、Ｃｏｍｐａｒｅ＆Ｓｗａｐその他のロック用オペレーションを利用してもよい。
【００６５】
次に、各ステートマシンの動作について説明する。図７は、ＲＣマシンの動作を説明するための図である。ＲＣマシンの初期状態はＩｄｌｅである。そして、タグを引いた結果に応じた動作が行われる。タグを引いた結果としては３つの場合がある。すなわち、ヒットの場合、ミスでキャッシュラインがリプレースなしの場合、ミスでキャッシュラインのリプレースがある場合である。
【００６６】
ヒットの場合には、Ｌ２データメモリ３５０がアクセスされていないときに、ＲＣマシンからＬ２データメモリ３５０にアドレスを送りＬ２データメモリ３５０からデータを読み出す。そして、プロセッサ１０Ａ〜１０Ｈにデータを送って終了する。
【００６７】
ミスでリプレースなしの場合は、ＭＲＬＤマシンを起動する。ＭＲＬＤマシンはメモリコントローラ４０よりＬ２データメモリ３５０にデータを書き込むためのステートマシンである。ＭＲＬＤマシンが他のステートマシンと共用されている場合は、ＭＬＲＤマシンが起動できる状態になるまで待つ。ＭＲＬＤマシンが起動できる状態になるとＭＲＬＤマシンを起動し、ＭＲＬＤマシンが終了するまで待つ。Ｌ２データメモリ３５０にデータが書き込まれるとＭＲＬＤマシンは終了する。その後は、ヒットの場合と同様にＬ２データメモリ３５０より読み出したデータをプロセッサ１０Ａ〜１０Ｈに転送する。
【００６８】
ミスでリプレースありの場合は、リプレースするキャッシュラインをＭＣＰＢＫマシンを使用してメモリコントローラ４０に書き出す必要がある。ＭＣＰＢＫマシンは、キャッシュラインのデータをメモリ４３，４４に書き出すためのステートマシンである。ＭＣＰＢＫマシンが他のステートマシンと共用されている場合は、ＭＣＰＢＫマシンが起動できるまで待つ。ＭＣＰＢＫマシンが起動できる状態になると、ＭＣＰＢＫマシンを起動し、ＭＣＰＢＫマシンが終了するまで待つ。ＭＣＰＢＫマシンが終了した後は、ミスでリプレースなしの場合と同様のパスとなる。
【００６９】
図８は、ＣＰＢＫマシンの動作を説明するための図である。ＣＰＢＫマシンの初期状態はＩｄｌｅである。タグを引いた結果に応じた動作が行われる。タグを引いた結果としては２つの場合がある。すなわち、ヒットの場合とミスの場合である。
【００７０】
ヒットの場合には、Ｌ２データメモリ３５０が他のステートマシンに使われているかどうか判定する。使われていなければ図８に示す一連の動作により要求元のプロセッサからデータを転送し、タグを更新する。
【００７１】
ミスの場合には、データをＬ２データメモリ３５０には書き込まず、バイパスバッファ３６０を経由してメモリ４３，４４に書き込む。まず、プロセッサ１０Ａ〜１０Ｈからバイパスバッファ３６０への書き込みでは他のＣＰＢＫマシンがバイパスバッファ３６０を使用していると書き込めないのでバイパスバッファ３６０の空きを待つ。バイパスバッファ３６０が空き、プロセッサからの書き込みが終わると、図８に示すようにメモリ４３，４４への書き込みを行う。
【００７２】
なお、メモリ４３，４４への書き込み要求以降の動作は、一度にＣＰＢＫマシンまたはＭＣＰＢＫマシンのうち１つのステートマシンのみしか行うことができない。そこで、インターロックでは、アービタを利用してこの調停を行う。
【００７３】
図９は、ＭＲＬＤマシンの動作を説明するための図である。上述のように、ＭＲＬＤマシンは、ＲＣマシンまたはＬｏｃｋマシンから呼び出される。複数のＲＣマシンと複数のＬｏｃｋマシンが存在するので、ＭＲＬＤマシンを呼び出すためには調停が必要になることがある。調停には通常キューが用いられる。キューにより古い要求から順にＭＲＬＤマシンを呼び出せばよい。他のＲＣマシンおよびＬｏｃｋマシンがＭＲＬＤマシンを使用しているときは、終了するまで待機する。
【００７４】
ＭＲＬＤマシンは、呼び出されるとメモリコントローラ４０に対して読み出しのリクエストを出し、データがＭＲＬＤバッファ３５２に書き込まれるのを待つ。次に、Ｌ２データメモリ３５０の空きを待ち、使用されていなければＭＲＬＤバッファ３５２からＬ２データメモリ３５０へのデータの書き込みを行い、さらにタグを更新する。
【００７５】
図１０は、ＭＣＰＢＫマシンの動作を説明するための図である。ＭＣＰＢＫマシンは、ＲＣマシンまたはＬｏｃｋマシンから呼び出される。複数のＲＣマシン、およびＬｏｃｋマシンが存在するため、ＭＣＰＢＫマシンを呼び出すためには調停が必要になることがある。調停には通常キューが用いられる。キューにより古い要求から順にＭＣＰＢＫマシンを呼び出せばよい。他のＲＣマシンおよびＬｏｃｋマシンがＭＣＰＢＫマシンを使用しているときは、それらが終了するまで待機する。
【００７６】
ＭＣＰＢＫマシンは、呼び出されるとまずＬ２データメモリ３５０の空きがあるときはＬ２データメモリ３５０よりデータを読み出してＭＣＰＢＫバッファ３６４に入れる。次にメモリコントローラ４０に対して書き込み要求を行う。ＣＰＢＫマシンもメモリコントローラ４０に書き込み要求を行うので調停が必要である。具体的には、アービタにより調停を行う。メモリコントローラ４０に対する書き込み要求が承認されると、ＭＣＰＢＫバッファ３６４からメモリコントローラ４０へデータ転送を行う。なお、タグの更新は、ＲＣマシンにより行われるのでここでは行わない。
【００７７】
図１１は、Ｌｏｃｋマシンの動作を説明するための図である。Ｌｏｃｋマシンの動作は、ＲＣマシンの動作とほぼ同様であるが、プロセッサ１０Ａ〜１０Ｈにデータを送った後、最下位ビットに１を書き込む処理が追加されている。上記各機構によりＬ２キャッシュ３０に確保したキャッシュラインを使用してロック（Ｔｅｓｔ＆Ｓｅｔ）のメカニズムを実現することができる。
【００７８】
ここでは、複数のプロセッサがロックの取り合いを起こした場合について説明する。例えば、３つのプロセッサ１０Ａ〜１０Ｃがアドレス１０００番地のロックをとる場合、最初にアドレス１０００番地に０を書き込んでおく。そして、プロセッサ１０Ａ〜１０Ｃは、Ｔｅｓｔ＆Ｓｅｔを使用して１０００番地をアクセスする。ここでは、第１プロセッサ１０Ａが最初にＬ２キャッシュ３０に到達したとする。第１プロセッサ１０Ａが、Ｌ２キャッシュ３０にミスすると、Ｌ２キャッシュ３０はメインメモリから１０００番地の値０を読み出し、Ｌ２データメモリ３５０に格納する。そして、Ｌ２キャッシュ３０上の１０００番地の値は１に更新される。プロセッサ１０ＡはＬ２キャッシュ３０から値０が返ってくることによりロックに成功したことがわかる。そして、第１プロセッサ１０Ａは、所定の処理を開始する。
【００７９】
後からＬ２キャッシュ３０に到達した第２プロセッサ１０Ｂおよび第３プロセッサ１０Ｃのコマンドは、リサイクルキュー３３０に入れられ、順に処理が行われる。第１プロセッサ１０Ａのコマンドに対する処理が完了した後、第２プロセッサ１０Ｂのコマンドがリサイクルキュー３３０より出されてタグが引かれると今度はヒットする。ただし、このとき、Ｌ２キャッシュ３０の１０００番地は、第１プロセッサ１０Ａによりロックされ、１が書き込まれているので、第２プロセッサ１０Ｂは、Ｌ２キャッシュ３０の１０００番地に入っている値１をもらう。
【００８０】
そして、Ｌ２キャッシュ３０は１０００番地の値に１を上書きする。第２プロセッサ１０Ｂは値１が返ってくることによりロックの失敗を知る。第３プロセッサ１０Ｃのコマンドも同様にリサイクルキュー３３０から実行され、値１が返されてロックの失敗を知る。
【００８１】
ロックに成功した第１プロセッサ１０Ａは処理が終わると０を１０００番地に書き込み、１０００番地をフラッシュすることでＬ２キャッシュ３０のロックに関わるアドレス１０００番地を再び０に戻す。これにより第１プロセッサ１０Ａによるロックが解除される。
【００８２】
なお、本実施の形態にかかるロック機構においては、Ｌ２データメモリに１を書き込むことによりロックを行ったが、他の例としては、Ｌ２データメモリからデータを読み出し、１を加えて書き込むこととしてもよい。このように、１だけインクリメントされた値がＬ２データメモリに書き込まれればよく、そのための処理は実施の形態に限定されるものではない。
【００８３】
次に、複数のステートマシンが一つのステートマシンを起動する場合に、どのような機構で調停が行われるかを説明する。本実施の形態においては、例えばＲＣマシンやＬｏｃｋマシンはＬ２キャッシュ３０にミスしたときにＭＲＬＤマシンを呼び出す。しかし、ＭＲＬＤマシンは一つしか存在しないので、複数のステートマシン間で調停が必要となる。
【００８４】
図１２は、このように複数のステートマシンで一つのステートマシンを起動する際の調停の機構を示す図である。ＩｄｌｅからＭＲＬＤマシンを要求する状態に遷移するパルスは１サイクルだけ出る、ＭＲＬＤマシンを使うステートマシンは全部で６個存在するのでこれらは３ビットでエンコードできる。なお、ステートマシンは１サイクルに１つしかディスパッチされないのでエンコーダ３７０の入力は１−ｈｏｔコードである。
【００８５】
エンコーダ３７０によりエンコードされた値がデュアルポートメモリ３７２に書き込まれ、ライトポインタ３７４がインクリメントされる。デュアルポートメモリ３７２には、要求が古い順にＦＩＦＯ形式で値が格納されることになる。なお、書き込まれた値を適切なタイミングで出力するものであればよく、他の例としては、シフトレジスタであってもよい。
【００８６】
デュアルポートメモリ３７２の出力は再びデコーダ３７６によりデコードされ１−ｈｏｔコードとなる。そして、要求したステートマシンにＲｅａｄｙ信号が返される。ただし、ライトポインタ３７４とリードポインタ３７８とが一致した場合、すなわちデュアルポートメモリ３７２で構成したＦＩＦＯに値が入っていないときは、Ｒｅａｄｙ信号は出力されない。ＭＲＬＤマシンが終了すると、リードポインタ３７８はインクリメントされ、次にＭＲＬＤマシンを要求しているステートマシンのＭＲＬＤマシン要求が処理される。
【００８７】
次に、複数のステートマシンが１つの機器を共有する際に、どのような機構で調停が行われるかを説明する。本実施の形態においては、ステートマシンがＬ２データメモリ３５０の空き待ちをする場合が多数ある。ステートマシンは、他のステートマシンに使用されているかどうか、すなわちデータメモリ３５０の空きを検出し、空きを待っているステートマシンが調停により順にデータメモリ３５０を確保する。
【００８８】
図１３は、ステートマシンがデータメモリ３５０を確保する機構を示す図である。本実施の形態にかかるバスシステム１においては、４つのＲＣマシン、２つのＣＰＢＫマシン、２つのＬｏｃｋマシン、１つのＭＲＬＤマシンおよび１つのＭＣＰＢＫマシンのそれぞれがＬ２データメモリ３５０に対し要求を行う。
【００８９】
各ステートマシンからの要求があると、各マシンに対応して設けられたフリップフロップ（ＳｅｔＲｅｓｅｔＦｌｉｐＦｌｏｐ）３８０がセットされる。そして、選択回路（Ｓｅｌｅｃｔ ｌｅｆｔｍｏｓｔ）３８２により、複数の要求から一つだけが選択される。選択回路３８２は、最も左のビットを選択する回路である。選択回路３８２は、１つの要求のみを選択するので、同時に２つのマシンから要求があった場合であっても、そのうち１つの要求のみを選択することができる。
【００９０】
選択回路３８２により選択された要求に対応するフリップフロップ３８０はリセット信号によりリセットされる。なお、選択回路３８２の出力は１サイクルにつき１ビットずつとなっている。この出力は、エンコーダ３８４によりデュアルポートメモリ３８６に入力される。
【００９１】
デュアルポートメモリ３８６はＦＩＦＯを構成するようにライトポインタ３８８およびリードポインタ３９０が備えられている。なお、他の例としては、シフトレジスタであってもよい。
【００９２】
エンコーダ３８４からデュアルポートメモリ３８６に値が入るとライトポインタ３８８が１だけインクリメントされる。ＦＩＦＯの中身はＬ２データメモリ３５０が使用できる順番に並んでいる。すなわち、ＦＩＦＯの先頭が最初にＬ２データメモリ３５０を使用する。デュアルポートメモリ３８６の出力は、デコーダ３９２により再び各ステートマシンに対応するＬ２データメモリ３５０のＲｅａｄｙ信号となる。Ｒｅａｄｙ信号が出されると、ステートマシンの種別に応じたマシンタイマ（ＲＣマシンタイマ、Ｌｏｃｋマシンタイマ、ＣＰＢＫマシンタイマ、ＭＬＲＤマシンタイマ、ＭＣＰＢマシンタイマ）３９４が動作する。
【００９３】
マシンタイマ３９４の動作中はＦＩＦＯの先頭が進まず、他のステートマシンにＬ２データメモリ３５０のＲｅａｄｙ信号を出すのを妨げる。マシンタイマ３９４はステートマシンの種別に応じた値が設定されている。Ｒｅａｄｙ信号を出してから設定されたサイクル数の間だけ出力が１になる。
【００９４】
マシンタイマ３９４が終了すると、出力が１から０になったのを検出部（ＮｅｇａｔｉｖｅＥｄｇｅＤｅｔｅｃｔｅｒ）３９６が検出し、リードポインタ３９０がインクリメントされる。これにより、ＦＩＦＯの次の要素がＲｅａｄｙとなる。ＦＩＦＯが空のときはリードポインタ３９０とライトポインタ３８８の値を比較し、一致しているのでＲｅａｄｙ信号は出ないように構成されている。
【００９５】
以上、本発明を実施の形態を用いて説明したが、上記実施の形態に多様な変更または改良を加えることができる。
【図面の簡単な説明】
【００９６】
【図１】実施の形態にかかるバスシステム１の全体構成を示す図である。
【図２】Ｌ２キャッシュ３０におけるアドレスパスを示す図である。
【図３】リサイクルキュー３３０の構成を示す図である。
【図４】シフトレジスタにおいて最も右側に１が立っているものを選択するためのデコードロジックを示す図である。
【図５】Ｌ２キャッシュ３０におけるデータパスを示す図である。
【図６】ロック用ロジック３５６の処理を説明するための図である。
【図７】ＲＣマシンの動作を説明するための図である。
【図８】ＣＰＢＫマシンの動作を説明するための図である。
【図９】ＭＲＬＤマシンの動作を説明するための図である。
【図１０】ＭＣＰＢＫマシンの動作を説明するための図である。
【図１１】Ｌｏｃｋマシンの動作を説明するための図である。
【図１２】複数のステートマシンで一つのステートマシンを起動する際の調停の機構を示す図である。
【図１３】ステートマシンがデータメモリ３５０を確保する機構を示す図である。
【符号の説明】
【００９７】
１０Ａ〜１０Ｈ  プロセッサ
１１Ａ〜１１Ｈ  Ｌ１キャッシュ
３０  Ｌ２キャッシュ
４０  メモリコントローラ
４３  内蔵ＥＤＲＡＭ
４４  外部ＳＤＲＡＭ
３０１  コマンド受付部
３０２  タグＲＡＭ
３０４  ディスパッチ処理部
３０６  ＲＣマシン
３０８  ＣＰＢＫマシン
３１０  Ｌｏｃｋマシン
３２０  アドレスバッファ
３２２  比較器
３２４  シャドウレジスタ
３３０  リサイクルキュー
３３１  フリーリスト
３３２  エントリ
３３３  エントリ管理部
３３４  シフトレジスタ
３３５  デコーダ
３３６  レディレジスタ
３５０  Ｌ２データメモリ
３５２  ＭＲＬＤバッファ
３５４  ＭＵＸ
３５６  ロック用ロジック
３６０  バイパスバッファ
３６２  ＭＵＸ
３６４  ＭＣＰＢＫバッファ
３７０  エンコーダ
３７２  デュアルポートメモリ
３７４  ライトポインタ
３７６  デコーダ
３７８  リードポインタ
３８０  フリップフロップ
３８２  選択回路
３８４  エンコーダ
３８６  デュアルポートメモリ
３８８  ライトポインタ
３９０  リードポインタ
３９２  デコーダ
３９４  マシンタイマ
３９６  検出部
【図１】
2007323192.tif 000003
【図２】
2007323192.tif 000004
【図３】
2007323192.tif 000005
【図４】
2007323192.tif 000006
【図５】
2007323192.tif 000007
【図６】
2007323192.tif 000008
【図７】
2007323192.tif 000009
【図８】
2007323192.tif 000010
【図９】
2007323192.tif 000011
【図１０】
2007323192.tif 000012
【図１１】
2007323192.tif 000013
【図１２】
2007323192.tif 000014
【図１３】
2007323192.tif 000015