(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-25
(45)【発行日】2024-08-02
(54)【発明の名称】異種プログラマブルデバイスのハードウェア-ソフトウェア設計フロー
(51)【国際特許分類】
G06F 9/50 20060101AFI20240726BHJP
G06F 15/80 20060101ALI20240726BHJP
G06F 15/78 20060101ALI20240726BHJP
G06F 15/173 20060101ALI20240726BHJP
G06F 9/48 20060101ALI20240726BHJP
G06F 8/30 20180101ALI20240726BHJP
【FI】
G06F9/50 150E
G06F15/80
G06F15/78 560
G06F15/78 530
G06F15/173 665D
G06F15/173 680
G06F9/48 370
G06F8/30
(21)【出願番号】P 2021568868
(86)(22)【出願日】2020-05-11
(86)【国際出願番号】 US2020032315
(87)【国際公開番号】W WO2020236449
(87)【国際公開日】2020-11-26
【審査請求日】2023-05-01
(32)【優先日】2019-05-23
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110002077
【氏名又は名称】園田・小林弁理士法人
(72)【発明者】
【氏名】グプタ, シャイル アディティア
(72)【発明者】
【氏名】ビーラボル, スリーニヴァース
(72)【発明者】
【氏名】モンガ, ディネシュ ケー.
(72)【発明者】
【氏名】ジャ, プラディプ
(72)【発明者】
【氏名】スサー, ビシャル
(72)【発明者】
【氏名】カタイル, ビノド ケー.
(72)【発明者】
【氏名】ハンシジダ, ビドゥムリ
(72)【発明者】
【氏名】レレ, シッダールス
【審査官】漆原 孝治
(56)【参考文献】
【文献】東 遼平,プログラマブルSoCのためのシステム設計環境の検討とSW-HWインタフェース生成手法の実装 ,電子情報通信学会技術研究報告,日本,一般社団法人電子情報通信学会,2014年01月21日,第113巻,第416号,pp.191-196
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/50
G06F 15/80
G06F 15/78
G06F 15/173
G06F 9/48
G06F 8/30
(57)【特許請求の範囲】
【請求項1】
デバイスのデータ処理エンジン(DPE)アレイ内に実装するソフトウェア部分と、前記デバイスのプログラマブルロジック内に実装するハードウェア部分とを指定するアプリケーションに関して、プロセッサを使用して、前記アプリケーションの論理アーキテクチャと、前記DPEアレイと前記プログラマブルロジックとの間のインターフェース回路ブロックのハードウェアに対する論理リソースのマッピングを指定する、第1のインターフェースソリューションとを生成することと、
前記論理アーキテクチャおよび前記第1のインターフェースソリューションに基づいて、ハードウェアコンパイラを用いて、前記ハードウェア部分のブロック図を構築することと、
前記プロセッサを使用して、前記ブロック図に対して実装フローを実施することであって、
前記ハードウェアコンパイラが、前記ソフトウェア部分をコンパイルするように構成されたDPEコンパイラと交換した設計データに基づいて、更にネットワーク・オン・チップ(NoC)コンパイラと交換した設計データに基づいて、前記ブロック図に対する前記実装フローを実施し、
前記NoCコンパイラは、前記ハードウェアコンパイラが、前記DPEアレイを前記デバイスの前記プログラマブルロジックに結合する、前記デバイスのNoCを通るルートを実装するように構成された、第1のNoCソリューションを受信するものである、
前記ブロック図に対して実装フローを実施することと、
前記プロセッサを使用して、前記アプリケーションの前記ソフトウェア部分をコンパイルして、前記DPEアレイの1つまたは複数のDPEに実装することと、を含む、方法。
【請求項2】
前記ソフトウェア部分の前記コンパイルが、前記実装フローから生成された前記プログラマブルロジックに実装される、前記アプリケーションの前記ハードウェア部分の実装に基づいて実施される、請求項1に記載の方法。
【請求項3】
前記ブロック図を構築し、前記実装フローを実施するように構成された前記ハードウェアコンパイラが、前記ブロック図の実装が前記ハードウェア部分の設計メトリックを満たしていないと決定したのに応答して、前記インターフェース回路ブロックに対する制約を、前記ソフトウェア部分をコンパイルするように構成された前記DPEコンパイラに提供することと、
前記ハードウェアコンパイラが、前記DPEコンパイラから、前記制約に基づいて前記DPEコンパイラによって生成される第2のインターフェースソリューションを受信することと、を更に含む、請求項1に記載の方法。
【請求項4】
前記実装フローの前記実施が、前記第2のインターフェースソリューションに基づいて実施される、請求項3に記載の方法。
【請求項5】
前記ハードウェアコンパイラが、前記NoCに対する前記第1のNoCソリューションを使用して、前記ブロック図の実装が設計メトリックを満たしていないと決定されたことに応答して、前記NoCに対する制約を前記NoCコンパイラに提供し、
前記ハードウェアコンパイラが、前記NoCコンパイラから、前記NoCに対する前記制約に基づいて前記NoCコンパイラによって生成される第2のNoCソリューションを受信する、請求項1に記載の方法。
【請求項6】
デバイスのデータ処理エンジン(DPE)アレイ内に実装するソフトウェア部分と、前記デバイスのプログラマブルロジック内に実装するハードウェア部分とを指定するアプリケーションに関して、前記アプリケーションの論理アーキテクチャと、前記DPEアレイと前記プログラマブルロジックとの間のインターフェース回路ブロックのハードウェアに対する論理リソースのマッピングを指定する、第1のインターフェースソリューションとを生成することと、
前記論理アーキテクチャおよび前記第1のインターフェースソリューションに基づいて、ハードウェアコンパイラを用いて、前記ハードウェア部分のブロック図を構築することと、
前記ブロック図に対して実装フローを実施することであって、
前記ハードウェアコンパイラが、前記ソフトウェア部分をコンパイルするように構成されたDPEコンパイラと交換した設計データに基づいて、更にネットワーク・オン・チップ(NoC)コンパイラと交換した設計データに基づいて、前記ブロック図に対する前記実装フローを実施し、
前記NoCコンパイラは、前記ハードウェアコンパイラが、前記DPEアレイを前記デバイスの前記プログラマブルロジックに結合する、前記デバイスのNoCを通るルートを実装するように構成された、第1のNoCソリューションを受信するものである、
前記ブロック図に対して実装フローを実施することと、
前記アプリケーションの前記ソフトウェア部分をコンパイルして、前記DPEアレイの1つまたは複数のDPEに実装することと、を含む、動作を開始するように構成されたプロセッサを備える、システム。
【請求項7】
前記ブロック図の前記構築が、
前記ブロック図を少なくとも1つの知的財産コアに追加して、前記プログラマブルロジック内に実装することを含む、請求項6に記載のシステム。
【請求項8】
前記ソフトウェア部分の前記コンパイルが、前記実装フローから生成された前記プログラマブルロジックに実装される、前記アプリケーションの前記ハードウェア部分に対するハードウェア設計に基づいて実施される、請求項6に記載のシステム。
【請求項9】
前記プロセッサが、
前記ハードウェアコンパイラが、前記ブロック図の実装が前記ハードウェア部分の設計制約を満たしていないと決定したのに応答して、前記インターフェース回路ブロックに対する制約を、前記ソフトウェア部分をコンパイルするように構成された前記DPEコンパイラに提供することと、
前記ハードウェアコンパイラが、前記DPEコンパイラから、前記制約に基づいて前記DPEコンパイラによって生成される第2のインターフェースソリューションを受信することと、を更に含む動作を開始するように構成された、請求項6に記載のシステム。
【請求項10】
前記実装フローの前記実施が、前記第2のインターフェースソリューションに基づいて実施される、請求項9に記載のシステム。
【請求項11】
前記ハードウェアコンパイラが、前記NoCに対する前記第1のNoCソリューションを使用して、前記ブロック図の実装が設計メトリックを満たしていないと決定されたことに応答して、前記NoCに対する制約を前記NoCコンパイラに提供し、
前記ハードウェアコンパイラが、前記NoCコンパイラから、前記NoCに対する前記制約に基づいて前記NoCコンパイラによって生成される第2のNoCソリューションを受信する、請求項9に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
著作物の権利の留保
本特許文献の開示の一部分は、著作権保護の対象である資料を含む。著作権保有者は、特許商標局の包袋または記録に見られるような、特許文献または特許開示のいずれかの複製に対して異議を唱えるものではないが、それ以外はいかなる場合でも全ての著作権を保有する。
【0002】
本開示は、集積回路(IC)に関し、より詳細には、ハードウェアおよびソフトウェア部分を含むアプリケーションを異種プログラマブルIC内に実装することに関する。
【背景技術】
【0003】
プログラマブル集積回路(IC)とは、プログラマブルロジックを含むタイプのICを指す。プログラマブルICの一例はフィールドプログラマブルゲートアレイ(FPGA)である。FPGAは、プログラマブル回路ブロックを含むことによって特徴付けられる。プログラマブル回路ブロックの例としては、入出力ブロック(IOB)、設定可能ロジックブロック(CLB)、専用ランダムアクセスメモリブロック(BRAM)、デジタル信号処理ブロック(DSP)、プロセッサ、クロックマネージャ、および遅延ロックループ(DLL)が挙げられるが、それらに限定されない。
【0004】
現代のプログラマブルICは、1つまたは複数の他のサブシステムと組み合わせてプログラマブルロジックを含むように発展している。例えば、一部のプログラマブルICは、プログラマブルロジックおよびハードワイヤードプロセッサシステムの両方を含む、システム・オン・チップ(「SoC」)へと発展している。プログラマブルICの他の種類は、追加のおよび/または異なるサブシステムを含む。プログラマブルICに含まれるサブシステムの異種性の増加は、これらのデバイス内にアプリケーションを実装する場合の課題をもたらす。ハードウェアベースおよびソフトウェアベース両方のサブシステム(例えば、プログラマブルロジック回路類およびプロセッサ)を有するICに対する従来の設計フローは、ハードウェア設計者が最初にICのモノリシックハードウェア設計を作成することに依存していた。ハードウェア設計はプラットフォームとして使用され、それに基づいて次にソフトウェア設計が作成され、コンパイルされ、実行される。この方策は過度に限定的である場合が多い。
【0005】
他の事例では、ソフトウェアおよびハードウェア設計プロセスは切り離されることがある。しかしながら、ハードウェアおよびソフトウェア設計プロセスを切り離すと、ICの様々なサブシステム間で、ソフトウェア要件またはインターフェースの配置の指示が提供されない。そのため、ハードウェアおよびソフトウェア設計プロセスが、ICにおけるアプリケーションの有効な実装をカバーできないことがある。
【発明の概要】
【0006】
一態様では、方法は、デバイスのデータ処理エンジン(DPE)アレイ内に実装するソフトウェア部分と、デバイスのプログラマブルロジック(PL)内に実装するハードウェア部分とを指定するアプリケーションに関して、プロセッサを使用して、アプリケーションの論理アーキテクチャと、DPEアレイとプログラマブルロジックとの間のインターフェース回路ブロックのハードウェアに対する論理リソースのマッピングを指定する、第1のインターフェースソリューションとを生成することを含むことができる。方法は、論理アーキテクチャおよび第1のインターフェースソリューションに基づいて、ハードウェア部分のブロック図を構築することと、プロセッサを使用して、ブロック図に対して実装フローを実施することと、を含むことができる。方法は、プロセッサを使用して、アプリケーションのソフトウェア部分をコンパイルして、DPEアレイの1つまたは複数のDPEに実装することを含むことができる。
【0007】
別の態様では、システムは、動作を開始するように構成されたプロセッサを含む。動作は、デバイスのDPEアレイ内に実装するソフトウェア部分と、デバイスのPL内に実装するハードウェア部分とを指定するアプリケーションに関して、アプリケーションの論理アーキテクチャと、DPEアレイとPLとの間のインターフェース回路ブロックのハードウェアに対する論理リソースのマッピングを指定する、第1のインターフェースソリューションとを生成することを含むことができる。動作は、論理アーキテクチャおよび第1のインターフェースソリューションに基づいて、ハードウェア部分のブロック図を構築することと、ブロック図に対して実装フローを実施することと、アプリケーションのソフトウェア部分をコンパイルして、DPEアレイの1つまたは複数のDPEに実装することと、を含むことができる。
【0008】
別の態様では、コンピュータプログラム製品は、プログラムコードが格納されたコンピュータ可読記憶媒体を含む。プログラムコードは、動作を開始するのにコンピュータハードウェアによって実行可能である。動作は、デバイスのDPEアレイ内に実装するソフトウェア部分と、デバイスのPL内に実装するハードウェア部分とを指定するアプリケーションに関して、アプリケーションの論理アーキテクチャと、DPEアレイとPLとの間のインターフェース回路ブロックのハードウェアに対する論理リソースのマッピングを指定する、第1のインターフェースソリューションとを生成することを含むことができる。動作は、論理アーキテクチャおよび第1のインターフェースソリューションに基づいて、ハードウェア部分のブロック図を構築することと、ブロック図に対して実装フローを実施することと、アプリケーションのソフトウェア部分をコンパイルして、DPEアレイの1つまたは複数のDPEに実装することと、を含むことができる。
【0009】
別の態様では、方法は、デバイスのDPEアレイ内に実装するソフトウェア部分と、デバイスのPL内に実装するハードウェア部分とを指定するアプリケーションに関して、ハードウェアコンパイラを実行するプロセッサを使用して、DPEアレイをPLに結合するインターフェースブロックのハードウェアに対して、ソフトウェア部分によって使用される論理リソースをマッピングする、インターフェースブロックソリューションに基づいて、ハードウェア部分に対して実装フローを実施することを含むことができる。方法は、実装フロー中に設計メトリックに一致しないことに応答して、ハードウェアコンパイラを実行するプロセッサを使用して、インターフェースブロックの制約をDPEコンパイラに提供することを含むことができる。方法はまた、インターフェースブロックの制約を受信したことに応答して、DPEコンパイラを実行するプロセッサを使用して、更新されたインターフェースブロックソリューションを生成することと、更新されたインターフェースブロックソリューションをDPEコンパイラからハードウェアコンパイラに提供することと、を含むことができる。
【0010】
別の態様では、システムは、動作を開始するように構成されたプロセッサを含む。動作は、デバイスのDPEアレイ内に実装するソフトウェア部分と、デバイスのPL内に実装するハードウェア部分とを指定するアプリケーションに関して、ハードウェアコンパイラを使用して、DPEアレイをPLに結合するインターフェースブロックのハードウェアに対して、ソフトウェア部分によって使用される論理リソースをマッピングする、インターフェースブロックソリューションに基づいて、ハードウェア部分に対して実装フローを実施することを含むことができる。動作は、実装フロー中に設計メトリックに一致しないことに応答して、ハードウェアコンパイラを使用して、インターフェースブロックの制約をDPEコンパイラに提供することを含むことができる。動作は更に、インターフェースブロックの制約を受信したことに応答して、DPEコンパイラを使用して、更新されたインターフェースブロックソリューションを生成することと、更新されたインターフェースブロックソリューションをDPEコンパイラからハードウェアコンパイラに提供することと、を含むことができる。
【0011】
別の態様では、コンピュータプログラム製品は、プログラムコードが格納されたコンピュータ可読記憶媒体を含む。プログラムコードは、動作を開始するのにコンピュータハードウェアによって実行可能である。動作は、デバイスのDPEアレイ内に実装するソフトウェア部分と、デバイスのPL内に実装するハードウェア部分とを指定するアプリケーションに関して、ハードウェアコンパイラを使用して、DPEアレイをPLに結合するインターフェースブロックのハードウェアに対して、ソフトウェア部分によって使用される論理リソースをマッピングする、インターフェースブロックソリューションに基づいて、ハードウェア部分に対して実装フローを実施することを含むことができる。動作は、実装フロー中に設計メトリックに一致しないことに応答して、ハードウェアコンパイラを使用して、インターフェースブロックの制約をDPEコンパイラに提供することを含むことができる。動作は更に、インターフェースブロックの制約を受信したことに応答して、DPEコンパイラを使用して、更新されたインターフェースブロックソリューションを生成することと、更新されたインターフェースブロックソリューションをDPEコンパイラからハードウェアコンパイラに提供することと、を含むことができる。
【0012】
別の態様では、方法は、デバイスのDPEアレイ内に実装するソフトウェア部分と、デバイスのPL内に実装するHLSカーネルを有するハードウェア部分とを指定するアプリケーションに関して、プロセッサを使用して、DPEアレイおよびPLを結合するインターフェースブロックのハードウェアリソースに対して、ソフトウェア部分によって使用される論理リソースをマッピングする、第1のインターフェースソリューションを生成することを含むことができる。方法は、プロセッサを使用して、DPEアレイに実装されるソフトウェア部分のHLSカーネルおよびノードの間での接続性を指定する接続グラフを生成することと、プロセッサを使用して、接続グラフおよびHLSカーネルに基づいて、合成可能なブロック図を生成することと、を含むことができる。方法は更に、プロセッサを使用して、第1のインターフェースソリューションに基づいて、ブロック図に対して実装フローを実施することと、プロセッサを使用して、アプリケーションのソフトウェア部分をコンパイルして、DPEアレイの1つまたは複数のDPEに実装することと、を含むことができる。
【0013】
別の態様では、システムは、動作を開始するように構成されたプロセッサを含む。動作は、デバイスのDPEアレイ内に実装するソフトウェア部分と、デバイスのPL内に実装するHLSカーネルを有するハードウェア部分とを指定するアプリケーションに関して、DPEアレイおよびPLを結合するインターフェースブロックのハードウェアリソースに対して、ソフトウェア部分によって使用される論理リソースをマッピングする、第1のインターフェースソリューションを生成することを含むことができる。動作は、DPEアレイに実装されるソフトウェア部分のHLSカーネルおよびノードの間での接続性を指定する接続グラフを生成することと、接続グラフおよびHLSカーネルに基づいて、合成可能なブロック図を生成することと、を含むことができる。動作は更に、第1のインターフェースソリューションに基づいて、ブロック図に対して実装フローを実施することと、アプリケーションのソフトウェア部分をコンパイルして、DPEアレイの1つまたは複数のDPEに実装することと、を含むことができる。
【0014】
別の態様では、コンピュータプログラム製品は、プログラムコードが格納されたコンピュータ可読記憶媒体を含む。プログラムコードは、動作を開始するのにコンピュータハードウェアによって実行可能である。動作は、デバイスのDPEアレイ内に実装するソフトウェア部分と、デバイスのPL内に実装するHLSカーネルを有するハードウェア部分とを指定するアプリケーションに関して、DPEアレイおよびPLを結合するインターフェースブロックのハードウェアリソースに対して、ソフトウェア部分によって使用される論理リソースをマッピングする、第1のインターフェースソリューションを生成することを含むことができる。動作は、DPEアレイに実装されるソフトウェア部分のHLSカーネルおよびノードの間での接続性を指定する接続グラフを生成することと、接続グラフおよびHLSカーネルに基づいて、合成可能なブロック図を生成することと、を含むことができる。動作は更に、第1のインターフェースソリューションに基づいて、ブロック図に対して実装フローを実施することと、アプリケーションのソフトウェア部分をコンパイルして、DPEアレイの1つまたは複数のDPEに実装することと、を含むことができる。
【0015】
この「発明の概要」部分は、単に特定の概念を紹介するために提供されるものであり、特許請求する主題のいずれかの重要なまたは必須の特徴を特定するものではない。発明の構成の他の特徴は、添付図面から、また以下の詳細な説明から明白となるであろう。
【0016】
発明の構成は、例として添付図面に例示される。しかしながら、図面は、発明の構成を、図示される特定の実現例のみに限定するものと解釈されるべきではない。以下の詳細な説明を検討することにより、また図面を参照することにより、様々な態様および利点が明白となるであろう。
【図面の簡単な説明】
【0017】
【
図1】本明細書に記載する1つまたは複数の実施形態で使用されるコンピューティングノードの一例を示す図である。
【
図2】システム・オン・チップ(SoC)タイプの集積回路(IC)にかかるアーキテクチャの一例を示す図である。
【
図3】
図2のDPEアレイのデータ処理エンジン(DPE)にかかるアーキテクチャ例を示す図である。
【
図4】
図3のアーキテクチャ例の更なる態様を示す図である。
【
図5】DPEアレイにかかる別のアーキテクチャ例を示す図である。
【
図6】DPEアレイのSoCインターフェースブロックのタイルにかかるアーキテクチャ例を示す図である。
【
図7】
図1のネットワーク・オン・チップ(NoC)の実装例を示す図である。
【
図8】NoCを通した
図1のSoCのエンドポイント回路間の接続を示すブロック図である。
【
図9】別の例によるNoCを示すブロック図である。
【
図10】NoCをプログラミングする方法例を示す図である。
【
図11】NoCをプログラミングする別の方法例を示す図である。
【
図12】エンドポイント回路間のNoCを通るデータパス例を示す図である。
【
図13】NoCに関する読取り/書込み要求および応答を処理する方法例を示す図である。
【
図14】NoCマスタユニットの実装例を示す図である。
【
図15】NoCスレーブユニットの実装例を示す図である。
【
図16】
図1と関連して記載されるシステムによって実行可能なソフトウェアアーキテクチャ例を示す図である。
【
図17A】
図1と関連して記載されるようなシステムを使用してSoC上にマッピングされるアプリケーションの一例を示す図である。
【
図17B】
図1と関連して記載されるようなシステムを使用してSoC上にマッピングされるアプリケーションの一例を示す図である。
【
図18】SoC上にマッピングされている別のアプリケーションの実装例を示す図である。
【
図19】
図1と関連して記載されるシステムによって実行可能なソフトウェアアーキテクチャの別の例を示す図である。
【
図20】SoC内でアプリケーションを実装するためのデザインフローを実施する例示的方法を示す図である。
【
図21】SoC内でアプリケーションを実装するためのデザインフローを実施する別の例示的方法を示す図である。
【
図22】ハードウェアコンパイラとDPEコンパイラの間の通信の例示的方法を示す図である。
【
図23】SoCインターフェースブロックソリューションを処理する例示的方法を示す図である。
【
図24】SoC内での実装のためのアプリケーションの別の実装例を示す図である。
【
図25】DPEコンパイラによって生成されたSoCインターフェースブロックソリューションの一実装例を示す図である。
【
図26】DPEコンパイラによって受信されるルータブルSoCインターフェースブロック制約の一実装例を示す図である。
【
図27】アンルータブルSoCインターフェースブロック制約の一実装例を示す図である。
【
図28】DPEコンパイラが、
図27からソフトタイプのSoCインターフェースブロック制約を無視する、一実装例を示す図である。
【
図29】アンルータブルSoCインターフェースブロック制約の別の実装例を示す図である。
【
図30】
図29のDPEノードの例示的マッピングを示す図である。
【
図31】アンルータブルSoCインターフェースブロック制約の別の実装例を示す図である。
【
図32】
図31のDPEノードの例示的マッピングを示す図である。
【
図33】
図1のシステムによって実行可能な別の例示的ソフトウェアアーキテクチャを示す図である。
【
図34】SoC内でアプリケーションを実装するためのデザインフローを実施する別の例示的方法を示す図である。
【
図35】SoC内でアプリケーションを実装するためのデザインフローを実施する別の例示的方法を示す図である。
【発明を実施するための形態】
【0018】
本開示は新奇な特徴を定義する特許請求の範囲をもって結論とするが、本開示内に記載する様々な特徴は、説明を図面と併せ読むことによってより良く理解されるであろうと考えられる。本明細書に記載するプロセス、機械、製造、およびそれらのあらゆる変形例は、例示の目的で提供されるものである。本開示内に記載する特定の構造的および機能的詳細は、限定としてではなく、単に特許請求の範囲の基礎として、また記載する特徴を事実上あらゆる適切に詳細な構造で様々に採用するように、当業者に教示するための代表的な基礎として解釈されるべきである。更に、本開示内で使用される用語および語句は、限定を意図するものではなく、記載する特徴の理解可能な説明を提供するためのものである。
【0019】
本開示は、集積回路(IC)に関し、より詳細には、ハードウェアおよびソフトウェア部分を含むアプリケーションを異種プログラマブルIC内に実装することに関する。異種プログラマブルICの一例は、本明細書では「プログラマブルロジック」または「PL」と呼ばれるプログラマブル回路類と、複数のハードワイヤードプログラマブルデータ処理エンジン(DPE)とを含む、デバイス、例えば集積回路である。複数のDPEは、システム・オン・チップ(SoC)インターフェースブロックを通してICのPLに通信可能にリンクされた、アレイの形で配置されてもよい。本開示内で定義されるように、DPEは、プログラムコードを実行することができるコアと、コアに結合されたメモリモジュールとを含む、ハードワイヤードプログラマブル回路ブロックである。DPEは、本開示内で更に詳細に記載するように、互いに通信することができる。
【0020】
記載するようにデバイスに実装することが意図されるアプリケーションは、デバイスのPLを使用して実装されるハードウェア部分と、デバイスのDPEアレイに実装され、デバイスのDPEアレイによって実行されるソフトウェア部分とを含む。デバイスはまた、更なるプログラムコード、例えばアプリケーションの別のソフトウェア部分を実行することができる、ハードワイヤードプロセッサシステム(「PS」)を含んでもよい。一例として、PSは、中央処理装置(「CPU」)、またはプログラムコードを実行することができる他のハードワイヤードプロセッサを含む。そのため、アプリケーションはまた、PSのCPUによって実行されるような更なるソフトウェア部分を含んでもよい。
【0021】
本開示に記載する発明の構成によれば、データ処理システムによって実施されてもよい設計フローが提供される。設計フローは、アプリケーションのハードウェア部分およびソフトウェア部分の両方を、PL、DPEアレイ、および/またはPSを含む異種プログラマブルIC内に実装することができる。ICはまた、プログラマブルであるネットワーク・オン・チップ(NoC)を含んでもよい。
【0022】
いくつかの実装例では、アプリケーションは、複数の相互接続されたノードを含むデータフローグラフとして指定される。データフローグラフのノードは、DPEアレイ内またはPL内に実装するように規定される。DPEに実装されるノードは、例えば、最終的にDPEアレイの特定のDPEにマッピングされる。アプリケーションで使用されるアレイの各DPEによって実行されるオブジェクトコードは、ノードを実装するために生成される。PLに実装されるノードは、例えば、合成されてPLに実装されるか、または既成コア(例えば、レジスタ転送レベル(「RTL」)コア)を使用して実装されてもよい。
【0023】
発明の構成は、ICの異なる異質サブシステムに実装するために、アプリケーションの異なる部分の構築および統合を調整することができる、設計フロー例を提供する。設計フロー例のうちの異なる段階は、特定のサブシステムを目的とする。例えば、設計フローの1つまたは複数の段階は、アプリケーションのハードウェア部分をPLに実装することを目的とし、設計フローの1つまたは複数の他の段階は、アプリケーションのソフトウェア部分をDPEアレイに実装することを目的とする。更に、設計フローの1つまたは複数の他の段階は、アプリケーションの別のソフトウェア部分をPSに実装することを目的とする。設計フローの更に他の段階は、NoCを通して異なるサブシステムおよび/または回路ブロック間で、ルートまたはデータ転送を実装することを目的とする。
【0024】
異なるサブシステムに対応する設計フロー例の異なる段階は、サブシステム固有の異なるコンパイラによって実施することができる。例えば、ソフトウェア部分は、DPEコンパイラおよび/またはPSコンパイラを使用して実装されてもよい。PLに実装されるハードウェア部分は、ハードウェアコンパイラによって実装されてもよい。NoCのルートはNoCコンパイラによって実装されてもよい。アプリケーションがICに実行可能に実装されるソリューションへと収束するために、様々なコンパイラが、互いに通信し相互作用しながら、アプリケーションによって指定されたそれぞれのサブシステムを実装することができる。例えば、コンパイラは、アプリケーションに対して指定された設計メトリックが満たされるソリューションへと収束するように、動作中に設計データを交換することができる。更に、達成されるソリューション(例えば、アプリケーションをデバイスに実装する)は、アプリケーションの様々な部分がデバイスのそれぞれのサブシステムにマッピングされ、異なるサブシステム間のインターフェースが一貫性があり相互に一致するものである。
【0025】
本開示内に記載する設計フロー例を使用して、システムは、例えば、アプリケーションの全ての部分がデバイス上で共同して実装される他の場合よりも、少ない時間で(例えば、少ないランタイムで)アプリケーションを異種プログラマブルIC内に実装することができる。更に、本開示内に記載する設計フロー例は、異種プログラマブルICにおけるアプリケーションの実装結果に関して、多くの場合、アプリケーションの各部分が完全に独立してマッピングされ、次に互いにスティッチングされるかまたは組み合わされる、他の従来の技術を使用して得られる結果よりも優れた、実現可能性および品質(例えば、タイミング、面積、出力など、設計メトリックのクロージャ)を達成する。設計フロー例は、少なくとも部分的に、異なるサブシステム間における共有インターフェースの制約に依存する、本明細書に記載する疎結合の共同収束(joint convergence)技術によって、これらの結果を達成する。
【0026】
発明の構成の更なる態様について、図面を参照して更に詳細に後述する。例示を単純かつ明瞭にするため、図面に示される要素は必ずしも縮尺通りに描かれていない。例えば、明瞭にするため、一部の要素の寸法が他の要素よりも誇張されていることがある。更に、適切であるとみなされた場合、対応する、類似の、または同様の特徴を示すのに、図面間で参照番号が繰り返される。
【0027】
図1は、コンピューティングノード100の一例を示している。コンピューティングノード100は、ホストデータ処理システム(ホストシステム)102と、ハードウェアアクセラレーションボード104とを含んでもよい。コンピューティングノード100は、単に、ハードウェアアクセラレーションボードとともに使用されてもよい、コンピューティング環境の1つの実現例である。これに関して、コンピューティングノード100は、スタンドアロン容量で、ベアメタルサーバとして、コンピューティングクラスタの一部として、またはクラウドコンピューティング環境内のクラウドコンピューティングノードとして使用されてもよい。
図1は、本明細書に記載する例の使用範囲または機能性に関して、いかなる限定も提示しようとするものではない。コンピューティングノード100は、アプリケーションをSoC 200内に実装することに関して本開示内に記載する様々な動作を実施することができる、システムおよび/またはコンピュータハードウェアの一例である。例えば、コンピューティングノード100は、電子設計自動化(EDA)システムを実装するのに使用されてもよい。
【0028】
ホストシステム102は、多数の他の汎用もしくは専用コンピューティングシステム環境または構成で動作する。ホストシステム102で使用するのに好適であり得るコンピューティングシステム、環境、および/または構成としては、パーソナルコンピュータシステム、サーバコンピュータシステム、シンクライアント、シッククライアント、携帯用もしくはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースシステム、セットトップボックス、プログラマブルコンシューマエレクトロニクス、ネットワークPC、ミニコンピュータシステム、メインフレームコンピュータシステム、および上述のシステムもしくはデバイスのいずれかを含む分散型クラウドコンピューティング環境などが挙げられるが、それらに限定されない。
【0029】
図示されるように、ホストシステム102は、コンピューティングデバイス、例えばコンピュータまたはサーバの形態で示される。ホストシステム102は、スタンドアロンデバイスとして、クラスタで、または通信ネットワークを通してリンクされたリモート処理デバイスによってタスクが実施される、分散型クラウドコンピューティング環境で実践することができる。分散型クラウドコンピューティング環境では、プログラムモジュールは、メモリ記憶デバイスを含むローカルおよびリモート両方のコンピュータシステム記憶媒体に配置されてもよい。ホストシステム102の構成要素としては、1つまたは複数のプロセッサ106(例えば、中央処理装置)、メモリ108、およびメモリ108を含む様々なシステム構成要素をプロセッサ106に結合するバス110を挙げることができるが、それらに限定されない。プロセッサ106は、プログラムコードを実行することができる、様々なプロセッサのいずれかを含んでもよい。プロセッサタイプの例としては、x86タイプのアーキテクチャ(IA-32、IA-64など)を有するプロセッサ、パワーアーキテクチャ、ARMプロセッサなどが挙げられるが、それらに限定されない。
【0030】
バス110は、メモリバスもしくはメモリコントローラ、周辺バス、アクセラレーテッドグラフィックスポート、および様々な利用可能なバスアーキテクチャのいずれかを使用するプロセッサもしくはローカルバスを含む、いくつかのタイプの通信バス構造のうちいずれかの1つまたは複数を表す。例として、非限定的に、かかるアーキテクチャとしては、業界標準アーキテクチャ(ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオエレクトロニクススタンダーズアソシエーション(VESA)ローカルバス、ペリフェラルコンポーネントインターコネクト(PCI)バス、およびPCIエクスプレス(PCIe)バスが挙げられる。
【0031】
ホストシステム102は、一般的に、様々なコンピュータ可読媒体を含む。かかる媒体は、ホストシステム102によってアクセス可能な任意の利用可能な媒体であってもよく、揮発性媒体、不揮発性媒体、取外し可能な媒体、および/または取外し不能な媒体の任意の組合せを含んでもよい。
【0032】
メモリ108は、ランダムアクセスメモリ(RAM)112および/またはキャッシュメモリ114など、揮発性メモリの形態のコンピュータ可読媒体を含んでもよい。ホストシステム102はまた、他の取外し可能/取外し不能な揮発性/不揮発性コンピュータシステム記憶媒体を含んでもよい。例として、取外し不能な不揮発性磁気媒体(図示せず、一般的には「ハードドライブ」と呼ばれる)からの読取りまたは該媒体への書込みのため、記憶システム116が提供されてもよい。図示しないが、取外し可能な不揮発性磁気ディスク(例えば、「フロッピーディスク」)からの読取りおよび該ディスクへの書込みを行う磁気ディスクドライブ、ならびにCD-ROM、DVD-ROM、または他の光学媒体など、取外し可能な不揮発性光学ディスクからの読取りまたは該ディスクへの書込みを行う光学ディスクドライブを提供することができる。かかる例では、1つまたは複数のデータ媒体インターフェースによって、それぞれバス110に接続されてもよい。更に図示され後述されるように、メモリ108は、本開示内に記載する機能および/または動作を実施するように構成される、一組(例えば、少なくとも1つ)のプログラムモジュール(例えば、プログラムコード)を有する、少なくとも1つのコンピュータプログラム製品を含んでもよい。
【0033】
一組(少なくとも1つ)のプログラムモジュール120を有するプログラム/ユーティリティ118は、例として非限定的にメモリ108に、ならびにオペレーティングシステム、1つまたは複数のアプリケーションプログラム、他のプログラムモジュール、およびプログラムデータに格納されてもよい。プログラムモジュール120は、一般に、本明細書に記載するような、本発明の実施形態の機能および/または方法論を実施する。例えば、プログラムモジュール120は、1つまたは複数のアプリケーションと、ハードウェアアクセラレーションボード104および/またはSoC 200と通信するドライバまたはデーモンとを含んでもよい。
【0034】
プログラム/ユーティリティ118はプロセッサ106によって実行可能である。プロセッサ106によって使用される、生成される、および/またはプロセッサで動作するプログラム/ユーティリティ118ならびに任意のデータアイテムは、プロセッサ106によって用いられるときに機能性を付与する機能性データ構造である。本開示内で定義されるように、「データ構造」は、物理的メモリ内におけるデータモデルのデータの組織化の物理的実装である。そのため、データ構造は、メモリ内の特定の電気的または磁気的構造要素で形成される。データ構造は、プロセッサを使用して実行されるアプリケーションプログラムによって使用されるような、メモリ内に格納されたデータに対して物理的組織化をもたらす。
【0035】
ホストシステム102は、バス110に通信可能にリンクされる、1つまたは複数の入出力(I/O)インターフェース128を含んでもよい。I/Oインターフェース128は、ホストシステム102が外部デバイスと通信すること、外部デバイスに結合してユーザがホストシステム102と対話するのを可能にすること、外部デバイスに結合してホストシステム102が他のコンピューティングデバイスと通信するのを可能にすること、などを可能にする。例えば、ホストシステム102は、I/Oインターフェース128を通して、ディスプレイ130におよびハードウェアアクセラレーションボード104に通信可能にリンクされてもよい。ホストシステム102は、I/Oインターフェース128を介して、キーボード(図示なし)などの他の外部デバイスに結合されてもよい。I/Oインターフェース128の例としては、ネットワークカード、モデム、ネットワークアダプタ、ハードウェアコントローラなどを挙げることができるが、それらに限定されない。
【0036】
実装例では、ホストシステム102がハードウェアアクセラレーションボード104と通信するのに用いられるI/Oインターフェース128は、PCIeアダプタである。ハードウェアアクセラレーションボード104は、ホストシステム102に結合する、回路基板、例えばカードとして実装されてもよい。ハードウェアアクセラレーションボード104は、例えば、カードスロット、例えばホストシステム102の利用可能なバスおよび/またはPCIeスロットに挿入されてもよい。
【0037】
ハードウェアアクセラレーションボード104はSoC 200を含む。SoC 200は異種プログラマブルICであり、そのため、複数の異種サブシステムを有する。SoC 200のアーキテクチャ例は、
図2と関連して更に詳細に記載する。ハードウェアアクセラレーションボード104はまた、SoC 200に結合された揮発性メモリ134と、やはりSoC 200に結合された不揮発性メモリ136とを含む。揮発性メモリ134は、RAMとして実装されてもよく、SoC 200の「ローカルメモリ」とみなされるが、ホストシステム102内にあるメモリ108は、SoC 200に対してローカルではなくホストシステム102に対してローカルとみなされる。いくつかの実装では、揮発性メモリ134は複数ギガバイトのRAM、例えば64GBのRAMを含んでもよい。不揮発性メモリ136の一例はフラッシュメモリを含む。
【0038】
図1の例では、コンピューティングノード100は、SoC 200のアプリケーションで動作し、アプリケーションをSoC 200内に実装することができる。アプリケーションは、SoC 200で利用可能な異なる異種サブシステムに対応する、ハードウェアおよびソフトウェア部分を含んでもよい。一般に、コンピューティングノード100は、SoC 200によって実行するため、アプリケーションをSoC 200上にマッピングすることができる。
【0039】
図2は、SoC 200のアーキテクチャ例を示している。SoC 200は、プログラマブルICおよび統合プログラマブルデバイスプラットフォームの一例である。
図2の例では、例示されるSoC 200の様々な異なるサブシステムまたは領域は、単一の統合パッケージ内に提供される単一のダイ上に実装されてもよい。他の例では、異なるサブシステムは、単一の統合パッケージとして提供される複数の相互接続されたダイ上に実装されてもよい。
【0040】
例では、SoC 200は、異なる機能性を備えた回路類を有する複数の領域を含む。例では、SoC 200は任意に、データ処理エンジン(DPE)アレイ202を含む。SoC 200は、プログラマブルロジック(PL)領域214(以下、PL領域もしくはPL)と、処理システム(PS)212と、ネットワーク・オン・チップ(NoC)208と、1つまたは複数のハードワイヤード回路ブロック210とを含む。DPEアレイ202は、SoC 200の他の領域に対するインターフェースを有する、複数の相互接続されたハードワイヤードのプログラマブルプロセッサとして実装される。
【0041】
PL 214は、指定された機能を実施するようにプログラムされてもよい回路類である。一例として、PL 214は、フィールドプログラマブルゲートアレイタイプの回路類として実装されてもよい。PL 214は、プログラマブル回路ブロックのアレイを含むことができる。PL 214内のプログラマブル回路ブロックの例としては、設定可能ロジックブロック(CLB)、専用ランダムアクセスメモリブロック(BRAM、および/またはUltraRAMもしくはURAM)、デジタル信号処理ブロック(DSP)、クロックマネージャ、ならびに/あるいは遅延ロックループ(DLL)が挙げられるが、それらに限定されない。
【0042】
Pl 214内の各プログラマブル回路ブロックは、一般的に、プログラマブル相互接続回路類およびプログラマブルロジック回路類の両方を含む。プログラマブル相互接続回路類は、一般的に、プログラマブル相互接続点(PIP)によって相互接続された様々な長さの多数の相互接続ワイヤを含む。一般的に、相互接続ワイヤは、ビット毎に(例えば、各ワイヤが単一ビットの情報を搬送する場合)接続性を提供する(例えば、ワイヤ毎に)ように構成される。プログラマブルロジック回路類は、例えば、ルックアップテーブル、レジスタ、演算ロジックなどを含んでもよいプログラマブル要素を使用して、ユーザ設計のロジックを実装する。プログラマブル相互接続およびプログラマブルロジック回路類は、コンフィギュレーションデータを内部コンフィギュレーションメモリセルにロードすることによってプログラムされてもよく、それによって、プログラマブル要素がどのように構成され動作するかが定義される。
【0043】
PS 212は、SoC 200の一部として組み立てられるハードワイヤード回路類として実装される。PS 212は、それぞれプログラムコードを実行することができる、様々な異なるプロセッサタイプのいずれかとして実装されるか、またはそれを含んでもよい。例えば、PS 212は、個々のプロセッサ、例えばプログラムコードを実行することができるシングルコアとして、実装されてもよい。別の例では、PS 212は、マルチコアプロセッサとして実装されてもよい。更に別の例では、PS 212は、1つもしくは複数のコア、モジュール、コプロセッサ、インターフェース、および/または他のリソースを含んでもよい。PS 212は、様々な異なるタイプのアーキテクチャのいずれかを使用して実装されてもよい。PS 212を実装するのに使用されてもよいアーキテクチャ例としては、ARMプロセッサアーキテクチャ、x86プロセッサアーキテクチャ、GPUアーキテクチャ、モバイルプロセッサアーキテクチャ、DSPアーキテクチャ、コンピュータ-可読命令もしくはプログラムコードを実行することができる他の好適なアーキテクチャ、ならびに/あるいは異なるプロセッサおよび/またはプロセッサアーキテクチャの組合せを挙げることができるが、それらに限定されない。
【0044】
NoC 208は、SoC 200のエンドポイント回路間でデータを共有するための相互接続ネットワークを含む。エンドポイント回路は、DPEアレイ202内、PL領域214、PS 212、および/またはハードワイヤード回路ブロック210内に配設することができる。NoC 208は、専用のスイッチングを備えた高速データパスを含むことができる。一例では、NoC 208は、水平パス、垂直パス、または水平パスおよび垂直パスの両方を含む。
図2に示される領域の配置および数は単なる一例である。NoC 208は、選択された構成要素および/またはサブシステムを接続する、SoC 200内で利用可能な共通のインフラストラクチャの一例である。
【0045】
NoC 208は、PL 214、PS 212、およびハードワイヤード回路ブロック210の選択されたものに対して接続性を提供する。NoC 208はプログラマブルである。他のプログラマブル回路類とともに使用されるプログラマブルNoCの場合、NoC 208を通してルーティングされるネットおよび/またはデータ転送は、SoC 200内に実装されるユーザ回路設計が作成されるまで未知である。NoC 208は、コンフィギュレーションデータを内部コンフィギュレーションレジスタ内にロードすることによってプログラムされてもよく、それによって、スイッチおよびインターフェースなど、NoC 208内の要素がどのように構成され、データをスイッチからスイッチに、またNoCインターフェース間で渡すように動作するかが定義される。
【0046】
NoC 208は、SoC 200の一部として組み立てられ、物理的に修正可能ではないが、ユーザ回路設計の異なるマスタ回路と異なるスレーブ回路との間の接続性を確立するようにプログラムされてもよい。NoC 208は、例えば、ユーザ指定のマスタ回路およびスレーブ回路を接続するパケット交換ネットワークを確立することができる、複数のプログラマブルスイッチを含んでもよい。これに関して、NoC 208は、異なる回路設計に適合することができ、異なる回路設計はそれぞれ、NoC 208によって結合されてもよいSoC 200の異なる位置に実装された、マスタ回路およびスレーブ回路の異なる組合せを有する。NoC 208は、データ、例えばアプリケーションデータおよび/またはコンフィギュレーションデータを、ユーザ回路設計のマスタおよびスレーブ回路の間でルーティングするようにプログラムされてもよい。例えば、NoC 208は、PL 214内に実装された異なるユーザ指定の回路類を、PS 212、および/またはDPEアレイ202と、異なるハードワイヤード回路ブロックと、ならびに/あるいはSoC 200外部の異なる回路および/またはシステムと、結合するようにプログラムされてもよい。
【0047】
ハードワイヤード回路ブロック210は、入出力(I/O)ブロック、ならびに/あるいはSoC 200、メモリコントローラなどの外部の回路および/またはシステムと信号を送受信するトランシーバを含んでもよい。異なるI/Oブロックの例としては、シングルエンドの擬似差動I/Oおよび高速差動クロックトランシーバを挙げることができる。更に、ハードワイヤード回路ブロック210は、特定の機能を実施するために実装されてもよい。ハードワイヤード回路ブロック210の追加の例としては、暗号エンジン、デジタル・アナログ変換器、アナログ・デジタル変換器などが挙げられるがそれらに限定されない。SoC 200内のハードワイヤード回路ブロック210は、本明細書では、場合によっては、特定用途向けブロックと呼ばれることがある。
【0048】
図2の例では、PL 214は2つの別個の領域で示される。別の例では、PL 214は、プログラマブル回路類の統一領域として実装されてもよい。更に別の例では、PL 214は、プログラマブル回路類の2つを超える異なる領域として実装されてもよい。PL 214の特定の組織化は限定を意図しない。これに関して、SoC 200は、1つまたは複数のPL領域214と、PS 212と、NoC 208とを含む。
【0049】
他の実装例では、SoC 200は、ICの異なる領域に位置する2つ以上のDPEアレイ202を含んでもよい。更に他の例では、SoC 200はマルチダイICとして実装されてもよい。その場合、各サブシステムが異なるダイ上に実装されてもよい。異なるダイは、ダイをインターポーザ上に横ならびにスタッキングする、ICがマルチチップモジュール(MCM)として実装されるスタックダイアーキテクチャを使用するなど、様々な利用可能なマルチダイIC技術のいずれかを使用して、通信可能にリンクされてもよい。マルチダイICの例では、各ダイは、単一のサブシステム、2つ以上のサブシステム、サブシステムと別の部分サブシステム、またはそれらの任意の組み合わせを含んでもよいことが認識されるべきである。
【0050】
DPEアレイ202は、SoCインターフェースブロック206を含む、DPE 204の二次元アレイとして実装される。DPEアレイ202は、本明細書で更に詳細に後述する、様々な異なるアーキテクチャのいずれかを使用して実装されてもよい。限定ではなく例示の目的で、
図2は、整列された行および整列された列の形で配置されたDPE 204を示している。しかしながら、他の実施形態では、DPE 204は、選択された行および/または列のDPEを、隣接する行および/または列のDPEに対して水平方向で逆転もしくは反転させて配置されてもよい。1つまたは複数の他の実施形態では、DPEの行および/または列は、隣接する行および/または列に対してオフセットされてもよい。1つもしくは複数または全てのDPE 204は、それぞれプログラムコードを実行することができる1つまたは複数のコアを含むように実装されてもよい。DPE 204の数、特にDPE 204の配置および/またはDPE 204の向きは限定であることを意図しない。
【0051】
SoCインターフェースブロック206は、DPE 204をSoC 200の1つまたは複数の他のサブシステムに結合することができる。1つまたは複数の実施形態では、SoCインターフェースブロック206は隣接するDPE 204に結合される。例えば、SoCインターフェースブロック206は、DPEアレイ202におけるDPEの最下行の各DPE 204に直接結合されてもよい。例示では、SoCインターフェースブロック206は、DPE 204-1、204-2、204-3、204-4、204-5、204-6、204-7、204-8、204-9、および204-10に直接接続されてもよい。
【0052】
図2は、例示の目的で提供されている。他の実施形態では、SoCインターフェースブロック206は、DPEアレイ202の上に、DPEアレイ202の左側に(例えば、列として)、DPEアレイ202の右側に(例えば、列として)、あるいはDPEアレイ202内および周囲の複数の位置に(例えば、DPEアレイ202内の1つもしくは複数の介在する行および/または列として)配置されてもよい。SoCインターフェースブロック206のレイアウトおよび位置に応じて、SoCインターフェースブロック206に結合される特定のDPEは様々であってもよい。
【0053】
例示の目的で、SoCインターフェースブロック206がDPE 204の左側に配置される場合、SoCインターフェースブロック206は、DPE 204-1、DPE 204-11、DPE 204-21、およびDPE 204-31を含む、DPEの左列に直接結合されてもよい。SoCインターフェースブロック206がDPE 204の右側に配置される場合、SoCインターフェースブロック206は、DPE 204-10、DPE 204-20、DPE 204-30、およびDPE 204-40を含む、DPEの右列に直接結合されてもよい。SoCインターフェースブロック206がDPE 204の上に配置される場合、SoCインターフェースブロック206は、DPE 204-31、DPE 204-32、DPE 204-33、DPE 204-34、DPE 204-35、DPE 204-36、DPE 204-37、DPE 204-38、DPE 204-39、およびDPE 204-40を含む、DPEの最上行に結合されてもよい。SoCインターフェースブロック206が複数の位置に配置される場合、SoCインターフェースブロック206に直接接続される特定のDPEは様々であってもよい。例えば、SoCインターフェースブロックがDPEアレイ202内の行および/または列として実装される場合、SoCインターフェースブロック206に直接接続されるDPEは、SoCインターフェースブロック206の1つもしくは複数の側または各側でSoCインターフェースブロック206に隣接するものであってもよい。
【0054】
DPE 204は、集合的に見るとDPE相互接続ネットワークを形成する、DPE相互接続部(図示なし)によって相互接続される。そのため、SoCインターフェースブロック206は、SoCインターフェースブロック206に直接接続されたDPEアレイ202の1つまたは複数の選択されたDPE 204と通信し、それぞれのDPE 204内に実装されたDPE相互接続部で形成されたDPE相互接続ネットワークを利用することによって、DPEアレイ202の任意のDPE 204と通信することができる。
【0055】
SoCインターフェースブロック206は、DPEアレイ202内の各DPE 204をSoC 200の1つまたは複数の他のサブシステムと結合することができる。例えば、SoCインターフェースブロック206は、DPEアレイ202をNoC 208およびPL 214に結合することができる。そのため、DPEアレイ202は、PL 214、PS 212、および/またはいずれかのハードワイヤード回路ブロック210に実装された回路ブロックと通信することができる。例えば、SoCインターフェースブロック206は、選択されたDPE 204とPL 214の間で接続を確立することができる。SoCインターフェースブロック206はまた、選択されたDPE 204とNoC 208の間で接続を確立することができる。NoC 208を通して、選択されたDPE 204は、PS 212および/またはハードワイヤード回路ブロック210と通信することができる。選択されたDPE 204は、SoCインターフェースブロック206およびPL 214を介して、ハードワイヤード回路ブロック210と通信することができる。特定の実施形態では、SoCインターフェースブロック206は、SoC 200の1つまたは複数のサブシステムに直接結合されてもよい。例えば、SoCインターフェースブロック206は、PS 212および/またはハードワイヤード回路ブロック210に直接結合されてもよい。
【0056】
1つまたは複数の実施形態では、DPEアレイ202はシングルクロックドメインを含む。NoC 208、PL 214、PS 212、および様々なハードワイヤード回路ブロック210など、他のサブシステムは、1つもしくは複数の別個のまたは異なるクロックドメインにあってもよい。更に、DPEアレイ202は、サブシステムのうち他のものとインターフェース接続するのに使用されてもよい、追加のクロックを含んでもよい。特定の実施形態では、SoCインターフェースブロック206は、DPEアレイ202のDPE 204に提供または分配されてもよい、1つまたは複数のクロック信号を発生させることができるクロック信号発生器を含む。
【0057】
DPEアレイ202は、コンフィギュレーションデータを内部コンフィギュレーションメモリセル(本明細書では、「コンフィギュレーションレジスタ」とも呼ばれる)にロードして、DPE 204およびSoCインターフェースブロック206の間での接続性と、DPE 204およびSoCインターフェースブロック206がどのように動作するかを定義することによって、プログラムされてもよい。例えば、特定のDPE 204またはDPE 204群がサブシステムと通信する場合、DPE204およびSoCインターフェースブロック206が該通信を行うようにプログラムされる。同様に、1つまたは複数の特定のDPE 204が1つまたは複数の他のDPE 204と通信する場合、DPEが該通信を行うようにプログラムされる。DPE204およびSoCインターフェースブロック206は、コンフィギュレーションデータを、DPE204およびSoCインターフェースブロック206それぞれの中のコンフィギュレーションレジスタにロードすることによってプログラムされてもよい。別の例では、SoCインターフェースブロック206の一部であるクロック信号発生器は、コンフィギュレーションデータを使用して、DPEアレイ202に提供されるクロック周波数を変動させるようにプログラムすることができてもよい。
【0058】
図3は、
図2のDPEアレイ202のDPE 204にかかるアーキテクチャ例を示している。
図3に示される例では、DPE 204は、コア302と、メモリモジュール304と、DPE相互接続部306とを含む。各DPE 204は、ハードワイヤードプログラマブル回路ブロックとしてSoC 200上に実装される。
【0059】
コア302は、DPE 204のデータ処理能力を提供する。コア302は、様々な異なる処理回路のいずれかとして実装されてもよい。
図3の例では、コア302は任意のプログラムメモリ308を含む。実装例では、コア302は、プログラムコード、例えばコンピュータ可読命令を実行することができる、プロセッサとして実装される。その場合、プログラムメモリ308が含まれ、コア302によって実行される命令を格納することができる。コア302は、例えば、CPU、GPU、DSP、ベクトルプロセッサ、または命令を実行することができる他のタイプのプロセッサとして実装されてもよい。コア302は、本明細書に記載する様々なCPUおよび/またはプロセッサアーキテクチャのいずれかを使用して実装されてもよい。別の例では、コア302は、超長命令語(VLIW)ベクトルプロセッサまたはDSPとして実装されてもよい。
【0060】
特定の実現例では、プログラムメモリ308は、コア302にプライベートな(例えば、コア302によって排他的にアクセスされる)専用プログラムメモリとして実装される。プログラムメモリ308は、同じDPE 204のコアによってのみ使用されてもよい。したがって、プログラムメモリ308は、コア302によってのみアクセスされてもよく、他のいずれかのDPEまたは別のDPEの構成要素と共有されない。プログラムメモリ308は、動作を読み書きするためのシングルポートを含んでもよい。プログラムメモリ308は、プログラム圧縮をサポートしてもよく、更に詳細に後述する、DPE相互接続部306のメモリマップドネットワーク部分を使用してアドレス可能である。例えば、DPE相互接続部306のメモリマップドネットワークを介して、プログラムメモリ308に、コア302によって実行されてもよいプログラムコードがロードされてもよい。
【0061】
コア302は、コンフィギュレーションレジスタ324を含んでもよい。コンフィギュレーションレジスタ324には、コア302の動作を制御するコンフィギュレーションデータがロードされてもよい。1つまたは複数の実施形態では、コア302は、コンフィギュレーションレジスタ324にロードされたコンフィギュレーションデータに基づいて、アクティブ化および/または非アクティブ化されてもよい。
図3の例では、コンフィギュレーションレジスタ324は、更に詳細に後述するDPE相互接続部306のメモリマップドネットワークを介してアドレス可能である(例えば、読取りおよび/または書き込みされてもよい)。
【0062】
1つまたは複数の実施形態では、メモリモジュール304は、コア302によって使用および/または生成されるデータを格納することができる。例えば、メモリモジュール304はアプリケーションデータを格納することができる。メモリモジュール304は、ランダムアクセスメモリ(RAM)などの読取り/書込みメモリを含んでもよい。したがって、メモリモジュール304は、コア302によって読み取られ消費されてもよいデータを格納することができる。メモリモジュール304はまた、コア302によって書き込まれるデータ(例えば、結果)を格納することができる。
【0063】
1つまたは複数の他の実施形態では、メモリモジュール304は、DPEアレイ内の他のDPEの1つまたは複数の他のコアによって使用および/または生成されてもよいデータ、例えばアプリケーションデータを格納することができる。DPEの1つまたは複数の他のコアはまた、メモリモジュール304からの読取りおよび/または該モジュールへの書込みを行ってもよい。特定の実施形態では、メモリモジュール304からの読取りおよび/または該モジュールへの書込みを行ってもよい他のコアは、1つまたは複数の近接DPEのコアであってもよい。DPE 204と境界線または境界を共有する(例えば、隣接する)別のDPEは、DPE 204に対して「近接」DPEと言われる。コア302、および近接DPEからの1つまたは複数の他のコアの、メモリモジュール304からの読取りおよび/または該モジュールへの書込みを可能にすることによって、メモリモジュール304は、メモリモジュール304にアクセスすることができる、異なるDPEおよび/またはコアの間での通信をサポートする共有メモリを実装する。
【0064】
例えば、
図2を参照すると、DPE 204-14、204-16、204-5、および204-25は、DPE 204-15の近接DPEとみなされる。一例では、各DPE 204-16、204-5、および204-25内のコアは、DPE 204-15内のメモリモジュールに対して読取りおよび書込みを行うことができる。特定の実施形態では、メモリモジュールに隣接するそれらの近接DPEのみが、DPE 204-15のメモリモジュールにアクセスしてもよい。例えば、DPE 204-14は、DPE 204-15に隣接しているが、DPE 204-15のコアはDPE 204-14のコアとDPE 204-15のメモリモジュールとの間に配置されることがあるので、DPE 204-15のメモリモジュールには隣接していないことがある。そのため、特定の実施形態では、DPE 204-14のコアはDPE 204-15のメモリモジュールにアクセスしないことがある。
【0065】
特定の実施形態では、DPEのコアが別のDPEのメモリモジュールにアクセスできるか否かは、メモリモジュールに含まれるメモリインターフェースの数、およびかかるコアがメモリモジュールのメモリインターフェースのうち利用可能なものに接続されるか否かに応じて決まる。上述の例では、DPE 204-15のメモリモジュールは4つのメモリインターフェースを含み、DPE 204-16、204-5、および204-25それぞれのコアはかかるメモリインターフェースに接続される。DPE 204-15自体の中のコア302は、第4のメモリインターフェースに接続される。各メモリインターフェースは、1つもしくは複数の読取りおよび/または書込みチャネルを含んでもよい。特定の実施形態では、各メモリインターフェースは、複数の読取りチャネルおよび複数の書込みチャネルを含むので、該メモリインターフェースに取り付けられた特定のコアは、メモリモジュール304内の複数のバンクに対して同時に読取りおよび/または書込みを行うことができる。
【0066】
他の例では、4つよりも多いメモリインターフェースが利用可能であってもよい。かかる他のメモリインターフェースは、DPE 204-15に対する対角線上のDPEがDPE 204-15のメモリモジュールにアクセスするのを可能にするのに使用されてもよい。例えば、DPE 204-14、204-24、204-26、204-4、および/または204-6などのDPEのコアも、DPE 204-15におけるメモリモジュールの利用可能なメモリインターフェースに結合される場合、かかる他のDPEも、DPE 204-15のメモリモジュールにアクセスすることができる。
【0067】
メモリモジュール304はコンフィギュレーションレジスタ336を含んでもよい。コンフィギュレーションレジスタ336には、メモリモジュール304の動作を制御するコンフィギュレーションデータがロードされてもよい。
図3の例では、コンフィギュレーションレジスタ336(および324)は、更に詳細に後述するDPE相互接続部306のメモリマップドネットワークを介してアドレス可能である(例えば、読取りおよび/または書き込みされてもよい)。
【0068】
図3の例では、DPE相互接続部306はDPE 204に対して特異的である。DPE相互接続部306は、DPE 204とDPEアレイ202の1つもしくは複数の他のDPEとの間の通信、および/またはSoC 200の他のサブシステムとの通信を含む、様々な動作を容易にする。DPE相互接続部306は更に、DPE 204の構成、制御、およびデバッギングができるようにする。
【0069】
特定の実施形態では、DPE相互接続部306はオンチップ相互接続部として実装される。オンチップ相互接続部の一例は、アドバンストマイクロコントローラバスアーキテクチャ(AMBA)拡張可能インターフェース(AXI)バス(例えば、またはスイッチ)である。AMBA AXIバスは、回路ブロックおよび/またはシステムの間のオンチップ接続を確立するのに使用される、埋込み型マイクロコントローラバスインターフェースである。AXIバスは、本明細書では、本開示内で記載する発明の構成とともに使用されてもよい相互接続回路類の一例として提供され、そのため、限定であることを意図しない。相互接続回路類の他の例は、他のタイプのバス、クロスバー、および/または他のタイプのスイッチを含んでもよい。
【0070】
1つまたは複数の実施形態では、DPE相互接続部306は2つの異なるネットワークを含む。第1のネットワークは、DPEアレイ202の他のDPEおよび/またはSoC 200の他のサブシステムとデータを交換することができる。例えば、第1のネットワークはアプリケーションデータを交換することができる。第2のネットワークは、DPEに関するデータの構成、制御、および/またはデバッギングなど、データを交換することができる。
【0071】
図3の例では、DPE相互接続部306の第1のネットワークは、ストリームスイッチ326および1つまたは複数のストリームインターフェース(図示なし)で形成される。例えば、ストリームスイッチ326は、コア302、メモリモジュール304、メモリマップドスイッチ332、上方のDPE、左側のDPE、右側のDPE、および下方のDPEそれぞれに接続するストリームインターフェースを含む。各ストリームインターフェースは、1つまたは複数のマスタおよび1つまたは複数のスレーブを含んでもよい。
【0072】
ストリームスイッチ326は、非近接DPE、および/またはメモリモジュール304のメモリインターフェースに結合されていないDPEが、DPEアレイ202のそれぞれのDPE 204のDPE相互接続部によって形成されるDPE相互接続ネットワークを介して、コア302および/またはメモリモジュール304と通信するのを可能にすることができる。
【0073】
図2を再び参照し、DPE 204-15を基準点として使用すると、ストリームスイッチ326は、DPE 204-14のDPE相互接続部に配置された別のストリームスイッチに結合され、該ストリームスイッチと通信することができる。ストリームスイッチ326は、DPE 204-25のDPE相互接続部に配置された別のストリームスイッチに結合され、該ストリームと通信することができる。ストリームスイッチ326は、DPE 204-16のDPE相互接続部に配置された別のストリームスイッチに結合され、該ストリームと通信することができる。ストリームスイッチ326は、DPE 204-5のDPE相互接続部に配置された別のストリームスイッチに結合され、該ストリームと通信することができる。そのため、コア302および/またはメモリモジュール304はまた、DPEのDPE相互接続部を介して、DPEアレイ202内のDPEのいずれかと通信することができる。
【0074】
ストリームスイッチ326はまた、PL 214および/またはNoC 208などのサブシステムにインターフェース接続するのに使用されてもよい。一般に、ストリームスイッチ326は、回路交換ストリーム互接続部またはパケット交換ストリーム相互接続部として動作するようにプログラムされる。回路交換ストリーム相互接続部は、DPE間での高帯域幅通信に適したポイント・ツー・ポイント専用ストリームを実装することができる。パケット交換ストリーム相互接続部は、ストリームを共有して、中帯域幅通信のための1つの物理的ストリーム上の時分割多重化論理ストリームにするのを可能にする。
【0075】
ストリームスイッチ326は、コンフィギュレーションレジスタ(
図3では「CR」と略される)334を含んでもよい。コンフィギュレーションデータは、DPE相互接続部306のメモリマップドネットワークを用いてコンフィギュレーションレジスタ334に書き込まれてもよい。コンフィギュレーションレジスタ334にロードされたコンフィギュレーションデータは、他のDPEおよび/またはサブシステム(例えば、NoC 208、PL 214、および/またはPS 212)のどれとDPE 204が通信するか、またかかる通信が回路交換ポイント・ツー・ポイント接続またはパケット交換接続のどちらとして確立されるかを指示する。
【0076】
DPE相互接続部306の第2のネットワークはメモリマップドスイッチ332で形成される。メモリマップドスイッチ332は複数のメモリマップドインターフェース(図示なし)を含む。各メモリマップドインターフェースは、1つまたは複数のマスタおよび1つまたは複数のスレーブを含んでもよい。例えば、メモリマップドスイッチ332は、コア302、メモリモジュール304、DPE 204の上方のDPEのメモリマップドスイッチ、およびDPE 204の下方のDPEのメモリマップドスイッチのそれぞれに接続する、メモリマップドインターフェースを含む。
【0077】
メモリマップドスイッチ332は、DPE 204に関するデータの構成、制御、およびデバッギングを搬送するのに使用される。
図3の例では、メモリマップドスイッチ332は、DPE 204を構成するのに使用される、コンフィギュレーションデータを受信することができる。メモリマップドスイッチ332は、コンフィギュレーションデータをDPE 204の下方に配置されたDPEから、および/またはSoCインターフェースブロック206から受信してもよい。メモリマップドスイッチ332は、受信したコンフィギュレーションデータを、DPE 204の上方の1つまたは複数の他のDPEに、コア302に(例えば、プログラムメモリ308に、および/またはコンフィギュレーションレジスタ324に)、メモリモジュール304に(例えば、メモリモジュール304内のメモリに、および/またはコンフィギュレーションレジスタ336に)、ならびに/あるいはストリームスイッチ326内のコンフィギュレーションレジスタ334に回送することができる。
【0078】
DPE相互接続部306は、DPE 204の位置に応じて、各近接DPEのDPE相互接続部、および/またはSoCインターフェースブロック206に結合される。集合的に見て、DPE 204のDPE相互接続部は、DPE相互接続ネットワーク(ストリームネットワークおよび/またはメモリマップドネットワークを含んでもよい)を形成する。各DPEのストリームスイッチのコンフィギュレーションレジスタは、メモリマップドスイッチを通してコンフィギュレーションデータをロードすることによってプログラムされてもよい。構成を通して、ストリームスイッチおよび/またはストリームインターフェースは、1つもしくは複数の他のDPE 204および/またはSoCインターフェースブロック206のどちらかの他のエンドポイントと、パケット交換または回路交換のどちらかの接続を確立するようにプログラムされる。
【0079】
1つまたは複数の実施形態では、DPEアレイ202は、PS 212など、プロセッサシステムのアドレス空間にマッピングされる。したがって、DPE 204内の任意のコンフィギュレーションレジスタおよび/またはメモリが、メモリマップドインターフェースを介してアクセスされてもよい。例えば、メモリモジュール304内のメモリ、プログラムメモリ308、コア302内のコンフィギュレーションレジスタ324、メモリモジュール304内のコンフィギュレーションレジスタ336、および/またはコンフィギュレーションレジスタ334の読取りおよび/または書込みが、メモリマップドスイッチ332を介して行われてもよい。
【0080】
図3の例では、メモリマップドスイッチ332は、DPE 204のコンフィギュレーションデータを受信することができる。コンフィギュレーションデータは、プログラムメモリ308(含まれる場合)にロードされるプログラムコード、コンフィギュレーションレジスタ324、334、および/または336にロードするためのコンフィギュレーションデータ、ならびに/あるいはメモリモジュール304のメモリ(例えば、メモリバンク)にロードされるべきデータを含んでもよい。
図3の例では、コンフィギュレーションレジスタ324、334、および336は、コンフィギュレーションレジスタが制御することが意図される、特定の回路構造、例えばコア302、ストリームスイッチ326、およびメモリモジュール304の中に配置されるものとして示される。
図3の例は、例示のみを目的とし、コア302、メモリモジュール304、および/またはストリームスイッチ326内の要素が、コンフィギュレーションデータを対応するコンフィギュレーションレジスタにロードすることによってプログラムされてもよいことを示す。他の実施形態では、コンフィギュレーションレジスタは、DPE 204全体に分配された構成要素の動作を制御するのにかかわらず、DPE 204の特定の領域内に統合されてもよい。
【0081】
したがって、ストリームスイッチ326は、コンフィギュレーションデータをコンフィギュレーションレジスタ334にロードすることによってプログラムされてもよい。コンフィギュレーションデータは、2つの異なるDPEおよび/または他のサブシステムの間で回路交換モードで、あるいは選択されたDPEおよび/または他のサブシステムの間でパケット交換モードで動作するように、ストリームスイッチ326をプログラムする。したがって、ストリームスイッチ326によって確立される、他のストリームインターフェースおよび/またはスイッチに対する接続は、好適なコンフィギュレーションデータをコンフィギュレーションレジスタ334にロードすることによってプログラムされて、DPE 204内の、他のDPEとの、および/またはIC 300の他のサブシステムとの、実際の接続もしくはアプリケーションデータパスを確立する。
【0082】
図4は、
図3のアーキテクチャ例の更なる態様を示している。
図4の例では、DPE相互接続部306に関する詳細は示されない。
図4は、共有メモリを通したコア302と他のDPEとの接続性を示す。
図4はまた、メモリモジュール304の追加の態様を示す。例示の目的で、
図4はDPE 204-15を指す。
【0083】
図示されるように、メモリモジュール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はデュアルポートまたはマルチポートであり、それによってクロックサイクルごとにより多数の並列アクセスが可能になる。
【0084】
図4の例では、各メモリバンク412-1~412-Nは、それぞれのアービタ414-1~414-Nを有する。各アービタ414は、競合の検出に応答してストール信号を生成することができる。各アービタ414は調停ロジックを含んでもよい。更に、各アービタ414はクロスバーを含んでもよい。したがって、任意のマスタが、メモリバンク412のいずれか特定の1つまたは複数に書込みを行うことができる。
図3と関連して示したように、メモリモジュール304はメモリマップドスイッチ332に接続され、それによってメモリバンク412に対するデータの読取りおよび書込みが容易になる。そのため、メモリモジュール304に格納された特定のデータは、メモリマップドスイッチ332を通した構成、制御、および/またはデバッギングプロセスの一部として、制御、例えば書込みされてもよい。
【0085】
メモリモジュール304は更に、ダイレクトメモリアクセス(DMA)エンジン416を含む。1つまたは複数の実施形態では、DMAエンジン416は少なくとも2つのインターフェースを含む。例えば、1つまたは複数のインターフェースは、入力データストリームをDPE相互接続部306から受信し、受信したデータをメモリバンク412に書き込むことができる。1つまたは複数の他のインターフェースは、データをメモリバンク412から読み取り、DPE相互接続部306のストリームインターフェース(例えば、ストリームスイッチ)を介してデータを送出することができる。例えば、DMAエンジン416は、
図3のストリームスイッチ326にアクセスするためのストリームインターフェースを含んでもよい。
【0086】
メモリモジュール304は、複数の異なるDPEによってアクセスされてもよい、共有メモリとして動作することができる。
図4の例では、メモリインターフェース402は、コア302に含まれるコアインターフェース428を介してコア302に結合される。メモリインターフェース402は、アービタ414を通してメモリバンク412へのアクセスをコア302に提供する。メモリインターフェース404はDPE 204-25のコアに結合される。メモリインターフェース404は、メモリバンク412へのアクセスをDPE 204-25のコアに提供する。メモリインターフェース406はDPE 204-16のコアに結合される。メモリインターフェース406は、メモリバンク412へのアクセスをDPE 204-16のコアに提供する。メモリインターフェース408はDPE 204-5のコアに結合される。メモリインターフェース408は、メモリバンク412へのアクセスをDPE 204-5のコアに提供する。したがって、
図4の例では、DPE 204-15のメモリモジュール304と共有の境界を有する各DPEは、メモリバンク412に対して読取りおよび書込みを行うことができる。
図4の例では、DPE 204-14のコアは、DPE 204-15のメモリモジュール304に対する直接アクセスを有さない。
【0087】
コア302は、コアインターフェース430、432、および434を介して、他の近接DPEのメモリモジュールにアクセスすることができる。
図4の例では、コアインターフェース434は、DPE 204-25のメモリインターフェースに結合される。したがって、コア302は、コアインターフェース434、およびDPE 204-25のメモリモジュール内に含まれるメモリインターフェースを介して、DPE 204-25のメモリモジュールにアクセスすることができる。コアインターフェース432はDPE 204-14のメモリインターフェースに結合される。したがって、コア302は、コアインターフェース432、およびDPE 204-14のメモリモジュール内に含まれるメモリインターフェースを介して、DPE 204-14のメモリモジュールにアクセスすることができる。コアインターフェース430はDPE 204-5内のメモリインターフェースに結合される。したがって、コア302は、コアインターフェース430、およびDPE 204-5のメモリモジュール内に含まれるメモリインターフェースを介して、DPE 204-5のメモリモジュールにアクセスすることができる。考察したように、コア302は、コアインターフェース428およびメモリインターフェース402を介して、DPE 204-15内のメモリモジュール304にアクセスすることができる。
【0088】
図4の例では、コア302は、DPE 204-15のコア302と境界を共有するDPE(例えば、DPE 204-25、204-14、および204-5)のメモリモジュールのいずれかに対する読取りおよび書込みを行うことができる。1つまたは複数の実施形態では、コア302は、DPE 204-25、204-15、204-14、および204-5内のメモリモジュールを、単一の連続するメモリとして(例えば、単一のアドレス空間として)見ることができる。そのため、かかるDPEのメモリモジュールに対するコア302の読取りおよび/または書込みのプロセスは、メモリモジュール304に対するコア302の読取りおよび/または書込みと同じである。コア302は、この連続するメモリモデルを推定する読取りおよび書込みのためのアドレスを生成することができる。コア302は、生成されるアドレスに基づいて、適切なコアインターフェース428、430、432、および/または434に対して読取りおよび/または書込み要求を方向付けることができる。
【0089】
示されるように、コア302は、読取りおよび/または書込み動作のアドレスに基づいて、コアインターフェース428、430、432、および/または434を通して、かかる動作を適正な方向でマッピングすることができる。コア302がメモリアクセスのためのアドレスを生成すると、コア302は、アドレスを復号して方向(例えば、アクセスされる特定のDPE)を決定し、メモリ動作を決定された方向で適正なコアインターフェースに回送する。
【0090】
したがって、コア302は、DPE 204-25内のメモリモジュールおよび/またはDPE 204-15のメモリモジュール304であってもよい共有メモリを介して、DPE 204-25のコアと通信することができる。コア302は、DPE 204-14内のメモリモジュールである共有メモリを介して、DPE 204-14のコアと通信することができる。コア302は、DPE 204-5内のメモリモジュールおよび/またはDPE 204-15のメモリモジュール304であってもよい共有メモリを介して、DPE 204-5のコアと通信することができる。更に、コア302は、DPE 204-15内のメモリモジュール304である共有メモリを介して、DPE 204-16のコアと通信することができる。
【0091】
考察したように、DMAエンジン416は、1つまたは複数のストリーム・メモリ間インターフェースを含んでもよい。DMAエンジン416を通して、アプリケーションデータがSoC 200内の他のソースから受信され、メモリモジュール304に格納されてもよい。例えば、データは、ストリームスイッチ326を用いて、DPE 204-15と境界を共有する、および/または共有しない他のDPEから受信されてもよい。データはまた、DPEのストリームスイッチを通してSoCインターフェースブロック206を用いて、SoCの他のサブシステム(例えば、NoC 208、ハードワイヤード回路ブロック210、PL 214、および/またはPS 212)から受信されてもよい。DMAエンジン416は、かかるデータをストリームスイッチから受信し、データを適切なメモリバンクまたはメモリモジュール304内のメモリバンク412に書き込むことができる。
【0092】
DMAエンジン416は、1つまたは複数のメモリ・ストリーム間インターフェースを含んでもよい。DMAエンジン416を通して、データがメモリバンクまたはメモリモジュール304のメモリバンク412から読み取られ、ストリームインターフェースを介して他の宛先に送られてもよい。例えば、DMAエンジン416は、データをメモリモジュール304から読み取り、かかるデータを、ストリームスイッチを用いて、DPE 204-15と境界を共有する、および/または共有しない他のDPEに送ることができる。DMAエンジン416はまた、ストリームスイッチおよびSoCインターフェースブロック206を用いて、かかるデータを他のサブシステム(例えば、NoC 208、ハードワイヤード回路ブロック210、PL 214、および/またはPS 212)に送ることができる。
【0093】
1つまたは複数の実施形態では、DMAエンジン416は、DPE 204-15内のメモリマップドスイッチ332によってプログラムされる。例えば、DMAエンジン416はコンフィギュレーションレジスタ336によって制御されてもよい。コンフィギュレーションレジスタ336は、DPE相互接続部306のメモリマップドスイッチ332を使用して書き込まれてもよい。特定の実施形態では、DMAエンジン416は、DPE 204-15内のストリームスイッチ326によって制御されてもよい。例えば、DMAエンジン416は、接続されたストリームスイッチ326によって書き込まれてもよい、制御レジスタを含んでもよい。DPE相互接続部306内のストリームスイッチ326を介して受信されたストリームは、コンフィギュレーションレジスタ324、334、および/または336にロードされたコンフィギュレーションデータに応じて、メモリモジュール304のDMAエンジン416に、および/または直接コア302に接続されてもよい。ストリームは、コンフィギュレーションレジスタ324、334、および/または336にロードされたコンフィギュレーションデータに応じて、DMAエンジン416(例えば、メモリモジュール304)および/またはコア302から送られてもよい。
【0094】
メモリモジュール304は更に、ハードウェア同期回路類420(
図4では「HSC」と略される)を含んでもよい。一般に、ハードウェア同期回路類420は、異なるコア(例えば、近接DPEのコア)、
図4のコア302、DMAエンジン416、およびDPE相互接続部306を介して通信してもよい他の外部マスタ(例えば、PS 212)の動作を同期することができる。例示の非限定例として、ハードウェア同期回路類420は、DPE 204-15および/または該DPEにアクセスする異なるDPE、例えばメモリモジュール304の共有されるバッファにおける、2つの異なるコア、ストリームスイッチ、メモリマップドインターフェース、および/またはDMAを同期することができる。
【0095】
2つのDPEが近接していない場合、2つのDPEは共通のメモリモジュールに対するアクセスを有さない。その場合、アプリケーションデータは、データストリームを介して転送されてもよい(「データストリーム」および「ストリーム」という用語は、本開示内で場合によっては交換可能に使用されることがある)。そのため、ローカルDMAエンジンは、転送をローカルメモリベースの転送からストリームベースの転送に変換することができる。その場合、コア302およびDMAエンジン416は、ハードウェア同期回路類420を使用して同期することができる。
【0096】
PS 212は、メモリマップドスイッチ332を介してコア302と通信することができる。PS 212は、例えば、メモリの読取りおよび書込みを開始することによって、メモリモジュール304およびハードウェア同期回路類420にアクセスすることができる。別の実施形態では、ハードウェア同期回路類420はまた、ロックの状態が、ハードウェア同期回路類420のPS 212によるポーリングを回避するように変化すると、割込みをPS 212に送ってもよい。PS 212はまた、ストリームインターフェースを介してDPE 204-15と通信することができる。
【0097】
共有メモリモジュールを通して近接DPEと、ならびにDPE相互接続部306を介して近接および/または非近接DPEと通信することに加えて、コア302はカスケードインターフェースを含んでもよい。
図4の例では、コア302は、カスケードインターフェース422および424(
図4では「CI」と略される)を含む。カスケードインターフェース422および424は、他のコアとの直接通信を提供することができる。図示されるように、コア302のカスケードインターフェース422は、入力データストリームをDPE 204-14のコアから直接受信する。カスケードインターフェース422を介して受信されたデータストリームは、コア302内のデータ処理回路類に提供されてもよい。コア302のカスケードインターフェース424は、出力データストリームをDPE 204-16のコアに直接送ることができる。
【0098】
図4の例では、カスケードインターフェース422およびカスケードインターフェース424はそれぞれ、バッファリングのための先入れ先出し(FIFO)インターフェースを含んでもよい。特定の実施形態では、カスケードインターフェース422および424は、数百ビット幅であってもよいデータストリームを搬送することができる。カスケードインターフェース422および424の特定のビット幅は限定を意図しない。
図4の例では、カスケードインターフェース424は、コア302内のアキュムレータレジスタ436(
図4内では「AC」と略される)に結合される。カスケードインターフェース424は、アキュムレータレジスタ436のコンテンツを出力することができ、該動作を各クロックサイクルで行ってもよい。アキュムレーションレジスタ436は、コア302内のデータ処理回路類によって生成および/または操作されるデータを格納してもよい。
【0099】
図4の例では、カスケードインターフェース422および424は、コンフィギュレーションレジスタ324にロードされたコンフィギュレーションデータに基づいてプログラムされてもよい。例えば、コンフィギュレーションレジスタ324に基づいて、カスケードインターフェース422はアクティブ化または非アクティブ化されてもよい。同様に、コンフィギュレーションレジスタ324に基づいて、カスケードインターフェース424はアクティブ化または非アクティブ化されてもよい。カスケードインターフェース422は、カスケードインターフェース424とは独立してアクティブ化および/または非アクティブ化されてもよい。
【0100】
1つまたは複数の他の実施形態では、カスケードインターフェース422および424はコア302によって制御される。例えば、コア302は、カスケードインターフェース422および/または424の読取り/書込みを行う命令を含んでもよい。別の例では、コア302は、カスケードインターフェース422および/または424の読取りおよび/または書込みを行うことができるハードワイヤード回路類を含んでもよい。特定の実施形態では、カスケードインターフェース422および424はコア302外部のエンティティによって制御されてもよい。
【0101】
本開示内に記載する実施形態内では、DPE 204はキャッシュメモリを含まない。キャッシュメモリを省略することによって、DPEアレイ202は、予測可能な、例えば確定的な性能を達成することができる。更に、異なるDPEに配置されたキャッシュメモリの間でコヒーレンシーを維持することが求められないので、著しい処理オーバーヘッドが回避される。
【0102】
1つまたは複数の実施形態によれば、DPE 204のコア302は入力割込みを有さない。したがって、DPE 204のコア302は割込みなしで動作することができる。DPE 204のコア302に対する入力割込みを省略することによっても、DPEアレイ202が予測可能な、例えば確定的な性能を達成することが可能になる。
【0103】
図5は、DPEアレイにかかる別のアーキテクチャ例を示している。
図5の例では、SoCインターフェースブロック206は、DPE 204とSoC 200の他のサブシステムとの間にインターフェースを提供する。SoCインターフェースブロック206はDPEをデバイスに統合する。SoCインターフェースブロック206は、コンフィギュレーションデータをDPE 204に搬送すること、イベントをDPE 204から他のサブシステムに搬送すること、イベントを他のサブシステムからDPE 204に搬送すること、割込みを生成するとともにDPEアレイ202の外部のエンティティに搬送すること、アプリケーションデータを他のサブシステムとDPE 204との間で搬送すること、ならびに/あるいはトレースおよび/またはデバッグデータを他のサブシステムとDPE 204との間で搬送することができる。
【0104】
図5の例では、SoCインターフェースブロック206は複数の相互接続されたタイルを含む。例えば、SoCインターフェースブロック206は、タイル502、504、506、508、510、512、514、516、518、および520を含む。
図5の例では、タイル502~520は行の形で組織化される。他の実施形態では、タイルは、列、グリッド、または別のレイアウトの形で配置されてもよい。例えば、SoCインターフェースブロック206は、DPE 204の左側、DPE 204の右側、DPE 204の列の間などに、タイルの列として実装されてもよい。別の実施形態では、SoCインターフェースブロック206はDPEアレイ202の上方に配置されてもよい。SoCインターフェースブロック206は、DPEアレイ202の下方、DPEアレイ202の左側、DPEアレイ202の右側、および/またはDPEアレイ202の上方の任意の組合せで、タイルが配置されるようにして実装されてもよい。これに関して、
図5は限定ではなく例示の目的で提供される。
【0105】
1つまたは複数の実施形態では、タイル502~520は同じアーキテクチャを有する。1つまたは複数の他の実施形態では、タイル502~520は2つ以上の異なるアーキテクチャで実装されてもよい。特定の実施形態では、異なるアーキテクチャは、異なるタイルアーキテクチャそれぞれが、SoC 200の異なるタイプのサブシステムまたはサブシステムの組合せとの通信をサポートする、SoCインターフェースブロック206内でタイルを実装するのに使用されてもよい。
【0106】
図5の例では、タイル502~520は、データが1つのタイルから次のタイルへと伝播されてもよいようにして結合される。例えば、データは、タイル502からタイル504、506を通って、タイル520までのタイルのラインを伝播されてもよい。同様に、データは、タイル520からタイル502へと逆方向で伝播されてもよい。1つまたは複数の実施形態では、タイル502~520はそれぞれ、複数のDPEに対するインターフェースとして動作することができる。例えば、タイル502~520はそれぞれ、DPE アレイ202のDPE 204のサブセットに対するインターフェースとして動作することができる。各タイルがインターフェースを提供するDPEのサブセットは、SoCインターフェースブロック206の1つを超えるタイルによるインターフェースが提供されるDPEがないように、相互に排他的であってもよい。
【0107】
一例では、タイル502~520はそれぞれ、DPE204の列に対するインターフェースを提供する。例示の目的で、タイル502は、列AのDPEに対するインターフェースを提供する。タイル504は、列BのDPEに対するインターフェースを提供し、その後も同様である。それぞれの場合において、タイルは、この例では一番下のDPEである、DPEの列の隣接するDPEに対する直接接続を含む。列Aを参照すると、例えば、タイル502はDPE 204-1に直接接続される。列A内の他のDPEは、タイル502と通信してもよいが、同じ列の介在するDPEのDPE相互接続部を通して通信する。
【0108】
例えば、タイル502は、PS 212、PL 214、および/またはアプリケーション特異的な回路ブロックなどの別のハードワイヤード回路ブロック210など、別のソースからデータを受信することができる。タイル502は、列AのDPEにアドレスされたデータの部分をかかるDPEに提供する一方で、他の列のDPE(例えば、タイル502がインターフェースとなる対象ではないDPE)にアドレスされたデータをタイル504に送ることができる。タイル504は、列BのDPEにアドレスされているタイル502から受信されたデータがかかるDPEに提供される一方で、他の列のDPEにアドレスされたデータをタイル506に送り、その後も同様である、同じまたは類似の処理を実施してもよい。
【0109】
このように、データは、データがアドレスされるDPE(例えば、「対象DPE」)に対するインターフェースとして動作するタイルに達するまで、SoCインターフェースブロック206のタイルからタイルへと伝播してもよい。対象DPEに対するインターフェースとして動作するタイルは、DPEのメモリマップドスイッチおよび/またはDPEのストリームスイッチを使用して、データを対象DPEに方向付けることができる。
【0110】
示されるように、列の使用は実装例である。他の実施形態では、SoCインターフェースブロック206の各タイルは、インターフェースをDPEアレイ202のDPEの行に提供することができる。かかる構成は、SoCインターフェースブロック206が、DPE 204の左側か、右側か、または間かにかかわらず、タイルの列として実装される場合に使用されてもよい。他の実施形態では、各タイルがインターフェースを提供するDPEのサブセットは、DPEアレイ202の全てのDPEよりも少数の任意の組み合わせであってもよい。例えば、DPE 204は、SoCインターフェースブロック206のタイルに均等に配分されてもよい。かかるDPEの特定の物理的レイアウトは、DPE相互接続部によって確立されるようなDPEの接続性に基づいて変化してもよい。例えば、タイル502は、DPE 204-1、204-2、204-11、および204-12に対してインターフェースを提供してもよい。SoCインターフェースブロック206の別のタイルは、他の4つのDPEに対してインターフェースを提供し、その後も同様であってもよい。
【0111】
図6は、SoCインターフェースブロック206のタイルにかかるアーキテクチャ例を示している。
図6の例では、SoCインターフェースブロック206に対する2つの異なるタイプのタイルが示される。タイル602は、DPEとPL 214のみとの間のインターフェースとして役立つように構成される。タイル610は、DPEとNoC 208との間、およびDPEとPL 214との間のインターフェースとして役立つように構成される。SoCインターフェースブロック206は、タイル602およびタイル610に関して例示したような両方のアーキテクチャを使用するタイルの組合せ、または別の例では、タイル610に関して例示したようなアーキテクチャを有するタイルのみを含んでもよい。
【0112】
図6の例では、タイル602は、PLインターフェース606に、および直上のDPE 204-1などのDPEに接続された、ストリームスイッチ604を含む。PLインターフェース606は、PL 214にそれぞれ配置される、境界ロジックインターフェース(BLI)回路620およびBLI回路622に接続する。タイル610は、NoCおよびPLインターフェースに、および直上のDPE 204-5などのDPEに接続された、ストリームスイッチ612を含む。NoCおよびPLインターフェース614は、PL 214のBLI回路624および626に、およびNoC208のNoCマスタユニット(NMU)630およびNoCスレーブユニット(NSU)632にも接続する。
【0113】
図6の例では、各ストリームインターフェース604は、結合されたDPEに6つの異なる32ビットデータストリームを出力し、該DPEから4つの異なる32ビットデータストリームを受信することができる。PLインターフェース606ならびにNoCおよびPLインターフェース614はそれぞれ、BLI 620およびBLI 624をそれぞれ用いて、6つの異なる64ビットデータストリームをPL 214に提供することができる。一般に、BLI 620、622、624、および626はそれぞれ、PLインターフェース606ならびに/あるいはNoCおよびPLインターフェース614が接続する、PL 214内のインターフェースまたは接続点を提供する。PLインターフェース606ならびにNoCおよびPLインターフェース614はそれぞれ、BLI 622およびBLI 624をそれぞれ用いて、8つの異なる64ビットデータストリームをPL 214から受信することができる。
【0114】
NoCおよびPLインターフェース614はNoC 208にも接続される。
図6の例では、NoCおよびPLインターフェース614は、1つまたは複数のNMU 630に、また1つまたは複数のNSU 632に接続する。一例では、NoCおよびPLインターフェース614は、2つの異なる128ビットデータストリームをNoC 208に提供することができ、各データストリームは異なるNMU 630に提供される。NoCおよびPLインターフェース614は、2つの異なる128ビットデータストリームをNoC 208から受信することができ、各データストリームは異なるNSU 632から受信される。
【0115】
隣接するタイルのストリームスイッチ604は接続される。一例では、隣接するタイルのストリームスイッチ604は、(例えば、場合によって、タイルが右側または左側にある限り)左方向および右方向それぞれで4つの異なる32ビットデータストリームを用いて通信することができる。
【0116】
タイル602および610はそれぞれ、コンフィギュレーションデータを搬送する1つまたは複数のメモリマップドスイッチを含んでもよい。例示の目的で、メモリマップドスイッチは図示されない。メモリマップドスイッチは、例えば、直上のDPEのメモリマップドスイッチに、SoCインターフェースブロック206の他の隣接するタイルのメモリマップドスイッチに、ストリームスイッチ604と同じもしくは同様の形で、タイル602および610(図示なし)のコンフィギュレーションレジスタに、ならびに/あるいは場合によって、PLインターフェース608またはNoCおよびPLインターフェース614に、垂直に接続することができる。
【0117】
DPE 204、ならびに/あるいはSoCインターフェースブロック206のタイル602および/または610に含まれる様々なスイッチと関連して記載する、様々なビット幅およびデータストリームの数は、例示の目的で提供されるものであり、本開示内に記載される発明の構成を限定することを意図しない。
【0118】
図7は、NoC 208の実装例を示している。NoC 208は、NMU 702と、NSU 704と、ネットワーク714と、NoC周辺相互接続部(NPI)710と、レジスタ712とを含む。各NMU 702は、エンドポイント回路をNoC 208に接続するイングレス回路である。各NSU 704は、NoC 208をエンドポイント回路に接続するイグレス回路である。NMU 702は、ネットワーク714を通してNSU 704に接続される。一例では、ネットワーク714は、NoCパケットスイッチ706(NPS)と、NPS 706の間のルーティング708とを含む。各NPS 706はNoCパケットの交換を実施する。NPS 706は、ルーティング708を通して互いに、またNMU 702およびNSU 704に接続されて、複数の物理的チャネルを実装する。NPS 706はまた、物理的チャネル毎に複数の仮想チャネルをサポートする。
【0119】
NPI 710は、NMU 702、NSU 704、およびNPS 706をプログラムする回路類を含む。例えば、NMU 702、NSU 704、およびNPS 706は、自身の機能性を決定するレジスタ712を含むことができる。NPI 710は、機能性を設定するように自身をプログラムするため、レジスタ712に結合された周辺相互接続部を含む。NoC 208のレジスタ712は、割込み、サービス品質(QoS)、エラーハンドリングおよびレポート、トランザクション制御、電源管理、およびアドレスマッピング制御をサポートする。レジスタ712は、書込み要求を使用してレジスタ712に書き込むことなどによってリプログラムされる前に、使用可能状態で初期化することができる。NoC 208のコンフィギュレーションデータは、例えば、プログラミングデバイスイメージ(PDI)の一部として、不揮発性メモリ(NVM)に格納し、NoC 208および/または他のエンドポイント回路をプログラムするため、NPI 710に提供することができる。
【0120】
NMU 702はトラフィックイングレスポイントである。NSU 704はトラフィックイグレスポイントである。NMU 702およびNSU 704に結合されたエンドポイント回路は、硬化回路(例えば、ハードワイヤード回路ブロック210)またはPL 214に実装された回路であることができる。所与のエンドポイント回路は、1つを超えるNMU 702または1つを超えるNSU 704に結合することができる。
【0121】
図8は、一例による、NoC 208を通したSoC 200のエンドポイント回路間の接続を示すブロック図である。この例では、エンドポイント回路802はNoC 208を通してエンドポイント回路804に接続される。エンドポイント回路802は、NoC 208のNMU 702に結合されるマスタ回路である。エンドポイント回路804は、NoC 208のNSU 704に結合されるスレーブ回路である。各エンドポイント回路802および804は、PS 212の回路、PL領域214の回路、または別のサブシステム(例えば、ハードワイヤード回路ブロック210)の回路であることができる。
【0122】
ネットワーク714は複数の物理的チャネル806を含む。物理的チャネル806は、NoC 208をプログラムすることによって実装される。各物理的チャネル806は、1つまたは複数のNPS 706と関連するルーティング708とを含む。NMU 702は、少なくとも1つの物理的チャネル806を通してNSU 704と接続する。物理的チャネル806はまた、1つまたは複数の仮想チャネル808を有することができる。
【0123】
ネットワーク714を通した接続はマスタ・スレーブ構成を使用する。一例では、ネットワーク714を通じた最も基本的な接続は、単一のスレーブに接続された単一のマスタを含む。しかしながら、他の例では、より複雑な構造が実装されてもよい。
【0124】
図9は、別の例によるNoC 208を示すブロック図である。この例では、NoC 208は垂直部分902(VNoC)および水平部分904(HNoC)を含む。各VNoC 902はPL領域214の間に配設される。HNoC 904は、PL領域214と、I/Oバンク910(例えば、ハードワイヤード回路ブロック210に対応するI/Oブロックおよび/またはトランシーバ)との間に配設される。NoC 208は、メモリインターフェース908(例えば、ハードワイヤード回路ブロック210)に接続される。PS 212はHNoC 904に結合される。
【0125】
この例では、PS 212は、HNoC 904に結合された複数のNMU 702を含む。VNoC 902は、PL領域214に配設されたNMU 702およびNSU 704の両方を含む。メモリインターフェース908は、HNoC 904に結合されたNSU 704を含む。HNoC 904およびVNoC 902は両方とも、ルーティング708によって接続されたNPS 706を含む。VNoC 902では、ルーティング708は垂直に延在する。HNoC 904では、ルーティングは水平に延在する。各VNoC 902において、各NMU 702はNPS 706に結合される。同様に、各NSU 704はNPS 706に結合される。NPS 706は互いに結合されて、スイッチのマトリックスを形成する。各VNoC 902におけるいくつかのNPS 706は、HNoC 904の他のNPS 706に結合される。
【0126】
単一のHNoC 904のみが示されるが、他の例では、NoC 208は1つを超えるHNoC 904を含むことができる。それに加えて、2つのVNoC 902が示されるが、NoC 208は2つを超えるVNoC 902を含むことができる。メモリインターフェース908が例として示されるが、他のハードワイヤード回路ブロック210をメモリインターフェース908の代わりに、またはそれに加えて使用することができることが理解されるべきである。
【0127】
図10は、NoC 208をプログラミングする方法1000の例を示している。SoC 200の他のサブシステムとは独立して記載されるが、方法1000は、SoC 200に対するより大きなブートまたはプログラミングプロセスの一部として含まれ、および/または使用されてもよい。
【0128】
ブロック1002で、SoC 200に実装されたプラットフォーム管理コントローラ(PMC)が、ブート時間にNoCプログラミングデータを受信する。NoCプログラミングデータはPDIの一部であってもよい。PMCはSoC 200の管理に関与する。PMCは、安全で確実な環境を維持し、SoC 200をブートし、正常動作の間、SoC 200を管理することができる。
【0129】
ブロック1004で、PMCは、NPI 710を通してNoCプログラミングデータをレジスタ712にロードして、物理的チャネル806を作成する。一例では、プログラミングデータはまた、NPS 706にルーティングテーブルを構成するための情報を含むことができる。ブロック1006で、PMCはSoC 200をブートする。このように、NoC 208は、NMU 702とNSU 704との間の物理的チャネルに関して、少なくともコンフィギュレーション情報を含む。NoC 208に関する残りのコンフィギュレーション情報は、更に後述するように、ランタイムの間に受信することができる。別の例では、ランタイムの間に受信されるものとして後述するコンフィギュレーション情報の全てまたは一部分は、ブート時間に受信することができる。
【0130】
図11は、NoC 208をプログラミングする方法1100の例を示している。ブロック1102で、PMCは、ランタイムの間にNoCプログラミングデータを受信する。ブロック1104で、PMCは、NPI 710を通してプログラミングデータをNoCレジスタ712にロードする。一例では、ブロック1106で、PMCはNPS 706にルーティングテーブルを構成する。ブロック1108で、PMCは物理的チャネル806を通じてQoSパスを構成する。ブロック1110で、PMCはアドレス空間マッピングを構成する。ブロック1112で、PMCはイングレス/イグレスインターフェースのプロトコル、幅、および周波数を構成する。QoSパス、アドレス空間マッピング、ルーティングテーブル、およびイングレス/イグレスコンフィギュレーションについては更に後述する。
【0131】
図12は、エンドポイント回路間のNoC 208を通るデータパス1200の例を示している。データパス1200は、エンドポイント回路1202と、AXIマスタ回路1204と、NMU 1206と、NPS 1208と、NSU 1210と、AXIスレーブ回路1212と、エンドポイント回路1214とを含む。エンドポイント回路1202はAXIマスタ回路1204に結合される。AXIマスタ回路1204はNMU 1206に結合される。別の例では、AXIマスタ回路1204はNMU 1206の一部である。
【0132】
NMU 1206はNPS 1208に結合される。NPS 1208は互いに結合されて、NPS 1208のチェーン(例えば、本例では、5つのNPS 1208のチェーン)を形成する。一般に、NMU 1206とNSU 1210との間には少なくとも1つのNPS 1208がある。NSU 1210はNPS 1208の1つに結合される。AXIスレーブ回路1212はNSU 1210に結合される。別の例では、AXIスレーブ回路1212はNSU 1210の一部である。エンドポイント回路1214はAXIスレーブ回路1212に結合される。
【0133】
エンドポイント回路1202および1214はそれぞれ、硬化回路(例えば、PS回路、ハードワイヤード回路210、1つもしくは複数のDPE 204)、またはPL 214に構成された回路であることができる。エンドポイント回路1202は、マスタ回路として機能し、読取り/書込み要求をNMU 1206に送る。この例では、エンドポイント回路1202および1214は、AXIプロトコルを使用してNoC 208と通信する。AXIがこの例では記載されるが、NoC 208は、当該分野で知られている他のタイプのプロトコルを使用して、エンドポイント回路からの通信を受信するように構成されてもよいことが理解されるべきである。例によって明瞭にする目的で、NoC 208は、本明細書ではAXIプロトコルをサポートするものとして記載される。NMU 1206は、NPS 1208のセットを通して宛先のNSU 1210に達するように、要求を中継する。NSU 1210は、取り付けられたAXIスレーブ回路1212に要求を渡して、データを処理し、エンドポイント回路1214に分配する。AXIスレーブ回路1212は、読取り/書込み応答をNSU 1210に送り返すことができる。NSU 1210は、NPS 1208のセットを通して、応答をNMU 1206に回送することができる。NMU 1206は、データをエンドポイント回路1202に分配するAXIマスタ回路1204に、応答を通信する。
【0134】
図13は、読取り/書込み要求および応答を処理する方法1300の例を示している。方法1300は、ブロック1302で始まり、エンドポイント回路1202は、AXIマスタ1204を通して、要求(例えば、読取り要求または書込み要求)をNMU 1206に送る。ブロック1304で、NMU 1206は応答を処理する。一例では、NMU 1206は、エンドポイント回路1202のクロックドメインとNoC 208との間で、非同期交差および伝送率整合を実施する。NMU 1206は、要求に基づいてNSU 1210の宛先アドレスを決定する。NMU 1206は、仮想化が用いられる場合、アドレスリマッピングを実施することができる。NMU 1206はまた、要求のAXI変換を実施する。NMU 1206は更に、要求をパケットのストリームにパケット化する。
【0135】
ブロック1306で、NMU 1206は、要求のためのパケットをNPS 1208に送る。各NPS 1208は、宛先アドレスおよびルーティング情報に基づいて、対象出力ポートのテーブル検索を実施する。ブロック1308で、NSU 1210は要求のパケットを処理する。一例では、NSU 1210は、要求をデパケット化し、AXI変換を実施し、NoCクロックドメインからエンドポイント回路1214のクロックドメインへの非同期交差および伝送率整合を実施する。ブロック1310で、NSU 1210は、AXIスレーブ回路1212を通して要求をエンドポイント回路1214に送る。NSU 1210はまた、AXIスレーブ回路1212を通して、応答をエンドポイント回路1214から受信することができる。
【0136】
ブロック1312で、NSU 1210は応答を処理する。一例では、NSU 1210は、エンドポイント回路1214のクロックドメインおよびNoC 208のクロックドメインからの、非同期交差および伝送率整合を実施する。NSU 1210はまた、応答をパケットのストリームにパケット化する。ブロック1314で、NSU 1210は、NPS 1208を通してパケットを送る。各NPS 1208は、宛先アドレスおよびルーティング情報に基づいて、対象出力ポートのテーブル検索を実施する。ブロック1316で、NMU 1206はパケットを処理する。一例では、NMU 1206は、応答をデパケット化し、AXI変換を実施し、NoCクロックドメインからエンドポイント回路1202のクロックドメインへの非同期交差および伝送率整合を実施する。ブロック1318で、NMU 1206は、AXIマスタ回路1204を通して応答をエンドポイント回路1202に送る。
【0137】
図14は、NMU 702の実装例を示している。NMU 702は、AXIマスタインターフェース1402と、パケット化回路類1404と、アドレスマップ1406と、デパケット化回路類1408と、QoS回路類1410と、VCマッピング回路類1412と、クロック管理回路類1414とを含む。AXIマスタインターフェース1402は、AXIインターフェースをエンドポイント回路のためのNMU 702に提供する。他の例では、異なるプロトコルを使用することができ、したがってNMU 702は、選択されたプロトコルと適応する異なるマスタインターフェースを有することができる。NMU 702は、インバウンドトラフィックをパケット化回路類1404にルーティングして、インバウンドデータからパケットを生成する。パケット化回路類1404は、パケットをルーティングするのに使用されるアドレスマップ1406から宛先IDを決定する。QoS回路類1410は、NoC 208へのパケットの注入レートを制御するイングレスレート制御を提供することができる。VCマッピング回路類1412は、各物理的チャネルにおけるQoS仮想チャネルを管理する。NMU 702は、どの仮想チャネルにパケットがマッピングされるかを選択するように構成することができる。クロック管理回路類1414は、伝送率整合および非同期データ交錯を実施して、AXIクロックドメインとNoCクロックドメインとの間にインターフェースを提供する。デパケット化回路類1408は、戻りパケットをNoC 208から受信し、パケットをデパケット化してAXIマスタインターフェース1402によって出力するように構成される。
【0138】
図15は、NSU 704の実装例を示している。NSU 704は、AXIスレーブインターフェース1502と、クロック管理回路類1504と、パケット化回路類1508と、デパケット化回路類1506と、QoS回路類1510とを含む。AXIスレーブインターフェース1502は、AXIインターフェースをエンドポイント回路のためのNSU 704に提供する。他の例では、異なるプロトコルを使用することができ、したがってNSU 704は、選択されたプロトコルと適応する異なるスレーブインターフェースを有することができる。NSU 704は、インバウンドトラフィックをNoC 208からデパケット化回路類1506にルーティングして、デパケット化されたデータを生成する。クロック管理回路類1504は、伝送率整合および非同期データ交錯を実施して、AXIクロックドメインとNoCクロックドメインとの間にインターフェースを提供する。パケット化回路類1508は、戻りデータをスレーブインターフェース1502から受信し、戻りデータをパケット化してNoC 208を通して送信するように構成される。QoS回路類1510は、NoC 208へのパケットの注入レートを制御するイングレスレート制御を提供することができる。
【0139】
図16は、
図1と関連して記載されるシステムによって実行可能なソフトウェアアーキテクチャ例を示している。例えば、
図16のアーキテクチャは、
図1のプログラムモジュール120の1つまたは複数として実装されてもよい。
図16のソフトウェアアーキテクチャは、DPEコンパイラ1602と、NoCコンパイラ1604と、ハードウェアコンパイラ1606とを含む。
図16は、(例えば、アプリケーションをSoC 200に実装する設計フローを実施する)動作中にコンパイラの間で交換されてもよい、様々なタイプの設計データの一例を示す。
【0140】
DPEコンパイラ1602は、アプリケーションから、DPE アレイ202の1つもしくは複数のDPEおよび/またはDPE 204のサブセットにロードされてもよい、1つまたは複数のバイナリを生成することができる。各バイナリは、DPEのコアによって実行可能なオブジェクトコード、任意にアプリケーションデータ、およびDPEのコンフィギュレーションデータを含んでもよい。NoCコンパイラ1604は、NoC 208にロードされてアプリケーションのためのデータパスを作成するコンフィギュレーションデータを含むバイナリを生成することができる。ハードウェアコンパイラ1606は、アプリケーションのハードウェア部分をコンパイルして、PL 214に実装するコンフィギュレーションビットストリームを生成することができる。
【0141】
図16は、DPEコンパイラ1602、NoCコンパイラ1604、およびハードウェアコンパイラ1606が動作中に互いにどのように通信するかの一例を示している。それぞれのコンパイラは、設計データを交換することによって統合された形で通信して、ソリューションへと収束する。ソリューションは、設計メトリックおよび制約を満たし、SoC 200の様々な異種サブシステムがそこを通して通信する共通のインターフェースを含む、SoC 200内のアプリケーションの実装例である。
【0142】
本開示内で定義されるように、「設計メトリック」という用語は、SoC 200に実装されるアプリケーションの目的または要件を定義する。設計メトリックの例としては、消費電力要件、データスループット要件、タイミング要件などが挙げられるがそれらに限定されない。設計メトリックは、ユーザ入力、ファイル、または別の手法を介して提供されて、アプリケーションのより高次またはシステムレベルの要件を定義してもよい。本開示内で定義されるように、「設計制約」は、設計メトリックまたは要件を達成するのにEDAツールが従っても従わなくてもよい要件である。設計制約は、コンパイラディレクティブとして指定されてもよく、一般的に、EDAツール(例えば、コンパイラ)が従う低次の要件または提案を指定する。設計制約は、ユーザ入力、1つまたは複数の設計制約を含むファイル、コマンドライン入力などを用いて指定されてもよい。
【0143】
一態様では、DPEコンパイラ1602は、アプリケーションのための論理アーキテクチャおよびSoCインターフェースブロックソリューションを生成することができる。DPEコンパイラ1602は、例えば、DPEアレイ202に実装されるアプリケーションのソフトウェア部分に対する高次のユーザ定義されたメトリックに基づいて、論理アーキテクチャを生成することができる。メトリックの例としては、データスループット、レイテンシ、リソース利用、および消費電力を挙げることができるがそれらに限定されない。メトリックおよびアプリケーション(例えば、DPEアレイ202に実装される特定のノード)に基づいて、DPEコンパイラ1602は論理アーキテクチャを生成することができる。
【0144】
論理アーキテクチャは、アプリケーションの様々な部分によって必要とされるハードウェアリソースブロック情報を指定することができる、ファイルまたはデータ構造である。例えば、論理アーキテクチャは、アプリケーションのソフトウェア部分を実装するのに必要なDPE 204の数、DPEアレイ202と通信するのにPL 214において必要な任意の知的財産(IP)コア、NoC 208を通してルーティングする必要がある任意の接続、ならびにDPEアレイ202、NoC 208、およびPL 214のIPコアに対するポート情報を指定することができる。IPコアは、特定の機能または動作を実施することができる回路類の再使用可能なブロックとして回路設計で使用されてもよい、ロジック、セル、またはICレイアウト設計の再使用可能なブロックもしくは部分である。IPコアは、PL 214内に実装するために回路設計に組み込まれてもよい形式で指定されてもよい。本開示は様々なタイプのコアを指すが、他の修飾語を何も有さない「コア」という用語は、かかる異なるタイプのコアを包括的に指すものとする。
【0145】
詳細な説明の末尾にある本開示内の実施例1は、アプリケーションのための論理アーキテクチャを指定するのに使用されてもよい、スキーマ例を示す。実施例1は、アプリケーションのための論理アーキテクチャに含まれる様々なタイプの情報を示す。一態様では、ハードウェアコンパイラ1606は、アプリケーション自体を使用するのとは対照的に、論理アーキテクチャおよびSoCインターフェースブロックソリューションに基づいて、またはそれらを使用して、アプリケーションのハードウェア部分を実装することができる。
【0146】
DPEアレイ202のポート情報、ならびにNoC 208およびPL 214のIPコアのポート情報は、例えば、各ポートがストリームデータポート、メモリマップドポート、またはパラメータポートのいずれであるか、ならびにポートがマスタまたはスレーブのどちらであるかなど、ポートの論理構成を含んでもよい。IPコアのポート情報の他の例は、ポートのデータ幅および動作の頻度を含む。DPEアレイ202、NoC 208、およびPL 214のIPコアの間の接続性は、論理アーキテクチャで指定されるそれぞれのハードウェアリソースブロックのポート間の論理接続として指定されてもよい。
【0147】
SoCインターフェースブロックソリューションは、SoCインターフェースブロック206の物理的データパス(例えば、物理的リソース)に対して、DPEアレイ202を出入りする接続のマッピングを指定する、データ構造またはファイルである。例えば、SoCインターフェースブロックソリューションは、SoCインターフェースブロック206の特定のストリームチャネルに対して、例えば、SoCインターフェースブロック206の特定のタイル、ストリームスイッチ、および/またはストリームスイッチインターフェース(例えば、ポート)に対して、DPEアレイ202を出入りするデータ転送に使用される特定の論理接続をマッピングする。詳細な説明の末尾に向かって実施例1の後に位置する実施例2は、アプリケーションのためのSoCインターフェースブロックソリューションのスキーマ例を示す。
【0148】
一態様では、DPEコンパイラ1602は、アプリケーションおよび論理アーキテクチャに基づいて、NoC 208を通じてデータトラフィックを分析またはシミュレートすることができる。DPEコンパイラ1602は、アプリケーションのソフトウェア部分のデータ転送要件、例えば「NoCトラフィック」を、NoCコンパイラ1604に提供することができる。NoCコンパイラ1604は、DPEコンパイラ1602から受信したNoCトラフィックに基づいて、NoC 208を通るデータパスのルーティングを生成することができる。NoCコンパイラ1604からの結果は、「NoCソリューション」として示され、DPEコンパイラ1602に提供されてもよい。
【0149】
一態様では、NoCソリューションは、NoC 208に接続するアプリケーションのノードが接続される、NoC 208のイングレスおよび/またはイグレス点のみを指定する、初期NoCソリューションであってもよい。例えば、NoC 208内のデータパス(例えば、イングレスおよびイグレス点の間)のより詳細なルーティングおよび/またはコンフィギュレーションデータは、コンパイラの収束の目的でNoCソリューションから除外されてもよい。詳細な説明の末尾に向かって実施例2の後に位置する実施例3は、アプリケーションのためのNoCソリューションのスキーマ例を示す。
【0150】
ハードウェアコンパイラ1606は、論理アーキテクチャに対して動作して、PL 214のアプリケーションのハードウェア部分を実装することができる。ハードウェアコンパイラ1606が、(例えば、タイミング、出力、データスループットなどに関する)確立された設計制約を満たす、アプリケーションのハードウェア部分の実装を(例えば、論理アーキテクチャを使用して)生成することができない場合、ハードウェアコンパイラ1606は、1つまたは複数のSoCインターフェースブロックの制約を生成、および/または1つまたは複数のユーザ指定のSoCインターフェースブロックの制約を受信することができる。ハードウェアコンパイラ1606は、SoCインターフェースブロックの制約をDPEコンパイラ1602に要求として提供することができる。SoCインターフェースブロックの制約は、論理アーキテクチャの1つまたは複数の部分を、SoCインターフェースブロック206の異なるストリームチャネルに有効にリマッピングする。ハードウェアコンパイラ1606から提供されるSoCインターフェースブロックの制約は、設計メトリックを満たすPL 214におけるアプリケーションのハードウェア部分の実装を生成するのに、ハードウェアコンパイラ1606にとってより好ましい。詳細な説明の末尾に向かって実施例3の後に位置する実施例4は、アプリケーションのためのSoCインターフェースブロックおよび/またはNoCに対する制約例を示す。
【0151】
別の態様では、ハードウェアコンパイラ1606はまた、アプリケーションおよび論理アーキテクチャに基づいて、NoCトラフィックを生成し、NoCコンパイラ1604に提供することができる。ハードウェアコンパイラ1606は、例えば、アプリケーションのハードウェア部分を分析またはシミュレートして、NoC 208を通じて、PS 212、DPEアレイ202、および/またはSoC 200の他の部分に搬送される、設計のハードウェア部分によって生成されるデータトラフィックを決定してもよい。NoCコンパイラ1604は、ハードウェアコンパイラ1606から受信した情報に基づいて、NoCソリューションを生成および/または更新することができる。NoCコンパイラ1604は、NoCソリューションまたはその更新されたものを、ハードウェアコンパイラ1606に、またDPEコンパイラ1602にも提供することができる。これに関して、DPEコンパイラ1602は、NoCソリューションまたは更新されたNoCソリューションをNoCコンパイラ1604から受信したのに応答して、ならびに/あるいは1つまたは複数のSoCインターフェースブロックの制約をハードウェアコンパイラ1606から受信したのに応答して、SoCインターフェースブロックソリューションを更新し、更新したソリューションをハードウェアコンパイラ1606に提供することができる。DPEコンパイラ1602は、ハードウェアコンパイラ1606から、および/またはNoCコンパイラ1604からの更新されたNoCソリューションから受信した、SoCインターフェースブロックの制約に基づいて、更新されたSoCインターフェースブロックソリューションを生成する。
【0152】
図16の例に示されるコンパイラの間でのデータフローは、単に例示目的のものであることが理解されるべきである。これに関して、コンパイラの間での情報の交換は、本開示内で記載される設計フロー例の様々な段階で実施されてもよい。他の態様では、コンパイラの間での設計データの交換は、各コンパイラが、ソリューションへと収束する他のコンパイラから受信した情報に基づいて、そのコンパイラによって扱われるアプリケーションの部分の実装を継続的に改良してもよいような反復的な形で実施されてもよい。
【0153】
1つの特定の例では、ハードウェアコンパイラ1606は、論理アーキテクチャおよびSoCインターフェースブロックソリューションをDPEコンパイラ1602から、またNoCソリューションをNoCコンパイラ1604から受信した後、確立された設計メトリックを満たすアプリケーションのハードウェア部分の実装を生成することが不可能であると決定してもよい。DPEコンパイラ1602によって生成される初期SoCインターフェースブロックソリューションは、DPEアレイ202に実装されるアプリケーションの部分をDPEコンパイラ1602が分かっていることに基づいて生成される。同様に、NoCコンパイラ1604によって生成される初期NoCソリューションは、DPEコンパイラ1602によってNoCコンパイラ1604に提供される初期NoCトラフィックに基づいて生成される。詳細な説明の末尾に向かって実施例4の後に位置する実施例5は、アプリケーションのためのNoCトラフィックのスキーマ例を示す。実施例1~5ではスキーマが使用されるが、例示される情報を指定するのに、他のフォーマット化および/またはデータ構造が使用されてもよいことが理解されるべきである。
【0154】
ハードウェアコンパイラ1606は、ハードウェア部分の合成(必要な場合)、配置、およびルーティングを含む、アプリケーションのハードウェア部分に対する実装フローの実施を試行する。そのため、初期SoCインターフェースブロックソリューションおよび初期NoCソリューションは、確立されたタイミングの制約を満たさない、PL 214内の配置および/またはルートをもたらすことがある。他の場合には、SoCインターフェースブロックソリューションおよびNoCソリューションは、搬送しなければならないデータに適合するワイヤなど、十分な数の物理的リソースを有さず、PL 214の混雑をもたらすことがある。かかる場合は、ハードウェアコンパイラ1606は、1つまたは複数の異なるSoCインターフェースブロックの制約を生成し、ならびに/あるいは1つまたは複数のユーザ指定のSoCインターフェースブロックの制約を受信し、SoCインターフェースブロックソリューションを再生成する要求として、SoCインターフェースブロックの制約をDPEコンパイラ1602に提供することができる。同様に、ハードウェアコンパイラ1606は、1つまたは複数の異なるNoCの制約を生成し、ならびに/あるいは1つまたは複数のユーザ指定のNoCの制約を受信し、NoCソリューションを再生成する要求として、NoCの制約をNoCコンパイラ1604に提供することができる。このように、ハードウェアコンパイラ1606は、DPEコンパイラ1602および/またはNoCコンパイラ1604を呼び出す。
【0155】
DPEコンパイラ1602は、受信したSoCインターフェースブロックの制約をハードウェアコンパイラ1606から得て、可能であれば、受信したSoCインターフェースブロックの制約を使用してSoCインターフェースブロックソリューションを更新し、更新されたSoCインターフェースブロックソリューションをハードウェアコンパイラ1606に返すことができる。同様に、NoCコンパイラ1604は、受信したNoCの制約をハードウェアコンパイラ1606から得て、可能であれば、受信したNoCの制約を使用してNoCソリューションを更新し、更新されたNoCソリューションをハードウェアコンパイラ1606に返すことができる。ハードウェアコンパイラ1606は次に、実装フローを続けて、DPEコンパイラ1602から受信した更新されたSoCインターフェースブロックソリューション、およびNoCコンパイラ1604から受信した更新されたNoCソリューションを使用して、PL 214内に実装するアプリケーションのハードウェア部分を生成してもよい。
【0156】
一態様では、1つまたは複数のSoCインターフェースブロックの制約および1つまたは複数のNoCの制約をそれぞれ提供することによって、DPEコンパイラ1602および/またはNoCコンパイラ1604を呼び出すハードウェアコンパイラ1606は、確認プロセスの一部であってもよい。ハードウェアコンパイラ1606は、例えば、ハードウェアコンパイラ1606から提供されるSoCインターフェースブロックの制約およびNoCの制約を、ルーティング可能なSoCインターフェースブロックソリューションおよび/またはNoCソリューションに使用または統合できることを、DPEコンパイラ1602および/またはNoCコンパイラ1604から確認することを求める。
【0157】
図17Aは、
図1と関連して記載されるようなシステムを使用して、SoC 200上にマッピングされるアプリケーション1700の一例を示している。例示の目的で、SoC 200の異なるサブシステムのサブセットのみが示される。アプリケーション1700は、示される接続性を有するノードA、B、C、D、E、およびFを含む。以下の実施例6は、アプリケーション1700を指定するのに使用されてもよいソースコードの例を示す。
【0158】
一態様では、アプリケーション1700は、複数のノードを含むデータフローグラフとして指定される。各ノードは、単一の命令とは対照的な関数に対応する計算を表す。ノードは、データフローを表すエッジによって相互接続される。ノードのハードウェア実装は、該ノードに対する各入力からのデータ受信に応答してのみ実行してもよい。ノードは、一般に非停止方式で実行する。アプリケーション1700によって指定されるデータフローグラフは、逐次プログラムとは対照的に、SoC 200に実装される並列仕様を表す。システムは、アプリケーション1700(例えば、実施例1に示されるようなグラフ形式)で動作して、様々なノードをSoC 200の適切なサブシステムにマッピングして実装することができる。
【0159】
一例では、アプリケーション1700は、Cおよび/またはC++などの高次プログラミング言語(HLL)で指定される。示されるように、逐次プログラムを作成するのに便利に使用されるHLLで指定されるが、アプリケーション1700はデータフローグラフであり、並列仕様である。システムは、データフローグラフを、またそのため、アプリケーション1700を構築するのに使用される、クラスライブラリを提供することができる。データフローグラフは、ユーザによって定義され、SoC 200のアーキテクチャ上にコンパイルされる。クラスライブラリは、アプリケーション1700を構築するのに使用することができるグラフ、ノード、およびエッジに対する事前定義されたクラスおよび構成子を有するヘルパーライブラリとして実装されてもよい。アプリケーション1700は、SoC 200上で有効に実行し、SoC 200のPS 212で実行する代表オブジェクトを含む。PS 212で実行するアプリケーション1700のオブジェクトは、SoC 200上で、例えばPL 214内、DPEアレイ202内、および/またはハードワイヤード回路ブロック210内で稼働する実際の計算を指示し監視するのに使用されてもよい。
【0160】
本開示内で記載する発明の構成によれば、アクセラレータ(例えば、PLノード)は、データフローグラフ(例えば、アプリケーション)のオブジェクトとして表されてもよい。システムは、PLノードを自動的に合成し、合成されたPLノードを接続してPL 214に実装することができる。対照的に、従来のEDAシステムでは、ユーザは、逐次実行の意味論を利用するハードウェアアクセラレーションのためのアプリケーションを指定する。ハードウェアで加速する関数は関数呼出しによって指定される。ハードウェア加速する関数に対するインターフェース(例えば、この例ではPLノード)は、データフローグラフでの接続とは対照的に、関数呼出し、および関数呼出しで提供される様々な因数によって定義される。
【0161】
実施例6のソースコードに示されるように、ノードAおよびFはPL 214に実装するように規定され、ノードB、C、D、およびEはDPEアレイ202内に実装するように規定される。ノードの接続性はソースコードのデータ転送エッジによって指定される。実施例6のソースコードはまた、トップレベルのテストベンチ、およびPS 212で実行される制御プログラムを指定する。
【0162】
図17Aに戻ると、アプリケーション1700はSoC 200上にマッピングされる。図示されるように、ノードAおよびFはPL 214上にマッピングされる。網掛けしたDPE 204-13および204-14は、ノードB、C、D、およびEがマッピングされるDPE 204を表す。例えば、ノードBおよびCはDPE 204-13上にマッピングされ、ノードDおよびEはDPE 204-4上にマッピングされる。ノードAおよびFは、PL 214に実装され、PL 214、特にSoCインターフェースブロック206のタイルおよびスイッチ、介在するDPE 204のDPE相互接続部のスイッチを通り、ならびに選択された近接DPE 204の特定のメモリを使用するルーティングを介して、DPE 204-13および204-44に接続される。
【0163】
DPE 204-13に対して生成されるバイナリは、DPE 204-13が、ノードBおよびCに対応する計算、ならびにDPE 204-13とDPE 204-14との間およびDPE 204-13とDPE 204-3との間にデータパスを確立するコンフィギュレーションデータを、実装するのに必要なオブジェクトコードを含む。DPE 204-4に対して生成されるバイナリは、DPE 204-4が、ノードDおよびEに対応する計算、ならびにDPE 204-14およびDPE 204-5とのデータパスを確立するコンフィギュレーションデータを、実装するのに必要なオブジェクトコードを含む。
【0164】
他のバイナリが、DPE 204-13およびDPE 204-4をSoCインターフェースブロック206に接続するため、DPE 204-3、204-5、204-6、204-7、204-8、および204-9など、他のDPE 204に対して生成される。明らかに、かかるバイナリは、かかる他のDPE 204が他の計算を実装する(割り当てられるアプリケーションのノードを有する)場合、任意のオブジェクトコードを含む。
【0165】
この例では、ハードウェアコンパイラ1606は、DPE 204-14およびノードFを接続するルートが長いことにより、タイミングの制約を満たすハードウェア部分の実装を生成することができない。本開示内で、アプリケーションのハードウェア部分における実装の特定の状態は、ハードウェア設計の状態と呼ばれることあがり、ハードウェア設計は、実装フロー全体を通して生成および/または更新される。SoCインターフェースブロックソリューションは、例えば、ノードFに対する信号交差をDPE 204-9の下方にあるSoCインターフェースブロックのタイルに配分してもよい。その場合、ハードウェアコンパイラ1606は、要求されたSoCインターフェースブロックの制約をDPEコンパイラ1602に提供して、ノードFに対するSoCインターフェースブロック206を通る交差をDPE 204-4に近付けるよう要求することができる。例えば、ハードウェアコンパイラ1606からの要求されたSoCインターフェースブロックの制約は、DPE 204-4に対する論理的接続がSoCインターフェースブロック206内のDPE 204-4直下のタイルにマッピングされるよう要求してもよい。このリマッピングは、ハードウェアコンパイラがノードFをDPE 204-4により近づけて、タイミングを改善することを可能にするであろう。
【0166】
図17Bは、SoC 200上へのアプリケーション1700の別のマッピング例を示している。
図17Bは、
図17Aに示されるものの代替であって更に詳細な例を示している。
図17Bは、例えば、DPEアレイ202の特定のDPE 204に対するアプリケーション1700のノードのマッピング、アプリケーション1700のノードがマッピングされるDPE 204間で確立された接続性、アプリケーション1700のノードに対するDPE 204のメモリモジュール内のメモリの配分、DPE 204のメモリおよびコアインターフェース(例えば、428、430、432、434、402、404、406、および408)に対する(両矢印によって表される)、ならびに/あるいはDPEコンパイラ1602によって実施されるような、DPE相互接続部306のストリームスイッチに対するデータ転送のマッピングを示す。
【0167】
図17Bの例では、メモリモジュール1702、1706、1710、1714、および1718は、コア1704、1708、1712、1716、および1720とともに示される。コア1704、1708、1712、1716、および1720はそれぞれ、プログラムメモリ1722、1724、1726、1728、および1730を含む。上側の行では、コア1704およびメモリモジュール1706がDPE 204を形成し、コア1708およびメモリモジュール1710が別のDPE 204を形成する。下側の行では、メモリモジュール1714およびコア1716がDPE 204を形成し、メモリ1718およびコア1720が別のDPE 204を形成する。
【0168】
図示されるように、ノードAおよびFはPL 214にマッピングされる。ノードAは、メモリモジュール1702のストリームスイッチおよびアービタを用いて、メモリモジュール1702のメモリバンク(例えば、メモリバンクの網掛け部分)に接続される。ノードBおよびCはコア1704にマッピングされる。ノードBおよびCを実装するための命令はプログラムメモリ1722に格納される。ノードDおよびEはコア1716にマッピングされ、ノードDおよびEを実装するための命令はプログラムメモリ1728に格納される。ノードBは、コア・メモリ間インターフェースを介して、メモリモジュール1702のメモリバンクの網掛け部分に配分され該部分にアクセスし、ノードCは、コア・メモリ間インターフェースを介して、メモリモジュール1706のメモリバンクの網掛け部分に配分され該部分にアクセスする。ノードB、C、およびEは、コア・メモリ間インターフェースを介して、メモリモジュール1714のメモリバンクの網掛け部分に配分され、該部分にアクセスすることができる。ノードDは、コア・メモリ間インターフェースを介して、メモリモジュール1718のメモリバンクの網掛け部分にアクセスすることができる。ノードFは、アービタおよびストリームスイッチを介してメモリモジュール1718に接続される。
【0169】
図17Bは、アプリケーションのノード間の接続性が、コア間のメモリおよび/またはメモリを共有するコアインターフェースを使用して、またDPE相互接続部306を使用して、実装されてもよいことを示す。
【0170】
図18は、SoC 200上にマッピングされている別のアプリケーションの実装例を示している。例示の目的で、SoC 200の異なるサブシステムのサブセットのみが示される。この例では、PL 214にそれぞれ実装されているノードAおよびFに対する接続は、NoC 208を通してルーティングされる。NoC 208は、イングレス/イグレス点1802、1804、1806、1808、1810、1812、1814、および1816(例えば、NMU/NSU)を含む。
図18の例は、ノードAがイングレス/イグレス点1802の比較的近くに位置し、揮発性メモリ134にアクセスするノードFが、PL 214を通ってイングレス/イグレス点1816に達する長いルートを有する場合を示している。ハードウェアコンパイラ1606が、ノードFをイングレス/イグレス点1816の近くに配置することができない場合、ハードウェアコンパイラ1606は、更新されたNoCソリューションをNoCコンパイラ1604から要求してもよい。その場合、ハードウェアコンパイラ1606は、NoCの制約を含むNoCコンパイラ1604を呼び出して、ノードFに対する異なるイングレス/イグレス点、例えばイングレス/イグレス点1812を指定する、更新されたNoCソリューションを生成することができる。ノードFに対する異なるイングレス/イグレス点は、ハードウェアコンパイラ1606が、更新されたNoCソリューションで指定される新しく規定されたイングレス/イグレス点のより近くにノードFを配置し、NoC 208で利用可能なより高速のデータパスを利用することを可能にするであろう。
【0171】
図19は、
図1と関連して記載されるシステムによって実行可能なソフトウェアアーキテクチャ1900の別の例を示している。例えば、アーキテクチャ1900は、
図1のプログラムモジュール120の1つまたは複数として実装されてもよい。
図19の例では、アプリケーション1902はSoC 200内に実装されるものとする。
【0172】
図19の例では、ユーザは、システムによって提供されるユーザインターフェース1906と対話することができる。ユーザインターフェース1906と対話する際、ユーザは、アプリケーション1902、アプリケーション1902に対する性能および分割の制約1904、ならびにベースプラットフォーム1908を指定または提供してもよい。
【0173】
アプリケーション1902は、SoC 200で利用可能な異なるサブシステムにそれぞれ対応する、複数の異なる部分を含んでもよい。アプリケーション1902は、例えば、実施例6と関連して記載したように指定されてもよい。アプリケーション1902は、DPEアレイ202に実装されるソフトウェア部分と、PL 214に実装されるハードウェア部分とを含む。アプリケーション1902は、任意に、PS 212に実装される追加のソフトウェア部分と、NoC 208に実装される部分とを含んでもよい。
【0174】
(性能および分割の制約1904のうち)分割の制約は、任意に、アプリケーション1902の様々なノードが実装される位置またはサブシステムを指定する。例えば、分割の制約は、アプリケーション1902のノード毎に、ノードがDPEアレイ202またはPL 214のどちらに実装されるかを示してもよい。他の例では、位置の制約は、より具体的または詳細な情報をDPEコンパイラ1602に提供して、カーネルをDPEに対して、ネットワークまたはデータフローをストリームスイッチに対して、バッファをDPEのメモリモジュールおよび/またはメモリモジュールのバンクに対してマッピングするのを実施することができる。
【0175】
実例として、アプリケーションの実装は特定のマッピングを要することがある。例えば、カーネルの複数のコピーがDPEアレイに実装され、カーネルの各コピーが異なるデータセットで同時に動作するアプリケーションでは、DPEアレイの異なるDPEで実行するカーネルの全てのコピーに対して、データセットを同じ相対アドレス(メモリ内の位置)に配置することが好ましい。これは位置の制約を使用して遂行されてもよい。この条件がDPEコンパイラ1602によって守られる場合、カーネルの各コピーは、DPEアレイの複数の異なるDPEにわたって同じプログラミングを複製するのではなく、別個にまたは独立してプログラムされなければならない。
【0176】
別の実例は、位置の制約を、DPEの間でカスケードインターフェースを利用するアプリケーションに対して課すものである。カスケードインターフェースは各行で一方向に流れるので、カスケードインターフェースを使用して結合されたDPEのチェーンの始まりを、カスケードインターフェースが失われているDPE(例えば、角のDPE)で、またはDPEアレイの他の場所に簡単に複製できない位置(例えば、行の最後のDPE)で開始しないのが好ましいことがある。位置の制約は、アプリケーションのDPEのチェーンの始まりを特定のDPEで開始させることができる。
【0177】
(性能および分割の制約1904のうち)性能の制約は、DPEアレイ202またはPL 214のどちらかにかかわらず、ノードの実装によって達成される、出力要件、レイテンシ要件、タイミング、および/またはデータスループットなどの様々なメトリックを指定してもよい。
【0178】
ベースプラットフォーム1908は、SoC 200がその上で結合される回路基板上の回路類と相互作用する、および/または該回路類に接続する、SoC 200に実装されるインフラストラクチャ回路類の記述である。ベースプラットフォーム1908は合成可能であってもよい。ベースプラットフォーム1908は、例えば、SoC 200の外(例えば、SoC 200の外部)から信号を受信し、信号をSoC 200の外のシステムおよび/または回路類に提供する、SoC 200内に実装される回路類を指定する。一例として、ベースプラットフォーム1908は、
図1のホストシステム102および/またはコンピューティングノード100と通信するペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)ノード、揮発性メモリ134および/または不揮発性メモリ136にアクセスするメモリコントローラもしくはコントローラ、ならびに/あるいはDPEアレイ202および/またはPL 214をPCIeノードと結合する内部インターフェースなどの他のリソースなど、回路リソースを指定してもよい。ベースプラットフォーム1908によって指定された回路類は、特定のタイプの回路基板を所与として、SoC 200に実装されてもよい任意のアプリケーションに対して利用可能である。これに関して、ベースプラットフォーム1908は、SoC 200が結合される特定の回路基板に特有である。
【0179】
一例では、パーティショナ1910は、アプリケーション1902の各部分が実装されるSoC 200のサブシステムに基づいて、アプリケーション1902の異なる部分を分離することができる。一例の実装では、パーティショナ1910は、ユーザが、アプリケーション1902の異なる部分(例えば、ノード)のどれがSoC 200の異なるサブシステムそれぞれに対応するかを示す入力を提供する、ユーザ指向のツールとして実装される。提供される入力は、例えば、性能および分割の制約1904であってもよい。例示の目的で、パーティショナ1910はアプリケーション1902を、PS 212で実行するPS部分1912と、DPEアレイ202で実行するDPEアレイ部分1914と、PL 214に実装されるPL部分1916と、NoC 208に実装されるNoC部分1936とに分割する。一態様では、パーティショナ1910は、PS部分1912、DPEアレイ部分1914、PL部分1916、およびNoC部分1936をそれぞれ、別個のファイルまたは別個のデータ構造として生成することができる。
【0180】
図示されるように、異なるサブシステムに対応する異なる部分はそれぞれ、サブシステム特定の異なるコンパイラによって処理される。例えば、PSコンパイラ1918は、PS部分1912をコンパイルして、PS 212によって実行可能なオブジェクトコードを含む、1つまたは複数のバイナリを生成することができる。DPEコンパイラ1602は、DPEアレイ部分1914をコンパイルして、異なるDPE 204によって実行可能なオブジェクトコード、アプリケーションデータ、および/またはコンフィギュレーションデータを含む、1つまたは複数のバイナリを生成することができる。ハードウェアコンパイラ1606は、実装フローをPL部分1916に対して実施して、SoC 200にロードしてPL部分1916をPL 214に実装することができる、コンフィギュレーションビットストリームを生成することができる。本明細書で定義されるように、「実装フロー」という用語は、配置およびルーティング、ならびに任意に合成が実施されるプロセスを意味する。NoCコンパイラ1604は、NoC 208にロードされると、アプリケーション1902の様々なマスタおよびスレーブを接続するデータパスを中に作成する、NoC 208のコンフィギュレーションデータを指定するバイナリを生成することができる。コンパイラ1918、1602、1604、および/または1606によって生成されるこれらの異なる出力は、バイナリおよびコンフィギュレーションビットストリーム1924として示される。
【0181】
特定の実装では、コンパイラ1918、1602、1604、および/または1606のうち特定のものが、動作中互いに通信することができる。アプリケーション1902で動作する設計フロー中の様々な段階で通信することによって、コンパイラ1918、1602、1604、および/または1606はソリューションへと収束することができる。
図19の例では、DPEコンパイラ1602およびハードウェアコンパイラ1606は、動作中、アプリケーション1902の部分1914および1916をそれぞれコンパイルしながら通信することができる。ハードウェアコンパイラ1606およびNoCコンパイラ1604は、動作中、アプリケーション1902の部分1916および1936をそれぞれコンパイルしながら通信することができる。DPEコンパイラ1602はまた、NoCルーティングソリューションおよび/または更新されたNoCルーティングソリューションを得るため、NoCコンパイラ1604を呼び出すことができる。
【0182】
結果として得られるバイナリおよびコンフィギュレーションビットストリーム1924は、様々な異なる対象のいずれかに提供されてもよい。例えば、結果として得られるバイナリおよびコンフィギュレーションビットストリーム1924は、シミュレーションプラットフォーム1926、ハードウェアエミュレーションプラットフォーム1928、RTLシミュレーションプラットフォーム1930、および/または対象IC 1932に提供されてもよい。RTLシミュレーションプラットフォーム1930の場合、ハードウェアコンパイラ1922は、RTLシミュレーションプラットフォーム1930でシミュレートされてもよい、PL部分1916に対してRTLを出力するように構成されてもよい。
【0183】
シミュレーションプラットフォーム1926、エミュレーションプラットフォーム1928、RTLシミュレーションプラットフォーム1930、および/または対象IC 1932におけるアプリケーション1902の実装から得られた結果は、性能プロファイラおよびデバッガ1934に提供されてもよい。性能プロファイラおよびデバッガ1934からの結果は、ユーザがアプリケーション1902の実行および/またはシミュレーションの結果を見ることができる、ユーザインターフェース1906に提供されてもよい。
【0184】
図20は、SoC200内でアプリケーションを実装するためのデザインフローを実施する例示的方法2000を示している。方法2000は、
図1に関連して記載されるように、システムによって実施することができる。システムは、
図16または
図19に関連して記載されるように、ソフトウェアアーキテクチャを実行することができる。
【0185】
ブロック2002では、システムはアプリケーションを受信する。アプリケーションは、SoC200のDPEアレイ202内での実装のためのソフトウェア部分、およびSoC200のPL214内での実装のためのハードウェア部分を特定することができる。
【0186】
ブロック2004では、システムは、アプリケーションの論理アーキテクチャを生成することが可能である。例えば、DPEコンパイラ1602は、システムによって実行されるように、DPEアレイ202内に実装されるアプリケーションのソフトウェア部分およびあらゆる高レベルユーザ特定メトリックに基づき、論理アーキテクチャを生成することが可能である。DPEコンパイラ1602はまた、SoCインターフェースブロック206の物理データパスへDPEアレイ202内のおよびそこからの接続のマッピングを特定するSoCインターフェースブロックソリューションを生成することが可能である。
【0187】
別の態様では、論理アーキテクチャおよびSoCインターフェースブロックソリューションを生成する際に、DPEコンパイラ1602は、特定のDPE204へのDPEアレイ202内に実装されるアプリケーションのノード(「DPEノード」と呼ぶ)の初期マッピングを生成することが可能である。DPEコンパイラ1602は任意選択では、NoCコンパイラ1604にグローバルメモリ用NoCトラフィックを提供することによって、グローバルメモリ(例えば、揮発性メモリ134)へのアプリケーションのグローバルメモリデータ構造の初期マッピングおよびルーティングを生成する。論じたように、NoCコンパイラ1604は、受信したNoCトラフィックからNoCソリューションを生成することが可能である。初期マッピングおよびルーティングを使用して、DPEコンパイラ1602は、DPE部分の初期実装を有効化するためにDPE部分をシミュレーションすることが可能である。DPEコンパイラ1602は、SoCインターフェースブロックソリューション内で使用される各ストリームチャネルに対応するハードウェアコンパイラ1606へシミュレーションによって生成されるデータを出力することが可能である。
【0188】
一態様では、DPEコンパイラ1602によって行われるように、論理アーキテクチャを生成することにより、
図19に関連して前に記載したパーティションを実装する。様々な例示的スキームは、各それぞれのコンパイラに割り当てられたアプリケーションの部分をコンパイルしながら、
図19での異なるコンパイラ(DPEコンパイラ1602、ハードウェアコンパイラ1606、およびNoCコンパイラ1604)がどのように決定および制約を交換するかを示している。様々な例示的スキームは更に、決定および/または制約がどのように論理的にSoC200の異なるサブシステムにわたるかを示している。
【0189】
ブロック2006では、システムは、ハードウェア部分のブロック図を構築することが可能である。例えば、ハードウェアコンパイラ1606は、システムによって実行されるように、ブロック図を生成することが可能である。ブロック図は、SoC200用のベースプラットフォームと、論理アーキテクチャによって特定されるような、アプリケーションのハードウェア部分を組み合わせる。例えば、ハードウェアコンパイラ1606は、ブロック図を生成する際に、ハードウェア部分およびベースプラットフォームを接続することが可能である。更に、ハードウェアコンパイラ1606は、SoCインターフェースブロックソリューションに基づいて、SoCインターフェースブロックにアプリケーションのハードウェア部分に対応するIPコアを接続するためにブロック図を生成することが可能である。
【0190】
例えば、論理アーキテクチャによって特定されるように、アプリケーションのハードウェア部分内の各ノードは、特定のRTLコア(例えば、カスタムRTLのユーザ提供または特定部分)または利用可能なIPコアにマッピングすることができる。ユーザによって特定されているコアへのノードのマッピングで、ハードウェアコンパイラ1606は、ベースプラットフォームの様々な回路ブロック、論理アーキテクチャ毎にDPEアレイ202とインターフェースするために必要なPL214のあらゆるIPコア、および/またはPL214内に実装されるあらゆる追加のユーザ特定IPコアおよび/またはRTLコアを特定するためのブロック図を構築することが可能である。ユーザによって手動で挿入することができる追加のIPコアおよび/またはRLTコアは、これに限らないが、データ幅変換ブロック、ハードウェアバッファ、および/またはクロックドメイン論理を含んでいる。一態様では、ブロック図の各ブロックは、PL214内に実装される特定のコア(例えば、回路ブロック)に対応することができる。ブロック図は、SoCインターフェースブロックソリューションおよび論理アーキテクチャから判断されるように、PL内に実装されるコアのコネクティビティ、およびNoC208および/またはSoCインターフェースブロック206の物理リソースとのコアのコネクティビティを特定する。
【0191】
一態様では、ハードウェアコンパイラ1606はまた、論理アーキテクチャ毎にNoCトラフィックを作り出し、NoCソリューションを得るためにNoCコンパイラ1604を実行することによって、PL214のコアとグローバルメモリ(例えば、揮発性メモリ134)の間の論理接続を作り出すことが可能である。一実施例では、ハードウェアコンパイラ1606は、PL214の能力を有効化して、ブロック図および論理接続を実装するように、論理接続をルーティングすることが可能である。別の態様では、ハードウェアコンパイラ1606は、実際のデータトラフィックでブロック図の機能を有効化するために、シミュレーションの一部として、1つまたは複数のデータトラフィック生成器でSoCインターフェースブロックトレース(例えば、以下により詳細に記載する)を使用することが可能である。
【0192】
ブロック2008では、システムは、ブロック図上で実装フローを実施する。例えば、ハードウェアコンパイラは、SoC200内にロードすることができる設定ビットストリームを生成して、PL214内のアプリケーションのハードウェア部分を実装するために、ブロック図上で合成、必要に応じて、配置、およびルーティングを伴う実装フローを実施することが可能である。
【0193】
ハードウェアコンパイラ1606は、SoCインターフェースブロックソリューションおよびNoCソリューションを使用して、ブロック図上で実装フローを実施することが可能である。例えば、SoCインターフェースブロックソリューションは、特定のDPE204がPL214と通信するSoCインターフェースブロック206の特定のストリームチャネルを特定するので、プレイサーは、ブロックが接続されるSoCインターフェースブロック206の特定のストリームチャネル近くに(例えば、特定の距離内に)SoCインターフェースブロック206を通してDPE204への接続を有するブロック図のブロックを配置することが可能である。ブロックのポートは、例えば、SoCインターフェースブロックソリューションによって特定されるストリームチャネルと相関させることができる。ハードウェアコンパイラ1606はまた、SoCインターフェースブロックソリューションから判断されるように、ポートに連結された(1つまたは複数の)特定のストリームチャネルに接続するPL214のBLIへのポートへ入力されるおよび/またはそこから出力される信号をルーティングすることによって、SoCインターフェースブロック206に接続するブロック図のブロックのポート間の接続をルーティングすることが可能である。
【0194】
同様に、NoCソリューションは、PL214内の回路ブロックが接続する特定の入口/出口ポイントを特定するので、プレイサーは、ブロックが接続する特定の入口/出口ポイント近くに(例えば、特定の距離内に)NoC208への接続を有するブロック図のブロックを配置することが可能である。ブロックのポートは、例えば、NoCソリューションの入口/出口ポイント内で相関させることができる。ハードウェアコンパイラ1606はまた、NoCソリューションから判断されるように、ポートに論理的に結合されたNoC208の入口/出口ポイントへのポートへ入力されるおよび/またはそこから出力される信号をルーティングすることによって、NoC208の入口/出口ポイントに接続するブロック図のブロックのポート間の接続をルーティングすることが可能である。ハードウェアコンパイラ1606は更に、PL214内のブロックのポートを互いに接続するあらゆる信号をルーティングすることが可能である。いくつかのアプリケーションでは、しかし、NoC208は、DPEアレイ202とPL214の間でデータを伝達するために使用することができない。
【0195】
ブロック2010では、実装フロー中、ハードウェアコンパイラは任意選択では、DPEコンパイラ1602および/またはNoCコンパイラ1604と設計データを交換する。例えば、ハードウェアコンパイラ1606、DPEコンパイラ1602、およびNoCコンパイラ1604は、1回ベース、必要に応じて、または反復または繰り返しベースで、
図16に関連して記載するように、設計データを交換することが可能である。ブロック2010は任意選択で実施することができる。ハードウェアコンパイラ1606は、例えば、ブロック図の構築前にまたはその間に、配置の前におよび/またはその間に、および/またはルーティング前におよび/またはその間に、DPEコンパイラ1602および/またはNoCコンパイラ1604と設計データを交換することが可能である。
【0196】
ブロック2012では、システムは、ハードウェアパッケージとして、ハードウェアコンパイラ1606によって生成される最終ハードウェア設計をエクスポートする。ハードウェアパッケージは、PL214をプログラミングするために使用される設定ビットストリームを含む。ハードウェアパッケージは、アプリケーションのハードウェア部分により生成される。
【0197】
ブロック2014では、ユーザは、ハードウェアパッケージを使用して新しいプラットフォームを設定する。ユーザは、ユーザ提供設定に基づいて新しいプラットフォームの生成を開始する。プラットフォームは、ハードウェアパッケージを使用するシステムによって生成されるように、アプリケーションのソフトウェア部分をコンパイルするために使用される。
【0198】
ブロック2016では、システムは、DPEアレイ202内での実装のためにアプリケーションのソフトウェア部分をコンパイルする。例えば、システムは、DPEアレイ202の様々なDEP204内にロードすることができる1つまたは複数のバイナリを生成するために、DPEコンパイラ1602を実行する。DPE204用のバイナリは、DPE204用のオブジェクトコード、アプリケーションデータ、および設定データを含むことができる。設定ビットストリームおよびバイナリが生成されると、システムは、その中にアプリケーションを実装するために、SoC200内に設定ビットストリームおよびバイナリをロードすることが可能である。
【0199】
別の態様では、ハードウェアコンパイラ1606は、DPEコンパイラ1602へハードウェア実装を提供することが可能である。DPEコンパイラ1602は、実装フローを実施する際に、ハードウェアコンパイラ1606によって信頼された最終SoCインターフェースブロックソリューションを抽出することが可能である。DPEコンパイラ1602は、ハードウェアコンパイラ1606によって使用される同じSoCインターフェースブロックソリューションを使用してコンピレーションを実施する。
【0200】
図20の実施例では、アプリケーションの各部分は、サブシステム特有コンパイラによって解決される。コンパイラは、アプリケーションに対して実施されるように、様々なサブシステム(例えば、SoCインターフェースブロック)間のインターフェースが適合および一貫していることを保証するために、設計データ、例えば、制約および/または提案されたソリューションを通信することが可能である。
図20に特には示さないが、NoCコンパイラ1604はまた、アプリケーション内で使用される場合に、NoC208をプログラミングするためにバイナリを生成するように呼び出すことができる。
【0201】
図21は、SoC200内にアプリケーションを実装するために設計フローを実施する別の例示的方法2100を示している。方法2100は、
図1に関連して記載されたようなシステムによって実施することができる。システムは、
図16または
図19に関連して記載されたようなソフトウェアアーキテクチャを実行することができる。方法2100は、システムがアプリケーションを受信するブロック2102内で開始することができる。アプリケーションは、SoC200内に実装されるデータフローグラフとして特定することができる。アプリケーションは、DPEアレイ202内での実装のためのソフトウェア部分、PL214内での実装のためのハードウェア部分、およびSoC200のNoC208内での実装のためのデータ転送を含むことができる。アプリケーションはまた、PS212内での実装のための別のソフトウェア部分を含むことができる。
【0202】
ブロック2104では、DPEコンパイラ1602は、論理アーキテクチャ、SoCインターフェースブロックソリューション、およびアプリケーションからのSoCインターフェースブロックトレースを生成することが可能である。論理アーキテクチャは、DPEアレイ202内での実装のために指定されたアプリケーションのソフトウェア部分を実装するために必要なDPE204、およびDPE204とインターフェースするのに必要なPL214内で実装されるあらゆるIPコアに基づくことができる。記したように、DPEコンパイラ1602は、DPEコンパイラ1602がDPEアレイ202への(アプリケーションのソフトウェア部分の)ノードの初期マッピングを実施する、初期DPEソリューションを生成することが可能である。DPEコンパイラ1602は、SoCインターフェースブロック206の物理リソース(例えば、ストリームチャネル)へ論理リソースをマッピングする初期SoCインターフェースブロックソリューションを生成することが可能である。一態様では、SoCインターフェースブロックソリューションは、データ転送からNoCコンパイラ1604によって生成される初期NoCソリューションを使用して生成することができる。DPEコンパイラ1602は更に、SoCインターフェースブロック206を通したデータフローをシミュレーションするために、SoCインターフェースブロックソリューションで初期DPEソリューションをシミュレーションすることが可能である。DPEコンパイラ1602は、
図21に示した設計フロー中のその後の使用のために、「SoCインターフェースブロックトレース」としてのシミュレーション中にSoCインターフェースブロックを通してデータ転送を捕捉することが可能である。
【0203】
ブロック2104では、ハードウェアコンパイラ1606は、PL214内に実装されるアプリケーションのハードウェア部分のブロック図を生成する。ハードウェアコンパイラ1606は、論理アーキテクチャおよびSoCインターフェースブロックソリューションに基づいてブロック図を、任意選択では、論理アーキテクチャによって特定される回路ブロックでブロック図内に含まれるユーザによって特定される追加のIPコアを生成する。一態様では、ユーザは、このような追加のIPコアを手動で挿入し、論理アーキテクチャ内で特定されるハードウェア記述の他の回路ブロックにIPコアを接続する。
【0204】
ブロック2106では、ハードウェアコンパイラ1606は任意選択では、1つまたは複数のユーザ特定SoCインターフェースブロック制約を受信し、DPEコンパイラ1602にSoCインターフェースブロック制約を提供する。
【0205】
一態様では、アプリケーションのハードウェア部分を実装する前に、ハードウェアコンパイラ1606は、ブロック図および論理アーキテクチャに基づいて、NoC208、DPEアレイ202およびPL214の間で規定された物理的接続を評価することが可能である。ハードウェアコンパイラ1606は、ブロック図(例えば、設計のPL部分)およびDPEアレイ202、および/またはNoC208の間の接続を評価するために、ブロック図のアーキテクチャシミュレーションを実施することが可能である。例えば、ハードウェアコンパイラ1606は、DPEコンパイラ1602によって生成されるSoCインターフェースブロックトレースを使用してシミュレーションを実施することが可能である。例示的および非限定的実施例として、ハードウェアコンパイラ1606は、ブロック図のSystemCシミュレーションを実施することが可能である。シミュレーションでは、データトラフィックが、ブロック図のために、およびSoCインターフェースブロックトレースを使用して、PL214およびDPEアレイ202(SoCインターフェースブロック206により)および/またはNoC208の間のストリームチャネル(例えば、物理的接続)のために生成される。シミュレーションは、ハードウェアコンパイラ1606に提供されるシステムパフォーマンスおよび/またはデバッギング情報を生成する。
【0206】
ハードウェアコンパイラ1606は、システムパフォーマンスデータを評価することが可能である。例えば、ハードウェアコンパイラ1606が、システムパフォーマンスデータから、アプリケーションのハードウェア部分に対する1つまたは複数の設計測定基準が満たされていないと判断すると、ハードウェアコンパイラ1606は、ユーザの方向の下に1つまたは複数のSoCインターフェースブロック制約を生成することが可能である。ハードウェアコンパイラ1606は、DPEコンパイラ1602へのリクエストとして、SoCインターフェースブロック制約を提供する。
【0207】
DPEコンパイラ1602は、ハードウェアコンパイラ1606によって提供されるSoCインターフェースブロック制約を利用するDPEアレイ202のDPE204へのアプリケーションのDPE部分の更新されたマッピングを実施することが可能である。例えば、PL214内のハードウェア部分が(例えば、NoC208を横切ることなく)SoCインターフェースブロック206を通して直接、DPEアレイ202に接続するところにアプリケーションが実装される場合、DPEコンパイラ1602は、NoCコンパイラ1604を必要とすることなく、ハードウェアコンパイラ1606に対する更新されたSoCインターフェースブロックソリューションを生成することが可能である。
【0208】
ブロック2108では、ハードウェアコンパイラ1606は任意選択では、1つまたは複数のユーザ特定NoC制約を受信し、有効化のためにNoCコンパイラにNoC制約を提供する。ハードウェアコンパイラ1606はまた、NoCコンパイラ1606にNoCトラフィックを提供することができる。NoCコンパイラ1604は、受信したNoC制約および/またはNoCトラフィックを使用して、更新されたNoCソリューションを生成することが可能である。例えば、アプリケーションがPL214のハードウェア部分が、NoC208を通してDPEアレイ202、PS212、有線回路ブロック210または揮発性メモリ134に接続するところに実装される場合、ハードウェアコンパイラ1606は、NoCコンパイラ1604へNoC制約および/またはNoCトラフィックを提供することによって、NoCコンパイラ1604を呼ぶことが可能である。NoCコンパイラ1604は、更新されたNoCソリューションとして、NoC208を通してデータパス用のルーティング情報を更新することが可能である。更新されたルーティング情報は、更新されたルート、特に、ルートに対する入口/出口ポイントを特定することができる。ハードウェアコンパイラ1606は、更新されたNoCソリューションを得て、これに応じて、DPEコンパイラ1602に提供される更新されたSoCインターフェースブロック制約を生成することができる。プロセスは、本質的に反復してもよい。DPEコンパイラ1602およびNoCコンパイラ1604は、ブロック2106および2108によって示されるように、同時に動作することができる。
【0209】
ブロック2110では、ハードウェアコンパイラ1606は、ブロック図上で合成を実施することが可能である。ブロック2112では、ハードウェアコンパイラ1606は、ブロック図上で配置およびルーティングを実施する。ブロック2114では、配置および/またはルーティングを実施しながら、ハードウェアコンパイラは、ブロック図の実装、例えば、実装フローのこれらの異なる段階のいずれかでハードウェア部分(例えば、ハードウェア設計)の実装の現在の状態が、アプリケーションのハードウェア部分に対する設計測定基準を満たすかどうかを判断することが可能である。例えば、ハードウェアコンパイラ1606は、現在の実装が配置の前、配置の間、ルーティングの前、またはルーティングの間に設計測定基準を満たすかどうかを判断することが可能である。アプリケーションのハードウェア部分の現在の実装が設計測定基準を満たしていないことを判断することに応じて、方法2100はブロック2116に続く。あるいは、方法2100はブロック2120に続く。
【0210】
ブロック2116では、ハードウェアコンパイラは、DPEコンパイラ1602に1つまたは複数のユーザ特定SoCインターフェースブロック制約を提供することが可能である。ハードウェアコンパイラ1606は、NoCコンパイラ1604へ1つまたは複数のNoC制約を任意選択で提供することが可能である。論じたように、DPEコンパイラ1602は、ハードウェアコンパイラ1606から受信した(1つまたは複数の)SoCインターフェースブロック制約を使用して、更新されたSocインターフェースブロックソリューションを生成する。NoCコンパイラ1604は任意選択では、更新されたNoCソリューションを生成する。例えば、DPEアレイ202とPL214の間の1つまたは複数のデータパスがNoC208を通して流れる場合に、NoCコンパイラ1604は呼び出すことができる。ブロック2118では、ハードウェアコンパイラ1606は、更新されたSoCインターフェースブロックソリューション、および任意選択では、更新されたNoCソリューションを受信する。ブロック2118の後に、方法2110はブロック2112に進み、ハードウェアコンパイラ1606は、更新されたSOCインターフェースブロックソリューション、および任意選択では、更新されたNoCソリューションを使用して、配置および/またはルーティングを実施し続ける。
【0211】
図21は、コンパイラ間の設計データの交換が反復方法で実施することができることを示している。例えば、配置および/またはルーティング段階中の複数の異なるポイントのいずれかでは、ハードウェアコンパイラ1606は、アプリケーションのハードウェア部分の実施の現在の段階が確立された設計測定基準を満たしているかどうかを判断することが可能である。そうでない場合、ハードウェアコンパイラ1606は、ハードウェアコンパイラ1606が配置およびルーティングの目的で使用する更新されたSoCインターフェースブロックソリューションおよび更新されたNoCソリューションを得るために記載されたように、設計データの交換を開始することができる。ハードウェアコンパイラ1606は、NoC208の設定が更新される(例えば、PL214からのデータが、NoC208を通して他の回路ブロックに提供される、および/またはそこから受信される)場合に、NoCコンパイラ1604を起動させる必要があるだけであることを理解されたい。
【0212】
ブロック2120では、アプリケーションのハードウェア部分が設計測定基準を満たしている場合、ハードウェアコンパイラ1606は、PL214内のハードウェア部分の実装を特定する設定ビットストリームを生成する。ハードウェアコンパイラ1606は更に、DPEコンパイラ1602へ最終SoCインターフェースブロックソリューション(例えば、配置およびルーティングのために使用されるSoCインターフェースブロックソリューション)を提供し、NoCコンパイラ1604へ配置およびルーティングのために使用された最終NoCソリューションを提供することが可能である。
【0213】
ブロック2122では、DPEコンパイラ1602は、DPEアレイ204のDPE202をプログラミングするためのバイナリを生成する。NoCコンパイラ1604は、NoC208をプログラミングするためのバイナリを生成する。例えば、ブロック2106、2108および2116を通して、DPEコンパイラ1602およびNoCコンパイラ1604は、増加有効化機能を実施し、使用されるSoCインターフェースブロックソリューションおよびNoCソリューションは、SoCインターフェースブロックおよびNoCに対する完全ソリューションが判断される場合より少ないランタイムで実施することができる有効化プロシージャに基づいて生成される。ブロック2122では、DPEコンパイラ1602およびNoCコンパイラ1604は、DPEアレイ202およびNoC208をそれぞれプログラミングするために使用される最終バイナリを生成することができる。
【0214】
ブロック2124では、PSコンパイラ1918はPSバイナリを生成する。PSバイナリは、PS212によって実行されるオブジェクトコードを含んでいる。PSバイナリは、例えば、中に実装されるアプリケーションでSoC200の動作を監視するために、PS212によって実行される制御プログラムを実装する。DPEコンパイラ1602はまた、PSコンパイラ1918によってコンパイルされ、DPEアレイ202のDPE204へ読み出すおよび/または書き出すためにPS212によって実行することができるDPEアレイドライバを生成することができる。
【0215】
ブロック2126では、システムは、SoC200内に設定ビットストリームおよびバイナリを展開させることが可能である。システムは、例えば、中にアプリケーションを実装するために、SoC200に提供され、SoC200内にロードすることができるPDI内に様々なバイナリおよび設定ビットストリームを組み合わせることが可能である。
【0216】
図22は、ハードウェアコンパイラ1606とDPEコンパイラ1602の間の通信の例示的方法2200を示している。方法2200は、
図16、19、20および21に関連して記載したハードウェアコンパイラ1606とDPEコンパイラ1602の間の通信を、どのように処理することができるかの実施例を示している。方法2200は、ハードウェアコンパイラ1606とDPEコンパイラ1602の間で行われる有効化コール(例えば、有効化プロシージャ)の例示的実装を示している。方法2200の実施例は、ハードウェアコンパイラ1606から提供されるSoCインターフェースブロック制約に応じて、更新されたSoCインターフェースブロックソリューションを生成するために、DPEアレイ202および/またはNoC208に対して完全な配置およびルーティングを実施する代替形態を提供する。方法2200は、アプリケーションのソフトウェア部分のマッピングおよびルーティングを開始する前に、再ルーティングが試みられる増加アプローチを示している。
【0217】
方法2200はブロック2202で始まることができ、ハードウェアコンパイラ1606が、DPEコンパイラ1602に1つまたは複数のSoCインターフェースブロック制約を提供する。ハードウェアコンパイラ1606は、例えば、実装フロー中に、およびアプリケーションのハードウェア部分に対する設計測定基準が満たされていないまたは満たされないだろうことを判断したことに応じて、1つまたは複数のユーザ特定SoCインターフェースブロック制約を受信する、および/または1つまたは複数のSoCインターフェースブロック制約を生成することができる。SoCインターフェースブロック制約は、アプリケーションのハードウェア部分に対する改良した結果品質(QoS)につながることが予測されるSoCインターフェースブロック206の物理的ストリームチャネルへの(1つまたは複数の)論理リソースの好ましいマッピングを特定することができる。
【0218】
ハードウェアコンパイラ1606は、DPEコンパイラ1602へSoCインターフェースブロック制約を提供する。ハードウェアコンパイラ1606から提供されるSoCインターフェースブロック制約は、2つの異なるカテゴリーに入ることができる。SoCインターフェースブロック制約の第1のカテゴリーは、ハード制約である。SoCインターフェースブロック制約の第2のカテゴリーは、ソフト制約である。ハード制約は、SoC200内にアプリケーションを実装するために満たさなければならない設計制約である。ソフト制約は、SoC200に対するアプリケーションの実装の際に違反することができる設計制約である。
【0219】
一実施例では、ハード制約は、PL214内に実装されるアプリケーションのハードウェア部分に対するユーザ特定制約である。ハード制約は、ユーザ特定制約である、位置、電力、タイミングなどのあらゆる利用可能な制約タイプを含むことができる。ソフト制約は、記載したように、SoCインターフェースブロック206のストリームチャネルへの(1つまたは複数の)論理リソースの特定のマッピングを特定する制約などの実装フローを通してハードウェアコンパイラ1606および/またはDPEコンパイラ1602によって生成されるあらゆる利用可能な制約を含むことができる。
【0220】
ブロック2204では、DPEコンパイラ1602は、(1つまたは複数の)SoCインターフェースブロック制約を受信することに応じて、更新されたSoCインターフェースブロックソリューションを生成する際に、受信したSoCインターフェースブロック制約を組み込むために有効化プロセスを開始する。ブロック2206では、DPEコンパイラ1602は、アプリケーションのハードウェア部分に関連する、ハードウェアコンパイラ1606から受信した(1つまたは複数の)ハード制約と(1つまたは複数の)ソフト制約の間で差別化することが可能である。
【0221】
ブロック2208では、DPEコンパイラ1602は、ハードウェアコンパイラから提供される(1つまたは複数の)ハード制約および(1つまたは複数の)ソフト制約の両方に続いて、アプリケーションのソフトウェア部分をルーティングする。DPEコンパイラ1602は、例えば、SoCインターフェースブロック206のどのストリームチャネル(例えば、タイル、ストリームスイッチ、およびポート)が、DPEアレイ202およびPL214、および/またはNoC208の間を交差するデータパスに使用されるかを判断するために、DPEアレイ202のDPE204の間の接続、およびDPE204とSoCインターフェースブロック206の間のデータパスをルーティングすることが可能である。DPEコンパイラ1602が、(1つまたは複数の)ハード制約および(1つまたは複数の)ソフト制約の両方に続いて、DPEアレイ202内の実装のためにアプリケーションのソフトウェア部分を上手にルーティングした場合、方法2200はブロック2218に続く。DPEコンパイラ1602が、(1つまたは複数の)ハード制約および(1つまたは複数の)ソフト制約の両方に続いて、DPEアレイ内のアプリケーションのソフトウェア部分に対するルートを生成することが可能ではない、例えば、制約がルーティング可能でない場合、方法2200はブロック2210に続く。
【0222】
ブロック2210では、DPEコンパイラ1602は、(1つまたは複数の)ハード制約のみに続いて、アプリケーションのソフトウェア部分をルーティングする。ブロック2210では、DPEコンパイラ1602は、ルーティング動作の目的で(1つまたは複数の)ソフト制約を無視する。DPEコンパイラ1602が(1つまたは複数の)ハード制約のみに続いて、DPEアレイ202内での実装のためにアプリケーションのソフトウェア部分を上手にルーティングした場合、方法2200はブロック2218に続く。DPEコンパイラ1602が、(1つまたは複数の)ハード制約のみに続いて、DPEアレイ202内のアプリケーションのソフトウェア部分に対してルートを生成することが可能ではない場合、方法2200はブロック2212に続く。
【0223】
ブロック2208および2210は、DPEノードの完全マッピング(例えば、配置)およびルーティングが実施されるより少ない時間で、更新されたSoCインターフェースブロックソリューションを作り出すために、ハードウェアコンパイラ1606から提供される(1つまたは複数の)SoCインターフェースブロック制約を使用することを求める有効化動作に対するアプローチを示している。このように、ブロック2208および2210は、DPEアレイ202のDPE204へDPEノードをマッピング(例えば、再マッピング)または「配置」しようと試みることなく、ルーティングのみを必要とする。
【0224】
ルーティングのみが、ハードウェアコンパイラからの(1つまたは複数の)SoCインターフェースブロック制約を使用して、更新されたSoCインターフェースブロックソリューションに到達することが不可能である場合、方法2200はブロック2212へ続く。ブロック2212では、DPEコンパイラ1602は、(1つまたは複数の)ハード制約および(1つまたは複数の)ソフト制約の両方を使用して、DPEアレイ202内のDPEへアプリケーションのソフトウェア部分をマッピングすることが可能である。DPEコンパイラ1602はまた、SoC200のアーキテクチャ(例えば、コネクティビティ)でプログラミングされている。DPEコンパイラ1602は、SoCインターフェースブロック206の物理的チャネルへ(例えば、ストリームチャネルへ)の論理リソースの実際の割り当てを実施し、またSoC200のアーキテクチャコネクティビティをモデリングすること可能である。
【0225】
一実施例として、PLノードBと通信するDPEノードAを検討する。ブロック図の各ブロックは、PL214内で実装される特定のコア(例えば、回路ブロック)に対応することができる。PLノードBは、SoCインターフェースブロック206内で物理的チャネルXを通してDPEノードAと通信する。物理的チャネルXは、DPEノードAおよびPLノードBの間で(1つまたは複数の)データストリームを運ぶ。DPEコンパイラ1602は、DPE Yと物理的チャネルXの間の距離が最小限に抑えられるように、特定のDPE YへDPEノードAをマッピングすることが可能である。
【0226】
SoCインターフェースブロック206のいくつかの実装では、中に含まれるタイルの1つまたは複数は、PL214に接続されていない。未接続のタイルは、PL214内および/または周りの特定の有線回路ブロック210の配置の結果である可能性がある。例えば、SoCインターフェースブロック206内の未接続タイルを備えたこのアーキテクチャは、SoCインターフェースブロック206とPL214の間のルーティングを複雑化する。未接続タイルに関するコネクティビティ情報は、DPEコンパイラ1602内でモデリングされる。DPEコンパイラ1602は、マッピングを実施する部分として、PL214との接続を有するDPEノードを選択することが可能である。DPEコンパイラ1602は、マッピングを実施する部分として、SoCインターフェースブロック206の未接続タイルの直ぐ上で、DPEアレイ202のカラム内のDPE204にマッピングされる選択したDPEノードの数を最小限に抑えることが可能である。DPEコンパイラ1602は、SoCインターフェースブロック206の未接続タイルの上に位置決めされたDPEアレイ202のカラムへ、PL214への接続(例えば、直接接続)を有していないDPEノード(例えば、他のDPEへ代わりに接続するノード)をマッピングする。
【0227】
ブロック2214では、DPEコンパイラ1602は、(1つまたは複数の)ハード制約のみに続いて、アプリケーションの再マッピングされたソフトウェア部分をルーティングする。DPEコンパイラ1602が(1つまたは複数の)ハード制約のみに続いて、DPEアレイ202内での実装のためにアプリケーションの再マッピングされたソフトウェア部分を上手にルーティングすると、方法2200はブロック2218に続く。DPEコンパイラ1602が(1つまたは複数の)ハード制約のみに続いて、DPEアレイ202内のアプリケーションのソフトウェア部分に対するルートを生成することが可能でない場合、方法2200はブロック2216に続く。ブロック2216では、DPEコンパイラ1602は有効化動作が失敗したことを示している。DPEコンパイラ1602は、通知を出力し、ハードウェアコンパイラ1606へ通知を提供することができる。
【0228】
ブロック2218では、DPEコンパイラ1602は、更新されたSoCインターフェースブロックソリューション、および更新されたSoCインターフェースブロックソリューションに対するスコアを生成する。DPEコンパイラ1602は、ブロック2208、ブロック2210、またはブロック2212および2214内で判断される、更新されたルーティングまたは更新されたマッピングおよびルーティングに基づいて、更新されたSoCインターフェースブロックソリューションを生成する。
【0229】
DPEコンパイラ1602によって生成されるスコアは、実施されるマッピングおよび/またはルーティング動作に基づいて、SoCインターフェースブロックソリューションの品質を示している。1つの例示的実装では、DPEコンパイラ1602は、どれくらい多くのソフト制約が満たされていないか、およびソフト制約内でリクエストされたストリームチャネルと更新されたSoCインターフェースブロックソリューション内に割り当てられた実際のチャネルの間の距離に基づいてスコアを判断する。満たされていないソフト制約の数、および距離は両方とも、例えば、スコアに反比例することがある。
【0230】
別の例示的実装では、DPEコンパイラ1602は、1つまたは複数の設計費用測定基準を使用して、更新されたSoCインターフェースブロックソリューションの品質に基づいてスコアを判断する。これらの設計費用測定基準としては、SoCインターフェースブロックソリューションによってサポートされるデータ移動の数、メモリコンフリクト費用、およびルートのレイテンシを挙げることができる。一態様では、DPEアレイ202内のデータ移動の数は、SoCインターフェースブロック206にわたってデータを転送するのに必要なものに加えて、DPEアレイ202内で使用されるDMA転送の数によって定量化することができる。メモリコンフリクト費用は、各メモリバンクに対する同時アクセス回路(例えば、DPEまたはDMA)の数に基づいて判断することができる。ルートのレイテンシは、SoCインターフェースブロック206ポートと個別のソースまたは宛先DPE204の間でデータを転送するために必要な最小数のサイクルによって定量化することができる。DPEコンパイラ1602は、設計費用測定基準がより低い(例えば、設計費用測定基準の合計がより低い)場合に、より高いスコアを判断する。
【0231】
別の例示的実装では、更新されたSoCインターフェースブロックソリューションの合計スコアは、比率(例えば、80/100)として算出され、分子は、追加のDMA転送の数、2を超える各メモリバンクに対する同時アクセス回路の数、およびSoCインターフェースブロック206ポートとDPE204コアの間のルートに必要とされるホップの数の合計によって100から減少される。
【0232】
ブロック2220では、DPEコンパイラ1602は、ハードウェアコンパイラ1606へ更新されたSoCインターフェースブロックソリューションおよびスコアを提供する。ハードウェアコンパイラ1606は、各それぞれのSoCインターフェースブロックソリューションのスコアに基づいて、DPEコンパイラ1602から受信された様々なSoCインターフェースブロックソリューションを評価することが可能である。一態様では、ハードウェアコンパイラ1606は、例えば、前のSoCインターフェースブロックソリューションを保持することが可能である。ハードウェアコンパイラ1606は、前の(例えば、直ぐ前のSoCインターフェースブロックソリューション)のスコアと更新されたSoCインターフェースブロックソリューションのスコアを比較し、更新されたSoCインターフェースブロックソリューションのスコアが前のSoCインターフェースブロックソリューションのスコアを超える場合に、更新されたSoCインターフェースブロックソリューションを使用することが可能である。
【0233】
別の例示的実装では、ハードウェアコンパイラ1606は、80/100のスコアを有するDPEコンパイラ1602からSoCインターフェースブロックソリューションを受信する。ハードウェアコンパイラ1606は、PL214内でアプリケーションのハードウェア部分の実装に到達することが不可能であり、DPEコンパイラ1602へ1つまたは複数のSoCインターフェースブロック制約を提供する。DPEコンパイラ1602からハードウェアコンパイラ1606によって受信される更新されたSoCインターフェースブロックソリューションは、20/100のスコアを有する。この場合、新しく受信したSoCインターフェースブロックソリューションのスコアが前のSoCインターフェースブロックソリューションのスコアを超えない(例えば、これより低い)ことを判断することに応じて、ハードウェアコンパイラ1606は、SoCインターフェースブロック制約(例えば、ソフト制約)の1つまたは複数を緩和し、DPEコンパイラ1602へ、(1つまたは複数の)緩和された制約を含むSoCインターフェースブロック制約を提供する。DPEコンパイラ1602は、(1つまたは複数の)緩和された設計制約を鑑みて、20/100および/または80/100より高いスコアを有する別のSoCインターフェースブロックソリューションを生成することを試みる。
【0234】
別の実施例では、ハードウェアコンパイラ1606は、より高いまたは最も高いスコアを有する前のSoCインターフェースブロックソリューションを使用することを選択することができる。ハードウェアコンパイラ1606は、例えば、直ぐ前のSoCインターフェースブロックソリューションより低いスコアを有するSoCインターフェースブロックソリューションを受信することに応じて、またはSoCインターフェースブロック制約の1つまたは複数が緩和された後に前のSoCインターフェースブロックソリューションより低いスコアを有するSoCインターフェースブロックソリューションを受信することに応じてなどのあらゆるポイントでより早期のSoCインターフェースブロックソリューションに戻ることがある。
【0235】
図23は、SoCインターフェースブロックソリューションを処理する例示的方法2300を示している。方法2300は、アプリケーションのハードウェア部分上で実装フローを実施する際の使用のために、(1つまたは複数の)受信したSoCインターフェースブロックソリューションを評価し、現在の最良のSoCインターフェースブロックソリューションとも呼ばれるSoCインターフェースブロックソリューションを選択するために、ハードウェアコンパイラ1606によって実施することができる。
【0236】
ブロック2302では、ハードウェアコンパイラ1606は、DPEコンパイラ1602からSoCインターフェースブロックソリューションを受信する。ブロック2302で受信されたSoCインターフェースブロックソリューションは、DPEコンパイラ1602から提供される初期または第1のSoCインターフェースブロックソリューションであってもよい。ハードウェアコンパイラ1606へSoCインターフェースブロックソリューションを提供する際、DPEコンパイラ1602は更に、SoCインターフェースブロックソリューションのスコアを提供する。少なくとも初期に、ハードウェアコンパイラ1606は、現在の最良のSoCインターフェースブロックソリューションであるように第1のSoCインターフェースブロックソリューションを選択する。
【0237】
ブロック2304では、ハードウェアコンパイラ1606は任意選択では、ユーザから1つまたは複数のハードSoCインターフェースブロック制約を受信する。ブロック2306では、ハードウェアコンパイラは、アプリケーションのハードウェア部分を実装するために1つまたは複数のソフトSoCインターフェースブロック制約を生成することが可能である。ハードウェアコンパイラは、ハードウェア設計測定基準を満たすための努力において、ソフトSoCインターフェースブロック制約を生成する。
【0238】
ブロック2038では、ハードウェアコンパイラ1606は、有効化のためにDPEコンパイラ1602へSoCインターフェースブロック制約を(例えば、ハードおよびソフトの両方)を送信する。SoCインターフェースブロック制約を受信することに応じて、DPEコンパイラは、ハードウェアコンパイラ1606から受信したSoCインターフェースブロック制約に基づき、更新されたSoCインターフェースブロックソリューションを生成することが可能である。DPEコンパイラ1602は、ハードウェアコンパイラ1606へ更新されたSoCインターフェースブロックソリューションを提供する。したがって、ブロック2310では、ハードウェアコンパイラは、更新されたSoCインターフェースブロックソリューションを受信する。
【0239】
ブロック2312では、ハードウェアコンパイラ1606は、更新されたSoCインターフェースブロックソリューション(例えば、最近受信したSoCインターフェースブロックソリューション)のスコアを、第1の(例えば、前に受信した)SoCインターフェースブロックソリューションのスコアと比較する。
【0240】
ブロック2314では、ハードウェアコンパイラ1606は、更新された(例えば、最近受信した)SoCインターフェースブロックソリューションが前に受信した(例えば、第1の)SoCインターフェースブロックソリューションのスコアを超えるかどうか判断する。ブロック2310では、ハードウェアコンパイラ1606は、現在の最良のSoCインターフェースブロックソリューションとして、最近受信した(例えば、更新された)SoCインターフェースブロックソリューションを選択する。
【0241】
ブロック2318では、ハードウェアコンパイラ1606は、改良目的が達成されたか、または時間予算を超えたかどうか判断する。例えば、ハードウェアコンパイラ1606は、アプリケーションのハードウェア部分の現在の実施状態がより多くの数の設計測定基準を満たしている、および/または1つまたは複数の設計測定基準を満たしていることに近くなったかどうかを判断することが可能である。ハードウェアコンパイラ1606はまた、時間予算が位置および/またはルートに関して費やされた処理時間の量に基づいて超えたかどうか、位置およびルートの両方に対して、その時間が最大配置時間、最大ルーティング時間、または最大時間量を超えたかどうかを判断することが可能である。改良目的に到達したか、または時間予算を超えたかを判断することに応じて、方法2300はブロック2324に続く。そうでない場合、方法2300はブロック2320に続く。
【0242】
ブロック2324では、ハードウェアコンパイラ1606は、アプリケーションのハードウェア部分を実装するために、現在の最良のSoCインターフェースブロックソリューションを使用する。
【0243】
ブロック2320に続いて、ハードウェアコンパイラ1606は、SoCインターフェースブロック制約の1つまたは複数を緩和する。ハードウェアコンパイラ1606は、ソフト制約の1つまたは複数を緩和する、または例えば、変更することができる。ソフトSoCインターフェースブロック制約を緩和または変更する実施例は、ソフトSoCインターフェースブロック制約を取り除く(または、削除する)ことを含む。ソフトSoCインターフェースブロック制約を緩和または変更する別の実施例は、ソフトSoCインターフェースブロック制約を異なるSoCインターフェースブロック制約と交換することを含む。交換ソフトSoCインターフェースブロック制約は、交換される元のものより厳格でないことがある。
【0244】
ブロック2322では、ハードウェアコンパイラ1606は、DPEコンパイラ1602へ、(1つまたは複数の)緩和されたSoCインターフェースブロック制約を含む、(1つまたは複数の)SoCインターフェースブロック制約を送信することが可能である。ブロック2322の後、方法2300は、記載したように、処理を続けるようにブロック2310に戻る。例えば、DPEコンパイラは、ブロック2322でハードウェアコンパイラから受信したSoCインターフェースブロック制約に基づいて、更に更新されたSoCインターフェースブロックソリューションを生成する。ブロック2310では、ハードウェアコンパイラは、更に更新されたSoCインターフェースブロックソリューションを受信する。
【0245】
方法2300は、(1つまたは複数の)SoCインターフェースブロック制約を緩和することができる実装フローおよび環境を実施するために使用するように、DPEコンパイラ1602からSoCインターフェースブロックソリューションを選択する例示的プロセスを示している。ハードウェアコンパイラ1606は、調整および/または有効化プロセスの一部として、更新されたSoCインターフェースブロックソリューションを得るために、実装フロー中に様々な異なるポイントのいずれかで、DPEコンパイラ1602へSoCインターフェースブロック制約を提供することができることを理解すべきである。例えば、ハードウェアコンパイラ1606が、アプリケーションのハードウェア部分の実装が、現在の状態で、アプリケーションの設計測定基準を満たしていない、または満たさないだろうことを(例えば、タイミング、電力、または他のチェックまたは分析に基づいて)判断するあらゆるポイントにおいて、ハードウェアコンパイラ1606は、DPEコンパイラ1602へ(1つまたは複数の)更新されたSoCインターフェースブロック制約を提供することによって、更新されたSoCインターフェースブロックソリューションをリクエストすることができる。
【0246】
図24は、SoC200内での実装のためのアプリケーション2400の別の実施例を示している。アプリケーション2400は、方向付けられたフローグラフとして特定される。ノードは、PLノード、DPEノード、および/またはI/Oノードの間で区別するように異なるように影を付けるまたは形成されている。示した実施例では、I/Oノードは、SoCインターフェースブロック206上にマッピングすることができる。PLノードは、PL内に実装されている。DPEノードは、特定のDPEにマッピングされる。全体には図示されていないが、アプリケーション2400は、DPE204へマッピングされる36カーネル(例えば、ノード)、DPEアレイデータストリームへの72PL、およびPLデータストリームへの36DPEアレイを含んでいる。
【0247】
図25は、DPEコンパイラ1602によって生成されたSoCインターフェースブロックソリューションの例示的図である。
図25のSoCインターフェースブロックソリューションは、DPEコンパイラ1602によって生成され、ハードウェアコンパイラ1606に提供することができる。
図25の実施例は、DPEコンパイラ1602がDPEアレイ202のDPE204へのDPEノードの初期マッピングを生成するシナリオを示している。更に、DPEコンパイラ1602は、DPEノードの初期マッピングを上手にルーティングする。
図25の実施例では、DPEアレイ202のカラム6~17だけが示されている。更に、各カラムは4つのDPE204を含んでいる。
【0248】
図25は、DPEアレイ202のDPE204へのDPEノードのマッピング、およびSoCインターフェースブロック206ハードウェアへのデータストリームのルーティングを示している。DPEコンパイラ1602によって判断されるように、DPE204へのアプリケーション2400のDPEノード0~35のマッピングは、DPEアレイ202を参照して示されている。SoCインターフェースブロック206のDPEと特定のタイルの間のデータストリームのルーティングは、矢印の集合として示されている。
図25~30を説明する際の図示する目的で、
図25に表示されたキーは、ソフト制約、ハード制約によって制御されるデータストリームと適用可能な制約がないデータストリームの間で差分化するために使用される。
【0249】
図25~30を参照して、ソフト制約は、DPEコンパイラ1602および/またはハードウェアコンパイラ1606によって判断されるルーティングに対応し、ハード制約は、ユーザ特定SoCインターフェースブロック制約を含むことができる。
図25に示す制約の全ては、ソフト制約である。
図25の実施例は、DPEコンパイラ1602が初期SoCインターフェースブロックソリューションを上手に判断する場合を示している。一態様では、DPEコンパイラ1602は、1つのカラムから別のカラムへDPE204を列に沿って(例えば、左から右へ)横切る他のルートを使用することを試みる前に、図示したようにSoCインターフェースブロックソリューションに対する垂直ルートを使用することを少なくとも初期に試みるように設定することができる。
【0250】
図26は、DPEコンパイラ1602によって受信されるルーティング可能なSoCインターフェースブロック制約の一実施例を示している。DPEコンパイラ1602は、更新されたSoCインターフェースブロック制約の形で、更新されたルーティングを特定する更新されたSoCインターフェースブロックソリューションを生成することが可能である。
図26の実施例では、より多数のSoCインターフェースブロック制約はハード制約である。本実施例では、DPEコンパイラ1602は、図示した各タイプの制約を観察しながら、DPEアレイ202のデータストリームを上手にルーティングする。
【0251】
図27は、DPEコンパイラ1602によって観察されるアンルータブルSoCインターフェースブロック制約の一実施例を示している。DPEコンパイラ1602は、
図27に図示された制約を観察するSoCインターフェースブロックソリューションを作り出すことが不可能である。
【0252】
図28は、DPEコンパイラ1602が
図27からのソフトタイプSoCインターフェースブロック制約を無視する実施例を示している。
図28の実施例では、DPEコンパイラ1602は、ハード制約のみを使用して、DPEアレイ202内の実装のためにアプリケーションのソフトウェア部分を上手にルーティングする。制約によって制御されないこれらのデータストリームは、DPEコンパイラ1602がフィットするまたはそうなることが可能である、あらゆる方法でルーティングすることができる。
【0253】
図29は、アンルータブルSoCインターフェースブロック制約の別の実施例を示している。
図29の実施例は、ハード制約のみを有する。このようにして、ハード制約を無視することが不可能であるDPEコンパイラ1602は、マッピング(または、再マッピング)動作を開始する。
【0254】
図30は、
図29のDPEノードの例示的マッピングを示している。本実施例では、再マッピングの後に、DPEコンパイラ1602は、更新されたSoCインターフェースブロックソリューションを生成するためにDPEノードを上手にルーティングすることが可能である。
【0255】
図31は、アンルータブルSoCインターフェースブロック制約の別の実施例を示している。
図31の実施例は、ハード制約のみを有する。このようにして、ハード制約を無視することが不可能であるDPEコンパイラ1602は、マッピング動作を開始する。図示する目的で、DPEアレイ202は、3列のDPE(例えば、各カラムにおいて3つのDPE)のみを含んでいる。
【0256】
図32は、
図31のDPEノードの例示的マッピングを図示している。
図32は、
図31に関連して記載されるように、開始された再マッピング動作から得られた結果を示している。本実施例では、再マッピングの後に、DPEコンパイラ1602は、更新されたSoCインターフェースブロックソリューションを生成するために、アプリケーションのソフトウェアソリューションを上手にルーティングすることが可能である。
【0257】
一態様では、システムは、マッピング問題の整数線形プログラミング(ILP)形成を生成することによって、
図25~32に示されたマッピングを実施することが可能である。ILP形成は、マッピング問題を規定する複数の様々な変数および制約を含むことができる。システムは、(1つまたは複数の)費用を最小限に抑えながらも、ILP形成を解決することが可能である。費用は、少なくとも部分的に、使用されたDMAエンジンの数に基づいて判断することができる。このように、システムは、DPEアレイ上にDFGをマッピングすることが可能である。
【0258】
別の態様では、システムは、優先度の順番を減少させる際に、DFGのノードをオーダーすることが可能である。システムは、1つまたは複数の要因に基づいて優先度を決定することができる。要因の実施例としては、これに限らないが、DFGグラフ内のノードの高さ、ノードの合計度合(例えば、ノードに入るおよびノードから離れる全てのエッジの合計)、および/またはメモリ、ストリーム、およびカスケードなどのノードに接続されたエッジのタイプを挙げることができる。システムは、親和性および有効性に基づいて利用可能な最良のDPE上にノードを配置することが可能である。システムは、このノードのリソース要件全てが所与のDPE上で満たすことができるかどうか(例えば、演算リソース、メモリバッファ、ストリームリソース)に基づいて有効性を判断することが可能である。システムは、1つまたは複数の他の要因に基づいて親和性を判断することが可能である。親和性要因の実施例としては、ノードのネイバーがDMA通信を最小限に抑えるために既に配置されている同じDPEまたは隣接するDPE上にこのノードを配置すること、このノードがカスケードチェーンの一部であるかどうかなどのアーキテクチャ制約、および/または最大限に自由なリソースを有するDPEを見つけることを挙げることができる。ノードが満たされている全ての制約で配置される場合、システムは、このようなノードが次に処理されるように、配置されたノードの隣接するノードの優先度を増加させることが可能である。利用可能な配置が現在のノードに有効でない場合、システムは、このノードに対するスペースを作るために、(1つまたは複数の)最良の候補DPEからいくつかの他のノードを配置しないように試みる可能性がある。システムは、再び配置される優先度キューに配置されないノードを戻すことができる。システムは、行われる配置および非配置の合計数の経過を追うことによって、良いソリューションを見つける際に費やされる合計労力を制限することが可能である。しかし、他のマッピング技術を使用することができ、本明細書で提供される実施例は限定することを意図していないことを理解すべきである。
【0259】
図33は、
図1に関連して記載されたシステムによって実行可能である別の例示的ソフトウェアアーキテクチャ3300を示している。例えば、
図33のアーキテクチャ3300は、
図1のプログラムモジュール120の1つまたは複数として実装することができる。
図33の例示的ソフトウェアアーキテクチャ3300は、アプリケーション、例えば、データフローグラフがPL214内での実装のために1つまたは複数の高レベル合成(HLS)カーネルを特定する場合に使用することができる。例えば、アプリケーションのPLノードは、HLS処理を必要とするHLSカーネルを参照する。一態様では、HLSカーネルは、Cおよび/またはC++などの高レベル言語(HLL)内で特定される。
【0260】
図33の実施例では、ソフトウェアアーキテクチャ3300は、DPEコンパイラ1602、ハードウェアコンパイラ1606、HLSコンパイラ3302、およびシステムリンカ3304を含む。NoCコンパイラ1604は、本開示内で前に記載したように、有効化チェック3306を実施するために、含める、およびDPEコンパイラ1602と合わせて使用することができる。
【0261】
図示したように、DPEコンパイラ1602は、アプリケーション3312、SoCアーキテクチャ記述3310、および任意選択では、テストベンチ3314を受信する。アプリケーション3312は、論じたように、平行実行意味を含むデータフローグラフとして特定することができる。アプリケーション3312は、相互接続されたPLノードおよびDPEノードを含み、ランタイムパラメータを特定することができる。本実施例では、PLノードはHLSカーネルを参照する。SoCアーキテクチャ記述3310は、DPEアレイ202のサイズおよび寸法、PL214および中で利用可能な様々なプログラマブル回路ブロックのサイズ、PS212内に含まれるプロセッサおよび他のデバイスのタイプなどのPS212のタイプ、およびアプリケーション3312が実装されるSoC200内の回路の他の物理的特徴などの情報を特定するデータ構造またはファイルであってもよい。SoCアーキテクチャ記述3310はまた、その中に含まれるサブシステムの間のコネクティビティ(例えば、インターフェース)を特定することができる。
【0262】
DPEコンパイラ1602は、HLSコンパイラ3302にHLSカーネルを出力することが可能である。HLSコンパイラ3302は、HLL内で特定されるHLSカーネルを、ハードウェアコンパイラによって合成することができるHLS IPに変換する。例えば、HLS IPは、レジスタ転送レベル(RTL)ブロックとして特定することができる。HLSコンパイラ3302は、例えば、各HLSカーネルに対してRLTブロックを生成する。図示するように、HLSコンパイラ3302は、HLS IPをシステムリンカ3304に出力する。
【0263】
DPEコンパイラ1602は、初期SoCインターフェースブロックソリューションおよび接続グラフなどの追加の出力を生成する。DPEコンパイラ1602は、システムリンカ3304およびSoCインターフェースブロックソリューションへの接続グラフをハードウェアコンパイラ1606に出力する。接続グラフは、PL214内に実装される(次に、HLS IPに変換される)HLSカーネルに対応するノードと、DPEアレイ202内に実装されるノードの間のコネクティビティを特定する。
【0264】
図示したように、システムリンカ3304は、SoCアーキテクチャ記述3310を受信する。システムリンカ3304はまた、DPEコンパイラ1602を通して処理されないアプリケーション3312から直接、1つまたは複数のHLSおよび/またはRTLブロックを受信することができる。システムリンカ3304は、受信したHLSおよび/またはRTLブロック、HLS IP、IPカーネルの間のコネクティビティを特定する接続グラフ、およびIPカーネルとDPEノードの間のコネクティビティを使用して、アプリケーションのハードウェア部分に対応するブロック図を自動的に生成することが可能である。一態様では、システムリンカ3304は、SoC200に対するベースプラットフォーム(図示せず)とブロック図を一体化することが可能である。例えば、システムリンカ3304は、一体化したブロック図につながるベースプラットフォームへブロック図を接続することが可能である。ブロック図および接続されたベースプラットフォームは、合成可能なブロック図とも呼ばれることがある。
【0265】
別の態様では、SDFグラフ(例えば、アプリケーション3312)内でカーネルとして参照されるHLS IPおよびRTL IPは、DPEコンパイラ1602の外側でIP内でコンパイルすることができる。コンパイルされたIPは、システムリンカ3304に直接提供することができる。システムリンカ3304は、提供されたIPを使用して、アプリケーションのハードウェア部分に対応するブロック図を自動的に生成することが可能である。
【0266】
一態様では、システムリンカ3304は、オリジナルSDF(例えば、アプリケーション3312)および生成された接続グラフから誘導された追加のハードウェア特定詳細をブロック図内に含むことが可能である。例えば、アプリケーション3312は、(例えば、ネームまたはその他適合/相関技術により)いくつかの機構を使用してこのようなIPのデータベース内でIPに翻訳またはIPに相関(例えば、適合)することができる実際のHLSモデルであるソフトウェアモデルを含んでいるので、システムリンカ3304は、(例えば、ユーザ介入なしで)ブロック図を自動的に生成することが可能である。本実施例では、カスタムIPを使用しなくともよい。ブロック図を自動的に生成する際、システムリンカ3304は、本明細書に記載した他の場合では、ユーザによって手動で挿入および接続された、データ幅変換ブロック、ハードウェアバッファ、および/またはクロックドメイン交差論理などの1つまたは複数の追加の回路ブロックを自動的に挿入することが可能である。システムリンカ3304は、例えば、1つまたは複数の追加の回路ブロックが、記載したように、接続グラフによって特定される接続を作り出すのに必要であることを判断するために、データタイプおよびソフトウェアモデルを分析することが可能である。
【0267】
システムリンカ3304は、ハードウェアコンパイラ1606にブロック図を出力する。ハードウェアコンパイラ1606は、ブロック図、およびDPEコンパイラ1602によって生成される初期SoCインターフェースブロックソリューションを受信する。ハードウェアコンパイラ1606は、DPEコンパイラ1602、および任意選択では、
図20のブロック2010、
図21、
図22および
図23のブロック2106、2108、2112、2114、2116および2118に関連して前に記載されたように、NoCコンパイラ1604で有効化チェック3306を開始することが可能である。有効化は、ハードウェアコンパイラが、DPEコンパイラ1602に、および任意選択では、NoCコンパイラ1604に(反復アプローチ内の緩和/変更された制約を含むことができる)様々なタイプの制約などの設計データを提供し、その後、DPEコンパイラ1602から更新されたSoCインターフェースブロックソリューションを、および任意選択では、NoCコンパイラ1604から更新されたNoCソリューションを受信する反復プロセスであってもよい。
【0268】
ハードウェアコンパイラ1606は、PL214内にアプリケーション3312のハードウェア部分を実装する設定ビットストリームを含むハードウェアパッケージを生成することが可能である。ハードウェアコンパイラ1606は、DPEコンパイラ1602にハードウェアパッケージを出力することが可能である。DPEコンパイラ1602は、その中でDPEアレイ202内での実装を意図したアプリケーション3312のソフトウェア部分をプログラミングするDPEアレイ設定データ(例えば、1つまたは複数のバイナリ)を生成することが可能である。
【0269】
図34は、SoC200内にアプリケーションを実装するために設計フローを実施する別の例示的方法3400を示している。方法3400は、
図1に関連して記載したように、システムによって実施することができる。システムは、
図33に関連して記載したように、ソフトウェアアーキテクチャを実行することができる。
図34の実施例では、処理されているアプリケーションは、PL214内への実装のためにHLSカーネルを特定するノードを含んでいる。
【0270】
ブロック3402では、DPEコンパイラ1602は、アプリケーション、SoC200のSoCアーキテクチャ記述、および任意選択では、テストベンチを受信する。ブロック3404では、DPEコンパイラ1602は、接続グラフを生成し、接続グラフをシステムリンカに提供することが可能である。ブロック3406では、DPEコンパイラ1602は、初期SoCインターフェースブロックソリューションを生成し、ハードウェアコンパイラ1606に初期SoCインターフェースブロックソリューションを提供する。初期SoCインターフェースブロックソリューションは、DPEアレイ202のDPE204へのアプリケーションのDPEノードの初期マッピング、およびSoCインターフェースブロック206の物理データパスへのDPEアレイ202内のおよびそこからの接続のマッピングを特定することができる。
【0271】
ブロック3408では、HLSコンパイラ3302は、合成可能なIPコアを生成するために、HLSカーネル上でHLSを実施することが可能である。例えば、DPEコンパイラ1602は、HLSコンパイラ3302へアプリケーションのノードによって特定されたHLSカーネルを提供する。HLSコンパイラ3302は、受信された各HLSカーネルに対してHLS IPを生成する。HLSコンパイラ3302は、システムリンカにHLS IPを出力する。
【0272】
ブロック3410では、システムリンカは、接続グラフ、SoCアーキテクチャ記述、およびHLS IPを使用して、アプリケーションのハードウェア部分に対応するブロック図を自動的に生成することが可能である。ブロック3412では、システムリンカは、ブロック図およびSOC200に対するベースプラットフォームを一体化することが可能である。例えば、ハードウェアコンパイラ1606は、ブロック図をベースプラットフォームに接続させることが可能であり、一体型ブロック図につながる。一態様では、ブロック図および接続されたベースプラットフォームは、合成可能なブロック図と呼ばれる。
【0273】
ブロック3414では、ハードウェアコンパイラ1606は、一体型ブロック図上で実装フローを実施することが可能である。実装フローの間、ハードウェアコンパイラ1606は、PL内での実装のためのアプリケーションのハードウェア部分の実装へのカバレッジに対して、DPEコンパイラ1602、および任意選択では、NoCコンパイラ1604に関連して、本明細書に記載したように、有効化を実施することが可能である。例えば、論じたように、ハードウェアコンパイラ1606は、アプリケーションのハードウェア部分の現在の実装状態が1つまたは複数の設計測定基準を満たしていないと判断することに応じて、DPEコンパイラ1602、および任意選択では、NoCコンパイラ1604を起動させることが可能である。ハードウェアコンパイラ1606は、配置の前、配置中、ルーティングの前、および/またはルーティング中に、DPEコンパイラ1602、および任意選択では、NoCコンパイラ1604を起動させることができる。
【0274】
ブロック3416では、ハードウェアコンパイラ1606は、DPEコンパイラ1602にハードウェア実装をエクスポートする。一態様では、ハードウェア実装は、デバイスサポートアーカイブ(DSA)ファイルとして出力することができる。DSAファイルは、プラットフォームメタデータ、エミュレーションデータ、実装フローからハードウェアコンパイラ1606によって生成されるような1つまたは複数の設定ビットストリームなどを含むことができる。ハードウェア実装はまた、最終SoCインターフェースブロックソリューション、および任意選択では、アプリケーションのハードウェア部分の実装を作り出すためにハードウェアコンパイラ1606によって使用される最終NoCソリューションを含むことができる。
【0275】
ブロック3418では、DPEコンパイラ1602は、DPEアレイに対するソフトウェア生成を完了する。例えば、DPEコンパイラ1602は、アプリケーション内で使用されるDPEをプログラミングするために使用されるバイナリを生成する。バイナリを生成する際、DPEコンパイラ1602は、最終SoCインターフェースブロックソリューション、および任意選択では、実装フローを実施するためにハードウェアコンパイラ1606によって使用される最終NoCソリューションを使用することが可能である。一態様では、DPEコンパイラは、DSAに含まれる設定ビットストリームおよび/またはメタデータの検査を通してハードウェアコンパイラによって使用されるSoCインターフェースブロックソリューションを判断することが可能である。
【0276】
ブロック3420では、NoCコンパイラ1604は、NoC208をプログラミングするために1つまたは複数のバイナリを生成する。ブロック3422では、PSコンパイラ1918はPSバイナリを生成する。ブロック3424では、システムは、SoC200内で設定ビットストリームおよびバイナリを展開することが可能である。
【0277】
図35は、SoC200内にアプリケーションを実装するために設計フローを実施する別の例示的方法3500を示している。方法3500は、
図1に関連して記載したようにシステムによって実施することができる。アプリケーションは、本明細書に記載したようにデータフローグラフとして特定することができ、DPEアレイ202内での実装のためのソフトウェア部分、およびPL214内での実装のためのハードウェア部分を備えることができる。
【0278】
ブロック3502では、システムは、DPEアレイ202およびPL214を結合させるインターフェースブロックのハードウェアリソースにソフトウェア部分によって使用される論理リソースをマッピングする第1のインターフェースソリューションを生成することが可能である。DPEコンパイラ1602は、例えば、初期、または第1のSoCインターフェースブロックソリューションを生成することができる。
【0279】
ブロック3504では、システムは、DPEアレイ内に実装されるソフトウェア部分のHLSカーネルおよびノードの間のコネクティビティを特定する接続グラフを生成することが可能である。一態様では、DPEコンパイラ1602は、接続グラフを生成することが可能である。
【0280】
ブロック3506では、システムは、接続グラフおよびHLSカーネルに基づいて、ブロック図を生成することが可能である。ブロック図は合成可能である。システムリンカは、例えば、合成可能なブロック図を生成することが可能である。
【0281】
ブロック3508では、システムは、第1のインターフェースソリューションを使用して、ブロック図上で実装フローを実施することが可能である。論じたように、ハードウェアコンパイラ1606は、実装フロー中に、DPEコンパイラ1602、および任意選択では、NoCコンパイラ1604と設計データを交換することが可能である。ハードウェアコンパイラ1606およびDPEコンパイラ1602は、データを反復して交換することができ、DPEコンパイラ1602がハードウェアコンパイラ1606によって起動されていることに応じて、ハードウェアコンパイラ1606に更新されたSoCインターフェースブロックソリューションを提供する。ハードウェアコンパイラ1606は、それに対してSoCインターフェースブロック用の1つまたは複数の制約を提供することによって、DPEコンパイラを起動することができる。ハードウェアコンパイラ1606およびNoCコンパイラ1604は、データを反復して交換することができ、NoCコンパイラ1604は、ハードウェアコンパイラ1606によって起動されていることに応じて、ハードウェアコンパイラ1606に更新されたNoCソリューションを提供する。ハードウェアコンパイラ1606は、それに対してNoC208用の1つまたは複数の制約を提供することによって、NoCコンパイラ1604を起動することができる。
【0282】
ブロック3510では、システムは、DPEアレイ202の1つまたは複数のDPE204内での実装のためにアプリケーションのソフトウェア部分を、DPEコンパイラ1602を使用してコンパイルすることが可能である。DPEコンパイラ1602は、DPEアレイ202とPL214の間の一貫したインターフェース(例えば、ハードウェアコンパイラ1606によって実装フロー中に使用される同じSoCインターフェースブロックソリューション)を使用するために、実装フローの結果を受信することができる。
【0283】
説明する目的で、本明細書に開示される様々な発明概念の完全な理解を行うために、特定の用語体系が記載されている。本明細書で使用される用語は、しかし、発明配置の特定の態様を記載する目的のみであり、限定することを意図したものではない。
【0284】
本明細書で規定したように、単数形「a」、「an」および「the」は、内容によりそうでないと明らかに示されていない限り、複数形も含むことを意図している。
【0285】
本明細書で規定したように、「少なくとも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が一緒にを意味している。
【0286】
本明細書で規定したように、「自動的に」という用語は、ユーザ介入なしを意味する。本明細書で規定したように、「ユーザ」という用語は人間を意味する。
【0287】
本明細書で規定したように、「コンピュータ読取可能記憶媒体」という用語は、指示実行システム、装置、またはデバイスによってまたはこれとあわせて使用するためのプログラムコードを含むまたは記憶する記憶媒体を意味する。本明細書で規定したように、「コンピュータ読取可能記憶媒体」は、それ自体が一時的伝搬信号ではない。コンピュータ読取可能記憶媒体は、これに限らないが、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、または前述のあらゆる適切な組合せであってもよい。本明細書に記載したように、様々な形のメモリが、コンピュータ読取可能記憶媒体の例である。コンピュータ読取可能記憶媒体のより特定の例の非排他的リストとしては、携帯可能コンピュータディスク、ハードディスク、RAM、読取り専用メモリ(ROM)、消去可能なプログラマブル読取り専用メモリ(EPROMまたはフラッシュメモリ)、電子消去可能なプログラマブル読取り専用メモリ(EEPROM)、静的ランダムアクセスメモリ(SRAM)、携帯可能コンパクトディスク読取り専用メモリ(CD-ROM)、デジタルバーサタイルディスク(DVD)、メモリスティック、フロッピーディスクなどを挙げることができる。
【0288】
本明細書で規定したように、「場合」という用語は、内容によって、「時に」または「際に」または「に応じて」または「応じ」を意味する。したがって、「判断される場合」または「[記された条件またはイベント]が検出された場合」という語句は、内容によって、「判断する際に」または「判断することに応じて」または「[記された条件またはイベント]を検出する際」または「[記された条件またはイベント]を検出することに応じて」または「[記された条件またはイベント]を検出することに応じ」を意味するものと解釈されたい。
【0289】
本明細書で規定したように、「高レベル言語」または「HLL」という用語は、指示がデータ処理システムの詳細からの強い抽象的概念を有する、データ処理システムをプログラミングするために使用されるプログラミング言語、または一式の指示、例えば機械言語を意味する。例えば、HLLは、メモリ管理などのデータ処理システムの動作の態様を自動化するまたは隠すことが可能である。HLLとも呼ばれるが、これらの言語は典型的には、「効率レベル言語」として分類される。HLLは、ハードウェアサポートプログラミングモデルに直接さらす。HLLの例としては、これに限らないが、C、C++、および他の適切な言語が挙げられる。
【0290】
HLLは、デジタル回路を記載するために使用される、Verilog、System Verilog、およびVHDLなどのハードウェア記述言語(HDL)と対比させることができる。HDLは、デザイナーが、典型的には技術依存でないレジスタ転送レベル(RTL)ネットリストにコンパイルすることができるデジタル回路設計の定義を作り出すことを可能にする。
【0291】
本明細書で規定したように、「応じ」および上で記載したような同様の言語、例えば、「場合」、「時」または「際に」の用語は、アクションまたはイベントに直ぐに応じるまたは反応することを意味する。応答または反応は自動的に行われる。したがって、第2のアクションが第1のアクション「に応じ」行われる場合、第1のアクションの発生と第2のアクションの発生の間に因果関係がある。「応じ」の用語は因果関係を示す。
【0292】
本明細書で規定したように、「1つの実施形態」、「一実施形態」、「1つまたは複数の実施形態」、「特定の実施形態」、または類似の言語の用語は、実施形態に関連して記載した特定の性状、構造、または特徴が、本開示内に記載された少なくとも1つの実施形態に含まれることを意味する。したがって、本開示全体を通して「1つの実施形態では」、「一実施形態では」、「1つまたは複数実施形態では」、「特定の実施形態では」、および類似の言語の語句の出現は、必ずしもではないが、全て同じ実施形態に言及していることがある。「実施形態」および「配置」という用語は、本開示内で交換可能に使用される。
【0293】
本明細書で規定したように、「出力」という用語は、物理的メモリ要素、例えば、表示するために書き込むデバイス、または別のシステムへ送信または伝達する、エクスポートする他の周辺出力デバイスなどに記憶することを意味する。
【0294】
本明細書で規定したように、「実質的に」という用語は、言及した特徴、パラメータ、または値を正確に達成する必要がないが、例えば、許容範囲、測定誤差、測定精度限界、および当業者に知られている他の要因を含む逸脱または変更が、特徴が提供することを意図した効果を除外しない範囲で起こる可能性があることを意味する。
【0295】
第1の、第2のなどの用語は、様々な要素を記載するために本明細書で使用することができる。これらの要素は、これらの用語によって制限されるものではない。というのは、これらの用語は、そうでないと記されていない、または内容がそうでないと明確に示していない限り、1つの要素を別の要素と区別するためだけに使用されているからである。
【0296】
コンピュータプログラム製品としては、本明細書に記載された発明配置の態様をプロセッサに実施させるために、上にコンピュータ読取可能プログラム指示を有する(1つまたは複数の)コンピュータ読取可能記憶媒体を挙げることができる。本開示内で、「プログラムコード」という用語は、「コンピュータ読取可能プログラム指示」という用語と交換可能に使用されている。本明細書に記載されたコンピュータ読取可能プログラム指示は、コンピュータ読取可能記憶媒体からそれぞれの演算/処理デバイスに、またはネットワーク、例えば、インターネット、LAN、WAN、および/または無線ネットワークを介して外部コンピュータまたは外部記憶デバイスにダウンロードすることができる。ネットワークは、銅送信ケーブル、送信光ケーブル、無線送信、ルーター、ファイアウォール、スイッチ、ゲートウェイコンピュータおよび/またはエッジサーバを含むエッジデバイスを含むことができる。各演算/処理デバイス内のネットワークアダプタカードまたはネットワークインターフェースは、ネットワークからコンピュータ読取可能プログラム指示を受信し、それぞれの演算/処理デバイス内でコンピュータ読取可能記憶媒体内の記憶のためにコンピュータ読取可能プログラム指示を転送する。
【0297】
本明細書に記載した発明配置のために動作を実行するためのコンピュータ読取可能プログラム指示は、アセンブラ指示、インストラクションセットアーキテクチャ(ISA)指示、機械指示、機械依存指示、マイクロコード、ファームウェア指示、またはオブジェクト指向型プログラミング言語および/またはプロシージャプログラミング言語を含む、1つまたは複数のプログラミング言語のいずれかの組合せで書き込まれたソースコードまたはオブジェクトコードのいずれかであってもよい。コンピュータ読取可能プログラム指示は状態設定データを含むことができる。コンピュータ読取可能プログラム指示は、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、独立型ソフトウェアパッケージとして、部分的にユーザのコンピュータ上および部分的にリモートコンピュータ上で、または全体的にリモートコンピュータまたはサーバ上で実行することができる。後者のシナリオでは、リモートコンピュータは、LANまたはWANを含むあらゆるタイプのネットワークを通してユーザのコンピュータに接続することができる、または外部コンピュータへの(例えば、インターネットサービスプロバイダを使用してインターネットを通じて)接続を行うことができる。いくつかの場合では、例えば、プログラマブル論理回路、FPGAまたはPLAを含む電子回路は、本明細書に記載した発明配置の態様を実施するために、電子回路をパーソナライズするためにコンピュータ読取可能プログラム指示の状態情報を利用することによって、コンピュータ読取可能プログラム指示を実行することができる。
【0298】
発明配置の特定の態様が、方法、装置(システム)、およびコンピュータプログラム製品のフローチャート図および/またはブロック図を参照して本明細書に記載されている。フローチャート図および/またはブロック図の各ブロック、およびフローチャート図および/またはブロック図内のブロックの組合せは、コンピュータ読取可能プログラム指示、例えばプログラムコードによって実施することができることを理解されたい。
【0299】
これらのコンピュータ読取可能プログラム指示は、汎用コンピュータ、専用コンピュータ、または機械を製造するための他のプログラマブルデータ処理装置のプロセッサに提供することができ、それによって、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行する指示は、フローチャートおよび/または1つまたは複数のブロック図ブロック内で特定される機能/動作を実施する手段を作り出す。これらのコンピュータ読取可能プログラム指示はまた、コンピュータ、プログラマブルデータ処理装置、および/または他のデバイスを特定の方法で機能するように指示することができるコンピュータ読取可能記憶媒体内に記憶させることができ、それによって、中に記憶された指示を有するコンピュータ読取可能記憶媒体は、フローチャートおよび/または1つまたは複数のブロック図ブロック内で特定される動作の態様を実施する指示を含む製造品を備えている。
【0300】
コンピュータ読取可能プログラム指示はまた、コンピュータ、他のプログラマブル装置または他のデバイス上で実施される一連の動作にコンピュータ実装プロセスを作り出させるように、コンピュータ、他のプログラマブルデータ処理装置、または他のデバイス上にロードすることができ、それによって、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する指示が、フローチャートおよび/または1つまたは複数のブロック図ブロック内で特定される機能/動作を実施する。
【0301】
図のフローチャートおよびブロック図は、発明配置の様々な態様による、システム、方法、およびコンピュータプログラム製品の可能な実装のアーキテクチャ、機能、および動作を示している。これに関して、フローチャートまたはブロック図内の各ブロックは、特定の動作を実施するための1つまたは複数の実行可能指示を含む、指示のモジュール、セグメント、または部分を示すことができる。
【0302】
いくつかの代替実施では、ブロックに記された動作は図に記された順番ではなく起こることがある。例えば、連続して示した2つのブロックは、実質的に同時に実行されることがある、または関連する機能によって、ブロックが時々逆の順序で実行されることがある。他の実施例では、ブロックは増加する数字順で一般的に行うことができ、更に他の実施例では、1つまたは複数のブロックは、直ぐに続かないその後のまたは他のブロックに記憶され利用される結果で、様々な順で行うことができる。また、ブロック図および/またはフローチャート図の各ブロック、およびブロック図および/またはフローチャート図のブロックの組合せは、特定の機能または動作を行う、または専用ハードウェアおよびコンピュータ指示の組合せを実行する専用ハードウェアベースシステムによって実施することができることに留意されたい。
【0303】
以下の特許請求の範囲で見られる全ての手段またはステッププラス機能要素の対応する構造、材料、動作、および同等物は、特に請求するように、他の請求する要素と組み合わせて機能を行うためのあらゆる構造、材料、または動作を含むことを意図している。
【0304】
方法は、デバイスのDPEアレイ内での実装のためのソフトウェア部分、およびデバイスのPL内での実装のためのハードウェア部分を特定するアプリケーションに対して、プロセッサを使用して、アプリケーション用論理アーキテクチャ、およびDPEアレイとプログラマブル論理の間のインターフェース回路ブロックのハードウェアに対する論理リソースのマッピングを特定する第1のインターフェースソリューションを生成することを含む。方法は、論理アーキテクチャおよび第1のインターフェースソリューションに基づいてハードウェア部分のブロック図を構築することと、プロセッサを使用して、ブロック図上で実装フローを実施することを含む。方法は、プロセッサを使用して、DPEアレイの1つまたは複数のDPE内での実装のためにアプリケーションのソフトウェア部分をコンパイルすることとを含む。
【0305】
別の態様では、ブロック図を構築することは、プログラマブル論理内での実装のために少なくとも1つのIPコアをブロック図に追加することを含む。
【0306】
別の態様では、実装フロー中に、ハードウェアコンパイラは、ソフトウェア部分をコンパイルするように設定されたDPEコンパイラと設計データを交換することによって、ブロック図を構築し、実装フローを実施する。
【0307】
別の態様では、ハードウェアコンパイラは、NoCコンパイラとさらなる設計データを交換する。ハードウェアコンパイラは、デバイスのPLにDPEアレイを結合するデバイスのNoCを通してルートを実装するように設定された第1のNoCソリューションを受信する。
【0308】
別の態様では、実装フローを実施することは、交換された設計データに基づいて実施される。
【0309】
別の態様では、ソフトウェア部分をコンパイルすることは、実装フローから生成されたPL内の実装のためのアプリケーションのハードウェア部分の実装に基づいて実施される。
【0310】
別の態様では、ブロック図を構築し、実装フローを実施するように設定されたハードウェアコンパイラに応じて、ブロック図の実装がハードウェア部分に対する設計測定基準を満たしていないことを判断し、ソフトウェア部分をコンパイルするように設定されたDPEコンパイラにインターフェース回路ブロックに対する制約を提供する。ハードウェアコンパイラは、DPEコンパイラから、制約に基づいてDPEコンパイラによって生成された第2のインターフェースソリューションを受信する。
【0311】
別の態様では、実装フローを実施することは、第2のインターフェースソリューションに基づいて実施される。
【0312】
別の態様では、ハードウェアコンパイラは、ブロック図の実装がNoCに対する第1のNoCソリューションを使用して設計測定基準を満たしていないことを判断することに応じて、NoCコンパイラにNoCに対する制約を提供する。ハードウェアコンパイラは、NoCコンパイラから、NoCに対する制約に基づいてNoCコンパイラによって生成された第2のNoCソリューションを受信する。
【0313】
システムは、動作を開始するように設定されたプロセッサを備えている。動作は、デバイスのDPEアレイ内での実装のためのソフトウェア部分、およびデバイスのPL内での実装のためのハードウェア部分を特定するアプリケーションに対して、アプリケーション用の論理アーキテクチャ、およびDPEアレイとPLの間のインターフェース回路ブロックのハードウェアへの論理リソースのマッピングを特定する第1のインターフェースソリューションを生成することを含む。動作は、論理アーキテクチャおよび第1のインターフェースソリューションに基づいてハードウェア部分のブロック図を構築することと、ブロック図上で実装フローを実施することと、DPEアレイの1つまたは複数のDPE内での実装のためにアプリケーションのソフトウェア部分をコンパイルすることとを含む。
【0314】
別の態様では、ブロック図を構築することは、PL内での実装のために少なくとも1つのIPコアをブロック図に追加することを含む。
【0315】
別の態様では、動作は、実装フロー中、ブロック図を構築し、ソフトウェア部分をコンパイルするように設定されたDPEコンパイラと設計データを交換することによって実装フローを実施するハードウェアコンパイラを実行することを含む。
【0316】
別の態様では、動作は、ハードウェアコンパイラがNoCコンパイラと別の設計データを交換すること、およびハードウェアコンパイラがデバイスのPLにDPEアレイを結合するデバイスのNoCを通してルートを実装するように設定された第1のNoCソリューションを受信することを含む。
【0317】
別の態様では、実装フローを実施することは、交換された設計データに基づいて実施される。
【0318】
別の態様では、ソフトウェア部分をコンパイルすることは、実装フローから生成されたPL内での実装のためのアプリケーションのハードウェア部分に対するハードウェア設計に基づいて実施される。
【0319】
別の態様では、動作は、ブロック図を構築し、実装フローを実施するように設定されたハードウェアコンパイラに応じて、ブロック図の実装がハードウェア部分に対する設計制約を満たしていないことを判断し、ソフトウェア部分をコンパイルするように設定されたDPEコンパイラにインターフェース回路ブロックに対する制約を提供することを含む。ハードウェアコンパイラは、DPEコンパイラから、制約に基づいてDPEコンパイラによって生成された第2のインターフェースソリューションを受信する。
【0320】
別の態様では、実装フローを実施することは、第2のインターフェースソリューションに基づいて実施される。
【0321】
別の態様では、ハードウェアコンパイラは、ブロック図の実装がNoCに対する第1のNoCソリューションを使用して設計測定基準を満たしていないことを判断することに応じて、NoCコンパイラにNoCに対する制約を提供する。ハードウェアコンパイラは、NoCコンパイラから、NoCに対する制約に基づいてNoCコンパイラによって生成された第2のNoCソリューションを受信する。
【0322】
方法は、デバイスのDPEアレイ内での実装のためのソフトウェア部分、およびデバイスのPL内での実装のためのハードウェア部分を有するアプリケーションに対して、ハードウェアコンパイラを実行するプロセッサを使用して、PLにDPEアレイを結合するインターフェースブロックのハードウェアにソフトウェア部分によって使用される論理リソースをマッピングするインターフェースブロックソリューションに基づいて、ハードウェア部分上で実装フローを実施することを含む。方法は、実装フロー中に設計測定基準を満たしていないことに応じて、ハードウェアコンパイラを実行するプロセッサを使用して、DPEコンパイラにインターフェースブロック制約を提供することを含む。方法はまた、インターフェースブロック制約を受信することに応じて、DPEコンパイラを実行するプロセッサを使用して、更新されたインターフェースブロックソリューションを生成することと、ハードウェアコンパイラにDPEコンパイラから更新されたインターフェースブロックソリューションを提供することとを含む。
【0323】
別の態様では、インターフェースブロック制約は、インターフェースブロックの物理的リソースにソフトウェア部分によって使用される論理リソースをマッピングする。
【0324】
別の態様では、ハードウェアコンパイラは、更新されたインターフェースブロックソリューションを使用して実装フローを続ける。
【0325】
別の態様では、ハードウェアコンパイラは、ハードウェア部分に対する設計制約を満たしていないことに応じて、DPEコンパイラにインターフェースブロック制約を反復して提供する。
【0326】
別の態様では、インターフェースブロック制約は、ハード制約およびソフト制約を含む。この場合、方法は、DPEコンパイラが、更新されたインターフェースブロックソリューションを生成するために、ハード制約およびソフト制約の両方を使用して、アプリケーションのソフトウェア部分をルーティングすることを含む。
【0327】
別の態様では、方法は、ハード制約およびソフト制約の両方を使用して、更新されたインターフェースブロックソリューションを生成できないことに応じて、更新されたインターフェースブロックソリューションを生成するためにハード制約のみを使用して、アプリケーションのソフトウェア部分をルーティングすることを含む。
【0328】
別の態様では、方法は、ハード制約のみを使用して更新されたマッピングを生成できないことに応じて、更新されたインターフェースブロックソリューションを生成するためにハード制約のみを使用して、ハード制約およびソフト制約の両方を使用してソフトウェア部分をマッピングし、ソフトウェア部分をルーティングすることを含む。
【0329】
インターフェースブロックソリューションおよび更新されたインターフェースブロックソリューションがそれぞれスコアを有する別の態様では、方法は、スコアを比較することと、インターフェースブロックソリューションに対するスコアが更新されたインターフェースブロックソリューションに対するスコアを超えたことを判断することに応じて、別の更新されたインターフェースブロックソリューションを得るために、インターフェースブロック制約を緩和し、DPEコンパイラに緩和されたインターフェースブロック制約を提出することとを含む。
【0330】
別の態様では、インターフェースブロックソリューションおよび更新されたインターフェースブロックソリューションがそれぞれ、スコアを有する。方法は、スコアを比較することと、更新されたインターフェースブロックソリューションに対するスコアがインターフェースブロックソリューションに対するスコアを超えたことを判断することに応じて、実装フローを実施するために更新されたインターフェースブロックソリューションを使用することとを含む。
【0331】
システムは、動作を開始するように設定されたプロセッサを備えている。動作は、デバイスのDPEアレイ内での実装のためのソフトウェア部分、およびデバイスのPL内での実装のためのハードウェア部分を有するアプリケーションに対して、ハードウェアコンパイラを使用して、PLにDPEアレイを結合するインターフェースブロックのハードウェアにソフトウェア部分によって使用される論理リソースをマッピングするインターフェースブロックソリューションに基づいて、ハードウェア部分上で実装フローを実施することを含む。動作は、実装フロー中に設計測定基準を満たしていないことに応じて、ハードウェアコンパイラを使用して、DPEコンパイラにインターフェースブロック制約を提供することを含む。動作は更に、インターフェースブロック制約を受信することに応じて、DPEコンパイラを使用して、更新されたインターフェースブロックソリューションを生成し、ハードウェアコンパイラにDPEコンパイラから更新されたインターフェースブロックソリューションを提供することを含む。
【0332】
別の態様では、インターフェースブロック制約は、インターフェースブロックの物理的リソースにソフトウェア部分によって使用される論理リソースをマッピングする。
【0333】
別の態様では、ハードウェアコンパイラは、更新されたインターフェースブロックソリューションを使用して、実装フローを続ける。
【0334】
別の態様では、ハードウェアコンパイラは、ハードウェア部分に対する設計制約を満たしていないことに応じて、DPEコンパイラにインターフェースブロック制約を反復して提供する。
【0335】
別の態様では、インターフェースブロック制約は、ハード制約およびソフト制約を含む。この場合、プロセッサが、更新されたインターフェースブロックソリューションを生成するために、ハード制約およびソフト制約の両方を使用して、アプリケーションのソフトウェア部分をルーティングするDPEコンパイラを含む動作を開始するように設定されている。
【0336】
別の態様では、動作は、ハード制約およびソフト制約の両方を使用して、更新されたマッピングを生成できないことに応じて、更新されたインターフェースブロックソリューションを生成するためにハード制約のみを使用して、アプリケーションのソフトウェア部分をルーティングすることを含む。
【0337】
別の態様では、動作は、ハード制約のみを使用して更新されたマッピングを生成できないことに応じて、更新されたインターフェースブロックソリューションを生成するためにハード制約のみを使用して、ハード制約およびソフト制約の両方を使用してソフトウェア部分をマッピングし、ソフトウェア部分をルーティングすることを含む。
【0338】
別の態様では、インターフェースブロックソリューションおよび更新されたインターフェースブロックソリューションがそれぞれスコアを有する。プロセッサは、スコアを比較することと、インターフェースブロックソリューションに対するスコアが更新されたインターフェースブロックソリューションに対するスコアを超えたことを判断することに応じて、別の更新されたインターフェースブロックソリューションを得るために、インターフェースブロック制約を緩和し、DPEコンパイラに緩和されたインターフェースブロック制約を提出することとを含む動作を開始するように設定されている。
【0339】
別の態様では、インターフェースブロックソリューションおよび更新されたインターフェースブロックソリューションがそれぞれ、スコアを有する。プロセッサは、スコアを比較することと、更新されたインターフェースブロックソリューションに対するスコアがインターフェースブロックソリューションに対するスコアを超えたことを判断することに応じて、実装フローを実施するために更新されたインターフェースブロックソリューションを使用することとを含む動作を開始するように設定されている。
【0340】
方法は、デバイスのDPEアレイ内での実装のためのソフトウェア部分、およびデバイスのPL内での実装のためHLSカーネルを有するハードウェア部分を特定するアプリケーションに対して、プロセッサを使用して、DPEアレイおよびPLを結合するインターフェースブロックのハードウェアリソースにソフトウェア部分によって使用される論理リソースをマッピングする第1のインターフェースソリューションを生成することを含む。方法は、プロセッサを使用して、DPEアレイ内に実装されるソフトウェア部分のHLSカーネルおよびノードの間のコネクティビティを特定する接続グラフを生成することと、プロセッサを使用して、接続グラフおよびHLSカーネルに基づいてブロック図を生成することとを含み、ブロック図は合成可能である。方法は更に、プロセッサを使用して、第1のインターフェースソリューションに基づいてブロック図上で実装フローを実施することと、プロセッサを使用して、DPEアレイの1つまたは複数のDPE内の実装のためのアプリケーションのソフトウェア部分をコンパイルすることとを含む。
【0341】
別の態様では、ブロック図を生成することは、合成可能なバージョンのHLSカーネルを生成するためにHLSカーネル上でHLSを実施することと、合成可能なバージョンのHLSカーネルを使用してブロック図を構築することとを含む。
【0342】
別の態様では、合成可能なバージョンのHLSカーネルは、RTLブロックとして特定される。
【0343】
別の態様では、ブロック図を生成することは、アプリケーションが実装されるSoCのアーキテクチャの記述に基づいて実施される。
【0344】
別の態様では、ブロック図を生成することは、ブロック図をベースプラットフォームに接続することを含む。
【0345】
別の態様では、実装フローを実施することは、PL内での実装のためにブロック図を合成することと、第1のインターフェースソリューションに基づいて合成されたブロック図を配置およびルーティングすることとを含む。
【0346】
別の態様では、方法は、実装フロー中に、ブロック図を構築し、ソフトウェア部分をコンパイルするように設定されたDPEコンパイラと設計データを交換することによって実装フローを実施するハードウェアコンパイラを実行することを含む。
【0347】
別の態様では、方法は、ハードウェアコンパイラがNoCコンパイラと別の設計データを交換することと、ハードウェアコンパイラがデバイスのPLにDPEアレイを結合するデバイスのNoCを通してルートを実装するように設定された第1のNOCソリューションを受信することとを含む。
【0348】
別の態様では、方法は、ブロック図を構築し、実装フローを実施するように設定されたハードウェアコンパイラに応じて、ブロック図の実装がハードウェア部分に対する設計測定基準を満たしていないことを判断することと、ソフトウェア部分をコンパイルするように設定されたDPEコンパイラにインターフェース回路ブロックに対する制約を提供することとを含む。方法はまた、ハードウェアコンパイラが、DPEコンパイラから、制約に基づいてDPEコンパイラによって生成された第2のインターフェースソリューションを受信することを含む。
【0349】
別の態様では、実装フローを実施することは、第2のインターフェースソリューションに基づいて実施される。
【0350】
システムは、動作を開始するように設定されたプロセッサを備えている。動作は、デバイスのDPEアレイ内での実装のためのソフトウェア部分、およびデバイスのPL内での実装のためのHLSカーネルを有するハードウェア部分を特定するアプリケーションに対して、DPEアレイとPLを結合するインターフェースブロックのハードウェアリソースにソフトウェア部分によって使用される論理リソースをマッピングする第1のインターフェースソリューションを生成することを含む。動作は、DPEアレイ内に実装されるソフトウェア部分のHLSカーネルおよびノードの間のコネクティビティを特定する接続グラフを生成することと、接続グラフおよびHLSカーネルに基づいてブロック図を生成することとを含み、ブロック図は合成可能である。動作は更に、第1のインターフェースソリューションに基づいてブロック図上で実装フローを実施することと、DPEアレイの1つまたは複数のDPE内の実装のためのアプリケーションのソフトウェア部分をコンパイルすることとを含む。
【0351】
別の態様では、ブロック図を生成することは、合成可能なバージョンのHLSカーネルを生成するためにHLSカーネル上でHLSを実施することと、合成可能なバージョンのHLSカーネルを使用してブロック図を構築することとを含む。
【0352】
別の態様では、合成可能なバージョンのHLSカーネルは、RTLブロックとして特定される。
【0353】
別の態様では、ブロック図を生成することは、アプリケーションが実装されるSoCのアーキテクチャの記述に基づいて実施される。
【0354】
別の態様では、ブロック図を生成することは、ブロック図をベースプラットフォームに接続することを含む。
【0355】
別の態様では、実装フローを実施することは、PL内での実装のためにブロック図を合成することと、第1のインターフェースソリューションに基づいて合成されたブロック図を配置およびルーティングすることとを含む。
【0356】
別の態様では、動作は、実装フロー中に、ブロック図を構築し、ソフトウェア部分をコンパイルするように設定されたDPEコンパイラと設計データを交換することによって実装フローを実施するハードウェアコンパイラを実行することを含む。
【0357】
別の態様では、動作は、ハードウェアコンパイラがNoCコンパイラと別の設計データを交換することと、ハードウェアコンパイラがデバイスのPLにDPEアレイを結合するデバイスのNoCを通してルートを実装するように設定された第1のNOCソリューションを受信することとを含む。
【0358】
別の態様では、動作は、ブロック図を構築し、実装フローを実施するように設定されたハードウェアコンパイラに応じて、ブロック図の実装がハードウェア部分に対する設計測定基準を満たしていないことを判断することと、ソフトウェア部分をコンパイルするように設定されたDPEコンパイラにインターフェース回路ブロックに対する制約を提供することとを含む。方法はまた、ハードウェアコンパイラが、DPEコンパイラから、制約に基づいてDPEコンパイラによって生成された第2のインターフェースソリューションを受信することを含む。
【0359】
別の態様では、実装フローを実施することは、第2のインターフェースソリューションに基づいて実施される。
【0360】
その上に記憶されたプログラムコードを有するコンピュータ読取可能記憶媒体を備えた、1つまたは複数のプログラム製品が本明細書に記載されている。プログラムコードは、本開示内に記載された様々な動作を開始するようにコンピュータハードウェアによって実行可能である。
【0361】
本明細書で提供された発明配置の記載は、例示的目的であり、開示された形態および実施例に徹底または限定することを意図したものではない。本明細書で使用される用語は、市場で見られる技術上の発明配置の原理、実用的な応用または技術的改良を説明する、および/または当業者が本明細書で開示された発明配置を理解することを可能にするために選択された。変更形態および変形形態は、記載された発明配置の範囲および精神を逸脱することなく、当業者には自明である。したがって、このような特性および実施の範囲を示すように、前述の開示よりも以下の特許請求の範囲に言及するものとする。
【0362】
実施例1は、アプリケーションから誘導された論理アーキテクチャの例示的スキームを示している。
【0363】
実施例2は、DPEアレイ202内で実装されるアプリケーションに対するSoCインターフェースブロックソリューションの例示的スキームを示している。
【0364】
実施例3は、NoC208内で実装されるアプリケーションに対するNoCソリューションの例示的スキームを示している。
【0365】
実施例4は、SoCインターフェースブロック制約および/またはNoC制約を特定するための例示的スキームを示している。
【0366】
実施例5は、NoCトラフィックを特定するための例示的スキームを示している。