(57)【特許請求の範囲】
【請求項１】
プロセッサとメモリとの間のバスをコントロールするバスコントローラであって、
プロセッサからメモリへのストアデータを先入れ先出し式に一時的に保持するバッファ手段と、
前記バッファ手段の部分的フラッシュを指示するトリガー信号を受け付ける受付手段と、
前記トリガー信号を受けた時点でバッファ手段に保持されている末尾のデータを指すポインタを保持するポインタ保持手段と、
前記トリガー信号に応じて、前記バッファ手段に保持されているデータのうち先頭データから前記ポインタが指すデータまでをメモリに書き込むことによって前記バッファ手段を部分的にフラッシュする書き込み手段と、
前記書き込み手段によって、前記部分的フラッシュが完了するまで、プロセッサにより実行される特定のアクセス命令に対してウェイト信号を発生するウェイト発生手段と
を備えることを特徴とするバスコントローラ。
【請求項２】
前記受付手段は、前記メモリをアクセスする命令以外の命令の実行時にプロセッサから出力される前記トリガー信号を受け付けることを特徴とする請求項１記載のバスコントローラ。
【請求項３】
前記受付手段は、前記プロセッサにおける部分的フラッシュ付きストア命令の実行時にプロセッサから出力される前記トリガー信号を受け付けることを特徴とする請求項１記載のバスコントローラ。
【請求項４】
前記特定のアクセス命令は、前記メモリとは異なるデバイスをアクセスする命令であることを特徴とする請求項１記載のバスコントローラ。
【請求項５】
前記特定のアクセス命令は、ロード命令であることを特徴とする請求項１記載のバスコントローラ。
【請求項６】
前記バッファ手段は、
プロセッサからメモリへのストアデータを先入れ先出し式に一時的に保持するデータバッファと、
前記ストアデータに対応するアドレスを保持するアドレスバッファと、
プロセッサから出力されるロードアドレスとアドレスバッファに保持されたアドレスとを比較する比較手段とを備え、
前記ウェイト発生手段は、比較手段による比較の結果、ロードアドレスとアドレスバッファに保持されたアドレスとが一致するとき、前記ウェイト信号を発生する
ことを特徴とする請求項１記載のバスコントローラ。
【請求項７】
前記アドレスバッファは、前記トリガー信号を受けた時点においてバッファ手段に保持されている先頭データから末尾のデータまでのそれぞれに対応するアドレスを保持し、
前記比較手段は、アドレスバッファに保持された先頭データから末尾のデータまでのそれぞれに対応するアドレスと、プロセッサから出力されるロードアドレスとを比較する
ことを特徴とする請求項６記載のバスコントローラ。
【請求項８】
前記アドレスバッファは、前記トリガー信号を受けた時点においてバッファ手段に保持されている先頭データから末尾のデータまでのそれぞれに対応するアドレスを保持し、
前記比較手段は、前記部分的フラッシュの対象データのうちメモリに書き込まれたデータのそれぞれに対応するアドレスと、プロセッサから出力されるロードアドレスとを比較しないで、前記部分的フラッシュの対象データのうちメモリに書き込まれていないデータのそれぞれに対応するアドレスと、プロセッサから出力されるロードアドレスとを比較することを特徴とする請求項６記載のバスコントローラ。
【請求項９】
前記比較手段は、さらに、プロセッサから出力されるストアアドレスとアドレスバッファに保持されたアドレスとを比較し、
前記ウェイト発生手段は、
さらに、比較手段による比較の結果、前記ストアアドレスとアドレスバッファに保持された何れかのアドレスとが一致するとき、前記部分的フラッシュが完了している状態であれば、一致したアドレスに対応するデータのデータメモリからメモリへの書き込みをウェイトさせ、
その後の比較手段による比較の結果、プロセッサから出力されるロードアドレスとアドレスバッファに保持された何れかのアドレスとが一致するとき、アドレスバッファをクリアする
ことを特徴とする請求項７記載のバスコントローラ。
【請求項１０】
前記比較手段は、さらに、プロセッサから出力されるストアアドレスとアドレスバッファに保持されたアドレスとを比較し、
前記ウェイト発生手段は、
さらに、比較手段による比較の結果、前記ストアアドレスとアドレスバッファに保持された何れかのアドレスとが一致するとき、前記部分的フラッシュが完了している状態であれば、一致したアドレスに対応するデータのデータメモリからメモリへの書き込みをウェイトさせ、
前記特定のアクセス命令が完了したとき、アドレスバッファをクリアすることを特徴とする請求項７記載のバスコントローラ。
【請求項１１】
前記バスコントローラは、さらに
前記バッファ手段を第１バッファ手段とし、前記バッファ手段と同一構成の第２バッファ手段と、
第１バッファ手段および第２バッファ手段をカレントとして指示する指示手段と、
トリガー信号に応じて指示手段のカレントを切り替える切替手段とを備え、
前記書き込み手段およびウェイト発生手段は、カレントでないバッファ手段を対象とし、
カレントバッファ手段は、プロセッサからのストアデータを保持する
ことを特徴とする請求項１、７、８、９または１０記載のバスコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
プロセッサとメモリとの間のバッファを備えたバスコントローラに関する。
【背景技術】
【０００２】
プロセッサとスレーブデバイス間のアクセスレイテンシを隠蔽するために、バッファを備えた構成がある。このバッファにはプロセッサからスレーブデバイスへのストアデータが一時格納される。バッファからスレーブデバイスへのストアデータ転送は、プロセッサから制御されることなくプロセッサとは独立に実行される。
【０００３】
プロセッサがバッファに格納されたストアデータがスレーブデバイスに書き込みされたことを確認する方法として、プロセッサがスレーブデバイスをリードする方法がある。すなわち、プロセッサにより特定のリード命令が実行されることにより、バッファは保持しているストアデータを一括してフラッシュする。ここでいうフラッシュとは、バッファに格納されたデータをすべてスレーブデバイスに書き込むことである。
【０００４】
図１５に従来技術におけるプロセッサとスレーブデバイスの間にバッファを備えたバスコントローラの構成を示す。このバスコントローラ７６は、クロスバスイッチ７７とバッファ７８とを備え、マスターデバイスとなるプロセッサ７１およびＤＭＡＣ７２と、スレーブデバイスとなるメモリ７３、デバイス７４およびデバイス７５との間でバス制御および、デバイス７３へのストアデータのバッファリングを制御する。
【０００５】
同図において、プロセッサ７１とＤＭＡＣ７２をマスターとし、スレーブデバイスは３つある。マスターとスレーブをバス接続するためのクロスバスイッチ７７があり、その接続はバスコントローラ７６が制御している。プロセッサ７１がメモリ７３にストアするデータはバッファ７８にバッファリングされる。上記フラッシュのためのフラッシュトリガーはロード命令により生成される。プロセッサはメモリ７３のデータについてのコヒーレンシが保証されていることをロード命令の完了により確認し、確認後ＤＭＡを起動するためのトリガーをＤＭＡＣにアサートする。
【０００６】
プログラムの例をプログラム１に示す。
＜プログラム１＞
line1: mov r0,0x0
line2: mov a0,0x0
line3: st @a0,r0
line4: ld r15,@a0
【０００７】
line3ではプロセッサ７１がデバイス７３にデータをストアしている。このデータはバッファ７８に一時的に保持される。line4ではプロセッサがデバイス７３からデータをロードする。これによりバッファ７８はフラッシュを開始する。フラッシュが完了するまでプロセッサ７１はインタロックし、フラッシュ完了後にロードに対する応答を受ける。これによりプロセッサ７１はline3の書き込みの完了を確認できる、つまりコヒーレンシが保証される。
【０００８】
従来のコヒーレンシ保証では、高速のレジスタをバスに設けてリードを高速化している（例えば、特許文献１参照）。また、リードを２回の命令に分けて実行し、１回目の命令から２回目の命令までプロセッサが命令を実行できるようにしているものもある（例えば、特許文献２参照）。
【特許文献１】特許第２９１７６５９号公報
【特許文献２】特開平４−１２３２４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記従来技術によれば、フラッシュ完了の確認を高速化しているものの、フラッシュに要する時間がかかるという問題がある。フラッシュに要する時間と、フラッシュ確認のためのリードのレイテンシとに応じた分だけ、プロセッサの性能が劣化する。
【００１０】
フラッシュに要する時間は、バッファの容量にも依存し、最大ではバッファの容量分のデータを書き戻す時間がかかることになる。
【００１１】
具体的には、コヒーレンシ保証のために、リード命令によりバッファを一括してフラッシュする間、プロセッサは後続するストア命令を実行しないようにすれば、フラッシュすべきデータ量は減るが、後続するストア命令の実行を待たせることになる。後続するストア命令を実行するのであれば、実行したストア命令のデータを含みフラッシュされるので、フラッシュに要する時間が長くなってしまう。つまり、スレーブデバイスへの書き込みを早く確認する必要がある場合、ストア命令を実行できなくなる。例えば、書き込み完了を確認した後、スレーブデバイスをソースとするＤＭＡ転送を開始する場合には、フラッシュに要する時間は短い方が望ましい。
【００１２】
本発明は、トリガー信号からフラッシュ完了までの時間を短縮して、プロセッサの性能劣化を回避するバスコントローラを提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明のバスコントローラは、プロセッサとメモリとの間のバスをコントロールするバスコントローラであって、プロセッサからメモリへのストアデータを先入れ先出し式に一時的に保持するバッファ手段と、前記バッファ手段の部分的フラッシュを指示するトリガー信号を受け付ける受付手段と、前記トリガー信号を受けた時点でバッファ手段に保持されている末尾のデータを指すポインタを保持するポインタ保持手段と、前記トリガー信号に応じて、前記バッファ手段に保持されているデータのうち先頭データから前記ポインタが指すデータまでをメモリに書き込むことによって前記バッファ手段を部分的にフラッシュする書き込み手段と、前記書き込み手段によって、前記部分的フラッシュが完了するまで、プロセッサにより実行される特定のアクセス命令に対してウェイト信号を発生するウェイト発生手段とを備える。
【００１４】
この構成によれば、バッファ手段が空になるまで全部のデータをフラッシュしないで、フラッシュすべきデータ（トリガー信号を受けた時点のデータまで）を部分的にフラッシュするので、トリガー信号からフラッシュ完了までの時間を短縮することできる。これにより、プロセッサの性能劣化を回避することができる。
【００１５】
さらに、前記ポインタが指すデータより後段のバッファ領域にストアデータを保持させることができるので、プロセッサは部分的フラッシュが完了する前に後続するストア命令を実行できる。その結果、プロセッサの処理効率を向上させることができる。
【００１６】
ここで、前記受付手段は、前記メモリをアクセスする命令以外の命令の実行時にプロセッサから出力される前記トリガー信号を受け付けるようにしてもよい。
【００１７】
この構成によれば、前記メモリをアクセスする命令以外の命令、例えば、他のデバイスをアクセスする命令や、トリガー信号を発生する専用命令などによって、より少ないレイテンシでトリガー信号を出力することができる。
【００１８】
ここで、前記受付手段は、前記プロセッサにおける部分的フラッシュ付きストア命令の実行時にプロセッサから出力される前記トリガー信号を受け付けるようにしてもよい。
【００１９】
この構成によれば、上記のストア命令と同時にトリガー信号が発行され、当該ストア命令のデータのコヒーレンシを保証することができる。
【００２０】
ここで、前記特定のアクセス命令は、前記メモリとは異なるデバイスをアクセスする命令であってもよい。
【００２１】
この構成によれば、前記メモリとは異なるデバイス、例えば、メモリよりもレイテンシが少ないデバイスや、専用のデバイスなどによってより少ないレイテンシで、プロセッサはフラッシュの完了を確認することができる。
【００２２】
ここで、前記特定のアクセス命令は、ロード命令であってもよい。
この構成によれば、前記メモリをアクセスする命令と、フラッシュ完了の確認とを兼用することができる。例えば、ロード命令が完了したことをプロセッサが確認してから、他のマスター（ＤＭＡＣ等）を起動するといった使い方ができる。
【００２３】
ここで、前記バッファ手段は、プロセッサからメモリへのストアデータを先入れ先出し式に一時的に保持するデータバッファと、前記ストアデータに対応するアドレスを保持するアドレスバッファと、プロセッサから出力されるロードアドレスとアドレスバッファに保持されたアドレスとを比較する比較手段とを備え、前記ウェイト発生手段は、比較手段による比較の結果、ロードアドレスとアドレスバッファに保持されたアドレスとが一致するとき、前記ウェイト信号を発生するようにしてもよい。
【００２４】
この構成によれば、後続するロード命令とアドレスが一致するストアデータに限定して、ウェイト信号を発生させることができる。
【００２５】
ここで、前記アドレスバッファは、前記トリガー信号を受けた時点においてバッファ手段に保持されている先頭データから末尾のデータまでのそれぞれに対応するアドレスを保持し、前記比較手段は、アドレスバッファに保持された先頭データから末尾のデータまでのそれぞれに対応するアドレスと、プロセッサから出力されるロードアドレスとを比較するようにしてもよい。
【００２６】
この構成によれば、前記トリガー信号を受けた時点でバッファ手段に保持されている先頭データから末尾のデータまでのコヒーレンシをより確実に保証することができる。
【００２７】
ここで、前記アドレスバッファは、前記トリガー信号を受けた時点においてバッファ手段に保持されている先頭データから末尾のデータまでのそれぞれに対応するアドレスを保持し、前記比較手段は、前記部分的フラッシュの対象データのうちメモリに書き込まれたデータのそれぞれに対応するアドレスと、プロセッサから出力されるロードアドレスとを比較しないで、前記部分的フラッシュの対象データのうちメモリに書き込まれていないデータのそれぞれに対応するアドレスと、プロセッサから出力されるロードアドレスとを比較するようにしてもよい。
【００２８】
この構成によれば、部分的フラッシュの対象データのうちメモリに書き込まれていないデータについてコヒーレンシを保証することができるので、書き込まれているのにロード動作をウェイトさせてしまうことはなくなり、必要以上にプロセッサの性能を劣化させることがない。
【００２９】
ここで、前記比較手段は、さらに、プロセッサから出力されるストアアドレスとアドレスバッファに保持されたアドレスとを比較し、前記ウェイト発生手段は、さらに、比較手段による比較の結果、前記ストアアドレスとアドレスバッファに保持された何れかのアドレスとが一致するとき、前記部分的フラッシュが完了している状態であれば、一致したアドレスに対応するデータのデータメモリからメモリへの書き込みをウェイトさせ、その後の比較手段による比較の結果、プロセッサから出力されるロードアドレスとアドレスバッファに保持された何れかのアドレスとが一致するとき、アドレスバッファをクリアするようにしてもよい。
【００３０】
この構成によれば、データバッファからメモリへの書き込み完了をチェックするためのロード命令（第２の命令と呼ぶ。）と、トリガー信号を発行したストア命令（第１の命令と呼ぶ。）との間に、部分的フラッシュの対象データと同一アドレスにストアする命令（第３の命令と呼ぶ。）を配置することが可能となる。なぜなら、部分的フラッシュが完了するまで、第３の命令の書き込みがウェイトされるからである。これにより第１の命令と第２の命令の間に第３の命令を記述することができるので、効率よくプログラムを記述できる。
【００３１】
ここで、前記比較手段は、さらに、プロセッサから出力されるストアアドレスとアドレスバッファに保持されたアドレスとを比較し、前記ウェイト発生手段は、さらに、比較手段による比較の結果、前記ストアアドレスとアドレスバッファに保持された何れかのアドレスとが一致するとき、前記部分的フラッシュが完了している状態であれば、一致したアドレスに対応するデータのデータメモリからメモリへの書き込みをウェイトさせ、前記特定のアクセス命令が完了したとき、アドレスバッファをクリアするようにしてもよい。
【００３２】
この構成によれば、第１の命令と第２の命令の間に第３の命令を記述することができるので、効率よくプログラムを記述できる。さらに、第２の命令をアドレスバッファに保持されていないアドレスをロードアドレスとするロード命令にすることもでき、プログラムの自由度が向上する。
【００３３】
ここで、前記バスコントローラは、さらに、前記バッファ手段を第１バッファ手段とし、前記バッファ手段と同一構成の第２バッファ手段と、第１バッファ手段および第２バッファ手段をカレントとして指示する指示手段と、トリガー信号に応じて指示手段のカレントを切り替える切替手段とを備え、前記書き込み手段およびウェイト発生手段は、カレントでないバッファ手段を対象とし、カレントバッファ手段は、プロセッサからのストアデータを保持するようにしてもよい。
【００３４】
この構成によれば、複数のバッファ手段を有するバスコントローラであっても、トリガー信号でバッファ手段を切り替えながら、部分的フラッシュをすることができる。また、トリガー信号が発生した後、バッファリングできるストアデータの容量を、少なくとも１バッファ手段分を確保することができる。
【発明の効果】
【００３５】
本発明では、バッファのフラッシュ（書き込み）とリードのレイテンシを隠蔽して、プロセッサの実行性能を向上させることができる。
【００３６】
また、コヒーレンシ保証のために、バッファを一括してフラッシュする間、プロセッサはストア命令を実行することが可能であり、同時に、必要最小限のデータをフラッシュ実行できるので、スレーブデバイスへの書き込み完了を早く確認できる。
【発明を実施するための最良の形態】
【００３７】
＜実施の形態１＞
実施の形態１におけるバスコントローラは、バッファ中の全データをフラッシュする代わりに、フラッシュすべきデータ（トリガー信号を受けた時点のデータまで）を部分的にフラッシュする。これにより、トリガー信号からフラッシュ完了までの時間を短縮することできる。
【００３８】
図１は、本発明の実施の形態１におけるプロセッサ、デバイスおよびバスコントローラの構成を示すブロック図である。同図において、プロセッサ１とＤＭＡＣ（Direct Memory Access Controller）２はマスターデバイスとして、スレーブデバイスであるメモリ３、デバイス４、５にバスを介してアクセスする。バスコントローラ１００は、クロスバスイッチ１０１、ウェイト回路１０２、バッファ部１１０を備える。また、バッファ部１１０は、ＦＩＦＯ１１１、フラッシュポインタ１１２、メモリ制御部１１３を備える。
【００３９】
プロセッサ１は、第１の命令の実行時に、バッファ部１１０に部分的フラッシュを指示するフラッシュトリガー信号を出力する。ここで、部分的フラッシュは、ＦＩＦＯ１１１に保持されているデータのうち先頭データから、フラッシュトリガーが出力されたデータまでをＦＩＦＯ１１１からメモリ３に書き込むことをいう。また、第１の命令は、フラッシュトリガーを発生させるオペレーションのみの命令、部分的フラッシュ付きストア命令（フラッシュトリガー付きストア命令）などでよい。
【００４０】
マスターデバイスおよびスレーブデバイスに接続されるバスは、クロスバスイッチ１０１で接続されており、バッファ部１１０はプロセッサ１とメモリ３の間に設けられている。データ転送はバスコントローラ１００が制御している。ただし、ＤＭＡＣ２によるＤＭＡ転送では、ＦＩＦＯ１１１を経由しないで直接３にアクセスされる。
【００４１】
ＦＩＦＯ１１１は、プロセッサ１からメモリ３へのストアデータを先入れ先出し式に一時的に保持する。例えば、ＦＩＦＯ１１１は、出力側をバッファ４、入力側をバッファ１とする４つのバッファからなる４段構成である。
【００４２】
フラッシュポインタ（ＦＰ）１１２は、トリガー信号を受けた時点でＦＩＦＯ１１１に保持されている末尾のデータを指すポインタを保持するレジスタである。フラッシュポインタ１１２は、プロセッサ１からのフラッシュトリガーでセットされ、セットされたデータが書き出されるまで当該データとともに移動する。セットされたデータが書き出されるとフラッシュポインタ１１２は、どのバッファも指し示さないポジションをとる（これを、便宜上ヌル（ＮＵＬＬ）と呼ぶ。）。例えば、ＦＩＦＯ１１１が４段構成の場合に出力側をバッファ４、入力側をバッファ１とした場合、フラッシュポインタ１１２は４〜１までの値を取り得る。この値はメモリ３への書き込みと共にデクリメントされ、フラッシュ完了後０（ヌル）になる。
【００４３】
メモリ制御部１１３は、通常時（フラッシュポインタ１１２がヌルのとき）は、バスの空きサイクルを利用して（つまりサイクルスチールにより）ＦＩＦＯ１１１からメモリ３へデータを書き込む。また、メモリ制御部１１３は、プロセッサ１からの出力されるフラッシュトリガー信号を受け付け、フラッシュポインタ１１２をセットし、ＦＩＦＯ１１１に保持されているデータのうち先頭データからフラッシュポインタ１１２が指すデータまでをメモリ３に書き込むことによって、ＦＩＦＯ１１１からメモリ３に部分的にフラッシュする。このとき、メモリ制御部１１３は、フラッシュポインタ１１２がヌルになるまで、つまり部分的フラッシュが完了するまで、ウェイト回路１０２に対してウェイトの発生を指示するウェイト指示信号Ｗを有効にする。
【００４４】
ウェイト回路１０２は、メモリ制御部１１３から出力されたウェイト指示信号Ｗが有効である場合、プロセッサ１により実行される特定のアクセス命令に対してウェイト信号を発生する。特定のアクセス命令は、プロセッサ１が部分的フラッシュの完了を確認するための命令（以下第２の命令と呼ぶ。）をいい、本実施形態ではデバイス４に対するリードアクセス命令とする。デバイス４は、メモリ３とは異なるＩ／Ｏやメモリでよい、あるいは専用のＩ／Ｏであってもよい。
【００４５】
図２は、第１の命令が実行されたときのＦＩＦＯ１１１の様子を示す図である。
プロセッサ１が第１の命令を実行すると、フラッシュトリガーが有効になる。同図では、ＦＩＦＯ１１１に既にストアデータＡ、Ｂ、Ｃが保持されているので、メモリ制御部１１３は、フラッシュポインタ１１２を、末尾のストアデータＣを指すようにセットし、部分的フラッシュを開始し、ウェイト指示信号Ｗを有効にする。
【００４６】
続いて、メモリ制御部１１３によってストアデータＡがメモリ３に書き込まれると図３のように、フラッシュポインタ１１２はストアデータＣと共に移動する。図３では、プロセッサ１がさらに２つのストア命令を実行し、ストアデータＤ、ＥがＦＩＦＯ１１１に格納されている。この状態で、プロセッサ１が第２の命令の実行により、デバイス４をリードすると、ウェイト回路１０２はリードの完了をウェイトさせる。
【００４７】
さらに、メモリ制御部１１３によってストアデータＢがメモリ３に書き込まれると図４のように、フラッシュポインタ１１２はストアデータＣと共に移動する。図４の状態でも、ウェイト指示信号Ｗは依然有効である。
【００４８】
次いで、メモリ制御部１１３によってストアデータＣがメモリ３に書き込まれると図５のように、フラッシュポインタ１１２はヌルになる。これにより、ウェイト指示信号Ｗは無効になる。これにより、プロセッサ１からデバイス４へのリードに対するウェイトが解消される。なお、リードの完了をウェイトさせるウェイト信号は、ＦＩＦＯ１１１に格納されたデータのライトアドレスに関係ない。
【００４９】
図６は、プログラム例２を示す図である。同図においてr0,r1,r2,r15はデータレジスタである。a0,a1,a2はアドレスレジスタである。movはレジスタへのデータ転送命令である。st命令はアドレスレジスタが示すアドレスにデータレジスタからデータを転送する命令である。ld命令はアドレスレジスタが示すアドレスのメモリデータをレジスタに転送する命令である。
【００５０】
また、stf命令は、第１の命令の１つとして、デバイス４にストアするとともに、フラッシュトリガーを生成する命令であり、最後にＦＩＦＯ１１１に格納されたデータ（末尾のデータ）にフラッシュポインタ１１２をセットさせる。ldf命令は、第２の命令の１つとして、デバイス４からロードする命令であり、ウェイト指示信号Ｗがアサートされているときリード完了がウェイトされる。ldf命令が完了すれば、stf命令より前に実行されたライト命令の完了を保証することができる。
【００５１】
プログラム例２では、line1より直前のプログラムにより既にストアデータ（３）がＦＩＦＯ１１１に格納されているものとする。以下、動作例をケース１とケース２に分けて説明する。
【００５２】
＜ケース１＞
line3のstf命令の実行により、最後にＦＩＦＯ１１１に最後に格納されたストアデータ（３）にフラッシュポインタがセットされる。
【００５３】
line6のst命令の実行により、ストアデータ（４）がバッファに格納される。
ストアデータ（５）がバッファに格納される。
【００５４】
line10のldf命令が実行されたときストアデータ（３）はバッファ１に格納されている。そのため、ウェイト信号がアサートされロードは完了しない。ストアデータ（３）がバッファ０から書き出されてからロードが完了する。ライト完了をチェックするロード命令とフラッシュトリガーとなる命令の間にストア命令（line6,line9）を実行できる。このストア命令でストアされるストアデータ（４）、ストアデータ（５）は部分的フラッシュの対象外となるので、プロセッサの性能を劣化させない。
【００５５】
＜ケース２＞
また、line10のldf命令が実行されたとき、把握されたデータがすべてライトバックされていれば、ロード命令はウェイトされない。ストアデータ（４）、ストアデータ（５）はライトバックされていても良い。
【００５６】
さらに、実施の形態１の変形例について説明する。
（１）stf命令は、同一のスレーブにアクセスする命令であっても実施できる。このとき、stf命令でストアされるデータはフラッシュの対象としないように構成しても、フラッシュの対象とするように構成してもよい。
（２）第１の命令（フラッシュトリガーを生成する命令）はストア命令であるとしたが、ストアの操作に限定するものではない。
（３）stf命令という命令を実行したときにフラッシュトリガーがアサートされるものとしたが、特定のアドレスに対するストア命令（st）を実行したときに、フラッシュトリガーがアサートされるとしても良い。例えばデバイス４の特定アドレスにアクセスしたときにフラッシュトリガーがアサートされるものとしてもよい。この場合、特定のアドレスをデコードする機構を備え、特定のアドレスにアクセスしたときにフラッシュトリガーがアサートされることとなる。ldf命令にも同じことが言える。特定のアドレスにアクセスしたときにウェイト制御が施されるものとしてもよい。
（４）ldf命令はバッファリングしたデータの書き込み先であるスレーブデバイスと異なるスレーブデバイスにアクセスする命令としたが、同一のスレーブデバイスにアクセスする命令であっても良い。スレーブを限定するものではなく、レイテンシーの短いスレーブに設定することが可能である。
（５）第２の命令はロード命令であるとしたが、ロードの操作に限定するものではない。ウェイト信号がアサートされている間、プロセッサをインタロックすることで操作をウェイトさせる機構があれば良い。
【００５７】
＜実施の形態２＞
実施の形態２では、stf命令はバッファリングの対象となるメモリ３に対して実行される。また、部分的フラッシュ中にメモリ３へのld命令が実行されたとき、ウェイトされることによってコヒーレンシが保証される。
【００５８】
図７は、実施の形態２におけるプロセッサ、デバイスおよびバスコントローラの構成を示すブロック図である。同図の構成は、実施の形態１で説明した図１の構成と比較してバスコントローラ１００の代わりにバスコントローラ２００を備える点と、ウェイト回路１０２が削除された点とが異なっている。図１と同じ符号の構成要素は同じなので説明を省略し、以下異なる点を中心に説明する。
【００５９】
バスコントローラ２００は、バスコントローラ１００と比較して、バッファ部１１０の代わりにバッファ部２１０を備える点が異なっている。
【００６０】
バッファ部２１０は、フラッシュポインタ１１２、ＦＩＦＯ２１１、アドレス比較部２１４およびウェイト回路２０２を備える。
【００６１】
ＦＩＦＯ２１１は、ＦＩＦＯ１１１と同様にストアデータを保持することに加えて、アドレスタグを保持する。ＦＩＦＯ２１１は、フラッシュトリガーを受けた時点においてＦＩＦＯ２１１に保持されている先頭のストアデータから末尾のストアデータまでのそれぞれに対応するアドレスをアドレスタグとして保持し、末尾のストアデータがメモリ３に書き出されるまで保持を継続する。つまり、アドレスタグは、フラッシュトリガーから部分的フラッシュが完了するまで保持を継続する。例えば、ストアデータの書き込み先アドレスは従来と同様にバッファ部内部に保持されているが、アドレスタグはフラッシュトリガーがアサートされた時点の書き込み先アドレスがＦＩＦＯ２１１内にコピーされる。
【００６２】
アドレス比較部２１４は、ＦＩＦＯ２１１に保持された先頭のストアデータから末尾のストアデータまでのそれぞれに対応するアドレスタグと、ロード命令を実行中のプロセッサから現に出力されているロードアドレスとを比較する。
【００６３】
ウェイト回路２０２は、ウェイト回路１０２とは異なり、アドレス比較部２１４による比較の結果、アドレスタグの何れかとロードアドレスとが一致するとき、プロセッサ１に対してウェイト信号を発生する。
【００６４】
図８は、ＦＩＦＯ２１１およびアドレス比較部２１４の詳細な構成を示すブロック図である。ＦＩＦＯ２１１は、データラッチ２１ｄ〜２４ｄと、アドレスラッチ２１ａ〜２４ａとを備える。
【００６５】
データラッチ２１ｄ〜２４ｄは、プロセッサ１からメモリ３へのストアデータを先入れ先出し式に保持するデータバッファ回路を構成する。
【００６６】
アドレスラッチ２１ａ〜２４ａは、上記のアドレスタグを保持するラッチ回路を構成する。
【００６７】
アドレス比較部２１４は、比較器２５〜２８、判定部２９、論理和３０、Ｄフリップフロップ３１を備える。
【００６８】
比較器２５は、アドレスラッチ２１ａのアドレスタグと、ロード命令を実行中のプロセッサから出力されているロードアドレスとを比較する。比較器２６〜２８は、それぞれアドレスラッチ２２ａ〜２４ａのアドレスタグついて比較すること以外は、比較器２５と同様である。ただし、比較器２５〜２８は、判定部２９からのイネーブル信号がアサートされたときのみ比較動作する。
【００６９】
判定部２９は、比較器２５〜２８のうち、フラッシュトリガーを受けた時点におけるフラッシュポインタ１１２が指すストアデータから先頭のストアデータまでに対応するアドレスラッチに対応する比較器をイネーブルにする。判定部２９によりイネーブルにされる比較器は、部分的フラッシュが完了するまで継続される。例えば、フラッシュトリガーを受けた時点におけるフラッシュポインタ１１２がデータラッチ２３ｄのストアデータを指していれば、判定部２９は、部分的フラッシュが完了するまで、比較器２５〜比較器２７をイネーブルにする。
【００７０】
論理和３０は、比較器２５〜比較器２８の比較結果の論理和をとる。つまり、比較器２５〜比較器２８のうち、判定部２９によりイネーブルにされた比較器の１つが一致すれば、一致信号を出力する。
【００７１】
Ｄフリップフロップ３１は、論理和３０からの一致信号をロードサイクルにおいて保持し、ウェイト回路２０２に出力する。Ｄフリップフロップ３１からの一致信号を受けてウェイト回路２０２は、ロード命令の実行に対してウェイト信号をプロセッサ１に出力する。
【００７２】
図９は、プログラム例３を示す図である。この動作例をケース１とケース２に分けて説明する。
【００７３】
＜ケース１＞
line6のstf命令の実行により、最後にバッファに格納されたストアデータ（３）にフラッシュポインタがセットされる。同時に、ストアデータ（１）とストアデータ（２）とストアデータ（３）のアドレスがアドレスタグとして保持される。
【００７４】
line9のst命令の実行により、ストアデータ（４）がバッファに格納される。
line12のst命令の実行により、ストアデータ（５）がバッファに格納される。
line13のld命令が実行されたとき、アドレスタグ、ld命令のソースアドレスが一致しないのでld命令は実行される。
【００７５】
line14のld命令が実行されたとき、ストアデータ（２）に対応したアドレスタグと、ld命令のソースアドレスが一致する。このとき、ウェイト信号がアサートされ、ロードは完了しない。ストアデータ（３）がバッファ０から書き出されてから、アドレスタグがクリアされる。アドレスのクリアに伴って、ウェイト信号が解除されロードが完了する。このように、ライト完了をチェックするロード命令（第２の命令）とフラッシュトリガーとなる命令（第１の命令）の間にストア命令を実行できる。さらに、line13のld命令は実行され、line14のld命令がウェイトされたように、この構成によれば、後続するロード命令のロードアドレスと部分的フラッシュの対象であるストアデータのストアアドレスが一致する場合に限り、ウェイト信号を発生させることができる。
【００７６】
＜ケース２＞
line14のld命令が実行されたとき、ストアデータがすべてライトバックされていれば、ロード命令はウェイトされない。このとき、ストアデータ（４）、ストアデータ（５）はライトバックされていても良い。
【００７７】
このように実施の形態２では、stf命令をトリガーとして、その時点でバッファに格納
されているデータとアクセスアドレスをアドレスタグにより把握し、前記アドレスとld命令のアクセスアドレスが一致するときにld命令の実行をウェイトさせることによりコヒーレンシを保証している。
【００７８】
さらに、実施の形態２の変形例について説明する。判定部２９は、フラッシュポインタ１１２が指し示すストアデータから先頭のストアデータまでに対応するアドレスラッチに対応する比較器のみをイネーブルにするとしてもよい。このとき、部分的フラッシュすべきいくつかのストアデータのうちメモリに書き込まれたストアデータに対応するアドレスは比較対象にならなくなる。
【００７９】
この構成によれば、部分的フラッシュの対象データのうちメモリに書き込まれていないデータについてのみコヒーレンシを保証することができるので、書き込まれているのにストア動作をウェイトさせて不要なインタロックを発生させてしまうことはなくなり、必要以上にプロセッサの性能を劣化させることがない。
【００８０】
また、line14はld命令としたが、ldf命令であってもよい。この構成によれば、部分的フラッシュの対象データがすべてライトバックされたか否かを判定できる。
【００８１】
＜実施の形態３＞
実施の形態３では、部分的フラッシュ完了をチェックするロード命令（第２の命令）とフラッシュトリガーとなる命令（第１の命令）の間に、部分的フラッシュの対象データのそれぞれに対応するストアアドレス群と同じアドレスにデータをストアするストア命令（第３の命令と呼ぶ。）を実行可能なように、バスコントローラが構成されている。これにより、フラッシュトリガーの発行によりチェック対象となった部分的フラッシュの対象データの書き込みが完了するまで、第３の命令の書き込みがウェイトされるからである。これにより第１の命令と第２の命令の間に第３の命令を記述することができるので、効率よくプログラムを記述できる。
【００８２】
そのため、実施の形態２との差異は、アドレスタグが、部分的フラッシュが完了してもクリアされずに、その後のldf命令の実行完了まで保持されて、ldf命令の実行完了によりクリアされる点である。もう１つの差異は、ストアアドレスもアドレス比較される点である。
【００８３】
図１０は、実施の形態３におけるプロセッサ、デバイスおよびバスコントローラの構成を示すブロック図である。同図の構成は、実施の形態２で説明した図７の構成と比較して、バスコントローラ２００の代わりにバスコントローラ３００を備える点が異なる。バスコントローラ３００は、バスコントローラ２００と比較して、バッファ部２１０の代わりにバッファ部３１０を備える点が異なる。バッファ部３１０は、バッファ部２１０と比較して、アドレス比較部２１４の代わりにアドレス比較部３１４を備える点と、新たにウェイト回路３０２が追加された点と、メモリ制御部２１３の代わりにメモリ制御部３１３を備える点とが異なる。同じ符号の構成要素は同じなので説明を省略し、以下異なる点を中心に説明する。
【００８４】
アドレス比較部３１４は、アドレス比較部２１４と同様のロードアドレスの比較に加えて、ストア命令を実行中のプロセッサ１からのストアアドレスと、ＦＩＦＯ２１１に保持された先頭のストアデータから末尾のストアデータまでのそれぞれに対応するアドレスタグとを比較する。
【００８５】
ウェイト回路３０２は、アドレス比較部３１４による比較の結果、アドレスタグの何れかとストアアドレスとが一致するとき、メモリ制御部３１３に対してウェイト信号を発生する。これは、第１の命令の完了後でかつ第２の命令が完了していない場合に第３の命令のストアデータの書き込みを禁止するためである。つまり、第１の命令の完了後でかつ第２の命令が完了した後に、はじめて第３の命令のストアデータの書き込みを実行するためである。
【００８６】
メモリ制御部３１３は、メモリ制御部２１３と比較して、部分的フラッシュが完了してもアドレスタグをクリアしないで、その後の第２の命令（ldf命令）の実行が完了したときクリアする点と、ウェイト回路３０２からのウェイト信号を受けてバッファ部３１０からメモリ３への書き込みをウェイトする点である。
【００８７】
図１１は、ＦＩＦＯ２１１およびアドレス比較部３１４の詳細な構成を示すブロック図である。同図の構成は、実施の形態２で説明した図８の構成と比較して、アドレス比較部２１４の代わりにアドレス比較部３１４を備える点が異なる。アドレス比較部３１４は、アドレス比較部２１４と比較して、ロードアドレスのみが入力される代わりにロードアドレスおよびストアアドレスが入力される点と、Ｄフリップフロップ３２が追加された点とが異なる。同じ符号の構成要素は同じなので説明を省略し、以下異なる点を中心に説明する。
【００８８】
アドレス比較部３１４にはロードアドレスおよびストアアドレスが入力されるので、比較器２５〜２８は、ロードアドレスが入力された場合もストアアドレスが入力された場合も、アドレスタグと比較する。この比較は、部分的フラッシュ完了後も継続し、第２の命令が完了するまで行われる。第２の命令が完了すれば、アドレスタグがクリアされかつ比較結果が不一致となるから、比較も終了する。
【００８９】
Ｄフリップフロップ３１は、プロセッサ１によるロード命令実行時の一致信号を保持する。Ｄフリップフロップ３２は、プロセッサ１によるストア命令実行時の一致信号を保持し、メモリ制御部３１３に出力する。
【００９０】
図１２は、プログラム例４を示す図である。この動作例をケース１とケース２について説明する。
【００９１】
＜ケース１＞
line6のstf命令の実行により、最後にバッファに格納されたストアデータ（３）にフラッシュポインタがセットされる。同時に、ストアデータ（１）とストアデータ（２）とストアデータ（３）のアドレスがアドレスタグとして保持される。
【００９２】
line9のst命令の実行により、ストアデータ（４）がバッファに格納される。
line12のst命令の実行により、ストアデータ（５）がバッファに格納される。まだ、ストアデータ（６）はバッファに格納されていないものとする。このときフラッシュポインタはＮＵＬＬでない。
【００９３】
line16のldf命令が実行されたとき、アドレスタグと、ldf命令のソースアドレスが一致する。そのために、ウェイト信号がアサートされ、ロードは完了しない。ストアデータ（３）がバッファ部からメモリ３に書き出されると、アドレスタグのアドレスがクリアされ、ウェイト信号が解除されてからロードが完了する。このように、ライト完了をチェックするロード命令とフラッシュトリガーとなる命令の間にストア命令を実行できる。なお、ldf命令の実行が完了するのと、アドレスタグのクリアは同時に行われていることになる。
【００９４】
＜ケース２＞
line16のldf命令が実行されるまでに、ストアデータ（１）、ストアデータ（２）がライトバックされたものとする。ストアデータ（３）がライトバックされようとするとき、アドレスタグに格納されたアドレスと一致する。このとき、フラッシュポインタはバッファ０を指し示している。バスコントローラはストアデータ（３）をライトバックし、フラッシュポインタをＮＵＬＬとする。
【００９５】
続いて、ストアデータ（４）、ストアデータ（５）がライトバックされる。ストアデータ（６）がライトバックされようとするとき、アドレスタグに格納されたアドレスと一致する。このとき、フラッシュポインタがＮＵＬＬを指し示している。バスコントローラはストアデータ（６）のライトバックをウェイトする。
【００９６】
さらに、line16のldf命令でアドレスタグがクリアされる。これにより、アドレスタグに格納されたアドレスと不一致し、ウェイトされていたストアデータ（６）のライトバックが実行される。つまり、line16のldf命令では、ストアデータ（２）0x0がロードされることになり、line17のld命令では、ストアデータ（６）0x4がロードされる。
【００９７】
このように、＜ケース１＞では、stf命令をトリガーとして、その時点でバッファに格納されているデータとアクセスアドレス群を把握し、前記アクセスアドレス群とldf命令のアクセスアドレスが一致するときに、フラッシュポインタがＮＵＬＬを指し示していないので、前記データがライトバックされるまでldf命令の完了をウェイトさせる。なお、line15とline16の間にld命令'が追加配置された場合を例にとって説明すると、前記アクセスアドレス群とこのld命令'のアクセスアドレスが一致するときに、前記データがライトバックされるまでld命令'の完了をウェイトさせることができる。
【００９８】
また、＜ケース２＞では、第１の命令の後に発行されたst命令のデータはバッファに格納され、前記アクセスアドレス群とst命令のアクセスアドレスが一致しなければライトバックされ、もし一致しかつフラッシュポインタがＮＵＬＬを指し示していなければライトバックされ、もし一致しかつフラッシュポインタＮＵＬＬを指し示していれば、ldf命令が完了するまでは、ライトバックされない。
【００９９】
これにより、ライト完了をチェックするロード命令とフラッシュトリガーとなる命令の間に、ライトバック対象となる命令と同一アドレスにストアする命令を配置することが可能となり、より有効にプログラムを記述できる。
【０１００】
なお、実施の形態３では、line16をldf命令とし、そのロードアドレスをアドレスバッファに保持されたアドレスと同一のアドレスとしていた。
【０１０１】
この変形例として、line16をld命令とし、そのロードアドレスをアドレスバッファに保持されたアドレスと同一のアドレスにしてもよい。この場合は、プロセッサから出力されるロードアドレスとアドレスバッファに保持された何れかのアドレスとが一致することで、アドレスバッファがクリアされる。
【０１０２】
また、line16をldf命令とし、そのロードアドレスをアドレスバッファに保持されたアドレスと異なるアドレスにしてもよい。この場合は、ldf命令という特定の命令に応じてアドレスバッファがクリアされる。このように、第２の命令をアドレスバッファに保持されたアドレスを対象とするロード命令以外の命令とすることもでき、プログラムの自由度が向上する。
【０１０３】
＜実施の形態４＞
実施の形態４のバスコントローラは、複数のバッファ部を有し、stf命令をトリガーとして、その時点でバッファに格納されているデータを把握してバッファ部を切り替え、前記データのみがスレーブデバイスに書き込みされるまでldf命令の完了をウェイトさせ、stf命令に後続するst命令のデータは切り替えられたバッファ群に格納され、ldf命令が完了するまえにスレーブデバイスに書き込まれるように構成されている。
【０１０４】
図１３は、実施の形態４におけるプロセッサ、デバイスおよびバスコントローラの構成を示すブロック図である。同図の構成は、実施の形態３で説明した図１０の構成と比較して、バスコントローラ３００の代わりにバスコントローラ４００を備える点が異なる。バスコントローラ４００は、バスコントローラ３００と比較して、バッファ部３１０の代わりにバッファ部４１０ａおよびバッファ部４１０ｂを備える点と、新たにカレントポインタ４１１およびセレクタ４１２を備える点とが異なる。同じ符号の構成要素は同じなので説明を省略し、以下異なる点を中心に説明する。
【０１０５】
便宜上、バッファ部４１０ａをバッファＡと、バッファ部４１０ｂをバッファＢと呼ぶ。
【０１０６】
バッファ部４１０ａ、４１０ｂは、それぞれバッファ部３１０と同様の構成である。
カレントポインタ４１１は、バッファ部４１０ａ、４１０ｂの一方を指すポインタを保持する。カレントポインタが指し示すバッファ部にはプロセッサ１からのストアデータを保持する。フラッシュトリガーが発生すると、カレントポインタが指し示すバッファ部にフラッシュポインタがセットされ、その後カレントポインタが切り替えられる。
【０１０７】
セレクタ４１２は、バッファ部４１０ａ、４１０ｂからの出力データのうち、フラッシュポインタがＮＵＬＬでない方の出力データを選択し、両方のフラッシュポインタがＮＵＬＬである場合には、カレントポインタ４１１が指す方の出力データを選択する。
【０１０８】
図１４は、バッファ部４１０ａと４１０ｂの動作および切り替えを示す説明図である。バスコントローラ４００は、（ａ）バッファリングするバッファの選択処理、（ｂ）フラッシュトリガーが発生したときの切り替え処理、（ｃ）ライトバックデータの選択処理、（ｄ）フラッシュトリガーが発生しない場合の選択処理を以下のように行う。
【０１０９】
（ａ）プロセッサ１からのストアデータをバッファリングするバッファの選択処理として、バスコントローラ４００は、プロセッサ１からのストアデータを保持するバッファ部を、カレントポインタ４１１によって指し示す。つまり、カレントポインタ４１１が指し示すバッファ部にプロセッサ１からのストアデータがバッファリングされる。
【０１１０】
（ｂ）フラッシュトリガーが発生したとき、バスコントローラ４００は、フラッシュポインタをカレントポインタが指し示すバッファ部のフラッシュポインタにセットし、カレントポインタを切り替える。
【０１１１】
（ｃ）ライトバックデータの選択処理として、バスコントローラ４００は、フラッシュポインタがＮＵＬＬでない場合、フラッシュポインタがＮＵＬＬになるまでは、プレビアスポインタ（カレントポインタが指し示していないバッファを指し示す。）にバッファリングされたストアデータをライトバックするように、各メモリ制御部３１３とセレクタ４１２を制御する。
【０１１２】
フラッシュポインタがＮＵＬＬの場合、カレントポインタが指し示しているバッファにバッファリングされたストアデータをライトバックするように、各メモリ制御部２１３とセレクタ４１２を制御する。
【０１１３】
（ｄ）フラッシュトリガーが発生しない場合には、バスコントローラ４００は、カレントポインタが指し示すバッファにストアデータがバッファリングされ、カレントポインタが指し示しているバッファからライトバックするように、各メモリ制御部３１３とセレクタ４１２を制御する。
【０１１４】
次に、図６に示したプログラム２を使って動作例を説明する。カレントポインタはバッファＡを指し示しているものとする。
【０１１５】
line3のstf命令の実行により、最後にバッファに格納されたストアデータ（３）にフラッシュポインタがセットされる。このとき、バッファＡにストアデータ（１）、ストアデータ（２）、ストアデータ（３）が格納されている。
【０１１６】
この状態で、カレントポインタはバッファＢに切り替わる。
line6のst命令の実行により、ストアデータ（４）がバッファＢに格納される。
【０１１７】
line9のst命令の実行により、ストアデータ（５）がバッファＢに格納される。
line10のldf命令が実行されたときストアデータ（３）はバッファＡの先頭から２段目に格納されている。このときウェイト信号がアサートされているためロードは完了しない。
【０１１８】
ストアデータ（３）がバッファＡの先頭から書き出されると、line10のldf命令によるロードが完了する。
【０１１９】
このように、ライト完了をチェックするロード命令（line10のldf命令）とフラッシュトリガーとなる命令（line3のstf命令）の間にストア命令（line6,line9）を実行することができる。このストア命令でストアされるストアデータ（４）、ストアデータ（５）は、フラッシュトリガーにより切り替え後のカレントバッファＢにバッファリングされる。
【０１２０】
これにより、複数のバッファ群を有するプロセッサのバスコントローラであっても、フラッシュトリガーでバッファ群を切り替えながら、フラッシュしたいストアデータを限定することができる。フラッシュトリガーが発生した後、バッファリングできるストアデータの容量を、１バッファ群決まって確保できる。
【０１２１】
次いで、実施の形態４の変形例について説明する。
この変形例では、複数のバッファ群を有するプロセッサのバスコントローラであって、stf命令をトリガーとして、その時点でバッファに格納されているデータとアクセスアドレスを把握し、バッファ群を切り替え、前記データがスレーブデバイスに書き込みされるまでldf命令の完了をウェイトさせ、stf命令の後に発行されたst命令のデータは切り替えられたバッファ群に格納され、前記アドレスとst命令のアクセスアドレスが一致しなければ、ldf命令が完了するまえにスレーブデバイスに書き込みされ、もし一致しかつフラッシュポインタがＮＵＬＬを指し示していなければ書き込みされ、もし一致しかつフラッシュポインタＮＵＬＬを指し示していれば、ldf命令が完了するまでは書き込みされないように構成される。
【０１２２】
そのため、実施の形態４の前半で説明した処理に追加してアドレスの比較と、アドレスタグのクリアが次のように行われる。
【０１２３】
アドレスの比較は、プレビアスポインタが指し示すアドレスタグから一致するアドレスを比較、検索する処理である。ここで、フラッシュポインタがセットされたバッファはポインタの切り替えによってプレビアスポインタが指し示している。
【０１２４】
アドレスタグのクリアは、プレビアスポインタが指し示すアドレスタグをクリアする処理である。
【０１２５】
次いで、図１２に示したプログラム例４を使って動作例をケース１とケース２に分けて説明する。
【０１２６】
＜ケース１＞
今、カレントポインタはバッファＡを指し示しているものとする。
【０１２７】
line6のstf命令の実行により、最後にバッファに格納されたストアデータ（３）にフラッシュポインタがセットされる。同時に、ストアデータ（１）とストアデータ（２）とストアデータ（３）のアドレスがアドレスタグに保持される。このstf命令によるフラッシュトリガーによって、カレントポインタはバッファＢに切り替わる。
【０１２８】
line9のst命令の実行により、ストアデータ（４）がバッファＢに格納される。
line12のst命令の実行により、ストアデータ（５）がバッファＢに格納される。
【０１２９】
まだ、ストアデータ（６）はバッファに格納されていないものとする。このときフラッシュポインタはＮＵＬＬでない。
【０１３０】
line16のldf命令が実行されたとき、アドレスタグと、ldf命令のソースアドレスが一致する。そのために、ウェイト信号がアサートされ、ロードは完了しない。さらに、ストアデータ（３）がバッファＡの先頭から書き出されると、アドレスタグがクリアされ、ウェイト信号が解除されてからロードが完了する。このように、ライト完了をチェックするロード命令（第２の命令）とフラッシュトリガーとなる命令（第１の命令）の間にストア命令を実行することができる。なお、ldf命令の実行が完了するのと、アドレスタグのクリアは同時に行われていることになる。
【０１３１】
＜ケース２＞
line16のldf命令が実行されるまでに、ストアデータ（１）、ストアデータ（２）がバッファＡからライトバックされたものとする。さらに、バッファＡからストアデータ（３）がライトバックされようとするとき、プレビアスポインタが指し示すバッファＡのアドレスタグに格納されたアドレスと一致する。このとき、フラッシュポインタはバッファ０を指し示している。バスコントローラはストアデータ（３）をライトバックし、フラッシュポインタをＮＵＬＬとする。フラッシュポインタがＮＵＬＬとなるまでは、プレビアスポインタが指し示すバッファＡからのライトバックが発生する。
【０１３２】
続いて、カレントポインタが指し示すバッファＢからストアデータ（４）、ストアデータ（５）がライトバックされる。ストアデータ（６）がライトバックされようとするとき、プレビアスポインタが指し示すバッファＡのアドレスタグに格納されたアドレスと一致する。このとき、フラッシュポインタがＮＵＬＬを指し示している。バスコントローラはストアデータ（６）のライトバックをウェイトする。
【０１３３】
さらに、line16のldf命令でプレビアスポインタが指し示すバッファＡのアドレスタグがクリアされる。アドレスタグに格納されたアドレスと不一致し、ウェイトされていたストアデータ（６）のライトバックが実行される。
【０１３４】
これにより、複数のバッファ群を有するプロセッサのバスコントローラであっても、フラッシュトリガーでバッファ群を切り替えながら、アドレスタグによるアドレス比較処理ができる。フラッシュトリガーが発生した後、バッファリングできるストアデータの容量を、１バッファ群決まって確保できる。
【０１３５】
なお、上記各実施の形態ではバスコントローラは、部分的フラッシュと全部フラッシュとを選択的に実行するように構成してもよい。その場合、プロセッサ１は２種類のフラッシュトリガーを出力し、バッファ部はフラッシュトリガーの種類に応じて部分的フラッシュと全部フラッシュとを選択的に実行すればよい。
【産業上の利用可能性】
【０１３６】
本発明にかかるバスコントローラは、バッファを有し、レイテンシを隠蔽してプロセッサの実行性能を向上させるために有用である。
【図面の簡単な説明】
【０１３７】
【図１】図１は、実施の形態１におけるプロセッサ、デバイスおよびバスコントローラの構成を示すブロック図である。
【図２】図２は、第１の命令が実行されたときのバッファの様子を示す図である。
【図３】図３は、部分的フラッシュ中のバッファの様子を示す図である。
【図４】図４は、部分的フラッシュ中のバッファの様子を示す図である。
【図５】図５は、部分的フラッシュが完了したときのバッファの様子を示す図である。
【図６】図６は、プログラム例２を示す図である。
【図７】図７は、実施の形態２におけるプロセッサ、デバイスおよびバスコントローラの構成を示すブロック図である。
【図８】図８は、ＦＩＦＯおよびアドレス比較部の詳細な構成を示すブロック図である。
【図９】図９は、プログラム例３を示す図である。
【図１０】図１０は、実施の形態３におけるプロセッサ、デバイスおよびバスコントローラの構成を示すブロック図である。
【図１１】図１１は、ＦＩＦＯおよびアドレス比較部の詳細な構成を示すブロック図である。
【図１２】図１２は、プログラム例４を示す図である。
【図１３】図１３は、実施の形態４におけるプロセッサ、デバイスおよびバスコントローラの構成を示すブロック図である。
【図１４】図１４は、バッファ部４１０ａと４１０ｂの切り替えを説明する図である。
【図１５】図１５は、従来技術におけるプロセッサ、デバイスおよびバスコントローラの構成を示すブロック図である。
【符号の説明】
【０１３８】
１  プロセッサ
２  ＤＭＡＣ
３  メモリ
４  デバイス
５  デバイス
１００  バスコントローラ
１０１  クロスバスイッチ
１０２  ウェイト回路
１１０  バッファ部
１１１  ＦＩＦＯ
１１２  フラッシュポインタ
１１３  メモリ制御部
２０２  ウェイト回路
２１０  バッファ部
２１１  ＦＩＦＯ
１１２  フラッシュポインタ
２１３  メモリ制御部
２１４  アドレス比較部
２１ｄ〜２４ｄ  データラッチ
２１ａ〜２４ａ  アドレスラッチ
２５〜２８  比較器
２９  判定部
３０  論理和
３１  Ｄフリップフロップ
３２  Ｄフリップフロップ
３０２  ウェイト回路
３１０  バッファ部
３１４  アドレス比較部
４１０ａ  バッファ部
４１０ｂ  バッファ部
４１１  カレントポインタ
４１２  セレクタ
【図１】
0004370327.tif 000002
【図２】
0004370327.tif 000003
【図３】
0004370327.tif 000004
【図４】
0004370327.tif 000005
【図５】
0004370327.tif 000006
【図６】
0004370327.tif 000007
【図７】
0004370327.tif 000008
【図８】
0004370327.tif 000009
【図９】
0004370327.tif 000010
【図１０】
0004370327.tif 000011
【図１１】
0004370327.tif 000012
【図１２】
0004370327.tif 000013
【図１３】
0004370327.tif 000014
【図１４】
0004370327.tif 000015
【図１５】
0004370327.tif 000016