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