(57)【要約】【課題】ハードウエア条件を最小にしながら、複数の異なるプロセスの間でのデータ転送をストリーミングするためのハードウエアを最適にすること【解決手段】本発明は、複数のプロセスと、これら複数のプロセスの間でデータパスを提供するための、前記プロセス間の相互接続とを備えたハードウェアストリームプロセッサデザインを自動的に生成するための方法を提供するものであり、この方法は、前記ストリームプロセッサによって実行すべきプロセスを指定する入力を提供するステップと、前記入力デザイン内のプロセス間の前記相互接続に関連したパラメータを自動的に最適化し、必要な機能を提供しながらハードウェア条件を最小にするステップと、前記最適化に従って最適化された出力デザインを生成するステップとを含む。【選択図】図８
2012164316.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセスと、これら複数のプロセスの間でデータパスを提供するための前記プロセス間の相互接続とを備えたハードウェアストリームプロセッサデザインを自動的に生成するための方法であって、
前記ストリームプロセッサによって実行すべきプロセスを指定する入力デザインの受信時に、前記入力デザイン内のプロセス間の前記相互接続に関連したパラメータを自動的に最適化し、必要な機能を提供しながらハードウェア条件を最小にするステップと、
前記最適化に従って最適化された出力デザインを生成するステップとを含む、ハードウェアストリームプロセッサデザインを生成する方法。
【請求項２】
前記出力デザイン内で使用するためにプロセス間のフロー制御方法を自動的に決定するステップを含む、請求項１に記載の方法。
【請求項３】
定められたパラメータを使用することにより、プロセス間のｓｔａｌｌ（ストール）レイテンシーのスケジュールを定めるステップを含む、請求項２に記載の方法。
【請求項４】
前記出力デザイン内のプロセス間のフロー制御方法が、どれも同じ特定されたタイプである場合に接続されたプロセスのカスケード内のｓｔａｌｌ（ストール）レイテンシーを示すためのパラメータを定めるステップと、記憶条件を最小にするよう、前記パラメータに対する値を決定するステップとを含む、請求項３に記載の方法。
【請求項５】
前記プロセスの各々は、接続されたプロセスおよび対応するクロックレートの１つ以上の入力ポートに接続された１つ以上の出力ポートを有し、前記接続されたポートのための前記クロックレートを最適化するステップを含む、請求項１〜４のいずれか１項に記載の方法。
【請求項６】
前記プロセスの各々は、接続されたプロセスおよび対応するデータ幅の１つ以上の入力ポートに接続された１つ以上の出力ポートを有し、接続されたペアのポートに対してデータ幅を自動的に最適化するステップを含む、請求項１〜５のいずれか１項に記載の方法。
【請求項７】
組み合わせによる最適化を使用して前記パラメータを最適化する、請求項１〜６のいずれか１項に記載の方法。
【請求項８】
ダイナミックプログラミングアルゴリズムを使用して前記組み合わせによる最適化を実行する、請求項７に記載の方法。
【請求項９】
前記入力デザインは、プロセスがグラフの頂点であり、プロセス間のデータストリームが前記頂点の間の弧となるような非周期的グラフ状となっている、請求項１〜８のうちのいずれか１項に記載の方法であって、前記グラフのサブツリーに対する自動最適化を実行し、好ましくは１回終了すると、グラフ全体が最適化されるまで、前記グラフのその後のサブツリーに対し、自動最適化を実行するステップを含む方法。
【請求項１０】
各プロセスの前記データ幅およびクロックレートに対する最適値を決定するための数値方法を利用するステップを含む、請求項１〜９のうちのいずれか１項に記載の方法。
【請求項１１】
プロセス内の値の各コンフィギュレーションに対するコストを決定するステップと、
前記プロセスに対する全最小コストを提供する値を前記プロセスに割り当てるステップとを含む、請求項１０に記載の方法。
【請求項１２】
あるプロセスから別のプロセスに移行するためのコストを決定するステップを備え、全コストは、プロセス内の値のコンフィギュレーションに対するコストに、あるプロセスから別のプロセスに移行するための前記コストを加えた合計から成る、請求項１１に記載の方法。
【請求項１３】
１つのサブツリーに対する全コストが一旦決定されると、全グラフが最適化されるまでグラフのうちのその後のサブツリーに対する前記最適化を実行するステップを含む、請求項１１または１２に記載の方法。
【請求項１４】
最適化が一旦実行されると、デザイン内でアスペクト変換ロジックを自動的に提供するステップを含む、請求項１〜１３のうちのいずれか１項に記載の方法。
【請求項１５】
一旦最適化が実行されると、デザインのアダプタロジックを自動的に提供するステップを含む、請求項１〜１４のうちのいずれか１項に記載の方法。
【請求項１６】
最適化が一旦実行されると、前記デザイン内にＦＩＦＯを自動的に挿入するステップを含む、請求項１〜１５のうちのいずれか１項に記載の方法。
【請求項１７】
各最適化ステップの後に、クロックレートおよびデータ幅を最適化するステップを含む、請求項１〜１６のうちのいずれか１項に記載の方法。
【請求項１８】
ａ）前記ソースクロックレートと前記シンククロックレートとが同一でない条件、および
ｂ）前記ソースフロー制御方法と前記フロー制御方法とが同一でない条件を含む１つ以上の条件が満たされた場合に、任意のペアのプロセスの間だけにＦＩＦＯを挿入する、制御方法１６に記載の方法。
【請求項１９】
請求項１〜１８のうちのいずれか１項に記載の方法を使用するデザインを生成するステップと、
前記生成されたデザインを実施するための前記ロジックデバイスをプログラミングするステップとを含む、プログラム可能なロジックデバイスを作成する方法。
【請求項２０】
コンピュータで実行されるときに、請求項１〜１８のうちのいずれか１項のステップを実行するようになっているコンピュータプログラム
【請求項２１】
コンピュータで読み取り可能なメディアに記憶された、請求項２０に記載のコンピュータプログラム。
【請求項２２】
請求項１〜１８のうちのいずれか１項に記載の方法を使用して生成されるデザインを有するフィールドプログラマブルゲートアレイまたは他のプログラマブルロジック。
【請求項２３】
請求項１〜１８のうちのいずれか１項に記載の方法を実行し、前記生成されたデザインを有するプログラマブルロジックデバイスのプログラミングのための命令のリストを生成するようになっているプロセッサを含む、ハードウェアストリームプロセッサデザインを生成するためのシステム。
【請求項２４】
複数の相互接続されたプロセスを含むＦＰＧＡプロセッサのためのデザインを生成する方法であって、
指定された入力デザインを受信したときに、このデザイン内で前記プロセスの各々の働きを最適化するステップと、
この最適化を一旦実行すると、前記最適化されたプロセスの各々の間の前記相互接続を最適化するステップを備える、ＦＰＧＡプロセッサのためのデザインを生成する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェアストリームプロセッサデザインを生成するための方法および装置に関する。実施形態では、本発明は相互接続されたプロセス間のデータ転送をストリーミングするためのハードウェア実現例を最適化する方法も含む。
【背景技術】
【０００２】
実施形態では、本発明は、単一方向のＦＩＦＯ（先入れ先出し）データストリームを使用するハードウェアプロセス通信を使ってコンピューティングすることに関する。各ハードウェアプロセスは、データをシンク化／ソース化するゼロまたはそれ以上の数の入出力ポートを有する。あるプロセスの入力ポートと別のプロセス（このプロセスは同じプロセスでよい）の出力ポートとの間でＦＩＦＯデータストリームが接続される。オプションとして、ＦＩＦＯストリームをＩ／Ｏデバイス（入出力デバイス）、例えば、ソフトウェアまたはメモリデバイスとの相互対話のためのプロセッサバスに接続してもよい。
【０００３】
一般に、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）によって提供できるようなハードウェアプロセスは、非同期及びパラレルに作動し、プロセス入力からデータアイテムを読み出し、プロセス出力でデータを生成する。このＦＰＧＡは、一般に、ホストコンピュータと共に使用するためのアクセレレータの一部を形成でき、このアクセレレータでは、ＦＰＧＡは、製造後、顧客または設計者によりコンフィギュアされ、その指定されたタスクおよびプロセスを実行するようになっている。
【０００４】
例えば、ＦＰＧＡでプロセスを伝送する同様なネットワークは、文献ではカーンプロセスネットワーク（ＫＰＮ）として知られており、このＫＰＮは宛て先のないＦＩＦＯチャンネルを通して確定的なシーケンシャルプロセスのグループが通信を行う計算の分散モデルを提供している。高性能の計算をするために、ハードウェア、例えばＦＰＧＡまたはその他のプログラマブル論理デバイス内でプロセスネットワークを実現するための方法および装置が必要である。
【０００５】
ＦＰＧＡは、一般にルックアップテーブル（ＬＵＴ）およびフリップフロップ（これらの双方は、演算計算に使用される）と、バッファリングに使用されるブロックランダムアクセスメモリ（ＢＲＡＭ）とを含む、限られたリソースを有することが知られている。ＦＰＧＡは、リコンフィギュア可能な相互接続も提供し、これら相互接続は限られたリソースを互いに接続できるようにし、データ通過中に全体に所望する機能またはプロセスを提供する。所定のプロセスまたはプロセスのネットワーク内でプロセス間のＦＩＦＯストリームを実施するための相互接続のためのハードウェア要件を最小化するか、またはリソース利用効率を最適にすることにより、大きな利点を得ることができる。最適化の利点は、計算のためにより多くのリソースを利用できることであり、このことによって性能をより高くすることができる。ＦＰＧＡのコンフィギュレーションは、ハードウェア記述言語（ＨＤＬ）を使って一般に指定され、ＡＳＩＣが実行できる任意の論理機能を実施するために、デバイスを使用できることが判っている。
【０００６】
一般的にＦＰＧＡ内のプロセスは、複雑な演算、例えば多次元のたたみ込みを計算するパイプライン状のハードウェアデータパスとなっていることが多い。これらプロセスを本願では「カーネル」と称す。換言すれば、カーネルとは、特定のクロックレートでアプリケーション固有のパターンに従ってデータを生成／消費する、同期式のパイプライン状データパスのことである。例えば、たたみ込みカーネルは、１００ＭＨｚで作動でき、２×３２ビットの入力データポイントを消費し、サイクル（１０ｎｓ）ごとに１×３２ビットの出力データポイントを生成する。
【０００７】
データパスまたは計算に加え（またはその代わりに）、カーネルは、データフローの基本的制御も行うことができる。２つの共通する例として、マルチプレックスカーネルとデマルチプレックスカーネル（それぞれＭｕｘおよびＤｅｍｕｘと表示）とがある。Ｍｕｘは多数の入力ポートと単一の出力ポートとを有し、実行時間を選択できる単一の入力ポートを出力ポートに接続する。Ｄｅｍｕｘは、単一の入力ポートと多数の出力ポートとを有し、実行時間を選択できる単一の出力ポートを入力ポートに接続する。
【０００８】
図１は、「カーネルＡ」および「カーネルＢ」と表示される２つのカーネル４および６を含むネットワーク２の略図を示す。カーネル４は、２つの入力ポートＰおよびＱと、２つの出力ポートＸおよびＹとを有する。ＦＩＦＯバッファ８は、カーネルＡの出力ポートＸおよびＹの各々からデータを受信し、データを宛て先値にフォワードルーティングする前に記憶するようになっている。この場合、ポートＸから出力されたデータは、カーネルＢ  ６の入力ポートＲへルーティングされ、カーネルＡのポートＹから出力されたデータはカーネルＡの入力ポートＱへルーティングバックされる。図示されている例では、出力ポートＸおよびＹは、最も一般的な意味ではカーネルＡ  ４からネットワークを通して転送されるデータのソースであるので、データソースと見なされる。（カーネルＡ  ４の）入力ポートＱおよび（カーネルＢ  ６の）Ｒは、最も一般的な意味において、それぞれソースＸおよびＹから受信されるデータに対するシンクであるので、データシンクと見なされる。
【０００９】
後述されるように、かかるネットワーク内のカーネルの各々に関連する変数は、多数存在することが理解できよう。例えばポートまたはＦＩＦＯバッファにおける記憶容量が不十分なことに起因し、カーネルの間でデータが失われないこと、または過度に長く待機し、不要な遅延が生じることによる、データの喪失がないことを保証するような、フロー制御の何らかの手段が必要である。これを達成するために、ＦＰＧＡまたは他のプログラマブルロジックのようなハードウェアでは、データストリームは、一般にデータ自体とネットワーク上のノード間、すなわちポート間でのデータの転送を仲裁する目的のための、フロー制御信号との双方を一般に含む。一般に使用される周知のフロー制御スキームとして次の３つがある。
【００１０】
１．ＥＭＰＴＹ／ＲＥＡＤ
２．ＶＡＬＩＤ／ＳＴＡＬＬ；および
３．ＳＯＵＲＣＥ  ＲＥＡＤＹ／ＳＩＮＫ  ＲＥＡＤＹ
【００１１】
ＥＭＰＴＹ／ＲＥＡＤフロー制御スキームでは、２つのフロー制御信号ＥＭＰＴＹおよびＲＥＡＤが使用される。データソースが読み出しに利用できるデータを有するとき、データソースから出力されたＥＭＰＴＹ信号は、デアサートされる。次に、接続されたデータシンクは、データのアイテムを転送するためにＲＥＡＤ信号をアサートする。
【００１２】
ＶＡＬＩＤ／ＳＴＡＬＬフロー制御スキームでは、再び２つのフロー制御信号（このときはＶＡＬＩＤおよびＳＴＡＬＬ）が使用される。データシンクがデータを受信するＲＥＡＤＹ状態になったことを表示するために、データシンクによってＳＴＡＬＬ信号出力がデアサートされる。次に、データソースは、データをシンクに転送するために、ＶＡＬＩＤをアサートする。
【００１３】
最後に、ＳＯＵＲＣＥ  ＲＥＡＤＹ／ＳＩＮＫ  ＲＥＡＤＹフロー制御方式は、フロー制御信号ＳＯＵＲＣＥ  ＲＥＡＤＹ／ＳＩＮＫ  ＲＥＡＤＹを使用する。ＳＯＵＲＣＥ  ＲＥＡＤＹおよびＳＩＮＫ  ＲＥＡＤＹの双方がアサートされる任意のサイクルにおいて、ソースからシンクへデータが転送される。
【００１４】
従来はハードウェア設計者は、一般にハードウェアデザイン内で使用するための特定のフロー制御スキームを選択し、デザイン内で使用されるすべてのカーネルをそのスキームに対してデザインまたは適合させていた。一部のケースでは、これによって最適化が欠如することになった。その理由は、１つのカーネルが実行するプロセスのタイプによっては、一方または他方のフロー制御方式のほうが良好に作動し得るからである。
【発明の概要】
【発明が解決しようとする課題】
【００１５】
相互接続されたプロセスによるシステムのデザインにおいて、設計者はシステム内のデータのフローをダイナミックに管理するために、フロー制御の機構に関して標準化を行うことが一般的である。フロー制御は、接続されたソースとシンクプロセスの双方がデータを転送するのにレディー状態となった場合にしかデータが転送されないことを保証するものである。フロー制御がない場合、シンクがレディー状態でないときにデータが送られる（オーバーフロー）ことに起因してデータが失われたり、ソースがレディー状態でないときにデータが受信される（アンダーフロー）ことに起因してデータにエラーが生じたりする。
【００１６】
単一フロー制御機構を標準化する上での問題として、異なるプロセスに対してフロー制御の機構のタイプが異なると、実行の効率が高くなったり低くなったりすること、および最適なデザインが、異なるタイプのフロー制御を多数含み得ることが挙げられる。例えば計算パイプラインは当然、入力にはＰＵＬＬタイプのインターフェースを有し、出力にはＰＵＳＨタイプのインターフェースを有することになる。このことは、入力バッファが空であるか、リクエスト時にデータを転送しないか、出力バッファがフルでないかを見ること、およびリクエスト時にバッファ内にデータをプッシュすることを容易に可能にするためである。バッファ化またはロジックを使って異なるフロー制御タイプの間の変換をすることが常に可能であるが、この結果、ハードウェアにコストがかかることになる。かかる目的のために使用されるハードウェアを、ＦＰＧＡの主な処理機能には使用することはできない。
【００１７】
図２は、入力データおよび出力データのために簡単な外部フロー制御方式を使用する計算パイプライン１０の略図である。このフロー制御方式は、１ビットのＶＡＬＩＤ信号とＳＴＡＬＬ信号とから成る。パイプライン１０を通過するようにデータ１２が流れ、パイプライン１０内の計算ロジック１４のロジックに従ってデータ１２が処理される。
【００１８】
パイプライン制御ロジックは、内部でデータアイテムを利用できるかをチェックし、次に読み出し信号１６を使ってデータの転送を制御しなければならない。入力データインターフェース２０と出力データインターフェース２２の双方で同じフロー制御方式を維持するために、バッファ１８が挿入されている。換言すれば、バッファ１８を挿入することにより、全体にパイプライン１０に進入したり離間したりするデータのために使用されるフロー制御方式は、すべてＶＡＬＩＤ／ＳＴＡＬＬ信号でセットできる。しかしながら、計算パイプラインのために使用されるデータソース（例えばＦＩＦＯまたはＳＲＡＭインターフェース）が計算パイプライン１０のＲＥＡＤ／ＥＭＰＴＹのセマンティクスをネイティブにサポートしている場合、バッファ１８は無駄とある。
【００１９】
クロック周波数およびスループットを最大にするための制御ロジックのパイプライン化により、バッファリング／ロジックを挿入する必要性も生じる。信号のレイテンシーを高めることによって、信号（ＳＴＡＬＬ）を生成するロジックと信号を解読するロジックとの間にパイプラインレジスタを挿入することが可能となる。周知のように、かかるパイプラインレジスタは、単一クロック時間内でのロジック／ルーティング遅延時間を短縮することにより、デザインの有効最大クロックレートを高める。例えば図２内の計算パイプラインは、出力でアサートされるＳＴＡＬＬ信号２４と、デアサートされるＶＡＬＩＤ信号２６との間に、あるレイテンシーを有することができる。フロー制御がＶＡＬＩＤ信号の迅速なデアサートを必要とする場合、別の（可能な場合には冗長な）バッファ（図示せず）を挿入しなければならない。
【００２０】
フロー制御をマニュアルで最適化すること、すなわちデザイン時のどのポイントにおいても異なるスキームを選択することには、時間がかかり、エラーが生じやすく、ロジックブロックを効率的に再使用することが阻害される。各ブロックを使用し、別個のバージョンを維持するような各状況およびどの状況においても、各ブロックを最適にしなければならない。
【００２１】
ＦＰＧＡのためのロジックのデザインにおいて生じる別の問題は、異なるクロックレートで、および／または異なるデータ幅で、異なるカーネルを作動できることに関連している。デザイン内の多数のカーネルは、異なるクロックレートで作動し得る。これを解決するために、クロックドメインの間に、明瞭にデータを変化させるためのロジックを挿入し、よってデータにエラーが生じることを防止できる。異なるアスペクト（ビット／幅）を有するカーネル入力／出力ポートを接続できる。この問題を解決するために、データをバッファ化／シフトし、サイクルごとに異なる下図のビットを生成／受け入れるポート間で、遷移を管理するためのロジックを挿入できる。
【００２２】
図３は、２つのカーネル３０  Ａと、カーネル３２  Ｂとを含むネットワーク２８の略図を示す。これら２つのカーネル３０および３２は、自らの独立したクロック３４および３６でそれぞれ作動している。クロックＡ  ３２で作動中のカーネルＡ  ３０およびクロックＢ  ３６で作動中のカーネルＢ  ３２からのデータ転送が必要とされる。これを達成するために、クロスクロックの移行を可能にするクロスクロックロジック３８が設けられている。デジタルロジック回路内の異なるクロックドメイン間でデータを転送するのにクロスクロックロジックが必要である。クロスクロックロジックの非限定的例として、別個の読み出しクロックおよび書き込みクロックを有するＦＩＦＯバッファがあり、このバッファではクロスドメインにわたってＦＩＦＯステートを同期化するのにグレイコード化カウンターが使用される。
【００２３】
異なるカーネル内で異なるデータ幅が使用される場合、コンパチビリティおよび接続性の同じ問題が生じる。所定のブロックまたはカーネル、例えばルーティングのためのｍｕｘ／ｄｅｍｕｘ、Ｉ／Ｏデバイスに対するポート、例えばホストまたはメモリを、特定のクロックまたはビット幅に固定しなくてもよい。ｍｕｘは３２ビット幅の２つの入力を有し、６４ビットの幅の２つの入力を有することができる。同じように、クロックドメインＡ内に２つの入力が存在し、クロックドメインＢに２つの入力が存在してもよい。リソースの使用量を最小にするためには、ｍｕｘ自体に対する最適なビット幅およびクロック周波数をピックアップし、クロックドメイン間の移行を最小にし、図４に略図で示されるような異なる幅の間のパッキング／アンパッキングを最小にすることが望ましい。クロックドメインおよびビット幅を選択することは、最適化する上での問題である。
【００２４】
図４の例では、簡単な２−カーネルプロセスネットワークが示されている。このネットワークは、カーネルＡ  ４０と、カーネルＢ  ４２とを備える。カーネルＡ  ４０は、出力ポートＸ４４上でサイクルごとに４×８ビットのアイテム４３を生成するようになっており、カーネルＢ  ４２は、入力ポートＱ４６上でサイクルごとに１×８ビットのアイテム４５を受信するようになっている。カーネルＡの生成からカーネルＢへのデータ転送が必要であり、従って、データ幅を変換するためのある手段が必要である。この特徴を達成するために、ポートＸ４４とポートＱ４６の間に変更ロジック４８が設けられている。
【００２５】
ＦＰＧＡのためのロジックをデザインする際に生じる別の問題は、データフローに対して特別の規定を設けない場合、デッドロックを生じさせるような所定のデータフローが生じやすくなるということである。一部のカーネルは、特定の対策をしない場合にデッドロックを生じさせるようなデータフローのパターンを取り扱うために、入力／出力上でバッファリングを必要とし得る。図５の例では、Ｒからの呼び出しを行うカーネルＢのパターンと共に、出力ＸおよびＹに書き込みを行うカーネルＡのパターンは、バッファリングを挿入しなければならないことを意味する。カーネルＡが作動しているときには、まずこのカーネルはＸにデータを書き込むが、カーネルＢは、カーネルＡのＸおよびＹの双方にデータを有するまで作動できない。従って、Ｙ（このポイントでカーネルＢは読み出しを開始できる）でデータが利用可能となるまで、Ｘ上にデータを記憶するためにバッファリングが必要である。
【００２６】
従来は、設計者は全デザインの知識をもってマニュアルでバッファリングを挿入していた。しかしながら、このアプローチを行うには、デザイン内のすべてのカーネルの知識およびカーネルがどのように振る舞うかの知識が必要となるのでエラーが生じやすく、複雑である。
【００２７】
別の方法は、ネットワーク内の各カーネルおよびどのカーネルの入力／出力にも、単にバッファを挿入する方法である。しかしながらこの方法は、リソースが無駄となる。その理由は、接続されている他のカーネルで既にバッファリソースを利用できるか、または相互接続ではバッファリングは固有のものとなり得るからである。例えば異なるクロックの間でデータをクロスさせるのにＦＩＦＯバッファが使用されることが多く、理論的にはデッドロックを防止するのに同じバッファリングを使用できる。
【００２８】
ＦＰＧＡのためのロジックのデザインで生じる別の問題は、カーネル間のデータフローを管理するのに使用されるフロー制御信号が上記のようにレイテンシー（このレイテンシー後にフロー制御信号が有効となる）を有し得るという事実に関係する。一般的なケースでは、単一カーネルに対し、これらレイテンシーは、相互に依存している。フロー制御のレイテンシーが相互に依存していることは、入力／出力ポートの一組のための特定のフロー制御信号（例えばｓｔａｌｌ（ストール））のレイテンシーが、レイテンシー＝ｆ（Ｎ、Ｋ）の関係（ここでＫは特定の入力／出力に固有の定数であり、Ｎはポートの組内のすべての入力／出力ポートに当てはまる変数であり、ｆ（）は数学的関数である）を有することを意味する。一般的なケースでは、ｆ（）は、加算関数であり、入力ポートは、Ｎ＋０のレイテンシーを有し、出力ポートは、Ｎ＋１のレイテンシーを有する。
【００２９】
図６は、２つの入力ストリームまたはソース（ＡまたはＢ（図示せず））からデータを選択するｍｕｘカーネルの簡単な一例を示す。２つの入力チャンネルＡおよびＢ（およびｍｕｘからの出力）に対応する使用されるフロー制御およびデータ信号の３つのセット６６、６８および７０が存在する。更に、ｍｕｘからデータを取り出すのにストリームＡからなのか、またはストリームＢからなのかを識別するために、選択信号６２が使用される。入力ストリームおよび出力信号の各々に対し、ＳＴＡＬＬ信号、ＶＡＬＩＤ信号およびＤＡＴＡ信号が使用される。信号６６、６８および７０の組の各々に対し、データを受信するレディー状態となったことを表示するために、関連するデータシンクにより、ＳＴＡＬＬ信号出力がデアサートされるように、ＳＴＡＬＬ／ＶＡＬＩＤフロー制御が使用される。次に、関連するデータシンクにデータを転送するように、データソースがＶＡＬＩＤをアサートする。第２ｍｕｘコンポーネント５４からデータ出力信号６０が取り出され、このコンポーネントからシンク６４へ提供される。
【００３０】
信号ｓｔａｌｌ＿ｏｕｔとｖａｌｉｄ＿ｏｕｔとの間のレイテンシーの追加サイクルが生じるようにｍｕｘ５０がパイプライン化される。このｍｕｘ５０は実際には２つのｍｕｘコンポーネント５２および５４から構成されている。第１ｍｕｘコンポーネント５２は、フロー制御を行うように作動し、第２ｍｕｘコンポーネント５４はデータ自体を多重化するように働く。２つのデータチャンネルまたはソース５６および５８は、入力としてデータを第２ｍｕｘコンポーネント５４へ提供するようになっている。選択信号６２による適当な制御により、単一データ出力信号６４がデバイスから出力されるデータとして提供される。正しい作動を保証するためにデバイス内のフロー制御が使用されるが、種々の制御信号およびデバイスのレイテンシーの間の差に起因し、複数の問題が生じ得る。
【００３１】
この簡単な例では、ｓｔａｌｌ＿ｏｕｔのアサートとｖａｌｉｄ＿ｏｕｔのデアサートとの間のレイテンシーは、ｓｔａｌｌＡのアサートからｖａｌｉｄＡのデアサートまでのレイテンシーに１サイクルを加えた値に等しい。このレイテンシーを説明するために、連続する多数のサイクルの間にｖａｌｉｄ＿Ａをアサートすることにより、ソースＡがシンクに対し、データを連続的に転送しているケースを検討する。選択信号は、「Ａ」にセットされるので、ｖａｌｉｄ＿ｏｕｔは１サイクルだけ遅延されたｖａｌｉｄ＿Ａに等しいので、連続する多数のサイクル中でもアサートされる。次にシンクは、（例えば残留バッファスペースがないことに起因し）データを最早受け入れできないと判断し、ｓｔａｌｌ＿ｏｕｔをアサートする。ｓｔａｌｌＡにｓｔａｌｌ＿ｏｕｔが接続されるので、Ｎサイクル（ここでＮはＡのｓｔａｌｌレイテンシーである）後にソースＡはｖａｌｉｄ＿Ａをデアサートする。ｖａｌｉｄ＿ｏｕｔは、１サイクルだけ遅延されたｖａｌｉｄ＿Ａであるので、シンクはｓｔａｌｌ＿ｏｕｔをアサートした後のＮ＋１サイクルの間、ｖａｌｉｄ＿ｏｕｔをデアサートしたものと見なす。
【００３２】
これまでは、ｍｕｘの入力側と出力側の双方におけるインターフェースを固定できたので、ｓｔａｌｌ（ストール）とｖａｌｉｄ（有効）との間のレイテンシーを解決できた。例えば入力レイテンシーを１にセットでき、出力レイテンシーを２にセットでき、Ｎ＋１の規則に適合する任意の数字をセットできた。ｍｕｘの後にバッファリングを挿入し、その固定されたレイテンシーを維持する。かかる従来の解決方法による問題は、多数のカーネルが相互に接続されている場合、このようなバッファリングがハードウェアを無駄にすることである。
【００３３】
高度なマニュアルデザインを使用することにより、バッファリングの総量を最小化するようにレイテンシーをスケジュール化することが可能である。しかしながらこのようなタイプの高度なマニュアルデザインは、時間がかかりエラーを生じやすい。図７は、３つのカスケード接続されたｍｕｘカーネルを有するデザインの簡単な一例を示す。この例では、バッファリングを最小にするようにレイテンシーがスケジュール化される。左側のデザインは、インターフェースごとに１つの固定されたレイテンシー（Ｌ＝１）を有するので、ステージごとにレイテンシーを１に変換するためのバッファが必要である。換言すれば、最初の２つのｍｕｘ５７および５９を通過したデータは、ｍｕｘの入力において、Ｌ＝１のスタートレイテンシーを有し、ｍｕｘ内のロジック（図６参照）がレイテンシーの追加サイクルを加えるので、Ｌ＝２の累積レイテンシーを有する。バッファ６１は、ｍｕｘ６３の前にレイテンシーを１に変換するように働く。チェーンを下る方向にこのようなことが繰り返される。
【００３４】
右側のデザインは、Ｌ＝３からＬ＝１に変換するのに、１つのバッファだけでよいようにｍｕｘカーネルのレイテンシーをスケジューリングしている。このようなスケジュールリングによって、バッファ６１が不要となるように下流側のｍｕｘ６３がレイテンシーの追加サイクルを累積することを可能にしている。
【００３５】
従って、相互接続されたプロセス間でデータ転送をストリーミングするためのハードウェア実現例を最適化することを含むデータプロセッサの生成およびデザインでは多数の問題が生じることが理解できよう。
【００３６】
米国特許公報第７，３１５，９９１号は、ハイレベルのプログラミング言語（ＨＬＬ）プログラムから回路を創出させる方法について開示している。この方法は、ＨＬＬプログラムからネットリストを生成することを含み、ここで、ソフトウェアに基づく回路の表示または回路のハードウェア記述であるネットリストが回路デザインを特定するようになっている。回路デザインは、プログラマブルロジックデバイス内で作動させることができ、実行時間で複数の実行スレッドを識別し、スケジュール情報を決定できる。
【００３７】
クラウディア・ジスレスキュー氏、バート・キーエンヒュイス氏、エド・デプレテール氏による論文「マルチプロセッサ環境における通信合成」（フィールドプログラマブルロジックおよびアプリケーションに関する議事録、２００５年、フィンランド、タンペレ、２００６年８月２４〜２６日）は、リコンフィギュラブルなデバイスにマットラブ（Ｍａｔｌａｂ）のサブセットで書かれた入れ子状ループアプリケーションの高速マッピング、例えばデジタル信号処理、イメージングまたはマルチメディアのためのデザイン方法を開示している。この方法は、ポイント対ポイント状にプロセス間の通信が行われるプロセスネットワークを生成する。４つのタイプのポイント対ポイント通信が識別されている。２つのタイプは、ＦＩＦＯ状の通信を使用するものであり、他の２つのタイプは、データを交換するためにキャッシュ状のメモリを使用するものである。ここに開示されている方法はＦＰＧＡにおいて自動的かつ効率的に実現できる。
【００３８】
スバン・バン・ハーストレークト氏およびバート・キーエンヒュイス氏による「ハードウェアにおけるプロセスネットワークへのＣアプリケーションをストリーミングする自動合成方法」と題する論文（欧州におけるデザイン自動化および試験に関する議事録、２００９年）は、ストリーミングアプリケーションの単一のシーケンシャルなＣ入力仕様からＦＰＧＡでのハードウェア実現例の自動生成方法を開示している。ここでは、高レベルの合成ツールが使用されている。
【００３９】
上記３つのすべての論文の全内容を本願で参考例として援用する。
【課題を解決するための手段】
【００４０】
本発明の第１の様相によれば、複数のプロセスと、これら複数のプロセスの間でデータパスを提供するための前記プロセス間の相互接続とを備えたハードウェアストリームプロセッサデザインを自動的に生成するための方法であって、前記ストリームプロセッサによって実行すべきプロセスを指定する入力デザインの受信時に、前記入力デザイン内のプロセス間の前記相互接続に関連したパラメータを自動的に最適化し、必要な機能を提供しながらハードウェア条件を最小にするステップと、前記最適化に従って最適化された出力デザインを生成するステップとを含む、ハードウェアストリームプロセッサデザインを生成する方法が提供される。
【００４１】
この方法は、これまで識別した問題を解決しながら、プログラマブルロジックデバイスのデザインを生成できる方法を提供するものである。特にシステム内のパラメータの自動最適化を考慮することにより、それに対応して最適化されるデザインを自動的に生成できる。プロセスに関連しないリソースの使用を最小にするか、または解消できるようにしながら、同時にオペレータがエラーを冒すリスクを回避できる。
【００４２】
最適化されるパラメータをプログラマブルロジックデバイスに関連する種々のパラメータのうちの１つ以上とすることができる。例えばパラメータは、デザイン内のフロー制御またはストリームプロセッサのデザイン内のデータ幅、またはクロックレートのような他のアスペクトに関連し得る。必要な機能を提供しながら、ハードウェアの条件を最小にするよう、デザイン内のパラメータを自動的に最適にする方法を設けることにより、上記問題のすべてを解決できることが理解できよう。
【００４３】
例えばオペレータがマニュアルで各状況を検討し、どのフロー制御方法を実施するかを決定しなくても、プロセスごとに、各プロセスに対してフロー制御方法を自動最適化によって指定できる。更に、デザイン内のリソースを効率的に利用するように、プロセス間の弧となるクロックレートおよびデータ幅の問題を自動的に解決できる。
【００４４】
実施形態では、パラメータ化は、
インターフェースのタイプ（ＰＵＳＨ対ＰＵＬＬ）、
インターフェースの幅、
インターフェースのクロックレート、および
フロー制御信号のレイテンシー（例えばｓｔａｌｌ（ストール）／ｅｍｐｔｙ（空））のうちの１つ以上を決定することを含むことができる。
【００４５】
本願に記載されるように、必要な機能を提供しながら、プロセス間の相互接続のためのハードウェア条件を最小にするように、これらパラメータのうちの１つ以上を自動的に最適化できる方法が提供される。従って、相互接続のためのハードウェア条件を最小にすることにより、プロセス自体のために所定サイズのデバイスのうちのより大きい部分が残るので、同じ量のロジックから高い性能を達成することが可能となる。
【００４６】
一例では、本方法は、デザイン内のプロセス間のフロー制御方法を自動的に決定する手順を含む。
【００４７】
ストリームプロセッサ内では、異なるフロー制御方法を使って、一般に異なるプロセスが作動する。プロセス間のフロー制御手順を自動的に決定することにより、プロセスに関連しない機能専用とすべきプロセッサリソースの量を最小にできるよう、プロセッサ内のリソースの利用を最適にすることが可能となる。
【００４８】
一例では、本方法は、所定のパラメータを使用することにより、プロセッサ間のｓｔａｌｌ（ストール）レイテンシーのスケジュールを定めるステップを含む。
【００４９】
プロセッサ内のｓｔａｌｌレイテンシーのスケジュールを定めるための所定のパラメータを使用することには大きな利点がある。特にプロセッサ内のポートまたはプロセスのレイテンシーを定めるための変数またはパラメータを使用し、次にこのパラメータに対するその後のレイテンシーを定めることにより、システム内のレイテンシーを全体として、またはシステムのうちの接続された部分を容易かつ効率的にモデル化するかまたは割り当てることができる。
【００５０】
一例では、本方法は、前記デザイン内のプロセス間のフロー制御手順が、どれも同じ特定されたタイプである場合に、接続されたプロセスのカスケード内のｓｔａｌｌレイテンシーを示すためのパラメータを定めるステップと、記憶条件を最小にするよう、前記パラメータに対する値を決定するステップとを含む。
【００５１】
一例では、前記プロセスの各々が、接続されたプロセスおよび対応するクロックレートの１つ以上の入力ポートに接続された１つ以上の出力ポートを有する例では、本方法は、前記接続されたポートのための前記クロックレートを最適化するステップを含む。
【００５２】
前記プロセスの各々が、接続されたプロセスおよび対応するデータ幅の１つ以上の入力ポートに接続された１つ以上の出力ポートを有する例では、本方法は、接続されたペアのポートに対してデータ幅を自動的に最適化するステップを含む。
【００５３】
前記入力デザインが、非周期的グラフ状となっており、このグラフではプロセスがグラフの頂点であり、プロセス間のデータストリームが前記頂点の間の弧となっている例では、本方法は、前記グラフのサブツリーに対する自動最適化を実行し、好ましくは１回終了すると、グラフ全体が最適化されるまで、前記グラフのその後のサブツリーに対し、自動最適化を実行するステップを含む。
【００５４】
各プロセスの前記データ幅およびクロックレートに対する最適値を決定するために任意の数値方法を利用できる。好ましい方法は、組み合わせ最適化方法を利用する方法である。
【００５５】
このことは、プロセスノード内の値の各コンフィギュレーションに対するコストを決定するステップと、前記プロセスに対する全最小コストを提供する値を前記プロセスに割り当てるステップによって、達成できる。このコストは、特定のコンフィギュレーションを実施できるようにするためのグルーロジックまたはプロセスに関連しないハードウェア専用としなければならないハードウェアリソースの量として定義される。
【００５６】
一例では、本方法は、あるプロセスから別のプロセスに移行するためのコストを決定するステップを備え、全コストは、プロセス内の値のコンフィギュレーションに対するコストに、あるプロセスから別のプロセスに移行するための前記コストを加えた合計である。したがって、目的の、一貫した、効果的で、信頼できる方法は、その最適値が、プロセスのデータ幅及びクロック・レート等のパラメータで確定できる。
【００５７】
一例では、１つのサブツリーに対する全コストが一旦決定されると、本方法は、全グラフが最適化されるまでグラフのうちのその後のサブツリーに対する前記最適化を実行するステップを含む。
【００５８】
従って、性能およびリソースの利用を最適にするように、全プロセスネットワークを自動的にコンフィギュアできるようにする方法が提供される。
【００５９】
一例では、この方法は、最適化が一旦実行されると、デザイン内にアスペクト変換ロジックを自動的に提供するステップを含む。
【００６０】
従って、第１の組の最適化が一旦考慮されると、例えばフロー制御レイテンシーまたはクロックレート、および／またはデータ幅のパラメータ化が考慮されると、デザインにアスペクト変換ロジックを追加できる。従って、このことによって、かかるアスペクト変換ロジックの使用量を最小にできる。その理由は、デザインに対して他の最適化またはコンフィギュレーションが一旦行われると、この変換ロジックしか追加されないからである。
【００６１】
一例では、本方法は、一旦最適化が行われた場合に、デザイン内にアダプタロジックを自動的に設けるステップを含む。
【００６２】
従って、再びアスペクト変換ロジックを使用した場合のように、第１の組の最適化が一旦考慮されると、デザインにアダプタロジックを追加できる。このことも、かかるロジックの使用を最小にできる。その理由は、デザインに対して他の最適化またはコンフィギュレーションがなされた場合には、かかるロジックしか追加されないからである。
【００６３】
一例では、本方法は、最適化が一旦実行されると、前記デザイン内にＦＩＦＯを自動的に挿入するステップを含む。
【００６４】
一例では、本方法は、各最適化ステップの後に、クロックレートおよびデータ幅を最適化するステップを含む。
【００６５】
一例では、ａ）前記ソースクロックレートと前記シンククロックレートとが同一でない条件、および
ｂ）前記ソースフロー制御方法と前記フロー制御方法とが同一でない条件を含む１つ以上の条件が満たされた場合に、任意のペアのプロセスの間だけにＦＩＦＯを挿入する。例えば図１３に示されるように、他の種々の条件を考慮してもよい。この方法は、追加されるＦＩＦＯの量を最小に維持できることを保証する。
【００６６】
本発明の第２の様相によれば、本発明の第１の様相の方法を使用するデザインを生成するステップと、前記生成されたデザインを実施するための前記ロジックデバイスをプログラミングするステップとを含む、プログラム可能なロジックデバイスを作成する方法が提供される。
【００６７】
本発明の第３の様相によれば、コンピュータで実行時に、本発明の第１の様相のステップを実行するようになっているコンピュータプログラムが提供される。
【００６８】
このコンピュータプログラムは、コンピュータで読み取り可能なメディアに記憶することが好ましい。このコンピュータで読み取り可能なメディアは、任意の適当な種類のメディアでよい。例えばこのメディアを、ディスクまたは同等物、もしくは信号のような伝達可能なメディアとすることができる。例えばこのメディアは、インターネットまたは同様なものを通して提供できる任意の伝達可能な種類のものでもよい。
【００６９】
本発明の第４の様相によれば、本発明の第１の様相に係わる方法を使用して生成されるデザインを有するフィールドプログラマブルゲートアレイまたは他のプログラマブルロジックが提供される。
【００７０】
不要なメモリまたはハードウェアの利用が全体に最小とされ、および／または不要となるので、本発明の第１の様相に従って決定されたデザインを有するように形成されたＦＰＧＡまたはその他のプログラマブルロジックデバイスは、最適な性能を提供できる。更に、各コンポーネントの最適化をユーザーがマニュアルで検討することによって生成されたデザインが受ける誤りを生じないように、ＦＰＧＡまたはその他のプログラマブルロジックデバイスが迅速かつ効率的に創出される。
【００７１】
本発明の第５の様相によれば、本発明の第１の様相に係わる方法を実行し、前記生成されたデザインを有するプログラマブルロジックデバイスのプログラミングのための命令のリストを生成するようになっているプロセッサを含む、ハードウェアストリームプロセッサデザインを生成するためのシステムが提供される。
【００７２】
プロセスに関連しないタスクのためのメモリおよびロジック条件が最小とされるか、または解消される、最適にされたＦＰＧＡの形成を可能にするよう、ネットリストのような命令の必要なリストをユーザーが生成できるようにするシステムが提供される。
【００７３】
本発明の別の様相によれば、複数の相互接続されたプロセスを含むＦＰＧＡプロセッサのためのデザインを生成する方法であって、指定された入力デザインを受信したときに、このデザイン内で前記プロセスの各々の働きを最適化するステップと、この最適化を一旦実行すると、前記最適化されたプロセスの各々の間の前記相互接続を最適化するステップを備える、ＦＰＧＡプロセッサのためのデザインを生成する方法が提供される。これによって、最小のリソース利用率で性能レベルを維持することが可能となる。
【００７４】
換言すれば、設計者が一般に特定のフロー制御方式を選択し、そのフロー制御方式と共に使用できるようにすべてのカーネルまたはプロセスを適合させるような従来の方式と対照的に、本方法では、各カーネルのための最適なフロー制御方式を選択し、次にカーネル間のクロス最適化を実行する。換言すれば、パラメータ化された方式の「スペース」をサポートし、カーネル間のクロス最適化に先立ち、個々の各カーネルに対して最適なポイントをスペース内から選択する。
【００７５】
本発明の別の様相によれば、プロセスカーネルおよび相互接続部を含む、ストリーミングプロセッサのための最適にされたプログラマブルロジックデザインを自動的に生成するための方法であって、プログラマブルロジックデザインプロセス中にカーネル相互接続部をパラメータ化するステップと、最適にされたプログラマブルロジックデザインを生成するためのパラメータを最適化するステップとを含む方法が提供される。
【００７６】
上記記載にわたり、例を参照すれば、必要な他の任意の特徴と組み合わせて上記特徴の任意の１つ以上を提供できることが理解できよう。
次に、添付図面を参照し、本発明の実施形態について詳細に説明する。
【図面の簡単な説明】
【００７７】
【図１】２つのカーネル（ＡおよびＢ）を含むハードウェアプロセッサの一部の略図である。
【図２】外部フロー制御方式を使用する計算パイプラインの略図である。
【図３】クロスクロックロジックを利用する２つのカーネル（ＡおよびＢ）の略図である。
【図４】異なるデータ幅を有する２つのカーネル（ＡおよびＢ）を含むデータフローパスの略図である。
【図５】デッドロックを防ぐためにバッファを必要とする２つのカーネル（ＡおよびＢ）の略図である。
【図６】ｓｔａｌｌ／ｖａｌｉｄフロー制御を使用する２つの入力ストリームのうちの１つからデータを選択するｍｕｘカーネルの略図である。
【図７】ｓｔａｌｌ／ｖａｌｉｄフロー制御を使用する２つの入力ストリームのうちの１つからデータを選択するｍｕｘカーネルの略図である。
【図８】最適化されたハードウェアデザインを生成する方法を略図で示すフローチャートである。
【図９】２つのクロックドメインおよび１つの幅ドメインを有するカーネルの略図である。
【図１０】ｍｕｘカーネルのチェーンの略図である。
【図１１】カーネルのためのクロックおよび幅を最適にする際のステップの略図である
【図１２】最適化されたバッファ挿入のプロセスを略図で示す。
【図１３】ＦＩＦＯバッファの最適化におけるステップの略図である。
【発明を実施するための形態】
【００７８】
本方法および装置がどのように作動するかの一例を詳細に説明する前に、本システムの一般的な特徴について説明する。
【００７９】
正しいフロー制御を保証し、デッドロックを防止するために、パラメータ化されたポートを接続する方法およびストリーミングプロセッサ上のインターフェースポートのパラメータ化が提供されている。このパラメータ化により、所定の条件が満たされるように、カーネル上のＦＩＦＯポートまたは入出力デバイスの間のインターフェースを記述するためのシステマティックな方法が提供される。まずシステムは、自動的に生成されたインターフェースロジックにより任意のカーネルポートを他の任意のカーネルポートに接続できるようにすることを保証する。第２に、自動コンパイラーが相互接続を自動的に最適にし、ハードウェアリソースの利用量および／または最大クロック周波数を低下する。換言すれば、（ＩＰライブラリーからの、またはユーザーが設計した）ハードウェアカーネルが、パラメータ化された方法によって記述されたストリーミング入力／出力ポートを有することが可能である。実施形態では、パラメータ化は、
インターフェースのタイプ（ＰＵＳＨ  ｖｓ  ＰＵＬＬ）
インターフェースの幅
インターフェースのクロックレート
フロー制御信号（例えばｓｔａｌｌ／ｅｍｐｔｙ）のレイテンシーのうちの１つ以上を決定することを含むことができる。
【００８０】
相互接続をストリーミングするためのクロックドメインおよび特徴の自動最適化も提供される。中間カーネル（特にルーティングｍｕｘおよびｄｅｍｕｘのような簡単なカーネル）のためのクロックドメインおよび特徴（ビット幅）を選択できる。ビット幅およびクロックドメインを適正に選択することにより、クロックドメインの間でデータを移動させ、異なるビット幅の間のデータをパック／アンパックする「グルーロジック」のためのハードウェアリソースを最小にする。このグルーロジックを、一般にカーネルの間、およびカーネルとＩＯデバイスとの間でのデータの移動に純粋に関係するロジックと見なすことができる。
【００８１】
従って、マニュアルによる最適化努力をすることなく、最適なリソース利用率を有するデザインを生成するための最適化問題を解決できる。かかる最適化により、デザインはより小型で安価なデバイスに適合できるか、または性能または機能を失うことなく、他の強化のために、より多くのリソースを残すことができる。
【００８２】
後述するように、このことはグルーロジックのコスト、すなわちグルーロジック専用にしなければならないハードウェアリソース（例えばＦＰＧＡリソース）の量を最小にするように中間カーネルに幅およびクロックを割り当てることによって達成できる。単一ストリーム接続のためのグルーロジックのコストは、ビット幅およびクロックドメインが同じであるかどうかに応じて決まる。異なるクロックドメインの間でデータを転送させるには、ストリーミングデータと同じビット幅を有する非同期式ＦＩＦＯバッファが必要であり、異なるビット幅の間でデータを転送するには、パッキング／アンパッキングロジック、もしくは異なるサイズの読み出しポートおよび書き込みポートを有するＦＩＦＯバッファが必要である。
【００８３】
更に、実施形態では、デッドロックを防止し、ハードウェアリソースの利用を最小にするためのバッファリングの自動最適化が提供される。後述するように、自動ツールにより、バッファの位置および量を最適にするように、カーネルのバッファ化条件を指定するための方法が提供される。各カーネルは、多数の入力ポートおよび出力ポートを有し、各ポートに１つの「バッファスペース」の制約値が関連する。各ポートは、Ｎバイトのバッファリング（Ｎは０にすることができる）を必要とするか、またはこれを提供する制約値を有する。これによってマニュアルによる最適化努力をすることなく、デッドロックを防止するためにバッファリングで消費されるハードウェアリソースを最小にできるという利点が得られる。
【００８４】
「Ｎバイトのバッファリングを必要とすること」は、出力／入力がＮバイトのバッファリングのバッファリングを扱わなければならないことを意味する。１つの出力ポートに対しては、このことはデザイン内の他のカーネルが行っていることとは無関係に、デッドロックを生じることなく、バッファ内に記憶されるＮバイトを出力が自由に生成できることを意味する。１つの入力ポートに対しては、このことは入力においてバッファ化されるＮバイトまでのデータが生じることを意味する。Ｎバイトのバッファリングを行うことは、カーネルが他の入力／出力から独立したそれぞれの入力／出力において、カーネルが内部にＮバイトのバッファリングを含むことを意味する。各カーネルの設計者は、すべての入力／出力に対する制約値を指定しなければならない。自動化されたツールは、デザイン内のすべてのストリーム接続に対し、（提供されるか、または必要とされる）バッファの合計がゼロよりも大となることを保証する。
【００８５】
最後に、ハードウェアリソースの利用量を最小にするための相互接続の自動的スケジューリングが提供される。
【００８６】
次に、より詳細に説明すると、図８は最適にされたハードウェアデザインを生成する方法を略図で示すフローチャートである。この方法は、適当な言語、例えばＪａｖａ（登録商標）言語のコンパイラーとして具現化でき、このコンパイラーは、入力デザインを実行し、ネットリスト状のハードウェアデザインまたはパイプライン状のハードウェアデザインのための所望するプレーンを表示する他のかかる手段を生成する。このコンパイラーは、ある形態のリーダーまたはキャリア上に記憶されるコンピュータコードとして提供できる。一実施例では、コンパイラーはディスクまたは他のかかる形態のコンピュータで読み取り可能なメディアに記憶されたコードである。ネットリストは、プログラマブルハードウェアデザイン、例えばＦＰＧＡ上でコンフィギュアすべきコンポーネントのシーケンスのためのものでよい。
【００８７】
図８を参照すると理解できるように、コンパイラーはステップ７２で入力デザイン（カーネル／ＩＯの間のカーネルインターフェースおよび接続性の記述）を取り込み、ステップ８４で、最適にされたハードウェア出力デザインを生成する。コンパイラーを通るフローは、コンパイラーの作動のステージを示す個々のブロックと共に、ブロックダイアグラムとして示されている。後述するように、最適化は数個のステージ（番号２〜６）で実行される。実際には、これら最適化の多くを単一ステージに組み合わせてもよいし、個々の最適化を省略してもよい。所定の最適化ステージを同時に検討すると、より良好な質の結果を得ることができる。実際のデザインに対して良好な結果を与え、コンパイル時間を短くするような妥協を示すことができる実現例を決定することが好ましい。
【００８８】
第１ステップ７２では、コンパイラーに入力デザインが提供される。次に、第２ステップ７４においてデザイン全体にわたるｓｔａｌｌレイテンシーのスケジュールが定められる。次のステップ７６では、デザインに対するクロックおよびデータ幅などが最適化される。次のステップ７８では、デザインにアスペクト変換ロジックが追加され、次に再びクロックおよびデータ幅が最適化される。次にステップ８０において、デザインに対し、アダプタロジックが追加され、次にクロックおよびデータ幅に対するその後の最適化が行われる（ステップ７６）。最後に、ステップ８２で、既に他のすべての最適化が実行されているにもかかわらず、完了していないデザインの部分がＦＩＦＯを追加することにより、ステップ６で解決される。
【００８９】
更に時間が経過すると、ステップ７６において、クロックおよびデータ幅が最適化され、最後にハードウェアのためのデザインが出力として提供される。従って、クロックおよびデータ幅を最適化するステップ７６は、デザインに別のカーネルを追加できる他の最適化ごとに繰り返すことが好ましい。その理由は、かかる追加されるカーネルは、これら追加カーネルに割り当てられるクロックおよびデータ幅を有するからである。次に、ステップ８４において、プログラマブルロジック用のデザインが生成される。従って、一実施形態では、この方法はＦＰＧＡデザインプロセス中にプロセス相互接続のパラメータ化によって得られる最適化されたＦＰＧＡデザインの自動生成を可能にする。
【００９０】
デザインが一旦完了すると、既知のプログラミング技術を使ってこのデザインを実行できる。例えば決定されたデザインを有するプログラム化されたデバイスが使用のために生成されるよう、ＦＰＧＡに対し、適当なプログラミングを実行できる。次に、これまで述べ、かつ図８に示されたステップの各々について詳細に説明する。
【００９１】
入力デザイン
マネージャーコンパイラーへの入力７２は、一般にカーネルとカーネル間のデータストリームとを含むユーザーデザインである。このユーザーデザインは、グラフの頂点としてカーネルを有し、頂点間の弧としてデータストリームを有する向きが定められたグラフとして表示することが好ましい。実際の入力デザインは、例えばＪａｖａ（登録商標）ソフトウェアライブラリーにより、公知の態様で構成できる。マネージャーコンパイラーは、アルゴリズムを簡略化するために、周期的入力グラフを非周期的グラフに変換する。このことは、複数のサイクルにわたって複数の最適化が行われないことを意味し、このような複数のサイクルは、比較的まれなことである。これとは異なり、周期的入力グラフ上で直接より複雑なアルゴリズムが作動することもできる。周期的または円形グラフとは、１つ以上のサイクル、例えば閉じたチェーン内に接続されたある数の頂点を含むグラフのことである。これと対照的に、非周期的グラフとは、複数の頂点および向きが定められたエッジの集団によって形成されるグラフのことであり、ここで各グラフはある頂点を別の頂点に接続する。よってある頂点でスタートし、最終的にスタートした頂点に再び戻るようなループを形成する、あるシーケンスのエッジに従うような方法はない。
【００９２】
上記のように、各カーネルは、一般に、多数の入力／出力ポートおよび多数の「幅ドメイン」および「クロックドメイン」を有する。１つの幅ドメインとは、同じアスペクト（幅）を有する入力／出力ポートのグループのことであり、１つのクロックドメインとは、同じクロックに同期する入力／出力ポートのグループのことである。幅とクロックドメインの双方は、固定されていてもよい（固定値に指定されていてもよい）し、または浮動（デザインの他の部分に合致するような任意の値に指定可能）でもよい。
【００９３】
例えば図９を参照すると、カーネルＡは、２つのクロックドメイン（ｃおよびｄ）と１つの幅ドメイン（ｗ）とを有することが理解できよう。この場合、すべての入力／出力ポートは同じ幅を有し、すべての入力は、同じクロックを有し、すべての出力は同じクロックを有する。
【００９４】
各入力ポート（Ｐ、Ｑ、Ｒ、Ｓ）および各出力ポート（Ｘ、Ｙ、Ｃ、Ｄ）は、「フロー制御タイプ」も有する。このフロー制御タイプは、データ転送（ＰＵＳＨ／ＰＵＬＬ）およびそのフロー制御のパラメータ化（ｓｔａｌｌレイテンシー、ａｌｍｏｓｔ  ｅｍｐｔｙ（ほとんど空の）レイテンシー）を管理するのに使用されるフロー制御を指定する。
【００９５】
入力および出力にＰＵＳＨフロー制御を有するケースでは、出力側のｓｔａｌｌレイテンシーパラメータは、入力側のｓｔａｌｌレイテンシー＋定数Ｋとして表記できる。更に（ＰＵＬＬ→ＰＵＬＬに対する）同様な特殊なケースを取り扱うこともできるが、実際にはこのような状況は一般に生じるものではない。定数Ｋの重要性は下記のようにｓｔａｌｌレイテンシーのスケジューリングを可能にすることである。
【００９６】
【表１】
2012164316.tif 000003
【００９７】
フロー制御タイプはｓｔａｌｌレイテンシー（ＰＵＳＨ）またはほとんどｅｍｐｔｙのレイテンシー（ＰＵＬＬ）によりパラメータ化される。ｓｔａｌｌレイテンシーとは、データが失われる前にソースがＶＡＬＩＤとアサートし続けることができたシンクにより、ＳＴＡＬＬがアサートされた後のシンクの数のことである。ほとんどｅｍｐｔｙなレイテンシーとは、ソースがアンダーフロー状態となる前にソースがＡＬＭＯＳＴ＿ＥＭＰＴＹとアサートした後にシンクがリード（ＲＥＡＤ）とアサートできたサイクル数のことである。瑣末なことであるが、同じフロー制御およびパラメータを有する入力／出力ポートを共に接続してもよい。同一でないケースに対しては後に詳細に説明するように、可能な場合にはあるグルーロジック、または追加バッファリングにより、２つのインターフェースを接続するのに十分な情報が存在する。
【００９８】
あるポートを別のポートに接続できるかどうか、更に接続できる場合にハードウェアを追加すべきかどうかの判断は、次の規則に基づいて行われる。
１．ＰＵＬＬ→ＰＵＳＨが軽微なグルーロジックを必要とすること
２．ＰＵＳＨ→ＰＵＬＬがバッファリングを必要とすること
３．シンクのほとんどｅｍｐｔｙなレイテンシー＞ソースのほとんどｅｍｐｔｙなレイテンシーである場合に、ＰＵＬＬ→ＰＵＬＬがバッファリングを必要とすること
４．ソースのｓｔａｌｌレイテンシー＞シンクのｓｔａｌｌレイテンシーである場合に、ＰＵＳＨ→ＰＵＳＨがバッファリングを必要とすること
【００９９】
スケジュールｓｔａｌｌレイテンシー
次に、ステップ７４において、ｓｔａｌｌレイテンシーのスケジュールを定める。この動作は、ＰＵＳＨ入力およびＰＵＳＨ出力の共通する特殊なケースを有するカーネルのｓｔａｌｌレイテンシーのスケジュールを定めることにより、バッファリングを最小かするように働く。図１０の例では、ｍｕｘカーネルのチェーンがｓｔａｌｌレイテンシー（ＳＬ）＝１を有するプッシュソースと、ｓｔａｌｌレイテンシー（ＳＬ）＝１０を有するプッシュシンクとの間を接続している。スケジューリングアルゴリズムが使用される。好ましい例では、ＡＳＡＰ（できるだけ早く）スケジューリングアルゴリズムが使用されるが、基本的には任意のスケジューリングアルゴリズムを使用できる。１つの例として整数リニアプログラムがある。
【０１００】
次に図１０を参照し、特殊な例について説明する。理解できるように、この例では、ソースとシンクプッシュインターフェースとの間でｍｕｘカーネルのチェーンが設けられる。ｍｕｘの各々の出力上のｓｔａｌｌレイテンシー（ＳＬ）は、対応する入力上でのｓｔａｌｌレイテンシーの関数である。対応するシンクのＳＬよりも大きいＳＬを有するソースから進むときには、バッファリングが必要である。ＳＬの値を適当に選択することにより、ｍｕｘカーネル間のバッファリングを最小にするか、解消することが可能である。ｓｔａｌｌレイテンシーをスケジューリングするステップがない場合、入力／出力上のｓｔａｌｌレイテンシーを固定する（例えば出力ではＳＬ＝２および入力ではＳＬ＝１）。この場合、ソースにおけるＳＬ＝２からシンクにおけるＳＬ＝１まで進むパスが存在するので、２つのｍｕｘカーネルの間に無駄にバッファリングが挿入される。
【０１０１】
再び図８を参照する。ｓｔａｌｌレイテンシーのスケジュールが定めた後に、ステップ３においてネットワーク全体にわたってクロックおよびデータ幅が最適化される。
【０１０２】
クロックおよびデータ幅の最適化
クロック／幅最適化ステップ（ステップ３）は、幅／クロック移行ロジック上でのリソースの利用を最小にするために、固定されたクロック／ビット幅を有していないカーネルのクロックおよびビット幅をインテリジェントに指定する。これを行うためにはある種の組み合わせ最適化を使用できる。本例では、ダイナミックなプログラミングタイプのアルゴリズムが使用され、このアルゴリズムは、複雑な問題をより簡単なサブの問題に分解することにより、最適化の複雑な問題を解決する。これとは異なり、多数の精密／近似技術も使用できる。以下、非限定的な特定の例について詳細に説明する。デザインに対し、追加カーネルを追加できる他の最適化ステップを実行するごとに、クロック／ビット幅最適化ステップを繰り返す。その理由は、これらカーネルは自らに割り当てられるクロック／ビット幅を有していなければならないからである。
【０１０３】
一例では、使用されるアルゴリズムは次のようなものである。
１．プロセスの非周期的グラフを多数の（森の）ツリーに分割する。１本のツリーはグラフノード（プロセス）のサブセットであり、ここでは任意の２つのノードの間に正確に１つの簡単なパスが存在する。従って、非周期的グラフを使用すると、全体としてネットワークの分割が簡単になる。
２．各ツリーに対し、複数のノードにわたり、ポストオーダーで、すなわち、まず葉から、最後に根となるように繰り返しを実行する。
３．各ノードに対し、クロック／ビット幅のすべての可能な割り当ての組を計算する。例えば２つの可能なクロック（ＣＬＫ＿ＡおよびＣＬＫ＿Ｂ）および２つの可能な幅（８、１６）が存在する場合、可能な割り当ての組はＣＬＫ＿Ａ：８、ＣＬＫ＿Ｂ：８、ＣＬＫ＿Ａ：１６、ＣＬＫ＿Ｂ：１６となる。
４．各割り当ての組に対し、各チャイルドノードからのクロック／幅の移行の最小コストを計算する。この割り当てコストはチャイルドノードの割り当てのコスト＋チャイルドノードの割り当てから現在の割り当てまでの移行のコストとして計算される。
【０１０４】
図１１は、１つのノード（ツリーノード：カーネルＡ）と、２人のチャイルド（ＸおよびＹ）８６および８８から成る簡単なツリーにおける割り当てコストの計算の作業例を示す。各チャイルドは、クロック／幅の可能な各割り当てに関連する最小コストを有する。最初のチャイルド８６に対してクロックＡおよび幅８を有するための最小コストは「１００」となる。クロックＡおよび幅１６を有するための最小コストは２００となる。第２のチャイルド８８に対して、クロックＢを有する場合のコストは、割り当てられた幅（８または１６）にかかわらず同じ「１５０」となる。こうしてそれぞれのチャイルドに対し、幅およびクロックを割り当てるためのコストが決定される。
【０１０５】
次に、カーネルＡに対する値がクロックＡおよび幅８として決定された場合に異なるデータ幅の間で移行するためのコストがどのようになるかが決定される。異なる移行に対するコストの例を示す下記の表２を参照すれば、このことが理解できよう。
【０１０６】
【表２】
2012164316.tif 000004
【０１０７】
理解できるように、データ幅の変化がなく、クロックの移行もない場合、この「移行」に対するコストはゼロとなる（実際にデータを移行するためにはグルーロジックは、不要となる）。データ幅の変化（８から１６へ、または１６から８へ）があるが、クロックの移行がない各ケースでは、コストは「５」となる。データ幅の変化とクロックの移行の双方が存在する各ケースでは、コストは１５となる。
【０１０８】
ついに、全体で最小のコストを生成する種々のノードのパラメータに対する値を探すために、チャイルドノードに対する指定のすべての組み合わせを列挙する。各行で計算されるコストは、チャイルドノードの割り当てコストに特定の割り当てに対する移行コストを加えた（チャイルドノードごとの）合計である。下記の表３は、すべての組み合わせを列挙したこの組み合わせを示す。
【０１０９】
【表３】
2012164316.tif 000005
【０１１０】
表３内の数字は、表２からのコストの場合の図１１に示されたオプションからの数字である。従って、行１では、クロックＡおよびデータ幅８を有するカーネルＡに対するコストは、クロックＡおよびデータ幅８を有するチャイルドＸの場合のコスト（１００）＋クロックＢおよびデータ幅８を有するチャイルドＹの場合のコスト（１５０）＋必要とされる移行コスト（０＋１０）から成る。従って、全最小コストは２６０であり、よって指定される割り当てが行われる。この計算を使用すれば、カーネルＡに対するクロックまたはデータ幅の他の任意の割り当ては、全体により高いコストとなることが明らかとなると理解できよう。例えばチャイルドＸにデータ幅１６が割り当てられ、チャイルドＹにデータ幅８が割り当てられた場合、この移行の全コストは３６５に跳ね上がり、この値はかなりの増加量となる。
【０１１１】
カーネルＡに対して一旦割り当てが行われると、カーネルＡ自体が計算ステップ内のチャイルドノードとなるので、全体としてツリー（および最終的にはネットワーク）に対する値を決定できる。従って、この方法により全体としてデバイスに対する働きを失うことなく、かかるパラメータの割り当てを自動的かつ効率的に行うことが可能となる。
【０１１２】
アスペクト変換ロジックの挿入
再び図８を参照する。ネットワーク全体にわたり、一旦データ幅およびクロックが決定されると、ステップ７８においてデザイン内に必要なアスペクト変換ロジックが挿入される。図４に示し、図４を参照してこれまで説明したように、アスペクトのある変化がある場合、１つのアスペクトにおける受信データを処理し、このデータを第２のアスペクトで出力に提供するための、ロジックが必要となる場合がある。シフトレジスターは、アスペクト変換ロジックの周知の一例であり、このロジックはレジスターの入力における狭い幅のＮを、Ｋサイクルごとに出力における幅の倍数Ｎ×Ｋに変換する。
【０１１３】
必要なアスペクト変換ロジックを挿入した後に、新しく挿入されたロジックに対して再びクロックおよび幅最適化プロセスが実行される。
【０１１４】
アダプタロジックの挿入
次に、ステップ８０において、アダプタロジックが挿入される。このアダプタロジックは、表１を参照してこれまで説明したように、異なるタイプのフロー制御の間で変換をするのに必要とされる。アダプタロジックは、各特定の状況に応じて必要とされるようなグルーロジックまたは追加バッファリングの形態をとる。必要とされるアダプタロジックを挿入した後に新たに挿入されたロジックに対して再びクロックおよび幅最適化ロジックが実行される。
【０１１５】
ＦＩＦＯの挿入
次にステップ８２において、ＦＩＦＯが挿入される。このステージは、すべてのカーネルなどがパラメータ化され、上記のようにレイテンシーを最適にし、幅およびクロックが一旦割り当てられた場合に実行される。必要とされた場合に追加ＦＩＦＯが挿入されることにより、デザインに関する残留問題が解決されるのはこのステージだけである。利用される追加ハードウェアを最小に維持することが望ましいので、このステージは他の最適化ステージが一旦実行された場合にしか実行しないことが好ましい。
【０１１６】
次に図１２を参照し、追加バッファリングが必要とされ得るような状況について説明する。図１２に示された左側部分に示されるように、最初に２つのカーネル、すなわちカーネルＡとカーネルＢとが接続される。カーネルＡのポートＱは、２キロバイトのバッファリングを必要とするが、他方、カーネルＡのポートＱが接続されているカーネルＢのポートＲは、１キロバイトのバッファリングしか行わない。従って、１キロバイトの追加バッファリングが必要とされると判断され、よってこのような挿入が行われる。２キロバイトの記憶をするためのＦＩＦＯが選択され、他方、ＦＩＦＯの出力は１キロバイトしか必要としない。従って、１キロバイトのＦＩＦＯを挿入することにより、カーネルＡとＢとの間の競合の問題が解決される。
【０１１７】
図１３を参照する。カーネル間で必要とされるＦＩＦＯを決定する際のステップを示すための略フローチャートが示されている。最初にステップ９０において、当該接続されたシンクおよびソースの各々に対するクロックおよびフロー制御タイプのポートが同じであるかどうかが判断される。これらが同じである場合、プロセスはステップ９２に進み、ここで実際のタイプのソースが決定される。同じでない場合、デザイン内に１つのＦＩＦＯが挿入される（ステップ９６）。
【０１１８】
ＰＵＳＨタイプのソースの場合、プロセスはステップ９４に進み、ここでソースのｓｔａｌｌレイテンシー（ＳＬ）が接続されたシンクのｓｔａｌｌレイテンシーよりも大きいかどうかの判断がなされる。大きい場合、デザイン内に１つのＦＩＦＯが挿入される（ステップ９６）。大きくない場合、ソースバッファのスペースがシンクのスペースよりも大きいかどうかの判断がなされる（ステップ９８）。大きくない場合、このプロセスは完了し（ステップ１００）、追加ＦＩＦＯは不要である。ソースバッファのスペースがシンクのスペースよりも大である場合、デザイン内に１つのＦＩＦＯが挿入される（ステップ９６）。
【０１１９】
ステップ９２に戻り、ここでソースのタイプが識別される。ソースがＰＵＬＬソースであると判断された場合、ステップ１０２においてソースの「ほとんどｅｍｐｔｙなレイテンシー」（ＡＥＬ）が接続されたシンクのレイテンシー未満であるかどうかの判断がなされる。
そうである場合、デザイン内に１つのＦＩＦＯが挿入される（ステップ９６）。そうでない場合、プロセスは上記のようにステップ９８へ進み、ここでソースバッファのスペースがシンクのスペースよりも大きいかどうかの判断がなされる。従って、簡単であるが信頼できる機構が提供され、この機構によって、本願に記載したようなノードのネットワーク内で追加ＦＩＦＯが必要であるかどうかの判断を自動的に行うことができる。
【０１２０】
一実施形態において、可変で、可能な複数の解決案により、複雑なシステムの最適化を行うための方法および装置が提供されることが理解できよう。この方法は、所望するプロセッサによって実行されるべきプロセスを指定する入力を受信すると、デザイン内のパラメータを自動的に最適化し、指定された機能を実行するためのハードウェア条件を最小にするようになっている。一旦パラメータが決定されると、最適化に従って１つのデザインが生成される。従って、複数のプロセスにわたるレイテンシー、フロー制御および可変クロックレートおよびデータ幅に関する、上記問題が解決される。
【０１２１】
以上で、図示した例を参照して本発明の実施形態について説明した。しかしながら、本発明の範囲内では、上記例に対して変更および修正を行うことができると理解できよう。
【図１】
2012164316.tif 000006
【図２】
2012164316.tif 000007
【図３】
2012164316.tif 000008
【図４】
2012164316.tif 000009
【図５】
2012164316.tif 000010
【図６】
2012164316.tif 000011
【図７】
2012164316.tif 000012
【図８】
2012164316.tif 000013
【図９】
2012164316.tif 000014
【図１０】
2012164316.tif 000015
【図１１】
2012164316.tif 000016
【図１２】
2012164316.tif 000017
【図１３】
2012164316.tif 000018
【外国語明細書】
2012164316000001.pdf