(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-01-07
(45)【発行日】2025-01-16
(54)【発明の名称】データセンタ内のライセンスされたプログラマブル装置へのコアの実行のロック
(51)【国際特許分類】
G06F 21/10 20130101AFI20250108BHJP
G06F 21/44 20130101ALI20250108BHJP
G06F 21/64 20130101ALI20250108BHJP
【FI】
G06F21/10 350
G06F21/44
G06F21/64
(21)【出願番号】P 2021553870
(86)(22)【出願日】2020-02-14
(86)【国際出願番号】 US2020018338
(87)【国際公開番号】W WO2020185352
(87)【国際公開日】2020-09-17
【審査請求日】2023-01-19
(32)【優先日】2019-03-12
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-03-12
(33)【優先権主張国・地域又は機関】US
【前置審査】
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】マーティン,ブライアン・エス
(72)【発明者】
【氏名】ビディアナンダン,プレムダス
(72)【発明者】
【氏名】カーソン,マーク・ビィ
(72)【発明者】
【氏名】ワトソン,ニール
(72)【発明者】
【氏名】マクリントック,ゲイリー・ジェイ
【審査官】上島 拓也
(56)【参考文献】
【文献】米国特許出願公開第2015/0242615(US,A1)
【文献】特開2018-029267(JP,A)
【文献】米国特許出願公開第2011/0154043(US,A1)
【文献】米国特許出願公開第2019/0007212(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/10
G06F 21/44
G06F 21/64
(57)【特許請求の範囲】
【請求項1】
コンピュータシステムのハードウェアアクセラレータであって、前記ハードウェアアクセラレータは、プログラマブル装置を含み、前記ハードウェアアクセラレータは、
再構成不可能な静的回路を有する静的領域と、
前記プログラマブル装置のプログラマブルファブリックに形成されたカーネルロジック
であって、前記カーネルロジックは少なくとも部分的に再構成可能であり、前記カーネルロジックの動作が選択的にイネーブルまたはディセーブルであるように構成された、カーネルロジックと、を備え、
前記カーネルロジック
は、知的財産(IP)チェッカ回
路を備え、
前記IPチェッカ回路は、
前記プログラマブル装置の装置識別子(ID)と署名付きホワイトリストとを取得するように構成され、前記署名付きホワイトリストは、装置IDリストおよび署名を含み、
前記署名付きホワイトリストの前記署名を検証し、
前記装置IDを前記装置IDリストと比較し、および、
前記装置IDリストにおける前記装置IDの有無および前記署名の検証に応じて、前記カーネルロジックのイネーブルを選択的にアサートまたはデアサートする
ことによって前記カーネルロジックの前記動作を選択的にイネーブルまたはディセーブルにするように構成される、
ハードウェアアクセラレータ。
【請求項2】
前記プログラマブルファブリックに形成されたシェル回路をさらに備え、
前記シェル回路は、コンピュータシステムと前記カーネルロジックとの間のインターフェイスを提供するように構成される、請求項1に記載のハードウェアアクセラレータ。
【請求項3】
前記プログラマブルファブリックは、第1のプログラマブルファブリックであり、
前記ハードウェアアクセラレータは、前記プログラマブル装置の第2のプログラマブルファブリックに形成されたシェル回路をさらに備え、
前記シェル回路は、コンピュータシステムと前記カーネルロジックとの間のインターフェイスを提供するように構成され、
前記IPチェッカ回路は、前記プログラマブル装置の前記第1のプログラマブルファブリックから前記装置IDを取得する、請求項1に記載のハードウェアアクセラレータ。
【請求項4】
前記プログラマブル装置は、前記第1のプログラマブルファブリックを有する第1のプログラマブルICと、前記第2のプログラマブルファブリックを有する第2のプログラマブルICとを含む、請求項3に記載のハードウェアアクセラレータ。
【請求項5】
前記IPチェッカ回路は、前記署名付きホワイトリストを有するように構成される、請求項1から4のいずれか一項に記載のハードウェアアクセラレータ。
【請求項6】
前記IPチェッカ回路は、前記ハードウェアアクセラレータを設けたコンピュータシステムから前記署名付きホワイトリストを受信する、請求項1から4のいずれか一項に記載のハードウェアアクセラレータ。
【請求項7】
前記IPチェッカ回路は、一対の公開鍵/秘密鍵の秘密鍵を用いて暗号化された前記署名を、前記一対の公開鍵/秘密鍵の公開鍵を用いて復号し、前記装置IDリストのハッシュを決定し、および前記ハッシュを前記復号された署名と比較することによって、前記署名付きホワイトリストの前記署名を検証するように構成される、請求項1から6のいずれか一項に記載のハードウェアアクセラレータ。
【請求項8】
前記IPチェッカ回路は、
前記装置IDを読み出すように構成された装置ID読み出し回路と、
前記署名付きホワイトリストを記憶するように構成されたメモリと、
前記装置IDを前記装置IDリストと比較し、前記カーネルロジックの前記イネーブルを選択的にアサートまたはデアサートするように構成されたチェッカ回路とを含む、請求項1から7のいずれか一項に記載のハードウェアアクセラレータ。
【請求項9】
前記IPチェッカ回路は、
前記装置IDを読み出すように構成された装置ID読み出し回路と、
コンピュータシステムから前記署名付きホワイトリストを受信するように構成されたインターフェイス回路と、
前記装置IDを前記装置IDリストと比較し、前記カーネルロジックの前記イネーブルを選択的にアサートまたはデアサートするように構成されたチェッカ回路とを含む、請求項1から7のいずれか一項に記載のハードウェアアクセラレータ。
【請求項10】
カーネルロジックをコンピュータシステムに設けられたハードウェアアクセラレータのプログラマブル装置にロックするための方法であって、前記方法は、
前記プログラマブル装置のプログラマブルファブリックにカーネルロジックを形成することを含み、
前記カーネルロジックは少なくとも部分的に再構成可能であり、前記プログラマブル装置は、再構成不可能な静的回路を有する静的領域を
さらに含み、前記方法は、
前記カーネルロジックに形成された知的財産(IP)チェッカ回路が、前記プログラマブル装置の装置識別子(ID)と署名付きホワイトリストとを取得することとを含み、前記署名付きホワイトリストは、装置IDリストおよび署名を含み、
前記署名付きホワイトリストの前記署名を検証することと、
前記装置IDを前記装置IDリストと比較することと、
前記IPチェッカ回路が、前記装置IDリストにおける装置IDの有無および前記署名の検証に応じて、前記カーネルロジックのイネーブルを選択的にアサートまたはデアサートすること
によって前記カーネルロジックの動作を選択的にイネーブルまたはディセーブルにすることとを含む、方法。
【請求項11】
前記プログラマブルファブリックにシェル回路を形成することをさらに含み、
前記シェル回路は、コンピュータシステムと前記カーネルロジックとの間のインターフェイスを提供するように構成される、請求項10に記載の方法。
【請求項12】
前記プログラマブルファブリックは、第1のプログラマブルファブリックを含み、
前記方法は、前記プログラマブル装置の第2のプログラマブルファブリックにおいてシェル回路を形成することをさらに含み、
前記シェル回路は、コンピュータシステムと前記カーネルロジックとの間のインターフェイスを提供するように構成され、
前記IPチェッカ回路は、前記プログラマブル装置の前記第1のプログラマブルファブリックから前記装置IDを取得する、請求項10に記載の方法。
【請求項13】
前記プログラマブル装置は、前記第1のプログラマブルファブリックを有する第1のプログラマブルICと、前記第2のプログラマブルファブリックを有する第2のプログラマブルICとを含む、請求項12に記載の方法。
【請求項14】
前記IPチェッカ回路は、前記署名付きホワイトリストを有するように構成される、または前記コンピュータシステムから前記署名付きホワイトリストを受信する、請求項10から13のいずれかに記載の方法。
【請求項15】
前記IPチェッカ回路は、一対の公開鍵/秘密鍵の秘密鍵を用いて暗号化された前記署名を、前記一対の公開鍵/秘密鍵の公開鍵を用いて復号し、前記装置IDリストのハッシュを決定し、および前記ハッシュを前記復号された署名と比較することによって、前記署名付きホワイトリストの前記署名を検証するように構成される、請求項10から14のいずれかに記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
技術分野
本開示の例は、一般的に電子回路に関し、特に、コアの実行をデータセンタ内のライセンスされたプログラマブル装置にロックすることに関する。
【背景技術】
【0002】
背景
従来では、プログラマブル装置の知的財産(IP)コア(例えば、予め実装された回路設計)の第三者開発者は、プロジェクトに基づいて、IPをシステムインテグレータにライセンスする。これによって、システムインテグレータは、任意の数のプログラマブル装置上でIPを使用することができる。データセンタアプリケーションの場合、異なる使用モデルが望まれる。したがって、IP所有者は、特定の数の許可されたプログラマブル装置上でIP所有者のIPを実行することをデータセンタ所有者に許可する。好ましくは、データセンタ所有者または第三者がライセンスされた装置以外の装置上で当該IPを使用しようとする場合、当該IPは、動作できない。
【発明の概要】
【課題を解決するための手段】
【0003】
概要
コアの実行をデータセンタ内のライセンスされたプログラマブル装置にロックするための技術が説明される。一例において、コンピュータシステムのハードウェアアクセラレータは、プログラマブル装置を含み、プログラマブル装置のプログラマブルファブリックに形成されたカーネルロジックと、カーネルロジックに形成された知的財産(IP)チェッカ回路とをさらに含む。IPチェッカ回路は、プログラマブル装置の装置識別子(ID)と署名付きホワイトリストとを取得するように構成され、署名付きホワイトリストは、装置IDリストおよび署名を含み、署名付きホワイトリストの署名を検証し、装置IDを装置IDリストと比較し、および装置IDリストにおける装置IDの有無および署名の検証に応じて、カーネルロジックのイネーブルを選択的にアサートまたはデアサートするように構成される。
【0004】
別の例において、コンピュータシステムは、処理システムと、処理システムに連結されたハードウェアアクセラレータとを含む。ハードウェアアクセラレータは、プログラマブル装置のプログラマブルファブリックに形成されたカーネルロジックと、カーネルロジックに形成された知的財産(IP)チェッカ回路とを含む。IPチェッカ回路は、プログラマブル装置の装置識別子(ID)と署名付きホワイトリストとを取得するように構成され、署名付きホワイトリストは、装置IDリストおよび署名を含み、署名付きホワイトリストの署名を検証し、装置IDを装置IDリストと比較し、および装置IDリストにおける装置IDの有無および署名の検証に応じて、カーネルロジックのイネーブルを選択的にアサートまたはデアサートするように構成される。
【0005】
別の例において、カーネルロジックをコンピュータシステムに設けられたハードウェアアクセラレータのプログラマブル装置にロックするための方法は、プログラマブル装置のプログラマブルファブリックにカーネルロジックを形成することと、カーネルロジックに形成された知的財産(IP)チェッカ回路が、プログラマブル装置の装置識別子(ID)と署名付きホワイトリストとを取得することとを含み、署名付きホワイトリストは、装置IDリストおよび署名を含み、署名付きホワイトリストの署名を検証することと、装置IDを装置IDリストと比較することと、IPチェッカ回路が、装置IDリストにおける装置IDの有無および署名の検証に応じて、カーネルロジックのイネーブルを選択的にアサートまたはデアサートすることとを含む。
【0006】
これらの態様および他の態様は、以下の詳細な説明を参照することによって理解され得る。
【0007】
上記で列挙した特徴を詳細に理解できるように、上記の簡単な要約より具体的な説明は、添付の図面に示された実装例を参照することによって得ることができる。なお、添付の図面は、代表的な実装例を例示するものに過ぎず、本発明の範囲を限定するものと見なすべきではない。
【図面の簡単な説明】
【0008】
【
図1】一例に係るコンピューティングシステムを示すブロック図である。
【
図2】一例に係る加速回路を示すブロック図である。
【
図3】一例に係る設計ツールを示すブロック図である。
【
図4】一例に係るプログラマブル装置を示すブロック図である。
【
図5】一例に係るプログラマブルICを示すブロック図である。
【
図6】一例に係るプログラマブルICのシステムオンチップ(SoC)実装を示すブロック図である。
【
図7】プログラマブルICのフィールドプログラマブルゲートアレイ(FPGA)実装を示す図である。
【
図8】一例に係るクラウドコンピューティングシステムを示すブロック図である。
【
図9】一例に従って、カーネルの実行を特定のプログラマブル装置上にロックするための方法を示すフローチャートである。
【
図10】一例に従って、装置IDの署名付きホワイトリストを生成するための方法を示すブロック図である。
【
図11】一例に従って、署名付きホワイトリストの有効性を検証するための方法を示すブロック図である。
【
図12】一例に従って、ホワイトリストを更新するための方法を示すフローチャートである。
【
図13】一例に係るIPチェッカを示すブロック図である。
【
図14】別の例に係るIPチェッカを示すブロック図である。
【
図15】一例に係るIPチェッカのチェッカ回路を示すブロック図である。
【
図16A】プログラマブル装置内の装置IDの配置例を示すブロック図である。
【
図16B】プログラマブル装置内の装置IDの配置例を示すブロック図である。
【
図16C】プログラマブル装置内の装置IDの配置例を示すブロック図である。
【
図17】一例に従って、カーネルロジックをコンピュータシステムに設けられたハードウェアアクセラレータのプログラマブル装置にロックするための方法を示すフローチャートである。
【発明を実施するための形態】
【0009】
詳細な説明
理解を容易にするために、できる限り、同一の参照番号を用いて、図面に共通の同一の要素を示す。なお、1つの例の要素は、他の例に有利に組み込まれてもよい。
【0010】
以下、図面を参照して様々な特徴を説明する。なお、図面は、一定の縮尺で描かれていない場合もあり、同様の構造または機能を有する要素は、図面の全体を通して同様の参照番号によって示される。また、図面は、特徴の説明を容易にすることのみを意図しており、本発明を網羅的に説明することまたは本発明の範囲を限定することを意図していない。さらに、図示された例は、全ての態様または利点を含む必要がない。特定の例に関連して説明された態様または利点は、必ずしもその例に限定されず、そのように図示されなくてもまたはそのように明示的に説明されなくても、任意の他の例に実施されてもよい。
【0011】
コアの実行をデータセンタ内のライセンスされたプログラマブル装置にロックするための技術が説明される。一例において、IPチェック機能をデータセンタアプリケーション内の部分的に再構成可能なカーネルに統合することによって、各々のプログラマブル装置を識別することができる。あるプログラマブル装置が「ホワイトリスト」上にある場合、IPチェック機能は、そのプログラマブル装置上のカーネルにおけるIPの動作を可能にする。そうでない場合、IPチェック機能は、許可されていないプログラマブル装置上のIPの動作を無効にする。IPチェック機能は、例えば、1つのプログラマブル装置を別のプログラマブル装置に偽装することまたは他のプログラマブル装置を含むように「ホワイトリスト」を修正することによる攻撃に抵抗することができる。IPチェック機能は、データセンタおよびIP所有者が合意した追加のプログラマブル装置を「ホワイトリスト」に追加することを支援する。IPチェック機能は、加速回路の開発者の適切な許可がない場合に、当該加速回路を大量に配置することを防止する。以下、図面を参照して、本技術のこれらの態様および他の態様を説明する。
【0012】
図1は、一例に係るコンピューティングシステム100を示すブロック図である。コンピューティングシステム100は、データセンタなどに配置されてもよい。データセンタは、コンピューティングシステム100と同様に構成された複数のコンピューティングシステムを含むことができる。コンピューティングシステム100は、サーバコンピュータ(サーバ102)を含む。サーバ102は、ハードウェアプラットフォーム(ハードウェア104)と、ハードウェア104上で動作するソフトウェアプラットフォーム(ソフトウェア106)とを含む。ハードウェア104は、処理システム110と、システムメモリ116と、記憶装置(ストレージ118)と、ハードウェアアクセラレータ122とを含む。ソフトウェア106は、オペレーティングシステム(OS)144と、ドライバソフトウェア(ドライバ146)と、アプリケーション150とを含む。
【0013】
処理システム110は、マイクロプロセッサ112と、サポート回路114と、周辺バス115とを含む。マイクロプロセッサ112は、任意種類の汎用中央処理ユニット(CPU)、例えばx86ベースのプロセッサ、ARM(登録商標)ベースのプロセッサなどであってもよい。マイクロプロセッサ112は、1つ以上のコアおよび関連する回路素子(例えば、キャッシュメモリ、メモリ管理ユニット(MMU)、割り込みコントローラ)を含むことができる。マイクロプロセッサ112は、本明細書に記載された1つ以上の動作を実行するプログラムコードを実行するように構成される。プログラムコードは、システムメモリ116および/またはストレージ118に記憶されてもよい。サポート回路114は、マイクロプロセッサ112と、システムメモリ116、ストレージ118、ハードウェアアクセラレータ122または任意の他の周辺装置との間のデータフローを管理するように、マイクロプロセッサ112と協働する様々な装置を含む。例えば、サポート回路114は、チップセット(例えば、ノースブリッジ、サウスブリッジ、プラットフォームホストコントローラ)、電圧調整器、ファームウェア(例えば、BIOS)などを含むことができる。サポート回路114は、マイクロプロセッサ112と、ハードウェアアクセラレータ122などの様々な周辺装置が接続される周辺バス115との間のデータフローを管理する。いくつかの例において、マイクロプロセッサ112は、チップセット(例えば、ノースブリッジ、サウスブリッジ)の全ての機能または大部分の機能を組み込むシステムインパッケージ(SiP)、システムオンチップ(SoC)などであってもよい。周辺バスは、PCIe(Peripheral Component Interconnect Express)などの拡張バス規格を実装することができる。この例において、図示された処理システム110は、ハードウェアアクセラレータ122から離れている。以下でさらに説明される他の例において、処理システム110およびハードウェアアクセラレータ122は、同一の集積回路(IC)上に実装されてもよい。
【0014】
システムメモリ116は、実行可能な命令およびデータなどの情報の記憶および検索を可能にする装置である。システムメモリ116は、1つ以上のランダムアクセスメモリ(RAM)モジュール、例えばダブルデータレート(DDR)ダイナミックRAM(DRAM)を含むことができる。ストレージ118は、ローカル記憶装置(例えば、1つ以上のハードディスク、フラッシュメモリモジュール、ソリッドステートディスク、および光学ディスク)および/またはサーバ102と1つ以上のネットワークデータ記憶システムとの間の通信を可能にする記憶インターフェイスを含む。ハードウェア104は、コンピューティングシステムの様々な他の従来の装置および周辺装置、例えばグラフィックカード、ユニバーサルシリアルバス(USB)インターフェイスなどを含むことができる。
【0015】
ハードウェアアクセラレータ122は、プログラマブル装置128と、任意選択の不揮発性メモリ124と、RAM 126とを含む。プログラマブル装置128は、フィールドプログラマブルゲートアレイ(FPGA)、またはFPGAを有するSoCなどであってもよい。NVM 124は、フラッシュメモリなどの任意種類の不揮発性メモリを含むことができる。RAM 126は、DDR DRAMなどを含むことができる。プログラマブル装置128は、NVM 124およびRAM 126に連結される。また、プログラマブル装置128は、処理システム110の周辺バス115にも連結される。
【0016】
OS 144は、当技術分野で公知の任意の商品化オペレーティングシステム、例えばLinux(登録商標)、マイクロソフトウインドウズ(登録商標)、Mac OS(登録商標)であってもよい。ドライバ146は、ハードウェアアクセラレータ122を命令および制御するためのアプリケーションプログラミングインターフェイス(API)をハードウェアアクセラレータ122に提供する。アプリケーション150は、マイクロプロセッサ112上で動作し、何らかの作業を行うようにドライバ146を介してハードウェアアクセラレータ122を呼び出すためのソフトウェアを含む。アプリケーション150は、一部の機能をハードウェアアクセラレータ122にオフロードするニューラルネットワーク、ビデオ処理アプリケーション、ネットワーク処理アプリケーション、または類似するアプリケーションを含むことができる。
【0017】
動作時、プログラマブル装置128は、加速回路130を有するように構成される。一例において、加速回路130は、シェル回路130Aと、アプリケーション回路130Bとを含む。例えば、加速回路130は、静的領域134およびプログラマブル領域136を用いて実装されてもよい。シェル回路130Aは、静的領域134に実装される。アプリケーション回路130Bは、プログラマブル領域136、例えばカーネルロジック138に実装される。
【0018】
NVM 124が設けられている場合、プログラマブル装置128の構成データの少なくとも一部は、NVM 124に記憶されてもよい。NVM 124が設けられていない場合、構成データは、ハードウェアアクセラレータ122の外部に、例えばストレージ118に記憶されてもよい。プログラマブル装置128の構成データは、サーバ102の外部のコンピュータシステム上で動作する設計ツール108によって生成されてもよい。設計ツール108は、回路設計を構成データにコンパイルし、その後、プログラマブル装置128を構成するためにサーバ102に送信され、サーバ102に記憶される。一例において、構成データは、シェル回路130Aを実装するためのベースプラットフォーム(BP)アーカイブ132と、1つ以上のカーネルロジック138を実装するためのカーネルアーカイブ120とを含む。一例において、BPアーカイブ132は、NVM 124に記憶され、カーネルアーカイブ120は、ストレージ118に記憶される。しかしながら、BPアーカイブ132は、ストレージ118に記憶されてもよい。
【0019】
静的領域134は、当該領域内の回路がプログラマブル領域136の再構成時に変更されないという点で「静的」である。一例において、静的領域134は、インターフェイス回路、例えば、PCIeエンドポイント回路、ダイレクトメモリアクセス(DMA)コントローラ、相互接続、メモリコントローラ、メモリインターフェイス回路、(部分的な再構成をサポートするための)デカプラ回路、フラッシュプログラマ、デバッグ回路などを含む。
【0020】
一例において、カーネルロジック138は、IPチェッカ180を含む。IPチェッカ180は、プログラマブル装置128上でカーネルロジック138の実行が許可されていることを検証するように構成される。IPチェッカ180は、カーネルロジック138の実行が許可されたプログラマブル装置の有効な装置識別子(ID)のリストを含む署名付きホワイトリスト121にアクセスする。一例において、署名付きホワイトリスト121は、単独のファイルとしてまたはカーネルアーカイブ120の一部として、ストレージ118に記憶される。署名付きホワイトリスト121は、構成時にプログラマブル装置128にロードされてもよく、または実行時にストレージ118からアクセスされてもよい。一例において、署名付きホワイトリスト121は、有効な装置IDのリストおよびカーネルロジック138のプロバイダ(本明細書ではシステムインテグレータと呼ばれる)によって生成された署名を含む証明書である。IPチェッカ180は、署名付きホワイトリスト121の署名を検証した後、プログラマブル装置128の装置IDを署名付きホワイトリスト121中の装置IDリストと照合する。両方の条件が満たされた場合、IPチェッカ180は、プログラマブル装置128上でカーネルロジック138の実行を許可する。そうでない場合、IPチェッカ180は、カーネルロジック138の実行を禁止する。
【0021】
図2は、一例に係る加速回路130を示すブロック図である。加速回路130は、インターフェイス回路140と、カーネルロジック138とを含む。この例において、インターフェイス回路140は、PCIeエンドポイント回路(PCIeエンドポイント202)、DMAコントローラ204、相互接続回路(相互接続206)、メモリコントローラ210、およびメモリインターフェイス212を含む。インターフェイス回路140は、明瞭性のために省略されている他のサポート回路(例えば、デカップラ回路、デバッグ回路など)を含むことができる。PCIeエンドポイント202は、周辺バス115への物理インターフェイスを提供する。DMAコントローラ204は、RAM 126、メモリ142およびカーネル138に対するDMA動作を容易にする。相互接続206は、DMAコントローラ204をメモリ142に連結すると共に、カーネル138の入力インターフェイスに連結する。相互接続206は、カーネルロジック138の出力インターフェイスに連結されると共に、メモリコントローラ210に連結される。メモリコントローラ210は、メモリインターフェイス212に連結される。メモリインターフェイス212は、(
図1に示された)RAM 126に連結される。
【0022】
動作時、ドライバ146は、DMAコントローラ204を介して、カーネルロジック138に直接にアクセスすることができる。カーネルロジック138は、メモリコントローラ210を介して、RAM 126にアクセスすることができる。システムメモリ116とRAM 126との間のDMA動作を用いて、ソフトウェア106とカーネルロジック138との間でデータを交換することができる。いくつかの例において、(構成時に署名付きホワイトリスト121を有するように構成されていない場合)、IPチェッカ180は、DMA動作を用いて、実行時に署名付きホワイトリスト121を受信する。
【0023】
図3は、一例に係る設計ツール108を示すブロック図である。設計ツール108は、ハードウェアプラットフォーム304とソフトウェアプラットフォーム306とを備えるコンピュータ302を含む。ハードウェアプラットフォーム304は、CPU 308と、メモリ310と、記憶装置312と、入出力(IO)装置314とを含む。CPU 308は、任意種類のマイクロプロセッサであってもよい。メモリ310は、1つ以上のRAMモジュール、例えば、DDR DRAMを含むことができる。記憶装置312は、ローカル記憶装置(例えば、1つ以上のハードディスク、フラッシュメモリモジュール、ソリッドステートディスク、および光学ディスク)および/またはコンピュータ302と1つ以上のネットワークデータ記憶システムとの通信を可能にする記憶インターフェイスを含む。IO装置314は、コンピュータ302との通信を可能にする。ソフトウェアプラットフォーム306は、OS 316および回路設計ツール318を含む。OS 316は、当技術分野で公知の任意の商品化オペレーティングシステム、例えばLinux(登録商標)、マイクロソフトウインドウズ(登録商標)、Mac OS(登録商標)などであってもよい。回路設計ツール318は、プログラマブル装置をプログラムするために使用することができる回路設計を生成するように構成される。ユーザは、回路設計ツール318と相互作用することによって、加速回路130のカーネル設計を生成する。以下でさらに説明するように、回路設計ツール318は、各カーネル設計にIPチェッカ180を追加する。ソフトウェアプラットフォーム306は、本明細書でさらに説明するように、公開/秘密鍵の生成、暗号化、復号などの他の機能を実行する他のアプリケーションソフトウェア319を含むことができる。
【0024】
図4は、一例に係るプログラマブル装置54を示すブロック図である。プログラマブル装置54は、複数のプログラマブル集積回路(IC)1、例えば、プログラマブルIC 1A、1B、1Cおよび1Dを含む。一例において、各プログラマブルIC 1は、インターポーザ51上に設けられたICダイである。各プログラマブルIC 1は、プログラマブル装置54のスーパーロジック領域(SLR)53、例えば、SLR 53A、53B、53Cおよび53Dを含む。プログラマブルIC 1は、インターポーザ51上の導体(スーパーロングライン(SLL)52と称される)を介して相互に接続されている。
【0025】
図5は、一例に係るプログラマブルIC 1を示すブロック図である。プログラマブルIC 1は、プログラマブルロジック3(プログラマブルファブリックとも称される)と、構成ロジック25と、構成メモリ26とを含む。プログラマブルIC 1は、不揮発性メモリ27、DRAM28および他の回路29などの外部回路に連結されてもよい。プログラマブルロジック3は、ロジックセル30と、サポート回路31と、プログラマブル相互接続32とを含む。ロジックセル30は、複数の入力の一般的なロジック機能を実現するように構成され得る回路を含む。サポート回路31は、トランシーバ、入出力ブロック、デジタル信号プロセッサ、メモリなどの専用回路を含む。ロジックセルおよびサポート回路31は、プログラマブル相互接続32を介して相互に接続されてもよい。ロジックセル30をプログラムするための情報、サポート回路31のパラメータを設定するための情報、およびプログラマブル相互接続32をプログラムするための情報は、構成ロジック25によって構成メモリ26に記憶される。構成ロジック25は、不揮発性メモリ27または任意の他のソース(例えば、DRAM28または他の回路29)から、構成データを取得することができる。いくつかの例において、プログラマブルIC 1は、処理システム2を含む。処理システム2は、マイクロプロセッサ、メモリ、サポート回路、およびIO回路などを含むことができる。
【0026】
図6は、一例に係るプログラマブルIC 1のシステムオンチップ(SoC)実装を示すブロック図である。この例において、プログラマブルIC 1は、処理システム2およびプログラマブルロジック3を含む。処理システム2は、様々な処理ユニット、例えば、リアルタイム処理ユニット(RPU)4、アプリケーション処理ユニット(APU)5、グラフィック処理ユニット(GPU)6、構成およびセキュリティユニット(CSU)12、プラットフォーム管理ユニット(PMU)122などを含む。また、処理システム2は、様々なサポート回路、例えば、オンチップメモリ(OCM)14、トランシーバ7、周辺装置8、相互接続16、DMA回路9、メモリコントローラ10、周辺装置15、多重化IO(MIO)回路13などを含む。処理ユニットおよびサポート回路は、相互接続16によって相互に接続されている。また、PL 3は、相互接続16に連結される。トランシーバ7は、外部ピン24に連結される。PL 3は、外部ピン23に連結される。メモリコントローラ10は、外部ピン22に連結される。MIO 13は、外部ピン20に連結される。PS 2は、通常、外部ピン21に連結される。APU 5は、CPU 17と、メモリ18と、サポート回路19とを含むことができる。
【0027】
図6の例において、プログラマブルIC 1は、ハードウェアアクセラレータ122に設けられてもよく、上述したように機能することができる。加速回路130は、PL 3にプログラムされてもよく、上述したように機能することができる。別の例において、上述したハードウェア104の機能は、コンピューティングシステムのハードウェアではなく、PS 2を用いて実現することができる。この場合、ソフトウェア106は、PS 2上で動作すると共に、上述したように機能する。
【0028】
PS 2を参照して、各々の処理ユニットは、1つ以上の中央処理ユニット(CPU)および関連回路、例えば、メモリ、割り込みコントローラ、ダイレクトメモリアクセス(DMA)コントローラ、メモリ管理ユニット(MMU)、および浮動小数点ユニット(FPU)などを含む。相互接続16は、処理ユニットを相互接続すると共に、PS 2内の他の構成要素を処理ユニットに相互接続するように構成された様々なスイッチ、バス、通信リンクなどを含む。
【0029】
OCM 14は、PS 2の全体に分散され得る1つ以上のRAMモジュールを含む。例えば、OCM 14は、バッテリバックアップRAM(BBRAM)、密結合メモリ(TCM)などを含むことができる。メモリコントローラ10は、外部DRAMにアクセスするためのDRAMインターフェイスを含むことができる。周辺装置8および15は、PS 2へのインターフェイスを提供する1つ以上の構成要素を含むことができる。例えば、周辺装置15は、グラフィック処理ユニット(GPU)、ディスプレイインターフェイス(例えば、ディスプレイポート、HDMI(登録商標)ポート)、ユニバーサルシリアルバス(USB)ポート、イーサネット(登録商標)ポート、ユニバーサル非同期トランシーバ(UART)ポート、シリアル周辺装置インターフェイス(SPI)ポート、汎用IO(GPIO)ポート、シリアルアドバンストテクノロジアタッチメント(SATA)ポート、およびPCIeポートなどを含むことができる。周辺装置15は、MIO 13に連結されてもよい。周辺装置8は、トランシーバ7に連結されてもよい。トランシーバ7は、シリアライザ/デシリアライザ(SERDES)回路、およびMGTなどを含むことができる。
【0030】
図7は、プログラマブルIC 1のフィールドプログラマブルゲートアレイ(FPGA)実装を示す。FPGAは、トランシーバ37、構成可能なロジックブロック(CLB)33、ランダムアクセスメモリブロック(BRAM)34、入力/出力ブロック(IOB)36、構成およびクロックロジック(CONFIG/CLOCKS)42、デジタル信号処理ブロック(DSP)35、専用入力/出力ブロック(I/O)41(例えば、構成ポートおよびクロックポート)、および他のプログラマブルロジック39(例えば、デジタルクロックマネージャ、アナログデジタル変換器およびシステム監視ロジックなど)を含む多数の異なるプログラマブルタイルを含む。また、FPGAは、PCIeインターフェイス40、アナログデジタル変換器(ADC)38などを含むことができる。
【0031】
いくつかのFPGAにおいて、
図7の上部の例示によって示されたように、各プログラマブルタイルは、同じタイル内のプログラマブルロジック要素の入力および出力端子48との接続を有する少なくとも1つのプログラマブル相互接続要素(INT)43を含むことができる。また、各プログラマブル相互接続要素43は、同じタイルまたは他のタイル内の隣接するプログラマブル相互接続要素の相互接続セグメント49との接続を含むことができる。また、各プログラマブル相互接続要素43は、ロジックブロック(図示せず)間の一般的なルーティングリソースの相互接続セグメント50との接続を含むことができる。一般的なルーティングリソースは、相互接続セグメント(例えば、相互接続セグメント50)のトラックを含むロジックブロック(図示せず)と、相互接続セグメントを接続するためのスイッチブロック(図示せず)との間のルーティングチャネルを含むことができる。一般的なルーティングリソースの相互接続セグメント(例えば、相互接続セグメント50)は、1つ以上のロジックブロックに亘って延在することができる。プログラム可能相互接続要素43は、一般的なルーティングリソースと共に、図示のFPGAのためのプログラム可能相互接続構造(プログラム可能相互接続)を実装する。
【0032】
例示的な実装形態において、CLB 33は、ユーザロジックを実装するようにプログラムできる構成可能なロジック要素(CLE)44と、単一のプログラマブル相互接続要素(INT)43とを含むことができる。BRAM 34は、1つ以上のプログラマブル相互接続要素の他に、BRAMロジック要素(BRL)45を含むことができる。一般的には、タイルに含まれる相互接続要素の数は、タイルの高さに依存する。図示の例示において、BRAMタイルは、5つのCLBと同様の高さを有するが、他の数(例えば、4つ)のCLBと同様の高さを有してもよい。DSPタイル35は、適切な数のプログラマブル相互接続要素の他に、DSPロジック要素(DSPL)46を含むことができる。IOB 36は、例えば、1つのインスタンスのプログラマブル相互接続要素43に加えて、2つのインスタンスの入力/出力ロジック要素(IOL)47を含むことができる。当業者には明らかなように、例えば、I/Oロジック要素47に接続された実際のI/Oパッドは、一般的に入力/出力ロジック要素47の領域に限定されない。
【0033】
図示の例示において、(
図6に示された)ダイの中央付近の水平領域は、構成、クロックおよび他の制御ロジックに使用される。この水平領域または列から延在する垂直列51は、FPGAの全幅にわたってクロックおよび設定信号を分配するために使用される。
【0034】
図7に示されたアーキテクチャを利用する一部のFPGAは、FPGAの大部分を構成する規則的な列構造を乱すための追加のロジックブロックを含む。追加のロジックブロックは、プログラマブルブロックおよび/または専用ロジックであってもよい。
【0035】
なお、
図7は、単に例示的なSOCアーキテクチャを示すことを意図している。例えば、行内のロジックブロックの数、行の相対幅、行の数および順序、行に含まれたロジックブロックの種類、ロジックブロックの相対サイズ、および
図7の上部に示された相互接続/ロジックの実装は、単に例示的なものである。例えば、実際のFPGAにおいて、ユーザロジックの効率的な実装を容易にするために、一般的に、CLBの2つ以上の隣接する列は、CLBの出現する箇所に含まれ、隣接するCLB行の数は、FPGAの全体的なサイズに応じて変化する。
【0036】
一例において、プログラマブル装置内のPL 3は、装置ID90を記憶する不揮発性メモリ(例えば、電子ヒューズ)を含む。装置IDは、プログラマブル装置の製造者によって使用される任意の一意的な識別子(例えば、96ビットの2進数)であってもよい。プログラマブル装置が複数のプログラマブルICを含む場合、各プログラマブルICは、一意的な装置ID90を含むことができる。
【0037】
図8は、一例に係るクラウドコンピューティングシステム800を示すブロック図である。クラウドコンピューティングシステム800は、複数のコンピュータ802を含み、各コンピュータ802は、1つ以上のハードウェアアクセラレータ804を含む。各ハードウェアアクセラレータ804は、1つ以上のプログラマブル装置を含み、各プログラマブル装置は、1つ以上の装置ID806を有する。特定のカーネルに対して、クラウド所有者は、当該カーネルを実行しようとするプログラマブル装置の装置IDリスト806を提供することができる。コンピュータ302は、装置IDリスト806を受信し、以下に説明するように処理することができる。
【0038】
図9は、一例に従って、カーネルの実行を特定のプログラマブル装置上にロックするための方法900を示すフローチャートである。方法900は、ステップ902を含む。ステップ902において、システムインテグレータ(例えば、カーネル開発者)は、任意の公開鍵暗号化システムを用いて、一対の公開鍵/秘密鍵を生成する。一例において、公開鍵暗号化システムは、RSA(Rivest-Shamir-Adleman)システム、例えばRSA-4096である。このようなシステムにおいて、公開鍵906は、暗号鍵であり、秘密鍵908は、復号鍵である。しかしながら、本発明のシステムにおいて、秘密鍵908は、暗号化に使用され、公開鍵906は、復号に使用される。秘密鍵による暗号化および公開鍵による復号を用いて署名するという概念は、本明細書の全体にわたって使用される。
【0039】
RSA-4096において、公開鍵/秘密鍵は、4096ビットの鍵である。当業者は、他の公開鍵暗号化システムを使用することができることを理解するであろう。明瞭性のために、本明細書の例において、RSA-4096を例示として説明する。ステップ902は、コンピュータ302上で動作するソフトウェアによって実行されてもよい。
【0040】
ステップ904において、DC所有者は、データセンタから、カーネルロジック138の実行を許可されたプログラマブル装置128の装置IDリスト910(例えば、システムインテグレータによってカーネルの実行をライセンスされた装置の装置ID)を検索する。一例において、クラウド所有者は、認可されていない(unauthorized)カーネルをプログラマブル装置にロードすることによって、装置IDを取得することができる。IPチェッカ180は、カーネルの実行を防止するが、装置IDを出力として提供することができる(例えば、IPチェッカ180は、プログラマブル装置から装置IDを読み取ることができる)。
【0041】
ステップ912において、システムインテグレータは、コンピュータ302上で動作するソフトウェアを用いて、装置ID910から署名付きホワイトリスト914を生成する。署名付きホワイトリスト914は、装置ID910およびシステムインテグレータによって生成された署名を含む。署名は、装置IDリスト(例えば、装置IDの文字列連結)のハッシュを計算することによって生成される。ハッシュは、当技術分野で公知の任意のハッシュ関数、例えば256ビットのセキュアハッシュアルゴリズム(SHA-256)を用いて、計算することができる。明瞭性のために、例として、SHA-256は、本明細書においてハッシュ関数として使用される。次いで、ハッシュ値および秘密鍵は、(例えば、RSA-4096を使用する)暗号化アルゴリズムに供給され、暗号化アルゴリズムは、平文ハッシュ値を暗号化することによって、暗号文署名(例えば、暗号化ハッシュ値)を生成する。
【0042】
ステップ916において、システムインテグレータは、回路設計ツール318を用いて、IPチェッカ180を含むカーネルを生成する。IPチェッカ180は、公開鍵906を有するように構成される。システムインテグレータは、カーネルおよび署名付きホワイトリスト914用のファイルを提供する。
【0043】
図10は、一例に従って、装置IDの署名付きホワイトリストを生成するための方法1000を示すブロック図である。装置IDリスト1003は、カーネルの実行を求めるプログラマブル装置の複数の承認済み装置ID1002を含む。ハッシュ関数1006(例えば、SHA-256)は、装置IDリスト1003(例えば、装置ID1002の文字列連結)を処理することによって、装置IDリスト1003のハッシュ値を生成する。暗号化関数1008は、システムインテグレータの秘密鍵を用いてハッシュ値を処理することによって、署名1010を生成する。ホワイトリスト1004は、承認済み装置ID1002および署名1010を含む。
【0044】
図11は、一例に従って、署名付きホワイトリストの有効性を検証するための方法1100を示すブロック図である。IPチェッカ180のハッシュ回路1102は、(例えば、SHA-256を用いて)承認済み装置ID1002を処理することによって、ハッシュ値を生成する。システムインテグレータの公開鍵にアクセスできるIPチェッカ180の復号回路1104は、署名1010を処理する。復号回路1104は、署名1010を復号することによって、平文ハッシュ値を生成する(例えば、システムインテグレータによって計算されたハッシュ値を復元する)。比較回路1106は、2つのハッシュ値を比較することによって、ホワイトリスト1004が有効であるか否か(例えば、改ざんされているか否か)を判断する。
【0045】
図12は、一例に従って、ホワイトリストを更新するための方法1200を示すフローチャートである。方法1200は、ステップ902を含む。ステップ902において、データセンタ所有者は、カーネルの実行を許可されたプログラマブル装置の装置ID(例えば、システムインテグレータによってカーネルの実行をライセンスされた装置の装置ID)の更新リスト1208を提供する。一例において、クラウド所有者は、認可されていないカーネルをプログラマブル装置にロードすることによって、装置IDを取得することができる。IPチェッカ180は、カーネルの実行を防止するが、装置IDを出力として提供することができる(例えば、IPチェッカ180は、プログラマブル装置から装置IDを読み取ることができる)。
【0046】
ステップ1210において、システムインテグレータは、コンピュータ302上で動作するソフトウェアを用いて、装置ID1208および秘密鍵1206から署名付きホワイトリスト1212を生成する。署名付きホワイトリスト1212は、装置ID1208およびシステムインテグレータによって生成された署名を含む。上述したように、署名は、装置IDリストのハッシュ値を計算し、平文ハッシュを暗号化して暗号文署名を生成することによって生成される。ステップ1216において、システムインテグレータは、署名付きホワイトリスト1212用のファイルを提供する。
【0047】
図13は、一例に係るIPチェッカ180を示すブロック図である。IPチェッカ180は、装置ID読み出し回路1302と、インターフェイス回路1312と、メモリ1304と、制御回路1308と、チェッカ回路1310とを含む。装置ID読み出し回路1302の出力は、チェッカ回路1310の入力およびインターフェイス回路1312の入力に連結される。制御回路1308は、メモリ1304に連結され、その出力は、チェッカ回路1310に連結される。チェッカ回路1310の出力は、インターフェイス回路1312の入力に連結される。
【0048】
装置ID読み出し回路1302は、プログラマブル装置の装置IDを読み出すように構成される。この例において、メモリ1304は、署名付きホワイトリスト1306を記憶するように構成される。チェッカ回路1310は、(制御回路1308を介して)装置IDと署名付きホワイトリスト1306とを受信するように構成される。チェッカ回路1310は、
図11の方法1100を実行することによって、署名付きホワイトリスト1306を検証する。また、チェッカ回路1310は、検証されたホワイトリスト1306を装置IDと比較することによって、装置が許可されているか否かを決定する。装置が許可されている場合、チェッカ回路1310は、イネーブル出力をアサートする(すなわち、カーネルを有効にする)。そうでない場合、チェッカ回路1310は、イネーブル出力をデアサートする(すなわち、カーネルを無効にする)。IPチェッカ180は、インターフェイス回路1312を介して、装置ID読み出し回路1302からの装置IDを出力することができる。
【0049】
図14は、別の例に係るIPチェッカ180を示すブロック図である。この例において、メモリ1304および制御回路1308は、設けられていない。その代わりに、IPチェッカ180は、インターフェイス回路1312を介して、外部ソースから(例えば、ホストコンピュータシステムから)署名付きホワイトリストを取得する。他の点では、IPチェッカ180は、上述した通りに機能する。
【0050】
図15は、一例に係るチェッカ回路1310を示すブロック図である。チェッカ回路1310は、装置ID比較回路1502と、メッセージハッシュ演算回路1504と、署名復号回路1506と、ハッシュ比較回路1508とを含む。装置ID比較回路1502は、署名付きホワイトリストおよび装置IDを受信する。装置ID比較回路1502は、装置IDが署名付きホワイトリストの装置IDリストに存在するか否かを判断する。存在する場合、署名復号化回路1506は、IPチェッカ180に設けられた公開鍵(すなわち、システムインテグレータの公開鍵)を用いて、署名付きホワイトリスト内の署名を復号し、平文ハッシュ値を復元する。メッセージハッシュ計算回路1504は、署名付きホワイトリストから承認済み装置ID1002のハッシュ値を生成するように構成される。ハッシュ比較回路1508は、2つのハッシュ値、すなわち、メッセージハッシュ演算回路1504から出力されたハッシュ値と署名復号回路1506から出力されたハッシュ値とを比較する。2つのハッシュ値が一致する場合、ハッシュ比較回路1508は、イネーブル出力をアサートする。そうでない場合、ハッシュ比較回路1508は、イネーブル出力をデアサートする。
【0051】
上述したように、IPチェッカ180は、プログラマブル装置の一意的な識別子に基づいて動作する。個々のインスタンスのIPをライセンスしようとするカーネル開発者は、IPの実行を許可された装置にロックするために、許可された装置の固有IDにアクセスする必要がある。
【0052】
図16A~16Cは、プログラマブル装置内の装置IDの配置例を示すブロック図である。
図16Aに示すように、プログラマブル装置1602は、単一のプログラマブルICを含む(すなわち、マルチダイ装置ではない)。カーネル1606は、プログラマブル装置1602に設けられる。カーネル1606は、プログラマブル装置1602の完全な構成であり、シェル回路なしで機能する。この場合、カーネル1606は、プログラマブル装置1602の装置ID1604を読み取るための回路を含むプログラマブル装置1602の全ての機能にアクセスすることができる。
【0053】
図16Bに示すように、プログラマブル装置1602は、単一のプログラマブルICを含む(すなわち、マルチダイ装置ではない)。しかしながら、この例において、静的領域1608は、カーネル1606をサポートするシェル回路を含む。プログラマブル装置1602は、装置ID1604を読み取るための回路を含む。カーネル1606は、装置ID1604を読み取る回路にアクセスすることができる。
【0054】
図16Cに示すように、プログラマブル装置1609は、複数のプログラマブルICを含む(すなわち、マルチダイ装置である)。静的領域1608は、プログラマブル装置1609の1つのSLR 1610に設けられ、カーネル1606は、プログラマブル装置1609の別のSLR 1612に設けられる。いくつかの装置において、1つのSLRは、「マスタSLR」として機能し、1つ以上の他のSLRは、「スレーブSLR」として機能する。SLR 1610は、静的領域1608を有するマスタSLRであり、SLR 1612は、カーネル1606を有するスレーブSLRであるとして仮定する。SLR 1610およびSLR 1612の両方は、固有の装置IDを有すると共に、装置IDを読み取るための回路を有する。明瞭性のために示していないが、プログラマブル装置1609の装置IDを読み取る回路設計は、マスターSLRの装置IDを読み取る。しかしながら、装置IDのスプーフィングを防止するように、装置IDを静的領域1608からカーネル1606にエクスポートすることは、実現不可能である。場合によっては、データセンタ所有者は、静的領域1608の構成を制御する。したがって、一例において、回路設計ツール318は、SLR 1612の装置ID1604を使用してIPをチェックするように構成される。カーネル1606は、SLR 1612を完全に構成するため、SLR 1612の装置ID1604を読み取るための回路にアクセスすることができる。このため、IPチェック部180は、SLR 1610の装置IDを使用してIPをチェックするのではなく、SLR 1612の装置ID1604を使用する。したがって、システムインテグレータは、装置ID1604がスプーフィングされていないことを保証する。
【0055】
図17は、一例に従って、コンピュータシステムに設けられたハードウェアアクセラレータのプログラマブル装置にカーネルロジックをロックするための方法1700を示すフローチャートである。方法1700は、ステップ1702から始まる。ステップ1702において、プログラマブル装置のプログラマブルファブリックにカーネルロジックを形成する。任意選択のステップ1703において、プログラマブル装置のプログラマブルファブリックにシェル回路を形成する。ステップ1704において、IPチェッカ回路180は、プログラマブル装置の装置IDと署名付きホワイトリストとを取得する。ステップ1706において、IPチェッカ回路180は、署名付きホワイトリストの署名を検証する。ステップ1708において、IPチェッカ回路180は、装置IDをデバイスIDリストと比較する。ステップ1710において、IPチェッカ回路180は、装置IDリストにおける装置IDの有無および署名の検証に応じて、カーネルロジックのイネーブルを選択的にアサートまたはデアサートする。これらのステップを実行するためのIPチェッカ回路180の動作は、上述したものと実質的に同様である。
【0056】
一例において、コンピュータシステムのハードウェアアクセラレータが説明される。このハードウェアアクセラレータは、プログラマブル装置を含み、このハードウェアアクセラレータは、プログラマブル装置のプログラマブルファブリックに形成されたカーネルロジックと、カーネルロジックに形成された知的財産(IP)チェッカ回路とをさらに含む。IPチェッカ回路は、プログラマブル装置の装置識別子(ID)と署名付きホワイトリストとを取得するように構成され、署名付きホワイトリストは、装置IDリストおよび署名を含み、署名付きホワイトリストの署名を検証し、装置IDを装置IDリストと比較し、および装置IDリストにおける装置IDの有無および署名の検証に応じて、カーネルロジックのイネーブルを選択的にアサートまたはデアサートするように構成される。
【0057】
一例において、ハードウェアアクセラレータは、プログラマブルファブリックに形成されたシェル回路をさらに含む。シェル回路は、コンピュータシステムとカーネルロジックとの間のインターフェイスを提供するように構成される。
【0058】
一例において、プログラマブルファブリックは、第1のプログラマブルファブリックであり、ハードウェアアクセラレータは、プログラマブル装置の第2のプログラマブルファブリックに形成されたシェル回路をさらに含む。シェル回路は、コンピュータシステムとカーネルロジックとの間のインターフェイスを提供するように構成される。IPチェッカ回路は、プログラマブル装置の第1のプログラマブルファブリックから装置IDを取得する。
【0059】
一例において、プログラマブル装置は、第1のプログラマブルファブリックを有する第1のプログラマブルICと、第2のプログラマブルファブリックを有する第2のプログラマブルICとを含む。
【0060】
一例において、IPチェッカ回路は、署名付きホワイトリストを有するように構成される。一例において、IPチェッカ回路は、ハードウェアアクセラレータを設けたコンピュータシステムから署名付きホワイトリストを受信する。
【0061】
一例において、IPチェッカ回路は、一対の公開鍵/秘密鍵の秘密鍵を用いて暗号化された署名を、一対の公開鍵/秘密鍵の公開鍵を用いて復号し、装置IDリストのハッシュを決定し、およびハッシュを復号された署名と比較することによって、署名付きホワイトリストの署名を検証するように構成される。
【0062】
一例において、IPチェッカ回路は、装置IDを読み出すように構成された装置ID読み出し回路と、署名付きホワイトリストを記憶するように構成されたメモリと、装置IDを装置IDリストと比較し、カーネルロジックのイネーブルを選択的にアサートまたはデアサートするように構成されたチェッカ回路とを含む。
【0063】
一例において、IPチェッカ回路は、装置IDを読み出すように構成された装置ID読み出し回路と、コンピュータシステムから署名付きホワイトリストを受信するように構成されたインターフェイス回路と、装置IDを装置IDリストと比較し、カーネルロジックのイネーブルを選択的にアサートまたはデアサートするように構成されたチェッカ回路とを含む。
【0064】
一例において、カーネルロジックをコンピュータシステムに設けられたハードウェアアクセラレータのプログラマブル装置にロックするための方法が説明される。この方法は、プログラマブル装置のプログラマブルファブリックにおいてカーネルロジックを形成することと、カーネルロジックに形成された知的財産(IP)チェッカ回路が、プログラマブル装置の装置識別子(ID)と署名付きホワイトリストとを取得することとを含み、署名付きホワイトリストは、装置IDリストおよび署名を含み、署名付きホワイトリストの署名を検証することと、装置IDを装置IDリストと比較することと、IPチェッカ回路が、装置IDリストにおける装置IDの有無および署名の検証に応じて、カーネルロジックのイネーブルを選択的にアサートまたはデアサートすることとを含む。
【0065】
一例において、この方法は、プログラマブルファブリック内でシェル回路を構成することをさらに含む。シェル回路は、コンピュータシステムとカーネルロジックとの間のインターフェイスを提供するように構成される。
【0066】
一例において、プログラマブルファブリックは、第1のプログラマブルファブリックを含み、方法は、プログラマブル装置の第2のプログラマブルファブリック内でシェル回路を構成することをさらに含む。シェル回路は、コンピュータシステムとカーネルロジックとの間のインターフェイスを提供するように構成され、IPチェッカ回路は、プログラマブル装置の第1のプログラマブルファブリックから装置IDを取得する。
【0067】
一例において、プログラマブル装置は、第1のプログラマブルファブリックを有する第1のプログラマブルICと、第2のプログラマブルファブリックを有する第2のプログラマブルICとを含む。
【0068】
一例において、IPチェッカ回路は、署名付きホワイトリストを有するように構成される、またはコンピュータシステムから署名付きホワイトリストを受信する。
【0069】
一例において、IPチェッカ回路は、一対の公開鍵/秘密鍵の秘密鍵を用いて暗号化された署名を、一対の公開鍵/秘密鍵の公開鍵を用いて復号し、装置IDリストのハッシュを決定し、およびハッシュを復号された署名と比較することによって、署名付きホワイトリストの署名を検証するように構成される。
【0070】
上記は、特定の例を記載するが、本発明の基本的な範囲から逸脱することなく、他の例およびさらなる例を考案することができる。本発明の範囲は、以下の特許請求の範囲によって規定される。