IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ザイリンクス インコーポレイテッドの特許一覧

特許7465895ヘテロジニアスプログラマブルデバイスのための高位合成を有するハードウェアソフトウェア設計フロー
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-03
(45)【発行日】2024-04-11
(54)【発明の名称】ヘテロジニアスプログラマブルデバイスのための高位合成を有するハードウェアソフトウェア設計フロー
(51)【国際特許分類】
   G06F 30/34 20200101AFI20240404BHJP
   G06F 30/327 20200101ALI20240404BHJP
   G06F 115/02 20200101ALN20240404BHJP
   G06F 117/08 20200101ALN20240404BHJP
【FI】
G06F30/34
G06F30/327
G06F115:02
G06F117:08
【請求項の数】 15
(21)【出願番号】P 2021569503
(86)(22)【出願日】2020-05-14
(65)【公表番号】
(43)【公表日】2022-07-28
(86)【国際出願番号】 US2020032977
(87)【国際公開番号】W WO2020236529
(87)【国際公開日】2020-11-26
【審査請求日】2023-03-14
(31)【優先権主張番号】16/421,444
(32)【優先日】2019-05-23
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】サストリー,アケッラ
(72)【発明者】
【氏名】カタイル,ビノッド・ケイ
(72)【発明者】
【氏名】ファン,エル・ジェイムズ
(72)【発明者】
【氏名】グプタ,シャイル・アディティア
(72)【発明者】
【氏名】フンシギダ,ビドゥモウリ
(72)【発明者】
【氏名】レレ,シッダールタ
【審査官】堀井 啓明
(56)【参考文献】
【文献】米国特許第9218443(US,B1)
【文献】米国特許第9864828(US,B1)
【文献】米国特許第9805152(US,B1)
【文献】特表2018-507449(JP,A)
【文献】特開2003-114914(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 30/00-30/398
G06F 115/02
G06F 117/08
(57)【特許請求の範囲】
【請求項1】
デバイスのデータ処理エンジン(DPE)アレイ内に実装するためのソフトウェア部分と、前記デバイスのプログラマブル論理内に実装するための高位合成(HLS)カーネルを有するハードウェア部分とを指定するアプリケーションのために、プロセッサを使用して、前記ソフトウェア部分によって使用される論理リソースを前記DPEアレイと前記プログラマブル論理とを結合するインターフェース回路ブロックのハードウェアリソースにマッピングする第1のインターフェース解を生成するステップと、
前記プロセッサを使用して前記HLSカーネルと前記DPEアレイに実装される前記ソフトウェア部分のノードとの間の接続性を指定する接続グラフを生成するステップと、
前記プロセッサを使用して、前記接続グラフ及び前記HLSカーネルに基づいてブロック図を生成するステップであって、前記ブロック図が合成可能である、ステップと、
前記プロセッサを使用して、前記第1のインターフェース解に基づいて前記ブロック図の実装フローを実行するステップと、
前記プロセッサを使用して、前記DPEアレイの1つ以上のDPEに実装するために前記アプリケーションの前記ソフトウェア部分をコンパイルするステップと
を含む方法。
【請求項2】
前記ブロック図を生成する前記ステップが、
前記HLSカーネルの合成可能バージョンを生成するために、前記HLSカーネルに対してHLSを実行することと、
前記HLSカーネルの合成可能バージョンを使用して前記ブロック図を構築することと
を含む、請求項1に記載の方法。
【請求項3】
前記ブロック図を生成する前記ステップが、前記アプリケーションが実装されるシステムオンチップのアーキテクチャの記述に基づいて実行される、請求項1に記載の方法。
【請求項4】
前記ブロック図を生成する前記ステップが、前記ブロック図をベースプラットフォームと接続することをさらに含む、請求項3に記載の方法。
【請求項5】
前記実装フロー中に、前記ソフトウェア部分をコンパイルするように構成されたDPEコンパイラと設計データを交換することによって、前記ブロック図を構築し、前記実装フローを実行するハードウェアコンパイラを実行するステップ
をさらに含む、請求項1に記載の方法。
【請求項6】
前記ハードウェアコンパイラが、ネットワークオンチップ(NoC)コンパイラとさらなる設計データを交換するステップと、
前記ハードウェアコンパイラが、前記DPEアレイを前記デバイスの前記プログラマブル論理に結合する前記デバイスのNoCを通るルートを実装するように構成された第1のNoC解を受信するステップと
をさらに含む、請求項5に記載の方法。
【請求項7】
前記ブロック図を構築し、前記実装フローを実行して、前記ブロック図の実装が前記ハードウェア部分の設計メトリックを満たしていないと判定するように構成されたハードウェアコンパイラに応答して、前記ソフトウェア部分をコンパイルするように構成されたDPEコンパイラに前記インターフェース回路ブロックの制約を提供するステップと、
前記ハードウェアコンパイラが、前記制約に基づいて前記DPEコンパイラによって生成された第2のインターフェース解を前記DPEコンパイラから受信するステップと
をさらに含む、請求項1に記載の方法。
【請求項8】
前記実装フローを実行する前記ステップが、前記第2のインターフェース解に基づいて実行される、請求項7に記載の方法。
【請求項9】
プロセッサを含むシステムであって、前記プロセッサは、デバイスのデータ処理エンジン(DPE)アレイ内に実装するためのソフトウェア部分と、前記デバイスのプログラマブル論理内に実装するための高位合成(HLS)カーネルを有するハードウェア部分とを指定するアプリケーションのために、前記ソフトウェア部分によって使用される論理リソースを前記DPEアレイと前記プログラマブル論理とを結合するインターフェース回路ブロックのハードウェアリソースにマッピングする第1のインターフェース解を生成するステップと、
前記HLSカーネルと前記DPEアレイに実装される前記ソフトウェア部分のノードとの間の接続性を指定する接続グラフを生成するステップと、
前記接続グラフ及び前記HLSカーネルに基づいてブロック図を生成するステップであって、前記ブロック図が合成可能である、ステップと、
前記第1のインターフェース解に基づいて前記ブロック図の実装フローを実行するステップと、
前記DPEアレイの1つ以上のDPEに実装するために前記アプリケーションの前記ソフトウェア部分をコンパイルするステップと
を含む動作を開始するように構成される、システム。
【請求項10】
前記ブロック図を生成する前記ステップが、
前記HLSカーネルの合成可能バージョンを生成するために、前記HLSカーネルに対してHLSを実行することと、
前記HLSカーネルの合成可能バージョンを使用して前記ブロック図を構築することと
を含む、請求項9に記載のシステム。
【請求項11】
前記ブロック図を生成する前記ステップが、前記アプリケーションが実装されるシステムオンチップのアーキテクチャの記述に基づいて実行される、請求項9に記載のシステム。
【請求項12】
前記ブロック図を生成する前記ステップが、前記ブロック図をベースプラットフォームと接続することをさらに含む、請求項11に記載のシステム。
【請求項13】
前記プロセッサが、
前記実装フロー中に、前記ソフトウェア部分をコンパイルするように構成されたDPEコンパイラと設計データを交換することによって、前記ブロック図を構築し、前記実装フローを実行するハードウェアコンパイラを実行するステップ
をさらに含む動作を開始するように構成されている、請求項9に記載のシステム。
【請求項14】
前記プロセッサが、
前記ハードウェアコンパイラが、ネットワークオンチップ(NoC)コンパイラとさらなる設計データを交換するステップと、
前記ハードウェアコンパイラが、前記DPEアレイを前記デバイスの前記プログラマブル論理に結合する前記デバイスのNoCを通るルートを実装するように構成された第1のNoC解を受信するステップと
をさらに含む動作を開始するように構成されている、請求項13に記載のシステム。
【請求項15】
前記プロセッサが、
前記ブロック図を構築し、前記実装フローを実行して、前記ブロック図の実装が前記ハードウェア部分の設計メトリックを満たしていないと判定するように構成されたハードウェアコンパイラに応答して、前記ソフトウェア部分をコンパイルするように構成されたDPEコンパイラに前記インターフェース回路ブロックの制約を提供するステップと、
前記ハードウェアコンパイラが、前記制約に基づいて前記DPEコンパイラによって生成された第2のインターフェース解を前記DPEコンパイラから受信するステップと
をさらに含む動作を開始するように構成されている、請求項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のインターフェース解を生成するステップを含むことができる。方法は、プロセッサを使用して、HLSカーネルとDPEアレイ内に実装されるソフトウェア部分のノードとの間の接続性を指定する接続グラフを生成するステップと、プロセッサを使用して、接続グラフ及びHLSカーネルに基づいてブロック図を生成するステップとを含むことができ、ブロック図は合成可能である。方法は、プロセッサを使用して、第1のインターフェース解に基づいてブロック図の実装フローを実行するステップと、プロセッサを使用して、DPEアレイの1つ以上のDPEに実装するためにアプリケーションのソフトウェア部分をコンパイルするステップとをさらに含むことができる。
【0013】
別の態様では、システムは、動作を開始するように構成されたプロセッサを含む。動作は、デバイスのDPEアレイ内に実装するためのソフトウェア部分と、デバイスのPL内に実装するためのHLSカーネルを有するハードウェア部分とを指定するアプリケーションのために、ソフトウェア部分によって使用される論理リソースをDPEアレイとPLとを結合するインターフェースブロックのハードウェアリソースにマッピングする第1のインターフェース解を生成することを含むことができる。動作は、HLSカーネルとDPEアレイ内に実装されるソフトウェア部分のノードと間の接続性を指定する接続グラフを生成することと、接続グラフ及びHLSカーネルに基づいてブロック図を生成することとを含むことができ、ブロック図は合成可能である。動作は、第1のインターフェース解に基づいてブロック図の実装フローを実行することと、DPEアレイの1つ以上のDPEで実装するためにアプリケーションのソフトウェア部分をコンパイルすることとをさらに含むことができる。
【0014】
別の態様では、コンピュータプログラム製品は、格納されたプログラムコードを有するコンピュータ読取可能な記憶媒体を含む。プログラムコードは、動作を開始するためにコンピュータハードウェアによって実行可能である。動作は、デバイスのDPEアレイ内に実装するためのソフトウェア部分と、デバイスのPL内に実装するためのHLSカーネルを有するハードウェア部分とを指定するアプリケーションのために、ソフトウェア部分によって使用される論理リソースをDPEアレイとPLとを結合するインターフェースブロックのハードウェアリソースにマッピングする第1のインターフェース解を生成することを含むことができる。動作は、HLSカーネルとDPEアレイ内に実装されるソフトウェア部分のノードと間の接続性を指定する接続グラフを生成することと、接続グラフ及びHLSカーネルに基づいてブロック図を生成することとを含むことができ、ブロック図は合成可能である。動作は、第1のインターフェース解に基づいてブロック図の実装フローを実行することと、DPEアレイの1つ以上のDPEで実装するためにアプリケーションのソフトウェア部分をコンパイルすることとをさらに含むことができる。
【0015】
この概要セクションは、特定の概念を紹介するためにのみ提供され、特許請求される主題の重要な又は本質的な特徴を特定するためのものではない。本発明の構成の他の特徴は、添付の図面及び以下の詳細な説明から明らかになるであろう。
【0016】
図面の簡単な説明
本発明の構成は、例として添付の図面に示されている。しかしながら、図面は、示された特定の実施態様のみに本発明の構成を限定するものと解釈されるべきではない。以下の詳細な説明を検討し、図面を参照すると、様々な態様及び利点が明らかになるであろう。
【図面の簡単な説明】
【0017】
図1】本明細書に記載の1つ以上の実施形態で使用するためのコンピューティングノードの一例を示す。
図2】集積回路(IC)のシステムオンチップ(SoC)タイプのための例示的なアーキテクチャを示す。
図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アレイに実装され、それによって実行されるソフトウェア部分とを含む。デバイスはまた、さらなるプログラムコード、例えば、アプリケーションの別のソフトウェア部分を実行することができるハードワイヤードプロセッサシステム、すなわち「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におけるアプリケーションの結果として得られる実装(例えば、タイミング、面積、電力などの設計メトリックの終結)の実現可能性及び品質を達成し、これは、アプリケーションの各部分が完全に独立してマッピングされ、次いで縫合又は結合される他の従来技術を使用して得られる結果よりも優れていることが多い。例示的な設計フローは、少なくとも部分的に、異なるサブシステム間の共有インターフェース制約に依存する、本明細書に記載の緩やかに結合されたジョイント収束技術によって、これらの結果を達成する。
【0026】
本発明の構成のさらなる態様は、図面を参照して以下により詳細に説明される。説明を簡単かつ明確にするために、図に示す要素は必ずしも縮尺通りに描かれていない。例えば、いくつかの要素の寸法は、明確にするために他の要素に対して誇張されている場合がある。さらに、適切であると考えられる場合、対応する、類似の、又は同様の特徴を示すために、図面間で参照番号が繰り返される。
【0027】
図1は、コンピューティングノード100の一例を示す。コンピューティングノード100は、ホストデータ処理システム(ホストシステム)102及びハードウェアアクセラレーションボード104を含むことができる。コンピューティングノード100は、ハードウェアアクセラレーションボードと共に使用することができるコンピューティング環境の一実施例にすぎない。これに関して、コンピューティングノード100は、スタンドアロン容量で、ベアメタルサーバとして、コンピューティングクラスタの一部として、又はクラウドコンピューティング環境内のクラウドコンピューティングノードとして使用することができる。図1は、本明細書に記載の例の使用又は機能の範囲に関する制限を示唆することを意図していない。コンピューティングノード100は、SoC200内のアプリケーションの実装に関連して本開示内で説明される様々な動作を実行することができるシステム及び/又はコンピュータハードウェアの一例である。例えば、コンピューティングノード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】
プログラムモジュール120のセット(少なくとも1つ)を有するプログラム/ユーティリティ118は、限定ではなく例として、メモリ108、並びにオペレーティングシステム、1つ以上のアプリケーションプログラム、他のプログラムモジュール、及びプログラムデータに格納することができる。プログラムモジュール120は、一般に、本明細書に記載の本発明の実施形態の機能及び/又は方法論を実行する。例えば、プログラムモジュール120は、ハードウェアアクセラレーションボード104及び/又はSoC200と通信するための、1つ以上のアプリケーション及びドライバ又はデーモンを含むことができる。
【0034】
プログラム/ユーティリティ118は、プロセッサ106によって実行可能である。プログラム/ユーティリティ118並びにプロセッサ106によって使用、生成、及び/又は動作される任意のデータ項目は、プロセッサ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は、SoC200を含む。SoC200は、ヘテロジニアスプログラマブルICであり、したがって、複数のヘテロジニアスサブシステムを有する。SoC200の例示的なアーキテクチャは、図2に関連してより詳細に説明される。ハードウェアアクセラレーションボード104はまた、SoC200に結合された揮発性メモリ134と、同じくSoC200に結合された不揮発性メモリ136とを含む。揮発性メモリ134は、RAMとして実装されてもよく、SoC200の「ローカルメモリ」と見なされ、一方、ホストシステム102内にあるメモリ108は、SoC200に対してローカルではなく、むしろホストシステム102に対してローカルであると見なされる。いくつかの実施態様では、揮発性メモリ134は、複数ギガバイトのRAM、例えば64GBのRAMを含むことができる。不揮発性メモリ136の一例は、フラッシュメモリである。
【0038】
図1の例では、コンピューティングノード100は、SoC200用のアプリケーション上で動作し、SoC200内にアプリケーションを実装することができる。アプリケーションは、SoC200において利用可能な異なるヘテロジニアスサブシステムに対応するハードウェア部分及びソフトウェア部分を含むことができる。一般に、コンピューティングノード100は、SoC200で実行するためにアプリケーションをSoC200上にマッピングすることができる。
【0039】
図2は、SoC200の例示的なアーキテクチャを示す。SoC200は、プログラマブルIC及び統合プログラマブルデバイスプラットフォームの一例である。図2の例では、図示されたSoC200の様々な異なるサブシステム又は領域は、単一の統合パッケージ内に設けられた単一のダイ上に実装されてもよい。他の例では、異なるサブシステムは、単一の統合パッケージとして提供される複数の相互接続されたダイ上に実装されてもよい。
【0040】
この例では、SoC200は、異なる機能を有する回路を有する複数の領域を含む。この例では、SoC200は、任意選択的に、データ処理エンジン(DPE)アレイ202を含む。SoC200は、プログラマブル論理(PL)領域214(以下、PL領域又はPL)、処理システム(PS)212、ネットワークオンチップ(NoC)208、及び1つ以上のハードワイヤード回路ブロック210を含む。DPEアレイ202は、SoC200の他の領域へのインターフェースを有する複数の相互接続されたハードワイヤード及びプログラマブルプロセッサとして実装される。
【0041】
PL214は、指定された機能を実行するようにプログラムされ得る回路である。一例として、PL214は、フィールドプログラマブルゲートアレイ型の回路として実装されてもよい。PL214は、プログラマブル回路ブロックのアレイを含むことができる。PL214内のプログラマブル回路ブロックの例には、構成可能論理ブロック(CLB)、専用ランダムアクセスメモリブロック(BRAM及び/又はUltraRAM又はURAM)、デジタル信号処理ブロック(DSP)、クロックマネージャ、及び/又は遅延ロックループ(DLL)が含まれるが、これらに限定されない。
【0042】
PL214内の各プログラマブル回路ブロックは、通常、プログラマブル相互接続回路とプログラマブル論理回路の両方を含む。プログラマブル相互接続回路は、通常、プログラマブル相互接続点(PIP)によって相互接続された様々な長さの多数の相互接続ワイヤを含む。通常、相互接続ワイヤは、ビットごとに(例えば、各ワイヤが1ビットの情報を伝達する場合)接続を提供するように構成される(例えば、ワイヤごとに)。プログラマブル論理回路は、例えば、ルックアップテーブル、レジスタ、算術論理などを含み得るプログラマブル要素を使用してユーザ設計の論理を実装する。プログラマブル相互接続及びプログラマブル論理回路は、プログラマブル要素がどのように構成され動作するかを定義する内部構成メモリセルに構成データをロードすることによってプログラムされ得る。
【0043】
PS212は、SoC200の一部として製造されるハードワイヤード回路として実装される。PS212は、各々がプログラムコードを実行することができる様々な異なるプロセッサタイプのいずれかとして実装されるか、又はそれらを含むことができる。例えば、PS212は、個別のプロセッサ、例えば、プログラムコードを実行することができる単一のコアとして実装されてもよい。別の例では、PS212は、マルチコアプロセッサとして実現され得る。さらに別の例では、PS212は、1つ以上のコア、モジュール、コプロセッサ、インターフェース、及び/又はその他のリソースを含み得る。PS212は、様々な異なるタイプのアーキテクチャのいずれかを用いて実装され得る。PS212を実装するために使用され得る例示的なアーキテクチャは、ARMプロセッサアーキテクチャ、x86プロセッサアーキテクチャ、GPUアーキテクチャ、モバイルプロセッサアーキテクチャ、DSPアーキテクチャ、コンピュータ可読命令若しくはプログラムコードを実行することができる他の適切なアーキテクチャ、又は異なるプロセッサ及び/又はプロセッサアーキテクチャの組合せを含み得るが、これらに限定されない。
【0044】
NoC208は、SoC200内のエンドポイント回路間でデータを共有するための相互接続ネットワークを含む。エンドポイント回路は、DPEアレイ202、PL領域214、PS212、及び/又はハードワイヤード回路ブロック210に配置することができる。NoC208は、専用スイッチングによる高速データ経路を含むことができる。一例では、NoC208は、水平経路、垂直経路、又は水平経路と垂直経路の両方を含む。図1に示す領域の配置及び数は単なる例である。NoC208は、選択されたコンポーネント及び/又はサブシステムを接続するためにSoC200内で利用可能な共通インフラストラクチャの一例である。
【0045】
NoC208は、PL214、PS212、及びハードワイヤード回路ブロック210のうちの選択されたものへの接続を提供する。NoC208はプログラム可能である。他のプログラマブル回路と共に使用されるプログラマブルNoCの場合、SoC200内で実施するためにユーザ回路設計が作成されるまで、NoC208を通ってルーティングされるべきネット及び/又はデータ転送は未知である。NoC208は、スイッチ及びインターフェースなどのNoC208内の要素がどのように構成され、スイッチ間及びNoCインターフェース間でデータを渡すように動作するかを定義する内部構成レジスタに構成データをロードすることによってプログラムすることができる。
【0046】
NoC208は、SoC200の一部として製造され、物理的に修正可能ではないが、ユーザ回路設計の異なるマスタ回路と異なるスレーブ回路との間の接続を確立するようにプログラムすることができる。例えば、NoC208は、ユーザ指定のマスタ回路とスレーブ回路とを接続するパケット交換網を確立することができる複数のプログラマブルスイッチを含むことができる。これに関して、NoC208は、異なる回路設計に適応することができ、各異なる回路設計は、NoC208によって結合され得るSoC200内の異なる位置に実装されたマスタ回路及びスレーブ回路の異なる組合せを有する。NoC208は、ユーザ回路設計のマスタ回路及びスレーブ回路の間で、例えばアプリケーションデータ及び/又は構成データなどのデータをルーティングするようにプログラムすることができる。例えば、NoC208は、PL214内に実装された異なるユーザ指定回路をPS212及び/又はDPEアレイ202と、異なるハードワイヤード回路ブロックと、及び/又はSoC200の外部の異なる回路及び/又はシステムと結合するようにプログラムすることができる。
【0047】
ハードワイヤード回路ブロック210は、入力/出力(I/O)ブロック、及び/又はSoC200の外部の回路及び/又はシステム、メモリコントローラなどに信号を送受信するためのトランシーバを含むことができる。異なるI/Oブロックの例は、シングルエンド及び疑似差動I/O並びに高速差動クロックトランシーバを含むことができる。さらに、ハードワイヤード回路ブロック210は、特定の機能を実行するように実装されてもよい。ハードワイヤード回路ブロック210のさらなる例には、暗号化エンジン、デジタル-アナログ変換器、アナログ-デジタル変換器などが含まれるが、これらに限定されない。SoC200内のハードワイヤード回路ブロック210は、本明細書では時々、特定用途向けブロックと呼ばれることがある。
【0048】
図2の例では、PL214は2つの別々の領域に示されている。別の例では、PL214は、プログラマブル回路の統合領域として実装されてもよい。さらに別の例では、PL214は、プログラマブル回路の3つ以上の異なる領域として実装されてもよい。PL214の特定の編成は、限定を意図するものではない。ここで、SoC200は、1つ以上のPL領域214、PS212、NoC208を含む。
【0049】
他の例示的な実施態様では、SoC200は、ICの異なる領域に配置された2つ以上のDPEアレイ202を含むことができる。さらに他の例では、SoC200は、マルチダイICとして実装されてもよい。その場合、各サブシステムは、異なるダイ上に実装されてもよい。異なるダイは、ICがマルチチップモジュール(MCM)などとして実装される積層ダイアーキテクチャを使用して、インターポーザ上にダイを並べて積層するなど、様々な利用可能なマルチダイIC技術のいずれかを使用して通信可能にリンクされてもよい。マルチダイICの例では、各ダイは、単一のサブシステム、2つ以上のサブシステム、サブシステム及び別の部分サブシステム、又はそれらの任意の組合せを含むことができることを理解されたい。
【0050】
DPEアレイ202は、SoCインターフェースブロック206を含むDPE204の2次元アレイとして実装される。DPEアレイ202は、以下でより詳細に説明する様々な異なるアーキテクチャのいずれかを使用して実装することができる。限定ではなく例示を目的として、図2は、整列した行及び整列した列に配置されたDPE204を示す。しかしながら、他の実施形態では、DPE204は、選択された行及び/又は列のDPEが隣接する行及び/又は列のDPEに対して水平方向に逆転又は反転するように配置されてもよい。1つ以上の他の実施形態では、DPEの行及び/又は列は、隣接する行及び/又は列に対してオフセットされてもよい。1つ以上又はすべてのDPE204は、各々がプログラムコードを実行することができる1つ以上のコアを含むように実装されてもよい。DPE204の数、DPE204の特定の配置、及び/又はDPE204の向きは限定的であることを意図しない。
【0051】
SoCインターフェースブロック206は、DPE204をSoC200の1つ以上の他のサブシステムに結合することができる。1つ以上の実施形態では、SoCインターフェースブロック206は、隣接するDPE204に結合される。例えば、SoCインターフェースブロック206は、DPEアレイ202内のDPEの最下段の各DPE204に直接結合することができる。例示では、SoCインターフェースブロック206は、DPE204-1、204-2、204-3、204-4、204-5、204-6、204-7、204-8、204-9、及び204-10に直接接続されてもよい。
【0052】
図2は、例示を目的として提供されている。他の実施形態では、SoCインターフェースブロック206は、DPEアレイ202の上部、DPEアレイ202の左側(例えば、列として)、DPEアレイ202の右側(例えば、列として)、又はDPEアレイ202内及びその周囲の複数の位置(例えば、DPEアレイ202内の1つ以上の介在する行及び/又は列として)に配置されてもよい。SoCインターフェースブロック206のレイアウト及び位置に応じて、SoCインターフェースブロック206に結合された特定のDPEは変化し得る。
【0053】
例示の目的で、SoCインターフェースブロック206がDPE204の左に位置する場合、SoCインターフェースブロック206は、DPE204-1、DPE204-11、DPE204-21、及びDPE204-31を含むDPEの左列に直接結合されてもよい。SoCインターフェースブロック206がDPE204の右に位置する場合、SoCインターフェースブロック206は、DPE204-10、DPE204-20、DPE204-30、及びDPE204-40を含むDPEの右列に直接結合することができる。SoCインターフェースブロック206がDPE204の上部に位置する場合、SoCインターフェースブロック206は、DPE204-31、DPE204-32、DPE204-33、DPE204-34、DPE204-35、DPE204-36、DPE204-37、DPE204-38、DPE204-39、及びDPE204-40を含むDPEの上段に結合することができる。SoCインターフェースブロック206が複数の位置に位置する場合、SoCインターフェースブロック206に直接接続される特定のDPEは変化し得る。例えば、SoCインターフェースブロックがDPEアレイ202内の行及び/又は列として実装される場合、SoCインターフェースブロック206に直接結合されるDPEは、SoCインターフェースブロック206の一方又は両方の側のSoCインターフェースブロック206に隣接するDPEであってもよい。
【0054】
DPE204は、DPEインターコネクト(図示せず)によって相互接続され、DPEインターコネクトは、まとめて考えると、DPEインターコネクトネットワークを形成する。したがって、SoCインターフェースブロック206は、SoCインターフェースブロック206に直接接続されたDPEアレイ202の1つ以上の選択されたDPE204と通信し、それぞれのDPE204内に実装されたDPEインターコネクトから形成されたDPEインターコネクトネットワークを利用することによって、DPEアレイ202の任意のDPE204と通信することができる。
【0055】
SoCインターフェースブロック206は、DPEアレイ202内の各DPE204をSoC200の1つ以上の他のサブシステムと結合することができる。例えば、SoCインターフェースブロック206は、DPEアレイ202をNoC208及びPL214に結合することができる。したがって、DPEアレイ202は、PL214、PS212、及び/又はハードワイヤード回路ブロック210のいずれかに実装された回路ブロックと通信することができる。例えば、SoCインターフェースブロック206は、選択されたDPE204とPL214との間の接続を確立することができる。SoCインターフェースブロック206はまた、選択されたDPE204とNoC208との間の接続を確立することができる。NoC208を通じて、選択されたDPE204は、PS212及び/又はハードワイヤード回路ブロック210と通信することができる。選択されたDPE204は、SoCインターフェースブロック206及びPL214を介してハードワイヤード回路ブロック210と通信することができる。特定の実施形態では、SoCインターフェースブロック206は、SoC200の1つ以上のサブシステムに直接結合することができる。例えば、SoCインターフェースブロック206は、PS212及び/又はハードワイヤード回路ブロック210に直接結合されてもよい。
【0056】
1つ以上の実施形態では、DPEアレイ202は、単一のクロックドメインを含む。NoC208、PL214、PS212、及び様々なハードワイヤード回路ブロック210などの他のサブシステムは、1つ以上の別個の又は異なるクロックドメイン内にあってもよい。さらに、DPEアレイ202は、他のサブシステムのクロックとインターフェースするために使用され得る追加のクロックを含むことができる。特定の実施形態では、SoCインターフェースブロック206は、DPEアレイ202のDPE204に提供又は分配することができる1つ以上のクロック信号を生成することができるクロック信号発生器を含む。
【0057】
DPEアレイ202は、DPE204とSoCインターフェースブロック206との間の接続性、及びDPE204とSoCインターフェースブロック206がどのように動作するかを定義する内部構成メモリセル(本明細書では「構成レジスタ」とも呼ばれる)に構成データをロードすることによってプログラムされ得る。例えば、特定のDPE204又はDPE204のグループがサブシステムと通信する場合、DPE204及びSoCインターフェースブロック206はそうするようにプログラムされる。同様に、1つ以上の特定のDPE204が1つ以上の他のDPE204と通信するために、DPEはそうするようにプログラムされる。DPE204及びSoCインターフェースブロック206は、構成データをDPE204及びSoCインターフェースブロック206内の構成レジスタにそれぞれロードすることによってプログラムされ得る。別の例では、SoCインターフェースブロック206の一部であるクロック信号発生器は、DPEアレイ202に提供されるクロック周波数を変えるために構成データを使用してプログラム可能であり得る。
【0058】
図3は、図2のDPEアレイ202のDPE204の例示的なアーキテクチャを示す。図3の例では、DPE204は、コア302、メモリモジュール304、及びDPEインターコネクト306を含む。各DPE204は、SoC200上のハードワイヤード及びプログラマブル回路ブロックとして実装される。
【0059】
コア302は、DPE204のデータ処理能力を提供する。コア302は、様々な異なる処理回路のいずれかとして実装されてもよい。図3の例では、コア302は任意選択のプログラムメモリ308を含む。例示的な実施態様では、コア302は、プログラムコード、例えばコンピュータ可読命令を実行することができるプロセッサとして実装される。その場合、プログラムメモリ308が含まれ、コア302によって実行される命令を記憶することができる。コア302は、例えば、CPU、GPU、DSP、ベクトルプロセッサ、又は命令を実行することができる他のタイプのプロセッサとして実装されてもよい。コア302は、本明細書に記載の様々なCPU及び/又はプロセッサアーキテクチャのいずれかを使用して実装することができる。別の例では、コア302は、超長命令語(VLIW)ベクトルプロセッサ又はDSPとして実装される。
【0060】
特定の実施態様では、プログラムメモリ308は、コア302専用の(例えば、コア302によって排他的にアクセスされる)専用プログラムメモリとして実装される。プログラムメモリ308は、同じDPE204のコアによってのみ使用されてもよい。したがって、プログラムメモリ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のコアであってもよい。DPE204と境界又は境界を共有する(例えば、隣接している)別のDPEは、DPE204に対して「隣接する」DPEであると言われる。コア302及び隣接するDPEからの1つ以上の他のコアがメモリモジュール304に読み書きすることを可能にすることによって、メモリモジュール304は、メモリモジュール304にアクセスすることができる異なるDPE及び/又はコア間の通信をサポートする共有メモリを実装する。
【0064】
図2を参照すると、例えば、DPE204-14、204-16、204-5、及び204-25は、DPE204-15の隣接DPEと見なされる。一例では、各DPE204-16、204-5、及び204-25内のコアは、DPE204-15内のメモリモジュールに対する読み出し及び書き込みが可能である。特定の実施形態では、メモリモジュールに隣接する隣接するDPEのみが、DPE204-15のメモリモジュールにアクセスすることができる。例えば、DPE204-15のコアはDPE204-14のコアとDPE204-15のメモリモジュールとの間に位置し得るため、DPE204-14は、DPE204-15に隣接しているが、DPE204-15のメモリモジュールに隣接していなくてもよい。したがって、特定の実施形態では、DPE204-14のコアは、DPE204-15のメモリモジュールにアクセスしなくてもよい。
【0065】
特定の実施形態では、DPEのコアが別のDPEのメモリモジュールにアクセスできるかどうかは、メモリモジュールに含まれるメモリインターフェースの数、及びそのようなコアがメモリモジュールのメモリインターフェースのうちの利用可能な1つに接続されているかどうかに依存する。上記の例では、DPE204-15のメモリモジュールは4つのメモリインターフェースを含み、DPE204-16、204-5、及び204-25の各々のコアはそのようなメモリインターフェースに接続されている。DPE204-15内のコア302自体は、第4のメモリインターフェースに接続される。各メモリインターフェースは、1つ以上の読み出しチャネル及び/又は書き込みチャネルを含むことができる。特定の実施形態では、各メモリインターフェースは、それに取り付けられた特定のコアがメモリモジュール304内の複数のバンクに対して同時に読み出し及び/又は書き込みを行うことができるように、複数の読み出しチャネル及び複数の書き込みチャネルを含む。
【0066】
他の例では、5つ以上のメモリインターフェースが利用可能であってもよい。そのような他のメモリインターフェースは、DPE204-15に対する対角線上のDPEがDPE204-15のメモリモジュールにアクセスすることを可能にするために使用することができる。例えば、DPE204-14、204-24、204-26、204-4、及び/又は204-6などのDPEのコアが、DPE204-15のメモリモジュールの利用可能なメモリインターフェースにも結合されている場合、そのような他のDPEもまた、DPE204-15のメモリモジュールにアクセスすることができる。
【0067】
メモリモジュール304は、構成レジスタ336を含むことができる。構成レジスタ336は、メモリモジュール304の動作を制御するために構成データと共にロードされてもよい。図3の例では、構成レジスタ336(及び324)は、以下でより詳細に説明するDPEインターコネクト306のメモリマップドネットワークを介してアドレス指定可能(例えば、読み取り及び/又は書き込みが可能)である。
【0068】
図3の例では、DPEインターコネクト306はDPE204に固有のものである。DPEインターコネクト306は、DPE204とDPEアレイ202の1つ以上の他のDPEとの間の通信及び/又はSoC200の他のサブシステムとの通信を含む様々な動作を容易にする。DPEインターコネクト306はさらに、DPE204の構成、制御、及びデバッグを可能にする。
【0069】
特定の実施形態では、DPEインターコネクト306はオンチップ相互接続として実装される。オンチップ相互接続の一例は、アドバンストマイクロコントローラバスアーキテクチャ(AMBA)eXtensible Interface(AXI)バス(例えば、又はスイッチ)である。AMBA AXIバスは、回路ブロック及び/又はシステム間のオンチップ接続を確立する際に使用するための組み込みマイクロコントローラバスインターフェースである。AXIバスは、本開示内に記載された本発明の構成と共に使用され得る相互接続回路の一例として本明細書に提供され、したがって、限定として意図されていない。相互接続回路の他の例は、他のタイプのバス、クロスバー、及び/又は他のタイプのスイッチを含むことができる。
【0070】
1つ以上の実施形態では、DPEインターコネクト306は、2つの異なるネットワークを含む。第1のネットワークは、DPEアレイ202の他のDPE及び/又はSoC200の他のサブシステムとデータを交換することができる。例えば、第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のそれぞれのDPE204のDPEインターコネクトによって形成されたDPEインターコネクトネットワークを介して、コア302及び/又はメモリモジュール304と通信することを可能にすることができる。
【0073】
再び図2を参照し、基準点としてDPE204-15を使用すると、ストリームスイッチ326は、DPE204-14のDPEインターコネクト内に位置する別のストリームスイッチに結合され、それと通信することができる。ストリームスイッチ326は、DPE204-25のDPEインターコネクト内に位置する別のストリームスイッチに結合され、それと通信することができる。ストリームスイッチ326は、DPE204-16のDPEインターコネクト内に位置する別のストリームスイッチに結合され、それと通信することができる。ストリームスイッチ326は、DPE204-5のDPEインターコネクト内に位置する別のストリームスイッチに結合され、それと通信することができる。したがって、コア302及び/又はメモリモジュール304はまた、DPE内のDPEインターコネクトを介してDPEアレイ202内のDPEのいずれかと通信することができる。
【0074】
ストリームスイッチ326はまた、PL214及び/又はNoC208などのサブシステムとインターフェースするために使用されてもよい。一般に、ストリームスイッチ326は、回路スイッチングストリーム相互接続又はパケットスイッチングストリーム相互接続として動作するようにプログラムされる。回路スイッチングストリーム相互接続は、DPE間の高帯域幅通信に適したポイントツーポイントの専用ストリームを実装することができる。パケットスイッチングストリーム相互接続は、ストリームを共有して、複数の論理ストリームを中帯域幅通信用の1つの物理ストリームに時間多重化することを可能にする。
【0075】
ストリームスイッチ326は、構成レジスタ(図3では「CR」と略される)334を含むことができる。構成データは、DPEインターコネクト306のメモリマップドネットワークを介して構成レジスタ334に書き込まれてもよい。構成レジスタ334にロードされた構成データは、DPE204が他のどのDPE及び/又はサブシステム(例えば、NoC208、PL214、及び/又はPS212)と通信するか、及びそのような通信が回路スイッチングポイントツーポイント接続として確立されるか、又はパケットスイッチング接続として確立されるかを指示する。
【0076】
DPEインターコネクト306の第2のネットワークは、メモリマップドスイッチ332から形成される。メモリマップドスイッチ332は、複数のメモリマップドインターフェース(図示せず)を含む。各メモリマップドインターフェースは、1つ以上のマスタ及び1つ以上のスレーブを含むことができる。例えば、メモリマップドスイッチ332は、コア302、メモリモジュール304、DPE204の上のDPE内のメモリマップドスイッチ、及びDPE204の下のDPE内のメモリマップドスイッチのそれぞれに接続するためのメモリマップドインターフェースを含む。
【0077】
メモリマップドスイッチ332は、DPE204の構成、制御、及びデバッグデータを伝達するために使用される。図3の例では、メモリマップドスイッチ332は、DPE204を構成するために使用される構成データを受信することができる。メモリマップドスイッチ332は、DPE204の下に位置するDPEから及び/又はSoCインターフェースブロック206から構成データを受信してもよい。メモリマップドスイッチ332は、受信した構成データを、DPE204の上の1つ以上の他のDPE、コア302(例えば、プログラムメモリ308及び/又は構成レジスタ324)、メモリモジュール304(例えば、メモリモジュール304内のメモリ及び/又は構成レジスタ336)、及び/又はストリームスイッチ326内の構成レジスタ334に転送することができる。
【0078】
DPEインターコネクト306は、DPE204の位置に応じて、各隣接するDPE及び/又はSoCインターフェースブロック206のDPEインターコネクトに結合される。まとめて考えると、DPE204のDPEインターコネクトは、DPEインターコネクトネットワーク(ストリームネットワーク及び/又はメモリマップドネットワークを含み得る)を形成する。各DPEのストリームスイッチの構成レジスタは、メモリマップドスイッチを介して構成データをロードすることによってプログラムすることができる。構成を通じて、ストリームスイッチ及び/又はストリームインターフェースは、パケットスイッチングであろうと回路スイッチングであろうと、1つ以上の他のDPE204及び/又はSoCインターフェースブロック206にあるかにかかわらず、他のエンドポイントとの接続を確立するようにプログラムされる。
【0079】
1つ以上の実施形態では、DPEアレイ202は、PS212などのプロセッサシステムのアドレス空間にマッピングされる。したがって、DPE204内の任意の構成レジスタ及び/又はメモリには、メモリマップドインターフェースを介してアクセスすることができる。例えば、メモリモジュール304内のメモリ、プログラムメモリ308、コア302内の構成レジスタ324、メモリモジュール304内の構成レジスタ336、及び/又は構成レジスタ334は、メモリマップドスイッチ332を介して読み出し及び/又は書き込みすることができる。
【0080】
図3の例では、メモリマップドスイッチ332は、DPE204の構成データを受信することができる。構成データは、プログラムメモリ308にロードされるプログラムコード(含まれる場合)、構成レジスタ324,334及び/又は336にロードするための構成データ、及び/又はメモリモジュール304のメモリ(例えば、メモリバンク)にロードされるデータを含むことができる。図3の例では、構成レジスタ324,334、及び336は、構成レジスタが制御することを意図されている特定の回路構造、例えば、コア302、ストリームスイッチ326、及びメモリモジュール304内に配置されているものとして示されている。図3の例は、例示のみを目的としており、コア302、メモリモジュール304、及び/又はストリームスイッチ326内の要素が、構成データを対応する構成レジスタにロードすることによってプログラムされ得ることを示している。他の実施形態では、構成レジスタは、DPE204全体に分散されたコンポーネントの動作を制御するにもかかわらず、DPE204の特定の領域内に統合されてもよい。
【0081】
したがって、ストリームスイッチ326は、構成データを構成レジスタ334にロードすることによってプログラムされ得る。構成データは、2つの異なるDPE及び/又は他のサブシステム間の回路スイッチングモードで、又は選択されたDPE及び/又は他のサブシステム間のパケットスイッチングモードで動作するようにストリームスイッチ326をプログラムする。したがって、ストリームスイッチ326によって他のストリームインターフェース及び/又はスイッチに確立される接続は、適切な構成データを構成レジスタ334にロードして、DPE204内、他のDPE、及び/又はIC300の他のサブシステムとの実際の接続又はアプリケーションデータ経路を確立することによってプログラムされる。
【0082】
図4は、図3の例示的なアーキテクチャのさらなる態様を示す。図4の例では、DPEインターコネクト306に関する詳細は示されていない。図4は、共有メモリを介したコア302と他のDPEとの接続を示す。図4はまた、メモリモジュール304の追加の態様を示す。例示の目的で、図4はDPE204-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は、DPE204-25のコアに結合される。メモリインターフェース404は、メモリバンク412へのアクセスをDPE204-25のコアに提供する。メモリインターフェース406は、DPE204-16のコアに結合される。メモリインターフェース406は、DPE204-16のコアにメモリバンク412へのアクセスを提供する。メモリインターフェース408は、DPE204-5のコアに結合される。メモリインターフェース408は、メモリバンク412へのアクセスをDPE204-5のコアに提供する。したがって、図4の例では、DPE204-15のメモリモジュール304との共有境界を有する各DPEは、メモリバンク412に対して読み出し及び書き込みが可能である。図4の例では、DPE204-14のコアは、DPE204-15のメモリモジュール304に直接アクセスすることはできない。
【0087】
コア302は、コアインターフェース430,432、及び434を介して他の隣接するDPEのメモリモジュールにアクセスすることができる。図4の例では、コアインターフェース434は、DPE204-25のメモリインターフェースに結合される。したがって、コア302は、コアインターフェース434及びDPE204-25のメモリモジュール内に含まれるメモリインターフェースを介してDPE204-25のメモリモジュールにアクセスすることができる。コアインターフェース432は、DPE204-14のメモリインターフェースに結合される。したがって、コア302は、コアインターフェース432及びDPE204-14のメモリモジュール内に含まれるメモリインターフェースを介して、DPE204-14のメモリモジュールにアクセスすることができる。コアインターフェース430は、DPE204-5内のメモリインターフェースに結合される。したがって、コア302は、コアインターフェース430及びDPE204-5のメモリモジュール内に含まれるメモリインターフェースを介して、DPE204-5のメモリモジュールにアクセスすることができる。説明したように、コア302は、コアインターフェース428及びメモリインターフェース402を介してDPE204-15内のメモリモジュール304にアクセスすることができる。
【0088】
図4の例では、コア302は、DPE204-15(例えば、DPE204-25、204-14、及び204-5)内のコア302と境界を共有するDPEのメモリモジュールのいずれかに読み書きすることができる。1つ以上の実施形態では、コア302は、DPE204-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は、DPE204-25内のメモリモジュール及び/又はDPE204-15のメモリモジュール304であり得る共有メモリを介してDPE204-25のコアと通信することができる。コア302は、DPE204-14内のメモリモジュールである共有メモリを介してDPE204-14のコアと通信することができる。コア302は、DPE204-5内のメモリモジュール及び/又はDPE204-15のメモリモジュール304であり得る共有メモリを介してDPE204-5のコアと通信することができる。さらに、コア302は、DPE204-15内のメモリモジュール304である共有メモリを介してDPE204-16のコアと通信することができる。
【0091】
説明したように、DMAエンジン416は、1つ以上のストリーム-メモリインターフェースを含むことができる。DMAエンジン416を介して、SoC200内の他のソースからアプリケーションデータを受信し、メモリモジュール304に格納することができる。例えば、データは、ストリームスイッチ326によってDPE204-15と境界を共有する及び/又は共有しない他のDPEから受信されてもよい。データはまた、DPEのストリームスイッチを介してSoCインターフェースブロック206によってSoCの他のサブシステム(例えば、NoC208、ハードワイヤード回路ブロック210、PL214、及び/又はPS212)から受信されてもよい。DMAエンジン416は、ストリームスイッチからそのようなデータを受信し、そのデータをメモリモジュール304内の適切なメモリバンク又はメモリバンク412に書き込むことができる。
【0092】
DMAエンジン416は、1つ以上のメモリ-ストリームインターフェースを含むことができる。DMAエンジン416を介して、メモリモジュール304のメモリバンク又はメモリバンク412からデータを読み出し、ストリームインターフェースを介して他の宛先に送信することができる。例えば、DMAエンジン416は、メモリモジュール304からデータを読み出し、ストリームスイッチによってDPE204-15と境界を共有する及び/又は共有しない他のDPEにそのようなデータを送信することができる。DMAエンジン416はまた、ストリームスイッチ及びSoCインターフェースブロック206を介して他のサブシステム(例えば、NoC208、ハードワイヤード回路ブロック210、PL214、及び/又はPS212)にそのようなデータを送信することができる。
【0093】
1つ以上の実施形態において、DMAエンジン416は、DPE204-15内のメモリマップドスイッチ332によってプログラムされる。例えば、DMAエンジン416は、構成レジスタ336によって制御されてもよい。構成レジスタ336は、DPEインターコネクト306のメモリマップドスイッチ332を使用して書き込まれてもよい。特定の実施形態では、DMAエンジン416は、DPE204-15内のストリームスイッチ326によって制御されてもよい。例えば、DMAエンジン416は、それに接続されたストリームスイッチ326によって書き込まれ得る制御レジスタを含むことができる。DPEインターコネクト306内のストリームスイッチ326を介して受信されたストリームは、構成レジスタ324,334及び/又は336にロードされた構成データに応じて、メモリモジュール304内のDMAエンジン416に、及び/又は直接コア302に接続することができる。ストリームは、構成レジスタ324,334及び/又は336にロードされた構成データに応じて、DMAエンジン416(例えば、メモリモジュール304)及び/又はコア302から送信され得る。
【0094】
メモリモジュール304は、ハードウェア同期回路420(図4では「HSC」と略される)をさらに含んでもよい。一般に、ハードウェア同期回路420は、異なるコア(例えば、隣接するDPEのコア)、図4のコア302、DMAエンジン416、及びDPEインターコネクト306を介して通信することができる他の外部マスタ(例えば、PS212)の動作を同期することができる。例示的かつ非限定的な例として、ハードウェア同期回路420は、DPE204-15及び/又はメモリモジュール304内の同じ、例えば共有バッファにアクセスする異なるDPE内の2つの異なるコア、ストリームスイッチ、メモリマップドインターフェース、及び/又はDMAを同期させることができる。
【0095】
2つのDPEが隣接していない場合、2つのDPEは共通のメモリモジュールにアクセスできない。その場合、アプリケーションデータは、データストリームを介して転送され得る(「データストリーム」及び「ストリーム」という用語は、本開示内で時々交換可能に使用され得る)。したがって、ローカルDMAエンジンは、転送をローカルメモリベースの転送からストリームベースの転送に変換することができる。その場合、コア302及びDMAエンジン416は、ハードウェア同期回路420を使用して同期することができる。
【0096】
PS212は、メモリマップドスイッチ332を介してコア302と通信することができる。例えば、PS212は、メモリの読み出し及び書き込みを開始することによって、メモリモジュール304及びハードウェア同期回路420にアクセスすることができる。別の実施形態では、ハードウェア同期回路420はまた、ロックの状態が変化したときにPS212に割り込みを送信して、ハードウェア同期回路420のPS212によるポーリングを回避してもよい。PS212はまた、ストリームインターフェースを介してDPE204-15と通信することができる。
【0097】
共有メモリモジュールを介して隣接するDPEと通信し、DPEインターコネクト306を介して隣接及び/又は非隣接DPEと通信することに加えて、コア302はカスケードインターフェースを含むことができる。図4の例では、コア302はカスケードインターフェース422及び424(図4では「CI」と略される)を含む。カスケードインターフェース422及び424は、他のコアとの直接通信を提供することができる。図示されているように、コア302のカスケードインターフェース422は、DPE204-14のコアから入力データストリームを直接受信する。カスケードインターフェース422を介して受信されたデータストリームは、コア302内のデータ処理回路に提供され得る。コア302のカスケードインターフェース424は、出力データストリームをDPE204-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】
本開示内で説明される実施形態では、DPE204はキャッシュメモリを含まない。キャッシュメモリを省略することにより、DPEアレイ202は、予測可能な、例えば決定論的なパフォーマンスを達成することができる。さらに、異なるDPEに位置するキャッシュメモリ間の一貫性を維持する必要がないため、大きな処理オーバーヘッドが回避される。
【0102】
1つ以上の実施形態によれば、DPE204のコア302は入力割り込みを有さない。したがって、DPE204のコア302は、中断されずに動作することができる。DPE204のコア302への入力割り込みを省略することはまた、DPEアレイa02が予測可能な、例えば決定論的なパフォーマンスを達成することを可能にする。
【0103】
図5は、DPEアレイの別の例示的なアーキテクチャを示す。図5の例では、SoCインターフェースブロック206は、DPE204とSoC200の他のサブシステムとの間のインターフェースを提供する。SoCインターフェースブロック206は、DPEをデバイスに統合する。SoCインターフェースブロック206は、構成データをDPE204に伝達し、イベントをDPE204から他のサブシステムに伝達し、イベントを他のサブシステムからDPE204に伝達し、割り込みを生成してDPEアレイ202の外部のエンティティに伝達し、他のサブシステムとDPE204との間でアプリケーションデータを伝達し、及び/又は他のサブシステムとDPE204との間でトレース及び/又はデバッグデータを伝達することができる。
【0104】
図5の例では、SoCインターフェースブロック206は、複数の相互接続されたタイルを含む。例えば、SoCインターフェースブロック206は、タイル502,504,506,508,510,512,514,516,518、及び520を含む。図5の例では、タイル502~520が一列に編成されている。他の実施形態では、タイルは、列、グリッド、又は別のレイアウトに配置されてもよい。例えば、SoCインターフェースブロック206は、DPE204の左側、DPE204の右側、DPE204の列間などのタイルの列として実装されてもよい。別の実施形態では、SoCインターフェースブロック206は、DPEアレイ202の上方に配置されてもよい。SoCインターフェースブロック206は、タイルがDPEアレイ202の下、DPEアレイ202の左、DPEアレイ202の右、及び/又はDPEアレイ202の上の任意の組合せで配置されるように実装されてもよい。これに関して、図5は、限定ではなく例示を目的として提供されている。
【0105】
1つ以上の実施形態において、タイル502~520は同じアーキテクチャを有する。1つ以上の他の実施形態では、タイル502~520は、2つ以上の異なるアーキテクチャで実装されてもよい。特定の実施形態では、SoCインターフェースブロック206内のタイルを実装するために異なるアーキテクチャを使用することができ、各異なるタイルアーキテクチャは、SoC200の異なるタイプのサブシステム又はサブシステムの組合せとの通信をサポートする。
【0106】
図5の例では、タイル502~520は、データが1つのタイルから別のタイルに伝播され得るように結合される。例えば、データは、タイル502からタイル504,506を通って、タイルのラインを下ってタイル520まで伝搬することができる。同様に、データは、タイル520からタイル502に逆方向に伝播することができる。1つ以上の実施形態では、タイル502~520の各々は、複数のDPEのインターフェースとして動作することができる。例えば、タイル502~520の各々は、DPEアレイ202のDPE204のサブセットのインターフェースとして動作することができる。各タイルがインターフェースを提供するDPEのサブセットは、DPEがSoCインターフェースブロック206の複数のタイルによってインターフェースを提供されないように、相互に排他的であってもよい。
【0107】
一例では、タイル502~520の各々は、DPE204の列のためのインターフェースを提供する。例示の目的で、タイル502は、列AのDPEへのインターフェースを提供する。タイル504は、列BのDPEへのインターフェースを提供する。いずれの場合も、タイルは、この例では底部DPEである、DPEの列内の隣接するDPEへの直接接続を含む。列Aを参照すると、例えば、タイル502はDPE204-1に直接接続されている。列A内の他のDPEは、タイル502と通信することができるが、同じ列内の介在するDPEのDPEインターコネクトを介して通信する。
【0108】
例えば、タイル502は、PS212、PL214、及び/又は別のハードワイヤード回路ブロック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が、DPE204の左、右、又は列間にかかわらず、タイルの列として実装される場合に使用され得る。他の実施形態では、各タイルがインターフェースを提供するDPEのサブセットは、DPEアレイ202のすべてのDPEよりも少ないDPEの任意の組合せであってもよい。例えば、DPE204は、SoCインターフェースブロック206のタイルに割り当てられてもよい。そのようなDPEの特定の物理的レイアウトは、DPEインターコネクトによって確立されるDPEの接続性に基づいて変化し得る。例えば、タイル502は、DPE204-1、204-2、204-11、及び204-12へのインターフェースを提供することができる。SoCインターフェースブロック206の別のタイルは、4つの他のDPEなどへのインターフェースを提供することができる。
【0111】
図6は、SoCインターフェースブロック206のタイルの例示的なアーキテクチャを示す。図6の例では、SoCインターフェースブロック206のための2つの異なるタイプのタイルが示されている。タイル602は、DPEとPL214のみとの間のインターフェースとして機能するように構成される。タイル610は、DPEとNoC208との間及びDPEとPL214との間のインターフェースとして機能するように構成される。SoCインターフェースブロック206は、タイル602及びタイル610について図示されたような両方のアーキテクチャを使用するタイルの組合せを含むことができ、又は別の例では、タイル610について図示されたようなアーキテクチャを有するタイルのみを含むことができる。
【0112】
図6の例では、タイル602は、PLインターフェース606及び直上のDPE204-1などのDPEに接続されたストリームスイッチ604を含む。PLインターフェース606は、各々がPL214内に位置する境界論理インターフェース(BLI)回路620及びBLI回路622に接続する。タイル610は、NoC及びPLインターフェース614並びに直上のDPE204-5などのDPEに接続されたストリームスイッチ612を含む。NoC及びPLインターフェース614は、PL214内のBLI回路624及び626、並びにNoC208のNoCマスタユニット(NMU)630及びNoCスレーブユニット(NSU)632にも接続する。
【0113】
図6の例では、各ストリームインターフェース604は、それに結合されたDPEに6つの異なる32ビットデータストリームを出力し、そこから4つの異なる32ビットデータストリームを受信することができる。PLインターフェース606並びにNoC及びPLインターフェース614の各々は、それぞれBLI620及びBLI624によって6つの異なる64ビットデータストリームをPL214に提供することができる。一般に、BLI620,622,624、及び626の各々は、PLインターフェース606及び/又はNoC及びPLインターフェース614が接続するPL214内のインターフェース又は接続点を提供する。PLインターフェース606及びNoC及びPLインターフェース614の各々は、それぞれBLI622及びBLI624を介してPL214から8つの異なる64ビットデータストリームを受信することができる。
【0114】
NoC及びPLインターフェース614は、NoC208にも接続される。図6の例では、NoC及びPLインターフェース614は、1つ以上のNMU630及び1つ以上のNSU632に接続する。一例では、NoC及びPLインターフェース614は、2つの異なる128ビットデータストリームをNoC208に提供することができ、各データストリームは異なるNMU630に提供される。NoC及びPLインターフェース614は、NoC208から2つの異なる128ビットデータストリームを受信することができ、各データストリームは異なるNSU632から受信される。
【0115】
隣接するタイルのストリームスイッチ604が接続されている。一例では、隣接するタイル内のストリームスイッチ604は、左右方向(例えば、タイルが場合により右又は左にある限り)のそれぞれにおいて4つの異なる32ビットデータストリームによって通信することができる。
【0116】
タイル602及び610はそれぞれ、構成データを伝達するための1つ以上のメモリマップドスイッチを含むことができる。説明のために、メモリマップドスイッチは示されていない。メモリマップドスイッチは、例えば、場合によっては、直上のDPEのメモリマップドスイッチ、ストリームスイッチ604と同じ又は同様の方法でSoCインターフェースブロック206内の他の隣接タイル内のメモリマップドスイッチ、タイル602及び610内の構成レジスタ(図示せず)、並びに/あるいはPLインターフェース608又はNoC及びPLインターフェース614に垂直に接続することができる。
【0117】
SoCインターフェースブロック206のDPE204及び/又はタイル602及び/又は610に含まれる様々なスイッチに関連して説明される様々なビット幅及びデータストリームの数は、例示の目的で提供されており、本開示内で説明される本発明の構成を限定することを意図するものではない。
【0118】
図7は、NoC208の例示的な実施態様を示す。NoC208は、NMU702、NSU704、ネットワーク714、NoC周辺相互接続(NPI)710、及びレジスタ712を含む。各NMU702は、エンドポイント回路をNoC208に接続する入口回路である。各NSU704は、NoC208をエンドポイント回路に接続する出口回路である。NMU702は、ネットワーク714を介してNSU704に接続される。一例では、ネットワーク714は、NoCパケットスイッチ706(NPS)と、NPS706間のルーティング708とを含む。各NPS706は、NoCパケットの切り替えを行う。NPS706は、複数の物理チャネルを実装するために、互いに、並びにルーティング708を介してNMU702及びNSU704に接続される。NPS706はまた、物理チャネルごとに複数の仮想チャネルをサポートする。
【0119】
NPI710は、NMU702、NSU704、及びNPS706をプログラムするための回路を含む。例えば、NMU702、NSU704、及びNPS706は、その機能性を判定するレジスタ712を含むことができる。NPI710は、機能を設定するためにそのプログラミングのためにレジスタ712に結合された周辺機器相互接続を含む。NoC208内のレジスタ712は、割り込み、サービス品質(QoS)、エラー処理及び報告、トランザクション制御、電力管理、及びアドレスマッピング制御をサポートする。レジスタ712は、書き込み要求を使用してレジスタ712に書き込むことなどによって、再プログラムされる前に使用可能な状態で初期化することができる。NoC208の構成データは、例えばプログラミングデバイスイメージ(PDI)の一部として不揮発性メモリ(NVM)に格納することができ、NoC208及び/又は他のエンドポイント回路をプログラムするためにNPI710に提供することができる。
【0120】
NMU702は、トラフィック入口点である。NSU704は、トラフィック出口点である。NMU702及びNSU704に結合されたエンドポイント回路は、ハード化回路(例えば、ハードワイヤード回路ブロック210)又はPL214に実装された回路とすることができる。所与のエンドポイント回路は、複数のNMU702又は複数のNSU704に結合することができる。
【0121】
図8は、一例による、NoC208を介するSoC200内のエンドポイント回路間の接続を示すブロック図である。この例では、エンドポイント回路802は、NoC208を介してエンドポイント回路804に接続されている。エンドポイント回路802は、NoC208のNMU702に結合されたマスタ回路である。エンドポイント回路804は、NoC208のNSU704に結合されたスレーブ回路である。各エンドポイント回路802及び804は、PS212内の回路、PL領域214内の回路、又は別のサブシステム(例えば、ハードワイヤード回路ブロック210)内の回路とすることができる。
【0122】
ネットワーク714は、複数の物理チャネル806を含む。物理チャネル806は、NoC208をプログラムすることによって実装される。各物理チャネル806は、1つ以上のNPS706及び関連するルーティング708を含む。NMU702は、少なくとも1つの物理チャネル806を介してNSU704と接続する。物理チャネル806はまた、1つ以上の仮想チャネル808を有することができる。
【0123】
ネットワーク714を介した接続は、マスタ-スレーブ構成を使用する。一例では、ネットワーク714を介した最も基本的な接続は、単一のスレーブに接続された単一のマスタを含む。しかしながら、他の例では、より複雑な構造を実装することができる。
【0124】
図9は、別の例によるNoC208を示すブロック図である。この例では、NoC208は、垂直部分902(VNoC)及び水平部分904(HNoC)を含む。各VNoC902は、PL領域214の間に配置されている。HNoC904は、PL領域214とI/Oバンク910(例えば、ハードワイヤード回路ブロック210に対応するI/Oブロック及び/又はトランシーバ)との間に配置される。NoC208は、メモリインターフェース908(例えば、他のハードワイヤード回路ブロック210)に接続される。PS212は、HNoC904に結合される。
【0125】
この例では、PS212は、HNoC904に結合された複数のNMU702を含む。VNoC902は、PL領域214内に配置されたNMU702及びNSU704の両方を含む。メモリインターフェース908は、HNoC904に結合されたNSU704を含む。HNoC904及びVNoC902の両方は、ルーティング708によって接続されたNPS706を含む。VNoC902では、ルーティング708は垂直に延在する。HNoC904では、ルーティングは水平に延在する。各VNoC902において、各NMU702は、NPS706に結合される。同様に、各NSU704は、NPS706に結合される。NPS706は、互いに結合されてスイッチのマトリックスを形成する。各VNoC902内のいくつかのNPS706は、HNoC904内の他のNPS706に結合される。
【0126】
単一のHNoC904のみが示されているが、他の例では、NoC208は複数のHNoC904を含むことができる。さらに、2つのVNoC902が示されているが、NoC208は、3つ以上のVNoC902を含むことができる。メモリインターフェース908は例として示されているが、メモリインターフェース908の代わりに、又はそれに加えて、ハードワイヤード回路ブロック210他のハードワイヤード回路ブロック210を使用できることを理解されたい。
【0127】
図10は、NoC208をプログラムする例示的な方法1000を示す。SoC200の他のサブシステムとは独立して説明されているが、方法1000は、SoC200のより大きなブート又はプログラミング、プロセスの一部として含まれ、及び/又は使用されてもよい。
【0128】
ブロック1002において、SoC200に実装されたプラットフォーム管理コントローラ(PMC)は、ブート時にNoCプログラミングデータを受信する。NoCプログラミングデータは、PDIの一部であってもよい。PMCは、SoC200の管理を担当する。PMCは、安全でセキュアな環境を維持し、SoC200をブートし、通常動作中にSoC200を管理することができる。
【0129】
ブロック1004において、PMCは、物理チャネル806を作成するために、NPI710を介してレジスタ712にNoCプログラミングデータをロードする。一例では、プログラミングデータはまた、NPS706内のルーティングテーブルを構成するための情報を含むことができる。ブロック1006において、PMCはSoC200をブートする。このように、NoC208は、少なくとも、NMU702とNSU704との間の物理チャネル806の構成情報を含む。NoC208の残りの構成情報は、以下でさらに説明するように、ランタイム中に受信することができる。別の例では、ランタイム中に受信されるものとして後述する構成情報の全部又は一部をブート時に受信することができる。
【0130】
図11は、NoC208をプログラムする例示的な方法1100を示す。ブロック1102において、PMCは、ランタイム中にNoCプログラミングデータを受信する。ブロック1104において、PMCは、NPI710を介してNoCレジスタ712にプログラミングデータをロードする。一例では、ブロック1106において、PMCは、NPS706内のルーティングテーブルを構成する。ブロック1108において、PMCは、物理チャネル806上でQoS経路を構成する。ブロック1110において、PMCはアドレス空間マッピングを構成する。ブロック1112において、PMCは、入口/出口インターフェースプロトコル、幅、及び周波数を設定する。QoS経路、アドレス空間マッピング、ルーティングテーブル、及び入口/出口構成については、以下でさらに説明する。
【0131】
図12は、エンドポイント回路間のNoC208を通る例示的なデータ経路1200を示す。データ経路1200は、エンドポイント回路1202、AXIマスタ回路1204、NMU1206、NPS1208、NSU1210、AXIスレーブ回路1212、及びエンドポイント回路1214を含む。エンドポイント回路1202は、AXIマスタ回路1204に結合されている。AXIマスタ回路1204は、NMU1206に結合されている。別の例では、AXIマスタ回路1204はNMU1206の一部である。
【0132】
NMU1206は、NPS1208に結合される。NPS1208は、互いに接続されて、NPS1208のチェーン(例えば、本例では5つのNPS1208のチェーン)を形成する。一般に、NMU1206とNSU1210との間には、少なくとも1つのNPS1208が存在する。NSU1210は、NPS1208の1つに接続される。AXIスレーブ回路1212は、NSU1210に結合される。別の例では、AXIスレーブ回路1212は、NSU1210の一部である。エンドポイント回路1214は、AXIスレーブ回路1212に結合される。
【0133】
エンドポイント回路1202及び1214は、ハード化回路(例えば、PS回路、ハードワイヤード回路210、1つ以上のDPE204)又はPL214に構成された回路とすることができる。エンドポイント回路1202は、マスタ回路として機能し、NMU1206に読み出し/書き込み要求を送信する。この例では、エンドポイント回路1202及び1214は、AXIプロトコルを使用してNoC208と通信する。この例ではAXIが説明されているが、NoC208は、当技術分野で知られている他のタイプのプロトコルを使用してエンドポイント回路から通信を受信するように構成され得ることを理解されたい。例によって明確にするために、NoC208は、本明細書ではAXIプロトコルをサポートするものとして説明される。NMU1206は、NPS1208のセットを介して要求を中継して宛先NSU1210に到達する。NSU1210は、エンドポイント回路1214へのデータの処理及び配信のために、付属のAXIスレーブ回路1212に要求を渡す。AXIスレーブ回路1212は、読み出し/書き込み応答をNSU1210に送り返すことができる。NSU1210は、NPS1208のセットを介してNMU1206に応答を転送することができる。NMU1206は、AXIマスタ回路1204に応答を通信し、AXIマスタ回路は、データをエンドポイント回路1202に配信する。
【0134】
図13は、読み出し/書き込み要求及び応答を処理する例示的な方法1300を示す。方法1300はブロック1302で開始し、エンドポイント回路1202は、AXIマスタ1204を介してNMU1206に要求(例えば、読み出し要求又は書き込み要求)を送信する。ブロック1304において、NMU1206は応答を処理する。一例では、NMU1206は、エンドポイント回路1202のクロックドメインとNoC208との間の非同期交差及びレートマッチングを実行する。NMU1206は、要求に基づいてNSU1210の宛先アドレスを決定する。NMU1206は、仮想化が使用される場合にアドレス再マッピングを実行することができる。NMU1206は、要求のAXI変換も行う。NMU1206は、要求をパケットのストリームにさらにパケット化する。
【0135】
ブロック1306において、NMU1206は、要求のパケットをNPS1208に送信する。各NPS1208は、宛先アドレス及びルーティング情報に基づいて、ターゲット出力ポートに対するテーブルルックアップを実行する。ブロック1308において、NSU1210は、要求のパケットを処理する。一例では、NSU1210は、要求をデパケット化し、AXI変換を実行し、NoCクロックドメインからエンドポイント回路1214のクロックドメインへの非同期交差及びレートマッチングを実行する。ブロック1310において、NSU1210は、AXIスレーブ回路1212を介してエンドポイント回路1214に要求を送信する。NSU1210は、AXIスレーブ回路1212を介してエンドポイント回路1214から応答を受信することもできる。
【0136】
ブロック1312において、NSU1210は応答を処理する。一例では、NSU1210は、エンドポイント回路1214のクロックドメイン及びNoC208のクロックドメインから非同期交差及びレートマッチングを実行する。また、NSU1210は、応答をパケットのストリームにパケット化する。ブロック1314において、NSU1210は、NPS1208を介してパケットを送信する。各NPS1208は、宛先アドレス及びルーティング情報に基づいて、ターゲット出力ポートに対するテーブルルックアップを実行する。ブロック1316において、NMU1206はパケットを処理する。一例では、NMU1206は、応答をデパケット化し、AXI変換を実行し、NoCクロックドメインからエンドポイント回路1202のクロックドメインへの非同期交差及びレートマッチングを実行する。ブロック1318において、NMU1206は、AXIマスタ回路1204を介してエンドポイント回路1202に応答を送信する。
【0137】
図14は、NMU702の例示的な実施態様を示す。NMU702は、AXIマスタインターフェース1402、パケット化回路1404、アドレスマップ1406、デパケット化回路1408、QoS回路1410、VCマッピング回路1412、及びクロック管理回路1414を含む。AXIマスタインターフェース1402は、エンドポイント回路用のAXIインターフェースをNMU702に提供する。他の例では、異なるプロトコルを使用することができ、したがって、NMU702は、選択されたプロトコルに準拠する異なるマスタインターフェースを有することができる。NMU702は、インバウンドトラフィックをパケット化回路1404にルーティングし、パケット化回路はインバウンドデータからパケットを生成する。パケット化回路1404は、パケットをルーティングするために使用されるアドレスマップ1406から宛先IDを決定する。QoS回路1410は、NoC208へのパケットの注入速度を制御するための入口速度制御を提供することができる。VCマッピング回路1412は、各物理チャネル上のQoS仮想チャネルを管理する。NMU702は、パケットがどの仮想チャネルにマッピングされるかを選択するように構成することができる。クロック管理回路1414は、AXIクロックドメインとNoCクロックドメインとの間のインターフェースを提供するためにレートマッチング及び非同期データ交差を実行する。デパケット化回路1408は、NoC208から戻りパケットを受信し、AXIマスタインターフェース1402による出力のためにパケットをデパケット化するように構成される。
【0138】
図15は、NSU704の例示的な実施態様を示す。NSU704は、AXIスレーブインターフェース1502、クロック管理回路1504、パケット化回路1508、デパケット化回路1506、及びQoS回路1510を含む。AXIスレーブインターフェース1502は、エンドポイント回路用のAXIインターフェースをNSU704に提供する。他の例では、異なるプロトコルを使用することができ、したがって、NSU704は、選択されたプロトコルに準拠する異なるスレーブインターフェースを有することができる。NSU704は、NoC208からのインバウンドトラフィックを、デパケット化データを生成するデパケット化回路1506にルーティングする。クロック管理回路1504は、AXIクロックドメインとNoCクロックドメインとの間のインターフェースを提供するためにレートマッチング及び非同期データ交差を実行する。パケット化回路1508は、スレーブインターフェース1502から戻りデータを受信し、NoC208を介して送信するために戻りデータをパケット化するように構成される。QoS回路1510は、NoC208へのパケットの注入速度を制御するための入口速度制御を提供することができる。
【0139】
図16は、図1に関連して説明したシステムによって実行可能な例示的なソフトウェアアーキテクチャを示す。例えば、図16のアーキテクチャは、図1のプログラムモジュール120のうちの1つ以上として実装されてもよい。図16のソフトウェアアーキテクチャは、DPEコンパイラ1602、NoCコンパイラ1604、及びハードウェアコンパイラ1606を含む。図16は、動作(例えば、SoC200でアプリケーションを実装するために設計フローを実行すること)の間にコンパイラ間で交換され得る様々なタイプの設計データの一例を示す。
【0140】
DPEコンパイラ1602は、アプリケーションから、DPEアレイ202のDPE204の1つ以上のDPE及び/又はサブセットにロードされ得る1つ以上のバイナリを生成することができる。各バイナリは、DPEのコアによって実行可能なオブジェクトコード、任意選択的にアプリケーションデータ、及びDPEの構成データを含むことができる。NoCコンパイラ1604は、アプリケーションのためのデータパスを作成するためにNoC208にロードされる構成データを含むバイナリを生成することができる。ハードウェアコンパイラ1606は、アプリケーションのハードウェア部分をコンパイルして、PL214に実装するための構成ビットストリームを生成することができる。
【0141】
図16は、動作中にDPEコンパイラ1602、NoCコンパイラ1604、及びハードウェアコンパイラ1606が互いに通信する方法の一例を示す。それぞれのコンパイラは、設計データを交換して解に収束することによって協調的に通信する。この解は、設計メトリック及び制約条件を満たし、SoC200の様々なヘテロジニアスサブシステムが通信する共通インターフェースを含む、SoC200内のアプリケーションの実装である。
【0142】
本開示内で定義されるように、「設計メトリック」という用語は、SoC200に実装されるアプリケーションの目的又は要件を定義する。設計メトリックの例には、電力消費要件、データスループット要件、タイミング要件などが含まれるが、これらに限定されない。設計メトリックは、ユーザ入力、ファイル、又はアプリケーションのより高い又はシステムレベルの要件を定義するための別の方法を介して提供されてもよい。本開示内で定義されるように、「設計制約」は、設計メトリック又は要件を達成するためにEDAツールが従う場合も、従わない場合もあるという要件である。設計制約は、コンパイラ指令として指定されてもよく、典型的には、EDAツール(例えば、コンパイラ)が従うべきより低いレベルの要件又は提案を指定する。設計制約は、ユーザ入力、1つ以上の設計制約を含むファイル、コマンドライン入力などによって指定することができる。
【0143】
一態様において、DPEコンパイラ1602は、アプリケーションのための論理アーキテクチャ及びSoCインターフェースブロック解を生成することができる。DPEコンパイラ1602は、例えば、DPEアレイ202に実装されるアプリケーションのソフトウェア部分の高位のユーザ定義メトリックに基づいて論理アーキテクチャを生成することができる。メトリックの例は、データスループット、レイテンシ、リソース利用、及び電力消費を含むことができるが、これらに限定されない。メトリック及びアプリケーション(例えば、DPEアレイ202に実装される特定のノード)に基づいて、DPEコンパイラ1602は、論理アーキテクチャを生成することができる。
【0144】
論理アーキテクチャは、アプリケーションの様々な部分によって必要とされるハードウェアリソースブロック情報を指定することができるファイル又はデータ構造である。例えば、論理アーキテクチャは、アプリケーションのソフトウェア部分を実装するのに必要なDPE204の数、DPEアレイ202と通信するためにPL214で必要な任意の知的財産(IP)コア、NoC208を介してルーティングされる必要がある任意の接続、及びDPEアレイ202、NoC208、及びPL214のIPコアのポート情報を指定することができる。IPコアは、特定の機能又は動作を実行することができる回路の再利用可能なブロックとして回路設計において使用され得る論理、セル、又はICレイアウト設計の再利用可能なブロック又は部分である。IPコアは、PL214内に実装するための回路設計に組み込むことができるフォーマットで指定することができる。本開示は様々なタイプのコアを指すが、他の修飾語を伴わない「コア」という用語は、そのような異なるタイプのコアを総称的に指すことを意図している。
【0145】
詳細な説明の最後にある本開示内の例1は、アプリケーションの論理アーキテクチャを指定するために使用され得る例示的なスキーマを示す。例1は、アプリケーションの論理アーキテクチャに含まれる様々な種類の情報を示す。一態様では、ハードウェアコンパイラ1606は、アプリケーション自体を使用するのではなく、論理アーキテクチャ及びSoCインターフェースブロック解に基づいて、又はそれを使用して、アプリケーションのハードウェア部分を実装することができる。
【0146】
DPEアレイ202のポート情報、並びにNoC208及びPL214内のIPコアのポート情報は、例えば、各ポートがストリームデータポートであるか、メモリマップドポートであるか、又はパラメータポートであるか、及びポートがマスタであるかスレーブであるかなど、ポートの論理構成を含むことができる。IPコアのポート情報の他の例は、ポートのデータ幅及び動作周波数を含む。DPEアレイ202、NoC208、及びPL214内のIPコア間の接続性は、論理アーキテクチャで指定されたそれぞれのハードウェアリソースブロックのポート間の論理接続として指定することができる。
【0147】
SoCインターフェースブロック解は、DPEアレイ202内外の接続のSoCインターフェースブロック206の物理データパス(例えば、物理リソース)へのマッピングを指定するデータ構造又はファイルである。例えば、SoCインターフェースブロック解は、DPEアレイ202に出入りするデータ転送に使用される特定の論理接続を、SoCインターフェースブロック206の特定のストリームチャネル、例えば、SoCインターフェースブロック206の特定のタイル、ストリームスイッチ、及び/又はストリームスイッチインターフェース(例えば、ポート)にマッピングする。詳細な説明の終わりに向かって例1の後にある例2は、アプリケーションのSoCインターフェースブロック解のための例示的なスキーマを示す。
【0148】
一態様では、DPEコンパイラ1602は、アプリケーション及び論理アーキテクチャに基づいて、NoC208上のデータトラフィックを分析又はシミュレートすることができる。DPEコンパイラ1602は、アプリケーションのソフトウェア部分のデータ転送要件、例えば「NoCトラフィック」をNoCコンパイラ1604に提供することができる。NoCコンパイラ1604は、DPEコンパイラ1602から受信したNoCトラフィックに基づいて、NoC208を通るデータパスのルーティングを生成することができる。「NoC解」として示されるNoCコンパイラ1604からの結果は、DPEコンパイラ1602に提供され得る。
【0149】
一態様では、NoC解は、NoC208に接続するアプリケーションのノードが接続されるべきNoC208の入口点及び/又は出口点のみを指定する初期NoC解であり得る。例えば、NoC208内のデータパス(例えば、入口点と出口点との間)のより詳細なルーティング及び/又は構成データは、コンパイラの収束の目的でNoC解から除外されてもよい。詳細な説明の終わりに向かって例2の後にある例3は、アプリケーションのNoC解のための例示的なスキーマを示す。
【0150】
ハードウェアコンパイラ1606は、論理アーキテクチャ上で動作して、アプリケーションのハードウェア部分をPL214に実装することができる。ハードウェアコンパイラ1606が、(例えば、タイミング、電力、データスループットなどのための)確立された設計制約を満たすアプリケーションのハードウェア部分の実装(例えば、論理アーキテクチャを使用する)を生成することができない場合、ハードウェアコンパイラ1606は、1つ以上のSoCインターフェースブロック制約を生成すること、及び/又は1つ以上のユーザ指定のSoCインターフェースブロック制約を受信することができる。ハードウェアコンパイラ1606は、SoCインターフェースブロック制約を要求としてDPEコンパイラ1602に提供することができる。SoCインターフェースブロック制約は、論理アーキテクチャの1つ以上の部分をSoCインターフェースブロック206の異なるストリームチャネルに効果的に再マッピングする。ハードウェアコンパイラ1606から提供されるSoCインターフェースブロック制約は、設計メトリックを満たすPL214内のアプリケーションのハードウェア部分の実装を生成するためにハードウェアコンパイラ1606にとってより有利である。例3に続いて詳細な説明の終わりにある例4は、アプリケーションのSoCインターフェースブロック及び/又はNoCの制約の例を示す。
【0151】
別の態様では、ハードウェアコンパイラ1606はまた、アプリケーション及び論理アーキテクチャに基づいてNoCトラフィックを生成し、NoCコンパイラ1604に提供することができる。ハードウェアコンパイラ1606は、例えば、アプリケーションのハードウェア部分を分析又はシミュレートして、NoC208を介してPS212、DPEアレイ202、及び/又はSoC200の他の部分に伝達される設計のハードウェア部分によって生成されたデータトラフィックを判定することができる。NoCコンパイラ1604は、ハードウェアコンパイラ1606から受信した情報に基づいてNoC解を生成及び/又は更新することができる。NoCコンパイラ1604は、NoC解又はその更新バージョンをハードウェアコンパイラ1606及びDPEコンパイラ1602に提供することができる。これに関して、DPEコンパイラ1602は、NoCコンパイラ1604からのNoC解又は更新されたNoC解の受信に応答して、及び/又はハードウェアコンパイラ1606からの1つ以上のSoCインターフェースブロック制約の受信に応答して、SoCインターフェースブロック解を更新し、更新された解をハードウェアコンパイラ1606に提供することができる。DPEコンパイラ1602は、ハードウェアコンパイラ1606から及び/又はNoCコンパイラ1604からの更新されたNoC解から受信したSoCインターフェースブロック制約に基づいて、更新されたSoCインターフェースブロック解を生成する。
【0152】
図16の例に示されるコンパイラ間のデータフローは、例示のみを目的としていることを理解されたい。これに関して、コンパイラ間の情報の交換は、本開示内で説明される例示的な設計フローの様々な段階で実行されてもよい。他の態様では、コンパイラ間の設計データの交換は、反復的な方法で実行されてもよく、その結果、各コンパイラは、他のコンパイラから受信した情報に基づいて、そのコンパイラによって処理されるアプリケーションの部分の実装を継続的に改良して、解に収束することができる。
【0153】
特定の一例では、ハードウェアコンパイラ1606は、DPEコンパイラ1602から論理アーキテクチャ及びSoCインターフェースブロック解を、NoCコンパイラ1604からNoC解を受信した後に、確立された設計メトリックを満たすアプリケーションのハードウェア部分の実装を生成することは不可能であると判定することができる。DPEコンパイラ1602によって生成された初期SoCインターフェースブロック解は、DPEアレイ202に実装されるアプリケーションの部分に関するDPEコンパイラ1602の知識に基づいて生成される。同様に、NoCコンパイラ1604によって生成された初期NoC解は、DPEコンパイラ1602によってNoCコンパイラ1604に提供された初期NoCトラフィックに基づいて生成される。例4に続いて詳細な説明の終わりにある例5は、アプリケーションのNoCトラフィックのための例示的なスキーマを示す。例1~5ではスキーマが使用されているが、図示された情報を指定するために他のフォーマット及び/又はデータ構造が使用されてもよいことを理解されたい。
【0154】
ハードウェアコンパイラ1606は、ハードウェア部分の合成(必要に応じて)、配置、及びルーティングを含むアプリケーションのハードウェア部分の実装フローを実行しようと試みる。したがって、初期SoCインターフェースブロック解及び初期NoC解は、確立されたタイミング制約を満たさないPL214内の配置及び/又はルートをもたらし得る。他の場合では、SoCインターフェースブロック解及びNoC解は、伝送されなければならないデータを収容するのに十分な数のワイヤなどの物理リソースを有しない場合があり、PL214における輻輳をもたらす。そのような場合、ハードウェアコンパイラ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は、ハードウェアコンパイラ1606から受信したSoCインターフェースブロック制約を取得し、可能であれば、受信したSoCインターフェースブロック制約を使用してSoCインターフェースブロック解を更新し、更新されたSoCインターフェースブロック解をハードウェアコンパイラ1606に戻すことができる。同様に、NoCコンパイラ1604は、ハードウェアコンパイラ1606から受信したNoC制約を取得し、可能であれば、受信したNoC制約を使用してNoC解を更新し、更新したNoC解をハードウェアコンパイラ1606に戻すことができる。次いで、ハードウェアコンパイラ1606は、実装フローを継続して、DPEコンパイラ1602から受信した更新されたSoCインターフェースブロック解及びNoCコンパイラ1604から受信した更新されたNoC解を使用して、PL214内に実装するためのアプリケーションのハードウェア部分を生成することができる。
【0156】
一態様において、それぞれ1つ以上のSoCインターフェースブロック制約及び1つ以上のNoC制約を提供することによってDPEコンパイラ1602及び/又はNoCコンパイラ1604を呼び出すハードウェアコンパイラ1606は、検証プロセスの一部であり得る。ハードウェアコンパイラ1606は、例えば、DPEコンパイラ1602及び/又はNoCコンパイラ1604から、ハードウェアコンパイラ1606から提供されたSoCインターフェースブロック制約及びNoC制約を使用できるか、又はルーティング可能なSoCインターフェースブロック解及び/又はNoC解に統合できるかを検証しようとしている。
【0157】
図17Aは、図1に関連して説明したシステムを使用してSoC200にマッピングされたアプリケーション1700の一例を示す。例示の目的のために、SoC200の異なるサブシステムのサブセットのみが示されている。アプリケーション1700は、示されている接続を有するノードA、B、C、D、E、及びFを含む。以下の例6は、アプリケーション1700を指定するために使用され得る例示的なソースコードを示す。
【0158】
【数1】
【0159】
一態様において、アプリケーション1700は、複数のノードを含むデータ・フロー・グラフとして指定される。各ノードは計算を表し、これは単一の命令ではなく関数に対応する。ノードは、データフローを表すエッジによって相互接続される。ノードのハードウェア実装は、そのノードへの各入力からのデータの受信に応答してのみ実行することができる。ノードは、一般に、非ブロッキング方式で実行する。アプリケーション1700によって指定されるデータ・フロー・グラフは、シーケンシャルプログラムではなく、SoC200に実装される並列仕様を表す。システムは、様々なノードをSoC200の適切なサブシステムにマッピングして実装するために、アプリケーション1700(例えば、例1に示すようなグラフ形式で)上で動作することができる。
【0160】
一例では、アプリケーション1700は、C及び/又はC++.などの高級プログラミング言語(HLL)で指定される。上述したように、シーケンシャルプログラムを作成するために従来使用されているHLLで指定されているが、データ・フロー・グラフであるアプリケーション1700は並列指定である。システムは、データ・フロー・グラフ、したがってアプリケーション1700を構築するために使用されるクラスライブラリを提供することができる。データ・フロー・グラフは、ユーザによって定義され、SoC200のアーキテクチャ上にコンパイルされる。クラスライブラリは、アプリケーション1700を構築するために使用することができるグラフ、ノード、及びエッジのための予め定義されたクラス及びコンストラクタを有するヘルパーライブラリとして実装することができる。アプリケーション1700は、SoC200上で効果的に実行され、SoC200のPS212内で実行される委譲されたオブジェクトを含む。PS212で実行されるアプリケーション1700のオブジェクトは、SoC200上、例えばPL214、DPEアレイ202、及び/又はハードワイヤード回路ブロック210で実行されている実際の計算を指示及び監視するために使用され得る。
【0161】
本開示内に記載された本発明の構成によれば、アクセラレータ(例えば、PLノード)は、データ・フロー・グラフ(例えば、アプリケーション)内のオブジェクトとして表すことができる。システムは、PLノードを自動的に合成し、PL214で実施するために合成されたPLノードを接続することができる。比較すると、従来のEDAシステムでは、ユーザは、順次セマンティクスを利用するハードウェア加速のためのアプリケーションを指定する。ハードウェア加速された関数は、関数呼び出しによって指定される。ハードウェア加速関数(例えば、この例におけるPLノード)へのインターフェースは、データ・フロー・グラフ上の接続とは対照的に、関数呼び出し及び関数呼び出しで提供される様々な引数によって定義される。
【0162】
例6のソースコードに示すように、ノードA及びFは、PL214内に実装するために指定され、ノードB、C、D、及びEは、DPEアレイ202内に実装するために指定される。ノードの接続性は、ソースコード内のデータ転送エッジによって指定される。例6のソースコードはまた、PS212で実行されるトップレベルのテストベンチ及び制御プログラムを指定する。
【0163】
図17Aに戻ると、アプリケーション1700は、SoC200.SoC200にマッピングされる。図示されているように、ノードA及びFは、PL214上にマッピングされる。網掛けのDPE204-13及び204-14は、ノードB、C、D、及びEがマッピングされるDPE204を表す。例えば、ノードB及びCはDPE204-13にマッピングされ、ノードD及びEはDPE204-4にマッピングされる。ノードA及びFは、PL214に実装され、PL214を介したルーティング、SoCインターフェースブロック206の特定のタイル及びスイッチ、介在するDPE204のDPEインターコネクト接続内のスイッチ、及び選択された隣接するDPE204の特定のメモリを使用して、DPE204-13及び204-44に接続される。
【0164】
DPE204-13のために生成されたバイナリは、DPE204-13がノードB及びCに対応する計算を実施するために必要なオブジェクトコードと、DPE204-13とDPE204-14との間及びDPE204-13とDPE204-3との間のデータパスを確立するための構成データとを含む。DPE204-4用に生成されたバイナリは、ノードD及びEに対応する計算を実施するためのDPE204-4用の必要なオブジェクトコードと、DPE204-14及びDPE204-5とのデータパスを確立するための構成データとを含む。
【0165】
DPE204-13及びDPE204-4をSoCインターフェースブロック206に接続するために、DPE204-3、204-5、204-6、204-7、204-8、及び204-9などの他のDPE204に対して他のバイナリが生成される。明らかに、そのようなバイナリは、そのような他のDPE204が他の計算(それに割り当てられたアプリケーションのノードを有する)を実装する場合、任意のオブジェクトコードを含む。
【0166】
この例では、ハードウェアコンパイラ1606は、DPE204-14とノードFとを接続する長いルートのために、タイミング制約を満たすハードウェア部分の実装を生成することができない。本開示では、アプリケーションのハードウェア部分の実装の特定の状態は、ハードウェア設計の状態と呼ばれる場合があり、ハードウェア設計は、実装フロー全体を通して生成及び/又は更新される。SoCインターフェースブロック解は、例えば、ノードFの信号交差をDPE204-9の下のSoCインターフェースブロックのタイルに割り当てることができる。その場合、ハードウェアコンパイラ1606は、ノードFに対するSoCインターフェースブロック206の交差をDPE204-4に近づけるように要求する要求されたSoCインターフェースブロック制約をDPEコンパイラ1602に提供することができる。例えば、ハードウェアコンパイラ1606から要求されたSoCインターフェースブロック制約は、DPE204-4の論理接続がSoCインターフェースブロック206内のDPE204-4の直下のタイルにマッピングされることを要求することができる。この再マッピングにより、ハードウェアコンパイラは、タイミングを改善するためにノードFをDPE204-4のはるかに近くに配置することができる。
【0167】
図17Bは、SoC200上へのアプリケーション1700の別の例示的なマッピングを示す。図17Bは、図17Aに示されているよりも代替的でより詳細な例を示す。例えば、図17Bは、DPEコンパイラ1602によって実行される、DPEアレイ202の特定のDPE204へのアプリケーション1700のノードのマッピング、アプリケーション1700のノードがマッピングされるDPE204間で確立される接続性、DPE204のメモリモジュール内のメモリのアプリケーション1700のノードへの割り当て、DPE204のメモリ及びコアインターフェース(例えば、428,430,432,434,402,404,406、及び408)へのデータ転送のマッピング(双頭矢印で表される)、及び/又はDPEインターコネクト306内のストリームスイッチを示す。
【0168】
図17Bの例では、メモリモジュール1702、1706、1710、1714、及び1718がコア1704、1708、1712、1716、及び1720と共に示されている。コア1704,1708,1712,1716,1720は、それぞれプログラムメモリ1722,1724,1726,1728,1730を含む。上の行では、コア1704及びメモリモジュール1706はDPE204を形成し、コア1708及びメモリモジュール1710は別のDPE204を形成する。下の行では、メモリモジュール1714及びコア1716はDPE204を形成し、メモリ1718及びコア1720は別のDPE204用である。
【0169】
図示されるように、ノードA及びFは、PL214にマッピングされる。ノード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に接続される。
【0170】
図17Bは、アプリケーションのノード間の接続性が、コア間でメモリを共有するメモリ及び/又はコアインターフェースを使用し、DPEインターコネクト306を使用して実装され得ることを示している。
【0171】
図18は、SoC200にマッピングされた別のアプリケーションの例示的な実施態様を示す。例示の目的のために、SoC200の異なるサブシステムのサブセットのみが示されている。この例では、それぞれPL214に実装されているノードA及びFへの接続は、NoC208を介してルーティングされる。NoC208は、入口/出口点1802,1804,1806,1808,1810,1812,1814,1816(例えば、NMU/NSU)を含む。図18の例は、ノードAが入口/出口点1802の比較的近くに配置され、揮発性メモリ134にアクセスするノードFが、入口/出口点1816に到達するためにPL214を通る長いルートを有する場合を示す。ハードウェアコンパイラ1606が入口/出口点1816の近くにノードFを配置することができない場合、ハードウェアコンパイラ1606は、更新されたNoC解をNoCコンパイラ1604に要求することができる。その場合、ハードウェアコンパイラ1606は、NoC制約を有するNoCコンパイラ1604を呼び出して、ノードFの異なる入口/出口点、例えば入口/出口点1812を指定する更新されたNoC解を生成することができる。ノードFの異なる入口/出口点は、ハードウェアコンパイラ1606が、更新されたNoC解で指定された新たに指定された入口/出口点により近いノードFを配置し、NoC208で利用可能なより高速なデータパスを利用することを可能にする。
【0172】
図19は、図1に関連して説明したシステムによって実行可能な別の例示的なソフトウェアアーキテクチャ1900を示す。例えば、アーキテクチャ1900は、図1のプログラムモジュール120のうちの1つ以上として実装されてもよい。図19の例では、アプリケーション1902は、SoC200内の実装を意図している。
【0173】
図19の例では、ユーザは、システムによって提供されるユーザインターフェース1906と対話することができる。ユーザインターフェース1906と対話する際に、ユーザは、アプリケーション1902、アプリケーション1902の性能及び分割制約1904、並びにベースプラットフォーム1908を指定又は提供することができる。
【0174】
アプリケーション1902は、SoC200において利用可能な異なるサブシステムにそれぞれ対応する複数の異なる部分を含み得る。アプリケーション1902は、例えば、例6に関連して説明したように指定することができる。アプリケーション1902は、DPEアレイ202に実装されるソフトウェア部分と、PL214に実装されるハードウェア部分とを含む。アプリケーション1902は、PS212に実装されるべき追加のソフトウェア部分と、NoC208に実装されるべき部分とを任意選択的に含んでもよい。
【0175】
(性能及び分割制約1904の)分割制約は、任意選択的に、アプリケーション1902の様々なノードが実装されるべき場所又はサブシステムを指定する。例えば、分割制約は、アプリケーション1902のノードごとに、ノードがDPEアレイ202に実装されるか、PL214に実装されるかを示すことができる。他の例では、位置制約は、カーネルのDPEへのマッピング、ネットワーク又はデータフローのストリームスイッチへのマッピング、及びバッファのDPEのメモリモジュール及び/又はメモリモジュールのバンクへのマッピングを実行するために、より具体的又は詳細な情報をDPEコンパイラ1602に提供することができる。
【0176】
例示的な例として、アプリケーションの実装は、特定のマッピングを必要とする場合がある。例えば、カーネルの複数のコピーがDPEアレイに実装され、カーネルの各コピーが異なるデータセット上で同時に動作するアプリケーションでは、DPEアレイの異なるDPEで実行されるカーネルのすべてのコピーについて、データセットを同じ相対アドレス(メモリ内の位置)に配置することが好ましい。これは、位置制約を使用して達成され得る。この条件がDPEコンパイラ1602によって支持されない場合、カーネルの各コピーは、DPEアレイ内の複数の異なるDPEにわたって同じプログラミングを複製するのではなく、別々に又は独立してプログラムされなければならない。
【0177】
別の例示的な例は、DPE間のカスケードインターフェースを利用するアプリケーションに位置制約を課すことである。カスケードインターフェースは各行で一方向に流れるため、カスケードインターフェースを使用して結合されたDPEのチェーンの開始は、欠落したカスケードインターフェースを有するDPE(例えば、角のDPE)又はDPEアレイの他の場所で容易に複製することができない位置(例えば、行内の最後のDPE)で開始しないことが好ましい場合がある。位置制約は、アプリケーションのDPEのチェーンの開始を特定のDPEで開始させることができる。
【0178】
(性能及び分割制約1904の)性能制約は、DPEアレイ202又はPL214のいずれにあるかにかかわらず、ノードの実装によって達成されるべき電力要件、待ち時間要件、タイミング、及び/又はデータスループットなどの様々なメトリックを指定することができる。
【0179】
ベースプラットフォーム1908は、SoC200が結合されている回路基板上の回路と対話及び/又は接続するSoC200に実装されるインフラストラクチャ回路の説明である。ベースプラットフォーム1908は、合成可能であってもよい。ベースプラットフォーム1908は、例えば、SoC200の外部から(例えば、SoC200の外部)信号を受信し、SoC200の外部のシステム及び/又は回路に信号を提供する、SoC200内に実装されるべき回路を指定する。一例として、ベースプラットフォーム1908は、図1のホストシステム102及び/又はコンピューティングノード100と通信するための周辺機器コンポーネント相互接続エクスプレス(PCIe)ノード、揮発性メモリ134及び/又は不揮発性メモリ136にアクセスするための1つ又は複数のメモリコントローラ、並びに/あるいはDPEアレイ202及び/又はPL214をPCIeノードと結合する内部インターフェースなどの他のリソースなどの回路リソースを指定することができる。ベースプラットフォーム1908によって指定される回路は、特定のタイプの回路基板が与えられたSoC200に実装され得る任意のアプリケーションに利用可能である。これに関して、ベースプラットフォーム1908は、SoC200が結合される特定の回路基板に固有である。
【0180】
一例では、分割器1910は、アプリケーション1902の各部分が実装されるSoC200のサブシステムに基づいて、アプリケーション1902の異なる部分を分離することができる。例示的な実装形態では、分割器1910は、アプリケーション1902の異なる部分(例えば、ノード)のうちのどれがSoC200の異なるサブシステムのそれぞれに対応するかを示す入力をユーザが提供するユーザ指示ツールとして実装される。提供される入力は、例えば、性能及び分割制約1904であってもよい。例示の目的のために、分割器1910は、アプリケーション1902を、PS212上で実行されるべきPS部分1912、DPEアレイ202上で実行されるべきDPEアレイ部分1914、PL214において実装されるべきPL部分1916、及びNoC208において実装されるNoC部分1936に分割する。一態様では、分割器1910は、PS部分1912、DPEアレイ部分1914、PL部分1916、及びNoC部分1936の各々を別個のファイル又は別個のデータ構造として生成することができる。
【0181】
図示されているように、異なるサブシステムに対応する異なる部分の各々は、サブシステム固有の異なるコンパイラによって処理される。例えば、PSコンパイラ1918は、PS部分1912をコンパイルして、PS212によって実行可能なオブジェクトコードを含む1つ以上のバイナリを生成することができる。DPEコンパイラ1602は、DPEアレイ部分1914をコンパイルして、異なるDPE204によって実行可能なオブジェクトコード、アプリケーションデータ、及び/又は構成データを含む1つ以上のバイナリを生成することができる。ハードウェアコンパイラ1606は、PL部分1916に対して実装フローを実行して、PL部分1916をPL部分214に実装するためにSoC200にロードされ得る構成ビットストリームを生成することができる。本明細書で定義される場合、「実装フロー」という用語は、場所及びルート並びに任意選択的に合成が行われるプロセスを意味する。NoCコンパイラ1604は、NoC208にロードされると、アプリケーション1902の様々なマスタ及びスレーブを接続するデータパスをその中に作成する、NoC208の構成データを指定するバイナリを生成することができる。コンパイラ1918、1602、1604、及び/又は1606によって生成されたこれらの異なる出力は、バイナリ及び構成ビットストリーム1924として示されている。
【0182】
特定の実施態様では、コンパイラ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を呼び出すことができる。
【0183】
結果として得られるバイナリ及び構成ビットストリーム1924は、様々な異なるターゲットのいずれかに提供され得る。例えば、結果として得られるバイナリ及び構成ビットストリーム1924は、シミュレーションプラットフォーム1926、ハードウェアエミュレーションプラットフォーム1928、RTLシミュレーションプラットフォーム1930、及び/又はターゲットIC 1932に提供することができる。RTLシミュレーションプラットフォーム1930の場合、ハードウェアコンパイラ1922は、RTLシミュレーションプラットフォーム1930でシミュレートすることができるPL部分1916のRTLを出力するように構成することができる。
【0184】
シミュレーションプラットフォーム1926、エミュレーションプラットフォーム1928、RTLシミュレーションプラットフォーム1930、及び/又はターゲットIC1932内のアプリケーション1902の実装から得られた結果を、性能プロファイラ及びデバッガ1934に提供することができる。性能プロファイラ及びデバッガ1934からの結果は、ユーザインターフェース1906に提供されてもよく、ユーザは、アプリケーション1902の実行及び/又はシミュレートの結果を見ることができる。
【0185】
図20は、SoC200においてアプリケーションを実装するために設計フローを実行する例示的な方法2000を示す。方法2000は、図1に関連して説明したシステムによって実行することができる。システムは、図16又は図19に関連して説明したようなソフトウェアアーキテクチャを実行することができる。
【0186】
ブロック2002において、システムはアプリケーションを受信する。アプリケーションは、SoC200のDPEアレイ202内に実装するためのソフトウェア部分と、SoC200のPL214内に実装するためのハードウェア部分とを指定することができる。
【0187】
ブロック2004において、システムは、アプリケーションの論理アーキテクチャを生成することができる。例えば、DPEコンパイラ1602は、システムによって実行されると、DPEアレイ202に実装されるアプリケーションのソフトウェア部分及び任意の高位のユーザ指定メトリックに基づいて論理アーキテクチャを生成することができる。DPEコンパイラ1602はまた、DPEアレイ202内外の接続のSoCインターフェースブロック206の物理データパスへのマッピングを指定するSoCインターフェースブロック解を生成することができる。
【0188】
別の態様では、論理アーキテクチャ及びSoCインターフェースブロック解を生成する際に、DPEコンパイラ1602は、DPEアレイ202に実装されるアプリケーションのノード(「DPEノード」と呼ばれる)の特定のDPE204への初期マッピングを生成することができる。DPEコンパイラ1602は、グローバルメモリ用のNoCトラフィックをNoCコンパイラ1604に提供することによって、グローバルメモリ(例えば、揮発性メモリ134)へのアプリケーションのグローバルメモリデータ構造の初期マッピング及びルーティングを任意選択的に生成する。説明したように、NoCコンパイラ1604は、受信したNoCトラフィックからNoC解を生成することができる。初期マッピング及びルーティングを使用して、DPEコンパイラ1602は、DPE部分をシミュレートして、DPE部分の初期実装を検証することができる。DPEコンパイラ1602は、シミュレーションによって生成されたデータを、SoCインターフェースブロック解で使用される各ストリームチャネルに対応するハードウェアコンパイラ1606に出力することができる。
【0189】
一態様では、論理アーキテクチャを生成することは、DPEコンパイラ1602によって実行されるように、図19に関連して前述した分割を実装する。様々な例示的なスキーマは、図19の異なるコンパイラ(DPEコンパイラ1602、ハードウェアコンパイラ1606、及びNoCコンパイラ1604)が、それぞれの各コンパイラに割り当てられたアプリケーションの部分をコンパイルしながら決定及び制約を交換する方法を示している。様々な例示的なスキーマは、決定及び/又は制約がどのようにSoC200の異なるサブシステムにわたって論理的に行われるかをさらに示す。
【0190】
ブロック2006において、システムは、ハードウェア部分のブロック図を構築することができる。例えば、ハードウェアコンパイラ1606は、システムによって実行されると、ブロック図を生成することができる。ブロック図は、論理アーキテクチャによって指定されるように、アプリケーションのハードウェア部分をSoC200のベースプラットフォームと結合する。例えば、ハードウェアコンパイラ1606は、ブロック図を生成する際に、ハードウェア部分とベースプラットフォームとを接続することができる。さらに、ハードウェアコンパイラ1606は、SoCインターフェースブロック解に基づいて、アプリケーションのハードウェア部分に対応するIPコアをSoCインターフェースブロックに接続するためのブロック図を生成することができる。
【0191】
例えば、論理アーキテクチャによって指定されるように、アプリケーションのハードウェア部分内の各ノードは、特定のRTLコア(例えば、カスタムRTLのユーザ提供又は指定された部分)又は利用可能なIPコアにマッピングされ得る。ノードからコアへのマッピングがユーザによって指定されると、ハードウェアコンパイラ1606は、ベースプラットフォームの様々な回路ブロック、論理アーキテクチャごとにDPEアレイ202とインターフェースするのに必要なPL214の任意のIPコア、及び/又はPL214に実装される任意の追加のユーザ指定IPコア及び/又はRTLコアを指定するためのブロック図を構築することができる。ユーザによって手動で挿入され得る追加のIPコア及び/又はRTLコアの例には、データ幅変換ブロック、ハードウェアバッファ、及び/又はクロックドメイン論理が含まれるが、これらに限定されない。一態様では、ブロック図の各ブロックは、PL214に実装される特定のコア(例えば、回路ブロック)に対応することができる。ブロック図は、SoCインターフェースブロック解及び論理アーキテクチャから決定される、PLに実装されるコアの接続性、並びにNoC208及び/又はSoCインターフェースブロック206の物理リソースとのコアの接続性を指定する。
【0192】
一態様において、ハードウェアコンパイラ1606は、論理アーキテクチャに従ってNoCトラフィックを作成し、かつNoCコンパイラ1604を実行してNoC解を取得することによって、PL214のコアとグローバルメモリ(例えば、揮発性メモリ134)との間の論理接続を作成することもできる。一例では、ハードウェアコンパイラ1606は、論理接続をルーティングして、ブロック図及び論理接続を実装するためのPL214の容量を検証することができる。別の態様では、ハードウェアコンパイラ1606は、実際のデータトラフィックを有するブロック図の機能を検証するために、シミュレーションの一部として、1つ以上のデータトラフィックジェネレータを有するSoCインターフェースブロックトレース(例えば、以下により詳細に説明する)を使用することができる。
【0193】
ブロック2008において、システムは、ブロック図の実装フローを実行する。例えば、ハードウェアコンパイラは、必要に応じて合成、配置、及びルーティングを含むブロック図の実装フローを実行して、SoC200にロードされてアプリケーションのハードウェア部分をPL214に実装することができる構成ビットストリームを生成することができる。
【0194】
ハードウェアコンパイラ1606は、SoCインターフェースブロック解及びNoC解を用いて、ブロック図の実装フローを実行することができる。例えば、SoCインターフェースブロック解は、特定のDPE204がPL214と通信するSoCインターフェースブロック206の特定のストリームチャネルを指定するので、プレーサは、SoCインターフェースブロック206を介してDPE204に接続するブロック図のブロックを、ブロックが接続するSoCインターフェースブロック206の特定のストリームチャネルの近く(例えば、特定の距離内)に配置することができる。ブロックのポートは、例えば、SoCインターフェースブロック解によって指定されたストリームチャネルと相関させることができる。ハードウェアコンパイラ1606はまた、SoCインターフェースブロック206から決定されたように、ポートに結合された特定のストリームチャネルに接続するPL214のBLIにポートから入力及び/又は出力される信号をルーティングすることによって、SoCインターフェースブロックに接続するブロック図のブロックのポート間の接続をルーティングすることができる。
【0195】
同様に、NoC解は、PL214内の回路ブロックが接続されるべき特定の入口/出口点を指定するので、プレーサは、NoC208への接続を有するブロック図のブロックを、ブロックが接続されるべき特定の入口/出口点の近く(例えば、特定の距離内)に配置することができる。ブロックのポートは、例えば、NoC解の入口/出口点と相関させることができる。ハードウェアコンパイラ1606はまた、NoC解から決定されたように、ポートに論理的に結合されたNoC208の入口/出口点にポートから入力及び/又は出力される信号をルーティングすることによって、NoC208の入口/出口点に接続するブロック図のブロックのポート間の接続をルーティングすることができる。ハードウェアコンパイラ1606はさらに、PL214内のブロックのポートを互いに接続する任意の信号をルーティングすることができる。しかしながら、いくつかの用途では、NoC208は、DPEアレイ202とPL214との間でデータを伝達するために使用されなくてもよい。
【0196】
ブロック2010において、実装フロー中、ハードウェアコンパイラは、DPEコンパイラ1602及び/又はNoCコンパイラ1604と設計データを任意選択的に交換する。例えば、ハードウェアコンパイラ1606、DPEコンパイラ1602、及びNoCコンパイラ1604は、図16に関連して説明したように、設計データを一度に、必要に応じて、又は反復的もしくは反復的に交換することができる。ブロック2010は、任意選択的に実行されてもよい。ハードウェアコンパイラ1606は、例えば、ブロック図の構築前又は構築中、配置前及び/又は配置中、及び/又はルーティング前及び/又はルーティング中に、DPEコンパイラ1602及び/又はNoCコンパイラ1604と設計データを交換することができる。
【0197】
ブロック2012において、システムは、ハードウェアコンパイラ1606によって生成された最終ハードウェア設計をハードウェアパッケージとしてエクスポートする。ハードウェアパッケージは、PL214をプログラムするために使用される構成ビットストリームを含む。ハードウェアパッケージは、アプリケーションのハードウェア部分に従って生成される。
【0198】
ブロック2014において、ユーザは、ハードウェアパッケージを使用して新しいプラットフォームを構成する。ユーザは、ユーザ提供の構成に基づいて新しいプラットフォームの生成を開始する。ハードウェアパッケージを使用してシステムによって生成されたプラットフォームは、アプリケーションのソフトウェア部分をコンパイルするために使用される。
【0199】
ブロック2016において、システムは、DPEアレイ202に実装するためにアプリケーションのソフトウェア部分をコンパイルする。例えば、システムは、DPEコンパイラ1602を実行して、DPEアレイ202の様々なDPE204にロードすることができる1つ以上のバイナリを生成する。DPE204のバイナリは、DPE204のオブジェクトコード、アプリケーションデータ、及び構成データを含むことができる。構成ビットストリーム及びバイナリが生成されると、システムは、構成ビットストリーム及びバイナリをSoC200にロードして、その中にアプリケーションを実装することができる。
【0200】
別の態様では、ハードウェアコンパイラ1606は、ハードウェア実装をDPEコンパイラ1602に提供することができる。DPEコンパイラ1602は、実装フローを実行する際にハードウェアコンパイラ1606によって依拠された最終的なSoCインターフェースブロック解を抽出することができる。DPEコンパイラ1602は、ハードウェアコンパイラ1606によって使用されるのと同じSoCインターフェースブロック解を使用してコンパイルを実行する。
【0201】
図20の例では、アプリケーションの各部分はサブシステム固有コンパイラによって解決される。コンパイラは、アプリケーションのために実装されるような様々なサブシステム(例えば、SoCインターフェースブロック)間のインターフェースが準拠し一貫していることを保証するために、例えば制約及び/又は提案された解などの設計データを通信することができる。図20には具体的に示されていないが、NoCコンパイラ1604はまた、アプリケーションで使用される場合、NoC208をプログラムするためのバイナリを生成するために呼び出されてもよい。
【0202】
図21は、SoC200においてアプリケーションを実装するために設計フローを実行する別の例示的な方法2100を示す。方法2100は、図1に関連して説明したシステムによって実行することができる。システムは、図16又は図19に関連して説明したようなソフトウェアアーキテクチャを実行することができる。方法2100は、システムがアプリケーションを受信するブロック2102で開始することができる。アプリケーションは、SoC200に実装されるデータ・フロー・グラフとして指定され得る。アプリケーションは、DPEアレイ202に実装するためのソフトウェア部分、PL214に実装するためのハードウェア部分、及びSoC200のNoC208に実装するためのデータ転送を含むことができる。アプリケーションはまた、PS212に実装するためのさらなるソフトウェア部分を含み得る。
【0203】
ブロック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インターフェースブロックを介したデータ転送を取り込むことができる。
【0204】
ブロック2104において、ハードウェアコンパイラ1606は、PL214に実装されるアプリケーションのハードウェア部分のブロック図を生成する。ハードウェアコンパイラ1606は、論理アーキテクチャ及びSoCインターフェースブロック解に基づいてブロック図を生成し、任意選択的に、論理アーキテクチャによって指定された回路ブロックを有するブロック図に含まれるべき、ユーザによって指定された追加のIPコアを生成する。一態様において、ユーザは、このような追加のIPコアを手動で挿入し、IPコアを論理アーキテクチャで指定されたハードウェア記述の他の回路ブロックに接続する。
【0205】
ブロック2106において、ハードウェアコンパイラ1606は、任意選択的に、1つ以上のユーザ指定のSoCインターフェースブロック制約を受信し、SoCインターフェースブロック制約をDPEコンパイラ1602に提供する。
【0206】
一態様では、アプリケーションのハードウェア部分を実装する前に、ハードウェアコンパイラ1606は、ブロック図及び論理アーキテクチャに基づいて、NoC208、DPEアレイ202、及びPL214の間に定義された物理接続を評価することができる。ハードウェアコンパイラ1606は、ブロック図のアーキテクチャシミュレーションを実行して、ブロック図(例えば、設計のPL部分)とDPEアレイ202及び/又はNoC208との間の接続を評価することができる。例えば、ハードウェアコンパイラ1606は、DPEコンパイラ1602によって生成されたSoCインターフェースブロックトレースを使用してシミュレーションを実行することができる。例示的かつ非限定的な例として、ハードウェアコンパイラ1606は、ブロック図のSystemCシミュレーションを実行することができる。シミュレーションでは、SoCインターフェースブロックトレースを使用して、PL214とDPEアレイ202(SoCインターフェースブロック206を介して)及び/又はNoC208との間のブロック図及びストリームチャネル(例えば、物理的接続)のデータトラフィックが生成される。シミュレーションは、ハードウェアコンパイラ1606に提供されるシステム性能及び/又はデバッグ情報を生成する。
【0207】
ハードウェアコンパイラ1606は、システムパフォーマンスデータを評価することができる。例えば、ハードウェアコンパイラ1606が、システムパフォーマンスデータから、アプリケーションのハードウェア部分の1つ以上の設計メトリックが満たされていないと判定した場合、ハードウェアコンパイラ1606は、ユーザの指示の下で、1つ以上のSoCインターフェースブロック制約を生成することができる。ハードウェアコンパイラ1606は、SoCインターフェースブロック制約を要求としてDPEコンパイラ1602に提供する。
【0208】
DPEコンパイラ1602は、アプリケーションのDPE部分の、ハードウェアコンパイラ1606によって提供されるSoCインターフェースブロック制約を利用するDPEアレイ202のDPE204への更新されたマッピングを実行することができる。例えば、PL214内のハードウェア部分がSoCインターフェースブロック206を介して直接(例えば、NoC208を横断せずに)DPEアレイ202に接続するアプリケーションが実装される場合、DPEコンパイラ1602は、NoCコンパイラ1604を介さずにハードウェアコンパイラ1606のための更新されたSoCインターフェースブロック解を生成することができる。
【0209】
ブロック2108において、ハードウェアコンパイラ1606は、任意選択的に、1つ以上のユーザ指定のNoC制約を受信し、検証のためにNoC制約をNoCコンパイラに提供する。ハードウェアコンパイラ1606はまた、NoCトラフィックをNoCコンパイラ1606に提供することができる。NoCコンパイラ1604は、受信したNoC制約及び/又はNoCトラフィックを使用して更新されたNoC解を生成することができる。例えば、PL214のハードウェア部分がNoC208を介してDPEアレイ202、PS212、ハードワイヤード回路ブロック210、又は揮発性メモリ134に接続するアプリケーションが実装される場合、ハードウェアコンパイラ1606は、NoC制約及び/又はNoCトラフィックをNoCコンパイラ1604に提供することによってNoCコンパイラ1604を呼び出すことができる。NoCコンパイラ1604は、更新されたNoC解として、NoC208を通るデータパスのルーティング情報を更新することができる。更新されたルーティング情報は、更新されたルート、及びルートの特定の入口/出口点を指定することができる。ハードウェアコンパイラ1606は、更新されたNoC解を取得し、それに応答して、DPEコンパイラ1602に提供される更新されたSoCインターフェースブロック制約を生成することができる。プロセスは、本質的に反復的であり得る。DPEコンパイラ1602及びNoCコンパイラ1604は、ブロック2106及び2108によって示されるように同時に動作することができる。
【0210】
ブロック2110において、ハードウェアコンパイラ1606は、ブロック図の合成を実行することができる。ブロック2112において、ハードウェアコンパイラ1606は、ブロック図の場所及びルートを実行する。ブロック2114において、場所及び/又はルートを実行しながら、ハードウェアコンパイラは、ブロック図の実装、例えば、実装フローのこれらの異なる段階のいずれかにおけるハードウェア部分(例えば、ハードウェア設計)の実装の現在の状態が、アプリケーションのハードウェア部分の設計メトリックを満たすかどうかを判定することができる。例えば、ハードウェアコンパイラ1606は、現在の実装が配置前、配置中、ルーティング前、又はルーティング中に設計メトリックを満たすかどうかを判定することができる。アプリケーションのハードウェア部分の現在の実装形態が設計メトリックを満たしていないと判定したことに応答して、方法2100はブロック2116に進む。そうでない場合、方法2100はブロック2120に進む。
【0211】
ブロック2116において、ハードウェアコンパイラは、DPEコンパイラ1602に1つ以上のユーザ指定のSoCインターフェースブロック制約を提供することができる。ハードウェアコンパイラ1606は、任意選択的に、NoCコンパイラ1604に1つ以上のNoC制約を提供することができる。説明したように、DPEコンパイラ1602は、ハードウェアコンパイラ1606から受信したSoCインターフェースブロック制約を使用して、更新されたSoCインターフェースブロック解を生成する。NoCコンパイラ1604は、任意選択的に、更新されたNoC解を生成する。例えば、DPEアレイ202とPL214との間の1つ以上のデータパスがNoC208を通って流れる場合、NoCコンパイラ1604を呼び出すことができる。ブロック2118において、ハードウェアコンパイラ1606は、更新されたSoCインターフェースブロック解及び任意選択的に更新されたNoC解を受信する。ブロック2118の後、方法2100はブロック2112に進み、ハードウェアコンパイラ1606は、更新されたSoCインターフェースブロック解及び任意選択的に更新されたNoC解を使用して配置及び/又はルーティングを実行し続ける。
【0212】
図21は、コンパイラ間の設計データの交換が反復的に実行され得ることを示している。例えば、場所及び/又はルート段階中の複数の異なる点のいずれかにおいて、ハードウェアコンパイラ1606は、アプリケーションのハードウェア部分の実装の現在の状態が確立された設計メトリックを満たすかどうかを判定することができる。満たさない場合、ハードウェアコンパイラ1606は、ハードウェアコンパイラ1606が配置及びルーティングの目的で使用する更新されたSoCインターフェースブロック解及び更新されたNoC解を取得するために、説明したように設計データの交換を開始することができる。ハードウェアコンパイラ1606は、NoC208の構成が更新される場合(例えば、PL214からのデータが、NoC208を介して他の回路ブロックに提供され、及び/又は他の回路ブロックから受信される)にNoCコンパイラ1604を呼び出すだけでよいことを理解されたい。
【0213】
ブロック2120において、アプリケーションのハードウェア部分が設計メトリックを満たす場合、ハードウェアコンパイラ1606は、PL214内のハードウェア部分の実装を指定する構成ビットストリームを生成する。ハードウェアコンパイラ1606はさらに、最終的なSoCインターフェースブロック解(例えば、場所及びルートのために使用されるSoCインターフェースブロック解)をDPEコンパイラ1602に提供し、NoCコンパイラ1604への配置及びルートに使用され得る最終的なNoC解を提供することができる。
【0214】
ブロック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をプログラムするために使用される最終バイナリを生成することができる。
【0215】
ブロック2124において、PSコンパイラ1918はPSバイナリを生成する。PSバイナリは、PS212が実行するオブジェクトコードを含む。PSバイナリは、例えば、PS212が実行する制御プログラムを実装し、アプリケーションが実装されたSoC200の動作を監視する。DPEコンパイラ1602はまた、PSコンパイラ1918によってコンパイルされ、かつPS212によって実行されてDPEアレイ202のDPE204に読み出し及び/又は書き込みすることができるDPEアレイドライバを生成することができる。
【0216】
ブロック2126において、システムは、構成ビットストリーム及びバイナリをSoC200に展開することができる。システムは、例えば、様々なバイナリ及び構成ビットストリームを、SoC200に提供され、SoC200にロードされてその中にアプリケーションを実装することができるPDIに結合することができる。
【0217】
図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は、アプリケーションのソフトウェア部分のマッピング及びルーティングを開始する前に再ルーティングが試みられる増分アプローチを示す。
【0218】
方法2200は、ハードウェアコンパイラ1606がDPEコンパイラ1602に1つ以上のSoCインターフェースブロック制約を提供するブロック2202で開始することができる。ハードウェアコンパイラ1606は、例えば、実装フロー中に、アプリケーションのハードウェア部分の設計メトリックが満たされていない、又は満たされないと判定したことに応答して、1つ以上のユーザ指定のSoCインターフェースブロック制約を受信し、及び/又は1つ以上のSoCインターフェースブロック制約を生成することができる。SoCインターフェースブロック制約は、アプリケーションのハードウェア部分の改善された結果の質(QoS)として得られると予想されるSoCインターフェースブロック206の物理ストリームチャネルへの論理リソースの好ましいマッピングを指定することができる。
【0219】
ハードウェアコンパイラ1606は、SoCインターフェースブロック制約をDPEコンパイラ1602に提供する。ハードウェアコンパイラ1606から提供されるSoCインターフェースブロック制約は、2つの異なるカテゴリに分類することができる。SoCインターフェースブロック制約の第1のカテゴリは、ハード制約である。SoCインターフェースブロック制約の第2のカテゴリは、ソフト制約である。ハード制約は、SoC200内でアプリケーションを実装するために満たされなければならない設計制約である。ソフト制約は、SoC200のためのアプリケーションの実装において違反され得る設計制約である。
【0220】
一例では、ハード制約は、PL214に実装されるアプリケーションのハードウェア部分に対するユーザ指定の制約である。ハード制約は、ユーザ指定の制約である位置、電力、タイミングなどの任意の利用可能な制約タイプを含むことができる。ソフト制約は、記載されているように論理リソースのSoCインターフェースブロック206のストリームチャネルへの特定のマッピングを指定する制約など、実装フロー全体を通してハードウェアコンパイラ1606及び/又はDPEコンパイラ1602によって生成される任意の利用可能な制約を含むことができる。
【0221】
ブロック2204において、DPEコンパイラ1602は、SoCインターフェースブロック制約の受信に応答して、受信したSoCインターフェースブロック制約を更新されたSoCインターフェースブロック解を生成する際に組み込むための検証プロセスを開始する。ブロック2206において、DPEコンパイラ1602は、アプリケーションのハードウェア部分に関連するハードウェアコンパイラ1606から受信したハード制約とソフト制約とを区別することができる。
【0222】
ブロック2208において、DPEコンパイラ1602は、ハードウェアコンパイラから提供されるハード制約及びソフト制約の両方に従いながら、アプリケーションのソフトウェア部分をルーティングする。DPEコンパイラ1602は、例えば、DPEアレイ202のDPE204間の接続及びDPE204とSoCインターフェースブロック206との間のデータパスをルーティングして、SoCインターフェースブロック206のどのストリームチャネル(例えば、タイル、ストリームスイッチ、及びポート)がDPEアレイ202とPL214及び/又はNoC208との間のデータパス交差に使用されるかを判定することができる。DPEコンパイラ1602が、ハード制約及びソフト制約の両方に従いながら、DPEアレイ202に実装するためにアプリケーションのソフトウェア部分のルーティングに成功した場合、方法2200はブロック2218に進む。DPEコンパイラ1602が、例えば制約がルーティング不可能であるなど、ハード制約及びソフト制約の両方に従いながらDPEアレイ内のアプリケーションのソフトウェア部分のためのルートを生成することができない場合、方法2200はブロック2210に進む。
【0223】
ブロック2210において、DPEコンパイラ1602は、ハード制約のみに従いながらアプリケーションのソフトウェア部分をルーティングする。ブロック2210において、DPEコンパイラ1602は、ルーティング動作の目的のためにソフト制約を無視する。DPEコンパイラ1602が、ハード制約のみに従いながらDPEアレイ202に実装するためにアプリケーションのソフトウェア部分のルーティングに成功した場合、方法2200はブロック2218に進む。DPEコンパイラ1602が、ハード制約のみに従いながらDPEアレイ202内のアプリケーションのソフトウェア部分のためのルートを生成することができない場合、方法2200はブロック2212に進む。
【0224】
ブロック2208及び2210は、ハードウェアコンパイラ1606から提供されるSoCインターフェースブロック制約を使用して、更新されたSoCインターフェースブロック解を、実行されるDPEノードのフルマップ(例えば、場所)及びルートよりも短い時間で作成しようとする検証動作のための手法を示す。したがって、ブロック2208及び2210は、DPEノードをDPEアレイ202のDPE204にマッピング(例えば、再マッピング)又は「配置」しようと試みることなく、ルーティングのみを含む。
【0225】
方法2200は、ルーティングのみではハードウェアコンパイラからのSoCインターフェースブロック制約を使用して更新されたSoCインターフェースブロック解に到達することができない場合、ブロック2212に進む。ブロック2212において、DPEコンパイラ1602は、ハード制約及びソフト制約の両方を使用して、アプリケーションのソフトウェア部分をDPEアレイ202内のDPEにマッピングすることができる。DPEコンパイラ1602はまた、SoC200のアーキテクチャ(例えば、接続性)でプログラムされる。DPEコンパイラ1602は、SoCインターフェースブロック206の物理チャネルへ(例えば、ストリームチャネルへ)の論理リソースの実際の割り当てを実行し、SoC200のアーキテクチャ接続をモデル化することもできる。
【0226】
一例として、PLノードBと通信するDPEノードAを考える。ブロック図の各ブロックは、PL214に実装される特定のコア(例えば、回路ブロック)に対応することができる。PLノードBは、SoCインターフェースブロック206内の物理チャネルXを介してDPEノードAと通信する。物理チャネルXは、DPEノードAとPLノードBとの間のデータストリームを搬送する。DPEコンパイラ1602は、DPE Yと物理チャネルXとの間の距離が最小になるように、DPEノードAを特定のDPE Yにマッピングすることができる。
【0227】
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は、PL214(例えば、代わりに他のDPE204に接続するノード)への接続(例えば、直接接続)を有しないDPEノードを、SoCインターフェースブロック206の未接続タイルの上方に位置するDPEアレイ202の列にマッピングする。
【0228】
ブロック2214において、DPEコンパイラ1602は、ハード制約のみに従いながら、アプリケーションの再マッピングされたソフトウェア部分をルーティングする。DPEコンパイラ1602が、ハード制約のみに従いながらDPEアレイ202に実装するためにアプリケーションの再マッピングされたソフトウェア部分のルーティングに成功した場合、方法2200はブロック2218に進む。DPEコンパイラ1602が、ハード制約のみに従いながらDPEアレイ202内のアプリケーションのソフトウェア部分のためのルートを生成することができない場合、方法2200はブロック2216に進む。ブロック2216において、DPEコンパイラ1602は、検証動作が失敗したことを示す。DPEコンパイラ1602は、通知を出力してもよく、通知をハードウェアコンパイラ1606に提供してもよい。
【0229】
ブロック2218において、DPEコンパイラ1602は、更新されたSoCインターフェースブロック解及び更新されたSoCインターフェースブロック解のスコアを生成する。DPEコンパイラ1602は、ブロック2208、ブロック2210、又はブロック2212及び2214で決定された更新されたルーティング又は更新されたマッピング及びルーティングに基づいて、更新されたSoCインターフェースブロック解を生成する。
【0230】
DPEコンパイラ1602によって生成されたスコアは、実行されたマッピング及び/又はルーティング動作に基づくSoCインターフェースブロック解の品質を示す。一実装例では、DPEコンパイラ1602は、いくつのソフト制約が満たされなかったか、及びソフト制約で要求されたストリームチャネルと更新されたSoCインターフェースブロック解で割り当てられた実際のチャネルとの間の距離に基づいてスコアを決定する。満たされていないソフト制約の数及び距離は、例えば、両方ともスコアに反比例し得る。
【0231】
別の例示的な実装形態では、DPEコンパイラ1602は、1つ以上の設計コストメトリックを使用して、更新されたSoCインターフェースブロック解の品質に基づいてスコアを決定する。これらの設計コストメトリックは、SoCインターフェースブロック解によってサポートされるデータ移動の数、メモリコンフリクトコスト、及びルートのレイテンシを含み得る。一態様では、DPEアレイ202におけるデータ移動の数は、SoCインターフェースブロック206を介してデータを転送するために必要なDMA転送の数に加えて、DPEアレイ202で使用されるDMA転送の数によって定量化することができる。メモリコンフリクトコストは、各メモリバンクの同時アクセス回路(例えば、DPE又はDMA)の数に基づいて決定することができる。ルートのレイテンシは、SoCインターフェースブロック206ポートと個々のソース又は宛先DPE204との間でデータを転送するために必要な最小サイクル数によって定量化することができる。DPEコンパイラ1602は、設計コストメトリックが低い(例えば、設計コスト指標の合計がより低い)場合、より高いスコアを決定する。
【0232】
別の例示的な実装形態では、更新されたSoCインターフェースブロック解の総スコアは、分数(例えば、80/100)として計算され、分子は、追加のDMA転送の数、各メモリバンクの同時アクセス回路の数が2を超えること、及びSoCインターフェースブロック206ポートとDPE204コアとの間のルートに必要なホップ数の合計によって100から減少する。
【0233】
ブロック2220において、DPEコンパイラ1602は、更新されたSoCインターフェースブロック解及びスコアをハードウェアコンパイラ1606に提供する。ハードウェアコンパイラ1606は、各SoCインターフェースブロック解のスコアに基づいて、DPEコンパイラ1602から受信した様々なSoCインターフェースブロック解を評価することができる。一態様において、ハードウェアコンパイラ1606は、例えば、従来のSoCインターフェースブロック解を保持することができる。ハードウェアコンパイラ1606は、更新されたSoCインターフェースブロック解のスコアを以前の(例えば、直前のSoCインターフェースブロック解の)スコアと比較し、更新されたSoCインターフェースブロック解のスコアが以前のSoCインターフェースブロック解のスコアを超える場合、更新されたSoCインターフェースブロック解を使用することができる。
【0234】
別の例示的な実装形態では、ハードウェアコンパイラ1606は、80/100のスコアを有するDPEコンパイラ1602からSoCインターフェースブロック解を受信する。ハードウェアコンパイラ1606は、PL214内のアプリケーションのハードウェア部分の実装に到達することができず、DPEコンパイラ1602に1つ以上のSoCインターフェースブロック制約を提供する。ハードウェアコンパイラ1606がDPEコンパイラ1602から受信した更新されたSoCインターフェースブロック解は、20/100のスコアを有する。その場合、新しく受信されたSoCインターフェースブロック解のスコアが以前のSoCインターフェースブロック解のスコアを超えない(例えば、より低い)と判定したことに応答して、ハードウェアコンパイラ1606は、SoCインターフェースブロック制約のうちの1つ以上を緩和し(例えば、ソフト制約)、緩和された制約を含むSoCインターフェースブロック制約をDPEコンパイラ1602に提供する。DPEコンパイラ1602は、緩和された設計制約を考慮して、20/100及び/又は80/100より高いスコアを有する別のSoCインターフェースブロック解を生成しようと試みる。
【0235】
別の例では、ハードウェアコンパイラ1606は、より高い又は最高のスコアを有する従来のSoCインターフェースブロック解を使用することを選択することができる。ハードウェアコンパイラ1606は、例えば、直前のSoCインターフェースブロック解よりも低いスコアを有するSoCインターフェースブロック解を受信したことに応答して、又はSoCインターフェースブロック制約のうちの1つ以上が緩和された後に以前のSoCインターフェースブロック解よりも低いスコアを有するSoCインターフェースブロック解を受信したことに応答してなど、任意の時点で以前のSoCインターフェースブロック解に戻ることができる。
【0236】
図23は、SoCインターフェースブロック解を処理する例示的な方法2300を示す。方法2300は、受信したSoCインターフェースブロック解を評価し、アプリケーションのハードウェア部分で実装フローを実行する際に使用するための、現在の最良のSoCインターフェースブロック解と呼ばれるSoCインターフェースブロック解を選択するために、ハードウェアコンパイラ1606によって実行することができる。
【0237】
ブロック2302において、ハードウェアコンパイラ1606は、DPEコンパイラ1602からSoCインターフェースブロック解を受信する。ブロック2302で受信されるSoCインターフェースブロック解は、DPEコンパイラ1602から提供される初期又は最初のSoCインターフェースブロック解であってもよい。SoCインターフェースブロック解をハードウェアコンパイラ1606に提供する際に、DPEコンパイラ1602は、SoCインターフェースブロック解のスコアをさらに提供する。少なくとも最初に、ハードウェアコンパイラ1606は、現在の最良のSoCインターフェースブロック解に対する最初のSoCインターフェースブロック解を選択する。
【0238】
ブロック2304において、ハードウェアコンパイラ1606は、任意選択的にユーザから1つ以上のハードSoCインターフェースブロック制約を受信する。ブロック2306において、ハードウェアコンパイラは、アプリケーションのハードウェア部分を実装するための1つ以上のソフトSoCインターフェースブロック制約を生成することができる。ハードウェアコンパイラは、ハードウェア設計メトリックを満たすために、ソフトSoCインターフェースブロック制約を生成する。
【0239】
ブロック2308において、ハードウェアコンパイラ1606は、検証のためにSoCインターフェースブロック制約(例えば、ハード及びソフトの両方)をDPEコンパイラ1602に送信する。SoCインターフェースブロック制約の受信に応答して、DPEコンパイラは、ハードウェアコンパイラ1606から受信したSoCインターフェースブロック制約に基づいて、更新されたSoCインターフェースブロック解を生成することができる。DPEコンパイラ1602は、更新されたSoCインターフェースブロック解をハードウェアコンパイラ1606に提供する。したがって、ブロック2310において、ハードウェアコンパイラは、更新されたSoCインターフェースブロック解を受信する。
【0240】
ブロック2312において、ハードウェアコンパイラ1606は、更新されたSoCインターフェースブロック解(例えば、最後に受信されたSoCインターフェースブロック解)のスコアを最初の(例えば、以前に受信された)SoCインターフェースブロック解のスコアと比較する。
【0241】
ブロック2314において、ハードウェアコンパイラ1606は、更新された(例えば、最後に受信された)SoCインターフェースブロック解のスコアが、以前に受信された(例えば、最初の)SoCインターフェースブロック解のスコアを超えるかどうかを判定する。ブロック2316において、ハードウェアコンパイラ1606は、現在の最良のSoCインターフェースブロック解として、最後に受信された(例えば、更新された)SoCインターフェースブロック解を選択する。
【0242】
ブロック2318において、ハードウェアコンパイラ1606は、改善目標が達成されたか、又は予定時間を超過したかどうかを判定する。例えば、ハードウェアコンパイラ1606は、アプリケーションのハードウェア部分の現在の実装状態がより多くの設計メトリックを満たしているかどうか、及び/又は1つ以上の設計メトリックを満たすように近づいているかどうかを判定することができる。ハードウェアコンパイラ1606はまた、予定時間が超過されたかどうかを、場所及び/又はルートに費やされた処理時間の量、並びにその時間が最大配置時間、最大ルート時間、又は場所とルートの両方の最大時間を超過したかどうかに基づいて判定することができる。改善目標に達した、又は予定時間を超えたと判定したことに応答して、方法2300はブロック2324に進む。そうでない場合、方法2300はブロック2320に進む。
【0243】
ブロック2324において、ハードウェアコンパイラ1606は、アプリケーションのハードウェア部分を実装するために現在の最良のSoCインターフェースブロック解を使用する。
【0244】
ブロック2320に進み、ハードウェアコンパイラ1606は、SoCインターフェースブロック制約のうちの1つ以上を緩和する。ハードウェアコンパイラ1606は、例えば、ソフト制約のうちの1つ以上を緩和又は変更することができる。ソフトSoCインターフェースブロック制約を緩和又は変更する例は、ソフトSoCインターフェースブロック制約を除去する(例えば、削除する)ことを含む。ソフトSoCインターフェースブロック制約を緩和又は変更する別の例は、ソフトSoCインターフェースブロック制約を異なるSoCインターフェースブロック制約と置換することを含む。置換ソフトSoCインターフェースブロック制約は、置換される元のものよりも厳しくない場合がある。
【0245】
ブロック2322において、ハードウェアコンパイラ1606は、緩和されたSoCインターフェースブロック制約を含むSoCインターフェースブロック制約をDPEコンパイラ1602に送信することができる。ブロック2322の後、方法2300はブロック2310にループバックして、説明したように処理を継続する。例えば、DPEコンパイラは、ブロック2322においてハードウェアコンパイラから受信したSoCインターフェースブロック制約に基づいて、さらに更新されたSoCインターフェースブロック解を生成する。ブロック2310において、ハードウェアコンパイラは、さらなる更新されたSoCインターフェースブロック解を受信する。
【0246】
方法2300は、実装フロー及びSoCインターフェースブロック制約が緩和され得る状況を実行するために使用するためのDPEコンパイラ1602からSoCインターフェースブロック解を選択する例示的なプロセスを示す。ハードウェアコンパイラ1606は、調整及び/又は検証プロセスの一部として更新されたSoCインターフェースブロック解を取得するために、実装フロー中の様々な異なる時点のいずれかでDPEコンパイラ1602にSoCインターフェースブロック制約を提供することができることを理解されたい。例えば、ハードウェアコンパイラ1606が、(例えば、タイミング、電力、又は他のチェックもしくは分析に基づいて)アプリケーションのハードウェア部分の実装が、その現在の状態において、アプリケーションの設計メトリックを満たしていない又は満たさないと判定した任意の時点において、ハードウェアコンパイラ1606は、更新されたSoCインターフェースブロック制約をDPEコンパイラ1602に提供することによって、更新されたSoCインターフェースブロック解を要求することができる。
【0247】
図24は、SoC200に実装するためのアプリケーション2400の別の例を示す。アプリケーション2400は、有向フローグラフとして指定される。ノードは、PLノード、DPEノード、及びI/Oノードを区別するために、異なる陰影及び形状である。図示の例では、I/Oノードは、SoCインターフェースブロック206にマッピングされてもよい。PLノードはPLに実装される。DPEノードは特定のDPEにマッピングされる。その全体が示されていないが、アプリケーション2400は、DPE204にマッピングされる36個のカーネル(例えば、ノード)、DPEアレイデータストリームに対する72個のPL、及びPLデータストリームに対する36個のDPEアレイを含む。
【0248】
図25は、DPEコンパイラ1602によって生成されたSoCインターフェースブロック解の例示的な図である。図25のSoCインターフェースブロック解は、DPEコンパイラ1602によって生成され、ハードウェアコンパイラ1606に提供され得る。図25の例は、DPEコンパイラ1602がDPEノードのDPEアレイ202のDPE204への初期マッピングを生成するシナリオを示している。さらに、DPEコンパイラ1602は、DPEノードの初期マッピングを正常にルーティングする。図25の例では、DPEアレイ202の列6~17のみが示されている。さらに、各列は4つのDPE204を含む。
【0249】
図25は、DPEアレイ202のDPE204へのDPEノードのマッピング、及びSoCインターフェースブロック206ハードウェアへのデータストリームのルーティングを示す。DPEコンパイラ1602によって決定された、アプリケーション2400のDPEノード0~35のDPE204へのマッピングは、DPEアレイ202を参照して示されている。DPEとSoCインターフェースブロック206の特定のタイルとの間のデータストリームのルーティングは、矢印の集合として示されている。図25図30を説明する際の例示目的のために、図25に表示されるキーは、ソフト制約、ハード制約、及び適用可能な制約を有さないデータストリームによって制御されるデータストリームを区別するために使用される。
【0250】
図25図30を参照すると、ソフト制約は、DPEコンパイラ1602及び/又はハードウェアコンパイラ1606によって決定されたルーティングに対応し、ハード制約は、ユーザ指定のSoCインターフェースブロック制約を含むことができる。図25に示す制約はすべてソフト制約である。図25の例は、DPEコンパイラ1602が初期SoCインターフェースブロック解の決定に成功した場合を示している。一態様では、DPEコンパイラ1602は、ある列から別の列へと行DPE204に沿って(例えば、左から右へ)移動する他のルートの使用を試みる前に、少なくとも最初に、示されているようにSoCインターフェースブロック解のための垂直ルートの使用を試みるように構成され得る。
【0251】
図26は、DPEコンパイラ1602によって受信されたルーティング可能なSoCインターフェースブロック制約の一例を示す。DPEコンパイラ1602は、更新されたSoCインターフェースブロック制約の形態で更新されたルーティングを指定する更新されたSoCインターフェースブロック解を生成することができる。図26の例では、より多くのSoCインターフェースブロック制約がハード制約である。この例では、DPEコンパイラ1602は、示されている各タイプの制約を観察しながら、DPEアレイ202のデータストリームのルーティングに成功する。
【0252】
図27は、DPEコンパイラ1602によって観察されることになるルーティング不可能なSoCインターフェースブロック制約の例を示す。DPEコンパイラ1602は、図27に示す制約を観測するSoCインターフェースブロック解を生成することができない。
【0253】
図28は、DPEコンパイラ1602が図27からのソフトタイプSoCインターフェースブロック制約を無視する例を示す。図28の例では、DPEコンパイラ1602は、ハード制約のみを使用して、DPEアレイ202に実装するためにアプリケーションのソフトウェア部分を正常にルーティングする。制約によって制御されないこれらのデータストリームは、DPEコンパイラ1602が適合すると考えるか、そうすることができる任意の方法でルーティングすることができる。
【0254】
図29は、ルーティング不可能なSoCインターフェースブロック制約の別の例を示す。図29の例は、ハード制約のみを有する。このように、DPEコンパイラ1602は、ハード制約を無視することができず、マッピング(又は再マッピング)動作を開始する。
【0255】
図30は、図29のDPEノードの例示的なマッピングを示す。この例では、再マッピングに続いて、DPEコンパイラ1602は、更新されたSoCインターフェースブロック解を生成するためにDPEノードを正常にルーティングすることができる。
【0256】
図31は、ルーティング不可能なSoCインターフェースブロック制約の別の例を示す。図31の例は、ハード制約のみを有する。このように、DPEコンパイラ1602は、ハード制約を無視することができず、マッピング動作を開始する。例示の目的のために、DPEアレイ202は、3行のDPE(例えば、各列に3つのDPE)のみを含む。
【0257】
図32は、図31のDPEノードの例示的なマッピングを示す。図32は、図31に関連して説明したように開始された再マッピング動作から得られた結果を示す。この例では、再マッピングに続いて、DPEコンパイラ1602は、アプリケーションのソフトウェア解を正常にルーティングして、更新されたSoCインターフェースブロック解を生成することができる。
【0258】
一態様では、システムは、マッピング問題の整数線形計画法(ILP)定式化を生成することによって、図25図32に示すマッピングを実行することができる。ILP定式化は、マッピング問題を定義する複数の異なる変数及び制約を含むことができる。このシステムは、コストを最小限に抑えながらILP定式化を解くことができる。コストは、使用されるDMAエンジンの数に少なくとも部分的に基づいて決定され得る。このようにして、システムは、DFGをDPEアレイにマッピングすることができる。
【0259】
別の態様では、システムは、優先度の高い順にDFGのノードを順序付けることができる。システムは、1つ以上の要因に基づいて優先順位を決定することができる。要因の例は、限定はしないが、DFGグラフ内のノードの高さ、ノードの合計次数(例えば、ノードに出入りするすべてのエッジの合計)、及び/又はメモリ、ストリーム、カスケードなどのノードに接続されたエッジのタイプを含むことができる。システムは、アフィニティ及び有効性に基づいて利用可能な最良のDPE上にノードを配置することができる。システムは、このノードのすべてのリソース要件を所与のDPE(例えば、計算リソース、メモリバッファ、ストリームリソース)で満たすことができるかどうかに基づいて有効性を判定することができる。システムは、1つ以上の他の因子に基づいてアフィニティを決定することができる。アフィニティ係数の例は、DMA通信を最小限に抑えるためにこのノードの隣接ノードが既に配置されている同じDPE又は隣接DPEにノードを配置すること、このノードがカスケードチェーンの一部であるかどうかなどのアーキテクチャ上の制約、及び/又は最大限に自由なリソースを有するDPEを見つけることを含むことができる。すべての制約が満たされた状態でノードが配置された場合、システムは、そのようなノードが次に処理されるように、配置されたノードの隣接ノードの優先度を高めることができる。利用可能な配置が現在のノードに有効でない場合、システムは、このノードのための空間を作るために、いくつかの他のノードをそれらの最良の候補DPEから配置解除しようと試みることができる。システムは、配置解除されたノードが再び配置されるように優先度キューに戻すことができる。システムは、実行された配置及び非配置の総数を追跡することによって、良好な解を見つける際に費やされる総労力を制限することができる。しかしながら、他のマッピング技術が使用されてもよく、本明細書で提供される例は限定を意図するものではないことを理解されたい。
【0260】
図33は、図1に関連して説明したシステムによって実行可能な別の例示的なソフトウェアアーキテクチャ3300を示す。例えば、図33のアーキテクチャ3300は、図1のプログラムモジュール120のうちの1つ以上として実装されてもよい。図33の例示的なソフトウェアアーキテクチャ3300は、アプリケーション、例えばデータ・フロー・グラフが、PL214に実装するための1つ以上の高位合成(HLS)カーネルを指定する場合に使用することができる。例えば、アプリケーションのPLノードは、HLS処理を必要とするHLSカーネルを参照する。一態様において、HLSカーネルは、C及び/又はC++.などの高級言語(HLL)で指定される。
【0261】
図33の例では、ソフトウェアアーキテクチャ3300は、DPEコンパイラ1602、ハードウェアコンパイラ1606、HLSコンパイラ3302、及びシステムリンカ3304を含む。NoCコンパイラ1604は、本開示内で前述したように、検証チェック3306を実行するためにDPEコンパイラ1602と共に含まれ使用され得る。
【0262】
図示されるように、DPEコンパイラ1602は、アプリケーション3312、SoCアーキテクチャ記述3310、及び任意選択的にテストベンチ3314を受信する。説明したように、アプリケーション3312は、並列実行セマンティクスを含むデータ・フロー・グラフとして指定することができる。アプリケーション3312は、相互接続されたPLノード及びDPEノードを含み、実行時パラメータを指定することができる。この例では、PLノードは、HLSカーネルを参照する。SoCアーキテクチャ記述3310は、DPEアレイ202のサイズ及び寸法、PL214及びその中で利用可能な様々なプログラマブル回路ブロックのサイズ、PS212に含まれるプロセッサ及び他のデバイスのタイプなどのPS212のタイプ、並びにアプリケーション3312が実装されるSoC200内の回路の他の物理的特性などの情報を指定するデータ構造又はファイルであってもよい。SoCアーキテクチャ記述3310はまた、そこに含まれるサブシステム間の接続性(例えば、インターフェース)を指定することができる。
【0263】
DPEコンパイラ1602は、HLSカーネルをHLSコンパイラ3302に出力することができる。HLSコンパイラ3302は、HLLで指定されたHLSカーネルを、ハードウェアコンパイラが合成可能なHLS IPに変換する。例えば、HLS IPは、レジスタ転送レベル(RTL)ブロックとして指定されてもよい。HLSコンパイラ3302は、例えば、HLSカーネル毎にRTLブロックを生成する。図示されているように、HLSコンパイラ3302は、HLS IPをシステムリンカ3304に出力する。
【0264】
DPEコンパイラ1602は、初期SoCインターフェースブロック解及び接続グラフなどの追加の出力を生成する。DPEコンパイラ1602は、システムリンカ3304に接続グラフを出力し、ハードウェアコンパイラ1606にSoCインターフェースブロック解を出力する。接続グラフは、PL214に実装されるHLSカーネルに対応するノード(現在はHLS IPに変換されている)と、DPEアレイ202に実装されるノードとの間の接続性を指定する。
【0265】
図示されているように、システムリンカ3304は、SoCアーキテクチャ記述3310を受信する。システムリンカ3304はまた、DPEコンパイラ1602を介して処理されないアプリケーション3312から直接、1つ以上のHLS及び/又はRTLブロックを受信することができる。システムリンカ3304は、受信したHLS及び/又はRTLブロック、HLS IP、並びにIPカーネル間の接続性及びIPカーネルとDPEノードとの間の接続性を指定する接続グラフを使用して、アプリケーションのハードウェア部分に対応するブロック図を自動的に生成することができる。一態様では、システムリンカ3304は、ブロック図をSoC200のベースプラットフォーム(図示せず)と統合することができる。例えば、システムリンカ3304は、ブロック図をベースプラットフォームに接続して、統合ブロック図をもたらすことができる。ブロック図及び接続されたベースプラットフォームは、合成可能ブロック図と呼ばれる場合がある。
【0266】
別の態様では、SDFグラフ内のカーネルとして参照されるHLS IP及びRTL IP(例えば、アプリケーション3312)は、DPEコンパイラ1602の外部のIPにコンパイルすることができる。コンパイルされたIPをシステムリンカ3304に直接提供することができる。システムリンカ3304は、提供されたIPを使用して、アプリケーションのハードウェア部分に対応するブロック図を自動的に生成することができる。
【0267】
一態様では、システムリンカ3304は、元のSDF(例えば、アプリケーション3312)及び生成された接続グラフから導出された追加のハードウェア特有の詳細をブロック図内に含めることができる。例えば、アプリケーション3312は、実際のHLSモデルであるソフトウェアモデルを含み、そのようなIPのデータベースにおいて、何らかの仕組みを用いて(例えば、名前又は他のマッチング/相関技術によって)、IPに変換したり、IPに相関(例えば、一致)したりすることができるので、システムリンカ3304は、ブロック図を(例えば、ユーザの介入なしで)自動的に生成することができる。この例では、カスタムIPは使用されない場合がある。ブロック図を自動的に生成する際に、システムリンカ3304は、データ幅変換ブロック、ハードウェアバッファ、及び/又は本明細書に記載の他の場合ではユーザによって手動で挿入及び接続されたクロックドメイン交差論理などの1つ以上の追加の回路ブロックを自動的に挿入することができる。システムリンカ3304は、例えば、データタイプ及びソフトウェアモデルを分析して、記載されているように、接続グラフによって指定される接続を作成するために1つ以上の追加の回路ブロックが必要であると判定することができる。
【0268】
システムリンカ3304は、ブロック図をハードウェアコンパイラ1606に出力する。ハードウェアコンパイラ1606は、DPEコンパイラ1602によって生成されたブロック図及び初期SoCインターフェースブロック解を受信する。ハードウェアコンパイラ1606は、図20のブロック2010、図21図22、及び図23のブロック2106、2108、2112、2114、2116、及び2118に関連して前述したように、DPEコンパイラ1602及び任意選択的にNoCコンパイラ1604を用いて検証チェック3306を開始することができる。検証は、ハードウェアコンパイラが、様々なタイプの制約(反復手法における緩和/修正された制約を含み得る)などの設計データをDPEコンパイラ1602及び任意選択的にNoCコンパイラ1604に提供し、それと引き換えに、DPEコンパイラ1602からの更新されたSoCインターフェースブロック解及び任意選択的にNoCコンパイラ1604からの更新されたNoC解を受信する反復プロセスであり得る。
【0269】
ハードウェアコンパイラ1606は、PL214内のアプリケーション3312のハードウェア部分を実装する構成ビットストリームを含むハードウェアパッケージを生成することができる。ハードウェアコンパイラ1606は、ハードウェアパッケージをDPEコンパイラ1602に出力することができる。DPEコンパイラ1602は、その中のDPEアレイ202における実装を意図したアプリケーション3312のソフトウェア部分をプログラムするDPEアレイ構成データ(例えば、1つ以上のバイナリ)を生成することができる。
【0270】
図34は、SoC200においてアプリケーションを実装するために設計フローを実行する別の例示的な方法3400を示す。方法3400は、図1に関連して説明したシステムによって実行することができる。システムは、図33に関連して説明したようなソフトウェアアーキテクチャを実行することができる。図34の例では、処理されているアプリケーションは、PL214における実装のためのHLSカーネルを指定するノードを含む。
【0271】
ブロック3402において、DPEコンパイラ1602は、アプリケーション、SoC200のSoCアーキテクチャ記述、及び任意選択的にテストベンチを受信する。ブロック3404において、DPEコンパイラ1602は、接続グラフを生成し、接続グラフをシステムリンカに提供することができる。ブロック3406において、DPEコンパイラ1602は、初期SoCインターフェースブロック解を生成し、初期SoCインターフェースブロック解をハードウェアコンパイラ1606に提供する。初期SoCインターフェースブロック解は、DPEアレイ202のDPE204へのアプリケーションのDPEノードの初期マッピング、及びSoCインターフェースブロック206の物理データパスへのDPEアレイ202内外の接続のマッピングを指定することができる。
【0272】
ブロック3408において、HLSコンパイラ3302は、合成可能なIPコアを生成するためにHLSカーネルに対してHLSを実行することができる。例えば、DPEコンパイラ1602は、アプリケーションのノードで指定されたHLSカーネルをHLSコンパイラ3302に提供する。HLSコンパイラ3302は、受信したHLSカーネルごとにHLS IPを生成する。HLSコンパイラ3302は、システムリンカにHLS IPを出力する。
【0273】
ブロック3410において、システムリンカは、接続グラフ、SoCアーキテクチャ記述、及びHLS IPを使用して、アプリケーションのハードウェア部分に対応するブロック図を自動的に生成することができる。ブロック3412において、システムリンカは、ブロック図及びSoC200のベースプラットフォームを統合することができる。例えば、ハードウェアコンパイラ1606は、ブロック図をベースプラットフォームに接続して、統合ブロック図をもたらすことができる。一態様では、ブロック図及び接続されたベースプラットフォームは、合成可能ブロック図と呼ばれる。
【0274】
ブロック3414において、ハードウェアコンパイラ1606は、統合ブロック図の実装フローを実行することができる。実装フロー中、ハードウェアコンパイラ1606は、DPEコンパイラ1602及び任意選択的にNoCコンパイラ1604と協働して本明細書に記載の検証を実行して、PLで実装するためにアプリケーションのハードウェア部分の実装に収束することができる。例えば、説明したように、ハードウェアコンパイラ1606は、アプリケーションのハードウェア部分の現在の実装状態が1つ以上の設計メトリックを満たしていないと判定したことに応答して、DPEコンパイラ1602及び任意選択的にNoCコンパイラ1604を呼び出すことができる。ハードウェアコンパイラ1606は、配置前、配置中、ルーティング前、及び/又はルーティング中に、DPEコンパイラ1602及び任意選択でNoCコンパイラ1604を呼び出すことができる。
【0275】
ブロック3416において、ハードウェアコンパイラ1606は、ハードウェア実装をDPEコンパイラ1602にエクスポートする。一態様では、ハードウェア実施態様は、デバイス・サポート・アーカイブ(DSA)ファイルとして出力され得る。DSAファイルは、プラットフォームメタデータ、エミュレーションデータ、実装フローからハードウェアコンパイラ1606によって生成された1つ以上の構成ビットストリームなどを含むことができる。ハードウェア実装はまた、アプリケーションのハードウェア部分の実装を作成するためにハードウェアコンパイラ1606によって使用される最終的なSoCインターフェースブロック解及び任意選択的に最終的なNoC解を含むことができる。
【0276】
ブロック3418において、DPEコンパイラ1602は、DPEアレイのソフトウェア生成を完了する。例えば、DPEコンパイラ1602は、アプリケーションで使用されるDPEをプログラムするために使用されるバイナリを生成する。バイナリを生成する際に、DPEコンパイラ1602は、実装フローを実行するためにハードウェアコンパイラ1606によって使用される最終SoCインターフェースブロック解及び任意選択的に最終NoC解を使用することができる。一態様において、DPEコンパイラは、DSAに含まれる構成ビットストリーム及び/又はメタデータを検査することによって、ハードウェアコンパイラによって使用されるSoCインターフェースブロック解を決定することができる。
【0277】
ブロック3420において、NoCコンパイラ1604は、NoC208をプログラムするためのバイナリを生成する。ブロック3422において、PSコンパイラ1918はPSバイナリを生成する。ブロック3424において、システムは、構成ビットストリーム及びバイナリをSoC200に展開することができる。
【0278】
図35は、SoC200においてアプリケーションを実装するために設計フローを実行する別の例示的な方法3500を示す。方法3500は、図1に関連して説明したシステムによって実行することができる。アプリケーションは、本明細書で説明されるようにデータ・フロー・グラフとして指定されてもよく、DPEアレイ202内に実装するためのソフトウェア部分と、PL214内に実装するためのハードウェア部分とを含む。
【0279】
ブロック3502において、システムは、ソフトウェア部分によって使用される論理リソースをDPEアレイ202とPL214とを結合するインターフェースブロックのハードウェアリソースにマッピングする第1のインターフェース解を生成することができる。DPEコンパイラ1602は、例えば、初期又は最初のSoCインターフェースブロック解を生成することができる。
【0280】
ブロック3504において、システムは、HLSカーネルとDPEアレイに実装されるソフトウェア部分のノードとの間の接続性を指定する接続グラフを生成することができる。一態様において、DPEコンパイラ1602は、接続グラフを生成することができる。
【0281】
ブロック3506において、システムは、接続グラフ及びHLSカーネルに基づいてブロック図を生成することができる。ブロック図は合成可能である。システムリンカは、例えば、合成可能なブロック図を生成することができる。
【0282】
ブロック3508において、システムは、第1のインターフェース解を使用してブロック図の実装フローを実行することができる。説明したように、ハードウェアコンパイラ1606は、実装フロー中にDPEコンパイラ1602及び任意選択でNoCコンパイラ1604と設計データを交換することができる。ハードウェアコンパイラ1606及びDPEコンパイラ1602は、データを反復的に交換することができ、DPEコンパイラ1602は、ハードウェアコンパイラ1606によって呼び出されたことに応答して、更新されたSoCインターフェースブロック解をハードウェアコンパイラ1606に提供する。ハードウェアコンパイラ1606は、SoCインターフェースブロックに1つ以上の制約条件を提供することによってDPEコンパイラを呼び出すことができる。ハードウェアコンパイラ1606及びNoCコンパイラ1604は、データを反復的に交換することができ、NoCコンパイラ1604は、ハードウェアコンパイラ1606によって呼び出されたことに応答して、更新されたNoC解をハードウェアコンパイラ1606に提供する。ハードウェアコンパイラ1606は、NoC208に対する1つ以上の制約を提供することによって、NoCコンパイラ1604を呼び出すことができる。
【0283】
ブロック3510において、システムは、DPEコンパイラ1602を使用して、DPEアレイ202の1つ以上のDPE204に実装するためにアプリケーションのソフトウェア部分をコンパイルすることができる。DPEコンパイラ1602は、DPEアレイ202とPL214との間の一貫したインターフェース(例えば、ハードウェアコンパイラ1606による実装フロー中に使用されるのと同じSoCインターフェースブロック解)を使用するために、実装フローの結果を受信することができる。
【0284】
説明の目的で、本明細書に開示される様々な発明概念の完全な理解を提供するために、特定の用語が記載されている。しかしながら、本明細書で使用される用語は、本発明の構成の特定の態様を説明することのみを目的としており、限定することを意図するものではない。
【0285】
本明細書で定義されるように、単数形「a」、「an」、及び「the」は、文脈が明らかにそうでないことを示さない限り、複数形も含むことが意図される。
【0286】
本明細書で定義されるように、「少なくとも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とを一緒にを意味する。
【0287】
本明細書で定義される場合、「自動的に」という用語は、ユーザの介入がないことを意味する。本明細書で定義される場合、「ユーザ」という用語は、ヒトを意味する。
【0288】
本明細書で定義されるように、「コンピュータ可読記憶媒体」という用語は、命令実行システム、装置、又はデバイスによって、又はそれに関連して使用されるプログラムコードを含む又は記憶する記憶媒体を意味する。本明細書で定義されるように、「コンピュータ可読記憶媒体」は、一時的な伝播信号自体ではない。コンピュータ可読記憶媒体は、電子記憶装置、磁気記憶装置、光記憶装置、電磁記憶装置、半導体記憶装置、又はこれらの任意の適切な組み合わせであってもよいが、これらに限定されない。本明細書に記載の様々な形態のメモリは、コンピュータ可読記憶媒体の例である。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブルコンピュータディスケット、ハードディスク、RAM、読み出し専用メモリ(ROM)、消去可能プログラマブル読み出し専用メモリ(EPROM又はフラッシュメモリ)、電子的消去可能プログラマブル読み出し専用メモリ(EEPROM)、スタティックランダムアクセスメモリ(SRAM)、ポータブルコンパクトディスク読み出し専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピーディスクなどを含むことができる。
【0289】
本明細書で定義されるように、用語「の場合」は、文脈に応じて「のとき」又は「すると」又は「に応じて」又は「に応答して」を意味する。したがって、語句「決定された場合」又は「[記載された状態又は事象]が検出された場合」は、文脈に応じて、「決定されると」又は「決定に応じて」又は「[記載された状態又は事象]が検出されると」又は「[記載された状態又は事象]の検出に応じて」又は「[記載された状態又は事象]の検出に応答して」を意味すると解釈され得る。
【0290】
本明細書で定義されるように、「高級言語」又は「HLL」という用語は、命令がデータ処理システムの詳細からの強力な抽象化を有するデータ処理システムをプログラムするために使用されるプログラミング言語又は命令のセット、例えば機械言語を意味する。例えば、HLLは、メモリ管理などのデータ処理システムの動作の態様を自動化又は隠蔽することができる。HLLと呼ばれるが、これらの言語は通常、「効率レベル言語」として分類される。HLLは、ハードウェアサポートのプログラミングモデルを直接公開する。HLLの例には、C、C++、及び他の適切な言語が含まれるが、これらに限定されない。
【0291】
HLLは、デジタル回路を記述するために使用されるVerilog、System Verilog、及びVHDLなどのハードウェア記述言語(HDL)と対比され得る。HDLは、設計者が、典型的には技術に依存しないレジスタ転送レベル(RTL)ネットリストにコンパイルされ得るデジタル回路設計の定義を作成することを可能にする。
【0292】
本明細書で定義されるように、「応じて」という用語及び上記のような同様の用語、例えば「の場合」、「のとき」又は「すると」は、動作又は事象に容易に応答又は反応することを意味する。応答又は反応は自動的に行われる。したがって、第2の動作が第1の動作に「応じて」行われる場合、第1の動作の発生と第2の動作の発生との間に因果関係がある。「応じて」という用語は因果関係を示す。
【0293】
本明細書で定義されるように、「一実施形態」、「実施形態」、「1つ以上の実施形態」、「特定の実施形態」という用語又は同様の用語は、実施形態に関連して説明される特定の特徴、構造、又は特性が、本開示内で説明される少なくとも1つの実施形態に含まれることを意味する。したがって、本開示全体を通して、「一実施形態では」、「実施形態において」、「1つ以上の実施形態において」、「特定の実施形態では」という語句、及び同様の文言の出現は、必ずしもそうとは限らないが、すべて同じ実施形態を指し得る。「実施形態」及び「配置」という用語は、本開示内で互換的に使用される。
【0294】
本明細書で定義されるように、「出力」という用語は、例えばデバイスなどの物理メモリ要素に記憶すること、ディスプレイ又は他の周辺出力デバイスに書き込むこと、別のシステムに送信又は伝送すること、エクスポートすることなどを意味する。
【0295】
本明細書で定義されるように、「実質的に」という用語は、列挙された特性、パラメータ、又は値が正確に達成される必要はないが、例えば公差、測定誤差、測定精度限界、及び当業者に知られている他の要因を含む偏差又は変動が、特性が提供しようとした効果を排除しない量で発生し得ることを意味する。
【0296】
第1、第2などの用語は、様々な要素を説明するために本明細書で使用され得る。これらの要素は、特に明記しない限り、又は文脈が明らかにそうでないことを示さない限り、これらの用語は1つの要素を別の要素から区別するためにのみ使用されるので、これらの用語によって限定されるべきではない。
【0297】
コンピュータプログラム製品は、プロセッサに本明細書に記載の本発明の構成の態様を実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体を含むことができる。本開示内で、用語「プログラムコード」は、用語「コンピュータ可読プログラム命令」と交換可能に使用される。本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理装置に、又はネットワーク、例えばインターネット、LAN、WAN及び/又は無線ネットワークを介して外部コンピュータもしくは外部記憶装置にダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ、及び/又はエッジサーバを含むエッジデバイスを含むことができる。各コンピューティング/処理装置内のネットワークアダプタカード又はネットワークインターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、それぞれのコンピューティング/処理装置内のコンピュータ可読記憶媒体に記憶するためにコンピュータ可読プログラム命令を転送する。
【0298】
本明細書に記載の本発明の構成のための動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、又はオブジェクト指向プログラミング言語及び/又は手続き型プログラミング言語を含む1つ以上のプログラミング言語の任意の組み合わせで記述されたソースコード又はオブジェクトコードのいずれかであってもよい。コンピュータ可読プログラム命令は、状態設定データを含むことができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンソフトウェアパッケージとして、部分的にユーザのコンピュータ上で、部分的にリモートコンピュータ上で、又は完全にリモートコンピュータもしくはサーバ上で実行することができる。後者のシナリオでは、リモートコンピュータは、LAN又はWANを含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、又は外部コンピュータに(例えば、インターネットサービスプロバイダを使用してインターネットを介して)接続されてもよい。場合によっては、例えば、プログラマブル論理回路、FPGA、又はPLAを含む電子回路は、本明細書に記載の本発明の構成の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路をパーソナライズすることによってコンピュータ可読プログラム命令を実行することができる。
【0299】
本発明の構成の特定の態様は、方法、装置(システム)、及びコンピュータプログラム製品のフローチャート図及び/又はブロック図を参照して本明細書で説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図のブロックの組み合わせは、コンピュータ可読プログラム命令、例えばプログラムコードによって実施され得ることが理解されよう。
【0300】
これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを生成することができ、コンピュータ又は他のプログラム可能なデータ処理装置のプロセッサを介して実行する命令は、フローチャート及び/又はブロック図のブロックで指定された機能/動作を実施するための手段を作成する。これらのコンピュータ可読プログラム命令はまた、コンピュータ、プログラマブルデータ処理装置、及び/又は他のデバイスに特定の方法で機能するように指示することができるコンピュータ可読記憶媒体に格納されてもよく、格納された命令を有するコンピュータ可読記憶媒体は、フローチャート及び/又はブロック図のブロックで指定された動作の態様を実施する命令を含む製品を含む。
【0301】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラマブルデータ処理装置、又は他のデバイスにロードされ、コンピュータ、他のプログラマブル装置、又は他のデバイス上で一連の動作を実行させてコンピュータ実施プロセスを生成してもよく、コンピュータ、他のプログラマブル装置、又は他のデバイス上で実行される命令は、フローチャート及び/又はブロック図のブロックで指定された機能/動作を実施する。
【0302】
図のフローチャート及びブロック図は、本発明の構成の様々な態様によるシステム、方法、及びコンピュータプログラム製品の可能な実施態様のアーキテクチャ、機能、及び動作を示す。これに関して、フローチャート又はブロック図の各ブロックは、指定された動作を実施するための1つ以上の実行可能命令を含むモジュール、セグメント、又は命令の一部を表すことができる。
【0303】
いくつかの代替実施態様では、ブロックに記載された動作は、図に記載された順序とは異なる順序で行われてもよい。例えば、連続して示されている2つのブロックは、実質的に同時に実行されてもよく、又はブロックは、関連する機能に応じて、時には逆の順序で実行されてもよい。他の例では、ブロックは、一般に、昇順で実行されてもよいが、さらに他の例では、1つ以上のブロックは、様々な順序で実行されてもよく、結果は、直後には続かない後続のブロック又は他のブロックで記憶及び利用される。また、ブロック図及び/又はフローチャート図の各ブロック、並びにブロック図及び/又はフローチャート図のブロックの組合せは、指定された機能又は動作を実行するか、専用ハードウェアとコンピュータ命令の組合せを実行する専用ハードウェアベースのシステムによって実装されてもよいことに留意されたい。
【0304】
以下の特許請求の範囲に見出すことができるすべてのミーンズプラスファンクション又はステッププラスファンクションの要素の対応する構造、材料、動作、及び均等物は、具体的に特許請求されている他の特許請求されている要素と組み合わせて機能を実行するための任意の構造、材料、又は動作を含むことが意図されている。
【0305】
方法は、デバイスのDPEアレイ内に実装するためのソフトウェア部分と、デバイスのPL内に実装するためのハードウェア部分とを指定するアプリケーションのために、プロセッサを使用して、アプリケーションの論理アーキテクチャ、及びDPEアレイとプログラマブル論理との間のインターフェース回路ブロックのハードウェアへの論理リソースのマッピングを指定する第1のインターフェース解を生成するステップを含む。本方法は、論理アーキテクチャ及び第1のインターフェース解に基づいてハードウェア部分のブロック図を構築するステップと、プロセッサを使用して、ブロック図の実装フローを実行するステップとを含む。本方法は、プロセッサを使用して、DPEアレイの1つ以上のDPEに実装するためにアプリケーションのソフトウェア部分をコンパイルするステップを含む。
【0306】
別の態様では、ブロック図を構築するステップは、プログラマブル論理内に実装するために少なくとも1つのIPコアをブロック図に追加することを含む。
【0307】
別の態様では、実装フロー中に、ハードウェアコンパイラは、ソフトウェア部分をコンパイルするように構成されたDPEコンパイラと設計データを交換することによって、ブロック図を構築し、実装フローを実行する。
【0308】
別の態様では、ハードウェアコンパイラは、NoCコンパイラとさらなる設計データを交換する。ハードウェアコンパイラは、DPEアレイをデバイスのPLに結合するデバイスのNoCを通るルートを実装するように構成された第1のNoC解を受信する。
【0309】
別の態様では、実装フローの実行は、交換された設計データに基づいて実行される。
別の態様では、ソフトウェア部分のコンパイルは、実装フローから生成されたPLでの実装のためにアプリケーションのハードウェア部分の実装に基づいて実行される。
【0310】
別の態様では、ブロック図を構築し、実装フローを実行して、ブロック図の実装がハードウェア部分の設計メトリックを満たしていないと判定するように構成されたハードウェアコンパイラに応答して、ソフトウェア部分をコンパイルするように構成されたDPEコンパイラにインターフェース回路ブロックの制約を提供する。ハードウェアコンパイラは、制約に基づいてDPEコンパイラによって生成された第2のインターフェース解をDPEコンパイラから受信する。
【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コンパイラとさらなる設計データを交換することと、ハードウェアコンパイラが、DPEアレイをデバイスのPLに結合するデバイスのNoCを通るルートを実装するように構成された第1のNoC解を受信することとを含む。
【0317】
別の態様では、実装フローの実行は、交換された設計データに基づいて実行される。
別の態様では、ソフトウェア部分のコンパイルは、実装フローから生成されたPLでの実装のためにアプリケーションのハードウェア部分のハードウェア設計に基づいて実行される。
【0318】
別の態様では、動作は、ブロック図を構築し、実装フローを実行して、ブロック図の実装がハードウェア部分の設計メトリックを満たしていないと判定するように構成されたハードウェアコンパイラに応答して、ソフトウェア部分をコンパイルするように構成されたDPEコンパイラにインターフェース回路ブロックの制約を提供することを含む。ハードウェアコンパイラは、制約に基づいてDPEコンパイラによって生成された第2のインターフェース解をDPEコンパイラから受信する。
【0319】
別の態様では、実装フローの実行は、第2のインターフェース解に基づいて実行される。
【0320】
別の態様では、ハードウェアコンパイラは、NoCに対する第1のNoC解を使用してブロック図の実装が設計メトリックを満たしていないと判定したことに応答して、NoCに対する制約をNoCコンパイラに提供する。ハードウェアコンパイラは、NoCコンパイラから、NoCに対する制約に基づいてNoCコンパイラによって生成された第2のNoC解を受信する。
【0321】
方法は、デバイスのDPEアレイに実装するためのソフトウェア部分と、デバイスのPLに実装するためのハードウェア部分とを有するアプリケーションのために、ハードウェアコンパイラを実行するプロセッサを使用して、ソフトウェア部分によって使用される論理リソースを、DPEアレイをPLに結合するインターフェースブロックのハードウェアにマッピングするインターフェースブロック解に基づいて、ハードウェア部分に対する実装フローを実行するステップを含む。方法は、実装フロー中に設計メトリックを満たさないことに応答して、ハードウェアコンパイラを実行するプロセッサを使用して、DPEコンパイラにインターフェースブロック制約を提供するステップを含む。本方法はまた、インターフェースブロック制約の受信に応答して、DPEコンパイラを実行するプロセッサを使用して、更新されたインターフェースブロック解を生成し、更新されたインターフェースブロック解をDPEコンパイラからハードウェアコンパイラに提供するステップを含む。
【0322】
別の態様では、インターフェースブロック制約は、ソフトウェア部分によって使用される論理リソースをインターフェースブロックの物理リソースにマッピングする。
【0323】
別の態様では、ハードウェアコンパイラは、更新されたインターフェースブロック解を使用して実装フローを継続する。
【0324】
別の態様では、ハードウェアコンパイラは、ハードウェア部分の設計制約を満たさないことに応答して、インターフェースブロック制約をDPEコンパイラに反復的に提供する。
【0325】
別の態様では、インターフェースブロック制約は、ハード制約及びソフト制約を含む。その場合、本方法は、更新されたインターフェースブロック解を生成するために、DPEコンパイラがハード制約及びソフト制約の両方を使用してアプリケーションのソフトウェア部分をルーティングすることを含む。
【0326】
別の態様では、本方法は、ハード制約とソフト制約の両方を使用して更新されたインターフェースブロック解を生成できなかったことに応答して、更新されたインターフェースブロック解を生成するために、ハード制約のみを使用してアプリケーションのソフトウェア部分をルーティングするステップを含む。
【0327】
別の態様では、本方法は、ハード制約のみを使用して更新されたマッピングの生成に失敗したことに応答して、ハード制約とソフト制約の両方を使用してソフトウェア部分をマッピングし、更新されたインターフェースブロック解を生成するためにハード制約のみを使用してソフトウェア部分をルーティングするステップを含む。
【0328】
インターフェースブロック解及び更新されたインターフェースブロック解が各々スコアを有する別の態様では、本方法は、スコアを比較するステップと、インターフェースブロック解のスコアが更新されたインターフェースブロック解のスコアを超えていると判定したことに応答して、インターフェースブロック制約を緩和し、緩和されたインターフェースブロック制約をDPEコンパイラに提出して、さらなる更新されたインターフェースブロック解を取得するステップとを含む。
【0329】
別の態様では、インターフェースブロック解及び更新されたインターフェースブロック解は各々スコアを有する。本方法は、スコアを比較するステップと、更新されたインターフェースブロック解のスコアがインターフェースブロック解のスコアを超えていると判定したことに応答して、実装フローを実行するために更新されたインターフェースブロック解を使用するステップとを含む。
【0330】
システムは、動作を開始するように構成されたプロセッサを含む。動作は、デバイスのDPEアレイに実装するためのソフトウェア部分と、デバイスのPLに実装するためのハードウェア部分とを有するアプリケーションのために、ハードウェアコンパイラを使用して、ソフトウェア部分によって使用される論理リソースを、DPEアレイをPLに結合するインターフェースブロックのハードウェアにマッピングするインターフェースブロック解に基づいて、ハードウェア部分の実装フローを実行することを含む。動作は、実装フロー中に設計メトリックを満たさないことに応答して、ハードウェアコンパイラを使用して、DPEコンパイラにインターフェースブロック制約を提供することを含む。動作は、インターフェースブロック制約の受信に応答して、DPEコンパイラを使用して、更新されたインターフェースブロック解を生成し、更新されたインターフェースブロック解をDPEコンパイラからハードウェアコンパイラに提供することをさらに含む。
【0331】
別の態様では、インターフェースブロック制約は、ソフトウェア部分によって使用される論理リソースをインターフェースブロックの物理リソースにマッピングする。
【0332】
別の態様では、ハードウェアコンパイラは、更新されたインターフェースブロック解を使用して実装フローを継続する。
【0333】
別の態様では、ハードウェアコンパイラは、ハードウェア部分の設計制約を満たさないことに応答して、インターフェースブロック制約をDPEコンパイラに反復的に提供する。
【0334】
別の態様では、インターフェースブロック制約は、ハード制約及びソフト制約を含む。その場合、プロセッサは、更新されたインターフェースブロック解を生成するために、DPEコンパイラがハード制約及びソフト制約の両方を使用してアプリケーションのソフトウェア部分をルーティングすることを含む動作を開始するように構成される。
【0335】
別の態様では、動作は、ハード制約とソフト制約の両方を使用して更新されたマッピングの生成に失敗したことに応答して、更新されたインターフェースブロック解を生成するために、ハード制約のみを使用してアプリケーションのソフトウェア部分をルーティングすることを含む。
【0336】
別の態様では、動作は、ハード制約のみを使用して更新されたマッピングの生成に失敗したことに応答して、ハード制約とソフト制約の両方を使用してソフトウェア部分をマッピングすることと、更新されたインターフェースブロック解を生成するためにハード制約のみを使用してソフトウェア部分をルーティングすることとを含む。
【0337】
別の態様では、インターフェースブロック解及び更新されたインターフェースブロック解は各々スコアを有する。プロセッサは、スコアを比較することと、インターフェースブロック解のスコアが更新されたインターフェースブロック解のスコアを超えていると判定したことに応答して、インターフェースブロック制約を緩和し、緩和されたインターフェースブロック制約をDPEコンパイラに提出してさらなる更新されたインターフェースブロック解を取得することとを含む動作を開始するように構成される。
【0338】
別の態様では、インターフェースブロック解及び更新されたインターフェースブロック解は各々スコアを有する。プロセッサは、スコアを比較することと、更新されたインターフェースブロック解のスコアがインターフェースブロック解のスコアを超えていると判定したことに応答して、実装フローを実行するために更新されたインターフェースブロック解を使用することとを含む動作を開始するように構成される。
【0339】
方法は、デバイスのDPEアレイ内に実装するためのソフトウェア部分と、デバイスのPL内に実装するためのHLSカーネルを有するハードウェア部分とを指定するアプリケーションのために、プロセッサを使用して、ソフトウェア部分によって使用される論理リソースをDPEアレイとPLとを結合するインターフェースブロックのハードウェアリソースにマッピングする第1のインターフェース解を生成するステップを含む。方法は、プロセッサを使用して、HLSカーネルとDPEアレイに実装されるソフトウェア部分のノードとの間の接続性を指定する接続グラフを生成するステップと、プロセッサを使用して、接続グラフ及びHLSカーネルに基づいてブロック図を生成するステップとを含み、ブロック図は合成可能である。本方法は、プロセッサを使用して、第1のインターフェース解に基づいてブロック図の実装フローを実行するステップと、プロセッサを使用して、DPEアレイの1つ以上のDPEに実装するためにアプリケーションのソフトウェア部分をコンパイルするステップとをさらに含む。
【0340】
別の態様では、ブロック図を生成するステップは、HLSカーネルの合成可能バージョンを生成するためにHLSカーネルに対してHLSを実行することと、HLSカーネルの合成可能バージョンを使用してブロック図を構築することとを含む。
【0341】
別の態様では、HLSカーネルの合成可能バージョンは、RTLブロックとして指定される。
【0342】
別の態様では、ブロック図の生成は、アプリケーションが実装されるSoCのアーキテクチャの記述に基づいて実行される。
【0343】
別の態様では、ブロック図の生成は、ブロック図をベースプラットフォームと接続することを含む。
【0344】
別の態様では、実装フローの実行は、PLに実装するためにブロック図を合成することと、第1のインターフェース解に基づいて合成されたブロック図を配置及びルーティングすることとを含む。
【0345】
別の態様では、本方法は、実装フロー中に、ソフトウェア部分をコンパイルするように構成されたDPEコンパイラと設計データを交換することによって、ブロック図を構築し、実装フローを実行するハードウェアコンパイラを実行するステップを含む。
【0346】
別の態様では、本方法は、ハードウェアコンパイラがNoCコンパイラとさらなる設計データを交換するステップと、ハードウェアコンパイラが、DPEアレイをデバイスのPLに結合するデバイスのNoCを通るルートを実装するように構成された第1のNoC解を受信するステップとを含む。
【0347】
別の態様では、本方法は、ブロック図を構築し、実装フローを実行して、ブロック図の実装がハードウェア部分の設計メトリックを満たしていないと判定するように構成されたハードウェアコンパイラに応答して、ソフトウェア部分をコンパイルするように構成されたDPEコンパイラにインターフェース回路ブロックの制約を提供するステップを含む。本方法はまた、制約に基づいてDPEコンパイラによって生成された第2のインターフェース解をDPEコンパイラから受信するハードウェアコンパイラを含む。
【0348】
別の態様では、実装フローの実行は、第2のインターフェース解に基づいて実行される。
【0349】
システムは、動作を開始するように構成されたプロセッサを含む。動作は、デバイスのDPEアレイ内に実装するためのソフトウェア部分と、デバイスのPL内に実装するためのHLSカーネルを有するハードウェア部分とを指定するアプリケーションのために、ソフトウェア部分によって使用される論理リソースをDPEアレイとPLとを結合するインターフェースブロックのハードウェアリソースにマッピングする第1のインターフェース解を生成することを含む。動作は、HLSカーネルとDPEアレイに実装されるソフトウェア部分のノードとの間の接続性を指定する接続グラフを生成することと、接続グラフ及びHLSカーネルに基づいてブロック図を生成することとを含み、ブロック図は合成可能である。動作は、第1のインターフェース解に基づいてブロック図の実装フローを実行することと、DPEアレイの1つ以上のDPEに実装するためにアプリケーションのソフトウェア部分をコンパイルすることとをさらに含む。
【0350】
別の態様では、ブロック図を生成するステップは、HLSカーネルの合成可能バージョンを生成するためにHLSカーネルに対してHLSを実行することと、HLSカーネルの合成可能バージョンを使用してブロック図を構築することとを含む。
【0351】
別の態様では、HLSカーネルの合成可能バージョンは、RTLブロックとして指定される。
【0352】
別の態様では、ブロック図の生成は、アプリケーションが実装されるSoCのアーキテクチャの記述に基づいて実行される。
【0353】
別の態様では、ブロック図の生成は、ブロック図をベースプラットフォームと接続することを含む。
【0354】
別の態様では、実装フローの実行は、PLに実装するためにブロック図を合成することと、第1のインターフェース解に基づいて合成されたブロック図を配置及びルーティングすることとを含む。
【0355】
別の態様では、動作は、実装フロー中に、ソフトウェア部分をコンパイルするように構成されたDPEコンパイラと設計データを交換することによって、ブロック図を構築し、実装フローを実行するハードウェアコンパイラを実行することを含む。
【0356】
別の態様では、動作は、ハードウェアコンパイラがNoCコンパイラとさらなる設計データを交換することと、ハードウェアコンパイラが、DPEアレイをデバイスのPLに結合するデバイスのNoCを通るルートを実装するように構成された第1のNoC解を受信することとを含む。
【0357】
別の態様では、動作は、ブロック図を構築し、実装フローを実行して、ブロック図の実装がハードウェア部分の設計メトリックを満たしていないと判定するように構成されたハードウェアコンパイラに応答して、ソフトウェア部分をコンパイルするように構成されたDPEコンパイラにインターフェース回路ブロックの制約を提供することを含む。本方法はまた、制約に基づいてDPEコンパイラによって生成された第2のインターフェース解をDPEコンパイラから受信するハードウェアコンパイラを含む。
【0358】
別の態様では、実装フローの実行は、第2のインターフェース解に基づいて実行される。
【0359】
プログラムコードが格納されたコンピュータ可読記憶媒体を含む1つ以上は複数のコンピュータプログラム製品が本明細書で開示される。プログラムコードは、本開示内で説明される様々な動作を開始するためにコンピュータハードウェアによって実行可能である。
【0360】
本明細書で提供される本発明の構成の説明は、例示を目的とするものであり、網羅的であること、又は開示された形態及び例に限定されることを意図するものではない。本明細書で使用される用語は、本発明の構成の原理、実際の用途又は市場で見られる技術に対する技術的改善を説明するために、及び/又は当業者が本明細書に開示される本発明の構成を理解することを可能にするために選択された。記載された本発明の構成の範囲及び精神から逸脱することなく、修正及び変形が当業者には明らかであり得る。したがって、そのような特徴及び実施態様の範囲を示すものとして、前述の開示ではなく、以下の特許請求の範囲を参照すべきである。
【0361】
例1は、アプリケーションから導出された論理アーキテクチャのための例示的なスキーマを示す。
【0362】
【数2】
【0363】
例2は、DPEアレイ202に実装されるアプリケーションのためのSoCインターフェースブロック解のための例示的なスキーマを示す。
【0364】
【数3】
【0365】
例3は、NoC208に実装されるアプリケーションのためのNoC解のための例示的なスキーマを示す。
【0366】
【数4】
【0367】
例4は、SoCインターフェースブロック制約及び/又はNoC制約を指定するための例示的なスキーマを示す。
【0368】
【数5】
【0369】
例5は、NoCトラフィックを指定するための例示的なスキーマを示す。
【0370】
【数6】
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17A
図17B
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29
図30
図31
図32
図33
図34
図35