(57)【要約】  コンピュータシステムのプログラマブル集積回路（ＩＣ）を構成する例示の方法は、コンピュータシステムのバスとインターフェース接続するように構成されたシェル回路を実装するための、プログラマブルＩＣのプログラマブルファブリックの第１の領域を選択すること（７０２）と、シェル回路とインターフェース接続するように構成されたアプリケーション回路を実装するための、プログラマブルファブリックの第２の領域を選択すること（７０４）と、第１の領域と第２の領域との間に配設される、プログラマブルファブリックの一組の未設定タイルを含むフェンス領域を提供すること（７０６）と、第１の領域、第２の領域、およびフェンス領域を有する回路設計のためのコンフィギュレーションデータを生成すること（７１４）と、コンフィギュレーションデータをプログラマブルＩＣにロードすること（７１６）と、を含む。【選択図】図８
2021509192.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムにおいてプログラマブル集積回路（ＩＣ）を構成する方法であって、
前記コンピュータシステムのバスとインターフェース接続するように構成されたシェル回路を実装するための、前記プログラマブルＩＣのプログラマブルファブリックの第１の領域を選択することと、
前記シェル回路とインターフェース接続するように構成されたアプリケーション回路を実装するための、前記プログラマブルファブリックの第２の領域を選択することと、
前記第１の領域と前記第２の領域との間に配設される、前記プログラマブルファブリックの一組の未設定タイルを含むフェンス領域を提供することと、
前記第１の領域、前記第２の領域、および前記フェンス領域を有する回路設計のためのコンフィギュレーションデータを生成することと、
前記コンフィギュレーションデータを前記プログラマブルＩＣにロードすることと
を含む、方法。
【請求項２】
前記アプリケーション回路が、前記フェンス領域を通した接続を使用して、前記シェル回路に結合される、請求項１に記載の方法。
【請求項３】
前記アプリケーション回路の論理およびルーティングが、前記第２の領域内に含まれ、前記シェル回路の論理およびルーティングが、前記第１の領域内に含まれ、前記アプリケーション回路の入出力（ＩＯ）ポートが、接続によって前記シェル回路のＩＯポートに結合される、請求項１に記載の方法。
【請求項４】
クロック信号を前記シェル回路および前記アプリケーション回路に提供するように構成されたグローバルクロック論理を実装するための、前記プログラマブルファブリックの第３の領域を選択すること
を更に含む、請求項１に記載の方法。
【請求項５】
前記シェル回路が、前記プログラマブルＩＣをモニタリングし、エラー条件の検出に応答して前記コンピュータシステムに信号伝送するように構成されたシステムモニタを含む、請求項１に記載の方法。
【請求項６】
前記シェル回路が、前記プログラマブルＩＣのコンフィギュレーションデータをリードバックし、前記第１の領域、前記第２の領域、および前記フェンス領域の完全性を検証するように構成されたランタイムチェック回路を含む、請求項１に記載の方法。
【請求項７】
前記ランタイムチェック回路が、前記プログラマブルＩＣの内部コンフィギュレーションアクセスポートに結合される、請求項６に記載の方法。
【請求項８】
コンピューティングシステムであって、
処理システムと、
前記処理システムに結合されるハードウェアアクセラレータであって、
前記処理システムのバスとインターフェース接続するように構成されたシェル回路を実装するための、プログラマブルファブリックの第１の領域と、前記シェル回路とインターフェース接続するように構成されたアプリケーション回路を実装するための第２の領域と、前記第１の領域と前記第２の領域との間に配設される、前記プログラマブルファブリックの一組の未設定タイルを含むフェンス領域とを有するアクセラレーション回路を用いて構成されるプログラマブル集積回路（ＩＣ）
を含む、ハードウェアアクセラレータと、
前記処理システム上で実行されるソフトウェアプラットフォームであって、前記ハードウェアアクセラレータとインターフェース接続するように前記処理システムによって実行可能なプログラムコードを含む、ソフトウェアプラットフォームと
を備える、コンピューティングシステム。
【請求項９】
前記アプリケーション回路が、前記フェンス領域を通した接続を使用して、前記シェル回路に結合される、請求項８に記載のコンピューティングシステム。
【請求項１０】
前記アプリケーション回路の論理およびルーティングが、前記第２の領域内に含まれ、前記シェル回路の論理およびルーティングが、前記第１の領域内に含まれ、前記アプリケーション回路の入出力（ＩＯ）ポートが、接続によって前記シェル回路のＩＯポートに結合される、請求項８に記載のコンピューティングシステム。
【請求項１１】
前記シェル回路が、前記プログラマブルＩＣをモニタリングし、エラー条件の検出に応答して前記コンピュータシステムに信号伝送するように構成されたシステムモニタを含む、請求項８に記載のコンピューティングシステム。
【請求項１２】
前記シェル回路が、前記プログラマブルＩＣのコンフィギュレーションデータをリードバックし、前記第１の領域、前記第２の領域、および前記フェンス領域の完全性を検証するように構成されたランタイムチェック回路を含む、請求項８に記載のコンピューティングシステム。
【請求項１３】
前記ランタイムチェック回路が、前記プログラマブルＩＣの内部コンフィギュレーションアクセスポートに結合される、請求項１２に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示の実施例は、一般に、電子回路に関し、特に、データセンタにおけるプログラマブルデバイス向けのセキュリティに関する。
【背景技術】
【０００２】
データセンタの計算資源としての、フィールドプログラマブルゲートアレイなど、プログラマブルデバイスの近年の発展により、セキュリティ上の懸念が増大している。一般的な使用では、データセンタのアプリケーションは、ハードウェアおよびソフトウェアプロセスのスタックの上位で稼働する。ハードウェアは、例えば、ハードウェアアクセラレーションの目的で使用される、プログラマブルデバイスを含むことができる。プログラマブルデバイス内の機能が、ソフトウェア（例えば、オペレーティングシステム、ハイパーバイザなど）を迂回して、他のハードウェアに直接アクセスすることができる場合に、懸念が生じる。プログラマブルデバイスが、極秘データをインターセプトし、物理メモリ位置を制御することができる場合、プログラマブルデバイスを使用して、サーバを侵害し、場合によってはデータセンタ全体を乗っ取ることができてしまう。更に、プログラマブルデバイスがオペレーティングシステム／ハイパーバイザを通してデータを渡す必要がある（例えば、プロセッサが全てのアドレス変換を管理する必要がある）場合、プログラマブルデバイス計算の性能およびパワー上の利点は劇的に低減される。
【発明の概要】
【０００３】
データセンタにおけるプログラマブルデバイス向けのセキュリティの技術について記載する。一例では、コンピュータシステムにおいてプログラマブル集積回路（ＩＣ）を構成する方法は、コンピュータシステムのバスとインターフェース接続するように構成されたシェル回路を実装するための、プログラマブルＩＣのプログラマブルファブリックの第１の領域を選択することと、シェル回路とインターフェース接続するように構成されたアプリケーション回路を実装するための、プログラマブルＩＣのプログラマブルファブリックの第２の領域を選択することと、第１の領域と第２の領域との間に配設される、プログラマブルファブリックの一組の未設定タイルを含むフェンス領域を提供することと、第１の領域、第２の領域、およびフェンス領域を有する回路設計のためのコンフィギュレーションデータを生成することと、コンフィギュレーションデータをプログラマブルＩＣにロードすることと、を含む。
【０００４】
命令が格納された非一時的コンピュータ可読媒体であって、命令は、プロセッサによって実行されると、コンピュータシステムにおいてプログラマブル集積回路（ＩＣ）を構成する方法であって、コンピュータシステムのバスとインターフェース接続するように構成されたシェル回路を実装するための、プログラマブルＩＣのプログラマブルファブリックの第１の領域を選択することと、シェル回路とインターフェース接続するように構成されたアプリケーション回路を実装するための、プログラマブルＩＣのプログラマブルファブリックの第２の領域を選択することと、第１の領域と第２の領域との間に配設される、プログラマブルファブリックの一組の未設定タイルを含むフェンス領域を提供することと、第１の領域、第２の領域、およびフェンス領域を有する回路設計のためのコンフィギュレーションデータを生成することと、コンフィギュレーションデータをプログラマブルＩＣにロードすることと、を含む、方法をプロセッサに実施させる。
【０００５】
コンピューティングシステムは、処理システムと、処理システムに結合されるハードウェアアクセラレータであって、処理システムのバスとインターフェース接続するように構成されたシェル回路を実装するための、プログラマブルファブリックの第１の領域と、シェル回路とインターフェース接続するように構成されたアプリケーション回路を実装するための第２の領域と、第１の領域と第２の領域との間に配設される、プログラマブルファブリックの一組の未設定タイルを含むフェンス領域とを有するアクセラレーション回路を用いて構成されるプログラマブル集積回路（ＩＣ）を含む、ハードウェアアクセラレータと、処理システム上で実行されるソフトウェアプラットフォームであって、ハードウェアアクセラレータとインターフェース接続するように処理システムによって実行可能なプログラムコードを含む、ソフトウェアプラットフォームと、を含む。
【０００６】
これらおよび他の態様は、以下の詳細な説明を参照して理解することができる。
【０００７】
上記に列挙した特徴を詳細に理解することができるような形式で、上記で簡潔に概要を述べた、更に詳細な説明が、実装例を参照することによって行われ得、それらのうちのいくつかは、添付の図面に例示されている。しかしながら、添付の図面は、典型的な実装例のみを例示しており、したがって、その範囲を限定するものと見なされるべきではないことが留意されるべきである。
【図面の簡単な説明】
【０００８】
【図１】一実施例によるコンピューティングシステムを示すブロック図である。
【図２】一実施例によるアクセラレーション回路を示すブロック図である。
【図３】一実施例による設計ツールを示すブロック図である。
【図４】一実施例によるプログラマブルＩＣを示すブロック図である。
【図５】一実施例によるプログラマブルＩＣのシステム・オン・チップ（ＳｏＣ）実装を示すブロック図である。
【図６】プログラマブルＩＣのフィールドプログラマブルゲートアレイ（ＦＰＧＡ）実装を示す図である。
【図７】一実施例によるコンピュータシステムのプログラマブルＩＣを構成する方法を示すフローチャートである。
【図８】一実施例による回路設計を示すブロック図である。
【発明を実施するための形態】
【０００９】
理解を容易にするため、可能な場合は、図面に共通している同一の要素を指定するのに同一の参照番号が使用されている。１つの実施例の要素が、他の実施例に有益に組み込まれ得ることが想定される。
【００１０】
以下、様々な特徴について図面を参照して記載する。図面は縮尺通りに描かれていることも描かれていないこともあり、類似の構造または機能の要素は、図面全体を通して同様の参照番号で表されることに留意すべきである。図面は単に特徴の説明を容易にするためのものであることに留意すべきである。図面は、請求される発明の包括的な説明として、または請求される発明の範囲に対する限定として意図されるものではない。加えて、図示される実施例は、図示される態様または利点の全てを有するとは限らない。特定の実施例と関連して記載される態様または利点は、必ずしもその実施例に限定されるものではなく、例示されていない場合でも、または明示的に記載されていない場合でも、他のいずれかの実施例において実施されることが可能である。
【００１１】
データセンタにおけるプログラマブルデバイス向けのセキュリティの技術について記載する。フィールドプログラマブルゲートアレイ（ＦＰＧＡ）などのプログラマブルデバイスは、データセンタのハードウェアとして使用された場合、不安定な場合がある。例えば、ハードウェアアクセラレータなどとして使用されるＦＰＧＡは、物理アドレスを取り扱う。ＦＰＧＡにおけるユーザ定義の論理がこれらのアドレスにアクセスできる場合、その論理は特権状態を操作することができる。これにより、データセンタにおけるソフトウェアプラットフォームのセキュリティが弱体化する。それに加えて、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）エクスプレス（ＰＣＩｅ）バススレーブは、マスタとなり、バスの任意のデータにアクセスすることができる。ＦＰＧＡにおけるユーザ定義の論理がＰＣＩｅバスに接続する場合、これはデータをＦＰＧＡに渡し、結果を取得するための普通のものであるが、論理は特権状態を操作することができ、プロセッサを含むＰＣＩｅバスの他のデバイスのセキュリティを侵害する可能性がある。これによって、ソフトウェアシステムのセキュリティが更に弱体化する。別の例では、悪徳なまたは無能力のアプリケーション開発者は、ＦＰＧＡの最大限度を侵害するかまたは過熱させる電流スパイクを含むアプリケーションを構築するか、性能を低下させるか、ＦＰＧＡを使用不能にするか、またはＦＰＧＡもしくは他のハードウェアの故障を引き起こす場合がある。
【００１２】
上述した最初の２つの懸念事項は、特権アクセスをユーザアクセスと分離する際の１つの懸念が明らかになったものである。本明細書の実施例に記載する解決策には、これらの異なるレベルの特権を分離する技術を実行することが関与する。上述の第３の懸念事項には、後述するように対処することもできる、ハードウェアの物理的操作が関与する。
【００１３】
図１は、一実施例によるコンピューティングシステム１００を示すブロック図である。コンピューティングシステム１００はデータセンタなどに位置することができる。データセンタは、コンピューティングシステム１００と動揺に構成された複数のコンピューティングシステムを含むことができる。コンピューティングシステム１００はサーバコンピュータ（サーバ１０２）を含む。サーバ１０２は、ハードウェアプラットフォーム（「ハードウェア１０４」）と、ハードウェア１０４で実行するソフトウェアプラットフォーム（「ソフトウェア１０６」）とを含む。ハードウェア１０４は、処理システム１１０と、システムメモリ１１６と、記憶デバイス（「記憶装置１１８」）と、ハードウェアアクセラレータ１２２とを含む。ソフトウェア１０６は、オペレーティングシステム（ＯＳ）１４４と、ドライバソフトウェア（ドライバ１４６）と、アプリケーション１５０とを含む。
【００１４】
処理システム１１０は、マイクロプロセッサ１１２と、サポート回路１１４と、周辺バス１１５とを含む。マイクロプロセッサ１１２は、ｘ８６ベースプロセッサ、ＡＲＭ（登録商標）ベースプロセッサなど、任意のタイプの汎用中央処理装置（ＣＰＵ）であることができる。マイクロプロセッサ１１２は、１つまたは複数のコアおよび関連回路構成（例えば、キャッシュメモリ、メモリ管理装置（ＭＭＵ）、割込みコントローラなど）を含むことができる。マイクロプロセッサ１１２は、本明細書に記載する１つまたは複数の動作を実施し、システムメモリ１１６および／または記憶装置１１８に格納することができる、プログラムコードを実行するように構成される。サポート回路１１４は、マイクロプロセッサ１１２と協働して、マイクロプロセッサ１１２、システムメモリ１１６、記憶装置１１８、ハードウェアアクセラレータ１２２、または他の任意の周辺デバイスの間のデータフローを管理する、様々なデバイスを含むことができる。例えば、サポート回路１１４は、チップセット（例えば、ノースブリッジ、サウスブリッジ、プラットフォームホストコントローラなど）、電圧調整器、ファームウェア（例えば、ＢＩＯＳ）などを含むことができる。サポート回路１１４は、マイクロプロセッサ１１２と、ハードウェアアクセラレータ１２２などの様々な周辺機器が接続される周辺バス１１５との間の、データフローを管理する。いくつかの例では、マイクロプロセッサ１１２は、チップセット（例えば、ノースブリッジ、サウスブリッジなど）の機能性の全てまたは実質的に一部分を吸収する、システム・イン・パッケージ（ＳＩＰ）、システムオンチップ（ＳｏＣ）などであることができる。周辺バスは、ペリフェラルコンポーネントインターコネクトエクスプレス（ＰＣＩｅ）など、拡張バス規格を実現することができる。この例では、処理システム１１０はハードウェアアクセラレータ１２２とは別個に示されている。更に後述する他の例では、処理システム１１０およびハードウェアアクセラレータ１２２は、同じ集積回路（ＩＣ）上に実装することができる。
【００１５】
システムメモリ１１６は、実行可能命令およびデータなどの情報を格納し検索することを可能にするデバイスである。システムメモリ１１６は、例えば、ダブルデータレート（ＤＤＲ）ダイナミックＲＡＭ（ＤＲＡＭ）など、１つまたは複数のランダムアクセスメモリ（ＲＡＭ）モジュールを含むことができる。記憶装置１１８は、ローカル記憶デバイス（例えば、１つまたは複数のハードディスク、フラッシュメモリモジュール、固体状態ディスク、および光学ディスク）、ならびに／あるいはコンピューティングシステム１０２が１つまたは複数のネットワークデータ記憶システムと通信できるようにする記憶インターフェースを含む。ハードウェア１０４は、グラフィックカード、ユニバーサルシリアルバス（ＵＳＢ）インターフェースなど、コンピューティングシステムの他の様々な従来のデバイスおよび周辺機器を含むことができる。
【００１６】
ハードウェアアクセラレータ１２２は、プログラマブルＩＣ  １２８と、光学不揮発性メモリ１２４と、ＲＡＭ  １２６とを含む。プログラマブルＩＣ  １２８は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）など、またはＦＰＧＡなどを有するＳｏＣであることができる。ＮＶＭ  １２４は、フラッシュメモリなど、任意のタイプの不揮発性メモリを含むことができる。ＲＡＭ  １２６はＤＤＲ  ＤＲＡＭなどを含むことができる。プログラマブルＩＣ  １２８は、ＮＶＭ  １２４およびＲＡＭ  １２６に結合される。プログラマブルＩＣ  １２８はまた、処理システム１１０の周辺バス１１５に結合される。
【００１７】
ＯＳ  １４４は、Ｌｉｎｕｘ（登録商標）、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ｍａｃ  ＯＳ（登録商標）など、当該分野で知られている任意のコモディティオペレーティングシステムであることができる。ドライバ１４６は、アプリケーションプログラミングインターフェース（ＡＰＩ）を、コマンドおよび制御のためにハードウェアアクセラレータ１２２に提供する。アプリケーション１５０は、ドライバ１４６を通してハードウェアアクセラレータ１２２を呼び出して何らかの作業を実施させる、マイクロプロセッサ１１２で実行するソフトウェアを含む。アプリケーション１５０は、一部の機能をハードウェアアクセラレータ１２２にオフロードする、ニューラルネットワーク、ビデオ処理、ネットワーク処理などのタイプのアプリケーションを含むことができる。
【００１８】
動作の際、プログラマブルＩＣ  １２８はアクセラレーション回路１３０を用いて構成される。アクセラレーション回路１３０は、一般に、シェル回路１３０Ａとアプリケーション回路１３０Ｂとを含む。例えば、アクセラレーション回路１３０は、スタティック領域１３４とプログラマブル領域１３６とを使用して実現することができる。スタティック領域１３４はインターフェース回路１４０を含む。プログラマブル領域１３６はユーザ論理１３８を含むことができる。シェル回路１３０Ａはスタティック領域１３４を使用して実現され、アプリケーション回路１３０Ｂはプログラマブル領域１３６を使用して実現される。別の例では、シェル回路１３０Ａはまた、プログラマブル領域１３６の一部分を使用して実現することもできる。したがって、いくつかの例では、プログラマブル領域１３６はいくつかのインターフェース回路も含む。いくつかの例では、アクセラレーション回路１３０は、１つを超えるプログラマブル領域１３６を含むことができ、それらはそれぞれ、ユーザ論理１３８を用いて個々に構成することができる。プログラマブルＩＣ  １２８のコンフィギュレーションデータは、ＮＶＭ  １２４が存在する場合はそこに格納することができる。ＮＶＭ  １２４が省略される場合、コンフィギュレーションデータは、記憶装置１１８など、ハードウェアアクセラレータ１２２の外部に格納することができる。プログラマブルＩＣ  １２８のコンフィギュレーションデータは、サーバ１０２の外部のコンピュータシステムで実行することができる、設計ツール１０８によって生成することができる。設計ツール１０８は、回路設計をコンパイルしてコンフィギュレーションデータにするのに使用することができ、そのデータは次に、サーバ１０２に送信され格納されて、プログラマブルＩＣ  １２８が構成される。
【００１９】
スタティック領域１３４は、その回路構成がプログラマブル領域１３６のリコンフィギュレーションにわたって一定のままであるという点で「スタティック」である。一例では、インターフェース回路１４０は、ＰＣＩｅエンドポイント回路、ダイレクトメモリアクセス（ＤＭＡ）コントローラ、相互接続部、メモリコントローラ、メモリインターフェース回路（例えば、ＤＤＲインターフェース）、デカップラー回路（パーシャルリコンフィギュレーションに対応する）、フラッシュプログラマ、デバッグ回路などを含む。
【００２０】
ソフトウェアシステムは、プロセスレベルで特権をユーザコードから分離させる。いくつかのプロセスは特権モードで稼働し、特権モードへの移行はＯＳへのスーパーバイザコールによって実行される。特権プロセスは、ユーザプロセスに対しては利用不能なリソースへのアクセスを有する。例えば、ユーザプロセスは、仮想アドレスへのアクセスしか有さず、物理メモリアドレスへのアクセスは有さない。この分離は、ハイパーバイザおよびＯＳによって実行される。
【００２１】
ＦＰＧＡベースの計算は空間処理として考えることができ、計算は、空間内の単一の場所における動作の時間的シーケンスによって実現される従来の（「時間的」）計算とは対照的に、物理的ユニットによって実現される。同様に、ＦＰＧＡの時間的解法では、ＦＰＧＡデバイスにおける特権空間、およびユーザ空間が存在する。図１の例では、シェル回路１３０Ａは特権空間を備え、アプリケーション回路１３０Ｂはユーザ空間を備える。ユーザ空間が非特権データへのアクセスしか有さない限り、システムが侵害される可能性はない。
【００２２】
一例では、シェル回路１３０Ａは、アプリケーション回路１３０Ｂにアクセス可能な信号を制御する。アプリケーション回路１３０Ｂは、ユーザが定義してもよい、アクセラレーション回路１３０の一部にすぎない。シェル回路１３０Ａは、管理者によって、または管理者の指示で設計者によって定義される。処理システム１１０からのデータおよびアドレスはＰＣＩｅバスに到達する。しかしながら、アプリケーション回路１３０ＢはＰＣＩｅ信号に対するアクセスを有さない。その代わりに、データおよびアドレスはシェル回路１３０Ａによってインターセプトされ、それによってアプリケーションがＰＣＩｅバスに無許可でアクセスするのを防ぐことができる。同様に、アプリケーション回路１３０Ｂは、ハードウェアアクセラレータ１２２にとってローカルなＲＡＭ  １２６にアクセスし、サーバ１０２のシステムメモリ１１６にはアクセスしなくてもよい。
【００２３】
シェル回路１３０Ａはまた、通信リンクを抽象化して、アプリケーション回路１３０Ｂから分離する。シェル回路１３０Ａは、アプリケーション回路１３０Ｂにおける「特権」モード動作を「非特権動作」から分離する。この分離は、コンピュータにおけるプロセスの分離と類似している。特権シェル回路１３０Ａは、ＰＣＩｅ接続を保護し、アプリケーション回路１３０Ｂのクロッキングを管理し、プログラマブルＩＣ  １２８の活動をモニタリングする。
【００２４】
図２は、一実施例によるアクセラレーション回路１３０を示すブロック図である。アクセラレーション回路１３０は、インターフェース回路１４０とユーザ論理１３８とを含む。この例では、インターフェース回路１４０は、ＰＣＩｅエンドポイント回路（「ＰＣＩｅエンドポイント２０２」）と、ＤＭＡコントローラ２０４と、相互接続部回路（「相互接続部２０６」）と、メモリコントローラ２１０と、メモリインターフェース２１２とを含む。インターフェース回路１４０は、明瞭にするために省略している、他のサポート回路（例えば、デカップラー回路、デバッグ回路など）を含むことができる。ＰＣＩｅエンドポイント２０２は、物理的インターフェースを周辺バス１１５に提供する。ＤＭＡコントローラ２０４は、ＲＡＭ  １２６、メモリ１４２、およびカーネル１３８に対するＤＭＡ動作を容易にする。相互接続部２０６は、ＤＭＡコントローラ２０４をメモリ１４２に、またカーネル１３８の入力インターフェースに結合する。相互接続部２０６は、ユーザ論理２３８およびメモリコントローラ２１０の出力インターフェースに結合される。メモリコントローラ２１０はメモリインターフェース２１２に結合される。メモリインターフェース２１２はＲＡＭ１２６に結合される（図１に図示）。
【００２５】
動作の際、ドライバ１４６は、ＤＭＡコントローラ２０４を通して直接ユーザ論理１３８にアクセスすることができる。ユーザ論理１３８は、メモリコントローラ２１０を通してＲＡＭ  １２６にアクセスすることができる。システムメモリ１１６とＲＡＭ  １２６との間のＤＭＡ動作を使用して、ソフトウェア１０６とユーザ論理１３８との間でデータを交換することができる。
【００２６】
図１および図２を参照すると、回路設計者は、設計ツール１０８を使用して、アクセラレーション回路１３０のコンフィギュレーションデータを生成する。ユーザ論理が特権データにアクセスしないことを担保するため、ユーザ論理は設計時に特権シェル論理から分離される。一例では、ユーザは、アプリケーション回路１３０Ｂの一部である論理のみを定義する。アプリケーション回路１３０Ｂは、プログラマブルＩＣ  １２８における信号の限定された組のみへのアクセスを提供する。一例では、シェル回路１３０Ａおよびアプリケーション回路１３０Ｂはコンパイルされ、パーシャルリコンフィギュレーション（ＰＲ）設計フローを使用して別個の領域に物理的に配置される。この分離によって、領域間の通信が、設計ファイル内のユーザがアクセスを有する信号のみに限定される。
【００２７】
この論理的隔離を使用して、シェル論理は極秘システムデータに、例えばＰＣＩｅバス、未加工パケット情報、および／または物理メモリアドレスに、インターフェース接続する。シェルは、ユーザ論理に関するインターフェースを、例えばアプリケーションおよび仮想アドレスのためのデータパケットをエクスポートする。シェルは、制限された一組の許可されたＰＣＩｅアクセス動作、および制限された一組のメモリアドレスを提供する。この分離は、デザインツール１０８での設計中、ユーザ論理を制限された信号のみに制限することによって実行される。論理的隔離は、デザイン上の制約を使用して遂行することができる。ユーザ領域を極秘データに接続しないため、コンパイル中、デザインツール１０８はそのデータをユーザ領域に提供しない。
【００２８】
プログラマブルＩＣ  １２８のためのコンフィギュレーションデータは、他の任意のデータのような暗号化方法を用いて保護することができる。デザインツール１０８によって実施されるコンパイルプロセスは、コンパイルされたビットストリームに対する認証コードを計算する。一例では、公開鍵スキームによって、プログラマブルＩＣ  １２８は鍵ペアの公開部分を観察可能なメモリで保持することができる。論理的隔離は、デザインツール１０８においてコンパイルプロセスを制御することによって提供される。次のステップは、適切にコンパイルされた設計のみがプログラマブルＩＣ  １２８にロードされるのを担保することである。一例では、ビットストリームセキュリティ機構を使用して達成される。ユーザ論理およびシェル論理は、デザインツール１０８の制御された実行で統合され、それによって設計が認証される。プログラマブルＩＣ  １２８は、公開鍵を使用して設計の真正性をチェックして、設計が改ざんされていないことを担保する。
【００２９】
上述のセキュリティフローの使用には、プログラマブルＩＣ  １２８が復号鍵および認証鍵を用いてプログラムされることが必要である。これはデータセンタ環境で行うことができる。１つの使用モデルでは、データセンタが構築されるとき、全てのプログラマブルＩＣ  １２８に適切な鍵が与えられる（例えば、ｅＦｕｓｅなどを使用してプログラムされる）。コンフィギュレーションビットストリームは、ＮＶＭ  １２４に送達され、コンフィギュレーションプロセスを始動することによってプログラマブルＩＣ  １２８にロードされる。
【００３０】
別の使用モデルでは、シェル回路１３０Ａは、パーシャルリコンフィギュレーションメカニズムを使用したユーザアプリケーション領域のチェックおよびロードに関与する。このモデルでは、全てのシステムは最初に、シェル回路１３０Ａのみを含む設計で構成される。シェル回路１３０Ａは、ユーザ領域パーシャルリコンフィギュレーションビットストリームを受信し、内部コンフィギュレーションアクセスポートを通してそれをロードする。内部コンフィギュレーションアクセスポートは、既存のセキュリティ機構を使用することができ、またはシェル回路１３０Ａは、パーシャルビットストリームをロードする前に、入ってくるユーザ論理を認証することができる。このモデルの１つの利点は、シェル回路１３０Ａが、プログラマブル領域１３６内部（例えば、ユーザ論理１３８の複数の例が存在し得る）で、複数の独立したユーザアプリケーションを動作させることができる点である。
【００３１】
図３は、一実施例によるデザインツール１０８を示すブロック図である。デザインツール１０８は、ハードウェアプラットフォーム３０４およびソフトウェアプラットフォーム３０６を有するコンピュータ３０２を含む。ハードウェアプラットフォーム３０４は、ＣＰＵ  ３０８と、メモリ３１０と、記憶装置デバイス３１２と、入出力（ＩＯ）デバイス３１４とを含む。ＣＰＵ  ３０８は任意のタイプのマイクロプロセッサであることができる。メモリ３１０は、例えば、ＤＤＲ  ＤＲＡＭなど、１つまたは複数のＲＡＭモジュールを含むことができる。記憶装置３１２は、ローカル記憶デバイス（例えば、１つまたは複数のハードディスク、フラッシュメモリモジュール、固体状態ディスク、および光学ディスク）、ならびに／あるいはコンピュータ３０２が１つまたは複数のネットワークデータ記憶システムと通信できるようにする記憶インターフェースを含む。ＩＯデバイス３１４はコンピュータ３０２との通信を可能にする。ソフトウェアプラットフォーム３０６は、ＯＳ  ３１６と回路デザインツール３１８とを含む。ＯＳ  ３１６は、Ｌｉｎｕｘ（登録商標）、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ｍａｃ  ＯＳ（登録商標）など、当該分野で知られている任意のコモディティオペレーティングシステムであることができる。回路デザインツール３１８は、プログラマブルＩＣをプログラムするのに使用することができる、回路設計を生成するように構成される。ハードウェアアクセラレータデザインツール３２０は、アクセラレーション回路のためのカーネル設計を生成するように構成される。特に、回路設計ツール３１８はコンパイラ３２４を含む。ユーザは、回路設計ツール３１８と相互作用して、アクセラレーション回路１３０のユーザ設計を生成する。コンパイラ３２４はアプリケーション回路イメージを生成する。
【００３２】
図４は、一実施例によるプログラマブルＩＣ  １を示すブロック図である。プログラマブルＩＣ  １は、プログラマブル論理３と、コンフィギュレーション論理２５と、コンフィギュレーションメモリ２６とを含む。プログラマブルＩＣ  １は、不揮発性メモリ２７、ＤＲＡＭ  ２８、および他の回路２９など、外部回路に結合することができる。プログラマブル論理３は、論理セル３０と、サポート回路３１と、プログラマブル相互接続部３２とを含む。論理セル３０は、複数の入力の一般論理関数を実現するように構成することができる回路を含む。サポート回路３１は、送受信機、入出力ブロック、デジタル信号プロセッサ、メモリなどの専用回路を含む。論理セルおよびサポート回路３１は、プログラマブル相互接続部３２を使用して相互接続することができる。論理セル３０をプログラムするための情報、サポート回路３１のパラメータを設定するための情報、およびプログラマブル相互接続部３２をプログラムするための情報は、コンフィギュレーション論理２５によってコンフィギュレーションメモリ２６に格納される。コンフィギュレーション論理２５は、コンフィギュレーションデータを、不揮発性メモリ２７または他の任意のソース（例えば、ＤＲＡＭ  ２８もしくは他の回路２９）から取得することができる。いくつかの例では、プログラマブルＩＣ  １は処理システム２を含む。処理システム２は、マイクロプロセッサ、メモリ、サポート回路、入出力回路などを含むことができる。本明細書に記載する技術は、単一のＩＣ（例えば、プログラマブルＩＣ）、ＳｏＣ（例えば、図５に示され、後述するようなもの）を使用して、またはプロセッサ、メモリ、およびプログラマブルＩＣが別個のデバイスであるマルチチップシステムにおいて、実現できることが理解されるべきである。全ての場合において、プログラマブルＩＣ内のハードウェア構成要素（またはＳｏＣのプログラマブル論理）同士の通信は、上述したように、シェル回路に接続する。
【００３３】
図５は、一実施例によるプログラマブルＩＣ  １のシステムオンチップ（ＳｏＣ）実装を示すブロック図である。この例では、プログラマブルＩＣ  １は、処理システム２とプログラマブル論理３とを含む。処理システム２は、リアルタイム処理装置（ＲＰＵ）４、アプリケーション処理装置（ＡＰＵ）５、グラフィック処理装置（ＧＰＵ）６、コンフィギュレーションおよびセキュリティユニット（ＣＳＵ）１２、プラットフォーム管理装置（ＰＭＵ）１２２など、様々な処理装置を含む。処理システム２はまた、オン・チップ・メモリ（ＯＣＭ）１４、送受信機７、周辺機器８、相互接続部１６、ＤＭＡ回路９、メモリコントローラ１０、周辺機器１５、および多重化ＩＯ（ＭＩＯ）回路１３など、様々なサポート回路を含む。処理装置およびサポート回路は相互接続部１６によって相互接続される。ＰＬ  ３も相互接続部１６に結合される。送受信機７は外部ピン２４に結合される。ＰＬ  ３は外部ピン２３に結合される。メモリコントローラ１０は外部ピン２２に結合される。ＭＩＯ  １３は外部ピン２０に結合される。ＰＳ  ２は外部ピン２１に結合される。ＡＰＵ  ５は、ＣＰＵ  １７と、メモリ１８と、サポート回路１９とを含むことができる。
【００３４】
図５の例では、プログラマブルＩＣ  １は、ハードウェアアクセラレータ１２２で使用することができ、上述したように機能することができる。アクセラレータ回路１３０は、ＰＬ  ３でプログラムし、上述したように機能することができる。別の例では、上述したハードウェア１０４の機能性は、コンピューティングシステムのハードウェアを通してではなく、ＰＳ  ２を使用して実現することができる。そのような場合、ソフトウェア１０６は、ＰＳ  ２で実行し、上述したように機能する。
【００３５】
ＰＳ  ２を参照すると、処理装置はそれぞれ、１つまたは複数の中央処理装置（ＣＰＵ）と、メモリ、割込みコントローラ、直接メモリアクセス（ＤＭＡ）コントローラ、メモリ管理装置（ＭＭＵ）、浮動小数点装置（ＦＰＵ）などの関連回路とを含む。相互接続部１６は、処理装置を相互接続する、ならびにＰＳ  ２の他の構成要素を処理装置に相互接続するように構成された、様々なスイッチ、バス、通信リンクなどを含む。
【００３６】
ＯＣＭ  １４は、ＰＳ  ２全体に分配することができる、１つまたは複数のＲＡＭモジュールを含む。例えば、ＯＣＭ  １４は、バッテリーバックアップＲＡＭ（ＢＢＲＡＭ）、密結合メモリ（ＴＣＭ）などを含むことができる。メモリコントローラ１０は、外部ＤＲＡＭにアクセスするＤＲＡＭインターフェースを含むことができる。周辺機器８、１５は、ＰＳ  ２に対するインターフェースを提供する、１つまたは複数の構成要素を含むことができる。例えば、周辺機器１５は、グラフィック処理装置（ＧＰＵ）、ディスプレイインターフェース（例えば、ディスプレイポート、高精細度マルチメディアインターフェース（ＨＤＭＩ）ポートなど）、ユニバーサルシリアルバス（ＵＳＢ）ポート、イーサネットポート、汎用非同期送受信機（ＵＡＲＴ）ポート、シリアルペリフェラルインターフェース（ＳＰＩ）ポート、汎用入出力（ＧＰＩＯ）ポート、シリアルアドバンストテクノロジーアタッチメント（ＳＡＴＡ）ポート、ＰＣＩｅポートなどを含むことができる。周辺機器１５はＭＩＯ  １３に結合することができる。周辺機器８は送受信機７に結合することができる。送受信機７は、シリアライザ／デシリアライザ（ＳＥＲＤＥＳ）回路、ＭＧＴなどを含むことができる。
【００３７】
図６は、プログラマブルＩＣ  １のフィールドプログラマブルゲートアレイ（ＦＰＧＡ）実装例を含み、送受信機３７と、構成可能論理ブロック（「ＣＬＢ」）３３と、ランダムアクセスメモリブロック（「ＢＲＡＭ」）３４と、入出力ブロック（「ＩＯＢ」）３６と、構成および計時論理（「ＣＯＮＦＩＧ／ＣＬＯＣＫＳ」）４２と、デジタル信号処理ブロック（「ＤＳＰ」）３５と、専用入出力ブロック（「Ｉ／Ｏ」）４１（例えば、構成ポートおよびクロックポート）と、デジタルクロックマネージャ、アナログ・デジタル変換器、システムモニタリング論理など、他のプログラマブル論理３９とを含む、多数の異なるプログラマブルタイルを含む。ＦＰＧＡはまた、ＰＣＩｅインターフェース４０、アナログ・デジタル変換器（ＡＤＣ）３８などを含むことができる。
【００３８】
一部のＦＰＧＡでは、各プログラマブルタイルは、図６の上部に含まれる例によって示されるように、同じタイル内のプログラマブル論理素子の入力および出力端子４８への接続を有する、少なくとも１つのプログラマブル相互接続素子（「ＩＮＴ」）４３を含むことができる。各プログラマブル相互接続素子４３はまた、同じタイルまたは他のタイル内の隣接したプログラマブル相互接続素子の相互接続セグメント４９への接続を含むことができる。各プログラマブル相互接続素子４３はまた、論理ブロック間の一般的なルーティングリソース（図示なし）の相互接続セグメント５０への接続を含むことができる。一般的なルーティングリソースとしては、相互接続セグメント（例えば、相互接続セグメント５０）のトラックと、相互接続セグメントを接続するスイッチブロック（図示なし）とを含む、論理ブロック間のルーティングチャネル（図示なし）を挙げることができる。一般的なルーティングリソースの相互接続セグメント（例えば、相互接続セグメント５０）は、１つまたは複数の論理ブロックにまたがることができる。プログラマブル相互接続素子４３は、一般的なルーティングリソースと併せて、図示されるＦＰＧＡのプログラマブル相互接続構造（「プログラマブル相互接続」）を実現する。
【００３９】
１つの実装例では、ＣＬＢ  ３３は、ユーザ論理を実現するようにプログラムすることができる構成可能論理素子（「ＣＬＥ」）４４と、それに加えて単一のプログラマブル相互接続素子（「ＩＮＴ」）４３とを含むことができる。ＢＲＡＭ  ３４は、１つまたは複数のプログラマブル相互接続素子に加えて、ＢＲＡＭ論理素子（「ＢＲＬ」）４５を含むことができる。一般的に、タイルに含まれる相互接続素子の数はタイルの高さに応じて決まる。図示される例では、ＢＲＡＭタイルは５つのＣＬＢと同じ高さを有するが、他の数（例えば、４つ）を使用することもできる。ＤＳＰタイル３５は、適切な数のプログラマブル相互接続素子に加えて、ＤＳＰ論理素子（「ＤＳＰＬ」）４６を含むことができる。ＩＯＢ  ３６は、例えば、プログラマブル相互接続素子４３の１つの例に加えて、入力／出力論理素子（「ＩＯＬ」）４７の２つの例を含むことができる。当業者には明白となるように、例えば、Ｉ／Ｏ論理素子４７に接続された実際のＩ／Ｏパッドは、一般的に、入力／出力論理素子４７の範囲に制限されない。
【００４０】
図示される例では、ダイ（図６に図示）の中央付近の水平範囲は、コンフィギュレーション、クロック、および他の制御論理に使用される。この水平範囲または列から延在する垂直列５１は、ＦＰＧＡの横幅にわたってクロックおよびコンフィギュレーション信号を分配させるのに使用される。
【００４１】
図６に示されるアーキテクチャを利用する一部のＦＰＧＡは、ＦＰＧＡの大きな部分を占める規則的な列状構造を破壊する追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび／または専用論理であることができる。
【００４２】
図６は、単に例示のＦＰＧＡアーキテクチャを例証するためのものであることに留意することである。例えば、行内の論理ブロックの数、行の相対幅、行の数および順序、行に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、ならびに図６の上部に含まれる、相互接続／論理の実現は、単なる例示である。例えば、実際のＦＰＧＡでは、一般的に、ユーザ論理の効率的な実現を容易にするため、ＣＬＢがどこに現れても、ＣＬＢの１つを超える隣接列が含まれるが、隣接したＣＬＢ行の数はＦＰＧＡの全体サイズに伴って変動する。
【００４３】
一例では、設計ツール１０８はまた、特権シェル回路と非特権アプリケーション回路との間の物理的隔離を提供する。物理的隔離によって、シェル回路の一部である配線がユーザ領域内まで延在することができる。このような場合、ユーザ論理はかかる配線に接続することができる。インターフェース回路（例えば、ＰＣＩｅ回路）は既知の位置にあるので、ユーザ論理は、物理レベルでシェル回路に対する無許可アクセスを得てもよい。更に、シングルイベントアップセットエラーが起こって、ＦＰＧＡコンフィギュレーションの変化をもたらし、結果としてアプリケーション回路とシェル回路とが物理的に接続される場合がある。
【００４４】
一例では、設計ツール１０８は隔離設計フローを実現する。隔離設計フローは、デバイスの領域間の隔離を担保しながら、それらの領域間の通信を許可するメカニズムである。隔離設計フローは、パーシャルリコンフィギュレーションフローを拡張して、物理的隔離に関して更に保証する。隔離設計フローは、一点故障であっても無許可領域への一方向のデータフローを許可しないことを担保することができる。
【００４５】
上述したように、ＦＰＧＡなどのプログラマブルＩＣのプログラマブルファブリックは、タイルのアレイ（例えば、図６）を含む。ルーティングワイヤは複数のタイル（例えば、水平もしくは垂直方向の１つ、２つ、４つ、８つのタイル）にわたることがあるが、各ルーティングワイヤは１つの入口点および１つの出口点のみを有する。ＦＰＧＡコンフィギュレーションは、どの信号がどのワイヤに配置されるか（存在する場合）、およびワイヤがその目的地で使用されるか否かを制御する。
【００４６】
隔離設計フローは、領域およびフェンスの概念を実行する。ＰＲ領域などの領域はＦＰＧＡの物理的範囲である。範囲は必ずしも長方形でなくてもよい。領域は、論理的に関連する論理と、実装される論理と関連付けられた全てのルーティングとを含む。論理と同様、領域のルーティングは領域内に物理的に留まるように制限される。
【００４７】
フェンスは、領域を分離する役割を果たす空のタイル（未設定タイル）群である。フェンスの空のタイルは、ルーティングワイヤに信号を与えないこと、または信号をルーティングワイヤで使用しないことがある。設計ツール１０８は、互いから隔離しなければならない領域間にフェンスを配置し、ＰＲフローをたどる形で各ブロックの配置およびルーティングをその領域内に制限する。領域の全ての論理は、その領域内に配置されるように制限され、領域内部のタイルを接続する信号は、領域を取り囲むフェンスに入ることができない。フェンスは、領域間の全ての信号に対する障壁となる。
【００４８】
信号は、接続を介してフェンスを通過できるようにされて、領域が互いに通信することが可能になる。これらの領域間信号は、隣接した領域間の設計で特定される。領域間信号は、領域間信号がフェンス内のいずれの論理ブロックにも接触せず、また他の領域間信号からの隔離距離を維持するようにして、設計ツール１０８によってルーティングされる。
【００４９】
一例では、設計ツール１０８は、特権シェル回路に対して１つの領域を、非特権アプリケーション回路に対して別の領域を選ぶ。信号隔離は、隔離設計フローの配置およびルーティングの制限によって提供され、設計ツール１０８によって実行される。シェル回路は、一方ではシステム信号（例えば、ＰＣＩｅ信号）に、他方ではアプリケーション回路に接続された、１つまたは複数の隔離領域に配設される。シェル回路は、外部信号、クロッキング論理、システムモニタ論理、および内部コンフィギュレーションポートへのアクセスに接続する、全ての回路構成を含む。シェル回路設計者は他のリソースも同様に含んでもよい。シェル回路領域は、必ずしも連続していなくてもよく、１つまたは複数の隔離領域に配設されてもよい。
【００５０】
アプリケーション回路は、シェル回路とは別個の１つまたは複数の隔離領域に配設される。アプリケーション回路が使用できる信号は、フェンス領域を通した接続を使用してシェル回路に接続される。
【００５１】
図７は、一実施例によるコンピュータシステムのプログラマブルＩＣを構成する方法７００を示すフローチャートである。図８は、一実施例による回路設計８００を示すブロック図である。方法７００は、ステップ７０２で始まり、設計ツール１０８は、シェル回路１３０Ａを実装するためのプログラマブルファブリックの第１の領域（隔離領域８０２）を選択する。ステップ７０４で、設計ツール１０８は、アプリケーション回路１３０Ｂを実装するためのプログラマブルファブリックの第２の領域（隔離領域８０４）を選択する。ステップ７０６で、設計ツール１０８は、第１の領域８０２と第２の領域８０４との間にフェンス領域８０６を提供して、シェル回路１３０Ａの論理およびルーティングをアプリケーション回路１３０Ｂの論理およびルーティングから隔離する。ステップ７０８で、設計ツール１０８は、フェンス領域８０６を通して、アプリケーション回路１３０ＢのＩＯポート８０８と、シェル回路１３０ＡのＩＯポート８１６との間の接続８１０を提供する。任意のステップ７１０で、設計ツール１０８は、上位領域８１４を提供して、シェル回路１３０Ａおよびアプリケーション回路１３０Ｂに対するグローバルクロック論理８１２を提供することができる。あるいは、グローバルクロック論理８１２はシェル回路１３０Ａに提供することができる。ステップ７１４で、設計ツール１０８は、第１の領域８０２、第２の領域８０４、およびフェンス領域８０６（および任意で、上位領域８１４）を有する回路設計のためのコンフィギュレーションデータを生成する。ステップ７１６で、設計ツール１０８は、コンフィギュレーションデータをプログラマブルＩＣにロードして、アクセラレーション回路１３０を実装する。
【００５２】
一例では、隔離設計フローはランタイムヘルスチェックを含めることができる。図２を参照すると、これらのチェックは、シェル回路に配設されたシステムモニタ２５０によって実施することができる。システムモニタ２５０は、範囲外の電圧および温度を含む、潜在的に危険な状況を特定することができる。不正なまたは誤ったユーザアプリケーションは、チップにおける局所的な電圧降下を引き起こす電流スパイクを作り出すことがある。これによってＦＰＧＡがリセットされることがある。極端な例では、ＦＰＧＡが不正確な結果を与えることがある。別の懸念される状況として、ユーザアプリケーションが電力を過度に消費して、クラウドオペレータが設定した限度を超えてしまうか、または温度過上昇の状況を作り出すことがある。システムモニタ２５０は、電圧および温度に対してトリガポイントを設定し、エラー条件をコンピューティングシステムに信号伝送することができ、それによってシェル回路またはコンピューティングシステムが、アプリケーション回路またはプログラマブルＩＣ全体の動作を停止することが可能になる。シェル回路１３０Ａはまた、ランタイム中の隔離領域およびフェンスの完全性をチェックする、ランタイムチェック論理２５２を含むことができる。ランタイムチェック論理２５２は、プログラマブルＩＣの内部コンフィギュレーションアクセスポート２５４を使用して、デバイスのコンフィギュレーションデータを継続的にリードバックし、チェックサムを使用して、フェンスおよび隔離領域の完全性を検証する。フロアプランの任意の修正は実行時に捕らえることができる。
【００５３】
データセンタにおけるプログラマブルデバイスのセキュリティのための方法およびシステムの非限定的な一連の例について、以下に提供する。
【００５４】
一例では、コンピュータシステムのプログラマブル集積回路（ＩＣ）を構成する方法は、コンピュータシステムのバスとインターフェース接続するように構成されたシェル回路を実装するための、プログラマブルＩＣのプログラマブルファブリックの第１の領域を選択することと、シェル回路とインターフェース接続するように構成されたアプリケーション回路を実装するための、プログラマブルファブリックの第２の領域を選択することと、第１の領域と第２の領域との間に配設される、プログラマブルファブリックの一組の未設定タイルを含むフェンス領域を提供することと、第１の領域、第２の領域、およびフェンス領域を有する回路設計のためのコンフィギュレーションデータを生成することと、コンフィギュレーションデータをプログラマブルＩＣにロードすることと、を含んでもよい。
【００５５】
かかる方法では、アプリケーション回路は、フェンス領域を通した接続を使用して、シェル回路に結合されてもよい。
【００５６】
かかる方法では、アプリケーション回路の論理およびルーティングは、第２の領域内に含まれてもよく、シェル回路の論理およびルーティングは、第１の領域内に含まれてもよく、アプリケーション回路の入出力（ＩＯ）ポートは、接続によってシェル回路のＩＯポートに結合されてもよい。
【００５７】
一部のかかる方法は更に、クロック信号をシェル回路およびアプリケーション回路に提供するように構成されたグローバルクロック論理を実装するための、プログラマブルファブリックの第３の領域を選択することを含んでもよい。
【００５８】
かかる方法では、シェル回路は、プログラマブルＩＣをモニタリングし、エラー条件の検出に応答してコンピュータシステムに信号伝送するように構成された、システムモニタを含む。
【００５９】
かかる方法では、シェル回路は、プログラマブルＩＣのコンフィギュレーションデータをリードバックし、第１の領域、第２の領域、およびフェンス領域の完全性を検証するように構成された、ランタイムチェック回路を含む。
【００６０】
かかる方法では、ランタイムチェック回路は、プログラマブルＩＣの内部コンフィギュレーションアクセスポートに結合されてもよい。
【００６１】
別の例では、非一時的コンピュータ可読媒体が提供されてもよく、非一時的コンピュータ可読媒体には命令が格納され、命令は、プロセッサによって実行されると、コンピュータシステム内のプログラマブル集積回路（ＩＣ）を構成する方法をプロセッサに実施させ、方法は、コンピュータシステムのバスとインターフェース接続するように構成されたシェル回路を実装するための、プログラマブルＩＣのプログラマブルファブリックの第１の領域を選択することと、シェル回路とインターフェース接続するように構成されたアプリケーション回路を実装するための、プログラマブルファブリックの第２の領域を選択することと、第１の領域と第２の領域との間に配設される、プログラマブルファブリックの一組の未設定タイルを含むフェンス領域を提供することと、第１の領域、第２の領域、およびフェンス領域を有する回路設計のためのコンフィギュレーションデータを生成することと、コンフィギュレーションデータをプログラマブルＩＣにロードすることと、を含む。
【００６２】
かかる非一時的コンピュータ可読媒体では、アプリケーション回路は、フェンス領域を通した接続を使用して、シェル回路に結合されてもよい。
【００６３】
かかる非一時的コンピュータ可読媒体では、アプリケーション回路の論理およびルーティングは、第２の領域内に含まれてもよく、シェル回路の論理およびルーティングは、第１の領域内に含まれてもよく、アプリケーション回路の入出力（ＩＯ）ポートは、接続によってシェル回路のＩＯポートに結合されてもよい。
【００６４】
一部のかかる非一時的コンピュータ可読媒体は、クロック信号をシェル回路およびアプリケーション回路に提供するように構成されたグローバルクロック論理を実装するための、プログラマブルファブリックの第３の領域を選択することを更に含んでもよい。
【００６５】
かかる非一時的コンピュータ可読媒体では、シェル回路は、プログラマブルＩＣをモニタリングし、エラー条件の検出に応答してコンピュータシステムに信号伝送するように構成された、システムモニタを含む。
【００６６】
かかる非一時的コンピュータ可読媒体では、シェル回路は、プログラマブルＩＣのコンフィギュレーションデータをリードバックし、第１の領域、第２の領域、およびフェンス領域の完全性を検証するように構成された、ランタイムチェック回路を含む。
【００６７】
かかる非一時的コンピュータ可読媒体では、ランタイムチェック回路は、プログラマブルＩＣの内部コンフィギュレーションアクセスポートに結合されてもよい。
【００６８】
別の例では、コンピューティングシステムが提供されてもよい。かかるコンピュータシステムは、処理システムと、処理システムに結合されるハードウェアアクセラレータであって、処理システムのバスとインターフェース接続するように構成されたシェル回路を実装するための、プログラマブルファブリックの第１の領域と、シェル回路とインターフェース接続するように構成されたアプリケーション回路を実装するための第２の領域と、第１の領域と第２の領域との間に配設される、プログラマブルファブリックの一組の未設定タイルを含むフェンス領域とを有する、アクセラレーション回路を用いて構成されるプログラマブル集積回路（ＩＣ）を含む、ハードウェアアクセラレータと、処理システム上で実行されるソフトウェアプラットフォームであって、ハードウェアアクセラレータとインターフェース接続するように処理システムによって実行可能なプログラムコードを含む、ソフトウェアプラットフォームと、を含む。
【００６９】
かかるコンピュータシステムでは、アプリケーション回路は、フェンス領域を通した接続を使用して、シェル回路に結合されてもよい。
【００７０】
かかるコンピュータシステムでは、アプリケーション回路の論理およびルーティングは第２の領域内に含まれてもよく、シェル回路の論理およびルーティングは第１の領域内に含まれてもよく、アプリケーション回路の入出力（ＩＯ）ポートは、接続によってシェル回路のＩＯポートに結合されてもよい。
【００７１】
かかるコンピュータシステムでは、シェル回路は、プログラマブルＩＣをモニタリングし、エラー条件の検出に応答してコンピュータシステムに信号伝送するように構成された、システムモニタを含む。
【００７２】
かかるコンピュータシステムでは、シェル回路は、プログラマブルＩＣのコンフィギュレーションデータをリードバックし、第１の領域、第２の領域、およびフェンス領域の完全性を検証するように構成された、ランタイムチェック回路を含む。
【００７３】
かかるコンピュータシステムでは、ランタイムチェック回路は、プログラマブルＩＣの内部コンフィギュレーションアクセスポートに結合されてもよい。
【００７４】
上記は特定の実施例を対象としているが、実施例の基本的範囲から逸脱することなく他の実施例および更なる実施例を案出することができ、それらの範囲は以下の特許請求の範囲によって決定される。
【図１】
2021509192.tif 000003
【図２】
2021509192.tif 000004
【図３】
2021509192.tif 000005
【図４】
2021509192.tif 000006
【図５】
2021509192.tif 000007
【図６】
2021509192.tif 000008
【図７】
2021509192.tif 000009
【図８】
2021509192.tif 000010
【手続補正書】
【提出日】令和2年1月31日(2020.1.31)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータシステムにおいてプログラマブル集積回路（ＩＣ）を構成する方法であって、
前記コンピュータシステムのバスとインターフェース接続するように構成されたシェル回路を実装するための、前記プログラマブルＩＣのプログラマブルファブリックの第１の領域を選択することと、
前記シェル回路とインターフェース接続するように構成されたアプリケーション回路を実装するための、前記プログラマブルファブリックの第２の領域を選択することと、
前記第１の領域と前記第２の領域との間に配設される、前記プログラマブルファブリックの一組の未設定タイルを含むフェンス領域を提供することと、
前記第１の領域、前記第２の領域、および前記フェンス領域を有する回路設計のためのコンフィギュレーションデータを生成することと、
前記コンフィギュレーションデータを前記プログラマブルＩＣにロードすることと
を含み、
前記アプリケーション回路は、前記フェンス領域を通した接続を使用して、前記シェル回路に結合され、前記シェル回路は、前記フェンス領域を通した前記接続を介して、前記アプリケーション回路による信号へのアクセスを制御し、前記アプリケーション回路が非特権データのみにアクセスすることを可能にする、方法。
【請求項２】
前記アプリケーション回路の論理およびルーティングが、前記第２の領域内に含まれ、前記シェル回路の論理およびルーティングが、前記第１の領域内に含まれ、前記アプリケーション回路の入出力（ＩＯ）ポートが、接続によって前記シェル回路のＩＯポートに結合される、請求項１に記載の方法。
【請求項３】
クロック信号を前記シェル回路および前記アプリケーション回路に提供するように構成されたグローバルクロック論理を実装するための、前記プログラマブルファブリックの第３の領域を選択すること
を更に含む、請求項１に記載の方法。
【請求項４】
前記シェル回路が、前記プログラマブルＩＣをモニタリングし、エラー条件の検出に応答して前記コンピュータシステムに信号伝送するように構成されたシステムモニタを含む、請求項１に記載の方法。
【請求項５】
前記シェル回路が、前記プログラマブルＩＣのコンフィギュレーションデータをリードバックし、前記第１の領域、前記第２の領域、および前記フェンス領域の完全性を検証するように構成されたランタイムチェック回路を含む、請求項１に記載の方法。
【請求項６】
前記ランタイムチェック回路が、前記プログラマブルＩＣの内部コンフィギュレーションアクセスポートに結合される、請求項５に記載の方法。
【請求項７】
コンピューティングシステムであって、
処理システムと、
前記処理システムに結合されるハードウェアアクセラレータであって、
前記処理システムのバスとインターフェース接続するように構成されたシェル回路を実装するための、プログラマブルファブリックの第１の領域と、前記シェル回路とインターフェース接続するように構成されたアプリケーション回路を実装するための第２の領域と、前記第１の領域と前記第２の領域との間に配設される、前記プログラマブルファブリックの一組の未設定タイルを含むフェンス領域とを有するアクセラレーション回路を用いて構成されるプログラマブル集積回路（ＩＣ）であって、前記アプリケーション回路は、前記フェンス領域を通した接続を使用して、前記シェル回路に結合され、前記シェル回路は、前記フェンス領域を通した前記接続を介して、前記アプリケーション回路による信号へのアクセスを制御し、前記アプリケーション回路が非特権データのみにアクセスすることを可能にする、プログラマブル集積回路（ＩＣ）
を含む、ハードウェアアクセラレータと、
前記処理システム上で実行されるソフトウェアプラットフォームであって、前記ハードウェアアクセラレータとインターフェース接続するように前記処理システムによって実行可能なプログラムコードを含む、ソフトウェアプラットフォームと
を備える、コンピューティングシステム。
【請求項８】
前記アプリケーション回路の論理およびルーティングが、前記第２の領域内に含まれ、前記シェル回路の論理およびルーティングが、前記第１の領域内に含まれ、前記アプリケーション回路の入出力（ＩＯ）ポートが、接続によって前記シェル回路のＩＯポートに結合される、請求項７に記載のコンピューティングシステム。
【請求項９】
前記シェル回路が、前記プログラマブルＩＣをモニタリングし、エラー条件の検出に応答して前記コンピュータシステムに信号伝送するように構成されたシステムモニタを含む、請求項７に記載のコンピューティングシステム。
【請求項１０】
前記シェル回路が、前記プログラマブルＩＣのコンフィギュレーションデータをリードバックし、前記第１の領域、前記第２の領域、および前記フェンス領域の完全性を検証するように構成されたランタイムチェック回路を含む、請求項７に記載のコンピューティングシステム。
【請求項１１】
前記ランタイムチェック回路が、前記プログラマブルＩＣの内部コンフィギュレーションアクセスポートに結合される、請求項１０に記載のコンピューティングシステム。
【国際調査報告】
2021509192.tif 000011
2021509192.tif 000012
2021509192.tif 000013