-
settings64.csh スクリプトをソースとして読み込み、Vitis ツール環境をセットアップします。
<Vitis Installation Path>/Vitis/<202x.x>/settings64.sh
- 次のコマンドを使用して Chipscopy サーバーを起動します。
cs_server &
図 1. Chipscopy サーバー - ターゲット ボードに接続するコンピューターからハードウェア サーバーを実行します。これを実行するためには、VCK 190 ボードに JTAG 接続しているコンピューターからハードウェア サーバーを起動します。上記にハイライトしている cs_server のコンピューター名または IP アドレスをメモしておきます。
-
sd_card
イメージを使用してボードを起動します。 - ローカルの Linux ターミナルで、v++ のビルド出力があるディレクトリに移動します。
- 次のように
vperf
コマンドのオプションを設定します。vperf --link_summary <Design>.xsa.link_summary --hw_url <TCP:ComputerName>/<IP>:3121 --cs_url <TCP:ComputerName>/<IP>:3042 --verbose
--link_summary
オプションを指定する必要があります。このオプションは、v++ --link
ステップで生成される link_summary 出力に設定します。--hw_url
オプションはハードウェア サーバーのロケーションに、--cs_url
オプションは Chipscopy のロケーションに設定します。コマンドが実行されると、次の出力が生成されます。
[INFO] Successfully connected to hw_server and cs_server [INFO] Debug IP layout found at : <Vitis Build Path>/_x/link/int/debug_ip_layout.rtd [INFO] HW Device : xilinx_vck190_base_<> 1 NOC_NMU128_X0Y6 : CIPS_0/FPD_CCI_NOC_0 2 NOC_NMU128_X0Y7 : CIPS_0/FPD_CCI_NOC_1 3 NOC_NMU128_X0Y8 : CIPS_0/FPD_CCI_NOC_2 4 NOC_NMU128_X0Y9 : CIPS_0/FPD_CCI_NOC_3 5 NOC_NMU128_X0Y4 : CIPS_0/FPD_AXI_NOC_0 6 NOC_NMU128_X0Y5 : CIPS_0/FPD_AXI_NOC_1 7 NOC_NMU128_X0Y3 : CIPS_0/LPD_AXI_NOC_0 8 NOC_NMU128_X0Y2 : CIPS_0/PMC_NOC_AXI_0 9 NOC_NMU128_X7Y10 : ai_engine_0/M03_AXI 10 NOC_NMU128_X10Y10 : ai_engine_0/M00_AXI 11 NOC_NMU128_X12Y10 : ai_engine_0/M01_AXI 12 NOC_NMU128_X8Y10 : ai_engine_0/M05_AXI 13 NOC_NMU128_X9Y10 : ai_engine_0/M04_AXI 14 NOC_NMU128_X11Y10 : ai_engine_0/M02_AXI 15 DDRMC_X0Y0 : DDRMC/DDRMC_X0Y0 16 DDRMC_X3Y0 : DDRMC/DDRMC_X3Y0 17 DDRMC_X1Y0 : DDRMC/DDRMC_X1Y0
vperf
コマンドはリンク サマリからメタデータを読み出し、デザインで使用される NoC NMU に対応するすべてのノードを入力します。たとえば、上記の出力では、Control, Interfaces, and Processing System (CIPS)、AI エンジン GMIO インターフェイス ポート、および DDR メモリ コントローラー チャネル ポートに対応する NoC NMU ユニットが一覧表示されています。vperf
プロファイリング制御コマンドを使用して、対象ノードをフィルタリングし、プロファイリングを開始できます。次に、対象ノードのプロファイリングを開始/終了するために使用可能な制御コマンドの一覧を示します。
表 1. vperf 制御コマンド コマンド 説明 s/start_profile プロファイリングを開始します。 e/end_profile プロファイリングを終了します。 q/quit プロファイリングを終了し、 vperf
コマンドを終了します。n/set_npi_sample_period 値がサンプリングされる期間を示すサンプル期間を設定します。このコマンドを実行すると、使用可能なデバッグ コアが検出され、サポートされているサンプル期間が表示されます。サンプル期間は ID を使用して選択できます。 ID [Sample Period] 0 56 ms 1 112 ms 2 224 ms 3 447 ms 4 895 ms 5 1790 ms 6 3579 ms 7 7158 ms t/set_tslide 2 TSLIDE クロック サイクルを 1 カウントとして表します。このコマンドは、NoC のプロファイリング時にオーバーフローが発生した場合に便利です。 f/set_filter このコマンドを使用して、プロファイリングするノードを選択できます。カンマ区切りでノードのリストを指定するか、範囲を指定できます。 フィルター文字列 選択したノード 1,3,4,5,6,8 1,3,4,5,6,8 1-5.8 1,2,3,4,5,8 2,4,9-10 2,4,9,10 一度にサンプリングするのは、最大 4 ノードまでとすることをお勧めします。これを超えると、JTAG を介するサンプリング間隔が遅くなります。4 ノードを超えるプロファイリングは、サンプルの欠落を招き、不正確な結果となる可能性があります。 c/clear_filter すべてのフィルターをクリアし、すべてのノードをプロファイリングします (デフォルト)。 p/print プロファイリングを開始する前に、参照用として簡易的なコンフィギュレーションを表示します。 次に、
npi_sample_period
、Tslide
オプションの設定例を示します。> n Discovering debug cores...Done! Enumerating NoC (warning this can take 60-80s on xcvc1902)...Done Discovered Nodes: {'enabled': ['DDRMC_X0Y0', 'DDRMC_X1Y0', 'DDRMC_X3Y0', 'NOC_NMU128_X0Y3', 'NOC_NMU128_X0Y2', 'NOC_NMU128_X0Y4', 'NOC_NMU128_X0Y5', 'NOC_NMU128_X0Y6', 'NOC_NMU128_X0Y7', 'NOC_NMU128_X0Y8', 'NOC_NMU128_X0Y9', 'NOC_NMU128_X11Y10', 'NOC_NMU128_X12Y10', 'NOC_NMU128_X9Y10', 'NOC_NMU128_X10Y10', 'NOC_NMU128_X7Y10', 'NOC_NMU128_X8Y10', 'NOC_NSU128_X6Y6'], 'disabled': [], 'invalid': []} Select ID from the list: ID Sample Period 0 : 56ms 1 : 112ms 2 : 224ms 3 : 447ms 4 : 895ms 5 : 1790ms 6 : 3579ms 7 : 7158ms >> 0 [INFO] Sample period changed to 56ms > t Select Tslide between 0 and 27: >> 1 [INFO] Tslide changed to: 1.
- すべてのコンフィギュレーションが設定されたら、
s/start_profile
を使用してプロファイリングを開始できます。 - ハードウェア Linux コンソールに移動し、アプリケーションを実行します。run が完了したら、
e/end_profile
を使用してプロファイリングを終了できます。 -
q/quit
コマンドを使用してvperf
ユーティリティから終了すると、新しいvperf.run_summary
ファイルが生成されます。このファイルは、Vitis IDE で開くことができます。次の例では、AI エンジン アプリケーションに 3 つの GMIO 入力ポートと 6 つの GMIO 出力ポートが含まれています。
vperf
ユーティリティでオプションのf
コマンドを使用して、プロファイリングの対象となるノードをフィルタリングすると、次のように利用可能なノードがすべて表示されます。> f List of detected nodes in the design: 1 NOC_NMU128_X0Y6 : CIPS_0/FPD_CCI_NOC_0 2 NOC_NMU128_X0Y7 : CIPS_0/FPD_CCI_NOC_1 3 NOC_NMU128_X0Y8 : CIPS_0/FPD_CCI_NOC_2 4 NOC_NMU128_X0Y9 : CIPS_0/FPD_CCI_NOC_3 5 NOC_NMU128_X0Y4 : CIPS_0/FPD_AXI_NOC_0 6 NOC_NMU128_X0Y5 : CIPS_0/FPD_AXI_NOC_1 7 NOC_NMU128_X0Y3 : CIPS_0/LPD_AXI_NOC_0 8 NOC_NMU128_X0Y2 : CIPS_0/PMC_NOC_AXI_0 9 NOC_NMU128_X7Y10 : ai_engine_0/M03_AXI 10 NOC_NMU128_X10Y10 : ai_engine_0/M00_AXI 11 NOC_NMU128_X12Y10 : ai_engine_0/M01_AXI 12 NOC_NMU128_X8Y10 : ai_engine_0/M05_AXI 13 NOC_NMU128_X9Y10 : ai_engine_0/M04_AXI 14 NOC_NMU128_X11Y10 : ai_engine_0/M02_AXI 15 DDRMC_X0Y0 : DDRMC/DDRMC_X0Y0 16 DDRMC_X3Y0 : DDRMC/DDRMC_X3Y0 17 DDRMC_X1Y0 : DDRMC/DDRMC_X1Y0
ここで重要な点は、デザインに合計 9 つの I/O ポートが含まれていることです。一方で、AI エンジンに対応する NMU ノードは 6 つしかありません (ID: 9-14)。これは、インターフェイス タイルを介する各 AI エンジン - NMU 間接続に対して、2 つの MM2S と 2 つの S2MM チャネルがサポートされているためです。
つまり、読み出しと書き込みは同じインターフェイス タイルを介して実行されますが、チャネルは異なる可能性が高くなります。したがって、読み出し転送と書き込み転送の両方に同じ NMU ノードが使用され、次の図に示すように、Vitis IDE の両方の NoC カウンターに同じ NMU ノードが表示されます。
GMIO ポート (入力と出力の両方) のインターフェイス タイルとチャネル マッピングに関する情報は、Vitis IDE のグラフ コンパイル サマリ レポートで確認できます。
図 2. インターフェイス チャネル次の例のコンフィギュレーションでは、3 つの NoC NMU 9-11 (JTAG 帯域幅の制限を考慮) をプロファイリングするように設定されています。
Enter the filter to select Nodes from the above list: >> 9,10,11 [INFO] Selected nodes according to the filter : 1 NOC_NMU128_X7Y10 : ai_engine_0/M03_AXI 2 NOC_NMU128_X10Y10 : ai_engine_0/M00_AXI 3 NOC_NMU128_X12Y10 : ai_engine_0/M01_AXI
次の図に、Vitis IDE に表示される NoC プロファイル出力を示します。
図 3. NoC カウンターの読み出し- NoC カウンターの読み出しグループは、NMU を経由する、DDR から AI エンジンまでのトラフィックを示します。
- NMU ノードは GMIO 入力の読み出しに対応します。
Vitis IDE の NoC プロファイル出力には、NMU 書き込みグループと対応するノードが含まれます。
図 4. NoC カウンターの書き込み - NoC カウンターの書き込みグループは、NMU を経由する、AI エンジンから DDR までのトラフィックを示します。
- NMU ノードは GMIO 出力の書き込みに対応します。
コンフィギュレーションは、NoC NMU 12-14 (JTAG 帯域幅の制限を考慮) をプロファイリングするようにに設定されています。
Enter the filter to select Nodes from the above list: >> 12,13,14 [INFO] Selected nodes according to the filter : 1 NOC_NMU128_X8Y10 : ai_engine_0/M05_AXI 2 NOC_NMU128_X9Y10 : ai_engine_0/M04_AXI 3 NOC_NMU128_X11Y10 : ai_engine_0/M02_AXI
ほかの NMU ノードのプロファイリングを入手するには次を実行します。
-
npi_sample_period
、TSLIDE
の値を再設定し、必要なノードをフィルタリングします。 - プロファイリングを開始します。
- ハードウェアでアプリケーションを再度実行します。
- プロファイリングを終了して、新しい vperf.run_summary ファイルを生成します。
上の図では、プロファイル サマリには NoC カウンターの書き込みグループのみが表示され、読み出しグループはありません。これは、3 つのノードが GMIO 出力に対応し、GMIO 入力がそのインターフェイス タイルにマッピングされていないためです。
v++ リンク (_x/link/vivado/vpl/prj/prj.xpr) ステップで生成された Vivado プロジェクトを開いて、NoC インターコネクト ネットワークを表示し、NoC を経由するトラフィックがあるデザイン向けに接続されている NMU を特定することもできます。