(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-01
(45)【発行日】2024-11-12
(54)【発明の名称】適応型集積プログラマブルデバイスプラットフォーム
(51)【国際特許分類】
G06F 15/80 20060101AFI20241105BHJP
G06F 15/78 20060101ALI20241105BHJP
G06F 15/173 20060101ALI20241105BHJP
【FI】
G06F15/80
G06F15/78 560
G06F15/173 682
(21)【出願番号】P 2021557307
(86)(22)【出願日】2020-03-13
(86)【国際出願番号】 US2020022764
(87)【国際公開番号】W WO2020197803
(87)【国際公開日】2020-10-01
【審査請求日】2023-02-16
(32)【優先日】2019-03-27
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】アーマド,サグヒーア
(72)【発明者】
【氏名】ダスティダール,ジャディブ
(72)【発明者】
【氏名】ガイド,ブライアン・シィ
(72)【発明者】
【氏名】ノゲラ・セラ,フアン・ホタ
(72)【発明者】
【氏名】スウォーブリック,イアン・エイ
【審査官】坂東 博司
(56)【参考文献】
【文献】特開2007-129699(JP,A)
【文献】米国特許出願公開第2018/0367147(US,A1)
【文献】欧州特許出願公開第02985914(EP,A2)
【文献】国際公開第2018/227518(WO,A1)
【文献】米国特許出願公開第2021/0012035(US,A1)
【文献】米国特許出願公開第2004/0049609(US,A1)
【文献】米国特許出願公開第2018/0039795(US,A1)
【文献】米国特許出願公開第2015/0113258(US,A1)
【文献】欧州特許出願公開第02778946(EP,A2)
【文献】米国特許出願公開第2014/0281379(US,A1)
【文献】高野 了成,マルチFPGAクラウドシステムにおける資源管理の検討,情報処理学会 研究報告 システムソフトウェアとオペレーティング・システム(OS) 2019-OS-145 [online] ,日本,情報処理学会,2019年02月21日,pp.1~8,【ISSN】2188-8795
(58)【調査した分野】(Int.Cl.,DB名)
G06F 15/80
G06F 15/78
G06F 15/173
(57)【特許請求の範囲】
【請求項1】
デバイスであって、
プログラマブル論理回路と、
前記プログラマブル論理回路に結合されたプロセッサシステムと、
前記プログラマブル論理回路及び前記プロセッサシステムに結合されたネットワークオンチップとを備え、
前記ネットワークオンチップ及び前記プログラマブル論理回路が、複数の独立区画を実装するように構成されており、
前記ネットワークオンチップが、前記複数の独立区画の各々について、前記プログラマブル論理回路に実装された回路ブロックと前記プロセッサシステムとを通信可能にリンクするユーザ指定のデータ経路を確立するようにプログラム可能であり、前記デバイスはさらに、
前記デバイスにロードされたプログラミングデバイスイメージ
(PDI)に基づき、前記複数の独立区画を実装するように前記プログラマブル論理回路、前記ネットワークオンチップ、及び前記プロセッサシステムを構成するプラットフォーム管理コントローラを備え
、
前記プラットフォーム管理コントローラは、各PDIごとに、SMID回路にシステム管理識別子(SMID)を割り当て、
各SMID回路は、割り当てられたSMIDを、SMID回路に対応するマスター回路からの各トランザクションに添付する、デバイス。
【請求項2】
前記複数の独立区画のうちの各独立区画が異なるアプリケーションを実装し、前記アプリケーションが互いに分離される、請求項1に記載のデバイス。
【請求項3】
前記デバイスは、前記ネットワークオンチップに結合されたデータ処理エンジンアレイをさらに備え、前記複数の独立区画のうちの1つ以上が、前記データ処理エンジンアレイのうちの1つ以上のデータ処理エンジンを含む、請求項2に記載のデバイス。
【請求項4】
前記データ処理エンジンアレイは、前記複数の独立区画のうちの前記1つ以上の各々において前記アプリケーションの一部を実装するように構成される、請求項3に記載のデバイス。
【請求項5】
前記デバイスは、前記ネットワークオンチップに結合された特定用途向けのハードワイヤード回路ブロックをさらに備え、
前記特定用途向けのハードワイヤード回路ブロックと、前記複数の独立区画の各々の前記プログラマブル論理回路に実装された前記回路ブロックとが、共通のインターフェースを有する、請求項1に記載のデバイス。
【請求項6】
前記デバイスは、受信したトランザクション内のトランザクションソースの識別子を認証されたトランザクションソースのリストと比較することによって、前記複数の独立区画を分離するように構成されたプログラマブル保護回路をさらに備える、請求項1に記載のデバイス。
【請求項7】
前記プログラマブル保護回路は、前記受信したトランザクションで指定されたアドレスを、前記トランザクションソースの前記識別子の許可されたアドレスとさらに比較する、請求項6に記載のデバイス。
【請求項8】
前記プログラマブル論理回路に実装された前記プロセッサシステム及び前記回路ブロックは、通信のために共通の記述子フォーマットを使用する、請求項1に記載のデバイス。
【請求項9】
方法であって、
プログラマブル論理回路と、前記プログラマブル論理回路に結合されたプロセッサシステムと、前記プログラマブル論理回路及び前記プロセッサシステムに結合されたネットワークオンチップとを含むデバイスを提供するステップと、
複数の独立区画を実装するように前記ネットワークオンチップ及び前記プログラマブル論理回路を構成するステップとを備え、
前記ネットワークオンチップが、前記複数の独立区画の各々について、前記プログラマブル論理回路に実装された回路ブロックと前記プロセッサシステムとを通信可能にリンクするユーザ指定のデータ経路を確立するようにプログラム可能であり、前記方法はさらに、
前記デバイスにロードされたプログラミングデバイスイメージ
(PDI)に基づき、前記デバイス内に配置されたプラットフォーム管理コントローラを使用して前記複数の独立区画を実装するように前記プログラマブル論理回路、前記ネットワークオンチップ、及び前記プロセッサシステムを構成するステップとを備え
、
前記プラットフォーム管理コントローラは、各PDIごとのシステム管理識別子(SMID)をSMID回路に割り当て、
各SMID回路は、割り当てられたSMIDを、SMID回路に対応するマスター回路からの各トランザクションに添付する、方法。
【請求項10】
前記複数の独立区画の各区画が異なるアプリケーションを実装し、前記アプリケーションが互いに分離される、請求項9に記載の方法。
【請求項11】
前記デバイスが、前記ネットワークオンチップに結合されたデータ処理エンジンアレイを含み、前記複数の独立区画のうちの1つ以上が、前記データ処理エンジンアレイの1つ以上のデータ処理エンジンを含む、請求項10に記載の方法。
【請求項12】
前記複数の独立区画のうちの前記1つ以上の各々に前記アプリケーションの一部を実装するように前記データ処理エンジンアレイを構成するステップをさらに含む、請求項11に記載の方法。
【請求項13】
前記デバイスが、前記ネットワークオンチップに結合された特定用途向けのハードワイヤード回路ブロックを含み、前記方法が、
前記特定用途向けのハードワイヤード回路ブロックと前記複数の独立区画の各々の前記プログラマブル論理回路に実装された前記回路ブロックのための共通のインターフェースを提供するステップをさらに含む、請求項9に記載の方法。
【請求項14】
前記複数の独立区画のうちの少なくとも1つを動的に再構成するステップをさらに含む、請求項9に記載の方法。
【請求項15】
前記デバイス内にプログラマブル保護回路を設けるステップと、
受信したトランザクション内のトランザクションソースの識別子を認証されたトランザクションソースのリストと比較するように前記プログラマブル保護回路を構成することによって、前記複数の独立区画を分離するステップとをさらに含む、請求項9に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、集積回路(IC)に関し、より詳細には、様々な異種サブシステムを提供する集積プログラマブルデバイスプラットフォームに関する。
【背景技術】
【0002】
プログラマブル集積回路(IC)は、プログラマブル論理を含むデバイスのタイプを指す。プログラマブルデバイス又はICの例は、フィールドプログラマブルゲートアレイ(FPGA)である。FPGAは、プログラマブル回路ブロックを含むことを特徴とする。プログラマブル回路ブロックの例には、入力/出力ブロック(IOB)、構成可能論理ブロック(CLB)、専用ランダムアクセスメモリブロック(BRAM)、デジタル信号処理ブロック(DSP)、プロセッサ、クロックマネージャ、及び遅延ロックループ(DLL)が含まれるが、これらに限定されない。
【0003】
現代のプログラマブルICは、1つ以上の他のサブシステムと組み合わせてプログラマブル論理を含むように進化してきた。例えば、いくつかのプログラマブルICは、プログラマブル論理及びハードワイヤードプロセッサの両方を含むシステムオンチップ又は「SoC」に進化している。他の種類のプログラマブルICは、追加の及び/又は異なるサブシステムを含む。
【発明の概要】
【課題を解決するための手段】
【0004】
デバイスは、プログラマブル論理回路と、プログラマブル論理回路に結合されたプロセッサシステムと、プログラマブル論理回路及びプロセッサシステムに結合されたネットワークオンチップとを含むことができる。ネットワークオンチップ及びプログラマブル論理回路は、複数の独立区画を実装するように構成することができる。ネットワークオンチップは、複数の独立区画の各々について、プログラマブル論理回路に実装された回路ブロックとプロセッサシステムとを通信可能にリンクするユーザ指定のデータ経路を確立するようにプログラム可能とすることができる。デバイスはさらに、複数の独立区画を実装するために、プログラマブル論理回路と、ネットワークオンチップと、プロセッサシステムとを構成するプラットフォーム管理コントローラを含むことができる。
【0005】
一態様では、複数の独立区画の各独立区画は、異なるアプリケーションを実装し、アプリケーションは、互いに分離される。
【0006】
別の態様では、デバイスは、ネットワークオンチップに結合されたデータ処理エンジンアレイを含み、複数の独立区画のうちの1つ以上は、データ処理エンジンアレイの1つ以上のデータ処理エンジンを含む。
【0007】
別の態様では、データ処理エンジンアレイは、複数の独立区画のうちの1つ以上の各々にアプリケーションの一部を実装するように構成される。
【0008】
別の態様では、デバイスは、ネットワークオンチップに結合された特定用途向けのハードワイヤード回路ブロックを含む。特定用途向けのハードワイヤード回路ブロック及び複数の独立区画の各々のプログラマブル論理回路に実装された回路ブロックは、共通のインターフェースを有することができる。
【0009】
別の態様では、デバイスは、受信したトランザクション内のトランザクションソースの識別子を認証されたトランザクションソースのリストと比較することによって複数の独立区画を分離するように構成されたプログラマブル保護回路を含む。
【0010】
別の態様では、プログラマブル保護回路は、受信したトランザクションで指定されたアドレスを、トランザクションソースの識別子の許可されたアドレスとさらに比較する。
【0011】
別の態様では、プログラマブル回路に実装されたプロセッサシステム及び回路ブロックは、通信のために共通の記述子フォーマットを使用する。
【0012】
方法は、プログラマブル論理回路と、プログラマブル論理回路に結合されたプロセッサシステムと、プログラマブル論理回路及びプロセッサシステムに結合されたネットワークオンチップとを含むデバイスを提供することを含むことができる。この方法は、複数の独立区画を実装するようにネットワークオンチップ及びプログラマブル論理回路を構成することを含むことができる。ネットワークオンチップは、複数の独立区画の各々について、プログラマブル論理回路に実装された回路ブロックとプロセッサシステムとを通信可能にリンクするユーザ指定のデータ経路を確立するようにプログラム可能とすることができる。この方法は、デバイス内に配置されたプラットフォーム管理コントローラを使用して複数の独立区画を実装するようにプログラマブル論理回路、ネットワークオンチップ、及びプロセッサシステムを構成することを含むことができる。
【0013】
一態様では、複数の独立区画の各区画は、異なるアプリケーションを実装し、アプリケーションは、互いに分離される。
【0014】
別の態様では、デバイスは、ネットワークオンチップに結合されたデータ処理エンジンアレイを含み、複数の独立区画のうちの1つ以上は、データ処理エンジンアレイの1つ以上のデータ処理エンジンを含む。
【0015】
別の態様では、この方法は、複数の独立区画のうちの1つ以上の各々にアプリケーションの一部を実装するようにデータ処理エンジンアレイを構成することを含むことができる。
【0016】
別の態様では、デバイスは、ネットワークオンチップに結合された特定用途向けのハードワイヤード回路ブロックを含むことができる。その場合、方法は、特定用途向けのハードワイヤード回路ブロックと複数の独立区画の各々のプログラマブル論理回路に実装された回路ブロックのための共通のインターフェースを提供することを含むことができる。
【0017】
別の態様では、この方法は、複数の独立区画のうちの少なくとも1つを動的に再構成することを含むことができる。
【0018】
別の態様では、方法は、デバイス内にプログラマブル保護回路を設けることと、受信したトランザクション内のトランザクションソースの識別子を認証されたトランザクションソースのリストと比較するようにプログラマブル保護回路を構成することによって複数の独立区画を分離することとを含むことができる。
【0019】
この概要セクションは、特定の概念を紹介するためにのみ提供され、特許請求される主題の重要な又は本質的な特徴を特定するためのものではない。本発明の構成の他の特徴は、添付の図面及び以下の詳細な説明から明らかになるであろう。
【0020】
図面の簡単な説明
本発明の構成は、例として添付の図面に示されている。しかしながら、図面は、示された特定の実施態様のみに本発明の構成を限定するものと解釈されるべきではない。以下の詳細な説明を検討し、図面を参照すると、様々な態様及び利点が明らかになるであろう。
【図面の簡単な説明】
【0021】
【
図1】集積回路(IC)のシステムオンチップ(SoC)タイプのための例示的なアーキテクチャを示す。
【
図2】
図1のSoCのためのデータ処理エンジン(DPE)アレイの例示的な実施態様を示す。
【
図3】
図2のDPEアレイのDPEの例示的なアーキテクチャを示す。
【
図4】
図3の例示的なアーキテクチャのさらなる態様を示す。
【
図5】DPEアレイの別の例示的なアーキテクチャを示す。
【
図6】DPEアレイのSoCインターフェースブロックのタイルの例示的なアーキテクチャを示す。
【
図7】
図1のネットワークオンチップ(NoC)の例示的な実施態様を示す。
【
図8】
図1のSoC内のエンドポイント回路とNoCとの間の接続を示すブロック図である。
【
図9】別の例によるNoCを示すブロック図である。
【
図10】NoCをプログラムする例示的な方法を示す。
【
図11】NoCをプログラムする別の例示的な方法を示す。
【
図12】エンドポイント回路間のNoCを通る例示的なデータ経路を示す。
【
図13】NoCに関連する読み出し/書き込み要求及び応答を処理する例示的な方法を示す。
【
図14】NoCマスタユニットの例示的な実施態様を示す。
【
図15】NoCスレーブユニットの例示的な実施態様を示す。
【
図16】NoC周辺機器相互接続を介したNoCのレジスタブロックへの例示的な接続を示す。
【
図17】NoCによって使用される例示的なテーブルを示す。
【
図18】SoCを動作させるための例示的な方法を示す。
【
図19】NoCを部分的に再構成する例示的な方法である。
【
図20】
図1のSoCの別の例示的な実施態様を示す。
【
図21】プラットフォーム管理コントローラ(PMC)の例示的な実施態様を示す。
【
図22】
図21のPMCのプロセッサの例示的な実施態様を示す。
【
図23】
図1のSoCのさらなる構造的及び機能的態様を示す。
【
図24】
図1のSoCのさらなる構造的及び機能的態様を示す。
【
図25】
図24のプログラマブル保護回路の例示的な実施態様を示す。
【
図26】
図1のSoCをブートする例示的な方法を示す。
【
図27】SoCをブートするために使用され得るプログラミングデバイスイメージの一例を示す。
【
図28】異なる区画を実装する例示的なSoCを示す。
【
図29】異なる区画を実装する別の例示的なSoCを示す。
【
図30】SoC内にプログラミングデバイスイメージ(PDI)を実装する例示的な方法を示す。
【
図31】SoC内にPDIを実装し、SoCを経時的に再構成する別の例示的な方法を示す。
【
図32】SoC内にPDIを実装し、SoCの部分的再構成を経時的に実行する別の例示的な方法を示す。
【発明を実施するための形態】
【0022】
本開示は、新規な特徴を定義する特許請求の範囲によって終了するが、本開示内で説明される様々な特徴は、図面と併せて説明を考慮することによってよりよく理解されると考えられる。本明細書に記載のプロセス、機械、製造物、及びそれらの任意の変形は、例示の目的で提供される。本開示内に記載された特定の構造的及び機能的詳細は、限定として解釈されるべきではなく、単に特許請求の範囲の基礎として、及び実質的に任意の適切に詳細な構造に記載された特徴を様々に使用することを当業者に教示するための代表的な基礎として解釈されるべきである。さらに、本開示内で使用される用語及び語句は、限定することを意図するものではなく、むしろ記載された特徴の理解可能な説明を提供することを意図している。
【0023】
本開示は、集積回路(IC)に関し、より詳細には、様々な異種サブシステムを提供する集積プログラマブルデバイスプラットフォーム(プラットフォーム)に関する。プラットフォームは、多数の利点を提供するために記載された様々なサブシステムを活用する。例えば、プラットフォームは、固定機能コンポーネント(例えば、特定用途向け集積回路又は「ASIC」)の面積及び電力効率、プログラマブル論理の柔軟性及び機能性を活用することができ、その柔軟性を固定機能コンポーネントに拡張し、固定機能コンポーネントとプログラマブル論理の両方に共通のサービスを提供する。
【0024】
プラットフォームは、異なるサブシステム間で共有及び使用され得るデバイス内の共通インフラストラクチャを提供することによって、固定機能コンポーネントの柔軟性を拡張することができる。この共通インフラストラクチャは、データ経路、ファイアウォール、割り込み及びドアベル経路、パフォーマンスモニタ、及び構成を含むがこれらに限定されない機能を提供することができる。異なるサブシステムは、これらの異なるサブシステム内の回路ブロックが、ユーザアプリケーションの一部として実装されると、共通インフラストラクチャに接続してこれを利用するように構成された標準インターフェースを使用することができるように実装することができる。
【0025】
共通のインフラストラクチャは、その中に含まれる様々なサブシステムの不均一性にもかかわらず、デバイスの柔軟性、機能性、面積効率、電力効率、及びパフォーマンスを高める。1つのコンポーネントのための共通インフラストラクチャの未使用のプラットフォームリソースは、プラットフォーム内の別のコンポーネントに適用され得る。一例として、プラットフォームの未使用のコンポーネントのセットに割り当てられた未使用のネットワークオンチップ(NoC)バッファ、仮想チャネル、及び物理経路は、プラットフォーム内のユーザのアプリケーションによって使用されるコンポーネントの別のセットに割り当てられてもよい。さらに、プラットフォームは、デバイスの様々なコンポーネントのいずれかが、プログラマブル論理などのサブシステムにアクセスするために共通インフラストラクチャを利用することを可能にする。
【0026】
別の態様では、特定の機能は、プラットフォームの1つのコンポーネントからプラットフォーム内の別のコンポーネント又はサブシステムに迅速に再マッピングされ得る。一例として、標準的な暗号化加速機能、例えば、Advanced Encryption Standard Galois/Counterモード(AES-GCM)は、プログラマブル論理を使用して実装されてもよい。機能は、ハードワイヤード又はハード化暗号化アクセラレータブロックなどの別のデバイスに再マッピング、例えば移動されてもよい。この再マッピングは、プログラマブル論理のリソースを解放し、デバイスの柔軟性を高める。「ハードワイヤード」及び「ハード化」という用語は、本開示内で互換的に使用される。
【0027】
再マッピングは、少なくとも部分的に、共通インフラストラクチャによって容易にされる。共通インフラストラクチャは、プログラマブル論理に実装された回路ブロックとハードワイヤード回路ブロックの両方に対する共通のインターフェースを含み得る。共通インフラストラクチャは、あるサブシステムから別のサブシステムへの機能の再マッピングにもかかわらず、通信経路、データ経路、及び割り込み経路などの機能の属性を維持することを可能にする。暗号化加速機能と相互作用するプラットフォーム内の他のコンポーネントは、実装されている場所にもかかわらず、ファイアウォールによってコンポーネントへの不正アクセスが防止される。一例として、他のコンポーネントは、暗号化されていないデータ又は暗号化加速関数によって使用される暗号鍵にアクセス又は閲覧することができない。許可されていないコンポーネントが暗号化されたデータにアクセスしたり、暗号化されたデータを閲覧したりすることを防止するために、ファイアウォール(Firewalling)を使用することもできる。プラットフォーム内の他のコンポーネントは、暗号化加速機能の再マッピングにもかかわらず、同じ方法で動作し続けることができる。プラットフォームに実装されるアプリケーションの1つの機能の再マッピングは、プラットフォーム全体にわたるアプリケーションのすべてのコンポーネント及び/又は機能の再マッピングを必要としない。
【0028】
プラットフォームはまた、デバイス内の複数の異なる区画の作成を同時にサポートする。各区画は、その中で異なるアプリケーションを実装することができる。各区画、及びその中で実行されるアプリケーションは、プラットフォーム内の他の各区画から分離されてもよい。本明細書に記載のプラットフォーム及び例示的なSoCに関して本明細書で使用される「アプリケーション」という用語は、実行可能プログラムコード、構成ビットストリーム、レジスタプログラミングデータ、又はSoC若しくはその一部(例えば、デバイス全体又はその区画)を構成するために使用される他の画像であるかどうかにかかわらず、任意のデータを指す。記載された区分はまた、同じエンドユーザ又は異なるエンドユーザに対応する異なるアプリケーションが各々異なる区画内で同時にデバイス内で実行することができるマルチクライアント又はマルチテナントのユースケースをサポートする。プラットフォームは、デバイスの様々なコンポーネントのいずれかが共通インフラストラクチャを利用してプログラマブル論理などのサブシステムにアクセスすることを可能にする。
【0029】
本発明の構成のさらなる態様は、図面を参照して以下により詳細に説明される。説明を簡単かつ明確にするために、図に示す要素は必ずしも縮尺通りに描かれていない。例えば、いくつかの要素の寸法は、明確にするために他の要素に対して誇張されている場合がある。さらに、適切であると考えられる場合、対応する、類似の、又は同様の特徴を示すために、図面間で参照番号が繰り返される。
【0030】
図1は、システムオンチップ(SoC)100の例示的なアーキテクチャを示す。SoC100は、プログラマブルIC及び統合プログラマブルデバイスプラットフォームの一例である。
図1の例では、図示されたSoC100の様々な異なるサブシステム又は領域は、単一の統合パッケージ内に設けられた単一のダイ上に実装されてもよい。他の例では、異なるサブシステムは、単一の統合パッケージとして提供される複数の相互接続されたダイ上に実装されてもよい。
【0031】
この例では、SoC100は、異なる機能を有する回路を有する複数の領域を含む。この例では、SoC100は、任意選択的に、データ処理エンジン(DPE)アレイ102を含む。SoC100は、プログラマブル論理(PL)領域104(以下、PL領域又はPL)、処理システム(PS)106、ネットワークオンチップ(NoC)108、及び1つ以上のハードワイヤード回路ブロック110を含む。DPEアレイ102は、SoC100の他の領域へのインターフェースを有する複数の相互接続されたハードワイヤード及びプログラマブルプロセッサとして実装される。
【0032】
PL104は、指定された機能を実行するようにプログラムされ得る回路である。一例として、PL104は、フィールドプログラマブルゲートアレイ型の回路として実装されてもよい。PL104は、プログラマブル回路ブロックのアレイを含むことができる。PL104内のプログラマブル回路ブロックの例には、構成可能論理ブロック(CLB)、専用ランダムアクセスメモリブロック(BRAM及び/又はUltraRAM又はURAM)、デジタル信号処理ブロック(DSP)、クロックマネージャ、及び/又は遅延ロックループ(DLL)が含まれるが、これらに限定されない。
【0033】
PL104内の各プログラマブル回路ブロックは、通常、プログラマブル相互接続回路とプログラマブル論理回路の両方を含む。プログラマブル相互接続回路は、通常、プログラマブル相互接続点(PIP)によって相互接続された様々な長さの多数の相互接続ワイヤを含む。通常、相互接続ワイヤは、ビットごとに(例えば、各ワイヤが1ビットの情報を伝達する場合)接続を提供するように構成される(例えば、ワイヤごとに)。プログラマブル論理回路は、例えば、ルックアップテーブル、レジスタ、算術論理などを含み得るプログラマブル要素を使用してユーザ設計の論理を実装する。プログラマブル相互接続及びプログラマブル論理回路は、プログラマブル素子がどのように構成され動作するかを定義する内部構成メモリセルに構成データをロードすることによってプログラムされ得る。
【0034】
PS106は、SoC100の一部として製造されるハードワイヤード回路として実装される。PS106は、各々がプログラムコードを実行することができる様々な異なるプロセッサタイプのいずれかとして実装されるか、又はそれらを含むことができる。例えば、PS106は、個別のプロセッサ、例えば、プログラムコードを実行することができる単一のコアとして実装されてもよい。別の例では、PS106は、マルチコアプロセッサとして実現され得る。さらに別の例では、PS106は、1つ以上のコア、モジュール、コプロセッサ、インターフェース、及び/又はその他のリソースを含み得る。PS106は、様々な異なるタイプのアーキテクチャのいずれかを用いて実装され得る。PS106を実装するために使用され得る例示的なアーキテクチャは、ARMプロセッサアーキテクチャ、x86プロセッサアーキテクチャ、GPUアーキテクチャ、モバイルプロセッサアーキテクチャ、DSPアーキテクチャ、又はコンピュータ可読命令若しくはプログラムコードを実行することができる他の適切なアーキテクチャを含み得るが、これらに限定されない。
【0035】
NoC108は、SoC100内のエンドポイント回路間でデータを共有するための相互接続ネットワークを含む。エンドポイント回路は、DPEアレイ102、PL領域104、PS106、及び/又はハードワイヤード回路ブロック110~118に配置することができる。NoC108は、専用スイッチングによる高速データ経路を含むことができる。一例では、NoC108は、水平経路、垂直経路、又は水平経路と垂直経路の両方を含む。
図1に示す領域の配置及び数は単なる例である。NoC108は、選択されたコンポーネント及び/又はサブシステムを接続するためにSoC100内で利用可能な共通インフラストラクチャの一例である。
【0036】
NoC108は、PL104、PS106、及びハードワイヤード回路ブロック110のうちの選択されたものへの接続を提供する。NoC108はプログラム可能である。他のプログラマブル回路と共に使用されるプログラマブルNoCの場合、SoC100内での実装のためにユーザ回路設計が作成されるまで、NoC108を通ってルーティングされるべきネットは未知である。NoC108は、スイッチ及びインターフェースなどのNoC108内の要素がどのように構成され、スイッチ間及びNoCインターフェース間でデータを渡すように動作するかを定義する内部構成レジスタに構成データをロードすることによってプログラムすることができる。
【0037】
NoC108は、SoC100の一部として製造され、物理的に修正可能ではないが、ユーザ回路設計の異なるマスタ回路と異なるスレーブ回路との間の接続を確立するようにプログラムすることができる。例えば、NoC108は、ユーザ指定のマスタ回路とスレーブ回路とを接続するパケット交換網を確立することができる複数のプログラマブルスイッチを含むことができる。これに関して、NoC108は、異なる回路設計に適応することができ、各異なる回路設計は、NoC108によって結合され得るSoC100内の異なる位置に実装されたマスタ回路及びスレーブ回路の異なる組合せを有する。NoC108は、ユーザ回路設計のマスタ回路及びスレーブ回路の間で、例えばアプリケーションデータ及び/又は構成データなどのデータをルーティングするようにプログラムすることができる。例えば、NoC108は、PL104内に実装された異なるユーザ指定回路をPS106及び/又はDPEアレイ102と、異なるハードワイヤード回路ブロックと、及び/又はSoC100の外部の異なる回路及び/又はシステムと結合するようにプログラムすることができる。
【0038】
ハードワイヤード回路ブロック110は、入力/出力(I/O)ブロック、及び/又はSoC100の外部の回路及び/又はシステム、メモリコントローラなどに信号を送受信するためのトランシーバを含むことができる。異なるI/Oブロックの例は、シングルエンド及び疑似差動I/O並びに高速差動クロックトランシーバを含むことができる。さらに、ハードワイヤード回路ブロック110は、特定の機能を実行するように実装されてもよい。ハードワイヤード回路ブロック110の例には、暗号化エンジン、デジタル-アナログ変換器、アナログ-デジタル変換器などが含まれるが、これらに限定されない。SoC100内のハードワイヤード回路ブロック110は、本明細書では時々、特定用途向けブロックと呼ばれることがある。
【0039】
図1の例では、PL104は2つの別々の領域に示されている。別の例では、PL104は、プログラマブル回路の統合領域として実装されてもよい。さらに別の例では、PL104は、プログラマブル回路の3つ以上の異なる領域として実装されてもよい。PL104の特定の組織は、限定を意図するものではない。ここで、SoC100は、1つ以上のPL領域104、PS106、NoC108を含む。DPEアレイ102は、任意選択的に含まれてもよい。
【0040】
他の例示的な実施態様では、SoC100は、ICの異なる領域に配置された2つ以上のDPEアレイ102を含むことができる。さらに他の例では、SoC100は、マルチダイICとして実装されてもよい。その場合、各サブシステムは、異なるダイ上に実装されてもよい。異なるダイは、ICがマルチチップモジュール(MCM)などとして実装される積層ダイアーキテクチャを使用して、インターポーザ上にダイを並べて積層するなど、様々な利用可能なマルチダイIC技術のいずれかを使用して通信可能にリンクされてもよい。マルチダイICの例では、各ダイは、単一のサブシステム、2つ以上のサブシステム、サブシステム及び別の部分サブシステム、又はそれらの任意の組合せを含むことができることを理解されたい。
【0041】
図2は、DPEアレイ102の例示的な実施態様を示す。
図2の例では、DPEアレイ102は、SoCインターフェースブロック206を含むDPE204の2次元アレイとして実装される。DPEアレイ102は、以下でより詳細に説明する様々な異なるアーキテクチャのいずれかを使用して実装することができる。限定ではなく例示を目的として、
図2は、整列した行及び整列した列に配置されたDPE204を示す。しかしながら、他の実施形態では、DPE204は、選択された行及び/又は列のDPEが隣接する行及び/又は列のDPEに対して水平方向に逆転又は反転するように配置されてもよい。1つ以上の他の実施形態では、DPEの行及び/又は列は、隣接する行及び/又は列に対してオフセットされてもよい。1つ以上又はすべてのDPE204は、各々がプログラムコードを実行することができる1つ以上のコアを含むように実装されてもよい。DPE204の数、DPE204の特定の配置、及び/又はDPE204の向きは限定的であることを意図しない。
【0042】
SoCインターフェースブロック206は、DPE204をデバイスIC200の1つ以上の他のサブシステムに結合することができる。1つ以上の実施形態では、SoCインターフェースブロック206は、隣接するDPE204に結合される。例えば、SoCインターフェースブロック206は、DPEアレイ202内のDPEの最下段の各DPE204に直接結合することができる。例示では、SoCインターフェースブロック206は、DPE204-1、204-2、204-3、204-4、204-5、204-6、204-7、204-8、204-9、及び204-10に直接接続されてもよい。
【0043】
図2は、例示を目的として提供されている。他の実施形態では、SoCインターフェースブロック206は、DPEアレイ202の上部、DPEアレイ202の左側(例えば、列として)、DPEアレイ202の右側(例えば、列として)、又はDPEアレイ202内及びその周囲の複数の位置(例えば、DPEアレイ202内の1つ以上の介在する行及び/又は列として)に配置されてもよい。SoCインターフェースブロック206のレイアウト及び位置に応じて、SoCインターフェースブロック206に結合された特定のDPEは変化し得る。
【0044】
例示の目的で、SoCインターフェースブロック206がDPE204の左に位置する場合、SoCインターフェースブロック206は、DPE204-1、DPE204-11、DPE204-21、及びDPE204-31を含むDPEの左列に直接結合されてもよい。SoCインターフェースブロック206がDPE204の右に位置する場合、SoCインターフェースブロック206は、DPE204-10、DPE204-20、DPE204-30、及びDPE204-40を含むDPEの右列に直接結合することができる。SoCインターフェースブロック206がDPE204の上部に位置する場合、SoCインターフェースブロック206は、DPE204-31、DPE204-32、DPE204-33、DPE204-34、DPE204-35、DPE204-36、DPE204-37、DPE204-38、DPE204-39、及びDPE204-40を含むDPEの上段に結合することができる。SoCインターフェースブロック206が複数の位置に位置する場合、SoCインターフェースブロック206に直接接続される特定のDPEは変化し得る。例えば、SoCインターフェースブロックがDPEアレイ202内の行及び/又は列として実装される場合、SoCインターフェースブロック206に直接結合されるDPEは、SoCインターフェースブロック206の一方又は両方の側のSoCインターフェースブロック206に隣接するDPEであってもよい。
【0045】
DPE204は、DPEインターコネクト(図示せず)によって相互接続され、DPEインターコネクトは、まとめて考えると、DPEインターコネクトネットワークを形成する。したがって、SoCインターフェースブロック206は、SoCインターフェースブロック206に直接接続されたDPEアレイ102の1つ以上の選択されたDPE204と通信し、それぞれのDPE204内に実装されたDPEインターコネクトから形成されたDPEインターコネクトネットワークを利用することによって、DPEアレイ102の任意のDPE204と通信することができる。
【0046】
SoCインターフェースブロック206は、DPEアレイ102内の各DPE204をSoC100の1つ以上の他のサブシステムと結合することができる。例えば、SoCインターフェースブロック206は、DPEアレイ102をNoC108及びPL104に結合することができる。したがって、DPEアレイ102は、PL104、PS106、及び/又はハードワイヤード回路ブロック110のいずれかに実装された回路ブロックと通信することができる。例えば、SoCインターフェースブロック206は、選択されたDPE204とPL104との間の接続を確立することができる。SoCインターフェースブロック206はまた、選択されたDPE204とNoC108との間の接続を確立することができる。NoC108を通じて、選択されたDPE204は、PS106及び/又はハードワイヤード回路ブロック110と通信することができる。選択されたDPE204は、SoCインターフェースブロック206及びPL104を介してハードワイヤード回路ブロック110と通信することができる。特定の実施形態では、SoCインターフェースブロック206は、SoC100の1つ以上のサブシステムに直接結合することができる。例えば、SoCインターフェースブロック206は、PS106及び/又は他のハードワイヤード回路ブロック110に直接結合されてもよい。特定の実施形態においては、ハードワイヤード回路ブロック110を、ASICの例と考えることができる。
【0047】
1つ以上の実施形態では、DPEアレイ102は、単一のクロックドメインを含む。NoC108、PL104、PS106、及び様々なハードワイヤード回路ブロック110などの他のサブシステムは、1つ以上の別個の又は異なるクロックドメイン内にあってもよい。さらに、DPEアレイ102は、他のサブシステムのクロックとインターフェースするために使用され得る追加のクロックを含むことができる。特定の実施形態では、SoCインターフェースブロック206は、DPEアレイ102のDPE204に提供又は分配することができる1つ以上のクロック信号を生成することができるクロック信号発生器を含む。
【0048】
DPEアレイ102は、DPE204とSoCインターフェースブロック206との間の接続性、及びDPE204とSoCインターフェースブロック206がどのように動作するかを定義する内部構成メモリセル(本明細書では「構成レジスタ」とも呼ばれる)に構成データをロードすることによってプログラムされ得る。例えば、特定のDPE204又はDPE204のグループがサブシステムと通信する場合、DPE204及びSoCインターフェースブロック206はそうするようにプログラムされる。同様に、1つ以上の特定のDPE204が1つ以上の他のDPE204と通信するために、DPEはそうするようにプログラムされる。DPE204及びSoCインターフェースブロック206は、構成データをDPE204及びSoCインターフェースブロック206内の構成レジスタにそれぞれロードすることによってプログラムされ得る。別の例では、SoCインターフェースブロック206の一部であるクロック信号発生器は、DPEアレイ102に提供されるクロック周波数を変えるために構成データを使用してプログラム可能であり得る。
【0049】
図3は、
図2のDPEアレイ102のDPE204の例示的なアーキテクチャを示す。
図3の例では、DPE204は、コア302、メモリモジュール304、及びDPEインターコネクト306を含む。各DPE204は、SoC100上のハードワイヤード及びプログラマブル回路ブロックとして実装される。
【0050】
コア302は、DPE204のデータ処理能力を提供する。コア302は、様々な異なる処理回路のいずれかとして実装されてもよい。
図3の例では、コア302は任意選択のプログラムメモリ308を含む。例示的な実施態様では、コア302は、プログラムコード、例えばコンピュータ可読命令を実行することができるプロセッサとして実装される。その場合、プログラムメモリ308が含まれ、コア302によって実行される命令を記憶することができる。コア302は、例えば、CPU、GPU、DSP、ベクトルプロセッサ、又は命令を実行することができる他のタイプのプロセッサとして実装されてもよい。コア302は、本明細書に記載の様々なCPU及び/又はプロセッサアーキテクチャのいずれかを使用して実装することができる。別の例では、コア302は、超長命令語(VLIW)ベクトルプロセッサ又はDSPとして実装される。
【0051】
特定の実施態様では、プログラムメモリ308は、コア302専用の(例えば、コア302によって排他的にアクセスされる)専用プログラムメモリとして実装される。プログラムメモリ308は、同じDPE204のコアによってのみ使用されてもよい。したがって、プログラムメモリ308は、コア302によってのみアクセスされ得、他のDPE又は他のDPEのコンポーネントと共有されない。プログラムメモリ308は、読み出し及び書き込み動作のための単一のポートを含むことができる。プログラムメモリ308は、プログラム圧縮をサポートすることができ、以下により詳細に説明するDPEインターコネクト306のメモリマップドネットワーク部分を使用してアドレス指定可能である。例えば、DPEインターコネクト306のメモリマップドネットワークを介して、プログラムメモリ308は、コア302によって実行され得るプログラムコードでロードされ得る。
【0052】
コア302は、構成レジスタ324を含むことができる。構成レジスタ324は、コア302の動作を制御するために構成データと共にロードされてもよい。1つ以上の実施形態では、コア302は、構成レジスタ324にロードされた構成データに基づいてアクティブ化及び/又は非アクティブ化されてもよい。
図3の例では、構成レジスタ324は、以下でより詳細に説明するDPEインターコネクト306のメモリマップドネットワークを介してアドレス指定可能(例えば、読み取り及び/又は書き込みが可能)である。
【0053】
1つ以上の実施形態では、メモリモジュール304は、コア302によって使用及び/又は生成されるデータを記憶することができる。例えば、メモリモジュール304は、アプリケーションデータを記憶することができる。メモリモジュール304は、ランダムアクセスメモリ(RAM)などの読み出し/書き込みメモリを含むことができる。したがって、メモリモジュール304は、コア302によって読み出され消費され得るデータを記憶することができる。メモリモジュール304はまた、コア302によって書き込まれるデータ(例えば、結果)を記憶することができる。
【0054】
1つ以上の他の実施形態では、メモリモジュール304は、DPEアレイ内の他のDPEの1つ以上の他のコアによって使用及び/又は生成され得るデータ、例えばアプリケーションデータを記憶することができる。DPEの1つ以上の他のコアはまた、メモリモジュール304から読み出し及び/又はメモリモジュールに書き込むことができる。特定の実施形態では、メモリモジュール304から読み出し及び/又はメモリモジュールに書き込むことができる他のコアは、1つ以上の隣接するDPEのコアであってもよい。DPE204と境界又は境界を共有する(例えば、隣接している)別のDPEは、DPE204に対して「隣接する」DPEであると言われる。コア302及び隣接するDPEからの1つ以上の他のコアがメモリモジュール304に読み書きすることを可能にすることによって、メモリモジュール304は、メモリモジュール304にアクセスすることができる異なるDPE及び/又はコア間の通信をサポートする共有メモリを実装する。
【0055】
図2を参照すると、例えば、DPE204-14、204-16、204-5、及び204-25は、DPE204-15の隣接DPEと見なされる。一例では、各DPE204-16、204-5、及び204-25内のコアは、DPE204-15内のメモリモジュールに対する読み出し及び書き込みが可能である。特定の実施形態では、メモリモジュールに隣接する隣接するDPEのみが、DPE204-15のメモリモジュールにアクセスすることができる。例えば、DPE204-15のコアはDPE204-14のコアとDPE204-15のメモリモジュールとの間に位置し得るため、DPE204-14は、DPE204-15に隣接しているが、DPE204-15のメモリモジュールに隣接していなくてもよい。したがって、特定の実施形態では、DPE204-14のコアは、DPE204-15のメモリモジュールにアクセスしなくてもよい。
【0056】
特定の実施形態では、DPEのコアが別のDPEのメモリモジュールにアクセスできるかどうかは、メモリモジュールに含まれるメモリインターフェースの数、及びそのようなコアがメモリモジュールのメモリインターフェースのうちの利用可能な1つに接続されているかどうかに依存する。上記の例では、DPE204-15のメモリモジュールは4つのメモリインターフェースを含み、DPE204-16、204-5、及び204-25の各々のコアはそのようなメモリインターフェースに接続されている。DPE204-15内のコア302自体は、第4のメモリインターフェースに接続される。各メモリインターフェースは、1つ以上の読み出しチャネル及び/又は書き込みチャネルを含むことができる。特定の実施形態では、各メモリインターフェースは、それに取り付けられた特定のコアがメモリモジュール304内の複数のバンクに対して同時に読み出し及び/又は書き込みを行うことができるように、複数の読み出しチャネル及び複数の書き込みチャネルを含む。
【0057】
他の例では、5つ以上のメモリインターフェースが利用可能であってもよい。そのような他のメモリインターフェースは、DPE204-15に対する対角線上のDPEがDPE204-15のメモリモジュールにアクセスすることを可能にするために使用することができる。例えば、DPE204-14、204-24、204-26、204-4、及び/又は204-6などのDPEのコアが、DPE204-15のメモリモジュールの利用可能なメモリインターフェースにも結合されている場合、そのような他のDPEもまた、DPE204-15のメモリモジュールにアクセスすることができる。
【0058】
メモリモジュール304は、構成レジスタ336を含むことができる。構成レジスタ336は、メモリモジュール304の動作を制御するために構成データと共にロードされてもよい。
図3の例では、構成レジスタ336(及び324)は、以下でより詳細に説明するDPEインターコネクト306のメモリマップドネットワークを介してアドレス指定可能(例えば、読み取り及び/又は書き込みが可能)である。
【0059】
図3の例では、DPEインターコネクト306はDPE204に固有のものである。DPEインターコネクト306は、DPE204とDPEアレイ102の1つ以上の他のDPEとの間の通信及び/又はSoC100の他のサブシステムとの通信を含む様々な動作を容易にする。DPEインターコネクト306はさらに、DPE204の構成、制御、及びデバッグを可能にする。
【0060】
特定の実施形態では、DPEインターコネクト306はオンチップ相互接続として実装される。オンチップ相互接続の一例は、アドバンストマイクロコントローラバスアーキテクチャ(AMBA)eXtensible Interface(AXI)バス(例えば、又はスイッチ)である。AMBA AXIバスは、回路ブロック及び/又はシステム間のオンチップ接続を確立する際に使用するための組み込みマイクロコントローラバスインターフェースである。AXIバスは、本開示内に記載された本発明の構成と共に使用され得る相互接続回路の一例として本明細書に提供され、したがって、限定として意図されていない。相互接続回路の他の例は、他のタイプのバス、クロスバー、及び/又は他のタイプのスイッチを含むことができる。
【0061】
1つ以上の実施形態では、DPEインターコネクト306は、2つの異なるネットワークを含む。第1のネットワークは、DPEアレイ102の他のDPE及び/又はSoC100の他のサブシステムとデータを交換することができる。例えば、第1のネットワークは、アプリケーションデータを交換することができる。第2のネットワークは、DPEの構成、制御、及び/又はデバッグデータなどのデータを交換することができる。
【0062】
図3の例では、DPEインターコネクト306の第1のネットワークは、ストリームスイッチ326及び1つ以上のストリームインターフェース(図示せず)から形成される。例えば、ストリームスイッチ326は、コア302、メモリモジュール304、メモリマップドスイッチ332、上のDPE、左のDPE、右のDPE、及び下のDPEのそれぞれに接続するためのストリームインターフェースを含む。各ストリームインターフェースは、1つ以上のマスタ及び1つ以上のスレーブを含むことができる。
【0063】
ストリームスイッチ326は、非隣接DPE及び/又はメモリモジュール304のメモリインターフェースに結合されていないDPEが、DPEアレイ102のそれぞれのDPE204のDPEインターコネクトによって形成されたDPEインターコネクトネットワークを介して、コア302及び/又はメモリモジュール304と通信することを可能にすることができる。
【0064】
再び
図2を参照し、基準点としてDPE204-15を使用すると、ストリームスイッチ326は、DPE204-14のDPEインターコネクト内に位置する別のストリームスイッチに結合され、それと通信することができる。ストリームスイッチ326は、DPE204-25のDPEインターコネクト内に位置する別のストリームスイッチに結合され、それと通信することができる。ストリームスイッチ326は、DPE204-16のDPEインターコネクト内に位置する別のストリームスイッチに結合され、それと通信することができる。ストリームスイッチ326は、DPE204-5のDPEインターコネクト内に位置する別のストリームスイッチに結合され、それと通信することができる。したがって、コア302及び/又はメモリモジュール304はまた、DPE内のDPEインターコネクトを介してDPEアレイ102内のDPEのいずれかと通信することができる。
【0065】
ストリームスイッチ326はまた、PL104及び/又はNoC108などのサブシステムとインターフェースするために使用されてもよい。一般に、ストリームスイッチ326は、回路スイッチングストリーム相互接続又はパケットスイッチングストリーム相互接続として動作するようにプログラムされる。回路スイッチングストリーム相互接続は、DPE間の高帯域幅通信に適したポイントツーポイントの専用ストリームを実装することができる。パケットスイッチングストリーム相互接続は、ストリームを共有して、複数の論理ストリームを中帯域幅通信用の1つの物理ストリームに時間多重化することを可能にする。
【0066】
ストリームスイッチ326は、構成レジスタ(
図3では「CR」と略される)334を含むことができる。構成データは、DPEインターコネクト306のメモリマップドネットワークを介して構成レジスタ334に書き込まれてもよい。構成レジスタ334にロードされた構成データは、DPE204が他のどのDPE及び/又はサブシステム(例えば、NoC108、PL104、及び/又はPS106)と通信するか、及びそのような通信が回路交換ポイントツーポイント接続として確立されるか、又はパケット交換接続として確立されるかを指示する。
【0067】
DPEインターコネクト306の第2のネットワークは、メモリマップドスイッチ332から形成される。メモリマップドスイッチ332は、複数のメモリマップドインターフェース(図示せず)を含む。各メモリマップドインターフェースは、1つ以上のマスタ及び1つ以上のスレーブを含むことができる。例えば、メモリマップドスイッチ332は、コア302、メモリモジュール304、DPE204の上のDPE内のメモリマップドスイッチ、及びDPE204の下のDPE内のメモリマップドスイッチのそれぞれに接続するためのメモリマップドインターフェースを含む。
【0068】
メモリマップドスイッチ332は、DPE204の構成、制御、及びデバッグデータを伝達するために使用される。
図3の例では、メモリマップドスイッチ332は、DPE204を構成するために使用される構成データを受信することができる。メモリマップドスイッチ332は、DPE204の下に位置するDPEから及び/又はSoCインターフェースブロック206から構成データを受信してもよい。メモリマップドスイッチ332は、受信した構成データを、DPE204の上の1つ以上の他のDPE、コア302(例えば、プログラムメモリ308及び/又は構成レジスタ324)、メモリモジュール304(例えば、メモリモジュール304内のメモリ及び/又は構成レジスタ336)、及び/又はストリームスイッチ326内の構成レジスタ334に転送することができる。
【0069】
DPEインターコネクト306は、DPE204の位置に応じて、各隣接するDPE及び/又はSoCインターフェースブロック206のDPEインターコネクトに結合される。まとめて考えると、DPE204のDPEインターコネクトは、DPEインターコネクトネットワーク(ストリームネットワーク及び/又はメモリマップドネットワークを含み得る)を形成する。各DPEのストリームスイッチの構成レジスタは、メモリマップドスイッチを介して構成データをロードすることによってプログラムすることができる。構成を通じて、ストリームスイッチ及び/又はストリームインターフェースは、パケット交換式であろうと回路交換式であろうと、1つ以上の他のDPE204及び/又はSoCインターフェースブロック206にあるかにかかわらず、他のエンドポイントとの接続を確立するようにプログラムされる。
【0070】
1つ以上の実施形態では、DPEアレイ102は、PS106などのプロセッサシステムのアドレス空間にマッピングされる。したがって、DPE204内の任意の構成レジスタ及び/又はメモリには、メモリマップドインターフェースを介してアクセスすることができる。例えば、メモリモジュール304内のメモリ、プログラムメモリ308、コア302内の構成レジスタ324、メモリモジュール304内の構成レジスタ336、及び/又は構成レジスタ334は、メモリマップドスイッチ332を介して読み出し及び/又は書き込みすることができる。
【0071】
図3の例では、メモリマップドインターフェースは、DPE204の構成データを受信することができる。構成データは、プログラムメモリ308にロードされるプログラムコード(含まれる場合)、構成レジスタ324,334及び/又は336にロードするための構成データ、及び/又はメモリモジュール304のメモリ(例えば、メモリバンク)にロードされるデータを含むことができる。
図3の例では、構成レジスタ324,334、及び336は、構成レジスタが制御することを意図されている特定の回路構造、例えば、コア302、ストリームスイッチ326、及びメモリモジュール304内に配置されているものとして示されている。
図3の例は、例示のみを目的としており、コア302、メモリモジュール304、及び/又はストリームスイッチ326内の要素が、構成データを対応する構成レジスタにロードすることによってプログラムされ得ることを示している。他の実施形態では、構成レジスタは、DPE204全体に分散されたコンポーネントの動作を制御するにもかかわらず、DPE204の特定の領域内に統合されてもよい。
【0072】
したがって、ストリームスイッチ326は、構成データを構成レジスタ334にロードすることによってプログラムされ得る。構成データは、2つの異なるDPE及び/又は他のサブシステム間の回路スイッチングモードで、又は選択されたDPE及び/又は他のサブシステム間のパケットスイッチングモードで動作するようにストリームスイッチ326をプログラムする。したがって、ストリームスイッチ326によって他のストリームインターフェース及び/又はスイッチに確立される接続は、適切な構成データを構成レジスタ334にロードして、DPE204内、他のDPE、及び/又はIC300の他のサブシステムとの実際の接続又はアプリケーションデータ経路を確立することによってプログラムされる。
【0073】
図4は、
図3の例示的なアーキテクチャのさらなる態様を示す。
図4の例では、DPEインターコネクト306に関する詳細は示されていない。
図4は、共有メモリを介したコア302と他のDPEとの接続性を示す。
図4はまた、メモリモジュール304の追加の態様を示す。例示の目的で、
図4はDPE204-15を参照する。
【0074】
図示されているように、メモリモジュール304は、複数のメモリインターフェース402,404,406、及び408を含む。
図4では、メモリインターフェース402及び408は「MI」と略される。メモリモジュール304は、複数のメモリバンク412-1~412-Nをさらに含む。特定の実施形態では、メモリモジュール304は、8つのメモリバンクを含む。他の実施形態では、メモリモジュール304は、より少ない又はより多いメモリバンク412を含むことができる。1つ以上の実施形態では、各メモリバンク412はシングルポートであり、それによってクロックサイクルごとに各メモリバンクへの最大1つのアクセスを可能にする。メモリモジュール304が8つのメモリバンク412を含む場合、このような構成は、各クロックサイクルにおいて8つの並列アクセスをサポートする。他の実施形態では、各メモリバンク412はデュアルポート又はマルチポートであり、それによって各クロックサイクルにより多くの並列アクセスを可能にする。
【0075】
図4の例では、メモリバンク412-1~412-Nの各々は、それぞれのアービタ414-1~414-Nを有する。各アービタ414は、競合の検出に応答してストール信号を生成することができる。各アービタ414は、アービトレーション論理を含むことができる。さらに、各アービタ414は、クロスバーを含むことができる。したがって、任意のマスタは、メモリバンク412の任意の特定の1つ以上に書き込むことができる。
図3に関連して述べたように、メモリモジュール304はメモリマップドスイッチ332に接続され、それによってメモリバンク412へのデータの読み出し及び書き込みを容易にする。したがって、メモリモジュール304に記憶された特定のデータは、メモリマップドスイッチ332を介して構成、制御、及び/又はデバッグプロセスの一部として制御、例えば書き込みされてもよい。
【0076】
メモリモジュール304は、ダイレクトメモリアクセス(DMA)エンジン416をさらに含む。1つ以上の実施形態では、DMAエンジン416は少なくとも2つのインターフェースを含む。例えば、1つ以上のインターフェースは、DPEインターコネクト306から入力データストリームを受信し、受信したデータをメモリバンク412に書き込むことができる。1つ以上の他のインターフェースは、メモリバンク412からデータを読み出し、DPEインターコネクト306のストリームインターフェース(例えば、ストリームスイッチ)を介してデータを送出することができる。例えば、DMAエンジン416は、
図3のストリームスイッチ326にアクセスするためのストリームインターフェースを含むことができる。
【0077】
メモリモジュール304は、複数の異なるDPEによってアクセスされ得る共有メモリとして動作することができる。
図4の例では、メモリインターフェース402は、コア302に含まれるコアインターフェース428を介してコア302に結合される。メモリインターフェース402は、アービタ414を介してメモリバンク412へのアクセスをコア302に提供する。メモリインターフェース404は、DPE204-25のコアに結合される。メモリインターフェース404は、メモリバンク412へのアクセスをDPE204-25のコアに提供する。メモリインターフェース406は、DPE204-16のコアに結合される。メモリインターフェース406は、DPE204-16のコアにメモリバンク412へのアクセスを提供する。メモリインターフェース408は、DPE204-5のコアに結合される。メモリインターフェース408は、メモリバンク412へのアクセスをDPE204-5のコアに提供する。したがって、
図4の例では、DPE204-15のメモリモジュール304との共有境界を有する各DPEは、メモリバンク412に対して読み出し及び書き込みが可能である。
図4の例では、DPE204-14のコアは、DPE204-15のメモリモジュール304に直接アクセスすることはできない。
【0078】
コア302は、コアインターフェース430,432、及び434を介して他の隣接するDPEのメモリモジュールにアクセスすることができる。
図4の例では、コアインターフェース434は、DPE204-25のメモリインターフェースに結合される。したがって、コア302は、コアインターフェース434及びDPE204-25のメモリモジュール内に含まれるメモリインターフェースを介してDPE204-25のメモリモジュールにアクセスすることができる。コアインターフェース432は、DPE204-14のメモリインターフェースに結合される。したがって、コア302は、コアインターフェース432及びDPE204-14のメモリモジュール内に含まれるメモリインターフェースを介して、DPE204-14のメモリモジュールにアクセスすることができる。コアインターフェース430は、DPE204-5内のメモリインターフェースに結合される。したがって、コア302は、コアインターフェース430及びDPE204-5のメモリモジュール内に含まれるメモリインターフェースを介して、DPE204-5のメモリモジュールにアクセスすることができる。説明したように、コア302は、コアインターフェース428及びメモリインターフェース402を介してDPE204-15内のメモリモジュール304にアクセスすることができる。
【0079】
図4の例では、コア302は、DPE204-15(例えば、DPE204-25、204-14、及び204-5)内のコア302と境界を共有するDPEのメモリモジュールのいずれかに読み書きすることができる。1つ以上の実施形態では、コア302は、DPE204-25、204-15、204-14、及び204-5内のメモリモジュールを単一の連続したメモリとして(例えば、単一のアドレス空間として)見ることができる。コア302は、この連続メモリモデルを仮定して読み出し及び書き込みのためのアドレスを生成することができる。コア302は、生成されたアドレスに基づいて、読み取り及び/又は書き込み要求を適切なコアインターフェース428,430,432及び/又は434に向けることができる。
【0080】
上述したように、コア302は、そのような動作のアドレスに基づいて、コアインターフェース428,430,432及び/又は434を介して正しい方向に読み出し及び/又は書き込み動作をマッピングすることができる。コア302がメモリアクセスのためのアドレスを生成すると、コア302は、方向(例えば、アクセスされるべき特定のDPE)を決定するためにアドレスを復号することができ、決定された方向で正しいコアインターフェースにメモリ動作を転送する。
【0081】
したがって、コア302は、DPE204-25内のメモリモジュール及び/又はDPE204-15のメモリモジュール304であり得る共有メモリを介してDPE204-25のコアと通信することができる。コア302は、DPE204-14内のメモリモジュールである共有メモリを介してDPE204-14のコアと通信することができる。コア302は、DPE204-5内のメモリモジュール及び/又はDPE204-15のメモリモジュール304であり得る共有メモリを介してDPE204-5のコアと通信することができる。さらに、コア302は、DPE204-15内のメモリモジュール304である共有メモリを介してDPE204-16のコアと通信することができる。
【0082】
説明したように、DMAエンジン416は、1つ以上のストリーム-メモリインターフェースを含むことができる。DMAエンジン416を介して、SoC100内の他のソースからアプリケーションデータを受信し、メモリモジュール304に格納することができる。例えば、データは、ストリームスイッチ326によってDPE204-15と境界を共有する及び/又は共有しない他のDPEから受信されてもよい。データはまた、DPEのストリームスイッチを介してSoCインターフェースブロック206によってSoCの他のサブシステム(例えば、NoC108、ハードワイヤード回路ブロック110、PL104、及び/又はPS106)から受信されてもよい。DMAエンジン416は、ストリームスイッチからそのようなデータを受信し、そのデータをメモリモジュール304内の適切なメモリバンク又はメモリバンク412に書き込むことができる。
【0083】
DMAエンジン416は、1つ以上のメモリ-ストリームインターフェースを含むことができる。DMAエンジン416を介して、メモリモジュール304のメモリバンク又はメモリバンク412からデータを読み出し、ストリームインターフェースを介して他の宛先に送信することができる。例えば、DMAエンジン416は、メモリモジュール304からデータを読み出し、ストリームスイッチによってDPE204-15と境界を共有する及び/又は共有しない他のDPEにそのようなデータを送信することができる。DMAエンジン416はまた、ストリームスイッチ及びSoCインターフェースブロック206を介して他のサブシステム(例えば、NoC108、ハードワイヤード回路ブロック110、PL104、及び/又はPS106)にそのようなデータを送信することができる。
【0084】
1つ以上の実施形態において、DMAエンジン416は、DPE204-15内のメモリマップドスイッチ332によってプログラムされる。例えば、DMAエンジン416は、構成レジスタ336によって制御されてもよい。構成レジスタ336は、DPEインターコネクト306のメモリマップドスイッチ332を使用して書き込まれてもよい。特定の実施形態では、DMAエンジン416は、DPE204-15内のストリームスイッチ326によって制御されてもよい。例えば、DMAエンジン416は、それに接続されたストリームスイッチ326によって書き込まれ得る制御レジスタを含むことができる。DPEインターコネクト306内のストリームスイッチ326を介して受信されたストリームは、構成レジスタ324,334及び/又は336にロードされた構成データに応じて、メモリモジュール304内のDMAエンジン416に、及び/又は直接コア302に接続することができる。ストリームは、構成レジスタ324,334及び/又は336にロードされた構成データに応じて、DMAエンジン416(例えば、メモリモジュール304)及び/又はコア302から送信され得る。
【0085】
メモリモジュール304は、ハードウェア同期回路420(
図4では「HSC」と略される)をさらに含んでもよい。一般に、ハードウェア同期回路420は、異なるコア(例えば、隣接するDPEのコア)、
図4のコア302、DMAエンジン416、及びDPEインターコネクト306を介して通信することができる他の外部マスタ(例えば、PS106)の動作を同期することができる。例示的かつ非限定的な例として、ハードウェア同期回路420は、DPE204-15及び/又はメモリモジュール304内の同じ、例えば共有バッファにアクセスする異なるDPE内の2つの異なるコア、ストリームスイッチ、メモリマップドインターフェース、及び/又はDMAを同期させることができる。
【0086】
2つのDPEが隣接していない場合、2つのDPEは共通のメモリモジュールにアクセスできない。その場合、アプリケーションデータは、データストリームを介して転送され得る(「データストリーム」及び「ストリーム」という用語は、本開示内で時々交換可能に使用され得る)。したがって、ローカルDMAエンジンは、転送をローカルメモリベースの転送からストリームベースの転送に変換することができる。その場合、コア302及びDMAエンジン416は、ハードウェア同期回路420を使用して同期することができる。
【0087】
PS106は、メモリマップドスイッチ332を介してコア302と通信することができる。例えば、PS106は、メモリの読み出し及び書き込みを開始することによって、メモリモジュール304及びハードウェア同期回路420にアクセスすることができる。別の実施形態では、ハードウェア同期回路420はまた、ロックの状態が変化したときにPS106に割り込みを送信して、ハードウェア同期回路420のPS106によるポーリングを回避してもよい。PS106はまた、ストリームインターフェースを介してDPE204-15と通信することができる。
【0088】
共有メモリモジュールを介して隣接するDPEと通信し、DPEインターコネクト306を介して隣接及び/又は非隣接DPEと通信することに加えて、コア302はカスケードインターフェースを含むことができる。
図4の例では、コア302はカスケードインターフェース422及び424(
図4では「CI」と略される)を含む。カスケードインターフェース422及び424は、他のコアとの直接通信を提供することができる。図示されているように、コア302のカスケードインターフェース422は、DPE204-14のコアから入力データストリームを直接受信する。カスケードインターフェース422を介して受信されたデータストリームは、コア302内のデータ処理回路に提供され得る。コア302のカスケードインターフェース424は、出力データストリームをDPE204-16のコアに直接送信することができる。
【0089】
図4の例では、カスケードインターフェース422及びカスケードインターフェース424の各々は、バッファリングのための先入れ先出し(FIFO)インターフェースを含むことができる。特定の実施形態では、カスケードインターフェース422及び424は、幅が数百ビットであり得るデータストリームを搬送することができる。カスケードインターフェース422及び424の特定のビット幅は、限定として意図されていない。
図4の例では、カスケードインターフェース424は、コア302内のアキュムレータレジスタ436(
図4では「AC」と略される)に結合されている。カスケードインターフェース424は、アキュムレータレジスタ436の内容を出力することができ、クロックサイクルごとに出力することができる。蓄積レジスタ436は、コア302内のデータ処理回路によって生成及び/又は演算されるデータを格納することができる。
【0090】
図4の例では、カスケードインターフェース422及び424は、構成レジスタ324にロードされた構成データに基づいてプログラムすることができる。例えば、構成レジスタ324に基づいて、カスケードインターフェース422をアクティブ化又は非アクティブ化することができる。同様に、構成レジスタ324に基づいて、カスケードインターフェース424をアクティブ化又は非アクティブ化することができる。カスケードインターフェース422は、カスケードインターフェース424とは独立してアクティブ化及び/又は非アクティブ化することができる。
【0091】
1つ以上の他の実施形態では、カスケードインターフェース422及び424はコア302によって制御される。例えば、コア302は、カスケードインターフェース422及び/又は424に読み書きするための命令を含むことができる。別の例では、コア302は、カスケードインターフェース422及び/又は424に対する読み取り及び/又は書き込みが可能なハードワイヤード回路を含むことができる。特定の実施形態では、カスケードインターフェース422及び424は、コア302の外部のエンティティによって制御されてもよい。
【0092】
本開示内で説明される実施形態では、DPE204はキャッシュメモリを含まない。キャッシュメモリを省略することにより、DPEアレイ202は、予測可能な、例えば決定論的なパフォーマンスを達成することができる。さらに、異なるDPEに位置するキャッシュメモリ間の一貫性を維持する必要がないため、大きな処理オーバーヘッドが回避される。
【0093】
1つ以上の実施形態によれば、DPE204のコア302は入力割り込みを有さない。したがって、DPE204のコア302は、中断されずに動作することができる。DPE204のコア302への入力割り込みを省略することはまた、DPEアレイa02が予測可能な、例えば決定論的なパフォーマンスを達成することを可能にする。
【0094】
図5は、DPEアレイの別の例示的なアーキテクチャを示す。
図5の例では、SoCインターフェースブロック206は、DPE204とSoC100の他のサブシステムとの間のインターフェースを提供する。SoCインターフェースブロック206は、DPEをデバイスに統合する。SoCインターフェースブロック206は、構成データをDPE204に伝達し、イベントをDPE204から他のサブシステムに伝達し、イベントを他のサブシステムからDPE204に伝達し、割り込みを生成してDPEアレイ102の外部のエンティティに伝達し、他のサブシステムとDPE204との間でアプリケーションデータを伝達し、及び/又は他のサブシステムとDPE204との間でトレース及び/又はデバッグデータを伝達することができる。
【0095】
図5の例では、SoCインターフェースブロック206は、複数の相互接続されたタイルを含む。例えば、SoCインターフェースブロック206は、タイル502,504,506,508,510,512,514,516,518、及び520を含む。
図5の例では、タイル502~520が一列に編成されている。他の実施形態では、タイルは、列、グリッド、又は別のレイアウトに配置されてもよい。例えば、SoCインターフェースブロック206は、DPE204の左側、DPE204の右側、DPE204の列間などのタイルの列として実装されてもよい。別の実施形態では、SoCインターフェースブロック206は、DPEアレイ202の上方に配置されてもよい。SoCインターフェースブロック206は、タイルがDPEアレイ202の下、DPEアレイ202の左、DPEアレイ202の右、及び/又はDPEアレイ202の上の任意の組合せで配置されるように実装されてもよい。これに関して、
図5は、限定ではなく例示を目的として提供されている。
【0096】
1つ以上の実施形態において、タイル502~520は同じアーキテクチャを有する。1つ以上の他の実施形態では、タイル502~520は、2つ以上の異なるアーキテクチャで実装されてもよい。特定の実施形態では、SoCインターフェースブロック206内のタイルを実装するために異なるアーキテクチャを使用することができ、各異なるタイルアーキテクチャは、SoC100の異なるタイプのサブシステム又はサブシステムの組合せとの通信をサポートする。
【0097】
図5の例では、タイル502~520は、データが1つのタイルから別のタイルに伝播され得るように結合される。例えば、データは、タイル502からタイル504,506を通って、タイルのラインを下ってタイル520まで伝搬することができる。同様に、データは、タイル520からタイル502に逆方向に伝播することができる。1つ以上の実施形態では、タイル502~520の各々は、複数のDPEのインターフェースとして動作することができる。例えば、タイル502~520の各々は、DPEアレイ102のDPE204のサブセットのインターフェースとして動作することができる。各タイルがインターフェースを提供するDPEのサブセットは、DPEがSoCインターフェースブロック206の複数のタイルによってインターフェースを提供されないように、相互に排他的であってもよい。
【0098】
一例では、タイル502~520の各々は、DPE204の列のためのインターフェースを提供する。例示の目的で、タイル502は、列AのDPEへのインターフェースを提供する。タイル504は、列BのDPEへのインターフェースを提供する。いずれの場合も、タイルは、この例では底部DPEである、DPEの列内の隣接するDPEへの直接接続を含む。列Aを参照すると、例えば、タイル502はDPE204-1に直接接続されている。列A内の他のDPEは、タイル502と通信することができるが、同じ列内の介在するDPEのDPEインターコネクトを介して通信する。
【0099】
例えば、タイル502は、PS106、PL104、及び/又は別のハードワイヤード回路ブロック110、例えばASICブロックなどの別のソースからデータを受信することができる。タイル502は、列AのDPEにアドレス指定されたデータのそれらの部分をそのようなDPEに提供する一方で、他の列(例えば、タイル502がインターフェースではないDPE)のDPEにアドレス指定されたデータをタイル504上に送信することができる。タイル504は、列B内のDPEにアドレス指定されたタイル502から受信されたデータがそのようなDPEに提供される同じ又は同様の処理を実行する一方で、他の列内のDPEにアドレス指定されたデータをタイル506に送信することができる。
【0100】
このようにして、データは、データがアドレス指定されるDPE(例えば、「ターゲットDPE」)のためのインターフェースとして動作するタイルに到達するまで、SoCインターフェースブロック206のタイルからタイルに伝播することができる。ターゲットDPEのインターフェースとして動作するタイルは、DPEのメモリマップドスイッチ及び/又はDPEのストリームスイッチを使用して、データをターゲットDPEに導くことができる。
【0101】
上述したように、列の使用は例示的な実施態様である。他の実施形態では、SoCインターフェースブロック206の各タイルは、DPEアレイ102のDPEの行へのインターフェースを提供することができる。このような構成は、SoCインターフェースブロック206が、DPE204の左、右、又は列間にかかわらず、タイルの列として実装される場合に使用され得る。他の実施形態では、各タイルがインターフェースを提供するDPEのサブセットは、DPEアレイ102のすべてのDPEよりも少ないDPEの任意の組合せであってもよい。例えば、DPE204は、SoCインターフェースブロック206のタイルに割り当てられてもよい。そのようなDPEの特定の物理的レイアウトは、DPEインターコネクトによって確立されるDPEの接続性に基づいて変化し得る。例えば、タイル502は、DPE204-1、204-2、204-11、及び204-12へのインターフェースを提供することができる。SoCインターフェースブロック206の別のタイルは、4つの他のDPEなどへのインターフェースを提供することができる。
【0102】
図6は、SoCインターフェースブロック206のタイルの例示的なアーキテクチャを示す。
図6の例では、SoCインターフェースブロック206のための2つの異なるタイプのタイルが示されている。タイル602は、DPEとPL104のみとの間のインターフェースとして機能するように構成される。タイル610は、DPEとNoC108との間及びDPEとPL104との間のインターフェースとして機能するように構成される。SoCインターフェースブロック206は、タイル602及びタイル610について図示されたような両方のアーキテクチャを使用するタイルの組合せを含むことができ、又は別の例では、タイル610について図示されたようなアーキテクチャを有するタイルのみを含むことができる。
【0103】
図6の例では、タイル602は、PLインターフェース606及び直上のDPE204-1などのDPEに接続されたストリームスイッチ604を含む。PLインターフェース606は、各々がPL104内に位置する境界論理インターフェース(BLI)回路620及びBLI回路622に接続する。タイル610は、NoC及びPLインターフェース614並びに直上のDPE204-5などのDPEに接続されたストリームスイッチ612を含む。NoC及びPLインターフェース614は、PL104内のBLI回路624及び626、並びにNoC108のNoCマスタユニット(NMU)630及びNoCスレーブユニット(NSU)632にも接続する。
【0104】
図6の例では、各ストリームインターフェース604は、それに結合されたDPEに6つの異なる32ビットデータストリームを出力し、そこから4つの異なる32ビットデータストリームを受信することができる。PLインターフェース606並びにNoC及びPLインターフェース614の各々は、それぞれBLI620及びBLI624によって6つの異なる64ビットデータストリームをPL104に提供することができる。一般に、BLI620,622,624、及び626の各々は、PLインターフェース606及び/又はNoC及びPLインターフェース614が接続するPL104内のインターフェース又は接続点を提供する。PLインターフェース606並びにNoC及びPLインターフェース614の各々は、それぞれBLI622及びBLI624を介してPL210から8つの異なる64ビットデータストリームを受信することができる。
【0105】
NoC及びPLインターフェース614は、NoC108にも接続される。
図6の例では、NoC及びPLインターフェース614は、1つ以上のNMU630及び1つ以上のNSU632に接続する。一例では、NoC及びPLインターフェース614は、2つの異なる128ビットデータストリームをNoC108に提供することができ、各データストリームは異なるNMU630に提供される。NoC及びPLインターフェース614は、NoC108から2つの異なる128ビットデータストリームを受信することができ、各データストリームは異なるNSU632から受信される。
【0106】
隣接するタイルのストリームスイッチ604が接続されている。一例では、隣接するタイル内のストリームスイッチ604は、左右方向(例えば、タイルが場合により右又は左にある限り)のそれぞれにおいて4つの異なる32ビットデータストリームによって通信することができる。
【0107】
タイル602及び610はそれぞれ、構成データを伝達するための1つ以上のメモリマップドスイッチを含むことができる。説明のために、メモリマップドスイッチは示されていない。メモリマップドスイッチは、例えば、場合によっては、直上のDPEのメモリマップドスイッチ、ストリームスイッチ604と同じ又は同様の方法でSoCインターフェースブロック206内の他の隣接タイル内のメモリマップドスイッチ、タイル602及び610(図示せず)内の構成レジスタ、並びに/あるいはPLインターフェース608又はNoC及びPLインターフェース614に垂直に接続することができる。
【0108】
SoCインターフェースブロック206のDPE204及び/又はタイル602及び/又は610に含まれる様々なスイッチに関連して説明される様々なビット幅及びデータストリームの数は、例示の目的で提供されており、本開示内で説明される本発明の構成を限定することを意図するものではない。
【0109】
図7は、NoC108の例示的な実施態様を示す。NoC108は、NoCマスタユニット(NMU)702、NoCスレーブユニット(NSU)704、ネットワーク714、NoC周辺機器相互接続(NPI)710、及びレジスタ712を含む。各NMU702は、エンドポイント回路をNoC108に接続する入口回路である。各NSU704は、NoC108をエンドポイント回路に接続する出口回路である。NMU702は、ネットワーク714を介してNSU704に接続される。一例では、ネットワーク714は、NoCパケットスイッチ706(NPS)と、NoCパケットスイッチ706間のルーティング708とを含む。各NoCパケットスイッチ706は、NoCパケットの切り替えを行う。NoCパケットスイッチ706は、複数の物理チャネルを実装するために、互いに、並びにルーティング708を介してNMU702及びNSU704に接続される。NoCパケットスイッチ706はまた、物理チャネルごとに複数の仮想チャネルをサポートする。
【0110】
NPI710は、NMU702、NSU704、及びNoCパケットスイッチ706をプログラムするための回路を含む。例えば、NMU702、NSU704、及びNoCパケットスイッチ706は、その機能性を判定するレジスタ712を含むことができる。NPI710は、機能を設定するためにそのプログラミングのためにレジスタ712に結合された周辺機器相互接続を含む。NoC108内のレジスタ712は、割り込み、サービス品質(QoS)、エラー処理及び報告、トランザクション制御、電力管理、及びアドレスマッピング制御をサポートする。レジスタ712は、書き込み要求を使用してレジスタ712に書き込むことなどによって、再プログラムされる前に使用可能な状態で初期化することができる。NoC108の構成データは、例えばプログラミングデバイスイメージ(PDI)の一部として不揮発性メモリ(NVM)に格納することができ、NoC108及び/又は他のエンドポイント回路をプログラミングするためにNPI710に提供することができる。
【0111】
NMU702は、トラフィック入口点である。NSU704は、トラフィック出口点である。NMU702及びNSU704に結合されたエンドポイント回路は、ハード化回路(例えば、ハードワイヤード回路ブロック110)又はPL104に実装された回路とすることができる。所与のエンドポイント回路は、複数のNMU702又は複数のNSU704に結合することができる。
【0112】
図8は、一例による、NoC108を介するSoC100内のエンドポイント回路間の接続を示すブロック図である。この例では、エンドポイント回路802は、NoC108を介してエンドポイント回路804に接続されている。エンドポイント回路802は、NoC108のNMU702に結合されたマスタ回路である。エンドポイント回路804は、NoC108のNSU704に結合されたスレーブ回路である。各エンドポイント回路802及び804は、PS106内の回路、PL領域104内の回路、又は別のサブシステム(例えば、ハードワイヤード回路ブロック110)内の回路とすることができる。
【0113】
ネットワーク714は、複数の物理チャネル806を含む。物理チャネル806は、NoC108をプログラムすることによって実装される。各物理チャネル806は、1つ以上のNoCパケットスイッチ706及び関連するルーティング708を含む。NMU702は、少なくとも1つの物理チャネル806を介してNSU704と接続する。物理チャネル806はまた、1つ以上の仮想チャネル808を有することができる。
【0114】
ネットワーク714を介した接続は、マスタ-スレーブ構成を使用する。一例では、ネットワーク714を介した最も基本的な接続は、単一のスレーブに接続された単一のマスタを含む。しかしながら、他の例では、より複雑な構造を実装することができる。
【0115】
図9は、別の例によるNoC108を示すブロック図である。この例では、NoC108は、垂直部分902(VNoC)及び水平部分904(HNoC)を含む。各VNoC902は、PL領域104の間に配置されている。HNoC904は、PL領域104とI/Oバンク910(例えば、ハードワイヤード回路ブロック110に対応するI/Oブロック及び/又はトランシーバ)との間に配置される。NoC108は、メモリインターフェース908(例えば、他のハードワイヤード回路ブロック110)に接続される。PS106は、HNoC904に結合される。
【0116】
この例では、PS106は、HNoC904に結合された複数のNMU702を含む。VNoC902は、PL領域104内に配置されたNMU702及びNSU704の両方を含む。メモリインターフェース908は、HNoC904に結合されたNSU704を含む。HNoC904及びVNoC902の両方は、ルーティング708によって接続されたNPS706を含む。VNoC902では、ルーティング708は垂直に延在する。HNoC904では、ルーティングは水平に延在する。各VNoC902において、各NMU702は、NPS706に結合される。同様に、各NSU704は、NPS706に結合される。NPS706は、互いに結合されてスイッチのマトリックスを形成する。各VNoC902内のいくつかのNPS706は、HNoC904内の他のNPS706に結合される。
【0117】
単一のHNoC904のみが示されているが、他の例では、NoC108は複数のHNoC904を含むことができる。さらに、2つのVNoC902が示されているが、NoC108は、3つ以上のVNoC902を含むことができる。メモリインターフェース908は例として示されているが、メモリインターフェース908の代わりに、又はそれに加えて、他のハードワイヤード回路ブロック110を使用できることを理解されたい。
【0118】
図10は、NoC108をプログラムする例示的な方法1000を示す。SoC100の他のサブシステムとは独立して説明されているが、方法1000は、SoC100のより大きなブート又はプログラミング、プロセスの一部として含まれ、及び/又は使用されてもよい。
【0119】
ブロック1002において、SoC100に実装されたプラットフォーム管理コントローラ(PMC)は、ブート時にNoCプログラミングデータを受信する。NoCプログラミングデータは、PDIの一部であってもよい。PMCは、SoC100の管理を担当する。PMCは、安全でセキュアな環境を維持し、SoC100をブートし、通常動作中にSoC100を管理することができる。
【0120】
ブロック1004において、PMCは、物理チャネル806を作成するために、NPI710を介してレジスタ712にNoCプログラミングデータをロードする。一例では、プログラミングデータはまた、NPS706内のルーティングテーブルを構成するための情報を含むことができる。ブロック1006において、PMCはSoC100をブートする。このように、NoC108は、少なくとも、NMU702とNSU704との間の物理チャネル806の構成情報を含む。NoC108の残りの構成情報は、以下でさらに説明するように、ランタイム中に受信することができる。別の例では、ランタイム中に受信されるものとして後述する構成情報の全部又は一部をブート時に受信することができる。
【0121】
図11は、NoC108をプログラムする例示的な方法1100を示す。ブロック1102において、PMCは、ランタイム中にNoCプログラミングデータを受信する。ブロック1104において、PMCは、NPI710を介してNoCレジスタ712にプログラミングデータをロードする。一例では、ブロック1106において、PMCは、NPS706内のルーティングテーブルを構成する。ブロック1108において、PMCは、物理チャネル806上でQoS経路を構成する。ブロック1110において、PMCはアドレス空間マッピングを構成する。ブロック1112において、PMCは、入口/出口インターフェースプロトコル、幅、及び周波数を設定する。QoS経路、アドレス空間マッピング、ルーティングテーブル、及び入口/出口構成については、以下でさらに説明する。
【0122】
図12は、エンドポイント回路間のNoC108を通る例示的なデータ経路1200を示す。データ経路1200は、エンドポイント回路1202、AXIマスタ回路1204、NMU1206、NPS1208、NSU1210、AXIスレーブ回路1212、及びエンドポイント回路1214を含む。エンドポイント回路1202は、AXIマスタ回路1204に結合されている。AXIマスタ回路1204は、NMU1206に結合されている。別の例では、AXIマスタ回路1204はNMU1206の一部である。
【0123】
NMU1206は、NPS1208に結合される。NPS1208は、互いに接続されて、NPS1208のチェーン(例えば、本例では5つのNPS1208のチェーン)を形成する。一般に、NMU1206とNSU1210との間には、少なくとも1つのNPS1208が存在する。NSU1210は、NPS1208の1つに接続される。AXIスレーブ回路1212は、NSU1210に結合される。別の例では、AXIスレーブ回路1212は、NSU1210の一部である。エンドポイント回路1214は、AXIスレーブ回路1212に結合される。
【0124】
エンドポイント回路1202及び1214は、ハード化回路(例えば、PS回路、ハードワイヤード回路110、1つ以上のDPE204)又はPL104に構成された回路とすることができる。エンドポイント回路1202は、マスタ回路として機能し、NMU1206に読み出し/書き込み要求を送信する。この例では、エンドポイント回路1202及び1214は、AXIプロトコルを使用してNoC108と通信する。この例ではAXIが説明されているが、NoC108は、当技術分野で知られている他のタイプのプロトコルを使用してエンドポイント回路から通信を受信するように構成され得ることを理解されたい。例によって明確にするために、NoC108は、本明細書ではAXIプロトコルをサポートするものとして説明される。NMU1206は、NPS1208のセットを介して要求を中継して宛先NSU1210に到達する。NSU1210は、エンドポイント回路1214へのデータの処理及び分配のために、付属のAXIスレーブ回路1212に要求を渡す。AXIスレーブ回路1212は、読み出し/書き込み応答をNSU1210に送り返すことができる。NSU1210は、NPS1208のセットを介してNMU1206に応答を転送することができる。NMU1206は、データをエンドポイント回路1202に配信するAXIマスタ回路1204に応答を通信する。
【0125】
図13は、読み出し/書き込み要求及び応答を処理する例示的な方法1300を示す。方法1300はブロック1302で開始し、エンドポイント回路1202は、AXIマスタ1204を介してNMU1206に要求(例えば、読み出し要求又は書き込み要求)を送信する。ブロック1304において、NMU1206は応答を処理する。一例では、NMU1206は、エンドポイント回路1202のクロックドメインとNoC108との間の非同期交差及びレートマッチングを実行する。NMU1206は、要求に基づいてNSU1210の宛先アドレスを決定する。NMU1206は、仮想化が使用される場合にアドレス再マッピングを実行することができる。NMU1206は、要求のAXI変換も行う。NMU1206は、要求をパケットのストリームにさらにパケット化する。
【0126】
ブロック1306において、NMU1206は、要求のパケットをNPS1208に送信する。各NPS1208は、宛先アドレス及びルーティング情報に基づいて、ターゲット出力ポートに対するテーブルルックアップを実行する。ブロック1308において、NSU1210は、要求のパケットを処理する。一例では、NSU1210は、要求をデパケット化し、AXI変換を実行し、NoCクロックドメインからエンドポイント回路1214のクロックドメインへの非同期交差及びレートマッチングを実行する。ブロック1310において、NSU1210は、AXIスレーブ回路1212を介してエンドポイント回路1214に要求を送信する。NSU1210は、AXIスレーブ回路1212を介してエンドポイント回路1214から応答を受信することもできる。
【0127】
ブロック1312において、NSU1210は応答を処理する。一例では、NSU1210は、エンドポイント回路1214のクロックドメイン及びNoC108のクロックドメインから非同期交差及びレートマッチングを実行する。また、NSU1210は、応答をパケットのストリームにパケット化する。ブロック1314において、NSU1210は、NPS1208を介してパケットを送信する。各NPS1208は、宛先アドレス及びルーティング情報に基づいて、ターゲット出力ポートに対するテーブルルックアップを実行する。ブロック1316において、NMU1206はパケットを処理する。一例では、NMU1206は、応答をデパケット化し、AXI変換を実行し、NoCクロックドメインからエンドポイント回路1202のクロックドメインへの非同期交差及びレートマッチングを実行する。ブロック1318において、NMU1206は、AXIマスタ回路1204を介してエンドポイント回路1202に応答を送信する。
【0128】
図14は、NMU702の例示的な実施態様を示す。NMU702は、AXIマスタインターフェース1402、パケット化回路1404、アドレスマップ1406、デパケット化回路1408、QoS回路1410、VCマッピング回路1412、及びクロック管理回路1414を含む。AXIマスタインターフェース1402は、エンドポイント回路用のAXIインターフェースをNMU702に提供する。他の例では、異なるプロトコルを使用することができ、したがって、NMU702は、選択されたプロトコルに準拠する異なるマスタインターフェースを有することができる。NMU702は、インバウンドトラフィックをパケット化回路1404にルーティングし、パケット化回路はインバウンドデータからパケットを生成する。パケット化回路1404は、パケットをルーティングするために使用されるアドレスマップ1406から宛先IDを決定する。宛先IDは、NoC108内で使用され、パケットが送信されている宛先インターフェースを指定するために使用される。QoS回路1410は、NoC108へのパケットの注入速度を制御するための入口速度制御を提供することができる。VCマッピング回路1412は、各物理チャネル上のQoS仮想チャネルを管理する。NMU702は、パケットがどの仮想チャネルにマッピングされるかを選択するように構成することができる。クロック管理回路1414は、AXIクロックドメインとNoCクロックドメインとの間のインターフェースを提供するためにレートマッチング及び非同期データ交差を実行する。デパケット化回路1408は、NoC108から戻りパケットを受信し、AXIマスタインターフェース1402による出力のためにパケットをデパケット化するように構成される。
【0129】
図15は、NSU704の例示的な実施態様を示す。NSU704は、AXIスレーブインターフェース1502、クロック管理回路1504、パケット化回路1508、デパケット化回路1506、及びQoS回路1510を含む。AXIスレーブインターフェース1502は、エンドポイント回路用のAXIインターフェースをNSU704に提供する。他の例では、異なるプロトコルを使用することができ、したがって、NSU704は、選択されたプロトコルに準拠する異なるスレーブインターフェースを有することができる。NSU704は、NoC108からのインバウンドトラフィックを、デパケット化データを生成するデパケット化回路1506にルーティングする。クロック管理回路1504は、AXIクロックドメインとNoCクロックドメインとの間のインターフェースを提供するためにレートマッチング及び非同期データ交差を実行する。パケット化回路1508は、スレーブインターフェース1502から戻りデータを受信し、NoC108を介して送信するために戻りデータをパケット化するように構成される。QoS回路1510は、NoC108へのパケットの注入速度を制御するための入口速度制御を提供することができる。
【0130】
図16は、NPI710を介したNoC108のレジスタブロック712への例示的な接続を示す。レジスタブロック712に接続するために、NPI710は、ルートノード1604と、1つ以上のNPIスイッチ1608と、プロトコルブロック1610とを含む。ルートノード1604は、いくつかの例では、PMC1602に存在する。いくつかの例では、PMC1602はPS106内に存在するが、他の例では、ルートノード1604及びPMC1602は独立した回路であってもよく、又は別のシステム若しくは回路上に存在してもよい。一般に、ルートノード1604は、トランザクション要求をNPI710によって実装されるフォーマットにパケット化することができ、メモリマップドトランザクション要求をNPIスイッチ1608に送信することができ、NPIスイッチは、メモリマップドトランザクション要求の宛先識別に基づいて、メモリマップドトランザクション要求を他のNPIスイッチ1608又はプロトコルブロック1610にさらに送信することができる。NPIスイッチ1608は、任意の適切なトポロジで相互接続することができる。いくつかの例では、NPIスイッチ1608は、ツリートポロジとしてルートノード1604に相互接続される。次いで、プロトコルブロック1610は、メモリマップドトランザクション要求をレジスタブロック712によって実装されるフォーマットに変換することができる。レジスタブロック712は、NPI710が接続され得るスレーブエンドポイント回路の一例として
図16に示されている。NPI710は、他のスレーブエンドポイント回路にさらに接続することができる。
【0131】
PMC1602は構成インターコネクト1612にさらに接続され、構成インターコネクトはPL領域104に接続される。PMC1602は、構成インターコネクト1612を介してPL領域104のファブリックをプログラムするように構成される。構成インターコネクト1612は、SoC100上の他のプログラマブルユニット(例えば、スレーブエンドポイント回路)をプログラムするためのNPI710の配信メカニズムとは独立した、SoC100上のプログラマブルユニットをプログラムするための配信メカニズムである。
【0132】
前述したように、レジスタブロック712は、NPS706の対応するルーティングテーブルを作成するようにプログラムされたレジスタを含む。
図17は、一例による、ルーティングテーブル1700を示す。ルーティングテーブル1700は、宛先識別に従ってレジスタをパックする。NPS706によって受信され、続いて送信される各パケットは、パケットを送信及びルーティングするためにルーティングテーブル1700によって使用される宛先識別を含む。この例では、NPS706は、4つのポート(ポート0~3)と、8つの仮想チャネル(VC0~7)とを有する。ルーティングテーブルの行は、パケットが受信されるポート-仮想チャネル組合せ(ポート-VC)に対応する。ルーティングテーブルの列は、受信パケットに含まれる宛先識別(IDy)に対応する。ルーティングテーブルのエントリは、ポート-VC及びIDyに基づいてパケットが送信される発信ポートを示す。いくつかの例では、所与のIDyのエントリは、レジスタブロック712の1つ以上のレジスタにパックされる。1つ以上のレジスタの事前定義ビットはルーティングテーブルのエントリであり、事前定義ビットはポート-VCに対応する。NPS706は、パケットを受信し、パケットがどのポートで受信されるかを決定し、パケットの仮想チャネルを決定し、パケットに含まれる宛先識別を決定し、受信ポート、仮想チャネル、及びルーティングテーブルを形成するレジスタにプログラムされた宛先識別に基づいて、NPS706の発信ポートを識別し、NPS706の発信ポートでパケットを送信するように構成される。
【0133】
この例では、4つのポートと8つの仮想チャネルに基づく32のポート-VCの組合せがあり、発信ポートの各エントリは4つのポートに基づく少なくとも2ビットである。したがって、この例では、IDyごとに232ビットレジスタが実装される。他の例では、ルーティングテーブルのレジスタを異なるように実装することができる。
【0134】
いくつかの例では、宛先識別に基づいてレジスタをパッキングすることによって、経路が部分的再構成で変更される場合に、再構成されるべきではない他の経路を再構成又は中断する必要なく、ルーティングテーブルをより容易に再構成することができる。
【0135】
他の例では、ルーティングテーブルに他の機能が実装されてもよい。例えば、オーバーヘッド及び/又はパケットの処理を低減するために、複数の宛先識別をルーティングテーブル内でセグメント化することができ、例えば、複数の宛先識別を1つ以上のレジスタにパックすることができる。そのような例では、セグメント化は、経路を再構成する能力に影響を及ぼし得る。例えば、部分的再構成中に持続すべき経路の一部がルーティングテーブルのセグメント内のエントリに対応する場合、持続すべき経路の存在は、同じセグメント内の別の経路の再構成を妨げる可能性がある。
【0136】
図18は、SoC100などのSoCを動作させるための例示的な方法1800を示す。ブロック1802において、NoC108が構成される。より一般的には、NoC108は、システムレベルの構成及び/又はその任意の再構成(例えば、部分的又は全体的)の一部として構成することができる。SoC100の他のサブシステムも動作1802中に構成することができる。例えば、PL領域104及び/又はDPEアレイ102を構成することができる。NoC108は、上述したように、NMU702、NSU704、及びNPS706のレジスタブロック712に書き込むために、NPI710を介してメモリマップドトランザクションを介して構成することができる。PL領域104は、構成インターコネクト1612を介して構成することができる。DPEアレイ102は、NoC108が構成された後に、DPEアレイ102のNoC108及びSoCインターフェースブロック206を介して構成することができる。PL領域104及び/又はDPEアレイ102の構成は、PL領域104及び/又はDPEアレイ102上で、1つ以上のアプリケーション又はその任意のサブセットをインスタンス化することができる。NoC108及び任意の他のコンポーネントを構成することは、PMC1602の制御下にあり得る。PMC1602は、例えば、メモリからPDIを取得することができ、PDIは、NoC108の構成データ、PL領域104の構成ビットストリーム、及び/又はDPEアレイ102の構成データを含むことができる。その後、PMC1602は、PDIに基づいてコンポーネントの構成を調整及び制御することができる。
【0137】
ブロック1804において、NoC108を介して通信が行われる。より一般的には、SoC100は、NoC108の構成を含むSoC100の構成に基づいて動作する。構成されると、PMC1602は、コンポーネントの動作を可能にし、動作を開始することができる。SoC100上の様々なサブシステムは、例えば、NoC108を介してアプリケーションデータを互いに通信する。例えば、PL領域104及び/又はDPEアレイ102上でインスタンス化されたアプリケーション又はそのサブセットは、NoC108を介して互いに又は他のサブシステム(例えば、PS106及び/又はメモリコントローラ)と通信することができる。
【0138】
ブロック1806において、部分的再構成イベントトリガが発生する。部分的再構成イベントトリガは、使用固有であってもよい。例えば、PL領域104及び/又はDPEアレイ102上でインスタンス化されたアプリケーション又はそのサブセットは、そのタスクを終了し、部分的再構成をトリガするための割り込みを生成することができる。割り込みは、NoC108、専用インターコネクト、又は別のインターコネクトを介してPMC1602に通信することができ、割り込みを受信したことに応答して、PMC1602は部分的再構成のための制御を行う。
【0139】
ブロック1808において、NoC108が部分的に再構成される。より一般的には、NoC108は、より大きな部分的再構成の一部として構成することができる。SoC100の他のサブシステムも、ブロック1808の間に部分的に再構成することができる。部分的再構成中に再構成されるNoC108及び任意の他のサブシステムの回路コンポーネントのインスタンスは、本明細書では再構成区画(RP)と呼ばれる。RPの回路コンポーネント又は領域は、部分的再構成中に、未使用状態から使用済み状態に、使用済み状態から未使用状態に、及び/又は使用済み状態から異なる使用状態に遷移するように再構成することができる。PL領域104及びDPEアレイ102などの他のサブシステムを参照すると、様々なアプリケーションを無効化及び/又は上書きすることができ、異なるアプリケーション又はその任意のサブセットを部分的再構成によってそれらのサブシステム上でインスタンス化することができる。NoC108及び任意の他のサブシステムを部分的に再構成することは、PMC1602の制御下にあり得る。PMC1602は、メモリからPDIを取得することができ、PDIは、再構成区画の構成データ及び/又は構成ビットストリームを含むことができる。その後、PMC1602は、PDIに基づいて回路コンポーネントの部分構成を調整及び制御することができる。
【0140】
部分的再構成は、RP内のコンポーネントを再構成することができるが、RPの外側の他のコンポーネントは再構成されない。さらに、NoCに関して、通信(例えば、ブロック1804で発生する)は、再構成されるべきではないNoCの経路(例えば、RPの外側の経路)を介して継続することができる。したがって、NoCのリソースのサブセットを変更することができる一方で、NoCのリソースの別のサブセットは、アクティブかつ妨害されないままであり得る。NoC108の部分的再構成のさらなる詳細は、以下の
図19に関して説明される。
【0141】
ブロック1810において、NoC108を介して通信が行われる。より一般的には、SoC100は、部分的に再構成されたSoC100の構成に基づいて動作する。部分的再構成が完了すると、PMC1602は、コンポーネントの動作を可能にし、動作を開始することができる。SoC100上の様々なサブシステムは、前述したように、例えば、NoC108を介してアプリケーションデータを互いに通信する。
【0142】
図19は、NoC108を部分的に再構成するための
図18のブロック1808の例示的な実施態様である。前述のように、ブロック1808において、NoC108の部分的再構成は、PMC1602の制御下にある。ブロック1902において、PMC1602は、再構成されるべきRP内のNMU702を制御する。PMC1602は、PDIから、再構成されるべきRP内のNMU702のアドレス又は識別情報を取得する。次いで、PMC1602は、NMU702を制御するために、NPI710を介してRP内のNMU702のレジスタブロック712にトランザクション要求を送信する。トランザクションは、NMU702にNoC108へのさらなるパケットの送信を停止させ、かつ保留中のパケットをクリアさせる値を、NMU702のレジスタブロック712に書き込むように要求する。次に、PMC1602は、パケットがクリアされることを可能にするために、所定の時間量を待つことができる。所定の時間量の後、PMC1602は、NPI710を介したトランザクション要求を介して、各NMU702のステータスレジスタを読み取り、任意のNMU702がまだ保留中のパケットを有するかどうかを判定することができる。NMU702がまだ保留中のパケットを有する場合、エラーが生成され得る。保留中のパケットを有するNMU702がない場合、PMC1602は、NPI710を介したトランザクション要求を介して、NMU702の動作を無効化又は停止する。
【0143】
ブロック1904において、PMC1602は、再構成されるべきRP内のNSU704を制御する。PMC1602は、PDIから、再構成されるべきRP内のNSU704のアドレス又は識別情報を取得する。次いで、PMC1602は、NSU704を制御するために、NPI710を介してRP内のNSU704のレジスタブロック712にトランザクション要求を送信する。トランザクションは、NSU704にNoC108からその後受信したパケットを拒否させ、かつ保留中のパケットをクリアさせる値を、NSU704のレジスタブロック712に書き込むように要求する。次に、PMC1602は、パケットがクリアされることを可能にするために、所定の時間量を待つことができる。所定の時間量の後、PMC1602は、NPI710を介したトランザクション要求を介して、各NSU704のステータスレジスタを読み出して、いずれかのNSU704がまだ保留中のパケットを有しているか否かを判定することができる。NSU704がまだ保留中のパケットを有している場合、エラーが生成され得る。NSU704が保留中のパケットを有していない場合、PMC1602は、NPI710を介したトランザクション要求を介して、NSU704の動作を無効化又は停止する。
【0144】
ブロック1902及びブロック1904に関連して説明したようにNMU702及びNSU704が制御されると、RP内のNoC108内の経路上のトラフィックは静止される。トラフィックが静止すると、RPを再構成することができる。ブロック1906において、PMC1602は、RP内のNPS706、NMU702、及びNSU704を再構成する。PMC1602は、PDIに含まれる構成データに従って、NPS706、NMU702及びNSU704を再構成する。PMC1602は、前述したように、NPI710を介してメモリマップドトランザクションを介して、NPS706、NMU702、及びNSU704を再構成する。トラフィックは、再構成中にRP内にあるNoC108に出入りしない、又は独立している経路上で継続することができる。RPの一部ではないNPS706、NMU702、及びNSU704は再構成されず、再構成の影響を受けないため、これらのNPS706、NMU702、及びNSU704の間の経路は、RP内のNPS706、NMU702、及びNSU704の再構成中に動作を継続することができる。
【0145】
ブロック1908において、PMC1602は、使用済み状態に再構成されたNSU704を有効化する。再構成後、再構成前に無効化又は停止されていたNSU704は有効化され、通常動作に入る。ブロック1910において、PMC1602は、使用状態に再構成されたNMU702を有効化する。再構成後、再構成前に無効化又は停止されていたNMU702は有効化され、通常動作に入る。したがって、再構成されたRP内のNPS706、NMU702、及びNSU704を介した通信は、
図18のブロック1810で発生することが許可される。
【0146】
図20は、SoC100の別の例示的な実施態様を示す。
図20は、SoC100の様々なコンポーネント及び/又はサブシステムの論理図を示す。
図20の例では、SoC100は、DPEアレイ102、PL104、PS106、及びNoC108を含む。SoC100は、PMC1602と、1つ以上のハードワイヤード回路ブロック2012、2018、2024、2034、及び2036と、ファブリックインターコネクト2038と、構成インターコネクト1612とをさらに含む。
【0147】
ファブリックインターコネクト2038は、PL領域104で使用される相互接続回路を表す。図示のように、DPEアレイ102、PL領域104、PS106、PMC1602、ハードワイヤード回路ブロック2034及び2036、並びにハードワイヤード回路ブロック2012、2018、及び2024内の選択されたコンポーネントなどの様々な異なるサブシステムが、ファブリックインターコネクト2038に接続されている。構成インターコネクト1612は、DPEアレイ102、PL領域104、PS106、PMC1602、並びにハードワイヤード回路ブロック2034及び2036をプログラムする(例えば、構成する)ために使用される。例えば、構成インターコネクト1612は、PMC1602のPMC処理ユニット2004によるPL領域104のフレームベースのプログラミングを可能にすることができる。
【0148】
PMC1602は、SoC100のルートオブトラストとして動作する。
図20の例では、PMC処理ユニット2004は、プログラムコードを実行することができる1つ以上のプロセッサを含んでもよい。PMC1602は、制御回路2006、メモリ2008、及び1つ以上のインターフェース2010をさらに含む。PMC処理ユニット2004は、RAM及び/又はROMを含み得るメモリ2008からの制御ソフトウェアを実行することができる。PMC処理ユニット2004は、SoC100内で様々なセキュリティ及び安全機能を実行することができる。例えば、PMC処理ユニット2004は、SoC100をブートし、SoC100の部分的再構成を実行し、DPEアレイ102を構成し、PL領域104を構成し、PS106を構成し、構成インターコネクト1612、ファブリックインターコネクト2038、及び/又はNoC108(例えば、
図10に関連して説明したように最初に構成されると)によってNoC108を構成することができる。
【0149】
PMC処理ユニット2004は、制御回路2006と通信することができる。制御回路2006は、SoC100全体のためのセキュリティ回路、安全回路、システムモニタ回路、eヒューズ回路、及び電力管理回路を含み得る。これに関して、PMC処理ユニット2004は、SoC100の様々な機能及び構成をチップ全体で設定するための回路内の制御レジスタに書き込むことができる。インターフェース2010は、様々なフラッシュメモリインターフェース(例えば、SoC100用のPDIなどの構成データを外部ソースから読み取るために)、1つ以上の異なる種類のメモリカードを受信するためのメモリカードインターフェース、SelectMAP構成インターフェース、JTAGインターフェース、並びに1つ以上の他のオフチップ接続及び/又はインターフェースのいずれかを含むことができる。
【0150】
ハードワイヤード回路ブロック2012は、NoC108及び構成可能I/O2016に接続された1つ以上の構成可能メモリ(例えば、DDR)コントローラ2014を含む。ハードワイヤード回路ブロック2018は、NoC108及び構成可能I/O2022に接続された1つ以上の構成可能高帯域幅メモリ(HBM)コントローラ2020を含む。ハードワイヤード回路ブロック2024は、各々が構成可能なギガビットトランシーバ(GT)2032に結合された、アクセラレータのためのキャッシュコヒーレントインターコネクト(CCIX)ブロック2026、1つ以上の構成可能な周辺機器コンポーネント相互接続エクスプレス(PCIe)ブロック2028、1つ以上の構成可能な媒体アクセス制御(MAC)ブロック2030を含む。ハードワイヤード回路ブロック2034及び2036は、構成可能ビデオコーデックブロック、構成可能前方誤り訂正ブロック、構成可能暗号ブロック、及び構成可能アナログ混合信号ブロック(例えば、1つ以上の構成可能なデジタル-アナログ変換器(DAC)及び/又はアナログ-デジタル変換器(ADC)を含む)のうちの1つ以上を実装することができる。SoC100は、
図20に示すよりも少ない又は多いハードワイヤード回路ブロックを含み得ることを理解されたい。
【0151】
PS106は、NoC108、ファブリックインターコネクト2038、及び構成インターコネクト1612に接続される。図示されるように、PS106は、1つ以上のリアルタイム処理ユニット(RPU)2042、1つ以上のアプリケーション処理ユニット(APU)2044、及び1つ以上のグラフィックス処理ユニット(GPU)2046を含み得る。PS106は、レベル2キャッシュ及びシステムメモリ管理ユニット(SMMU)を含み得るPSメモリ2048をさらに含み得る。PS106はさらに、コヒーレントインターコネクト2050、スヌープ制御ユニット(SCU-図示せず)、及び1つ以上の周辺機器2052を含むことができる。コヒーレントインターコネクト2050及びSCUは、他のマスタがレベル2キャッシュメモリに読み書きすることを可能にする。例えば、PL104内のRPU2042及びマスタ回路ブロックは、レベル2キャッシュメモリをスヌープすることができる。周辺機器2052は、ユニバーサルシリアルバス(USB)、イーサネット(登録商標)、ユニバーサル非同期送受信機(UART)、コントローラエリアネットワークフレキシブルデータレート(CAN FD)、シリアル周辺機器インターフェース、DisplayPort、高解像度マルチメディアインターフェース(HDMI(登録商標))、I2Cインターフェース、及びシリアルATAインターフェースを含むがこれらに限定されない、1つ以上の異なるI/Oインターフェースを含むことができる。
【0152】
PL領域104は、前述したように、ファブリックインターコネクト2038によって相互接続されたLUT2054、BRAM2056、URAM2058、及びDSP2060を含むことができる。図示のように、PL領域104は、NoC108、ファブリックインターコネクト2038、及び構成インターコネクト1612に接続される。DPEアレイ102は、相互接続された複数のハードワイヤード及びプログラム可能なDPE204を含むことができる。DPE204は、SoCインターフェースブロック206を介してNoC108、ファブリックインターコネクト2038、及び構成インターコネクト1612に接続する。
【0153】
図20の例では、NoC108はまた、別のダイ及び/又はICに配置された別のNoCに接続又は結合されてもよい。例えば、SoC100がインターポーザ又は他のキャリアを介して相互接続された複数のダイから形成される場合、NoC108は、インターポーザ又はキャリアを介して他のダイのNoCと結合することができる。
【0154】
図20の例では、CCIX2026、又は他のマルチチップキャッシュコヒーレント等価物はまた、別のダイ及び/又はICに配置された別のCCIXに接続又は結合されてもよい。例えば、SoC100がマルチチップキャッシュコヒーレンシプロトコルを介して相互接続された複数のSoCで構成される場合、CCIX2026は、他のSoCのGT2032を介して結合され得る。
【0155】
図20は、SoC100によって実装されるプログラマブルデバイスプラットフォームの異なる構造的及び機能的態様を示す。これに関して、SoC100は、異なる機能があるサブシステムから別のサブシステムに再マッピングされ得る柔軟なプラットフォームを提供する。例えば、特定の機能は、DPEアレイ102からPL領域104に、PL領域104からDPEアレイ102に、DPEアレイ102からハードワイヤード回路ブロックに、ハードワイヤード回路ブロックからDPEアレイ102に、PL領域104からハードワイヤード回路ブロックに、及び/又はハードワイヤード回路ブロックからPL領域104に再マッピングされてもよい。この再マッピングは、SoC100の他の部分におけるユーザのアプリケーションを中断することなく実行され得る。
【0156】
SoC100は、その中に含まれる異なるサブシステム、例えば、PL104、PS106、DPEアレイ102、NoC108、及び/又はハードワイヤード回路ブロックに従って主に説明されているが、プラットフォームはまた、説明された異なるサブシステムにわたって延在する「計算エンジン」、「ハードウェア加速エンジン」、「メモリリソース」、「外部インターフェース」、及び「パーベイシブインターコネクト」の形態のリソースを提供する。
【0157】
本明細書で定義される「計算エンジン」という用語は、プログラムコードを実行することができるプロセッサを指す。計算エンジンは、「グループA」型回路ブロックとも呼ばれる。PS106(例えば、RPU2042、APU2044、及び/又はGPU2046)に実装された様々なプロセッサのいずれかなど、様々なタイプの計算エンジンがSoC100に関連して説明されている。SoC100に実装することができる計算ユニットの他の例は、PL領域104内に実装されたソフトプロセッサを含む。ソフトプロセッサの例示的かつ非限定的な例は、カリフォルニア州サンノゼのXilinx,Inc.から入手可能なMicroBlaze(登録商標)Soft processor coreである。カスタムソフトプロセッサもPL領域104に実装できることを理解されたい。
【0158】
本明細書で定義される「ハードウェア加速エンジン」という用語は、ハードワイヤード回路ブロック110又はPL領域104内の回路ブロックとして実装され得る専用又は特定用途向けの回路を指す。ハードウェア加速エンジンは、「グループB」型回路ブロックとも呼ばれる。ハードウェア加速エンジンの例には、DPE、ADC、DAC、DSP、ビデオコーデック、暗号化エンジン、及びPL領域104に実装されたカスタム回路ブロックが含まれるが、これらに限定されない。
【0159】
SoC100に関して、「メモリリソース」という用語は、PS106及び/又はPL領域104で利用可能な任意のメモリ構造を含む。メモリリソースは、「グループC」型回路ブロックとも呼ばれる。例えば、メモリリソースは、PS106(例えば、PSメモリ2048として示される)で利用可能なオンチップメモリ(OCM)及びキャッシュメモリ、並びに/又はPL領域104で利用可能なLUT(例えば、LUTRAM)、URAM、及び/又はBRAMを含んでもよい。メモリリソースはまた、DDR、HBM、又はPL領域104に実装されたハードワイヤードメモリコントローラ及び/又はカスタムメモリコントローラを使用してアクセス可能であり得る他のメモリなどのオフチップ又は外部メモリを含むことができる。
【0160】
SoC100に関して、「外部インターフェース」という用語は、業界標準プロトコル並びにオフチップに位置する回路及び/又はシステムとの通信のためのコントローラを指す。外部インターフェースは、「グループD」型回路ブロックとも呼ばれる。SoC100の外部インターフェースの例には、CCIX2026、PCIe2028、MAC2030、イーサネット(PS106内)、並びに標準及び/又は非標準プロトコルのためにPL領域104内に実装されたカスタムコントローラが含まれるが、これらに限定されない。
【0161】
SoC100に関連して、「パーベイシブインターコネクト」という用語は、データ及び割り込み又は他の制御信号などの情報を伝達するために使用され、異なる機能をあるサブシステムから別のサブシステムに再マッピングすることができるように柔軟なプラットフォームも可能にする共通のインフラストラクチャを指す。パーベイシブインターコネクトは、「グループE」型回路又は回路ブロックとも呼ばれる。パーベイシブインターコネクトに含まれる共通インフラストラクチャの例は、NoC108、PS106のコヒーレントインターコネクト2050、及びPL領域104に実装されたカスタム信号経路を含む。SoC100のパーベイシブインターコネクトは、本明細書に記載の様々なサブシステム間の構成、接続性、構成可能性、ファイアウォール、及び通信に使用される。
【0162】
例示の目的のために、コヒーレントインターコネクト2050は、NoC108及び/又はファブリックインターコネクト2038を介して、ハードワイヤード回路ブロック110(例えば、2012、2018、2024、2034、及び/又は2036)、PL領域104に実装された回路ブロック、及び/又はDPEアレイ102のDPE204との接続を確立することができる。例えば、PS106の計算ユニット及びPL領域104に実装された計算ユニットは、コヒーレントインターコネクト2050にアクセスすることができる。同様に、ハードウェアアクセラレータエンジンは、ハードワイヤードであるか、PL領域104に実装されているかにかかわらず、コヒーレントインターコネクト2050にアクセスすることができる。外部、PL領域104、又はPS106内にかかわらず、メモリリソースは、コヒーレントインターコネクト2050に接続される。
【0163】
NoC108は、計算エンジン、ハードウェア加速エンジン、メモリリソース、外部インターフェース、及びそのようなコンポーネントのいずれか及びすべての間の広範なデータ及びメッセージング経路のためのコヒーレントインターコネクト2050の間のデータ経路及びメッセージングを実装することができる。
【0164】
PL領域104は、PL領域104に実装され得るユーザ定義、カスタム、ハードウェアアクセラレータエンジン、周辺機器、及び/又は他の計算ブロックのためのカスタマイズされたデータ経路を実装することができる。
【0165】
図20は、グループA、B、C、D、及びEにおけるコンポーネントの静的及び動的な構成、制御、及びステータスのためのパーベイシブ構成及び割り込み経路の使用を示す。パーベイシブ構成は、PMC1602を使用して、SoC100の異種コンポーネント(例えば、様々なサブシステムにおける)のセットにわたって、そのようなコンポーネントが同じ機能を実行するか異なる機能を実行するかにかかわらず、構成、制御、及びステータスレジスタ(CCSR)の共通セットにアクセスすることによって達成され得る。例えば、
図23は、同じ機能を実行するか異なる機能を実行するかにかかわらず、SoC100の異なるサブシステムに実装されているコンポーネントが、共通して構成可能な割り込みステータスレジスタ、エラー制御及びステータスレジスタ、並びに/又はパフォーマンス制御及びステータスレジスタを有し得ることを示している。
【0166】
SoC100について例示されたパーベイシブ構成は、より高いレベルの複合機能又はマクロ機能を可能にするために使用され得る。有効化され得るマクロ機能の例は、SoC100上のコンポーネント間のDMAデータ移動である。別の種類のマクロ関数はタスクのパイプラインである。タスクのパイプラインは、加速のパイプラインステージ(例えば、PL内のハードワイヤード回路ブロック又はユーザ定義のアクセラレータ)と、それに続く計算のパイプラインステージ(例えば、PS又はDPEアレイのDPE内の計算デバイスによって実行される処理)であり得る。
【0167】
一例では、DMAタイプのマクロ関数とパイプラインタスク実行タイプのマクロ関数の両方のためのパーベイシブ構成は、共通の記述子定義を使用してSoC100に実装されてもよい。共通の記述子定義は、SoC100の異種コンポーネントのセット(例えば、PL内の回路、1つ以上のDPE、PSプロセッサ、又はハードワイヤード回路ブロックのいずれか)にわたって普遍的に解釈される。
【0168】
例示的な例として、SoC100内のあるコンポーネントは、パイプラインステージ関数を実行するためのインバウンド記述子を解釈する。その関数の結果に基づいて、コンポーネントは、次のパイプラインステージ関数を実行するように解釈するために、次の異種コンポーネントのためのアウトバウンド記述子を生成する。この共通記述子手法はまた、タスクを実行する際に使用され得る異種コンポーネントのタイプの相互混合を可能にする。上述したように、記述子を解釈し、SoC100上の他のコンポーネントと通信するPL要素は、同じプラットフォームアーキテクチャを使用する異なるSoC100に実装されるか、又は同じSoC100内の異なるアプリケーションによって実装される場合、同じ記述子を解釈し、同じ隣接するコンポーネントと通信するハードウェア加速エンジンと置き換えることができる。
【0169】
図21は、PMC1602の例示的な実施態様を示す。PMC1602は、SoC100上のハードワイヤード回路ブロックである。
図21の例では、PMC1602は、PMC処理ユニット2004(PS106とは別個かつ異なる)を含む。PMC処理ユニット2004は、物理複製困難関数(PUF)2104と、1つ以上のROM2106と、1つ以上のRAM2108と、1つ以上のタイマ2110と、1つ以上のプロセッサ2112と、ローカルレジスタ2114とを含み得る。例示的な実施態様では、PMC1602は、PL104、DPEアレイ102、及び/又はPS106から独立した別個の電力ドメイン上にある(例えば、別個の独立した電源を有する)。
【0170】
一態様では、PMC処理ユニット2004は、適切な投票回路を使用してロックステップで動作する複数のプロセッサ2112を含む。別の態様では、PMC処理ユニット2004は複数のプロセッサ2112を含み、ロックステップで動作し得る1つ以上のプロセッサ2112は、RAM2208へのアクセス専用であり(例えば、ROM2208に格納されたコードを実行する)、同様にロックステップで動作し得る1つ以上の他のプロセッサ2112は、ROM2206へのアクセス専用である(例えば、ROM2206に記憶されたコードを実行する)。
【0171】
例えば、1つ以上のプロセッサ2112は、ROM2106に記憶されたコードの実行専用である。ROM専用プロセッサ2112は、SoC100のブート中にリセット外でアクティブな第1のプロセッサである。ROM専用プロセッサ2112は、ROM2106に記憶されたコードを実行する際に、デバイス初期化、ブートインターフェース検証、リセットからのPMC1602のさらなるプロセッサ2112の解放などの動作を実行することができ、PMCプラットフォームローダ及びマネージャをRAM2108にロードする。ROM専用プロセッサ2112は、セキュアブート、ブート後のセキュリティ監視、及びPUF管理も行うことができる。RAM専用プロセッサ2112は、リセットが解除されると、RAM2108に記憶されたコードを実行することができる。
【0172】
いずれの場合も、ROM2106及びRAM2108は、プロセッサ2112によってのみアクセス可能である。別の態様では、各プロセッサ2112はROM2106及びRAM2108を有し、各プロセッサ2112は独立した専用のROM2106及び独立した専用のRAM2108を有する。RAM2108は、誤り訂正符号化(ECC)回路によって保護されてもよい。プロセッサ2112は、ROM2106に記憶されたコードを実行し、ROM2106に記憶されたコードを実行することによって主ブートデバイスからRAM2108にロードされたファームウェアを実行することによって、SoC100を電源投入及び構成するために使用され得る。ローカルレジスタ2114は、PMC処理ユニット2004のための構成レジスタであり、PMC処理ユニット2004によってのみアクセスされ得る。
【0173】
ブート後、プロセッサ2112は、PMC1602に含まれる様々なコンポーネントを使用して様々な異なる機能を実行することができる。例えば、プロセッサ2112は、SoC100の電力管理、電圧及び温度監視、安全性及びセキュリティイベント応答などを実行することができる。図示されているように、プロセッサ2112は、これらの目的のために割り込み信号及びウェイク信号を受信することができる。
【0174】
PMC処理ユニット2004はインターコネクト2116に接続されている。PMC処理ユニット2004は、インターコネクト2116を介してPMC1602及びSoC100内の他のコンポーネントと通信することができる。インターコネクト2116は、複数のメモリマップドスイッチ及びインターフェースと、複数のストリームスイッチ及びインターフェースとを含むことができる。インターコネクト2116は、PMC共有RAM2118、グローバルレジスタ2120、I/O2122、DMA2124及び2126、セキュアストリームスイッチ2128、スレーブブートインターフェース2130、セキュリティアクセラレータ2132、アナログシステム2134、リアルタイムクロック(RTC)2136、電力管理及びリセット2138、エラー管理2140、デバッグパケットコントローラ2142、及び構成フレームユニット(CFU)2144に接続されている。
【0175】
PMC共有RAM2118は、処理中にSoC100のための構成データを記憶するために、及びPMC1602のための汎用データ処理RAMとして使用され得る。グローバルレジスタ2120は、PMC1602内の任意の(例えば、すべての)マスタによってアクセス可能な構成レジスタである。グローバルレジスタ2120は、汎用の電力制御レジスタ、エラー管理レジスタ、及びサービス割り込み要求インターフェースを含むことができる。I/O2122は、多重化入出力(MIO)2168に結合された1つ以上のI/Oを含むことができる。図示されるように、MIO2168は、PS106及びPL104にさらに接続する。I/O2122に含めることができるI/O回路ブロックの例には、I2C、並びにSPI及び/又はSD/eMMCなどの1つ以上のフラッシュインターフェースが含まれるが、これらに限定されない。
【0176】
DMA2124及び2126は、SoC100の構成及び構成データの処理のためにPMC1602内でデータを転送するために使用される。セキュアストリームスイッチ2128は、処理のためにセキュリティアクセラレータ2132に提供されるデータストリームが安全であることを保証する。スレーブブートインターフェース(SBI)2130は、マルチダイSoC構成におけるスレーブブート及び/又は構成を容易にする。図示されていないが、SBI2130は、SelectMap2170及びNoC108に接続されてもよい。
【0177】
セキュリティアクセラレータ2132は、AES-GCM回路ブロック2146、楕円曲線デジタル署名アルゴリズム/Rivest-Shamir-Adleman(ECDSA/RSA)回路ブロック2148、セキュアハッシュアルゴリズム3/394(SHA-3/394)回路ブロック2150、真乱数発生器(TRNG)回路2152、及びバッテリバックアップRAM(BBRAM)2154回路ブロックを含むことができる。AES-GCM回路ブロック2146は、暗号化及び/又は復号化を実行することができる対称キー暗号化エンジンである。ECDSA/RSA回路ブロック2148は、認証を実行することができる公開鍵暗号化エンジンである。SHA-3/394回路ブロック2150は、安全なハッシュ演算を実行することができる。TRNG回路2152は、乱数を生成することができる。
【0178】
アナログシステム2134は、SoC100の周りの様々な場所及び/又は様々なサブシステムに配置され得る1つ以上の遠隔システムモニタ回路からの電圧及び温度を監視することができるシステムモニタ2156と、PMC1602のためのクロック信号を生成することができるシステム発振器2158と、SoC100上のeヒューズ回路を維持及び/又は管理することができるeヒューズコントローラ2160と、ハードワイヤード及びプログラマブル回路ブロックとしてSoC100上に実装され得るDAC及び/又はADCなどのSoC100内のアナログデバイスのための1つ以上の基準電圧を生成することができるバンドギャップ回路2162と、PMC1602、NoC108、NPI710、及びPS106のためのクロック信号を生成することが可能な1つ以上の位相ロックループ(PLL)2164と、パワーオンリセット(POR)回路2166とを含むことができる。
【0179】
eヒューズコントローラ2160は、eヒューズ回路を読み取ることができる。eヒューズ回路(例えば、eヒューズメモリ素子)は、デバイスDNA及びセキュリティキーなどの設計情報を記憶するために使用されてもよい。eヒューズ回路は、JTAG2168を無効化するなどの機能をさらに制御することができる。
【0180】
RTC2136は、高精度な水晶発振器で動作可能なクロック回路である。RTC2136は、SoC100内の様々なオペレーティングシステム及びデバイス管理機能のために、現在の時間を測定し、特定の時間にアラームを生成するために使用され得る。電力管理及びリセット回路2138は、SoC100上の他の回路ブロックに対してパワーアイランド、電力ドメイン、及びリセットを制御するために必要な論理及びインターフェースを実装する。電力管理リセット回路2138は、PS106に実装されたパワーアイランドを制御するためにPS106にさらに接続する。エラー管理回路2140は、SoC100内の他のサブシステムからのエラーを受信、記録、及び応答することができる。デバッグパケットコントローラ2142は、高速シリアルインターフェース及び/又はPCIeブロックなどのSoC100上の他のインターフェースから渡されるパケットを処理する高速デバッグポート(HSDP)用のパケットコントローラである。
【0181】
CFU2144は、PL104の構成レジスタに提供又はロードされた構成データの構成及び読み出しを実行することができる。PMC1602は、例えば、CFU2144を介してPLビットストリーム(例えば、構成データ)を転送し、PL104を構成する。
【0182】
SoC100は、電力管理及びリセット回路2138によって制御されるいくつかの主要な電力ドメインを含むように実装され得る。電力ドメインは、RPU及びOCMを含む低電力ドメインと、APU及び高速I/Oを含む全電力ドメインと、NoC及びシステム2重データレート(DDR)電力領域と、PL電力領域とを含む。
【0183】
SoC100が配置されている回路基板を介して制御することができる他の電力ドメインがSoC100内に作成されてもよい。これらの他の電力ドメインは、さらなるI/O電力ドメイン、バッテリ電力ドメイン、PMC電力ドメイン(例えば、PMCがそれ自体の電力ドメイン及び電力供給を有する場合)、PL RAM電力ドメイン、及びDPEアレイ電力ドメインを含み得るが、これらに限定されない。
【0184】
図22は、PMC処理ユニット2004のプロセッサ2112の例示的な配置を示す。
図22の例では、プロセッサ2112は3重冗長アーキテクチャで配置されている。例示的な実施態様では、プロセッサ2112はハードワイヤードMicroblazeプロセッサとして実装されるが、他のタイプのプロセッサが使用されてもよい。
【0185】
各プロセッサ2112は、トリプルモジュロ冗長(TMR)マネージャ2202及びI/Oモジュール2204に接続されている。TMRマネージャ2202-1、2202-2、及び2202-3は相互接続されている。I/Oモジュール2204-1、2204-2、及び2204-3も相互接続されている。投票回路2210-1は、I/Oモジュール2204の各々に結合される。各I/Oモジュール2204は、割り込みコントローラ、タイマ、汎用I/O(GPIO)、及び/又はUARTを含むことができる。各TMRマネージャ2202は、故障検出及びエラー回復を含む、プロセッサ2112のそれぞれの状態を管理することができる。
【0186】
各投票回路2210は、受信した入力信号を比較することができる。各投票回路2210は、受信信号の不一致を検出し、多数の結果を受け入れ、動作し続けることができる。不一致(例えば、結果が失われる)を提供する特定のプロセッサ2112はリセットされ、残りの2つのプロセッサ2112はロックステップで動作し続ける。3つのプロセッサ2112のすべてが不一致であれば、各プロセッサ2112はリセットされる。
【0187】
また、各プロセッサ2112は、RAM制御回路2206及びRAM制御回路2208に接続される。RAM制御回路2206は投票回路2210に接続され、投票回路は命令RAM、例えばRAM2118に接続される。RAM制御回路2208は投票回路2210-5に接続され、投票回路はデータRAM、例えばRAM2118に接続される。図示されるように、RAM2118並びに投票回路2110-4及び2110-5は、ECCドメインの一部である。
図22の例では、命令RAM(例えば、2206-1、2206-2、及び2206-3)用の各RAM制御回路2206は、投票回路2210-3に接続される。プロセッサ2112-1、2112-2、及び2112-3の各々は、投票器回路2210-2に接続される。AXI4-Lite又は他の適切な制御インターフェースなどの制御インターフェースは、プロセッサ2112-1、2112-2、及び2112-3の各々に接続される。
【0188】
図22は、プロセッサ2112がRAM2118へのアクセス専用であるトリプルモジュラ冗長の一例を示す。前述したように、PMC1602内のROM専用プロセッサに同様のアーキテクチャが使用されてもよい。別の例では、3つより少ないプロセッサ2112を使用することができ、(ロックステップにおける)1つ又は2つのプロセッサ2112は、ROM2106に記憶されたコードの実行専用であり、(ロックステップにおける)1つ又は2つの他のプロセッサ2112は、RAM2108に記憶されたファームウェアの実行専用である。
【0189】
PMC1602は、SoC100内のルートオブトラストである。PMC1602は、SoC100の任意の部分を構成するためにPMC1602によってロードされた任意の外部コードが(必要に応じて)認証及び復号されることを保証することによって信頼のチェーンを構築することができる。例えば、PMC1602は、ECDSA/RSA回路ブロック2148を用いて認証を行い、AES-GCM回路ブロック2146を用いて復号を行うことができる。一般に、構成データは認証及び復号され、PMC1602は、構成データをSoC100の適切なサブシステム及び/又は回路ブロックの適切な構成レジスタにロードすることができる。
【0190】
図23は、SoC100のさらなる構造的及び機能的態様を示す。
図23は、異なるタイプの計算エンジン及びハードウェア加速エンジンがSoC100のサブシステムの異なるものにわたって実装される例示的な構成を示す。
図23の例では、計算エンジン、ハードウェア加速エンジン、メモリリソース、及び外部インターフェースは、SoC100内の他のコンポーネント及び/又はサブシステムへの標準化された、又は共通のインターフェースを使用して実装される。これらの共通のインターフェースは、図示されたコンポーネントが、この例ではNoC108であるSoC100上のグローバル相互接続リソースに結合することを可能にする。
【0191】
図23の例では、PS106は、複数のRPU2042及び複数のAPU244を含み、それぞれがレベル2キャッシュ2302(例えば、PSメモリ2048の一部)を介してコヒーレントインターコネクト2050に結合される。コヒーレントインターコネクト2050は、メモリ2304にさらに接続される。メモリ2304は、PL領域104内に位置するメモリ、外部メモリ、又は他のサブシステム内の他の回路ブロックによってアクセス可能なPS106内のメモリであってもよい。図示のように、メモリ2304はNoC108にも接続されている。1つ以上の外部I/O2308及び1つ以上のハードウェア加速エンジン2310など、様々な他のタイプの回路ブロックがNoC108に接続される。
【0192】
外部I/O2308は、固定の周辺機器インターフェース2312及びユーザ定義の周辺機器インターフェース2314を含む。固定の周辺機器インターフェース2312はハードワイヤード回路ブロックとして実装され、一方、ユーザ定義の周辺機器インターフェース2314はPL領域104に実装される。固定の周辺機器インターフェース2312及びユーザ定義の周辺機器インターフェース2314の両方は、システムI/Oインターコネクト2315(例えば、ローカルインターコネクト)並びにGT2316及び/又はI/O2318に接続される。
【0193】
ハードウェア加速エンジン2310は、PL領域104に実装されたユーザ定義のアクセラレータ2320、1つ以上のDPE204の各グループが特定の機能を実行するように構成されているDPEアレイ102の1つ以上のDPE204(例えば、1つ以上のグループ)、DSPハードワイヤード回路ブロック2334、及び暗号ハードワイヤード回路ブロック2336を含む。
【0194】
図23の例では、固定の周辺機器インターフェース2312、ユーザ定義の周辺機器インターフェース2314、ユーザ定義のアクセラレータ2320、DPE204、DSP2334、及び暗号エンジン(暗号)2336は、異なる動作を実行し、異なるサブシステムにわたって実装されているにもかかわらず、共通のインターフェースを利用する。例えば、記載されたコンポーネントの各々は、データ経路インターフェース2322、MMUインターフェース2324、割り込みインターフェース2326、DMA2328、パフォーマンスモニタ2330、トレース/デバッグインターフェース2332、及び構成インターフェース2334を含むことができる。したがって、様々なコンポーネントが上述したように異なるグループに属し、かつ/又はSoC100の異なるサブシステムにわたって実装されているにもかかわらず、各々が同じ又は共通のインターフェースを有し得る。機能ブロックのシグナリングは、PL領域104からハードワイヤード回路ブロック又はDPEなどに移動されても一定のままであるため、共通のインターフェースは、SoC100内のあるサブシステムから別のサブシステムへの機能の再マッピングをサポートする。
【0195】
データ経路インターフェース2322は、この例ではNoC108であるグローバル相互接続に接続することができるインターフェース回路である。データ経路インターフェース2322は、例えば、NoC108のNMU及び/又はNSUに接続するための標準インターフェースを提供することができる。メモリ管理ユニット(MMU)インターフェース2324は、SoC100内の仮想アドレスと物理アドレスとの間のアドレス変換を実行することができる。例えば、MMUインターフェース2324は、データ経路インターフェース2322を介して受信及び/又は送信されたトランザクションに使用され得るアドレス変換を実行するために、メモリに記憶されたページテーブルにアクセスすること、及び/又はそのようなテーブルのローカルにキャッシュされたコピーを維持することができる。MMUインターフェース2324はまた、MMUインターフェース2324を含む回路ブロックがメモリアドレスに対する不正な読み出し及び/又は書き込みを実行するのを防止するために、読み出し/書き込み許可及び許可を実施することができる。
【0196】
割り込みインターフェース2326は、回路ブロックの標準割り込み又はユーザ定義及び/又は固有の割り込みを実施する。場合によっては、例えば、そのような回路ブロックがSoC100内の同じ区画に配置されている場合、2つ以上の回路ブロックの割り込みを共有することができる。その場合、割り込みの宛先は、回路ブロック間で共有されてもよい。SoC100内の区分に関するさらなる説明は、残りの図を参照してより詳細に説明される。
【0197】
DMA2328は、NoC108及びデータ経路インターフェース2322を介したデータ転送を行うことができる。パフォーマンスモニタ2330は、SoC100全体の他の回路及び/又はインターフェースに結合することができる。パフォーマンスモニタ2330は、パフォーマンスモニタ2330が属する回路ブロックの帯域幅やレイテンシなどの量を測定することができる。一態様では、パフォーマンスモニタ2330は、一定期間に特定のアドレス範囲に送信されたトランザクションの数又は他の量を測定するために、回路ブロックに出入りするデータ信号をフィルタリング及び測定することができる。パフォーマンスモニタ2330は、NoC108(例えば、PS106又はPMC1602)を介してプログラムされた宛先に任意の測定データを通信することができる。トレース/デバッグインターフェース2332は、PMC1602による受信のためにNoC108を介してトレース及び/又はデバッグデータを送受信することができる。例えば、デバッグ/トレースインターフェースは、コマンドを受信し、トレース/デバッグデータをPMC1602内のデバッグパケットコントローラ2142へ送信することができる。
【0198】
構成インターフェース2334は、回路ブロックが位置する特定のサブシステムに応じて、NoC108及び/又は他のインターコネクト(例えば、構成インターコネクト1612又はファブリックインターコネクト2038)に接続される。例えば、PMC1602は、構成インターフェース2334に構成データを提供することによって回路ブロックを構成することができる。構成インターフェース2334は、例えば、回路ブロック(図示せず)内に位置する構成レジスタにPMC1602が読み書きすることを可能にする。
【0199】
別の態様では、異なる回路ブロックは、データ経路インターフェース2322、MMUインターフェース2324、割り込みインターフェース2326、DMA2328、パフォーマンスモニタ2330、トレース/デバッグインターフェース2332、及び/又は構成インターフェース2334のより少ない又は任意の組合せを含むことができる。一態様では、割り込みインターフェース2326は、割り込みを受信及び/又は生成するように構成される。例示的な実施態様では、割り込みインターフェース2326はメモリマップドインターフェースとして実装される。割り込みは、割り込みインターフェース2326に接続された他の回路ブロックから受信されてもよく、及び/又は割り込みインターフェース2326に接続された他の回路に提供されてもよい。割り込みシグナリングは、NoC108を介して、特定のハードワイヤード回路ブロック110、PS106、又は
図23に示す任意の他の回路ブロックにルーティングすることができる。
【0200】
例示的な例では、割り込みインターフェース2326は、ドアベル割り込みを生成及び/又は受信することができる。ドアベル割り込みは、SoC100内のあるドメイン、例えばある区画から別のドメインに移動する割り込みである。例えば、互いから分離されていてもよい2つの区画を介して、1つ以上の割り込みが、区画から他の区画及び/又はPMC1602への出入りを許可されて、メッセージを通信し、又は所定の動作をトリガ/開始してもよい。ドアベル割り込みは、NoC108を介してあるドメイン又は区画から別のドメイン又は区画に移動することができる。
【0201】
一例では、PL104にPCIeコントローラが実装されてもよい。PCIeコントローラは、NoC108を介してDDRメモリに接続される。この例では、PCIeコントローラは、共通のインターフェースを使用し、割り込みインターフェース2326を含んでもよい。SoC100と通信するホストシステムは、PCIeコントローラが実行するための新しいジョブを生成し、SoC100のPL104内のPCIeコントローラに新しいジョブ(例えば、メモリアクセス)を提出することができる。ホストシステムは、例えば、PCIeコントローラに割り込みを発生させて、PCIeコントローラに、メモリアクセスを実行するための1つ以上のDMAをプログラムさせる。
【0202】
図23は、SoC100のグループA、B、及びCのコンポーネントにわたる機能及びサービスのモジュール性を示す。コンポーネントは、コンポーネントが互いに異なる機能を果たす場合でも、このモジュール性を維持することができる。例えば、PL領域104に実装されたコンポーネントは、PLコンポーネントがグループD、E、及びF内のコンポーネントに対する標準インターフェースを有するようにモジュール化される。各PLコンポーネントは、グループA、B、又はC内のコンポーネントとして実装された他の機能のいずれかのサービスに展開することができる。グループA、B、又はCの各コンポーネントはまた、別のPLコンポーネント又はグループA、B、及びC内の異なるコンポーネントのいずれかへの通信及びデータ経路を有する。
【0203】
SoC100を使用して達成されるモジュール性の別の例では、PLコンポーネントとして展開される特定の機能をPL104の他の部分に展開して、同じ機能の複数の同時インスタンスを実装することができる。共通のインターフェースは、グループA、B、又はCのいずれにあるかにかかわらず、SoC100内のコンポーネントにわたって展開される共通の割り込み、アドレス変換、デバッグ、及びパフォーマンスモニタ方式を提供する。共通のインターフェースを提供するにもかかわらず、別の態様では、グループA、B、又はCに実装されたコンポーネントは、割り込み、アドレス変換、デバッグ、及びパフォーマンスモニタ方式の固有の又はカスタムのセットを実装することができる。
【0204】
図24は、SoC100のさらなる構造的及び機能的態様を示す。
図24の例では、SoC100は、セキュリティ機能を実装することができる様々な追加の回路を含む。これらの追加の回路は、SoC100内の異なる独立区画及び異なる区画間のファイアウォールを作成するために使用され得る。各区画は、その中でそれ自体のアプリケーションを実行することができる。
図24の例では、複数のシステム管理識別子(SMID)回路2402及びプログラマブル保護回路(PPC)2418が含まれる。
【0205】
プロセッサ2112、RPU2042、APU2044、他のマスタ2408、及びI/Oデバイス2412は、SMID回路2402を介してローカルインターコネクト2416に接続される。I/Oデバイス2412は、SMMU2414を介してローカルインターコネクト2416にさらに接続される。ローカルインターコネクト2416は、NoC108に接続される。PL104及び/又はDPEアレイ102は、NoC108に接続される。RPU2042は、MMU2404-1及びキャッシュ2406を含む。APU2044は、MMU2404-2及びキャッシュ2410を含む。
【0206】
各SMID回路2402は、特定のSMIDを使用するようにプログラム可能である。構成中、PMC1602は、使用されている様々なSMID回路2402又は少なくともそれらのSMID回路2402の各々の構成レジスタにSMIDを割り当てて書き込むことができる。様々なコンポーネント、例えば、プロセッサ2112、RPU2042、APU2044、他のマスタ2408、I/Oデバイス2412、PL104、及び/又はDPEアレイ102の各々のSMID回路2402は、それぞれのコンポーネントによって開始されたトランザクションにSMIDを添付又は挿入することができる。したがって、プロセッサ2112から生じる各トランザクションは、例えば、PMC1602によって割り当てられたSMID2402-2によって挿入されたトランザクションにSMIDを含む。同様に、RPU2042から生じる各トランザクションは、PMC1602によって割り当てられたSMID2402-2によって挿入されたSMIDを有する。このようにして、SoC100内の様々なコンポーネントからのトランザクションのソースは、そのトランザクション内の特定のSMIDによって識別され得る。SMID回路2402に割り当てられたSMIDは、SoC100にわたって一意であり得る。
【0207】
PPC2418は、SoC100内のスレーブ回路へのアクセスを保護することができる。PPC2418の各々は、回路ブロックに入る各トランザクションの特定のSMIDをチェックすることができる。各PPC2418は、例えば、各PPC2418によって保持されている許可されたSMIDのリスト上で、トランザクションのSMIDが許可されたSMIDであるかどうかをチェックすることができる。各PPC2418はまた、トランザクションによってアクセスされるアドレス又はアドレス範囲が、SMIDがアクセスを許可されているアドレス範囲であることをチェックすることができる。これに関連して、PPC2418は、(SMIDに基づく)許可された回路ブロックのみが他の回路ブロックにアクセスすることができ、さらに特定のSMIDが許可されているアドレス範囲にのみアクセスすることができることを保証することによって、アクセス特権を実施することができる。
【0208】
一態様では、PPC2418は、回路ブロックの構成レジスタを保護するように構成された第1のタイプを含む。そのようなPPC2418は、許可されたSMIDのみが構成レジスタにアクセスすることを許可することができ、それぞれの許可されたSMIDについて許可されたアドレスのリスト上で指定されたアドレスを有する特定の構成レジスタのみを許可することができる。そのようなPPC2418の例には、PPC2418-1、2418-2、2418-3、及び2418-5が含まれるが、これらに限定されない。これらのPPC2418は、きめ細かい保護を提供する。PPC2418はまた、メモリを保護するように構成された第2のタイプを含むことができる。第2のタイプのPPC2418は、メモリ保護及び分離を提供する。そのようなPPC2418の例には、2418-4及び2418-6が含まれるが、これらに限定されない。
【0209】
SMID回路2402及びPPC2418は、PMC1602により構成される。例えば、PMC1602は、所与の設計(例えば、SoC100にロードされたPDIごと)によって使用される各SMID回路2402及び各PPC2418内の構成レジスタに書き込むことができる。PMC1602は、例えば、SMIDをSoC100の様々な回路コンポーネントに割り当て、それに応じてSMID回路2402を構成する。PMC1602はさらに、各SMIDがアクセスを許可される許可されたSMID及び/又は許可されたアドレス及び/又はアドレス範囲のリストをPPC2418の構成レジスタに書き込む。これらの動作により、少なくとも部分的に、互いに分離された2つ以上の区画を作成することができる。
【0210】
これに関して、PPC2418-1は、許可されたソースからの許可されたトランザクションのみがPMCスレーブ2420にアクセスすることを可能にすることができる。PPC2418-2は、許可されたソースからの許可されたトランザクションのみがNPI710にアクセスすることを可能にすることができる。PPC2418-3は、許可されたソースからの許可されたトランザクションのみがRTPスレーブ2422にアクセスすることを可能にすることができる。PPC2418-4は、許可されたソースからの許可されたトランザクションのみがOCM2424にアクセスすることを可能にすることができる。PPC2418-5は、許可されたソースからの許可されたトランザクションのみがAPUスレーブ2426にアクセスすることを可能にすることができる。PPC2418-6は、許可されたソースからの許可されたトランザクションのみがDDRメモリコントローラ2428にアクセスすることを可能にすることができる。
【0211】
図24の例では、例示の目的でSMID回路2402及びPPC2418の特定の位置が示されている。SMID回路2402及びPPC2418は、インターフェースの一部としての回路ブロック内、回路ブロック間の信号経路内などに実装されてもよい。SMID回路2402及びPPC2418は、論理的等価性を提供する異なる物理的位置に実装されてもよい。例えば、複数のブロックは、NoC108などの広域経路に結合する集約された中継器を有することができる。その場合、集約された中継器は、中継器を介して集約される個々の回路ブロックのそれぞれではなく、SMID回路2402及び/又はPPC2418を含むことができる。これは、NoC108の入口点と出口点の両方に当てはまる場合がある。
【0212】
図24の例では、ローカルインターコネクト2416は、複数の論理機能をマージすることができる1つの物理回路ブロックを表すことができる。別の例では、NoC108は、1つ以上のSMID結合点を含むように実装され得る。言い換えれば、SMID回路2402(例えば、2402-8及び2402-9)は、PL領域104及び/又はDPEアレイ102内ではなく、NoC108内に実装されてもよい。SMID回路2402は、入口点、出口点、又は入口点と出口点との組合せでNoC108に実装されてもよい。
【0213】
図24の例では、ローカルインターコネクト2416への様々な接続は、1つのゲートウェイを介してNoC108に出入りする。NoC108の各ポートは、1つの論理ソースから、又は複数の論理ソースからトランザクションを受信することができる。同様に、NoC108の各ポートは、1つの物理ソースから、又は複数の物理ソースからトランザクションを受信することができる。物理ソースは、特定のサブシステム内の回路ブロックであり得るが、異なる物理ソースは、異なるサブシステム内の異なる回路ブロックである。
【0214】
例えば、プロセッサ2112、RPU2042、及びAPU2044はそれぞれSMID回路2402を有する。プロセッサ2112、RPU2042、及びAPU2044の各々は、PMC1602によって実行された構成に基づいて、それに割り当てられた固有のSMIDを有するトランザクションを開始することができる。トランザクションは、それぞれのSMIDを宛先にしてNoC108に流れる。同様に、PL領域104又はDPEアレイ102からのトランザクションはそれぞれ、場合によっては、SMID2402-6又はSMID2402-7によって挿入されたSMIDを有する。PL領域104及びDPEアレイ102からのトランザクションは、SMIDを宛先まで運ぶ。
【0215】
例示的な例として、PL領域104に実装された回路ブロックがトランザクションA、B、及びCを開始する場合を考える。トランザクションA、B、及びCの各々は、SMID回路2402-6(又はNoC108に実装されている場合はSMID回路2402-8)によって割り当てられたSMIDを搬送する。トランザクションAがDDRメモリコントローラ2428に向けられている場合、NoC108は、入口経路及び出口経路の両方として機能する。PPC2418-6は、PL領域104内の回路ブロックが、DDRメモリコントローラ2428にアクセスする権利を有し(例えば、SMIDに基づく)、かつトランザクションによって指定されたメモリの特定のアドレスにアクセスする権利を有することをチェックすることができる。PPC2418-6は、トランザクションAのソースが適切な権利を有していない場合、トランザクションAを拒否することができる。
【0216】
トランザクションBはPMCスレーブ2420に向けられてもよく、トランザクションCはRTPスレーブ2422に向けられる。トランザクションBの場合、PPC2418-1は、トランザクションBのソース(SMIDに基づく)がトランザクションによって指定された特定のPMCスレーブ2420にアクセスすることを許可されているか否かをチェックする。トランザクションCの場合、PPC2418-3は、トランザクションCのソース(SMIDに基づく)がトランザクションによって指定された特定のRTPスレーブ2422にアクセスすることを許可されているか否かをチェックする。各PPC2418-1及びPPC2418-3は、SMID及びトランザクションの特定のターゲット(例えば、特定のPMCスレーブ2420又は特定のRTPスレーブ2422)に基づいて、それぞれのトランザクションを許可するか、又はそれぞれのトランザクションを拒否する。したがって、SMIDアタッチメント及び出口チェック(例えば、PPU2418によって実行されるように)の論理機能は、SoC100内に物理的に分散されてもよい。
【0217】
別の例では、I/Oデバイス2412は、ブートイメージが第1のPMCスレーブ2420にロードされる外部フラッシュデバイスであってもよい。この例では、PMCスレーブ2420は、ブートコードが格納されるメモリなどのメモリスレーブ、又はPL領域104及び/又はDPEアレイ102を構成するためのレジスタセットなどのSoC100内の他のブロックをプログラム又は構成するためのレジスタであってもよい。別の例では、ブートイメージは、プロセッサ2112がブートするプログラムコードであってもよい。この例では、様々なゲートウェイ、例えば、PPU2418及びSMID回路2402は、ブートイメージが特定のPMCスレーブ2420にロードされることのみを可能にするようにPMC1602によって構成されている。したがって、I/Oデバイス2412は、PPU2418-1によって規制されるように、指定された、例えば第1のPMCスレーブ2420に画像ファイルのコンテンツを書き込むことのみが許可される。I/Oデバイス2412は、他のPMCスレーブ2420に対する読み取り又は書き込みを許可されない。
【0218】
例を続けると、プロセッサ2112は、認証方式(本明細書でより詳細に説明する)を介して、ブートイメージをロードすることを許可される。例えば、PPC2418-1は、SMID回路2402-1に対応するSMIDに基づいて、プロセッサ2112がPMCスレーブ2420を読み取ることを許可するように構成されてもよく、PMCスレーブには(書き込みアクセスのみを有した)I/Oデバイス2412によってブートイメージが格納されている。プロセッサ2112は、ブートイメージを読み取り、ブートイメージを第2のPMCスレーブ2420、例えばプロセッサ2112用のワーキングメモリに復号することしかできない。次いで、プロセッサ2112は、第2のPMCスレーブ2420に格納された復号化されたブートイメージを使用して、例えば第3のPMCスレーブ2420に書き込むことによって、他の構成レジスタをプログラムしてもよい。第3のPMCスレーブ2420は、PL領域104用の構成レジスタ又は他の回路ブロック用の構成レジスタであってもよい。
【0219】
別の態様では、RPU2042は、PMC1602及び/又はPS106のその他のプロセッサ(例えば、APU2044)とは別のローカルインターコネクトを有し得る。リアルタイム動作に適したRPU2042は、前述した低電力ドメインで動作することができ、したがって、PMC1602及び/又はAPU2044のローカルインターコネクトとは別個のローカルインターコネクトを有することができる。これにより、RPU2042は、異なるイベント、例えば、RPU2042によって受信及び/又は処理され得るリアルタイムのセンサデータに迅速に反応することができる。
【0220】
図25は、PPC2418の例示的な実施態様を示す。PPC2418は、SMIDチェック回路2502、アドレス範囲チェック回路2504、及び構成レジスタ2506を含む。
【0221】
SMIDチェック回路2502は、受信したトランザクションのSMIDをチェックすることができる。SMIDチェック回路2502は、受信したトランザクション内のSMIDを判定し、SMIDを構成レジスタ2506で指定された許可されたSMIDのリストと比較する。アドレス範囲チェック回路2504は、トランザクションによって指定された宛先内でアクセスされるべき特定のアドレスを決定する。アドレス範囲チェック回路2504は、受信したトランザクションの指定されたアドレスが、構成レジスタ2506ごとにトランザクションのSMIDに対して許可されたアドレスのセット又は範囲内にあるかどうかをチェックする。
【0222】
PPC2418は、SMIDチェック回路2502及びアドレス範囲チェック回路2504によって実行されるチェックを満たさないトランザクションを禁止する(例えば、拒絶する)ことができる。PPC2418はさらに、SMIDチェック回路2502及び/又はアドレス範囲チェック回路2504によって実行されたチェックに基づいて、受信したトランザクションが拒否されたと判定したことに応答して、割り込み信号を生成することができる。
【0223】
図26は、SoC100をブートする例示的な方法2600を示す。方法2600は、本明細書に記載された様々なサブシステムを利用するSoC100内のアプリケーションを実装するために実行され得る。
【0224】
ブロック2602において、SoC100内のハードワイヤード論理は、パワーオンリセットシーケンスを実行する。一態様では、ハードワイヤード論理は、
図21に関連して説明したPOR回路2166である。パワーオンリセットシーケンスとは、SoC100の電源投入後に行われる初期動作をいう。一般に、SoC100によって実行されるパワーオンリセットシーケンスは、BootROMコードを実行するためにPMC1602のプロセッサに制御を渡す前に初期ステップを実行する。パワーオンリセットシーケンスは、電圧供給部が電源投入されたかどうかを検出し、パワーオンリセットアサート停止を認定するアナログコンポーネントを含むことができる。さらに、SoC100のブートモードを指定するブートモードピンが取得されてもよい。Eヒューズビットは、eヒューズコントローラ2160によって読み取られ、キャッシュされ得る。PMC1602に対して状態クリア動作が行われる。POR回路2166は、BootROMを認証可能である。BootROMは、例えば、PMC1602のSHA-3/384回路ブロック2150を用いて認証されてもよい。パワーオンリセットの終了により、PMC1602の残りの部分がリセットから解放される。
【0225】
ブロック2604において、POR回路2166は、エラー状態が発生したかどうかを判定する。エラー状態が発生した場合、方法2600はブロック2606に進み、エラーピンがアサートされ、SoC100のブートプロセスが停止する。
【0226】
ブロック2608において、PMC1602はBootROM実行ステージを実行する。BootROM実行ステージは、PMC1602のプロセッサ2112のうちの1つ以上によって実行されてもよい。例えば、BootROM実行ステージは、PMC1602のROM専用プロセッサ2112により実行されてもよい。一態様では、BootROM実行ステージは、割り込み不可能である。ブロック2608において、プロセッサ2112は、PMC共有RAM2118をクリアする。プロセッサ2112は、システムモニタ2156を初期化し、その中の電圧がチェックされる。プロセッサ2112は、PLL2164を初期化する。プロセッサ2112は、PMC RAM2118をテストする。プロセッサ2112はさらに、eヒューズコントローラ2160によって読み取られたeヒューズデータに基づいて、eヒューズによって無効化されたパワーアイランドを無効化(パワーダウン)する。
【0227】
ブロック2610において、PMCプロセッサ2112は、エラー状態が発生したか否かを判定する。エラー状態が発生した場合、方法2600はブロック2612に進み、エラーがエラーアグリゲーション論理に取り込まれ、エラーピンがアサートされ、SoC100のブートは継続する。
【0228】
ブロック2614において、PMC1602は、ブートヘッダ/認証証明処理を実行する。一般に、プロセッサ2112は、BootROMコードを実行し、ブートソースからブートヘッダをロードし、ブートヘッダを認証する。プロセッサ2112は、メインPMCファームウェアを(必要に応じて)認証及び復号することができる。プロセッサ2112は、ブートヘッダと認証証明を外部ブートデバイスからPMC共有RAM2118にロードする。プロセッサ2112は、ブートヘッダに基づいてPDIイメージの残りの部分がどのように認証され、必要に応じて復号され、解釈されるかを判定することができる。ブートヘッダは、デバイス鍵及びPUF暗号化された黒鍵と共に使用される初期化ベクトルを含むことができる。認証証明は、ECDSA/RSA一次公開鍵及び二次公開鍵を含み得る。一次鍵は、二次公開鍵を認証するために使用され、認証の後続の段階に使用される。
【0229】
ブロック2616において、プロセッサ2112は、エラー状態が発生したか否かを判定する。エラー状態が発生した場合、方法2600はブロック2618に進み、SoC100がロックダウンされ、例えば、ブートが中断される。
【0230】
ブロック2620において、プロセッサ2112は、BootROMを実行する際に、PDIのプログラミング区画をロードし、認証し、復号することができる。ブロック2622において、プロセッサ2112は、エラー状態が発生したか否かを判定する。エラー状態が発生した場合、方法2600はブロック2624に進み、SoC100がロックダウンされ、例えば、ブートが中断される。
【0231】
ブロック2626において、プロセッサ2112は、プラットフォームローダ及びマネージャステージを実行する。一態様では、RAM専用プロセッサ2112は、プラットフォームローダ及びマネージャステージを実行することができる。ブートヘッダに含まれる命令に応じて、プロセッサ2112は、様々な動作のいずれかを実行することができる。例えば、ブロック2628において、プロセッサ2112は、PSブートローダステージを実行することができる。プロセッサ2112は、PSプロセッサによる実行のために、PSブートコードを外部ソースからロードし、PSブートコードを認証し、PSブートコードをPS106内のOCMにコピーすることができる。
【0232】
ブロック2630において、プロセッサ2112は、PLを構成することができる。例えば、プロセッサは、外部ソースから構成ビットストリームをロードし、構成ビットストリームを認証し、構成ビットストリームをPLに提供することができる(例えば、構成ビットストリームをPLの構成レジスタに書き込む)。
【0233】
ブロック2632において、プロセッサ2112は、DPEアレイを構成することができる。プロセッサ2112は、外部ソースからDPEアレイプログラミングセグメント(例えば、DPEアレイの構成画像)をロードし、DPEアレイプログラミングセグメントを認証し、NPI710及びNoC108を介してDPEプログラミングセグメントを適切な宛先(DPEアレイ内の特定のDPE)に書き込むことができる。
【0234】
ブロック2634において、プロセッサ2112は、1つ以上の回路ブロックを構成することができる。回路ブロックは、内部の構成レジスタのプログラミングなどの構成データを必要とするハードワイヤード回路ブロック又はPL104に実装された回路ブロックであってもよい。プロセッサ2112は、外部ソースからレジスタプログラミングセグメントをロードし、レジスタプログラミングを認証し、NPI710及びNoC108を介して宛先にレジスタプログラミングを書き込むことができる。例示的かつ非限定的な例として、プロセッサ2112は、SMID回路ブロック2402、PPC2418、及び/又は他のハードワイヤード回路ブロック(例えば、暗号回路ブロック、ADC、DACなど)にレジスタデータを書き込むことができる。
【0235】
ブロック2636において、プロセッサ2112は、NoC108を構成することができる。例示的かつ非限定的な例として、プロセッサ2112は、
図11に関連して説明したようにNoC108を構成することができる。ブロック2638において、プロセッサ2112は、任意のメモリを構成することができる。例えば、プロセッサ2112は、任意のメモリコントローラ及び/又はSoC100によってアクセス可能な外部メモリとのインターフェースに構成データを書き込むことができる。
【0236】
プロセッサ2112によってプラットフォームローダ及びマネージャステージの間に実行される様々な動作は、互いに独立していてもいなくてもよい。場合によっては、動作は同期して実行されてもよい。例えば、明示的に説明されていないが、NPI710用の画像は、PL104を構成することができる前にロードされてもよい。ブロック2626内のサブブロックの特定の順序は、本発明の構成を限定するものではない。
【0237】
図26は、PMC1602がPS106、PL104、DPEアレイ102、及び選択された他の回路ブロックの構成を担当することを示している。1つ以上の他の実施形態では、例えばブートヘッダに応じて、PMC1602は、PS106がPL104及びDPEアレイ102を構成することを可能にするプログラムコードを用いて、PS106を構成することができる。その場合、ブロック2628におけるPSの設定に応じて、ブロック2630、2632、及び2634は、PMC1602におけるプロセッサ2112とは対照的に、PS106によって実行され得る。
【0238】
方法2600が進行するにつれて、進行における各レベルは、コンポーネントがSoC100内の他のコンポーネントにアクセスするための許可を有効化又は無効化する。
図26に関連して説明したプロセスは、SoC100内のサブシステム及び/又はコンポーネントの次第に狭くなるサブセットに対して認証が拒否又は認可され得るという点で階層的である。
図26に示す技法の階層的な態様は、フィールドプログラマブルゲートアレイ(FPGA)-as-a-Service又は「FaaS」処理環境で使用するためのSoC100構成をサポートすることができる。例えば、PMC1602は、SoC100に複数の区画を作成することができる。区画の作成において、PMC1602は、1つの物理的な宛先にマッピングされた多くの論理宛先をマッピングすることができる(例えば、PL104に実装された複数の回路ブロック、DPEアレイ102に実装された複数の独立したDPEクラスタなど)。同様に、PMC1602は、多くの物理的な宛先が1つの論理宛先にマッピングされた区画をSoC100に作成することができる。
【0239】
SoC100のランタイムに、SMID回路ブロック2402及びPPC2418は、記載されたSMIDからPPCへの許可バインドに基づいて複数の異なる区画をサポートすることができる。これらの異なる区画は、SoC100上で利用可能な特定の機能及び/又はコンポーネントによってサービスされ得る。SoC100は異なるサブシステムにわたって構成、再構成、及び/又は部分的に再構成され得るので、区画を作成し、区画間のファイアウォール機能を実施する許可及び認証のマッピングは、動的に変更され得る。
【0240】
図27は、SoC100をブートするために使用され得るPDI2700の例を示す。
図27の例では、PDI2700は、ブートヘッダ2702を含む。PDI2700は、プラットフォームローダ及びマネージャ(PLM)2704をさらに含む。PLM2704は、セキュアヘッダ2706と、PMC1602のプロセッサ2112によって実行可能なファームウェア2708とを含み得る。PDI2700は、認証証明2714も含む。
【0241】
PDI2700の次の画像2710は、ブロック0、ブロック1~ブロックNとして示される複数の異なるブロックを含むことができる。次の画像2710に含まれる様々なブロックは、セキュアヘッダ2712において指定されてもよい。一般に、様々なブロック0~Nは、PSブートコード、PL用の構成ビットストリーム、DPEアレイプログラミングセグメント、及び
図26のブロック2628、2630、2632、及び2634で参照されるレジスタプログラミングデータに対応する。特定の実施形態では、これらのブロックは、アプリケーション(例えば、区画)に従って編成することができ、複数のブロックは、第1の区画での実装のための1つのアプリケーションを表し、ブロックの異なるセットは、第1のアプリケーションと同時に第2の区画で、又は第1のアプリケーションの実行が終了した後に第1の区画で実装することができる別のアプリケーションを表す。
【0242】
SoC100の1つ以上の部分の部分的再構成は、経時的に、かつ特定の条件に応じてPDI2700(又は異なるPDI)に含まれる利用可能な及び/又は異なるブロック又はブロックのセットを使用してブロック2628~2638のうちの異なるブロックを選択的に実行するPMC1602によって実行され得る。SoC100の部分的再構成は、SoC100内の物理コンポーネントのサブセット又は全体又はそれらの論理サブセットへの階層化を容易にする。例えば、PMC1602は、区画の分離、(変更されたアプリケーションに適切であるように)ソフトウェアドライバのアンロード(及びロード)、任意の二次ブートインターフェースからのプログラミングイメージの配信、並びにプログラミングが行われる前のイメージ認証及び完全性チェックを制御することができる。
【0243】
図28は、異なる区画を実装するSoC100の別の例を示す。
図28の例では、様々な異なる画像がSoC100に順次ロードされ得る。これらの異なる画像はその中に異なる区画を実装し、FaaS処理環境を例示し、プラットフォームプロバイダはSoC100内に「シェル」設計を実装して、より大きなシステム内のSoC100との通信を容易にし、SoC100内の複数の異なるユーザ(例えば、PCIeリンクを介してSoC100に結合されたホスト処理システムのユーザ)に対応するユーザアプリケーションの実装を同時に容易にする。
【0244】
図28の例では、ホストデータ処理システム2802を含むシステム2800が示されている。ホストデータ処理システム2802は、サーバなどのコンピュータシステムとして実装されてもよい。ホストデータ処理システム2802は、異なるユーザ(例えば、異なるプロセス、異なるアプリケーションなど)に割り当てられ得る複数の異なるCPUを含む。例示の目的で、
図28は、システム2800を使用する2人の異なるユーザX及びYを示す。このように、ホストデータ処理システム2802のCPUは、ユーザX及びユーザYに割り当てられている。したがって、ホストデータ処理システム2802は、ユーザXのCPU2804及びユーザYのCPU2808を含む。ホストデータ処理システム2802は、SoC100との通信を確立することができるホストインターコネクト2806をさらに含む。例えば、ホストインターコネクト2806は、PCIeリンクを介してSoC100と通信可能なPCIeノードであってもよい。
【0245】
ホストデータ処理システム2802は、ホストメモリ2810に接続される。ホストメモリ2810は、揮発性及び/又は不揮発性メモリを含むことができる。図示されているように、ホストメモリ2810は、ユーザXとユーザYとの間で分割されている。したがって、ホストメモリ2810は、ユーザXに割り当てられたユーザXのメモリ2812と、ユーザYに割り当てられたユーザYのメモリ2814とを含む。
【0246】
SoC100は、PCIeリンクを介してホストデータ処理システム2802に接続される回路基板又はカードに結合されてもよい。回路基板は、SoC100と、SoC100のためにローカルである外部RAM2836とを含み得る。SoC100内に実装されるシェル設計は、SoC100内に複数の区画を作成する。SoC100に関連して本明細書で使用される「区画」という用語は、その区画内で実装される任意のアプリケーションによる使用のために割り当てられた又は予約されたSoC100リソースの集合又はセットを指す。
【0247】
シェル自体は、その中のリソースを管理することができるSoC100の選択されたコンポーネントを含むという点で、区画を占有することができる。シェルは、作成された異なる区画に実装された異なるアプリケーションが経時的に管理され得るように、SoC100の構成及び管理などの機能を提供する。例示的な例として、PMC1602及びPMC1602を参照して本明細書に記載される様々な機能は、FaaSプロバイダがSoC100及びそれらのそれぞれの区画内の異なるユーザ又はアプリケーションの実装を管理できるように、シェルの一部であってもよい。別の態様では、PMC1602はシェルから独立していてもよいが、シェルによってのみアクセス可能であり、その結果、様々な区画に実装されたアプリケーションはPMC1602にアクセスすることができない。シェルには、他の区画と同様にファイアウォールがあってもよい。しかしながら、シェルは、他の区画とは異なり、SoC100に実装された異なる区画、及び各区画に実装された特定のロール/ユーザを監視し、アクセスすることができる。
【0248】
一態様では、シェル(図示せず)は、変化しないSoC100内の静的領域として実装されてもよく、区画は、SoC100内の動的に再構成可能な領域として実装されてもよい。シェルは、例えば、PCIeノード(例えば、2816、2820)やDMA(2816、2822)、メモリコントローラなどを含み得る。例えば、シェルは、SoC100の外部に位置する回路と通信するために必要なインターフェースを含むことができる。このようにして、動的に再構成可能な領域として実装された区画は、シェルが中断されずに動作するため、SoC100がホストデータ処理システム、RAM、及び/又は他の外部デバイスへの通信リンクを維持することができる間に、経時的に異なるアプリケーションを実装するように再構成することができる。シェルは、アプリケーションが区画に実装されるとアプリケーションがシェルと通信し、及び/又はシェルを介してデバイス及び/又は回路(例えば、ホストデータ処理システム2802及び外部RAM2836などの外部回路及び/又はデバイス)にアクセスすることができるように、区画へのインターフェースを含む。シェルは、PS106の部分、PL104の部分、NoC108の部分、及び/又は1つ以上のハードワイヤード回路ブロック110を使用して実装され得る。
【0249】
図28の例では、SoC100は、2つの区画(例えば、シェルの静的領域を含まない)に分割される。各区画は、その区画で実行されている特定のアプリケーションによって使用されるSoC100のリソースのサブセットを有するか、又は含む。例えば、SoC100は、ユーザXによる使用のために割り当てられた様々なリソースを含む第1の区画(例えば、区画X)を含む。SoC100は、ユーザYによる使用のために割り当てられた様々なリソースを含む第2の区画(例えば、区画Y)を含む。区画、したがってユーザX及びユーザYは、SoC100を同時に占有することができ、互いに対してファイアウォールがある。区画X及び区画Yは、動的に再構成可能な領域である。
【0250】
図28の例では、区画X及び区画Yは、リソースの同等のサブセットを含むように見える。しかしながら、これはそうである必要はない。一方の区画には、他方の区画よりも多くの又は少ないリソースが割り当てられてもよい。SoC100に実装されるようなシェル、及びPMC1602は、区画、及び区画間のSoCリソースの割り当てを確立することができる。シェルによって確立されると、シェル及び/又はPMC1602及びホストデータ処理システム2802は、異なる区画内にユーザアプリケーションを実装し、各区画に実装されたアプリケーションを経時的に変更することができる。
【0251】
例えば、区画Xに割り当てられたSoC100のリソースに斜線が付される。ユーザXに対応する区画Xは、PS106からのPCIeA/PF/VF回路ブロック2816、DMA2818、PL104に実装された1つ以上のPL機能2824(例えば、回路ブロック)、利用可能なハードワイヤード回路ブロックの1つ以上のGT2032、MAC2030、及びPCIPB2842、DPEアレイ102の1つ以上のDPE204、並びにユーザXのSoCメモリ2838として示されている外部RAM2836の領域を含む。斜線が付されていないSoC100のリソースが割り当てられている、ユーザYに対応する区画Yは、PS106からのPCIeA/PF/VF回路ブロック2820及びDMA2822、PL104に実装された1つ以上のPL機能2828(例えば、回路ブロック)、利用可能なハードワイヤード回路ブロックの1つ以上の他のGT2032、別のMAC2030、及び別のPCIPB2842、DPEアレイ102の1つ以上の他のDPE204、並びにユーザYのSoCメモリ2840として示されている外部RAM2836の異なる領域を含む。
図28の例では、暗号回路ブロック2826(例えば、ハードウェアアクセラレータエンジン)は区画Xと区画Yとの間で共有されているが、これはそうである必要はない。
【0252】
区画X及び区画Yの各々は、NoC108を通る信号経路と、外部RAM2836にアクセスするための1つ以上のメモリコントローラ(図示せず)へのアクセスとを有する。信号経路は、それぞれの各区画で実施されるアプリケーションのPDIをロードすることによって確立される(例えば、アプリケーションを形成するDPE構成データ、NoC構成データ、PL構成データ、及び/又はPS構成データ)。PCIB2842及び2844は、外部記憶装置にアクセスするために使用されてもよい。
【0253】
この例では、PMC1602(例えば、シェル内にあるか、又はシェルの制御下で動作するかのいずれか)は、区画X内のリソースが区画Y内のリソースに、及びその逆に、誤って又は悪意を持ってアクセスすることを防止するために、適切な識別子及び許可バインドを用いてSMID回路ブロック及びPPCを構成している。例外は、この例では両方の区画が暗号化回路ブロック2826にアクセスできることである。各々が独立したデータ経路、割り込み、制御信号などを有する分離及びファイアウォールが達成されることは、一方の区画内のアプリケーションの誤動作又はエラーが、他方の区画内のアプリケーションの動作に影響を及ぼさないことを意味する。
【0254】
区画X及び区画Y間のPCIeA及びDMAリソース割り当てを参照すると、SoC100とホストデータ処理システム2802との間のPCIeトラフィックのセキュリティ、パフォーマンス、及びエラー分離は、シェル及び/又はPMC1602によって実装されるFaaSマルチテナント分離構成に基づいて、様々なレベルの粒度で達成することができる。一態様では、例えば、複数のPCIe Root Portを有するデュアルソケットホストデータ処理システム又はシングルソケットホストデータ処理システムは、SoC100で動作することができ、SoC100は、区画X及び区画Yの各々に1つのPCIeAコントローラを割り当てるように構成される。区画間のパフォーマンス分離は、一方の区画のSoCトラフィックに対するホストデータ処理システムのバーストが他方の区画に利用可能な帯域幅を妨げないように達成され得る。さらに、1つの区画のPCIeリンクエラー又はPCIeリンクダウン状態をその区画に分離することができる。PMCは、区画Xの電力管理機能を区画Yから分離することができる。
【0255】
SoC PCIe接続に対する単一ホストデータ処理システムを有するホストデータ処理システムは、区画X及び区画Yの各々に1つのPCIe物理機能(PF)を割り当てるように構成されたSoC100を有することができる。したがって、一方の区画に関連付けられたPFのPCIe機能レベルリセット(FLR)は、エラー検出及びリカバリ動作を他方の区画から分離することができる。PCIe PASID TLPプレフィックス及びアドレス変換キャッシュ(ATC)は、ホストデータ処理システム2802上で実行されるユーザX及びユーザYと、SoC100上で実装されるユーザX及びユーザYの役割機能(例えば、それぞれの区画X及び区画Yに実装されるアプリケーション)との間の共有仮想メモリ相互作用のために同時にかつ独立して利用することができる。
【0256】
図28のデュアルテナントの例は、区画間のPL104及びメモリリソース割り当てが実行され得ることを示している。各区画は、PL104の一部と、その区画に実装されたアプリケーションのサービスで利用可能な関連するメモリリソースとを有することができる。シェルは、特性化されたPL使用及びパフォーマンスメトリックを有する機能の標準的な予め設計されたライブラリをユーザX及びYに利用可能にすることができる。代替例では、ユーザX及びYの各々は、SoC100の利用可能なユーザごとの分割されたリソースを利用する1つ又は複数のカスタム機能を展開することができる。
【0257】
図28に示すように、外部RAM2836(例えば、DDR)は、区画間で割り当てられてもよい。シェルによって実装されるFaaSマルチテナントソリューションは、ユーザ間のオフチップメモリリソースのセキュリティ、パフォーマンス、及びエラー分離を達成することができる。これは、様々なレベルの粒度で達成することができる。例えば、複数のDDRコントローラを有するSoC100は、複数のDDRコントローラを含むように構成されてもよく、1つ以上がユーザXに割り当てられ、1つ以上の他のDDRコントローラがユーザYに割り当てられる。パフォーマンス分離は、例えば、ユーザXの先頭の回線ブロック又はページ衝突のいずれかによるDDR帯域幅の低下が、その中で実行されるアプリケーションのユーザYの帯域幅に影響を与えないように達成され得る。
【0258】
別の例では、SoC100は、複数のDDRコントローラをSoCアドレスマップにわたってインターリーブするように構成され得る。さらに、オフチップメモリ(例えば、外部RAM2836)のアドレス空間は、SMIDとPPCとの組合せを使用してユーザごとに予約及び分離することができる。したがって、1つの区画で実行されているアプリケーションが別の区画のアドレス空間にアクセスすることは防止される。この分離は、複数のDDRコントローラを使用することによって可能な集約帯域幅を達成しながら達成され得る。
【0259】
NoC108は、区画Xに割り当てられたSoC100上のコンポーネントと区画Yに割り当てられたSoC100上のコンポーネントとの間のデータ移動及び通信のために、区画間のセキュリティ、パフォーマンス、及びエラー分離を提供することができる。分離は、FaaSマルチテナント分離構成に基づいて様々なレベルの粒度で達成され得る。例えば、NoC108及びNoC108のバッファリングリソースを利用する回路ブロック対回路ブロック及び回路ブロック対メモリ経路は、ユーザごとに割り当てることができる。NoC108は、例えば、NoC物理経路及びそれらの専用仮想チャネルがユーザ(例えば、区画)ごとに割り当てられるようにプログラムすることができる。説明したように、SMIDは、ソース又はその周囲のトランザクションに挿入されるか、及び/又はNoC108エントリポイントに実装されたSMID回路によって挿入されるかにかかわらず、トランザクションがNoC108から出現したときにユーザ間のファイアウォールを強制するためにPPCによって使用され得る。別の例では、NoC108物理経路及び専用仮想チャネルは、ユーザ間で共有されてもよい。
【0260】
外部I/Oコントローラ及びハードウェア加速ブロックはまた、ユーザ間で割り当てられてもよい。例えば、ユーザXにはGT2032、MAC2030、及びPCIB2842のうちの特定のものが割り当てられ、ユーザYには異なるGT2032、異なるMAC2030、及び異なるPCIB2844が割り当てられる。したがって、ユーザX及びユーザYの両方が、専用のPCIe及びイーサネットインターフェースコントローラ及び関連するI/Oを有する。
【0261】
しかしながら、他の構成では、SoC100は、内蔵ファイアウォール機能を使用してユーザX及びユーザYをサポートし、PCIe及びイーサネットインターフェースコントローラ及び関連するI/Oを同時に共有する。さらに、図示の例では、ユーザXとユーザYの両方が暗号回路ブロック2826へのアクセスを共有する。ブロックは、異なるユーザによるハードワイヤード回路ブロックへの共有アクセスを表すためにのみ各区画に示されている。暗号回路ブロック2826は、ユーザX及びユーザYに暗号化/復号化サービスを提供することができ、各ユーザは、固有の暗号鍵を有する暗号回路ブロック2826を使用する。これは、データトラフィックがPCIeによってサービスされるかイーサネットによってサービスされるかにかかわらず当てはまる。
【0262】
図26、
図27、及び
図28を組み合わせて参照すると、本質的に階層的であるSoC100のブートプロセスは、
図28に関連して説明したFaaSユースケースを容易にする。例えば、SoC100のブートコードは、PDI2700のブロック0として(例えば、SoC100の製造業者から)最初に提供されてもよい。次に、FaaSプロバイダによって作成されたシェルが、PDI2700のブロック1としてロードされてもよい。シェルは、上述したように、各区画にリソースを割り当てることによってSoC100の区分を確立する。しかしながら、SoC100のリソースは、分割されている間、構成されない。続いて、区画X及び区画Yにそれぞれ実装されるアプリケーションに対応するブロック2及びブロック3がロードされる。
【0263】
実装される際、各アプリケーションは、そのアプリケーションが実装されている区画に割り当てられているSoC100のリソースのみを認識する。ファイアウォールの一部として、PMC1602は、各ユーザがそのユーザの区画に対応する構成空間にアクセスすることのみを可能にするように構成される。言い換えれば、PMC1602は、(PLの特定のサブセット、DPEアレイの特定のサブセット、及び/又はPS内の特定の要素について)区画Xに割り当てられたSoC100リソースのための構成空間(例えば、構成レジスタ)にユーザXがアクセスすることのみを可能にする。同様に、PMC1602は、(PLの特定のサブセット、DPEアレイの特定のサブセット、及び/又はPS内の特定の要素について)ユーザYが区画Yに割り当てられたSoC100リソースのための構成空間にアクセスすることのみを許可する。
【0264】
PMC1602は、様々な回路ブロック(例えば、
図23に関連して説明した共通のインターフェースを参照)の割り込みが各区画において有効化及び無効化されるプログラミングが可能である。PMC1602はさらに、特定の割り込みを特定のSMIDに関連付けることができる。このフレームワークを使用して、ユーザXは、例えば、設計(例えば、区画Xに割り当てられたPS106の部分で実行される区画Xのためのアプリケーションの部分)が割り込みを処理する目的でドメイン内の1つ以上の異なる回路ブロックを区別する必要がないと判断することができる。例えば、区画X内のPSコンポーネントは、区画X内のユーザ定義のブロックが割り込みをトリガしたか、又は区画X内のハードウェアアクセラレータブロックが割り込みをトリガしたかにかかわらず、同じ割り込みサービスルーチンを実行することができる。
【0265】
上述したように、
図28の例では、区画X及び区画Yは、リソース割り当てに関して実質的に同じであるように示されている。しかしながら、他の例では、区分は、各ユーザ及び/又はアプリケーションの必要性に合わせて調整されてもよい。例えば、ユーザYがユーザXよりも少ないリソースを必要とする場合、区画Yよりも多くのリソース及び/又は帯域幅を区画Xに割り当てることができる。区分は、例えば、ユーザXによるリソース使用量の増加に対応するために、NoC108上の帯域幅を増加させてユーザXに提供する。区画は、それぞれのユーザによるリソース割り当て及び/又は使用に関して対称である必要はない。
【0266】
マルチテナントFaaSのユースケースでは、いずれのユーザもSoC100上の他のユーザに気付かない。これに関して、ユーザXによるSoC100の使用量の増加は区画Xに限定され、ユーザYによるSoC100の使用量を低下させない。区画は、パフォーマンス、エラー処理、及び信頼性に関して独立性を維持する。
【0267】
マルチテナントの例では、ユーザが動作を完了すると、完了したユーザに割り当てられた区画に他のユーザが実装されてもよい。例えば、ユーザYが特定のエンドユーザにビデオを配信することに関連するビデオ処理を実行している間に、ユーザXが長時間にわたって行われ得る拡張処理を実行することを意図している場合を考える。エンドユーザがビデオコンテンツの消費を停止すると、ユーザYはSoC100上の区画から削除され得る。別の異なるユーザ、例えばユーザZは、部分的再構成を使用してユーザYによって以前に使用された区画Yに実装されてもよい。これが行われている間、ユーザXは、シェルのように中断されることなく区画X内で動作し続けることができる。部分的再構成は、ユーザYによって以前に使用された区画内のリソース及び/又は接続性のいずれかを再構成することができる。すなわち、区画に実装された新しいユーザは、異なる構成及び/又は機能性(例えば、リソースの各サブセットにロードされる異なる構成イメージ及び/又は異なるSMID及び許可バインド)ではあるが、ユーザYによって以前に使用されたPL、NoC、PS、及び/又はDPEアレイの任意の組合せを使用することができる。新しいユーザは、例えば、ビデオを配信するのではなく、オーディオ処理を行ってもよい。
【0268】
図29は、異なる区画を実装するSoC100の別の例を示す。
図29は、SoC100が自動車又は他の車両で利用される例示的なユースケースを示す。図示されているように、SoC100は、2つの異なる区画2902及び2904に分割される。区画2902は、リアルタイム処理を行うアプリケーションを実装する。図示されているように、区画2902は、RPU2910と、1つ以上の外部通信回路ブロック(例えば、I/O及び/又はインターフェース)2908と、ローカルRAM2912とを含むリアルタイム処理ドメイン2902を含む。一態様では、RPU2910、外部通信2908、及びローカルRAM2912は、PS106内に実装され得る。リアルタイム処理ドメイン2906は、NoC108を介してDDRコントローラ2914に接続される。PPC2920は、メモリ保護及びファイアウォールを提供する。図示されるように、NoC108及びPPC2920は、区画2902及び区画2904の両方によって使用され得るグローバルリソースである。
【0269】
区分2904は、区分2902から独立している。したがって、区画2904における処理、エラー、及び/又はパフォーマンスの問題は、区画2902に影響を与えない。区画2904に実装されたアプリケーションは、プログラマブル機能1、2、及び3として示された複数の異なる機能を実行する。プログラマブル機能は、DPEアレイ102及びPL領域104を利用する。プログラマブル機能1は、画像処理を実行し、PL104に実装されたコンピュータビジョン機能2918に接続された1つ以上のDPE2916を利用することができる。PL104内のコンピュータビジョン機能2918(例えば、PL104に実装された標準コア及び/又はPL104のユーザ定義の回路ブロック)は、NoC108に接続し、PPC2920を介して複数のインターリーブDDRコントローラ2922に接続する。プログラマブル機能2は、機械学習を実行し、PL104に実装された機械学習機能2926に接続された1つ以上のDPE2924を利用することができる。PL104内の機械学習機能2926(例えば、PL104に実装された標準コア及び/又はPL104のユーザ定義の回路ブロック)は、NoC108に接続し、PPC2920を介して複数のインターリーブDDRコントローラ2922に接続する。プログラマブル機能3は、外部デバイスへのインターフェースを提供し、PL104に実装された外部インターフェース2928を利用することができる。PL104内の外部インターフェース2928(例えば、PL104に実装された標準コア及び/又はPL104のユーザ定義の回路ブロック)は、NoC108に接続し、PPC2920を介して複数のインターリーブDDRコントローラ2922に接続する。
【0270】
図29は、自動車又は他の車両内の1つ以上のカメラ及び/又は他のセンサから取得されたビデオデータストリームに対して画像処理を実行するために区画2904が使用され得る例を示す。区画2904は、例えば、車線検出、物体認識、他のコンピュータビジョンタスク、及び/又は機械学習などの動作を実行することができる。区画2902は、制御及び通信機能を実行することができ、他のタイミングクリティカルなリアルタイムタスクも管理することができる。関心のある特徴、例えば、各区画によって取得及び/又は生成されたデータは、各区画内のそれぞれのマスタ及びPPC2920に割り当てられたSMIDによって決定されるように、両方の区画によってアクセス可能なDDRメモリ内の共有領域からアクセスすることができる。
【0271】
上述したように、区画2902及び区画2904は互いに分離されている。さらに、区画2902及び区画2904は、互いに干渉しないように動作する。例えば、区画2904でエラーが検出された場合、区画2902に実装されたアプリケーションは、区画2904が回復されている間(例えば、区画をリセットし、部分的再構成によってその中にアプリケーションをリロードすることによって)、動作し続けることができる。
【0272】
SoC100に実装されるアプリケーションは、PMC1602によるリソースのSoC100ブート時間割当てに基づいて実装されてもよい。PMC1602は、例えば、プログラム可能なアドレスマップを使用して、2つの区画の各々のアドレス指定可能性を作成する。NoC108は、区画2902及び区画2904の各々を介してQoS制御データ経路を提供する。NoC108を通るデータ経路は、干渉からの自由度を保証するためにデータ経路間の分離によってプログラムされる。PMC1602は、メモリ保護回路2920をプログラムして、DDR、SRAM、周辺機器、及び他の区画などのリソースへのアクセスを提供する(及びアクセスを制限する)。
【0273】
PMC1602はまた、例えばランタイムにおいて、SoC100の動作中に一方又は両方の区画(例えば、部分的再構成の実行する)を動的に再構成することができる。例えば、区画2904で実行されるアプリケーションは、異なるコンピュータビジョン及び/又は機械学習動作を実行するために、ランタイム中に異なるバージョンのアプリケーションで置き換えることができる。例示的かつ非限定的な一例として、区画2904で実行されるアプリケーションを、前向きカメラを用いて運転支援を行うもの(例えば、より高速で運転するため)から、駐車支援を行い後ろ向きカメラを用いるものに変更してもよい。例えば、車両内で順方向から逆方向に切り替えるのに必要な時間は、区画2904の部分的再構成をトリガし、区画2904を部分的に再構成するのに十分であり得る。運転支援及び駐車支援機能は、例示のみを目的として提供されている。それぞれの各区画に実装されたアプリケーションは、異なるセンサデータを使用し、センサデータを異なる方法で処理することができる。別の例では、デバイス全体は、区画2902及び区画2904の各々に異なる区分及び/又は異なるアプリケーションを実装するように再構成され得る。
【0274】
自動車のユースケースは、区分が暗号化区画及び/又は非暗号化区画を含み得るさらなる特徴を例示する。例えば、一方の区画は、安全上重要な機能を実行するための高い信頼性を有する安全ゾーンで実装されてもよく、他方の区画は、娯楽機能(例えば、ビデオストリーミング及び/又はオーディオ処理)を提供する際に必要な安全機能が少なくてもよい。それでも、区画にはファイアウォールがある。
【0275】
図29の例では、1人のユーザが区画2902と区画2904の両方を所有しているため、シェルを実装する必要はない。すなわち、
図28と
図29の両方が区分の例を示しているが、
図28は、複数のユーザがSoC100を同時に使用することができるマルチテナントモデルを示しており、
図29では、両方の区画を所有する単一のユーザがSoC100を使用している。
図28に関連して説明したシェルは、PMC1602と組み合わせてマルチテナント実装を管理することができる。
【0276】
図30~
図32は、SoC100内でPDIを実装する異なる例示的なユースケースを示す。
図30~
図32の例は、PMC1602などの集中コンポーネントがPL104、PS106、NoC108、DPEアレイ102、及びハードワイヤード回路ブロック110を含むデバイス全体を構成する能力など、本明細書で前述したSoC100の様々な特徴を示す。上述したように、場合によっては、PS106は、PL104、NoC108、DPEアレイ102、及びハードウェア回路ブロック110を構成することができる。
【0277】
図30~
図32はまた、同じ区画内の様々な回路コンポーネントを接続するためのNoC108などのSoC100の共通インフラストラクチャの使用を例示する。
図30~
図32は、再マッピングの異なる例をさらに示す。再マッピングの一例は、SoC100の区画内のリソースが経時的に他の異なるアプリケーションによる使用のために再構成される動的部分的再構成を指す。再マッピングの別の例は、SoC100リソースが経時的に異なる区画を作成するように再構成される場合である。
【0278】
図30は、SoC100内にPDIを実装する例示的な方法3000を示す。SoC100に実装されるPDIは、複数の異なる区画を実装するための構成データを含み得る。典型的には、複数の異なる区画を指定するPDIは、一次区画又はマスタ区画として機能する1つの区画を含む。この区画は、他の二次区画又はスレーブ区画を制御することができる。例示的な例として、
図28のFaaS例に関連して本明細書で説明されるシェル設計は、一次区画として動作することができる。別の例では、
図29に示すリアルタイム処理ドメインは、一次区画として動作することができる。
【0279】
ブロック3002において、SoC100の電源が投入される。ブロック3004において、PMC1602の電源が投入され、SoC100の初期セキュリティ設定が実行される。PMC1602は、例えば、
図26に関連して本明細書で前述したような1つ以上の動作を実行することができる。
【0280】
例えば、ブロック3004において、PMC1602は、SoC100内の1つ以上の回路ブロックの初期設定を行うことができる。初期設定は、例えば、SoC100内のクロックのセットアップ及びセキュリティ設定を含む。PMC1602は、SoC100の様々なPPCに構成データを書き込むことができる。この段階で、PMC1602は、PMC1602のみがPPC及び/又はPPCによって保護された特定のスレーブにアクセスすることを許可する構成データを書き込むことができる。PMC1602はさらに、SMID回路を構成することができる。
【0281】
別の態様では、PMC1602は、初期構成設定をDPEアレイ102のグローバルレジスタに書き込むことができる(図示せず)。PMC1602は、例えば、これらのグローバルレジスタにアクセスするためにNPI710に書き込むことができる。グローバルレジスタは、例えば、DPEがSMIDで自身をどのように識別するかを指定することができる。
【0282】
電源投入時のデフォルトでは、NoC108はデータ経路を用いて構成されない。電源投入後に任意の他の回路ブロックと通信する目的でNoC108を利用することができる回路ブロックはない。しかしながら、PMC1602は、NPI710を使用してNoC108をプログラムして、プログラミング目的のためにDPEアレイ102への初期データ経路を確立することができる。NoC108を初期設定する例示的な方法は、
図10に関連して説明される。初期データ経路は、PMC1602によって構成されると、DPEアレイ102内の他の構成レジスタに(例えば、個々のDPE204のコア、メモリモジュール、DMA、スイッチなどをプログラムするために)書き込むことによってアプリケーションをDPEアレイ102内にプログラムするためにPMC1602によって使用され得る。
【0283】
一態様では、PMC1602は、SoC100内に含まれる他のサブシステム及び/又はコンポーネントから独立したSoC100の電力ドメインで動作し得る。SMID回路及び/又はPPC回路は、PMC電力領域に含まれ得る。これにより、PMC1602は、SoC100のアクティブ及び信頼の中心を保ちながら、他のサブシステムを独立してパワーアップ又はパワーダウンすることができる。さらに、PMC1602によって作成されたセキュリティ設定は、SMID回路及び/又はPPCによって、そのような回路によって保護されている特定のサブシステムの電源が切られているにもかかわらず保持され得る。
【0284】
ブロック3006において、PMC1602は、PDIをSoC100にロードする。PMC1602は、PDIを実行して区画を作成し、区画にアプリケーションを実装する。PDIは、例えば、SoC100の異なる区画の各々に実装される複数の区画及び1つのアプリケーションを指定する。PDIは、一次区画及び1つ以上の二次区画を指定することができ、各区画はアプリケーションを実装する。一例では、PDIは、SoC100にロードされてPMC1602によって実行されると、
図28に関連して説明したように区画を実装する。区画は、シェルと、2つ以上の異なるユーザ区画とを含み得る。別の例では、PDIは、SoC100にロードされてPMC1602によって実行されると、
図29に関連して説明したように区画を実装する。
【0285】
ブロック3006を実行する際に、PMC1602は、
図26のブロック2620に関連して説明したようにPDIを認証することができる。さらに、PMC1602は、
図26のブロック2626に関連して説明したようにPDIを実行することができる。PMC1602は、PL104の部分、PS106の部分、NoC108の部分、DPEアレイ102の部分、及び/又はPDIによって指定されるそれぞれの各区画によって使用される任意のハードワイヤード回路ブロックを構成することができる。
【0286】
PDIは、実装ルールを施行する電子設計自動化(EDA)ツールを使用して作成することができる。実装ルールは、一般に、機能(例えば、ユーザ及び/又はアプリケーション)がSoC100内に作成される区画内に収まることを保証する。例えば、SoC100に実装される区分に基づいて、EDAツールは、特定の数のDPE204を「N」個の異なる区画の各々に、特定の量(例えば、タイルの数)のPL104をN個の区画の各々に、特定のメモリコントローラをN個の区画の各々又はN個の区画のうちの特定のもののみに、PS106内の特定のプロセッサをN個の区画又はN個の区画のうちの特定のもののみに、など割り当てることができる。したがって、各アプリケーションが実装されるにつれて、EDAツールは、アプリケーションがSoC100の利用可能な区画に適合して実行できることを効果的に保証する。
【0287】
ブロック3006の一部として、PMC1602は、区画のためのファイアウォール及び分離を実施するために、PDIによって指定された様々な区画のためのセキュリティ設定を調節することができる。例えば、PDIは、PMC1602がSoC100の構成レジスタ、PPC、及び/又はSMID回路に書き込み、回路の構成を完了してファイアウォールを実施し、区画内の回路が区画境界を越えて他の区画の回路リソースにアクセスするのを防ぐ構成データを含む。例えば、PMC1602は、SoC100内の特定の区画によってのみ使用される外部メモリのプール、及びSoC100内の異なる区画によってのみ使用される外部メモリ(例えば、重複しないメモリ)の別のプールを割り当てるようにメモリコントローラを構成することができる。
【0288】
SoC100が構成されると、各区画に実装されたアプリケーションは動作することができる。説明したように、SoC100は、ブロック3006に続いて、
図28又は
図29に関連して説明したように区画及びアプリケーションを実装することができる。
【0289】
図31は、SoC100内にPDIを実装し、SoC100を経時的に再構成する別の例示的な方法3100を示す。
図31の例では、SoC100は、第1のPDIをロードすることによって構成され得る。第1のPDIは、SoC100の特定の区分を指定し得る。その後、トリガイベントに応じて、SoC100は、SoC100の異なる区分を指定する異なるPDIを用いて再設定され得る。PMC1602は、例えば、異なるトリガイベント(例えば、信号及び/又は割り込み)に応答して、経時的に異なるPDIをSoC100にロードする役割を果たす制御プログラムを実行することができる。
【0290】
したがって、ブロック3102において、SoC100の電源が投入される。ブロック3104において、PMCの電源が投入され、SoC100の初期セキュリティ設定が実行される。ブロック3106において、PMCは、アプリケーションをSoC100にロードして複数の区画を作成し、各区画にアプリケーションを実装する。ブロック3102、3104、及び3106は実質的に、それぞれ
図30のブロック3002、3004、及び3006に関連して説明したように実行することができる。
【0291】
ブロック3108において、PMC1602は、トリガイベントが検出されたか否かを判定する。トリガイベントは、SoC100内に実装された様々な異なる回路のいずれかによって検出され得る。そのような回路は、SoC100自体内のトリガイベントを検出し得る、及び/又は外部ソースからのトリガイベントを検出し得る。そのような回路は、トリガイベントの検出に応答して、PMC1602及び/又は一次区画に提供され得る割り込みを生成することができる。いくつかの例示的な実施態様では、PMC1602は一次区画内に含まれてもよい。
【0292】
トリガイベントの検出に応答して、方法3100はブロック3110に続き、異なるPDIをSoC100にロードし、異なるPDIを実行して区画を作成し、区画内にアプリケーションを実装する。
図31の例では、異なるPDIがSoC100の全体を構成し得る。異なるPDIによって指定された区画は、ブロック3108の前に存在した区画と同じであり得るが、区画は完全に異なってもよい。区画に実装されたアプリケーションは、ブロック3106で最初に実装されたアプリケーションとは異なる場合もある。
【0293】
異なるPDIをロードする際に、PMC1602は、例えば、
図26のブロック2620及び2626を実行することができる。例示では、PMC1602は、異なるPDIを認証する。次いで、PMC1602は、異なるPDIから構成データの異なるブロックをロードして、DPE204、PL104のタイル、NoC108内の経路、PS106のコンポーネント、及び/又はハードワイヤード回路ブロック110を、異なるPDIによって指定された異なる区画に割り当てる。ブロック3110における異なるPDIのロードは、SoC100のリソースが異なる区画に効果的に再割り当てされる再マッピングの例を示す。さらに、各区画内のリソースは、異なるアプリケーションを実装するように再構成することができる。
【0294】
ブロック3108においてトリガイベントが検出されない場合、方法3100は、トリガイベントの発生を監視するためにブロック3108をループし続けることができる。ループしている間、最初にブロック3106で実施された区分及びそれぞれの区画に実装されたアプリケーションは、動作し続ける。
【0295】
方法3100は反復し続けることができる。
図31の例は、複数の異なるPDIが利用可能であり、PMC1602が異なるトリガイベントに応答して異なるPDIを経時的にロードする場合を示す。ブロック3108で検出され得る各異なるタイプのトリガイベントは、特定のPDIに関連付けられ得ることが認識されるべきである。これにより、SoC100は、異なる条件に応じて必要に応じて再構成されることが可能になる。上述したように、再構成は、SoC100のすべてのサブシステムに及ぶ。
【0296】
図32は、SoC100内にPDIを実装し、SoC100の部分的再構成を経時的に実行する別の例示的な方法3200を示す。
図32の例では、SoC100は、第1のPDIをロードすることによって構成され得る。第1のPDIは、SoC100の特定の区分を指定し得る。その後、トリガイベントに応じて、SoC100は、1つ以上の区画における機能(例えば、アプリケーション)が動的に再構成される部分的再構成を受けてもよい。従来のFPGAタイプのデバイスにおける部分的再構成は、PL104のいくつかの部分に実装された機能を変更することのみを含み、他の部分は中断されずに動作し続けるが、
図32の例では、部分的再構成は、部分的再構成を受ける区画に含まれる任意のタイプの回路及び/又はサブシステムに及ぶ。
【0297】
したがって、ブロック3202において、SoC100の電源が投入される。ブロック3204において、PMCの電源が投入され、SoC100の初期セキュリティ設定が実行される。ブロック3206において、PMC1602は、PDIをSoC100にロードし、PDIを実行して複数の区画を作成し、各区画にアプリケーションを実装する。複数の区画は、1つの一次区画(例えば、シェル又はリアルタイム処理ドメイン)及び1つ以上の二次区画を含む。ブロック3202、3204、及び3206は実質的に、それぞれ
図30のブロック3002、3004、及び3006に関連して説明したように実行することができる。
【0298】
ブロック3208において、PMC1602は、動的部分的再構成を実行するためにトリガイベントが検出されたか否かを判定する。トリガイベントは、SoC100内に実装された様々な異なる回路のいずれかによって検出され得る。そのような回路は、SoC100自体内のトリガイベントを検出し得る、及び/又は外部ソースからのトリガイベントを検出し得る。そのような回路は、トリガイベントの検出に応答して、PMC1602及び/又は一次区画に提供され得る割り込みを生成することができる。いくつかの例示的な実施態様では、PMC1602は一次区画内に含まれてもよい。トリガイベントの検出に応答して、方法3200はブロック3210に続き、異なるPDIをSoC100にロードして、その中の1つ以上の区画を再構成する。
【0299】
図32の例では、異なるPDIは、「選択された区画」と称されるSoC100の区画を再構成する。選択された区画は、ブロック3206で最初に実装される二次区画であってもよい。したがって、
図30及び
図31はSoC100全体の再構成を示しているのに対して、
図32は単一区画の部分的再構成を示している。すなわち、異なるPDIは、選択された区画の一部であるPL104の特定の部分、PS106の部分、NoC108の部分、DPEアレイ102の部分、及び任意のハードワイヤード回路ブロック110を構成(又は再構成)するための構成データのみを含む。
【0300】
ブロック3210において、PMC1602は、異なるPDIをロードし、異なるPDIを実行して、選択された区画を動的に再構成する。異なるPDIは、動的に再構成されている選択された区画に含まれる任意の回路を構成するためにPMC1602に必要な構成データを含む。ブロック3210を実行する際に、PMC1602は、
図26のブロック2620に関連して説明したように、異なるPDIを認証することが可能である。PMC1602はさらに、選択された区画の一部であるPL104、PS106、NoC108、ハードワイヤード回路ブロック110、及び/又はDPE204の部分に対して
図26のブロック2626を実行することができる。PMC1602は、例えば、選択された区画の一部ではないPL104、PS106、NoC108、ハードワイヤード回路ブロック110、及び/又はDPE204のいずれの部分についても、他の構成データを上書きしない。
【0301】
方法3200は単一の区画の再構成に関連してSoC100の部分的再構成を説明しているが、別の態様では、部分的再構成は、複数の区画を再構成するが、SoC100内のすべての区画より少ない区画を再構成することを含み得ることを理解されたい。
【0302】
例示の目的で、PMC1602がブロック3206においてシェル(図示せず)を含む
図28のアーキテクチャを最初に実装する例を考える。
図28のFaaS例では、PMC1602はシェルに組み込まれてもよい。シェルは静的な不変領域として実装されてもよく、不変領域は、区画を作成し、動的に再構成可能な区画に実装されたアプリケーションを制御することができる。したがって、シェルは、PMC1602を含み得、各二次区画の部分的再構成を制御することができる。シェルは外部I/O及び/又は他のサポート回路を含んでもよく、外部I/O及び/又は他のサポート回路は、1つ以上又はすべての二次区画が再構成されている間、アクティブのままであり、ホスト処理システムに接続される。さらに別の例では、PMC1602はシェルとは別個であってもよいが、シェルによってのみアクセス可能である。
【0303】
図28のFaaS例を続けると、ブロック3210において、PMC1602は、ユーザZ(例えば、別のアプリケーション又は役割)による使用のために区画Yを再構成し得る。選択された区画を再構成する際に、PMC1602は、
図26のブロック2620及び2626に関連して説明したものと同様のプロセスを実行することができる。しかしながら、SoC100の全体を構成するのではなく、ロード及び実行される異なるPDIは、ユーザZによって現在使用されている区画YのDPEアレイ102のDPE204、ユーザZによって現在使用されている区画YのPL104のタイル、及びユーザZによって現在使用されている区画YのNoC108の部分のみをPMC1602に再構成させて、ユーザZの回路間のデータ経路を確立する。PMC1602はまた、ユーザZによって使用される区画YのPS106の部分及び/又はユーザZによって使用される区画Yの任意のハードワイヤード回路ブロックの構成データ(例えば、実行可能コード及び/又はレジスタ設定)をロードすることができる。
【0304】
PMC1602は、区画Xに割り当てられたリソース(例えば、PL104の一部、PS106の一部、特定のDPE204、NoC108の一部、及び/又はハードワイヤード回路ブロック110)に対応する構成レジスタに書き込まないことを理解されたい。したがって、区画Xに実装されたアプリケーションは、ユーザZに対応する異なるアプリケーションが区画Yに実装されている間、中断されずに動作し続ける。
【0305】
別の例では、
図29の場合を考える。その場合、ブロック3206において、PMC1602は最初に区画2902及び区画2904を実装する。区画2902は、低電力ドメイン(例えば、RPU、それに割り当てられたメモリコントローラ、及び区画2902に対応するNoC108を介して確立された接続を有する外部RAMのプール)に対応するアプリケーションを実装する。PMC1602は、区画2904内の機能をさらに実装し、1つ以上のDPEを利用するアプリケーションを実装し、PL104内の1つ以上の回路ブロックを実装し、メモリコントローラ及びNoC108(例えば、区画2904に対応する)内で確立された接続を有する外部RAMの別のプールを使用する。
【0306】
したがって、ブロック3210において、PMC1602は、異なるPDIをSoC100にロードし、異なるPDIを実行する。PMC1602は、例えば、検出された特定のトリガイベントに応じて、異なる機能を実装するために区画2904に異なるアプリケーションを実装してもよい。前述の例を参照すると、区画2904は、運転アプリケーションから駐車アプリケーションへ、及びその逆に実装するように動的に再構成することができる。
図32の例では、SoC100は、区画2904内の異なるアプリケーションを実装するために動的部分的再構成を受けるが、区画2904に割り当てられたリソースは変更されないままである。
【0307】
場合によっては、必要とされるセキュリティ及び区画間の分離度に応じて、メモリコントローラ及び/又は他の回路ブロックを区画間で共有することができる。共有メモリコントローラは、各区画が他の区画から独立しているその区画自身のメモリのプールにのみアクセスできるように、メモリ分離を実施することができる。しかしながら、他の場合には、区画は、何らかの共有メモリを有してもよい。
【0308】
自動車の例では、SoC100は、1人のユーザに対応するアプリケーションを実装する。すなわち、特定のエンティティは、SoC100の異なる区画で同時に実行される複数のアプリケーションを開発することができる。各アプリケーションは同じユーザによって所有されてもよいが、各アプリケーションは安全要件を満たすために異なる分離された区画で実行される。例えば、低電力ドメイン及びRPUを使用するアプリケーションは、他のアプリケーションからの分離を必要とするこれらの安全要件を有し得る。さらに、自動車の例では、PMC1602は、SoC100に実装される区画より上のレベルで動作し、アプリケーションが同時に実行され、(例えば、部分的再構成を介して)区画の内外で異なるアプリケーションをスワップするのに必要な制御を提供することができる。
【0309】
トリガイベントが検出されない場合、方法3200は、トリガイベントが検出されるまでループを続ける。SoC100は、現在構成されているように動作する各区画で動作し続ける。各区画に実装されたアプリケーションは、各区画が他から分離されているため、独立して動作することができる。上述したように、場合によっては、ドアベル割り込みを使用して、区画間のシグナリング及び/又はメッセージングを提供するために、ある区画から別の区画に交差することができる。
【0310】
図30~
図32は、PMC1602を使用してSoC100内に異なるPDIをロードするように説明されているが、SoC100がブートされ、PS106が構成されると、PS106内のプロセッサを使用してPDIのロードを制御し、SoC100を全体的又は部分的に再構成することができる(例えば、部分的な再構成を実行する)ことを理解されたい。
【0311】
説明の目的で、本明細書に開示される様々な発明概念の完全な理解を提供するために、特定の用語が記載されている。しかしながら、本明細書で使用される用語は、本発明の構成の特定の態様を説明することのみを目的としており、限定することを意図するものではない。
【0312】
本明細書で定義されるように、単数形「a」、「an」、及び「the」は、文脈が明らかにそうでないことを示さない限り、複数形も含むことが意図される。
【0313】
本明細書で定義されるように、「少なくとも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とを一緒にを意味する。
【0314】
本明細書で定義される場合、「自動的に」という用語は、人間の介入がないことを意味する。
【0315】
本明細書で定義されるように、用語「の場合」は、文脈に応じて「のとき」又は「すると」又は「に応じて」又は「に応答して」を意味する。したがって、語句「決定された場合」又は「[記載された状態又は事象]が検出された場合」は、文脈に応じて、「決定されると」又は「決定に応じて」又は「[記載された状態又は事象]が検出されると」又は「[記載された状態又は事象]の検出に応じて」又は「[記載された状態又は事象]の検出に応答して」を意味すると解釈され得る。
【0316】
本明細書で定義されるように、「応じて」という用語及び上記のような同様の用語、例えば「の場合」、「のとき」又は「すると」は、動作又は事象に容易に応答又は反応することを意味する。応答又は反応は自動的に行われる。したがって、第2の動作が第1の動作に「応じて」行われる場合、第1の動作の発生と第2の動作の発生との間に因果関係がある。「応じて」という用語は因果関係を示す。
【0317】
本明細書で定義されるように、「一実施形態」、「実施形態」、「1つ以上の実施形態」、「特定の実施形態」という用語又は同様の用語は、実施形態に関連して説明される特定の特徴、構造、又は特性が、本開示内で説明される少なくとも1つの実施形態に含まれることを意味する。したがって、本開示全体を通して、「一実施形態では」、「実施形態において」、「1つ以上の実施形態において」、「特定の実施形態では」という語句、及び同様の文言の出現は、必ずしもそうとは限らないが、すべて同じ実施形態を指し得る。「実施形態」及び「配置」という用語は、本開示内で互換的に使用される。
【0318】
本明細書で定義されるように、「リアルタイム」という用語は、特定のプロセス又は決定が行われるのに十分に即時であるとユーザ又はシステムが感知する、又はプロセッサが何らかの外部プロセスに追いつくことを可能にする処理応答性のレベルを意味する。
【0319】
本明細書で定義されるように、「実質的に」という用語は、列挙された特性、パラメータ、又は値が正確に達成される必要はないが、例えば公差、測定誤差、測定精度限界、及び当業者に知られている他の要因を含む偏差又は変動が、特性が提供しようとした効果を排除しない量で発生し得ることを意味する。
【0320】
第1、第2などの用語は、様々な要素を説明するために本明細書で使用され得る。これらの要素は、特に明記しない限り、又は文脈が明らかにそうでないことを示さない限り、これらの用語は1つの要素を別の要素から区別するためにのみ使用されるので、これらの用語によって限定されるべきではない。
【0321】
図のフローチャート及びブロック図は、本発明の構成の様々な態様によるシステム、方法、及びコンピュータプログラム製品の可能な実施態様のアーキテクチャ、機能、及び動作を示す。これに関して、フローチャート又はブロック図の各ブロックは、指定された動作を実施するための1つ以上の実行可能命令を含むモジュール、セグメント、又は命令の一部を表すことができる。
【0322】
いくつかの代替実施態様では、ブロックに記載された動作は、図に記載された順序とは異なる順序で行われてもよい。例えば、連続して示されている2つのブロックは、実質的に同時に実行されてもよく、又はブロックは、関連する機能に応じて、時には逆の順序で実行されてもよい。他の例では、ブロックは、一般に、昇順で実行されてもよいが、さらに他の例では、1つ以上のブロックは、様々な順序で実行されてもよく、結果は、直後には続かない後続のブロック又は他のブロックで記憶及び利用される。また、ブロック図及び/又はフローチャート図の各ブロック、並びにブロック図及び/又はフローチャート図のブロックの組合せは、指定された機能又は動作を実行するか、専用ハードウェアとコンピュータ命令の組合せを実行する専用ハードウェアベースのシステムによって実装されてもよいことに留意されたい。
【0323】
以下の特許請求の範囲に見出すことができるすべてのミーンズプラスファンクション又はステッププラスファンクションの要素の対応する構造、材料、動作、及び均等物は、具体的に特許請求されている他の特許請求されている要素と組み合わせて機能を実行するための任意の構造、材料、又は動作を含むことが意図されている。
【0324】
デバイスは、プログラマブル論理回路と、プログラマブル論理回路に結合されたプロセッサシステムと、プログラマブル論理回路及びプロセッサシステムに結合されたネットワークオンチップとを含むことができる。ネットワークオンチップは、プログラマブル論理回路に実装された回路ブロックとプロセッサシステムとを通信可能にリンクするユーザ指定のデータ経路を確立するようにプログラム可能である。デバイスは、プログラマブル論理回路、ネットワークオンチップ、及びプロセッサシステムを構成するプラットフォーム管理コントローラを含むことができる。
【0325】
別の態様では、プログラマブル論理回路、ネットワークオンチップ、及びプロセッサシステムはそれぞれ、マスタノード及びスレーブノードを有するユーザアプリケーションの一部を実装するように構成され、ユーザアプリケーションは、プログラマブル論理回路又はプロセッサシステム内の各ノードのデータ経路及び実装を指定する。
【0326】
別の態様では、デバイスは、ネットワークオンチップに結合されたデータ処理エンジンアレイを含み、ユーザ指定のデータ経路は、データ処理エンジンアレイのデータ処理エンジンを、プログラマブル論理回路又はプロセッサシステムに実装された回路ブロックの少なくとも1つにさらに通信可能にリンクする。
【0327】
別の態様では、データ処理エンジンアレイは、ユーザアプリケーションの一部を実装するように構成され、ユーザアプリケーションは、データ処理エンジンアレイ内のノードのうちの少なくとも1つの実装を指定する。
【0328】
別の態様では、デバイスは、ネットワークオンチップに結合された特定用途向けのハードワイヤード回路ブロックを含む。特定用途向けのハードワイヤード回路ブロック及びプログラマブル論理回路に実装された回路ブロックは、共通のインターフェースを有する。
【0329】
別の態様では、ネットワークオンチップ及びプログラマブル論理回路は、複数の独立区画を実装するように構成される。
【0330】
別の態様では、各区画は異なるアプリケーションを実装し、アプリケーションは互いに分離される。
【0331】
別の態様では、デバイスは、受信したトランザクション内のトランザクションソースの識別子を認証されたトランザクションソースのリストと比較するように構成されたプログラマブル保護回路を含む。
【0332】
別の態様では、プログラマブル保護回路は、受信したトランザクションで指定されたアドレスを、トランザクションソースの識別子の許可されたアドレスとさらに比較する。
【0333】
別の態様では、プログラマブル回路に実装されたプロセッサシステム及び回路ブロックは、通信のために共通の記述子フォーマットを使用する。
【0334】
方法は、プログラマブル論理回路と、プログラマブル論理回路に結合されたプロセッサシステムと、プログラマブル論理回路及びプロセッサシステムに結合されたネットワークオンチップとを含むデバイスを提供することを含むことができる。ネットワークオンチップは、プログラマブル論理回路に実装された回路ブロックとプロセッサシステムとを通信可能にリンクするユーザ指定のデータ経路を確立するようにプログラム可能である。本方法は、デバイス内に配置されたプラットフォーム管理コントローラを使用してプログラマブル論理回路、ネットワークオンチップ、及びプロセッサシステムを構成することを含むことができる。
【0335】
別の態様では、本方法は、マスタノード及びスレーブノードを有するユーザアプリケーションの一部を実装するようにプログラマブル論理回路、ネットワークオンチップ、及びプロセッサシステムの各々を構成することを含み、ユーザアプリケーションは、プログラマブル論理回路又はプロセッサシステム内の各ノードのデータ経路及び実装を指定する。
【0336】
別の態様では、デバイスは、ネットワークオンチップに結合されたデータ処理エンジンアレイを含む。ユーザ指定のデータ経路は、データ処理エンジンアレイのデータ処理エンジンを、プログラマブル論理回路又はプロセッサシステムに実装された回路ブロックの少なくとも1つに通信可能にリンクする。
【0337】
別の態様では、本方法は、ユーザアプリケーションの一部を実装するようにデータ処理エンジンアレイを構成することを含み、ユーザアプリケーションは、データ処理エンジンアレイ内のノードのうちの少なくとも1つの実装を指定する。
【0338】
別の態様では、デバイスは、ネットワークオンチップに結合された特定用途向けのハードワイヤード回路ブロックを含む。その場合、方法は、特定用途向けのハードワイヤード回路ブロックとプログラマブル論理回路に実装された回路ブロックのための共通のインターフェースを提供することを含むことができる。
【0339】
別の態様では、方法は、複数の独立区画を実装するようにネットワークオンチップ及びプログラマブル論理回路を構成することを含む。
【0340】
別の態様では、方法は、複数の独立区画のうちの少なくとも1つを動的に再構成することを含む。
【0341】
別の態様では、方法は、各区画に異なるアプリケーションを実装することと、アプリケーションを互いに分離することとを含む。
【0342】
別の態様では、方法は、デバイス内にプログラマブル保護回路を設けることと、受信したトランザクション内のトランザクションソースの識別子を認証されたトランザクションソースのリストと比較するようにプログラマブル保護回路を構成することとを含む。
【0343】
別の態様では、方法は、受信したトランザクションで指定されたアドレスを、トランザクションソースの識別子の許可されたアドレスと比較するようにプログラマブル保護回路を構成することを含む。
【0344】
本明細書で提供される本発明の構成の説明は、例示を目的とするものであり、網羅的であること、又は開示された形態及び例に限定されることを意図するものではない。本明細書で使用される用語は、本発明の構成の原理、実際の用途又は市場で見られる技術に対する技術的改善を説明するために、及び/又は当業者が本明細書に開示される本発明の構成を理解することを可能にするために選択された。記載された本発明の構成の範囲及び精神から逸脱することなく、修正及び変形が当業者には明らかであり得る。したがって、そのような特徴及び実施態様の範囲を示すものとして、前述の開示ではなく、以下の特許請求の範囲を参照すべきである。