(57)【特許請求の範囲】
【請求項１】
複数の第１ノードを有し、当該第１ノードの保持する第１データを第１方向に位置する隣のノードへ移動させる第１パイプラインと、
前記第１パイプラインの第１ノードの各々に対応する複数の第２ノードを有し、当該第２ノードの保持する第２データを前記第１方向と逆の第２方向に位置する隣のノードへ移動させる第２パイプラインと、
前記第１パイプラインの第１ノードの１つを着目ノードとして、当該着目ノードに保持されている第１データと、当該着目ノードに対応する第２ノードに保持されている第２データと、を比較する第１比較手段と、
前記着目ノードに保持されている第１データと、当該着目ノードに対応する第２ノードより前記第２方向について１つ上手又は下手の第２ノードに保持されている第２データと、を比較する第２比較手段とを備えることを特徴とする情報処理装置。
【請求項２】
駆動信号が有効である場合に、前記第２パイプラインは複数の第２ノードが保持する夫々の第２データを前記第２方向に１つ下手にある第２ノードへ移動させ、
前記第２比較手段は、前記駆動信号が有効である場合に比較処理を実行し、前記駆動信号が無効である場合に比較処理を実行しないことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第１、第２比較手段は、前記第１パイプラインを移動する前記第１データと、前記第２パイプラインを移動する前記第２データとの一致を判定することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
キャッシュデータを管理する情報処理装置であって、
前記第１パイプラインは、アドレスを前記第１データとして移動させ、前記第２パイプラインは、前記キャッシュデータのキャッシュ・タグを前記第２データとして移動させ、
前記第１、第２比較手段は前記第１パイプラインを移動する前記アドレスと前記第２パイプラインを移動する前記キャッシュ・タグとの一致を判定することを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記第１パイプラインと前記第２パイプラインとがカウンターフロー・パイプラインであることを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
処理装置から要求されたデータのキャッシュヒットを判定する情報処理装置であって、
複数の第１ノードを有し、当該第１ノードに対して第１方向に位置する隣のノードへ当該第１ノードが保持する前記要求されたデータのアドレスを移動させる第１パイプライン手段と、
前記第１パイプラインの第１ノードの各々に対応する複数の第２ノードを有し、当該第２ノードに対して前記第１方向と逆の第２方向に位置する隣のノードへ当該第２ノードが保持するキャッシュ・タグを移動させる第２パイプラインと、
前記第１パイプラインの第１ノードの１つを着目ノードとして、当該着目ノードに保持されている第１データと、当該着目ノードに対応する第２ノードに保持されている第２データと、を比較する第１比較手段と、
前記着目ノードに保持されている第１データと、当該着目ノードに対応する第２ノードより前記第２方向について１つ上手の第２ノードに保持されている第２データと、を比較する第２比較手段と、
前記第１比較手段と前記第２比較手段の結果に基づいて前記要求されたデータのキャッシュがヒットしたか否かを判定する判定手段と
を有することを特徴とする情報処理装置。
【請求項７】
前記要求されたデータのキャッシュがヒットしなかったと前記判定手段が判定した場合、前記第１データのアドレスを前記キャッシュ・タグとして入力する入力手段をさらに備えることを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記第１パイプラインと前記第２パイプラインは複数のフリップフロップを有し、夫々のフリップフロップには同一の駆動信号が供給されることを特徴とする請求項１乃至７のいずれか１項に記載の情報処理装置。
【請求項９】
前記第１ノードと前記第２ノードは１対１の関係で対応していることを特徴とする請求項１乃至８のいずれか１項に記載の情報処理装置。
【請求項１０】
前記第１ノードと前記第２ノードは１対複数の関係で対応していることを特徴とする請求項１乃至８のいずれか１項に記載の情報処理装置。
【請求項１１】
前記第１パイプラインと前記第２パイプラインは夫々の保持するデータを同時にシフトさせることを特徴とする請求項１乃至１０のいずれか１項に記載の情報処理装置。
【請求項１２】
第１方向へデータを流す複数のフリップフロップを有する第１パイプラインと、
第２方向へデータを流す複数のフリップフロップを有する第２パイプラインと、
前記第１パイプラインのフリップフロップの少なくとも１つについて、当該フリップフロップに入力されるデータと当該フリップフロップに対応する前記第２パイプラインのフリップフロップに入力されるデータ及び当該フリップフロップから出力されるデータとを参照する参照手段と
を有することを特徴とする情報処理装置。
【請求項１３】
前記フリップフロップの夫々は同一の駆動信号を参照して動作することを特徴とする請求項１２の情報処理装置。
【請求項１４】
前記第２パイプラインのフリップフロップに供給するクロックを停止させることで前記第２パイプラインのデータの流れを停止させることを特徴とする請求項１３に記載の情報処理装置。
【請求項１５】
複数の第１ノードを順に流れる第１データと前記第１データと逆方向の順で複数の第２ノードを流れる第２データとを扱うカウンターフロー・パイプライン構成の回路であって、
前記第１ノードの保持するデータと当該第１ノードに対応する第２ノードの保持するデータと少なくとも当該第２ノードの前及び後の第２ノードの保持するデータとを参照する参照手段を有することを特徴とする回路。
【請求項１６】
複数の第１ノードについて、当該第１ノードの保持する第１データを第１方向に位置する隣のノードへ移動させる第１パイプライン工程と、
前記第１パイプラインの第１ノードの各々に対応する複数の第２ノードについて、当該第２ノードの保持する第２データを前記第１方向と逆の第２方向に位置する隣のノードへ移動させる第２パイプライン工程と、
前記第１パイプラインの第１ノードの１つを着目ノードとして、当該着目ノードに保持されている第１データと、当該着目ノードに対応する第２ノードに保持されている第２データと、を比較する第１比較工程と、
前記着目ノードに保持されている第１データと、当該着目ノードに対応する第２ノードより前記第２方向について１つ上手又は下手の第２ノードに保持されている第２データと、を比較する第２比較工程と
を備えることを特徴とする情報処理方法。
【請求項１７】
複数の第１ノードを順に流れる第１データと前記第１データと逆方向の順で複数の第２ノードを流れる第２データとを扱うカウンターフロー・パイプライン構成の回路による情報処理方法であって、
前記第１ノードの保持するデータと当該第１ノードに対応する第２ノードの保持するデータと少なくとも当該第２ノードの前及び後の第２ノードの保持するデータとを参照する参照工程を有することを特徴とする情報処理方法。
【請求項１８】
第１方向へデータを流す複数のフリップフロップを有する第１パイプラインと、第２方向へデータを流す複数のフリップフロップを有する第２パイプラインとを有するカウンターフロー・パイプライン構成の回路を有する情報処理装置を用いる情報処理方法であって、
前記第１パイプラインのフリップフロップの少なくとも１つについて、当該フリップフロップに入力されるデータと当該フリップフロップに対応する第２パイプラインのフリップフロップに入力されるデータ及び当該フリップフロップから出力されるデータとを参照する参照工程を有することを特徴とする情報処理方法。
【請求項１９】
コンピュータを、請求項１乃至１４のいずれか１項に記載の情報処理装置の有する各手段として機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、相互接続されたノードを含む２方向パイプラインで相互に逆方向に移動するデータ要素を処理／管理する技術に関する。
【背景技術】
【０００２】
複数のノードを有する２つのデータ・ストリームにおいて、２つのデータ・ストリーム間でそれぞれのデータ・ストリームの各ノードで保持するデータ要素を比較する処理を実行するための回路やアプリケーションがある。例えば、複数のデータを有する第１のデータ・ストリームの要素について、第２のデータ・ストリームの要素の少なくとも１つと一致するかどうかを判定する際に総当りで比較する処理を実行する。このような処理では、一方の方向にデータ要素を移動させる第１のデータ・ストリームの有するデータ要素と、他の方向にデータ要素を移動（もしくは停止）させる第２のデータ・ストリームの有するデータ要素を比較する。しかしながら後述するように、相互に逆の方向にデータ要素を移動させる場合、各ノードにおけるデータ要素の比較が正しく行われないことがある。
【０００３】
特許文献１には、相互に逆の方向にデータ要素を移動させるパイプライン（データストリーム）において、パイプラインの各ステージで夫々のデータ要素を比較する２方向パイプライン技術（カウンターフロー・パイプライン技術）が記載されている。この技術は、規則正しい経路に沿った逆方向への不規則なデータ・フローを提供して、２つのデータ・セットを対称的に扱い、簡単で規則正しい構造を形成している。その結果、一般的なＲＩＳＣ（Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ）プロセッサ特有の複雑なバイパス回路を不要にしている。この技術では、前述のバイパス回路を介して直接通信せずに、パイプライン中の各ステージはそのステージの前後のステージとだけ通信し、データ要素は使用される前にいくつかのステージを通過する。このため、データ送信の遅延を最小限に抑えるという特徴を有している。
【０００４】
また、一般的な同期パイプラインは、ステージ間のハンドシェーク・プロトコルによって動作する。そのようなハンドシェーク・プロトコルでは、受信側が新しいデータ要素を収容するための空間があることを送信側に示し、データ要素が利用可能な場合、送信側はそのデータ要素を取得するべきであることを受信側に示してからデータ要素を送信する。したがって、このような一般的な同期パイプラインのハンドシェーク・プロトコルでは、データをいつ転送すべきかを決定するのは送信側であり、「バブル（データ・ストリーム中のデータの空き）」が発生する可能性が向上して処理効率が落ちる場合がある。この技術では、あるステージのデータ要素がいつ次のステージに移動できるかを、同一のパイプラインで隣接するステージが異なるパイプラインと相互に決定している。
【０００５】
さらに、この従来技術は、データ要素が送られる際に通過する特定のステージやデータ要素に対して実行される予定の動作に応じて、データ要素を不規則なスケジュールで移動させる構成を有している。この構成により、相互に逆の方向にデータ要素を移動させるデータ・ストリームにおいて、各ノードにおけるデータ要素の比較が正しく行われない問題を抑制している。
【０００６】
そこで、まず図９を用いてこのアプリケーションのデータ要素の比較が正しく動作しないケースについて詳細に説明する。図９には互いに逆方向にデータ要素を移動させる２つのパイプライン回路の一部が記載されている。下側にある第１パイプラインは「上手」である図面上の左側から「下手」である図面上の右側に向かってデータ要素が移動する。一方、上側にある第２パイプラインは「上手」である図面上の右側から「下手」である図面上の左側に向かってデータ要素が移動する。図９（ａ）は、前述の問題が発生しないケースであり、第１パイプラインが動作（データ要素が移動）し、第２パイプラインが停止（データ要素が移動しない）しているケースを示している。図９（ａ−１）は、時刻［Ｔ］の状態を示し、図９（ａ−２）は、時刻［Ｔ］のある一定時間後の時刻［Ｔ＋１］の状態を示し、図９（ａ−３）は、時刻［Ｔ＋１］のさらに一定時間後の時刻［Ｔ＋２］の状態を示している。その結果、第１パイプラインは動作し、「上手」である図面上の左側から「下手」である図面上の右側にパイプライン・ステージに保持されているデータ要素Ｗ、Ａ（０）、Ａ（１）、Ａ（２）、Ｂ，Ｃが移動している。ここでＡ（０）、Ａ（１）、Ａ（２）は説明の為に括弧書きで表記することで区別しているだけであって、実際は同等と判定されるべきデータである。第１パイプラインと第２パイプラインの対応する各ステージは、判定（比較）回路で互いに接続されている。
【０００７】
図９（ａ−１）の時刻［Ｔ］のとき、各ステージの判定結果は第１パイプラインの「下手」から順に以下のようになる。まず第１パイプラインの一番下手のステージでは、データ要素ＷとＡの比較となって一致しないので、判定（比較）回路は＜偽＞と判定する。以降のステージについても、データ要素Ａ（０）とＺと、データ要素Ａ（１）とＹと、データ要素Ａ（２）とＸと、を夫々比較して＜偽＞と判定する。
【０００８】
次に時間が経過し、図９（ａ−２）の時刻［Ｔ＋１］のとき、第１パイプラインのデータ要素は１ステージだけ「下手」に移動する。各ステージの判定結果は第１パイプラインの「下手」から順に以下のようになる。まず、データ要素Ａ（０）とＡの比較となり、判定（比較）回路は＜真＞と判定する。以降のステージでは、データ要素Ａ（１）とＺの比較と、データ要素Ａ（２）とＹと、データ要素ＢとＸと、を夫々比較して＜偽＞と判定される。
【０００９】
さらに時間が経過し、図９（ａ−３）の時刻［Ｔ＋２］のとき、第１パイプラインのデータ要素は１ステージだけさらに「下手」に移動する。各ステージの判定結果は第１パイプラインの「下手」から順に以下のようになる。まず、データ要素Ａ（１）とＡの比較となり、判定（比較）回路は＜真＞と判定する。以降のステージでは、データ要素Ａ（２）とＺの比較と、データ要素ＢとＹと、データ要素ＣとＸと、を夫々比較し＜偽＞と判定する。
【００１０】
以上のように、第１パイプラインのデータ要素は時間の経過とともにステージを移動するが、第２パイプラインの「上手」にあるデータ要素Ａとの比較は、第１パイプラインのデータ要素Ａ（０）、Ａ（１）共に正しく比較される。このように第１パイプラインと第２パイプラインで一方が動作し、一方が停止しているケースでは、データ要素の比較は正しく動作する。
【００１１】
次に、第１パイプラインと第２パイプラインの両方が動作するケースを図９（ｂ）に示す。図９（ｂ−１）〜（ｂ−３）は夫々、図９（ａ−１）〜（ａ−３）と同様の時刻における状態を示している。第１パイプラインは、図９（ａ）と同様に動作するので説明を省略する。一方、第２パイプラインは、図９（ａ）とは異なり、「上手」である図面上の右側から「下手」である図面上の左側にパイプライン・ステージに保持されているデータ要素Ｘ、Ｙ、Ｚ、Ａ、Ｂ、Ｃも移動している。
【００１２】
以下、図９（ａ）同様に、第１パイプラインと第２パイプラインの対応する各ステージにおける判定（比較）回路の判定結果を説明する。図９（ｂ−１）の時刻［Ｔ］のとき、各ステージの判定結果は第１パイプラインの「下手」から順に、以下のようになる。まず第１パイプラインの一番下手の判定（比較）回路は、データ要素ＷとＡとを比較し、一致しないので＜偽＞と判定する。以降のステージでも判定（比較）回路は、データ要素Ａ（０）とＺと、データ要素Ａ（１）とＹと、データ要素Ａ（２）とＸと、を夫々比較し＜偽＞と判定する。
【００１３】
次に時間が経過し、図９（ｂ−２）の時刻［Ｔ＋１］のとき、第１パイプラインのデータ要素と第２パイプラインのは１ステージだけ夫々の下手に移動する。各ステージの判定結果は第１パイプラインの「下手」から順に以下のようになる。まず、判定（比較）回路は、データ要素Ａ（０）とＢとを比較し＜偽＞と判定する。次のステージでは、判定（比較）回路はデータ要素Ａ（１）とＡとを比較し＜真＞と判定する。以降のステージでは判定（比較）回路は、データ要素Ａ（２）とＺと、データ要素ＢとＹと、を夫々比較して＜偽＞と判定する。
【００１４】
さらに時間が経過し、図９（ｂ−３）の時刻［Ｔ＋２］のとき、第１パイプラインのデータ要素と第２パイプラインのデータ要素は１ステージだけ夫々の「下手」に移動する。各ステージの判定結果は第１パイプラインの「下手」から順に以下のようになる。まず判定（比較）回路は、データ要素Ａ（１）とＣとを比較し、一致しないので＜偽＞と判定する（ただし、Ａ（１）は図９（ｂ−２）のときに判定（比較）回路で＜真＞と判定済みである）。以降のステージで判定（比較）回路は、データ要素Ａ（２）とＢと、データ要素ＢとＡと、データ要素ＣとＺと、を夫々比較して＜偽＞と判定する。
【００１５】
以上のように、第２パイプラインの「上手」にあるデータ要素Ａと第１パイプラインのデータ要素Ａ（１）は比較されたが、データ要素Ａ（０）とＡ（２）は比較されることがなかった。例えば、第１パイプラインの夫々のデータ要素が第２パイプラインの夫々のデータ要素の少なくとも１つと一致する時に、この一致した第１パイプラインのデータ要素を一致すると判定する場合、図９（ｂ−１）〜（ｂ−ｃ）の処理では正しい判定ができていない。これは、第１パイプラインと第２パイプラインの両方が逆方向に移動するため、両パイプラインの相対移動速度が２倍になることに由来する。具体的には、時刻［Ｔ］〜時刻［Ｔ＋２］の間に、図９（ａ）のケースでは第１パイプラインのデータ要素Ｗ、Ａ（０）、Ａ（１）の比較が完了するだけである。これに対して、図９（ｂ）のケースでは第１パイプラインのデータ要素Ｗ、Ａ（０）、Ａ（１）、Ａ（２）、Ｂの比較が完了している。このように図９（ｂ）のケースは図９（ａ）のケースと比較して判定時間が短くなる代わりに、データ要素の比較漏れが発生してしまう。
【００１６】
前述のように、特許文献１に記載の技術はデータ要素が移動する際に通過する特定のステージおよびデータ要素に対し、実行予定の動作に応じてデータ要素を不規則なスケジュールで移動させることで、上記問題を解決している。具体的には、第１パイプラインと第２パイプラインの各ステージにおいてステージ状態を監視している。上記の問題が起こるケースの特定ステージにおいては、２方向のパイプラインの両ステージを停止し、比較が完了してから、その特定ステージのデータ要素の移動を許可するのである。この工夫により比較の完了前に２方向のパイプライン上の関連するデータ要素が通り過ぎることを防いでいる。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特許第３５８８４８７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１８】
しかしながら、特許文献１の構成では、特定ステージにおいてステートマシーンによって、停止、比較の完了、データ要素の移動という動作状態を確認してからデータ要素を移動させるようにするため、スループットの向上は妨げられる。
【００１９】
したがって、本発明の目的は、移動するデータ要素をパイプラインの各ステージで確実かつ高速に相互作用させるための技術を提供することである。すなわち、処理もしくは管理対象のデータ要素数の増加に伴うレイテンシの増加を抑制できるような性能を有するデータ処理・管理技術を提供することを目的とする。
【課題を解決するための手段】
【００２０】
上記目的を達成するため、本発明によれば、
複数の第１ノードを有し、当該第１ノードの保持する第１データを第１方向に位置する隣のノードへ移動させる第１パイプラインと、
前記第１パイプラインの第１ノードの各々に対応する複数の第２ノードを有し、当該第２ノードの保持する第２データを前記第１方向と逆の第２方向に位置する隣のノードへ移動させる第２パイプラインと、
前記第１パイプラインの第１ノードの１つを着目ノードとして、当該着目ノードに保持されている第１データと、当該着目ノードに対応する第２ノードに保持されている第２データと、を比較する第１比較手段と、
前記着目ノードに保持されている第１データと、当該着目ノードに対応する第２ノードより前記第２方向について１つ上手又は下手の第２ノードに保持されている第２データと、を比較する第２比較手段とを備えることを特徴とする情報処理装置が提供される。
【００２１】
また、本発明によれば、
複数の第１ノードを順に流れる第１データと前記第１データと逆方向の順で複数の第２ノードを流れる第２データとを扱うカウンターフロー・パイプライン構成の回路であって、
前記第１ノードの保持するデータと当該第１ノードに対応する第２ノードの保持するデータと少なくとも当該第２ノードの前及び後の第２ノードの保持するデータとを参照する参照手段を有することを特徴とする回路が提供される。
【発明の効果】
【００２２】
本発明によれば、移動するデータ要素をパイプラインの各ステージで確実かつ高速に相互作用させるための技術を提供することができる。
【図面の簡単な説明】
【００２３】
【図１】データ処理装置の基本構成を示すブロック図。
【図２】データ処理装置の回路構成を示すブロック図。
【図３】データ処理装置の基本構成を示すブロック図。
【図４】データ処理装置の回路構成を示すブロック図。
【図５】データ処理装置を適用した画像処理装置の一例を示すブロック図。
【図６】データ処理装置を適用したキャッシュ判定装置を示すブロック図。
【図７】データ処理装置を適用したキャッシュ装置のアクセス調停部の処理フローを示すフローチャート。
【図８】データ処理装置を適用したキャッシュ装置のキャッシュ・メモリ調停部の処理フローを示すフローチャート。
【図９】従来技術の動作例を説明する図。
【図１０】データ処理装置の基本構成を示すブロック図。
【発明を実施するための形態】
【００２４】
以下、添付の図面を参照して本発明の好適な実施形態を説明する。
【００２５】
＜＜第１実施形態＞＞
（基本構成）
図１は、第１実施形態による情報処理装置（以降、データ処理装置と称す）の基本構成の一例を示すブロック図である。第１パイプライン１００は複数のノード（第１ノード）を有し、第１ノードの夫々は自身から第１方向へ１つ下手の第１ノードへ自身の保持するデータ要素（第１データ）を移動させる。また、第１パイプライン１００には、外部から、
・データ要素の有効信号である「ｖａｌｉｄ［ｌ−１］」１１２。
・データ信号である「ｄａｔａ［ｌ−１］」１１４。
・データ信号の処理結果である処理結果信号「ｔａｇ＿ｉｄ［ｌ−１］」１１６。
が入力される。この一連の入力信号は、種々のデータ処理を行うデータ処理回路１２０で処理された後、パイプライン・レジスタ１１０にて一時記憶される。
【００２６】
このパイプライン・レジスタ１１０は駆動信号である、「ｅｎａｂｌｅ」１０２が有効（アサート状態）であるときにデータ処理後のデータ要素を一時記憶して、以前に記憶したデータ要素を更新する。ただし、「ｅｎａｂｌｅ」１０２が無効（ディアサート状態）であるときは、このパイプライン・レジスタ１１０は、データ処理後のデータ要素を記憶せずに、以前に記憶したデータ要素をそのまま保持し、データ要素の更新は行わない。入力からパイプライン・レジスタ１１０に一時記憶されるまでの区間をステージ（第１ステージ）と呼ぶ。
【００２７】
次にパイプライン・レジスタ１１０から、
・データ要素の有効信号「ｖａｌｉｄ［ｌ］」１３２。
・データ信号「ｄａｔａ［ｌ］」１３４。
・処理結果信号「ｔａｇ＿ｉｄ［ｌ］」１３６。
が出力され、第１ステージと同様にデータ処理回路１４０で種々のデータ処理が行われる。そして処理後のデータ要素が第２パイプライン・レジスタ１３０にて一時記憶されるが、この記憶動作は第１ステージと同様である。パイプライン・レジスタ１１０からのデータ要素がパイプライン・レジスタ１３０に一時記憶されるまでの区間を第２ステージと呼ぶ。
【００２８】
さらにパイプライン・レジスタ１３０からデータ要素の
・有効信号「ｖａｌｉｄ［ｌ＋１］」１５２。
・データ信号「ｄａｔａ［ｌ＋１］」１５４。
・処理結果信号「ｔａｇ＿ｉｄ［ｌ＋１］」１５６。
が出力される。このような動作により、第１パイプライン１００では、データ要素（有効信号「ｖａｌｉｄ」とデータ信号「ｄａｔａ」と処理結果信号「ｔａｇ＿ｉｄ」）が「上手」である図面上の左側から「下手」である図面上の右側に移動する。
【００２９】
一方、本実施形態では、第１パイプライン以外に第２パイプラインが存在する。この第２パイプラインは複数のノード（第２ノード）を有し、第２ノードの夫々は自身から第２方向へ１つ下手の第２ノードへ自身の保持するデータ要素（第２データ）を移動させる。本実施形態では第１ノードと第２ノードは１対１の関係である（第１ノードと第２ノードは１対複数の関係でもよい）。第２方向は第１方向と論理的に逆方向であることを示し、必ずしも回路上で逆方向に流れる必要はない。図１において、この第２パイプライン１６０は「上手」である図面上の右側から「下手」である図面上の左側に向けてデータ要素を移動させる。第２パイプライン１６０には、データ要素の有効信号である「ｔａｇ＿ｖａｌｉｄ[ｉ＋２]」１７２と、データ信号である「ｔａｇ＿ｄａｔａ[ｉ＋２]」１７４が外部から入力される。これらの入力信号は、前述のデータ処理回路１４０で使用される。その後、パイプライン・レジスタ１７０にて一時記憶される。なお、図１に示すフリップフロップの夫々には不図示のクロック生成回路から動作クロックが供給される。
【００３０】
このパイプライン・レジスタ１７０は、駆動信号である「ｓｈｉｆｔ」１６２が有効（アサート状態）であるとき、一連の入力信号である
・有効信号「ｔａｇ＿ｖａｌｉｄ[ｉ＋２]」１７２。
・データ信号「ｔａｇ＿ｄａｔａ[ｉ＋２]」１７４。
を一時記憶し、以前に記憶したデータ要素を更新する。一方、駆動信号「ｓｈｉｆｔ」１６２が無効（ディアサート状態）であるときは、一連の入力信号を記憶せずに、以前に記憶したデータ要素をそのまま保持し、データ要素を更新しない。入力からパイプライン・レジスタ１７０に一時記憶されるまでの区間をステージ（第１ステージ）と呼ぶ。
【００３１】
次にパイプライン・レジスタ１７０から、データ要素の有効信号「ｔａｇ＿ｖａｌｉｄ［ｉ＋１]」１８２とデータ信号「ｔａｇ＿ｄａｔａ［ｉ＋１］」１８４が出力され、第１ステージと同様にデータ処理回路１２０に入力される。そして、データ処理後に第２のパイプライン・レジスタ１８０にて一時記憶されるが、この記憶動作は第１ステージと同様である。パイプライン・レジスタ１７０からデータ要素がパイプライン・レジスタ１８０に一時記憶されるまでの区間を第２ステージと呼ぶ。
【００３２】
さらに、パイプライン・レジスタ１８０からデータ要素の有効信号「ｔａｇ＿ｖａｌｉｄ[ｉ]」１９２とデータ信号「ｔａｇ＿ｄａｔａ[ｉ]」１９４が出力される。このような動作により第２パイプライン１６０では、データ要素である、有効信号「ｔａｇ＿ｖａｌｉｄ」とデータ信号「ｔａｇ＿ｄａｔａ」が、「上手」である図面上の右側から「下手」である図面上の左側に移動する。
【００３３】
（データ処理回路）
次にデータ処理回路１２０および１４０について詳細を説明する。本実施形態のデータ処理では、
・第１パイプラインの第１ノードの１つを着目ノードとして、当該着目ノードに保持されている第１データと、当該着目ノードに対応する第２ノードに保持されている第２データと、を比較する第１比較処理。
・着目ノードに保持されている第１データと、当該着目ノードに対応する第２ノードより第２方向について１つ上手の第２ノードに保持されている第２データと、を比較する第２比較処理。
を実行する。具体的には、２方向のデータ要素の「ｄａｔａ」と「ｔａｇ＿ｄａｔａ」を比較し、もし等しければ、そのときの「ｔａｇ＿ｄａｔａ」の格納番号（前述の“［ｉ］”、“［ｉ＋１］”、“［ｉ＋２］”）を「ｔａｇ＿ｉｄ」として記憶する。そして「ｔａｇ＿ｉｄ」は、第１パイプラインのデータ処理結果として、「ｄａｔａ」と同期して「上手」である図面上の左側から「下手」である図面上の右側に移動する。このようにして、「ｔａｇ＿ｉｄ［ｌ］」１３６には、第１パイプライン１００のｌ番目のデータ要素「ｄａｔａ［ｌ］」１３４と値が等しい第２パイプライン１６０のデータ要素の格納番号が設定されることになる。
【００３４】
具体的には、まずデータ処理回路１２０は、有効信号「ｔａｇ＿ｖａｌｉｄ[ｉ]」１９２が有効のときに、データ信号「ｄａｔａ［ｌ−１］」１１４と「ｔａｇ＿ｄａｔａ［ｉ］」１９４を参照手段としての比較回路１２２で比較する。そして比較結果が等しければ、セレクタ１２６は「ｔａｇ＿ｄａｔａ［ｉ］」１９４の格納番号である、「Ｎｏｄｅ＝ｉ」を選択する。この選択された値は、第１パイプライン１００の「ｄａｔａ［ｌ−１］」１１４と値が等しい第２パイプライン１６０のデータ要素の格納番号として、「ｔａｇ＿ｉｄ［ｌ−１］」１１６に設定される。
【００３５】
前述の通り、第１パイプライン１００と第２パイプライン１６０が同時に動作する場合、比較に失敗するケースがある。これに対処するためにデータ処理回路１２０は、さらに有効信号「ｔａｇ＿ｖａｌｉｄ[ｉ＋１]」１８２が有効のときに、データ信号「ｄａｔａ［ｌ−１］」１１４と「ｔａｇ＿ｄａｔａ［ｉ＋１］」１８４を比較回路１２４で比較する。そして比較結果が等しければ、セレクタ１２６は「ｔａｇ＿ｄａｔａ［ｉ＋１］」１８４の格納番号である、「Ｎｏｄｅ＝ｉ＋１」を選択する。
【００３６】
またセレクタ１２６は、上記２種類の比較結果がどちらも等しくないときは、入力された処理結果信号「ｔａｇ＿ｉｄ［ｌ−１］」１１６を選択する。外部からの駆動信号「ｓｈｉｆｔ」１６２が有効（アサート状態）であり、第２パイプライン１６０が動作する場合は、データ要素は「下手」である図面上の左側に移動する。したがって、この場合は「ｔａｇ＿ｄａｔａ」の格納番号も１つだけ左の格納番号を指すことが正しい。そこでセレクタ１２６の選択結果からデクリメンタ（減算器）１２８を用いて格納番号を１だけ減算することで調整する。
【００３７】
ここで格納番号の選択手法について補足説明しておく。格納番号は「Ｎｏｄｅ＝ｉ」、「Ｎｏｄｅ＝ｉ＋１」、「ｔａｇ＿ｉｄ［ｌ−１］」１１６のいずれかが選択されるが、その選択基準は、例えば「数の大きいものを優先的に選択する」という単純なものでよい。例えば、データ信号「ｄａｔａ［ｌ−１］」１１４と「ｔａｇ＿ｄａｔａ［ｉ＋１］」１８４が等しいときに、外部からの駆動信号「ｓｈｉｆｔ」１６２が有効の場合を考える。この場合、前述の比較に失敗するケースの問題を回避するために「Ｎｏｄｅ＝ｉ＋１」を選択することが重要であるが、この動作は「数の大きいものを優先的に選択する」という手法に合致している。一方、外部からの駆動信号「ｓｈｉｆｔ」１６２が無効の場合は、前述の比較に失敗するケースの問題を回避する必要がなく、「Ｎｏｄｅ＝ｉ＋１」を選択する必要はない。しかしながら「Ｎｏｄｅ＝ｉ＋１」の選択の有無に関わらず、第１パイプラインの下手ステージである、第２ステージでもう一度データ信号「ｄａｔａ［ｌ］」１３４と「ｔａｇ＿ｄａｔａ［ｉ＋１］」１８４の比較が再評価される。このため、外部からの駆動信号「ｓｈｉｆｔ」１６２が無効の場合の第１ステージの「ｔａｇ＿ｄａｔａ［ｉ＋１］」１８４との比較は、どちらでもよい。逆に言えば、「数の大きいものを優先的に選択する」という手法で選択しても何ら差し支えがないことになる。このようにして選択された値は、「ｄａｔａ［ｌ−１］」１１４と値が等しい第２パイプライン１６０のデータ要素の格納番号を示す「ｔａｇ＿ｉｄ［ｌ−１］」１１６に設定されることになる。
【００３８】
図１はあくまで一例であり、もちろんセレクタ１２６に駆動信号「ｓｈｉｆｔ」１６２を代入して、外部からの駆動信号「ｓｈｉｆｔ」１６２が無効の場合、「Ｎｏｄｅ＝ｉ＋１」は選択しないという制御を行ってもよい。第１実施形態の一例では、比較回路１２２と比較回路１２４の両方ともが＜偽＞であったとき、入力データ信号「ｔａｇ＿ｉｄ［ｌ−１］」１１６を選択している。ここでは、外部からの駆動信号「ｓｈｉｆｔ」１６２が有効の場合、格納場所が「下手」に移動することに対処するため、格納番号を１だけ減算する調整をいずれにしても行う必要がある。このため、「Ｎｏｄｅ＝ｉ＋１」は選択しないという制御は行わず、「Ｎｏｄｅ＝ｉ＋１」を選択してから、格納番号を１だけ減算する調整を改めて行っている。
【００３９】
データ処理回路１４０についても同様である。まず、有効信号「ｔａｇ＿ｖａｌｉｄ[ｉ＋１]」１８２が有効のときに、データ信号「ｄａｔａ［ｌ］」１３４と「ｔａｇ＿ｄａｔａ［ｉ＋１］」１８４を比較回路１４２で比較する。そして比較結果が等しければ、セレクタ１４６は、「ｔａｇ＿ｄａｔａ［ｉ＋１］」１８４の格納番号である「Ｎｏｄｅ＝ｉ＋１」を選択する。第２パイプライン１６０の動作に備え、データ処理回路１４０は、さらに有効信号「ｔａｇ＿ｖａｌｉｄ[ｉ＋２]」１７２が有効のときに、データ信号「ｄａｔａ［ｌ］」１３４と「ｔａｇ＿ｄａｔａ［ｉ＋２］」１７４とを比較回路１４４で比較する。そして比較結果が等しければ、セレクタ１４６は「ｔａｇ＿ｄａｔａ［ｉ＋２］」１７４の格納番号である、「Ｎｏｄｅ＝ｉ＋２」を優先的に選択する。またセレクタ１４６は、上記２種類の比較結果がどちらも等しくないときは、処理結果信号「ｔａｇ＿ｉｄ［ｌ］」１３６を選択する。外部から駆動信号「ｓｈｉｆｔ」１６２が有効であり、第２パイプライン１６０が動作する場合、「ｔａｇ＿ｄａｔａ」の格納番号は１つだけ「下手」である図面上の右側に移動する。このため、セレクタ１４６の選択結果からデクリメンタ（減算器）１４８を用いて格納番号を１だけ減算する。このように、一致検出結果を調整し、簡易な処理により正確で高速なデータ処理を実現することができる。
【００４０】
以上のように本実施形態では、互に逆方向に移動させるデータ要素をパイプラインの各ステージで確実かつ高速に比較することが可能である。
【００４１】
本実施形態のデータ処理回路１２０および１４０の各々は、第１パイプライン１００の１つのデータ要素につき、第２パイプライン１６０の比較対象であるデータ要素との比較回路を持っている。さらに、データ処理回路１２０および１４０の各々は、第２パイプライン１６０が動作することを想定して第２パイプライン１６０の比較対象であるデータ要素に対し第２パイプライン１６０の「上手」のデータ要素との比較回路を新たに設けている。これにより、特許文献１の構成で生じる、特定ステージ毎にインターロック（内部ストール）が発生するという問題は回避できるので、常にデータ処理を停止することなく、高処理性能を実現することができる。
【００４２】
また、本実施形態では、２つのデータ要素が等しいときの格納場所を算出するために、データ処理回路１２０および１４０の各々は、第２パイプライン１６０が動作することを想定し、処理結果を１だけ減算するためのデクリメンタ（減算器）を備えている。そして、第２パイプラインのデータ要素の格納番号は、第２パイプラインの「下手」から「上手」に向けて「０、１、２、・・・、ｉ、ｉ＋１、ｉ＋２、・・・、Ｎ−１（ｉ、Ｎは正の数、ｉ＜Ｎ）」と増加するように予め割り振られている。このように割り振る利点については、後述する第３実施形態において説明する。また格納番号が逆順に割り振られている場合は、デクリメンタは当然、１だけ加算するためのインクリメンタになることは言うまでもない。
【００４３】
また本実施形態では、データ処理として、２方向に移動するデータ要素の比較と、比較結果が等しいときの格納場所の算出を行う場合の例を説明したが、データ処理の内容はこれに限られない。例えば、２方向に移動するデータ要素の比較の結果と、比較結果が等しいときに、この２方向に移動するデータ要素の四則計算の結果とをデータ処理結果としてもよい。図１０はこのような処理を行う回路の一例を示す図である。図１０の構成については＜＜その他の実施形態＞＞で補足する。また、２方向に移動するデータ要素の大小関係をデータ処理結果としてもよい。データ処理回路の構成により、削除、大小関係、交換（スワップ）など、様々な計算が実行できることは言うまでもない。
【００４４】
また図１の基本構成を組み合せて、合計８区間（８ステージ）のデータ処理装置の構成の一例を図２に記載する。図２の例では、第１パイプラインと第２パイプラインの８個のデータ要素を比較している。図２のＴａｇＳｌｏｔ[０]〜ＴａｇＳｌｏｔ[７]の各々は、図１記載の第２パイプラインのパイプライン・レジスタ１７０や１８０に対応する。ＤａｔａＳｌｏｔ［０］〜ＤａｔａＳｌｏｔ［７］の各々は、図１記載の第１パイプラインのパイプライン・レジスタ１１０や１３０に対応する。Ｊｕｄｇｅ［０］〜Ｊｕｄｇｅ［７］の各々は、図１記載のデータ処理回路１２０や１４０に対応する。このように、基本構成を連結することで多くのデータ要素をパイプライン動作で並列に分散比較することが可能となる。図２のデータ処理装置の構成の一例では、８個のデータ要素との比較を８ステージのパイプラインで実現している。ここでは、さらに外部からの駆動信号「ｓｈｉｆｔ」が有効であり、第２パイプラインが「下手」へ移動しても、処理性能を低下させることなく、安定した比較処理を実現できる。
【００４５】
一方、上記のような技術を用いた場合の適用例としては、例えば、多くのデータ要素をカウンターフロー・パイプライン構成で高速にデータ処理するような用途が考えられる。そのようなデータ処理を行う分野として画像処理分野やグラフィックス処理分野があげられる。このような分野では製品の高画質化や機能強化のために種々な画像処理が行われており、複数コンテンツ（画像、映像）を時分割多重で同時並行的に画像処理したり、半透明のテクスチャデータを複数枚、重ね合わせて表示したりする。このような画像処理の場合、ＤＲＡＭなどの外部メモリから適宜、必要な画像や映像を取り出して処理するが、外部メモリからのデータ取得を、キャッシュ装置を介して行うことが一般的である。
【００４６】
しかしながら、時分割多重の画像処理や半透明テクスチャを複数枚重ね合わせたりすると、様々な画像や映像を同時並行的に処理することになり、一つの画像や映像は細切れに外部メモリから取得される。一般的なキャッシュ技術の実装で、様々な画像や映像を細切れに外部メモリから取得すると、キャッシュ競合が頻発してキャッシュ性能を著しく低下させてしまう。一方、キャッシュ競合を回避するため、キャッシュ・タグのウェイ数を増やすことができるが、一般的なキャッシュ技術の実装では、非常に多いウェイ数に対応したときに判定回路のセレクタの論理段数が多くなり、タイミング収束が難しい。このため、高い動作周波数で動作することができなくなってしまう。同時にウェイ数を増やすことにより、キャッシュ競合時の置き換え制御も複雑となり、キャッシュ技術の実装が難しくなる。
【００４７】
例えば特許文献１に記載の技術では、処理対象となるデータ要素の数が増えるにつれて、パイプラインのステージ数が増えることになり、装置全体のレイテンシが長くなる。これは一方向のパイプライン上の１つのデータ要素と、他方向のパイプライン上のすべてのデータ要素とを、総当りで比較を行うときの判定時間が長くなることを意味する。
【００４８】
そこで、本実施例のデータ処理装置をキャッシュ技術として実装することで、高度な画像処理用途に使用可能な、キャッシュ・データを管理するための高速のフルアソシアティブ方式のキャッシュ装置を実現することができる。
【００４９】
また、上記と同様の処理をコンピュータにおいて２組のデータ列を用いてデータ処理する際に適用してもよい。すなわち、第１データ列から１つのデータ要素を取得（第１の取得）し、第２データ列から連続する２つのデータ要素を取得（第２の取得）する。次に、第２データ列の２つのデータ要素の各々について、第１データ列のデータ要素と第２データ列のデータ要素とをデータ処理する。ここで、第２データ列の先頭に新規データ要素が１つ追加された場合に、２つのデータ処理の結果のうち、第２データ列の先頭に近いデータ要素を用いたデータ処理の結果を出力する。このように処理を行うことで、互に逆方向に移動するデータ要素を確実かつ高速に相互作用させることができる。
【００５０】
＜＜第２実施形態＞＞
図３は、第２実施形態によるデータ処理装置の基本構成の一例を示すブロック図である。図３において、第１パイプライン３００は図の「上手」である左側から「下手」である図面上の右側に向けてデータが移動する。また第２パイプライン３６０は「上手」である図面上の右側から「下手」である図面上の左側に向けてデータが移動しており、第１実施形態と同様に第１パイプライン３００とはデータ要素の移動する向きが逆である。なお、図３における各種の信号の名称や意味は、図１を用いて説明した第１実施形態と同様であり、その説明をここでは割愛する。第２実施形態では、データ処理回路が第１実施形態と異なるため、データ処理回路について詳細説明する。なお図１のデータ処理回路とそこに含まれる回路要素が、図３では、比較回路３２１〜３２９と選択および減算回路３２０（セレクタ３４６とデクリメンタ３２８を含む）とに分かれている。
【００５１】
本実施形態では、２方向の一方（第１パイプライン）のデータ要素である１つのデータ信号「ｄａｔａ」と、他方（第２パイプライン）のデータ要素である複数のデータ信号「ｔａｇ＿ｄａｔａ」とを同時に比較する。もし１つでも等しい「ｔａｇ＿ｄａｔａ」がある場合、そのときの「ｔａｇ＿ｄａｔａ」の格納番号を「ｔａｇ＿ｉｄ」として記憶する。等しい「ｔａｇ＿ｄａｔａ」が複数ある場合は、最も「数の大きいものを優先的に選択する」などとしてよい。
【００５２】
まず「ｄａｔａ［ｌ］」３３４を９個の比較回路３２１〜３２９の各々に入力する。このとき、少なくとも「ｄａｔａ［ｌ］」３３４と比較する「ｔａｇ＿ｄａｔａ」の数（第２のノードの数に相当する）より１だけ多い比較回路を用意する必要がある。そして、９個の比較回路３２１〜３２９の各々に、比較対象である以下の組を接続する。
・有効信号「ｔａｇ＿ｖａｌｉｄ[ｉ]」とデータ信号「ｔａｇ＿ｄａｔａ［ｉ］」の組。
・有効信号「ｔａｇ＿ｖａｌｉｄ[ｉ＋１]」とデータ信号「ｔａｇ＿ｄａｔａ［ｉ＋１］」の組。
・有効信号「ｔａｇ＿ｖａｌｉｄ[ｉ＋２]」とデータ信号「ｔａｇ＿ｄａｔａ［ｉ＋２］」の組。
・有効信号「ｔａｇ＿ｖａｌｉｄ[ｉ＋３]」とデータ信号「ｔａｇ＿ｄａｔａ［ｉ＋３］」の組。
・有効信号「ｔａｇ＿ｖａｌｉｄ[ｉ＋４]」とデータ信号「ｔａｇ＿ｄａｔａ［ｉ＋４］」の組。
・有効信号「ｔａｇ＿ｖａｌｉｄ[ｉ＋５]」とデータ信号「ｔａｇ＿ｄａｔａ［ｉ＋５］」の組。
・有効信号「ｔａｇ＿ｖａｌｉｄ[ｉ＋６]」とデータ信号「ｔａｇ＿ｄａｔａ［ｉ＋６］」の組。
・有効信号「ｔａｇ＿ｖａｌｉｄ[ｉ＋７]」とデータ信号「ｔａｇ＿ｄａｔａ［ｉ＋７］」の組。
・有効信号「ｔａｇ＿ｖａｌｉｄ[ｉ＋８]」とデータ信号「ｔａｇ＿ｄａｔａ［ｉ＋８］」の組。
【００５３】
比較回路３２１〜３２９の各々の動作は、第１実施形態と同様であり、その９本の比較結果がセレクタ３４６に入力される。そしてセレクタ３４６は、比較結果が等しい「ｔａｇ＿ｄａｔａ」の格納番号である、「Ｎｏｄｅ＝ｉ」から「Ｎｏｄｅ＝ｉ＋８」のいずれかを選択する。またセレクタ３４６は、上記９種類の比較結果がいずれも等しくないときは、入力された処理結果信号「ｔａｇ＿ｉｄ［ｌ］」３３６を選択する。
【００５４】
第１実施形態同様に格納番号は「数の大きいものを優先的に選択する」という方法で選択する。そして、外部から駆動信号「ｓｈｉｆｔ」３６２が有効の場合、セレクタ３４６の選択結果からデクリメンタ（減算器）３４８を用いて格納番号を１だけ減算することで調整する。
【００５５】
第２実施形態では、第１実施形態の図２で示していた８区間（８ステージ）のパイプラインを１区間（１ステージ）で実現しており、１つの入力データに対する比較完了までのレイテンシが８から１に削減されている。また図２から分かるように第１実施形態では、比較回路が合計２×８個必要であったのに対して第２実施形態では比較回路の数は９個でよく、１６個から９個に削減されている。装置全体では、デクリメンタ（減算器）やパイプライン・レジスタの数も削減されるため、処理性能を低下することなく、レイテンシを縮めて応答性を高め、全体の回路規模も削減できている。
【００５６】
また、本実施形態では、カウンターフロー・パイプラインにおいて第１パイプラインの１つのデータ要素と第２パイプラインの複数のデータ要素とを漏れなく高速に比較できる。
【００５７】
また図１と図３の基本回路を組み合わせて、接点３３８＿１〜３３８＿９にパイプライン・レジスタを導入し、各々に図１のセレクタやデクリメンタ（減算器）を設けてもよい。この場合、セレクタ３４６の論理段数を分散し、回路全体のレイテンシを削減しつつ、さらに動作周波数を向上するような回路構成も実現可能である。
【００５８】
また図３の基本構成を組み合わせて、合計８区間（８ステージ）のデータ処理装置の構成の一例を図４に記載する。図４の一例では、第１パイプラインと第２パイプラインの６４個のデータ要素を比較している。図４のＴａｇＳｌｏｔ[０]からＴａｇＳｌｏｔ[６３]の各々は、図３記載の第２パイプラインのパイプライン・レジスタ３８０や３８１などに対応している。ＤａｔａＳｌｏｔ［０］から［７］の各々は、図１記載の第１パイプラインのパイプライン・レジスタ３１０や３３０などに対応し、Ｓｅｌ＆Ｄｃｒ［０］〜Ｓｅｌ＆Ｄｃｒ［７］の各々は、図３記載の選択および減算回路３２０などに対応している。基本構成を連結することで多くのデータ要素をパイプライン動作で並列に分散比較することが可能となる。図４の構成例では、６４個のデータ要素との比較を８ステージのパイプラインで実現し、さらに外部からの駆動信号「ｓｈｉｆｔ」が有効であり、第２パイプラインが「下手」へ移動しても、処理性能を低下させることなく、安定した比較処理を実現できる。
【００５９】
もちろん、上記の回路をコンピュータで仮想的に実現してもよい。これにより、２方向パイプラインにおいて移動するデータ要素をハード的に比較しても比較漏れを抑制することができる。
【００６０】
＜＜第３実施形態＞＞
（画像処理装置）
図５は、第３実施形態による画像処理装置の全体構成の一例を示すブロック図である。本実施形態の画像処理装置は、第１実施形態（図２）や第２実施形態（図４）で説明したデータ処理装置をフルアソシアティブ方式のキャッシュ判定装置として応用している。
【００６１】
ディスプレイなどの表示デバイスにメモリに格納された画像を回転したり、拡大・縮小したり、歪めたりして描画するような画像（映像）処理がある。また同様の処理をグラフィックス分野においては、テクスチャ・マッピング処理を用いて実現する。第３実施形態の画像処理装置の一例は、このテクスチャ・マッピング処理に用いてキャッシュデータを管理するためのキャッシュ装置を包含する。
【００６２】
図５記載の外部メモリであるＤＲＡＭ５６５には、キャッシュ対象データとしての画像データ５６８が予め格納されている。最終的にはラスタライズ結果５０２のような画像を表示デバイスのフレームバッファに描画する。ラスタライズ結果５０２に記載されている点線で囲まれた正方形は、表示デバイスの１画素を表している。画像処理装置では、ラスタライズ結果５０２の左上の画素から水平方向に１画素ずつ順に画像処理を行い、右上の画素まで処理した後、次の行の左画素から水平方向に１画素ずつ順に画像処理を行う（ラスタス走査の画像処理）。
【００６３】
アクセス対象の画素５０４（処理対象として要求されるデータ）に対応するテクスチャ座標５０５がラスタライズ装置（不図示）からアドレス算出部５１０へ入力される。次にテクスチャ座標５０５はアドレス算出部５１０にてアドレス５１５に変換される。
【００６４】
次にアドレス５１５は、キャッシュ判定部５２０でキャッシュ・ヒットもしくはキャッシュ・ミス（ミスヒット）が判定される。キャッシュ判定部５２０は、第１実施形態（図２）や第２実施形態（図４）で説明したデータ処理装置をフルアソシアティブ方式のキャッシュ判定装置として応用したものである。キャッシュ判定部５２０では、入力されたアドレス５１５をもとにキャッシュ判定結果５２５が生成される。
【００６５】
本実施形態の画像処理装置では、キャッシュのミス時のペナルティであるリフィル・レイテンシを隠蔽するためにノンブロッキングのキャッシュ機構を採用している。これは、たとえキャッシュ判定結果５２５がミスと判定されても、後に必要となる情報「ｔａｇ＿ｉｄ、ｍｉｓｓ＿ｈｉｔ＿ｆｌａｇ」５２８をＴａｇ＿ｉｄＦＩＦＯ５４０に退避する。そして、キャッシュ・ミスのキャッシュ・データをＤＲＡＭ５６５から読み出し、キャッシュ・メモリ（ＦＩＦＯ）５９０へ格納する処理が完了する前に、次の画素のキャッシュ判定処理を先行して実行する。このような処理を行うことでキャッシュ・ミスのキャッシュ・データをＤＲＡＭ５６５からキャッシュ・メモリ５９０（ＦＩＦＯ）へリフィルしている間にも、続く画素に対するキャッシュ判定を行うことができる。したがって、キャッシュ・ミス時の性能低下を抑制することが可能になる。
【００６６】
なお、後述するように、キャッシュがミスしたデータのアドレスは、アクセス調停部５３０によりアドレス送信ＦＩＦＯ５５０へ順次格納される。ＤＲＡＭコントローラ５６０はこのアドレス送信ＦＩＦＯ５５０を参照し、キャッシュ・ミスしたデータのアドレスが書き込まれている場合は、そのデータをＤＲＡＭ５６５から読み出して、テクスチャデータ受信ＦＩＦＯ５７０へ書き込んでいく。このようにして、ミスしたデータをＤＲＡＭ５６５から読み出してテクスチャデータ受信ＦＩＦＯ５７０へ書き込む一連の処理をリフィルという。後述するように、キャッシュメモリ調停部５８０は、Ｔａｇ＿ｉｄＦＩＦＯ５４０を参照し、ｍｉｓｓ＿ｈｉｔ＿ｆｌａｇが有効、すなわちキャッシュ・ミスしたデータを特定する。そして、当該データをテクスチャデータ受信ＦＩＦＯ５７０から読み出して、キャッシュ・メモリ５９０へ書き込む。キャッシュメモリ調停部５８０は、キャッシュヒットしたデータについてはキャッシュ・メモリ５９０から直接読み出して出力するが、キャッシュ・ミスしたデータについては、リフィルされたデータを外部へ出力することになる（５８５）。
【００６７】
（アクセス調停部）
アクセス調停部５３０は接続される３つのＦＩＦＯである、アドレス送信ＦＩＦＯ５５０、テクスチャデータ受信ＦＩＦＯ５７０、Ｔａｇ＿ｉｄＦＩＦＯ５４０のすべてに格納領域の空きがあるかどうかを判断する。この判断は、各ＦＩＦＯから入力される信号「ｆｕｌｌ」５５２、「ｆｕｌｌ」５４２、「ｆｕｌｌ」５７２をもとに行う。
【００６８】
アクセス調停部５３０は、キャッシュ判定結果５２５の「ｖａｌｉｄ」が有効であることを条件に、キャッシュヒットを判定し、Ｔａｇ＿ｉｄＦＩＦＯ５４０、アドレス送信ＦＩＦＯ５５０への書き込みを行う。具体的には、キャッシュ判定部５２０からのキャッシュ判定結果５２５の受信に応じて、ｔａｇ＿ｉｄと、キャッシュ判定結果を示すｍｉｓｓ＿ｈｉｔ＿ｆｌａｇ等をｔａｇ＿ｉｄＦＩＦＯ５４０に書き込んでいく。さらに、キャッシュのキャッシュ・ミスを示す結果を受信した場合は、キャッシュ・ミスしたデータのアドレス（ｍｉｓｓ＿ｈｉｔ＿ａｄｄｒｅｓｓ）をアドレス送信ＦＩＦＯ５５０に書き込む。
【００６９】
以下、図７の処理フロー７００を用いて、アクセス調停部５３０の処理を説明する。まず、アクセス調停部５３０は、入力されたキャッシュ判定結果５２５の有効信号である「ｖａｌｉｄ」が有効（アサート状態）であるか否かを判定する（Ｓ７１０）。有効の場合（Ｓ７１０でＹＥＳ）はＳ７２０へ進み、有効でない場合（Ｓ７１０でＮＯ）は処理を終了する。
【００７０】
Ｓ７２０では、アクセス対象のデータに係るキャッシュ判定結果がミスである、つまり「ｍｉｓｓ＿ｈｉｔ＿ｆｌａｇ」５２５が有効（アサート状態）であるか否かを判定する。有効の場合（Ｓ７２０でＹＥＳ）はＳ７５０へ進み、有効でない場合（Ｓ７５０でＮＯ）はＳ７３０へ進む。
【００７１】
Ｓ７５０では、上記３つの全てのＦＩＦＯの格納領域に空きがあるか否かを判定する。空きがある場合（Ｓ７５０でＹＥＳ）はＳ７６０へ進み、空きがない場合（Ｓ７５０でＮＯ）はＳ７５５へ進む。
【００７２】
Ｓ７６０では、キャッシュ判定結果５２５のうち「ｔａｇ＿ｉｄ、ｍｉｓｓ＿ｈｉｔ＿ｆｌａｇ」５２８をＴａｇ＿ｉｄＦＩＦＯ５４０へ書き込む。さらに、アドレス送信ＦＩＦＯ５５０へキャッシュ判定結果５２５のうち「ｍｉｓｓ＿ｈｉｔ＿ａｄｄｒｅｓｓ」５２５を書き込む。そして処理を終了する。
【００７３】
一方、Ｓ７５５では、上記３つのＦＩＦＯのいずれかの格納領域に空きがない場合、駆動信号である「ｅｎａｂｌｅ」を無効（ディアサート状態）にして前段部を停止（ストール）し、格納領域が空くまで待機する。そして、３つのＦＩＦＯの全ての格納領域に空きができたら（Ｓ７５０でＹＥＳ）、ステップＳ７６０へ進む。
【００７４】
また、キャッシュ判定結果がヒット（Ｓ７２０でＮＯ）の場合は、Ｓ７３０でＴａｇ＿ｉｄＦＩＦＯ５４０の格納領域に空きがあるか否かを判定する。空きがある場合（Ｓ７３０でＹＥＳ）はＳ７４０へ進み、空きがない場合（Ｓ７３０でＮＯ）はＳ７３５へ進む。
【００７５】
Ｓ７４０では、キャッシュ判定結果５２５のうち「ｔａｇ＿ｉｄ、ｍｉｓｓ＿ｈｉｔ＿ｆｌａｇ」５２８をＴａｇ＿ｉｄＦＩＦＯ５４０へ書き込む。そして、処理を終了する。
【００７６】
一方、Ｓ７３０でＴａｇ＿ｉｄＦＩＦＯ５４０の格納領域に空きがないと判定された場合（Ｓ７３０でＮＯ）は、Ｓ７３５において、駆動信号「ｅｎａｂｌｅ」を無効（ディアサート状態）にして前段部を停止（ストール）し、格納領域が空くまで待機する。格納領域が空いた場合（７３０でＹＥＳ）はＳ７４０へ進む。
【００７７】
（キャッシュ・メモリ調停部）
キャッシュ・メモリ調停部５８０は、Ｔａｇ＿ｉｄＦＩＦＯ５４０に格納されたｍｉｓｓ＿ｈｉｔ＿ｆｌａｇを参照して、キャッシュがヒットしているか否かに応じて、次の処理を行う。
・キャッシュされているデータはキャッシュ・メモリ（ＦＩＦＯ）５９０から読み出して出力する（５８５）。
・キャッシュされていないデータはテクスチャデータ受信ＦＩＦＯ５７０から読み出して、キャッシュ・メモリ５９０へ書き込むとともに、テクスチャデータとして出力する（５８５）。
【００７８】
図８のキャッシュ・メモリ調停部５８０の処理フロー８００を用いて説明する。キャッシュ・メモリ調停部５８０は、まずＴａｇ＿ｉｄＦＩＦＯ５４０から処理すべきキャッシュ判定結果「ｔａｇ＿ｉｄ、 ｍｉｓｓ＿ｈｉｔ＿ｆｌａｇ」を取り出す（Ｓ８１０）。Ｔａｇ＿ｉｄＦＩＦＯ５４０が空の場合は処理すべきキャッシュ判定結果がないため、キャッシュ・メモリ調停部５８０は当然何もせず待機する。
【００７９】
次に、Ｓ８２０において、キャッシュ判定結果「ｍｉｓｓ＿ｈｉｔ＿ｆｌａｇ」が有効（アサート状態）か否かを判定する。有効の場合（Ｓ８２０でＹＥＳ）はＳ８４０へ進み、無効の場合（Ｓ８２０でＮＯ）はＳ８３０へ進む。
【００８０】
Ｓ８２０で無効（ディアサート状態）のときは、キャッシュがヒットしているので、Ｓ８３０において、同時に取り出した「ｔａｇ＿ｉｄ」とキャッシュ・メモリ（ＦＩＦＯ）５９０のライト・ポインタからアドレスを算出する。さらに、キャッシュ・メモリ５９０から「ｒｅａｄ＿ｄａｔａ」５９２を読み出し、テクスチャデータとする。そして、Ｓ８９０へ進む。
【００８１】
Ｓ８９０では、有効信号である「ｖａｌｉｄ」を付加して、「ｔｅｘｔｕｒｅ＿ｄａｔａ、ｖａｌｉｄ」５８５を出力する。そして、処理を終了する。画像処理装置では、このテクスチャデータをもとにフィルタ処理（不図示）を施し、表示デバイスのフレームバッファ（不図示）にフィルタ処理結果を書き出すことになる。
【００８２】
また、Ｓ８２０でキャッシュ判定結果「ｍｉｓｓ＿ｈｉｔ＿ｆｌａｇ」が有効（アサート状態）のときは、キャッシュがミスしている。このため、Ｓ８４０において、キャッシュ・メモリ調停部５８０はＤＲＡＭ５６５からの更新すべきテクスチャデータがテクスチャデータ受信ＦＩＦＯ５７０にリフィル済みかどうかを確認する。リフィルされていない場合は、リフィルされるまで待機する（Ｓ８５０）。
【００８３】
リフィル後、テクスチャデータ受信ＦＩＦＯ５７０からリフィル済みのデータを更新すべきテクスチャデータとして取り出す（Ｓ８６０）。次に、キャッシュ・メモリ（ＦＩＦＯ）５９０のライト・ポインタの指す格納領域に取り出したテクスチャデータを「ｗｒｉｔｅ＿ｄａｔａ」５８２として書き込む（Ｓ８７０）。そしてキャッシュ・メモリ５９０のライト・ポインタをインクリメントする（Ｓ８８０）。そして有効信号である「ｖａｌｉｄ」を付加して、「ｔｅｘｔｕｒｅ＿ｄａｔａ，ｖａｌｉｄ」５８５を出力する（Ｓ８９０）。
【００８４】
（フルウェイ・キャッシュ判定部）
さらに図６を用いて図５記載の画像処理装置のキャッシュ判定部５２０の回路構成の一例について詳細説明する。キャッシュ判定部５２０は、比較結果とキャッシュ・タグ数の大小関係を調べて、キャッシュのヒットを判定する。キャッシュ判定部５２０は第１実施形態（図２）の複数接続されたデータ処理装置２００とキャッシュ判定装置６００とを有するように構成される。またデータ処理装置２００の替わりに第２実施形態（図４）のデータ処理装置を用いても構わない。
【００８５】
データ処理装置２００は、前述のように８個の「ｔａｇ＿ｄａｔａ」を持ち、この８個の「ｔａｇ＿ｄａｔａ」にキャッシュ・タグ情報が記憶される。データ処理装置２００の場合は、８ノードのフルアソシアティブ方式のキャッシュ装置となる。また、第２パイプラインの「上手」から順に０番から７番までの格納場所が一筆書きの決められた順路で予め決められており、駆動信号「ｓｈｉｆｔ」が有効（アサート状態）のときに「下手」にデータ要素が移動するシフト構造を有している。このシフト構造により最も古いキャッシュ・タグは格納場所０番の「ｔａｇ＿ｄａｔａ」に格納されており、最も新しいキャッシュ・タグは格納場所７番の「ｔａｇ＿ｄａｔａ」に格納されている。キャッシュのミスが起こる度にキャッシュ・タグは格納場所７番から格納場所０番の「ｔａｇ＿ｄａｔａ」へ順番に移動（シフト）され、やがて第２パイプラインから掃き出されてしまう。第３実施形態のキャッシュ判定装置は非常に単純な機構ながら、常に最も古いキャッシュ・タグやキャッシュ・データから順番に捨てられ、一般的なキャッシュ機構の複雑な置き換え（リプレイス）制御を行う必要がない。
【００８６】
（キャッシュのヒット判定）
次に、キャッシュのヒット／ミスヒット判定の手順を説明する。ヒット／ミスヒット判定はキャッシュ判定装置６００で行われる。キャッシュがミスヒットしたかどうかは、データ処理装置２００から出力される処理結果信号「ｔａｇ＿ｉｄ」（２の補数表記）の１ビットの符号ビットを調べることで判定する。データ処理装置２００の出力である有効信号「ｖａｌｉｄ」が有効（アサート状態）であり、かつ符号ビットが１であるとき、「ｔａｇ＿ｉｄ」は負の値であり、キャッシュ判定はミスヒットとする。また符号ビットが０であるとき、「ｔａｇ＿ｉｄ」は正の値であり、キャッシュ判定はヒットとする。
【００８７】
データ処理装置２００の出力であるデータ信号「ｄａｔａ」がキャッシュ判定装置６００に「ｔａｇ＿ｉｄ」と同期して入力される。上記によりキャッシュ・ミスと判定された場合、このデータ信号「ｄａｔａ」がミスヒット時のアドレスである「ｍｉｓｓ＿ｈｉｔ＿ａｄｄｒｅｓｓ」となる。そしてキャッシュ判定装置６００ではミスヒットのときに駆動信号「ｓｈｉｆｔ」を有効（アサート状態）にし、ミスヒット時のアドレスである「ｍｉｓｓ＿ｈｉｔ＿ａｄｄｒｅｓｓ」をデータ処理装置２００のデータ信号「ｔａｇ＿ｄａｔａ」として入力する。キャッシュがミスヒットする度に駆動信号「ｓｈｉｆｔ」が有効となり、第１、第２実施形態で説明したように処理結果「ｔａｇ＿ｉｄ」は減算されていく。
【００８８】
処理結果「ｔａｇ＿ｉｄ」の初期値を「−１」とし、その後にキャッシュ・ヒットして処理結果「ｔａｇ＿ｉｄ」に正の値が保持されていても、ミスヒットが繰り返されると第２パイプラインがシフトされ、キャッシュ・タグを表す「ｔａｇ＿ｄａｔａ」が第２パイプラインから掃き出されることもある。この掃き出されるときの処理結果「ｔａｇ＿ｉｄ」の値は、最も古いキャッシュ・タグの格納番号が０であることから、負の値であることは明らかである。前述のキャッシュ判定で「ｔａｇ＿ｉｄ」の符号を調べるだけでよいのは、これに由来する。すなわち、第１、第２実施形態の例のように、最も古いキャッシュ・タグが０番、最も新しいキャッシュ・タグがＮ−１番となるように、格納場所の番号の割り振り方を工夫している。これにより、キャッシュ判定は最終ステージのデータ処理結果の符号を判別するだけでよい。したがって、本実施形態によれば、キャッシュ判定が非常に簡単である。
【００８９】
また格納番号を第２パイプラインの「上手」から「下手」に０番からＮ−１番に割り振った場合は、「ｔａｇ＿ｉｄ」の値が第２パイプラインの要素数であるＮより、小さいかどうかでキャッシュ判定できることは言うまでもない。
【００９０】
また前述のように常に最も古いキャッシュ・データから順番に捨てる機構のため第３実施形態の一例のキャッシュ・メモリはリング式ＦＩＦＯを用いればよい。この場合、キャッシュ判定部５２０とキャッシュ・メモリ（ＦＩＦＯ）５９０との同期が容易となる。
【００９１】
なお、キャッシュ判定がヒットの場合は、「ｔａｇ＿ｉｄ」が指し示す位置のキャッシュ・メモリに所望のテクスチャデータが格納されていることとなる。
【００９２】
＜＜その他の実施形態＞＞
また、図１０は、演算処理として、第１実施形態のような比較演算ではなく、ＡＬＵを用いて演算処理するときの基本回路の一例を示している。図１０では第１実施形態の図１と異なり、第１パイプラインには「ｄａｔａ２」が、第２パイプラインには「ｔａｇ＿ｄａｔａ２」が追加されている。第１実施形態と同様に「ｄａｔａ［ｌ−１］」と「ｔａｇ＿ｄａｔａ［ｉ］」が等しいときには「ｔａｇ＿ｄａｔａ２［ｉ］」を選択し、「ｄａｔａ２［ｌ−１］」と演算処理して結果を「ｔａｇ＿ｉｄ［ｌ］」に記憶する。「ｄａｔａ［ｌ−１］」と「ｔａｇ＿ｄａｔａ［ｉ＋１］」が等しいときには「ｔａｇ＿ｄａｔａ２［ｉ＋１］」を選択し、「ｄａｔａ２［ｌ−１］」と演算処理して結果を「ｔａｇ＿ｉｄ［ｌ］」に記憶する。また「ｔａｇ＿ｄａｔａ［ｉ］」と「ｔａｇ＿ｄａｔａ［ｉ＋１］」のいずれも等しくない場合は、演算処理を行わず入力されたｔａｇ＿ｉｄ［ｌ−１］を選択して「ｔａｇ＿ｉｄ［ｌ］」に記憶する。このように第１パイプラインと第２パイプラインのデータとデータ処理１１００の構成により、様々な演算処理（四則演算や大小比較）を実現することができる。
【００９３】
また、様々な演算処理結果に応じて第１パイプラインや第２パイプラインの有効信号である「ｖａｌｉｄ」や「ｔａｇ＿ｖａｌｉｄ」をディアサートして有効から無効に切り替えてもよい。この場合、特定のデータ要素の「ｄａｔａ」や「ｔａｇ＿ｄａｔａ」を削除することができる。また、様々な演算処理結果に応じて第１パイプラインや第２パイプラインの特定のデータ要素の「ｄａｔａ」と「ｔａｇ＿ｄａｔａ」を交換（スワップ）することもできる。このように上記構成の一態様によれば、第１実施形態の比較以外の様々な演算を用いたデータ処理を実現できることは言うまでもない。
【００９４】
また図３および図４で示した各区間（ステージ）のデータ処理を別々のプロセッサにソフトウェア実装し、各プロセッサ間で駆動信号「ｓｈｉｆｔ」で同期を取りながら、「ｄａｔａ」と「ｔａｇ＿ｄａｔａ」を入れ替えてもよい。この場合、第２実施形態のデータ処理をソフトウェアにより並列分散処理することができる。また、この場合、各プロセッサで取り扱うデータ要素数は図３の例のような８要素ではなく、プロセッサがアクセスできるメモリ上に展開された膨大な数でよい。このとき、「ｔａｇ＿ｄａｔａ」の移動はそのメモリ上のポインタの原点を移動することにより実現することができる。このように上記構成の一態様を用いれば、ソフトウェア処理に応用できることは言うまでもない。
【００９５】
以上、実施形態を詳述したが、本発明は、例えば、コンピュータ、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用してもよい。
【００９６】
上記のように、データ処理装置は第１パイプラインと第２パイプラインを有し、第１パイプラインと第２パイプラインは相互に逆方向にデータ要素が移動する。ここで、第１パイプラインの各ノードは、接続された第２パイプラインのノードに対し、「上手」にあるノードとも接続されている。そして、第１パイプラインのデータと第２パイプラインのデータが同時に次ノードに移動するときに、「上手」ノードとのデータ処理の結果を選択する。これにより、特定ステージのデータ要素が不規則なスケジュールで処理され、データ要素の処理が高速でないという課題が解決される。
【００９７】
また、データ処理装置は第１パイプラインと第２パイプラインを有し、第１パイプラインと第２パイプラインは相互に逆方向にデータ要素が移動する。ここで、第１パイプラインの各ノードで処理するデータ要素と同一データを取り扱う複製ノードを新たに設けて第１パイプラインの総ノード数を増やしている。さらに、第２パイプラインの各ノードを第１パイプラインのノードに分配接続する。これにより、パイプラインのレイテンシがデータ処理対象のデータ要素の数に応じて長くなるという課題が解決される。
【００９８】
また、キャッシュ装置は第１パイプラインと第２パイプラインを有し、第１パイプラインでアドレスを管理し、第２パイプラインでキャッシュ・タグを管理する。ここで、第１パイプラインと第２パイプラインは相互に逆方向にアドレスとキャッシュ・タグを移動させながら一致検出を行う。このため、非常にノード数が多いことから、キャッシュ競合の確率が低いという従来のキャッシュ装置の課題が解決される。
【００９９】
上記の各構成によれば、互に逆方向に移動するデータ要素がパイプラインの各ステージで確実に相互作用できると共にカウンターフロー・パイプライン構成を用いた場合の最良の性能を引き出すことができる。また処理または管理対象のデータ要素数の増加に伴うレイテンシの増加を抑制でき、これによりデータ要素の処理または管理のためのトータルの判定時間を短くすることができる。
【０１００】
以上のように本実施形態のキャッシュ装置によれば、ノード数の多いフルアソシアティブ方式のキャッシュ装置を実現することができる。これにより複数コンテンツを時分割多重で画像処理する場合や半透明のテクスチャデータを複数枚、重ね合わせた画像処理を行う場合でも、キャッシュ競合の確率を低減できる。また一般的なキャッシュ装置の実装方法では、ウェイ数を多くしたときに判定回路のセレクタの論理段数が増えることによりタイミング収束が難しくなり、高い動作周波数で動作させることが困難である。これに対して、上記キャッシュ装置の判定回路はカウンターフロー・パイプライン構成で判定するために、高い動作周波数で動作させることも容易である。また上記フルアソシアティブ方式の判定回路では、古いデータから順番に自動削除されるため、キャッシュ競合時の複雑な置き換え制御を行う必要がない。これに伴い、キャッシュ・メモリもＦＩＦＯを用いるだけで良好なヒット判定をすることができる。
【０１０１】
なお、上述の各実施形態では各回路の構成要素に同一の動作クロックを供給して動作させるように構成（不図示）しているが、第１パイプラインや第２パイプラインには動作クロックとは別のタイミング信号を供給し、データ要素をシフトさせるようにしてもよい。また、第２データが第１データに比べて少ない場合などに、第２パイプラインに第２データを充填させた後に第２パイプラインを停止させ、第１パイプラインだけを動作させて相互処理をするようにしてもよい。この場合、第２ノードへの動作クロック（駆動信号、タイミング信号）の供給を停止させることによって第２パイプラインを停止させる。また、上述の各実施形態では第１ノードの１つを着目ノードとして、着目ノードとこの着目ノードに対応するノードから第２方向について１つ上手の第２ノードとを比較する比較回路を設けているが、着目ノードとこの着目ノードに対応するノードから第２方向について１つ下手の第２ノードとを比較する比較回路を設けても本発明の効果は変わらない。
【符号の説明】
【０１０２】
１１０  パイプライン・レジスタ
１２０  データ処理回路
１２２  比較回路
１２４  比較回路
１２６  セレクタ
１２８  デクリメンタ
【図１】
0005580660.tif 000002
【図２】
0005580660.tif 000003
【図３】
0005580660.tif 000004
【図４】
0005580660.tif 000005
【図５】
0005580660.tif 000006
【図６】
0005580660.tif 000007
【図７】
0005580660.tif 000008
【図８】
0005580660.tif 000009
【図９】
0005580660.tif 000010
【図１０】
0005580660.tif 000011