(57)【特許請求の範囲】
【請求項１】
外部メモリに格納されるべきデータ、または外部メモリから読み出されたデータの一部を格納するキャッシュメモリへのアクセスが可能で、ロード命令またはストア命令のキャッシュミスが起こってもマイクロプロセッサのパイプライン処理を停止させないノンブロッキング・キャッシュを実装するマイクロプロセッサのロード／ストア命令制御回路において、
キャッシュミス時にストアデータをキャッシュ階層の中の下位メモリに直接ストアするノーライト・アロケイト・エリアに対するロード命令がキャッシュミスを起こし、後続するストア命令が先行するロード命令と同じキャッシュラインを対象としてキャッシュミスを起こしたことを検出するロード／ストア同一ラインミス検出手段と、
前記ロード／ストア同一ラインミス検出手段によりロード／ストアの同一ラインミスが検出されると、前記後続するストア命令によるストアデータを一時的に格納する一時的格納手段と、
前記先行するロード命令によるキャッシュラインへのリフィル処理中またはリフィル処理が終了した後、前記一時的格納手段に格納されているストアデータを、対応するキャッシュラインにストアするロード／ストア制御手段と、を備えることを特徴とするロード／ストア命令制御回路。
【請求項２】
マイクロプロセッサのパイプライン中のロード／ストア命令がキャッシュミスを起こした場合に、キャッシュミスを起こしたロード／ストア命令のアクセス先アドレスを格納するアドレス格納手段と、
前記アドレス格納手段に格納されたアドレスと、前記パイプライン中のロード／ストア命令のアクセス先アドレスとが一致するか否かを検出するアドレス一致検出手段と、を備え、
前記ロード／ストア同一ラインミス検出手段は、前記アドレス一致検出手段による検出結果に基づいて、前記後続するストア命令が前記先行するロード命令と同じキャッシュラインを対象としてキャッシュミスを起こしたか否かを検出することを特徴とする請求項１に記載のロード／ストア命令制御回路。
【請求項３】
前記ロード／ストア制御手段は、ストア命令のキャッシュヒット時に前記キャッシュメモリのみにストアデータを書き込むコピーバックが選択されている場合には、前記先行するロード命令による前記キャッシュメモリのリフィル処理中またはリフィル処理が終了した後、前記一時的格納手段に格納されているストアデータを、前記キャッシュ階層の中の下位メモリにストアせずに、対応するキャッシュラインにストアすることを特徴とする請求項１に記載のロード／ストア命令制御回路。
【請求項４】
前記ロード／ストア制御手段は、ストア命令のキャッシュヒット時に前記キャッシュメモリと前記キャッシュ階層の中の下位メモリの双方にストアデータを書き込むライトスルーが選択されている場合には、前記先行するロード命令による前記キャッシュメモリのリフィル処理中またはリフィル処理が終了した後、前記一時的格納手段に格納されているストアデータを前記キャッシュ階層の中の下位メモリと対応するキャッシュラインの双方にストアすることを特徴とする請求項１に記載のロード／ストア命令制御回路。
【請求項５】
キャッシュミスによるキャッシュラインのリプレースに伴って、キャッシュ階層の中の下位メモリへ書き戻されるダーティ・ラインが常に、該キャッシュミスより後に起こったノーライト・アロケイト・エリアのストアミスに優先してキャッシュ階層の中の下位メモリへの書き込みを行う制御手段を有することを特徴とする請求項３に記載のロード／ストア命令制御回路。
【請求項６】
キャッシュミスによるキャッシュラインのリプレースに伴ってキャッシュ階層の中の下位メモリのキャッシュへ書き戻されるダーティ・ラインと、該キャッシュミスより後に起こったストア命令のキャッシュミスとがともにノーライト・アロケイト・エリアに対するオペレーションだった場合、前記ダーティ・ラインの書き戻しを行うダーティ・ライトバックをストアミスに優先してキャッシュ階層の中の下位メモリへの書き込みを行う制御手段を有することを特徴とする請求項３に記載のロード／ストア命令制御回路。
【請求項７】
キャッシュミスによるキャッシュラインの置き換えに伴ってキャッシュ階層の中の下位メモリへ書き戻されるダーティ・ラインと、該キャッシュミスより後に起こったストア命令のキャッシュミスとが依存関係を持ち、それらがノーライト・アロケイト・エリアに対するオペレーションだった場合、前記ダーティ・ラインの書き戻しを行うダーティ・ライトバックをストアミスに優先してキャッシュ階層の中の下位メモリまたは下位キャッシュへの書き込みを行う制御手段を有することを特徴とする請求項３に記載のロード／ストア命令制御回路。
【請求項８】
前記キャッシュメモリに格納されたデータに対応するアドレスが格納されるタグメモリと、
前記タグメモリ中のダーティ・ライトバックに対応するアドレスと、マイクロプロセッサのパイプライン中のストア命令のストア先アドレスとが一致するか否かを検出するアドレス比較手段と、を備え、
前記ロード／ストア制御手段は、前記アドレス比較手段によりアドレスの一致が検出されると、前記ダーティ・ライトバックによるキャッシュ階層の中の下位メモリへの書き戻しが終了するまで、前記ストア命令によるストアデータのキャッシュ階層の中の下位メモリへの書き込みを禁止することを特徴とする請求項５に記載のロード／ストア命令制御回路。
【請求項９】
外部メモリに格納されるべきデータ、または外部メモリから読み出されたデータの一部を格納するキャッシュメモリへのアクセスが可能で、ロード命令またはストア命令のキャッシュミスが起こってもマイクロプロセッサのパイプライン処理を停止させないノンブロッキング・キャッシュを実装するマイクロプロセッサのロード／ストア命令制御方法において、
キャッシュミス時にストアデータをキャッシュ階層の中の下位メモリに直接ストアするノーライト・アロケイト・エリアに対するロード命令がキャッシュミスを起こし、後続するストア命令が先行するロード命令と同じキャッシュラインを対象としてキャッシュミスを起こしたことを検出する第１ステップと、
前記第１ステップによりロード／ストアの同一ラインミスが検出されると、前記後続するストア命令によるストアデータを一時的に格納する第２ステップと、
前記先行するロード命令によるキャッシュラインへのリフィル処理中またはリフィル処理が終了した後、前記第２ステップにて格納したストアデータを、対応するキャッシュラインにストアする第３ステップと、を備えることを特徴とするロード／ストア命令制御方法。
【請求項１０】
マイクロプロセッサのパイプライン中のロード／ストア命令がキャッシュミスを起こした場合に、キャッシュミスを起こしたロード／ストア命令のアクセス先アドレスを格納する第４ステップと、
前第４ステップにて格納されたアドレスと、前記パイプライン中のロード／ストア命令のアクセス先アドレスとが一致するか否かを検出する第５ステップと、を備え、
前記第１ステップは、前記後続するストア命令が前記先行するロード命令と同じキャッシュラインを対象としてキャッシュミスを起こしたか否かを検出することを特徴とする請求項９に記載のロード／ストア命令制御方法。
【請求項１１】
前記第３ステップは、ストア命令のキャッシュヒット時に前記キャッシュメモリのみにストアデータを書き込むコピーバックが選択されている場合には、前記先行するロード命令による前記キャッシュメモリのリフィル処理中またはリフィル処理が終了した後、前記第２ステップにて格納されたストアデータを、前記キャッシュ階層の中の下位メモリにストアせずに、対応するキャッシュラインにストアすることを特徴とする請求項９に記載のロード／ストア命令制御方法。
【請求項１２】
キャッシュミスによるキャッシュラインのリプレースに伴って、キャッシュ階層の中の下位メモリへ書き戻されるダーティ・ラインが常に、該キャッシュミスより後に起こったノーライト・アロケイト・エリアのストアミスに優先してキャッシュ階層の中の下位メモリへの書き込みを行う第６ステップを有することを特徴とする請求項１１に記載のロード／ストア命令制御方法。
【請求項１３】
キャッシュミスによるキャッシュラインのリプレースに伴ってキャッシュ階層の中の下位メモリのキャッシュへ書き戻されるダーティ・ラインと、該キャッシュミスより後に起こったストア命令のキャッシュミスとがともにノーライト・アロケイト・エリアに対するオペレーションだった場合、前記ダーティ・ラインの書き戻しを行うダーティ・ライトバックをストアミスに優先してキャッシュ階層の中の下位メモリへの書き込みを行う第６ステップを有することを特徴とする請求項１１に記載のロード／ストア命令制御方法。
【請求項１４】
キャッシュミスによるキャッシュラインの置き換えに伴ってキャッシュ階層の中の下位メモリへ書き戻されるダーティ・ラインと、該キャッシュミスより後に起こったストア命令のキャッシュミスとが依存関係を持ち、それらがノーライト・アロケイト・エリアに対するオペレーションだった場合、前記ダーティ・ラインの書き戻しを行うダーティ・ライトバックをストアミスに優先してキャッシュ階層の中の下位メモリまたは下位キャッシュへの書き込みを行う第６ステップを有することを特徴とする請求項１１に記載のロード／ストア命令制御方法。
【請求項１５】
前記第３ステップは、ストア命令のキャッシュヒット時に前記キャッシュメモリと前記キャッシュ階層の中の下位メモリの双方にストアデータを書き込むライトスルーが選択されている場合には、前記先行するロード命令による前記キャッシュメモリのリフィル処理中またはリフィル処理が終了した後、前記第２ステップにて格納されたストアデータを前記キャッシュ階層の中の下位メモリと対応するキャッシュラインの双方にストアすることを特徴とする請求項９に記載のロード／ストア命令制御方法。
【請求項１６】
前記キャッシュメモリに格納されたデータに対応するアドレスを格納する第７ステップと、
前記キャッシュメモリに格納されたデータに対応するアドレスが格納されるタグメモリ中のダーティ・ライトバックに対応するアドレスと、マイクロプロセッサのパイプライン中のストア命令のストア先アドレスとが一致するか否かを検出する第８ステップと、を備え、
前記第３ステップは、前記第８ステップによりアドレスの一致が検出されると、前記ダーティ・ライトバックによるキャッシュ階層の中の下位メモリへの書き戻しが終了するまで、前記ストア命令によるストアデータのキャッシュ階層の中の下位メモリへの書き込みを禁止することを特徴とする請求項９に記載のロード／ストア命令制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ストア命令がキャッシュミスした場合にストア命令によるストアデータを外部メモリまたは下位のキャッシュメモリに直接書き込むためのノーライト・アロケイト・エリアを備えており、かつ、キャッシュミス時でもパイプラインの処理を停止させないノンブロッキング・キャッシュを実装したマイクロプロセッサのロード／ストア命令制御回路に関する。
【０００２】
【従来の技術】
プロセッサが主記憶（外部メモリ）にアクセスするのにはかなりの時間を要するため、プロセッサと外部メモリとの間に高速アクセスが可能なキャッシュメモリを設けることが多い。キャッシュメモリには、外部メモリに格納されているデータ、あるいは格納されるべきデータの一部がコピーされる。
【０００３】
プロセッサ内のＬＳＵ(Load Store Unit)は、ロード命令の実行時には、該当するデータがキャッシュメモリ内に存在するか否かを検出し、キャッシュメモリ内に存在すれば、そのデータをキャッシュメモリから読み出す。また、ストア命令の実行時には、ストアすべきデータを外部メモリの代わりにキャッシュメモリに格納する。
【０００４】
図１はプロセッサ内のＬＳＵの動作を説明する図である。ロード命令が発行されると、ロードすべきデータがdataキャッシュ(DCACHE)１０１に格納されているか否かを検出し、格納されていれば、そのデータを読み出してレジスタ１０２に格納し、DCACHE１０１に格納されていなければ、外部メモリ１０３から該当するデータを読み出す。また、ストア命令が発行されると、レジスタ１０２の値をDCACHE１０１に格納する。
【０００５】
プロセッサの主記憶のメモリ空間に、ノーライト・アロケイト・スペース(エリア)を設ける場合がある。ノーライト・アロケイト・エリア内でロード命令のキャッシュミスが起きると、DCACHEに対するリフィル処理が行われる。また、ノーライト・アロケイト・エリア内でストア命令のキャッシュミスが起きると、DCACHEに対するリフィル処理は行われず、ストアミスを起こしたデータは、外部メモリにのみ送られる。すなわち、この場合はDCACHEの更新は行われない。
【０００６】
一方、DCACHEに対するアクセス手法として、ノンブロッキングと呼ばれる手法が知られている。ノンブロッキングは、キャッシュミスを起こしても、プロセッサのパイプラインが停止しないようにするものである。
【０００７】
【発明が解決しようとする課題】
上述したノーライト・アロケイト・エリアに対してノンブロッキング・キャッシュ手法によってキャッシュ・アクセスを行うと、以下のような不具合が起きる可能性がある。
【０００８】
図２は、ノーライト・アロケイト・エリア内の同一ラインに対して連続的にノンブロッキング手法によりアクセスを行った場合のデータフローを示している。図２の例では、(1)エントリーNo.５の汎用レジスタの中身にゼロを加えたアドレスに対応する１ワードデータをエントリーNo.２の汎用レジスタにロードし、(2)エントリーNo.３の汎用レジスタの中身１ワード分をエントリーNo.５の汎用レジスタの中身に４を加えたアドレスに格納し、(3)エントリーNo.５の汎用レジスタの中身に５を加えたアドレスに対応する１バイトデータを、エントリーNo.４の汎用レジスタにロードする例を示している。
【０００９】
ノーライト・アロケイト・エリアで(1)のlw（load word）命令がキャッシュミスを起こすと、キャッシュラインのリフィル処理が行われる。ただし、ノンブロッキング・キャッシュの場合には、パイプラインは停止しない。
【００１０】
次の(2)のsw（ストア・ワード命令）では、DCACHE１０１の(1)と同じキャッシュラインにアクセスするが、swのターゲットとなるワードがDCACHE１０１にまだ格納(refill)されていないため、キャッシュ・ミスを起こす。したがって、ストアすべきデータは、DCACHE１０１に格納されずに、外部メモリ１０３に直接送られる。また、該当するキャッシュラインには、(1)のlwミスによるデータがリフィルされる。
【００１１】
次の(3)のlb（ロード・バイト命令）では、(1)のlwによって起こされたリフィルが完了している場合には、キャッシュヒットする。しかしながら、該当するキャッシュラインには、(2)のストア命令によるストアデータが格納されていないため、古いデータを読み出してしまう。
【００１２】
これに対して、図３は、図２のような不具合が起きないように改良したものである。
【００１３】
(1)のlwがキャッシュミスを起こすと、キャッシュラインのリフィル処理が行われる。ただし、ノンブロッキング・キャッシュの場合には、パイプラインは停止しない。次の(2)のswでは、(1)と同じキャッシュラインにアクセスするが、swのターゲットとなるワードがDCACHE101にまだ格納されていないため、キャッシュ・ミスを起こす。
【００１４】
この後、(1)のlwによるリフィルでキャッシュラインがキャッシュ101にロードされる。そして、(3)のlbが実行される前に何らかの手段がDCACHE101を占有して(1)でリフィルされたキャッシュラインを無効にする。(3)のlbはキャッシュラインが無効になっているため、キャッシュミスを起こす。これによりリフィル処理が行われ、(2)のswがメモリにストアした最新データを読み出す。
【００１５】
このように、図３の方法によれば、(3)のlb命令は直前のストア命令が格納した最新データを読み出すことができる。しかしながら、図３の方法は、複数のキャッシュミスが連続して起こると、パイプラインを停止させないように複雑な制御を行わなければならない。すなわち、ノーライト・アロケイト・エリア内の同一キャッシュラインに対してミスが連続して起こると、バス・リード／ライトの順序を保証する制御が複雑になる。このため、プロセッサの構造が複雑になり、動作の検証にも時間がかかる。また、プロセッサの内部のパスが増えるため、ロード／ストア命令の制御部分がクリティカルパスになるおそれがある。
【００１６】
本発明の目的は、ノンブロッキング・キャッシュでノーライト・アロケイト・エリアに対するロード／ストア命令が競合した場合に、キャッシュメモリのデータと外部メモリのデータとの整合性（consistency）を保証することができるロード／ストア命令制御回路およびロード／ストア命令制御方法を提供することにある。
【００１７】
【課題を解決するための手段】
本発明の一態様によれば、外部メモリに格納されるべきデータ、または外部メモリから読み出されたデータの一部を格納するキャッシュメモリへのアクセスが可能で、ロード命令またはストア命令のキャッシュミスが起こってもマイクロプロセッサのパイプライン処理を停止させないノンブロッキング・キャッシュを実装するマイクロプロセッサのロード／ストア命令制御回路において、キャッシュミス時にストアデータをキャッシュ階層の中の下位メモリに直接ストアするノーライト・アロケイト・エリアに対するロード命令がキャッシュミスを起こし、後続するストア命令が先行するロード命令と同じキャッシュラインを対象としてキャッシュミスを起こしたことを検出するロード／ストア同一ラインミス検出手段と、前記ロード／ストア同一ラインミス検出手段によりロード／ストアの同一ラインミスが検出されると、前記後続するストア命令によるストアデータを一時的に格納する一時的格納手段と、前記先行するロード命令によるキャッシュラインへのリフィル処理中またはリフィル処理が終了した後、前記一時的格納手段に格納されているストアデータを、対応するキャッシュラインにストアするロード／ストア制御手段と、を備えることを特徴とするロード／ストア命令制御回路が適用される。
【００１８】
本発明では、ノーライト・アロケイト・エリアに対するロード命令がキャッシュミスを起こし、後続するストア命令が先行するロード命令と同じキャッシュラインを対象としてキャッシュミスを起こした場合には、先行するロード命令によるキャッシュラインへのリフィル処理中またはリフィル処理が終了した後、ノーライト・アロケイト・エリアであっても、ストアデータを対応するキャッシュラインにストアするようにしたため、キャッシュメモリと外部メモリとのデータの整合性を確実に保証することができる。
【００１９】
また、ダーティ・ライトバックとストアデータの外部メモリへの書き込みとが競合する場合には、ダーティ・ライトバックを優先させるようにしたため、外部メモリに書き込んだ新しいデータが、ダーティ・ライトバックによる古いデータで上書きされるという不具合が起きなくなる。
【００２０】
【発明の実施の形態】
以下、図面を参照して、本発明に係るマイクロプロセッサの一実施形態について詳述する。
【００２１】
（第１の実施形態）
図４は本発明に係るマイクロプロセッサの第１の実施形態の内部構成を示すブロック図である。図４のマイクロプロセッサは、外部バスB1に接続されたBus Interface Unit１と、プロセッサにより実行される命令をフェッチするIFU(Instruction Fetch Unit)２と、仮想アドレスを物理アドレスに変換するMMU(Memory Management Unit)３と、ロード／ストアに関する命令を実行するLSU(Load Store Unit)４と、ロード／ストア以外の命令を実行する複数の実行ユニット5a,5b,5cと、浮動小数点演算を行うFPU(Floating Point Units)6a,6bと、プロセッサ内の各ブロックを制御する制御論理部７とを備えている。
【００２２】
IFU２は、分岐命令等の分岐先を格納するBTACを参照してPC(Program Counter)を生成するPCパイプ21と、命令を一時的に格納するICACHE(Instruction Cache memory)22と、命令のタイプを識別して識別した命令を実行するための実行ユニットを選択するInstruction issue&Staging block23とを有する。
【００２３】
MMU３は、仮想アドレスを物理アドレスに変換するための３つのTLB(Translation Lookaside Buffers)を有する。プロセッサにより必要とされるアドレス変換情報、例えば、物理ページ番号やメモリ保護情報は、TLBに書き込まれる。この情報に基づいて、MMU３は、物理アドレスへの変換を行う。
【００２４】
MMU３内の３種類のTLBは、JTLB(Joint Translation Lookaside Buffer)31と、ITLB(Instruction Translation Lookaside Buffer)32と、DTLB(Data Translation Lookaside Buffer)33とである。
【００２５】
ITLB32とDTLB33は、総称してマイクロTLBと呼ばれる。ITLB32は、命令の仮想アドレスのデータパスに直接接続された専用のTLBである。DTLB33は、データの仮想アドレスのデータパスに直接接続された専用のTLBである。これらTLBのエントリー数は少ないが、高速度でアドレス変換を行う。JTLB31により生成された変換テーブルの一部が、必要に応じて、ITLB32やDTLB33にコピーされる。
【００２６】
JTLB31はソフトウェアにより制御されるのに対し、マイクロTLBとJTLBとの整合性はハードウェアにより維持される。マイクロプロセッサは、JTLB31内に変換テーブルが存在しない場合には、例外を発行する。例外ハンドラは、OSのページテーブルから対応するページを検索し、変換テーブル100の情報をJTLB31に書き込む。
【００２７】
LSU４は、外部メモリ８に対する読み書きデータを一時的に格納するDCACHE(Data Cache Memory)41と、DCACHE41にアクセスするのに必要な仮想アドレスを生成するアドレス生成器(仮想アドレス計算部)42と、ストア命令でメモリに格納すべきデータを一時的に格納するストアバッファ（一時的格納手段）４３と、外部メモリ８が送ってきたデータをDCACHE４１に格納する前に待機させるリフィルバッファ４４とを有する。
【００２８】
ストアバッファ４３は、DCACHE４１に対するストア・アクセスと、その他のアクセス（例えば、ロード命令によるデータの読み出しなど）とがDCACHE４１上で競合したときに、ストア命令によるストアデータを一時的に格納する目的に用いられたりする。
【００２９】
ストア命令は、ストアバッファ４３にデータを書き込んだ時点でパイプライン上の処理を終了できるので、ストアバッファ４３を設けることにより、パイプラインの性能向上が図れる。
【００３０】
リフィルバッファ４４は、パイプラインの停止を回避するために設けられる。ノンブロッキング・キャッシュの場合、キャッシュ・ミスが起こってもパイプラインは停止しないため、パイプラインのロード／ストア命令によるDCACHE４１のアクセスと、リフィル処理によるDCACHE４１のアクセスとが、DCACHE４１上で競合するおそれがある。この場合、DCACHE４１のタイム・スロットが利用可能になるまで、リフィル・データをリフィルバッファ４４に待機させる。
【００３１】
次に、図４に示すマイクロプロセッサの動作を説明する。まず、IFU２は、PCパイプ２により生成されたPCに基づいて命令をフェッチする。なお、PCは仮想アドレスである。
【００３２】
ITLB32は、PCを仮想アドレスから物理アドレスに変換する。変換された物理アドレスは、ICACHE22内のITAGの検索に利用される。すなわち、物理アドレスは、PCにより指示された命令がICACHE22内に存在するか否かを検出するために利用される。PCにより指示された命令がICACHE22内に存在しない場合、すなわち、キャッシュミスの場合には、物理アドレスを用いて不図示の外部メモリ８へのアクセスが行われる。
【００３３】
キャッシュミスが起こると、キャッシュミスが起こったことを示す情報と物理アドレス情報とがBIU１内の制御論理部に渡される。BIU１は、これらの情報に基づいて外部メモリ８へのアクセスを行う。外部メモリ８へのアクセスが終了すると、キャッシュlineの取得を知らせる信号がIFU２に供給される。IFU２は、メモリへのアクセスにより得られたデータをICACHE22に書き込む。同時に、リフィルされたキャッシュlineに含まれる命令のうち、PCにより指示された命令と、特定の場合には、PCにより指示された命令に続く数命令が命令発行＆ステージング部23に供給される。
【００３４】
一方、PCにより指示された命令がICACHE22内に存在する場合には、ICACHE22内の対応する命令と、特定の場合には、PCにより指示された命令に続く数命令が命令発行＆ステージング部23に供給される。
【００３５】
命令発行＆ステージング部23は、命令の型を識別し、命令の実行を行う実行ユニット（例えば、LSU４または他の実行ユニット）を決定する。この場合、命令発行＆ステージング部23は、各実行ユニットの空き状態に応じて、実行ユニットを動的に決定する。
【００３６】
例えば、識別された命令がロード／ストア命令の場合には、LSU４のみが命令を実行可能であるため、命令発行＆ステージング部23は、LSU４が命令を実行できる準備が整ったときにLSU４にその命令を送る。
【００３７】
本実施形態のプロセッサは、キャッシュ・ヒット時の処理として、コピーバック／ライトスルーのいずれかを選択でき、また、キャッシュ・ミス時の処理として、ライトアロケート／ノーライトアロケートのいずれかを選択できる。前者の選択と後者の選択とで、計４通りの組み合わせができる。以下、これら４通りの組み合わせについて説明する。
【００３８】
(1)コピーバックでライトアロケートの場合
ａ）ストア命令がDCACHE４１にヒット：
ストア命令によるストアデータをDCACHE４１に書き込むが、外部メモリ８に対しては何も処理を行わない。すなわち、DCACHE４１が新しいデータを所有し、外部メモリ８が古いデータを所有するダーティ状態になる。
【００３９】
ｂ）ストア命令がDCACHE４１にミス：
DCACHE４１に対してリフィルを行った後、DCACHE４１にストア命令によるストアデータを書き込む。外部メモリ８は、リフィルデータをDCACHE４１に供給するが、ストア命令によるストアデータは格納しない。この場合も、ダーティ状態になる。
【００４０】
(2)コピーバックでノーライトアロケートの場合
ａ）ストア命令がDCACHE４１にヒット：
DCACHE４１にストア命令によるストアデータを書き込むが、外部メモリ８に対しては何も処理を行わない。すなわち、DCACHE４１はダーティ状態になる。
【００４１】
ｂ）ストア命令がDCACHE４１にミス：
DCACHE４１に対しては何も処理を行わない。外部メモリ８にストア命令によるストアデータを書き込む。
【００４２】
(3)ライトスルーでライトアロケートの場合
ａ）ストア命令がDCACHE４１にヒット：
DCACHE４１と外部メモリ８の両方にストア命令によるストアデータを書き込む。
【００４３】
ｂ）ストア命令がDCACHE４１にミス：
DCACHE４１に対してリフィルを行った後、DCACHE４１と外部メモリの双方にストア命令によるストアデータを書き込む。
【００４４】
(4)ライトスルーでnoライトアロケートの場合
ａ）ストア命令がDCACHE４１にヒット：
DCACHE４１と外部メモリ８の両方にストア命令によるストアデータを書き込む。
【００４５】
ｂ）ストア命令がDCACHE４１にミス：
DCACHE４１に対しては何も処理を行わない。外部メモリ８にストア命令によるストアデータを書き込む。
【００４６】
第１の実施形態は、上述した(1)〜(4)のうち、(2)と(4)のノーライトアロケートを選択し、かつ、パイプラインの処理を停止させないノンブロッキング・キャッシュを実装する場合に、メモリの整合性を保証するものである。
【００４７】
図５は図４のＬＳＵ４の内部構成を示すブロック図である。図５の制御部９は、命令列に応じてデータパスに供給される制御信号を生成する。データパスは、制御部９からの制御信号に応じて、データを解放する。
【００４８】
図５において、制御部９とデータパスに接続される各線は、制御信号を表している。通常、データパスから制御部９に制御信号が供給される。データパスから制御部９に供給される制御信号で、図５に図示されていないものも存在する。例えば、パイプライン処理がICACHE２２のキャッシュ・ミスに応じて停止するとき、データパスの一部であるICACHE２２のＴＡＧからのミス信号は、パイプライン処理を停止させるために制御部９に供給される。
【００４９】
図５において、参照符号１０ａ，１０ｂ，…，１０ｍにより指定されるブロックは、パイプライン処理を実行する各ステージを分離するレジスタ構造を表す。これらのブロック１０ａ，１０ｂ，…，１０ｍは、フリップフロップとラッチを含む回路で構成され、クロックに同期して読み出し／書き込み処理を行う。以後、ブロック１０ａ，１０ｂ，…，１０ｍを総称してパイプライン・レジスタと呼ぶ。
【００５０】
ＩＦＵ２は、ＩＦＵ制御部９１の制御に基づいて、パイプライン・レジスタ１０内に、フェッチした命令を格納する。命令は、パイプライン・レジスタ１０ａから命令デコーダ９２に送られる。命令デコーダ９２は、命令の区別と処理に必要な仮の制御信号を生成する。仮の制御信号を生成する理由は、すべての制御信号を命令デコーダ９２により生成するのは、量的にも質的にも不可能なためである。命令デコーダ９２は、演算器の制御信号よりも抽象的な信号を生成する。
【００５１】
フェッチされた命令がロード／ストア命令であることを命令デコーダ９２が認識すると、制御信号群は、対応する制御論理部に送られる。すなわち、図５に図示されるように、制御信号群は、パイプライン制御部９３、ＧＰＲ(General Purpose Register)制御部９４、およびLSU制御部（ロード／ストア制御手段）９５に送られる。
【００５２】
パイプライン制御部９３とＬＳＵ制御部９５では、命令と制御信号は、データ・フローのステージに同期して流れる。このため、パイプライン・レジスタ１０ａ，１０ｂ，…，１０ｍは、制御部９とデータパスの両方に設けられる。
【００５３】
パイプライン制御部９３は、パイプライン制御部１０ａ，１０ｂ，…，１０ｍの内部の状態に応じて、パイプラインの流れを制御する。例えば、リソース・ハザードが演算器で起こると、パイプラインを停止させる処理が行われる。
【００５４】
ＬＳＵ制御部９５は、ロード／ストア命令を実行するのに必要な制御信号を生成する。ＬＳＵ制御部９５内には、アドレス生成器４０を制御するaddress制御部９６と、ストアバッファ４３を制御するSB制御部９７と、リフィルバッファ４４を制御するRB制御部９８と、DCACHE４１を制御するＤ＄制御部９９と、DTAG４１ａを制御するDTAG制御部１００とが設けられている。
【００５５】
図５のＬＳＵは、ストアバッファ４３とリフィルバッファ４４とを備えている。これらバッファはそれぞれ、データ部４３ａ，４４ａとアドレス部４３ｂ，４４ｂとを有する。
【００５６】
ストアバッファ４３は、DCACHE４１が何かに占有されていて、ストア命令がDCACHE４１に対してデータの書き込みを行えないときにデータを待機するために設けられる。ストアバッファ４３のアドレス部４３ｂには、DCACHE４１に書き込むためのDCACHE４１のアクセス先情報が格納される。
【００５７】
先行するストア命令によるストアデータをロード命令で読み出そうとしたときに、ストアすべきデータがDCACHE４１にまだストアされておらず、ストアバッファ４３に待機している場合がある。この場合、ロード命令は、ストアバッファ４３のデータを何らかの手段で読み出す必要がある。
【００５８】
そこで、先行するストア命令でストアしたデータを読み出そうとしているか否かを検出するために、ストアバッファ４３のアドレス部４３ｂには、アドレス比較器４３ｃが設けられている。アドレス比較器４３ｃは、ストアバッファ４３の中身と、パイプライン中のロード命令のアドレスとを比較し、ストアすべきデータがDCACHE４１に格納されているか否かを検出する。
【００５９】
一方、リフィルバッファ４４のデータ部４４ａは、キャッシュミスによりキャッシュ・リフィルが起こったときに、外部バスからＢＩＵ(Bus Interface Unit)経由で送られてきたデータを、DCACHE４１に書き込む前に待機させるために用いる。
【００６０】
ここで、リフィルバッファ４４にデータを待機する場合とは、データがDCACHE４１に送られてきたときに、DCACHE４１が何かに占有されている場合である。
【００６１】
本実施形態では、ノンブロッキング・キャッシュを前提とするため、ロード／ストア命令の実行時にキャッシュ・ミスが起こっても、パイプラインは停止しない。このため、リフィルデータが外部バスからDCACHE４１に到達したとき、ロード／ストア命令がDCACHE４１をアクセス中である可能性がある。この場合、リフィルデータは、リフィルバッファ４４のデータ部４４ａに格納され、DCACHE４１が解放されるまで待機する。
【００６２】
また、リフィルバッファ４４のアドレス部（アドレス格納手段）４４ｂは、一般には、アドレス・キューとも呼ばれ、ノンブロッキング・キャッシュを実装する上で必須の構成である。ロード／ストア命令がキャッシュ・ミスを起こすと、リフィルバッファ４４のアドレス部４４ｂにミスしたアドレスが入る。このため、リフィルバッファ４４のアドレス部４４ｂにより、キャッシュミスのためにペンディングになっているロード／ストア命令のアクセス先アドレスを知ることができる。リフィルバッファ４４のアドレス部４４ｂの中身は、ＢＩＵ１経由で外部バスに送られ、リフィルのためのメモリアクセスに使用される。
【００６３】
また、リフィルバッファ４４のアドレス部４４ｂもアドレス比較器（アドレス一致検出手段）４４ｃを持っており、パイプライン中のロード／ストア命令のアクセス先が、ペンディング中のロード／ストア命令のアクセス先と同じであるか否かをチェックする。
【００６４】
パイプラインのロード／ストア命令がペンディング中のアドレスと同じアドレスにアクセスしている場合は、やはりキャッシュミスとしてリフィルバッファ４４のアドレス部４４ｂの空いているエントリに入る。そして、先行する同一アドレスのミスの処理を待つ。同一アドレスに対する複数のキャッシュ・ミスは、概念的にはリフィルを一度だけ行えばよいので、アドレス比較器４４ｃの結果を用いて、同一アドレスへの複数のバスリクエストが起きるのを避けるのが一般的である。
【００６５】
リフィルバッファ４４のアドレス部４４ｂは、図５に示すように、DCACHE４１とDTAG４１ａに接続されている。DCACHE４１にリフィルデータを書き込む際には、DCACHE４１やDTAG４１ａに対してリフィルするエントリの指定を行い、DTAG４１ａにアドレスを供給する。
【００６６】
リフィルバッファ４４やストアバッファ４３も、図５の制御部９により制御される。制御部９は、各バッファの制御の他に、状態の管理も行う。ここで、状態の管理とは、ステートマシンを用いて、必要な状態を規定し、その状態とステートマシンへの入力信号に応じて、必要なリクエスト例えば、バス・リード要求やDCACHE４１へのライト・リクエスト）信号を生成したり、自己の状態を変更したりすることである。
【００６７】
従来は、図２や図３で説明したように、ノーライト・アロケイト・エリア内のアドレスに対してロード命令がキャッシュミスし、後続のストア命令が同一アドレスに対してキャッシュミスした場合に、このストア命令によるストアデータをDCACHE４１に格納せずに、メインメモリ（外部メモリ）にのみ格納していた。これに対して、第１の実施形態は、ノンブロッキング・キャッシュを実装する場合に、ノーライト・アロケイト・エリア内のアドレスに対してロード命令がキャッシュミスし、後続のストア命令が同一アドレスに対してキャッシュミスしたときは、先行するロードミスによりリフィルされたDCACHE４１のキャッシュラインに、ストアミスしたストアデータを書き込む点に特徴がある。
【００６８】
すなわち、ノーライトアロケートでありながら、一時的にライトアロケートとして扱う。ただし、ライトアロケートのように動作するのは、先行するload missと同一ラインに対して生じたストアミスのみである。これにより、外部メモリ８のみが新しいデータを保持して、DCACHE４１は古いデータを保持するといったデータの不整合が起きなくなる。
【００６９】
（第２の実施形態）
第２の実施形態は、DCACHE４１とＢＩＵ１２との間にライトバッファを新たに追加したものである。
【００７０】
図６はマイクロプロセッサの第２の実施形態の内部構成を示すブロック図、図７は図６のマイクロプロセッサ内のＬＳＵの内部構成を示すブロック図である。図６および図７に示すマイクロプロセッサは、DCACHE４１とＢＩＵ１２との間にライトバッファ４５が接続されている点を除けば、図４に示すマイクロプロセッサと同様に構成されている。
【００７１】
ライトバッファ４５は、外部メモリ８に書き戻すデータを格納する。ライトバッファ４５に格納されるデータは、アンキャッシュされたstore時のデータや、DCACHE４１に格納されたデータである。外部メモリ８が接続される外部バスは、通常、プロセッサの内部周波数よりもかなり遅く動作するため、ライトバッファ４５を設けることで、プロセッサ内外の周波数差を吸収することができる。すなわち、外部メモリ８への書き込みデータは、外部バスに空きができるまで、ライトバッファ４５で待機する。
【００７２】
ライトバッファ４５は、リフィルバッファ４４やストアバッファ４３と同様に、データ部４５ａとアドレス部４５ｂを有する。バス・リード／ライトは通常、両者に依存関係がない限りは、リードを優先して行う。これは、プロセッサは、バス・ライトの結果は使用しないが、バス・リードの結果を使用するためであり、バス・リードにかかる時間が直接、プロセッサの性能に影響を与えるためである。
【００７３】
ところが、先行するバス・ライトと、後続するバス・リードのアドレスが同一の場合、バス・ライトを先に行わないと、バス・リードは外部メモリ８上の古いデータを読んでしまう。このため、バス・ライトとバス・リードが連続して起こる場合には、両者のアドレスが一致するか否かを検出する必要がある。
【００７４】
そこで、図７に示すように、ライトバッファ４５の各エントリとリフィルバッファ４４の各エントリとを比較するためのアドレス比較器４５ｃが設けられている。アドレス比較器４５ｃにより、ライトバッファ４５の各エントリとリフィルバッファ４４の各エントリとが一致すると判断されると、外部メモリ８からの読み出しを優先させて行う。
【００７５】
このように、第２の実施形態では、DCACHE４１とＢＩＵ１２との間にライトバッファ４５を設けているため、バス・ライトとバス・リードが競合する場合には、バス・リードを優先させることができ、誤って外部メモリ８の古いデータを読み出すような不具合が起きなくなる。
【００７６】
（第３の実施形態）
第３の実施形態は、第１および第２の実施形態におけるリフィルバッファ４４のアドレス部を二重化するものである。
【００７７】
図８は図５のリフィルバッファ４４のアドレス部を二重化した例を示すブロック図、図９は図６の構成に新たにリフィルバッファ４４のアドレス部４４Ｂと、このアドレス部４４Ｂに対応するアドレス比較器４４Ｃとを新たに追加したものである。
【００７８】
新たに追加したアドレス部４４Ｂには、DTAG４１ａの出力が入力される。このアドレス部４４Ｂに対応するアドレス比較器４４Ｃは、DTAG４１ａの出力とパイプライン中のアドレスとを比較する。
【００７９】
図１０はＬＳＵ４が実行する命令列の一例を示す図であり、以下、図１０の命令列に基づいて、リフィルバッファ４４のアドレス部を二重化する理由を説明する。
【００８０】
図１０の(1)に示すノーライト・アロケイト・エリアに対するld(load double word)命令がキャッシュミスした場合には、キャッシュラインのリフィル処理が行われる。リフィル処理が終了した後に、(2)に示すsd(store double word)命令が(1)と同じアドレスに対して行われると、キャッシュヒットするため、そのキャッシュラインにデータがストアされ、そのキャッシュラインはdirtyになる。
【００８１】
次に、(3)に示すように、(1)および(2)と同じインデックス・アドレスに対するld命令が発行されると、キャッシュラインのリプレースが行われ、ダーティ・ライトバックが起動される。
【００８２】
次に、(4)に示すように、(2)と同じアドレスに対するsd命令が発行されると、キャッシュミスになる。
【００８３】
図１０の命令列の場合、(3)のldがキャッシュミスした後に、(2)のsdがdirtyにしたキャッシュラインをDCACHE４１から外部メモリ８に書き戻す処理が行われる。この処理は、ダーティ・ライトバックと呼ばれる。
【００８４】
プロセッサの性能を向上させるため、DCACHE４１のイベントの優先順位として、ダーティ・ライトバックよりもパイプラインのロード／ストア命令の優先順位を高くすると、(3)のld命令によるキャッシュミスで起動されるダーティ・ライトバックはペンディングされ、(4)のsd命令が先に実行される。
【００８５】
図１０の例の場合、(4)のsd命令はキャッシュミスし、しかも、ノーライト・アロケイト・エリアへのアクセスであるため、DCACHE４１へのリフィルは行われず、ストアデータは、ＢＩＵ１２またはライトバッファ４５に直接送られる。
【００８６】
ところが、(2)のsd命令によるダーティ・ライトバックのストア先アドレスと、(4)のsd命令のストア先アドレスとは互いに一致するため、ダーティ・ライトバックを外部メモリ８のライトに先だって行わなければ、(4)のsd命令でストアした新しいデータが、(2)のsd命令による古いデータによりオーバーライトされるおそれがある。
【００８７】
そこで、図７および図８では、リフィルバッファ４４のアドレス部と、それに対応するアドレス比較器とを一つずつ新たに追加し、追加したアドレス部４４Ｂには置換されるキャッシュラインのアドレス、すなわちDTAG４１ａの出力が格納される。
【００８８】
アドレス比較器４４Ｃにより、パイプライン中のストア命令と同一のアドレスであると検出されると、そのエントリにフラグが立つ。そのフラグが立ったエントリのミスによるダーティ・ライトバックが終了するまで、対応するノーライト・アロケイト・エリアに対するストア・ミスデータは、ＢＩＵ１２へは送られず、外部メモリ８への書き込みは行われない。
【００８９】
このように、第３の実施形態では、先行するダーティ・ライトバックと後続のバス・ライトが同一のアドレスを対象とする場合に、先行するダーティ・ライトバックを優先させるようにしたため、外部メモリ８にストアされた新しいデータが古いデータで上書きされるような不具合が生じなくなる。また、それ以外の場合は、バス・ライトを優先させることができるため、ダーティ・ライトバックよりもパイプラインの処理が優先され、プロセッサの性能を向上させることができる。
【００９０】
上述した各実施形態では、キャッシュメモリが階層構造になっていない例を説明したが、本発明は、キャッシュメモリが階層構造になっていても、同様に適用可能である。以下では、外部メモリと下位のキャッシュメモリを総称して、キャッシュ階層の中の下位メモリと呼ぶ。
【００９１】
キャッシュメモリが階層構造になっている場合は、ノーライト・アロケイト・エリアへのストアミスが起こった場合に、(1)ストアデータを下位のキャッシュメモリのみに書き込む、(2)ストアデータを下位のキャッシュメモリと外部メモリの双方に書き込む、(3)ストアデータを外部メモリのみに書き込む、の３通りが考えられる。本発明は、これら(1)〜(3)のいずれにも適用可能である。
【００９２】
【発明の効果】
本発明によれば、ノーライト・アロケイト・エリアに対するロード命令がキャッシュミスを起こし、後続するストア命令が先行するロード命令と同じキャッシュラインを対象としてキャッシュミスを起こした場合には、先行するロード命令によるキャッシュラインへのリフィル処理中またはリフィル処理が終了した後、ノーライト・アロケイト・エリアであっても、ストアデータを対応するキャッシュラインにストアするようにしたため、キャッシュメモリと外部メモリとのデータの整合性を確実に保証することができる。
【００９３】
また、ダーティ・ライトバックとストアデータの外部メモリへの書き込みとが競合する場合には、ダーティ・ライトバックを優先させるようにしたため、外部メモリに書き込んだ新しいデータが、ダーティ・ライトバックによる古いデータで上書きされるという不具合が起きなくなる。
【図面の簡単な説明】
【図１】プロセッサ内のＬＳＵの動作を説明する図。
【図２】ノーライト・アロケイト・エリア内の同一ラインに対して連続的にノンブロッキング・キャッシュによりアクセスを行った場合のデータフローを示す図。
【図３】同一アドレスに対するロード命令とストア命令が競合した場合に、キャッシュラインを無効にする例を示す図。
【図４】本発明に係るマイクロプロセッサの第１の実施形態の内部構成を示すブロック図。
【図５】図４のＬＳＵの内部構成を示すブロック図。
【図６】本発明に係るマイクロプロセッサの第１の実施形態の内部構成を示すブロック図。
【図７】図６のマイクロプロセッサ内のＬＳＵの内部構成を示すブロック図。
【図８】図５のリフィルバッファのアドレス部を二重化した例を示すブロック図。
【図９】図６の構成に新たにリフィルバッファのアドレス部と、このアドレス部に対応するアドレス比較器とを新たに追加した図。
【図１０】ＬＳＵが実行する命令列の一例を示す図。
【符号の説明】
１  バス・インタフェース・ユニット
２  ＩＦＵ(Instruction Fetch Unit)
３  MMU(Memory Management Unit)
４  LSU(Load/Store Unit)
５ａ，５ｂ，５ｃ  実行ユニット
６ａ，６ｂ  ＦＰＵ(Floating Point Unit)
７  制御論理部
２１  PCパイプ
２２  ICACHE
２３  命令発行＆ステージング部
３１  JTLB(Joint Translation Lookaside Buffer)
３２  ITLB(Instruction Translation Lookaside Buffer)
３３  DTLB(Data Translation Lookaside Buffer)
４１  DCACHE(Data Cache Memory)
４２  アドレス生成器（仮想アドレス計算部）
４３  ストアバッファ（一時的格納手段）
４４  リフィルバッファ
４５  ライトバッファ
【図１】
0003862959.tif 000002
【図２】
0003862959.tif 000003
【図３】
0003862959.tif 000004
【図４】
0003862959.tif 000005
【図５】
0003862959.tif 000006
【図６】
0003862959.tif 000007
【図７】
0003862959.tif 000008
【図８】
0003862959.tif 000009
【図９】
0003862959.tif 000010
【図１０】
0003862959.tif 000011