(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-26
(45)【発行日】2024-04-03
(54)【発明の名称】ヘテロジニアスプログラマブルデバイスのためのハードウェアソフトウェア設計時のフロー収束
(51)【国際特許分類】
G06F 30/34 20200101AFI20240327BHJP
G06F 115/02 20200101ALN20240327BHJP
G06F 117/08 20200101ALN20240327BHJP
【FI】
G06F30/34
G06F115:02
G06F117:08
(21)【出願番号】P 2021568920
(86)(22)【出願日】2020-05-12
(86)【国際出願番号】 US2020032520
(87)【国際公開番号】W WO2020236462
(87)【国際公開日】2020-11-26
【審査請求日】2023-03-06
(32)【優先日】2019-05-23
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】グプタ,シャイル・アディティア
(72)【発明者】
【氏名】スレンダラン,リシ
【審査官】松浦 功
(56)【参考文献】
【文献】特表2002-530780(JP,A)
【文献】特表2002-508102(JP,A)
【文献】特表2018-507449(JP,A)
【文献】国際公開第2016/077393(WO,A1)
【文献】VISSERS, K.,Versal: New Xillinx Adaptive Compute Acceleration Platforms, Samsung Forum,YouTube [online] [video],2018年11月06日,[検索日 2024.02.20],インターネット,URL:https://www.youtube.com/watch?v=aiPJij3ifvg
(58)【調査した分野】(Int.Cl.,DB名)
G06F 30/30 -30/398
(57)【特許請求の範囲】
【請求項1】
方法であって、
デバイスのデータ処理エンジン(DPE)アレイに実装するためのソフトウェア部分と、前記デバイスのプログラマブル論理に実装するためのハードウェア部分とを有するアプリケーションについて、ハードウェアコンパイラを実行するプロセッサを使用して、前記ソフトウェア部分によって使用される論理リソースを、前記DPEアレイを前記プログラマブル論理に結合するインタフェースブロックのハードウェアにマッピングするインタフェースブロックソリューションに基づいて、前記ハードウェア部分の実装フローを実行するステップと、
前記実装フロー中に設計メトリックを満たさないことに応答して、前記ハードウェアコンパイラを実行する前記プロセッサを使用して、DPEコンパイラにインタフェースブロック制約を提供するステップと、
前記インタフェースブロック制約の受信に応答して、前記DPEコンパイラを実行する前記プロセッサを使用して、更新されたインタフェースブロックソリューションを生成するステップと、
前記更新されたインタフェースブロックソリューションを前記DPEコンパイラから前記ハードウェアコンパイラに提供するステップと、を含む方法。
【請求項2】
前記ハードウェアコンパイラは、前記ハードウェア部分の設計制約を満たさないことに応答して、インタフェースブロック制約を前記DPEコンパイラに反復的に提供する、請求項1に記載の方法。
【請求項3】
前記インタフェースブロック制約は、ハード制約およびソフト制約を含み、前記方法は、
DPEコンパイラが、前記更新されたインタフェースブロックソリューションを生成するために、前記ハード制約および前記ソフト制約の両方を使用して前記アプリケーションの前記ソフトウェア部分をルーティングするステップをさらに含む、請求項1に記載の方法。
【請求項4】
前記ハード制約と前記ソフト制約の両方を使用して前記更新されたインタフェースブロックソリューションを生成できなかったことに応答して、前記更新されたインタフェースブロックソリューションを生成するために、前記ハード制約のみを使用して前記アプリケーションの前記ソフトウェア部分をルーティングするステップをさらに含む、請求項3に記載の方法。
【請求項5】
前記ハード制約のみを使用して前記更新されたマッピングの生成に失敗したことに応答して、前記更新されたインタフェースブロックソリューションを生成するために、前記ハード制約と前記ソフト制約の両方を使用して前記ソフトウェア部分をマッピングし、前記ハード制約のみを使用して前記ソフトウェア部分をルーティングするステップをさらに含む、請求項4に記載の方法。
【請求項6】
前記インタフェースブロックソリューションおよび前記更新されたインタフェースブロックソリューションは各々スコアを有し、前記方法は、
前記スコアを比較するステップと、
前記インタフェースブロックソリューションの前記スコアが前記更新されたインタフェースブロックソリューションの前記スコアを超えていると決定したことに応答して、さらなる更新されたインタフェースブロックソリューションを取得するために、前記インタフェースブロック制約を緩和し、前記緩和されたインタフェースブロック制約を前記DPEコンパイラに提出するステップと、をさらに含む、請求項1に記載の方法。
【請求項7】
前記インタフェースブロックソリューションおよび前記更新されたインタフェースブロックソリューションは各々スコアを有し、前記方法は、
前記スコアを比較するステップと、
前記更新されたインタフェースブロックソリューションの前記スコアが前記インタフェースブロックソリューションの前記スコアを超えていると決定したことに応答して、前記実装フローを実行するために前記更新されたインタフェースブロックソリューションを使用するステップと、をさらに含む、請求項1に記載の方法。
【請求項8】
システムであって、
動作を開始するように構成されたプロセッサであって、前記動作は、
デバイスのデータ処理エンジン(DPE)アレイに実装するためのソフトウェア部分と、前記デバイスのプログラマブル論理に実装するためのハードウェア部分とを有するアプリケーションについて、ハードウェアコンパイラを使用して、前記ソフトウェア部分によって使用される論理リソースを、前記DPEアレイを前記プログラマブル論理に結合するインタフェースブロックのハードウェアにマッピングするインタフェースブロックソリューションに基づいて、前記ハードウェア部分の実装フローを実行することと、
前記実装フロー中に設計メトリックを満たさないことに応答して、前記ハードウェアコンパイラを使用して、DPEコンパイラにインタフェースブロック制約を提供することと、
前記インタフェースブロック制約の受信に応答して、前記DPEコンパイラを使用して、更新されたインタフェースブロックソリューションを生成することと、
前記更新されたインタフェースブロックソリューションを前記DPEコンパイラから前記ハードウェアコンパイラに提供することと、を含むシステム。
【請求項9】
前記ハードウェアコンパイラは、前記更新されたインタフェースブロックソリューションを使用して前記実装フローを継続する、請求項8に記載のシステム。
【請求項10】
前記ハードウェアコンパイラは、前記ハードウェア部分の設計制約を満たさないことに応答して、インタフェースブロック制約を前記DPEコンパイラに反復的に提供する、請求項8に記載のシステム。
【請求項11】
前記インタフェースブロック制約は、ハード制約およびソフト制約を含み、前記プロセッサは、
前記DPEコンパイラが、前記更新されたインタフェースブロックソリューションを生成するために、前記ハード制約および前記ソフト制約の両方を使用して前記アプリケーションの前記ソフトウェア部分をルーティングすることを含む動作を開始するように構成される、請求項8に記載のシステム。
【請求項12】
前記プロセッサは、動作を開始するように構成され、前記動作は、
前記ハード制約と前記ソフト制約の両方を使用して前記更新されたマッピングを生成できなかったことに応答して、前記更新されたインタフェースブロックソリューションを生成するために、前記ハード制約のみを使用して前記アプリケーションの前記ソフトウェア部分をルーティングすることをさらに含む、請求項11に記載のシステム。
【請求項13】
前記プロセッサは、動作を開始するように構成され、前記動作は、
前記ハード制約のみを使用して前記更新されたマッピングの生成に失敗したことに応答して、前記更新されたインタフェースブロックソリューションを生成するために、前記ハード制約と前記ソフト制約の両方を使用して前記ソフトウェア部分をマッピングし、前記ハード制約のみを使用して前記ソフトウェア部分をルーティングすることをさらに含む、請求項12に記載のシステム。
【請求項14】
前記インタフェースブロックソリューションおよび前記更新されたインタフェースブロックソリューションは各々スコアを有し、前記プロセッサは、
前記スコアを比較することと、
前記インタフェースブロックソリューションの前記スコアが前記更新されたインタフェースブロックソリューションの前記スコアを超えていると決定したことに応答して、さらなる更新されたインタフェースブロックソリューションを取得するために、前記インタフェースブロック制約を緩和し、前記緩和されたインタフェースブロック制約を前記DPEコンパイラに提出することと、を含む動作を開始するように構成される、請求項8に記載のシステム。
【請求項15】
前記インタフェースブロックソリューションおよび前記更新されたインタフェースブロックソリューションは各々スコアを有し、前記プロセッサは、
前記スコアを比較することと、
前記更新されたインタフェースブロックソリューションの前記スコアが前記インタフェースブロックソリューションの前記スコアを超えていると決定したことに応答して、前記実装フローを実行するために前記更新されたインタフェースブロックソリューションを使用することと、を含む動作を開始するように構成される、請求項8に記載のシステム。
【発明の詳細な説明】
【技術分野】
【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】
図1のSoCからNoCまでのエンドポイント回路間の接続を示すブロック図である。
【
図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インタフェースブロック制約の別の例を示す。
【
図31】ルーティング不可能なSoCインタフェースブロック制約の別の例を示す。
【
図33】
図1のシステムによって実行可能な別の例示的なソフトウェアアーキテクチャを示す。
【
図34】SoCにアプリケーションを実装するための設計フローを実行する別の例示的な方法を示す。
【
図35】SoCにアプリケーションを実装するための設計フローを実行する別の例示的な方法を示す。
【発明を実施するための形態】
【0018】
発明を実施するための形態
本開示は、新規な特徴を定義する特許請求の範囲で完結するが、本開示内で説明される様々な特徴は、図面と併せて説明を考慮することによってよりよく理解されると考えられる。本明細書に記載の1つまたは複数のプロセス、1つまたは複数の機械、1つまたは複数の製造物、およびそれらの任意の変形は、例示の目的で提供される。本開示内に記載された特定の構造的および機能的詳細は、限定として解釈されるべきではなく、単に特許請求の範囲の基礎として、および実質的に任意の適切に詳細な構造に記載された特徴を様々に使用することを当業者に教示するための代表的な基礎として解釈されるべきである。さらに、本開示内で使用される用語および語句は、限定することを意図するものではなく、むしろ記載された特徴の理解可能な説明を提供することを意図している。
【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 Express(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の場合、SoC208内での実装のためにユーザ回路設計が作成されるまで、NoC200を通ってルーティングされるネットおよび/またはデータ転送は未知である。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】
他の例では、4つより多くのメモリインタフェースが利用可能であってもよい。そのような他のメモリインタフェースは、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)拡張インタフェース(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は、メモリモジュール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にロードすることによってプログラムすることができる。構成データは、ストリームスイッチ326を、2つの異なるDPEおよび/または他のサブシステム間の回路スイッチングモードで、または選択されたDPEおよび/または他のサブシステム間のパケットスイッチングモードで動作するようにプログラムする。したがって、ストリームスイッチ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は、メモリバンク412へのアクセスをDPE204-16のコアに提供する。メモリインタフェース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内の2つの異なるコア、ストリームスイッチ、メモリマップドインタフェース、および/またはDMA、および/またはメモリモジュール304内の同じ、例えば共有バッファにアクセスする異なるDPEを同期させることができる。
【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のサブセットは、SoCインタフェースブロック206の複数のタイルによってインタフェースを提供されるDPEがないように、相互排他的であってもよい。
【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は、他の列(例えば、タイル502がインタフェースではないDPE)のDPEにアドレス指定されたデータをタイル504上に送信しながら、列AのDPEにアドレス指定されたデータのそれらの部分をそのようなDPEに提供することができる。タイル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は、6つの異なる32ビットのデータストリームをストリームインタフェース604に結合されたDPEに出力し、ストリームインタフェース604から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によって、8つの異なる64ビットのデータストリームをPL214から受信することができる。
【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のプログラミングのためにレジスタ712に結合された周辺相互接続を含む。NoC208内のレジスタ712は、割り込み、サービス品質(QoS)、エラー処理および報告、トランザクション制御、電力管理、およびアドレスマッピング制御をサポートする。レジスタ712は、書き込み要求を使用してレジスタ712に書き込むことなどによって、再プログラムされる前に使用可能な状態で初期化することができる。NoC208の構成データは、例えばプログラミングデバイスイメージ(PDI)の一部として不揮発性メモリ(NVM)に記憶することができ、NoC208および/または他のエンドポイント回路をプログラミングするためにNPI710に提供することができる。
【0120】
NMU702は、トラフィック進入ポイントである。NSU704は、トラフィック退出ポイントである。NMU702およびNSU704に結合されたエンドポイント回路は、硬化回路(例えば、ハードワイヤード回路ブロック210)またはPL214に実装された回路とすることができる。所与のエンドポイント回路は、複数のNMU702または複数のNSU704に結合することができる。
【0121】
図8は、一例による、SoC200からNoC208までのエンドポイント回路間の接続を示すブロック図である。この例では、エンドポイント回路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によって接続されたUPS706を含む。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は、NPSのセット1208を介して要求を中継して宛先NSU1210に到達させる。NSU1210は、データの処理およびエンドポイント回路1214への分配のために、付属のAXIスレーブ回路1212に要求を渡す。AXIスレーブ回路1212は、読み出し/書き込み応答をNSU1210に送り返すことができる。NSU1210は、NPSのセット1208を介してNMU1206に応答を転送することができる。NMU1206は、データをエンドポイント回路1202に配信するAXIマスタ回路1204に応答を通信する。
【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を介してルーティングされる必要がある任意の接続、およびPL214のDPEアレイ202、NoC208、およびIPコアのポート情報を指定することができる。IPコアは、特定の機能または動作を実行することができる回路の再利用可能なブロックとして回路設計において使用することができる論理、セル、またはICレイアウト設計の再利用可能なブロックまたは部分である。IPコアは、PL214内で実装するための回路設計に組み込むことができるフォーマットで指定することができる。本開示は様々なタイプのコアについて言及するが、他の修飾語を伴わない「コア」という用語は、一般的にそのような異なるタイプのコアに言及することを意図している。
【0145】
詳細な説明の最後に位置する本開示内の実施例1は、アプリケーションの論理アーキテクチャを指定するために使用することができる例示的なスキーマを示す。実施例1は、アプリケーションの論理アーキテクチャに含まれる様々なタイプの情報を示す。一態様では、ハードウェアコンパイラ1606は、アプリケーション自体を使用するのではなく、論理アーキテクチャおよびSoCインタフェースブロックソリューションに基づいて、またはそれを使用して、アプリケーションのハードウェア部分を実装することができる。
【0146】
DPEアレイ202のポート情報、ならびにPL214内のNoC208および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からから受信されたSoCインタフェースブロック制約、および/またはNoCコンパイラ1604からの更新されたNoCソリューションに基づいて、更新された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を指定するために使用され得る例示的なソースコードを示す。
実施例6
using namespace cardano; // class library with graph building primitives
class radio : cardano::graph { // an example graph class
public:
input_port in;
output_port out;
kernel a,b,c,d,e,f;
radio() { // graph constructor
a = kernel::create(polarclip);
b = kernel::create(feedback);
c = kernel::create(equalizer);
d = kernel::create(fir_tap11);
e = kernel::create(fir_tap7);
f = kernel::create(scale);
fabric<fpga>(a); fabric<fpga>(f);
runtime<ratio>(b) = 0.6; runtime<ratio>(c) = 0.2;
runtime<ratio>(d) = 0.8; runtime<ratio>(e) = 0.1;
connect<stream, window<64,8> > ( a.out[0], b.in[0] );
connect<window<32> > ( b.out[0], c.in[0] );
connect<window<32, 24> > ( c.out[0], d.in[0] );
connect<window<32, 16> > ( d.out[1], e.in[0] );
connect<window<32, 8> > ( e.out[0], async(b.in[1]) );
connect<window<16>, stream > ( d.out[0], f.in[0] );
connect<stream> ( in, a.in[0] );
connect<stream> ( f.out[0], out );
}
}
radio mygraph; //top level testbench
simulation::platform<1,1> platform(“in.txt”, “out.txt”);
connect<> net0(platform.src[0], mygraph.in);
connect<> net1(platform.sink[0], mygraph.out);
int main(void) { //control program for PS
mygraph.init();
mygraph.run();
mygraph.end();
return 0;
}
一態様において、アプリケーション1700は、複数のノードを含むデータフロー・グラフとして指定される。各ノードは計算を表し、これは単一の命令とは対照的に関数に対応する。ノードは、データフローを表すエッジによって相互接続される。ノードのハードウェア実装は、そのノードへの各入力からのデータの受信に応答してのみ実行することができる。ノードは、一般に、非ブロッキング方式で実行する。アプリケーション1700によって指定されるデータフロー・グラフは、シーケンシャルプログラムとは対照的に、SoC200に実装される並列指定を表す。システムは、様々なノードをSoC200の適切なサブシステムにマッピングして実装するために、アプリケーション1700上で(例えば、実施例1に示すようなグラフ形式で)動作することができる。
【0158】
一例では、アプリケーション1700は、Cおよび/またはC++などの高レベルプログラミング言語(HLL)で指定される。上述したように、シーケンシャルプログラムを作成するために従来使用されているHLLで指定されているが、データフロー・グラフであるアプリケーション1700は並列指定である。システムは、データフロー・グラフ、したがってアプリケーション1700を構築するために使用されるクラスライブラリを提供することができる。データフロー・グラフは、ユーザによって定義され、SoC200のアーキテクチャ上にコンパイルされる。クラスライブラリは、アプリケーション1700を構築するために使用することができるグラフ、ノード、およびエッジのための予め定義されたクラスおよびコンストラクタを有するヘルパーライブラリとして実装することができる。アプリケーション1700は、SoC200上で効果的に実行され、SoC200のPS212内で実行される委譲されたオブジェクトを含む。PS212で実行されるアプリケーション1700のオブジェクトは、例えばPL214、DPEアレイ202、および/またはハードワイヤード回路ブロック210において、SoC200上で実行されている実際の計算を指示および監視するために使用され得る。
【0159】
本開示内に記載された本発明の構成によれば、アクセラレータ(例えば、PLノード)は、データフロー・グラフ内のオブジェクト(例えば、アプリケーション)として表すことができる。システムは、PLノードを自動的に合成し、合成されたPLノードをPL214での実装のために接続することができる。比較すると、従来のEDAシステムでは、ユーザは、シーケンシャルセマンティクスを利用するハードウェアアクセラレーションのためのアプリケーションを指定する。ハードウェアアクセラレートされた関数は、関数呼び出しによって指定される。ハードウェアアクセラレートされた関数へのインタフェース(例えば、この例におけるPLノード)は、データフロー・グラフ上の接続とは対照的に、関数呼び出しおよび関数呼び出しで提供される様々な引数によって定義される。
【0160】
実施例6のソースコードに示すように、ノードAおよびFは、PL214内での実装のために指定され、ノードB、C、D、およびEは、DPEアレイ202内での実装のために指定される。ノードの接続性は、ソースコード内のデータ転送エッジによって指定される。実施例6のソースコードはまた、PS212で実行されるトップレベルのテストベンチおよび制御プログラムを指定する。
【0161】
図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に接続される。
【0162】
DPE204-13のために生成されたバイナリは、DPE204-13がノードBおよびCに対応する計算を実施するために必要なオブジェクトコードと、DPE204-13とDPE204-14との間およびDPE204-13とDPE204-3との間のデータパスを確立するための構成データとを含む。DPE204-4のために生成されたバイナリは、DPE204-4がノードDおよびEに対応する計算を実施するために必要なオブジェクトコードと、DPE204-14およびDPE204-5とのデータパスを確立するための構成データとを含む。
【0163】
DPE204-13およびDPE204-4をSoCインタフェースブロック206に接続するために、DPE204-3、204-5、204-6、204-7、204-8、および204-9などの他のDPE204のための他のバイナリが生成される。明らかに、そのようなバイナリは、そのような他のDPE204が他の計算を実装する(それに割り当てられたアプリケーションのノードを有する)場合、任意のオブジェクトコードを含む。
【0164】
この例では、ハードウェアコンパイラ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のかなり近くに配置することができる。
【0165】
図17Bは、SoC200へのアプリケーション1700の別の例示的なマッピングを例示する。
図17Bは、
図17Aに示されるよりも代替的でより詳細な例を示す。
図17Bは、例えば、DPEコンパイラ1602によって実行される、DPEアレイ202の特定のDPE204へのアプリケーション1700のノードのマッピング、アプリケーション1700のノードがマッピングされるDPE204間で確立される接続性、アプリケーション1700のノードへのDPE204のメモリモジュール内のメモリの割り当て、DPE204のメモリおよびコアインタフェース(例えば、428、430、432、434、402、404、406、および408)および/またはDPE相互接続306内のストリームスイッチへのデータ転送のマッピング(双頭矢印で表される)を示す。
【0166】
図17Bの例では、コア1704、1708、1712、1716、および1720とともに、メモリモジュール1702、1706、1710、1714、および1718が示されている。コア1704、1708、1712、1716、および1720は、それぞれプログラムメモリ1722、1724、1726、1728、1730を含む。上段において、コア1704およびメモリモジュール1706はDPE204を形成し、コア1708およびメモリモジュール1710は別のDPE204を形成する。下段において、メモリモジュール1714およびコア1716はDPE204を形成し、メモリ1718およびコア1720は別のDPE204用である。
【0167】
示されるように、ノード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に接続される。
【0168】
図17Bは、アプリケーションのノード間の接続性が、コア間でメモリを共有し、かつDPE相互接続306を使用するメモリおよび/またはコアインタフェースを使用して実装され得ることを示す。
【0169】
図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コンパイラ1604に更新されたNoCソリューションを要求することができる。その場合、ハードウェアコンパイラ1606は、NoC制約を有するNoCコンパイラ1604を呼び出して、ノードFの異なる入口/出口ポイント、例えば入口/出口ポイント1812を指定する更新されたNoCソリューションを生成することができる。ノードFの異なる入口/出口ポイントは、ハードウェアコンパイラ1606が、更新されたNoCソリューションで指定された新たに指定された入口/出口ポイントのより近くにノードFを配置し、NoC208で利用可能なより高速なデータパスを利用することを可能にする。
【0170】
図19は、
図1に関連して説明されたシステムによって実行可能な別の例示的なソフトウェアアーキテクチャ1900を示す。例えば、アーキテクチャ1900は、
図1のプログラムモジュール120のうちの1つまたは複数として実装されてもよい。
図19の例では、アプリケーション1902は、SoC200内での実装を意図している。
【0171】
図19の例では、ユーザは、システムによって提供されるユーザインタフェース1906と対話することができる。ユーザインタフェース1906と対話する際に、ユーザは、アプリケーション1902、アプリケーション1902の性能および分割制約1904、ならびにベースプラットフォーム1908を指定または提供することができる。
【0172】
アプリケーション1902は、SoC200において利用可能な異なるサブシステムにそれぞれ対応する複数の異なる部分を含むことができる。アプリケーション1902は、例えば、実施例6に関連して説明したように指定することができる。アプリケーション1902は、DPEアレイ202に実装されるソフトウェア部分と、PL214に実装されるハードウェア部分とを含む。アプリケーション1902は、PS212に実装される追加のソフトウェア部分と、NoC208に実装される部分とを任意選択的に含んでもよい。
【0173】
(性能および分割制約1904の)分割制約は、任意選択的に、アプリケーション1902の様々なノードが実装される場所またはサブシステムを指定する。例えば、分割制約は、アプリケーション1902のノードごとに、ノードがDPEアレイ202に実装されるか、PL214に実装されるかを示すことができる。他の例では、位置制約は、カーネルのDPEへのマッピング、ネットワークまたはデータフローのストリームスイッチへのマッピング、およびバッファのDPEのメモリモジュールおよび/またはメモリモジュールのバンクへのマッピングを実行するために、より具体的または詳細な情報をDPEコンパイラ1602に提供することができる。
【0174】
例示的な例として、アプリケーションの実装は、特定のマッピングを必要とする場合がある。例えば、カーネルの複数のコピーがDPEアレイに実装され、カーネルの各コピーが異なるデータセット上で同時に動作するアプリケーションでは、DPEアレイの異なるDPEで実行されるカーネルのすべてのコピーについて、データセットを同じ相対アドレス(メモリ内の位置)に配置することが好ましい。これは、位置制約を使用して達成することができる。この条件がDPEコンパイラ1602によって支持されない場合、カーネルの各コピーは、DPEアレイ内の複数の異なるDPEにわたって同じプログラミングを複製するのではなく、別々にまたは独立してプログラムされなければならない。
【0175】
別の例示的な例は、DPE間のカスケードインタフェースを利用するアプリケーションに位置制約を課すことである。カスケードインタフェースは各行で一方向に流れるため、カスケードインタフェースを使用して結合されたDPEのチェーンの開始は、欠落したカスケードインタフェースを有するDPE(例えば、角DPE)またはDPEアレイの他の場所で容易に複製することができない位置(例えば、行内の最後のDPE)で開始しないことが好ましい場合がある。位置制約は、アプリケーションのDPEのチェーンの開始を、特定のDPEで開始させることができる。
【0176】
(性能および分割制約1904の)性能制約は、DPEアレイ202またはPL214のいずれにあるかにかかわらず、ノードの実装によって達成される電力要件、レイテンシ要件、タイミング、および/またはデータスループットなどの様々なメトリックを指定することができる。
【0177】
ベースプラットフォーム1908は、SoC200が結合されている回路基板上の回路と対話および/または接続するSoC200に実装されるインフラストラクチャ回路の説明である。ベースプラットフォーム1908は、合成可能であってもよい。ベースプラットフォーム1908は、例えば、SoC200の外部(例えば、SoC200の外部)から信号を受信し、SoC200の外部のシステムおよび/または回路に信号を提供する、SoC200内に実装される回路を指定する。例として、ベースプラットフォーム1908は、
図1のホストシステム102および/またはコンピューティングノード100と通信するためのペリフェラルコンポーネントインターコネクト(PCI)ノード、揮発性メモリ134および/または不揮発性メモリ136にアクセスするための1つまたは複数のメモリコントローラ、および/またはDPEアレイ202および/またはPL214をPCIeノードに結合する内部インタフェースなどの他のリソースなどの回路リソースを指定することができる。ベースプラットフォーム1908によって指定される回路は、特定のタイプの回路基板を所与としてSoC200に実装され得る任意の用途に利用可能である。これに関して、ベースプラットフォーム1908は、SoC200が結合される特定の回路基板に固有である。
【0178】
一例では、分割器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の各々を、別個のファイルまたは別個のデータ構造として生成することができる。
【0179】
図示されているように、異なるサブシステムに対応する異なる部分の各々は、サブシステム固有の異なるコンパイラによって処理される。例えば、PSコンパイラ1918は、PS部分1912をコンパイルして、PS212によって実行可能なオブジェクトコードを含む1つまたは複数のバイナリを生成することができる。DPEコンパイラ1602は、DPEアレイ部分1914をコンパイルして、異なるDPE204によって実行可能なオブジェクトコード、アプリケーションデータ、および/または構成データを含む1つまたは複数のバイナリを生成することができる。ハードウェアコンパイラ1606は、PL部分1916で実装フローを実行して、PL214にPL部分1916を実装するためにSoC200にロードされ得る構成ビットストリームを生成することができる。本明細書で定義される場合、「実装フロー」という用語は、配置およびルーティングならびに場合により合成が行われるプロセスを意味する。NoCコンパイラ1604は、NoC208にロードされると、アプリケーション1902の様々なマスタおよびスレーブを接続するデータパスをその中に作成する、NoC208の構成データを指定するバイナリを生成することができる。コンパイラ1918、1602、1604、および/または1606によって生成されたこれらの異なる出力は、バイナリおよび構成ビットストリーム1924として示されている。
【0180】
特定の実施態様では、コンパイラ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を呼び出すことができる。
【0181】
結果として得られるバイナリおよび構成ビットストリーム1924は、様々な異なるターゲットのいずれかに提供され得る。例えば、結果として得られるバイナリおよび構成ビットストリーム1924は、シミュレーションプラットフォーム1926、ハードウェアエミュレーションプラットフォーム1928、RTLシミュレーションプラットフォーム1930、および/またはターゲットIC1932に提供され得る。RTLシミュレーションプラットフォーム1930の場合、ハードウェアコンパイラ1922は、RTLシミュレーションプラットフォーム1930でシミュレートすることができるPL部分1916のRTLを出力するように構成することができる。
【0182】
シミュレーションプラットフォーム1926、エミュレーションプラットフォーム1928、RTLシミュレーションプラットフォーム1930、および/またはターゲットIC1932内のアプリケーション1902の実装から得られた結果は、性能プロファイラおよびデバッガ1934に提供することができる。性能プロファイラおよびデバッガ1934からの結果は、ユーザインタフェース1906に提供されてもよく、ユーザは、アプリケーション1902の実行および/またはシミュレーションの結果を見ることができる。
【0183】
図20は、SoC200においてアプリケーションを実装するための設計フローを実行する例示的な方法2000を示す。方法2000は、
図1に関連して説明したようなシステムによって実行することができる。システムは、
図16または
図19に関連して説明したようなソフトウェアアーキテクチャを実行することができる。
【0184】
ブロック2002において、システムはアプリケーションを受信する。アプリケーションは、SoC200のDPEアレイ202内に実装するためのソフトウェア部分と、SoC200のPL214内に実装するためのハードウェア部分とを指定することができる。
【0185】
ブロック2004において、システムは、アプリケーションの論理アーキテクチャを生成することができる。例えば、DPEコンパイラ1602は、システムによって実行されると、DPEアレイ202に実装されるアプリケーションのソフトウェア部分および任意の高レベルのユーザ指定メトリックに基づいて論理アーキテクチャを生成することができる。DPEコンパイラ1602はまた、DPEアレイ202を出入りする接続のSoCインタフェースブロック206の物理データパスへのマッピングを指定するSoCインタフェースブロックソリューションを生成することができる。
【0186】
別の態様では、論理アーキテクチャおよび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に出力することができる。
【0187】
一態様では、論理アーキテクチャを生成することは、DPEコンパイラ1602によって実行されると、
図19に関連して前述した分割を実装する。様々な例示的なスキーマは、
図19の異なるコンパイラ(DPEコンパイラ1602、ハードウェアコンパイラ1606、およびNoCコンパイラ1604)が、各それぞれのコンパイラに割り当てられたアプリケーションの部分をコンパイルしながら決定および制約を交換する方法を示す。様々な例示的なスキーマは、決定および/または制約がSoC200の異なるサブシステムにわたって論理的に行われる方法をさらに示す。
【0188】
ブロック2006において、システムは、ハードウェア部分のブロック図を構築することができる。例えば、ハードウェアコンパイラ1606は、システムによって実行されると、ブロック図を生成することができる。ブロック図は、論理アーキテクチャによって指定されるようなアプリケーションのハードウェア部分を、SoC200のベースプラットフォームと組み合わせる。例えば、ハードウェアコンパイラ1606は、ブロック図を生成する際に、ハードウェア部分とベースプラットフォームとを接続することができる。さらに、ハードウェアコンパイラ1606は、SoCインタフェースブロックソリューションに基づいて、アプリケーションのハードウェア部分に対応するIPコアをSoCインタフェースブロックに接続するためのブロック図を生成することができる。
【0189】
例えば、論理アーキテクチャによって指定されると、アプリケーションのハードウェア部分内の各ノードは、特定のRTLコア(例えば、カスタムRTLのユーザ提供または指定された部分)または利用可能なIPコアにマッピングすることができる。ノードからコアへのマッピングがユーザによって指定されると、ハードウェアコンパイラ1606は、ベースプラットフォームの様々な回路ブロック、論理アーキテクチャごとにDPEアレイ202とインタフェースするのに必要なPL214の任意のIPコア、および/またはPL214に実装される任意の追加のユーザ指定IPコアおよび/またはRTLコアを指定するためのブロック図を構築することができる。ユーザによって手動で挿入され得る追加のIPコアおよび/またはRTLコアの例には、データ幅変換ブロック、ハードウェアバッファ、および/またはクロックドメイン論理が含まれるが、これらに限定されない。一態様では、ブロック図の各ブロックは、PL214に実装される特定のコア(例えば、回路ブロック)に対応することができる。ブロック図は、SoCインタフェースブロックソリューションおよび論理アーキテクチャから決定される、PLに実装されるコアの接続性、ならびにNoC208および/またはSoCインタフェースブロック206の物理リソースとのコアの接続性を指定する。
【0190】
一態様において、ハードウェアコンパイラ1606はまた、論理アーキテクチャに従ってNoCトラフィックを作成し、NoCコンパイラ1604を実行してNoCソリューションを取得することによって、PL214のコアとグローバルメモリ(例えば、揮発性メモリ134)との間の論理接続を作成することができる。一例では、ハードウェアコンパイラ1606は、論理接続をルーティングして、ブロック図および論理接続を実装するためのPL214の容量を検証することができる。別の態様では、ハードウェアコンパイラ1606は、実際のデータトラフィックを有するブロック図の機能を検証するために、シミュレーションの一部として、1つまたは複数のデータトラフィック生成器を有するSoCインタフェースブロックトレース(例えば、以下により詳細に説明する)を使用することができる。
【0191】
ブロック2008において、システムは、ブロック図上の実装フローを実行する。例えば、ハードウェアコンパイラは、必要に応じてブロック図上の合成、配置、およびルーティングを含む実装フローを実行して、SoC200にロードされてアプリケーションのハードウェア部分をPL214に実装することができる構成ビットストリームを生成することができる。
【0192】
ハードウェアコンパイラ1606は、SoCインタフェースブロックソリューションおよびNoCソリューションを使用して、ブロック図上の実装フローを実行することができる。例えば、SoCインタフェースブロックソリューションは、特定のDPE204がPL214と通信するSoCインタフェースブロック206の特定のストリームチャネルを指定するので、配置器は、SoCインタフェースブロック206を介してDPE204に接続するブロック図のブロックを、ブロックが接続するSoCインタフェースブロック206の特定のストリームチャネルの近くに(例えば、特定の距離内で)配置することができる。ブロックのポートは、例えば、SoCインタフェースブロックソリューションによって指定されたストリームチャネルと相関させることができる。ハードウェアコンパイラ1606はまた、SoCインタフェースブロックソリューションから決定されたように、ポートに結合された特定のストリームチャネルに接続するPL214のBLIにポートに入力および/またはポートから出力される信号をルーティングすることによって、SoCインタフェースブロック206に接続するブロック図のブロックのポート間の接続をルーティングすることができる。
【0193】
同様に、NoCソリューションは、PL214内の回路ブロックが接続される特定の入口/出口ポイントを指定するので、配置器は、NoC208への接続を有するブロック図のブロックを、ブロックが接続される特定の入口/出口ポイントの近くに(例えば、特定の距離内で)配置することができる。ブロックのポートは、例えば、NoCソリューションの入口/出口ポイントと相関させることができる。ハードウェアコンパイラ1606はまた、NoCソリューションから決定されたように、ポートに論理的に結合されたNoC208の入口/出口ポイントにポートに入力および/またはポートから出力される信号をルーティングすることによって、NoC208の入口/出口ポイントに接続するブロック図のブロックのポート間の接続をルーティングすることができる。ハードウェアコンパイラ1606はさらに、PL214内のブロックのポートを互いに接続する任意の信号をルーティングすることができる。しかしながら、いくつかのアプリケーションでは、NoC208は、DPEアレイ202とPL214との間でデータを運ぶために使用されなくてもよい。
【0194】
ブロック2010において、実装フロー中、ハードウェアコンパイラは、DPEコンパイラ1602および/またはNoCコンパイラ1604と設計データを任意選択的に交換する。例えば、ハードウェアコンパイラ1606、DPEコンパイラ1602、およびNoCコンパイラ1604は、
図16に関連して説明したような設計データを、一度に、必要に応じて、または反復的にもしくは繰り返し交換することができる。ブロック2010は、任意選択的に実行されてもよい。ハードウェアコンパイラ1606は、例えば、ブロック図の構築前または構築中、配置前および/または配置中、および/またはルーティング前および/またはルーティング中に、DPEコンパイラ1602および/またはNoCコンパイラ1604と設計データを交換することができる。
【0195】
ブロック2012において、システムは、ハードウェアコンパイラ1606によって生成された最終ハードウェア設計を、ハードウェアパッケージとしてエクスポートする。ハードウェアパッケージは、PL214をプログラムするために使用される構成ビットストリームを含む。ハードウェアパッケージは、アプリケーションのハードウェア部分に従って生成される。
【0196】
ブロック2014において、ユーザは、ハードウェアパッケージを使用して新しいプラットフォームを構成する。ユーザは、ユーザ提供の構成に基づいて新しいプラットフォームの生成を開始する。ハードウェアパッケージを使用してシステムによって生成されたプラットフォームは、アプリケーションのソフトウェア部分をコンパイルするために使用される。
【0197】
ブロック2016において、システムは、DPEアレイ202における実装のためにアプリケーションのソフトウェア部分をコンパイルする。例えば、システムは、DPEコンパイラ1602を実行して、DPEアレイ202の様々なDPE204にロードすることができる1つまたは複数のバイナリを生成する。DPE204のバイナリは、DPE204のオブジェクトコード、アプリケーションデータ、および構成データを含むことができる。構成ビットストリームおよびバイナリが生成されると、システムは、構成ビットストリームおよびバイナリをSoC200にロードして、その中にアプリケーションを実装することができる。
【0198】
別の態様では、ハードウェアコンパイラ1606は、ハードウェア実装をDPEコンパイラ1602に提供することができる。DPEコンパイラ1602は、実装フローを実行する際にハードウェアコンパイラ1606によって依拠された最終的なSoCインタフェースブロックソリューションを抽出することができる。DPEコンパイラ1602は、ハードウェアコンパイラ1606によって使用されるのと同じSoCインタフェースブロックソリューションを使用してコンパイルを実行する。
【0199】
図20の例では、アプリケーションの各部分は、サブシステム固有のコンパイラによって解決される。コンパイラは、アプリケーションのために実装されるような様々なサブシステム(例えば、SoCインタフェースブロック)間のインタフェースが準拠し一貫していることを保証するために、例えば制約および/または提案されたソリューションなどの設計データを通信することができる。
図20には具体的に示されていないが、NoCコンパイラ1604はまた、アプリケーションで使用される場合、NoC208をプログラムするためのバイナリを生成するために呼び出されてもよい。
【0200】
図21は、SoC200においてアプリケーションを実装するための設計フローを実行する別の例示的な方法2100を示す。方法2100は、
図1に関連して説明したようなシステムによって実行することができる。システムは、
図16または
図19に関連して説明したようなソフトウェアアーキテクチャを実行することができる。方法2100は、システムがアプリケーションを受信するブロック2102において開始することができる。アプリケーションは、SoC200に実装されるデータフロー・グラフとして指定することができる。アプリケーションは、DPEアレイ202に実装するためのソフトウェア部分、PL214に実装するためのハードウェア部分、およびSoC200のNoC208に実装するためのデータ転送を含むことができる。アプリケーションはまた、PS212に実装するためのさらなるソフトウェア部分を含むことができる。
【0201】
ブロック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は、シミュレーション中のSoCインタフェースブロックを介したデータ転送を、
図21に示す設計フロー中の後続の使用のための「SoCインタフェースブロックトレース」として取り込むことができる。
【0202】
ブロック2104において、ハードウェアコンパイラ1606は、PL214に実装されるアプリケーションのハードウェア部分のブロック図を生成する。ハードウェアコンパイラ1606は、論理アーキテクチャおよびSoCインタフェースブロックソリューションに基づいてブロック図を生成し、任意選択的に、論理アーキテクチャによって指定された回路ブロックを有するブロック図に含まれる、ユーザによって指定された追加のIPコアを生成する。一態様において、ユーザは、このような追加のIPコアを手動で挿入し、IPコアを論理アーキテクチャで指定されたハードウェア記述の他の回路ブロックに接続する。
【0203】
ブロック2106において、ハードウェアコンパイラ1606は、任意選択的に、1つまたは複数のユーザ指定のSoCインタフェースブロック制約を受信し、SoCインタフェースブロック制約をDPEコンパイラ1602に提供する。
【0204】
一態様では、アプリケーションのハードウェア部分を実装する前に、ハードウェアコンパイラ1606は、ブロック図および論理アーキテクチャに基づいて、NoC208、DPEアレイ202、およびPL214の間に定義された物理接続を評価することができる。ハードウェアコンパイラ1606は、ブロック図のアーキテクチャシミュレーションを実行して、ブロック図(例えば、設計のPL部分)とDPEアレイ202および/またはNoC208との間の接続を評価することができる。例えば、ハードウェアコンパイラ1606は、DPEコンパイラ1602によって生成されたSoCインタフェースブロックトレースを使用してシミュレーションを実行することができる。例示的かつ非限定的な例として、ハードウェアコンパイラ1606は、ブロック図のSystemCシミュレーションを実行することができる。シミュレーションでは、SoCインタフェースブロックトレースを使用して、PL214とDPEアレイ202(SoCインタフェースブロック206を介して)および/またはNoC208との間のブロック図およびストリームチャネル(例えば、物理的接続)のデータトラフィックが生成される。シミュレーションは、ハードウェアコンパイラ1606に提供されるシステム性能および/またはデバッグ情報を生成する。
【0205】
ハードウェアコンパイラ1606は、システムパフォーマンスデータを評価することができる。例えば、ハードウェアコンパイラ1606が、システムパフォーマンスデータから、アプリケーションのハードウェア部分の1つまたは複数の設計メトリックが満たされていないと決定した場合、ハードウェアコンパイラ1606は、ユーザの指示の下で、1つまたは複数のSoCインタフェースブロック制約を生成することができる。ハードウェアコンパイラ1606は、SoCインタフェースブロック制約を要求としてDPEコンパイラ1602に提供する。
【0206】
DPEコンパイラ1602は、アプリケーションのDPE部分の、ハードウェアコンパイラ1606によって提供されるSoCインタフェースブロック制約を利用する、DPEアレイ202のDPE204への更新されたマッピングを実行することができる。例えば、PL214内のハードウェア部分がSoCインタフェースブロック206を介して直接(例えば、NoC208を横断せずに)DPEアレイ202に接続するアプリケーションが実装される場合、DPEコンパイラ1602は、NoCコンパイラ1604を起動せずにハードウェアコンパイラ1606のための更新されたSoCインタフェースブロックソリューションを生成することができる。
【0207】
ブロック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によって示されるように同時に動作することができる。
【0208】
ブロック2110において、ハードウェアコンパイラ1606は、ブロック図上の合成を実行することができる。ブロック2112において、ハードウェアコンパイラ1606は、ブロック図上の配置およびルーティングを実行する。ブロック2114において、配置および/またはルーティングを実行しながら、ハードウェアコンパイラは、ブロック図の実装、例えば、実装フローのこれらの異なる段階のいずれかにおけるハードウェア部分の実装(例えば、ハードウェア設計)の現在の状態が、アプリケーションのハードウェア部分の設計メトリックを満たすかどうかを決定することができる。例えば、ハードウェアコンパイラ1606は、現在の実装が配置前、配置中、ルーティング前、またはルーティング中に設計メトリックを満たすかどうかを決定することができる。アプリケーションのハードウェア部分の現在の実装が設計メトリックを満たさないと決定したことに応答して、方法2100はブロック2116に続く。そうでない場合、方法2100はブロック2120に進む。
【0209】
ブロック2116において、ハードウェアコンパイラは、1つまたは複数のユーザ指定のSoCインタフェースブロック制約をDPEコンパイラ1602に提供することができる。ハードウェアコンパイラ1606は、任意選択的に、1つまたは複数のNoC制約をNoCコンパイラ1604に提供することができる。説明したように、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ソリューションを使用して、配置および/またはルーティングを実行し続ける。
【0210】
図21は、コンパイラ間の設計データの交換が反復的に行われ得ることを示す。例えば、配置および/またはルーティング段階中の複数の異なる点のいずれかにおいて、ハードウェアコンパイラ1606は、アプリケーションのハードウェア部分の実装の現在の状態が、確立された設計メトリックを満たすかどうかを決定することができる。満たさない場合、ハードウェアコンパイラ1606は、ハードウェアコンパイラ1606が配置およびルーティングの目的で使用する更新されたSoCインタフェースブロックソリューションおよび更新されたNoCソリューションを取得するために、説明したように設計データの交換を開始することができる。ハードウェアコンパイラ1606は、NoC208の構成が更新される(例えば、PL214からのデータは、NoC208を介して他の回路ブロックに提供され、および/または他の回路ブロックから受信される)場合、NoCコンパイラ1604を呼び出すだけでよいことを理解されたい。
【0211】
ブロック2120において、アプリケーションのハードウェア部分が設計メトリックを満たす場合、ハードウェアコンパイラ1606は、PL214内のハードウェア部分の実装を指定する構成ビットストリームを生成する。ハードウェアコンパイラ1606はさらに、最終的なSoCインタフェースブロックソリューション(例えば、配置およびルーティングのために使用されるSoCインタフェースブロックソリューション)をDPEコンパイラ1602に提供し、NoCコンパイラ1604への配置およびルーティングに使用することができる最終的なNoCソリューションを提供することができる。
【0212】
ブロック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をそれぞれプログラムするために使用される最終バイナリを生成することができる。
【0213】
ブロック2124において、PSコンパイラ1918はPSバイナリを生成する。PSバイナリは、PS212が実行するオブジェクトコードを含む。PSバイナリは、例えば、PS212が実行する制御プログラムを実装し、アプリケーションが実装されたSoC200の動作を監視する。DPEコンパイラ1602はまた、PSコンパイラ1918によってコンパイルされ、PS212によって実行されてDPEアレイ202のDPE204に対する読み出しおよび/または書き込みをすることができるDPEアレイドライバを生成することができる。
【0214】
ブロック2126において、システムは、構成ビットストリームおよびバイナリをSoC200に展開することができる。システムは、例えば、様々なバイナリおよび構成ビットストリームを、SoC200に提供され、かつSoC200にロードされてその中にアプリケーションを実装することができるPDIに結合することができる。
【0215】
図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は、アプリケーションのソフトウェア部分のマッピングおよびルーティングを開始する前に再ルーティングが試みられる増分アプローチを示す。
【0216】
方法2200は、ハードウェアコンパイラ1606がDPEコンパイラ1602に1つまたは複数のSoCインタフェースブロック制約を提供するブロック2202で開始することができる。ハードウェアコンパイラ1606は、例えば、実装フロー中に、アプリケーションのハードウェア部分の設計メトリックが満たされていない、または満たされないと決定したことに応答して、1つまたは複数のユーザ指定のSoCインタフェースブロック制約を受信し、および/または1つまたは複数のSoCインタフェースブロック制約を生成することができる。SoCインタフェースブロック制約は、アプリケーションのハードウェア部分の改善された結果の品質(QoS)として得られると予想される、SoCインタフェースブロック206の物理ストリームチャネルへの論理リソースの好ましいマッピングを指定することができる。
【0217】
ハードウェアコンパイラ1606は、SoCインタフェースブロック制約をDPEコンパイラ1602に提供する。ハードウェアコンパイラ1606から提供されるSoCインタフェースブロック制約は、2つの異なるカテゴリに分類することができる。SoCインタフェースブロック制約の第1のカテゴリは、ハード制約である。SoCインタフェースブロック制約の第2のカテゴリは、ソフト制約である。ハード制約は、SoC200内でアプリケーションを実装するために満たされなければならない設計制約である。ソフト制約は、SoC200のためのアプリケーションの実装において違反されうる設計制約である。
【0218】
一例では、ハード制約は、PL214に実装されるアプリケーションのハードウェア部分に対するユーザ指定の制約である。ハード制約は、ユーザ指定の制約である位置、電力、タイミングなどの任意の利用可能な制約タイプを含むことができる。ソフト制約は、記載されているように論理リソースのSoCインタフェースブロック206のストリームチャネルへの特定のマッピングを指定する制約など、実装フロー全体を通してハードウェアコンパイラ1606および/またはDPEコンパイラ1602によって生成される任意の利用可能な制約を含むことができる。
【0219】
ブロック2204において、DPEコンパイラ1602は、SoCインタフェースブロック制約の受信に応答して、更新されたSoCインタフェースブロックソリューションを生成する際に受信したSoCインタフェースブロック制約を組み込むための検証プロセスを開始する。ブロック2206において、DPEコンパイラ1602は、アプリケーションのハードウェア部分に関連するハードウェアコンパイラ1606から受信したハード制約とソフト制約とを区別することができる。
【0220】
ブロック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に進む。
【0221】
ブロック2210において、DPEコンパイラ1602は、ハード制約のみに従いながらアプリケーションのソフトウェア部分をルーティングする。ブロック2210において、DPEコンパイラ1602は、ルーティング動作の目的のためにソフト制約を無視する。DPEコンパイラ1602が、ハード制約のみに従いながら、DPEアレイ202における実装のためのアプリケーションのソフトウェア部分のルーティングに成功した場合、方法2200はブロック2218に続く。DPEコンパイラ1602が、ハード制約のみに従いながらにDPEアレイ202内のアプリケーションのソフトウェア部分のための経路を生成することができない場合、方法2200はブロック2212に進む。
【0222】
ブロック2208および2210は、ハードウェアコンパイラ1606から提供されるSoCインタフェースブロック制約を使用して、実行されるDPEノードのフルマップ(例えば、配置)および経路よりも短い時間で、更新されたSoCインタフェースブロックソリューションを作成しようとする検証動作のための手法を示す。したがって、ブロック2208および2210は、DPEノードをDPEアレイ202のDPE204にマッピング(例えば、再マッピング)または「配置」しようと試みることなく、ルーティングのみを含む。
【0223】
方法2200は、ルーティングのみではハードウェアコンパイラからのSoCインタフェースブロック制約を使用して更新されたSoCインタフェースブロックソリューションに到達することができない場合、ブロック2212に続く。ブロック2212において、DPEコンパイラ1602は、ハード制約およびソフト制約の両方を使用して、アプリケーションのソフトウェア部分をDPEアレイ202内のDPEにマッピングすることができる。DPEコンパイラ1602はまた、SoC200のアーキテクチャ(例えば、接続性)でプログラムされる。DPEコンパイラ1602は、SoCインタフェースブロック206の物理チャネルへ(例えば、ストリームチャネルへ)の論理リソースの実際の割り当てを実行し、SoC200のアーキテクチャ接続性をモデル化することもできる。
【0224】
一例として、PLノードBと通信するDPEノードAを考える。ブロック図の各ブロックは、PL214に実装される特定のコア(例えば、回路ブロック)に対応することができる。PLノードBは、SoCインタフェースブロック206内の物理チャネルXを介してDPEノードAと通信する。物理チャネルXは、DPEノードAとPLノードBとの間でデータストリームを運ぶ。DPEコンパイラ1602は、DPEYと物理チャネルXとの間の距離が最小になるように、DPEノードAを特定のDPEYにマッピングすることができる。
【0225】
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の列にマッピングする。
【0226】
ブロック2214において、DPEコンパイラ1602は、ハード制約のみに従いながらアプリケーションの再マッピングされたソフトウェア部分をルーティングする。DPEコンパイラ1602が、ハード制約のみに従いながら、DPEアレイ202における実装のためにアプリケーションの再マッピングされたソフトウェア部分のルーティングに成功した場合、方法2200はブロック2218に続く。DPEコンパイラ1602が、ハード制約のみに従いながらにDPEアレイ202内のアプリケーションのソフトウェア部分のための経路を生成することができない場合、方法2200はブロック2216に進む。ブロック2216において、DPEコンパイラ1602は、検証動作が失敗したことを示す。DPEコンパイラ1602は、通知を出力してもよく、通知をハードウェアコンパイラ1606に提供してもよい。
【0227】
ブロック2218において、DPEコンパイラ1602は、更新されたSoCインタフェースブロックソリューションおよび更新されたSoCインタフェースブロックソリューションのスコアを生成する。DPEコンパイラ1602は、更新されたルーティング、または更新されたマッピング、およびブロック2208、ブロック2210、またはブロック2212および2214で決定されたルーティングに基づいて、更新されたSoCインタフェースブロックソリューションを生成する。
【0228】
DPEコンパイラ1602によって生成されたスコアは、実行されたマッピングおよび/またはルーティング動作に基づいて、SoCインタフェースブロックソリューションの品質を示す。1つの例示的な実装では、DPEコンパイラ1602は、いくつのソフト制約が満たされなかったか、およびソフト制約で要求されたストリームチャネルと更新されたSoCインタフェースブロックソリューションで割り当てられた実際のチャネルとの間の距離に基づいてスコアを決定する。満たされていないソフト制約の数および距離は、例えば、両方ともスコアに反比例し得る。
【0229】
別の例示的な実装形態では、DPEコンパイラ1602は、1つまたは複数の設計コストメトリックを使用して、更新されたSoCインタフェースブロックソリューションの品質に基づいてスコアを決定する。これらの設計コストメトリックは、SoCインタフェースブロックソリューションによってサポートされるデータ移動の数、メモリ競合コスト、および経路のレイテンシを含み得る。一態様では、DPEアレイ202におけるデータ移動の数は、SoCインタフェースブロック206を介してデータを転送するために必要なDMA転送の数に加えて、DPEアレイ202で使用されるDMA転送の数によって定量化することができる。メモリ競合コストは、各メモリバンクの同時アクセス回路(例えば、DPEまたはDMA)の数に基づいて決定することができる。経路のレイテンシは、SoCインタフェースブロック206のポートと個々のソースまたは宛先DPE204との間でデータを転送するために必要な最小サイクル数によって定量化することができる。DPEコンパイラ1602は、設計コストメトリックが低い(例えば、設計コストメトリックの合計が低い)場合、より高いスコアを決定する。
【0230】
別の例示的な実装では、更新されたSoCインタフェースブロックソリューションの総スコアは、分数(例えば、80/100)として計算され、分子は、追加のDMA転送の数、2を超える、各メモリバンクの同時アクセス回路の数、およびSoCインタフェースブロック206ポートとDPE204コアとの間の経路に必要なホップ数の合計だけ100から減少する。
【0231】
ブロック2220において、DPEコンパイラ1602は、更新されたSoCインタフェースブロックソリューションおよびスコアをハードウェアコンパイラ1606に提供する。ハードウェアコンパイラ1606は、各それぞれのSoCインタフェースブロックソリューションのスコアに基づいて、DPEコンパイラ1602から受信した様々なSoCインタフェースブロックソリューションを評価することができる。一態様において、ハードウェアコンパイラ1606は、例えば、以前のSoCインタフェースブロックソリューションを保持することができる。ハードウェアコンパイラ1606は、更新されたSoCインタフェースブロックソリューションのスコアを以前の(例えば、直前のSoCインタフェースブロックソリューション)のスコアと比較し、更新されたSoCインタフェースブロックソリューションのスコアが以前のSoCインタフェースブロックソリューションのスコアを超える場合、更新されたSoCインタフェースブロックソリューションを使用することができる。
【0232】
別の例示的な実装形態では、ハードウェアコンパイラ1606は、DPEコンパイラ1602から80/100のスコアを有するSoCインタフェースブロックソリューションを受信する。ハードウェアコンパイラ1606は、PL214内のアプリケーションのハードウェア部分の実装に到達することができず、1つまたは複数のSoCインタフェースブロック制約をDPEコンパイラ1602に提供する。ハードウェアコンパイラ1606がDPEコンパイラ1602から受信した更新されたSoCインタフェースブロックソリューションは、20/100のスコアを有する。その場合、新しく受信されたSoCインタフェースブロックソリューションのスコアが以前のSoCインタフェースブロックソリューションのスコアを超えない(例えば、より低い)と決定したことに応答して、ハードウェアコンパイラ1606は、SoCインタフェースブロック制約のうちの1つまたは複数(例えば、ソフト制約)を緩和し、緩和された制約を含むSoCインタフェースブロック制約をDPEコンパイラ1602に提供する。DPEコンパイラ1602は、緩和された設計制約を考慮して、20/100および/または80/100より高いスコアを有する別のSoCインタフェースブロックソリューションを生成しようと試みる。
【0233】
別の例では、ハードウェアコンパイラ1606は、より高いまたは最高のスコアを有する以前のSoCインタフェースブロックソリューションを使用することを選択することができる。ハードウェアコンパイラ1606は、例えば、直前のSoCインタフェースブロックソリューションよりも低いスコアを有するSoCインタフェースブロックソリューションを受信したことに応答して、またはSoCインタフェースブロック制約のうちの1つまたは複数が緩和された後に以前のSoCインタフェースブロックソリューションよりも低いスコアを有するSoCインタフェースブロックソリューションを受信したことに応答してなど、任意の時点で以前のSoCインタフェースブロックソリューションに戻ることができる。
【0234】
図23は、SoCインタフェースブロックソリューションを処理する例示的な方法2300を示す。方法2300は、受信したSoCインタフェースブロックソリューションを評価し、アプリケーションのハードウェア部分で実装フローを実行する際に使用するための、現在の最良のSoCインタフェースブロックソリューションと呼ばれるSoCインタフェースブロックソリューションを選択するために、ハードウェアコンパイラ1606によって実行することができる。
【0235】
ブロック2302において、ハードウェアコンパイラ1606は、DPEコンパイラ1602からSoCインタフェースブロックソリューションを受信する。ブロック2302で受信されるSoCインタフェースブロックソリューションは、DPEコンパイラ1602から提供される初期または最初のSoCインタフェースブロックソリューションであってもよい。SoCインタフェースブロックソリューションをハードウェアコンパイラ1606に提供する際に、DPEコンパイラ1602は、SoCインタフェースブロックソリューションのスコアをさらに提供する。少なくとも最初に、ハードウェアコンパイラ1606は、現在の最良のSoCインタフェースブロックソリューションに対する最初のSoCインタフェースブロックソリューションを選択する。
【0236】
ブロック2304において、ハードウェアコンパイラ1606は、任意選択的に、ユーザから1つまたは複数のハードSoCインタフェースブロック制約を受信する。ブロック2306において、ハードウェアコンパイラは、アプリケーションのハードウェア部分を実装するための1つまたは複数のソフトSoCインタフェースブロック制約を生成することができる。ハードウェアコンパイラは、ハードウェア設計メトリックを満たすために、ソフトSoCインタフェースブロック制約を生成する。
【0237】
ブロック2308において、ハードウェアコンパイラ1606は、検証のためにSoCインタフェースブロック制約(例えば、ハードおよびソフトの両方)をDPEコンパイラ1602に送信する。SoCインタフェースブロック制約の受信に応答して、DPEコンパイラは、ハードウェアコンパイラ1606から受信したSoCインタフェースブロック制約に基づいて、更新されたSoCインタフェースブロックソリューションを生成することができる。DPEコンパイラ1602は、更新されたSoCインタフェースブロックソリューションをハードウェアコンパイラ1606に提供する。したがって、ブロック2310において、ハードウェアコンパイラは、更新されたSoCインタフェースブロックソリューションを受信する。
【0238】
ブロック2312において、ハードウェアコンパイラ1606は、更新されたSoCインタフェースブロックソリューション(例えば、最後に受信されたSoCインタフェースブロックソリューション)のスコアを第1の(例えば、以前に受信された)SoCインタフェースブロックソリューションのスコアと比較する。
【0239】
ブロック2314において、ハードウェアコンパイラ1606は、更新された(例えば、最後に受信された)SoCインタフェースブロックソリューションのスコアが、以前に受信された(例えば、第1の)SoCインタフェースブロックソリューションのスコアを超えるかどうかを決定する。ブロック2316において、ハードウェアコンパイラ1606は、現在の最良のSoCインタフェースブロックソリューションとして、最後に受信された(例えば、更新された)SoCインタフェースブロックソリューションを選択する。
【0240】
ブロック2318において、ハードウェアコンパイラ1606は、改善目標が達成されたか、または予定時間を超過したかどうかを決定する。例えば、ハードウェアコンパイラ1606は、アプリケーションのハードウェア部分の現在の実装状態がより多くの設計メトリックを満たしているかどうか、および/または1つもしくは複数の設計メトリックを満たすように近づいているかどうかを決定することができる。ハードウェアコンパイラ1606はまた、予定時間が超過されたかどうかを、配置および/またはルーティングに費やされた処理時間の量、ならびにその時間が、最大配置時間、最大ルーティング時間、配置とルーティング両方の最大時間を超過したかどうかに基づいて決定することができる。改善目標に達した、または予定時間を超えたと決定したことに応答して、方法2300はブロック2324に続く。そうでない場合、方法2300はブロック2320に進む。
【0241】
ブロック2324において、ハードウェアコンパイラ1606は、アプリケーションのハードウェア部分を実装するための現在の最良のSoCインタフェースブロックソリューションを使用する。
【0242】
ブロック2320に続き、ハードウェアコンパイラ1606は、SoCインタフェースブロック制約のうちの1つまたは複数を緩和する。ハードウェアコンパイラ1606は、例えば、ソフト制約のうちの1つまたは複数を緩和または変更することができる。ソフトSoCインタフェースブロック制約を緩和または変更する例は、ソフトSoCインタフェースブロック制約を除去する(例えば、削除する)ことを含む。ソフトSoCインタフェースブロック制約を緩和または変更する別の例は、ソフトSoCインタフェースブロック制約を異なるSoCインタフェースブロック制約に置き換えることを含む。置き換えソフトSoCインタフェースブロック制約は、置き換えられる元のものよりも厳しくない場合がある。
【0243】
ブロック2322において、ハードウェアコンパイラ1606は、緩和されたSoCインタフェースブロック制約を含むSoCインタフェースブロック制約を、DPEコンパイラ1602に送信することができる。ブロック2322の後、方法2300はブロック2310にループバックして、説明した処理を継続する。例えば、DPEコンパイラは、ブロック2322においてハードウェアコンパイラから受信したSoCインタフェースブロック制約に基づいて、さらに更新されたSoCインタフェースブロックソリューションを生成する。ブロック2310において、ハードウェアコンパイラは、さらなる更新されたSoCインタフェースブロックソリューションを受信する。
【0244】
方法2300は、実装フローの実行のためおよびSoCインタフェースブロック制約が緩和され得る状況で使用するために、DPEコンパイラ1602からSoCインタフェースブロックソリューションを選択する例示的なプロセスを示す。ハードウェアコンパイラ1606は、調整および/または検証プロセスの一部として、更新されたSoCインタフェースブロックソリューションを取得するために、実装フロー中の様々な異なる時点のいずれかでDPEコンパイラ1602にSoCインタフェースブロック制約を提供することができることを理解されたい。例えば、ハードウェアコンパイラ1606が、(例えば、タイミング、電力、または他のチェックもしくは分析に基づいて)アプリケーションのハードウェア部分の実装が、その現在の状態において、アプリケーションの設計メトリックを満たしていない、または満たさないと決定した任意の時点において、ハードウェアコンパイラ1606は、更新されたSoCインタフェースブロック制約をDPEコンパイラ1602に提供することによって、更新されたSoCインタフェースブロックソリューションを要求することができる。
【0245】
図24は、SoC200に実装するためのアプリケーション2400の別の例を示す。アプリケーション2400は、有向フローグラフとして指定される。ノードは、PLノード、DPEノード、およびI/Oノードを区別するために、異なる陰影および形状である。図示の例では、I/Oノードは、SoCインタフェースブロック206にマッピングされてもよい。PLノードは、PLに実装される。DPEノードは、特定のDPEにマッピングされる。その全体は示されていないが、アプリケーション2400は、DPE204にマッピングされる36個のカーネル(例えば、ノード)、72個のPLからDPEアレイへのデータストリーム、および36個のDPEアレイからPLへのデータストリームを含む。
【0246】
図25は、DPEコンパイラ1602によって生成されたSoCインタフェースブロックソリューションの例示的な図である。
図25のSoCインタフェースブロックソリューションは、DPEコンパイラ1602によって生成され、ハードウェアコンパイラ1606に提供することができる。
図25の例は、DPEコンパイラ1602がDPEアレイ202のDPE204へのDPEノードの初期マッピングを生成するシナリオを示している。さらに、DPEコンパイラ1602は、DPEノードの初期マッピングを正常にルーティングする。
図25の例では、DPEアレイ202の列6~17のみが示されている。さらに、各列は4つのDPE204を含む。
【0247】
図25は、DPEアレイ202のDPE204へのDPEノードのマッピング、およびSoCインタフェースブロック206ハードウェアへのデータストリームのルーティングを示す。DPEコンパイラ1602によって決定された、DPEノード0~35のDPE204へのアプリケーション2400のマッピングは、DPEアレイ202を参照して示されている。DPEとSoCインタフェースブロック206の特定のタイルとの間のデータストリームのルーティングは、矢印の集合として示されている。
図25~30を説明する際の例示の目的のために、
図25に表示されるキーは、ソフト制約、ハード制約、及び適用可能な制約を有さないデータストリームによって制御されるデータストリームを区別するために使用される。
【0248】
図25~30を参照すると、ソフト制約は、DPEコンパイラ1602および/またはハードウェアコンパイラ1606によって決定されたルーティングに対応し、ハード制約は、ユーザ指定のSoCインタフェースブロック制約を含むことができる。
図25に示される制約は、いずれもソフト制約である。
図25の例は、DPEコンパイラ1602が初期SoCインタフェースブロックソリューションの決定に成功した場合を示している。一態様では、DPEコンパイラ1602は、ある列から別の列へと行DPE204に沿って(例えば、左から右へ)移動する他の経路の使用を試みる前に、少なくとも最初に、示されているようにSoCインタフェースブロックソリューションの垂直経路の使用を試みるように構成することができる。
【0249】
図26は、DPEコンパイラ1602によって受信されたルーティング可能なSoCインタフェースブロック制約の例を示す。DPEコンパイラ1602は、更新されたSoCインタフェースブロック制約の形態で更新されたルーティングを指定する、更新されたSoCインタフェースブロックソリューションを生成することができる。
図26の例では、より多くのSoCインタフェースブロック制約がハード制約である。この例では、DPEコンパイラ1602は、示されている各タイプの制約を観察しながら、DPEアレイ202のデータストリームのルーティングに成功する。
【0250】
図27は、DPEコンパイラ1602によって観察されるルーティング不可能なSoCインタフェースブロック制約の例を示す。DPEコンパイラ1602は、
図27に示される制約を観測するSoCインタフェースブロックソリューションを生成することができない。
【0251】
図28は、DPEコンパイラ1602が
図27のソフトタイプSoCインタフェースブロック制約を無視する例を示す。
図28の例では、DPEコンパイラ1602は、ハード制約のみを使用して、実装のためのアプリケーションのソフトウェア部分をDPEアレイ202に正常にルーティングする。制約によって制御されないこれらのデータストリームは、DPEコンパイラ1602が適合すると考えるか、そうすることができる任意の方法でルーティングすることができる。
【0252】
図29は、ルーティング不可能なSoCインタフェースブロック制約の別の例を示す。
図29の例は、ハード制約のみを有する。したがって、DPEコンパイラ1602は、ハード制約を無視することができず、マッピング(または再マッピング)動作を開始する。
【0253】
図30は、
図29のDPEノードの例示的なマッピングを示す。この例では、再マッピングに続いて、DPEコンパイラ1602は、更新されたSoCインタフェースブロックソリューションを生成するために、DPEノードを正常にルーティングすることができる。
【0254】
図31は、ルーティング不可能なSoCインタフェースブロック制約の別の例を示す。
図31の例は、ハード制約のみを有する。したがって、DPEコンパイラ1602は、ハード制約を無視することができず、マッピング動作を開始する。例示の目的のために、DPEアレイ202は、3行のDPE(例えば、各列に3つのDPE)のみを含む。
【0255】
図32は、
図31のDPEノードの例示的なマッピングを示す。
図32は、
図31に関連して説明したように開始された再マッピング動作から得られた結果を示す。この例では、再マッピングに続いて、DPEコンパイラ1602は、更新されたSoCインタフェースブロックソリューションを生成するために、アプリケーションのソフトウェアソリューションを正常にルーティングすることができる。
【0256】
1つの態様では、システムは、マッピング問題の整数線形計画法(LP)式を生成することによって、
図25~32に例示されたマッピングを実行することが可能である。ILP式は、マッピング問題を定義する複数の異なる変数および制約を含むことができる。このシステムは、コストを最小限に抑えながらILP式を解くことができる。コストは、使用されるDMAエンジンの数に少なくとも部分的に基づいて決定することができる。このようにして、システムは、DFGをDPEアレイにマッピングすることができる。
【0257】
別の態様では、システムは、優先度の高い順にDFGのノードを順序付けることができる。システムは、1つまたは複数の因子に基づいて優先度を決定することができる。因子の例は、限定はしないが、DFGグラフ内のノードの高さ、ノードの合計次数(例えば、ノードを出入りするすべてのエッジの合計)、および/またはメモリ、ストリーム、カスケードなどのノードに接続されたエッジのタイプを含むことができる。システムは、親和性および有効性に基づいて、利用可能な最良のDPE上にノードを配置することができる。システムは、このノードのすべてのリソース要件を所与のDPE(例えば、計算リソース、メモリバッファ、ストリームリソース)で満たすことができるかどうかに基づいて有効性を決定することができる。システムは、1つまたは複数の他の因子に基づいて親和性を決定することができる。親和性因子の例は、DMA通信を最小限に抑えるために隣接ノードが既に配置されているノードを同じDPEまたは隣接DPEにノードを配置すること、このノードがカスケードチェーンの一部であるかどうかなどのアーキテクチャ上の制約、および/または最大限に自由なリソースを有するDPEを見つけることを含むことができる。すべての制約が満たされた状態でノードが配置された場合、システムは、そのようなノードが次に処理されるように、配置されたノードの隣接ノードの優先度を高めることができる。利用可能な配置が現在のノードに有効でない場合、システムは、このノードのための空間を作るために、いくつかの他のノードをそれらの最良の候補DPEから配置解除しようと試みることができる。システムは、配置解除ノードを再配置の優先度キューに戻すことができる。システムは、実行された配置および配置解除の総数を追跡することによって、良好なソリューションを見つける際に費やされる総労力を制限することができる。しかしながら、他のマッピング技術が使用されてもよく、本明細書で提供される例は限定を意図するものではないことを理解されたい。
【0258】
図33は、
図1に関連して説明したシステムによって実行可能な別の例示的なソフトウェアアーキテクチャ3300を示す。例えば、
図33のアーキテクチャ3300は、
図1のプログラムモジュール120のうちの1つまたは複数として実装されてもよい。
図33の例示的なソフトウェアアーキテクチャ3300は、アプリケーション、例えばデータフロー・グラフが、PL214における実装のために1つまたは複数の高レベル合成(HLS)カーネルを指定する場合に使用されてもよい。例えば、アプリケーションのPLノードは、HLS処理を必要とするHLSカーネルを参照する。一態様において、HLSカーネルは、Cおよび/またはC++などの高レベル言語(HLL)で指定される。
【0259】
図33の例では、ソフトウェアアーキテクチャ3300は、DPEコンパイラ1602、ハードウェアコンパイラ1606、HLSコンパイラ3302、およびシステムリンカ3304を含む。NoCコンパイラ1604は、本開示内で前述したように、検証チェック3306を実行するためにDPEコンパイラ1602に含まれ、共に使用されてもよい。
【0260】
図示されるように、DPEコンパイラ1602は、アプリケーション3312、SoCアーキテクチャ記述3310、および任意選択的にテストベンチ3314を受信する。説明したように、アプリケーション3312は、並列実行セマンティクスを含むデータフロー・グラフとして指定することができる。アプリケーション3312は、相互接続されたPLノードおよびDPEノードを含み、ランタイムパラメータを指定することができる。この例では、PLノードは、HLSカーネルを参照する。SoCアーキテクチャ記述3310は、DPEアレイ202のサイズおよび寸法、PL214およびその中で利用可能な様々なプログラマブル回路ブロックのサイズ、PS212に含まれるプロセッサおよび他のデバイスのタイプなどのPS212のタイプ、ならびにアプリケーション3312が実装されるSoC200内の回路の他の物理的特性などの情報を指定するデータ構造またはファイルであってもよい。SoCアーキテクチャ記述3310はまた、そこに含まれるサブシステム間の接続性(例えば、インタフェース)を指定することができる。
【0261】
DPEコンパイラ1602は、HLSカーネルをHLSコンパイラ3302に出力することができる。HLSコンパイラ3302は、HLLで指定されたHLSカーネルを、ハードウェアコンパイラが合成可能なHLS IPに変換する。例えば、HLS IPは、レジスタ転送レベル(RTL)ブロックとして指定されてもよい。HLSコンパイラ3302は、例えば、HLSカーネル毎にRTLブロックを生成する。図示されているように、HLSコンパイラ3302は、HLS IPをシステムリンカ3304に出力する。
【0262】
DPEコンパイラ1602は、初期SoCインタフェースブロックソリューションおよび接続グラフなどの追加の出力を生成する。DPEコンパイラ1602は、システムリンカ3304に接続グラフを出力し、ハードウェアコンパイラ1606にSoCインタフェースブロックソリューションを出力する。接続グラフは、PL214に実装されるHLSカーネルに対応するノード(現在はHLS IPに変換されている)と、DPEアレイ202に実装されるノードとの間の接続性を指定する。
【0263】
図示されているように、システムリンカ3304は、SoCアーキテクチャ記述3310を受信する。システムリンカ3304はまた、DPEコンパイラ1602を介して処理されないアプリケーション3312から直接、1つまたは複数のHLSおよび/またはRTLブロックを受信することができる。システムリンカ3304は、受信したHLSおよび/またはRTLブロック、HLS IP、ならびにIPカーネル間の接続性およびIPカーネルとDPEノードとの間の接続性を指定する接続グラフを使用して、アプリケーションのハードウェア部分に対応するブロック図を自動的に生成することができる。一態様では、システムリンカ3304は、ブロック図をSoC200のベースプラットフォーム(図示せず)と統合することができる。例えば、システムリンカ3304は、ブロック図をベースプラットフォームに接続して、統合ブロック図をもたらすことができる。ブロック図および接続されたベースプラットフォームは、合成可能ブロック図と呼ばれる場合がある。
【0264】
別の態様では、SDFグラフ内のカーネルとして参照されるHLS IPおよびRTL IP(例えば、アプリケーション3312)は、DPEコンパイラ1602の外部のIPにコンパイルすることができる。コンパイルされたIPは、システムリンカ3304に直接提供することができる。システムリンカ3304は、提供されたIPを使用して、アプリケーションのハードウェア部分に対応するブロック図を自動的に生成することができる。
【0265】
一態様では、システムリンカ3304は、元のSDF(例えば、アプリケーション3312)および生成された接続グラフから導出された追加のハードウェア特有の詳細をブロック図内に含めることができる。例えば、アプリケーション3312は、実際のHLSモデルであるソフトウェアモデルを含み、ソフトウェアモデルは、IPのデータベースにおいて、何らかの仕組みを使用して(例えば、名前または他のマッチング/相関技術によって)、IPに変換したり、IPに相関(例えば、一致)させたりすることができるので、システムリンカ3304は、ブロック図を(例えば、ユーザの介入なしで)自動的に生成することができる。この例では、カスタムIPは使用されない場合がある。ブロック図を自動的に生成する際に、システムリンカ3304は、データ幅変換ブロック、ハードウェアバッファ、および/または本明細書に記載の他の場合ではユーザによって手動で挿入および接続されるクロックドメイン交差ロジックなどの1つまたは複数の追加の回路ブロックを自動的に挿入することができる。システムリンカ3304は、例えば、データタイプおよびソフトウェアモデルを分析して、記載されているように、接続グラフによって指定される接続を作成するために1つまたは複数の追加の回路ブロックが必要であると決定することができる。
【0266】
システムリンカ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ソリューションを受信する反復プロセスであり得る。
【0267】
ハードウェアコンパイラ1606は、PL214にアプリケーション3312のハードウェア部分を実装する構成ビットストリームを含むハードウェアパッケージを生成することができる。ハードウェアコンパイラ1606は、ハードウェアパッケージをDPEコンパイラ1602に出力することができる。DPEコンパイラ1602は、その中のDPEアレイ202における実装を意図した、アプリケーション3312のソフトウェア部分をプログラムするDPEアレイ構成データ(例えば、1つまたは複数のバイナリ)を生成することができる。
【0268】
図34は、SoC200においてアプリケーションを実装するための設計フローを実行する別の例示的な方法3400を示す。方法3400は、
図1に関連して説明したようなシステムによって実行することができる。システムは、
図33に関連して説明したようなソフトウェアアーキテクチャを実行することができる。
図34の例では、処理されているアプリケーションは、PL214に実装するためのHLSカーネルを指定するノードを含む。
【0269】
ブロック3402において、DPEコンパイラ1602は、アプリケーション、SoC200のSoCアーキテクチャ記述、および任意選択的にテストベンチを受信する。ブロック3404において、DPEコンパイラ1602は、接続グラフを生成し、接続グラフをシステムリンカに提供することができる。ブロック3406において、DPEコンパイラ1602は、初期SoCインタフェースブロックソリューションを生成し、初期SoCインタフェースブロックソリューションをハードウェアコンパイラ1606に提供する。初期SoCインタフェースブロックソリューションは、アプリケーションのDPEノードのDPEアレイ202のDPE204への初期マッピング、およびDPEアレイ202を出入りする接続のSoCインタフェースブロック206の物理データパスへのマッピングを指定することができる。
【0270】
ブロック3408において、HLSコンパイラ3302は、合成可能なIPコアを生成するために、HLSカーネルに対してHLSを実行することができる。例えば、DPEコンパイラ1602は、アプリケーションのノードによって指定されたHLSカーネルをHLSコンパイラ3302に提供する。HLSコンパイラ3302は、受信したHLSカーネルごとにHLS IPを生成する。HLSコンパイラ3302は、HLS IPをシステムリンカに出力する。
【0271】
ブロック3410において、システムリンカは、接続グラフ、SoCアーキテクチャ記述、およびHLS IPを使用して、アプリケーションのハードウェア部分に対応するブロック図を自動的に生成することができる。ブロック3412において、システムリンカは、ブロック図およびSoC200のベースプラットフォームを統合することができる。例えば、ハードウェアコンパイラ1606は、ブロック図をベースプラットフォームに接続して、統合ブロック図をもたらすことができる。一態様では、ブロック図および接続されたベースプラットフォームは、合成可能ブロック図と呼ばれる。
【0272】
ブロック3414において、ハードウェアコンパイラ1606は、統合ブロック図の実装フローを実行することができる。実装フロー中、ハードウェアコンパイラ1606は、DPEコンパイラ1602および任意選択的にNoCコンパイラ1604と協働して本明細書に記載の検証を実行して、PLにおける実装のためのアプリケーションのハードウェア部分の実装に収束することができる。例えば、説明したように、ハードウェアコンパイラ1606は、アプリケーションのハードウェア部分の現在の実装状態が1つまたは複数の設計メトリックを満たしていないと決定したことに応答して、DPEコンパイラ1602および任意選択的にNoCコンパイラ1604を呼び出すことができる。ハードウェアコンパイラ1606は、配置前、配置中、ルーティング前、および/またはルーティング中に、DPEコンパイラ1602および任意選択でNoCコンパイラ1604を呼び出すことができる。
【0273】
ブロック3416において、ハードウェアコンパイラ1606は、ハードウェア実装をDPEコンパイラ1602にエクスポートする。一態様では、ハードウェア実装は、デバイスサポートアーカイブ(DSA)ファイルとして出力されてもよい。DSAファイルは、プラットフォームメタデータ、エミュレーションデータ、実装フローからハードウェアコンパイラ1606によって生成された1つまたは複数の構成ビットストリームなどを含むことができる。ハードウェア実装はまた、最終的なSoCインタフェースブロックソリューションと、任意選択的に、アプリケーションのハードウェア部分の実装を作成するためにハードウェアコンパイラ1606によって使用される最終的なNoCソリューションとを含むことができる。
【0274】
ブロック3418において、DPEコンパイラ1602は、DPEアレイのソフトウェア生成を完了する。例えば、DPEコンパイラ1602は、アプリケーションで使用されるDPEをプログラムするために使用されるバイナリを生成する。バイナリを生成する際に、DPEコンパイラ1602は、実装フローを実行するために、ハードウェアコンパイラ1606によって使用される最終的なSoCインタフェースブロックソリューションおよび任意選択的に最終的なNoCソリューションを使用することができる。一態様において、DPEコンパイラは、DSAに含まれる構成ビットストリームおよび/またはメタデータを検査することによって、ハードウェアコンパイラによって使用されるSoCインタフェースブロックソリューションを決定することができる。
【0275】
ブロック3420において、NoCコンパイラ1604は、NoC208をプログラムするためのバイナリを生成する。ブロック3422において、PSコンパイラ1918はPSバイナリを生成する。ブロック3424において、システムは、構成ビットストリームおよびバイナリをSoC200に展開することができる。
【0276】
図35は、SoC200においてアプリケーションを実装するための設計フローを実行する別の例示的な方法3500を示す。方法3500は、
図1に関連して説明したようなシステムによって実行することができる。アプリケーションは、本明細書で説明されるようにデータフロー・グラフとして指定されてもよく、DPEアレイ202内に実装するためのソフトウェア部分と、PL214内に実装するためのハードウェア部分とを含む。
【0277】
ブロック3502において、システムは、ソフトウェア部分によって使用される論理リソースを、DPEアレイ202およびPL214を結合するインタフェースブロックのハードウェアリソースにマッピングする第1のインタフェースソリューションを生成することができる。DPEコンパイラ1602は、例えば、最初の、または第1のSoCインタフェースブロックソリューションを生成することができる。
【0278】
ブロック3504において、システムは、HLSカーネルとDPEアレイに実装されるソフトウェア部分のノードとの間の接続性を指定する接続グラフを生成することができる。一態様において、DPEコンパイラ1602は、接続グラフを生成することができる。
【0279】
ブロック3506において、システムは、接続グラフおよびHLSカーネルに基づいてブロック図を生成することができる。ブロック図は合成可能である。システムリンカは、例えば、合成可能なブロック図を生成することができる。
【0280】
ブロック3508において、システムは、第1のインタフェースソリューションを使用して、ブロック図の実装フローを実行することができる。説明したように、ハードウェアコンパイラ1606は、実装フロー中にDPEコンパイラ1602および任意選択でNoCコンパイラ1604と設計データを交換することができる。ハードウェアコンパイラ1606およびDPEコンパイラ1602は、データを反復的に交換することができ、DPEコンパイラ1602は、ハードウェアコンパイラ1606によって呼び出されたことに応答して、ハードウェアコンパイラ1606に更新されたSoCインタフェースブロックソリューションを提供する。ハードウェアコンパイラ1606は、SoCインタフェースブロックに1つまたは複数の制約条件を提供することによってDPEコンパイラを呼び出すことができる。ハードウェアコンパイラ1606およびNoCコンパイラ1604は、データを反復的に交換することができ、NoCコンパイラ1604は、ハードウェアコンパイラ1606によって呼び出されたことに応答して、ハードウェアコンパイラ1606に更新されたNoCソリューションを提供する。ハードウェアコンパイラ1606は、NoC208に対する1つまたは複数の制約を提供することによって、NoCコンパイラ1604を呼び出すことができる。
【0281】
ブロック3510において、システムは、DPEコンパイラ1602を使用して、DPEアレイ202の1つまたは複数のDPE204に実装するためにアプリケーションのソフトウェア部分をコンパイルすることができる。DPEコンパイラ1602は、DPEアレイ202とPL214との間の一貫したインタフェース(例えば、ハードウェアコンパイラ1606による実装フロー中に使用されるのと同じSoCインタフェースブロックソリューション)を使用するために、実装フローの結果を受信することができる。
【0282】
説明の目的で、本明細書に開示される様々な発明概念の完全な理解を提供するために、特定の専門語が記載される。しかしながら、本明細書で使用される用語は、本発明の構成の特定の態様を説明することのみを目的としており、限定することを意図するものではない。
【0283】
本明細書で定義されるように、単数形「a」、「an」、および「the」は、文脈が明らかにそうでないことを示さない限り、複数形も含むことが意図される。
【0284】
本明細書で定義されるように、「少なくとも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とを一緒に、を意味する。
【0285】
本明細書で定義される場合、「自動的に」という用語は、ユーザの介入がないことを意味する。本明細書中で定義される場合、用語「ユーザ」は、ヒトを意味する。
【0286】
本明細書で定義される場合、「コンピュータ可読記憶媒体」という用語は、命令実行システム、装置、またはデバイスによって、またはそれに関連して使用されるプログラムコードを含むまたは記憶する記憶媒体を意味する。本明細書で定義される場合、「コンピュータ可読記憶媒体」は、一時的な伝播信号自体ではない。コンピュータ可読記憶媒体は、電子記憶装置、磁気記憶装置、光記憶装置、電磁記憶装置、半導体記憶装置、またはこれらの任意の適切な組み合わせであってもよいが、これらに限定されない。本明細書に記載の様々な形態のメモリは、コンピュータ可読記憶媒体の例である。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブルコンピュータディスケット、ハードディスク、RAM、読み出し専用メモリ(ROM)、消去可能プログラマブル読み出し専用メモリ(EPROMまたはフラッシュメモリ)、電子的消去可能プログラマブル読み出し専用メモリ(EEPROM)、スタティックランダムアクセスメモリ(SRAM)、ポータブルコンパクトディスク読み出し専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピーディスクなどを含むことができる。
【0287】
本明細書で定義される場合、用語「である場合」は、文脈に応じて「ときに」または「際に」または「応答して」または「反応して」を意味する。したがって、語句「決定された場合」または「[記載された状態またはイベント]が検出された場合」は、文脈に応じて、「決定する際に」または「決定することに応答して」または「[記載された状態またはイベント]を検出すると」または「[記載された状態またはイベント]の検出に応答して」または「[記載された状態またはイベント]の検出に応答して」を意味すると解釈され得る。
【0288】
本明細書で定義されるように、「高級言語」または「HLL」という用語は、命令がデータ処理システムの詳細からの強力な抽象化を有するデータ処理システムをプログラムするために使用されるプログラミング言語または命令のセット、例えば機械言語を意味する。例えば、HLLは、メモリ管理などのデータ処理システムの動作の態様を自動化または隠すことができる。HLLと呼ばれるが、これらの言語は通常、「効率レベル言語」として分類される。HLLは、ハードウェアサポートのプログラミングモデルを直接公開する。HLLの例には、C、C++、および他の適切な言語が含まれるが、これらに限定されない。
【0289】
HLLは、デジタル回路を記述するために使用されるVerilog、System Verilog、およびVHDLなどのハードウェア記述言語(HDL)と対比され得る。HDLは、設計者が、典型的には技術に依存しないレジスタ転送レベル(RTL)ネットリストにコンパイルされ得るデジタル回路設計の定義を作成することを可能にする。
【0290】
本明細書で定義される場合、「応答して」という用語および上記と同様の用語、例えば「である場合」、「ときに」または「際に」は、アクションまたはイベントに容易に応答または反応することを意味する。応答または反応は自動的に行われる。したがって、第2の動作が第1の動作に「応答して」実行される場合、第1の動作の発生と第2の動作の発生との間に因果関係がある。「応答して」は因果関係を示す。
【0291】
本明細書で定義されるように、「一実施形態」、「一実施形態」、「1つまたは複数の実施形態」、「特定の実施形態」という用語または同様の用語は、実施形態に関連して説明される特定の特徴、構造、または特性が、本開示内で説明される少なくとも1つの実施形態に含まれることを意味する。したがって、本開示全体を通して、「一実施形態では」、「一実施形態では」、「1つまたは複数の実施形態において」、「特定の実施形態では」という語句、および同様の文言の出現は、必ずしもそうとは限らないが、すべて同じ実施形態を指し得る。「実施形態」および「構成」という用語は、本開示内で互換的に使用される。
【0292】
本明細書で定義される場合、「出力」という用語は、例えばデバイスなどの物理メモリ要素に記憶すること、ディスプレイまたは他の周辺出力デバイスに書き込むこと、別のシステムに送信または伝送すること、エクスポートすることなどを意味する。
【0293】
本明細書で定義される場合、「実質的に」という用語は、列挙された特性、パラメータ、または値が正確に達成される必要はないが、例えば公差、測定誤差、測定精度限界、および当業者に既知の他の要因を含む偏差または変動が、特性が提供しようとした効果を排除しない量で発生し得ることを意味する。
【0294】
第1、第2などの用語は、様々な要素を説明するために本明細書で使用され得る。特に明記しない限り、または文脈が明らかにそうでないことを示さない限り、これらの用語は1つの要素を別の要素から区別するためにのみ使用されるので、これらの要素はこれらの用語によって限定されるべきではない。
【0295】
コンピュータプログラム製品は、プロセッサに本明細書に記載の本発明の構成の態様を実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体を含むことができる。本開示内で、用語「プログラムコード」は、用語「コンピュータ可読プログラム命令」と交換可能に使用される。本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理装置に、またはネットワーク、例えばインターネット、LAN、WANおよび/または無線ネットワークを介して外部コンピュータもしくは外部記憶装置にダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ、および/またはエッジサーバを含むエッジデバイスを含むことができる。各コンピューティング/処理装置内のネットワークアダプタカードまたはネットワークインタフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、それぞれのコンピューティング/処理装置内のコンピュータ可読記憶媒体に記憶するためにコンピュータ可読プログラム命令を転送する。
【0296】
本明細書に記載の本発明の構成のための動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、またはオブジェクト指向プログラミング言語および/または手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組み合わせで記述されたソースコードまたはオブジェクトコードのいずれかであってもよい。コンピュータ可読プログラム命令は、状態設定データを含むことができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンソフトウェアパッケージとして、部分的にユーザのコンピュータ上で、部分的にリモートコンピュータ上で、または完全にリモートコンピュータもしくはサーバ上で実行することができる。後者のシナリオでは、リモートコンピュータは、LANまたはWANを含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、または(例えば、インターネットサービスプロバイダを使用してインターネットを介して)外部コンピュータに接続されてもよい。場合によっては、例えば、プログラマブル論理回路FPGA、またはPLAを含む電子回路は、本明細書に記載の本発明の構成の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路をパーソナライズすることによってコンピュータ可読プログラム命令を実行することができる。
【0297】
本発明の構成の特定の態様は、方法、装置(システム)、およびコンピュータプログラム製品のフローチャート図および/またはブロック図を参照して本明細書で説明される。フローチャート図および/またはブロック図の各ブロック、ならびにフローチャート図および/またはブロック図のブロックの組み合わせは、コンピュータ可読プログラム命令、例えばプログラムコードによって実施され得ることが理解されよう。
【0298】
これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、または他のプログラマブルデータ処理装置のプロセッサに提供されて機械を生成することができ、その結果、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行する命令は、フローチャートおよび/またはブロック図の1つまたは複数のブロックで指定された機能/動作を実施するための手段を作成する。これらのコンピュータ可読プログラム命令はまた、コンピュータ、プログラマブルデータ処理装置、および/または他のデバイスに特定の方法で機能するように指示することができるコンピュータ可読記憶媒体に記憶されてもよく、その結果、記憶された命令を有するコンピュータ可読記憶媒体は、フローチャートおよび/またはブロック図の1つまたは複数のブロックで指定された動作の態様を実施する命令を含む製品を含む。
【0299】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作を実行させてコンピュータ実施プロセスを生成するために、コンピュータ、他のプログラマブルデータ処理装置、または他のデバイスにロードされてもよく、その結果、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令は、フローチャートおよび/またはブロック図の1つまたは複数のブロックで指定された機能/動作を実施する。
【0300】
図のフローチャートおよびブロック図は、本発明の構成の様々な態様によるシステム、方法、およびコンピュータプログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関して、フローチャートまたはブロック図の各ブロックは、指定された動作を実施するための1つまたは複数の実行可能命令を含むモジュール、セグメント、または命令の一部を表すことができる。
【0301】
いくつかの代替実施態様では、ブロックに記載された動作は、図に記載された順序とは異なる順序で行われてもよい。例えば、連続して示される2つのブロックは、実質的に同時に実行されてもよく、またはブロックは、関連する機能に応じて、時には逆の順序で実行されてもよい。他の例では、ブロックは、一般に、昇順で実行されてもよいが、さらに他の例では、1つまたは複数のブロックは、様々な順序で実行されてもよく、結果は、後続のブロックまたは直後には続かない他のブロックで記憶および利用される。また、ブロック図および/またはフローチャート図の各ブロック、ならびにブロック図および/またはフローチャート図のブロックの組み合わせは、指定された機能または動作を実行するか、専用ハードウェアとコンピュータ命令の組み合わせを実行する、専用ハードウェアベースのシステムによって実装されてもよいことに留意されたい。
【0302】
以下の特許請求の範囲に見出すことができるすべてのミーンズプラスファンクションまたはステッププラスファンクションの要素の対応する構造、材料、動作、および均等物は、具体的に特許請求されている他の特許請求されている要素と組み合わせて機能を実行するための任意の構造、材料、または動作を含むことが意図されている。
【0303】
方法は、デバイスのDPEアレイ内に実装するためのソフトウェア部分と、デバイスのPL内に実装するためのハードウェア部分とを指定するアプリケーションについて、プロセッサを使用して、アプリケーションの論理アーキテクチャ、およびDPEアレイとプログラマブル論理との間のインタフェース回路ブロックのハードウェアへの論理リソースのマッピングを指定する第1のインタフェースソリューションを生成するステップを含むことができる。方法は、論理アーキテクチャおよび第1のインタフェースソリューションに基づいてハードウェア部分のブロック図を構築するステップと、プロセッサを使用して、ブロック図の実装フローを実行するステップとを含む。方法は、プロセッサを使用して、DPEアレイの1つまたは複数のDPEに実装するためにアプリケーションのソフトウェア部分をコンパイルするステップを含む。
【0304】
別の態様では、ブロック図を構築するステップは、プログラマブル論理内で実装するために少なくとも1つのIPコアをブロック図に追加するステップを含む。
【0305】
別の態様では、実装フロー中に、ハードウェアコンパイラは、ブロック図を構築し、ソフトウェア部分をコンパイルするように構成されたDPEコンパイラと設計データを交換することによって実装フローを実行する。
【0306】
別の態様では、ハードウェアコンパイラは、NoCコンパイラとさらなる設計データを交換する。ハードウェアコンパイラは、DPEアレイをデバイスのPLに結合するデバイスのNoCを通る経路を実装するように構成された第1のNoCソリューションを受信する。
【0307】
別の態様では、実装フローの実行は、交換された設計データに基づいて実行される。
別の態様では、ソフトウェア部分をコンパイルするステップは、実装フローから生成されたPLにおける実装のためのアプリケーションのハードウェア部分の実装に基づいて実行される。
【0308】
別の態様では、ブロック図を構築し、ブロック図の実装がハードウェア部分の設計メトリックを満たしていないと決定する実装フローを実行するように構成されたハードウェアコンパイラに応答して、ソフトウェア部分をコンパイルするように構成されたDPEコンパイラに、インタフェース回路ブロックの制約を提供する。ハードウェアコンパイラは、制約に基づいてDPEコンパイラによって生成された第2のインタフェースソリューションをDPEコンパイラから受信する。
【0309】
別の態様では、実装フローの実行は、第2のインタフェースソリューションに基づいて実行される。
【0310】
別の態様では、ハードウェアコンパイラは、NoCに対する第1のNoCソリューションを使用してブロック図の実装が設計メトリックを満たさないと決定したことに応答して、NoCに対する制約をNoCコンパイラに提供する。ハードウェアコンパイラは、NoCコンパイラから、NoCに対する制約に基づいてNoCコンパイラによって生成された第2のNoCソリューションを受信する。
【0311】
システムは、動作を開始するように構成されたプロセッサを含む。動作は、デバイスのDPEアレイ内に実装するためのソフトウェア部分と、デバイスのPL内に実装するためのハードウェア部分とを指定するアプリケーションについて、アプリケーションの論理アーキテクチャ、およびDPEアレイとPLとの間のインタフェース回路ブロックのハードウェアへの論理リソースのマッピングを指定する第1のインタフェースソリューションを生成することを含む。動作は、論理アーキテクチャおよび第1のインタフェースソリューションに基づいてハードウェア部分のブロック図を構築することと、ブロック図の実装フローを実行することと、DPEアレイの1つまたは複数のDPEに実装するためにアプリケーションのソフトウェア部分をコンパイルすることとを含む。
【0312】
別の態様では、ブロック図を構築するステップは、PL内で実装するために少なくとも1つのIPコアをブロック図に追加することを含む。
【0313】
別の態様では、動作は、実装フロー中に、ブロック図を構築し、ソフトウェア部分をコンパイルするように構成されたDPEコンパイラと設計データを交換することによって実装フローを実行するハードウェアコンパイラを実行することを含む。
【0314】
別の態様では、動作は、ハードウェアコンパイラがNoCコンパイラとさらなる設計データを交換することと、ハードウェアコンパイラが、DPEアレイをデバイスのPLに結合するデバイスのNoCを通る経路を実装するように構成された第1のNoCソリューションを受信することとを含む。
【0315】
別の態様では、実装フローの実行は、交換された設計データに基づいて実行される。
別の態様では、ソフトウェア部分をコンパイルするステップは、実装フローから生成されたPLにおける実装のためのアプリケーションのハードウェア部分のハードウェア設計に基づいて実行される。
【0316】
別の態様では、動作は、ブロック図を構築し、ブロック図の実装がハードウェア部分の設計制約を満たしていないと決定する実装フローを実行するように構成されたハードウェアコンパイラに応答して、ソフトウェア部分をコンパイルするように構成されたDPEコンパイラに、インタフェース回路ブロックの制約を提供する。ハードウェアコンパイラは、制約に基づいてDPEコンパイラによって生成された第2のインタフェースソリューションをDPEコンパイラから受信する。
【0317】
別の態様では、実装フローの実行は、第2のインタフェースソリューションに基づいて実行される。
【0318】
別の態様では、ハードウェアコンパイラは、NoCに対する第1のNoCソリューションを使用してブロック図の実装が設計メトリックを満たさないと決定したことに応答して、NoCに対する制約をNoCコンパイラに提供する。ハードウェアコンパイラは、NoCコンパイラから、NoCに対する制約に基づいてNoCコンパイラによって生成された第2のNoCソリューションを受信する。
【0319】
方法は、デバイスのDPEアレイに実装するためのソフトウェア部分と、デバイスのPLに実装するためのハードウェア部分とを有するアプリケーションについて、ハードウェアコンパイラを実行するプロセッサを使用して、ソフトウェア部分によって使用される論理リソースを、DPEアレイをPLに結合するインタフェースブロックのハードウェアにマッピングするインタフェースブロックソリューションに基づいて、ハードウェア部分の実装フローを実行するステップを含む。方法は、実装フロー中に設計メトリックを満たさないことに応答して、ハードウェアコンパイラを実行するプロセッサを使用して、インタフェースブロック制約をDPEコンパイラに提供するステップを含む。方法はまた、インタフェースブロック制約の受信に応答して、DPEコンパイラを実行するプロセッサを使用して、更新されたインタフェースブロックソリューションを生成し、更新されたインタフェースブロックソリューションを、DPEコンパイラからハードウェアコンパイラに提供するステップを含む。
【0320】
別の態様では、インタフェースブロック制約は、ソフトウェア部分によって使用される論理リソースをインタフェースブロックの物理リソースにマッピングする。
【0321】
別の態様では、ハードウェアコンパイラは、更新されたインタフェースブロックソリューションを使用して実装フローを継続する。
【0322】
別の態様では、ハードウェアコンパイラは、ハードウェア部分の設計制約を満たさないことに応答して、インタフェースブロック制約をDPEコンパイラに反復的に提供する。
【0323】
別の態様では、インタフェースブロック制約は、ハード制約およびソフト制約を含む。その場合、方法は、更新されたインタフェースブロックソリューションを生成するために、DPEコンパイラがハード制約およびソフト制約の両方を使用してアプリケーションのソフトウェア部分をルーティングするステップを含む。
【0324】
別の態様では、方法は、ハード制約とソフト制約の両方を使用して更新されたインタフェースブロックソリューションを生成できなかったことに応答して、更新されたインタフェースブロックソリューションを生成するために、ハード制約のみを使用してアプリケーションのソフトウェア部分をルーティングするステップを含む。
【0325】
別の態様では、方法は、ハード制約のみを使用して更新されたマッピングの生成に失敗したことに応答して、更新されたインタフェースブロックソリューションを生成するために、ハード制約とソフト制約の両方を使用してソフトウェア部分をマッピングし、ハード制約のみを使用してソフトウェア部分をルーティングするステップを含む。
【0326】
インタフェースブロックソリューションおよび更新されたインタフェースブロックソリューションが各々スコアを有する別の態様では、方法は、スコアを比較するステップと、インタフェースブロックソリューションのスコアが更新されたインタフェースブロックソリューションのスコアを超えていると決定したことに応答して、さらなる更新されたインタフェースブロックソリューションを取得するために、インタフェースブロック制約を緩和し、緩和されたインタフェースブロック制約をDPEコンパイラに提出するステップとを含む。
【0327】
別の態様では、インタフェースブロックソリューションおよび更新されたインタフェースブロックソリューションは各々スコアを有する。方法は、スコアを比較するステップと、更新されたインタフェースブロックソリューションのスコアがインタフェースブロックソリューションのスコアを超えていると決定したことに応答して、実装フローを実行するために更新されたインタフェースブロックソリューションを使用するステップとを含む。
【0328】
システムは、動作を開始するように構成されたプロセッサを含む。動作は、デバイスのDPEアレイに実装するためのソフトウェア部分と、デバイスのPLに実装するためのハードウェア部分とを有するアプリケーションについて、ハードウェアコンパイラを使用して、ソフトウェア部分によって使用される論理リソースをDPEアレイをPLに結合するインタフェースブロックのハードウェアにマッピングするインタフェースブロックソリューションに基づいて、ハードウェア部分の実装フローを実行するステップを含む。動作は、実装フロー中に設計メトリックを満たさないことに応答して、ハードウェアコンパイラを使用して、インタフェースブロック制約をDPEコンパイラに提供するステップを含む。動作はまた、インタフェースブロック制約の受信に応答して、DPEコンパイラを使用して、更新されたインタフェースブロックソリューションを生成し、更新されたインタフェースブロックソリューションを、DPEコンパイラからハードウェアコンパイラに提供するステップを含む。
【0329】
別の態様では、インタフェースブロック制約は、ソフトウェア部分によって使用される論理リソースをインタフェースブロックの物理リソースにマッピングする。
【0330】
別の態様では、ハードウェアコンパイラは、更新されたインタフェースブロックソリューションを使用して実装フローを継続する。
【0331】
別の態様では、ハードウェアコンパイラは、ハードウェア部分の設計制約を満たさないことに応答して、インタフェースブロック制約をDPEコンパイラに反復的に提供する。
【0332】
別の態様では、インタフェースブロック制約は、ハード制約およびソフト制約を含む。その場合、プロセッサは、更新されたインタフェースブロックソリューションを生成するために、DPEコンパイラがハード制約およびソフト制約の両方を使用してアプリケーションのソフトウェア部分をルーティングすることを含む動作を開始するように構成される。
【0333】
別の態様では、動作は、ハード制約とソフト制約の両方を使用して更新されたマッピングを生成できなかったことに応答して、更新されたインタフェースブロックソリューションを生成するために、ハード制約のみを使用してアプリケーションのソフトウェア部分をルーティングすることを含む。
【0334】
別の態様では、動作は、ハード制約のみを使用して更新されたマッピングの生成に失敗したことに応答して、ハード制約とソフト制約の両方を使用してソフトウェア部分をマッピングし、更新されたインタフェースブロックソリューションを生成するために、ハード制約のみを使用してソフトウェア部分をルーティングすることを含む。
【0335】
別の態様では、インタフェースブロックソリューションおよび更新されたインタフェースブロックソリューションは各々スコアを有する。プロセッサは、スコアを比較し、インタフェースブロックソリューションのスコアが更新されたインタフェースブロックソリューションのスコアを超えていると決定したことに応答して、さらなる更新されたインタフェースブロックソリューションを取得するために、インタフェースブロック制約を緩和し、緩和されたインタフェースブロック制約をDPEコンパイラに提出することを含む動作を開始するように構成される。
【0336】
別の態様では、インタフェースブロックソリューションおよび更新されたインタフェースブロックソリューションは各々スコアを有する。プロセッサは、スコアを比較し、更新されたインタフェースブロックソリューションのスコアがインタフェースブロックソリューションのスコアを超えていると決定したことに応答して、実装フローを実行するために更新されたインタフェースブロックソリューションを使用することを含む動作を開始するように構成される。
【0337】
方法は、デバイスのDPEアレイ内に実装するためのソフトウェア部分と、デバイスのPL内に実装するためのHLSカーネルを有するハードウェア部分とを指定するアプリケーションについて、プロセッサを使用して、ソフトウェア部分によって使用される論理リソースを、DPEアレイとPLとを結合するインタフェースブロックのハードウェアリソースにマッピングする第1のインタフェースソリューションを生成するステップを含む。方法は、プロセッサを使用して、HLSカーネルとDPEアレイに実装されるソフトウェア部分のノードとの間の接続性を指定する接続グラフを生成することと、プロセッサを使用して、接続グラフおよびHLSカーネルに基づいてブロック図を生成することとを含み、ブロック図は合成可能である。方法は、プロセッサを使用して、第1のインタフェースソリューションに基づいてブロック図の実装フローを実行するステップと、プロセッサを使用して、DPEアレイの1つまたは複数のDPEでの実装のためにアプリケーションのソフトウェア部分をコンパイルするステップとをさらに含む。
【0338】
別の態様では、ブロック図を生成するステップは、HLSカーネルの合成可能バージョンを生成するためにHLSカーネルに対してHLSを実行するステップと、HLSカーネルの合成可能バージョンを使用してブロック図を構築するステップとを含む。
【0339】
別の態様では、HLSカーネルの合成可能なバージョンは、RTLブロックとして指定される。
【0340】
別の態様では、ブロック図の生成は、アプリケーションが実装されるSoCのアーキテクチャの記述に基づいて実行される。
【0341】
別の態様では、ブロック図を生成するステップは、ブロック図をベースプラットフォームと接続するステップを含む。
【0342】
別の態様では、実装フローを実行するステップは、PLにおける実装のためにブロック図を合成するステップと、第1のインタフェースソリューションに基づいて合成されたブロック図を配置およびルーティングするステップとを含む。
【0343】
別の態様では、方法は、実装フロー中に、ブロック図を構築し、ソフトウェア部分をコンパイルするように構成されたDPEコンパイラと設計データを交換することによって実装フローを実行するハードウェアコンパイラを実行するステップを含む。
【0344】
別の態様では、方法は、ハードウェアコンパイラがNoCコンパイラとさらなる設計データを交換するステップと、ハードウェアコンパイラが、DPEアレイをデバイスのPLに結合するデバイスのNoCを通る経路を実装するように構成された第1のNoCソリューションを受信するステップとを含む。
【0345】
別の態様では、方法は、ブロック図を構築し、ブロック図の実装がハードウェア部分の設計メトリックを満たしていないと決定する実装フローを実行するように構成されたハードウェアコンパイラに応答して、ソフトウェア部分をコンパイルするように構成されたDPEコンパイラに、インタフェース回路ブロックの制約を提供するステップを含む。本方法はまた、ハードウェアコンパイラが、制約に基づいてDPEコンパイラによって生成された第2のインタフェースソリューションをDPEコンパイラから受信するステップを含む。
【0346】
別の態様では、実装フローの実行は、第2のインタフェースソリューションに基づいて実行される。
【0347】
システムは、動作を開始するように構成されたプロセッサを含む。動作は、デバイスのDPEアレイ内に実装するためのソフトウェア部分と、デバイスのPL内に実装するためのHLSカーネルを有するハードウェア部分とを指定するアプリケーションについて、ソフトウェア部分によって使用される論理リソースを、DPEアレイとPLとを結合するインタフェースブロックのハードウェアリソースにマッピングする第1のインタフェースソリューションを生成することを含む。動作は、HLSカーネルとDPEアレイに実装されるソフトウェア部分のノードとの間の接続性を指定する接続グラフを生成することと、接続グラフおよびHLSカーネルに基づいてブロック図を生成することとを含み、ブロック図は合成可能である。動作は、第1のインタフェースソリューションに基づいてブロック図の実装フローを実行することと、DPEアレイの1つまたは複数のDPEでの実装のためにアプリケーションのソフトウェア部分をコンパイルすることとをさらに含む。
【0348】
別の態様では、ブロック図を生成するステップは、HLSカーネルの合成可能バージョンを生成するためにHLSカーネルに対してHLSを実行するステップと、HLSカーネルの合成可能バージョンを使用してブロック図を構築するステップとを含む。
【0349】
別の態様では、HLSカーネルの合成可能なバージョンは、RTLブロックとして指定される。
【0350】
別の態様では、ブロック図の生成は、アプリケーションが実装されるSoCのアーキテクチャの記述に基づいて実行される。
【0351】
別の態様では、ブロック図を生成するステップは、ブロック図をベースプラットフォームと接続するステップを含む。
【0352】
別の態様では、実装フローを実行するステップは、PLにおける実装のためにブロック図を合成するステップと、第1のインタフェースソリューションに基づいて合成されたブロック図を配置およびルーティングするステップとを含む。
【0353】
別の態様では、動作は、実装フロー中に、ブロック図を構築し、ソフトウェア部分をコンパイルするように構成されたDPEコンパイラと設計データを交換することによって実装フローを実行するハードウェアコンパイラを実行することを含む。
【0354】
別の態様では、動作は、ハードウェアコンパイラがNoCコンパイラとさらなる設計データを交換することと、ハードウェアコンパイラが、DPEアレイをデバイスのPLに結合するデバイスのNoCを通る経路を実装するように構成された第1のNoCソリューションを受信することとを含む。
【0355】
別の態様では、動作は、ブロック図を構築し、ブロック図の実装がハードウェア部分の設計メトリックを満たしていないと決定する実装フローを実行するように構成されたハードウェアコンパイラに応答して、ソフトウェア部分をコンパイルするように構成されたDPEコンパイラに、インタフェース回路ブロックの制約を提供する。本方法はまた、ハードウェアコンパイラが、制約に基づいてDPEコンパイラによって生成された第2のインタフェースソリューションをDPEコンパイラから受信するステップを含む。
【0356】
別の態様では、実装フローの実行は、第2のインタフェースソリューションに基づいて実行される。
【0357】
プログラムコードが記憶されたコンピュータ可読記憶媒体を含む1つまたは複数のコンピュータプログラム製品が本明細書で開示される。プログラムコードは、本開示内で説明される様々な動作を開始するためにコンピュータハードウェアによって実行可能である。
【0358】
本明細書で提供される本発明の構成の説明は、例示を目的とするものであり、網羅的であること、または開示された形態および例に限定されることを意図するものではない。本明細書で使用される用語は、本発明の構成の原理、実際の用途または市場で見られる技術に対する技術的改善を説明するために、および/または当業者が本明細書に開示される本発明の構成を理解することを可能にするために選択された。記載された本発明の構成の範囲および精神から逸脱することなく、修正および変形が当業者には明らかであり得る。したがって、そのような特徴および実施態様の範囲を示すものとして、前述の開示ではなく、以下の特許請求の範囲を参照すべきである。
【0359】
実施例1は、アプリケーションから導出された論理アーキテクチャのための例示的なスキーマを示す。
実施例1
{
"$schema": "http://json-schema.org/draft-4/schema#",
"description": "DPE/IPI Logical Architecture Specification",
"id": "LogicalArchSchema-0.1",
"compatible": [ "LogicalArchSchema-0.1" ],
"definitions": {
"ArrayString": {
"type": "array",
"items": { "type": "string" }
},
"LogicalConnection": {
"type": "object",
"properties": {
"type" : { "type" : "string", "enum": [ "stream", "mem", "event" ] },
"direction" : { "type" : "string", "enum": [ "me_to_pl", "pl_to_me", "me_to_noc", "noc_to_me", "noc_to_pl", "pl_to_noc", "noc_to_noc", "pl_to_pl"] },
"srcPort" : {
"type" : "object",
"properties": {
"instName" : { "type" : "string" },
"portName" : { "type" : "string" }
},
"additionalProperties": false,
"required": [ "instName", "portName" ]
},
"dstPorts" : {
"type" : "array",
"items" : {
"type": "object",
"properties": {
"instName" : { "type" : "string" },
"portName" : { "type" : "string" }
},
"additionalProperties": false,
"required": [ "instName", "portName" ]
}
},
"memMode" : { "type" : "string", "enum": [ "read-only", "write-only", "read-write" ] },
"addrType" : { "type" : "string", "enum": [ "virtual", "physical" ] }
},
"additionalProperties": false,
"required": [ "type", "direction", "srcPort", "dstPorts" ]
},
"LogicalPort": {
"type": "object",
"properties": {
"type" : { "type" : "string", "enum": [ "stream", "mem", "event" ] },
"direction" : { "type" : "string", "enum": [ "master", "slave" ] },
"dataWidth" : { "type" : "integer", "minimum" : 1 },
"clkFreq" : { "type" : "double" },
"traceFile" : { "type" : "string" },
"annotation": { "$ref": "#/definitions/ArrayString" },
"hw_annotation": { "type" : "string" },
"sdfioName": { "$ref": "#/definitions/ArrayString" },
"vlnvName" : { "type" : "string" },
"mechannel" : { "type" : "string" }
},
"additionalProperties": false,
"required": [ "type", "direction", "dataWidth", "clkFreq" ]
},
"DPEIP": {
"type": "object",
"properties": {
"vlnvName" : { "type" : "string" },
"annotation": { "type" : "string" },
"hw_annotation": { "type" : "string" },
"meshimPorts" : {
"type" : "object",
"properties" : { "$ref": "#/definitions/LogicalPort" }
}
},
"additionalProperties": false,
"required": [ "meshimPorts", "annotation" ]
},
"NoCIP": {
"type": "object",
"properties": {
"type" : { "type" : "string", "enum": [ "stream", "mem"] },
"vlnvName" : { "type": "string" },
"annotation": { "type" : "string" },
"hw_annotation": { "type" : "string" },
"nocPorts" : {
"type" : "object",
"properties" : { "$ref": "#/definitions/LogicalPort" }
}
},
"additionalProperties": false,
"required": [ "nocPorts", "annotation" ]
},
"PLIP": {
"type": "object",
"properties": {
"ckernelName" : { "type" : "string" },
"sdfinstName" : { "type" : "string" },
"vlnvName" : { "type" : "string" },
"annotation": { "type" : "string" },
"hw_annotation": { "type" : "string" },
"plPorts" : {
"type" : "object",
"properties" : { "$ref": "#/definitions/LogicalPort" }
}
},
"additionalProperties": false,
"required": [ "plPorts", "annotation" ]
}
},
"type": "object",
"properties": {
"appId" : { "type": "string" },
"schema" : { "type": "string" },
"device" : { "type": "string" },
"platform" : { "type": "string" },
"connections" : {
"type": "object",
"properties": { "$ref": "#/definitions/LogicalConnection" },
"minProperties": 0
},
"DPE": {
"type": "object",
"properties": { "$ref": "#/definitions/DPEIP" },
"minProperties": 0
},
"PL": {
"type": "object",
"properties": { "$ref": "#/definitions/PLIP" },
"minProperties": 0
},
"NoC": {
"type": "object",
"properties": { "$ref": "#/definitions/NoCIP" },
"minProperties": 0
}
},
"required": [
"appId"
]
}
【0360】
実施例2は、DPEアレイ202に実装されるアプリケーションのSoCインタフェースブロックソリューションの例示的なスキーマを示す。
実施例2
{
"$schema": "http://json-schema.org/draft-3/schema#",
"description": "DPE Solution schema",
"id": "DPESolutionSpecification",
"definitions": {},
"type" : "object",
"properties" : {
"version" : { "type" : "string" },
"Placement" : { "type" : "array",
"items" : {
"properties" : {
"LogicalInstance" : {
"type" : "object",
"properties" : {
"InstanceName" : { "type" : "string" },
"PortName" : { "type" : "string" }
}
},
"PhysicalInstance" : {
"type" : "array",
"items" : { "type" : "string" }
},
"IsSoft" : {"type" : "boolean" }
}
}
}
}
}
}
【0361】
実施例3は、NoC208に実装されるアプリケーションのNoCソリューションの例示的なスキーマを示す。
実施例3
{
"$schema": "http://json-schema.org/draft-3/schema#",
"description": "NOC Solution schema",
"id": "SolutionsSchema",
"definitions": {},
"type" : "object",
"properties" : {
"SolutionType" : { "type" : "string" },
"Paths" : {
"type" : "array",
"items" : {
"properties" : {
"Phase" : { "type" : "integer" },
"From" : { "type" : "string" },
"FromLocked" : { "type" : "boolean" },
"To" : { "type" : "string" },
"ToLocked" : { "type" : "boolean" },
"Port" : {"type" : "string"},
"ReadTC" : { "type" : "string", "enum" : ["LL", "BE", "ISOC"] },
"WriteTC" : { "type" : "string", "enum" : ["LL", "BE", "ISOC"] },
"ReadBW" : { "type" : "integer", "minimum" : 0, "maximum" : 19200},
"WriteBW" : { "type" : "integer", "minimum" : 0, "maximum" : 19200},
"ReadAchievedBW" : {"type" : "integer"},
"WriteAchievedBW" : {"type" : "integer"},
"ReadLatency" : { "type" : "integer", "minimum" : 4},
"WriteLatency" : {"type" : "integer", "minimum" : 4},
"ReadBestPossibleLatency" : {"type" : "integer", "minimum" : 4},
"WriteBestPossibleLatency" : {"type" : "integer", "minimum" : 4},
"PathLocked" : { "type" : "boolean" },
"Nets" : {
"type" : "array",
"items" : {
"properties" : {
"PhyInstanceStart": {"type" : "string"},
"PhyInstanceEnd" : {"type" : "string"},
"VC" : {"type" : "integer", "minimum" : 0, "maximum" : 7},
"Connections" : {"type" : "array", "items" : { "type" : "string" } },
"RequiredBW" : {"type" : "integer"},
"AchievedBW" : {"type" : "integer"},
"AchievedLatency" : {"type" : "integer"},
"CommType" : { "type" : "string", "enum" : ["READ", "WRITE", "READ_REQ", "WRITE_RESP"] }
}
}
}
}
}
},
"Components" : {
"type" : "array",
"items" : {
"properties" : {
"Name" : { "type" : "string" },
"TrafficLInst" : { "type" : "string" },
"PortIndex" : { "type" : "integer" },
"DestId" : { "type" : "integer" },
"required" : ["Name", "DestId" ],
"additionalProperties" : false
}
}
}
}
}
}
【0362】
実施例4は、SoCインタフェースブロック制約および/またはNoC制約を指定するための例示的なスキーマを示す。
実施例4
{
"$schema": "http://json-schema.org/draft-3/schema#",
"description": "NOC Constraints schema",
"id": "ConstraintsSpecification",
"definitions": {},
"type" : "object",
"properties" : {
"version" : { "type" : "string" },
"Placement" : { "type" : "array",
"items" : {
"properties" : {
"LogicalInstance" : {"type" : "string"},
"PhysicalInstance" : {"type" : "array", "items" : { "type" : "string" } },
"IsSoft" : {"type" : "boolean" }
}
}
}
}
}
}
【0363】
実施例5は、NoCトラフィックを指定するための例示的なスキーマを示す。
実施例5
{
"$schema": "http://json-schema.org/draft-7/schema#",
"description": "NOC Traffic Specification Schema",
"id": "TrafficSpecification",
"type": "object",
"definitions": {},
"additionalProperties": false,
"properties" : {
"LogicalInstances" : {
"type" : "array",
"items" : {
"type": "object",
"additionalProperties": false,
"properties" : {
"Name" : { "type" : "string"},
"IsMaster" : { "type" : "boolean"},
"CompType" : { "type" : "string" },
"Ports" : { "type" : "array", "items" : {"type" : "string"}},
"Protocol" : { "type" : "string", "enum" : ["AXI_MM", "AXI_STRM"] },
"SysAddress" : { "type" : "integer" },
"SysAddressSize" : { "type" : "integer" },
"SysAddresses" : {
"type" : "array",
"items" : {
"type":"object",
"additionalProperties": false,
"properties" : {
"Base" : { "type" : "integer" },
"Size" : { "type" : "integer" }
},
"required" : ["Base", "Size" ]
}
},
"AxiDataWidth" : { "type" : "integer" },
"NumReadOutstanding" : { "type" : "integer", "minimum" : 0, "maximum" : 64 },
"NumWriteOutstanding" : { "type" : "integer", "minimum" : 0, "maximum" : 64 },
"ReadRateLimiter" : { "type" : "integer" },
"WriteRateLimiter" : { "type" : "integer" },
"InterleaveSize" : { "type" : "integer" },
"ExternalConn" : { "type" : "string" },
"IsVirtual" : { "type" : "boolean", "default" : false }
},
"required" : ["Name", "CompType", "Protocol"]
}
},
"Paths" : {
"type" : "array",
"items" : {
"type": "object",
"additionalProperties": false,
"properties" : {
"Phase" : { "type" : "integer" },
"From" : { "type" : "string" },
"To" : { "type" : "string" },
"Port" : {"type" : "string"},
"CommType" : { "type" : "string", "enum" : ["MM_ReadWrite", "STRM", "MM_ReadOnly", "MM_WriteOnly"] },
"ReadTC" : { "type" : "string", "enum" : ["LL", "BE", "ISOC"] },
"WriteTC" : { "type" : "string", "enum" : ["LL", "BE", "ISOC"] },
"WriteBurstSize" : { "type" : "integer", "minimum" : 1, "maximum" : 256 },
"ReadBurstSize" : { "type" : "integer", "minimum" : 1, "maximum" : 256 },
"ReadBW" : { "type" : "integer", "minimum" : 0, "maximum" : 19200},
"WriteBW" : { "type" : "integer", "minimum" : 0, "maximum" : 19200},
"ReadLatency" : { "type" : "integer", "minimum" : 0},
"WriteLatency" : {"type" : "integer", "minimum" : 0},
"ReadAvgBurst" : { "type" : "integer", "minimum" : 0},
"WriteAvgBurst" : { "type" : "integer", "minimum" : 0},
"ExclusiveGroup" : {"type" : "string"}
}
}
}
}
}