詳細な説明
本開示には、新規な特徴を規定する特許請求の範囲が添付されているが、本開示内で説明される様々な特徴は、図面と併せてこの説明を考慮することによってよりよく理解されると考えられる。本明細書に記載のプロセス(複数可)、機械(複数可)、製造物(複数可)、およびそれらの任意の変形は、例示の目的で提供される。本開示内で説明されている特定の構造的および機能的詳細は、限定として解釈されるべきではなく、単に特許請求の範囲の基礎として、および、実質的に任意の適切に詳述されている構造を様々に採用するために当業者を教示するための表現の基礎として解釈されるべきである。さらに、本開示内で使用される用語および語句は、限定することを意図するものではなく、説明されている特徴の理解可能な説明を提供することを意図する。
本開示は、プログラマブル集積回路(IC)などのプログラマブルデバイスのステータスを追跡することに関する。本開示内で説明されている本発明の構成によれば、例えばICなどのプログラマブルデバイスのステータスを、経時的に追跡することができる。プログラマブルデバイスは、内部におけるデバイスイメージのロードおよび/またはアンロードに関してプログラマブルデバイスのステータスを経時的に追跡することができるプロセッサを含む。例えば、経時的に、異なるデバイスイメージがプログラマブルデバイスにロードされると、各デバイスイメージに関する情報が、プロセッサによって記憶され得る。デバイスイメージがプログラマブルデバイスからアンロードされると、プロセッサは、各デバイスイメージのアンロードに関するさらなる情報を記憶することができる。一態様では、プロセッサは、デバイスイメージがプログラマブルデバイスにロードされるとき、および/またはプログラマブルデバイスからアンロードされるときに、リアルタイムで情報を記憶することができる。
プログラマブルデバイスのデバイスイメージのロードおよび/またはアンロードに関する情報を経時的に記憶することによって、プログラマブルデバイスに実装された異なる計算ユニットおよび/またはユーザ指定回路の履歴記録が作成される。外部システムとは対照的にプログラマブルデバイス自体によって作成されるこの履歴記録は、デバッグまたは他の分析の目的で読み出し、使用することができる。一態様では、履歴記録を作成するプログラマブルデバイス内のプロセッサは、デバイスイメージのロードおよびアンロードの役割を担う同じプロセッサである。したがって、履歴記録は、経時的にプログラマブルデバイスにロードされ、プログラマブルデバイスからアンロードされている複数の異なるデバイスイメージの完全な一覧である。
従来のプログラマブルデバイスの場合、デバイスのステータスを経時的に追跡する取り組みは、外部システムによって行われることが多い。例えば、ホストシステムが、アクセラレータとしてプログラマブルデバイスを使用することができる。したがって、ホストシステムは、ホストシステム自体がプログラマブルデバイスに提供する任意のデバイスイメージを経時的に追跡することができる。しかしながら、最新のプログラマブルデバイスは、デバイスイメージをロードすることができる複数の異なる独立した通信パスを有することが多い。これらの通信パスのいくつかは、ホストシステムによって観測することができない。したがって、ホストシステムは、これらの通信パスの各々を追跡することができない。
例示的かつ非限定的な例として、プログラマブルデバイスは、ホストシステムへの周辺機器相互接続エクスプレス(PCIe)接続、別のシステムへ接続されるジョイントテストアクショングループ(JTAG)ポート、および/またはさらに別の外部システムへのイーサネット(登録商標)接続を有する場合がある。ホストシステムは、ホストシステムがPCIe接続を介してプログラマブルデバイスに提供するデバイスイメージしか追跡することができない場合がある。しかしながら、プログラマブルデバイスは、ホストシステムが認識することなく、JTAGまたはイーサネット(登録商標)を介してデバイスイメージを取得し得る。この例では、ホストシステムによって作成される任意の履歴記録は、不完全で不正確になる。
プログラマブルデバイスが新たなデバイスイメージによって再構成および/または再プログラムされ得、最新のデバイスが複数の異なるデバイスイメージを同時にロードされ得る回数を考えると、デバッグ、性能分析、およびシステム開発の目的のために、デバイスイメージのステータスを経時的に追跡することはますます重要になる。
本発明の構成のさらなる態様は、図面を参照して以下により詳細に説明される。説明を単純かつ明瞭にするために、図に示す要素は必ずしも原寸に比例して描かれていない。例えば、いくつかの要素の寸法は、明瞭にするために他の要素に対して誇張されている場合がある。さらに、適切であると考えられる場合、対応する、類似の、または同様の特徴を示すために、図面間で参照符号が繰り返される。
図1は、プログラマブルデバイス100の例示的なアーキテクチャを示す。プログラマブルデバイス100は、プログラマブルICおよび適応システムの一例である。一態様において、プログラマブルデバイス100は、システムオンチップ(SoC)の一例でもある。図1の例では、プログラマブルデバイス100は、単一の統合パッケージ内に設けられた単一のダイ上に実装される。他の例では、プログラマブルデバイス100は、複数の相互接続されたダイを使用して実装されてもよく、この場合、図1に示す様々なプログラマブル回路リソースは、異なる相互接続されたダイにまたがって実装される。
この例では、プログラマブルデバイス100は、データ処理エンジン(DPE)アレイ102と、プログラマブル論理(PL)104と、プロセッサシステム(PS)106と、ネットワークオンチップ(NoC)108と、プラットフォーム管理コントローラ(PMC)110と、1つ以上のハードワイヤード回路ブロック112とを含む。構成フレームインターフェース(CFI)114も含まれる。
DPEアレイ102は、複数の相互接続されたプログラマブルデータ処理エンジン(DPE)116として実装される。DPE116は、アレイ状に配置構成することができ、配線接続されている。各DPE116は、1つ以上のコア118およびメモリモジュール(図1において「MM」と略記)120を含むことができる。一態様では、各コア118は、各それぞれのコア内に含まれるコア固有プログラムメモリ(図示せず)に記憶されたプログラムコードを実行することができる。各コア118は、同じDPE116内のメモリモジュール120、および、DPE116のコア118に上下左右の方向に隣接する任意の他のDPE116のメモリモジュール120に直接アクセスすることができる。例えば、コア118-5は、メモリモジュール120-5、120-8、120-6、120-2を直接読み取ることができる。コア118-5は、メモリモジュール120-5、120-8、120-6、および120-2の各々を統合メモリ領域(例えば、コア118-5にとってアクセス可能なローカルメモリの一部)と見なす。これにより、DPEアレイ102内の異なるDPE116間のデータ共有が容易になる。他の例では、コア118-5は、他のDPE内のメモリモジュール120に直接接続されてもよい。
DPE116は、プログラマブル相互接続回路要素によって相互接続される。プログラマブル相互接続回路要素は、1つ以上の異なる独立したネットワークを含むことができる。例えば、プログラマブル相互接続回路要素は、ストリーミング接続から形成されるストリーミングネットワーク(陰影付き矢印)、メモリマップド接続から形成されるメモリマップドネットワーク(網掛け矢印)を含むことができる。メモリマップド接続は、DPE116間で構成データを搬送する。DPEアレイ102に関連する「構成データ、」という用語は、プログラムメモリに記憶されたプログラム命令を含むコア118をプログラムおよび/または構成するために使用されるデータ、および、DPE116内の制御レジスタに書き込まれ、その動作を制御するデータを指す。例えばPS106および/またはPMC110などの適切なマスタ回路が、メモリマップド接続によって、DPE116内の任意のアドレス指定可能なレジスタ(例えば、メモリモジュール、プログラムメモリ、および/または制御レジスタ)に書き込むことができる。
ストリーミング接続は、パケット化データ(例えば、PL104の場合のようにビット毎に接続を確立するのとは対照的に)を使用して通信することができる。一般に、アプリケーションデータはストリーム接続を介して搬送される。「アプリケーションデータ」という用語は、コア118によって操作されるか、またはコア118によって生成されるデータを指す。ストリーミング接続は、DPE116間の高帯域幅通信に適したポイントツーポイントの専用ストリームを実装することができる回路交換ストリーミング接続として、または、中帯域幅通信のために、ストリームが共有されて複数の論理ストリームを1つの物理ストリームに時間多重化するパケット交換ストリーミング接続として動作するようにプログラムすることができる。
メモリマップド接続を介して構成データをDPE116の制御レジスタにロードすることにより、各DPE116およびその中の構成要素を独立して制御することができる。DPE116は、DPE毎に有効化/無効化することができる。各コア118は、例えば、コア118またはクラスタとして動作する複数のコア118の分離を達成するために、説明したようなメモリモジュール120またはそのサブセットのみにアクセスするように構成することができる。各ストリーミング接続は、DPE116またはクラスタとして動作する複数のDPE116の分離を達成するために、選択されたDPE116のみの間の論理接続を確立するように構成することができる。各コア118は、そのコア118に固有のプログラムコードをロードすることができるため、各DPE116は、その中に1つ以上の異なるカーネルを実装することができる。
他の態様では、DPEアレイ102内のプログラマブル相互接続回路要素は、ストリーミング接続およびメモリマップド接続から独立した(例えば、これらとは明確に区別され、かつ別個のものである)デバッグネットワーク、ならびに/またはイベントブロードキャストネットワークなどの追加の独立したネットワークを含むことができる。いくつかの態様では、デバッグネットワークは、メモリマップド接続から形成され、および/またはメモリマップドネットワークの一部である。
コア118は、コア間カスケード接続を介して隣接するコア118と直接接続することができる。一態様では、コア間カスケード接続は、図示のようにコア118間の一方向の直接的な接続である。別の態様では、コア間カスケード接続は、コア118間の双方向の直接的な接続である。コア間カスケードインターフェースの作動はまた、構成データをそれぞれのDPE116の制御レジスタにロードすることによって制御することもできる。
例示的な実施態様では、DPE116はキャッシュメモリを含まない。キャッシュメモリを省略することにより、DPEアレイ102は、予測可能な、例えば決定論的な性能を達成することができる。さらに、異なるDPE116に配置されるキャッシュメモリ間の一貫性を維持する必要がないため、重大な処理オーバーヘッドが回避される。さらなる例では、コア118は入力割り込みを有しない。したがって、コア118は、中断されずに動作することができる。コア118への入力割り込みを省略することもまた、DPEアレイ102が予測可能な、例えば決定論的な性能を達成することを可能にする。
SoCインターフェースブロック122は、DPE116をプログラマブルデバイス100の他のリソースに接続するインターフェースとして動作する。図1の例では、SoCインターフェースブロック122は、一行に編成された複数の相互接続されたタイル124を含む。特定の実施形態では、SoCインターフェースブロック122内にタイル124を実装するために異なるアーキテクチャを使用することができ、そこでは各異なるタイルアーキテクチャが、プログラマブルデバイス100の異なるリソースとの通信をサポートする。タイル124は、あるタイルから別のタイルへと双方向にデータが伝播することができるように接続される。各タイル124は、真上のDPE116の列のインターフェースとして動作することができる。
タイル124は、図示のようにストリーミング接続およびメモリマップド接続を使用して、隣接するタイル、すぐ上のDPE116、および下方の回路要素に接続される。タイル124はまた、DPEアレイ102内に実装されたデバッグネットワークに接続するデバッグネットワークを含むことができる。各タイル124は、PS106、PL104、および/または別のハードワイヤード回路ブロック112などの別のソースからデータを受信することができる。タイル124-1は、例えば、他の列のDPE116にアドレス指定されたデータを、例えば124-2または124-3などの他のタイル124に送信しながら、上の列のDPE116にアドレス指定されたデータのそれらの部分を、アプリケーションまたは構成にかかわらず、そのようなDPE116に提供することができ、結果、そのようなタイル124は、したがってそれぞれの列のDPE116にアドレス指定されたデータをルーティングすることができる。
一態様では、SoCインターフェースブロック122は、2つの異なるタイプのタイル124を含む。第1のタイプのタイル124は、DPE116とPL104との間のみのインターフェースとして機能するように構成されたアーキテクチャを有する。第2のタイプのタイル124は、DPE116とNoC108との間、およびまたDPE116とPL104との間のインターフェースとして機能するように構成されたアーキテクチャを有する。SoCインターフェースブロック122は、第1のタイプのタイルと第2のタイプのタイルとの組み合わせ、または、第2のタイプのみのタイルを含んでもよい。
PL104は、指定された機能を実行するようにプログラムされ得る回路要素である。一例として、PL104は、フィールドプログラマブルゲートアレイタイプの回路要素として実装されてもよい。PL104は、プログラマブル回路ブロックのアレイを含むことができる。本明細書において定義される場合、「プログラマブル論理」という用語は、再構成可能デジタル回路要素を構築するために使用される回路要素を意味する。プログラマブル論理は、基本機能を提供する「タイル」と呼ばれることもある多くのプログラマブル回路ブロックから形成される。PL104のトポロジは、ハードワイヤード回路要素とは異なり、高度に構成可能である。PL104の各プログラマブル回路ブロックは、典型的には、プログラマブル要素126(例えば、機能要素)およびプログラマブル相互接続142を含む。プログラマブル相互接続142は、PL104の高度に構成可能なトポロジを提供する。プログラマブル相互接続142は、PL104のプログラマブル回路ブロックのプログラマブル要素126間の接続を提供するためにワイヤ毎に構成することができ、例えば、DPE116間の接続とは異なりビット毎(例えば、各ワイヤが1ビットの情報を搬送する)に構成可能である。
PL104のプログラマブル回路ブロックの例は、ルックアップテーブルおよびレジスタを有する構成可能論理ブロックを含む。下記に説明され、ハードブロックと呼ばれることもあるハードワイヤード回路要素とは異なり、これらのプログラマブル回路ブロックは、製造時に未定義関数を有する。PL104は、プログラム可能性がより制限されている、基本的な定義された機能も提供する他のタイプのプログラマブル回路ブロックを含むことができる。これらの回路ブロックの例は、デジタル信号処理ブロック(DSP)、位相ロックループ(PLL)、およびブロックランダムアクセスメモリ(BRAM)を含み得る。これらのタイプのプログラマブル回路ブロックは、PL104の他のものと同様に多数であり、PL104の他のプログラマブル回路ブロックと混在している。これらの回路ブロックはまた、プログラマブル相互接続142およびプログラマブル要素126を一般に含むアーキテクチャを有することができ、したがって、PL104の高度に構成可能なトポロジの一部である。
使用前に、PL104、例えばプログラマブル相互接続およびプログラマブル要素は、構成ビットストリームと呼ばれるデータを中にある内部構成メモリセルにロードすることによってプログラムまたは「構成」されなければならない。構成メモリセルは、構成ビットストリームをロードされると、PL104が、例えばトポロジなど、どのように構成され、どのように動作するか(例えば、実行される特定の機能)を定義する。本開示内で、「構成ビットストリーム」は、プロセッサまたはコンピュータによって実行可能なプログラムコードと同等ではない。
PS106は、プログラマブルデバイス100の一部として製造されるハードワイヤード回路要素として実装される。PS106は、各々がプログラムコードを実行することができる様々な異なるプロセッサタイプのいずれかとして実装されるか、またはそれらを含むことができる。例えば、PS106は、例えば、プログラムコードを実行することができる単一のコアなどの、個別のプロセッサとして実装されてもよい。別の例では、PS106は、マルチコアプロセッサとして実装されてもよい。さらに別の例では、PS106は、1つ以上のコア、モジュール、コプロセッサ、I/Oインターフェース、および/または他のリソースを含んでもよい。PS106は、様々な異なるタイプのアーキテクチャのいずれかを用いて実装されてもよい。PS106を実装するために使用され得る例示的なアーキテクチャは、ARMプロセッサアーキテクチャ、x86プロセッサアーキテクチャ、グラフィックスプロセッシングユニット(GPU)アーキテクチャ、モバイルプロセッサアーキテクチャ、DSPアーキテクチャ、前述のアーキテクチャの組み合わせ、またはコンピュータ可読命令もしくはプログラムコードを実行することが可能な他の適切なアーキテクチャを含んでもよいが、これらに限定されない。
NoC108は、プログラマブルデバイス100内のエンドポイント回路間でデータを共有するためのプログラマブル相互接続ネットワークである。エンドポイント回路は、DPEアレイ102、PL104、PS106、および/または選択されたハードワイヤード回路ブロック112内に配置することができる。NoC108は、専用スイッチングによる高速データパスを含むことができる。一例では、NoC108は、1つ以上の水平パス、1つ以上の垂直パス、または水平パスと垂直パスの両方を含む。図1に示す領域の配置構成および数は一例にすぎない。NoC108は、選択された構成要素および/またはサブシステムを接続するためにプログラマブルデバイス100内で利用可能な一般的なインフラストラクチャの一例である。
NoC108内では、NoC108を通じてルーティングされるべきネットは、プログラマブルデバイス100内での実装のためのユーザ回路設計が作成されるまで未知である。NoC108は、エンドポイント回路を接続するためにスイッチ間およびNoCインターフェース間でデータを渡すために、スイッチおよびインターフェースなどのNoC108内の要素がどのように構成され、動作するかを定義する構成データを、内部構成レジスタにロードすることによってプログラムすることができる。NoC108は、プログラマブルデバイス100の一部として製造され(例えば、配線接続され)、物理的に修正可能ではないが、ユーザ回路設計の複数の異なるマスタ回路と複数の異なるスレーブ回路との間の接続を確立するようにプログラムすることができる。NoC108は、電源投入時に、その中にいかなるデータパスまたはルートも実装しない。しかしながら、PMC110によって構成されると、NoC108は、エンドポイント回路間でデータパスまたはルートを実装する。
例示の目的のために、NoC108は、NoCマスタユニット(NMU)128と、NoCスレーブユニット(NSU)130と、ネットワーク132と、NoC周辺相互接続(NPI)134と、レジスタ136とを含むことができる。各NMU128は、エンドポイント回路をNoC108に接続する入口回路である。各NSU130は、NoC108をエンドポイント回路に接続する出口回路である。NMU128は、ネットワーク132を通じてNSU130に接続される。一例では、ネットワーク132は、NoCパケットスイッチ138(NPS)と、NPS138間のルーティング140とを含む。各NPS138は、NoCパケットの交換を実施する。複数の物理チャネルを実装するために、NPS138は、互いに、ならびに、ルーティング140を通じてNMU128およびNSU130に接続される。NPS138はまた、物理チャネルあたり複数の仮想チャネルをサポートする。
NPI134は、NMU128、NSU130、およびNPS138をプログラムするための回路要素を含む。例えば、NMU128、NSU130、およびNPS138は、その機能を決定するレジスタ136を含むことができる。NPI134は、機能を設定するようにNPIをプログラミングするためにレジスタ136に結合された周辺相互接続を含む。NoC108内のレジスタ136は、割り込み、サービス品質(QoS)、エラー処理および報告、トランザクション制御、電力管理、およびアドレスマッピング制御をサポートする。レジスタ136は、書き込み要求を使用してPMC110によってレジスタ136に書き込むことなどによって、再プログラムされる前に使用可能な状態で初期化することができる。NoC108の構成データは、例えばデバイスイメージの一部として不揮発性メモリ(NVM)に記憶することができ、NoC108および/または他のエンドポイント回路をプログラムするためにNPI134に提供することができる。NPI134はまた、ハードワイヤード回路ブロック112のうちの1つ以上をプログラムするためにPMC110によって使用されてもよい。
NMU128およびNSU130に結合されたエンドポイント回路要素は、硬化回路要素(例えば、ハードワイヤード回路ブロック112)、PL104に実装された回路要素、PS106内の構成要素、および/またはDPEアレイ102内の回路要素であり得る。所与のエンドポイント回路は、複数のNMU128または複数のNSU130に結合することができる。この例では、エンドポイント回路は、NoC108を通じて他のエンドポイント回路に接続されている。例えば、マスタエンドポイント回路は、NMU128に結合する。スレーブエンドポイント回路はNSU130に結合する。
ネットワーク132は、複数の物理チャネルを含む。物理チャネルは、NoC108をプログラムすることによって実装される。各物理チャネルは、1つ以上のNPS138および関連するルーティング140を含む。NPS138は、互いに結合されてスイッチのマトリックスを形成する。NMU128は、少なくとも1つの物理チャネルおよび任意選択的に1つ以上の仮想チャネルを通じてNSU130と接続する。ネットワーク132を通じた接続は、マスタ-スレーブ構成を使用する。一例では、ネットワーク132上の最も基本的な接続は、単一のスレーブに接続された単一のマスタを含む。しかしながら、他の例では、より複雑な構造を実装することができる。
NoC108は、より大規模なブートもしくはプログラミングプロセスの一部としてプログラムおよび/もしくは使用されてもよく、またはプログラマブルデバイス100の他のリソースとは独立してプログラムされてもよい。一般に、NoC108をプログラムすることは、PMC110が、ブート時にNoC構成データを受信し、ブート時に構成データをその中にロードすることを含むことができる。NoC108はまた、実行時にプログラムされてもよい。NoCプログラミングデータは、デバイスイメージの一部とすることができる。
PMC110は、プログラマブルデバイス100を管理する役割を担う。PMC110は、プログラマブルデバイス100全体にわたって他のプログラマブル回路リソースを管理することができるプログラマブルデバイス100内のサブシステムである。PMC110は、安全でセキュアな環境を維持し、プログラマブルデバイス100をブートし、通常動作中にプログラマブルデバイス100を管理することができる。例えば、PMC110は、プログラマブルデバイス100の複数の異なるプログラマブル回路リソース(例えば、DPEアレイ102、PL104、PS106、およびNoC108)の電源投入、ブート/構成、セキュリティ、電力管理、安全性監視、デバッグ、および/またはエラー処理に対する統合されたプログラマブル制御を提供することができる。PMC110は、PS106とPL104からとを分離する専用プラットフォームマネージャとして動作する。したがって、PS106およびPL104は、互いに独立して管理、構成、ならびに/あるいは電源をオフおよび/またはオフにすることができる。
一態様において、PMC110は、プログラマブルデバイス100全体のためのルートオブトラストとして動作することができる。一例として、PMC110は、プログラマブルデバイス100にロードされ得るプログラマブルデバイス100のプログラマブルリソースのいずれかの構成データを含むデバイスイメージを認証および/または検証する役割を担う。PMC110はさらに、動作中の改ざんからプログラマブルデバイス100を保護することができる。プログラマブルデバイス100のルートオブトラストとして動作することにより、PMC110は、PL104、PS106、および/またはプログラマブルデバイス100に含まれ得る任意の他のプログラマブル回路リソースの動作を監視することができる。PMC110によって実行されるようなルートオブトラスト機能は、PS106およびPL104、ならびに/または、PS106および/もしくはPL104によって実行される任意の動作とは区別され、分離される。
一態様では、PMC110は専用電源で動作する。したがって、PMC110は、PS106の電源およびPL104の電源とは別個かつ独立した電源によって給電される。このような電力の独立性により、PMC110、PS106、およびPL104は、電気的ノイズおよびグリッチに関して互いに保護されることが可能になる。さらに、PMC110が動作し続けている間に、PS106およびPL104の一方または両方の電源を切ることができる(例えば、一時停止されるか、または休止モードに置かれる)。この機能により、プログラマブルデバイス100全体が電源投入およびブートプロセス全体を実行する必要なしに、電源を切られた、例えば、PL104、PS106、NoC108などのプログラマブルデバイス100の任意の部分がより迅速に起動し、動作状態に復帰することが可能になる。
PMC110は、専用リソースを有するプロセッサとして実装されてもよい。PMC110は、複数の冗長プロセッサを含んでもよい。PMC110のプロセッサは、ファームウェアを実行することができる。ファームウェアの使用は、別個の処理ドメイン(サブシステム特有のものであり得る「電力ドメイン」から区別される)を作成する際の柔軟性を提供するために、リセット、クロッキング、および保護などの、プログラマブルデバイス100のグローバル機能の構成可能性およびセグメント化をサポートする。処理ドメインは、プログラマブルデバイス100の1つ以上の異なるプログラマブル回路リソースの混合または組み合わせを含むことができる(例えば、処理ドメインは、DPEアレイ102、PS106、PL104、NoC108、および/または他のハードワイヤード回路ブロック112からの異なる組み合わせまたはデバイスを含むことができる)。
ハードワイヤード回路ブロック112は、プログラマブルデバイス100の一部として製造された専用回路ブロックを含む。配線接続されるが、ハードワイヤード回路ブロック112は、1つ以上の異なる動作モードを実施するために、構成データを制御レジスタにロードすることによって構成することができる。ハードワイヤード回路ブロック112の例は、入力/出力(I/O)ブロック、プログラマブルデバイス100の外部の回路および/またはシステムに信号を送受信するためのトランシーバ、メモリコントローラなどを含むことができる。複数の異なるI/Oブロックの例は、シングルエンドおよび疑似差分I/Oを含むことができる。トランシーバの例は、高速差動クロックトランシーバを含むことができる。ハードワイヤード回路ブロック112の他の例は、暗号化エンジン、デジタル-アナログ変換器(DAC)、アナログ-デジタル変換器(ADC)などを含むが、これらに限定されない。一般に、ハードワイヤード回路ブロック112は、特定用途向けの回路ブロックである。
CFI114は、異なるユーザ指定の回路要素および/またはその中の回路要素を実装するために、それを通じて構成データ、例えば構成ビットストリームをPL104に提供することができるインターフェースである。CFI114は、PL104に構成データを提供するために、PMC110に結合され、PMCによってアクセス可能である。場合によっては、PMC110は、PS106が、PMC110によって構成されると、CFI114を介してPL104に構成データを提供することができるように、PS106を最初に構成することができる。一態様では、CFI114は、その中に組み込まれた内蔵巡回冗長検査(CRC)回路要素(例えば、CRC32ビット回路要素)を有する。したがって、CFI114にロードされ、および/またはCFI114を介してリードバックされる任意のデータは、データに添付されたコードの値をチェックすることによって完全性についてチェックすることができる。
図1に示す様々なプログラマブル回路リソースは、プログラマブルデバイス100のブートプロセスの一部として最初にプログラムすることができる。実行中に、プログラマブル回路リソースを再構成することができる。一態様では、PMC110は、DPEアレイ102、PL104、PS106、およびNoC108を最初に構成することができる。実行中の任意の時点で、PMC110はプログラマブルデバイス100の全部または一部を再構成することができる。場合によっては、PS106は、PMC110によって最初に構成されると、PL104および/またはNoC108を構成および/または再構成することができる。
図2は、プログラマブルデバイス100の特定の構造的および機能的態様を示す。図2の例は、部分的な再構成のためにプログラマブルデバイス100がどのように使用され得るかを示す。部分再構成は、再構成可能パーティション(例えば、処理ドメイン)と呼ばれるプログラマブルデバイス100内の特定のプログラマブル回路リソースの領域を、経時的にその領域について異なるプログラミングデータをプログラマブルデバイス100にロードすることによって動的に再構成され得るプロセスである。本明細書において定義されるものとしては、「再構成可能パーティション」という用語は、1つ以上の再構成可能モジュールを配置する(例えば、実装する)ことができるプログラマブルデバイス100(例えば、プログラマブルデバイス100のタイルおよび/または部位)のプログラマブル回路リソースのグループを意味する。これに関して、再構成可能パーティションは、1つ以上の異なる再構成可能モジュールをロードされ得るプログラマブルデバイス100の物理領域を指す。本明細書において定義されるものとしては、「再構成可能モジュール」という用語は、特定の再構成可能パーティション内のプログラマブルデバイス100などのプログラマブルデバイス上のリソースのグループをプログラムするために使用されるプログラミングデータを意味する。
再構成可能パーティションの再構成可能モジュール(複数可)は、再構成可能パーティション内に以前に実装されたものとは異なるユーザアプリケーションを指定することができる。再構成可能モジュール(複数可)は、再構成可能パーティションの外側または異なる再構成可能パーティション内にあるプログラマブルデバイス100のプログラマブル回路リソースのための新たなおよび/または異なる回路要素を指定しない。したがって、プログラマブルであり得るプログラマブルデバイス100の他の再構成可能パーティションが中断することなく動作し続ける間、1つ以上の再構成可能なパーティションは、互いに独立して繰り返し、部分的な再構成による変更を受けることができる。
図2の例では、プログラマブルデバイス100は、複数の再構成可能パーティション202-1および202-2を実装するように構成される。再構成可能パーティションの特定の数は例示を目的としており、限定するものではない。プログラマブルデバイス100は、図示されているよりも多くの再構成可能パーティションを実装するように構成されてもよい。さらに、プログラマブルデバイス100は、単一のより大きいパーティションとして構成されてもよい。
図2の例では、プログラマブルデバイス100は、プラットフォームを実装するように最初に構成されてもよい。プラットフォームは、プログラマブルデバイス100上の異なる再構成可能パーティション202に接続し、その中の再構成可能モジュールに、再構成可能パーティションの外部のプログラマブルデバイス100の他の部分および/またはプログラマブルデバイス100の外部のリソースと通信するためのインターフェースを提供するプログラマブルデバイス100の回路要素である。
一態様では、プラットフォームは静的回路要素として実装される。静的回路要素は、再構成可能パーティション202内の回路および/またはシステムのように修正または変更されないプログラマブルデバイス100のプログラマブル回路リソースを指す。したがって、プラットフォームは、再構成可能パーティション202内のプログラマブル回路リソースが経時的に(例えば、実行時に)動的に変更され得る間、中断されずに動作することが可能である。例えば、プラットフォームは、再構成可能パーティション202に実装されたユーザアプリケーションによって使用され得る、外部メモリに接続するためのメモリコントローラへの接続、他のネットワークに接続するためのインフラストラクチャ、ホストシステムなどの一般的なインフラストラクチャを提供することができる。これらの接続は、静的回路要素およびプラットフォームの一部の中にあってアクティブなままであり得るが、再構成可能パーティション202のうちの1つ以上またはすべては再構成を受ける。
各再構成可能パーティション202は、その中に実装された1つ以上の関連する再構成可能モジュールを有することができる。ユーザアプリケーションを指定する、再構成可能パーティションにロードされ得る特定の再構成可能モジュールは、経時的に変化し得る。各再構成可能パーティション202は、その中に実装された特定の再構成可能モジュール(複数可)に基づいて、経時的に異なる機能および/または動作を実行するように再プログラムすることができる。
図2の例では、各再構成可能パーティションは、DPEアレイ102の一部、PL104の一部、および1つ以上のハードワイヤード回路ブロック112を含む。示されているように、再構成可能パーティション202-1は、DPEアレイ102-1として示されているDPEアレイ102(例えば、1つ以上のDPE116)の一部、PL104-1内に実装されている1つ以上の回路ブロック、PS106-1として示されているPS106の1つ以上の構成要素(例えば、PS106の1つ以上のリアルタイムプロセッサ)、および1つ以上のハードワイヤード回路ブロック112-1を含む。再構成可能パーティション202-2は、DPEアレイ102-2として示されているDPEアレイ102(例えば、1つ以上のDPE116)の異なる部分、PL104-2内に実装されている1つ以上の他の回路ブロック、PS106-2として示されているPS106の1つ以上の他の構成要素(例えば、PS106の1つ以上のアプリケーションプロセッサ)、および1つ以上の他のハードワイヤード回路ブロック112-2を含む。
NoC108は、再構成可能パーティション202の外部に示されているが、NoC108の部分が、DPEアレイ102-1、PL104-1、PS106-1、およびHCB 112-1を接続するために使用されてもよく、一方で、NoC108の他の部分が、DPEアレイ102-2、PL104-2、PS106-2、およびHCB 112-2を接続するために使用されてもよく、一方でNoC108のさらに他の部分は、プラットフォームの一部であることを理解されたい。異なる再構成可能パーティションに対応するNoC108を通るデータパスは、互いに分離されたままにすることができる。
図2は、限定ではなく例示を目的として提供されている。これに関して、いくつかの再構成可能パーティションは、DPEアレイ102のいかなる部分も含まなくてもよく、PL104のいかなる部分も含まなくてもよく、PS106のいかなる部分も含まなくてもよく、および/またはいかなるハードワイヤード回路ブロック112も含まなくてもよい。いずれの場合でも、プログラマブルデバイス100が複数の再構成可能パーティションを実装する場合、各再構成可能パーティションは、他方から論理的に分離することができる。
一態様では、再構成可能パーティションにロードされた各再構成可能モジュールが、デバイスイメージ204(例えば、構成データのファイル)として指定される。各デバイスイメージ204は、1つ以上のセグメントを含むことができる。各セグメントは、再構成可能モジュールが実装される再構成可能パーティション内で使用されるかまたは含まれるプログラマブルデバイス100の異なる部分に対応する。例えば、DPEアレイ102、PL104、PS106、NoC108、およびハードワイヤード回路ブロック112の各々の少なくとも一部を使用する再構成可能モジュールは、DPEアレイ102に対応するセグメント、PL104に対応するセグメント、PS106に対応するセグメント、NoC108に対応するセグメント、およびハードワイヤード回路ブロック112に対応するセグメントを含み、各セグメントは、再構成可能パーティションに含まれる対応するプログラマブル回路リソースまたはその一部をプログラムするためのプログラミングおよび/または構成データを含む。
図2を参照すると、例えば、デバイスイメージ204-1は、DPEアレイ102-1をプログラムするセグメント、PL104-1をプログラムするセグメント、PS106-1をプログラムするセグメント、およびハードワイヤード回路ブロック112-1をプログラムするセグメントを含む。同様に、デバイスイメージ204-2は、DPEアレイ102-2をプログラムするセグメント、PL104-2をプログラムするセグメント、PS106-2をプログラムするセグメント、およびハードワイヤード回路ブロック112-2をプログラムするセグメントを含む。
一態様において、各デバイスイメージ204は、1つ以上の識別子(ID)を含むように作成することができる。各デバイスイメージ内のIDの例は、静的パーティションID、再構成可能パーティションID、および再構成可能モジュールIDを含むことができる。静的パーティションIDは、所与のデバイスイメージが互換性のある特定のプラットフォームを指定する。各静的パーティションIDは一意であってもよく、したがって、特定のプラットフォームを一意に識別する(例えば、異なるプラットフォームが異なる接続を提供し、異なるリソースを提供し、および/または異なる数の再構成可能パーティションをサポートする場合)。再構成可能パーティションIDは、デバイスイメージが構成するために使用され得るプログラマブルデバイス内の特定の再構成可能パーティションを指定する(例えば、デバイスイメージが実装される再構成可能パーティション)。再構成可能モジュールIDは、特定の再構成可能モジュールを指定する。再構成可能パーティションIDは、所与のプラットフォームによって実装される特定の再構成可能パーティションを一意に識別することができる。再構成可能モジュールIDは、特定の再構成可能モジュールを一意に識別することができる。
例えば、再構成可能モジュールが作成されるとき、各々が特定のプラットフォームによる運用性のために(例えば、設計ツールを使用して)作成される。上述したように、静的パーティションIDは、特定のプラットフォームを示すのでプラットフォームIDとも呼ばれ得るが、特定のプラットフォームを示す一意の識別子である。各再構成可能モジュールは、再構成可能モジュールがそれによって動作するように意図されている特定のプラットフォームのための静的パーティションID(例えば、プラットフォームID)を含むことができる。再構成可能モジュールは、その再構成可能モジュールに一意の再構成可能モジュールIDも含む。再構成可能モジュールを含むデバイスイメージは、静的パーティションIDおよび再構成可能モジュールIDを含む。
PMC110は、プラットフォームを指定するデバイスイメージ(例えば、「プラットフォームデバイスイメージ」)をロードすることができる。プラットフォームデバイスイメージは、他のプラットフォームからプラットフォームを一意に識別する静的パーティションIDを含む。プラットフォームデバイスイメージはまた、そのプラットフォームによって実装される1つ以上の再構成可能パーティション(例えば、再構成可能パーティションID)、および各それぞれの再構成可能パーティションと互換性のある(例えば、各それぞれの再構成可能パーティション内に実装することができる)1つ以上の再構成可能モジュール(再構成可能モジュールID)のリストを含むことができる。プラットフォームデバイスイメージをロードすると、PMC110は、示された情報を抽出し、その情報をプラットフォームのトレースデータとして記憶/維持することができる。
このように、PMC110は、再構成可能モジュールを指定するデバイスイメージをロードすると、デバイスイメージがプラットフォームと互換性があることを検証することができる。再構成可能モジュールのデバイスイメージは、例えば、デバイスイメージがそれと共に使用されることが意図されている特定のプラットフォームの静的パーティションID、再構成可能モジュールが実装されるプラットフォームによって実装される特定の再構成可能パーティションを示す再構成可能パーティションID、および、デバイスイメージによって指定される特定の再構成可能モジュールを一意に識別する再構成可能モジュールIDを指定することができる。例えば、PMC110は、プラットフォームの静的パーティションIDをデバイスイメージの静的パーティションIDと比較して、ロードされているデバイスイメージが、プログラマブルデバイス100に現在実装されているプラットフォームと互換性があることを保証することができる。PMC110はまた、デバイスイメージの再構成可能パーティションIDが、プラットフォームによって実装される再構成可能パーティション、およびデバイスイメージを使用して再構成される特定の再構成可能パーティションに対応することをチェックすることができる。PMC110はまた、デバイスイメージの再構成可能モジュールIDが、プラットフォームの再構成可能パーティションIDと互換性のあるものであること、例えば、デバイスイメージが構成しようとしている特定の再構成可能パーティションに関連してリストされていることをチェックしてもよい。
例示的かつ非限定的な例として、ホストシステム(例えば、プログラマブルデバイス100がアクセラレータとして動作するコンピュータシステム)が、プログラマブルデバイス100に現在ロードされているものとは異なるプラットフォームと共に動作するように設計および意図されたプログラマブルデバイス100にデバイスイメージをロードしようとする場合、PMC110は、デバイスイメージを拒否し、エラーコードを生成し、エラーコードをプログラミングアクセストレースデータ(PATD)レジスタ内に持続させることができる。
したがって、一態様では、PMC110がさらなるデバイスイメージをロードすると、PMC110は、デバイスイメージがその中に実装された特定のプラットフォームおよびプラットフォームの特定の再構成可能パーティションと互換性があることをチェックする。例えば、PMC110がデバイスイメージ204-1をロードすると、PMC110は、デバイスイメージ204-1の静的パーティションIDがプログラマブルデバイス100内に実装されたプラットフォームの静的パーティションIDと一致することをチェックすることができる。PMC110はさらに、デバイスイメージ204-1内で指定された再構成可能パーティションIDが、デバイスイメージ204-1が実装される特定の再構成可能パーティション(例えば、202-1)の再構成可能パーティションIDと一致することをチェックする。PMC110は、デバイスイメージ204-1の再構成可能モジュールIDが再構成可能パーティション202-1の許可された再構成可能モジュールIDと一致することをさらにチェックすることができる。
同様に、PMC110は、デバイスイメージ204-2の静的パーティションIDが、プログラマブルデバイス100内に実装されたプラットフォームの静的パーティションIDと一致することをチェックすることができる。PMC110はさらに、デバイスイメージ204-2内で指定された再構成可能パーティションIDが、デバイスイメージ204-2が実装される特定の再構成可能パーティション(例えば、202-2)の再構成可能パーティションIDと一致することをチェックする。PMC110は、デバイスイメージ204-2の再構成可能モジュールIDが再構成可能パーティション202-2の許可された再構成可能モジュールIDと一致することをさらにチェックすることができる。
図3は、PMC110の例示的な実施態様を示す。図3の例では、PMC110は、PMC処理ユニット302(PS106とは別個で区別される)を含む。PMC処理ユニット302は、プロセッサ304およびプロセッサ306などの1つ以上のプロセッサを含むことができる。PMC処理ユニット302は、1つ以上のROM308、1つ以上のRAM310、およびローカルレジスタ312をさらに含む。ROM(複数可)308およびRAM(複数可)310は、例えばプロセッサ304,306などの、PMC処理ユニット302内のプロセッサによってのみアクセス可能である。
一態様において、プロセッサ304および306の各々は、適切な投票回路要素を使用してロックステップで動作することができる冗長プロセッサ(例えば、三重冗長プロセッサ)として実装される。別の態様では、プロセッサ304は、ROM(複数可)308へのアクセス(例えば、ROM(複数可)に記憶されている実行コード)専用であり、一方、プロセッサ306は、RAM(複数可)310に記憶された実行コード専用である。別の態様では、各プロセッサ304,306はROM308およびRAM310を有し、結果、各プロセッサ304,306は独立した専用のROM308および独立した専用のRAM310を有する。図3は、限定ではなく例示を目的として提供されている。この点に関して、PMC処理ユニット302は単一のプロセッサを含んでもよい。
RAM310は、誤り訂正符号化(ECC)回路要素によって保護することができる。プロセッサ304,306は、ROM(複数可)308に記憶されたトラステッドコードを最初に実行することによってプログラマブルデバイス100を電源投入および構成するために使用することができる。ROM(複数可)308に記憶されたトラステッドコードを実行する際に、プロセッサ304,306は、次いで、ファームウェアをメインブートデバイスからRAM(複数可)310にロードすることができる。ローカルレジスタ312は、PMC処理ユニット302のための構成レジスタであり、PMC処理ユニット302によってのみアクセスされ得る。
プログラマブルデバイス100のルートオブトラストとしてPMC110を動作させる一態様は、ファームウェアをRAM(複数可)310にロードするためにROM(複数可)308に記憶されたコードを使用することである。プロセッサ304は、例えば、ROM(複数可)308からのコードを実行して、プロセッサ(複数可)306によって実行されるプログラマブルデバイス100にロードされた任意のファームウェア、および/または、プログラマブルデバイス100にロードされた任意のデバイスイメージの認証および検証などの動作を開始することができる。したがって、プログラマブルデバイス100の任意の部分を構成および/またはプログラムするために使用される任意のデバイスイメージは、PMC110によって最初に認証および/または検証され得る。
ブート後、プロセッサ304,306は、ファームウェアの制御下でPMC110に含まれる様々な構成要素を使用して様々な異なる機能を実行することができる。例えば、プロセッサ304,306は、電力管理、電圧および温度監視、安全性およびセキュリティイベント応答、ならびにエラー管理を実行することができる。さらに、プロセッサ304,306は、デバイスイメージのロードおよびアンロードを制御することによって、プログラマブルデバイス100の構成を制御することができる。一態様では、プログラマブルデバイス100にロードされた任意のデバイスイメージは、PMC110の制御下でロードまたはアンロードされる。
PMC処理ユニット302は、スイッチ314に接続されている。PMC処理ユニット302は、スイッチ314によってPMC110およびプログラマブルデバイス100内の他の構成要素と通信することができる。スイッチ314は、複数のメモリマップドスイッチおよび/または複数のストリームスイッチを含むことができる。スイッチ314は、PMC共有RAM316、グローバルレジスタ318、I/Oインターフェース(複数可)320(例えば、320-1、320-2、320-3、および320-4)、セキュアストリームスイッチ322、スレーブブートインターフェース(SBI)324、セキュリティアクセラレータ326、アナログシステム328、リアルタイムクロック(RTC)330、電力管理およびリセット332、エラー管理334、構成フレームユニット(CFU)336、およびSelectMapインターフェース338に接続されている。SBI324はJTAGポート340に接続されている。
PMC共有RAM316は、処理中にプログラマブルデバイス100のための構成データ(例えば、デバイスイメージ)を記憶するために、およびPMC110のための汎用データ処理RAMとして使用することができる。グローバルレジスタ318は、PMC110内の任意の(例えば、すべての)マスタによってアクセス可能な構成レジスタである。グローバルレジスタ318は、汎用レジスタ、電力制御レジスタ、エラー管理レジスタ、およびサービス割り込み要求インターフェースを含むことができる。
一態様において、グローバルレジスタ318は、PATDレジスタ320を含む。PATDレジスタ320は、プログラマブルデバイス100のためのPMC処理ユニット302によって経時的にロードおよびアンロードされる異なるデバイスイメージに対応するトレースデータを記憶することができる。例えば、PMC処理ユニット302は、プログラマブルデバイス100にロードされている各デバイスイメージに関する情報を、PATDレジスタ320に記憶することができる。PMC処理ユニット302が新たなおよび/または異なるデバイスイメージをプログラマブルデバイス100にロードすると、PATDレジスタ320に記憶された既存の情報は、トレースデータの記憶のために割り当てられたメモリに移動することができる。メモリは、PMC共有RAM316、プログラマブルデバイス100内の別のメモリ(例えば、PL104に割り当てられているBRAM)、またはプログラマブルデバイス100の外部にあるRAMであってもよい。既存のまたは古いトレースデータがPATDレジスタ320から移動されると、新たなトレースデータが以前のトレースデータを上書きしてそこに記憶され得る。
I/Oインターフェース320は、多重化入出力(MIO)342に結合することができる。また、MIO342は、SelectMap338、PS106、PL104にも接続されている。MIO342は、プログラマブルデバイス100のI/O信号をSelectMap338、PS106、PL104、および/またはI/Oインターフェース320に選択的に接続することができる。I/Oインターフェース320の例は、I2C、ならびにシリアル周辺インターフェース(SPI)、SD/eMMC、およびユニバーサルシリアルバス(USB)などの1つ以上のフラッシュインターフェースを含むが、これらに限定されない。MIO342は、構成に応じて複数の異なる機能を果たすことができるプログラマブルデバイス100のI/Oピンへの接続を提供する。例えば、MIO342は、信号を構成のためにSelectMap338に、またはフラッシュメモリインターフェースおよび/もしくはUSBインターフェースなどのI/Oインターフェース320に接続するように構成することができる。
セキュアストリームスイッチ322は、処理のためにセキュリティアクセラレータ326に提供される、デバイスイメージを搬送することができるデータストリームが安全であることを保証する。SBI324は、プログラマブルデバイス100のスレーブブートを容易にする。図示されていないが、SBI324は、SelectMap338およびNoC108に接続することができる。
セキュリティアクセラレータ326は、暗号化および/または復号を実行することができる暗号化/復号ブロック346と、認証を実行することができる認証ブロック348と、受信データ上でハッシュを生成することができるハッシュブロック350とを含むことができる。一例では、暗号化/復号ブロック346は、ガロアカウンタモード(GCM)を使用した高度暗号化規格(AES)(AES-GCM)を実行することができる対称鍵暗号化エンジンである。一例では、認証ブロック348は、公開鍵暗号化を実行することができる。例えば、認証ブロック348は、楕円曲線デジタル署名アルゴリズムおよび/またはRivest-Shamir-Adlemanを実装することができる。ハッシュブロック350は、セキュアハッシュアルゴリズム3/394を実行することができる。セキュリティアクセラレータ326はまた、乱数を生成することができる真性乱数発生器(TRNG)回路352およびバッテリバックアップされたRAM(BBRAM)354回路ブロックを含むことができる。セキュリティアクセラレータ326に含まれる特定の回路ブロックは、限定ではなく例示を目的として提供されている。一態様では、セキュリティアクセラレータ326のブロック346,348および350のみがセキュアストリームスイッチ322を介してアクセス可能であり、一方で、ブロック352および354はスイッチ314によってアクセス可能である。
アナログシステム328は、プログラマブルデバイス100の周囲の様々な場所および/または様々なサブシステムに配置することができる1つ以上の遠隔システムモニタ回路から電圧および温度を監視することができるシステムモニタと、PMC110のためのクロック信号を生成することができるシステム発振器と、プログラマブルデバイス100上の電子ヒューズ回路要素を維持および/または管理することができる電子ヒューズコントローラと、ハードワイヤードおよびプログラマブル回路ブロックとしてプログラマブルデバイス100上に実装され得るDACおよび/またはADCなどのプログラマブルデバイス100内のアナログデバイスのための1つ以上の基準電圧を生成することができるバンドギャップ回路要素と、PMC110、NoC108、NPI134、およびPS106のためのクロック信号を生成することが可能な1つ以上の位相ロックループ(PLL)と、パワーオンリセット(POR)回路とを含むことができる。
RTC 330は、高正確度水晶発振器で動作可能なクロック回路である。RTC 330は、現在時刻を測定し、プログラマブルデバイス100内の様々なオペレーティングシステムおよびデバイス管理機能のための特定の時刻のアラームを生成するために使用することができる。電力管理およびリセット回路要素332は、プログラマブルデバイス100上の他の回路ブロックに対する、電力アイランド、電力ドメイン、およびリセットを制御するために必要な論理およびインターフェースを実装する。電力管理およびリセット回路要素332は、PS106にさらに接続して、PS106に実装されている電力ドメインおよびアイランドを制御する。
エラー管理回路要素334は、プログラマブルデバイス100内の他のプログラマブルリソース(例えば、サブシステム)からのエラーを受信、記録、および応答することができる。例えば、エラー管理回路要素334は、プログラマブルデバイス100全体からエラーを捕捉することができる。エラー管理回路要素334は、特定の受信エラーおよび/またはエラーの組み合わせに応答して、PMC110において、例えば割り込みなどの特定のイベント、を生成するように、PMC110によってプログラムすることができる。PMC110は、エラー管理回路要素334によって生成されたイベントに応答してエラーに対処することができる。
CFU336は、CFI114に結合され、CFI114によってPL104の構成レジスタに提供またはロードされた構成データの構成およびリードバックを実行することができる。PMC110は、例えば、PLプログラミングデータ(例えば、構成ビットストリーム)を、CFU336を通じてCFI114に転送して、PL104を構成する。
セキュアストリームスイッチ322を使用して、例えばデバイスイメージなどの構成データをプログラマブルデバイス100にストリーミングすることができる。例えば、デバイスイメージは、MIO342を介してSelectMapインターフェース338にプッシュされてもよい。デバイスイメージはまた、JTAGポート340を通じて受信されてもよい。いずれの場合でも、デバイスイメージは、SBI324にプッシュされ、SBIは、PMC処理ユニット302に対する割り込みを生成し得る。PMC処理ユニット302は、さらなる処理のためにSBI324からセキュアストリームスイッチ322を通じてPMC共有RAM316へとデバイスイメージを転送することができる。
プログラマブルデバイス100のためのルートオブトラストであるPMC110は、動作のためにプログラマブルデバイス100の様々な部分をプログラムするデバイスイメージをロードする役割を負う。例えば、DPE102、PL104、PS106、および/またはNoC108のいずれかが動作するためには、PMC110は最初に、そのような構成要素をプログラムするために使用されるデバイスイメージをロードしなければならない。PMC110は、デバイスイメージがロードされると、デバイスイメージを使用してプログラマブルデバイス100のプログラマブル回路リソースのいずれかをプログラムする前に、デバイスイメージを認証し、および/またはデバイスイメージを検証することができる。PMC処理ユニット302は、プログラマブルデバイス100のそれぞれのプログラマブル回路リソースをプログラミングするために、CFU336によってCFI114、PS106、NPI134および/またはNoC108、ならびにDPEアレイ102に、PL104へのデータをプッシュすることができる。
例えば、1つ以上のDPE116、PL104内に実装された1つ以上の回路ブロック、1つ以上のハードワイヤード回路ブロック112を含み、NoC108を介して通信する処理ドメイン(例えば、再構成可能パーティション)を作成するために、PMC110は、1つ以上のデバイスイメージをプログラマブルデバイス100にロードし、デバイスイメージを使用してそれぞれのプログラマブル回路リソースをプログラムしなければならない。そのうちの複数が任意の所与の時点に同時に存在し得る、プログラマブルデバイス100内に実装された異なる再構成可能パーティション毎に、各再構成可能パーティションはデバイスイメージのロードを必要とし得る。
PMC110は、経時的にデバイスイメージを連続的にロードおよびアンロードすることができる。さらに、デバイスイメージは、様々な異なる経路のいずれかを通じてロードすることができる。例えば、1つ以上のデバイスイメージは、I/Oインターフェース320-1、320-2、320-3、および/または320-4、SelectMap338、JTAGポート340のうちの1つ以上を通じてPMC110にロードすることができ、および/またはホストシステムに接続されたPS106内に実装された別のコントローラ(例えば、PCIeインターフェース)によって受信することができる。別の例では、デバイスイメージは、1つ以上のハードワイヤード回路ブロック112を使用して実装されたI/Oインターフェース(例えば、オフチップRAMに接続されたメモリコントローラ、イーサネット(登録商標)インターフェースなど)を介して受信することができる。いずれの場合も、PMC110は、デバイスイメージを使用してプログラマブルデバイス100の様々な部分をプログラムする前に、セキュリティアクセラレータ326を使用してデバイスイメージを認証および検証する役割を負う。
図3は、例示を目的として提供されている。これに関して、PMC110は、図示されているよりも少ない構成要素(例えば、PATDレジスタ320を伴うプロセッサおよびメモリ)または図3に示されていない追加の構成要素を含んでもよい。さらに、PMC110は、図示されているものとは異なるアーキテクチャを有してもよい。
下記の表1は、プログラマブルデバイス100のデバイスイメージの処理の一部として、PMC110内のプロセッサ(例えば、PMC処理ユニット302内のプロセッサ304および/または306)によって収集され得る複数の異なるタイプの情報を示す。一態様において、表1に示す情報は、デバイスイメージがロードされるたびに、プロセッサによって、PATDレジスタ320内に記憶されてもよい。デバイスイメージがアンロードされるときに決定されたデータは、後に記憶されてもよく、例えば、PATDレジスタ320に、またはPATDレジスタ320からオフロードされたトレースデータを記憶するために割り当てられたメモリに書き込まれてもよい。
表1に関連して説明した特定のフィールドおよびサイズは、例示の目的で提供されている。ビット数および例示的なフィールドは、PATDレジスタ320に記憶されるトレースデータを限定することを意図するものではない。場合によっては、表1のPATDレジスタ320に記憶されるフィールドの特定の組み合わせは変化してもよい(例えば、示されているよりも少なくてもよい)。他の場合には、PATDレジスタ320に記憶されたトレースデータは、(そのようなすべてのフィールドを含む)表1のフィールドの任意の組み合わせを含むことができ、本開示内で説明される他の情報を含むことができる。
一態様では、「解放要求」フィールドは、再構成可能モジュールをロードしようとしている特定のエージェント(例えば、エンティティ)を示す。複数のエージェントが再構成可能モジュールをロードしようとする場合がある。再構成可能モジュールをロードするためのアクセスは、一度に一者のエージェントまたは要求者のみがそうすることができるように調停される。解放要求フィールドは、あるエージェントが再構成可能モジュールをロードするためのアクセスを要求した一方で、別のエージェントがすでにアクセス権を有していたことを示す。アクセス権を有するエージェントは、例えば、別のエージェントがアクセスを要求したか否かを判定するためにレジスタをポーリングするように構成され得る。アクセス権を有するエージェントは、そうすることが安全である場合、アクセス権を放棄して、要求元エージェントにアクセス権を提供することができる。場合によっては、単一イベントモニタ(SEM)などの特定のエージェントは、構成メモリに永続的にアクセスし、解放要求フィールドのポーリングを通じて、別のエージェントがアクセスを所望していることを通知され得る。解放要求フィールドはまた、エージェントがハングした場合にアクセス許可の解放を強制する機構を提供することができる。解放要求フィールドはまた、高い優先度のイベントの場合、あるエージェントが別のエージェントの前に「割り込む」ことを可能にするために使用されうる。
「アクセス終了コード」フィールドは、アクセス終了コードフィールドが、エージェントが構成メモリへのアクセスを失った理由を示すコードを記録するという点で、解放要求フィールドに関連する。一例として、エージェントAがアクセス権を有していたが、エージェントAがまだ生きているかまたは応答しているかを問い合わせるPMC110からの要求に応答しなかった場合、PMC110は、エージェントAがハングしていると判定することができる。次いで、PMC110は、エージェントAのアクセスを終了することができる。
「フォールバックフィールド」は、デバイスイメージのロードの失敗の発生、および、それに応答して、PMC110がフォールバックまたはフェイルセーフとして既知の良好なイメージを使用することを示す。フォールバックフィールドは、既知の良好なフォールバックデバイスイメージがプログラマブルデバイス100の何らかの部分を構成するために使用されたことを示す。「割り込み機能」フィールドは、デバイスイメージのロードに対する要求が別の動作に割り込んだか否かを追跡する。割り込まれた場合に割り込み機能フィールドにおいて示され得る動作の例は、SEM動作、セキュリティ監視動作などを含むが、これらに限定されない。割り込み機能フィールドは、デバイスイメージのロード失敗の原因を判定するのに役立ち得る。
「アクセス拒否-未知のマスタ」フィールドは、最初は0に設定される。要求元マスタ(例えば、マスタは部分的な再構成を要求する)がそのような要求を行うことを許可されていないとPMC110が判断したことに応答して、例えば、要求元マスタが、「ホワイトリスト」として参照される PMC110によって維持される許可されたマスタのリスト上で指定されていないことに応答して、PMC110はこのフィールドを1に設定する。これに関して、PMC110は、アクセス拒否-未知マスタフィールドが0に設定されているかまたは1に設定されているかによって、マスタからの成功した要求および失敗した要求を追跡することができる。成功した要求の場合、本明細書で説明され、表1内の他のフィールドに示されているように、PDIのロードに関するさらなる詳細も追跡される。要求元マスタに関する表1に示されていない他の情報が記憶されてもよいことも理解されたい。
図4は、プログラマブルデバイス100の別の例示的なアーキテクチャを示す。図4の例は、PMC110の簡略化されたアーキテクチャを示す。さらに、図4の例は、デバイスイメージをプログラマブルデバイス100にロードすることができる複数の異なる方法、例えば通信パスを示す。一態様では、デバイスイメージがプログラマブルデバイス100にロードされる特定の通信パスは、トレースデータの一部として検出および記憶され得る。
図4の例では、PMC110は、プロセッサ402と、PATDレジスタ320と、メモリ404と、任意選択的に、各々がスイッチ408に接続された1つ以上の専用回路406とを含む。PMC110はまた、I/Oインターフェース410,412および/または414を含んでもよい。PS106は、PCIeインターフェース416を含む。HBC 112は、オフチップメモリ420に接続するメモリコントローラ418を含む。
この例では、デバイスイメージは、様々な異なる通信パスのいずれかを通じてプログラマブルデバイス100にロードすることができる。例えば、デバイスイメージ422は、I/Oインターフェース410,412または414を介してプログラマブルデバイス100にロードすることができる。デバイスイメージ424は、1つ以上のHBC 112を使用して実装されたインターフェースを介してプログラマブルIC 100にロードすることができる。例えば、デバイスイメージ424は、イーサネット(登録商標)ポートを通じてプログラマブルデバイス100にロードすることができる。デバイスイメージ426は、オフチップメモリ420に記憶することができ、メモリコントローラ418を通じてプログラマブルデバイス100にロードすることができる。別の例では、デバイスイメージ426は、ホストコンピューティングシステムからPCIeインターフェース416を通じてプログラマブルデバイス100に提供することができる。
一態様では、PMC110はデバイスイメージのロードおよび/またはアンロードを制御するので、PMC110、例えばプロセッサ402(またはプロセッサ(複数可)304および/または306、図3参照)は、デバイスイメージがプログラマブルデバイス100にロードされる特定の通信パス(例えば、I/Oインターフェース)をPATDレジスタ320に記録することができる。一態様では、特定のI/Oインターフェースを指定するコードが、ロードされた特定のデバイスイメージに対応する任意の他のトレースデータと関連付けて記憶され得る。
図5は、PMC110の例示的な動作方法500を示す。方法500は、PMC110内のプロセッサ(例えば、PMC処理ユニット302、より具体的には、プロセッサ304,306またはプロセッサ402の一方または両方)によって実行されてもよい。説明の目的のために、図5の動作を実装するPMC110のプロセッサは、「処理ユニット」として参照される。
さらに、図5は、プログラマブルデバイス100の部分的な再構成の文脈で一般的に説明されているが、方法500は、プログラマブルデバイス100が完全に再構成される場合に実行されてもよいことを理解されたい。さらに、方法500は、プログラマブル論理を含み、かつデバイスイメージ(例えば、構成データ)のロードおよび/またはアンロードの役割を負う別個のエンティティを有する他のタイプのプログラマブルデバイスにおいて実行されてもよい。
ブロック502において、処理ユニットは、プログラマブルデバイスのデバイスイメージイベントを監視する。一態様において、処理ユニットは、デバイスイメージがロードされることを示す割り込みの発生を監視することができる。例えば、JTAGポートなどのプログラマブルデバイスのスレーブインターフェースにおいてデバイスイメージが利用可能であることにより、割り込みが生成されて処理ユニットに提供され得る。別の態様では、処理ユニットは、デバイスイメージがロードされることを求める要求、例えば信号の受信を監視することができる。要求は、プログラマブルデバイス内の別の回路から、またはプログラマブルデバイスの外部の別の回路(例えば、ホストシステム)から発する場合がある。
ブロック504において、処理ユニットは、プログラマブルデバイスのデバイスイメージイベントが検出されたか否かを判定する。プログラマブルデバイスのデバイスイメージイベントの検出に応答して、方法500はブロック506に続く。プログラマブルデバイスのデバイスイメージイベントが検出されないことに応答して、方法500はブロック502にループバックし、デバイスイメージイベントを監視し続けることができる。
ブロック506において、処理ユニットは、検出されたデバイスイメージイベントが、特定のデバイスイメージのロードを要求するロードイベントであるか、またはプログラマブルデバイス内にすでにロードされている特定のデバイスイメージのアンロードを要求するアンロードイベントであるかを判定する。検出されたデバイスイメージイベントがロードイベントであるという判定に応答して、方法500はブロック512に続く。検出されたデバイスイメージイベントがアンロードイベントであるという判定に応答して、方法500はブロック508に続く。
ブロック512に続くと、処理ユニットは、処理のためにデバイスイメージをPMC内のメモリにロードする。例えば、処理ユニットは、外部ソースから「現在のデバイスイメージ」と呼ばれるデバイスイメージをロードし、さらなる処理のためにデバイスイメージをPMC共有メモリ内に記憶することができる。別の態様では、現在のデバイスイメージから任意のトレースデータを取得する前に、処理ユニットは、現在のデバイスイメージを復号し、現在のデバイスイメージを認証し、および/または現在のデバイスイメージを検証しなければならない場合がある。処理ユニットは、現在のデバイスイメージがプログラマブルデバイスのプログラマブル回路リソースをプログラムするために安全に使用することができることを保証するために、現在のデバイスイメージをセキュリティアクセラレータ、例えば暗号化/復号ブロック346、認証ブロック348、および/またはハッシュブロック350のうちの1つ以上に提供することができる。
ブロック514において、処理ユニットは、ブロック512において実行されたロード動作に応答して、現在のデバイスイメージのトレースデータを決定する。一態様では、処理ユニットは、表1に列挙された情報の1つ以上またはすべての項目を決定することができる。例えば、現在のデバイスイメージは、再構成可能モジュールを指定することができる。その場合、処理ユニットは、現在のデバイスイメージから静的パーティションID、再構成可能パーティションID、および再構成可能モジュールIDを抽出することができる。デバイスイメージはまた、デバイスイメージが使用されることが意図されているプログラマブルデバイスの特定のタイプまたはモデルを示すデバイスIDを指定することもできる。
一態様では、処理ユニットは、デバイスイメージ(例えば、表1のエリア領域)によって使用されるPL内の座標を決定することができる。現在のデバイスイメージは、PLの構成データを含むことができる。処理ユニットは、現在のデバイスイメージ内の構成データによって構成されるPLのこれらのセクションまたは座標を決定することができる。
説明したように、表1で指定されたいくつかの情報が現在のデバイスイメージから抽出される。表1で指定された他の情報は、デバイスイメージから取得されなくてもよい。例えば、処理ユニットは、現在のデバイスイメージが取得されたソースを示すかまたは指定する現在のデバイスイメージのトレースデータを決定することができる。例えば、処理ユニットは、マスタIDを決定することができる。マスタIDは、アクセスがあったNoC108の物理ポートを指定する。
別の例では、処理ユニットは、プログラミングアクセスIDを決定することができる(例えば、表1を参照して)。プログラミングアクセスIDは、部分再構成を要求したエンティティ(例えば、エージェントおよび/またはマスタ)を示す。例えば、データセンタにおいて、ホストシステム(例えば、サーバ)は、デバイスイメージがプログラマブルデバイスにロードされることを要求することができる。その場合、処理ユニットは、要求からサーバのプログラミングアクセスIDを取り込む(例えば、要求がデバイスイメージイベントの例である場合)。別の例では、プログラマブルデバイス内に実装されたアプリケーション(例えば、回路要素)は、デバイスイメージのロードを要求することができる。その場合、処理ユニットは、要求元回路のプログラミングアクセスIDを取り込む。プログラミングアクセスIDは、要求を行っている特定のエージェントを指定する。例示では、2つのエージェントがNoC108の同じポートに接続されている場合、両方のエージェントからの要求が同じマスタIDを有する。しかしながら、各要求は異なるプログラミングアクセスIDを有する。
別の例では、処理ユニットは、デバイスイメージが取得される通信経路および/またはソースを決定することができる。例示的かつ非限定的な例として、処理ユニットは、現在のデバイスイメージがロードされた特定のI/Oインターフェースを示す識別子をトレースデータの一部として記憶することができる。デバイスイメージをロードすることができるI/Oインターフェースの例は、SelectMAP、PCIe、DDR(例えば、オフチップ)メモリ、フラッシュ(QSPI/OSPI)(例えば、I/Oインターフェース320に対応する)、JTAG、および/またはCAN、イーサネット(登録商標)、USB、PSなどのようなNoC108を介してPMC110に接続される任意の他のI/Oインターフェースを含むが、これらに限定されない。
処理ユニットはまた、プログラマブルデバイスにロードされたデバイスイメージ(複数可)に対応する1つ以上のトレースデータ項目を生成することができる。一態様では、各デバイスイメージがロードされると、処理ユニットは、プログラマブルデバイスの最後のリセット以降にプログラマブルデバイスにロードされたデバイスイメージの数を指定するカウント(例えば、表1のアクセスイベントカウント)を増分する。カウントは、レジスタが書き込まれるたびにインクリメントされるPATDレジスタの部分に含まれてもよい。処理ユニットは、プログラマブルデバイスのリセット(例えば、電源がオフおよびオンでサイクルされるハードリセットのいずれか)またはソフトリセットに応答してカウントをクリアする。
一態様では、デバイスイメージをアンロードすることは、「アンロードデバイスイメージ」として指定されたデバイスイメージをロードすることによって実施される。例えば、アンロードデバイスイメージは、再構成可能パーティションをクリアする(例えば、以前の構成データをブランクに上書きするかまたは削除する)デバイスイメージである。処理ユニットは、デバイスイメージのロードに応答して、およびアンロードデバイスイメージのロードに応答して、カウンタを増分することができる。処理ユニットはまた、任意の所与の時点においてどの再構成可能パーティションが利用可能(クリアまたはアンロード)であるかを判定するために、アンロードデバイスイメージのロードを追跡することができる。
ブロック516において、処理ユニットは、(前に処理されたデバイスイメージに対応する)PATDレジスタの既存の内容を、より長期の記憶のために、割り当てられたトレースメモリに移動させる。一態様では、プログラマブルデバイス内のメモリは、トレースデータ記憶装置として使用するために割り当てられる。メモリは、PMC共有RAM316内にあってもよく、または、PL104内に配置された1つ以上のBRAMおよび/もしくはURAMであってもよい。別の態様では、メモリは、プログラマブルデバイスの外部にあってもよい。例えば、トレースデータ記憶のために割り当てられたメモリは、処理ユニットが読み出しおよび/または書き込みを行うことができる外部RAM(例えば、オフチップメモリ420)内にあってもよい。
ブロック518において、処理ユニットは、現在のデバイスイメージについてブロック514において決定されたトレースデータをPATDレジスタに記憶する。前のトレースデータはトレースデータに割り当てられた異なるメモリに記憶されているので、処理ユニットは、現在のデバイスイメージのトレースデータでPATDレジスタの内容を上書きすることができる。前述したように、アクセスイベントカウントがインクリメントされ得る。
ブロック520において、処理ユニットは、デバイスイメージの、プログラマブルデバイスの現在の状態との適合性を判定する。一態様では、ブロック520の一部として、またはブロック520の前に、処理ユニットは、デバイスIDチェックを実行することができる。例えば、処理ユニットは、デバイスイメージのデバイスIDをプログラマブルデバイスのデバイスIDと比較して、2つの一致を保証することができる。この動作により、異なるプログラマブルデバイスによる使用を目的としたデバイスイメージによるプログラマブルデバイスのプログラミングが防止される。
一態様では、プログラマブルデバイスの現在の状態は、その中に実装されている特定のプラットフォームを含む。現在のデバイスイメージは、プログラマブルデバイスの部分再構成プロセスの一部として使用される再構成可能モジュールを指定することができる。その場合、現在のデバイスイメージは、再構成可能パーティションID、再構成可能モジュールID、および静的パーティションIDを含む。したがって、一態様では、現在のデバイスイメージの、プログラマブルデバイスの現在の状態との適合性を決定することは、現在のデバイスイメージの、プログラマブルデバイスにすでに実装されているプラットフォームとの適合性を決定することを含む。処理ユニットは、例えば、プラットフォームを指定するデバイスイメージの読み込みに応答して、プラットフォームのトレースデータを記憶することができる(例えば、PATDレジスタ内に記憶し、そのデータを割り当てられたトレースデータメモリに移動させることができる)。プラットフォームのトレースデータは、静的パーティションIDを含むことができる。プラットフォームのトレースデータは、プラットフォームのトレースデータを、プラットフォームを指定しない他のデバイスイメージのトレースデータから区別する識別子と共に記憶することができる。
したがって、処理ユニットは、現在のデバイスイメージのトレースデータの1つ以上の項目を、記憶されたプラットフォームのトレースデータと比較することができる。一態様では、処理ユニットは、プラットフォームの静的イメージIDを、現在のデバイスイメージから読み出される静的イメージIDと比較することができる。処理ユニットは、2つの静的イメージIDが一致するか否かを判定する。処理ユニットは、2つの静的イメージIDの比較、および、2つの静的イメージIDが一致するか否かに基づいて、デバイスイメージがプラットフォームに適合するか否かを判定する。
別の態様では、処理ユニットは、追加のチェックを実行することができる。例えば、処理ユニットは、認証を行うことにより、デバイスイメージが正しいヘッダを有することをチェックすることができる。場合によっては、処理ユニットは、最初にデバイスイメージおよび/またはヘッダを復号する必要があり得る。別の態様では、処理ユニットは、デバイスイメージに含まれるヘッダ(複数可)および/またはNPIデータに対してハッシュ演算を実行することができる。そのような動作から検出された任意のエラーはまた、PATDレジスタに記憶されてもよい。
ブロック522において、現在のデバイスイメージがプラットフォームと適合すると判定したことに応答して、例えば、2つの静的イメージIDが一致する場合、方法500はブロック528に続く。現在のデバイスイメージがプラットフォームと適合しないと判定したことに応答して、例えば、2つの静的イメージIDが一致しない場合、方法500はブロック524に続く。
ブロック524において、処理ユニットは、現在のデバイスイメージとプラットフォームとの不適合性を示すエラーコードを生成する。処理ユニットは、デバイスイメージのトレースデータの一部としてエラーコードをPATDレジスタに記憶する。ブロック526において、処理ユニットはデバイスイメージを拒否する。例えば、処理ユニットは、プログラマブルデバイスの任意のプログラマブル回路リソースをプログラムするために現在のデバイスイメージを使用しない。処理ユニットはさらに、現在のデバイスイメージをPMC共有メモリから削除してもよい。削除されるが、処理ユニットは、上述のように、トレースデータをPATD内に維持し、トレースデータを割り当てられたメモリにオフロードする。データの特定の項目は、デバイスイメージがプログラマブルデバイスのプログラマブルリソースをプログラムするために使用されなかったことを示す。
ブロック528において、デバイスイメージがSoCの現在の状態と適合する場合、処理ユニットは、デバイスイメージを使用して、プログラマブルデバイスに含まれるプログラマブル回路リソースを構成する。ブロック528の後、方法500はブロック530に続くことができる。
別の態様では、デバイスイメージのロードの一部として、処理ユニットは、プログラマブルデバイス内の他の回路ブロックによって生成され得る任意のエラーコードを受信し、そのようなエラーコードをトレースデータの一部として記録することができる。例えば、CFI114のCRC回路要素がエラーを生成した場合、処理ユニットは、CFI CRC Errorビットを設定することによってエラーコードを表1に示すトレースデータに記録することができる。処理ユニットは、ハッシュブロック350を使用してNPI134にロードされた任意のデータをチェックすることができる。ハッシュブロック350に基づくNPI134のプログラミングにおけるエラーの検出に応答して、処理ユニットは、NPIエラービットを設定することによってエラーコードを表1に示すトレースデータに記録することができる。本明細書で説明されるエラーの記録は、デバイスイメージが拒否された場合、および、デバイスイメージが受け入れられたが、デバイスイメージを使用してプログラマブルデバイスのプログラマブル回路リソースをプログラムしている間にエラーが発生した場合の情報を提供する。
ブロック508において、処理ユニットは、デバイスイメージイベントにおいて指定されたデバイスイメージをプログラマブルデバイスからアンロードする。例えば、処理ユニットは、アンロードされるデバイスイメージの構成データを記憶していたプログラマブルデバイスの構成メモリセルをクリアすることができる。上述したように、一態様では、処理ユニットは、デバイスイメージイベントとして、特定の再構成可能パーティションを上書きする、例えばクリアするために使用されるアンロードデバイスイメージを受信する。
ブロック510において、アンロードに応答して、処理ユニットは、デバイスイメージのアンロードをメモリ内のトレースデータに記録する。例えば、処理ユニットは、アンロード動作に応答してアンロードされるデバイスイメージについてトレースデータを更新する。一態様において、処理ユニットは、ブロック508においてアンロードされたデバイスイメージのトレースデータをPATDレジスタが依然として記憶している場合、PATDレジスタ内のトレースデータを更新する。例えば、処理ユニットは、デバイスイメージがアンロードされた時刻(例えば、表1のアンロード時刻)でトレースデータを更新し、アクセスイベントカウントを増分することができる。
別の態様では、ブロック508でアンロードされたデバイスイメージのトレースデータが異なるメモリに記憶される場合、処理ユニットは、そのようなメモリ内のトレースデータを更新するために書き込み動作を開始することができる。上述したように、例えば、処理ユニットは、デバイスイメージがアンロードされた時刻を記憶するためにそのメモリ内のトレースデータを更新し、アクセスイベントカウントをインクリメントすることができる。一態様において、処理ユニットは、PMCに含まれるRTCを読み出し、トレースデータを記憶するPATDまたはメモリに時刻を書き込むことによって時刻を決定することができる。
ブロック530において、処理ユニットは、プログラマブルデバイスにロードされたデバイスイメージ(複数可)に対応する一意の識別子を作成することができる。例えば、処理ユニットは、プログラマブルデバイス内でアクティブである各デバイスイメージの識別子を決定することができる。プログラマブルデバイス内でアクティブであるデバイスイメージは、プログラマブルデバイス内の1つ以上のプログラマブル回路リソースをプログラムするために現在使用されているデバイスイメージである。処理ユニットは、各アクティブなデバイスイメージの識別子の一意のハッシュを生成することができる。ブロック530の目的のために、処理ユニットはまた、アンロードデバイスイメージのための一意の識別子を生成することができる。結果として得られる一意の識別子は、PATDレジスタ内におよび/またはトレースデータの一部として記憶されてもよい。ブロック530の後、方法500は、処理を継続するためにブロック502にループバックすることができる。
例えば、ブロック530において生成される一意の識別子は、使用されたデバイスイメージのすべてのアクティブな(例えば、成功したプログラミング)IDのハッシュであってもよい。一意の識別子を使用して、一意の識別子を以前に生成された一意の識別子と比較することによって、プログラマブルデバイスの状態が変化したか否かを迅速に判定することができる。例示では、JTAGを通じて、エンティティが、単純に一意の識別子を記憶するレジスタをポーリングすることによって、プログラマブルデバイスが全体的にまたは部分的に再プログラムおよび/または再構成されたか否かを判定することができる場合を考える。レジスタが最初にポーリングされるとき、レジスタから読み出された一意の識別子を、将来レジスタから読み取られる任意の他の値と比較することができる。レジスタの1つのポーリングから別のポーリングへの値の差または変化の検出に応答して、エンティティは、行われた変更を判定するためにトレースデータをより詳細に見続けることができる。この技術は、エンティティがプログラマブルデバイス内の差を検出するために必要な帯域幅を低減する。エンティティは、変化の検出に応答してより詳細にトレースデータを照会するだけでよい。
PMCにより収集されるトレースデータは、デバッグ、エラー解析などの目的で随時読み出すことができる。外部システム、例えばコンピュータシステムは、プログラマブルデバイスの動作中の任意の時点でメモリからトレースデータを読み出すことができる。トレースデータは、デバイスのルートオブトラストとして動作するPMCを使用してプログラマブルデバイス自体によって生成されるため、トレースデータは、トレースデータによってカバーされる各時点におけるプログラマブルデバイスの状態の完全かつ正確な実態を提供する。
説明の目的で、本明細書に開示される様々な発明概念の完全な理解を提供するために、特定の命名法が記載される。しかしながら、本明細書で使用する用語は、本発明の構成の特定の態様を説明するためのものにすぎず、限定するものではないことも理解されたい。
本明細書において定義されているものとして、単数形「a」、「an」および「the」は、文脈がそうでないことを明確に示さない限り、複数形も含むことが意図される。
本明細書で定義されるように、「およそ」という用語は、ほぼ正しくまたは正確で、値または量が近いが精密ではないことを意味する。例えば、「およそ」という用語は、記載された特性、パラメータ、または値が、正確な特性、パラメータ、または値の所定の量の範囲内にあることを意味し得る。
本明細書において定義されているものとして、「少なくとも1つ、」、「1つ以上」、および「および/または、」という用語は、特に明記しない限り、動作において連言的および選言的の両方であるオープンエンド表現である。例えば、「A、B、およびCのうちの少なくとも1つ」、「A、B、またはCのうちの少なくとも1つ、」、「A、B、およびCのうちの1つ以上」、「A、B、またはCのうちの1つ以上」および「A、B、および/またはC」という表現の各々は、Aのみ、Bのみ、Cのみ、AとB、AとC、BとC、またはAとBとCを意味する。
本明細書において定義されているものとして、「自動的に」という用語は、ユーザの介入がないことを意味する。本明細書において定義されているものとして、用語「ユーザ」は、人類を意味する。
本明細書において定義されているものとして、「コンピュータ可読記憶媒体」という用語は、命令実行システム、装置、またはデバイスによって、またはそれに関連して使用するためのプログラムコードを含むかまたは記憶する記憶媒体を意味する。本明細書において定義されているものとして、「コンピュータ可読記憶媒体」は、一時的な伝播信号自体ではない。コンピュータ可読記憶媒体は、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、またはこれらの任意の適切な組み合わせであってもよいが、これらに限定されない。本明細書に記載の様々な形態のメモリは、コンピュータ可読記憶媒体の例である。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブルコンピュータディスケット、ハードディスク、RAM、読み出し専用メモリ(ROM)、消去可能プログラマブル読み出し専用メモリ(EPROMまたはフラッシュメモリ)、電気的消去可能プログラマブル読み出し専用メモリ(EEPROM)、スタティックランダムアクセスメモリ(SRAM)、ポータブルコンパクトディスク読み出し専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピー(登録商標)ディスクなどを含むことができる。
本明細書で定義されるように、用語「~である場合」は、文脈に応じて「~であるとき」または「~に応答して」または「~に応じて」を意味する。したがって、語句「~であると判定された場合」または「[記載された状態または事象]が検出された場合」は、文脈に応じて、「判定を受けて」または「判定に応答して」または「[記載された状態または事象]の検出を受けて」または「[記載された状態または事象]の検出に応答して、」または「[記載された状態または事象]の検出に応じて」を意味すると解釈され得る。
本明細書で定義されるように、「~に応じて」という用語および上記と同様の用語、例えば「~である場合」、「~であるとき」または「~であることを受けて」は、アクションまたはイベントに容易に応答または反応することを意味する。応答または反応は自動的に行われる。したがって、第2のアクションが第1のアクション「に応じて」実施される場合、第1のアクションの発生と第2のアクションの発生との間に因果関係がある。「~に応じて」は因果関係を示す。
本明細書において定義されているものとして、「1つの実施形態、」、「一実施形態」、「1つ以上の実施形態」、「特定の実施形態」という用語または同様の用語は、実施形態に関連して説明される特定の特徴、構造、または特性が、本開示内で説明される少なくとも1つの実施形態に含まれることを意味する。したがって、本明細書全体を通して、語句「1つの実施形態では」、「1つ以上の実施形態では」、「特定の実施形態では」、および同様の文言の出現は、必ずしもそうとは限らないが、すべて同じ実施形態を指し得る。「実施形態」および「構成」という用語は、本開示内で互換的に使用される。
本明細書で定義されているものとして、「プロセッサ」という用語は、少なくとも1つのハードウェア回路を意味する。ハードウェア回路は、プログラムコードに含まれる命令を実行するように構成され得る。
本明細書において定義されているものとして、「出力」という用語は、例えばデバイスなどの物理メモリ要素に記憶すること、ディスプレイまたは他の周辺出力デバイスに書き込むこと、別のシステムに送るかまたは送信すること、エクスポートすることなどを意味する。
本明細書において定義されているものとして、「リアルタイム」という用語は、特定のプロセスまたは決定が行われるのに十分に即時であるとユーザまたはシステムが感知するか、またはプロセッサが何らかの外部プロセスについていくことを可能にする処理応答性のレベルを意味する。
本明細書において定義されているものとして、「実質的に」という用語は、記載された特性、パラメータ、または値が正確に達成される必要はないが、例えば公差、測定誤差、測定精度限界、および当業者に知られている他の要因を含む偏差または変動が、特性が提供しようとした効果を排除しない量で発生し得ることを意味する。
第1、第2などの用語が、様々な要素を説明するために本明細書で使用され得る。これらの要素は、特に明記しない限り、または文脈が明らかにそうでないことを示さない限り、これらの用語は1つの要素を別の要素から区別するためにのみ使用されるため、これらの用語によって限定されるべきではない。
コンピュータプログラム製品は、プロセッサに本明細書に記載されている本発明の構成の態様を実行させるためのコンピュータ可読プログラム命令(例えば、ファームウェア)を有するコンピュータ可読記憶媒体(複数可)を含むことができる。本明細書に記載の本発明の構成の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、またはオブジェクト指向プログラミング言語および/もしくは手続き型プログラミング言語を含む、1つ以上のプログラミング言語の任意の組み合わせで書かれたソースコードまたはオブジェクトコードのいずれかであってもよい。
本発明の構成の特定の態様は、方法、装置(システム)、およびコンピュータプログラム製品のフローチャート図および/またはブロック図を参照して本明細書において説明されている。フローチャート図および/またはブロック図の各ブロック、ならびにフローチャート図および/またはブロック図のブロックの組み合わせは、例えば、プログラムコードなどのコンピュータ可読プログラム命令によって実装することができることが理解されよう。
これらのコンピュータ可読プログラム命令は、プロセッサを介して実行される命令が、フローチャートおよび/またはブロック図の1つ以上のブロックにおいて指定されている機能/動作を実施するための手段を作成するように、機械を製造するためにプロセッサに提供され得る。これらのコンピュータ可読プログラム命令はまた、プロセッサに特定の方法で機能するように指示することができるコンピュータ可読記憶媒体に記憶されてもよく、その結果、命令を記憶されているコンピュータ可読記憶媒体は、フローチャートおよび/またはブロック図の1つ以上のブロック内で指定された動作の態様を実装する命令を含む製品を含む。
いくつかの代替的な実施態様では、ブロック内に記載されている動作は、図に記載された順序から外れて行われてもよい。例えば、連続して示されている2つのブロックは、実質的に同時に実行されてもよく、またはブロックは、関連する機能に応じて、時には逆の順序で実行されてもよい。他の例では、ブロックは、一般に、昇順で実行されてもよいが、さらに他の例では、1つ以上のブロックは、様々な順序で実行されてもよく、結果は、直後には続かない後続のブロックまたは他のブロックにおいて記憶および利用される。また、ブロック図および/またはフローチャート図の各ブロック、ならびにブロック図および/またはフローチャート図のブロックの組み合わせは、指定された機能もしくは動作を実行するか、または専用ハードウェアとコンピュータ命令との組み合わせを実行する専用ハードウェアベースのシステムによって実装できることにも留意されたい。
添付の特許請求の範囲に見出すことができるすべてのミーンズプラスファンクションまたはステッププラスファンクションの要素の対応する構造、材料、動作、および均等物は、具体的に特許請求されている他の特許請求されている要素と組み合わせて機能を実行するための任意の構造、材料、または動作を含むことが意図されている。
方法は、プログラマブルデバイスのデバイスイメージをロードすることに応答して、プログラマブルデバイス上の処理ユニットを使用して、デバイスイメージのトレースデータを決定することと、処理ユニットによって、デバイスイメージのトレースデータをメモリに記憶することと、デバイスイメージをアンロードすることに応答して、デバイスイメージのアンロードをメモリ内のトレースデータに記録することとを含むことができる。
別の態様では、メモリは、プログラマブルデバイス上にある。
別の態様では、メモリは、プログラマブルデバイスの外部にある。
別の態様では、複数のデバイスイメージが同時にプログラマブルデバイスにロードされる。本方法は、プログラマブルデバイスにロードされたデバイスイメージに対応する一意の識別子を作成することと、一意の識別子をメモリ内に記憶することとを含むことができる。
別の態様では、方法は、処理ユニットによって、プログラマブルデバイスのリセット以降にプログラマブルデバイスにロードされたデバイスイメージの数をカウントすることを含むことができる。
別の態様では、デバイスイメージは、プログラマブルデバイスの部分再構成の一部としてロードされた再構成可能モジュールを指定する。デバイスイメージは、再構成可能パーティション識別子と再構成可能モジュール識別子とを含む。方法は、再構成可能パーティション識別子および再構成可能モジュール識別子をトレースデータの一部として記憶することを含むことができる。
別の態様では、プラットフォーム回路要素は、プログラマブルデバイスのプログラマブル回路リソースを使用してプログラマブルデバイスにすでに実装されている。その場合、方法は、デバイスイメージのトレースデータとプラットフォーム回路要素のトレースデータとの比較に基づいて、デバイスイメージとプラットフォーム回路要素との適合性を検出することを含むことができる。
別の態様では、方法は、検出からの不適合の判定に応答して、エラーコードを生成して、エラーコードをトレースデータの一部として記憶することを含むことができる。
別の態様では、方法は、検出からの不適合の判定に応答して、デバイスイメージを拒否することを含むことができる。
別の態様では、方法は、デバイスイメージのロードを要求するマスタの識別子を決定し、識別子をデバイスイメージのトレースデータの一部として記憶することを含むことができる。
デバイスは、複数のプログラマブル回路リソースと、プログラマブル回路リソースをプログラムするように構成されたプロセッサとを含むことができる。プロセッサは、デバイスのデバイスイメージをロードすることに応答して、デバイスイメージのトレースデータを決定することであって、デバイスイメージは、複数のプログラマブル回路リソースのうちの1つ以上のプログラミングデータを含む、決定することと、デバイスイメージのトレースデータをメモリに記憶することと、デバイスイメージをアンロードすることに応答して、デバイスイメージのアンロードをメモリ内のトレースデータに記録することとを含む、実行可能動作を開始することができる。
別の態様では、メモリは、デバイス上にある。
別の態様では、メモリは、デバイスの外部にある。
別の態様では、複数のデバイスイメージが同時にデバイスにロードされる。プロセッサは、プログラマブルデバイスにロードされたデバイスイメージに対応する一意の識別子を作成することと、一意の識別子をメモリ内に記憶することとをさらに含む動作を開始するように構成することができる。
別の態様では、プロセッサは、デバイスのリセット以降にデバイスにロードされたデバイスイメージの数をカウントすることをさらに含む動作を開始するように構成される。
別の態様では、デバイスイメージは、デバイスの部分再構成の一部としてロードされた再構成可能モジュールを指定する。デバイスイメージは、再構成可能パーティション識別子および再構成可能モジュール識別子を含むことができる。プロセッサは、再構成可能パーティション識別子および再構成可能モジュール識別子をトレースデータの一部として記憶することをさらに含む動作を開始するように構成することができる。
別の態様では、プラットフォーム回路要素は、複数のプログラマブル回路リソースのうちの選択された1つを使用してデバイスにすでに実装されている。プロセッサは、デバイスイメージのトレースデータとプラットフォーム回路要素のトレースデータとの比較に基づいて、デバイスイメージとプラットフォーム回路要素との適合性を検出することをさらに含む動作を開始するように構成することができる。
別の態様では、プロセッサは、検出からの不適合の判定に応答して、エラーコードを生成して、エラーコードをトレースデータの一部として記憶することをさらに含む動作を開始するように構成されている。
別の態様では、プロセッサは、検出からの不適合の判定に応答して、デバイスイメージを拒否することをさらに含む動作を開始するように構成されている。
別の態様では、プロセッサは、デバイスイメージのロードを要求するマスタの識別子を決定し、識別子をデバイスイメージのトレースデータの一部として記憶することをさらに含む動作を開始するように構成されている。
本明細書において提供される本発明の構成の説明は、例示のために提示されているが、網羅的であることは意図されておらず、または開示された形態および例に限定されるものではない。本明細書で使用される用語は、本発明の構成の原理、実際の用途または市場で見られる技術に対する技術的改善を説明するために、および/または他の当業者が本明細書に開示される本発明の構成を理解することを可能にするために選択されている。説明されている本発明の構成の範囲および精神から逸脱することなく、変更および変形が当業者には明らかであろう。したがって、そのような特徴および実施態様の範囲を示すものとして、前述の開示ではなく、添付の特許請求の範囲を参照すべきである。