(57)【要約】  プログラミングフィールドプログラマブルゲートアレイ（ＦＰＧＡ）デジタル電子集積回路（ＩＣ）または部分的リコンフィギュレーションをサポートする他のＩＣ、リコンフィギャラブルパーティションおよびリコンフィギャラブルパーティションの各々でコンフィギャラブルであるプリミティブバリエーションを有する特定のＦＰＧＡは、以下、つまりコンフィギュレーションビットストリームをＦＰＧＡに書き込む前に、特定のＦＰＧＡに実装され得る異なるプリミティブ関数のプリミティブビットストリームをコンパイルし、記憶することと、特定のＦＰＧＡに実装するアルゴリズムの機能ロジックを表すグラフィカルブロックを接続するためのグラフィカルユーザインターフェースでの入力を受信することであって、グラフィカルブロックはリコンフィギャラブルロジックに関連する、受信することと、グラフィカルブロックに対応する特定のプリミティブ関数を含むプリミティブ関数のサブセットを自動的に決定することと、デジタルストレージから、プリミティブ関数のサブセットに対応するプリミティブビットストリームのサブセットを取得することと、部分的リコンフィギュレーション演算を使用して、プリミティブビットストリームのサブセットを特定のＦＰＧＡに書き込むことと、を含む。【選択図】図２
2021536650.tif 000002
【特許請求の範囲】
【請求項１】
部分的リコンフィギュレーションをサポートするデジタル電子集積回路（ＩＣ）であって、特定のＩＣが、複数のリコンフィギャラブルパーティションおよび前記リコンフィギャラブルパーティションの各々でコンフィギャラブルである複数のプリミティブバリエーションを有する、デジタル電子集積回路（ＩＣ）をコンフィギュアする速度と効率の改善を提供する方法であって、
コンフィギュレーションビットストリームを前記特定のＩＣに書き込む前に、デジタルストレージを使用して、前記特定のＩＣに書き込むことができ、実装することができる複数の異なるプリミティブ関数のための複数のプリミティブビットストリームをコンパイルし、記憶することと、
リコンフィギャラブルロジックを使用して前記特定のＩＣに実装するアルゴリズムの機能ロジックを指定するための入力を受信することと、
前記機能ロジックに対応する特定のプリミティブ関数を含む前記プリミティブ関数のサブセットを自動的に決定することと、
前記デジタルストレージから、前記プリミティブ関数の前記サブセットに対応する前記プリミティブビットストリームのサブセットを取得することと、
１つ以上の部分的リコンフィギュレーション演算を使用して、前記特定のＩＣに前記プリミティブビットストリームの前記サブセットを書き込むことと、 
を含み、
前記方法が、１つ以上のコンピューティングデバイスによって実行される、
方法。
【請求項２】
前記特定のＩＣが、Ｍ個のリコンフィギャラブルパーティションおよび前記リコンフィギャラブルパーティションの各々にＮ個のバリエーションを有するフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を含み、前記方法が、前記ＦＰＧＡ上のＭ個とＮ個のすべての組み合わせに書き込むことができ、実装することができる、複数の異なるプリミティブ関数の前記複数のプリミティブビットストリームをコンパイルし、記憶し、結果としてＭ＊Ｎ個のプリミティブを記憶することをさらに含む、請求項１に記載の方法。
【請求項３】
クライアントコンピュータシステムに通信可能に連結されたサーバを使用して前記コンパイルし記憶することを実行することと、
前記クライアントコンピュータシステムから前記サーバに、前記プリミティブ関数の前記サブセットに対応する前記プリミティブビットストリームの前記サブセットを提供する要求を送信することと、
前記サーバから前記クライアントコンピュータに、前記プリミティブ関数の前記サブセットに対応する前記プリミティブビットストリームの前記サブセットを含む応答を送信することと、
をさらに含む、請求項１に記載の方法。
【請求項４】
前記機能ロジックに対応する特定のプリミティブ関数を含む前記プリミティブ関数のサブセットを自動的に決定することは、前記プリミティブ関数の各々に対する特定のパーティションおよびバリエーションを決定し、前記前記特定のパーティションおよびバリエーションを識別するメタデータを記憶することをさらに含み、前記要求を送信することは、前記要求とともに前記メタデータを送信することをさらに含む、請求項３に記載の方法。
【請求項５】
各々が順次接続された複数のＤＳＰブロック部分的リコンフィギュレーション領域を有する複数の行、行間の任意の接続を可能にする複数の相互接続、を含むＦＰＧＡでの使用に適合され、前記ＤＳＰブロック部分的リコンフィギュレーション領域の各々が、前記プリミティブビットストリームの中から異なるビットストリームプリミティブを使用してＮ個のバリアントの１つとしてコンフィギャラブルであり、前記バリアントの各々が１つ以上の入力、１つ以上の出力を有し、コンフィギュレーションＡＸＩバスに接続されている、請求項１に記載の方法。
【請求項６】
前記バリアントの各々が異なる目的のためのロジックを含み、どの信号が前記２つ以上の出力に渡されるかを選択するための出力多重化として有する、前記ＦＰＧＡでの使用に適合された、請求項５に記載の方法。
【請求項７】
各々が順次接続された複数のＤＳＰブロック部分的リコンフィギュレーション領域を有する複数の行、行間の任意の接続を可能にする複数の相互接続、を含むＦＰＧＡでの使用に適合され、前記ＤＳＰブロック部分的リコンフィギュレーション領域の各々が、前記プリミティブビットストリームの中から異なるビットストリームプリミティブを使用してＮ個のバリアントの１つとしてコンフィギャラブルであり、前記バリアントの各々が２つ以上の入力、２つ以上の出力を有し、コンフィギュレーションＡＸＩバスに接続されており、
１つ以上の前記ＤＳＰブロック部分的リコンフィギュレーション領域の第１のセットが、機器のシングルチャネルバージョンとしてコンフィギュアできる、より大きなＰＲ領域であり、
１つ以上のＤＳＰブロック部分的リコンフィギュレーション領域の第２のセットが、低レベル機能を実装するように適合されている、
請求項１に記載の方法。
【請求項８】
各々が順次接続された複数のＤＳＰブロック部分的リコンフィギュレーション領域を有する複数の行、行間の任意の接続を可能にする複数の相互接続、を含むＦＰＧＡでの使用に適合され、前記ＤＳＰブロック部分的リコンフィギュレーション領域の各々が、前記プリミティブビットストリームの中から異なるビットストリームプリミティブを使用してＮ個のバリアントの１つとしてコンフィギャラブルであり、前記バリアントの各々が２つ以上の入力、２つ以上の出力を有し、コンフィギュレーションＡＸＩバスに接続されており、
１つ以上の前記ＤＳＰブロック部分的リコンフィギュレーション領域の第１のセットが、信号生成機器またはコントローラ機器用にコンフィギュアされた、より大きなＰＲ領域であり、
１つ以上の前記ＤＳＰブロック部分的リコンフィギュレーション領域の第２のセットが、測定機器または監視機器用にコンフィギュアされている、請求項１に記載の方法。
【請求項９】
前記特定のＩＣに実装する前記アルゴリズムの機能ロジックを表すグラフィカルブロックを選択し、接続するためのグラフィカルユーザインターフェースにおいて入力を受信することをさらに含み、前記グラフィカルブロックがリコンフィギャラブルロジックに関連する、請求項１に記載の方法。
【請求項１０】
部分的リコンフィギュレーションをサポートするデジタル電子集積回路（ＩＣ）をコンフィギュアする速度および効率の改善を提供する命令のシーケンスを記憶する１つ以上の非一時的コンピュータ可読ストレージ媒体であって、特定のＩＣが、複数のリコンフィギャラブルパーティションおよび前記リコンフィギャラブルパーティションの各々でコンフィギャラブルである複数のプリミティブバリエーションを有し、１つ以上のプロセッサを使用して実行されるとき、前記１つ以上のプロセッサに、
コンフィギュレーションビットストリームを前記特定のＩＣに書き込む前に、デジタルストレージを使用して、前記特定のＩＣに書き込むことができ、実装することができる複数の異なるプリミティブ関数のための複数のプリミティブビットストリームをコンパイルし、記憶することと、
リコンフィギャラブルロジックを使用して前記特定のＩＣに実装するアルゴリズムの機能ロジックを指定するための入力を受信することと、
前記機能ロジックに対応する特定のプリミティブ関数を含む前記プリミティブ関数のサブセットを自動的に決定することと、
前記デジタルストレージから、前記プリミティブ関数の前記サブセットに対応する前記プリミティブビットストリームのサブセットを取得することと、
１つ以上の部分的リコンフィギュレーション演算を使用して、前記特定のＩＣに前記プリミティブビットストリームの前記サブセットを書き込むことと、を実行させ、
方法が、１つ以上のコンピューティングデバイスによって実行される、
非一時的コンピュータ可読ストレージ媒体。
【請求項１１】
前記特定のＩＣが、Ｍ個のリコンフィギャラブルパーティションおよび前記リコンフィギャラブルパーティションの各々にＮ個のバリエーションを有するフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を備え、実行されるとき、前記ＦＰＧＡ上のＭ個とＮ個のすべての組み合わせに書き込むことができ、実装することができる、複数の異なるプリミティブ関数の前記複数のプリミティブビットストリームをコンパイルさせ、記憶させ、結果としてＭ＊Ｎ個のプリミティブを記憶させる、命令のシーケンスをさらに備える、請求項１０に記載のコンピュータ可読媒体。
【請求項１２】
実行されるとき、
クライアントコンピュータシステムに通信可能に連結されたサーバを使用して前記コンパイルし記憶することを実行させ、
前記クライアントコンピュータシステムから前記サーバに、前記プリミティブ関数の前記サブセットに対応する前記プリミティブビットストリームの前記サブセットを提供する要求を送信させ、
前記サーバから前記クライアントコンピュータに、前記プリミティブ関数の前記サブセットに対応する前記プリミティブビットストリームの前記サブセットを含む応答を送信させる、
命令のシーケンスをさらに備える、請求項１０に記載のコンピュータ可読媒体。
【請求項１３】
前記機能ロジックに対応する特定のプリミティブ関数を含む前記プリミティブ関数のサブセットを自動的に決定することは、実行されるとき、前記プリミティブ関数の各々に対する特定のパーティションおよびバリエーションを決定させ、前記特定のパーティションおよびバリエーションを識別するメタデータを記憶させる命令のシーケンスさらに含み、前記要求を送信することは、前記要求とともに前記メタデータを送信することをさらに含む、請求項１２に記載のコンピュータ可読媒体。
【請求項１４】
各々が順次接続された複数の同一のＤＳＰブロック部分的リコンフィギュレーション領域を有する複数の行、行間の任意の接続を可能にする複数の相互接続、を備える、ＦＰＧＡでの使用に適合され、前記ＤＳＰブロック部分的リコンフィギュレーション領域の各々が、前記プリミティブビットストリームの中から異なるビットストリームプリミティブを使用してＮ個のバリアントの１つとしてコンフィギャラブルであり、前記バリアントの各々が１つ以上の入力、１つ以上の出力を有し、コンフィギュレーションＡＸＩバスに接続されている、請求項１０に記載のコンピュータ可読媒体。
【請求項１５】
前記バリアントの各々が異なる目的のためのロジックを含み、どの信号が前記２つ以上の出力に渡されるかを選択するための出力多重化として有する、前記ＦＰＧＡでの使用に適合された、請求項１４に記載のコンピュータ可読媒体。
【請求項１６】
各々が順次接続された複数のＤＳＰブロック部分的リコンフィギュレーション領域を有する複数の行、行間の任意の接続を可能にする複数の相互接続、を備えるＦＰＧＡでの使用に適合され、前記ＤＳＰブロック部分的リコンフィギュレーション領域の各々が、前記プリミティブビットストリームの中から異なるビットストリームプリミティブを使用してＮ個のバリアントの１つとしてコンフィギャラブルであり、前記バリアントの各々が２つ以上の入力、２つ以上の出力を有し、コンフィギュレーションＡＸＩバスに接続されており、
１つ以上の前記ＤＳＰブロック部分的リコンフィギュレーション領域の第１のセットが、機器のシングルチャネルバージョンとしてコンフィギュアできる、より大きなＰＲ領域であり、
１つ以上のＤＳＰブロック部分的リコンフィギュレーション領域の第２のセットが、低レベル機能を実装するように適合されている、
請求項１０に記載のコンピュータ可読媒体。
【請求項１７】
各々が順次接続された複数のＤＳＰブロック部分的リコンフィギュレーション領域を有する複数の行、行間の任意の接続を可能にする複数の相互接続、を含むＦＰＧＡでの使用に適合され、前記ＤＳＰブロック部分的リコンフィギュレーション領域の各々が、前記プリミティブビットストリームの中から異なるビットストリームプリミティブを使用してＮ個のバリアントの１つとしてコンフィギャラブルであり、前記バリアントの各々が２つ以上の入力、２つ以上の出力を有し、コンフィギュレーションＡＸＩバスに接続されており、
１つ以上の前記ＤＳＰブロック部分的リコンフィギュレーション領域の第１のセットが、信号生成機器またはコントローラ機器用にコンフィギュアされた、より大きなＰＲ領域であり、
１つ以上の前記ＤＳＰブロック部分的リコンフィギュレーション領域の第２のセットが、測定機器または監視機器用にコンフィギュアされている、
請求項１０に記載のコンピュータ可読媒体。
【請求項１８】
実行されるとき、前記特定のＩＣに実装するアルゴリズムの機能ロジックを表すグラフィカルブロックを選択し、接続するためのグラフィカルユーザインターフェースにおいて入力を受信させる命令のシーケンスをさらに含み、前記グラフィカルブロックがリコンフィギャラブルロジックに関連する、請求項１０に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示の１つの技術分野は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）集積回路（ＩＣ）および他のタイプのプログラマブルＩＣのプログラミングである。別の技術分野は、ＦＰＧＡプログラミングの分野における部分的リコンフィギュレーション（ＰＲ）である。
【背景技術】
【０００２】
明細書に記載の本項で説明するアプローチは、追求できるであろうアプローチであるが、必ずしも以前に考案されたかまたは追求されたアプローチであるとは限らない。したがって、特に明記しない限り、本項で説明されているアプローチのいずれかが、単に本項に含まれているという理由だけで先行技術として適格であると想定されるべきではない。
【０００３】
フィールドプログラマブルゲートアレイ（ＦＰＧＡ）集積回路は、異なる複雑なデジタル回路を生成するようにコンフィギュアできるコンフィギャラブルロジックブロック（ＣＬＢ）のマトリックスを有する半導体デバイスである。ＣＬＢは、ＦＰＧＡのエリアにまたがるプログラム可能な相互接続を介して接続される。ＦＰＧＡには、ランダムアクセスメモリ、デジタルシグナルプロセッサ（ＤＳＰ）スライス、またはその他のロジック要素が含まれる場合もある。ＣＬＢは、ＡＮＤやＸＯＲなどのロジック演算を生成するようにコンフィギュアすることができ、これらの演算は、次いで、ＦＰＧＡ上の他のロジック要素と直列および／または並列に連結されて、指定されたデジタル回路を生成する。
【０００４】
ＦＰＧＡコンフィギュレーションは、ＶｅｒｉｌｏｇまたはＶＨＤＬなどのハードウェア記述言語（ＨＤＬ）を使用して記述される。ＨＤＬで記述されたプログラムは、特定のターゲットＦＰＧＡのコンフィギュレーション情報を含むビットストリームを生成するために、専用のソフトウェアを使用してコンパイルされる。ＶＩＶＡＤＯは、ＨＤＬ設計を記述およびコンパイルしてＸｉｌｉｎｘ  ＦＰＧＡのビットストリームを生成するために使用できる統合設計環境の例である。
【０００５】
ＦＰＧＡは、高速ＤＳＰまたは高度に並列なＤＳＰアルゴリズムを実装するために非常に強力であることが証明されている。ＦＰＧＡは、例えばＸｉｌｉｎｘ，Ｉｎｃ．から市販されている。ＦＰＧＡにより、リコンフィギャラブルデジタル電子製品の作製が可能になった。一例として、Ｌｉｑｕｉｄ  Ｉｎｓｔｒｕｍｅｎｔｓ  Ｐｔｙ  Ｌｔｄ．によって開発されたＭｏｋｕ：Ｌａｂがある。しかし、ＦＰＧＡをプログラミングするための現在の技術には、いくつかの欠点がある。
【０００６】
ＦＰＧＡのプログラミングには通常、習得に時間がかかる可能性のある専門知識が必要である。多くの場合、コンパイルツールは、ＦＰＧＡのメーカまたはベンダからのみ入手可能であり、それらのチップに固有のインターフェースを有する。ユーザは、これらのツールのインストールと学習に時間を費やす必要がある。複雑さによっては、開発時間が長くなる可能性がある。さらに、設計変更または開発全体を含め、完成したプログラムをコンパイルする時間は、複雑さに応じて数分〜数時間程度になる可能性がある。ＦＰＧＡプログラムに比較的単純な変更を加えることに直面している今日の開発者は、ＦＰＧＡにロードする前にビットストリーム全体が再コンパイルされ、配信されるのを何時間も待つことを望んでいない。
【０００７】
これらの問題に基づいて、ＦＰＧＡプログラミングの技術の改善が必要であり、ＦＰＧＡプログラムのコンパイル時間を大幅に短縮する方法に対する長年にわたるが満たされていない特定のニーズがある。
【発明の概要】
【０００８】
添付の特許請求の範囲は、本発明の要約としての役割を果たし得る。
【図面の簡単な説明】
【０００９】
【図１】例を実装するために使用され得る例示的な分散コンピュータシステムを示す。
【図２】ある実施形態に係る例示的な計算実施形態を示す。
【図３Ａ】部分的リコンフィギュレーションを有するＦＰＧＡの例示的なシステムアーキテクチャを示す。
【図３Ｂ】信号処理回路を表す機能ブロックを選択し、グラフィカルに接続するためにＩＤＥのＧＵＩを使用して設計され得る複雑なＤＳＰアルゴリズムの例を示す。
【図３Ｃ】図３Ａのアーキテクチャ内で図３Ｂを実装する例を示す。
【図３Ｄ】低レベルＰＲモジュールが二次的な機能である前述のアーキテクチャのバリエーションを示す。
【図４】機器が測定機器または監視機器、および信号生成機器またはコントローラ機器の２つのカテゴリに分割される、別のアーキテクチャのバリエーションを示す。
【図５】ある実施形態を実装できる例示的なコンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【００１０】
以下の説明では、説明の目的で、本発明の完全な理解を提供するために、多くの特定の詳細が示されている。しかしながら、本発明がこれらの特定の詳細なしで実施され得ることは明らかであろう。他の例では、本発明を不必要に曖昧にすることを回避するために、周知の構造およびデバイスがブロック図の形で示されている。実施形態は、以下の概要に従って項に説明される： 
１．基礎技術
２．実施形態の一般的な概要
３．実施形態の構造例および機能例
４．実装例−ハードウェアの概要
１．基礎技術 
ＤＳＰアルゴリズムは、多くの場合、ブロック図を使用して記号で記述できる。いくつかの市販のシステムでは、ブロック図のグラフィカルユーザインターフェース（ＧＵＩ）を使用して、ＦＰＧＡなどのデジタル集積回路（ＩＣ）のアルゴリズムの設計を可能にする。ＳｉｍｕｌｉｎｋおよびＬａｂＶＩＥＷは、ＦＰＧＡやその他のターゲットプラットフォーム向けに、ソフトウェアベースのデジタルシステムの設計、検証、および実装を容易にすることができるブロック図環境を提供するツールの商用例である。これらのシステムは、ターゲットプラットフォームのプログラミングの複雑さの一部を取り除くが、それでも長いコンパイル時間を必要とし、開発時間が長くなる可能性がある。
【００１１】
ＧＮＵｒａｄｉｏは、個々の機能ブロックを一緒にドラッグアンドドロップし、ＧＮＵｒａｄｉｏ互換ハードウェアに接続されたホストプロセッサ上でそれらの相互作用を観察するための環境を提供するツールの例である。このシステムでは、設計者は外部処理システムに展開するためのソースコードを生成する必要はない。しかし、ＧＮＵｒａｄｉｏは高帯域幅のハードウェアベースのアプリケーションには適していない。
【００１２】
部分的リコンフィギュレーション（ＰＲ）では、ＦＰＧＡプログラムされた回路を、個別にコンパイルされる領域にし、その結果として領域ビットストリームを生成し得る。各領域ビットストリームは、既存のＦＰＧＡに個別にロードし得るため、既存の領域ビットストリームは新しいものと効果的にスワップアウトされる。最新のＦＰＧＡは、各々が独立してコンフィギャラブルである数百の個別の領域をサポートできる。
【００１３】
部分的リコンフィギュレーション（ＰＲ）は、ＦＰＧＡの残りの部分が動作を継続している間に、アクティブ設計内の機能モジュールの動的な変更を可能にするＦＰＧＡコンフィギュレーション技術である。ＰＲを使用すると、ＦＰＧＡの実行時のさまざまな時点でハードウェアモジュールを変更できるため、大規模なまたは複雑な設計を小規模なＦＰＧＡに適合させることができる。例としては、異なる変調プロトコルと復調プロトコルが実行時にスワップされるソフトウェア定義の無線機がある。ＰＲは、例えば、ＦＰＧＡのＸｉｌｉｎｘ  ＺＹＮＱファミリで利用できる。
【００１４】
ＰＲを使用すると、回路設計はリコンフィギャラブルロジックと非リコンフィギャラブルロジックに分割される。スタティックロジックという用語は、リコンフィギャラブルではないＦＰＧＡ上のすべてのロジック要素に使用されるが、リコンフィギャラブルロジックという用語は、リコンフィギャラブルであるロジック要素を指す。リコンフィギャラブルモジュール（ＲＭ）（または「モジュール」）は、リコンフィギャラブルパーティション（ＲＰ）（または「パーティション」）内に配置できるロジックのＨＤＬ記述である。各ＲＰは、そのパーティション内でのみ専用のＦＰＧＡ上のロジック要素の物理的な集合である。リコンフィギャラブルフレーム（ＲＦ）は、ＲＰとして定義できる最小のリコンフィギャラブル領域を表す。複数のＲＦは単一のＲＰに含めることができ、その中にカプセル化される。部分的ビットストリームは、ＲＭのコンフィギュレーションの詳細とコンフィギュレーションの場所に関する情報を含む生成されたファイルである。
【００１５】
設計がスタティックロジックとリコンフィギャラブルロジックに分離されると、リコンフィギャラブルロジックはＲＰセクションに分割され、各パーティションのすべてのＲＭが識別される。各ビットストリームには、コンフィギュレーションデータと位置データが含まれる。したがって、すべてのＲＰの場所のすべてのモジュールに対して別個の単一ビットストリームが生成される。したがって、２つの異なるＲＰで同じ機能モジュールが必要な場合は、２つのビットストリームが必要である。モジュールおよびパーティションは、本開示に関係しないが、特定の回路の実装に影響を与える可能性がある他の制約を受ける。これらの制約は、他の刊行物に詳しく記載されている。
【００１６】
２．実施形態の一般的な概要
一実施形態では、部分的リコンフィギュレーションをサポートするデジタル電子集積回路（ＩＣ）であって、特定のＩＣが、複数のリコンフィギャラブルパーティションとリコンフィギャラブルパーティションの各々でコンフィギャラブルである複数のプリミティブバリエーションを有する、デジタル電子集積回路（ＩＣ）をコンフィギュアする速度と効率の改善を提供する方法が開示され、１つ以上のプロセッサを使用して実行されると、その１つ以上のプロセッサに、コンフィギュレーションビットストリームを特定のＩＣに書き込む前に、デジタルストレージを使用して、特定のＩＣに書き込むことができ、実装することができる複数の異なるプリミティブ関数のための複数のプリミティブビットストリームをコンパイルし、記憶することと、リコンフィギャラブルロジックを使用して特定のＩＣに実装するアルゴリズムの機能ロジックを指定するための入力を受信することと、機能ロジックに対応する特定のプリミティブ関数を含むプリミティブ関数のサブセットを自動的に決定することと、デジタルストレージから、プリミティブ関数のサブセットに対応するプリミティブビットストリームのサブセットを取得することと、１つ以上の部分的リコンフィギュレーション演算を使用して、特定のＩＣにプリミティブビットストリームのサブセットを書き込むことと、を実行させ、その方法は、１つ以上のコンピューティングデバイスによって実行される。
【００１７】
別の実施形態では、部分的リコンフィギュレーションをサポートするフィールドプログラマブルゲートアレイ（ＦＰＧＡ）デジタル電子集積回路であって、特定のＦＰＧＡが、複数のリコンフィギャラブルパーティションとリコンフィギャラブルパーティションの各々でコンフィギャラブルである複数のプリミティブバリエーションを有する、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）デジタル電子集積回路）のプログラミングの速度と効率の改善を提供する方法が開示され、その方法は、コンフィギュレーションビットストリームを特定のＦＰＧＡに書き込む前に、デジタルストレージを使用して、特定のＦＰＧＡに書き込むことができ、実装することができる複数の異なるプリミティブ関数のための複数のプリミティブビットストリームをコンパイルし、記憶することと、リコンフィギャラブルロジックを部分的に使用して特定のＦＰＧＡに実装するアルゴリズムの機能ロジックを指定するための入力を受信することと、グラフィカルブロックに対応する特定のプリミティブ関数を含むプリミティブ関数のサブセットを自動的に決定することと、デジタルストレージから、プリミティブ関数のサブセットに対応するプリミティブビットストリームのサブセットを取得することと、１つ以上の部分的リコンフィギュレーション演算を使用して、特定のＦＰＧＡにプリミティブビットストリームのサブセットを書き込むことと、を含み、その方法は、１つ以上のコンピューティングデバイスによって実行される。
【００１８】
実施形態は、ＦＰＧＡアルゴリズムのすべてのブロック図が、Ｍ個のブロック領域のマトリックスで接続されたＮ個の離散ブロックタイプを使用して記述できることを前提としている。特定の実施形態は、具体的にはＦＰＧＡと使用するために説明されているが、本開示の方法は、より一般的に他のプログラマブル集積回路に適用することができ、ＦＰＧＡの使用は必要とされない。
【００１９】
１つのアプローチは、考えられるすべてのブロック図接続のビットストリームを事前にコンパイルし、次いでユーザのブロック図に基づいて選択することである可能性がある。Ｎ＾Ｍフルビットストリームのストレージおよびコンパイルが含まれる。Ｍおよび／またはＮが小さな値を超えて増加すると、このアプローチのストレージ量とコンパイル時間は実行不可能になる。ストレージとコンパイルの時間は、ＭまたはＮの増加に伴い、指数関数的にまたは多項式的に増加する。各部分的ビットストリームは約１００ｋＢであり、複雑さに応じてコンパイルに約５分かかる。Ｍ＝Ｎ＝１００とすると、次いで約５＊１００＾１００分のコンパイル時間と１００＾９８ＧＢのストレージが必要になる。
【００２０】
実施形態では、Ｍ個の領域の各々が部分的にリコンフィギャラブルであると定義され、Ｎ個のブロックタイプの各々の単一の部分的ビットストリームが各Ｍ個の領域について事前にコンパイルされる、部分的リコンフィギュレーション（ＰＲ）技術が採用される。この文脈では、「事前に」とは、エンドユーザコンピュータがグラフィカルツールまたは非グラフィカルツールを使用してアルゴリズムを設計するために使用される前を意味し、設計プロセスが開始されるとき、ユーザは、アルゴリズムを実現するようにコンフィギュアできる利用可能なＮ個のブロックタイプに対応する多数のビットストリームのプリコンパイルされたライブラリを利用可能である。したがって、Ｍ＊Ｎ個のビットストリームのみのコンパイルとストレージが必要である。Ｍ＝Ｎ＝１００の場合、次いで５０，０００分のコンパイル時間と１ＧＢのストレージのみが必要である。このアプローチは、ユーザアルゴリズムやアプリケーションが必要とする特定の機能を予測し、それらの機能のためのビットストリームを事前計算することにある程度依存する。
【００２１】
いくつかの実施形態では、Ｎ個のすべてよりも少ないブロックタイプの単一の部分的ビットストリームは、事前にコンパイルされ、アルゴリズムをターゲットプラットフォームに完全に展開するために必要な他のブロックタイプのビットストリームは、設計時および／または展開の直前にコンパイルされる。いくつかの実施形態では、Ｎ個よりも少ないブロックタイプのサブセットは、現在のユーザまたは他のユーザによる過去の使用におけるブロックタイプの人気に基づいてプリコンパイルのために選択され、したがって、サブセットは、特定の設計において選択される可能性が最も高いブロックタイプを含む。例えば、コンパイルエージェント１２２は、ストレージ単独で、または無関係のユーザの異なるホストコンピュータ上で実行されているコンパイルエージェントの他のインスタンスから同様の方法で受信したデータと組み合わせて、ＩＤＥ１２０内の特定のブロックタイプのユーザ選択を検出し、ユーザ選択のレポートをコンパイルサーバプロセス１３２に送信するようにプログラムされてもよい。このように、ブロックタイプの実際の選択に関するクラウドソーシングのレポートは、どのブロックタイプがサーバ側でプリコンパイルされるのかに影響を与える可能性がある。または、ユーザ入力および／またはコンフィギュレーションデータは、どのブロックタイプがプリコンパイルされ、どのブロックタイプが設計時または展開時にコンパイルされるかを指定することができる。このアプローチにより、ユーザは、プリコンパイルされたビットストリームのライブラリを記憶することによる時間の節約および効率の利点と、前もってコンパイルを行うことの計算負担とのバランスをとることが可能になる。他の実施形態、態様および特徴は、全体としての開示および添付の特許請求の範囲から明らかになるであろう。
【００２２】
３．実施形態の構造例および機能例
図１は、例を実装するために使用され得る例示的な分散コンピュータシステムを示す。図面の図の説明では、「プリミティブ」という用語は、単一の部分的ビットストリームにコンパイルされたＤＳＰまたはＦＰＧＡ１１０の他のアプリケーションのロジックのグループ化を指す。
【００２３】
ある実施形態では、クライアントコンピューティングデバイス１０２は、１つ以上のネットワーク１０４を介してサーバ１０６に直接的にまたは間接的に通信可能に連結される。
【００２４】
クライアントコンピューティングデバイス１０２は、ユーザのアルゴリズムを実装するようにプログラムされるＦＰＧＡ１１０にインターフェースすることができるデスクトップコンピュータ、ラップトップコンピュータ、モバイルコンピューティングデバイス、ワークステーションまたは他のコンピューティングデバイスを含み得る。ある実施形態では、クライアントコンピューティングデバイス１０２は、様々な実施形態において、プロセッサ開発ボード、アナログ−デジタル変換器、デジタル−アナログ変換器、ネットワーク接続、電力変換器などのうちの１つ以上を含み得る周辺電子機器１１２にもインターフェースする。
【００２５】
クライアントコンピューティングデバイス１０２は、ＦＰＧＡプログラム１１４の作成、管理、およびコンパイルをサポートするように構成されたアプリケーションプログラムである統合開発環境（ＩＤＥ）１２０をホストするかまたは実行する。いくつかの実施形態では、ＩＤＥ１２０は、計算機能を表すグラフィカルブロック、アイコン、またはウィジェットを接続することによってＤＳＰアルゴリズムのプログラミングを可能にするグラフィカルユーザインターフェースとのユーザ相互作用を生成し、可能にする。
【００２６】
ある実施形態では、コンパイルエージェント１２２は、クライアントコンピューティングデバイス１０２を使用してホストされるかまたは実行され、ＩＤＥ１２０と統合されるかまたは別個のプログラムとして統合され、さらに説明されるように、サーバ１０６における互換性のあるコンパイルサーバプロセス１３２と相互運用するようにプログラムされるかまたはコンフィギュアされる。ある実施形態では、コンパイルエージェント１２２は、サーバ１０６からどのビットストリームプリミティブを取得するか、およびそれらをＦＰＧＡ１１０内のどこに配置するかを決定するようにプログラムされている。これらの要素を使用して、クライアントコンピューティングデバイス１０２は、ＦＰＧＡ１１０に書き込まれるコンパイルされたビットストリーム１２４のセットを生成するかまたは取得して、ＦＰＧＡのプログラミングを達成し得る。いくつかの実施形態では、ＩＤＥ１２０およびコンパイルエージェント１２２は、他の項でさらに説明されるように、コンパイルされたビットストリームプリミティブ１４２を含むかまたは制御する、サーバ１０６とネットワーク化されたデータストレージ１４０との間の通信またはメッセージングプロトコルを実行するようにコンフィギュアされるかまたはプログラムされ、クライアントタスクを制御するためにソフトウェアおよびファームウェアを実行し、ＦＰＧＡ１１０でプログラムされるプリミティブのためにコンパイルされたビットストリーム１２４を記憶する。プリミティブの数および／またはストレージ要件に応じて、コンパイルされたビットストリーム１２４のストレージは、ストレージ１４０を使用してサーバ１０６によって共有されてもよくまたは完全に実行されてもよい。
【００２７】
ＦＰＧＡ１１０はＰＲをサポートする。ある実施形態では、ＦＰＧＡ１１０は、プログラムされたアルゴリズムが必要とし得る最もリソースを必要とするコンフィギュレーションに十分な数の処理要素を各々が含む複数の領域を有する非常に大きなユニットである。多くの離散した領域に分散する大きなリソース数が予想される。一実施形態は、ユーザがスペースにあまり関わらないより大きなＦＰＧＡで最もよく実行され得るが、本明細書で説明される方法は、デバイスサイズに関係なく使用可能であり、大きなＦＰＧＡまたは他の大きなプラットフォームは要件ではない。
【００２８】
ネットワーク１０４は、大まかには、地上波リンク、衛星リンク、有線リンクもしくは無線リンクのいずれかを使用するローカルエリアネットワーク、ワイドエリアネットワーク、インターネットネットワークまたはインターネットの任意の組み合わせを表す。クライアントコンピューティングデバイス１０２およびサーバ１０６は各々、ネットワーク１０４を介して運ばれるトランスポート、セッション、およびアプリケーショントラフィックのためのプロトコルと互換性のあるネットワーク１０４へのインターフェースをホストする。クライアントコンピューティングデバイス１０２およびサーバ１０６が、デジタル電子メッセージおよび非同期プロトコル、ステートレスプロトコル、またはステートフルプロトコルを使用して通信して、要求、応答、およびデータペイロードを交換できる場合、ネットワーク１０４を介して使用される特定のプロトコルは重要ではない。
【００２９】
ある実施形態では、サーバ１０６は、デスクトップコンピュータ、ラックマウント型コンピュータ、またはパブリックもしくはプライベートクラウドコンピューティングセンタ内の１つ以上の仮想コンピューティングインスタンスのいずれかを備える。サーバ１０６は、他のプロセス、サーバ、またはアプリケーションとともにサーバコンピュータまたはクラスタ上で実行されるプロセスを備えてもよい。サーバ１０６は、ＤＯＣＫＥＲまたはＫＵＢＥＲＮＥＴＥＳのコンテナ化を使用するなど、オペレーティングシステムの仮想化を使用して実装し得る。サーバ１０６は、クラウドベースのデジタルデータストレージまたは他のネットワーク化されたデータストレージを備え得るストレージ１４０を含むか、またはそれにアクセスするようにプログラムされている。
【００３０】
ある実施形態では、サーバ１０６は、ＦＰＧＡプリミティブ関数のソースコード１３０を記憶し、これは、本明細書の他の項でさらに説明される。サーバ１０６は、コンパイルされたビットストリーム１４２によって示されるように、ソースコード１３０をストレージ１４０に記憶されたビットストリームプリミティブにコンパイルするようにコンフィギュアされるかまたはプログラムされたコンパイルサーバプロセス１３２も、ホストするかまたは実行する。重要なことに、実施形態では、ＦＰＧＡ１１０のリコンフィギャラブルパーティションで使用できるすべての機能プリミティブのソースコード１３０は、クライアントコンピューティングデバイス１０２による任意のプログラミング活動の前にコンパイルされ、ストレージ１４０に記憶されて、クライアントコンピューティングデバイスからのビットストリームに対する要求を待つ。コンパイルサーバプロセス１３２は、ＦＰＧＡ１１０のベンダから予め入手した、またはそれ以外の場合ＦＰＧＡ１１０と互換性のあるプログラム、ライブラリ、または関数を使用してもよい。
【００３１】
プリミティブのビットストリーム１４２は、多数の異なる実質的な信号処理機能のいずれかを実装し得る。様々な実施形態で使用することができるプリミティブの例には、信号乗算器、信号マルチプレクサ、シグナルミキサ、デジタルフィルタ、オシレータ、インテグレータ、三角関数演算、高速フーリエ変換、ＰＩＤコントローラ、フェーズロックループ、インテグレータ、差別化要因、正弦波発生器、ダイレクトデジタルシンセサイザ、直接形式の１つの単一次セクションの無限インパルス応答フィルタ、ＤＣゲイン、が含まれる。
【００３２】
図１の例では、サーバ１０６は、ストレージ１４０を使用してプリミティブのコンパイルされたビットストリーム１４２を記憶するようにプログラムされるかまたはコンフィギュアされている。プリミティブの数および／またはストレージ要件に応じて、このタスクは、クライアントコンピューティングデバイス１０２によって共有され完全に実行され得る。コンパイルサーバプロセス１３２も、さらに説明されるように、クライアントコンピューティングデバイス１０２からの要求に応答して、コンパイルされたビットストリーム１４２をフェッチしクライアントコンピューティングデバイス１０２に送信するようにもプログラムされているか、またはコンフィギュアされている。
【００３３】
特定の演算がクライアントコンピューティングデバイス１０２で発生し、ネットワーク１０４を介してサーバ１０６と通信し、ストレージ１４０がサーバに関連して管理される一実施形態が説明された。しかし、他の実施形態は、単一のホストコンピュータまたは仮想コンピューティングインスタンスに完全に実装し得、クライアントサーバアーキテクチャの必要はない。さらに、ストレージ１４０は、ホストコンピュータに配置されてもよく、仮想コンピューティングインスタンスに関連付けられてもよく、プリコンパイルされたビットストリームのデジタルストレージを、クライアントコンピューティングデバイス１０２またはアルゴリズムの設計に使用される任意の他のコンピュータから分離する必要はない。例えば、単一のホストコンピュータまたはクライアントコンピューティングデバイス１０２などの仮想コンピューティングインスタンスは、統合システムとして、図１に示されるすべての機能要素およびデータストレージデバイスをホストし得る。または、図１のアーキテクチャが使用されてもよいが、プリコンパイルされたビットストリームのセットは、クライアントコンピューティングデバイスにおけるローカルストレージのためのパッケージまたはユニットとして、サーバ１０６からクライアントコンピューティングデバイス１０２に配信されてもよい。一実施形態では、プリコンパイルされたビットストリームのパッケージの配信は、クライアントコンピューティングデバイスのクライアントソフトウェアおよび／またはクライアントコンピューティングデバイスのブラウザで実行されるブラウザ実行可能コードの任意の組み合わせを使用して実行されるインストーラプロセスを使用して実行される。
【００３４】
図２は、ある実施形態に係る例示的なコンピュータ実装プロセスを示す。図２の例は、クライアントコンピューティングデバイス１０２およびサーバ１０６によって異なる時間に実行される機能ステップを含む。
【００３５】
ある実施形態では、ブロック２０２で、サーバまたはサーバコンピュータは、指定されたターゲットプラットフォームのプリミティブのすべての可能な組み合わせをプリコンパイルする。ブロック２０４で、プロセスは、コンパイルされたビットストリームプリミティブをネットワークストレージに記憶する。
【００３６】
例えば、サーバ１０６は、コンパイルサーバプロセスを使用して、プリミティブのソースコード１３０を、ストレージ１４０を使用して記憶されるコンパイルされたビットストリーム１４２にプリコンパイルする。ソースコード１３０で表されるプリミティブの数は、異なる実施形態で変化し得る。例えば、指定されたＦＰＧＡは、１００個のパーティションをサポートするとしてコンフィギュレーションデータで定義されている場合がある。パーティションの各々に対し、プリコンパイルされたビットストリームを受信するためにＮ個の異なるバリエーションを利用できる。特定の領域のビットストリームのセットは、いずれの他の領域のビットストリームとも必ずしも互換性があるとは限らない。したがって、ＦＰＧＡの領域「０１」は、異なる２０個のビットストリームの第１の特定のセットの中から選択された第１のビットストリームをサポートしてもよく、同じＦＰＧＡの領域「６４」は、２０個の他のビットストリームの第２の異なる特定のセットの中から選択された第２のビットストリームをサポートしてもよい。
【００３７】
ある実施形態では、管理アクションまたはコンフィギュレーションデータは、ターゲットＦＰＧＡのパーティションに関連するバリエーションへの変更を指定し得る。例えば、パーティション「６４」を変更して、以前はＰＬＬブロックをそれと、またはそのバリエーションの１つで関連付けていなかった、そのパーティションのバリエーションにフェーズロックループ機能ブロックを追加した場合、次いで、パーティション「６４」のすべてのビットストリームをサーバ１０６を使用して再コンパイルする必要があるであろう。しかし、パーティションに関連付けられた各々の機能ブロックは、関連のないロジック命令のいくつかのセットを含む場合があり、柔軟性が向上する。例えば、パーティション「６４」に関連付けられた２０のバリエーションのうちの特定のバリエーションは、ＰＬＬと加算器の両方のロジックを定義できるであろう。いくつかの実施形態では、任意の２つ以上のロジックのセットが、パーティションのバリエーションに関連付けられた機能ブロック内にあってもよい。この配置は、ＦＰＧＡで利用可能な総計算能力によって制約される場合がある。
【００３８】
非同期的に、ブロック２０６で、クライアントコンピューティングデバイスにおいて、アルゴリズムまたはプログラムは、グラフィカルユーザインターフェースを使用して定義されるかまたはプログラムされる。例えば、ＤＳＰアルゴリズムを定義できるであろう。ＤＳＰアルゴリズムを定義することは、ＩＤＥ１２０のＧＵＩインターフェースにおいて、ＤＳＰアルゴリズムの動作を記号で定義するグラフィカルブロックをドラッグ、ドロップ、および接続することを指定するユーザ入力を受信することを含み得る。
【００３９】
いくつかの実施形態では、ブロック２０６は、特定の機能ブロックのコンフィギュレーションを変更するために１つ以上のパラメータ値を受信することを含み得る。例には、レジスタレベルのパラメータ値、または指定されたレジスタもしくは他の出力場所への、入力もしくは出力のリダイレクトの指定が含まれる。
【００４０】
ブロック２０８で、クライアントコンピューティングデバイス１０２を使用して、アルゴリズムは、対応するプリミティブにセグメント化されるかまたはグループ化される。ブロック２０８は、ＦＰＧＡ１１０のどの利用可能なＲＰおよびバリエーションが、どの特定のプリコンパイルされたプリミティブビットストリーム１４２を受信して、ＦＰＧＡ上にアルゴリズムを実装するかを決定することを含み得る。
【００４１】
ブロック２０８は、ＩＤＥ１２０を使用してＧＵＩで指定されるように、サーバでプリコンパイルされた利用可能なプリミティブへのアルゴリズムの機能ブロックの関連付けを決定することも含み得る。いくつかの実施形態では、ブロック２０８は、ＧＵＩで表される機能ブロックがサーバ１０６の特定のプリミティブおよび／またはビットストリームにどのように対応するかを指定するマッピングテーブル、コンフィギュレーションファイルまたは他のデータに基づいて、自動的に実行され得る。代替的には、ＩＤＥ１２０は、ＧＵＩ内の機能ブロックを選択し、そのブロックを実装するための特定のプリミティブを指定するための入力を受け入れるようにプログラムされたＧＵＩウィジェットを、ネイティブにまたはコンパイルエージェント１２２の制御下で提供し得る。
【００４２】
この時点で、クライアントコンピューティングデバイス１０２は、ＦＰＧＡ上にアルゴリズムを実装するために必要であり、ＦＰＧＡ上のＲＰおよびＲＰのバリエーションにスワップすることができるすべてのプリコンパイルされたビットストリーム１４２の識別子を決定している。
【００４３】
ブロック２１０で、クライアントコンピューティングデバイス１０２は、指定されたプリミティブのビットストリームを取得するためにサーバ１０６に要求を送信する。１つ以上の要求が送信される場合がある。１つ以上の要求は、ＦＰＧＡ上にアルゴリズムを実装するために必要であり、ＦＰＧＡ上のＲＰおよびＲＰのバリエーションにスワップすることができるすべてのプリコンパイルされたビットストリーム１４２を集合的に指定する。
【００４４】
ブロック２１２で、サーバ１０６において、ＤＳＰアルゴリズムの領域およびグループに対応するビットストリームプリミティブが、ストレージ１４０または他のネットワーク化されたストレージからフェッチされ、コピーが、ネットワーク１０４を介した応答でクライアントコンピューティングデバイス１０２に返される。コンパイルされたビットストリーム１４２は、受信された後、コンパイルされたビットストリーム１２４の形でクライアントコンピューティングデバイス１０２に記憶され得る。
【００４５】
ブロック２１４で、フェッチされたビットストリームはＦＰＧＡに展開される。コンパイルエージェント１２２は、ＩＤＥ１２０と連携して、受信されたコンパイルされたビットストリーム１２４を、指定されたＦＰおよびＦＰＧＡ１１０のバリエーションに書き込ませ得る。ブロック２１４が完了すると、ＦＰＧＡは、ＩＤＥ１２０のＧＵＩを使用して設計され、設計に関連付けられたプリミティブのプリコンパイルされたビットストリーム１４２を使用して実装されたすべてのリコンフィギャラブルロジックでプログラムされている。これらのステップは、アルゴリズムをＩＣに展開するために、この時点でビットストリームのコンパイルが必要となるであろう従来のアプローチよりも実質的により高速で実行される。
【００４６】
図３Ａは、部分的リコンフィギュレーションを有するＦＰＧＡの例示的なシステムアーキテクチャを示す。ある実施形態では、２つの入力「ｉｎ１」、「ｉｎ２」は、「１．１」〜「６．５」で示される５つの順次接続されたＤＳＰブロックＰＲ領域を各々が有する３行の２つのセットに間接的に連結される。複数の相互接続３０２は、行間の任意の接続を可能にする。相互接続３０２は、異なる実施形態において異なる方法で実装されてもよい。例には、大規模な多重化ネットワーク、高速ＡＸＩデータバス、または異なる接続のためのバリエーションを有するＰＲ領域などが含まれる。
【００４７】
各ＤＳＰ  ＰＲ領域１．１〜６．５は同一であり、各々がプリコンパイルされたビットストリーム１４２の中から異なるビットストリームプリミティブを使用して記述される、Ｎ個のバリアントの１つとしてコンフィギュアすることができる。各バリアントのインターフェースは同じであり、入力「ｉｎ１」、「ｉｎ２」、および出力「Ｏｕｔ１」、「Ｏｕｔ２」、ならびにコンフィギュレーションＡＸＩバス３０４への接続を含む。各バリエーションには、異なる目的のロジック、および各出力にどの信号が渡されるのかを選択するための出力多重化が含まれる。
【００４８】
特定の実施形態は、最大２０のバリエーションおよび約２０の機能ブロックのロジックの使用に言及しているが、他の実施形態は、これらの要素の他のカウントを使用し得、具体的には、特定のバリエーションで使用するために定義できる異なる種類のロジックの数に制限はない。ＰＲ領域コンフィギュレーションの様々な実施形態で使用することができる可能な機能ブロックの例には、信号乗算器、信号マルチプレクサ、シグナルミキサ、デジタルフィルタ、オシレータ、インテグレータ、三角関数演算、高速フーリエ変換、ＰＩＤコントローラ、フェーズロックループ、インテグレータ、差別化要因、正弦波発生器、ダイレクトデジタルシンセサイザ、直接形式の１つの単一次セクションの無限インパルス応答フィルタ、ＤＣゲイン、ヌル、が含まれる。さらに、複雑な機能ブロックは、ＦＰＧＡ領域の２つ以上のバリエーションに分割されるビットストリームをもたらす可能性がある。
【００４９】
図３Ｂは、信号処理回路を表す機能ブロックを選択し、グラフィカルに接続するためにＩＤＥのＧＵＩを使用して設計され得る複雑なＤＳＰアルゴリズムの例を示す。図３Ｂの例は、周波数変調制御システムのブロック図を含み、信号処理機能は、正弦波発生器（Ｓｉｎｅ Ｇｅｎ）、復調、コントローラ、スキャナ、およびＩＩＲを含み得ることがわかるであろう。破線の内側にグループ化されたブロック３１０、３１２は、単一のビットストリームプリミティブにグループ化することができる要素の例である。
【００５０】
図３Ｃは、図３Ａのアーキテクチャ内に図３Ｂを実装する例を示す。図３Ｃでは、図３Ｂの機能ブロックは、図３Ａのアーキテクチャの特定のＲＰまたは領域に割り当てられ、これらの関連付けを示すために、図３Ｃにおいて適切にラベル付けされている。例えば、図３Ａの領域１．１は、Ｓｉｎｅ  Ｇｅｎロジックに割り当てられ、１．２は復調器などに割り当てられている。相互接続３０２およびバス３０４に関連する領域の選択は、特定のチップ配置で図３Ｂのロジックの実装を達成する。
【００５１】
図３Ｄは、低レベルＰＲモジュールが二次的な機能である前述のアーキテクチャのバリエーションを示す。この例では、ボックスＮ．１、Ｎ．２、Ｎ．Ｘは、既存の機器、例えばＭｏｋｕ：Ｌａｂで利用可能な機器のシングルチャネルバージョンとしてコンフィギュアできる、より大きなＰＲ領域を表す。この配置により、ユーザは単一のハードウェアユニットを使用して非常に複雑なシステムを作製できる。低レベルのＰＲモジュール１．１、１．２、１．３〜６．３は、特定のユースケースまたはユーザ要件を満たすためのさらなるカスタマイズに引き続き役立つ。したがって、このアーキテクチャは、複雑な機能専用のより大きなＰＲ領域を有するＦＰＧＡを、プリコンパイルされたビットストリーム１４２を使用してリコンフィギュアできる低レベルモジュールと統合して、より大きなＰＲ領域およびチップの主な機能の使用を中断することなく、チップ上の他の機能をスワップする可能性を示している。
【００５２】
図４は、機器が測定機器または監視機器および信号生成機器またはコントローラ機器の２つのカテゴリに分割される、別のアーキテクチャのバリエーションを示す。ＰＲ領域４０２、４０４、４０６は、信号生成機器またはコントローラ機器に固有であり、ＰＲ領域４０８は、測定機器または監視機器に固有である。この配置を使用すると、Ｍｏｋｕ：Ｌａｂシステムと同じ機能が維持され、柔軟性が高まる。さらに、２つのバリエーションを信号生成機器またはコントローラ機器に割り当てた場合、ＦＰＧＡに必要なリソースは、現時点で入手可能なＭｏｋｕ：Ｌａｂデバイスよりも大幅に高くはならないであろう。
【００５３】
実施形態は、以前の実施形態に比べて多くの利点を提供する。主な利点は、ユーザの観点から、コンパイル時間が完全に排除されることである。クライアントコンピューティングデバイス１０２は、ＦＰＧＡブロックのローカルコンパイルに伴う長い遅延なしに、ＦＰＧＡをプログラムするために必要とされる各機能ブロックのビットストリームのプリコンパイルされたバージョンを取得することができる。さらに、コンパイルを達成するために必要なすべてのツールは、サーバコンピュータ１０６にプリインストールされ、管理され、クライアントコンピューティングデバイス１０２へのサービスとして提供される。したがって、クライアントコンピューティングデバイス１０２のユーザは、チップ固有またはベンダ固有のコンパイルツールをインストールするかまたは学習する必要はない。
【００５４】
４．実装例−ハードウェアの概要
一実施形態によれば、本明細書に記載の技術は、少なくとも１つのコンピューティングデバイスによって実装される。技術は、パケットデータネットワークなどのネットワークを使用して連結された少なくとも１つのサーバコンピュータおよび／または他のコンピューティングデバイスの組み合わせを使用して、全体的にまたは部分的に実装され得る。コンピューティングデバイスは、ファームウェア、メモリ、他のストレージ、または組み合わせにおけるプログラム命令に従って技術を実行するようにプログラムされた少なくとも１つの汎用ハードウェアプロセッサを含み得る。そのようなコンピューティングデバイスは、カスタムハードワイヤードロジック、ＡＳＩＣ、またはＦＰＧＡをカスタムプログラミングと組み合わせて、記載された技術を達成してもよい。コンピューティングデバイスは、サーバコンピュータ、ワークステーション、パーソナルコンピュータ、ポータブルコンピュータシステム、ハンドヘルドデバイス、モバイルコンピューティングデバイス、ウェアラブルデバイス、身体装着型または移植型デバイス、スマートフォン、スマートアプライアンス、インターネットワーキングデバイス、ロボットもしくは無人地上車両もしくは無人航空機などの自律型または半自律型デバイス、記載された技術を実装するためのハードワイヤードロジックおよび／またはプログラムロジックを組み込んだ任意の他の電子デバイス、データセンタ内の１つ以上の仮想コンピューティングマシンまたはインスタンス、ならびに／またはサーバコンピュータおよび／もしくはパーソナルコンピュータのネットワーク、であってもよい。
【００５５】
図５は、ある実施形態を実装し得る例示的なコンピュータシステムを示すブロック図である。図５の例では、コンピュータシステム５００および開示された技術をハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組み合わせに実装するための命令は、コンピュータアーキテクチャおよびコンピュータシステムの実装について通信するために本開示が関係する技術分野の当業者によって一般的に使用されるのと同じレベルの詳細さで、例えばボックスおよび円として概略的に表される。
【００５６】
コンピュータシステム５００は、電子信号経路を介してコンピュータシステム５００の構成要素間で情報および／または命令を通信するためのバスおよび／または他の通信メカニズム（複数可）を含み得る入力／出力（Ｉ／Ｏ）サブシステム５０２を含む。Ｉ／Ｏサブシステム５０２は、Ｉ／Ｏコントローラ、メモリコントローラ、および少なくとも１つのＩ／Ｏポートを含み得る。電子信号経路は、例えば、線、一方向矢印、または双方向矢印として、図面に概略的に表される。
【００５７】
情報および命令を処理するために、少なくとも１つのハードウェアプロセッサ５０４がＩ／Ｏサブシステム５０２に連結されている。ハードウェアプロセッサ５０４は、例えば、汎用マイクロプロセッサまたはマイクロコントローラ、および／または組み込みシステムまたはグラフィックス処理ユニット（ＧＰＵ）またはデジタル信号プロセッサまたはＡＲＭプロセッサなどの専用マイクロプロセッサを含み得る。プロセッサ５０４は、統合算術ロジック演算ユニット（ＡＬＵ）を備えてもよく、または別個のＡＬＵに連結されてもよい。
【００５８】
コンピュータシステム５００は、プロセッサ５０４によって実行されるデータおよび命令を電子的にデジタル記憶するためにＩ／Ｏサブシステム５０２に連結されたメインメモリなどのメモリ５０６の１つ以上のユニットを含む。メモリ５０６は、様々な形態のランダムアクセスメモリ（ＲＡＭ）または他のダイナミックストレージデバイスなどの揮発性メモリを含み得る。メモリ５０６は、プロセッサ５０４によって実行される命令の実行中に一時的変数または他の中間情報を記憶するためにも使用され得る。そのような命令は、プロセッサ５０４にアクセス可能な非一時的コンピュータ可読ストレージ媒体に記憶されると、コンピュータシステム５００を、命令で指定された演算を実行するようにカスタマイズされた専用の機械にレンダリングすることができる。
【００５９】
コンピュータシステム５００は、プロセッサ５０４の情報および命令を記憶するために、読み取り専用メモリ（ＲＯＭ）５０８またはＩ／Ｏサブシステム５０２に連結された他の静的ストレージデバイスなどの不揮発性メモリをさらに含む。ＲＯＭ５０８は、消去可能ＰＲＯＭ（ＥＰＲＯＭ）または電気的消去可能ＰＲＯＭ（ＥＥＰＲＯＭ）などの様々な形態のプログラマブルＲＯＭ（ＰＲＯＭ）を含み得る。永続ストレージ５１０のユニットは、フラッシュメモリなどの様々な形態の不揮発性ＲＡＭ（ＮＶＲＡＭ）、またはＣＤ−ＲＯＭもしくはＤＶＤ−ＲＯＭなどのソリッドステートストレージ、磁気ディスクまたは光ディスクを含み得、情報および命令を記憶するためにＩ／Ｏサブシステム５０２に連結されていてもよい。ストレージ５１０は、プロセッサ５０４によって実行されると、コンピュータ実装方法を実行させて本明細書の技術を実行する命令およびデータを記憶するために使用され得る非一時的コンピュータ可読媒体の例である。
【００６０】
メモリ５０６、ＲＯＭ５０８またはストレージ５１０内の命令は、モジュール、メソッド、オブジェクト、関数、ルーチン、または呼び出しとして編成された１つ以上の命令のセットを含み得る。命令は、１つ以上のコンピュータプログラム、演算システムサービス、またはモバイルアプリを含むアプリケーションプログラムとして編成されてもよい。命令は、オペレーティングシステムおよび／またはシステムソフトウェア、マルチメディア、プログラミングまたは他の機能をサポートする１つ以上のライブラリ、ＴＣＰ／ＩＰ、ＨＴＴＰまたはその他の通信プロトコルを実装するためのデータプロトコル命令またはスタック、ＨＴＭＬ、ＸＭＬ、ＪＰＥＧ、ＭＰＥＧまたはＰＮＧを使用してコード化されたファイルを解析またはレンダリングするためのファイルフォーマット処理命令、グラフィカルユーザインターフェース（ＧＵＩ）、コマンドラインインターフェースまたはテキストユーザインターフェースのためのコマンドをレンダリングまたは解釈するためのユーザインターフェース命令、オフィススイート、インターネットアクセスアプリケーション、設計および製造アプリケーション、グラフィックスアプリケーション、オーディオアプリケーション、ソフトウェアエンジニアリングアプリケーション、教育アプリケーション、ゲームまたは雑多なアプリケーションなどのアプリケーションソフトウェア、を含み得る。命令は、ウェブサーバ、ウェブアプリケーションサーバまたはウェブクライアントを実装し得る。命令は、プレゼンテーション層、アプリケーション層、および構造化照会言語（ＳＱＬ）を使用するかもしくはＳＱＬを使用しないリレーショナルデータベースシステムなどのデータストレージ層、オブジェクトストア、グラフデータベース、フラットファイルシステム、または他のデータストレージとして編成し得る。
【００６１】
コンピュータシステム５００は、Ｉ／Ｏサブシステム５０２を介して少なくとも１つの出力デバイス５１２に連結されてもよい。一実施形態では、出力デバイス５１２は、デジタルコンピュータディスプレイである。様々な実施形態で使用し得るディスプレイの例には、タッチスクリーンディスプレイまたは発光ダイオード（ＬＥＤ）ディスプレイまたは液晶ディスプレイ（ＬＣＤ）または電子ペーパディスプレイが含まれる。コンピュータシステム５００は、ディスプレイデバイスと代替的にまたはディスプレイデバイスに加えて、他のタイプ（複数可）の出力デバイス５１２を含んでもよい。他の出力デバイス５１２の例には、プリンタ、チケットプリンタ、プロッタ、プロジェクタ、サウンドカードまたはビデオカード、スピーカー、ブザーまたは圧電デバイスまたは他の可聴デバイス、ランプまたはＬＥＤまたはＬＣＤインジケータ、触覚デバイス、アクチュエータまたはサーボが含まれる。
【００６２】
信号、データ、コマンド選択、またはジェスチャをプロセッサ５０４に通信するために、少なくとも１つの入力デバイス５１４がＩ／Ｏサブシステム５０２に連結されている。入力デバイス５１４の例には、タッチスクリーン、マイクロフォン、静止カメラおよびビデオデジタルカメラ、英数字および他のキー、キーパッド、キーボード、グラフィックタブレット、画像スキャナ、ジョイスティック、時計、スイッチ、ボタン、ダイヤル、スライド、ならびに／または力センサ、モーションセンサ、熱センサ、加速度計、ジャイロスコープ、および慣性測定ユニット（ＩＭＵ）センサなどの様々なタイプのセンサ、ならびに／またはセルラもしくはＷｉ−Ｆｉ、無線周波数（ＲＦ）もしくは赤外線（ＩＲ）のトランシーバなどの無線、およびグローバルポジショニングシステム（ＧＰＳ）トランシーバなどのさまざまなタイプのトランシーバ、が含まれる。
【００６３】
別のタイプの入力デバイスは、制御デバイス５１６であり、これは、入力機能と代替的に、または入力機能に加えて、ディスプレイスクリーン上のグラフィカルインターフェースにおけるナビゲーションなどのカーソル制御または他の自動制御機能を実行してもよい。制御デバイス５１６は、方向情報およびコマンド選択をプロセッサ５０４に通信するための、およびディスプレイ５１２上のカーソルの動きを制御するための、タッチパッド、マウス、トラックボール、またはカーソル方向キーであってもよい。入力デバイスは、デバイスが平面内の位置を指定できるようにする、第１の軸（例えば、ｘ）および第２の軸（例えば、ｙ）の２つの軸において少なくとも２つの自由度を有し得る。別のタイプの入力デバイスは、ジョイスティック、ワンド、コンソール、ステアリングホイール、ペダル、ギアシフトメカニズム、または他のタイプの制御デバイスなどの有線、無線、または光学式の制御デバイスである。入力デバイス５１４は、ビデオカメラおよび深度センサなどの複数の異なる入力デバイスの組み合わせを含んでもよい。
【００６４】
別の実施形態では、コンピュータシステム５００は、出力デバイス５１２、入力デバイス５１４、および制御デバイス５１６のうちの１つ以上が省略されたインターネットオブシングズ（ＩｏＴ）デバイスを備えてもよい。または、そのような実施形態では、入力デバイス５１４は、１つ以上のカメラ、モーション検出器、温度計、マイクロフォン、地震検出器、他のセンサまたは検出器、測定デバイスまたはエンコーダを備えてもよく、出力デバイス５１２は、単線ＬＥＤまたはＬＣＤディスプレイ、１つ以上のインジケータ、ディスプレイパネル、メータ、バルブ、ソレノイド、アクチュエータ、またはサーボなどの、専用ディスプレイを備えてもよい。
【００６５】
コンピュータシステム５００がモバイルコンピューティングデバイスである場合、入力デバイス５１４は、複数のＧＰＳ衛星に三角測量することができ、コンピュータシステム５００の地球物理学的位置の緯度経度値などの地理的場所または位置データを決定および生成することができるＧＰＳモジュールに連結された全地球測位システム（ＧＰＳ）受信機を備え得る。出力デバイス５１２は、ホスト５２４またはサーバ５３０に向けられた、単独でまたは他のアプリケーション固有のデータと組み合わせて、コンピュータシステム５００の位置を特定する位置報告パケット、通知、パルスもしくは心拍信号、または他の反復データ送信を生成するためのハードウェア、ソフトウェア、ファームウェア、およびインターフェースを含んでもよい。
【００６６】
コンピュータシステム５００は、カスタマイズされたハードワイヤードロジック、少なくとも１つのＡＳＩＣまたはＦＰＧＡ、ファームウェアおよび／またはプログラム命令もしくはロジックを使用して本明細書に記載の技術を実装し得、これらは、コンピュータシステムと組み合わせてロードされ、使用されるか、または実行されると、コンピュータシステムに専用機として演算させるかまたはコンピュータシステムを専用機として演算するようにプログラムする。一実施形態によれば、本明細書の技術は、プロセッサ５０４がメインメモリ５０６に含まれる少なくとも１つの命令の少なくとも１つのシーケンスを実行するのに応答して、コンピュータシステム５００によって実行される。そのような命令は、ストレージ５１０などの別のストレージ媒体からメインメモリ５０６に読み込み得る。メインメモリ５０６に含まれる命令のシーケンスの実行により、プロセッサ５０４は、本明細書に記載のプロセスステップを実行する。代替的な実施形態では、配線回路を、ソフトウェア命令の代わりに、またはソフトウェア命令と組み合わせて使用し得る。
【００６７】
本明細書で使用される「ストレージ媒体」という用語は、機械を特定の方法で動作させるデータおよび／または命令を記憶する任意の非一時的媒体を指す。そのようなストレージ媒体は、不揮発性媒体および／または揮発性媒体を備え得る。不揮発性媒体には、例えば、ストレージ５１０などの光学ディスクまたは磁気ディスクが含まれる。揮発性媒体は、メモリ５０６などのダイナミックメモリを含む。ストレージ媒体の一般的な形態には、例えば、ハードディスク、ソリッドステートドライブ、フラッシュドライブ、磁気データストレージ媒体、任意の光データストレージ媒体、または物理データストレージ媒体、メモリチップなどが含まれる。
【００６８】
ストレージ媒体は、伝送媒体とは異なるが、伝送媒体と組み合わせて使用し得る。伝送媒体は、ストレージ媒体間の情報転送に関与する。例えば、伝送媒体は、同軸ケーブル、銅線、およびＩ／Ｏサブシステム５０２のバスを構成するワイヤを含む光ファイバを含む。伝送媒体は、電波および赤外線データ通信中に生成されるものなど、音響波または光波の形態をとることがある。
【００６９】
様々な形態の媒体が、実行のために少なくとも１つの命令の少なくとも１つのシーケンスをプロセッサ５０４に運ぶことに関与し得る。例えば、命令は、最初はリモートコンピュータの磁気ディスクまたはソリッドステートドライブで運ばれてもよい。リモートコンピュータは、そのダイナミックメモリに命令をロードし、モデムを使用して光ファイバまたは同軸ケーブルまたは電話回線などの通信リンクを介して命令を送信することができる。コンピュータシステム５００にローカルなモデムまたはルータは、通信リンク上でデータを受信し、データをコンピュータシステム５００によって読み取り可能なフォーマットに変換することができる。例えば、無線周波数アンテナまたは赤外線検出器などの受信機は、無線または光信号で運ばれるデータを受信することができ、適切な回路は、データをバス上に配置するなど、Ｉ／Ｏサブシステム５０２にデータを提供することができる。Ｉ／Ｏサブシステム５０２は、データをメモリ５０６に運び、そこからプロセッサ５０４が命令を検索し、実行する。メモリ５０６によって受信された命令は、任意選択で、プロセッサ５０４による実行の前または後のいずれかで、ストレージ５１０に記憶されてもよい。
【００７０】
コンピュータシステム５００は、バス５０２に連結された通信インターフェース５１８も含む。通信インターフェース５１８は、ネットワーク５２２またはインターネット上のパブリッククラウドまたはプライベートクラウドなどの少なくとも１つの通信ネットワークに直接または間接的に接続されているネットワークリンク（複数可）５２０に連結する双方向データ通信を提供する。例えば、通信インターフェース５１８は、イーサネットネットワーキングインターフェース、統合サービスデジタルネットワーク（ＩＳＤＮ）カード、ケーブルモデム、衛星モデム、または対応するタイプの通信回線、例えば、イーサネットケーブルまたは任意の種類の金属ケーブル、または光ファイバ回線または電話回線にデータ通信接続を提供するためのモデムであってもよい。ネットワーク５２２は、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、キャンパスネットワーク、インターネットワーク、またはそれらの任意の組み合わせを広く表す。通信インターフェース５１８は、互換性のあるＬＡＮへのデータ通信接続を提供するためのＬＡＮカード、または、セルラ無線電話無線ネットワーキング規格に従ってセルラデータを送信または受信するために有線で接続されるセルラ無線電話インターフェース、または、衛星無線ネットワーキング規格に従ってデジタルデータを送信または受信するために有線で接続される衛星無線インターフェースを備えてもよい。任意のそのような実装形態では、通信インターフェース５１８は、様々なタイプの情報を表すデジタルデータストリームを運ぶ信号経路を介して電気信号、電磁信号、または光信号を送受信する。
【００７１】
ネットワークリンク５２０は、典型的には、例えば、衛星、セルラ、Ｗｉ-Ｆｉ、またはＢＬＵＥＴＯＯＴＨ（登録商標）技術を使用して、電気的データ通信、電磁的データ通信、または光データ通信を、直接または少なくとも１つのネットワークを介して、他のデータデバイスに提供する。例えば、ネットワークリンク５２０は、ネットワーク５２２を介してホストコンピュータ５２４への接続を提供し得る。
【００７２】
さらに、ネットワークリンク５２０は、ネットワーク５２２を介して、またはインターネットサービスプロバイダ（ＩＳＰ）５２６によって操作されるインターネットワーキングデバイスおよび／またはコンピュータを介して他のコンピューティングデバイスへの接続を提供し得る。ＩＳＰ５２６は、インターネット５２８として表される世界規模のパケットデータ通信ネットワークを介してデータ通信サービスを提供する。サーバコンピュータ５３０は、インターネット５２８に連結してもよい。サーバ５３０は、ハイパーバイザの有無にかかわらず、任意のコンピュータ、データセンタ、仮想マシンまたは仮想コンピューティングインスタンス、またはＤＯＣＫＥＲもしくはＫＵＢＥＲＮＥＴＥＳなどのコンテナ化されたプログラムシステムを実行するコンピュータを広く表す。サーバ５３０は、複数のコンピュータまたはインスタンスを使用して実装され、ウェブサービス要求、ＨＴＴＰペイロード内のパラメータを有するユニフォームリソースロケータ（ＵＲＬ）文字列、ＡＰＩコール、アプリサービスコール、または他のサービスコールを送信することによってアクセスされ、使用される電子デジタルサービスを表す場合がある。コンピュータシステム５００およびサーバ５３０は、タスクを実行するか、またはアプリケーションもしくはサービスを実行するために協力する他のコンピュータ、処理クラスタ、サーバファーム、または他のコンピュータの編成を含む分散コンピューティングシステムの要素を形成してもよい。サーバ５３０は、モジュール、メソッド、オブジェクト、関数、ルーチン、または呼び出しとして編成された１つ以上の命令のセットを含み得る。命令は、１つ以上のコンピュータプログラム、演算システムサービス、またはモバイルアプリを含むアプリケーションプログラムとして編成されてもよい。命令は、オペレーティングシステムおよび／またはシステムソフトウェア、マルチメディア、プログラミングまたは他の機能をサポートする１つ以上のライブラリ、ＴＣＰ／ＩＰ、ＨＴＴＰまたはその他の通信プロトコルを実装するためのデータプロトコル命令またはスタック、ＨＴＭＬ、ＸＭＬ、ＪＰＥＧ、ＭＰＥＧまたはＰＮＧを使用してコード化されたファイルを解析またはレンダリングするためのファイルフォーマット処理命令、グラフィカルユーザインターフェース（ＧＵＩ）、コマンドラインインターフェースまたはテキストユーザインターフェースのためのコマンドをレンダリングまたは解釈するためのユーザインターフェース命令、オフィススイート、インターネットアクセスアプリケーション、設計および製造アプリケーション、グラフィックスアプリケーション、オーディオアプリケーション、ソフトウェアエンジニアリングアプリケーション、教育アプリケーション、ゲームまたは雑多なアプリケーションなどのアプリケーションソフトウェア、を含み得る。サーバ５３０は、プレゼンテーション層、アプリケーション層、および構造化照会言語（ＳＱＬ）を使用するかもしくはＳＱＬを使用しないリレーショナルデータベースシステムなどのデータストレージ層、オブジェクトストア、グラフデータベース、フラットファイルシステム、または他のデータストレージ、をホストするウェブアプリケーションサーバを備えてもよい。
【００７３】
コンピュータシステム５００は、ネットワーク、ネットワークリンク５２０、および通信インターフェース５１８を介して、メッセージを送信し、プログラムコードを含むデータおよび命令を受信することができる。インターネットの例では、サーバ５３０は、インターネット５２８、ＩＳＰ５２６、ローカルネットワーク５２２、および通信インターフェース５１８を介して、アプリケーションプログラムのための要求されたコードを送信してもよい。受信したコードは、受信時にプロセッサ５０４によって実行され、および／または後で実行するためにストレージ５１０、または他の不揮発性ストレージに記憶されてもよい。
【００７４】
本項で説明されている命令の実行は、実行中であり、プログラムコードとその現在のアクティビティからなる、コンピュータプログラムのインスタンスの形態でプロセスを実装する場合がある。オペレーティングシステム（ＯＳ）によっては、プロセスは、命令を同時に実行する複数の実行スレッドから構成されている場合がある。この文脈では、コンピュータプログラムは命令の受動的な集合であるが、プロセスはそれらの命令の実際の実行である場合がある。いくつかのプロセスが同じプログラムに関連付けられている場合があり、例えば、同じプログラムのいくつかのインスタンスを開くことは、複数のプロセスが実行中であることを意味することが多い。マルチタスクは、複数のプロセスがプロセッサ５０４を共有することを可能にするために、実装されてもよい。各プロセッサ５０４またはプロセッサのコアが一度に単一のタスクを実行する一方で、コンピュータシステム５００は、各プロセッサが、各タスクが終了するのを待つ必要なく、実行中のタスクを切り替えることができるように、マルチタスクを実装するようにプログラムされてもよい。ある実施形態では、スイッチは、タスクが入出力操作を実行するとき、タスクが切り替え可能であることを示すとき、またはハードウェア割り込みのときに実行されてもよい。タイムシェアリングは、コンテキストスイッチを迅速に実行して、複数のプロセスを同時に並列実行しているように見せることにより、インタラクティブなユーザアプリケーションの高速応答を可能にするように、実装し得る。ある実施形態では、セキュリティおよび信頼性のために、オペレーティングシステムは、独立したプロセス間の直接通信を防止し、厳密に仲介され制御されたプロセス間通信機能を提供し得る。
【００７５】
前述の明細書では、本発明の実施形態は、実装毎に異なり得る多くの特定の詳細を参照して説明されてきた。したがって、明細書および図面は、制限的な意味ではなく例示的な意味で考慮されるべきである。発明の範囲の唯一かつ排他的な指標、および出願人が発明の範囲となることを意図しているものは、任意のその後の訂正を含む、そのような特許請求項が発行される特定の形式で、本出願から発行される特許請求項のセットの文字通りの等価の範囲である。
【図１】
2021536650.tif 000003
【図２】
2021536650.tif 000004
【図３Ａ】
2021536650.tif 000005
【図３Ｂ】
2021536650.tif 000006
【図３Ｃ】
2021536650.tif 000007
【図３Ｄ】
2021536650.tif 000008
【図４】
2021536650.tif 000009
【図５】
2021536650.tif 000010
【国際調査報告】
2021536650.tif 000011