(57)【要約】  以下の説明は、論理リポジトリサービスを対象とする。１つの例において、論理リポジトリサービスの方法は、構成可能なハードウェアのアプリケーション論理の仕様を使用して、構成可能なハードウェアの構成データを生成する第１の要求を受信することを含むことができる。本方法は、構成可能なハードウェアの構成データを生成することを含むことができる。構成データは、アプリケーション論理を実装するためのデータを含むことができる。本方法は、構成可能なハードウェアを備えるホストサーバコンピュータに構成データをダウンロードする第２の要求を受信することを含むことができる。本方法は、構成可能なハードウェアがホスト論理およびアプリケーション論理によって構成されるように、第２の要求に応じて、構成データをホストサーバコンピュータに伝送することを含むことができる。
2019537099.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
構成可能なハードウェアのアプリケーション論理の仕様を使用して、前記構成可能なハードウェアの構成データを生成する第１の要求を受信することと、
前記構成可能なハードウェアの前記構成データを生成することであって、前記構成データが、前記アプリケーション論理を実装するためのデータを含む、ことと、
前記構成可能なハードウェアのインスタンスを備えるホストサーバコンピュータに前記構成データを伝送する第２の要求を受信することと、
前記第２の要求に応じて、前記構成データを前記ホストサーバコンピュータに伝送することと、を含む、方法。
【請求項２】
命令を含むコンピュータ可読記憶媒体であって、該命令が実行されると、コンピュータシステムに、
構成可能なハードウェアのアプリケーション論理の仕様を使用して、前記構成可能なハードウェアの構成データを生成する第１の要求を受信させることと、
前記構成可能なハードウェアの前記構成データを生成させることであって、前記構成データが、前記アプリケーション論理を実装するためのデータを含む、ことと、
前記構成可能なハードウェアのインスタンスを備えるホストサーバコンピュータに前記構成データを伝送する第２の要求を受信させることと、
前記第２の要求に応じて、前記構成データを前記ホストサーバコンピュータに伝送させることと、を行わせる、コンピュータ可読記憶媒体。
【請求項３】
前記アプリケーション論理の前記仕様が、ソースコードを含み、前記構成可能なハードウェアの前記構成データを生成することが、前記ソースコードを合成して、前記アプリケーション論理のネットリストを生成することを含む、請求項２に記載のコンピュータ可読記憶媒体。
【請求項４】
前記アプリケーション論理の前記仕様が、ネットリストを含み、前記構成可能なハードウェアの前記構成データを生成することが、前記アプリケーション論理の前記ネットリストをルーティングすることを含む、請求項２または３に記載のコンピュータ可読記憶媒体。
【請求項５】
前記構成可能なハードウェアの前記構成データを生成することが、前記アプリケーション論理を前記構成可能なハードウェアのホスト論理と統合することを含み、前記ホスト論理が、前記アプリケーション論理の動作を抑制するように構成される、請求項２〜５のいずれかに記載のコンピュータ可読記憶媒体。
【請求項６】
前記構成可能なハードウェアの前記構成データを生成することが、前記アプリケーション論理が、ホスト論理要件と互換性があることを検証することを含む、請求項５に記載のコンピュータ可読記憶媒体。
【請求項７】
前記構成可能なハードウェアの前記構成データを生成することが、ハードウェア参照識別子を前記構成データに割り当てることを含み、前記第２の要求が、前記ハードウェア参照識別子を含む、請求項２〜６のいずれかに記載のコンピュータ可読記憶媒体。
【請求項８】
前記第２の要求が、ダウンロードする前記構成データを識別するためのハードウェア参照識別子を含む、請求項７に記載のコンピュータ可読記憶媒体。
【請求項９】
前記命令が、実行されると、前記コンピュータシステムに、
前記ハードウェア参照識別子を仮想マシンイメージ識別子に関連付けることをさらに行わせ、前記第２の要求が、ダウンロードする前記構成データを識別するための前記仮想マシンイメージ識別子を含む、請求項７または８に記載のコンピュータ可読記憶媒体。
【請求項１０】
前記第１の要求が、前記構成可能なハードウェアの前記アプリケーション論理の前記仕様の暗号化されたバージョンの参照を含む、請求項２〜９のいずれかに記載のコンピュータ可読記憶媒体。
【請求項１１】
前記構成可能なハードウェアが、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を備え、前記構成データが、前記ＦＰＧＡを構成するためのビットストリームを含む、請求項２〜１０のいずれかに記載のコンピュータ可読記憶媒体。
【請求項１２】
前記命令が、実行されると、前記コンピュータシステムに、
前記構成可能なハードウェアの前記構成データと関連付けられたタイミングレポートを生成させることと、
前記タイミングレポートを、前記第１の要求によって指定される場所に記憶することと、をさらに行わせる、請求項２〜１１のいずれかに記載のコンピュータ可読記憶媒体。
【請求項１３】
コンピューティングシステムであって、
データベースと、
前記データベースに結合された第１のサーバコンピュータで稼働する論理リポジトリサービスであって、前記論理リポジトリサービスが、
アプリケーション論理の第１の仕様および前記構成可能なハードウェアのホスト論理の第２の仕様を摂取して、前記構成可能なハードウェアの前記構成データを生成することと、
前記構成データを前記データベースに記憶することと、
第２のサーバコンピュータから前記構成データの要求を受信することと、
前記第２のサーバコンピュータに前記構成データを伝送することと、を行うように構成される、論理リポジトリサービスと、を備える、コンピューティングシステム。
【請求項１４】
前記第１の仕様および前記第２の仕様を摂取することが、前記アプリケーション論理を合成およびルーティングすることを含む、請求項１３に記載のコンピューティングシステム。
【請求項１５】
前記データベースが、構成可能なハードウェアイメージ識別子、仮想マシンイメージ識別子、または製品コード、のうちの１つ以上によってインデックスが付けられた構成可能なハードウェアのライブラリを備える、請求項１３または１４に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（対応する記載なし）
【背景技術】
【０００２】
クラウドコンピューティングとは、遠隔地で利用可能であり、また、インターネットなどのネットワークを通してアクセス可能であるコンピューティングリソース（ハードウェアおよびソフトウェア）を使用することである。いくつかの配設において、ユーザは、オンデマンドで、ユーティリティとして、これらのコンピューティングリソース（記憶装置およびコンピューティングパワーを含む）を購入することが可能である。クラウドコンピューティングは、リモートサービスにユーザのデータ、ソフトウェア、および計算を委託する。仮想コンピューティングリソースの使用は、コスト面での有利さ、および／またはコンピューティングリソースのニーズの変化に迅速に適応する能力を含む、いくつかの利点を提供することができる。
【０００３】
大型コンピュータシステムのユーザは、異なる使用事例から生じる多様なコンピューティング要件を有し得る。計算サービスプロバイダは、様々なレベルの性能および／または機能を伴う異なるタイプの構成要素を有する、種々の異なるコンピュータシステムを含み得る。したがって、ユーザは、潜在的に特定のタスクを実行する際により効率的であり得る、コンピュータシステムを選択することができる。例えば、計算サービスプロバイダは、処理性能、メモリ性能、記憶容量または性能、およびネットワーキング容量または性能の様々な組み合わせを伴うシステムを提供することができる。しかしながら、一部のユーザは、自分のコンピューティングタスクを実行するための専用の、または高度に専門化されたハードウェアを使用することを所望する場合がある。したがって、計算サービスプロバイダは、異なるユーザの間でリソースを効率的に割り当てることができるように汎用リソースの健全な組み合わせを保ちながら、これらのユーザのための専門のコンピューティングハードウェアを提供するように要求され得る。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
（対応する記載なし）
【課題を解決するための手段】
【０００５】
（対応する記載なし）
【図面の簡単な説明】
【０００６】
【図１】構成データを管理するための論理リポジトリサービスを含むシステムの一実施例を示すシステム図である。
【図２】論理リポジトリサービスの例示的なアーキテクチャを示すシステム図である。
【図３】論理リポジトリサービスによって行うことができる、構成データの摂取および生成の一実施例を例示する図である。
【図４】論理リポジトリサービスを含むマルチテナント環境において動作する複数の仮想マシンインスタンスを示す例示的なシステム図である。
【図５】構成可能なハードウェアプラットフォームを構成し、そこにインターフェースするための制御プレーンおよびデータプレーンの構成要素を含む、図４の例示的なシステムのさらなる詳細を示す図である。
【図６】マルチテナント環境において構成可能なハードウェアを構成するための構成データを管理する例示的な方法のフロー図である。
【図７】マルチテナント環境において構成可能なハードウェアを構成するための構成データを管理する例示的な方法のフロー図である。
【図８】説明される技術革新を実装することができる適切なコンピューティング環境の一般化された実施例を表す図である。
【発明を実施するための形態】
【０００７】
専門コンピューティングリソースを一組の再使用可能な一般的コンピューティングリソース内に提供するための１つの解決策は、（フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を含むアドインカードをサーバコンピュータに提供することなどによって）一般的コンピューティングリソースの中の選択として構成可能な論理プラットフォームを備えるサーバコンピュータを提供することである。構成可能な論理は、構成可能な論理に適用される構成データによって指定される論理機能を行うようにプログラムまたは構成することができるハードウェアである。例えば、コンピューティングリソースのユーザは、構成可能な論理を構成するための仕様（ハードウェア記述言語または他の言語で書かれたソースコードなど）を提供することができ、構成可能な論理は、仕様に従って構成することができ、構成された論理は、ユーザのタスクを行うために使用することができる。しかしながら、コンピューティング設備の低レベルハードウェアへのユーザアクセスを可能にすることは、潜在的に、コンピューティング設備内のセキュリティおよびプライバシーの問題につながり得る。特定の一例として、あるユーザによる不良の、または悪意のある設計は、構成された論理がコンピューティング設備内の１つ以上のサーバコンピュータを故障（例えば、クラッシュ、ハング、もしくは再起動）させた場合、またはネットワークサービスが拒否された場合に、潜在的に、他のユーザに対するサービスの拒否を生じさせることがあり得る。別の具体的な例として、あるユーザによる不良の、または悪意のある設計は、構成された論理が、他のユーザのメモリ空間のメモリを読み出すおよび／またはそれに書き込むことができる場合に、潜在的に、別のユーザによるデータの破損または読み出しを生じさせ得る。別の具体的な例として、ユーザによる不良の、または悪意のある設計は、構成された論理がデバイスに構成可能な論理プラットフォームの電力消費または温度仕様を超えさせる（リング発振器などの）回路を含む場合、潜在的に、構成可能な論理プラットフォームを故障させ得る。
【０００８】
本明細書で説明されるように、計算サービスの設備は、様々なコンピューティングリソースを含むことができ、あるタイプのコンピューティングリソースは、構成可能な論理プラットフォームを備えるサーバコンピュータを含むことができる。構成可能な論理プラットフォームは、コンピューティングリソースのハードウェア（例えば、構成可能な論理）がユーザによってカスタマイズされるように、コンピュータシステムのユーザによってプログラムまたは構成することができる。例えば、ユーザは、サーバコンピュータに密結合されたハードウェアアクセラレータとして機能するように、構成可能な論理をプログラムすることができる。例えば、ハードウェアアクセラレータは、サーバコンピュータの、周辺機器相互接続エクスプレス（ＰＣＩ−Ｅｘｐｒｅｓｓ、またはＰＣＩｅ）などのローカル相互接続を介してアクセス可能であり得る。ユーザは、サーバコンピュータ上のアプリケーションを実行することができ、アプリケーションのタスクは、ＰＣＩｅトランザクションを使用してハードウェアアクセラレータによって行うことができる。ハードウェアアクセラレータをサーバコンピュータに密結合することによって、アクセラレータとサーバコンピュータとの間の待ち時間を低減させることができ、これは、潜在的に、アプリケーションの処理速度を高めることができる。
【０００９】
計算サービスプロバイダは、構成可能なハードウェアの構成および動作を管理するために、ソフトウェアサービスを使用してコンピューティングリソースを管理することができる。１つの例として、計算サービスプロバイダは、ユーザのハードウェアまたは論理設計を摂取し、ユーザの論理設計に基づいて構成可能な論理プラットフォームを構成するための有効な構成データを生成し、そして要求に応じて有効な構成データをダウンロードして構成可能な論理プラットフォームのインスタンスを構成するための、論理リポジトリサービスを実行することができる。ダウンロード要求は、論理設計を開発したユーザからのもの、または論理設計を使用するライセンスを獲得したユーザからのものであり得る。したがって、論理設計は、ユーザまたは計算サービスプロバイダとは別の、計算サービスプロバイダ、ユーザ、または第三者によって作成することができる。例えば、アクセラレータの知的財産（ＩＰ）のマーケットプレイスは、計算サービスプロバイダのユーザに提供することができ、ユーザは、マーケットプレイスからアクセラレータを選択することによって、潜在的に、それらのアプリケーションの速度を高めることができる。
【００１０】
計算サービスプロバイダは、論理設計が計算サービスプロバイダの要件に従うことを検証するために論理リポジトリサービスを使用することによって、コンピューティングリソースのセキュリティおよび／または可用性を潜在的に高めることができる。例えば、論理リポジトリサービスは、ユーザが作成した論理設計（顧客論理またはアプリケーション論理）が計算サービスプロバイダによって提供されるホスト論理と互換性があることをチェックすることができる。構成可能な論理プラットフォームを構成するときに、ホスト論理およびアプリケーション論理の両方を、構成可能な論理プラットフォームにロードすることができる。ホスト論理は、アプリケーション論理がその中で機能する、フレームワークまたはサンドボックスを提供することができる。特に、ホスト論理は、コンピューティングリソースのセキュリティおよび／または可用性を潜在的に高めるために、アプリケーション論理と通信すること、およびアプリケーション論理の機能を抑制することができる。例えば、ホスト論理は、アプリケーション論理がローカル相互接続上のシグナリングを直接制御することができないように、ローカル相互接続（例えば、ＰＣＩｅ相互接続）とアプリケーション論理との間でブリッジ機能を行うことができる。ホスト論理は、ローカル相互接続上のパケットまたはバストランザクションを形成し、プロトコル要件を満たすことを確実にする役割を果たすことができる。ローカル相互接続上のトランザクションを制御することによって、ホスト論理は、潜在的に、不正な形式のトランザクションまたは境界外の場所に対するトランザクションを防止することができる。
【００１１】
図１は、構成可能なリソースを計算リソース１２０内に構成するために使用することができる構成データを管理するための論理リポジトリサービス１１０を含む、システム１００の一実施例を示すシステム図である。特に、論理リポジトリサービス１１０は、ホストおよびアプリケーション論理を計算サービスプロバイダのインフラストラクチャに摂取し（取り込み）、摂取した設計に基づいて構成データを生成し、摂取した設計および生成した構成データのリポジトリを維持し、そしてリソースが展開されるときに構成データを構成可能な計算リソースに提供するために使用することができる。
【００１２】
論理リポジトリサービス１１０は、ウェブサービスなどのネットワークアクセス可能サービスとすることができる。ウェブサービスは、一般的に、クラウドコンピューティングにおいて使用される。ウェブサービスは、ウェブまたはクラウドを通じて、ネットワークアドレスで提供されるソフトウェア機能である。クライアントは、サーバに対するウェブサービス要求を開始し、サーバは、要求を処理して、適切な応答を返す。クライアントウェブサービス要求は、典型的に、例えばＡＰＩ要求を使用して開始される。簡潔さの目的で、ウェブサービス要求は、下では一般にＡＰＩ要求として記述されるが、他のウェブサービス要求を作製することができることを理解されたい。ＡＰＩ要求は、典型的にＪＳＯＮまたはＸＭＬで表される、定義された要求応答メッセージシステムに対するプログラマチックインターフェースであり、これは、ウェブを介して、最も一般的にはＨＴＴＰベースのウェブサーバを介して公表される。したがって、特定の実装形態において、ＡＰＩは、拡張マークアップ言語（ＸＭＬ）またはＪａｖａＳｃｒｉｐｔオブジェクト表記法（ＪＳＯＮ）フォーマットとすることができるＡＰＩを呼び出すために使用されるメッセージおよび応答メッセージの構造の定義と共に、一組のハイパーテキストトランスファープロトコル（ＨＴＴＰ）要求インターフェースとして定義することができる。ＡＰＩは、固有のタスクを達成すること、またはソフトウェア構成要素との相互作用を可能にすることを含むアクションを行う、一組の機能またはルーチンを特定することができる。ウェブサービスがＡＰＩ要求をクライアントデバイスから受信すると、ウェブサービスは、要求に対する応答を生成し、要求内に識別されるエンドポイントに対する応答を送信することができる。追加的または代替的に、ウェブサービスは、要求内に識別されるエンドポイントに対する応答を生成することなく、ＡＰＩ要求に応じてアクションを行うことができる。
【００１３】
論理リポジトリサービス１１０は、ＡＰＩ要求１３０を受信して、サーバコンピュータ１４０の構成可能なハードウェア１４２などの構成可能なハードウェアプラットフォームのための構成データを生成することができる。例えば、ＡＰＩ要求１３０は、開発者、または計算サービスプロバイダのパートナーユーザによって考案され得る。要求１３０は、論理設計、構成可能なハードウェアプラットフォーム、ユーザ情報、アクセス特権、生産状況に関するデータおよび／またはメタデータを指定するためのフィールド、ならびに入力、出力、および論理リポジトリサービス１１０のユーザに関する情報を説明するための種々の追加的なフィールドを含むことができる。具体的な例として、要求は、設計の説明、生産状態（トライアルまたは生産など）、サービスの入力または出力の暗号化された状態、入力ファイル（ハードウェア設計ソースコードなど）を記憶するための場所の参照、入力ファイルのタイプ、構成可能なハードウェアのインスタンスタイプ、および出力ファイルまたはレポートを記憶するための場所の参照を含むことができる。特に、要求は、構成可能なハードウェアプラットフォーム上に実装するためのアプリケーション論理１３２（アプリケーション論理回路、アプリケーションロジック）を指定するハードウェア設計の参照を含むことができる。具体的には、アプリケーション論理１３２のおよび／またはホスト論理１３４の仕様（構成、構造）は、ソースコード、論理合成ツールによって生成されるネットリスト、ならびに／または配置およびルーティングツールによって生成される配置およびルーティングされた論理ゲートなどの、一群のファイルとすることができる。ソースコードは、ハードウェア記述言語（ＨＤＬ）、レジスタ転送論理（ＲＴＬ）言語、またはオープンコンピューティング言語（ＯｐｅｎＣＬ）もしくはＣなどの高レベル言語で記述されたコードを含むことができる。
【００１４】
計算リソース１２０は、インスタンスタイプによって分類された数多くの異なるタイプのハードウェアおよびソフトウェアを含むことができる。特に、インスタンスタイプは、リソースのハードウェアおよびソフトウェアの少なくとも一部分を指定する。例えば、ハードウェアリソースとしては、様々なパフォーマンスレベル（例えば、異なるクロックスピード、アーキテクチャ、キャッシュサイズなど）の中央処理ユニット（ＣＰＵ）を有するサーバ、コプロセッサ（グラフィックス処理ユニット（ＧＰＵ）および構成可能な論理など）を有する、および有しないサーバ、メモリおよび／またはローカル記憶の様々な容量およびパフォーマンスを有するサーバ、ならびに異なるネットワークパフォーマンスレベルを有するサーバを挙げることができる。例示的なソフトウェアリソースとしては、異なるオペレーティングシステム、アプリケーションプログラム、およびドライバを挙げることができる。１つの例示的なインスタンスタイプは、構成可能なハードウェア１４２と通信する中央処理ユニット（ＣＰＵ）１４４を含むサーバコンピュータ１４０を備えることができる。構成可能なハードウェア１４２は、例えば、ＦＰＧＡ、プログラマブル論理アレイ（ＰＬＡ）、プログラマブルアレイ論理（ＰＡＬ）、ジェネリックアレイ論理（ＧＡＬ）、またはコンプレックスプログラマブル論理デバイス（ＣＰＬＤ）などの、プログラマブル論理（プログラム可能な論理回路）を含むことができる。具体的な例として、「Ｆ１．スモール」インスタンスタイプは、ＦＰＧＡリソースの１つの容量単位を有する第１のタイプのサーバコンピュータを含むことができ、「Ｆ１．ミディアム」インスタンスタイプは、ＦＰＧＡリソースの２つの容量単位を有する第１のタイプのサーバコンピュータを含むことができ、「Ｆ１．ラージ」インスタンスタイプは、ＦＰＧＡリソースの８つの容量単位を有する第１のタイプのサーバコンピュータを含むことができ、「Ｆ２．ラージ」インスタンスタイプは、ＦＰＧＡリソースの８つの容量単位を有する第２のタイプのサーバコンピュータを含むことができる。
【００１５】
論理リポジトリサービス１１０は、ＡＰＩ要求１３０を受信することに応じて、構成データ１３６を生成することができる。生成された構成データ１３６は、アプリケーション論理１３２およびホスト論理１３４（ホスト論理回路）に基づくことができる。具体的には、生成された構成データ１３６は、構成可能なハードウェア１４２がアプリケーション論理１３２およびホスト論理１３４によって指定された機能を行うように、該構成可能なハードウェアをプログラムまたは構成するために使用することができる情報を含むことができる。１つの例として、計算サービスプロバイダは、ＣＰＵ１４４と構成可能なハードウェア１４２とをインターフェースするための論理を含むホスト論理１３４を生成することができる。具体的には、ホスト論理１３４は、全てのＣＰＵ−アプリケーション論理トランザクションがホスト論理１３４を通過するように、アプリケーション論理１３２がＣＰＵ１４４と直接通信することからマスキングまたはシールドするための論理を含むことができる。この様態で、ホスト論理１３４は、潜在的に、アプリケーション論理１３２によって導入することができるセキュリティおよび可用性リスクを低減させることができる。
【００１６】
構成データ１３６を生成することは、アプリケーション論理１３２のチェックおよび／もしくは試験を行うこと、アプリケーション論理１３２をホスト論理１３４ラッパーに統合すること、アプリケーション論理１３２を合成すること、ならびに／またはアプリケーション論理１３２を配置およびルーティングすることを含むことができる。アプリケーション論理１３２をチェックすることは、アプリケーション論理１３２が計算サービスプロバイダの１つ以上の基準に従うことを検証することを含むことができる。例えば、アプリケーション論理１３２は、ホスト論理１３４にインターフェースするためのインターフェース信号および／または論理機能が存在するかどうかを判定するために分析することができる。特に、分析は、一連の検証試験に対して、ソースコードを分析すること、および／またはアプリケーション論理１３２を稼働させることを含むことができる。検証試験は、アプリケーション論理が、ホスト論理と互換性があることを確認するために使用することができる。別の例として、アプリケーション論理１３２は、アプリケーション論理１３２が、指定されたインスタンスタイプの設計された領域内にあるかどうかを判定するために分析することができる。別の例として、アプリケーション論理１３２は、アプリケーション論理１３２が、リング発振器または他の潜在的に有害な回路などの、任意の禁止された論理機能を含むかどうかを判定するために分析することができる。別の例として、アプリケーション論理１３２は、アプリケーション論理１３２が、ホスト論理１３４との任意の命名競合を有するかどうか、またはホスト論理１３４とインターフェースしない任意の外部からの出力を有するかどうかを判定するために分析することができる。別の例として、アプリケーション論理１３２は、アプリケーション論理１３２が、構成可能なハードウェア１４２の制限された入力、出力、またはハードマクロへのインターフェースを試みるかどうかを判定するために分析することができる。アプリケーション論理１３２が論理リポジトリサービス１１０のチェックに合格した場合は、構成データ１３６を生成することができる。チェックまたは試験のいずれかが不合格であった場合は、構成データ１３６の生成を中止することができる。
【００１７】
構成データ１３６を生成することは、アプリケーション論理１３２およびホスト論理１３４のソースコードを、構成可能なハードウェア１４２をプログラムまたは構成するために使用することができるデータにコンパイルおよび／または変換することを含むことができる。例えば、論理リポジトリサービス１１０は、アプリケーション論理１３２をホスト論理１３４ラッパーに統合することができる。具体的には、アプリケーション論理１３２は、アプリケーション論理１３２およびホスト論理１３４を含むシステム設計にインスタンス化することができる。統合されたシステム設計は、論理合成プログラムを使用して、システム設計のためのネットリストを作成するように合成することができる。ネットリストは、システム設計のために指定されたインスタンスタイプのために、配置およびルーティングプログラムを使用して、配置およびルーティングすることができる。配置およびルーティングされた設計（構造、構成）は、構成可能なハードウェア１４２をプログラムするために使用することができる構成データ１３６に変換することができる。例えば、構成データ１３６は、配置およびルーティングプログラムから直接出力することができる。
【００１８】
１つの例として、生成された構成データ１３６は、ＦＰＧＡの構成可能な論理（論理回路）の全部または一部分を構成するための完全なまたは部分的なビットストリームを含むことができる。ＦＰＧＡは、構成可能な論理および非構成可能な論理を含むことができる。構成可能な論理は、組み合わせ論理および／またはルックアップテーブル（ＬＵＴ）、ならびに連続論理要素（フリップフロップおよび／またはラッチなど）を備えるプログラマブル論理ブロック、プログラマブルルーティングおよびクロッキングリソース、プログラマブル分散型およびブロックランダムアクセスメモリ（ＲＡＭ）、デジタル信号処理（ＤＳＰ）ビットスライス、ならびにプログラマブル入力／出力ピンを含むことができる。ビットストリームは、構成論理（例えば、構成アクセスポート）を使用して、構成可能な論理のオンチップメモリにロードすることができる。オンチップメモリ内にロードされた値を使用して、構成可能な論理がビットストリームによって指定される論理機能を行うように、構成可能な論理を制御することができる。加えて、構成可能な論理は、互いに独立して構成することができる異なる領域に分けることができる。１つの例として、フルビットストリームを使用して、構成可能な論理を領域全体にわたって構成することができ、部分ビットストリームを使用して、構成可能な論理領域の一部分だけを構成することができる。非構成可能な論理は、入力／出力ブロック（例えば、シリアライザおよびデシリアライザ（ＳＥＲＤＥＳ）ブロックおよびギガビットトランシーバ）などの、ＦＰＧＡ内で特定の機能を行うハードマクロと、アナログ−デジタル変換器と、メモリ制御ブロックと、試験アクセスポートと、構成データを構成可能な論理にロードするための構成論理と、を含むことができる。
【００１９】
論理リポジトリサービス１１０は、生成された構成データ１３６を論理リポジトリデータベース１５０に記憶することができる。論理リポジトリデータベース１５０は、磁気ディスク、ダイレクトアタッチトストレージ、ネットワークアタッチトストレージ（ＮＡＳ）、ストレージエリアネットワーク（ＳＡＮ）、独立した複数のディスクからなる冗長配列（ＲＡＩＤ）、磁気テープもしくはカセット、ＣＤ−ＲＯＭ、ＤＶＤ、または非一時的な方式で情報を記憶するために使用することができ、かつ論理リポジトリサービス１１０によってアクセスすることができる任意の他の媒体を含む、リムーバブルまたは非リムーバブル媒体に記憶することができる。加えて、論理リポジトリサービス１１０を使用して、（アプリケーション論理１３２およびホスト論理１３４の仕様などの）入力ファイル、ならびに論理設計および／または論理リポジトリサービス１１０のユーザに関するメタデータを記憶するために使用することができる。例えば、生成された構成データ１３６は、例えば、ユーザ識別子、１つまたは複数のインスタンスタイプ、マーケットプレイス識別子、マシンイメージ識別子、および構成可能なハードウェア識別子などの、１つ以上の特性によってインデックスを付けることができる。
【００２０】
論理リポジトリサービス１１０は、構成データをダウンロードするためのＡＰＩ要求１６０を受信することができる。例えば、要求１６０は、計算リソース１２０のユーザが計算リソース１２０内の新しいインスタンス（例えば、「Ｆ１．スモール」インスタンス）を開始する、または展開するときに生成することができる。別の例として、要求１６０は、オペレーティングインスタンスで実行するアプリケーションからの要求に応じて生成することができる。要求１６０は、ソースおよび／または宛先インスタンスの参照、ダウンロードする構成データ（例えば、インスタンスタイプ、マーケットプレイス識別子、マシンイメージ識別子、または構成可能なハードウェア識別子）の参照、ユーザ識別子、認可トークン、ならびに／またはダウンロードする構成データを識別するための、および／もしくは構成データへのアクセスを許可するための他の情報、を含むことができる。構成データを要求するユーザが、構成データにアクセスする許可を与えられた場合は、論理リポジトリデータベース１５０から構成データを取り出すことができ、有効な構成データ１６２（例えば、フルまたは部分ビットストリーム）を要求元インスタンス（例えば、サーバコンピュータ１４０）にダウンロードすることができる。有効な構成データ１６２は、宛先インスタンスの構成可能な論理を構成するために使用することができる。
【００２１】
論理リポジトリサービス１１０は、有効な構成データ１６２を要求元インスタンスにダウンロードすることができることを検証することができる。検証は、論理リポジトリサービス１１０によって複数の異なる位置で起こり得る。例えば、検証は、アプリケーション論理（アプリケーション論理回路）１３２がホスト論理（ホスト論理回路）１３４と互換性があることを検証することを含むことができる。特に、試験の回帰スイートは、シミュレータ上で実行して、アプリケーション論理１３２が設計（構成、構造）に加えられた後に、予想通りにホスト論理１３４を行うことを検証することができる。追加的または代替的に、アプリケーション論理１３２が、ホスト論理１３４の再構成可能な領域とは別の再構成可能な領域にだけ残留するように指定されることを検証することができる。別の例として、検証は、有効な構成データ１６２が、ダウンロードするインスタンスタイプと互換性があることを検証することを含むことができる。別の例として、検証は、要求元が、有効な構成データ１６２にアクセスする許可を与えられていることを検証することを含むことができる。検証チェックのいずれかが不合格であった場合、論理リポジトリサービス１１０は、有効な構成データ１６２をダウンロードする要求を拒絶することができる。したがって、論理リポジトリサービス１１０は、潜在的に、コンピューティングリソース１２０のセキュリティおよび可用性を保護することができ、一方で、ユーザがコンピューティングリソース１２０のハードウェアをカスタマイズすることを可能にする。
【００２２】
図２は、論理リポジトリサービス２０５の例示的な構造２００を示すシステム図である。論理リポジトリサービス２０５は、計算サービスプロバイダによって管理されるサーバコンピュータで実行するソフトウェアとすることができる。論理リポジトリサービス２０５は、１つ以上のウェブＡＰＩを通してアクセスすることができる。
【００２３】
論理リポジトリサービス２０５は、計算サービスプロバイダによってＡＰＩ要求をサービスするためのプロバイダインターフェース２１０を含むことができる。プロバイダインターフェース２１０を使用して、要求内に提供される証明書を使用して要求側の識別情報を認証することなどによって、要求が計算サービスプロバイダのエージェントからであることを認証することができる。プロバイダインターフェース２１０は、ホスト論理摂取機能２１５を提供することができる。特に、プロバイダインターフェース２１０は、ホスト論理設計を論理リポジトリサービス２０５にアップロードする要求を受信することができ、該要求は、ホスト論理摂取機能２１５によって処理することができる。上で説明されるように、ホスト論理は、アプリケーション論理をサンドボックス化して、コンピューティングリソースのセキュリティおよび可用性を維持するための論理を含むことができる。加えて、ホスト論理は、静的論理および再構成可能な論理にさらに分けることができる。静的論理は、初期化シーケンス中に（例えば、ブート時間に）構成することができ、一方で、再構成可能な論理は、構成可能な論理の動作中の異なる時間に構成することができる。１つの例として、ＰＣＩ−Ｅｘｐｒｅｓｓインターフェースは、リセット信号がデアサートされた後の約１００ミリ秒以内にＰＣＩエンドポイントがブートおよび列挙されるように指定することができる。ホスト論理は、割り当てられた時間ウインドウ以内にロードすることができる静的論理、および時間ウインドウが経過した後にロードすることができる再構成可能な論理に分けることができる。静的論理は、異なる再構成可能な領域間のインターフェースとして使用することができる。ホスト論理設計は、ＨＤＬ、またはＶｅｒｉｌｏｇもしくはＶＨＤＬなどのレジスタ転送論理（ＲＴＬ）ソースコードを使用して指定することができる。ＲＴＬは、暗号化すること、または非暗号化することができる。ホスト論理摂取モジュール２１５は、受信したホスト論理設計のチェック、ホスト論理設計の復号、および／またはホスト論理設計のためのバージョン情報の提供を行うために使用することができる。加えて、要求は、ホスト論理設計を１つ以上のインスタンスタイプと関連付けるための情報を含むことができる。例えば、いくつかのホスト論理設計は、インスタンスタイプのうちのあるサブセットだけによって機能することができ、他のホスト論理設計は、インスタンスタイプのうちの異なるサブセットだけによって機能することができる。
【００２４】
論理リポジトリサービス２０５は、論理リポジトリサービス２０５のユーザからＡＰＩ要求をサービスするための顧客−開発者インターフェース２２０を含むことができる。顧客−開発者インターフェース２２０を使用して、要求内に提供される証明書を使用して要求側の識別情報を認証することなどによって、要求が計算サービスプロバイダのユーザからであることを認証するために使用することができる。例えば、ユーザの各々には、アクセス管理、請求、および使用状況追跡のためにユーザを識別するために使用することができるアカウントを提供することができる。ユーザは、ユーザがアクセスすることを許可された論理設計だけを閲覧および修正するように限定することができる。例えば、ユーザが、ホスト論理をアップロードおよび／または修正することを防止することができる。
【００２５】
顧客−開発者インターフェース２２０は、アプリケーション論理設計を受信および／または処理するためのアプリケーション論理摂取機能２２５を含むことができる。アプリケーション論理設計は、ソースコード（例えば、ＨＤＬまたはＲＴＬコード）、構成可能な論理ブロックのリストおよび構成可能な論理ブロック間の接続のリストを含むネットリスト、ならびに／または構成データを使用して指定することができる。例えば、構成データは、論理リポジトリサービスにアップロードされる前に予めコンパイルされた、フルまたは部分ビットストリームを含むことができる。アプリケーション論理は、（構成データ生成ブロック２３０などによって）ホスト論理と組み合わせて、構成可能なハードウェアプラットフォームにロードすることができる論理を作成する。アプリケーション論理設計を処理することは、ソースコードを下位レベルのフォーマットに翻訳および／またはコンパイルすること（例えば、ＯｐｅｎＣＬをコンパイルして、行動または構造Ｖｅｒｉｌｏｇを生成すること）と、必要とされる論理および／または（ホスト論理へのインターフェース信号などの）信号が存在することを検証することと、既知の制限された回路（リング発振器など）が存在しないことを検証することと、構成データの生成の準備における他の種々のタスクと、を含むことができる。
【００２６】
顧客−開発者インターフェース２２０は、ユーザからの種々のタイプの要求を受け入れることができる。１つの例として、ユーザは、構成可能なハードウェアイメージ（ＣＨＩ）を作成するように要求することができる。ＣＨＩは、構成可能なハードウェアのインスタンスをコンピューティング環境内に構成するための情報を提供することができる。例えば、ＣＨＩは、１つ以上の互換性があるインスタンスタイプと、構成可能なハードウェアを構成するための構成データと、ＣＨＩへのアクセスを制御するためのアクセス許可と、構成可能なハードウェアを構成することと関連付けられた任意の他の情報と、を含むことができる。ＣＨＩを作成する要求は、設計記述またはタイトルのためのフィールドと、設計の生産状態と、設計が暗号化されるかどうかと、設計のためのソースコードの参照と、ソースコードインジケータのタイプと、構成データと互換性がある１つまたは複数のインスタンスタイプと、レポート情報を記憶する場所の参照と、を含むことができる。
【００２７】
別の例として、第２の要求タイプは、ユーザと関連付けられるＣＨＩに関する情報を検索するために使用することができる。特に、要求は、ＣＨＩ識別子、マシンイメージ（ＭＩ）識別子、製品コード、インスタンスタイプ、およびインスタンス識別子などのフィールドを含むことができる。要求に応じて、顧客−開発者インターフェース２２０は、要求内のフィールドの１つ以上にマッチするユーザと関連付けられるＣＨＩに関する情報を提示することができる。例えば、検索フィールドにマッチする全てのＣＨＩは、各ＣＨＩと関連付けられた状態と共に列記することができる。ＣＨＩは、トライアルもしくは生産状態であること、または完了もしくは進行状態であることを報告することができる。例えば、ソースコードからＣＨＩを作成するために数時間かかることがあり得るので、この要求は、ＣＨＩの合成または実装の状態をチェックするために使用することができる。
【００２８】
別の例として、第３の要求タイプは、ＣＨＩをＭＩに関連付けることであり得る。ＭＩは、コンピューティング環境内でコンピューティングリソースのインスタンスを起動するための情報を提供することができる。１つの実施形態において、インスタンスは、コンピューティング環境内のサーバコンピュータで実行するハイパーバイザ内で実行する仮想マシンである。ＭＩは、（アーキテクチャ、ＣＰＵの能力、コプロセッサ、周辺機器、および／または構成可能なハードウェア設計などを指定することによる）インスタンスのタイプと、（例えば、オペレーティングシステム、デバイスドライバ、および／またはアプリケーションを含む）インスタンスのためのルートボリュームのテンプレートと、ＭＩのアクセス可能性を制御するためのアクセス許可（例えば、ＭＩを使用することを許可されたアカウントのリスト）と、インスタンスが起動されるときに該インスタンスにアタッチするボリュームを指定するためのブロックデバイスマッピングと、を含むことができる。ＭＩをＣＨＩに関連付けることによって、ＭＩに基づく仮想マシンを起動するときに、ＣＨＩと関連付けられた構成可能なデータをサーバコンピュータの構成可能な論理にダウンロードすることができる。
【００２９】
別の例として、第４の要求タイプは、マーケットプレイスにＣＨＩを公開することであり得る。例えば、製品コードをＣＨＩと関連付けることができ、これは、ＣＨＩをマーケットプレイスに列記することを可能にすることができる。マーケットプレイスは、計算サービスプロバイダのユーザによって閲覧可能とすることができ、また、あるユーザによって開発されたものであり、また、別のユーザによってライセンスまたは購入するために利用可能であるハードウェアアクセラレータＩＰのリストを提供することができる。ユーザが、マーケットプレイスに公開されたＣＨＩを購入またはライセンスするときに、ユーザのアカウント情報を、ＣＨＩにアクセスすることができるユーザのリストに加えることができる。
【００３０】
構成データ生成ブロック２３０は、構成データを作成するために使用することができる。例えば、構成データは、アプリケーション論理設計およびホスト論理設計に基づくことができる。別の例として、構成データは、アプリケーション論理設計だけ、またはホスト論理設計だけに基づくことができる。特に、構成データ生成ブロック２３０は、ホスト論理設計だけに基づいて、静的論理を生成することができる。加えて、構成データ生成ブロック２３０は、構成可能な論理の１つ以上の再構成可能な領域のための再構成可能な論理（論理回路、ロジック）を生成することができる。例えば、構成データ生成ブロック２３０を使用して、ホスト機能に予約された領域のためのホストの再構成可能な論理を生成することができる。別の例として、構成データ生成ブロック２３０を使用して、主にアプリケーション機能に予約された領域のためのアプリケーションの再構成可能な論理を生成することができる。
【００３１】
構成データ生成ブロック２３０への入力は、（アプリケーション論理摂取２２５などからの）アプリケーション論理設計（アプリケーション論理構造）、（ホスト論理摂取２１５などからの）ホスト論理設計、および／または（クロック周波数、分割情報、配置情報、ターゲット技術などといった）種々の実装形態の詳細を記述する制約、であり得る。論理設計は、ＨＤＬ、ネットリスト、および／または構成データを使用して記述されたソースコードを含むことができる。構成データ生成ブロック２３０は、アプリケーションおよびホスト設計を１つの設計に組み合わせて、構成データを作成することができる。図３を参照してより詳細に説明されるように、構成データ生成ブロック２３０は、論理合成ツールと、配置およびルーティングツールと、を含むことができる。これらのツールを使用することで、構成データ生成ブロック２３０は、構成可能なハードウェアプラットフォームにロードするための構成データを作成することができる。
【００３２】
構成データ生成ブロック２３０からの出力は、論理ライブラリ管理ブロック２４０を使用して管理することができる。例えば、論理ライブラリ管理ブロック２４０は、ユーザ情報を構成データと関連付けること、および情報を論理リポジトリデータベース２５０に記憶することができる。論理ライブラリ管理ブロック２４０は、種々の論理構成要素およびソース入力ファイルの所有権およびバージョニングを維持するために使用することができる。論理ライブラリ管理ブロック２４０は、ファイルを暗号化して論理リポジトリデータベース２５０に記憶することができるように、設計ソースコードファイルおよびＣＨＩファイルの暗号化および復号化を行うことができる。ファイルを暗号化することによって、異なるユーザの知的所有権を保護することができる。
【００３３】
コンピューティングサービスインターフェース２６０は、論理リポジトリサービス２０５とコンピューティングリソースとの間のインターフェースとして使用することができる。例えば、インスタンスがコンピューティングリソースに作成されると、ＡＰＩ要求をコンピューティングサービスインターフェース２６０に送信することができ、構成データを要求側リソースにダウンロードすることができる。第１の要求タイプは、計算リソースのサーバコンピュータで新しいインスタンスを開始または展開することに応じることであり得る。例えば、要求は、構成可能な論理がサーバコンピュータの相互接続に列挙される前に静的論理をロードおよびブートすることであり得る。特に、要求は、静的論理ダウンロードブロック２６５によってサービスすることができ、これは、論理ライブラリ管理ブロック２４０を介して、構成データを論理リポジトリデータベース２５０から検索することができる。静的論理ダウンロード構成要素２６５は、要求側インスタンスの構成可能なハードウェアプラットフォームに静的論理をダウンロードするために使用することができる。加えて、要求は、再構成可能な論理に関するものであり得、再構成可能な論理ダウンロード構成要素２６４を使用して、該要求をサービスすることができる。具体的には、再構成可能な論理ダウンロードは、論理ライブラリ管理ブロック２４０を介して、論理リポジトリデータベース２５０を通して構成データを検索することができる。要求は、再構成可能なホスト論理に関するもの、または再構成可能なアプリケーション論理に関するものであり得る。再構成可能な論理の要求は、計算リソースのサーバコンピュータで新しいインスタンスを開始または展開することに応じることであり得る。代替的に、再構成可能な論理の要求は、再構成可能な論理を要するサーバコンピュータで稼働するクライアントアプリケーションに応じることであり得る。例えば、サーバコンピュータで稼働するアプリケーションプログラムは、プログラムの異なるポイントで構成可能なハードウェアプラットフォームにダウンロードした異なるハードウェアアクセラレータを有するように要求することができる。コンピューティングサービスインターフェース２６０は、構成可能な論理データを検索するためのアクセス特権を有するユーザだけが構成データをダウンロードすることができるように、要求を認証することができる。例えば、要求は、認可トークンを含むことができ、認可トークンが予期される認可トークンにマッチした場合に、要求をサービスすることができる。そうでない場合は、要求を拒否することができる。
【００３４】
コンピューティングサービスインターフェース２６０はまた、コンピューティングリソースから情報を受信するために使用することもできる。例えば、コンピューティングサービスインターフェース２６０は、コンピューティングリソースでインスタンスが作成、再構成、または使用されるときに、コンピューティングリソースから状態更新を受信することができる。具体的な一例として、コンピューティングサービスインターフェース２６０には、構成データがコンピューティングリソースに成功裏に展開されたかどうかを通知することができる。例えば、構成データは、ハードウェアの故障のため、または他の理由で、展開に失敗する場合がある。コンピューティングサービスインターフェース２６０は、論理ライブラリ管理ブロック２４０と併せて、論理リポジトリデータベース２５０に記憶された異なる設計に関する使用状況データ、失敗レポート、および／または統計を維持することができる。例えば、統計は、要求をプロバイダインターフェース２１０または顧客／開発者インターフェース２２０で受信したときに、プロバイダまたはユーザのオンデマンドで、計算サービス提供することができる。
【００３５】
図３は、論理リポジトリサービスによって行うことができるような、論理設計を摂取し、構成データを生成する、例示的なフロー３００を例示する。摂取３１０中に、アプリケーション論理設計および／またはホスト論理設計を、論理リポジトリサービスによって受信することができる。論理設計は、ＩＥＥＥ１７３５−２０１４暗号化標準などを使用することによって、暗号化することができる。論理設計は、フロー３００の摂取３１０中に、または後のステップ中に復号することができる。
【００３６】
１つの例として、アプリケーション論理およびホスト論理のソースコードは、摂取３１０中に受信することができ、アプリケーション論理およびホスト論理は、単一の設計に組み合わせて、論理合成３２０のソースコードを生成することができる。論理合成３２０は、標的技術に基づいて、行動および／または構造ＲＴＬで書かれた仕様をネットリストに変換するために使用することができる。例えば、論理合成３２０は、異なるアーキテクチャを有するＦＰＧＡ、製造プロセス、容量、および／または製造業者などの、異なる構成可能な論理技術を標的にすることができる。ネットリストは、いくつかの、構成可能な論理ブロック、非構成可能なブロック（例えば、ハードマクロ）、および異なるブロック間の接続を含むことができる。ネットリストは、ネットリストのブロックが列挙されるが、標的技術内に未配置である、論理ネットリストとすることができる。ネットリストは、配置およびルーティング３３０への入力として使用することができる。配置およびルーティング３３０は、ネットリストからの構成可能なブロックのインスタンスおよびルーティング情報をとることができ、ブロックを物理デバイスにマッピングすることができる。配置およびルーティング設計は、ネットリストの論理構成要素の各々の物理的マッピングを含むことができる。追加的または代替的に、配置およびルーティング３３０は、ネットリストが設計のタイミング制約および物理デバイスの物理的制約に基づいて修正されるようにタイミング駆動することができる。配置およびルーティング３３０の出力は、ビットストリームイメージなどの構成データとすることができる。構成データは、異なる構成要素に分割すること、または分けることができる。例えば、構成データは、静的ホスト論理、再構成可能なホスト論理、および／または再構成可能なアプリケーション論理と関連付けられたデータを含むことができる。異なる構成要素は、オーバーラップまたは非オーバーラップとすることができる。例えば、静的ホスト論理は、再構成可能なアプリケーション論理によって使用される領域を通してルーティングすることができる。したがって、再構成可能なアプリケーション論理の部分的なビットストリームはまた、静的ホスト論理の一部分も含むことができる。
【００３７】
別の例として、アプリケーション論理および／またはホスト論理のネットリストは、摂取３１０中に、受信することができる。具体的な一例として、ネットリストは、アプリケーション論理のために受信することができ、ソースコードは、ホスト論理のために受信することができる。この事例において、ホスト論理は、論理合成３２０と合成して、ホスト論理のネットリストを生成することができ、ホストおよびアプリケーション論理のネットリストは、単一の設計に組み合わせて、配置およびルーティング３３０のネットリストを生成することができる。別の例として、アプリケーション論理および／またはホスト論理の構成データは、摂取３１０中に受信することができる。例えば、アプリケーション論理設計の部分ビットストリームを受信することができ、またはホストおよびアプリケーション論理設計のフルビットストリームを受信することができる。
【００３８】
論理リポジトリサービスはまた、ライブラリ管理および検証３４０機能も含むことができる。例えば、フロー３００の各ステップは、データベースに記憶することができる中間データおよび／またはファイルを生成することができる。特に、データベースは、開発者が、開発者と関連付けられたソースコード、レポート、および構成データにアクセスすることができるように、開発者のアカウント識別子によってインデックスを付けることができる。１つの例として、アプリケーション論理のためのソースコードは、摂取３１０中に、開発者のアカウント識別子と関連付けることができる。ソースコードは、開発者によって提供される、または摂取３１０中に生成されるバージョン識別子と関連付けることができる。複数のソースコードバージョンを、アカウントのために維持し、データベース内に記憶することができる。アプリケーション論理の各バージョンは、ホスト論理のバージョンと関連付けることができる。構成データの各バージョンは、アプリケーション論理の特定のバージョンおよびホスト論理の特定のバージョンに対応することができる。ビットストリームまたはＣＨＩ識別子は、構成データが生成されるときに作成することができ、ソースコード、ネットリスト、およびレポートをＣＨＩ識別子によってラベル付けすることができる。論理設計に関する情報を提供するために、フロー３００の種々のステップでレポートを生成することができる。例えば、論理合成３２０によって１つ以上の合成レポートを生成することができ、配置およびルーティング３３０によって１つ以上のレポートを生成することができる。１つの例として、論理設計の利用度に関する情報を提供するために、実装形態レポートを生成することができる。特に、設計を適切なインスタンスタイプで実施することができるように、設計によって使用されるハードウェアリソースのパーセンテージを提供することができる。
【００３９】
別の例として、タイミングレポートは、設計が構成可能なハードウェアのタイミング仕様を満たすかどうかを示す、静的タイミング解析を提供することができる。論理合成３２０、ならびに配置およびルーティング３３０は、論理合成３２０、ならびに配置およびルーティング３３０の各稼働が異なる結果を提供することができるように、ツールの各稼働によって変動する、ランダムな非決定論的ステップを含むことができる。したがって、開発者が、（タイミングレポートによって示されるように）タイミングを満たさない設計を有する場合、開発者は、論理合成３２０、ならびに／または配置およびルーティング３３０を再稼働することを所望する場合がある。この様態において、開発者は、同じ設計に対して複数の合成を実行し、ルーティングを稼働させることによって、自分の設計を繰り返すことができる。合成ならびに配置およびルーティング稼働のうちの１つが、構成可能なハードウェア論理のタイミング仕様を満たす結果をもたらしたときに、開発者は、その稼働を生産稼働としてマークすることができる。例えば、開発者は、その稼働から生産まで生成されるＣＨＩの状態を変更することができ、また、ビットストリーム識別子を、生成された構成データと関連付けることができる。
【００４０】
ライブラリ管理および検証３４０機能は、開発および展開ステップ中の種々の時点で、構成可能な論理についてユーザ設計を有効にすることができる。１つの例として、検証３４０は、ホスト論理がアプリケーション論理の機能を限定することができるように、シミュレーションを行って、アプリケーション論理がホスト論理と互換性があるかどうかを検証することを含むことができる。検証３４０は、アプリケーション論理のネットリストを比較して、アプリケーション論理が、構成可能なハードウェアプラットフォームの容量および領域制限を満たすことを確認することを含むことができる。例えば、アプリケーション論理は、１つ以上の再構成可能な領域内でだけ論理を使用するように制限することができる。アプリケーション論理がそれらの領域外にある場合、アプリケーション論理を拒否することができる。加えて、アプリケーション論理は、ビットストリームとして摂取することができ、ビットストリームは、検証３４０によって有効にすることができる。ビットストリームの検証は、ホスト論理に対応する摂取されたビットストリームデータの一部分を、ホスト論理のベースラインバージョンと比較して、ホスト論理が壊されていないことを確認することを含むことができる。検証ブロック３４０からの出力は、有効な構成データとすることができる。
【００４１】
図４は、本明細書で説明される実施形態を使用することができる１つの環境を例示する、ネットワークベースの計算サービスプロバイダ４００のコンピューティングシステム図である。背景として、計算サービスプロバイダ４００（すなわち、クラウドプロバイダ）は、エンドレシピエントのコミュニティへの貢献として、コンピューティングおよび記憶容量の送達が可能である。例示的な一実施形態において、計算サービスプロバイダは、組織によって、またはその組織に代わって編成するために確立することができる。すなわち、計算サービスプロバイダ４００は、「プライベートなクラウド環境」を提供することができる。別の実施形態において、計算サービスプロバイダ４００は、マルチテナント環境をサポートし、複数の顧客は、独立して動作する（すなわち、パブリッククラウド環境）。一般に言えば、計算サービスプロバイダ４００は、次のモデル、すなわち、サービスとしてのインフラストラクチャ（「ＩａａＳ」）、サービスとしてのプラットフォーム（「ＰａａＳ」）、および／またはサービスとしてのソフトウェア（「ＳａａＳ」）を提供することができる。他のモデルを提供することができる。ＩａａＳモデルの場合、計算サービスプロバイダ４００は、物理または仮想マシン、および他のリソースとして、コンピュータを提供することができる。仮想マシンは、下でさらに説明するように、ハイパーバイザによって、ゲストとして稼働させることができる。ＰａａＳモデルは、オペレーティングシステム、プログラミング言語実行環境、データベース、およびウェブサーバを含むことができる、コンピューティングプラットフォームを送達する。アプリケーション開発者らは、基礎をなすハードウェアおよびソフトウェアを購入および管理するためのコストを伴うことなく、計算サービスプロバイダプラットフォーム上で該開発者らのソフトウェアソリューションを開発し、稼働させることができる。加えて、アプリケーション開発者らは、計算サービスプロバイダプラットフォームの構成可能なハードウェア上で該開発者らのハードウェアソリューションを開発および稼働させることができる。ＳａａＳモデルは、計算サービスプロバイダにおけるアプリケーションソフトウェアのインストールおよび動作を可能にする。いくつかの実施形態において、エンドユーザは、ウェブブラウザまたは他の軽量のクライアントアプリケーションを稼働させる、デスクトップコンピュータ、ラップトップ、タブレット、スマートフォンなどといったネットワーク化された顧客デバイスを使用して、計算サービスプロバイダ４００にアクセスする。当業者は、計算サービスプロバイダ４００を「クラウド」環境として説明することができることを認識するであろう。
【００４２】
特定の例示される計算サービスプロバイダ４００は、複数のサーバコンピュータ４０２Ａ〜４０２Ｃを含む。３台のサーバコンピュータだけが示されるが、任意の数を使用することができ、大規模施設は、何千台ものサーバコンピュータを含むことができる。サーバコンピュータ４０２Ａ〜４０２Ｃは、ソフトウェアインスタンス４０６Ａ〜４０６Ｃを実行するためのコンピューティングリソースを提供することができる。１つの実施形態において、ソフトウェアインスタンス４０６Ａ〜４０６Ｃは、仮想マシンである。当技術分野で知られているように、仮想マシンは、物理マシンのようにアプリケーションを実行するマシン（すなわち、コンピュータ）のソフトウェア実装のインスタンスである。仮想マシンの例において、サーバ４０２Ａ〜４０２Ｃの各々は、ハイパーバイザ４０８、または単一のサーバ上で複数のソフトウェアインスタンス４０６の実行を可能にするように構成された別のタイプのプログラムを実行するように構成することができる。加えて、ソフトウェアインスタンス４０６の各々は、１つ以上のアプリケーションを実行するように構成することができる。
【００４３】
本明細書に開示される実施形態は、主に仮想マシンの文脈で説明されるが、他のタイプのインスタンスを、本明細書に開示される概念および技術と共に利用することができることを理解されたい。例えば、本明細書に開示される技術は、記憶リソース、データ通信リソース、および他のタイプのコンピューティングリソースと共に利用することができる。本明細書に開示される実施形態はまた、仮想マシンインスタンスを利用することなく、コンピュータシステム上でアプリケーションの全てまたは一部分を直接実行することができる。
【００４４】
サーバコンピュータ４０２Ａ〜４０２Ｃは、異なるハードウェアリソースまたはインスタンスタイプの異種の集合体を含むことができる。ハードウェアインスタンスタイプのいくつかは、計算サービスプロバイダ４００のユーザによって少なくとも部分的に構成可能である、構成可能なハードウェアを含むことができる。インスタンスタイプの１つの例は、構成可能なハードウェア４０４Ａと通信するサーバコンピュータ４０２Ａを含むことができる。具体的には、サーバコンピュータ４０２Ａおよび構成可能なハードウェア４０４Ａは、ＰＣＩｅなどのローカル相互接続を通じて通信することができる。インスタンスタイプの別の例は、サーバコンピュータ４０２Ｂと、構成可能なハードウェア４０４Ｂと、を含むことができる。例えば、構成可能な論理４０４Ｂは、マルチチップモジュール内に、またはサーバコンピュータ４０２ＢのＣＰＵと同じダイ上に集積することができる。インスタンスタイプのさらに別の例は、任意の構成可能なハードウェアを伴わないサーバコンピュータ４０２Ｃを含むことができる。したがって、構成可能な論理を伴う、および伴わないハードウェアインスタンスタイプは、計算サービスプロバイダ４００のリソース内に存在させることができる。
【００４５】
１つ以上のサーバコンピュータ４２０は、サーバコンピュータ４０２およびソフトウェアインスタンス４０６の動作を管理するためのソフトウェア構成要素を実行するために予約することができる。例えば、サーバコンピュータ４２０は、管理構成要素４２２を実行することができる。顧客は、管理構成要素４２２にアクセスして、顧客によって購入されたソフトウェアインスタンス４０６の動作の種々の態様を構成することができる。例えば、顧客は、インスタンスを購入、レンタル、またはリースして、ソフトウェアインスタンスの構成を変更することができる。ソフトウェアインスタンスの各々の構成情報は、ネットワークアタッチトストレージ４４０上のマシンイメージ（ＭＩ）４４２として記憶することができる。具体的には、ＭＩ４４２は、ＶＭインスタンスを起動するために使用される情報を記述する。ＭＩは、インスタンス（例えば、ＯＳおよびアプリケーション）のルートボリュームのテンプレート、どの顧客アカウントがＭＩを使用することができるのかを制御するための起動許可、およびインスタンスが起動されたときにインスタンスにアタッチするボリュームを指定するブロックデバイスマッピングを含むことができる。ＭＩはまた、インスタンスが起動されたときに構成可能なハードウェア４０４にロードされる構成可能なハードウェアイメージ（ＣＨＩ）４４２の参照も含むことができる。ＣＨＩは、構成可能なハードウェア４０４の少なくとも一部分をプログラムまたは構成するための構成データを含む。
【００４６】
顧客はまた、要望に応じて、購入したインスタンスをスケーリングする方法に関する設定も指定することができる。管理構成要素は、顧客ポリシーを実行するために、ポリシー文書をさらに含むことができる。自動スケーリング構成要素４２４は、顧客によって定義されたルールに基づいて、インスタンス４０６をスケーリングすることができる。１つの実施形態において、自動スケーリング構成要素４２４は、顧客が、いつ新しいインスタンスをインスタンス化するべきなのかを決定する際に使用するためのスケールアップルール、およびいつ既存のインスタンスを終了するべきなのかを決定する際に使用するためのスケールダウンルールを指定することを可能にする。自動スケーリング構成要素４２４は、異なるサーバコンピュータ４０２または他のコンピューティングデバイスで実行するいくつかの副構成要素で構成することができる。自動スケーリング構成要素４２４は、内部管理ネットワークを通じて、利用可能なコンピューティングリソースを監視すること、および必要に基づいて、利用可能なリソースを修正することができる。
【００４７】
展開構成要素４２６は、コンピューティングリソースの新しいインスタンス４０６を展開する際に顧客を支援するために使用することができる。展開構成要素は、誰がアカウントの所有者であるのか、クレジットカード情報、所有者の国などといった、インスタンスと関連付けられたアカウント情報へのアクセスを有することができる。展開構成要素４２６は、顧客から、新しいインスタンス４０６を構成するべき方法を記述するデータを含む構成を受信することができる。例えば、構成は、新しいインスタンス４０６でインストールされる１つ以上のアプリケーションを指定すること、新しいインスタンス４０６を構成するために実行されるべきスクリプトおよび／または他のタイプのコードを提供すること、アプリケーションキャッシュが準備するべき方法を指定するキャッシュ論理を提供すること、ならびに他のタイプの情報を提供することができる。展開構成要素４２６は、顧客が提供する構成およびキャッシュ論理を利用して、新しいインスタンス４０６を構成、準備、および起動することができる。構成、キャッシュ論理、および他の情報は、管理構成要素４２２を使用する顧客によって、またはこの情報を展開構成要素４２６に直接提供することによって指定することができる。インスタンスマネージャは、展開構成要素の一部とみなすことができる。
【００４８】
顧客アカウント情報４２８は、マルチテナント環境の顧客と関連付けられた任意の所望の情報を含むことができる。例えば、顧客アカウント情報としては、顧客の一意の識別子、顧客の住所、課金情報、ライセンス情報、インスタンスを起動するためのカスタム化パラメータ、スケジュール情報、自動スケーリングパラメータ、アカウントにアクセスするために使用した以前のＩＰアドレス、顧客がアクセス可能なＭＩおよびＣＨＩのリストなどを挙げることができる。
【００４９】
１つ以上のサーバコンピュータ４３０は、サーバコンピュータ４０２の構成可能なハードウェア４０４への構成データのダウンロードを管理するためのソフトウェア構成要素を実行するために予約することができる。例えば、サーバコンピュータ４３０は、摂取構成要素４３２と、ライブラリ管理構成要素４３４と、ダウンロード構成要素４３６と、を備える、論理リポジトリサービスを実行することができる。摂取構成要素４３２は、ホスト論理およびアプリケーション論理設計または仕様を受信すること、ならびに構成可能なハードウェア４０４を構成するために使用することができる構成データを生成することができる。ライブラリ管理構成要素４３４は、論理リポジトリサービスと関連付けられたソースコード、ユーザ情報、および構成データを管理するために使用することができる。例えば、ライブラリ管理構成要素４３４は、ユーザの設計によって生成された構成データを、ネットワークアタッチトストレージ４４０上のユーザによって指定された場所に記憶するために使用することができる。特に、構成データは、ネットワークアタッチトストレージ４４０上の構成可能なハードウェアイメージ４４２内に記憶することができる。加えて、ライブラリ管理構成要素４３４は、（アプリケーション論理およびホスト論理のための仕様のなどの）入力ファイル、ならびに論理設計および／または論理リポジトリサービスのユーザに関するメタデータのバージョニングおよび記憶を管理することができる。ライブラリ管理構成要素４３４は、例えば、ユーザ識別子、インスタンスタイプ、マーケットプレイス識別子、マシンイメージ識別子、および構成可能なハードウェア識別子などの１つ以上の特性によって、生成された構成データにインデックスを付けることができる。ダウンロード構成要素４３６は、構成データの要求を認証し、要求が認証されたときに構成データを要求者に伝送するために使用することができる。例えば、サーバコンピュータ４０２Ａ〜Ｂ上のエージェントは、構成可能なハードウェア４０４を使用するインスタンス４０６を起動したときに、要求をダウンロード構成要素４３６に送信することができる。別の例として、サーバコンピュータ４０２Ａ〜Ｂ上のエージェントは、構成可能なハードウェア４０４が動作している間に構成可能なハードウェア４０４を部分的に再構成するようにインスタンス４０６が要求したときに、要求をダウンロード構成要素４３６に送信することができる。
【００５０】
ネットワークアタッチトストレージ（ＮＡＳ）４４０は、記憶空間およびＮＡＳ４４０に記憶されるファイルへのアクセスを提供するために使用することができる。例えば、ＮＡＳ４４０は、ネットワークファイルシステム（ＮＦＳ）などのネットワークファイル共有プロトコルを使用して要求を処理するために使用される、１つ以上のサーバコンピュータを含むことができる。ＮＡＳ４４０は、リムーバブル媒体または非リムーバブル媒体を含むことができ、該媒体としては、磁気ディスク、ストレージエリアネットワーク（ＳＡＮ）、独立したディスクの冗長アレイ（ＲＡＩＤ）、磁気テープもしくはカセット、ＣＤ−ＲＯＭ、ＤＶＤ、または情報を非一時的な方式で記憶するために使用することができ、また、ネットワーク４５０を通じてアクセスすることができる任意の他の媒体が挙げられる。
【００５１】
ネットワーク４５０は、サーバコンピュータ４０２Ａ〜４０２Ｃ、サーバコンピュータ４２０および４３０、ならびに記憶装置（ストレージ）４４０を相互接続するために利用することができる。ネットワーク４５０は、ローカルエリアネットワーク（ＬＡＮ）とすることができ、また、エンドユーザが計算サービスプロバイダ４００にアクセスすることができるように、ワイドエリアネットワーク（ＷＡＮ）４６０に接続することができる。図４に例示されるネットワークトポロジが簡略化されたものであること、およびはるかに多くのネットワークおよびネットワーキングデバイスを利用して、本明細書で開示される種々のコンピューティングシステムを相互接続することができることを認識されたい。
【００５２】
図５は、構成可能なハードウェアプラットフォーム５１０を構成し、そこにインターフェースするための制御プレーンおよびデータプレーンの構成要素を含む、例示的なシステム５００のさらなる詳細を示す。制御プレーンは、構成可能なハードウェアプラットフォーム５１０を初期化、監視、再構成、および分解するための機能を含む。データプレーンは、ユーザのアプリケーションと構成可能なハードウェアプラットフォーム５１０との間で通信するための機能を含む。制御プレーンは、より高い特権レベルを有するユーザまたはサービスによってアクセス可能とすることができ、データプレーンは、より低い特権レベルを有するユーザまたはサービスによってアクセス可能とすることができる。１つの実施形態において、構成可能なハードウェアプラットフォーム５１０は、ＰＣＩｅなどのローカル相互接続を使用して、サーバコンピュータ５２０に接続される。代替の一実施形態において、構成可能なハードウェアプラットフォーム５１０は、サーバコンピュータ５２０のハードウェア内に統合することができる。１つの例として、サーバコンピュータ５２０は、図４の計算サービスプロバイダ４００の複数のサーバコンピュータ４０２Ａ〜４０２Ｂのうちの１台とすることができる。
【００５３】
サーバコンピュータ５２０は、１つ以上のＣＰＵ、メモリ、記憶デバイス、相互接続ハードウェアなどを含む、基礎をなすハードウェア５２２を有する。ハードウェア５２２の上側で稼働する層は、ハイパーバイザまたはカーネル層５２４である。ハイパーバイザまたはカーネル層は、タイプ１またはタイプ２ハイパーバイザとして分類することができる。タイプ１ハイパーバイザは、ホストハードウェア５２２上で直接稼働して、ハードウェアを制御し、また、ゲストオペレーティングシステムを管理する。タイプ２ハイパーバイザは、従来のオペレーティングシステム環境内で稼働する。したがって、タイプ２環境において、ハイパーバイザは、オペレーティングシステム上で稼働する別個の層とすることができ、オペレーティングシステムは、システムハードウェアと相互作用する。異なるタイプのハイパーバイザとしては、Ｘｅｎベースのもの、Ｈｙｐｅｒ−Ｖ、ＥＳＸｉ／ＥＳＸ、Ｌｉｎｕｘ（登録商標）などが挙げられるが、他のハイパーバイザを使用することができる。管理パーティション５３０（Ｘｅｎハイパーバイザのドメイン０など）は、ハイパーバイザの一部とすること、またはそこから分離することができ、また一般に、ハードウェア５２２にアクセスするために必要なデバイスドライバを含む。ホストパーティション５４０は、ハイパーバイザ内の隔離の論理ユニットである。各ユーザパーティション５４０には、ハードウェア層のメモリ、ＣＰＵ割り当て、記憶装置、相互接続帯域幅などのそれ自体の部分を割り当てることができる。加えて、各ユーザパーティション５４０は、仮想マシンおよびそれ自体のゲストオペレーティングシステムを含むことができる。このように、各ユーザパーティション５４０は、他のパーティションから独立してそれ自体の仮想マシンをサポートするように設計された抽象的な容量部分である。
【００５４】
管理パーティション５３０は、ユーザパーティション５４０および構成可能なハードウェアプラットフォーム５１０のための管理サービスを行うために使用することができる。管理パーティション５３０は、（展開サービス、論理リポジトリサービス５５０、およびヘルス管理サービスなどの）計算サービスプロバイダのウェブサービス、ユーザパーティション５４０、および構成可能なハードウェアプラットフォーム５１０と通信することができる。管理サービスは、ユーザパーティション５４０を起動および終了するための、ならびに構成可能なハードウェアプラットフォーム５１０の構成可能な論理の構成、再構成、および分解を行うためのサービスを含むことができる。具体的な一例として、管理パーティション５３０は、（図４の展開構成要素４２６などの）展開サービスからの要求に応じて、新しいユーザパーティション５４０を起動することができる。要求は、ＭＩおよび／またはＣＨＩの参照を含むことができる。ＭＩは、ユーザパーティション５４０にロードするプログラムおよびドライバを指定することができ、ＣＨＩは、構成可能なハードウェアプラットフォーム５１０にロードする構成データを指定することができる。管理パーティション５３０は、ＭＩと関連付けられた情報に基づいて、ユーザパーティション５４０を初期化することができ、また、ＣＨＩと関連付けられた構成データを構成可能なハードウェアプラットフォーム５１０にロードさせることができる。ユーザパーティション５４０および構成可能なハードウェアプラットフォーム５１０の初期化は、インスタンスを動作可能にするまでの時間を低減させることができるように、同時に起こり得る。
【００５５】
管理パーティション５３０は、構成可能なハードウェアプラットフォーム５１０のプログラミングおよび監視を管理するために使用することができる。この目的のために管理パーティション５３０を使用することによって、構成データおよび構成可能なハードウェアプラットフォーム５１０の構成ポートへのアクセスを制限することができる。具体的には、より低い特権レベルを有するユーザは、管理パーティション５３０に直接アクセスすることが制限され得る。したがって、計算サービスプロバイダのインフラストラクチャを使用することなく、構成可能な論理を修正することができず、構成可能な論理をプログラムするために使用されるいかなる第三者ＩＰも、未許可のユーザによって閲覧されることから保護することができる。
【００５６】
管理パーティション５３０は、構成可能なハードウェアプラットフォーム５１０を構成し、そこにインターフェースする制御プレーンのためのソフトウェアスタックを含むことができる。制御プレーンソフトウェアスタックは、（論理リポジトリサービス５５０およびヘルス監視サービスなどの）ウェブサービス、構成可能なハードウェアプラットフォーム５１０、およびユーザパーティション５４０と通信するための、構成可能な論理（ＣＬ）アプリケーション管理層５３２を含むことができる。例えば、ＣＬアプリケーション管理層５３２は、ユーザパーティション５４０の起動に応じて、構成データをフェッチする要求を論理リポジトリサービス５５０に発行することができる。ＣＬアプリケーション管理層５３２は、ハードウェア５２２の共有されたメモリを使用して、またはサーバコンピュータ５２０を構成可能なハードウェアプラットフォーム５１０に接続する相互接続を通じてパーティション間メッセージを送信および受信することによって、ユーザパーティション５４０と通信することができる。具体的には、ＣＬアプリケーション管理層５３２は、構成可能なハードウェアプラットフォーム５１０のメールボックス論理５１１に対するメッセージの読み出しおよび書き込みを行うことができる。メッセージは、構成可能なハードウェアプラットフォーム５１０を再構成または分解する、エンドユーザアプリケーション５４１による要求を含むことができる。ＣＬアプリケーション管理層５３２は、構成可能なハードウェアプラットフォーム５１０を再構成する要求に応じて、構成データをフェッチする要求を論理リポジトリサービス５５０に発行することができる。ＣＬアプリケーション管理層５３２は、構成可能なハードウェアプラットフォーム５１０を分解する要求に応じて、分解シーケンスを開始することができる。ＣＬアプリケーション管理層５３２は、ユーザパーティション５４０への通信パスが機能しているかどうかを判定するために、ウォッチドッグ関連のアクティビティを行うことができる。
【００５７】
制御プレーンソフトウェアスタックは、構成データを構成可能なハードウェアプラットフォーム５１０にロードすることができるように、構成可能なハードウェアプラットフォーム５１０の構成ポート５１２（例えば、構成アクセスポート）にアクセスするためのＣＬ構成層５３４を含むことができる。例えば、ＣＬ構成層５３４は、構成可能なハードウェアプラットフォーム５１０の完全なまたは部分的な構成を行うために、１つまたは複数のコマンドを構成ポート５１２に転送することができる。ＣＬ構成層５３４は、構成データに従って構成可能な論理をプログラムすることができるように、構成データ（例えば、ビットストリーム）を構成ポート５１２に送信することができる。構成データは、ホスト論理および／またはアプリケーション論理を指定することができる。
【００５８】
制御プレーンソフトウェアスタックは、サーバコンピュータ５２０を構成可能なハードウェアプラットフォーム５１０に接続する物理的相互接続を通じて通信するための管理ドライバ５３６を含むことができる。管理ドライバ５３６は、物理的相互接続を通じて伝送するための管理パーティション５３０に由来するコマンド、要求、応答、メッセージ、およびデータをカプセル化することができる。加えて、管理ドライバ５３６は、物理的相互接続を通じて管理パーティション５３０に送信されたコマンド、要求、応答、メッセージおよびデータをカプセル化解除することができる。具体的には、管理ドライバ５３６は、構成可能なハードウェアプラットフォーム５１０の管理機能５１３と通信することができる。例えば、管理機能５１３は、物理的相互接続に接続されたデバイスの列挙中にアドレス範囲にマッピングされた、物理または仮想機能とすることができる。管理ドライバ５３６は、管理機能５１３に割り当てられたアドレス範囲にトランザクションをアドレッシングすることによって、管理機能５１３と通信することができる。
【００５９】
制御プレーンソフトウェアスタックは、ＣＬ管理および監視層５３８を含むことができる。ＣＬ管理および監視層５３８は、物理的相互接続で起こるトランザクションを監視および分析して、構成可能なハードウェアプラットフォーム５１０のヘルスを決定すること、および／または構成可能なハードウェアプラットフォーム５１０の使用状況特性を決定することができる。例えば、ＣＬ管理および監視層５３８は、構成データが構成可能なハードウェアプラットフォーム５１０に成功裏に展開されて、展開の状態を示すレポートを論理リポジトリサービス５５０に伝送させることができるかどうかを監視することができる。
【００６０】
構成可能なハードウェアプラットフォーム５１０は、非構成可能なハードマクロと、構成可能な論理と、を含むことができる。ハードマクロは、入力／出力ブロック（例えば、シリアライザおよびデシリアライザ（ＳＥＲＤＥＳ）ブロックおよびギガビットトランシーバ）、アナログ−デジタル変換器、メモリ制御ブロック、試験アクセスポート、および構成ポート５１２などの、構成可能なハードウェアプラットフォーム５１０内の特定の機能を行うことができる。構成可能な論理は、構成データを構成可能なハードウェアプラットフォーム５１０にロードすることによってプログラムすること、または構成することができる。例えば、構成ポート５１２は、構成データをロードするために使用することができる。１つの例として、構成データは、構成ポート５１２によってアクセス可能な（フラッシュメモリなどの）メモリに記憶することができ、構成データは、構成可能なハードウェアプラットフォーム５１０の（電源投入シーケンス中などの）初期化シーケンス中に自動的にロードすることができる。加えて、構成ポート５１２は、構成可能なハードウェアプラットフォーム５１０内のオフチッププロセッサまたはインターフェースを使用してアクセスすることができる。
【００６１】
構成可能な論理は、ホスト論理およびアプリケーション論理を含むようにプログラムすることができる。ホスト論理は、エンドユーザがハードマクロへの、および物理的相互接続への限定されたアクセスを有するように、エンドユーザからハードマクロの少なくともいくつかのインターフェースをシールドすることができる。例えば、ホスト論理は、メールボックス論理５１１と、構成ポート５１２と、管理機能５１３と、ホストインターフェース５１４と、アプリケーション機能５１５と、を含むことができる。エンドユーザは、構成可能なアプリケーション論理５１６を、構成可能なハードウェアプラットフォーム５１０にロードさせることができ、また、（アプリケーション機能５１５を介して）ユーザパーティション５４０からの構成可能なアプリケーション論理５１６と通信することができる。
【００６２】
ホストインターフェース論理５１４は、物理的相互接続にシグナリングし、通信プロトコルを実装するための回路（例えば、ハードマクロおよび／または構成可能な論理）を含むことができる。通信プロトコルは、相互接続を通じて通信するためのルールおよびメッセージフォーマットを指定する。アプリケーション機能５１５は、ユーザパーティション５４０のドライバと通信するために使用することができる。具体的には、アプリケーション機能５１５は、物理的相互接続に接続されたデバイスの列挙中に、アドレス範囲にマッピングされた、物理または仮想機能とすることができる。アプリケーションドライバは、アプリケーション機能５１５に割り当てられたアドレス範囲にトランザクションをアドレッシングすることによって、アプリケーション機能５１５と通信することができる。具体的には、アプリケーション機能５１５は、アプリケーション論理管理ドライバ５４２と通信して、制御プレーンを通じてコマンド、要求、応答、メッセージ、およびデータを交換することができる。アプリケーション機能５１５は、アプリケーション論理データプレーンドライバ５４３と通信して、データプレーンを通じてコマンド、要求、応答、メッセージ、およびデータを交換することができる。
【００６３】
メールボックス論理５１１は、１つ以上のバッファと、１つ以上の制御レジスタと、を含むことができる。例えば、所与の制御レジスタは、特定のバッファと関連付けることができ、レジスタは、管理パーティション５３０とユーザパーティション５４０とを同期させるために、セマフォとして使用することができる。具体的な一例として、パーティションが制御レジスタの値を修正することができる場合は、パーティションをバッファに書き込むことができる。バッファおよび制御レジスタは、管理機能５１３およびアプリケーション機能５１５からアクセス可能とすることができる。メッセージがバッファに書き込まれるときに、メッセージが終了していることを示すために、別の制御レジスタ（例えば、メッセージ準備完了レジスタ）に書き込むことができる。メッセージ準備完了レジスタは、メッセージが存在するかどうかを判定するために、パーティションによってポーリングすることができ、またはメッセージ準備完了レジスタが書き込まれることに応じて、割り込みを生成し、パーティションに伝送することができる。
【００６４】
ユーザパーティション５４０は、エンドユーザアプリケーション５４０を構成可能なハードウェアプラットフォーム５１０にインターフェースするためのソフトウェアスタックを含むことができる。アプリケーションソフトウェアスタックは、制御プレーンおよびデータプレーンと通信するための機能を含むことができる。具体的には、アプリケーションソフトウェアスタックは、構成可能なハードウェアプラットフォーム５１０へのアクセスをエンドユーザアプリケーション５４０に提供するためのＣＬ−アプリケーションＡＰＩ５４４を含むことができる。ＣＬ−アプリケーションＡＰＩ５４４は、構成可能なハードウェアプラットフォーム５１０および管理パーティション５３０と通信するための方法または機能のライブラリを含むことができる。例えば、エンドユーザアプリケーション５４１は、ＣＬ−アプリケーションＡＰＩ５４４のＡＰＩを使用して、コマンドまたはデータを構成可能なアプリケーション論理５１６に送信することができる。特に、ＣＬ−アプリケーションＡＰＩ５４４のＡＰＩは、アプリケーション論理（ＡＬ）データプレーンドライバ５４３とインターフェースすることができ、これは、構成可能なアプリケーション論理５１６と通信することができるアプリケーション機能５１５を標的とするトランザクションを生成することができる。この様態で、エンドユーザアプリケーション５４１は、構成可能なアプリケーション論理５１６に、データを受信させ、処理させ、および／または該データで応答させて、潜在的に、エンドユーザアプリケーション５４１のタスクを加速することができる。別の例として、エンドユーザアプリケーション５４１は、ＣＬ−アプリケーションＡＰＩ５４４のＡＰＩを使用することによって、コマンドまたはデータを管理パーティション５３０に送信することができる。特に、ＣＬ−アプリケーションＡＰＩ５４４のＡＰＩは、ＡＬ管理ドライバ５４２とインターフェースすることができ、これは、メールボックス論理５１１と通信することができるアプリケーション機能５１５を標的とするトランザクションを生成することができる。この様態で、エンドユーザアプリケーション５４１は、管理パーティション５３０に、構成可能なハードウェアプラットフォーム５１０に関する動作可能またはメタデータを提供させること、および／または構成可能なアプリケーション論理５１６を再構成するように要求させることができる。
【００６５】
アプリケーションソフトウェアスタックは、ハイパーバイザまたはカーネル５２４と併せて、エンドユーザアプリケーション５４１によって物理的相互接続を通じて行うことが可能な動作を制限するために使用することができる。例えば、計算サービスプロバイダは、（ファイルをマシンイメージと関連付けることなどによって）ＡＬ管理ドライバ５４２、ＡＬデータプレーンドライバ５４３、およびＣＬ−アプリケーションＡＰＩ５４４を提供することができる。これらの構成要素は、エンドユーザよりも高い特権レベルを有するユーザおよびサービスだけがファイルに書き込むことを許可することによって、改変から保護することができる。ＡＬ管理ドライバ５４２およびＡＬデータプレーンドライバ５４３は、アプリケーション機能５１５のアドレス範囲内のアドレスだけを使用するように制限することができる。加えて、入力／出力メモリ管理ユニット（Ｉ／Ｏ  ＭＭＵ）は、相互接続トランザクションを、アプリケーション機能５１５または管理機能５１３のアドレス範囲内にあるように制限することができる。
【００６６】
図６は、例えばマルチテナント環境において、構成可能なハードウェアを構成またはプログラムするために使用することができる、構成データを管理するための例示的な方法６００のフロー図である。１つの例として、方法６００は、図１〜３を参照して説明されるような、論理リポジトリサービスを使用して実装することができる。
【００６７】
６１０において、構成可能なハードウェアのアプリケーション論理の仕様を使用して、構成可能なハードウェアの構成データを生成する第１の要求を受信することができる。アプリケーション論理の仕様は、アプリケーション論理に対応するソースコード（例えば、ＨＤＬまたはＲＴＬソースコード）、ネットリスト、および／または構成データを含むことができる。要求は、構成データと関連付けられたインスタンスタイプを指定することができる。要求は、構成データにアクセスすることができるユーザを示すアクセスリストを含むことができる。要求は、アプリケーション論理と共に使用するホスト論理のバージョンを含むことができる。
【００６８】
６２０において、構成可能なハードウェアの構成データを生成することができる。構成データを生成することは、アプリケーション論理が計算サービスプロバイダの１つ以上の基準に従うことを検証すること、アプリケーション論理をホスト論理ラッパーに組み込むこと、アプリケーション論理を合成すること、ならびに／またはアプリケーション論理を配置およびルーティングすること、を含むことができる。構成データは、アプリケーション論理および／またはホスト論理を構成可能なハードウェアに実装するためのデータを含むことができる。構成データは、構成可能なハードウェアの動作中に１回以上構成要素を実装するためのデータを含むことができる。例えば、構成データは、（構成可能なハードウェアの初期化シーケンス中にロードされる）静的論理構成要素と、（構成可能なハードウェアの初期化シーケンスの後にロードされる）１つ以上の再構成可能な構成要素と、を含むことができる。異なる再構成可能な構成要素は、構成可能なハードウェアのオーバーラップまたは非オーバーラップ領域（重複しない領域）と関連付けることができる。構成データは、ホスト論理構成要素および／またはアプリケーション論理構成要素を含むことができる。構成データは、１つ以上のフォーマットで生成することができる。１つの例として、構成データは、フルまたは部分ビットストリームとすることができる。また、構成データと関連付けられた情報も生成することができる。例えば、ログファイル、実装レポート、およびタイミングレポートは、構成データを伴って生成することができる。実装およびタイミングレポートは、構成可能なハードウェアの設計を修正、再合成、または再配置およびルーティングするために、開発者または設計システムによって使用することができる。
【００６９】
６３０において、構成可能なハードウェアを備えるホストサーバコンピュータに構成データをダウンロードする第２の要求を受信することができる。例えば、第２の要求は、新しい仮想マシンインスタンスが起動されたときに、（ホスト論理設計などの）静的論理を、構成可能なハードウェアにダウンロードすることであり得る。別の例として、要求は、構成可能なハードウェアプラットフォームを実行した後に、再構成可能な論理を、構成可能なハードウェアにダウンロードすることであり得る。特に、要求は、アプリケーション論理設計に対応する構成データに関するものであり得る。第２の要求は、構成データにアクセスする許可をユーザに与えるための情報を含むことができる。
【００７０】
６４０において、構成可能なハードウェアがホスト論理およびアプリケーション論理を伴って構成されるように、第２の要求に応じて、構成データをホストサーバコンピュータに伝送することができる。特に、構成データは、ホストサーバコンピュータの管理パーティションに伝送することができ、管理パーティションは、構成データを、構成可能なハードウェアにロードさせることができる。１つの例として、構成データは、要求側が構成データへのアクセスを有することが検証された後に伝送することができる。
【００７１】
６５０において、ハードウェア参照識別子を仮想マシン識別子と関連付けることができる。例えば、（６３０からの）第２の要求は、ダウンロードする構成データを識別するための仮想マシン識別子を含むことができる。この様態で、仮想マシンイメージ識別子を使用した仮想マシンの展開は、仮想マシンがインスタンス化されたときに、ハードウェア参照識別子と関連付けられた構成データをダウンロードするよう自動的に要求することができる。
【００７２】
図７は、例えばマルチテナント環境において、構成可能なハードウェアを構成またはプログラムするために使用することができる、構成データを管理するための例示的な方法７００のフロー図である。例えば、方法７００は、図１〜３を参照して上で説明されるような、論理リポジトリサービスによって実装することができる。
【００７３】
７１０において、構成可能なハードウェアのアプリケーション論理の第１の仕様を摂取することができる。加えて、構成可能なハードウェアのホスト論理の第２の仕様を摂取することができる。第１および第２の仕様は、構成可能なハードウェアの構成データを生成するために使用することができる。例えば、仕様は、ホスト論理およびアプリケーション論理のＨＤＬまたはＲＴＬソースコード、ネットリスト、ならびに／または部分ビットストリームを含むことができる。仕様がソースコードを含むときに、ソースコードを合成して、ネットリストを生成することができる。ネットリストは、構成データを生成するために、配置およびルーティングすることができる。構成データは、構成可能なハードウェアの個々の構成要素をプログラミングまたは設定を識別するビットストリームなどの、様々なフォーマットでフォーマットすることができる。
【００７４】
７２０において、構成データをデータベースに記憶することができる。例えば、構成データは、論理リポジトリデータベース１５０などの論理リポジトリデータベースに記憶することができる。構成データは、マシンイメージ、ユーザ、構成可能なハードウェアイメージ、製品コード、または情報データを検索するために使用することができる任意の他の情報と関連付けて記憶することができる。構成データは、第１および第２の仕様と、および／または一連の検証試験と関連付けて記憶することができる。構成データは、構成データの開発者および／またはエンドユーザによって、構成データにアクセスすることができるように、アクセスリストと関連付けて記憶することができる。
【００７５】
７３０において、構成データの要求を受信することができる。例えば、要求は、計算サービスプロバイダによって提供される計算リソース内に新しいインスタンスを展開するときに受信することができる。別の例として、要求は、ユーザアプリケーションがアプリケーションの実行中に構成データをダウンロードするよう要求することに応じて検索することができる。別の例として、要求は、開発者または計算サービスプロバイダが構成データを更新、閲覧、または試験することに応じて検索することができる。
【００７６】
７４０において、構成データを要求側に伝送することができる。例えば、構成データは、要求側のアクセス特権が検証された後に、要求側に伝送することができる。
【００７７】
７５０において、構成データに従って、構成可能なハードウェアを構成することができる。構成されると、構成可能なハードウェアは、ホスト論理設計およびアプリケーション論理設計によって指定される機能を含むことができる。
【００７８】
図８は、説明される技術革新を実行することができる適切なコンピューティング環境８００の一般的な例を表す。コンピューティング環境８００は、本技術革新を多様な汎用または専用コンピューティングシステムで実行することができるので、使用または機能の範囲に関していかなる限定も示唆することを意図しない。例えば、コンピューティング環境８００は、様々なコンピューティングデバイス（例えば、デスクトップコンピュータ、ラップトップコンピュータ、サーバコンピュータ、タブレットコンピュータなど）のうちのいずれかとすることができる。
【００７９】
図８を参照すると、コンピューティング環境８００は、１つ以上の処理ユニット８１０、８１５と、メモリ８２０、８２５と、を含む。図８において、この基本構成８３０は、破線内に含まれる。処理ユニット８１０、８１５は、コンピュータ実行可能命令を実行する。処理ユニットは、汎用中央処理ユニット（ＣＰＵ）、特定用途向け集積回路（ＡＳＩＣ）内のプロセッサ、または任意の他のタイプのプロセッサとすることができる。マルチ処理システムでは、複数の処理ユニットがコンピュータ実行可能命令を実行して、処理能力を高める。例えば、図８は、中央処理ユニット８１０、ならびにグラフィックス処理ユニットまたは共処理ユニット８１５を示す。有形メモリ８２０、８２５は、処理ユニット（複数可）によってアクセス可能である揮発性メモリ（例えば、レジスタ、キャッシュ、ＲＡＭ）、不揮発メモリ（例えば、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリなど）、またはこれら２つのいくつかの組み合わせとすることができる。メモリ８２０、８２５は、処理ユニット（複数可）による実行に適したコンピュータ実行可能命令の形態で、本明細書で説明される１つ以上の技術革新を実装するソフトウェア８８０を記憶する。
【００８０】
コンピューティングシステムは、追加的な特徴を有することができる。例えば、コンピューティング環境８００は、記憶装置８４０と、１つ以上の入力デバイス８５０と、１つ以上の出力デバイス８６０と、および１つ以上の通信接続８７０とを含む。バス、コントローラ、またはネットワーク等の相互接続機構（図示せず）は、コンピューティング環境８００の構成要素を相互接続する。典型的に、オペレーティングシステムソフトウェア（図示せず）は、コンピューティング環境８００内で実行する他のソフトウェアのための動作環境を提供し、コンピューティング環境８００の構成要素の動作を協調させる。
【００８１】
有形記憶装置８４０は、リムーバブルまたは非リムーバブルとすることができ、該記憶装置としては、磁気ディスク、磁気テープもしくはカセット、ＣＤ−ＲＯＭ、ＤＶＤ、または情報を非一時的な方式で記憶するために使用することができ、また、コンピューティング環境８００内でアクセスすることができる任意の他の媒体が挙げられる。記憶装置８４０は、本明細書で説明される１つ以上の技術革新を実装するソフトウェア８８０のための命令を記憶する。
【００８２】
入力デバイス（複数可）８５０は、キーボード、マウス、ペン、またはトラックボール等のタッチ入力デバイス、音声入力デバイス、スキャンデバイス、または入力をコンピューティング環境８００に提供する別のデバイスとすることができる。出力デバイス（複数可）８６０は、ディスプレイ、プリンタ、スピーカ、ＣＤライタ、またはコンピューティング環境８００からの出力を提供する別のデバイスとすることができる。
【００８３】
通信接続（複数可）８７０は、通信媒体を通じた別のコンピューティングエンティティへの通信を可能にする。通信媒体は、コンピュータ実行可能命令、音声、または、ビデオ入力もしくは出力、または変調されたデータ信号内の他のデータ等の情報を伝達する。変調されたデータ信号は、信号内の情報をエンコードするような様態で設定または変更されたその特性のうちの１つ以上を有する信号である。一例として、また、限定されないが、通信媒体は、電気、光、ＲＦ、または他の搬送波を使用することができる。
【００８４】
開示される方法のいくつかの動作は、提示の便宜のために特定の連続的な順序で説明されるが、下に記載される特定の言葉によって特定の順序が要求されない限り、この説明の様態は、再配列を含むことを理解されたい。例えば、連続的に説明される動作は、いくつかの事例において、再配列される場合があり、または同時に行われる場合がある。その上、簡潔にするために、添付図面は、開示される方法を他の方法と併せて使用することができる種々の方式を示さない場合がある。
【００８５】
開示される方法のいずれかは、１つ以上のコンピュータ可読記憶媒体（例えば、１つ以上の光媒体ディスク、揮発性メモリ構成要素（ＤＲＡＭまたはＳＲＡＭ等）、または不揮発性メモリ（フラッシュメモリまたはハードドライブ等））に記憶され、また、コンピュータ（例えば、スマートフォン、またはコンピューティングハードウェアを含む他のモバイルデバイスを含む、任意の市販コンピュータ）上で実行される、コンピュータ実行可能命令のように実施することができる。コンピュータ可読記憶媒体という用語は、信号および搬送波等の通信接続を含まない。開示される技術を、ならびに開示される実施形態の実施中に作成され、使用される任意のデータを実装するためのコンピュータ実行可能命令のいずれかは、１つ以上のコンピュータ可読記憶媒体に記憶することができる。コンピュータ実行可能命令は、例えば、専用ソフトウェアアプリケーション、またはウェブブラウザもしくは他のソフトウェアアプリケーション（リモートコンピューティングアプリケーション等）を介してアクセスまたはダウンロードされるソフトウェアアプリケーションの一部とすることができる。そのようなソフトウェアは、例えば、単一のローカルコンピュータ（例えば、任意の適切な市販のコンピュータ）上で、または１つ以上のネットワークコンピュータを使用して（例えば、インターネット、ワイドエリアネットワーク、ローカルエリアネットワーク、クライアントサーバネットワーク（クラウドコンピューティングネットワーク等）、または他のそのようなネットワークを介して）ネットワーク環境内で実行することができる。
【００８６】
明確にするため、ソフトウェアベースの実装形態の特定の選択された態様だけを説明する。当技術分野でよく知られている他の詳細は省略する。例えば、開示される技術は、任意の特定のコンピュータ言語またはプログラムに限定されないことを理解されたい。例えば、開示される技術は、Ｃ＋＋、Ｊａｖａ（登録商標）、Ｐｅｒｌ、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ａｄｏｂｅ  Ｆｌａｓｈ、または任意の他の適切なプログラミング言語で記述されたソフトウェアによって実施することができる。同様に、開示される技術は、任意の特定のコンピュータまたは特定のタイプのハードウェアに限定されない。適切なコンピュータおよびハードウェアの特定の詳細は、よく知られており、本開示で詳細に説明する必要はない。
【００８７】
また、本明細書で説明される任意の機能は、ソフトウェアの代わりに１つ以上のハードウェア論理構成要素によって少なくとも部分的に行うことができることを理解されたい。例えば、限定されないが、使用することができるハードウェア論理コンポーネントの例示的なタイプとしては、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、特定用途向け標準製品（ＡＳＳＰ）、システムオンチップシステム（ＳＯＣ）、コンプレックスプログラマブル論理デバイス（ＣＰＬＤ）などが挙げられる。
【００８８】
さらに、（例えば、コンピュータに、開示される方法のうちのいずれかを実行させるためのコンピュータ実行可能命令を備える）ソフトウェアベースの実施形態のいずれかを、適切な通信手段を通してアップロード、ダウンロード、またはリモートアクセスすることができる。そのような適切な通信手段としては、例えば、インターネット、ワールドワイドウェブ、イントラネット、ソフトウェアアプリケーション、ケーブル（光ファイバーケーブルを含む）、磁気通信、電磁通信（ＲＦ、マイクロ波、および赤外線通信を含む）、電子通信、または他のそのような通信手段が挙げられる。
【００８９】
本開示の種々の実施形態は、以下の付記を考慮して説明することができる。
１．構成可能なハードウェアを提供する方法であって、
フィールドプログラマブルゲートアレイ（ＦＰＧＡ）の構成データを生成する第１の要求を受信することであって、第１の要求が、ＦＰＧＡに実装するためのアプリケーション論理を指定するハードウェア設計の参照を含み、ＦＰＧＡが構成されるときに、ＦＰＧＡがホスト論理およびアプリケーション論理を含む、ことと、
アプリケーション論理およびホスト論理に基づいて、検証したビットストリームを生成することであって、検証したビットストリームが、ＦＰＧＡの構成データを指定する、ことと、
検証したビットストリームをコンピューティング環境のホストサーバコンピュータにダウンロードする第２の要求を受信することであって、ホストサーバコンピュータが、特定のＦＰＧＡを備える、ことと、
特定のＦＰＧＡがホスト論理およびアプリケーション論理を伴って構成されるように、第２の要求に応じて、検証したビットストリームをホストサーバコンピュータに伝送することと、を含む、方法。
【００９０】
２．受信したハードウェア設計が、ソースコードを含み、検証したビットストリームを生成することが、受信したハードウェア設計を合成して、ＦＰＧＡと互換性があるネットリストを生成することを含む、付記１に記載の方法。
【００９１】
３．受信したハードウェア設計が、ネットリストを含み、検証したビットストリームを生成することが、受信したハードウェア設計をルーティングすることを含む、付記１または２のいずれかに記載の方法。
【００９２】
４．第１の要求が、ＦＰＧＡのインスタンスタイプをさらに含み、検証したビットストリームが、インスタンスタイプ、アプリケーション論理、およびホスト論理に基づいて生成される、付記１〜３のいずれかに記載の方法。
【００９３】
５．ＦＰＧＡが、複数の構成可能な領域を備え、構成データを指定する検証したビットストリームが、領域の一部分を構成するための部分ビットストリームである、付記１〜４のいずれかに記載の方法。
【００９４】
６．構成データを指定する検証したビットストリームが、アプリケーション論理を再構成するためのデータと、静的ホスト論理を維持するためのデータと、を含む、付記５に記載の方法。
【００９５】
７．第２の要求が、顧客からの、コンピューティング環境のホストサーバコンピュータのインスタンスを起動する要求に少なくとも部分的に基づく、付記１〜６のいずれかに記載の方法。
【００９６】
８．コンピューティング環境のホストサーバコンピュータの仮想マシンのインスタンスを起動することと、
構成されたＦＰＧＡを、仮想マシンのインスタンスによって利用可能にすることと、をさらに含む、付記１〜７のいずれかに記載の方法。
【００９７】
９．命令を含むコンピュータ可読記憶媒体であって、該命令が実行されると、コンピュータシステムに、
構成可能なハードウェアのアプリケーション論理の仕様を使用して、構成可能なハードウェアの構成データを生成する第１の要求を受信させることと、
構成可能なハードウェアの構成データを生成させることであって、構成データが、アプリケーション論理を実装するためのデータを含む、ことと、
構成可能なハードウェアのインスタンスを備えるホストサーバコンピュータに構成データを伝送する第２の要求を受信させることと、
第２の要求に応じて、構成データをホストサーバコンピュータに伝送させることと、を行わせる、コンピュータ可読記憶媒体。
【００９８】
１０．アプリケーション論理の仕様が、ソースコードを含み、構成可能なハードウェアの構成データを生成することが、ソースコードを合成して、アプリケーション論理のネットリストを生成することを含む、付記９に記載のコンピュータ可読記憶媒体。
【００９９】
１１．アプリケーション論理の仕様が、ネットリストを含み、および構成可能なハードウェアの構成データを生成することが、アプリケーション論理のネットリストをルーティングすることを含む、付記９または１０に記載のコンピュータ可読記憶媒体。
【０１００】
１２．構成可能なハードウェアの構成データを生成することが、アプリケーション論理を構成可能なハードウェアのホスト論理と統合することを含み、ホスト論理が、アプリケーション論理の動作を抑制するように構成される、付記９〜１１のいずれかに記載のコンピュータ可読記憶媒体。
【０１０１】
１３．構成可能なハードウェアの構成データを生成することが、アプリケーション論理が、ホスト論理要件と互換性があることを検証することを含む、付記１２に記載のコンピュータ可読記憶媒体。
【０１０２】
１４．構成可能なハードウェアの構成データを生成することが、ハードウェア参照識別子を構成データに割り当てることを含み、第２の要求が、ハードウェア参照識別子を含む、付記９〜１３のいずれかに記載のコンピュータ可読記憶媒体。
【０１０３】
１５．第２の要求が、ダウンロードする構成データを識別するためのハードウェア参照識別子を含む、付記１４に記載のコンピュータ可読記憶媒体。
【０１０４】
１６．命令が、実行されると、コンピュータシステムに、
ハードウェア参照識別子を仮想マシンイメージ識別子に関連付けることをさらに行わせ、第２の要求が、ダウンロードする構成データを識別するための仮想マシンイメージ識別子を含む、付記１４または１５に記載のコンピュータ可読記憶媒体。
【０１０５】
１７．第１の要求が、構成可能なハードウェアのアプリケーション論理の仕様の暗号化されたバージョンの参照を含む、付記９〜１６のいずれかに記載のコンピュータ可読記憶媒体。
【０１０６】
１８．構成可能なハードウェアが、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を備え、構成データが、ＦＰＧＡを構成するためのビットストリームを含む、付記９〜１７のいずれかに記載のコンピュータ可読記憶媒体。
【０１０７】
１９．命令が、実行されると、コンピュータシステムに、
構成可能なハードウェアの構成データと関連付けられたタイミングレポートを生成させることと、
タイミングレポートを、第１の要求によって指定される場所に記憶することと、をさらに行わせる、付記９〜１８のいずれかに記載のコンピュータ可読記憶媒体。
【０１０８】
２０．コンピューティングシステムであって、
データベースと、
データベースに結合された第１のサーバコンピュータで稼働する論理リポジトリサービスであって、論理リポジトリサービスが、
アプリケーション論理の第１の仕様および構成可能なハードウェアのホスト論理の第２の仕様を摂取して、構成可能なハードウェアの構成データを生成することと、
構成データをデータベースに記憶することと、
第２のサーバコンピュータから構成データの要求を受信することと、
第２のサーバコンピュータに構成データを伝送することと、を行うように構成される、論理リポジトリサービスと、を備える、コンピューティングシステム。
【０１０９】
２１．第１の仕様および第２の仕様を摂取することが、アプリケーション論理を合成およびルーティングすることを含む、付記２０に記載のコンピューティングシステム。
【０１１０】
２２．データベースが、構成可能なハードウェアイメージ識別子、仮想マシンイメージ識別子、または製品コード、のうちの１つ以上によってインデックスが付けられた構成可能なハードウェアのライブラリを備える、付記２０または２１に記載のコンピューティングシステム。
【０１１１】
開示される方法、装置、およびシステムは、いかなる形であれ、限定するものと解釈されるべきではない。代わりに、本開示は、単独で、および互いとの種々の組み合わせおよび副次的な組み合わせで、種々の開示された実施形態の全ての新規かつ非自明な特徴および態様を目的とする。開示される方法、装置、およびシステムは、任意の特定の態様または特徴またはそれらの組み合わせに限定されず、開示される実施形態は、任意の１つ以上の特定の利点が存在すること、または問題を解決することを必要としない。
【０１１２】
開示される発明の原理を適用することができる数多くの可能な実施形態を考慮して、例示される実施形態は、本発明の好適な例に過ぎないものであり、また、本発明の範囲を限定するものとみなすべきではないことを認識されるべきである。むしろ、本発明の範囲は、特許請求の範囲によって定義される。したがって、発明者らは、発明者らの発明として、これらの特許請求の範囲に該当する全てのものを主張する。
【図１】
2019537099.tif 000003
【図２】
2019537099.tif 000004
【図３】
2019537099.tif 000005
【図４】
2019537099.tif 000006
【図５】
2019537099.tif 000007
【図６】
2019537099.tif 000008
【図７】
2019537099.tif 000009
【図８】
2019537099.tif 000010
【国際調査報告】
2019537099.tif 000011
2019537099.tif 000012