(57)【特許請求の範囲】
【請求項１】
情報を処理するパイプライン内において上流の処理モジュールと下流の処理モジュールとの間にＦＩＦＯが結合されており、前記処理モジュールの各々は先入れ先だし式にバッファリングする共通の外部メモリにアクセスするパイプラインシステムにおけるＦＩＦＯ管理方法であって、
前記ＦＩＦＯからの、該ＦＩＦＯの空きが第１の所定数にまで減少したことを示す信号に応じて前記上流の処理モジュールが、前記下流の処理モジュールに対して前記上流の処理モジュールの格納した情報を前記外部メモリから読み出すように指示する第１の特別コマンドを前記ＦＩＦＯに書き込み、後続の前記下流の処理モジュールへの情報を前記外部メモリへ出力する第１出力工程と、
前記ＦＩＦＯから前記上流の処理モジュールからの情報を読み出している下流の処理モジュールが、前記ＦＩＦＯから前記第１の特別コマンドを受信すると、後続の情報を前記外部メモリから読み出すようにする第１入力工程と
を有することを特徴とするＦＩＦＯ管理方法。
【請求項２】
前記ＦＩＦＯの空きが第２の所定数にまで増加したことを示す信号に応じて、前記上流の処理モジュールが、前記下流の処理モジュールに対して前記上流の処理モジュールの格納した情報を前記ＦＩＦＯから読み出すように指示する第２の特別コマンドを前記外部メモリに書き込み、後続の前記下流の処理モジュールへの情報を前記ＦＩＦＯへ出力する第２出力工程と、
前記外部メモリから前記上流の処理モジュールからの情報を読み出している下流の処理モジュールが、前記外部メモリから前記第２の特別コマンドを受信すると、後続の情報を前記ＦＩＦＯから読み出すようにする第２入力工程と
を更に有することを特徴とする請求項１に記載のＦＩＦＯ管理方法。
【請求項３】
上流のプロセッサモジュールと、
下流のプロセッサモジュールと、
前記上流のプロセッサモジュールの出力と前記下流のプロセッサモジュールの入力との間に連結することで、情報を処理するプロセッサパイプラインを形成するＦＩＦＯと、
前記プロセッサモジュールの各々からアクセス可能な、先入れ先だし式にバッファリングする外部メモリとを有し、
前記上流の処理モジュールは前記ＦＩＦＯからの、該ＦＩＦＯの空きが第１の所定数にまで減少したことを示す信号に応じて、前記下流の処理モジュールに対して前記上流の処理モジュールの格納した情報を前記外部メモリから読み出すように指示する第１の特別コマンドを前記ＦＩＦＯに書き込み、後続の前記下流の処理モジュールへの情報を前記外部メモリへ出力し、前記ＦＩＦＯから前記上流の処理モジュールからの情報を読み出している下流の処理モジュールは、前記ＦＩＦＯから前記第１の特別コマンドを受信すると後続の情報を前記外部メモリから読み出すことを特徴とするパイプラインプロセッサシステム。
【請求項４】
前記ＦＩＦＯの空きが第２の所定数にまで増加したことを示す信号に応じて、前記上流の処理モジュールは、前記下流の処理モジュールに対して前記上流の処理モジュールの格納した情報を前記ＦＩＦＯから読み出すように指示する第２の特別コマンドを前記外部メモリに書き込み、後続の前記下流の処理モジュールへの情報を前記ＦＩＦＯへ出力し、
前記外部メモリから前記上流の処理モジュールからの情報を読み出している下流の処理モジュールは、前記外部メモリから前記第２の特別コマンドを受信すると、後続の情報を前記ＦＩＦＯから読み出すことを特徴とする請求項３に記載のパイプラインプロセッサシステム。
【請求項５】
前記ＦＩＦＯまたは外部メモリの出力を前記下流のプロセッサモジュールの入力に選択的に連結する切替手段を更に有し、
前記下流のプロセッサモジュールは、前記ＦＩＦＯから受け取った第１の特別コマンドまたは前記外部メモリから受け取った第２の特別コマンドに従って前記切替手段を制御することで、前記ＦＩＦＯまたは前記外部メモリから前記上流の処理モジュールによる情報を読み出すことを特徴とする請求項４に記載のパイプラインプロセッサシステム。
【請求項６】
前記プロセッサモジュールの各々と前記外部メモリとを連結する保持バッファを更に備え、前記保持バッファを介して前記外部メモリのバーストモードのメモリ転送を実行することを特徴とする請求項３乃至５のいずれか１項に記載のパイプラインプロセッサシステム。
【請求項７】
前記システムは単一の集積回路内に形成されることを特徴とする請求項３乃至６のいずれか１項に記載のパイプラインプロセッサシステム。
【請求項８】
前記ＦＩＦＯは、前記ＦＩＦＯの空きが第１の所定数に達したことを示す信号を該ＦＩＦＯがいっぱいになったとして前記上流の処理モジュールにアサートすることを特徴とする請求項３乃至７のいずれか１項に記載のパイプラインプロセッサシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はＦＩＦＯ管理方法とパイプラインプロセサシステム、特にパイプラインプロセサ装置におけるＦＩＦＯ装置の使用方法に関する。
【０００２】
【従来の技術】
パイプラインプロセサ装置における個々のサブモジュールの性能は、入力コマンドやデータレート、前記サブモジュールが実行しなければならないコマンドやデータにおける処理の複雑さに依存する。サブモジュールがコマンドを実行するために要する時間は、コマンドの複雑さと、さらに下流のサブモジュールの停止(stall)指示および頻度に応じて変化する。隣接するパイプラインサブモジュール間でコマンドを実行するレートが異なる場合、通常、所定長の先入先出レジスタ装置（ＦＩＦＯ）がそのサブモジュール間に挿入され、第２（下流）のサブモジュールが停止しているかあるいはビジーの間における、第１（上流）のサブモジュールの待ち時間を吸収する。
【０００３】
【発明が解決しようとする課題】
しかしながら、通常、ＦＩＦＯのサイズは性能とコストの妥協点にあり、残念なことに、関係する２つのサブモジュールについて停止のパターンが非常に異なる場合最適なサイズとされることは決してない。
【０００４】
【課題を解決するための手段】
本発明は既存の装置のひとつあるいは複数の欠点を実質的に克服し、少なくとも改善することを目的とする。
【０００５】
本発明の構成のひとつは、情報を処理するパイプライン内において上流の処理モジュールと下流の処理モジュールとの間にＦＩＦＯが結合されており、前記処理モジュールの各々は先入れ先だし式にバッファリングする共通の外部メモリにアクセスするパイプラインシステムにおけるＦＩＦＯ管理方法であって、前記ＦＩＦＯからの、該ＦＩＦＯの空きが第１の所定数にまで減少したことを示すフル信号に応じて前記上流の処理モジュールが、前記下流の処理モジュールに対して前記上流の処理モジュールの格納した情報を前記外部メモリから読み出すように指示する第１の特別コマンドを前記ＦＩＦＯに書き込み、後続の前記下流の処理モジュールへの情報を前記外部メモリへ出力する第１出力工程と、前記ＦＩＦＯから前記上流の処理モジュールからの情報を読み出している下流の処理モジュールが、前記ＦＩＦＯから前記第１の特別コマンドを受信すると、後続の情報を前記外部メモリから読み出すようにする第１入力工程とを有することを特徴とする方法にある。
【０００６】
あるいは、本発明の他の構成は、上流のプロセッサモジュールと、下流のプロセッサモジュールと、前記上流のプロセッサモジュールの出力と前記下流のプロセッサモジュールの入力との間に連結することで、情報を処理するプロセッサパイプラインを形成するＦＩＦＯと、前記プロセッサモジュールの各々からアクセス可能な、先入れ先だし式にバッファリングする外部メモリとを有し、前記上流の処理モジュールは前記ＦＩＦＯからの、該ＦＩＦＯの空きが第１の所定数にまで減少したことを示す信号に応じて、前記下流の処理モジュールに対して前記上流の処理モジュールの格納した情報を前記外部メモリから読み出すように指示する第１の特別コマンドを前記ＦＩＦＯに書き込み、後続の前記下流の処理モジュールへの情報を前記外部メモリへ出力し、前記ＦＩＦＯから前記上流の処理モジュールからの情報を読み出している下流の処理モジュールは、前記ＦＩＦＯから前記第１の特別コマンドを受信すると後続の情報を前記外部メモリから読み出すことを特徴とするパイプラインプロセッサシステムにある。
【０００７】
【発明の実施の形態】
図１は、上流サブモジュール１２と下流サブモジュール１６と、２つのサブモジュール１２と１６との間に配置されてコネクション１７，１９によって結合されたＦＩＦＯ１４とを有する従来のパイプラインシステム１０を示す。サブモジュール１２及び１６は、コマンドの実行あるいは生成のために要する遅延時間(latency)が異なる。ＦＩＦＯ１４は多数の内部レジスタあるいはメモリ１８を有し、それによる従来の動作の結果、上流サブモジュール１２は、少なくともレジスタ１８がいっぱいになるまで自由にコマンドを生成し、その時点でサブモジュール１２は停止するはずである。遅延時間が可変であれば、下流のサブモジュール１６は最短の遅延時間でコマンドを処理でき、その結果、上流モジュール１２がＦＩＦＯ１４の内容を生成あるいは供給し得るよりも速いレートで排出することができる。このような環境において、本装置の全体的な性能は、下流サブモジュール１６は上流サブモジュール１２によってさらに多くのコマンドが生成されるのを待たねばならないために、サブモジュール１２及び１６を直接結合した構成に比べてほんのわずか改善されるだけである。また、システム１０の性能は、通常性能とコストの妥協点で選ばれるレジスタ１８の数であるＦＩＦＯ１４のサイズへの依存度が高い。
【０００８】
図２は、上流モジュール２２及び下流モジュール２６それぞれと、その間のローカルＦＩＦＯとを有する、好適な実施例によるシステム２０を示す。サブモジュール２２及び２６はまた、共通の外部メモリ３２へアクセスする。これは、特にサブモジュール２２及び２６がそれぞれ同一の集積回路のパッケージ内に形成される場合における多くのサブモジュール構成の特徴である。外部ローカルメモリ３２は、典型的には、プロセササブモジュール２２及び２６により個別的あるいは集団的に遂行される動作のためのランダムアクセスできる局所化された格納部を提供している。本説明においては、サブモジュール２２と２６の間で受け渡される「コマンド」に言及しているが、この言及は、サブモジュール２２，２６それぞれの機能により要求されたり或いは判定されるときにそれらの間で受け渡される命令やデータ、信号あるいはあらゆる情報を含むと限定なしで解釈されるべきである。
【０００９】
ＦＩＦＯ２４に空きがある間、上記検討した従来の方法で、上流サブモジュール２２はコマンドをＦＩＦＯ２４に渡し、下流サブモジュール２６はＦＩＦＯ２４からコマンドを取り出す。ＦＩＦＯ２４の空きがなくなるか、あるいは実質的に空きがなくたった場合、上流サブモジュール２２は図１の従来の方法のように停止せず、下流サブモジュール２６に対してコマンドの生成を続行する。しかしながら、上流サブモジュール２２は生成したコマンドをＦＩＦＯ２４に渡す代わりに、コマンドをローカルメモリ３２に転送する。
【００１０】
最高性能のために、外部メモリ３２への転送は、メモリ利用技術においてはよく知られた、ひとつのメモリトランザクションについて８あるいは１６コマンドを一組とする「バーストモード方式」で行われる。この動作は、ＦＩＦＯ２４に実質的に空きがない間は繰り返し行われる。バーストモード転送を容易にするために、上流サブモジュール２２はコネクション５０を介して、所定のバーストサイズを受容できる保持バッファ３０にコマンドを出力する。この方法により、ローカルメモリ３２へのアクセスに関するあらゆる遅延時間が短縮される。このようにせず、もしも各メモリアクセスごとに扱われるコマンド数がほんのわずかであるとすれば、非常に厳しいだろう。
【００１１】
ＦＩＦＯ２４の状態は、２つの信号３８，４６によって上流モジュール２２に伝達される。ＦＩＦＯ２４が実質的にいっぱいになった場合、例えば空のままのロケーションが１あるいは２あるいは他のなんらかの所定数の場合、信号４６はアサートされ、上流サブモジュール２２に、コネクション４８を介してＦＩＦＯ２４内へと第１の特別コマンド６０を渡させる。このとき直ちに、サブモジュール２２は保持バッファ３０を介して外部メモリに対するコマンドの送信を開始する。第１の特別コマンド６０は、"ｆｅｔｃｈ＿ｆｒｏｍ＿ＲＡＭ"命令であり、図３に示すようにＦＩＦＯ２４内にロードされる。下流サブモジュール２６によってＦＩＦＯ２４を介して受け取られた場合、第１の特別コマンド６０は、下流サブモジュールがＦＩＦＯ２４の代わりに外部メモリ３２から後続のコマンドを取り込むよう命じる。外部メモリ３２内のコマンドを取り込むアドレスは、第１の特別コマンド６０内のパラメータのひとつとして特定される。
【００１２】
上流サブモジュール２２は、ＦＩＦＯ２４が使用可能となるときまで、保持バッファを介して外部メモリ３２にコマンドの格納を続ける。ＦＩＦＯ２４はまた、ＦＩＦＯ２４内に、或る数の空き或いは利用可能なロケーション２８があることを上流サブモジュール２２に認識させる信号３８を生成する。これは例えば、ＦＩＦＯ２４の、例えばおよそ４分の３しかふさがっていない場合に生じるようにしても良い。
【００１３】
このＦＩＦＯ２４の「利用可能」状態が検出されたとき、上流サブモジュール２２は外部メモリ３２に第２の特別コマンド６２"ｆｅｔｃｈ＿ｆｒｏｍ＿ＦＩＦＯ"を書き込む。図３にも示されているとおり、外部メモリ３２の最後のコマンドの直後に格納される。第２の特別コマンド６２は、下流サブモジュール２６にＦＩＦＯ２４から後続のコマンドを取り込ませ、別の"ｆｅｔｃｈ＿ｆｒｏｍ＿ＲＡＭ"コマンド６０に行き当たるまでＦＩＦＯ２４から取り込み続けさせる命令として作用する。
【００１４】
この方式では、ＦＩＦＯ２４が例えば２４のロケーションを有し、保持バッファ３０が８つのロケーションを有する場合、保持バッファ３０には、６つのコマンドとそれに続く第２の特別コマンド６２（ｆｅｔｃｈ＿ｆｒｏｍ＿ＦＩＦＯ）をロードできる。それによって、更なるコマンドを格納するためにＦＩＦＯ２４内の空間を解放するには十分な１回のバーストモードメモリトランザクションをメモリ３２に行わせることができる。
【００１５】
この構成により、ＦＩＦＯ２４のメモリ空間あるいは外部メモリ３２のメモリ空間は、実際のコマンドに挿入された特別コマンド６０及び６２によって消費されることはない。
【００１６】
下流サブモジュール２６の動作は、上流サブモジュール２２の動作と同様、あるいは反対である。下流サブモジュール２６の受信コマンドの出所としては２つあり得る。ひとつはＦＩＦＯ２４からであり、もうひとつは外部メモリ３２からである。ここでも最高性能のためにもうひとつの保持バッファ３４が用意され、下流サブモジュール２６によって外部メモリ３２からバーストモード方式によってコネクション４４を介して取り込まれたコマンドが格納される。
【００１７】
図３を参照すると、サブモジュール２６は、後続のコマンド６６が所与のアドレスから始まる外部メモリ３２にあることを示す"ｆｅｔｃｈ＿ｆｒｏｍ＿ＲＡＭ"コマンド６０に行き当たるまで、（通常）コマンド６４をＦＩＦＯ２４から取り込む。下流サブモジュール２６はコマンド６６をメモリ３２から取り込み、そのコマンドを保持バッファ３４に入れ、それと同時にコマンドの出所をＦＩＦＯ２４から保持バッファ３４に切り替えなければならない。
【００１８】
この動作は、ＦＩＦＯ２４と保持バッファ３４との間におかれたマルチプレクサ３６と、下流サブモジュール２６とによって実行される。マルチプレクサ３６は、第１の特別コマンド６０の受信時に下流サブモジュール２６により生成される信号５８によって制御される。保持バッファ３４は、予備取り込み（ｐｒｅ−ｆｅｔｃｈｉｎｇ）によって空きのない状態に保持できる。これで外部メモリ３２へのアクセスに関するあらゆる遅延をさらに短縮できる。そうして、下流サブモジュール２６は、特別コマンド６２"ｆｅｔｃｈ＿ｆｒｏｍ＿ＦＩＦＯ"が見つかるまで、保持バッファ３４を介して外部メモリ３２から取り込みを続行し、見つかると直ちにＦＩＦＯ２４をコマンドの出所とするよう信号５８を介してマルチプレクサ３６を切り替える。
【００１９】
システム２０において、従来のＦＩＦＯ１４と比較すると、上流サブモジュール２２の出力５０および下流サブモジュール２６の入力５４において必要とされる保持バッファ３０及び３４を備えることと引き替えにＦＩＦＯ２４のサイズを小さくできる。このようなＦＩＦＯ２４のサイズの縮小は、本発明者にとっては、典型的なアプリケーションにおける全体性能上においては小さな効果であると考えられる。それというのは、システム２０の正味の効果は、上記特別コマンドの転送及び処理により課せられる遅延を除けばいかなる実質的な遅延も伴わずに動作するということではなく、ＦＩＦＯが動的な容量を有することにあるためである。
【００２０】
ＦＩＦＯシステム２０は、パイプラインの構成メンバにより使用することのできるローカルメモリを与えられたパイプライン処理システム装置に用途を見いだせる。典型的には、このメモリは、多くの場合従来のＦＩＦＯにより構成あるいは利用されるであろうメモリより大きな容量を有する。この装置の例には、その内部においてなんらかのレンダリングプロセスがパイプライン化され、パイプラインに沿って渡される命令やメモリに格納されたデータ、例えばパイプライン化された処理により生成や変更あるいは使用されるデータに応じて動作し、グラフィックオブジェクトをレンダリングするハードウエアを含む。本好適な実施例は、２あるいはそれ以上のサブモジュールを含み、各サブモジュールが遂行すべき異なるタスクを有している、同期式グラフィックパイプラインプロセサ内への実施を含む。
【００２１】
なお上記説明は本発明の単なる一例であり、本発明の範囲を離れることなくそこに変更を施しても良い。
【００２２】
【発明の効果】
以上説明したように、本発明によれば、ＦＩＦＯの容量を、上流と下流のサブモジュールの処理パターンに応じて動的に変えることができるという効果を奏する。
【００２３】
また、そのために、上流モジュールによるＦＩＦＯの空き待ち時間をなくすことができる。
【００２４】
また、ＦＩＦＯのサイズを小さくできる。
【００２５】
また、いかなる実質的な遅延も伴わずにＦＩＦＯを動作させることができる。
【図面の簡単な説明】
【図１】中間ＦＩＦＯを用いてパイプライン化されたモジュールの従来のアプローチを示すブロック図である。
【図２】本発明の好適な実施形態による中間ＦＩＦＯを用いてパイプライン化されたシステムを示すブロック図である。
【図３】２つの特別コマンドを含む、外部メモリと図２のＦＩＦＯの内容の一例を示す図である。
【図１】
0004812058.tif 000002
【図２】
0004812058.tif 000003
【図３】
0004812058.tif 000004