(57)【要約】マクロスケジューラは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）デバイスのセットの複数のマクロコンポーネントを列挙するデータベースを更新するように構成されたリソース追跡モジュールと、設計のための１つ以上の指定されたマクロコンポーネントを示す第１設計定義を第１クライアントデバイスから受信するように構成された通信インタフェースと、第１設計定義に示された１つ以上の指定されたマクロコンポーネント毎に複数のマクロコンポーネントのうち１つを割り当てることによって、設計のためのマクロコンポーネントの第１セットを割り当てるように構成されたリソース割り当てロジックと、割り当てられたマクロコンポーネントの第１セットを第１設計定義に従って構成することによって、ＦＰＧＡデバイスのセットに設計を実装するように構成された構成ロジックと、を備える。【選択図】図４
2021503109.tif 000002
【特許請求の範囲】
【請求項１】
フィールドプログラマブルゲートアレイ（ＦＰＧＡ）デバイスのセットの複数のマクロコンポーネントを列挙するデータベースを更新するように構成されたリソース追跡モジュールと、
設計のための１つ以上の指定されたマクロコンポーネントを示す第１設計定義を第１クライアントデバイスから受信するように構成された通信インタフェースと、
前記第１設計定義に示された前記１つ以上の指定されたマクロコンポーネント毎に前記複数のマクロコンポーネントのうち１つを割り当てることによって、前記設計のためのマクロコンポーネントの第１セットを割り当てるように構成されたリソース割り当てロジックと、
割り当てられたマクロコンポーネントの前記第１セットを前記第１設計定義に従って構成することによって、前記ＦＰＧＡデバイスのセットに前記設計を実装するように構成された構成ロジックと、を備える、
マクロスケジューラ。
【請求項２】
前記第１設計定義は、前記１つ以上の指定されたマクロコンポーネント間の接続を定義し、前記１つ以上の指定されたマクロコンポーネントの各々のタイプを示すマクログラフを含む、
請求項１のマクロスケジューラ。
【請求項３】
前記１つ以上の指定されたマクロコンポーネントは、１つ以上の指定されたタイルと、１つ以上の指定された固定関数ユニットと、１つ以上の指定されたレジスタと、を含み、
前記第１設計定義は、前記１つ以上の指定されたタイルの各々のビットファイルを示し、
前記構成ロジックは、前記１つ以上の指定されたタイル毎に、マクロコンポーネントの前記第１セット内の割り当てられたタイルを、前記指定されたタイルのビットファイルに基づいてプログラムするように構成されている、
請求項２のマクロスケジューラ。
【請求項４】
前記リソース追跡モジュールは、マクロコンポーネントの前記第１セットの各々を、前記第１クライアントデバイスのネットワークアドレスと、前記第１クライアントデバイスによって要求された第１タスクと関連付けるようにさらに構成されている、
請求項１のマクロスケジューラ。
【請求項５】
前記リソース追跡モジュールは、前記複数のマクロコンポーネント毎に、ＦＰＧＡデバイスのセットにおける前記マクロコンポーネントの位置及び前記マクロコンポーネントの利用可能性を前記データベースに記録するようにさらに構成されている、
請求項１のマクロスケジューラ。
【請求項６】
前記ＦＰＧＡデバイスのセットの初期構成におけるタスクの実行中に、前記設計のための最適化された構成を生成するように構成された合成ロジックをさらに備え、
前記初期構成は前記第１設計定義によって示され、
前記構成ロジックは、前記ＦＰＧＡデバイスのセットの最適化された構成でタスクの実行を再開する前に前記初期構成を前記最適化された構成に置き換えるように、前記ＦＰＧＡデバイスのセットを再プログラムするように構成されており、
前記合成ロジックは、前記初期構成における初期ポートの位置を、前記最適化された構成における最適化されたポートの位置と相関させる再マッピング通知を生成するように構成されている、
請求項１のマクロスケジューラ。
【請求項７】
前記第１設計定義は、アクセラレータの定義を含み、
前記リソース割り当てロジックは、
第１期間中に前記第１クライアントデバイスからの第１タスクのアクセラレータにおける実行をスケジューリングし、
第２期間中に第２クライアントデバイスからの第２タスクのアクセラレータにおける実行をスケジューリングする、ように構成されている、
請求項１のマクロスケジューラ。
【請求項８】
前記リソース割り当てロジックは、前記複数のマクロコンポーネントの第２セットを、第２クライアントデバイスから受信した第２設計定義によって定義された第２設計に対して割り当てるように構成されており、マクロコンポーネントの前記第１セット内のマクロコンポーネントの第１サブセットは、マクロコンポーネントの前記第２セット内のマクロコンポーネントの第２サブセットとして、前記ＦＰＧＡデバイスのセットのうち同じＦＰＧＡデバイスに配置される、
請求項１のマクロスケジューラ。
【請求項９】
マクロコンポーネントの前記第１セットは、前記複数のＦＰＧＡデバイスのうち少なくとも２つの異なるＦＰＧＡデバイスのマクロコンポーネントを含む、
請求項１のマクロスケジューラ。
【請求項１０】
フィールドプログラマブルゲートアレイ（ＦＰＧＡ）デバイスのセットの複数のマクロコンポーネントを列挙するデータベースを更新することと、
設計のための１つ以上の指定されたマクロコンポーネントを示す第１設計定義を第１クライアントデバイスから受信することと、
前記第１設計定義に示された前記１つ以上の指定されたマクロコンポーネント毎に前記複数のマクロコンポーネントのうち１つを割り当てることによって、前記設計のためのマクロコンポーネントの第１セットを割り当てることと、
割り当てられたマクロコンポーネントの前記第１セットを前記第１設計定義に従って構成することによって、前記ＦＰＧＡデバイスのセットに前記設計を実装することと、を含む、
方法。
【請求項１１】
前記１つ以上の指定されたマクロコンポーネントは、１つ以上の指定されたタイルを含み、
前記第１設計定義は、前記１つ以上の指定されたタイルの各々のビットファイルをさらに示し、
前記方法は、
前記１つ以上の指定されたタイル毎に、マクロコンポーネントの前記第１セット内の割り当てられたタイルを、前記指定されたタイルの前記ビットファイルに基づいてプログラムすることを含む、
請求項１０の方法。
【請求項１２】
マクロコンポーネントの前記第１セットの各々を、前記第１クライアントデバイスのネットワークアドレスと、前記第１クライアントデバイスによって要求された第１タスクと関連付けることをさらに含む、
請求項１０の方法。
【請求項１３】
前記複数のマクロコンポーネント毎に、前記ＦＰＧＡデバイスのセットにおける前記マクロコンポーネントの位置及び前記マクロコンポーネントの利用可能性を前記データベースに記録することをさらに含む、
請求項１０の方法。
【請求項１４】
前記ＦＰＧＡデバイスのセットの初期構成であって、前記第１設計定義によって示される初期構成におけるタスクの実行中に、前記設計のための最適化された構成を生成することと、
前記ＦＰＧＡデバイスのセットの前記最適化された構成でタスクの実行を再開する前に前記初期構成を前記最適化された構成に置き換えるように、前記ＦＰＧＡデバイスのセットを再プログラムすることと、
前記初期構成における初期ポートの位置を、前記最適化された構成における最適化されたポートの位置と相関させる再マッピング通知を生成することと、をさらに含む、
請求項１０の方法。
【請求項１５】
前記第１設計定義は、アクセラレータの定義を含み、
前記方法は、
第１期間中に前記第１クライアントデバイスからの第１タスクのアクセラレータにおける実行をスケジューリングすることと、
第２期間中に第２クライアントデバイスからの第２タスクのアクセラレータにおける実行をスケジューリングすることと、をさらに含む、
請求項１０の方法。
【請求項１６】
前記複数のマクロコンポーネントの第２セットを、第２クライアントデバイスから受信した第２設計定義によって定義された第２設計に対して割り当てることであって、マクロコンポーネントの前記第１セット内のマクロコンポーネントの第１サブセットは、マクロコンポーネントの前記第２セット内のマクロコンポーネントの第２サブセットとして、前記ＦＰＧＡデバイスのセットのうち同じＦＰＧＡデバイスに配置される、ことをさらに含む、
請求項１０の方法。
【請求項１７】
複数のマクロコンポーネントを含むフィールドプログラマブルゲートアレイ（ＦＰＧＡ）デバイスのセットと、 
前記複数のマクロコンポーネントを列挙するように構成されたデータベースと、
スタンドアロンマクロスケジューラと、を備え、
前記スタンドアロンマクロスケジューラは、
前記データベースを更新するように構成されたリソース追跡モジュールと、
設計のための１つ以上の指定されたマクロコンポーネントを示す第１設計定義を第１クライアントデバイスから受信するように構成された通信インタフェースと、
前記第１設計定義に示された前記１つ以上の指定されたマクロコンポーネント毎に前記複数のマクロコンポーネントのうち１つを割り当てることによって、前記設計のためのマクロコンポーネントの第１セットを割り当てるように構成されたリソース割り当てロジックと、
割り当てられたマクロコンポーネントの前記第１セットを前記第１設計定義に従って構成することによって、前記ＦＰＧＡデバイスのセットに前記設計を実装するように構成された構成ロジックと、を備える、
システム。
【請求項１８】
第１クライアントデバイスをさらに備え、
前記スタンドアロンマクロスケジューラは、
前記第１クライアントデバイスからのコマンドに応じて、前記リソース割り当てロジックによる割り当て、及び、前記構成ロジックによる構成を開始するように構成されたアプリケーションプログラミングインタフェース（ＡＰＩ）をさらに備える、
請求項１７のシステム。
【請求項１９】
前記ＦＰＧＡデバイスのセットのうち１つ以上のＦＰＧＡデバイスの各々は、前記１つ以上のＦＰＧＡデバイス内の前記割り当てられたマクロコンポーネントのうち少なくとも１つの配置を決定するように構成されたローカルマクロスケジューラを備える、
請求項１７のシステム。
【請求項２０】
前記ＦＰＧＡデバイスのセットを前記スタンドアロンマクロスケジューラに接続する複数のネットワークチャネルをさらに備える、
請求項１７のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（政府の権利）
本発明は、ＤＯＥから与えられたＬａｗｒｅｎｃｅ  Ｌｉｖｅｒｍｏｒｅ  Ｎａｔｉｏｎａｌ  Ｓｅｃｕｒｉｔｙ（主契約番号ＤＥ−ＡＣ５２−０７ＮＡ２７３４４、サブ契約番号Ｂ６２０７１７）のＰａｔｈＦｏｒｗａｒｄ  Ｐｒｏｊｅｃｔの下で政府の支援を受けてなされたものである。政府は、本発明において一定の権利を有する。
【背景技術】
【０００２】
フィールドプログラマブルゲートアレイ（ＦＰＧＡ）は、製造後にエンドユーザが構成可能に設計された集積回路デバイスである。一般に、ＦＰＧＡは、プログラマブル相互接続ファブリックを構成する相互接続リソースによって互いに接続される、ロジックブロックと呼ばれる非コミットの回路要素のアレイを含む。相互接続リソースは、例えば、異なる構成で相互配線可能なロジックゲートを含むことができる。ＦＰＧＡのロジックブロックは、複雑な組み合わせ関数、又は、ＡＮＤやＸＯＲ等のロジック関数を実行するように構成することができる。ＦＰＧＡのロジックブロックは、単純なフリップフロップ又はより完全なメモリブロックとして実装することができるメモリ素子を含むこともできる。
【０００３】
ＦＰＧＡでは、ロジックブロックは、ルックアップテーブル（ＬＵＴ）や、小さなスタティックランダムアクセスメモリ（ＳＲＡＭ）又はレジスタに値を挿入することによってプログラムされる他の固定関数と等の要素を含むことができる。プログラミングは、ロジックブロックを使用する前に行う必要がある。プログラミング後、ＬＵＴへの関数入力の各組み合わせによって、所定の出力が得られ、任意のロジック関数の実装が可能になる。典型的なＦＰＧＡは、外部メモリデバイスと、構成用の単一の比較的低速なシリアルプログラミングポートと、に依存する。ＦＰＧＡは、通常、「構成モード」と、これとは別の「ユーザモード」とを有し、チップ全体がプログラミングされるのを待機しているアイドル状態、又は、プログラムされたチップが動作中の状態の何れかにある。
【０００４】
本開示は、添付の図面において、限定ではなく一例として示される。
【図面の簡単な説明】
【０００５】
【図１】フィールドプログラマブルゲートアレイ（ＦＰＧＡ）デバイスのセットにおいてハードウェアリソースの仮想化をサポートするコンピューティングシステムの実施形態を示す図である。
【図２】一実施形態による、ＦＰＧＡデバイス内のマクロコンポーネントを示す図である。
【図３】一実施形態による、ＦＰＧＡ内のプログラマブルタイルを示す図である。
【図４】マクロスケジューラの実施形態を示す図である。
【図５】一実施形態による、ＦＰＧＡデバイスを構成し、マクロスケジューリング機能を行うプロセスを示すフロー図である。
【発明を実施するための形態】
【０００６】
以下の説明では、実施形態の十分な理解をもたらすために、特定のシステム、コンポーネント、方法等の例等の多数の具体的な詳細を説明する。しかしながら、当業者には明らかであるように、少なくともいくつかの実施形態は、これらの具体的な詳細なしに実施されてもよい。他の例では、実施形態を不要に曖昧にするのを避けるために、周知のコンポーネント又は方法は、詳細に説明されないか、単純なブロック図形式で提示される。したがって、説明される具体的な詳細は、単なる例示である。特定の実装は、これらの例示的な詳細と異なっていてもよく、それでも実施形態の範囲内であると考えられる。
【０００７】
最近のデータセンタは、クライアントワークロードを実行するための固定リソース又はユーザ構成可能リソースとして使用可能なフィールドプログラマブルゲートアレイ（ＦＰＧＡ）デバイスを含む様々なコンピューティングリソースをクライアントに提供する。いつかのＦＰＧＡデバイスは、このようなデータセンタで用いられるために特別に設計され得る。しかしながら、ＦＰＧＡデバイスを用いる既存のデータセンタは、特に複数の独立クライアントがリソースの使用を要求している場合、ＦＰＧＡのハードウェアリソースを非効率的に割り当てる可能性がある。したがって、このようなデータセンタは、ＦＰＧＡの仮想化を可能にするインタフェースから利益を受けることができ、これにより、リソース共有、時分割多重化及び他の最適化を介して複数のクライアントにサービスを提供する際に、ＦＰＧＡのハードウェアリソースをより効率的に割り当てることができる。
【０００８】
一実施形態では、データセンタは、そのＦＰＧＡデバイスの仮想化を、ＦＰＧＡのハードウェアリソースをマクロコンポーネントと呼ばれるロジックユニットに編成することによってサポートし、アクセラレータ設計は、マクロコンポーネント間の接続を定義するマクログラフとして指定することができる。マクロコンポーネントの使用をスケジューリングするための１つ以上のＦＰＧＡマクロスケジューラは、ＦＰＧＡデバイス自体に組み込まれている、及び／又は、ネットワーク若しくはシステム相互接続を介してＦＰＧＡデバイスに接続されたスタンドアロンユニットとして動作している。
【０００９】
一実施形態では、ＦＰＧＡデバイスは、入出力（Ｉ／Ｏ）ポート、構成可能ロジックブロック（ＣＬＢ）領域、強化ブロック又は回路コンポーネントの他の組み合わせ等のハードウェアリソースを表す、いくつかの異なるタイプのマクロコンポーネントを含む。これらは、特定用途向けハードウェアアクセラレータの機能を実装するために、ＦＰＧＡのハードウェアリソースの大まかな割り当て、配置及びルーティングに使用することができる。したがって、マクロコンポーネントは、データセンタ内の共有ＦＰＧＡデバイスのロジック配置の単位として機能する。マクロコンポーネントのスケジューリングは、要求に応じてＦＰＧＡで完全な合成、配置及びルーティングプロセスを行うよりも遥かに簡単である（例えば、最初のフリーなマクロコンポーネントを要求に割り当てることができる）。より複雑なプリコンパイル回路を含むマクロブロックに対して、合成、配置及びルーティングをオフラインで行うことができる。
【００１０】
一実施形態では、ＦＰＧＡデバイスの各々は、ローカルＦＰＧＡマクロスケジューラを含み、これが組み込まれたＦＰＧＡデバイスに対する仮想化リソースの割り当て、スケジューリング及びハードウェアの最適化を行う。また、データセンタは、システム又はメモリ相互接続上の他のコンポーネントにネットワーク接続されたスタンドアロンのＦＰＧＡマクロスケジューラユニットを含む。スタンドアロンのＦＰＧＡマクロスケジューラは、ローカルマクロスケジューラを有しないネットワーク内のＦＰＧＡのマクロスケジューリング及び管理タスク専用のより強力なコンピューティングリソースを提供する。スタンドアロンのＦＰＧＡマクロスケジューラは、ローカルマクロスケジューラが計算能力において制限されるか、より広範なクライアントによって要求されるタスクのより制限されたビューを有する場合があるので、ローカルマクロスケジューラを既に有するＦＰＧＡデバイスに対してさらなる最適化及び管理タスクを実行することができる。
【００１１】
一実施形態では、ローカル及び／又はスタンドアロンマクロスケジューラは、１つ以上のＦＰＧＡデバイスに実装されるアクセラレータの設計定義に従ってマクロコンポーネントを割り当て及びスケジューリングするアプリケーションプログラミングインタフェース（ＡＰＩ）を提供する。設計定義は、マクロコンポーネント間の接続及びマクロコンポーネントの構成によってアクセラレータが定義される、マクログラフを指定するコードを含む。このように、ユーザは、ＡＰＩを使用することにより、ハードウェアアクセラレータに実装される関数を生成することができ、さらに、関数の入力データを割り当て、仮想化された方法で結果の出力を読み出すことができる。
【００１２】
図１は、一実施形態による、タスクをスケジューリングし、複数のＦＰＧＡデバイス１２１〜１２３のリソースを割り当てるためのマクロスケジューラ１３０〜１３３を含むコンピューティングシステム１００を示す図である。コンピューティングシステム１００のマクロスケジューラ１３０〜１３３は、ＦＰＧＡデバイス１２１〜１２３に実装されたＦＰＧＡアクセラレータの仮想化を有効にする。一実施形態では、コンピューティングシステム１００は、例えばクライアント１１０，１１１等の複数のクライアントデバイスにコンピューティングリソースを提供するデータセンタの一部を表す。コンピューティングシステム１００のコンポーネントは、システム、メモリ相互接続、又は、ローカル若しくは広域ネットワーク等の様々なチャネルを介して互いに通信することができ、図示したもの以外のトロポジで接続することができる。
【００１３】
コンピューティングシステム１００では、ＦＰＧＡデバイス１２１〜１２３の各々は、ＦＰＧＡに実装される同時アクセラレータ（concurrent accelerators）を配置（すなわち、物理的にマッピング）及び最適化するためのローカルマクロスケジューラ１３１〜１３３を有する。例えば、マクロスケジューラ１３１は、アクセラレータの集合をＦＰＧＡ１２１に同時に実装するためにＦＰＧＡ１２１上の何れの物理的なハードウェアリソースを用いるかを決定する。また、コンピューティングシステム１００は、グローバル（すなわち、クロスＦＰＧＡ）割り当て及びスケジューリングを行うことが可能なスタンドアロンマクロスケジューラ１３０を含む。スタンドアロンマクロスケジューラ１３０は、複数のクライアント（例えば、１１０，１１１）からの要求にアクセスし、複数のＦＰＧＡデバイス（例えば、１２１〜１２３）のリソースを追跡するので、より多くの最適な配置及びスケジュールを識別することができる。さらに、スタンドアロンマクロスケジューラ１３０は、ＦＰＧＡデバイス１２１〜１２３とは別の場所で動作するので、ＦＰＧＡデバイス１２１〜１２３の熱的制約に制限されることなく動作することができる。したがって、マクロスケジューラ１３０は、より高速でよりコンパクトな実装のために、同時にスケジューリング（co-scheduled）されたレジスタ転送レベル（ＲＴＬ）の設計を合成することの可能な、より強力なコンピュータとなり得る。
【００１４】
一実施形態では、クライアント１１０，１１１は、ネットワーク接続を介してコンピューティングシステム１００の他のコンポーネントに接続されたリモートクライアントである。クライアント１１０，１１１は、特定のハードウェアアクセラレータを実装するようにＦＰＧＡデバイス１２１〜１２３の構成を要求することができ、ハードウェアアクセラレータで実行されるタスクを定義することもできる。クライアント１１０，１１１は、設計定義、タスク定義及び他の情報（例えば、構成ビットファイル）を、スタンドアロンマクロスケジューラ１３０において、又は、ローカルマクロスケジューラ１３１〜１３３において、ＡＰＩに提供する。マクロスケジューラ１３０〜１３３は、クライアントの要求に応じて、ＦＰＧＡ１２１〜１２３のハードウェアリソースを割り当て、タスクの実行をスケジューリングする。一実施形態では、アクセスキー、暗号化通信、及び／又は、他のセキュリティ手段を用いて、悪意のあるクライアント又はプロセスが他のタスクに影響を及ぼさないようにする。
【００１５】
ＦＰＧＡ１２１〜１２３は、プログラム可能な相互接続要素によって接続することができる構成可能ロジックブロック（ＣＬＢ）と呼ばれる非コミットの回路要素を含む。各ＦＰＧＡ内のＣＬＢは、ルックアップテーブルと、ＦＰＧＡ内の特定のスタティックランダムアクセスメモリ（ＳＲＡＭ）位置又はレジスタに値を挿入することによって構成可能な他の固定関数と、を含む。したがって、ＣＬＢを、クライアントデバイスによって指定された任意のロジック関数を行うように構成することができる。
【００１６】
コンピューティングシステム１００内のマクロスケジューラ１３０〜１３３は、要求されたアクセラレータ構成を実装するためにＦＰＧＡ１２１〜１２３のハードウェアリソースを割り当て、要求されたタスクをアクセラレータ内で実行するためにスケジューリングする機能を実行する。また、マクロスケジューラ１３０〜１３３は、タスクと構成との間の切替え（すなわち、ビットストリームのスワッピング）を可能にするコンテキストスイッチを実行する。例えば、コンテキストスイッチは、構成された領域（例えば、構成されたマクロコンポーネントのセットを含む）のレジスタ及びメモリ状態を保存することと、以前に保存された状態を同じ領域に復元することと、異なるタスクを実行するために領域を再構成することと、を伴うことができる。以前に保存した状態を復元して、後で元のタスクの実行を再開することができる。一実施形態では、十分なコンピューティングリソースを有するマクロスケジューラは、合成並びに／又は配置及びルーティングプロセスを実行してより最適な構成を生成した後に実行を一時停止して、元の構成を新しい最適な構成に置き換える第２パス最適化を行う。
【００１７】
コンピューティングシステム１００は、ローカルマクロスケジューラ１３１〜１３３と、スタンドアロンマクロスケジューラ１３０と、の両方を含む。代替の実施形態は、より少ない又はより多いローカルマクロスケジューラ及び／若しくはスタンドアロンマクロスケジューラを含むことができる。ローカルマクロスケジューラ１３１〜１３３は、それらが存在するＦＰＧＡデバイスに対して上述した機能を行う。例えば、マクロスケジューラ１３１〜１３３は、各々のＦＰＧＡデバイス１２１〜１２３における割り当てられたマクロコンポーネントの配置を決定する。スタンドアロンマクロスケジューラ１３０は、ネットワークチャネル（例えば、システム又はメモリ相互接続）を介して複数のＦＰＧＡデバイス１２１〜１２３に接続されており、接続されたＦＰＧＡデバイス１２１〜１２３のうち何れかに対して割り当て、スケジューリング及び最適化機能を実行することができる。一実施形態では、スタンドアロンマクロスケジューラ１３０は、独自のローカルマクロスケジューラを有しないＦＰＧＡデバイスに対してこれらの機能を実行することができる。スタンドアロンマクロスケジューラ１３０は、クライアント１１０，１１１からの関数呼び出しを受信し、当該関数呼び出しに基づいて、要求されたタスクを実行するためにマクロコンポーネントを割り当て、クライアント１１０，１１１から受信した設計の合成、配置及びルーティングを実行する。また、マクロスケジューラ１３０は、パーミッションを管理し、クライアントに通知を発行する。
【００１８】
図２は、複数のマクロコンポーネント２１０〜２１９の形態のハードウェアリソースを含むＦＰＧＡデバイス１２１を示す図である。マクロコンポーネントは、割り当て及びスケジューリングの目的で単一のユニットとして扱われる小さなハードウェアコンポーネントの集合を含む。マクロコンポーネントには、高度に構成可能なものもあれば、単一の固定関数を実行するものもある。ＦＰＧＡ１２１内のマクロコンポーネント２１０〜２１９は、プログラマブルタイル２１０と、入力レジスタ２１１と、出力レジスタ２１２と、固定関数ブロック２１３〜２１６と、物理入出力（Ｉ／Ｏ）ブロック２１７〜２１９と、を含む。
【００１９】
タイル２１０の各々は、ＣＬＢ、スイッチ、固定関数ブロック、及び、他のタイルから独立してプログラムすることができる相互接続を含むプログラミング領域である。タイルは、ビットファイルに関連付けることができる。ビットファイルは、タイルの合成、配置、ルーティングされた設計を含むファイルである。関数のサイズ又は複雑さに応じて、マクロスケジューラ１３０又は１３１は、関数を実装するために複数の物理タイルを割り当てることができる。
【００２０】
また、ＦＰＧＡ１２１は、入力レジスタ２１１及び出力レジスタ２１２のセットを含む。入力レジスタ２１１は、ＦＰＧＡ１２１に実装されている関数に入力データを提供し、出力レジスタ２１２は、当該関数から結果として得られる出力データを提供する。一実施形態では、入力レジスタ２１１及び出力レジスタ２１２は、より高度なパフォーマンスのためにキュー（例えば、先入れ先出し（ＦＩＦＯ）バッファ）として実装される。ＦＰＧＡ１２１は、入力レジスタ２１１及び出力レジスタ２１２が物理入出力（Ｉ／Ｏ）ブロック（例えば、ＰＨＹブロック２１７〜２１９）を介してＦＰＧＡの外部ピン（例えば、ピン２２７〜２２９）に接続されることによって、外部デバイス及びプロセスにアクセス可能に構成することができる。ＰＨＹブロック２１７〜２１９は、トランシーバ等のＩ／Ｏリソースへのアクセスを提供し、ＦＰＧＡのピン２２７〜２２９に接続される。
【００２１】
ＦＰＧＡ１２１は、異なるタイプの固定関数（ＦＦ）ブロック２１３〜２１６を含む。ＦＦブロック２１３は乗算器ブロックであり、ＦＦブロック２１４は除算器ブロックであり、ＦＦブロック２１５はメモリブロックであり、ＦＦブロック２１６は中央処理装置ブロックである。ＦＰＧＡ１２１は、固定関数ブロックの各タイプの複数のインスタンスを含むことができる。ＦＰＧＡ１２１の代替の実施形態は、異なる関数を実行する他のタイプのＦＦブロックを含むことができる。
【００２２】
図３は、一実施形態による、ＦＰＧＡ１２１内のタイル２１０の内部コンポーネントを示す図である。タイル２１０は、構成可能ロジックブロック（すなわち、ブロック３０１〜３１２）のアレイと、ロジックブロック３０１〜３１２を選択的に接続するのに用いられる相互接続リソース３２０〜３２２と、を含むプログラミング領域である。
【００２３】
ＦＰＧＡ１２１では、タイル２１０の境界が破線で示されている。タイル３３１はロジックブロック３０１〜３０４を含み、タイル３３２はロジックブロック３０５〜３０８を含み、タイル３３３はロジックブロック３０９，３１０を含み、タイル３３４はロジックブロック３１１，３１２を含む。タイル３３１〜３３４は、ＦＰＧＡ１２１に含まれるプログラマブルロジックを別々の構成ドメインに分割する。別々の構成ドメインは、互いに独立して動作及びプログラムすることができ、又は、より大きなプログラマブル領域として動作するように組み合わせることができる。１つ以上の命令を実行するために異なるタイルが使用されている間に、１つのタイル内のハードウェアの再構成を実行することができる。
【００２４】
図３に示すように、タイル３３１，３３２の各々は、４つの構成可能ロジックブロックを含み、タイル３３３，３３４の各々は、２つの構成可能ロジックブロックを含む。したがって、所定のタイルは、同じプログラマブルデバイス内の別のタイルと同数の構成可能ロジックブロックを有する必要がない。代替の実施形態では、タイルは、図示した数よりも少ない数又は多い数の構成可能ロジックブロックを含むことができる。
【００２５】
構成可能ロジックブロック３０１〜３１２の各々は、ルックアップテーブル（ＬＵＴ）と、固定関数ブロックと、を含む。プログラミング後、ＬＵＴへの関数入力の各組み合わせは、所定の出力をもたらし、任意のロジック関数の実装を可能にする。構成可能ロジックブロックの各々は、適切な値を、ＬＵＴ及びロジックブロック内のコンポーネント（例えば、ＬＵＴ、固定関数ブロック等）間の接続を制御する構成メモリ領域又はレジスタに書き込むことによって、様々な機能を実行するようにプログラムすることができる。
【００２６】
構成可能ロジックブロック３０１〜３１２の各々は、プログラマブル相互接続ファブリック３２０に接続されており、プログラマブル相互接続ファブリック３２０は、ブロック３０１〜３１２が互いに選択的に接続されることを可能とする導電トレース及びスイッチを含む。図３には、構成可能ロジック３０１をプログラマブル相互接続ファブリック３２０に接続する導電トレースが示されている。他のブロック３０２〜３１２も、導電トレースを介して相互接続ファブリック３２０に接続される。しかしながら、これらのブロック３０２〜３１２を相互接続ファブリック３２０に接続する導電トレースは、明瞭にするために図から省略されている。
【００２７】
代替の実施形態では、プログラマブル相互接続ファブリック３２０は、図３に示すよりも均一でなくてもよい。例えば、相互接続ファブリックは、異なる長さを有する導電トレースを含んでもよいし、ＦＰＧＡ１２１の異なる領域において異なる数の並列導電トレースを有してもよい。相互接続ファブリック３２０の導電トレースはスイッチによって互いに接続され、スイッチでは導電トレースが交差している。例えば、複数のトレースが交差する領域３２１（点線で示される）は、２つの導電トレース間の各交差部間にスイッチを含む。代替として、スイッチは、領域３２１内の交差部の一部のみに存在してもよい。
【００２８】
また、プログラマブル相互接続ファブリックは、スイッチ３２２等の境界スイッチを含み、これを用いて、一方のタイル内のコンポーネントを他方のタイルから選択的に分離することができる。境界スイッチは、ＦＰＧＡ１２１内のタイル３３１〜３３４の境界に位置する。例えば、境界スイッチ３２２は、プログラマブル相互接続ファブリック３２０の導電トレースがタイル３３１の境界と交差する場所に位置する。
【００２９】
したがって、境界スイッチ３２２を使用して、構成可能ロジックブロック３０１〜３０４及びタイル３３１の他のコンポーネントを他のタイル３３２〜３３４から遮断することができる。また、タイルを組み合わせるために、境界スイッチを選択的に閉じたり開いたりすることができる。例えば、タイル３３１，３３２間の境界スイッチ３２２は、タイル３３１，３３２を互いに組み合わせるために閉じることができ、一方、他の境界スイッチは、組み合わせられたタイル３３１，３３２を他のタイル３３３，３３４から隔離するために開いたままとすることができる。
【００３０】
図４は、一実施形態による、スタンドアロンマクロスケジューラ１３０の機能ブロック図である。マクロスケジューラ１３０に含まれる機能ブロックは、マクロスケジューラ１３０で実行可能な動作を表し、回路モジュール等のハードウェアを用いて、又は、ハードウェアとソフトウェアとの組み合わせを用いて実装される。マクロスケジューラ１３０は、システム及び／又はメモリ相互接続等のネットワークチャネルを介して、ＦＰＧＡデバイス１２１〜１２３及びクライアントデバイス１１０，１１１等のコンピューティングシステム１００内の他のコンポーネントに接続される。
【００３１】
マクロスケジューラ１３０は、通信インタフェース４１０を介してネットワークチャネルに接続される。アプリケーションプログラミングインタフェース（ＡＰＩ）モジュール４１１は、クライアント１１０，１１１から通信インタフェース４１０を介して設計定義、関数呼び出し及び他のコマンドを受信し、リソース割り当てロジック４１３によるマクロコンポーネントの割り当て、構成ロジック４１４によるタイルの構成等のマクロスケジューラ１３０の要求された関数を呼び出すことによって、これらの入力に応答する。
【００３２】
クライアントデバイス１１０〜１１１によって要求された特定のタスクに対するハードウェア設計は、一般に、任意の単一のＦＰＧＡ上の全てのハードウェアリソースを消費するわけではない。したがって、ＦＰＧＡの余ったハードウェアリソースは、同じプロセス、同じクライアントからの他のプロセス、又は、他のクライアントからのプロセスによって要求された他のアクセラレーションされた関数に割り当てることができる。複数の設計が複数の同時設計のために共有ＦＰＧＡデバイス上で迅速にスケジューリングされる（すなわち、「配置される」）のを可能にするために、設計定義は、ハードウェア構成を、レジスタ転送レベル（ＲＴＬ）よりも高い抽象化レベルで記述する。
【００３３】
一実施形態では、ＡＰＩモジュール４１１が受信した設計定義は、設計に関するマクログラフにおいて、設計のための１つ以上の指定されたマクロコンポーネントを示す。マクログラフは、使用されているマクロコンポーネントのタイプと、指定されたマクロコンポーネントの構成及び接続方法と、を示す。マクログラフは、入出力レジスタ、ＣＬＢ（例えば、タイル）の集合、ルックアップテーブル、ルーティングリソース、固定関数ブロック（例えば、乗算器、除算器、メモリ、ＣＰＵ等）等のマクロコンポーネントを含むことができる。
【００３４】
また、マクログラフは、ビットファイルのファイル名を、マクログラフで指定された各タイルに関連付ける。一実施形態では、ビットファイルは、クライアントデバイス１１０〜１１１のうち１つによって設計に対して実行された合成プロセスによって生成される。ビットファイルは、タイルが設計の少なくとも一部（例えば、１つ以上のハードウェアアクセラレータ）を実装するように構成するために、構成レジスタに記憶され得る構成データを含む。
【００３５】
以下の擬似コードは、一実施形態による、マクログラフを含む設計定義の例である。
【数１】
2021503109.tif 000003
上記コードにおいて、「ｍｙＡｃｃｅｌｅｒａｔｏｒ」は、４つのマクロコンポーネント（すなわち、入力レジスタ「ｉｎＡ」及び「ｉｎＢ」、出力レジスタ「ｏｕｔＣ」、並びに、タイル「ｍｙＬｏｇｉｃ」）を含むマクログラフである。タイル「ｍｙＬｏｇｉｃ」は、タイルをプログラミングするための構成データを含むビットファイル「ｔｉｌｅ＿ｆｉｌｅ．ｂｉｔ」を示すコンストラクタ「ＭＧＴｉｌｅ（）」を用いてインスタンス化される。「ｍｙＬｏｇｉｃ．ｓｅｔＩｎｐｕｔｓ（）」関数は、タイル「ｍｙＬｏｇｉｃ」を入力レジスタ「ｉｎＡ」及び「ｉｎＢ」に接続する。「ｍｙＬｏｇｉｃ．ｓｅｔＯｕｔｐｕｔ（）」関数は、「ｍｙＬｏｇｉｃ」を出力レジスタ「ｏｕｔＣ」に接続する。最後に、「ｍｙＡｃｃｅｌｅｒａｔｏｒ．ａｄｄＣｏｍｐｏｎｅｎｔ（）」関数を用いて、タイル「ｍｙＬｏｇｉｃ」を、アクセラレータのマクログラフ「ｍｙＡｃｃｅｌｅｒａｔｏｒ」に加える。
【００３６】
設計定義は、クライアントデバイス１１０〜１１１のうち１つから受信したタスク定義によって参照することができる。タスク定義は、ＡＰＩモジュール４１１によって受信され、設計定義で指定されたマクログラフを用いて実行されるタスクを定義する。例示的なタスク定義を以下に示す。
【数２】
2021503109.tif 000004
「ｇｅｔＦｒｅｅＦＰＧＡａｃｃｅｌｅｒａｔｏｒ（）」関数は、未使用のＦＰＧＡを「ｍｙＦＰＧＡ」変数に返す。次の関数呼び出し「ｍｙＦＰＧＡ．ｐｒｏｇｒａｍ（ｍｙＡｃｃｅｌｅｒａｔｏｒ）」は、例示的な設計定義で先に定義されているように、返されたＦＰＧＡのプログラミングを「ｍｙＡｃｃｅｌｅｒａｔｏｒ」マクログラフに基づいて呼び出す。次の関数「ｉｎＡ．ｗｒｉｔｅＤａｔａＳｅｑｕｅｎｃｅ（１，２，３，４，５）」及び「ｉｎＢ．ｗｒｉｔｅＤａｔａＳｅｑｕｅｎｃｅ（６，７，８，９，１０）」は、入力バッファ「ｉｎＡ」及び「ｉｎＢ」に対する入力データを指定する。代替の実施形態では、（例えば、ＦＰＧＡ上の）メモリへのポインタを、値のアレイではなく入力バッファに記憶することができる。関数呼び出し「ｍｙＦＰＧＡ．ｅｘｅｃｕｔｅ（）」は、構成されたアクセラレータにおいてタスクの実行を開始し、「ｍｙＲｅｓｕｌｔｓ＝ｏｕｔＣ．ｒｅａｄ（）」は、出力レジスタ「ｏｕｔＣ」から実行結果を読み出す。したがって、タスク定義は、タスクに使用されるマクログラフを指定し、入力データを指定し、実行を要求し、結果として得られる出力データの読み出しを要求する。
【００３７】
マクロスケジューラ１３０は、リソース追跡モジュール４１２によって更新され、ＦＰＧＡデバイス１２１〜１２３内のマクロコンポーネントを列挙するデータベース４２０を含む。一実施形態では、データベース４２０は、マクロコンポーネントの一意の識別子を「マクロ」フィールド４２１に記憶し、マクロコンポーネントの位置を「位置」フィールド４２２に記憶する、マクロコンポーネント毎の行を含む。一実施形態では、「位置」フィールドは、マクロコンポーネントが存在するＦＰＧＡの識別子及び／又はマクロコンポーネントの構成メモリのアドレスを記憶する。クライアントデバイス１１０，１１１の一方が特定のマクロコンポーネントを使用する設計の実装を要求する場合、リソース追跡モジュール４１２は、クライアントのネットワークアドレスを「クライアントＩＰ」フィールド４２３に記憶し、ＰＩＤを「ＰＩＤ」フィールド４２４に記憶することによって、クライアントのネットワークアドレス（例えば、インターネットプロトコル（ＩＰ）アドレス）及びオペレーティングシステム（ＯＳ）プロセス識別子（ＰＩＤ）をマクロコンポーネントに関連付けるようにデータベース４２０を更新する。タスクの識別子を「タスク」フィールド４２５に書き込むことによって、マクロを使用して実行されているタスクをマクロに関連付けることもできる。一実施形態では、データベース４２０は、スケジュール情報を記録する「スケジュール」フィールド４２６を含む。例えば、「スケジュール」フィールド４２６は、マクロコンポーネントがフィールド４２３〜４２５のクライアント、ＰＩＤ及びタスクの各々に割り当てられる期間を示すことができる。また、データベース４２０は、優先順位の指標を記憶するのに用いられる「優先順位」フィールド４２７を含む。一実施形態では、優先順位の指標は、ユーザが選択可能であり、タスクの優先順位に応じたスケジューリングに影響を与える方法をユーザに提供する。例えば、ユーザは、タスクに対してより高い優先順位を選択することができ、そのタスクは、既に進行中のより低い優先順位の他のタスクを中断することができる。
【００３８】
一実施形態では、複数のマクロコンポーネントを、同じクライアント及び／又は同じタスクに関連付けることができる。代替の実施形態では、データベース４２０は、使用コスト、コンテキスト識別子、又は、マクロコンポーネントの割り当て、スケジューリング若しくはプログラミングに関連する他の値を記録する追加フィールドを含む。これらの追加フィールドも、リソース追跡モジュール４１２によって更新することができる。
【００３９】
マクロスケジューラ１３０は、ＡＰＩ４１１で受信したクライアント要求に応じてマクロコンポーネントを割り当てるリソース割り当てモジュール４１３を含む。リソース割り当てモジュール４１３は、設計定義に応じて、設計定義において指定されたマクロコンポーネント毎に、同じタイプの利用可能なマクロコンポーネントをデータベース４２０にクエリし、設計で使用するのに利用可能なマクロコンポーネントを割り当てることによって、設計のためのマクロコンポーネントのセットを割り当てる。先の例を続けると、設計定義は、入力レジスタ「ｉｎＡ」及び「ｉｎＢ」、出力レジスタ「ｏｕｔＣ」、並びに、タイル「ｍｙＬｏｇｉｃ」を指定する。したがって、リソース割り当てロジック４１３は、データベース４２０にクエリして、２つの入力レジスタ、出力レジスタ及びタイルを見つけ、「ｍｙＡｃｃｅｌｅｒａｔｏｒ」を実装するために、これらのマクロコンポーネントを割り当てる。
【００４０】
一実施形態では、マクロコンポーネントは、タスク定義に従って「ｍｙＦＰＧＡ．ｐｒｏｇｒａｍ（ｍｙＡｃｃｅｌｅｒａｔｏｒ）」を実行するときに設計に割り当てられる。一実施形態では、マクロコンポーネントの経時的な利用可能性が、データベース４２０内の「スケジュール」フィールド４２６によって示される。要求された設計を実施するのに十分なマクロコンポーネントが利用可能でない場合、「スケジュール」フィールド４２６に基づいて決定されるように、十分なマクロコンポーネントが利用可能になった後の時点でタスクをスケジューリングすることができる。
【００４１】
したがって、マクロスケジューラ１３０は、ＡＰＩ４１１を介してクライアントデバイスから受信した設計及びタスク定義に応じて、ＦＰＧＡリソースのオンデマンド高速割り当てを実行する。一実施形態では、マクロスケジューラ１３０内のリソース割り当てモジュール４１３は、割り当てられたマクロコンポーネントを構成するタイミング、及び、構成されたマクロコンポーネントにおいて要求されたタスクを実行するタイミングを制御することによって、スケジューリング機能を実行する。一実施形態では、リソース割り当てモジュール４１３は、コンテキストスイッチ及び管理機能も実行する。したがって、リソース割り当てモジュール４１３は、タスクを一時停止し、タスクによって使用されている任意のアクセラレータのレジスタ及びメモリ状態を、それらの構成データ（例えば、ビットファイル又はビットストリーム）と共に保存して、タスクの実行を後の時点で再開することができる。このコンテキストスイッチにより、ハードウェアリソースの時分割多重化が可能になる（例えば、実行中のタスクを、優先順位の高いタスクによって一時的に中断することが可能になる）。
【００４２】
マクロスケジューラ１３０は、複数のクライアント１１０〜１１１及び複数のＦＰＧＡデバイス１２１〜１２３のマクロコンポーネントからのタスクに関する情報にアクセスできるので、相互に通信又は協働しないクライアントデバイスに対しては識別されない最適化の機会を識別することができる。一実施形態では、マクロスケジューラ１３０は、同時に実行されるタスクに関するリソースの使用を最適化する。
【００４３】
一実施形態では、マクロスケジューラ１３０は、単一の構成されたアクセラレータを、同じクライアントデバイス又は異なるクライアントデバイスから開始された２つの異なるタスク間で共有することを可能にする。例えば、第１クライアントデバイス１１０は、第１タスクを実行するための第１設計定義を送信することができ、この設計定義は、ＦＰＧＡデバイス１２１〜１２３内のマクロコンポーネントから実装されるアクセラレータの定義を含む。クライアント１１１からの第２タスクを実行するための第２設計定義が同じアクセラレータ設計の使用を要求する場合、リソース割り当てロジック４１３は、第１タスク及び第２タスクの両方によって使用される単一のアクセラレータを構成することができる。リソース割り当てロジック４１３は、第１期間中にアクセラレータにおける第１タスクの実行をスケジューリングし、第１期間と重複しない第２期間中に第２タスクの実行をスケジューリングすることによって、アクセラレータの使用を経時的に多重化する。
【００４４】
一実施形態では、マクロスケジューラ１３０は、単一のＦＰＧＡデバイスのハードウェアリソース（例えば、マクロスケジューラ）を、同じ又は異なるクライアントデバイスからの２つの異なる設計間で共有することを可能にする。特に、リソース割り当てロジック４１３は、第１クライアント（例えば、クライアント１１０）が要求する第１設計に対してＦＰＧＡデバイスからのマクロコンポーネントを割り当て、第２クライアント（例えば、クライアント１１１）が要求する第２設計に対して同じＦＰＧＡデバイスからのマクロコンポーネントを割り当てる。したがって、単一のＦＰＧＡデバイスの異なるマクロコンポーネントを複数の設計間で共有することができる。一実施形態では、リソース割り当てロジック４１３は、単一のマクロコンポーネントの一部を異なる設計間で割り当てることもできる。例えば、２つの異なる設計の各々は、メモリマクロコンポーネントの半分未満を使用してもよい。これにより、リソース割り当てロジック４１３は、第１設計がメモリの上位部分を利用し、第２設計がメモリの下位部分を利用して、２つの設計間で共有される単一のメモリマクロコンポーネントを割り当てることができる。
【００４５】
一実施形態では、マクロスケジューラ１３０は、単一のアクセラレータで使用される複数のＦＰＧＡデバイスからのマクロコンポーネントを割り当てることができる。すなわち、アクセラレータに割り当てられたマクロコンポーネントのセットは、２つ以上のＦＰＧＡデバイスからのマクロコンポーネントを含むことができる。したがって、アクセラレータは、単一のＦＰＧＡが、アクセラレータ設計を収容するのに十分に利用可能なマクロコンポーネントを持たない場合でも、複数のＦＰＧＡデバイスに実装可能である。
【００４６】
マクロコンポーネントがリソース割り当てモジュール４１３によって割り当てられると、構成ロジック４１４は、割り当てられたマクロコンポーネントのセットを設計定義にしたがって構成することによって、ＦＰＧＡデバイスにおける設計を実装する。構成ロジック４１４は、設計定義で指定されたタイル毎に、指定されたタイルの設計定義で指定されたビットファイルを用いて、対応する割り当てられたタイルをプログラムする。一実施形態では、構成ロジック４１４は、構成ポート４１５を介してＦＰＧＡデバイスをプログラムする。或いは、ＦＰＧＡデバイスのプログラミングは、通信インタフェース４１０を介して呼び出されてもよい。一実施形態では、構成データ（例えば、ビットファイル又はビットストリーム）は、通信インタフェース４１０を介して、プログラムされるＦＰＧＡデバイス１２１〜１２３のローカルマクロスケジューラ（例えば、１３１〜１３３）に送信されてもよく、マクロコンポーネントのプログラミングは、各ＦＰＧＡデバイスの各々のローカルマクロスケジューラによって実行される。
【００４７】
マクロスケジューラ１３０は、クライアント１１０，１１１等のクライアントデバイスから受信した設計に対して合成、配置及びルーティング、又は、他のプロセスを行うために使用される合成ロジック４１６を含む。一実施形態では、クライアントデバイス内ではなく、マクロスケジューラ１３０の合成ロジック４１６内でＲＴＬ設計に対して合成を実行することができる。
【００４８】
また、合成ロジック４１６は、設計が既に構成され、ＦＰＧＡデバイス１２１〜１２３のうち１つ以上で動作している間に、マクロスケジューラ１３０が設計のための第２パスの最適化を実行することを可能にする。この場合、設計の初期構成は、設計定義で（例えば、１つ以上のビットファイルとして）示され、ＦＰＧＡデバイス１２１〜１２３内の割り当てられたマクロコンポーネントを構成するために使用される。初期構成内の指定されたタスクの実行中、合成ロジック４１６は、設計に対して合成、配置及びルーティングの計算を実行することによって、設計に対して最適化された構成を自動的に生成する。初期構成においてタスクの実行が一時停止され、アーキテクチャ状態（例えば、レジスタ、メモリ等）が保存され、構成ロジック４１４は、ＦＰＧＡデバイスを再プログラムして、初期構成を最適化された構成に置き換える。その後、状態が復元され、最適化された構成でタスクの実行が再開される。
【００４９】
第２パスの最適化によって設計における入力及び／又は出力ポートの位置（例えば、制御、データ及び結果ポート等）に変化が生じた場合、合成ロジック４１６は、初期構成における初期ポートの位置を、最適化された構成における最適化されたポートの位置と相関させる再マッピング通知も生成するので、これらのポートに依存する任意のプロセスが、これらのポートを依然として配置することができる。代替の実施形態では、ポートのハードウェア再マッピングは、ＦＰＧＡによって実行される。
【００５０】
スタンドアロンマクロスケジューラ１３０及びローカルマクロスケジューラ１３１〜１３３の両方を含む一実施形態では、計算集約型作業（例えば、合成、配置及びルーティング）がスタンドアロンマクロスケジューラ１３０上で実行され、計算集約型でない作業がローカルマクロスケジューラ１３１〜１３３上で実行される。特に、ローカルマクロスケジューラ１３１〜１３３は、マクロコンポーネントの割り当てや、個々のＦＰＧＡデバイス１２１〜１２３内のアクセラレータの配置等の機能を実行することができる。
【００５１】
マクロスケジューラ１３０の機能は、異なる回路モジュールによって実行されるものとして上述した実施形態で説明されているが、マクロスケジューラ１３０内のモジュールは、代替の実施形態において、マイクロコード又はソフトウェアモジュールを用いて実装することができる。いくつかの実施形態では、マクロスケジューラ１３０の機能は、部分的にソフトウェアで、部分的にハードウェアで実装することができる。いくつかの実施形態では、マクロスケジューラ１３０の機能は、１つ以上のスタンドアロンマクロスケジューラ（例えば、１３０）、１つ以上のローカルマクロスケジューラ（例えば、１３１〜１３３）、又は、クライアントデバイス（例えば、１１０〜１１１）の間で、多くの異なる方法で分割することができる。例えば、タイルレベルの合成並びに／又は配置及びルーティングのプロセスは、要求するクライアント、ローカルマクロスケジューラ又はスタンドアロンマクロスケジューラデバイスによって実行され得る。
【００５２】
一実施形態では、マクロスケジューラ１３０は、クライアントデバイスの代わりに、初期合成、配置及びルーティングプロセス等の計算量を必要とするタスクを実行するので、クライアントデバイスは、よりパワーの小さいコンピュータ（例えば、モバイルデバイス）とすることができる。代替として、クライアントデバイスが十分にパワフルであり、計算サイクルに余裕がある場合、クライアントデバイスは、マクロスケジューリング機能をサポートすることができる。一実施形態では、クライアントデバイスは、これらの機能を実行するためのハードウェアアクセラレータも含むことができる。
【００５３】
図５は、クライアントからの設計定義に基づいて１つ以上のＦＰＧＡデバイスを構成し、第２パスの最適化及びコンテキストスイッチ等のマクロスケジューラの他の機能を実行するプロセス５００を示すフロー図である。プロセス５００は、ＦＰＧＡデバイス１２１〜１２３で実行される複数のタスクの各々に対して実行され、これらのプロセス５００は、時間的に重なってもよい。一実施形態では、プロセス５００における動作は、マクロスケジューラ１３０によって実行される。或いは、プロセス５００における動作は、ローカルマクロスケジューラ１３１〜１３３及び／若しくはクライアントデバイス１１０〜１１１において、又は、スタンドアロンマクロスケジューラ１３０と、ローカルマクロスケジューラ１３１〜１３３と、クライアントデバイス１１０〜１１１との組み合わせにおいて実行されてもよい。
【００５４】
ブロック５０１において、データベース４２０は、ＦＰＧＡデバイス１２１〜１２３に関するマクロコンポーネントの位置及び利用可能性を示す情報を記憶する。データベース４２０は、各マクロコンポーネントの一意の識別子を記憶する「マクロ」フィールド４２１を包むことによって、ＦＰＧＡデバイス１２１〜１２３内のマクロコンポーネントを列挙する。マクロコンポーネントの位置は、データベース４２０の「位置」フィールド４２２に記憶される。一実施形態では、「クライアントＩＰ」フィールド４２３、「ＰＩＤ」フィールド４２４、「タスク」フィールド４２５、及び／又は、「スケジュール」フィールド４２６は、マクロコンポーネントの利用可能性（すなわち、マクロコンポーネントが割り当てられていないかどうか）を示す。プロセス５００は、ブロック５０１からブロック５０３に進む。
【００５５】
ブロック５０３において、マクロスケジューラ１３０のＡＰＩモジュール４１１は、第１クライアントデバイス１１０から設計定義を受信する。受信した設計定義は、設計で用いられる１つ以上のマクロコンポーネントを示す。設計定義は、マクロコンポーネントがマクログラフ（例えば、先の例における「ｍｙＡｃｃｅｌｅｒａｔｏｒ」）においてどのように接続されるかも示す。プロセス５００は、ブロック５０３からブロック５０５に進む。
【００５６】
ブロック５０５において、ＡＰＩモジュール４１１は、クライアント１１０からタスク定義を受信する。タスク定義は、先に受信した設計定義におけるマクログラフを用いて実行されるアクションに関してタスクを定義する。例えば、タスク定義は、マクログラフによって定義されたアクセラレータに対する入力値を指定し、実行を要求し、結果として得られる出力値を読み出することができる。プロセス５００は、ブロック５０５からブロック５０７に進む。
【００５７】
ブロック５０７において、リソース割り当てロジック４１３は、データベース４２０に列挙されているマクロコンポーネントのうち、設計定義で指定されたマクロコンポーネント毎に利用可能であると示された１つのマクロコンポーネントを割り当てることによって、設計に関するマクロコンポーネントを割り当てる。設計に割り当てられたマクロコンポーネントは、同じＦＰＧＡデバイスからのものであってもよいし、異なるＦＰＧＡデバイスからのものであってもよい。同じＦＰＧＡからのマクロコンポーネントを異なる設計に割り当てることができる。例えば、ＡＰＩモジュール４１１は、第１設計定義によって定義された第１設計及び第２設計定義によって定義された第２設計を、同じ又は異なるクライアントデバイスから受信することができる。リソース割り当てロジック４１３は、第１設計に関するマクロコンポーネントの第１セットと、第２設計に関するマクロコンポーネントの第２セットとを割り当て、マクロコンポーネントの第１セットは、マクロコンポーネントの第２セットと同じＦＰＧＡデバイスに配置される。
【００５８】
一実施形態では、マクロコンポーネントは、特定の期間に割り当てられる（すなわち、スケジューリングされる）。例えば、マクロコンポーネントは、或る期間中には第１設計に割り当てられ、異なる期間中には第２設計に割り当てられてもよい。複数のマクロコンポーネントを有するマクログラフによって定義されるアクセラレータ設計の場合、リソース割り当てロジック４１３は、設計で指定された全てのマクロコンポーネントを利用可能であり、スケジューリングすることができる期間を識別することができる。一実施形態では、リソース割り当てロジック４１３は、同じクライアント又は複数の異なるクライアントからの複数の設計のスケジューリングを最適化して、マクロコンポーネントの使用を経時的に最大化する。
【００５９】
また、リソース割り当てロジック４１３は、アクセラレータ設計を実行するように構成された割り当てられたマクロコンポーネントにおいてタスクを実行することができる１つ以上の期間を識別することによって、タスク定義によって定義されたタスクの実行をスケジューリングする。一実施形態では、同じアクセラレータ設計を用いる複数のタスクを定義することができ、すなわち、リソース割り当てロジック４１３は、これらのタスクを、異なる期間中にアクセラレータを用いるようにスケジューリングする。リソース割り当てロジック４１３によるスケジューリングプロセス５０７は、さらなる最適化ステップ５０９Ａ，５０９Ｂを含む。
【００６０】
ブロック５０９Ａにおいて、リソース割り当てロジック４１３は、他の設計によるアクセラレータと時分割多重化することができる、設計によるアクセラレータを識別する。例えば、２つの異なる（同じ又は異なるクライアントからの）設計の両方が同じアクセラレータ（例えば、同じタイプのマクロコンポーネントが同じように接続されている）を用いる場合、アクセラレータは、一度構成されると、両方の設計で使用することができる。リソース割り当てロジック４１３は、第１期間中にアクセラレータ内の第１タスクの実行をスケジューリングし、第１期間と重複しない第２期間中に同じアクセラレータ内の第２タスクの実行をスケジューリングする。
【００６１】
ブロック５０９Ｂにおいて、リソース割り当てロジック４１３は、複数の設計間で共有可能なマクロコンポーネントを識別する。例えば、第１設計及び第２設計の各々は、８ビットのメモリを要求する場合がある。したがって、リソース割り当てロジック４１３は、両方の設計間で共有される単一の１６ビットのメモリマクロコンポーネントを割り当てることができる。これにより、マクロコンポーネントの未使用のビットを別の設計に割り当てることができる。入力ポート及び出力ポートのマクロコンポーネントを、設計間で同様に共有することができる。
【００６２】
ブロック５１１において、リソース追跡モジュール４１２は、データベース４２０を更新して、クライアント１１０のＩＰアドレスをデータベース４２０のマクロコンポーネントに関連する行に記憶することによって、割り当てられたマクロコンポーネントの各々を、設計が発生したクライアント１１０のネットワークアドレス（例えば、ＩＰアドレス）に関連付ける。また、リソース追跡モジュール４１２は、割り当てられたマクロコンポーネントの各々に関連する行内のタスクの識別子をデータベース４２０に記憶することによって、割り当てられたマクロコンポーネントの各々をタスクに関連付ける。プロセス５００は、ブロック５１１から、プロセス５００はロック５１３に進む。
【００６３】
マクロコンポーネントが、受信した設計に割り当てられると、プロセス５００は、ブロック５１３において、（タスク定義で指定されているように）設計において実行されるタスクの実行時期であるかどうかを、ブロック５０７において予め判別されたタスクのスケジュールに従って判別する。タスクが実行時期でない場合、プロセス５００は、ブロック５１５に進む。プロセス５００は、タスクが時期になるまで、ブロック５１５，５１３の間を循環することによって、タスクが時期に達するのを待機する。この待機期間中、合成ロジック４１６は、設計に関する合成、配置及びルーティングの手順を実行することによって、第２パスの最適化を実行することができる。一実施形態では、第２パスの最適化は、クライアントから受信したＲＴＬレベルの設計を用いて実行され、設計を実行するために実際に割り当てられたマクロコンポーネント、及び／又は、割り当てられた同じマクロコンポーネントの一部若しくは全てを共有する、若しくは、同時にスケジューリングされる他の設計に基づいている。
【００６４】
ブロック５１３において、タスクが実行時期にある場合、プロセス５００は、ブロック５１７に進む。ブロック５１７において、リソース追跡モジュール４１２は、データベース４２０を更新して、割り当てられたマクロコンポーネントをタスクに関連付ける。リソース追跡ロジック４１２は、タスクが実行されるアクセラレータの割り当てられたマクロコンポーネントの各々に対応するタスクの識別子を、「タスク」フィールド４２５に書き込む。プロセス５００は、ブロック５１７からブロック５１９に進む。
【００６５】
ブロック５１９において、構成ロジック４１４は、設計定義において指定された初期構成又は第２パスの最適化プロセス５１５によって生成された最適化された構成に従って、割り当てられたマクロコンポーネントのセットを構成することによって、ＦＰＧＡデバイスのセットにおける設計を実行する。一実施形態では、設計定義は、１つ以上のタイルをマクログラフの一部として指定し、さらに、指定されたタイルの各々を構成するビットファイルを示す。したがって、構成ロジック４１４は、指定されたタイル毎に、指定されたタイルについて示されたビットファイルを用いて、対応する割り当てられたタイルを、割り当てられたマクロコンポーネントのセットから構成する。一実施形態では、割り当てられたタイルは、ビットファイルの内容をタイルの構成レジスタに書き込むことによって構成される。設計に関して第２パスの最適化が既に実行された場合（例えば、ブロック５１５において実行を待機している間に）、設計定義で最初に指定された初期構成の代わりに、第２パスの最適化から生成された最適化された構成が使用される。プロセス５００は、ブロック５１９からブロック５２１に進む。
【００６６】
ブロック５２１では、構成ロジック４１４は、構成が完了し、構成されたマクロコンポーネントにおけるタスクの実行が開始することを示す。ブロック５２３において、第２パスの最適化がブロック５１５において未だ実行されていない場合、タスクが初期構成において実行されている間に第２パスの最適化が実行される。したがって、合成ロジック４１６は、タスクが実行を開始するのを待機する間（すなわち、ブロック５１５において）又はタスクが実行されている間（すなわち、ブロック５２３において）、設計に関する最適化された構成を生成する。一実施形態では、第２パスの最適化は、ブロック５１５で部分的に実行され、ブロック５２３で完了してもよい。第２パスの最適化は、構成データ（例えば、ビットファイル、ビットストリーム）と、最適化された構成において初期構成に対して移動する入力又は出力ポートの再マッピング情報と、を生成する。プロセス５００は、ブロック５２３からブロック５２５に進む。
【００６７】
ブロック５２５において、タスクの実行が一時停止される。一実施形態では、タスクは、タスクが実行されているマクロコンポーネントに供給されるクロック信号を停止することによって、一時停止される。タスクが一時停止された状態では、タスクのメモリ及びレジスタ状態が保存される。プロセス５００は、ブロック５２５からブロック５２７に進む。
【００６８】
ブロック５２７において、構成ロジック４１４は、ＦＰＧＡデバイス内のマクロコンポーネントを再プログラムして、初期構成を、ブロック５２３で生成された最適化された構成と置き換える。また、再マッピングの通知は、初期構成内の初期ポートの位置を最適化された構成内の最適化されたポートの位置と相関させる再マッピング情報から生成される。再マッピングの通知によって、他のプロセスは、新たな入出力ポートの位置を発見することが可能になる。或いは、ポートの位置を、ＦＰＧＡハードウェア内で再マッピングしてもよい。タスク用に先に保存されたレジスタ及びメモリ状態は、再構成されたマクロコンポーネントに復元される。このコンポーネントは、最適化された構成でレジスタ及びメモリの位置が変更された場合に、再マッピングのレジスタ及びメモリの位置を含むことができる。最適化された設計に切り替える場合、先に保存されたレジスタ及びメモリ状態の一部が冗長になる可能性もある。一実施形態では、最適化プロセスは、最適化された構成でもはや使われていない状態ビットを決定し、識別し、次に、最適化された構成を用いてタスクの実行を再開する前に、タスクの保存されたコンテキストを、新たな最適化された構成に適合するように変更する（例えば、もはや使われていないと識別された信号の全ての状態ビットを削除することによって）。プロセス５００は、ブロック５２７からブロック５２９に進む。
【００６９】
ブロック５２９において、タスクの実行は、ＦＰＧＡデバイス内のマクロコンポーネントの最適化された構成において再開される。一実施形態では、マクロコンポーネントに供給されるクロック信号を再開することによって、実行が再開される。
【００７０】
ブロック５３１〜５３９は、既に使用されているマクロコンポーネントにおいてより高い優先順位のタスクを実行することができるように、コンテキストスイッチを実行する動作を含む。ブロック５３１において、元のタスクがこのようなより高い優先順位のタスクに置き換えられない場合、プロセスはブロック５４１に進む。ブロック５４１において、元のタスクが完了していない場合、プロセス５００はブロック５２９に戻り、元のタスクの実行が継続する。したがって、ブロック５２９，５３１，５４１は、元のタスクが置き換えられるか完了するまで繰り返される。ブロック５３１において、元のタスクが、元のタスクが実行されているマクロコンポーネントの使用を要求するより高い優先順位のタスクに置き換えられる場合、プロセス５００はブロック５３３に進む。一実施形態では、ブロック５３１において元のタスクが置き換えられることは、ブロック５１３において、より高い優先順位のタスクに対して実行されるプロセス５００の別のインスタンスにおいて、より高い優先順位のタスクが到来することに対応する。
【００７１】
ブロック５３３において、リソース割り当てロジック４１３は、より高い優先順位のタスクが実行されるのを可能にするために、コンテキストスイッチを実行する。元のタスクのレジスタ及びメモリ状態が保存され、マクロコンポーネントは、より高い優先順位のタスクを実行するために別の設計に再構成される。より高い優先順位のタスクの実行は、ブロック５３５において開始され、ブロック５３７でタスクが完了するまで継続する。元のタスクに対して実行されるブロック５３５，５３７は、よる高い優先順位のタスクに対して実行されるプロセス５００の他のインスタンスにおけるブロック５１７〜５４３に対応する。より高い優先順位のタスクが完了すると、プロセス５００は、ブロック５３７からブロック５３９に進む。ブロック５３９において、リソース割り当てロジック４１３は、元のタスクの実行を再開するためにコンテキストスイッチを実行する。保存されたレジスタ及びメモリ状態が復元され、マクロコンポーネントは、元のタスクを実行するための設計を実装するように再構成される。
【００７２】
元のタスクの実行は、タスクが完了するまで継続する。ブロック５４１において、タスクが完了した場合、プロセス５００はブロック５４３に進む。ブロック５４３において、タスクが終了し、タスクによって用いられたマクロコンポーネントは、他の設計で用いられていない場合には、割り当てが解除され、新たな設計に利用可能になる。割り当て解除されたマクロコンポーネントのデータベースの行は、リソース追跡ロジック４１２によってデータベース４２０内で更新され、これにより、「タスク」４２５及び「クライアントＩＰ」４２３フィールドがクリアされる。次にスケジューリングされているタスクが開始され（すなわち、それ自体のブロック５１３から）、新たに割り当て解除されたマクロコンポーネントが使用され得る。
【００７３】
プロセス５００の動作によれば、ローカルマクロスケジューラ１３１〜１３３及び／又はスタンドアロンマクロスケジューラ１３０は、設計定義のマクログラフに従ってマクロコンポーネントを割り当て、スケジューリングするメカニズムを提供する。マクログラフは、ＦＰＧＡデバイス１２１〜１２３に実装されるアクセラレータを定義する。ＡＰＩ４１１を使用することにより、ユーザは、ＦＰＧＡデバイス１２１〜１２３においてハードウェアアクセラレータとして実装される関数を生成することができ、また、当該関数の入力データを割り当て、結果として得られる出力を仮想的に読み出すことができる。リソース共有、時分割多重化及び他の最適化アプローチにより、ＦＰＧＡリソースの仮想化は、ＦＰＧＡのハードウェアリソースを複数のクライアントに提供する際のより効率的な割り当て及びスケジューリングを可能にする。
【００７４】
マクロスケジューラは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）デバイスのセットの複数のマクロコンポーネントを列挙するデータベースを更新するように構成されたリソース追跡モジュールと、設計のための１つ以上の指定されたマクロコンポーネントを示す第１設計定義を第１クライアントデバイスから受信するように構成された通信インタフェースと、第１設計定義に示された１つ以上の指定されたマクロコンポーネント毎に複数のマクロコンポーネントのうち１つを割り当てることによって、設計のためのマクロコンポーネントの第１セットを割り当てるように構成されたリソース割り当てロジックと、割り当てられたマクロコンポーネントの第１セットを第１設計定義に従って構成することによって、ＦＰＧＡデバイスのセットに設計を実装するように構成された構成ロジックと、を含む。
【００７５】
マクロスケジューラにおいて、第１設計定義は、１つ以上の指定されたマクロコンポーネント間の接続を定義し、１つ以上の指定されたマクロコンポーネントの各々のタイプを示すマクログラフを含む。
【００７６】
マクロスケジューラにおいて、１つ以上の指定されたマクロコンポーネントは、１つ以上の指定されたタイルと、１つ以上の指定された固定関数ユニットと、１つ以上の指定されたレジスタと、を含む。また、第１設計定義は、１つ以上の指定されたタイルの各々のビットファイルを示す。構成ロジックは、１つ以上の指定されたタイル毎に、マクロコンポーネントの第１セット内の割り当てられたタイルを、指定されたタイルのビットファイルに基づいてプログラムするように構成されている。
【００７７】
マクロスケジューラにおいて、リソース追跡モジュールは、マクロコンポーネントの第１セットの各々を、第１クライアントデバイスのネットワークアドレスと、第１クライアントデバイスによって要求された第１タスクと関連付けるようにさらに構成されている。
【００７８】
マクロスケジューラにおいて、リソース追跡モジュールは、複数のマクロコンポーネント毎に、ＦＰＧＡデバイスのセットにおけるマクロコンポーネントの位置及びマクロコンポーネントの利用可能性をデータベースに記録するようにさらに構成されている。
【００７９】
また、マクロスケジューラは、ＦＰＧＡデバイスのセットの初期構成におけるタスクの実行中に、設計のための最適化された構成を生成し、初期構成における初期ポートの位置を、最適化された構成における最適化されたポートの位置と相関させる再マッピング通知を生成するように構成された合成ロジックを含む。初期構成は、第１設計定義によって示され、構成ロジックは、ＦＰＧＡデバイスのセットの最適化された構成でタスクの実行を再開する前に初期構成を最適化された構成に置き換えるように、ＦＰＧＡデバイスのセットを再プログラムするように構成されている。
【００８０】
マクロスケジューラにおいて、第１設計定義は、アクセラレータの定義を含む。リソース割り当てロジックは、第１期間中に第１クライアントデバイスからの第１タスクのアクセラレータにおける実行をスケジューリングし、第２期間中に第２クライアントデバイスからの第２タスクのアクセラレータにおける実行をスケジューリングするようにさらに構成されている。
【００８１】
マクロスケジューラにおいて、リソース割り当てロジックは、複数のマクロコンポーネントの第２セットを、第２クライアントデバイスから受信した第２設計定義によって定義された第２設計に対して割り当てるようにさらに構成されている。マクロコンポーネントの第１セット内のマクロコンポーネントの第１サブセットは、マクロコンポーネントの第２セット内のマクロコンポーネントの第２サブセットとして、ＦＰＧＡデバイスのセットのうち同じＦＰＧＡデバイスに配置される。
【００８２】
マクロスケジューラにおいて、マクロコンポーネントの第１セットは、複数のＦＰＧＡデバイスのうち少なくとも２つの異なるＦＰＧＡデバイスのマクロコンポーネントを含む。
【００８３】
マクロスケジューラの動作方法は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）デバイスのセットの複数のマクロコンポーネントを列挙するデータベースを更新することと、設計のための１つ以上の指定されたマクロコンポーネントを示す第１設計定義を第１クライアントデバイスから受信することと、第１設計定義に示された１つ以上の指定されたマクロコンポーネント毎に複数のマクロコンポーネントのうち１つを割り当てることによって、設計のためのマクロコンポーネントの第１セットを割り当てることと、割り当てられたマクロコンポーネントの第１セットを第１設計定義に従って構成することによって、ＦＰＧＡデバイスのセットに設計を実装することと、を含む。
【００８４】
方法において、１つ以上の指定されたマクロコンポーネントは、１つ以上の指定されたタイルを含み、第１設計定義は、１つ以上の指定されたタイルの各々のビットファイルを示す。また、方法は、１つ以上の指定されたタイル毎に、マクロコンポーネントの第１セット内の割り当てられたタイルを、指定されたタイルのビットファイルに基づいてプログラムすることを含む。
【００８５】
また、方法は、マクロコンポーネントの第１セットの各々を、第１クライアントデバイスのネットワークアドレスと、第１クライアントデバイスによって要求された第１タスクと関連付けることを含む。
【００８６】
また、方法は、複数のマクロコンポーネント毎に、ＦＰＧＡデバイスのセットにおけるマクロコンポーネントの位置及びマクロコンポーネントの利用可能性をデータベースに記録することを含む。
【００８７】
また、方法は、ＦＰＧＡデバイスのセットの初期構成におけるタスクの実行中に、設計のための最適化された構成を生成することと、ＦＰＧＡデバイスのセットの最適化された構成でタスクの実行を再開する前に初期構成を最適化された構成に置き換えるように、ＦＰＧＡデバイスのセットを再プログラムすることと、初期構成における初期ポートの位置を、最適化された構成における最適化されたポートの位置と相関させる再マッピング通知を生成することと、を含む。初期構成は、第１設計定義によって示される。
【００８８】
方法において、第１設計定義は、アクセラレータの定義を含む。また、方法は、第１期間中に第１クライアントデバイスからの第１タスクのアクセラレータにおける実行をスケジューリングすることと、第２期間中に第２クライアントデバイスからの第２タスクのアクセラレータにおける実行をスケジューリングすることと、を含む。
【００８９】
また、方法は、複数のマクロコンポーネントの第２セットを、第２クライアントデバイスから受信した第２設計定義によって定義された第２設計に対して割り当てることを含む。マクロコンポーネントの第１セット内のマクロコンポーネントの第１サブセットは、マクロコンポーネントの第２セット内のマクロコンポーネントの第２サブセットとして、ＦＰＧＡデバイスのセットのうち同じＦＰＧＡデバイスに配置される。
【００９０】
コンピューティングシステムは、複数のマクロコンポーネントを含むフィールドプログラマブルゲートアレイ（ＦＰＧＡ）デバイスのセットと、複数のマクロコンポーネントを列挙するように構成されたデータベースと、スタンドアロンマクロスケジューラと、を含む。スタンドアロンマクロスケジューラは、データベースを更新するように構成されたリソース追跡モジュールと、設計のための１つ以上の指定されたマクロコンポーネントを示す第１設計定義を第１クライアントデバイスから受信するように構成された通信インタフェースと、第１設計定義に示された１つ以上の指定されたマクロコンポーネント毎に複数のマクロコンポーネントのうち１つを割り当てることによって、設計のためのマクロコンポーネントの第１セットを割り当てるように構成されたリソース割り当てロジックと、割り当てられたマクロコンポーネントの第１セットを第１設計定義に従って構成することによって、ＦＰＧＡデバイスのセットに設計を実装するように構成された構成ロジックと、を含む。
【００９１】
また、システムは、第１クライアントデバイスを含む。また、スタンドアロンマクロスケジューラは、第１クライアントデバイスからのコマンドに応じて、リソース割り当てロジックによる割り当て、及び、構成ロジックによる構成を開始するように構成されたアプリケーションプログラミングインタフェース（ＡＰＩ）を含む。
【００９２】
システムにおいて、ＦＰＧＡデバイスのセットのうち１つ以上のＦＰＧＡデバイスの各々は、１つ以上のＦＰＧＡデバイス内の割り当てられたマクロコンポーネントのうち少なくとも１つの配置を決定するように構成されたローカルマクロスケジューラを含む。
【００９３】
また、システムは、ＦＰＧＡデバイスのセットをスタンドアロンマクロスケジューラに接続する複数のネットワークチャネルを含む。
【００９４】
本明細書で使用される場合、「に接続された」という用語は、１つ以上の介在するコンポーネントを介して直接的又は間接的に接続されることを意味し得る。本明細書に記載された様々なバスを介して提供される何れの信号も、他の信号と時分割多重化されてもよく、１つ以上の共通バスを介して提供されてもよい。さらに、回路コンポーネント又はブロック間の相互接続は、バス又は単一の信号線として示されてもよい。各バスは、代替的に、１つ以上の単一の信号線であってもよく、単一の信号線の各々は、代替的に、バスであってもよい。
【００９５】
特定の実施形態は、非一時的なコンピュータ可読媒体に記憶された命令を含むことができるコンピュータプログラム製品として実施することができる。これらの命令を用いて、汎用又は特殊目的のプロセッサをプログラムして、説明した動作を実行することができる。コンピュータ可読媒体は、機械（例えば、コンピュータ）によって読み出し可能な形式（例えば、ソフトウェア、処理アプリケーション）で情報を記憶又は送信する任意のメカニズムを含む。非一時的なコンピュータ可読記憶媒体は、磁気記憶媒体（例えば、フロッピー（登録商標）ディスク）、光記憶媒体（例えば、ＣＤ−ＲＯＭ）、光磁気記憶媒体、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、消去可能なプログラマブルメモリ（例えば、ＥＰＲＯＭ、ＥＥＰＲＯＭ）、フラッシュメモリ、又は、電子命令を記憶するのに適した別のタイプの媒体を含むことができるが、これらに限定されない。
【００９６】
さらに、いくつかの実施形態は、コンピュータ可読媒体が複数のコンピュータシステムに記憶され及び／又は複数のコンピュータシステムによって実行される分散コンピューティング環境において実施されてもよい。さらに、コンピュータシステム間で転送される情報は、コンピュータシステムを接続する伝送媒体を介してプル（pulled）されてもよいし、プッシュ（pushed）されてもよい。
【００９７】
概して、コンピューティングシステム１００、及び／又は、コンピュータ可読記憶媒体上に担持されたコンピューティングシステム１００の一部を表すデータ構造は、プログラムによって読み出され、コンピューティングシステム１００を含むハードウェアを製造するために直接的又は間接的に使用され得る、データベース又は他のデータ構造であってもよい。例えば、データ構造は、Ｖｅｒｉｌｏｇ又はＶＨＤＬ等の高レベル設計言語（ＨＤＬ）におけるハードウェア機能の動作レベル記述であってもよいし、レジスタ転送レベル（ＲＴＬ）記述であってもよい。記述は、ゲートのリストを含むネットリストを合成ライブラリから生成するために記述を合成することができる合成ツールによって読み出されてもよい。ネットリストは、コンピューティングシステム１００を含むハードウェアの機能を表すゲートのセットを含む。次に、ネットリストを配置及びルーティングして、マスクに適用される幾何学的形状を記述するデータセットを生成することができる。次に、マスクを様々な半導体製造ステップで使用して、コンピューティングシステム１００に対応する半導体回路を生成することができる。或いは、コンピュータ可読記憶媒体上のデータベースは、ネットリスト（合成ライブラリを含む若しくは含まない）、又は、必要に応じてデータセット若しくはグラフィックデータシステム（ＧＤＳ）ＩＩデータであってもよい。
【００９８】
本明細書における方法の動作は、特定の順序で示され、説明されているが、各方法の動作の順序は、特定の動作が逆の順序で実行され得るように、又は、特定の動作が少なくとも部分的に他の動作と同時に実行され得るように、変更されてもよい。別の実施形態では、個別の動作の命令又はサブ動作は、間欠的及び／又は交互であってもよい。
【００９９】
上述した明細書では、実施形態を、その特定の例示的な実施形態を参照して説明した。しかしながら、添付の特許請求の範囲に記載されている実施形態のより広い範囲から逸脱することなく、様々な変更及び修正を行うことができることは明らかである。したがって、明細書及び図面は、限定的な意味ではなく、例示的な意味でみなされる。
【図１】
2021503109.tif 000005
【図２】
2021503109.tif 000006
【図３】
2021503109.tif 000007
【図４】
2021503109.tif 000008
【図５】
2021503109.tif 000009
【国際調査報告】
2021503109.tif 000010
2021503109.tif 000011
2021503109.tif 000012