(57)【特許請求の範囲】
【請求項１】
２ウェイ構造を持つ２次キャッシュを備える複数のプロセッサが２ウェイ構造を持つコピータグを備えるプロセッサ制御装置を介してシステムバスに接続されたマルチプロセッサシステムの前記プロセッサ制御装置において、
前記システムバスに発行されたコヒーレンシリクエストのアドレスおよびコマンドを受信するリクエスト受信バッファと、
このリクエスト受信バッファに受信されたコヒーレンシリクエストのアドレスをインデックスアドレスに変換するアドレス変換部と、
このアドレス変換部により変換されたインデックスアドレスを前記コピータグに対して出力するアドレス出力バッファと、
前記コピータグのリードアクセスおよびライトアクセスを制御するコピータグ制御部と、
前記コピータグからリードされたタグアドレスおよびステートを受信するデータ受信バッファと、
前記コピータグ制御部を制御して前記コピータグのリードアクセスを２クロックサイクル連続して行うことにより、２ウェイのタグアドレスおよびステートの連続リードに対応し、前記リクエスト受信バッファのコヒーレンシリクエストのアドレスおよびコマンドと前記コピータグからリードした２ウェイのタグアドレスおよびステートとを比較して前記コピータグの更新が必要かどうかを判断するアドレス比較部と、
前記コピータグの更新が必要な場合に前記コピータグにライトするタグアドレスおよびステートを出力するデータ出力バッファと、
前記システムバスに発行されたコヒーレンシリクエストをリトライさせるためのリトライ制御部とを備え、
前記コピータグ制御部が、前記コピータグをリードアクセスする場合、１クロックサイクル目のリード信号は前記リクエスト受信バッファからのコヒーレンシリクエスト受信通知信号そのものを使用し、２クロックサイクル目のリードを行うかどうかを示す信号は同コヒーレンシリクエスト受信通知信号をフリップフロップにて保持したものと前記アドレス比較部からのコピータグ更新指示信号を論理否定したものとの論理積から生成することを特徴とするプロセッサ制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプロセッサ制御装置に関し、特に２次キャッシュを持つ複数のプロセッサがシステムバスに接続されたマルチプロセッサシステムのコピータグを備えるプロセッサ制御装置に関する。
【０００２】
【従来の技術】
図１３に示すように、複数のプロセッサ４００がシステムバス２００を介して接続されたマルチプロセッサシステムにおいて、プロセッサ４００を制御するためのプロセッサ制御装置１００がプロセッサ４００とシステムバス２００との間に接続され、さらに各プロセッサ制御装置１００には、キャッシュコヒーレンシ（データの整合性）を維持するために使用する高速アクセス可能なメモリ（ＳＲＡＭ＝Ｓｔａｔｉｃ  ＲＡＭあるいはＳＳＲＡＭ＝Ｓｙｎｃｈｒｏｎｏｕｓ  Ｓｔａｔｉｃ  ＲＡＭを使用する）でなるコピータグ３００が接続されている。また、システムバス２００には、メインメモリ（図示せず）を接続制御するメモリ制御部６００や、ＰＣＩバス（図示せず）等のＩ／ＯバスとのブリッジであるＩ／Ｏ制御部７００も接続されているが、ここではこれらについては特に言及しない。
【０００３】
一般に、プロセッサ４００は、短レイテンシでデータアクセスするためのキャッシュという高速メモリを持ち、比較的小容量の１次キャッシュと比較的大容量の２次キャッシュ５００という構成をとる。また、さらに大容量の３次キャッシュを持つ場合もあるが、ここでは２次キャッシュ５００までを考慮する。これらのキャッシュは、１次キャッシュをプロセッサ４００に内蔵、２次キャッシュ５００を外付けの高速メモリで実現、あるいは１次キャッシュおよび２次キャッシュ５００ともにプロセッサ４００に内蔵するといった構造をとるが、ここでは前者（ただし、１次キャッシュは図示されていない）について図示している。先に述べたキャッシュコヒーレンシを維持するために使用する高速メモリは、コピータグ３００と呼ばれ、２次キャッシュ５００のタグ部のコピーを保持している。
【０００４】
２次キャッシュ５００は、データそのものを格納する複数のブロックからなるデータ部と、対応するブロックを指し示すためのタグアドレスおよびステートを格納する複数のエントリからなるタグ部とから構成される。アドレスは、図１４に示すように、タグアドレスと、インデックスアドレスと、オフセットアドレスとに分割される。インデックスアドレスとは、タグ部のエントリを索引するために使用するアドレスで、２次キャッシュ５００の容量に応じてアドレスビット数が決まる。オフセットアドレスとは、２次キャッシュ５００のブロックサイズにより決定されるブロック内アドレスで、２次キャッシュ５００のアクセスには使用しない。インデックスアドレスおよびオフセットアドレスを除いた部分がタグアドレスで、これがタグ部のエントリに格納される。また、１つのインデックスアドレスに対して複数のタグアドレスを持たせることにより、２次キャッシュ５００のヒット率向上を狙った構造をとることもあり、タグアドレスが２つならば２ウェイ構造の２次キャッシュ５００となる。
【０００５】
図１５は、２ウェイ構造の２次キャッシュ５００のタグ部を示す。２次キャッシュ５００が２ウェイ構造であれば、タグ部も２つ存在し、一方をウェイ０、他方をウェイ１と呼び、それぞれにタグアドレスおよびステートが格納される。ステートとは、タグアドレスの指し示す２次キャッシュ５００のブロックデータの状態を表すための情報で、Ｉｎｖａｌｉｄ（２次キャッシュ５００のブロックデータは無効）、Ｓｈａｒｅｄ（２次キャッシュ５００のブロックデータは有効だが、他のプロセッサ４００の２次キャッシュ５００にも同じブロックデータが存在する可能性があり、かつメインメモリ上のブロックデータと同じ）、Ｅｘｃｌｕｓｉｖｅ（２次キャッシュ５００のブロックデータは有効で、自プロセッサ４００の２次キャッシュ５００にしかブロックデータが存在せず、かつメインメモリ上のブロックデータと必ずしも同じでない）の３状態がある。あるアドレスにおいて２次キャッシュ５００を参照する場合、２つのタグ部に対して同じインデックスアドレスで索引し、得られたタグアドレスおよびステートから、２次キャッシュ５００のブロックデータがそのアドレスに対して有効であるか無効であるかを判断する。同一インデックスアドレスに対する２つのタグ部には、それぞれ異なったタグアドレスが格納され、あるタグアドレスに対応する有効なブロックデータは２次キャッシュ５００の特定の１箇所のみに存在するように制御される。
【０００６】
コピータグ３００は、２次キャッシュ５００のタグ部のコピーであり、２次キャッシュ５００が２ウェイ構造であればコピータグ３００も２ウェイ構造をとる。コピータグ３００の役割は、２次キャッシュ５００に有効なブロックデータが存在するかどうかをプロセッサ４００に問い合わせることなくコピータグ３００にて判断し、必要な問い合わせのみを行うことにより、プロセッサ４００への要求数を減らすことにある。
【０００７】
一般的に、マルチプロセッサシステム内でコヒーレンシを維持するために、システムバス２００を介して各制御部が２次キャッシュ５００のブロックデータの状態確認あるいは更新要求、さらにはデータそのものの転送を実行する。その中で、プロセッサ制御装置１００は、プロセッサ４００の２次キャッシュ５００が持つブロックデータに対して、その状態確認あるいは更新要求、さらにはデータの受け渡しを実行する。
【０００８】
システムバス２００には、コヒーレンシリクエストと呼ぶコヒーレンシを維持するための要求が発行される。このコヒーレンシリクエストは、そのリクエストが対象とするアドレスとリクエストの種類を示すコマンドとから構成され、コヒーレンシリクエストの種類としては、コヒーレントブロックリードＳｈａｒｅｄ（プロセッサ４００のロードミスにより実行される２次キャッシュ５００のブロック単位のリードで、返却されるデータのステートにＳｈａｒｅｄを期待する）、コヒーレントブロックリードＥｘｃｌｕｓｉｖｅ（プロセッサ４００のストアミスにより実行される２次キャッシュ５００のブロック単位のリードで、返却されるデータのステートにＥｘｃｌｕｓｉｖｅを期待する）、インバリデート（プロセッサ４００のストアヒットにより実行される、他プロセッサ４００の２次キャッシュ５００に対する無効化要求）がある。
【０００９】
プロセッサ制御装置１００は、システムバス２００からコヒーレンシリクエストを受け取る度に、プロセッサ４００の２次キャッシュ５００の状態を確認する必要がある。ここで、全てのコヒーレンシリクエストに対してプロセッサ４００に２次キャッシュ５００の状態を確認することは、プロセッサ４００の負荷を上げることになり、性能上好ましくない。そこで、２次キャッシュ５００のタグ部のコピーであるコピータグ３００をアクセスすることにより、必要なコヒーレンシリクエストに対してのみプロセッサ４００に２次キャッシュ５００のブロックデータの状態更新あるいはデータの受け渡しを要求することによって、プロセッサ４００の負荷を軽減している。
【００１０】
コピータグ３００は、通常、高速なＳＲＡＭあるいはＳＳＲＡＭで実現し、プロセッサ制御装置１００は、コピータグ３００をリードあるいはライトすることで、２次キャッシュ５００の状態管理を行う。もちろん、コピータグ３００の更新を行う場合には、２次キャッシュ５００の更新を行うようにプロセッサ４００に要求し、常に２次キャッシュ５００のタグ部とコピータグ３００とが同じ状態となるように制御する。コピータグ３００の更新内容は、受信したコヒーレンシリクエストの種類によって異なる。
【００１１】
図１６を参照して、コピータグ３００の更新について説明する。まず、自プロセッサ４００が発行したコヒーレンシリクエストの場合、コヒーレントブロックリードＳｈａｒｅｄならば、プロセッサ４００のロードミスが原因となっているため、２次キャッシュ５００に有効なブロックデータは存在しない。そのため、コピータグ３００に格納されていたタグアドレスおよびステートに関わらず、コヒーレンシリクエストのアドレスから生成したタグアドレスおよびＳｈａｒｅｄステートに更新する。同様に、コヒーレントブロックリードＥｘｃｌｕｓｉｖｅならば、プロセッサ４００のロードミスが原因となっているため、２次キャッシュ５００に有効なブロックデータは存在しない。そのため、コピータグ３００に格納されていたタグアドレスおよびステートに関わらず、コヒーレンシリクエストのアドレスから生成したタグアドレスおよびＥｘｃｌｕｓｉｖｅステートに更新する。さらに、コヒーレンシリクエストがインバリデートならば、プロセッサ４００のストアヒットが原因となっているため、２次キャッシュ５００に有効なブロックデータがＳｈａｒｅｄステートで存在する。そのため、コピータグ３００に格納されていたタグアドレスはそのままで、ステートのみをＥｘｃｌｕｓｉｖｅに更新する。
【００１２】
一方、他プロセッサ４００が発行したコヒーレンシリクエストの場合、コピータグ３００に格納されていたタグアドレスがコヒーレンシリクエストのアドレスから生成したタグアドレスと一致し、コヒーレンシリクエストがコヒーレントブロックリードＳｈａｒｅｄでステートがＥｘｃｌｕｓｉｖｅならばステートをＳｈａｒｅｄに、コヒーレンシブロックリードＥｘｃｌｕｓｉｖｅでステートがＳｈａｒｅｄまたはＥｘｃｌｕｓｉｖｅならばステートをＩｎｖａｌｉｄに、インバリデートでステートがＳｈａｒｅｄならばステートをＩｎｖａｌｉｄにそれぞれ更新する。ここで、インバリデートはプロセッサ４００のストアヒットにより実行されるため、他のプロセッサ４００が同一キャッシュブロックをＥｘｃｌｕｓｉｖｅで持っていることはあり得ない。よって、インバリデートがコピータグ３００にＥｘｃｌｕｓｉｖｅステートでヒットすることはない。
【００１３】
次に、図１７を用いて、コピータグ３００の動作について説明する。システムバス２００は、４ステート（ここでいう「ステート」は、図１５でいう「ステート」とは意味が異なる）からなるステートマシンとして動作するバスで、ステートＩがリクエストサイクル、ステートIIがアービトレーションサイクル、ステートIIIがアドレスサイクル、ステートIVがデコードサイクルとなっており、この４ステートを繰り返すことで、システムバス２００における各種要求およびデータ転送が実現される。コヒーレンシリクエストのアドレスはステートIIIで示され、これを受け取ったプロセッサ制御装置１００は、コピータグ３００をリードして２次キャッシュ５００の該当ブロックデータの状態を確認し、２次キャッシュ５００の該当ブロックデータの更新が必要であると判断したならば、プロセッサ４００に２次キャッシュ５００の該当ブロックデータの更新を要求するとともに、コピータグ３００の該当エントリにライトしてタグアドレスおよびステートの更新を実行する。
【００１４】
図１７において、システムバス２００にコヒーレンシリクエスト（ｔ０１）が発行されると、プロセッサ制御装置１００は、コピータグ３００にリード（ｔ０３）を行い、タグアドレスおよびステート（ｔ０５）を受け取る。続けて、システムバス２００にコヒーレンシリクエスト（ｔ０５）が発行されると、プロセッサ制御装置１００は、コピータグ３００にリード（ｔ０７）を行い、タグアドレスおよびステート（ｔ０９）を受け取る。
【００１５】
一方、先のコヒーレンシリクエスト（ｔ０１）に対して２次キャッシュ５００およびコピータグ３００の更新が必要であると判断すると、プロセッサ制御装置１００は、コピータグ３００に対してライト（ｔ１０）を実行し、タグアドレスおよびステート（ｔ１１）を出力する。コピータグ３００に対するリードとライトとでは、タグアドレスおよびステートの出力される方向が逆になり、その切り替わりタイミングでは信号の衝突を避けるため、プロセッサ制御装置１００もコピータグ３００もどちらもデータを出力しない期間を１クロックサイクル挿入する必要がある。よって、４ステートのバスサイクルに対してコピータグ３００に対するリードおよびライトの実行を１サイクルずつの固定タイミングとして制御している。
【００１６】
図１７で、「Ｃｏｐｙ  Ｔａｇ  Ａｄｄｒｅｓｓ」とは、コピータグ３００をリードあるいはライトするためのアドレス信号で、インデックスアドレスに相当する。「Ｃｏｐｙ  Ｔａｇ  ＣＳ」とは、コピータグ３００をリードあるいはライトするためのチップセレクト信号で、アドレス信号の出力に合わせて有効にする。「Ｃｏｐｙ  Ｔａｇ  ＯＥ」とは、コピータグ３００のリード時にコピータグ３００がタグアドレスおよびステートを出力するのを許可するアウトプットイネーブル信号で、ライト時にはコピータグ３００からのタグアドレスおよびステートの出力を抑止するために無効にする。「Ｃｏｐｙ  Ｔａｇ  ＷＥ」とは、コピータグ３００にライトするためのライトイネーブル信号で、ライト時のアドレス出力に合わせて有効にする。「Ｃｏｐｙ  Ｔａｇ  Ｄａｔａ」とは、コピータグ３００との間でタグアドレスおよびステートをリードあるいはライトするためのデータ信号である。
【００１７】
ここで、プロセッサ４００の２次キャッシュ５００が２ウェイ構造であった場合、コピータグ３００もそれに対応してタグアドレスおよびステートを２ウェイ分持つことになる。すると、１つのコヒーレンシリクエストに対して２ウェイ分のタグアドレスおよびステートを読み出す必要があるため、コピータグ３００のデータ信号の幅を倍にするか、あるいはＳＳＲＡＭならば２サイクルのバーストリードを実行する必要がある。
【００１８】
【発明が解決しようとする課題】
しかし、上述した従来の技術では、先に説明したようにコピータグ３００のリードおよびライトの実行タイミングを固定しているため、バーストリードを実行することができず、コピータグ３００のデータ信号の幅を倍にして対処せざるを得ないという問題点があった。
【００１９】
さらに、２次キャッシュ５００が４ウェイ構造になると、データ信号の幅がさらに倍になるため、プロセッサ制御装置１００を構成するＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅｄ  Ｉｎｔｅｇｒａｔｉｏｎ）のピン数増加によるＬＳＩケースの大型化、さらにはコピータグ３００として使用するメモリ個数の増加よるメモリ制御信号の負荷増加と基板の実装面積の増加とが不可欠となるという問題点があった。
【００２０】
本発明の目的は、ＬＳＩのピン数および外部に接続されるメモリの数を増やすことなく、２ウェイあるいはそれ以上のウェイ構造を持つ２次キャッシュに対応できるプロセッサ制御装置を提供することにある。
【００２１】
【課題を解決するための手段】
本発明のプロセッサ制御装置は、複数のプロセッサ４００がシステムバス２００に接続されたマルチプロセッサシステムにおいて、プロセッサ４００とシステムバス２００との間に接続されるプロセッサ制御装置１００が、プロセッサ４００の制御を行うとともにシステム内のコヒーレンシを維持するための機能を持つ。
【００２２】
このコヒーレンシを維持するための一手段として、コピータグ３００と呼ぶ２次キャッシュ５００のタグ部のコピーを持ち、プロセッサ４００の２次キャッシュ５００の状態を管理する方式がある。ここでは、このコピータグ方式を採用し、かつシステムバス２００が固定タイミングのステートマシンとして動作する場合について考える。
【００２３】
システムバス２００が４ステートサイクルからなるステートマシンであるならば、コピータグ３００へのリードアクセスおよびライトアクセスも４ステートサイクルで完結するように制御する。つまり、データ信号の転送方向の切り替えに伴う無転送期間を考慮すると、リードおよびライトにはそれぞれ１クロックサイクルしか割り当てられないことになる。ここで、２次キャッシュ５００が２ウェイ構造であるならば、コピータグ３００もこれに合わせて２ウェイ構造となるため、１回のリードアクセスについて２つのタグアドレスおよびステートを読み出す必要がある。従来の回路ではコピータグ３００のデータ幅を倍にして対応していたが、本発明ではデータ幅はそのままで、コピータグ３００に対するリードアクセスを２クロックサイクル連続して行うことにより、２つのタグアドレスおよびステートの読み出しに対応している。
【００２４】
コピータグ３００に対するリードアクセスは、２次キャッシュ５００のコヒーレンシ維持に関するコヒーレンシリクエストがシステムバス２００に発行された時に必ず実行されるが、ライトアクセスは、そのコヒーレンシリクエストにより２次キャッシュ５００の状態更新が必要になった場合にのみ実行される。つまり、リードアクセスは実行されても、ライトアクセスは必ずしも実行されるとは限らない。そこで、ライトアクセスが実行されないタイミングでは、リードサイクルを延長して実行することにより、所望のタグアドレスおよびステートの読み出しを完了させる。
【００２５】
これを、図２を用いて説明する。システムバス２００にコヒーレンシリクエスト（ｔ０１）が発行されると、プロセッサ制御装置１００は、コピータグ３００へのリードアクセスを計画する。ここで、直前にコヒーレンシリクエストが発行されていないあるいは発行されたが２次キャッシュ５００の状態更新の必要がなかった場合には、２クロックサイクル連続してコピータグ３００へのリード（ｔ０３,ｔ０４）を実行する。このリードに対するタグアドレスおよびステートは規定クロックサイクル後にコピータグ３００から出力され（ｔ０５,ｔ０６）、プロセッサ制御装置１００は、２次キャッシュ５００の該当ブロックデータの状態更新が必要か、つまりコピータグ３００へのライトアクセスが必要かを判断する（ｔ０７）。さらに、プロセッサ制御装置１００は、システムバス２００には次のコヒーレンシリクエスト（ｔ０５）が発行されており、コピータグ３００へのリード（ｔ０７）を実行するが、同時に先のコヒーレンシリクエスト（ｔ０１）によるコピータグ３００へのライトアクセスが必要であると判断されたならば（ｔ０７）、２クロックサイクル目のリードは実行しない（ｔ０８）。これは、２クロックサイクル目のリード（ｔ０８）に対してコピータグ３００が出力するタグアドレスおよびステート（ｔ１０）と、ライト（ｔ１０）によりプロセッサ制御装置１００が出力するタグアドレスおよびステート（ｔ１１）とが連続することを避けるためである。
【００２６】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照して詳細に説明する。
【００２７】
（１）第１の実施の形態
図１は、本発明の第１の実施の形態に係るプロセッサ制御装置１００の構成を示す回路ブロック図である。このプロセッサ制御装置１００は、図１３で説明したマルチプロセッサシステムにおけるのと同様に、システムバス２００と、コピータグ３００と、プロセッサ４００とに接続されている。
【００２８】
プロセッサ制御装置１００は、システムバス２００に発行されたコヒーレンシリクエストのアドレスおよびコマンドを受信するリクエスト受信バッファ１１０と、リクエスト受信バッファ１１０中のコヒーレンシリクエストのアドレスをコピータグ３００をアクセスするためのインデックスアドレスに変換するアドレス変換部１２０と、アドレス変換部１２０により変換されたインデックスアドレスをコピータグ３００に対して「Ｃｏｐｙ  Ｔａｇ  Ａｄｄｒｅｓｓ」として出力するアドレス出力バッファ１３０と、コピータグ３００のリードアクセスおよびライトアクセスを制御するコピータグ制御部１４０と、コピータグ３００からリードされたタグアドレスおよびステートを受信するデータ受信バッファ１５０と、コヒーレンシリクエストのアドレスおよびコマンドとコピータグ３００からリードしたタグアドレスおよびステートとを比較して２次キャッシュ５００およびコピータグ３００の更新が必要かどうかを判断するアドレス比較部１６０と、コピータグ３００の更新が必要な場合にライトするタグアドレスおよびステートからなるタグアドレスおよびステートを出力するデータ出力バッファ１７０と、システムバス２００に発行されたコヒーレンシリクエストをリトライさせるためのリトライ制御部１８０と、アドレス比較部１６０で２次キャッシュ５００の更新が必要とされた場合にプロセッサ４００へ発行するためのリクエストを生成するリクエスト生成回路１９０と、そのリクエストを格納するためのリクエスト発行バッファ１９５とを含んで構成されている。
【００２９】
図３は、リクエスト受信バッファ１１０を説明したもので、コヒーレンシリクエストのアドレスおよびコマンドをそれぞれバッファに格納するとともに、コヒーレンシリクエストを受信したことをコピータグ制御部１４０に通知する。コマンドは、コヒーレンシリクエストの種類を示し、コヒーレントブロックリードＳｈａｒｅｄ（以下、リードＳｈと記す），コヒーレントブロックリードＥｘｃｌｕｓｉｖｅ（以下、リードＥｘと記す），およびインバリデートがある。
【００３０】
図４は、アドレス変換部１２０を説明したもので、コヒーレンシリクエストのアドレスをタグアドレス，インデックスアドレス，およびオフセットアドレスに分類する。オフセットアドレスは、２次キャッシュ５００のブロックサイズにより決定されるアドレス下位ビットで、コピータグ３００へのアクセスには使用されない。インデックスアドレスは、コピータグ３００を索引するためのアドレスで、この部分がコピータグ３００への出力アドレスとしてアドレス出力バッファ１３０に転送される。残りがタグアドレスで、コピータグ３００に格納されているタグアドレスと比較する部分である。このインデックスアドレスとタグアドレスとは、キャッシュサイズに応じてその境界が移動するため、数種類のキャッシュサイズに対応するために選択回路１２１で選択できるようになっている。図４では、４種類のキャッシュサイズに対応した場合を示してある。
【００３１】
図５は、コピータグ制御部１４０を説明したもので、フリップフロップ１４１ａ〜１４１ｄと、フリップフロップ１４２ａ〜１４２ｄと、論理積回路１４３と、論理和回路１４４と、フリップフロップ１４５と、否定論理和回路１４６と、フリップフロップ１４７と、フリップフロップ１４８と、フリップフロップ１４９ａ〜１４９ｄとから構成されている。
【００３２】
コピータグ制御部１４０は、リクエスト受信バッファ１１０からのコヒーレンシリクエスト受信通知信号とアドレス比較部１６０からのコピータグ更新指示信号とに従って、コピータグ３００のアクセスサイクルを生成する。
【００３３】
まず、コピータグ３００にリードアクセスあるいはライトアクセスするためのチップセレクト信号（Ｃｏｐｙ  Ｔａｇ  ＣＳ）を生成する論理を説明する。
【００３４】
コピータグ３００をリードアクセスする場合、１クロックサイクル目のリードは、リクエスト受信バッファ１１０からのコヒーレンシリクエスト受信通知信号そのものを使用する。２クロックサイクル目のリードを行うかどうかは、直後にコピータグ３００へのライトアクセスが実行されるかどうかによるので、同コヒーレンシリクエスト受信通知信号をフリップフロップ１４１ａにて保持したものとアドレス比較部１６０からのコピータグ更新指示信号を論理否定したものとの論理積を論理積回路１４３にて生成する。コピータグ３００にライトアクセスする場合、同コピータグ更新指示信号をフリップフロップ１４２ａ，１４２ｂ，１４２ｃ，１４２ｄと４回保持したものを使用する。よって、コピータグ３００のチップセレクト信号は、上記３つの信号の論理和を論理和回路１４４で生成したものをフリップフロップ１４５で保持して生成される。
【００３５】
次に、コピータグ３００からのタグアドレスおよびステート出力を制御するアウトプットイネーブル信号（Ｃｏｐｙ  Ｔａｇ  ＯＥ）を生成する論理を説明する。
【００３６】
アウトプットイネーブル信号は、プロセッサ制御装置１００がデータを出力する、つまりコピータグ３００にライトアクセスする時にのみ無効にするので、フリップフロップ１４２ｂ，１４２ｃ，１４２ｄの出力信号の否定論理和を否定論理和回路１４６で生成したものをフリップフロップ１４７で保持して生成される。
【００３７】
さらに、コピータグ３００へのライトアクセスを指示するライトイネーブル信号（Ｃｏｐｙ  Ｔａｇ  ＷＥ）は、フリップフロップ１４２ｂの出力信号をフリップフロップ１４８で保持して生成される。
【００３８】
なお、チップセレクト信号，アウトプットイネーブル信号，およびライトイネーブル信号は、いずれも負論理の信号として定義している。
【００３９】
また、アドレス比較部１６０での判断に使用するために、コピータグ制御部１４０は、フリップフロップ１４１ａの出力信号をフロップフロップ１４１ｂ，１４１ｃ，１４１ｄと３回保持した信号１４０ｓと、論理積回路１４３の出力信号をフリップフロップ１４９ａ，１４９ｂ，１４９ｃ，１４９ｄと４回保持した信号１４０ｔとを出力する。
【００４０】
図６は、アドレス比較部１６０を説明したもので、選択回路１６１と、一対の比較回路１６２ａ，１６２ｂと、検出回路１６３と、ステート生成回路１６４と、リトライ指示回路１６５と、バッファ１６６ａ，１６６ｃと、バッファ１６６ｂ，１６６ｄと、セレクタ１６７と、バッファ１６８と、バッファ１６９とから構成されている。
【００４１】
アドレス比較部１６０は、コピータグ３００からリードしたタグアドレスとコヒーレンシリクエストのタグアドレスとを比較し、さらにコピータグ３００からリードしたステートとコヒーレンシリクエストのコマンドとによって、２次キャッシュ５００およびコピータグ３００の更新を判断する。
【００４２】
まず、アドレス比較部１６０は、リクエスト受信バッファ１１０からのコヒーレンシリクエストのアドレスをバッファ１６８に、コマンドをバッファ１６９に保持する。先に説明したように、タグアドレスは、キャッシュサイズに応じてそのビット数が変わるため、選択回路１６１によりタグアドレスの選択を行う。
【００４３】
また、コピータグ３００からリードし、データ受信バッファ１５０に格納されたタグアドレスおよびステートは、リード１クロックサイクル目にリードしたウェイ０のタグアドレスがバッファ１６６ａに、同ステートがバッファ１６６ｂにそれぞれ格納される。
【００４４】
次に、リード２クロックサイクル目にリードしたウェイ１のタグアドレスがバッファ１６６ｃに、同ステートがバッファ１６６ｄに格納される。この時の各バッファ１６６ａ〜１６６ｄへのタイミング信号として、リード１クロックサイクル目はコピータグ制御部１４０の出力信号１４０ｓが、リード２クロックサイクル目は同出力信号１４０ｔが使用される。もちろん、リード２クロックサイクル目が実行されなければ、バッファ１６６ｃおよび１６６ｄには格納されない。選択回路１６１で選択されたタグアドレスとバッファ１６６ａおよび１６６ｃのタグアドレスとは、それぞれ比較回路１６２ａおよび１６２ｂで一致比較が行われる。
【００４５】
検出回路１６３は、比較回路１６２ａおよび１６２ｂの一致比較結果と、バッファ１６９に保持したコヒーレンシリクエストのコマンドと、コピータグ３００からリードしてバッファ１６６ｂおよび１６６ｄに格納したステートと、コピータグ制御回路１４０からの２本の出力信号１４０ｓおよび１４０ｔとにより、２次キャッシュ５００およびコピータグ３００の更新が必要であるかどうかを判断し、ステート生成回路１６４，リトライ指示回路１６５，セレクタ１６７，コピータグ制御部１４０，およびリクエスト生成回路１９０への各指示信号を生成する。
【００４６】
図７を参照すると、検出回路１６３は、デコーダ１６３ａ〜１６３ｃと、判定回路１６３ｄ，１６３ｅと、論理和回路１６３ｆと、論理積回路１６３ｈ，１６３ｉと、論理積回路１６３ｊとから構成されている。
【００４７】
検出回路１６３は、バッファ１６９からのコマンドをデコーダ１６３ａでデコードし、リードＳｈ，リードＥｘあるいはインバリデートのいずれであるかを決定する。バッファ１６６ｂおよび１６６ｄからのステートはそれぞれデコーダ１６３ｂおよび１６３ｃでデコードされ、Ｉｎｖａｌｉｄ，Ｓｈａｒｅｄ，Ｅｘｃｌｕｓｉｖｅのいずれのステートであるかを決定する。コマンドのデコード結果およびステートのデコード結果に加え、比較回路１６２ａおよび１６２ｂからの一致比較結果から、判定回路１６３ｄおよび１６３ｅにて２次キャッシュ５００およびコピータグ３００の更新判定を行う。判定回路１６３ｄはウェイ０用で、判定回路１６３ｅはウェイ１用であるが、どちらも同一論理回路により構成されている。
【００４８】
図８を参照して、判定回路１６３ｄおよび判定回路１６３ｅの判定論理についてさらに説明する。比較結果がタグアドレス一致で、コマンドがリードＳｈならばステートがＥｘｃｌｕｓｉｖｅの場合，コマンドがリードＥｘならばステートがＳｈａｒｅｄかＥｘｃｌｕｓｉｖｅの場合，コマンドがインバリデートならばステートがＳｈａｒｅｄの場合に、２次キャッシュ５００およびコピータグ３００の更新を要求する。判定回路１６３ｄおよび判定回路１６３ｅのそれぞれにおいて更新判定を行うが、両回路から更新要求がくることはない。
【００４９】
ウェイ０あるいはウェイ１のどちらかで更新要求が発生すると、コピータグ３００の更新が必要となるため、論理和回路１６３ｆで論理和をとる。さらに、コピータグ３００を２クロックサイクル連続してリードできた時のみ、コピータグ３００の更新が有効となるため、コピータグ制御部１４０からの出力信号１４０ｓと出力信号１４０ｔとの論理積を論理積回路１６３ｈでとり、コピータグ制御部１４０へのコピータグ更新指示信号は、論理和回路１６３ｆの出力信号と論理積回路１６３ｈの出力信号との論理積を論理積回路１６３ｉで生成したものとなる。
【００５０】
逆に、コピータグ３００を２クロックサイクル連続してリードできなかった時は、コピータグ制御部１４０からの出力信号１４０ｓと、出力信号１４０ｔの論理否定をとったものとの論理積を論理積回路１６３ｊで生成して、リトライ指示回路１６５に通知する。
【００５１】
また、ステート生成回路１６４へはデコーダ１６３ａの出力信号であるコマンドのデコード結果を通知し、セレクタ１６７へは判定回路１６３ｄの更新指示信号を通知し、リクエスト生成回路１９０へは判定回路１６３ｄおよび判定回路１６３ｅからそれぞれ２次キャッシュ５００の更新指示信号とその時のステートとを通知する。
【００５２】
図６の説明に戻って、ステート生成回路１６４は、コピータグ３００の更新時に新しく書き込むステートを生成する。
【００５３】
これを、図９を用いて説明する。新しいステートはコヒーレンシリクエストのコマンドの種類に応じて決定され、リードＳｈではＳｈａｒｅｄに、リードＥｘおよびインバリデートではＩｎｖａｌｉｄになる。
【００５４】
リトライ指示回路１６５は、システムバス２００に対するコヒーレンシリクエストのリトライ指示信号を保持する。検出回路１６３では、コピータグ３００のリードで１クロックサイクル目はリードしたが、２クロックサイクル目はリードしなかったことを検出しており、この場合にリトライを実行する。
【００５５】
セレクタ１６７は、データ出力バッファ１７０に転送するタグアドレスを選択する。コピータグ３００へのライトはどちらか一方のウェイに対してのみ実行するため、その時に使用するタグアドレスを選択する必要がある。そのため、検出回路１６３でウェイ０側の更新が要求された場合にはバッファ１６６ａのタグアドレスを選択し、そうでなければバッファ１６６ｃのタグアドレスを選択する。
【００５６】
さらに、図１に戻って、リクエスト生成回路１９０は、２次キャッシュ５００の更新が必要な場合に、プロセッサ４００に対して発行するリクエストを生成する。プロセッサ４００に発行するリクエストは、リクエスト受信バッファ１１０からのアドレスおよびコマンド，アドレス比較部１６０からの２次キャッシュ５００の更新指示信号およびステートから行う。
【００５７】
これを図１０を用いて説明する。コヒーレンシリクエストのコマンドがリードＳｈで２次キャッシュ５００の更新指示信号があり、コピータグ３００からリードしたステートがＥｘｃｌｕｓｉｖｅの場合、リクエスト生成回路１９０は、プロセッサ４００に対してインタベンションＳｈａｒｅｄリクエストを発行する。このインタベンションＳｈａｒｅｄリクエストは、２次キャッシュ５００からのブロックデータ読み出しを要求し、かつその２次キャッシュ５００にはブロックデータがＳｈａｒｅｄステートで残る。
【００５８】
コマンドがリードＥｘで２次キャッシュ５００の更新指示信号があり、ステートがＥｘｃｌｕｓｉｖｅの場合、リクエスト生成回路１９０は、プロセッサ４００に対してインタベンションＥｘｃｌｕｓｉｖｅリクエストを発行する。このインタベンションＥｘｃｌｕｓｉｖｅリクエストは、２次キャッシュ５００からのブロックデータ読み出しを要求し、かつその２次キャッシュ５００のブロックデータを無効化する。
【００５９】
コマンドがリードＥｘで２次キャッシュ５００の更新指示信号があり、ステートがＳｈａｒｅｄの場合，およびコマンドがインバリデートで２次キャッシュ５００の更新指示信号があり、ステートがＳｈａｒｅｄの場合、プロセッサ４００に対してインバリデートリクエストを発行する。このインバリデートリクエストは、２次キャッシュ５００のブロックデータを無効化する。
【００６０】
次に、このように構成された第１の実施の形態に係るプロセッサ制御装置の動作について、図１，図４〜図７，および図１１のタイムチャートを参照して説明する。
【００６１】
システムバス２００にコヒーレンシリクエストが発行される（ｔ０１）と、そのアドレスおよびコマンドはリクエスト受信バッファ１１０で受信される（ｔ０２）。このリクエスト受信バッファ１１０内のアドレスは直ちにアドレス変換部１２０に送られ（ｔ０２）、選択回路１２１によりコピータグ３００をリードするためのインデックスアドレスに変換される。
【００６２】
このインデックスアドレスはアドレス出力バッファ１３０に送られ、アドレス出力バッファ１３０は、コピータグ３００にアドレスを出力（ｔ０３,ｔ０４）する。ここでアドレス比較部１６０からコピータグ３００の更新指示信号が出力されていなければ、コピータグ制御部１４０は、２クロックサイクル連続して（ｔ０３,ｔ０４）コピータグ３００へのチップセレクト信号を有効にする。
【００６３】
コピータグ３００からは規定のタイミング後にリードに対するタグアドレスおよびステートが出力（ｔ０５,ｔ０６）され、データ受信バッファ１５０で受信される。
【００６４】
この時、コピータグ制御部１４０は、１クロックサイクル目のリード実行を示す出力信号１４０ｓ，および２クロックサイクル目のリード実行を示す出力信号１４０ｔをともに有効にする。リードされたタグアドレスおよびステートは、データ受信バッファ１５０からアドレス比較部１６０に転送される。
【００６５】
アドレス比較部１６０では、タグアドレスはリクエスト受信バッファ１１０からのアドレスを選択回路１６１で選択したタグアドレスと比較回路１６２ａおよび１６２ｂで比較される。さらに、検出回路１６３は、ステートと、リクエスト受信バッファ１１０からのコマンドと、比較回路１６２ａおよび比較回路１６２ｂの一致比較結果とともに判定回路１６３ｄおよび判定回路１６３ｅにて２次キャッシュ５００およびコピータグ３００の更新が必要かどうかを判断する。
【００６６】
コピータグ３００の更新が必要となったならば、セレクタ１６７で選択したタグアドレス，およびステート生成回路１６４で生成したステートをデータ出力バッファ１７０にコピータグ３００にライトするためのタグアドレスおよびステートとして格納するとともに、コピータグ制御部１４０に更新指示信号を通知してコピータグ３００へのチップセレクト信号およびライトイネーブル信号をともに有効（ｔ１０）にして、アドレス出力バッファ１３０からアドレスを出力（ｔ１０）する。
【００６７】
続いて、データ出力バッファ１７０からタグアドレスおよびステートを出力（ｔ１１）してライトを実行する。
【００６８】
また、リクエスト生成回路１９０は、プロセッサ４００に対するリクエストを生成し、リクエスト発行バッファ１９５からプロセッサ４００にリクエストを発行する。
【００６９】
システムバス２００に続けてコヒーレンシリクエストが発行される（ｔ０５）と、同様にそのアドレスおよびコマンドがリクエスト受信バッファ１１０で受信され、アドレス変換部１２０で変換されたアドレスがアドレス出力バッファ１３０に格納される。
【００７０】
アドレス出力バッファ１３０は、コピータグ３００にアドレスを出力（ｔ０７,ｔ０８）するが、アドレス比較部１６０から前のコピータグ３００のリードによるコピータグ３００の更新指示信号が出力されているため、コピータグ制御部１４０は、１クロックサイクルのみチップセレクト信号を有効（ｔ０７）にするだけで、２クロックサイクル目はチップセレクト信号を無効（ｔ０８）にする。この場合、２クロックサイクル目のリード実行を示す出力信号１４０ｔが有効にならず、アドレス比較部１６０からリトライ制御部１８０に通知して、システムバス２００に対してコヒーレンシリクエストのリトライを要求する。
【００７１】
以上説明したように、第１の実施の形態によれば、コピータグ３００へのライトサイクルの実行を観測してリードサイクルの実行を制御し、コピータグ３００へのアクセスを効率化したことにより、ＬＳＩのピン数および外部に接続されるメモリの数を増やすことなく、２ウェイ構造を持つ２次キャッシュ５００に対応することができる。
【００７２】
（２）第２の実施の形態
第１の実施の形態では、コピータグ３００のリードが１クロックサイクルしか実行できず、必要なタグアドレスおよびステートの半分しかリードできなかった場合、システムバス２００に対してコヒーレンシリクエストのリトライを要求するとしたが、１クロックサイクル分のタグアドレスおよびステートでも判断できる場合がある。２ウェイ構造の２次キャッシュ５００であっても、ある特定のアドレスに対する有効なブロックデータは一方のウェイにしか存在しない。そこで、１クロックサイクル分のタグアドレスおよびステートに、そのアドレスに対する有効なタグアドレスおよびステートが格納されていれば、残りのタグアドレスおよびステートには有効なタグアドレスおよびステートは存在しないことになる。このことを利用して１クロックサイクルしかリードが実行できなかった場合でも、必ずしもコヒーレンシリクエストのリトライをせずに完了させることができる。これは、図７の検出回路１６３を変更することで実現できる。
【００７３】
図１２を用いて説明する。タグアドレスの一致比較結果とステートおよびコマンドから判定回路１６３ｄ，１６３ｅにてウェイ毎の更新判定をするところまでは、第１の実施の形態と同じである。先に説明したように、１クロックサイクル目にリードされたタグアドレスおよびステートで２次キャッシュ５００およびコピータグ３００の更新が確定するか、あるいは２クロックサイクルともリードできてかつどちらかのウェイで更新が必要とされた場合にコピータグ３００への更新指示信号を出力するので、判定回路１６３ｄの出力信号とコピータグ制御部１４０の出力信号１４０ｓとの論理積を論理積回路１６３ｋでとった信号と、判定回路１６３ｅの出力信号とコピータグ制御部１４０の出力信号１４０ｔとの論理積を論理積回路１６３ｌでとった信号との論理和を論理和回路１６３ｍで生成した信号がコピータグ制御部１４０への更新指示信号となる。
【００７４】
一方、リトライについては、１クロックサイクル目にリードされたタグアドレスおよびステートで２次キャッシュ５００およびコピータグ３００の更新が確定するか、もしくは２クロックサイクルともにリードできればリトライする必要はなくなるので、コピータグ制御部１４０の出力信号１４０ｓと出力信号１４０ｔの論理否定したものとの論理積を論理積回路１６３ｊでとった信号と、判定回路１６３ｄの出力信号の論理否定をとった信号との論理積を論理積回路１６３ｎで生成した信号とが、リトライ指示回路１６５への出力となる。
【００７５】
第２の実施の形態によれば、コピータグ３００へのライトサイクルの実行を観測してリードサイクルの実行を制御し、コピータグ３００へのアクセスを効率化したことにより、ＬＳＩのピン数および外部に接続されるメモリの数を増やすことなく、２ウェイ構造を持つ２次キャッシュ５００に対応することができる。
【００７６】
なお、上記各実施の形態では、２次キャッシュ５００が２ウェイ構造の場合について説明したが、２ウェイ以上のウェイ構造を持つ２次キャッシュ５００の場合にも、アドレス比較部１６０での処理を２つ以上のタグアドレスおよびステートについて行うことにより、同様の作用および効果を得ることができる。
【００７７】
【発明の効果】
本発明による効果は、ＬＳＩのピン数および外部に接続されるメモリの数を増やすことなく、２ウェイあるいはそれ以上のウェイ構造を持つ２次キャッシュに対応できることである。その理由は、コピータグへのライトサイクルの実行を観測してリードサイクルの実行を制御することにより、コピータグへのアクセスを効率化したためである。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態に係るプロセッサ制御装置の構成を示す回路ブロック図である。
【図２】本発明のプロセッサ制御装置の動作を示すタイムチャートである。
【図３】図１中のリクエスト受信バッファのより詳しい構成を示す図である。
【図４】図１中のアドレス変換部のより詳しい構成を示す回路図である。
【図５】図１中のコピータグ制御部のより詳しい構成を示す回路図である。
【図６】図１中のアドレス比較部のより詳しい構成を示す回路図である。
【図７】図６中の検出回路のより詳しい構成を示す回路図である。
【図８】図７中の判定回路の判定論理を説明するテーブルである。
【図９】図６中のステート生成回路が生成するステートを説明するテーブルである。
【図１０】図１中のリクエスト生成回路が発行するリクエストを説明するテーブルである。
【図１１】第１の実施の形態に係るプロセッサ制御装置の動作を示すタイムチャートである。
【図１２】本発明の第２の実施の形態に係るプロセッサ制御装置における検出回路のより詳しい構成を示す回路図である。
【図１３】本発明のプロセッサ制御装置が配設されたマルチプロセッサシステムを示す回路ブロック図である。
【図１４】アドレスの構成を説明する図である。
【図１５】図１３中の２ウェイ構造の２次キャッシュのタグ部を説明する図である。
【図１６】図１３中のコピータグの構成について説明するテーブルである。
【図１７】図１３中のコピータグの動作について説明するタイムチャートである。
【符号の説明】
１００  プロセッサ制御装置
１１０  リクエスト受信バッファ
１２０  アドレス変換部
１２１  選択回路
１３０  アドレス出力バッファ
１４０  コピータグ制御部
１４１ａ〜１４１ｄ  フリップフロップ
１４２ａ〜１４２ｄ  フリップフロップ
１４３  論理積回路
１４４  論理和回路
１４５  フリップフロップ
１４６  否定論理和回路
１４７  フリップフロップ
１４８  フリップフロップ
１４９ａ〜１４９ｄ  フリップフロップ
１５０  データ受信バッファ
１６０  アドレス比較部
１６１  選択回路
１６２ａ，１６２ｂ  比較回路
１６３  検出回路
１６３ａ〜１６３ｃ  デコーダ
１６３ｄ，１６３ｅ  判定回路
１６３ｆ  論理和回路
１６３ｈ，１６３ｉ  論理積回路
１６３ｊ  論理積回路
１６３ｋ  論理積回路
１６３ｌ  論理積回路
１６３ｍ  論理和回路
１６３ｎ  論理積回路
１６４  ステート生成回路
１６５  リトライ指示回路
１６６ａ，１６６ｃ  バッファ
１６６ｂ，１６６ｄ  バッファ
１６７  セレクタ
１６８  バッファ
１６９  バッファ
１７０  データ出力バッファ
１８０  リトライ制御部
１９０  リクエスト生成回路
１９５  リクエスト発行バッファ
２００  システムバス
３００  コピータグ
４００  プロセッサ
５００  ２次キャッシュ
６００  メモリ制御部
７００  Ｉ／Ｏ制御部
【図１】
0003644380.tif 000002
【図２】
0003644380.tif 000003
【図３】
0003644380.tif 000004
【図４】
0003644380.tif 000005
【図５】
0003644380.tif 000006
【図６】
0003644380.tif 000007
【図７】
0003644380.tif 000008
【図８】
0003644380.tif 000009
【図９】
0003644380.tif 000010
【図１０】
0003644380.tif 000011
【図１１】
0003644380.tif 000012
【図１２】
0003644380.tif 000013
【図１３】
0003644380.tif 000014
【図１４】
0003644380.tif 000015
【図１５】
0003644380.tif 000016
【図１６】
0003644380.tif 000017
【図１７】
0003644380.tif 000018