(57)【要約】【課題】プロセッサコアの違反アクセスを効率よく検出する。【解決手段】マルチプロセッサシステム１０は、複数のプロセッサコア１１に対応して設けられた複数のキャッシュシステム２１を含む。キャッシュシステム２１は、キャッシュラインとこのライン情報とを格納するキャッシュメモリ２２を含む。キャッシュシステム２１は、ライン情報と、アービタから送られるアクセス要求とを比較して違反アクセスを検出する違反検出回路２４と、違反検出回路２４による検出結果に基づいてキャッシュラインごとにフラグをセットし、かつプロセッサコア１１に保持されたキャッシュラインに読み出しアクセス又は書き込みアクセスする際にフラグの内容を確認し、このフラグの内容に基づいて違反アクセスを検出するフラグ制御回路とを含む。【選択図】      図２
2010128698.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサコアに対応して設けられ、かつデータを格納する単位であるキャッシュラインを格納するキャッシュメモリをそれぞれが含む複数のキャッシュシステムと、
前記複数のプロセッサコアに共有される共有メモリと、
前記複数のキャッシュシステムから前記共有メモリへ送られるアクセス要求を調停し、かつ調停されたアクセス要求を前記共有メモリ及び前記複数のキャッシュシステムに送るアービタと、
を具備し、
前記キャッシュメモリの各々は、キャッシュラインが有効か否かを示す有効ビットと、キャッシュラインを前記共有メモリに書き戻したか否かを示すダーティビットと、キャッシュラインのアドレス情報であるタグとを含むライン情報を格納し、
前記キャッシュシステムの各々は、
前記ライン情報と、前記アービタから送られるアクセス要求とを比較して違反アクセスを検出する違反検出回路と、
前記違反検出回路による検出結果に基づいてキャッシュラインごとにフラグをセットし、かつプロセッサコアに保持されたキャッシュラインに読み出しアクセス又は書き込みアクセスする際に、前記フラグの内容を確認し、このフラグの内容に基づいて違反アクセスを検出するフラグ制御回路と、
を具備することを特徴とするマルチプロセッサシステム。
【請求項２】
前記アクセス要求は、キャッシュメモリのデータが書き換えられた旨を示す識別信号を含み、
前記フラグは、第１のプロセッサコアに保持されたキャッシュラインが、前記共有メモリ上又は第２のプロセッサコア上で書き換えられた場合にセットされることを特徴とする請求項１に記載のマルチプロセッサシステム。
【請求項３】
デバッグの有効／無効を切り替える切替回路をさらに具備し、
前記キャッシュシステムは、デバッグの有効時に違反アクセスの検出を行い、デバッグの無効時に前記フラグの全てをクリアすることを特徴とする請求項１又は２に記載のマルチプロセッサシステム。
【請求項４】
前記キャッシュメモリは、前記フラグを格納する領域を含むことを特徴とする請求項１乃至３のいずれかに記載のマルチプロセッサシステム。
【請求項５】
複数のプロセッサコアに対応して設けられ、かつデータを格納する単位であるキャッシュラインを格納するキャッシュメモリをそれぞれが含む複数のキャッシュシステムと、
前記複数のプロセッサコアに共有される共有メモリと、
前記複数のキャッシュシステムから前記共有メモリへ送られるアクセス要求を調停し、かつ調停されたアクセス要求を前記共有メモリ及び前記複数のキャッシュシステムに送るアービタと、
を具備し、
前記キャッシュメモリの各々は、キャッシュラインが有効か否かを示す有効ビットと、キャッシュラインを前記共有メモリに書き戻したか否かを示すダーティビットと、キャッシュラインのアドレス情報であるタグとを含むライン情報を格納し、
前記キャッシュシステムの各々は、
前記ライン情報と、前記アービタから送られるアクセス要求とを比較して違反アクセスを検出する違反検出回路と、
前記違反検出回路による検出結果に基づいて有効ビット及びダーティビットを一時的に書き換える第１の制御回路と、
プロセッサコアに保持されたキャッシュラインに読み出しアクセス又は書き込みアクセスする際に、有効ビット及びダーティビットの内容を確認し、これらの内容に基づいて違反アクセスを検出する第２の制御回路と、
を具備することを特徴とするマルチプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステムに係り、例えば複数のプロセッサコアと、これらに共有される共有メモリとを備えたマルチプロセッサシステムに関する。
【背景技術】
【０００２】
近年、コンピュータ装置の処理性能を飛躍的に向上させることが期待できることから、複数のプロセッサコアを共有バスを介して接続したマルチプロセッサシステムの開発が進められている。また、プロセッサコアの動作周波数は、年々高くなる傾向にあるが、主記憶に用いられる外部メモリ（共有メモリ）はプロセッサコアほど高速化が進んでいないため、両者のギャップを埋めるために、キャッシュメモリを用いるのが一般的である。このようなプロセッサコアのキャッシュ機構としては、プロセッサコアに１次キャッシュを内蔵させている。
【０００３】
特許文献１には、共有メモリ型のマルチプロセッサシステムにおいて、コヒーレンシ（一貫性）維持のために不適切なメモリアクセスを検出し、この検出結果を記憶もしくは各プロセッサコアへ割り込みによって伝達するデバッグシステムが開示されている。
【０００４】
上記デバッグシステムでは、あるプロセッサコアの１次キャッシュ内において書き換えを行っていない（ダーティではない）状態で保持しているキャッシュラインに対して他のプロセッサコアで書き込みアクセスが発生した場合に、実際には書き換えられた１次キャッシュ内のキャッシュラインの内容を使用しない（＝プログラムとしてコヒーレンシを保てなくなることはない）としても、他のプロセッサコアによる書き込みアクセスを違反アクセスとして検出してしまう。
【０００５】
この違反検出を回避するためには、他のプロセッサコアによって書き換えられたキャッシュラインを、書き換えられた後に使用しないことが分かっているにもかかわらず全て無効（invalidate）にする必要があり、処理の実現上は必ずしも必要としない無効処理によって処理時間が増加してしまう。
【０００６】
同様に、大きなデータ領域を複数のプロセッサコアで共有している状況で、同期タイミングの制約が厳しくない形であるプロセッサコアが一部のデータのみを書き換えるという処理を行う場合に、本来は書き換えた後にその領域を指定して再読み込みしてもらうだけで済むところを、書き換える領域を書き換える前に他のプロセッサコアに伝達して無効処理完了を待つという同期処理が必要になって処理時間が増加してしまうこともある。
【特許文献１】特開２００８−２５０３７３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、プロセッサコアの違反アクセスを効率よく検出することが可能なマルチプロセッサシステムを提供する。
【課題を解決するための手段】
【０００８】
本発明の一態様に係るマルチプロセッサシステムは、複数のプロセッサコアに対応して設けられ、かつデータを格納する単位であるキャッシュラインを格納するキャッシュメモリをそれぞれが含む複数のキャッシュシステムと、前記複数のプロセッサコアに共有される共有メモリと、前記複数のキャッシュシステムから前記共有メモリへ送られるアクセス要求を調停し、かつ調停されたアクセス要求を前記共有メモリ及び前記複数のキャッシュシステムに送るアービタとを具備する。前記キャッシュメモリの各々は、キャッシュラインが有効か否かを示す有効ビットと、キャッシュラインを前記共有メモリに書き戻したか否かを示すダーティビットと、キャッシュラインのアドレス情報であるタグとを含むライン情報を格納する。前記キャッシュシステムの各々は、前記ライン情報と、前記アービタから送られるアクセス要求とを比較して違反アクセスを検出する違反検出回路と、前記違反検出回路による検出結果に基づいてキャッシュラインごとにフラグをセットし、かつプロセッサコアに保持されたキャッシュラインに読み出しアクセス又は書き込みアクセスする際に、前記フラグの内容を確認し、このフラグの内容に基づいて違反アクセスを検出するフラグ制御回路とを具備する。
【０００９】
本発明の一態様に係るマルチプロセッサシステムは、複数のプロセッサコアに対応して設けられ、かつデータを格納する単位であるキャッシュラインを格納するキャッシュメモリをそれぞれが含む複数のキャッシュシステムと、前記複数のプロセッサコアに共有される共有メモリと、前記複数のキャッシュシステムから前記共有メモリへ送られるアクセス要求を調停し、かつ調停されたアクセス要求を前記共有メモリ及び前記複数のキャッシュシステムに送るアービタとを具備する。前記キャッシュメモリの各々は、キャッシュラインが有効か否かを示す有効ビットと、キャッシュラインを前記共有メモリに書き戻したか否かを示すダーティビットと、キャッシュラインのアドレス情報であるタグとを含むライン情報を格納する。前記キャッシュシステムの各々は、前記ライン情報と、前記アービタから送られるアクセス要求とを比較して違反アクセスを検出する違反検出回路と、前記違反検出回路による検出結果に基づいて有効ビット及びダーティビットを一時的に書き換える第１の制御回路と、プロセッサコアに保持されたキャッシュラインに読み出しアクセス又は書き込みアクセスする際に、有効ビット及びダーティビットの内容を確認し、これらの内容に基づいて違反アクセスを検出する第２の制御回路とを具備する。
【発明の効果】
【００１０】
本発明によれば、プロセッサコアの違反アクセスを効率よく検出することが可能なマルチプロセッサシステムを提供することができる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の実施の形態について図面を参照して説明する。なお、以下の説明において、同一の機能及び構成を有する要素については、同一符号を付し、重複説明は必要な場合にのみ行う。
【００１２】
［第１の実施形態］
［１．マルチプロセッサシステム１０の構成］
図１は、本発明の第１の実施形態に係るマルチプロセッサシステム１０の構成を示すブロック図である。図１に示したマルチプロセッサシステム１０は、例えば、チップに実装されたシステムＬＳＩ（Large-Scale Integrated Circuit）として構成される。
【００１３】
マルチプロセッサシステム１０は、複数のプロセッサコア１１、アービタ１３、共有メモリとしての２次キャッシュメモリ（２次キャッシュ）１４、メインメモリ１５、及び違反処理回路１６を備えている。なお、本実施形態では、例えば３個のプロセッサコア１１−１〜１１−３を一例として示している。以下の説明において、複数のプロセッサコア１１を区別する必要がない場合は、各プロセッサコアを単に“１１”と表記する。プロセッサコア１１内に含まれる回路についても同様である。２次キャッシュ１４は、例えばＳＲＡＭ（Static Random Access Memory）により構成されている。メインメモリ１５は、例えばＤＲＡＭ（Dynamic Random Access Memory）により構成されている。
【００１４】
プロセッサコア１１によるメインメモリ１５へのアクセスは、バス１２及び２次キャッシュ１４を介して行われる。なお、本実施形態では、共有メモリとしての２次キャッシュ１４は必ずしも必要ではなく、プロセッサコア１１がバス１２を介して直接に共有メモリとしてのメインメモリ１５へアクセスするように構成してもよい。
【００１５】
プロセッサコア１１−１〜１１−３から２次キャッシュ１４へのアクセス要求は、アービタ１３で競合を調停される。すなわち、アービタ１３は、複数のプロセッサコアから共有メモリにバス１２を介してアクセスが競合した場合に、規定された方法によりアクセスの割り当てを行う。そして、１サイクルに１つのアクセス要求だけが２次キャッシュ１４に送られるようになっている。２次キャッシュ１４にヒットしなかったアクセス要求は、メインメモリ１５に送られる。
【００１６】
各プロセッサコア１１から２次キャッシュ１４へ送られるアクセス要求には、プロセッサコア番号、リード／ライト識別信号、２次キャッシュ直接アクセス識別信号、１次キャッシュリフィルアクセス識別信号、及びアクセス先アドレスなどの情報の他に、１次キャッシュ書き込み識別信号ＣＷＩが含まれる。１次キャッシュ書き込み識別信号ＣＷＩについては後述する。リード／ライト識別信号は、読み出し／書き込み動作を識別する信号である。２次キャッシュ直接アクセス識別信号は、１次キャッシュを経由しないで直接に共有メモリにアクセスする動作を識別する信号である。１次キャッシュリフィルアクセス識別信号は、キャッシュミス時に共有メモリのデータを１次キャッシュに置き換える動作を識別する信号である。
【００１７】
図１に示すように、本実施形態のマルチプロセッサシステム１０は、２次キャッシュ１４に送られるアクセス要求を各プロセッサコア１１にフィードバックするフィードバックパスを備えている。各プロセッサコア１１は、このアクセス要求フィードバックを用いることで他のプロセッサコアのアクセス内容を確認することができ、また、アクセス要求フィードバックを用いて違反アクセスを検出することができる。
【００１８】
各プロセッサコア１１は、マルチプロセッサシステム１０の動作を制御するためのＣＰＵ（Central Processing Unit）であり、メインメモリ１５などに格納されたプログラムを実行することにより、キャッシュメモリやその他の回路の制御を行う。そして、ＬＳＩが処理すべき内容を複数のタスクに分割し、各タスクに最適な構成を持ったプロセッサコアを並列に動作させることで、大幅な処理速度の向上が可能となる。プロセッサコア１１−１〜１１−３はそれぞれ、１次キャッシュとしてのキャッシュシステム２１−１〜２１−３を備えている。
【００１９】
［２．キャッシュシステム２１の構成］
図２は、１次キャッシュとしてのキャッシュシステム２１の構成を示すブロック図である。なお、図２は、１個のプロセッサコア１１に含まれる１個のキャッシュシステム２１を示しており、他のプロセッサコア１１に含まれるキャッシュシステム２１の構成も図２と同じである。
【００２０】
キャッシュシステム２１は、１次キャッシュメモリ２２、キャッシュ制御回路２３、違反検出回路２４、インコヒーレントフラグ制御回路２５、ダーティ遷移検出回路２６、及びデバッグ切替回路２７を備えている。本実施形態では、違反検出回路２４、インコヒーレントフラグ制御回路２５、ダーティ遷移検出回路２６、デバッグ切替回路２７、及び違反処理回路１６によりデバッグ回路が構成される。
【００２１】
１次キャッシュメモリ２２は、例えばＳＲＡＭにより構成されている。図３は、１次キャッシュメモリ２２の構成を示す概略図である。１次キャッシュメモリ２２は、複数のデータからなるキャッシュラインを格納する領域を備えている。このキャッシュラインは、アクセス時にキャッシュと共有メモリとの間で取り交わされるデータの単位であり、図３の一行分のデータに対応する。
【００２２】
さらに、１次キャッシュメモリ２２は、有効（バリッド）ビット（Ｖ）、ダーティビット（Ｄ）、タグ、及びデータをそれぞれ格納する領域を備えている。有効ビット、ダーティビット、及びタグは、キャッシュラインごとに付加される。インデックスは、キャッシュラインの番号を表し、キャッシュラインを選択するために使用される。すなわち、キャッシュラインは、上から順番に０から始まる番号からなるインデックスが付されている。タグは、キャッシュラインのアドレス情報を示す。
【００２３】
有効ビットは、キャッシュラインが有効か否かを示す。すなわち、１次キャッシュメモリ２２内のキャッシュラインが、このキャッシュラインのインデックスとタグとで表されるデータとして有効か否かを示す。有効ビット＝１の場合はキャッシュラインは有効であり、有効ビット＝０の場合はキャッシュラインは無効である。
【００２４】
ダーティビットは、１次キャッシュメモリ２２内のキャッシュラインが書き換えられ（更新され）、このキャッシュラインが共有メモリに書き戻されたか否かを示す。プロセッサコアが１次キャッシュメモリ２２に書き込んだデータは、共有メモリに書き戻す（ライトバックを行う）必要があるため、キャッシュラインごとに、共有メモリへの書き戻しを行ったか否かを示すダーティビットが設けられている。換言すると、ダーティビットは、１次キャッシュメモリのキャッシュラインが書き換えられて最新データとなっており、このキャッシュラインのコピー元となる共有メモリには旧データしかなく、書き換えられたプロセッサコアが最新データを所有していることを示す。ダーティビットは、キャッシュラインが更新されて、まだ共有メモリに書き戻されていない場合に“１”にセットされる。
【００２５】
図２に示すように、１次キャッシュメモリ２２は、２つのアクセスポート（アクセスポート０、及びアクセスポート１）を有している。１次キャッシュメモリ２２に格納された有効ビット、ダーティビット、及びタグは、キャッシュライン単位で同時に読み出される。アクセスポート０を使用したアクセスはチップイネーブル信号ＣＥ０によって行われ、アクセスポート１を使用したアクセスはチップイネーブル信号ＣＥ１によって行われる。
【００２６】
キャッシュ制御回路２３は、アクセスポート０を用いて１次キャッシュメモリ２２にアクセスする。具体的には、書き込み時、キャッシュ制御回路２３は、チップイネーブル信号ＣＥ０をアサートし、かつインデックスＩＮＤ０及びライトデータＷＤ０を１次キャッシュメモリ２２に送る。これによって、インデックスＩＮＤ０に対応するキャッシュラインにライトデータＷＤ０が書き込まれる。また、読み出し時、キャッシュ制御回路２３は、リードイネーブル信号ＲＥ０をアサートし、かつインデックスＩＮＤ０を１次キャッシュメモリ２２に送る。これによって、キャッシュ制御回路２３は、インデックスＩＮＤ０に対応するキャッシュラインをリードデータＲＤ０として１次キャッシュメモリ２２から受ける。
【００２７】
また、キャッシュ制御回路２３は、１次キャッシュメモリ２２にデータがヒットしたか否かを示すキャッシュヒット信号を生成し、このキャッシュヒット信号をダーティ遷移検出回路２６に送る。このキャッシュヒット信号は、キャッシュヒット時に“１”、キャッシュミス時に“０”に設定される。
【００２８】
キャッシュ制御回路２３による１次キャッシュメモリ２２へのデータの書き込みは、以下のような２サイクルで実現される。  
・サイクル１：有効ビット、ダーティビット、及びタグの読み出し
・サイクル２：キャッシュヒット／ミスの判定
そして、キャッシュ制御回路２３は、キャッシュヒット時には、１次キャッシュメモリ２２へデータを書き込む。一方、キャッシュミス時には、２次キャッシュ１４へリフィルアクセスを行う。なお、「リフィル」とは、キャッシュミス時に、１次キャッシュメモリ２２のキャッシュラインを２次キャッシュ１４のデータに置き換える処理である。
【００２９】
これらの動作に加えて、キャッシュ制御回路２３は、インコヒーレントフラグ制御回路２５に対して、インコヒーレントフラグのチェック制御、及びインコヒーレントフラグのクリア制御を実行する。これらの動作については、後述する。
【００３０】
デバッグ切替回路２７は、プロセッサコアに設けられたデバッグ回路による違反アクセス検出の有効／無効を設定する。デバッグ切替回路２７は、１ビットのレジスタ２７Ａを備えており、このレジスタ２７Ａのデータに基づいて違反アクセス検出の有効／無効を設定する。レジスタ２７Ａのデータは、以下のように設定される。  
１’ｂ１  ：  違反アクセス検出有効
１’ｂ０  ：  違反アクセス検出無効
なお、「１’ｂ」は、１ビットの２進数表記を意味する。
【００３１】
レジスタ２７Ａのデータは、バス１２を介して外部から供給されるライトイネーブル信号及びライトデータによって自由に書き換えることが可能である。また、レジスタ２７Ａのデータは常時出力されており、違反検出イネーブル信号ＶＤＥとして違反検出回路２４、インコヒーレントフラグ制御回路２５、及びダーティ遷移検出回路２６に送られる。
【００３２】
ダーティ遷移検出回路２６は、第１のサイクルで読み出したダーティビットと、第２のサイクルで書き込む（更新する）ダーティビットとを用いて、ダーティビットが“０”から“１”に書き換えられたか否かを判定し、この判定結果を１次キャッシュ書き込み識別信号ＣＷＩとして出力する。すなわち、１次キャッシュ書き込み識別信号ＣＷＩは、１次キャッシュメモリ２２内のキャッシュラインを２次キャッシュ１４のデータに置き換えた後に、この１次キャッシュメモリ２２内のキャッシュラインが新たなデータに書き換えられた動作を識別する信号である。そして、ダーティ遷移検出回路２６は、違反検出イネーブル信号ＶＤＥがアサートされている場合に、１次キャッシュ書き込み識別信号ＣＷＩを出力する。この１次キャッシュ書き込み識別信号ＣＷＩは、アービタ１３へ送られる。
【００３３】
この時、キャッシュミスした場合と同様に、１次キャッシュ書き込み識別信号ＣＷＩ以外のアクセス要求は、プロセッサコア１１からキャッシュ制御回路２３を介してアービタ１３へ送られる。１次キャッシュ書き込み識別信号ＣＷＩがアサートされる場合、２次キャッシュ直接アクセス識別信号、及び１次キャッシュリフィルアクセス識別信号は、共に“０”に設定される。すなわち、キャッシュ制御回路２３からアービタ１３へ送られるアクセス要求は、以下に示すように設定される。  
・プロセッサコア番号＝自身のコア番号
・リード／ライト識別信号＝０（read）
・２次キャッシュ直接アクセス識別信号＝０
・１次キャッシュリフィルアクセス識別信号＝０
・アクセス先アドレス＝共有メモリのアクセス先アドレス
なお、違反検出イネーブル信号ＶＤＥがネゲートされた時（すなわち、違反アクセス検出が無効の時）は、ＡＮＤ回路２６Ｂによって１次キャッシュ書き込み識別信号ＣＷＩが“０”に固定される。この場合は、通常のキャッシュアクセス処理と同じであり、１次キャッシュ書き込み識別信号ＣＷＩ以外のアクセス要求は通常のキャッシュアクセス処理時と変化はない。
【００３４】
［２−１．違反検出回路２４の構成］
違反検出回路２４は、アクセスポート１を用いて１次キャッシュメモリ２２にアクセスする。具体的には、違反検出回路２４は、チップイネーブル信号ＣＥ１をアサートし、かつインデックスＩＮＤ１を１次キャッシュメモリ２２に送る。これによって、違反検出回路２４は、インデックスＩＮＤ１に対応するキャッシュラインをリードデータＲＤ１として１次キャッシュメモリ２２から受ける。また、違反検出回路２４は、アービタ１３からフィードバックパスを介してアクセス要求を受ける。違反検出回路２４は、違反検出イネーブル信号ＶＤＥがアサートされたときのみ動作し、違反検出イネーブル信号ＶＤＥがネゲートされたときはアービタ１３からのアクセス要求を無視する。
【００３５】
図４は、違反検出回路２４の構成を示すブロック図である。違反検出回路２４は、レジスタ２４Ａ、判定回路２４Ｂ、比較回路２４Ｃ、及び２個のＡＮＤ回路２４Ｄ、２４Ｅを備えている。
【００３６】
レジスタ２４Ａは、アービタ１３から送られるアクセス要求を格納する。レジスタ２４Ａに格納されるアクセス要求は、アクセス要求時にアサートされるイネーブル信号、アクセス先アドレス、プロセッサコア番号、及び識別信号類を含む。プロセッサコア番号、及び識別信号類は、判定回路２４Ｂに送られる。イネーブル信号は、チップイネーブル信号ＣＥ１として１次キャッシュメモリ２２に送られる。アクセス先アドレスは、それの上位がタグに対応し、それの下位がインデックスに対応する。よって、アドレス上位は比較回路２４Ｃに送られ、アドレス下位はインデックスＩＮＤ１として１次キャッシュメモリ２２に送られる。
【００３７】
チップイネーブル信号ＣＥ１及びインデックスＩＮＤ１によって読み出されたリードデータＲＤ１のうち、有効ビット及びダーティビットは判定回路２４Ｂに送られ、タグは比較回路２４Ｃに送られる。
【００３８】
比較回路２４Ｃは、１次キャッシュメモリ２２から読み出されたタグと、アクセス要求に含まれるタグとを比較し、同一のアドレスを指しているか否かを判定する。
【００３９】
判定回路２４Ｂは、１次キャッシュメモリ２２から読み出された有効ビット及びダーティビットを、プロセッサコア番号及び識別信号類（リード及びライトそれぞれの２次キャッシュ直接アクセス識別信号、リード及びライトそれぞれの１次キャッシュリフィルアクセス識別信号、及び１次キャッシュ書き込み識別信号ＣＷＩ）と共に処理し、所定のポリシーに基づいてそのアクセスパターンが違反であるか否かを判定する。判定回路２４Ｂは、レジスタ２４Ａのデータと1次キャッシュメモリ２２からの読み出しデータＲＤ１が更新される毎に、違反アクセス検出を実行する。
【００４０】
違反アクセスの検出ポリシーの一例について説明する。本実施形態では、以下の５つのアクセスパターンを違反とする。なお、以下の説明において、単に「キャッシュライン」という場合は、アドレスが同じキャッシュラインを統括して指している。
【００４１】
（１）  有効ビット＝１、ダーティビット＝１となっているキャッシュラインに、他のプロセッサコアから読み出しアクセスが発生した場合（読み出しアクセスを行ったプロセッサコアは、最新ではないデータを読み出している。）
（２）  有効ビット＝１、ダーティビット＝１となっているキャッシュラインに、他のプロセッサコアから書き込みアクセスが発生した場合（キャッシュラインを保持しているプロセッサコアが１次キャッシュメモリに対して行った書き込み結果と、他のプロセッサコアが２次キャッシュに対して行った書き込み結果とのどちらが最終的に反映されるのか分からなくなってしまう。）
（３）  有効ビット＝１、ダーティビット＝１となっているキャッシュラインに、このキャッシュラインを保持しているプロセッサコア自身が２次キャッシュ直接読み出しアクセスを行った場合（最新のデータはプロセッサコア自身の１次キャッシュメモリに格納されているので、２次キャッシュから読み出したデータは最新のものではない。）
（４）  有効ビット＝１、ダーティビット＝１となっているキャッシュラインに、このキャッシュラインを保持しているプロセッサコア自身が２次キャッシュ直接書き込みアクセスを行った場合（キャッシュラインを保持しているプロセッサコアが１次キャッシュメモリに対して行った書き込み結果と、そのプロセッサコアが２次キャッシュに対して直接行った書き込み結果のどちらが最終的に反映されるのか分からなくなってしまう。）
（５）  有効ビット＝１、ダーティビット＝０となっているキャッシュラインに、このキャッシュラインを保持している第１のプロセッサコアが２次キャッシュ直接書き込みアクセスを行った後、又は、他の第２のプロセッサコアで１次キャッシュメモリ或いは２次キャッシュに書き込みアクセスを行った後、上記第１のプロセッサコアが自身の１次キャッシュメモリに保持している同キャッシュラインに対して読み出しアクセス或いは書き込みアクセスを行った場合（そのプロセッサコアは最新ではないデータを使うことになる。）
ここで、判定回路２４Ｂは、４つの違反アクセスパターン（１）〜（４）の判定に加えて、５番目の違反アクセスパターン（５）のうち一部に含まれるアクセスがインコヒーレントフラグをセットすべきパターンであるか否かを判定する。このインコヒーレントフラグをセットすべきパターンとは、「有効ビット＝１、ダーティビット＝０となっているキャッシュラインに、このキャッシュラインを保持している第１のプロセッサコアが２次キャッシュ直接書き込みアクセスを行った場合」、及び、「有効ビット＝１、ダーティビット＝０となっているキャッシュラインに、上記第１のプロセッサコアと異なる第２のプロセッサコアで１次キャッシュメモリ或いは２次キャッシュに書き込みアクセスを行った場合」である。
【００４２】
なぜなら、このようなアクセスが行われた場合、キャッシュラインを保持している第１のプロセッサコアのキャッシュラインが最新でなくなる。しかし、この第１のプロセッサコアのキャッシュラインをその後に使用しなければ特に問題はない。よって、上記２つのアクセスパターンが検出された時点では即違反と判定せず、一旦インコヒーレントフラグを立てるようにする。そして、上記最新でないキャッシュラインを第１のプロセッサコアが実際に使用する場合に、違反アクセスであると判定する。すなわち、インコヒーレントフラグは、第１のプロセッサコアが保持しているキャッシュラインが既に他の第２のプロセッサコアによって書き換えられたか否かを識別するものである。
【００４３】
それぞれのアクセスパターンは１つの違反だけに対応するわけではなく、様々な違反によって同じような不正なアクセスパターンになる場合がある。例えば、プロセッサコア１１−１で有効ビット＝１、ダーティビット＝１となっているラインにプロセッサコア１１−２からアクセスが発生した場合、そのラインがプロセッサコア１１−１が書き換えを行うことが許可された領域であってプロセッサコア１１−２がアクセスしてはならない領域であれば、プロセッサコア１１−２のアクセスが不正なアクセスとなる。逆に、プロセッサコア１１−２のアクセスは正当なものであって、過去にプロセッサコア１１−１が書き込みを許可された領域でないにもかかわらず書き込み操作を行ってしまったために有効ビット＝１、ダーティビット＝１としてキャッシュラインを保持してしまっていることが不正である可能性もある。
【００４４】
なお、違反アクセスの定義はシステムや用途によって異なる場合があり、それに対応して違反アクセスの検出ポリシーも変える必要がある。その際、上記のように１つの違反アクセスパターンには複数の要因が含まれる可能性がある。したがって、違反アクセスパターンが必ず何らかの検出ポリシーに該当するように検出ポリシーを設定する。このようにして、違反アクセスの誤検出を防ぐようにする。
【００４５】
［２−２．インコヒーレントフラグ制御回路２５の構成］
図５は、インコヒーレントフラグ制御回路２５の構成を示すブロック図である。インコヒーレントフラグ制御回路２５は、１次キャッシュメモリ２２内のキャッシュラインの数に相当するビット数を有するレジスタ２５Ａ、及び１個のＡＮＤ回路２５Ｂを備えている。
【００４６】
インコヒーレントフラグ制御回路２５は、フラグセット信号、及びセットフラグ番号を違反検出回路２４から受ける。これに応じて、インコヒーレントフラグ制御回路２５は、指定ビットセット処理を実行する。
【００４７】
また、インコヒーレントフラグ制御回路２５は、フラグチェック信号、チェックアドレス、フラグクリア信号、及びクリアフラグ番号をキャッシュ制御回路２３から受ける。これに応じて、インコヒーレントフラグ制御回路２５は、指定ビットクリア処理を実行する。また、フラグチェック信号を受けた際には、インコヒーレントフラグ制御回路２５は、指定ビット読み出し処理を実行する。
【００４８】
インコヒーレントフラグ制御回路２５は、デバッグ切替回路２７から違反検出イネーブル信号ＶＤＥを受ける。違反検出イネーブル信号ＶＤＥがネゲートされると、インコヒーレントフラグ制御回路２５は、レジスタ２５Ａの全ビットをクリアする。
【００４９】
このように構成されたインコヒーレントフラグ制御回路２５は、１次キャッシュメモリ２２への読み出しアクセス或いは書き込みアクセスが発生した場合に、指定ビット読み出し処理により読み出されたフラグの内容を確認する。そして、このフラグが立っていた場合に、今回のアクセスが違反である判定する。この判定結果は、違反検出信号１によって違反処理回路１６に通知される。
【００５０】
［２−３．違反処理回路１６の構成］
図６は、違反処理回路１６の構成を示すブロック図である。違反処理回路１６は、違反情報レジスタ１６Ａ、及び２個の選択回路１６Ｂ、１６Ｃを備えている。この違反情報レジスタ１６Ａは、違反アクセスパターン（本実施形態では、５つのアクセスパターン）に対応した数のレジスタを備えている。
【００５１】
違反処理回路１６は、違反検出回路２４から違反検出情報０を受け、インコヒーレントフラグ制御回路２５から違反検出情報１を受ける。違反検出情報０は、違反検出信号０、違反パターン０、アクセスプロセッサコア番号０、及び違反検出アドレス０を含む。違反検出情報１は、違反検出信号１、及び違反検出アドレス１を含む。
【００５２】
プロセッサコア１１−１〜１１−３の各々に含まれる違反検出回路２４により違反アクセスが検出されて違反検出信号がアサートされると、違反処理回路１６は、違反アクセスパターンで指定されたレジスタに、プロセッサコア番号及び検出アドレスを書き込んで保持する。
【００５３】
違反検出信号０がアサートされると、違反処理回路１６は、違反検出パターン０に対応するレジスタに、アクセスプロセッサコア番号０、違反検出プロセッサコア番号、違反検出アドレス０を書き込む。
【００５４】
違反検出信号１がアサートされると、違反処理回路１６は、違反検出信号１に対応するレジスタに、違反検出プロセッサコア番号及び違反検出アドレス１と、さらに、違反を検出したプロセッサコアのア番号として違反検出プロセッサコア番号を書き込む。この違反検出プロセッサコア番号は、この１次キャッシュを持つプロセッサコアの番号を回路的に固定値として入力する。
【００５５】
違反情報レジスタ１６Ａに格納されたこれらの違反情報は、外部からバス経由で読み出すことができる。すなわち、外部から読み出し要求及びレジスタ番号を違反処理回路１６に送ることで、違反情報レジスタ１６Ａのうちレジスタ番号に対応する領域の違反情報がリードデータとして外部にバス経由で読み出される。この読み出された違反情報は、マルチプロセッサシステム１０のデバッグに利用される。
【００５６】
［３．マルチプロセッサシステム１０の動作］
上記のように構成されたマルチプロセッサシステム１０の動作について説明する。  
まず、違反検出回路２４の動作について説明する。違反アクセス検出時には、デバッグ切替回路２７により違反検出イネーブル信号ＶＤＥがアサートされる。
【００５７】
図４に示すように、違反検出回路２４には、フィードバックパスを介して、アービタ１３で調停されたアクセス要求（イネーブル信号、プロセッサコア番号、アクセス先アドレス、リード／ライト識別信号、２次キャッシュ直接アクセス識別信号、１次キャッシュリフィルアクセス識別信号、及び１次キャッシュ書き込み識別信号ＣＷＩを含む）が送られる。違反検出回路２４は、違反検出イネーブル信号ＶＤＥがアサートされている場合、このアクセス要求をレジスタ２４Ａに格納する。
【００５８】
続いて、違反検出回路２４は、レジスタ２４Ａに格納されたイネーブル信号をチップイネーブル信号ＣＥ１として１次キャッシュメモリ２２に送り、またアクセス先アドレスの下位をインデックスＩＮＤ１として１次キャッシュメモリ２２に送る。これにより、違反検出回路２４は、１次キャッシュメモリ２２からインデックスＩＮＤ１に対応するキャッシュラインの有効ビット、ダーティビット、及びタグをリードデータＲＤ１として受ける。
【００５９】
続いて、比較回路２４Ｃは、１次キャッシュメモリ２２から読み出されたタグと、アービタ１３からのアクセス先アドレスの上位（タグ）とを比較し、同一のキャッシュラインを指しているか否かを判定する。２個のタグが一致している場合、比較回路２４Ｃは、一致信号をアサートしてＡＮＤ回路２４Ｄ、２４Ｅにそれぞれ送る。
【００６０】
続いて、判定回路２４Ｂは、１次キャッシュメモリ２２から読み出された有効ビット及びダーティビットを、プロセッサコア番号及び識別信号類と共に処理し、前述した検出ポリシーに基づいてそのアクセスパターンが違反であるか否かを判定する。さらに、判定回路２４Ｂは、アクセスパターンがインコヒーレントフラグをセットすべきパターンであるか否かを判定する。
【００６１】
アクセスパターンが前述したインコヒーレントフラグをセットすべきパターンであり（フラグセット条件一致）、アクセス先とプロセッサコアで保持されているキャッシュラインが同一のものであれば、違反検出回路２４は、インコヒーレントフラグをセットする。すなわち、違反検出回路２４は、フラグセット信号をアサートし、さらにアクセス先アドレスに含まれるインデックスをセットフラグ番号としてインコヒーレントフラグ制御回路２５に送る。
【００６２】
アクセスパターンが前述した違反アクセス（１）〜（４）に該当する場合、判定回路２４Ｂは、違反信号をアサートしてＡＮＤ回路２４Ｄに送る。アクセスパターンが違反であり、アクセス先とプロセッサコアで保持されているキャッシュラインが同一のものであれば、違反検出となる。この場合、違反検出回路２４は、検出結果（違反検出信号０）、違反パターン（違反検出パターン０）、違反を検出するきっかけとなるアクセスを行ったプロセッサコアの番号（アクセスプロセッサコア番号０）、アクセス先アドレス（違反検出アドレス０）を違反処理回路１６に送る。このようにして、違反検出回路２４により違反アクセス（１）〜（４）が検出される。
【００６３】
次に、キャッシュ制御回路２３の動作について説明する。キャッシュ制御回路２３は、１次キャッシュメモリ２２に保持されているキャッシュラインにヒットする読み出しアクセス又は書き込みアクセスが行われた場合に、インコヒーレントフラグをチェックするためのフラグチェック信号をアサートし、さらに、読み出しアクセス又は書き込みアクセスが行われたアドレスをチェックアドレスとしてインコヒーレントフラグ制御回路２５に送る。
【００６４】
また、キャッシュ制御回路２３は、１次キャッシュメモリ２２に保持されているキャッシュラインの状態が下記（１）〜（３）のように変更された場合に、インコヒーレントフラグをクリアするためのフラグクリア信号をアサートし、さらに、このキャッシュラインのインデックスをクリアフラグ番号としてインコヒーレントフラグ制御回路２５に送る。  
（１）リフィル処理によって、保持しているキャッシュラインに新しいキャッシュラインが上書きされた場合
（２）リフィルを伴わないキャッシュライン確保操作によって、保持しているキャッシュラインに新しいキャッシュラインが上書きされた場合
（３）１次キャッシュメモリを直接書き換える操作によって、保持しているキャッシュラインが無効化された場合
次に、インコヒーレントフラグ制御回路２５の動作について説明する。インコヒーレントフラグ制御回路２５によるインコヒーレントフラグのセット及びクリアは以下のように行われる。
【００６５】
違反検出回路２４によってインコヒーレントフラグをセットすべきアクセスパターンが検出された場合、フラグセット信号がアサートされる。図５に示すように、インコヒーレントフラグ制御回路２５は、フラグセット信号がアサートされると、指定ビットセット処理を実行する。すなわち、インコヒーレントフラグ制御回路２５は、セットフラグ番号に対応する、レジスタ２５Ａのビットにフラグを立てる（ビットに“１”をセットする）。
【００６６】
キャッシュ制御回路２３によってインコヒーレントフラグをクリアすべきキャッシュラインの状態変化を検出した場合、フラグクリア信号がアサートされる。インコヒーレントフラグ制御回路２５は、フラグクリア信号がアサートされると、指定ビットクリア処理を実行する。すなわち、インコヒーレントフラグ制御回路２５は、クリアフラグ番号に対応する、レジスタ２５Ａのフラグをクリアする（ビットに“０”をセットする）。
【００６７】
また、インコヒーレントフラグ制御回路２５による違反アクセスパターン（５）に対応する違反検出は以下のように行われる。
【００６８】
まず、キャッシュ制御回路２３によってインコヒーレントフラグをチェックすべき、キャッシュラインへのアクセスが検出された場合、フラグチェック信号がアサートされる。これに応答して、インコヒーレントフラグ制御回路２５は、指定ビット読み出し処理を実行する。すなわち、インコヒーレントフラグ制御回路２５は、チェックアドレスに対応する、レジスタ２５Ａのフラグの内容を確認する。そして、このインコヒーレントフラグが立っている場合には、インコヒーレントフラグ制御回路２５は、今回のアクセスが違反アクセスパターン（５）に該当すると判断し、違反検出信号１をアサートする。また、インコヒーレントフラグ制御回路２５は、違反検出信号１とともに、キャッシュ制御回路２３から送られたチェックアドレスを違反検出アドレス１として違反処理回路１６に送る。
【００６９】
一方、このインコヒーレントフラグがクリアされていた場合、インコヒーレントフラグ制御回路２５は、今回のアクセスは違反アクセスパターン（５）に該当しないと判断する。この場合、インコヒーレントフラグ制御回路２５は、違反検出情報１を違反処理回路１６に出力しない。
【００７０】
なお、インコヒーレントフラグは、デバック機能が有効にされる（違反検出イネーブル信号ＶＤＥがアサートされる）ごとに新たに設定される。このために、インコヒーレントフラグ制御回路２５は、違反検出イネーブル信号ＶＤＥがネゲートされると、レジスタ２５Ａの全ビット（全フラグ）をクリアする。
【００７１】
以上の実施形態では、ダイレクトマップ［１ウェイ（way）］方式のキャッシュシステムの場合を想定して説明しているが、勿論、２個以上のウェイを持つセットアソシアティブ方式のキャッシュシステムについても同様に適用可能である。２個以上のウェイを持つキャッシュシステムの場合は、キャッシュシステムが保持するキャッシュライン数はインデックス数とウェイ数との積となるため、以下の点が異なる。
【００７２】
まず、違反の判定を行う際に１次キャッシュメモリ２２から読み出す有効ビット、ダーティビット、タグの組がウェイ数の分だけ読み出されることになる。よって、図４の判定回路２４Ｂ及び比較回路２４Ｃもウェイ数の分だけ複製される。ただし、複数のキャッシュラインに対して同時にタグが一致することはないので判定結果は１通りとなる。
【００７３】
次に、１ウェイの場合にはインコヒーレントフラグのフラグ番号はキャッシュラインのインデックスと等しくなるが、２個以上のウェイの場合のフラグ番号はインデックスとウェイ情報とから生成される、１個のキャッシュラインを指し示す番号となる。フラグ番号は以下の２箇所で使用する。  
・インコヒーレントフラグクリア時のクリアフラグ番号
・インコヒーレントフラグセット時のセットフラグ番号
インコヒーレントフラグチェック時には、チェックアドレスは１ウェイの場合と変わらず、フラグチェック信号がウェイ数と同じビット数となる。チェックアドレスからインデックスを抜き出し、フラグチェック信号のどのビットが１になっているかの情報と合わせて読み出すべきフラグの番号を決定する。
【００７４】
以上詳述したように第１の実施形態では、所定の違反アクセスを検出する際に、この所定の違反アクセスの状態になったキャッシュラインに対して一旦フラグを立てる。そして、１次キャッシュメモリに読み出しアクセス或いは書き込みアクセスする際にフラグを確認し、このフラグが立っている場合に違反アクセスであると判定する。より具体的には、有効ビット＝１、ダーティビット＝０となっているキャッシュラインに、このキャッシュラインを保持している第１のプロセッサコアが２次キャッシュ直接書き込みアクセスを行った場合、又は、他の第２のプロセッサコアで１次キャッシュメモリ或いは２次キャッシュに書き込みアクセスを行った場合に、この時点では即違反と判定せずに、一旦これらのアクセスを識別するためのインコヒーレントフラグを立てる。そして、上記アクセスによりキャッシュラインを保持しているプロセッサコアのデータが最新でなくなった後、そのプロセッサコアが同キャッシュラインに対して読み出しアクセス或いは書き込みアクセスを行った場合に、違反アクセスであると判定するようにしている。
【００７５】
従って第１の実施形態によれば、第１のプロセッサコアの１次キャッシュメモリ内のキャッシュラインが、２次キャッシュ又は第２のプロセッサコアの１次キャッシュメモリ内の内容に対して最新でなくなった場合に、この最新でないデータを第１のプロセッサコアが実際に使用する場合にのみ違反アクセスとして検出することが可能となる。これにより、実際に使用しないにも関わらず違反アクセスとして検出してしまう場合に比べて、余計な同期処理やキャッシュラインの無効化処理を行う必要がなくなり、処理時間を短縮することができる。
【００７６】
また、インコヒーレントフラグ制御回路２５内にインコヒーレントフラグを保持するレジスタ２５Ａを設け、フラグセット信号、フラグクリア信号、及びアドレスをインコヒーレントフラグ制御回路２５に供給することで、インコヒーレントフラグのセット及びクリアを行うようにしている。これにより、インコヒーレントフラグのセット及びクリアを正確かつ簡単に行うことができ、また、プログラムで明示的にフラグをクリアする必要がなくなる。
【００７７】
また、デバック機能を無効にした場合（違反検出イネーブル信号ＶＤＥがネゲートされた場合）、インコヒーレントフラグを格納するレジスタ２５Ａのフラグを一括してクリアするようにしている。これにより、デバッグ機能を一時的に無効にしてから再度有効にした場合に、デバッグ機能無効期間に変化したキャッシュ状態とインコヒーレントフラグとの内容が食い違うことを防ぐことができ、ひいてはデバック機能の誤動作を防ぐことができる。
【００７８】
また、違反検出回路２４により検出された違反情報を違反処理回路１６内の違反情報レジスタ１６Ａに格納することができる。これにより、読み出したい違反情報を外部から自由に読み出すことが可能となり、この違反情報を用いてプロセッサコアのデバッグを行うことができる。
【００７９】
また、マルチプロセッサシステム１０に新たに追加した回路はデバッグ回路を構成しているため、製品出荷時には機能を無効化して構わない。機能を無効化すれば電力が消費されないため、信号の変化が多くなって消費電力が大きくなるようなデバッグ回路を実装しても製品出荷後の消費電力には影響を及ぼさない。
【００８０】
［第２の実施形態］
第１の実施形態では、インコヒーレントフラグは専用のメモリまたはレジスタによって実装する形をとっているが、インコヒーレントフラグは１次キャッシュメモリ２２内のキャッシュラインに対応して存在するものなので、有効ビット、ダーティビットに続く３つ目のビットとしてインコヒーレントフラグを設けるという実装が考えられる。第２の実施形態は、１次キャッシュメモリ２２内に新たなフラグビットを用意し、このフラグビットにインコヒーレントフラグを格納するようにしている。
【００８１】
マルチプロセッサシステム１０の全体構成は、図１と同じである。図７は、本発明の第２の実施形態に係るキャッシュシステム２１の構成を示すブロック図である。図８は、１次キャッシュメモリ２２の構成を示す概略図である。
【００８２】
１次キャッシュメモリ２２は、有効ビット（Ｖ）、ダーティビット（Ｄ）、タグ、及びデータをそれぞれ格納する領域に加えて、インコヒーレントフラグを格納する領域（フラグビット）を備えている。このフラグビットは、キャッシュラインごとに設けられている。
【００８３】
第１の実施形態では、キャッシュ制御回路２３は、フラグチェック処理及びフラグクリア処理をインコヒーレントフラグ制御回路２５に対して実行していたが、第２の実施形態では、キャッシュ制御回路２３は、フラグチェック処理及びフラグクリア処理を１次キャッシュメモリ２２に対して実行する。キャッシュ制御回路２３のフラグチェック処理及びフラグクリア処理については、後述する。
【００８４】
図９は、インコヒーレントフラグ制御回路２５の構成を示すブロック図である。インコヒーレントフラグ制御回路２５は、フラグセット回路２５Ｃ、フラグクリア回路２５Ｄ、３個の選択回路２５Ｅ、２５Ｆ、２５Ｇ、及びＯＲ回路２５Ｈを備えている。
【００８５】
インコヒーレントフラグ制御回路２５は、フラグセット信号及びセットフラグ番号を違反検出回路２４から受ける。また、インコヒーレントフラグ制御回路２５は、違反検出イネーブル信号ＶＤＥをデバッグ切替回路２７から受ける。フラグセット信号は、ＯＲ回路２５Ｈに入力される。セットフラグ番号は、フラグセット回路２５Ｃ及び選択回路２５Ｇに入力される。
【００８６】
フラグセット回路２５Ｃは、１次キャッシュメモリ２２内のインコヒーレントフラグをセットする処理を実行する。この処理のために、フラグセット回路２５Ｃは、１次キャッシュメモリ２２のフラグビットをアサートするためのイネーブル信号、及びフラグビットにセットするデータを生成する。
【００８７】
違反検出イネーブル信号ＶＤＥは、フラグクリア回路２５Ｄに入力される。フラグクリア回路２５Ｄは、１次キャッシュメモリ２２内のインコヒーレントフラグをクリアする処理を実行する。この処理のために、フラグクリア回路２５Ｄは、１次キャッシュメモリ２２をアサートするためのイネーブル信号、１次キャッシュメモリ２２の特定のフラグビットをアサートするためのイネーブル信号、キャッシュラインのインデックス、及びフラグビットをクリアするデータを生成する。
【００８８】
インコヒーレントフラグ制御回路２５は、チップイネーブル信号ＣＥ２、ライトビットイネーブル信号ＷＢＥ２、インデックスＩＮＤ２、及びライトデータＷＤ２を１次キャッシュメモリ２２に送る。これらの信号により、１次キャッシュメモリ２２内のフラグビットがセット又はクリアされる。
【００８９】
（動作）
このように構成されたキャッシュシステム２１の動作について説明する。まず、インコヒーレントフラグ制御回路２５によるインコヒーレントフラグのセット動作及びクリア動作について説明する。
【００９０】
違反検出回路２４によってインコヒーレントフラグをセットすべきアクセスパターンが検出された場合、フラグセット信号がアサートされる。フラグセット信号がアサートされると、インコヒーレントフラグ制御回路２５は、チップイネーブル信号ＣＥ２をアサートする。また、インコヒーレントフラグ制御回路２５は、違反検出回路２４からキャッシュラインのインデックスに対応するセットフラグ番号を受けると、これをインデックスＩＮＤ２としてフラグセット信号とともに１次キャッシュメモリ２２に送る。
【００９１】
フラグセット回路２５Ｃは、セットフラグ番号を受けると、ライトビットイネーブル信号ＷＢＥ２のフラグに対応するビットに“１”をセットして１次キャッシュメモリ２２に送る。また、フラグセット回路２５Ｃは、ライトデータＷＤ２のフラグに対応するビットに“１”をセットして１次キャッシュメモリ２２に送る。このようにして、１次キャッシュメモリ２２の特定のインコヒーレントフラグがセットされる。
【００９２】
フラグクリア回路２５Ｄは、デバック機能が無効にされる（違反検出イネーブル信号ＶＤＥがネゲートされる）と、フラグの全ビットクリア処理を実行する。すなわち、フラグクリア回路２５Ｄは、チップイネーブル信号ＣＥ２をアサートし、ライトビットイネーブル信号ＷＢＥ２のフラグに対応するビットに“１”を、ライトデータＷＤ２のフラグに対応するビットに“０”をセットして１次キャッシュメモリ２２に送る。そして、フラグクリア回路２５Ｄは、全キャッシュラインのインデックスを順番にインデックスＩＮＤ２として１次キャッシュメモリ２２に送る。これにより、１次キャッシュメモリ２２の全てのインコヒーレントフラグがクリアされる。
【００９３】
ここで、複数のウェイを有する構成のキャッシュシステムであって、同一のインデックスに複数のキャッシュラインに対応するインコヒーレントフラグが存在する場合、ライトビットイネーブル信号ＷＢＥ２とライトデータＷＤ２とは全てのフラグに対応するビットを操作するように設定する。
【００９４】
次に、キャッシュ制御回路２３の動作について説明する。キャッシュ制御回路２３は、１次キャッシュメモリ２２に保持されているキャッシュラインにヒットする読み出しアクセス又は書き込みアクセスを行う場合、このアクセスに先立って、１次キャッシュメモリ２２内のインコヒーレントフラグをチェックする。すなわち、キャッシュ制御回路２３は、リードイネーブル信号ＲＥ０をアサートし、かつアクセス対象のキャッシュラインのインデックスをインデックスＩＮＤ０として１次キャッシュメモリ２２に送る。これによって、キャッシュ制御回路２３は、インデックスＩＮＤ０に対応するインコヒーレントフラグをリードデータＲＤ０として１次キャッシュメモリ２２から受ける。
【００９５】
続いて、キャッシュ制御回路２３は、１次キャッシュメモリ２２から読み出したインコヒーレントフラグが立っていた場合、今回のアクセスが違反アクセスパターン（５）に該当すると判断し、違反検出信号１をアサートする。また、キャッシュ制御回路２３は、読み出しアクセス又は書き込みアクセスが行われたアドレスを違反検出アドレス１として出力する。これら違反検出信号１及び違反検出アドレス１は、違反検出情報１として違反処理回路１６に送られる。
【００９６】
一方、このインコヒーレントフラグがクリアされていた場合、キャッシュ制御回路２３は、今回のアクセスは違反アクセスパターン（５）に該当しないと判断する。この場合、キャッシュ制御回路２３は、違反検出情報１を違反処理回路１６に出力しない。
【００９７】
また、キャッシュ制御回路２３は、１次キャッシュメモリ２２に保持されているキャッシュラインの状態を下記（１）〜（３）のように変更する場合に、インコヒーレントフラグをクリアする処理を実行する。
【００９８】
（１）リフィル処理によって、保持しているキャッシュラインに新しいキャッシュラインを上書きする場合
（２）リフィルを伴わないキャッシュライン確保操作によって、保持しているキャッシュラインに新しいキャッシュラインを上書きする場合
（３）１次キャッシュメモリを直接書き換える操作によって、保持しているキャッシュラインを無効化する場合
具体的には、キャッシュ制御回路２３は、チップイネーブル信号ＣＥ０をアサートし、キャッシュラインのインデックスをインデックスＩＮＤ０として１次キャッシュメモリ２２に送る。また、キャッシュ制御回路２３は、ライトデータＷＤ０のフラグに対応したビットに“０”をセットして１次キャッシュメモリ２２に送る。このようにして、１次キャッシュメモリ２２の特定のインコヒーレントフラグがクリアされる。
【００９９】
以上詳述したように第２の実施形態によれば、インコヒーレントフラグを１次キャッシュメモリ２２内に格納することができる。これにより、インコヒーレントフラグを他のメモリやレジスタとして実装するよりも回路面積の増加を抑えることができる。その他の効果は、第１の実施形態と同じである。
【０１００】
［第３の実施形態］
第２の実施形態では、１次キャッシュメモリ２２の１キャッシュラインあたりのビット数を１ビット増やす形でインコヒーレントフラグを１次キャッシュメモリ２２に統合したが、インコヒーレントフラグを有効ビット及びダーティビットの状態の組み合わせによって表現することも可能である。第３の実施形態では、１次キャッシュメモリ２２の容量を増やすことなく、インコヒーレントフラグを１次キャッシュメモリ２２に統合するようにしている。
【０１０１】
キャッシュシステム２１の構成は、図７と同じである。図７のキャッシュシステム２１のうち１次キャッシュメモリ２２の構成は、図３の１次キャッシュメモリ２２と同じであり、第２の実施形態のようなインコヒーレントフラグを格納するためのフラグビットを備えていない。
【０１０２】
１次キャッシュメモリ２２に格納される有効ビットとダーティビットとの状態の組み合わせは、以下の４種類である。以下の説明において、有効ビットを“Ｖ”、ダーティビット“Ｄ”と記す。  
「Ｖ＝０，Ｄ＝０」  ：  キャッシュラインを保持していない状態
「Ｖ＝０，Ｄ＝１」  ：  キャッシュラインを保持していない状態
「Ｖ＝１，Ｄ＝０」  ：  書き換えを行っていない状態でキャッシュラインを保持している状態
「Ｖ＝１，Ｄ＝１」  ：  書き換えを行った状態でキャッシュラインを保持している状態
Ｖ＝０の時は、Ｄ＝０及びＤ＝１の両方ともキャッシュラインを保持していない状態を表している。ここで、Ｖ＝０の時に示す状態を以下のように変更することで、インコヒーレントフラグを１次キャッシュメモリ２２に統合する。
【０１０３】
「Ｖ＝０，Ｄ＝０」  ：  キャッシュラインを保持していない状態
「Ｖ＝０，Ｄ＝１」  ：  書き換えを行っていない状態でキャッシュラインを保持しており、かつインコヒーレントフラグが“１”にセットされた状態
「Ｖ＝１，Ｄ＝０」  ：  書き換えを行っていない状態でキャッシュラインを保持しており、かつインコヒーレントフラグが“０”にセットされた状態
「Ｖ＝１，Ｄ＝１」  ：  書き換えを行った状態でキャッシュラインを保持している状態
このように設定することで、インコヒーレントフラグのビットを別のレジスタに保持することなく、有効ビット及びダーティビットを用いてインコヒーレントフラグがセットされた状態及びクリアされた状態を表現することができる。
【０１０４】
図１０は、本発明の第３の実施形態に係るインコヒーレントフラグ制御回路２５の構成を示すブロック図である。インコヒーレントフラグ制御回路２５は、フラグセット回路２５Ｃを備えている。
【０１０５】
インコヒーレントフラグ制御回路２５は、フラグセット信号及びセットフラグ番号を違反検出回路２４から受ける。セットフラグ番号は、フラグセット回路２５Ｃに入力される。フラグセット回路２５Ｃは、有効ビット及びダーティビットの組み合わせを利用して、１次キャッシュメモリ２２にインコヒーレントフラグをセットする処理を実行する。この処理のために、フラグセット回路２５Ｃは、１次キャッシュメモリ２２の有効ビット及びダーティビットをアサートするためのイネーブル信号、及び有効ビット及びダーティビットにセットするデータを生成する。
【０１０６】
インコヒーレントフラグ制御回路２５は、チップイネーブル信号ＣＥ２、ライトビットイネーブル信号ＷＢＥ２、インデックスＩＮＤ２、及びライトデータＷＤ２を１次キャッシュメモリ２２に送る。これらの信号により、１次キャッシュメモリ２２内のインコヒーレントフラグがセットされる。
【０１０７】
（動作）
このように構成されたキャッシュシステム２１の動作について説明する。まず、インコヒーレントフラグ制御回路２５によるインコヒーレントフラグのセット動作について説明する。
【０１０８】
違反検出回路２４によってインコヒーレントフラグをセットすべきアクセスパターンが検出された場合、フラグセット信号がアサートされる。フラグセット信号がアサートされると、インコヒーレントフラグ制御回路２５は、チップイネーブル信号ＣＥ２をアサートする。また、インコヒーレントフラグ制御回路２５は、違反検出回路２４からキャッシュラインのインデックスに対応するセットフラグ番号を受けると、これをインデックスＩＮＤ２としてフラグセット信号とともに１次キャッシュメモリ２２に送る。
【０１０９】
フラグセット回路２５Ｃは、セットフラグ番号を受けると、ライトビットイネーブル信号ＷＢＥ２の有効ビット及びダーティビットに対応するビットにそれぞれ“１”をセットして１次キャッシュメモリ２２に送る。また、フラグセット回路２５Ｃは、ライトデータＷＤ２の有効ビットに対応するビットに“０”、ダーティビットに対応するビットに“１”をセットして１次キャッシュメモリ２２に送る。このようにして、１次キャッシュメモリ２２内の特定のキャッシュラインの状態を「Ｖ＝０，Ｄ＝１」に変更する。
【０１１０】
次に、キャッシュ制御回路２３の動作について説明する。キャッシュ制御回路２３は、１次キャッシュメモリ２２に保持されているキャッシュラインにヒットする読み出しアクセス又は書き込みアクセスを行う場合、このアクセスに先立って、１次キャッシュメモリ２２内のインコヒーレントフラグをチェックする。すなわち、キャッシュ制御回路２３は、リードイネーブル信号ＲＥ０をアサートし、かつアクセス対象のキャッシュラインのインデックスをインデックスＩＮＤ０として１次キャッシュメモリ２２に送る。これによって、キャッシュ制御回路２３は、インデックスＩＮＤ０に対応する有効ビット及びダーティビットをリードデータＲＤ０として１次キャッシュメモリ２２から受ける。
【０１１１】
続いて、キャッシュ制御回路２３は、１次キャッシュメモリ２２から読み出した有効ビット及びダーティビットが「Ｖ＝０，Ｄ＝１」となっていた場合、すなわちインコヒーレントフラグが立っていた場合、今回のアクセスが違反アクセスパターン（５）に該当すると判断し、違反検出信号１をアサートする。また、キャッシュ制御回路２３は、読み出しアクセス又は書き込みアクセスが行われたアドレスを違反検出アドレス１として出力する。これら違反検出信号１及び違反検出アドレス１は、違反検出情報１として違反処理回路１６に送られる。
【０１１２】
一方、有効ビット及びダーティビットの組み合わせによってインコヒーレントフラグがクリアされていた場合、キャッシュ制御回路２３は、今回のアクセスは違反アクセスパターン（５）に該当しないと判断する。この場合、キャッシュ制御回路２３は、違反検出情報１を違反処理回路１６に出力しない。
【０１１３】
続いて、キャッシュ制御回路２３は、今回のアクセスが読み出しアクセスである場合は有効ビット及びダーティビットを「Ｖ＝１，Ｄ＝０」、今回のアクセスが書き込みアクセスである場合は有効ビット及びダーティビットを「Ｖ＝１，Ｄ＝１」というインコヒーレントフラグの情報を含まれない状態に更新する。これにより、次に同じキャッシュラインにアクセスが行われても違反検出とはならない。
【０１１４】
なお、１次キャッシュメモリ２２に保持されているキャッシュラインの状態を下記（１）〜（３）のように変更する場合には、有効ビット及びダーティビットへの書き込みが発生する。  
（１）リフィル処理によって、保持しているキャッシュラインに新しいキャッシュラインを上書きする場合
（２）リフィルを伴わないキャッシュライン確保操作によって、保持しているキャッシュラインに新しいキャッシュラインを上書きする場合
（３）１次キャッシュメモリを直接書き換える操作によって、保持しているキャッシュラインを無効化する場合
上記（１）〜（３）のいずれの場合も、キャッシュ制御回路２３は、有効ビット及びダーティビットを「Ｖ＝０，Ｄ＝１」以外の状態に更新し、インコヒーレントフラグが“０”にセットされているのと等価な状態に戻す。
【０１１５】
第３の実施形態では、違反検出イネーブル信号ＶＤＥがネゲートされた場合、インコヒーレントフラグの全フラグクリアを行わず、キャッシュシステム２１が有効である間はデバッグ機構の有効／無効を切り替えないで使用することを前提としている。しかし、一度１次キャッシュメモリ２２の内容を読み出して記録し、「Ｖ＝０，Ｄ＝１」になっていればキャッシュラインの状態を「Ｖ＝１，Ｄ＝０」に書き換えるという処理を全キャッシュラインに対して実行することで全フラグのクリア処理を行うことができる。
【０１１６】
以上詳述したように第３の実施形態によれば、インコヒーレントフラグを１次キャッシュメモリ２２内に格納することができる。さらに、有効ビット及びダーティビットの組み合わせを用いてインコヒーレントフラグのセット及びリセットを表現しているため、１次キャッシュメモリ２２内にインコヒーレントフラグ用の新たなビットを設ける必要がない。よって、第３の実施形態の構成では、第２の実施形態よりもさらに回路面積の増加を抑えることができる。
【０１１７】
本発明は、上述した実施形態に限定されるものではなく、その要旨を逸脱しない範囲内で、構成要素を変形して具体化できる。また、実施形態に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を構成することができる。例えば、実施形態に開示される全構成要素から幾つかの構成要素を削除してもよいし、異なる実施形態の構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【０１１８】
【図１】本発明の第１の実施形態に係るマルチプロセッサシステム１０の構成を示すブロック図。
【図２】キャッシュシステム２１の構成を示すブロック図。
【図３】１次キャッシュメモリ２２の構成を示す概略図。
【図４】違反検出回路２４の構成を示すブロック図。
【図５】インコヒーレントフラグ制御回路２５の構成を示すブロック図。
【図６】違反処理回路１６の構成を示すブロック図。
【図７】本発明の第２の実施形態に係るキャッシュシステム２１の構成を示すブロック図。
【図８】１次キャッシュメモリ２２の構成を示す概略図。
【図９】インコヒーレントフラグ制御回路２５の構成を示すブロック図。
【図１０】本発明の第３の実施形態に係るインコヒーレントフラグ制御回路２５の構成を示すブロック図。
【符号の説明】
【０１１９】
１０…マルチプロセッサシステム、１１…プロセッサコア、１２…バス、１３…アービタ、１４…２次キャッシュメモリ、１５…メインメモリ、１６…違反処理回路、１６Ａ…違反情報レジスタ、１６Ｂ，１６Ｃ…選択回路、２１…キャッシュシステム、２２…１次キャッシュメモリ、２３…キャッシュ制御回路、２４…違反検出回路、２４Ａ…レジスタ、２４Ｂ…判定回路、２４Ｃ…比較回路、２４Ｄ…ＡＮＤ回路、２５…インコヒーレントフラグ制御回路、２５Ａ…レジスタ、２５Ｂ…ＡＮＤ回路、２５Ｃ…フラグセット回路、２５Ｄ…フラグクリア回路、２５Ｅ〜２５Ｇ…選択回路、２５Ｈ…ＯＲ回路、２６…ダーティ遷移検出回路、２６Ａ，２６Ｂ…ＡＮＤ回路、２７…デバッグ切替回路、２７Ａ…レジスタ。
【図１】
2010128698.tif 000003
【図２】
2010128698.tif 000004
【図３】
2010128698.tif 000005
【図４】
2010128698.tif 000006
【図５】
2010128698.tif 000007
【図６】
2010128698.tif 000008
【図７】
2010128698.tif 000009
【図８】
2010128698.tif 000010
【図９】
2010128698.tif 000011
【図１０】
2010128698.tif 000012