59
SDSoC 環境デバッグ ガイド UG1282 (v2018.3) 2019 1 24 この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資 料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報 につきましては、必ず最新英語版をご参照ください。

SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

SDSoC 環境デバッグ ガイドUG1282 (v2018.3) 2019 年 1 月 24 日

この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報につきましては、必ず最新英語版をご参照ください。

Page 2: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

改訂履歴次の表に、この文書の改訂履歴を示します。

セクション 改訂内容2019 年 1 月 24 日 バージョン 2018.3

資料全体 編集上のアップデート。2018 年 12 月 5 日 バージョン 2018.3

資料全体 編集上のアップデート。2018 年 7 月 2 日 バージョン 2018.2

資料全体 編集上のアップデート。2018 年 6 月 6 日 バージョン 2018.2

全体的なアップデート 初版。

改訂履歴

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 2

Page 3: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

目次改訂履歴....................................................................................................................................................................2

第 1 章: SDSoC のデバッグの概要........................................................................................................... 4SDSoC 環境の概要.....................................................................................................................................................4SDSoC デバッグ フローの概要................................................................................................................................10

第 2 章: SDSoC のデバッグ機能...............................................................................................................15SDx 環境デバッグ ツール........................................................................................................................................ 15システム エミュレーション.....................................................................................................................................23すべてのプラットフォームで使用可能なハードウェア実行機能............................................................................ 28ハードウェア/ソフトウェア イベントのトレース................................................................................................... 38

第 3 章: デバッグ手法..................................................................................................................................... 41システムのハングとランタイム エラーのデバッグ.................................................................................................42IP レジスタの監視および変更................................................................................................................................. 47イベント トレース................................................................................................................................................... 48ソフトウェア/ハードウェアのクロスプローブのデバッグ..................................................................................... 51パフォーマンスのデバッグに関するヒント............................................................................................................ 52コンパイル時およびリンク時のエラーのトラブルシューティング........................................................................ 53パフォーマンス問題のトラブルシューティング..................................................................................................... 54

付録 A: SDSoC 環境でのトラブルシューティング...................................................................... 56

付録 B: その他のリソースおよび法的通知....................................................................................... 57Documentation Navigator およびデザイン ハブ................................................................................................... 57参考資料.................................................................................................................................................................. 57トレーニング リソース............................................................................................................................................ 58お読みください: 重要な法的通知............................................................................................................................ 58

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 3

Page 4: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

第 1 章

SDSoC のデバッグの概要SDSoC™ 環境は、ヘテロジニアス エンベデッド システムをインプリメントするための Eclipse ベースの統合設計環境(IDE) です。SDSoC では、Zynq®-7000 SoC および Zynq® UltraScale+™ MPSoC デバイスを使用した Arm® Cortex™ ベースのアプリケーションと、ザイリンクス SoC および FPGA 上の MicroBlaze™ プロセッサ ベースのアプリケーションがサポートされます。この資料では、SDSoC 環境のデバッグ機能について説明し、SDSoC フローで発生した問題を解析する方法を詳細に示します。注記: パフォーマンスの問題については説明しません。ツールの問題がなく、デザインが正しく機能している場合は、

『SDSoC 環境プロファイリングおよび最適化ガイド』 (UG1235) を参照して、デザインのパフォーマンスに改善の余地があるかどうかを調べてみてください。

SDSoC 環境の概要SDSoC 環境には、選択した関数をプログラマブル ロジック (PL) にコンパイルし、C/C++ プログラムを完全なハードウェア/ソフトウェア システムに変換するシステム コンパイラが含まれます。SDSoC のシステム コンパイラは、プログラムを解析してソフトウェア関数とハードウェア関数間のデータフローを判断し、プログラムを実現するアプリケーション特定のシステム オン チップ (SoC) を生成します。高パフォーマンスを達成するため、各ハードウェア関数は独立したスレッドとして実行されます。システム コンパイラは、ハードウェア コンポーネントおよびソフトウェア コンポーネントを生成してハードウェア スレッドとソフトウェア スレッド間が同期するようにし、パイプライン計算および通信もイネーブルにできます。アプリケーション コードには、多数のハードウェア関数、特定のハードウェア関数の複数のインスタンス、プログラムの異なる部分からのハードウェア関数呼び出しなどを含めることができます。SDSoC 統合開発環境 (IDE) では、プロファイリング、コンパイル、リンク、システム パフォーマンス解析、デバッグを含むソフトウェア開発ワークフローがサポートされています。また、高速なパフォーマンス見積もり機能があり、ハードウェアの完全なコンパイルを実行する前に、さままなハードウェア/ソフトウェア インターフェイスを試すことが可能です。SDSoC システム コンパイラは、ベース プラットフォームをターゲットとし、Vivado® 高位合成 (HLS) ツールを起動して合成可能な C/C++ 関数をプログラマブル ロジックにコンパイルします。その後 Vivado Design Suite ツールを起動して、システム コンパイラで DMA、インターコネクト、ハードウェア バッファー、その他の IP、および FPGA ビットストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保持されるようにするため、SDSoC システム コンパイラはシステム特定のソフトウェア スタブおよびコンフィギュレーション データを生成します。このプログラムには、生成された IP ブロックを使用するのに必要なドライバーへの関数呼び出しが含まれています。アプリケーションおよび生成されたソフトウェアは、標準の GNU ツールチェーンを使用してコンパイルおよびリンクされます。システム コンパイラでは、1 つのソースから完全なアプリケーションを生成することにより、プログラム レベルでデザインおよびアーキテクチャを繰り返し変更できるので、ターゲット プラットフォームで実行可能なプログラムを達成するまでの時間を短縮できます。

第 1 章: SDSoC のデバッグの概要

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 4

Page 5: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

用語次の用語は、SDSoC 環境での設計に関する内容でよく使用されます。用語とその説明は次のとおりです。• アクセラレータ: FPGA 汎用インターコネクトのハードウェアにインプリメントされるアプリケーション コードの

部分。「ハードウェア関数」とも呼ばれます。• データ ムーバー: データ ムーバーは、アクセラレータ間、およびプロセッシング システム (PS) とアクセラレータ

の間でデータを転送します。SDSoC 環境では、転送されるデータの特性とサイズに基づいてさまざまなタイプのデータ ムーバーを生成できます。

• パイプライン処理: パイプライン処理は、アルゴリズムのハードウェア インプリメンテーションで命令レベルの並列処理を増加させる手法で、演算または関数の独立した段をオーバーラップさせます。等価の機能が得られるように元のソフトウェア インプリメンテーションのデータ依存性は保持されますが、必要な回路は独立した段のチェーンに分割されます。チェーンのすべての段は、同じクロック サイクルで並列実行されます。唯一の違いは各段のデータのソースで、計算の各段は、前のクロック サイクルで前の段で計算された結果からデータ値を受信します。

• プラグマ: システム コンパイラに指示を与えるためにソース コードに挿入可能な特別な指示子。SDSoC 環境では、通信と計算のバランスが取られるようにハードウェア関数およびハードウェア関数への呼び出しを構成し、システム コンパイラに指示を与えるプラグマをソース コードに挿入することにより、システム生成プロセスを制御します。

• プロセッサ: SDSoC 環境では、プロセッサとは MicroBlaze プロセッサなどのソフト プロセッサまたは Zynq-7000SoC および Zynq UltraScale+ MPSoC などの Arm プロセッサを意味します。

• システム ポート: システム ポートは、データ ムーバーを PS に接続します。システム ポートとしては、Zynq のACP、AFI (ハイ パフォーマンス ポートに対応)、MIG (PL ベースの DDR メモリ コントローラーに対応)、またはストリーム ポートを使用できます。

SDSoC のエレメントSDSoC 環境には、次の機能が含まれます。• 完全なハードウェア/ソフトウェア システムを生成する sds++ システム コンパイラ。sds++ システム コンパイ

ラでは、Vivado 高位合成 (HLS)、Vivado IP インテグレーター、データ移動およびインターコネクト用の IP ライブラリ、RTL 合成、配置、配線、ビットストリーム生成用のツールを含む Vivado Design Suite System Edition からの機能が使用されます。

• アプリケーション プロジェクトおよびワークフローを作成および管理する Eclipse ベースの統合開発環境 (IDE)。• ハードウェア/ソフトウェア インターフェイスで異なるシナリオを試すためのシステム パフォーマンス見積もり。SDSoC 環境は、Zynq-7000 SoC および Zynq UltraScale+ MPSoC 用の GNU ツールチェーン、標準ライブラリ (glibc など)、エンベデッド プロセッサ ターゲットとの通信に使用される TCF (Target Communication Framework) を含むザイリンクス ソフトウェア開発キット (SDK) などの多数のツールも継承しています。Eclipse/CDT ベースの IDE には、パフォーマンス解析パースペクティブも含まれます。sds++ システム コンパイラでは、ターゲット プラットフォームをカスタマイズしてアプリケーションのシステム オン チップが生成されます。この環境には、アプリケーション開発用の多数の標準ベース プラットフォームのほか、サードパーティ パートナーや SDSoC 設計チームの開発したプラットフォームも含まれます。『SDSoC 環境プラットフォーム開発ガイド』 (UG1146) に、Vivado Design Suite を使用したプラットフォーム デザインの作成方法、プラットフォーム インターフェイスの設定方法、プラットフォームを構築するソフトウェア ランタイム環境を定義して SDSoC環境で使用できるようにする方法などが説明されています。

第 1 章: SDSoC のデバッグの概要

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 5

Page 6: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

SDx™ IDE では、アプリケーション特定のハードウェア アクセラレータおよびアクセラレータをプラットフォームに接続するデータ モーション ネットワークを使用して、ターゲット プラットフォームをカスタマイズします。次に、メモリ アクセス ポートとハードウェア アクセラレータを含む簡略化した Zynq と DDR コンフィギュレーションを示します。

図 1: メモリ アクセス ポートとメモリを示した Zynq + DDR の簡略図

Zynq Programmable Logic (PL)

ARM A9Processor

L2 CacheMemory

MemoryController

DMA1 DMA2

HardwareFunction1

HardwareFunction2

DDRMemory

GPx ACP HPx/AFI

Zynq Processing System (PS)

X14709-061518

SDSoC アプリケーションの実行モデルSDSoC 環境アプリケーションの実行モデルは、プラットフォームのブート後にターゲット CPU で実行される C++ プログラムの通常実行を考えると理解できます。C++ バイナリの実行ファイルがハードウェアとどのようにインターフェイスするかを理解しておくと有益です。プログラム内で宣言されたハードウェア関数はハードウェア アクセラレータにコンパイルされ、標準 C ランタイムでこれらの関数への呼び出しによりアクセスされます。各ハードウェア関数呼び出しがタスクとしてアクセラレータを起動し、関数への各引数が CPU とアクセラレータ間で転送されて、アクセラレータ タスクの完了後にプログラムでアクセスできるようになります。メモリとアクセラレータ間のデータ転送には、DMA エンジンなどのデータ ムーバーが使用され、zero_copy などのユーザー データ ムーバー プラグマを考慮して、sds++ システム コンパイラにより自動的に挿入されます。

第 1 章: SDSoC のデバッグの概要

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 6

Page 7: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

図 2: SDSoC システムのアーキテクチャ

SDSoC プラットフォーム

DDR バンク

Zynq

エンベデッド プロセッサ (PS 領域) オペレーティング システム

ドライバー アプリケーション コード

ペリフェラル(ビジョン、グラフィック、測定...)

プログラマブル ロジック (PL 領域)ハードウェア関数アクセラレータデータ ムーバー

ダイレクト I/O アクセス

X21358-082418

プログラムが正しく機能するようにするため、システム コンパイラはハードウェア関数への各呼び出しをインターセプトし、シグネチャが同じで派生した名前が付けられたスタブ関数への呼び出しに置き換えます。スタブ関数はすべてのデータ移動とアクセラレータの演算を制御し、ハードウェア関数呼び出しの終了時にソフトウェアとアクセラレータ ハードウェアを同期化します。スタブ内では、すべてのアクセラレータとデータ ムーバーは sds_lib ライブラリに含まれる送信および受信 API により制御されます。ハードウェア関数呼び出し間のプログラム データフローに、プログラム内で関数呼び出し (デストラクターまたはfree() 呼び出し以外) が実行された後にアクセスされない配列引数が関係する場合、およびハードウェア アクセラレータをストリームを使用して接続できる場合、メモリへの往復がインプリメントされるのではなく、1 つのハードウェア アクセラレータから直接ハードウェア ストリーム接続を介して次のハードウェア アクセラレータにデータが転送されます。この最適化により、パフォーマンスが大幅に向上し、ハードウェア リソースを削減できます。プログラムの SDSoC プログラム実行モデルの大まかな手順は次のとおりです。1. プログラムのコンストラクターが main() に入る前に sds_lib ライブラリが初期化されます。2. プログラム内で、ハードウェア関数への各呼び出しが、元の関数と関数シグネチャが同じ (名前は異なる) のスタ

ブ関数への関数呼び出しによりインターセプトされます。スタブ関数内では、次の手順が実行されます。a. 同期アクセラレータ タスク制御コマンドがハードウェアに送信されます。b. ハードウェア関数への各引数に対して、非同期データ転送要求が関連付けられた wait() ハンドルと共に適

切なデータ ムーバーに送信されます。void 以外の戻り値は、出力スカラー引数として扱われます。

第 1 章: SDSoC のデバッグの概要

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 7

Page 8: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

c. 各転送要求に対して、バリア wait() が発行されます。アクセラレータ間のデータ転送がダイレクト ハードウェア ストリームとしてインプリメントされる場合、この転送のバリア wait() は、この引数のアクセラレータ関数チェーンの最後のアクセラレータ関数に対するスタブ関数で発生します。

3. プログラムのデストラクターが main() を終了するときに、sds_lib ライブラリがクリーンアップされます。ヒント: 手順 2a ~ 2c は、アクセラレータ パイプラインの開始および終了時にプログラムを正しく保ち、それと同時にパイプライン内での同時実行を可能にします。場合によっては、システム コンパイラで自動的には推論できないアクセラレータ タスクの同時実行の可能性を、プログラマが認識していることもあります。sds++ システム コンパイラでは #pragma SDS async(ID) プラグマがサポートされており、このような場合にハードウェア関数への呼び出しの直前に挿入できます。このプラグマを指定すると、データ転送に対してバリア wait() 呼び出しなしでスタブ関数が生成されます。その結果、すべての転送要求を発行した後に制御がプログラムに戻り、アクセラレータの実行中にプログラムの同時実行が可能になります。この場合、プログラム内の適切な同期ポイントに #pragma SDS wait(ID) を挿入してください。このプラグマはsds_wait(ID) API 呼び出しとなり、ハードウェア アクセラレータ、その暗示的なデータ ムーバー、および CPU が正しく同期化されます。重要: 各 async(ID) プラグマには、対応する wait(ID) プラグマが必要です。

SDSoC のビルド プロセスSDSoC 環境のビルド プロセスでは、標準のコンパイルおよびリンク プロセスが使用されます。g++ と同様に、sds++ システム コンパイラはサブプロセスを呼び出してコンパイルおよびリンクを実行します。次の図に示すように、コンパイル段階では、CPU で実行されるオブジェクト コードのコンパイルだけでなく、Vivado高位合成 (HLS) ツールを使用したハードウェア関数の IP ブロックへのコンパイルおよびリンク、およびターゲットCPU ツールチェーンを使用した標準オブジェクト ファイル (.o) の作成も実行されます。システムのリンク段階では、すべてのハードウェア関数における呼び出し元/呼び出し先の関係のプログラム解析、各ハードウェア関数呼び出しをインプリメントするアプリケーション特定のハードウェア/ソフトウェア ネットワークの生成が実行されます。sds++ システム コンパイラは、Vivado HLS (関数コンパイラ)、生成されたハードウェア システムをインプリメントする Vivado Design Suite、CPU で実行されるアプリケーション バリアを作成する Arm コンパイラおよびリンカーなど必要なすべてのツールを呼び出して、SD カード用の完全なブート可能イメージを出力することにより、各ハードウェア関数用のアクセラレータ (スタブ) を呼び出します。

第 1 章: SDSoC のデバッグの概要

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 8

Page 9: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

図 3: SDSoC のビルド プロセス

エンベデッド プロセス アプリケーション

ハードウェア関数

SDS++コンパイル

HLS 関数のコンパイル

GNU Arm ツールチェーン

SDS++リンク

Vivado Design Suite

ソフトウェア イメージの

アップデート

C/C++

Arm のビルド手順

アプリケーションの実行ファイル

(.elf)

RTL、C/C++

プログラマブル ロジックのビルド手順

FPGA バイナリ (ビットストリーム)

ブート可能システム イメージ

エンベデッド システムのソース コード

X21126-082318

コンパイル プロセスには、次のタスクが含まれます。• コードが解析され、Arm コアの main アプリケーションがコンパイルされ、各ハードウェア アクセラレータに対し

て個別にコンパイルが実行されます。• 標準 GNU Arm コンパイル ツールでアプリケーションがコンパイルされ、最終出力としてオブジェクト ファイル

(.o) が生成されます。• ハードウェアでアクセラレーションされる関数が HLS ツールで実行され、カスタム ハードウェア作成プロセスが

開始し、出力としてオブジェクト ファイル (.o) が生成されます。コンパイル後のリンク プロセスには、次のタスクが含まれます。• デザイン内のデータ移動が解析され、ハードウェア プラットフォームがアクセラレータを受け入れるよう変更さ

れます。• Vivado Design Suite で合成およびインプリメンテーションが実行されてハードウェア アクセラレータがプログラ

マブル ロジック (PL) 領域にインプリメントされ、デバイス用のビットストリームが生成されます。• エンベデッド プロセッサ アプリケーションからハードウェア関数を呼び出すため、ソフトウェア イメージがハー

ドウェア アクセス API でアップデートされます。• ボードを ELF (Executable and Linkable Format) ファイルのアプリケーションでブートする統合 SD カード イメー

ジが生成されます。

第 1 章: SDSoC のデバッグの概要

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 9

Page 10: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

SDSoC デバッグ フローの概要SDSoC 環境で生成されるシステムは、ハードウェア コンポーネントおよびソフトウェア コンポーネントで構成される高性能で複雑なシステムです。ソフトウェアの一部がプロセッサで実行され、ハードウェア アクセラレータがプログラマブル ファブリックで実行され、それらの間でデータ転送が同時に多数実行されるこのようなシステムでは、アプリケーションの実行を理解するのが困難なことがあります。SDSoC 環境では、ザイリンクス ソフトウェア デバッガー (XSDB) を使用してプロジェクトを作成およびデバッグできます。高度なハードウェア/ソフトウェア イベントトレースが提供されており、ドライバー ソフトウェア設定およびハードウェアでの実行を含むアクセラレータ タスクとデータ転送の統合タイムライン ビューがあります。コマンド ラインまたはスクリプト オプションを使用すると、SDx 統合開発環境 (IDE) 外でプロジェクトをデバッグできます。SDSoC 開発環境では、コンパイルおよびリンク コマンドのビルド プロセスのターゲットをシステム エミュレーション ターゲットまたは指定のプラットフォームのハードウェア ターゲットに指定できます。完全なシステムをビルドする代わりに、ターゲットとアプリケーション バイナリを含むエミュレーション モデルを作成できます。エミュレーション ターゲットに対しては、sds++ システム コンパイラによりクセラレータ関数のソース ファイルを使用してシミュレーション モデルが作成されます。システム エミュレーションは SDSoC 環境で最も有効なデバッグ機能の 1 つで、論理的な問題をデバッグしたり、アプリケーションがハングする原因を突き止めたりするのに役立ちます。この機能は、ザイリンクス ベース プラットフォーム ZC702、ZC706、ZCU102、ZCU104、ZCU106、および ZedBoard ベースのプラットフォームでのみ使用可能です。ハードウェア関数を特定したら、システム エミュレーションを使用してロジックをすばやくコンパイルし、システム全体を検証できます。これによりクイック エミュレーター (QEMU) ベース エミュレーターでクロスコンパイルされた Arm コードを実行し、Vivado シミュレータで実行しているハードウェア アクセラレータと通信できます。RTL シミュレータでは波形を表示できますが、波形を表示せずに高速にシミュレーションを実行することもできます。エミュレーターは SDx IDE 内またはコマンド ライン (sdsoc_emulator) で実行でき、システムをビットストリームにコンパイルしてボード上のデバイスにプログラムせずに、最終的なハードウェア インプリメンテーションを正確に表示できます。

第 1 章: SDSoC のデバッグの概要

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 10

Page 11: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

図 4: システム エミュレーション フローソフトウェア

アプリケーション コード

エミュレーションでのデバッグ

機能は正しいか?

プラットフォームは

ザイリンクスかカスタムか?

エミュレーション用にハードウェア関数あり/

なしでソフトウェア アプリケーションを

ビルド

機能は正しいか?

標準ソフトウェア デバッグ

Yes

ザイリンクス

ハードウェアでビルド、イベントのトレース、

プロファイリングおよび 適化

ハードウェアでビルド、イベントのトレース、

プロファイリングおよび 適化

カスタム

YesNo

No

X21984-112018

ハードウェア プラットフォームをターゲットとする場合、ハードウェアおよびソフトウェア イベント トレースを使用して、イベントの実行を解析したり、問題を見つけたりすることもできます (ハードウェア/ソフトウェア イベントのトレース を参照)。ハードウェア デザイン自体に問題がある場合は、SDSoC 環境にインプリメントされたハードウェア関数にデバッグ コアを挿入して、Vivado Lab Edition でハードウェア デバッグを使用できます。次の図に、典型的なハードウェアのビルドおよびデバッグ プロセスを示します。

第 1 章: SDSoC のデバッグの概要

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 11

Page 12: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

図 5: ハードウェアのビルドおよびデバッグ フロー

ハードウェア ビルドは正常に

完了したか?

ハードウェアで実行

機能は正しいか?

パフォーマンスは満たされたか?

デバッグ終了

SDSoC 環境のトラブルシューティングは

UG1027 を参照

ハードウェアでビルド、イベントのトレース、

プロファイリングおよび 適化

パフォーマンスおよび適化については

UG1235 を参照

No

Yes

Yes

ザイリンクス プラットフォームに切り替えて

さらにデバッグ

ChipScope を使用して

ハードウェアをデバッグ

Noアプリケーションのハング

ボードのハング

アプリケーションの

クラッシュ

無効なデータ

No

エミュレーションが問題なく完了

ソフトウェア アプリケーション

コード

ソフトウェア アプリケーション

コード

ソフトウェア アプリケーション

コード

ソフトウェア アプリケーション

コード

エラーを分類して修正

Yes

X21658-100818

ザイリンクス ベース プラットフォームでは、システム エミュレーションおよびハードウェア ターゲット ビルドの両方がサポートされます。カスタム プラットフォームおよびサードパーティ プラットフォームでは、ハードウェア ビルドおよびデバッグ フローのみがサポートされます。

関連情報システムのハングとランタイム エラーのデバッグ

システム エミュレーションザイリンクス ベース プラットフォームでは、システム エミュレーションを使用してシステム全体 (PS および PL) のRTL レベルのトランザクションをデバッグできます。SDSoC エミュレーター (sdsoc_emulator) でアプリケーションを実行すると、デバッガーでデータ転送を可視化できます。これによりシステム ハングプの問題をデバッグでき、シミュレーション波形ビューで関連するデータ転送調べて、そのデータ転送に関係するハードウェア ブロックの信号を表示できます。

第 1 章: SDSoC のデバッグの概要

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 12

Page 13: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

ハードウェア実行フローハードウェア実行では、実際のハードウェア プラットフォームを使用してアクセラレーションされたアプリケーションを実行できます。System Integrated Logic Analyzer (System ILA)、Virtual Input/Output (VIO) デバッグ コア、AXI パフォーマンス モニターなどの特別なデバッグ ロジックをアクセラレータに含むハードウェアのデバッグ コンフィギュレーションを作成できます。SDSoC 環境には Vivado ハードウェア マネージャーを使用したハードウェア デバッグ機能が含まれており、波形解析、カーネル アクティビティ レポート、およびメモリ アクセス解析を実行してハードウェアのクリティカルな問題を可視化できます。インシステム デバッグを使用すると、ターゲット ハードウェアでデザインをリアルタイムにデバッグできます。これは、デザインを完成させるために必須の手順です。シミュレータでは再現するのが困難な状況もあるので、実行中のハードウェアで問題をデバッグすることが必要です。この手順では、デザインにデバッグ コアを配置して、デザインを監視および制御できるようにします。デバッグ プロセスが終了したら、パフォーマンスを向上してデバイスのリソース使用率を削減するため、デバッグ コアを削除できます。SDx 統合開発環境 (IDE) およびコマンド ライン オプションを使用して、デザインをデバッグ用にインストルメント化できます。--dk コンパイラ オプションは、ハードウェア関数のインターフェイスに ILA デバッグ コアを追加します。アプリケーション コードで使用される C 呼び出し可能な IP をデバッグするには、IP を C 呼び出し可能な IP としてパッケージする前に、IP の RTL コードにデバッグ コアをインスタンシエートする必要があります。重要: SDSoC プラットフォーム ハードウェア上でハードウェア関数をデバッグするには、ハードウェア モデル全体に追加のロジックを組み込む必要があります。つまり、ハードウェア デバッグを有効にすると、ザイリンクス デバイスのリソース使用率およびハードウェア関数のパフォーマンスに影響します。

ハードウェアへの接続ボード接続の要件は、オペレーティング システム (スタンドアロン、FreeRTOS、または Linux) によって多少異なります。• スタンドアロンおよび FreeRTOS の場合、USB/JTAG インターフェイスを使用して ELF ファイルをボードにダウン

ロードする必要があります。トレース データも同じ USB/JTAG インターフェイスを介して読み出されます。• Linux では、SDSoC 環境で OS が SD カードから起動されると想定されます。その後 SDx 環境は .elf ファイルを

コピーし、ボードとホスト PC 間のイーサネット接続を介して、Linux で実行される TCP/TCF エージェントを使用して実行します。トレース データは、USB/JTAG インターフェイスを介して読み出されます。このため、Linux アプリケーションのトレースには、USB/JTAG インターフェイスおよび TCP/TCF エージェント インターフェイスの両方が必要です。

次の図に、必要な接続を示します。

第 1 章: SDSoC のデバッグの概要

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 13

Page 14: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

図 6: 異なるオペレーティング システムでトレースを使用した場合に必要な接続

Linux

Standalone/FreeRTOS

Host PC Board

Ethernet Ethernet

USB JTAG

Zynq-7000SoC

Host PC Board

Ethernet Ethernet

USB JTAG

Zynq-7000 SoC

X16744-010419

イベント トレースSDSoC 環境のイベント トレース機能を使用すると、アプリケーション実行中にシステムで何が起こっているかを詳細に表示できます。トレース イベントが生成されてタイムライン ビューに収集され、実行中のアプリケーションに関する情報が表示されます。この詳細な表示により、ワークロードを与えたときのアプリケーションのパフォーマンス、ハードウェア/ソフトウェアの分割、およびシステム デザインの選択肢などが理解しやすくなります。この表示を使用すると、プロセッサで実行されているソフトウェアと、システム内のハードウェア アクセラレータおよびデータ転送リンクのイベント トレースが可能になります。このような情報は、問題の特定、システム インプリメンテーションの最適化、システム インプリメンテーションの向上に役立ちます。アプリケーションをトレースすると、システム実行に関する情報を記録するログが生成されます。イベント トレースでは、イベント ログとは異なり、特定の時間の瞬間的なイベントが表示されるのではなく、イベント期間中のイベント間の関係が表示されます。トレースの目標は、どのイベントがいつ発生するか、イベントにどれくらい時間がかかるかなどを監視し、デバッグを実行しやすくすることです。これは、パフォーマンスを解析し、アプリケーションのハングが発生するかどうかを調べるの最適です。

第 1 章: SDSoC のデバッグの概要

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 14

Page 15: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

第 2 章

SDSoC のデバッグ機能このセクションでは、SDx™ 環境で Vivado® Design Suite IDE またはコマンド ラインを使用してデバッグを実行する方法について詳しく説明します。

SDx 環境デバッグ ツールSDx 環境には、SDSoC 環境デザインをデバッグするためにザイリンクス システム デバッガー (XSDB) が含まれます。

ザイリンクス システム デバッガー (XSDB)ザイリンクス システム デバッガー (XSDB) では、ザイリンクス hw_server がデバッグ エンジンとして使用されます。ザイリンクス ソフトウェア開発キット (SDK) は各ユーザー インターフェイス操作を一連の TCF (TargetCommunication Framework) コマンドに変換し、システム デバッガーからの出力を処理して、デバッグされているプログラムの現在のステートを表示します。ハードウェア上のプロセッサとの通信には、ザイリンクス hw_server が使用されます。システム デバッガーの 1 つのデバッグ コンフィギュレーションで複数のプロセッサを同時にデバッグできます。これが、SDx 環境デザインに推奨されるデバッグ エンジンです。システム デバッガーは、ハードウェアまたは QEMU エンジンで起動できます。

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 15

Page 16: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

.elf

SDK のデバッグ パースペクティブ

hw_server

ハードウェアまたは ISS で実行中の

プログラム

デバッグ コンフィギュレーションの作成

hw_server の詳細を指定

X21076-120218

ワークフローは、次の要素で構成されます。• ELF ファイル: ユーザー アプリケーションをデバッグするには、デバッグ用にコンパイルされた ELF ファイルを使

用する必要があります。デバッグ ELF ファイルには、デバッガーへの追加のデバッグ情報が含まれ、ソース コードとその元のソースから生成された 2 進数間が直接関連付けられます。詳細は、ビルド コンフィギュレーションを参照してください。

• デバッグ コンフィギュレーション: デバッグ セッションを開始するには、SDx 環境でデバッグ コンフィギュレーションを作成する必要があります。このコンフィギュレーションには、実行ファイル名、デバッグするプロセッサターゲットなど、デバッグ セッションを開始するのに必要な情報が含まれます。詳細は、デバッグ コンフィギュレーションの設定 を参照してください。

• SDx の [Debug] パースペクティブ: [Debug] パースペクティブを使用すると、SDx ワークベンチでプログラムのデバッグまたは実行を管理できます。ブレークポイントを設定、実行中のプログラムを一時停止、コードをステップ実行、変数の内容を確認するなど、プログラムの実行を制御できます。

SDx 環境で、コードの修正、実行ファイルの構築、プログラムのデバッグというサイクルを繰り返すことができます。注記: コンパイル後にソースを編集すると、デバッグ情報がそのソースに直接関連付けられているため、その行番号はステップ実行されなくなります。同様に、最適化されたバイナリをデバッグすると、実行トレース中に予期しないジャンプが発生することがあります。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 16

Page 17: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

デバッグ コンフィギュレーションの設定アプリケーションをデバッグ、実行、およびプロファイリングするには、アプリケーション実行およびデバッグの設定を保存するデバッグ コンフィギュレーションを作成する必要があります。デバッグ コンフィギュレーションを作成するには、[Assistant] ビューで [Debug] ビルド コンフィギュレーションを右クリックし、[Debug] → [DebugConfigurations] をクリックします。または、メイン メニューから [Run] → [Debug Configurations] をクリックします。次の図に示す [Debug Configurations] ダイアログ ボックスが開きます。ヒント: アプリケーション プロジェクトの OS とシステム設定、およびデバッグするアプリケーションのタイプによって、[Debug Configurations] ダイアログ ボックスに含まれるタブは異なります。ここで説明するタブおよびオプションが実際に表示されるものと異なる場合があります。

図 7: [Debug Configurations] ダイアログ ボックス

[Debug Configurations] ダイアログ ボックスの左側のペインで、[Xilinx SDx Application Debugger] を選択してプロジェクトのデバッグ コンフィギュレーションを作成します。アプリケーション プロジェクトに新しいデバッグ コンフィギュレーションが作成され、コンフィギュレーションを管理する複数のタブが表示されます。[Main] タブ[Main] タブのオプションは、現在のアプリケーション プロジェクトのデバッグおよび接続のタイプに応じて自動的に設定されます。たとえば Linux アプリケーションは、Linux デバッグ タイプを使用し、アプリケーションへの接続には Linux エージェントを使用します。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 17

Page 18: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

ヒント: ここでデバッグ タイプを変更できますが、それによりデバッグ コンフィギュレーションに関連付けられているアプリケーション プロジェクトもリセットされます。

図 8: [Debug Configurations] ダイアログ ボックス: [Main] タブ

[Application] タブ[Application] タブには、プロセッサにダウンロードして実行するコンパイル済みアプリケーション ELF ファイルが表示されます。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 18

Page 19: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

図 9: [Debug Configurations] ダイアログ ボックス: [Application] タブ

[Target Setup] タブLinux アプリケーションでは、[Target Setup] タブは空白です。スタンドアロン アプリケーションでは、ハードウェアプラットフォームと、初期化に FSBL (第 1 段階ブートローダー) フローを使用するかどうか (プラットフォームのデバイスを初期化する必要がある場合) を指定できます。[Arguments] タブ[Arguments] タブでは、デバッグ セッションを起動するのに必要な変数を指定できます。[Variables] をクリックして[Select Variable] ダイアログ ボックスを表示します。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 19

Page 20: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

[Environment] タブ[Environment] タブでは、デバッグ コンフィギュレーションの環境変数を設定します。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 20

Page 21: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

図 10: 環境変数の追加、設定、および編集

デバッグ コンフィギュレーションに新しい環境変数を追加するには、[New] をクリックして値を指定します。[Select]をクリックすると、デバッグ コンフィギュレーションに追加可能な既存の環境変数が表示され、値を変更および設定できます。

[Target Connections] ビュー[Target Connections] ビューでは、複数のリモート ターゲットを設定できます。接続されているターゲットが表示され、ターゲット接続を追加または削除するオプションがあります。SDx 環境では、ターゲット接続はハードウェア サーバー エージェントを介して確立されます。リモート ターゲットに接続するには、ターゲットに接続されたリモートホスト上でハードウェア サーバー エージェントが実行されている必要があります。

詳細は、ハードウェアへの接続 を参照してください。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 21

Page 22: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

SDSoC IDE での Linux アプリケーションのデバッグSDSoC 統合開発環境 (IDE) でアプリケーションをデバッグするには、次の手順を使用します。ボードが JTAG デバッグ コネクタを使用してホスト コンピューターに接続されていることを確認します。ボードとホスト PC 間にはイーサネット接続があります。1. 選択した SDSoC プラットフォームのユーザー ガイドに従って、SD カードから起動するアプリケーションを設定

します。2. [SDx Application Project Settings] で、[Target] を [Hardware] に設定し、[Generate SD card image] チェック ボック

スをオンにします。3. [Assistant] ビューで [Debug] ビルド コンフィギュレーションを右クリックし、[Set Active] をクリックします。4. [Assistant] ビューまたはメイン メニューで [Build] ( ) コマンドをクリックし、デバッグ コンフィギュレーショ

ンをビルドします。5. ファイル ブラウザーまたはコマンド シェルで、Debug/sd_card フォルダーの内容を SD カードにコピーしま

す。6. SD カードをプラットフォームのカード リーダーに挿入し、カードをブートします。7. ボードがネットワークに接続されていることを確認し、UART を介してボードと通信するターミナルを使用して、

コマンド プロンプトでボードに対して ifconfig eth0 を実行するなどして、IP アドレスを記録します。8. [Assistant] ビューで [Debug] ビルド コンフィギュレーションを右クリックし、[Debug] → [Debug Configurations]

をクリックして新しいビルド コンフィギュレーションを作成します。ボードの IP アドレスを入力します。9. SDSoC 環境の [Debug] パースペクティブに切り替え、デバッグの開始、停止、ステップ実行、ブレークポイント

の設定、変数およびメモリの検証などのデバッグ操作を実行します。SDSoC IDE でのスタンドアロンまたは FreeRTOS アプリケーションのデバッグスタンドアロン (ベアメタル) または FreeRTOS OS で実行中のアプリケーションをデバッグするには、ボードが JTAGデバッグ コネクタを使用してホスト コンピューターに接続されていることを確認し、ボードが JTAG から起動するように設定します。1. [Assistant] ビューで [Debug] ビルド コンフィギュレーションを右クリックし、[Set Active] をクリックします。2. [Assistant] ビューまたはメイン メニューで [Build] ( ) コマンドをクリックし、デバッグ コンフィギュレーショ

ンをビルドします。3. [Assistant] ビューで [Debug] ビルド コンフィギュレーションを右クリックし、[Debug] → [Debug Configurations]

をクリックして新しいビルド コンフィギュレーションを作成します。4. オプション: SDSoC 環境の [Debug] パースペクティブに切り替え、デバッグの開始、停止、ステップ実行、ブレー

クポイントの設定、変数およびメモリの検証などのデバッグ操作を実行します。5. オプション: SDSoC IDE ツールバーで [Debug] をクリックすると、上記の手順を一気に実行できます。

XSCT (ザイリンクス ソフトウェア コマンド ライン ツール)SDx 環境などのグラフィカル開発環境は、新規プロセッサの開発を高速化するのに有益です。初心者でも使用できるように、よく使用される関数のほとんどが抽象化され、論理的なウィザードにまとめられています。スクリプトを記述して実行できる機能も重要であり、ツールでの処理を拡張する柔軟性が提供されます。スクリプトは、毎晩実行する回帰テストを開発する際や、開発者がよく使用するコマンド セットを実行する際に特に便利です。XSCT (ザイリンクス ソフトウェア コマンド ライン ツール) は、SDx 環境のインタラクティブでスクリプト記述可能なコマンド ライン インターフェイスです。XSCT のスクリプト言語は、その他のザイリンクス ツールと同様、Tcl (ツール コマンド言語) に基づきます。XSCT コマンドはインタラクティブに実行でき、またコマンドをスクリプトに記述して自動化することもできます。XSCT では、次の操作を実行できます。• ハードウェア、ボード サポート パッケージ (BSP)、およびアプリケーション プロジェクトを作成。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 22

Page 23: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

• リポジトリを管理。• チェーン プリファレンスを設定。• BSP/アプリケーションをコンフィギュレーションおよびビルド。• ハードウェア ターゲットにアプリケーションをダウンロードして実行。• Bootgen および program_flash ツールを実行してブート イメージを作成およびフラッシュ。XSCT コマンドの詳細は、『ザイリンクス ソフトウェア コマンド ライン ツール (XSCT) リファレンス ガイド』(UG1208) を参照してください。

システム エミュレーションシステム エミュレーションは、システム デバッガー上で TCF (Target Communications Framework) サーバーを使用して実行できます。注記: 現在のところ、カスタム プラットフォームでのエミュレーションはサポートされていません。エミュレーションはザイリンクスが提供するベース プラットフォームでのみサポートされます。

IDE からのシステム エミュレーションの実行システム エミュレーションでは、システムをビットストリームにコンパイルしてボード上にデバイスをプログラムしなくても、最終的なインプリメンテーションと同レベルの精度で検証できます。システム エミュレーションを使用すると、実際のハードウェアを使用せずにアプリケーションをデバッグできます。パフォーマンスのボトルネックも特定できます。

システム エミュレーションの有効化システム エミュレーションを有効にするには、[Application Project Settings] ウィンドウで次を実行します。1. [Active build configuration] を [Debug] に設定します。2. [Target] を [Emulation] に設定します。3. エミュレーション モデルを設定します。2 つのエミュレーション モデル モードがあります。

• [Debug]: RTL 生成およびハードウェア関数を含む IP インテグレーター ブロック デザインからシステムを構築し、デザインのビヘイビアー シミュレーションを実行して、結果を解析しやすいように波形ビューアーに表示します。Vivado Design Suite で Vivado シミュレータを使用して波形を解析します。

• [Optimized]: バッチ モードでビヘイビアー シミュレーションを実行し、波形データなしの結果を返します。[Optimized] モデルの方が高速ですが、[Debug] モデルよりも表示される情報は少なくなります。

ハードウェア デバッグ情報を取り込まずに、エミュレーションを高速に実行するには、[Optimized] オプションを選択します。システムのハング問題をデバッグする場合は、[Debug] モードを使用して Vivado シミュレータの波形ビューアーで異なる信号のステートを確認します。アプリケーションのみをデバッグする場合は、[Optimized] エミュレーション モデルを使用できます。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 23

Page 24: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

エミュレーションではシステム全体をコンパイルする必要はないので、実行時間を短縮するために [Generate SDcard image] はデフォルトでオフになっています。システム エミュレーションを使用すると、全ビットストリームコンパイルと同レベルの精度でシステムを検証およびデバッグできます。

4. エミュレーション モデルを指定した後、[Build] ボタン ( ) を使用してシステムをエミュレーション用にコンパイルします。ビルド プロセスには、アプリケーション コード、ハードウェア関数のサイズ、選択したオプションによって時間がかかることがあります。ハードウェア関数をコンパイルするため、ツール スタックには SDx 環境、Vivado 高位合成 (HLS) ツール、および Vivado Design Suite が含まれます。

システム エミュレーターの実行1. エミュレーション ターゲットを作成したら、[Xilinx] → [Start/Stop Emulator] をクリックしてシステム エミュレー

ターを実行します。または、[Assistant] ビューでアプリケーションを右クリックし、[Start/Stop Emulator] をクリックします。

2. [Start/Stop Emulator] ダイアログ ボックスが開いたら、エミュレーション モードを指定します。• [Debug] を選択すると、波形を表示するかしないかを指定してエミュレーションを実行できます。• [Optimized] を選択すると、[Show Waveform] チェック ボックスボックスは無効になります。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 24

Page 25: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

[Start/Stop Emulator] ダイアログ ボックスには、[Project] (プロジェクト名)、[Configuration] (ビルド コンフィギュレーション)、[Show Waveform] (波形表示) オプションが含まれます。[Show Waveform] をオフにすると、ソース コードの print 文の結果も含め、すべてのシステム メッセージが [Emulation Console] ビューに表示されます。この中には、ハードウェア関数で送受信される値や、アプリケーションが問題なく実行されたことを示すメッセージが表示され、PL で実行されるソース コードと PS で実行されるコンパイル済みハードウェア関数が論理的に問題なかったかどうかを確認できます。[Show Waveform] オプションをオンにすると、コンソール ウィンドウで波形ウィンドウと同じ機能が使用できるようになり、RTL のビヘイビアー シミュレーションも実行できます。RTL 波形ウィンドウには、時間の経過に応じたハードウェア関数の信号値が表示されます。[Show Waveform] をオンにする場合、エミュレーションの開始前に信号を手動で波形ウィンドウに追加しておく必要があります。

3. [Scope] ウィンドウでデザイン階層を確認します。4. [Object] ウィンドウで監視する信号を右クリックして、その信号を波形ウィンドウに追加します。5. [Run All] ツールバー ボタンをクリックして、波形ウィンドウのアップデートを開始します。Vivado シミュレータ

の波形ウィンドウの詳細は、『Vivado Design Suite ユーザー ガイド: ロジック シミュレーション』 (UG900) を参照してください。

注記: RTL 波形を表示して実行すると、実行時間は長くなりますが、ハードウェア関数の動作を詳細に解析できます。ヒント:

システム エミュレーションは、[Project Explorer] ビューでアクティブ プロジェクトを右クリックし、次のコマンドをクリックしても開始できます。• [Run As] → [Launch on Hardware]

• [Debug As] → [Launch on Hardware]

エミュレーターを [Debug As] メニューから起動すると、パースペクティブが [Debug] パースペクティブに変更され、ウィンドウおよびビューがプロジェクトのデバッグに適した配置になります。

エミュレーション出力の表示1. システム エミュレーターを実行すると、コンソール ウィンドウにプログラム出力が表示されます。[Show

Waveform] オプションを選択した場合は、Vivado 統合開発環境 (IDE) でシミュレータが起動します。必要に応じて波形ウィンドウに波形を追加します。[Run All] をクリックしてシミュレーションを開始します。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 25

Page 26: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

2. エミュレーターを実行してデバッグ セッションを起動するには、[Assistant] ビューでデバッグ コンフィギュレーションを右クリックして [Debug As] → [Launch on Emulator (SDx Application Debugger)] をクリックします。

3. [Confirm Perspective Switch] ダイアログ ボックスが表示されます。[Yes] をクリックして [Debug] パースペクティブに切り替えます。

4. [Debug] パースペクティブでアプリケーションが起動し、プログラムの実行が main 関数で停止します。アプリケーション コードの実行を再開するには、[Resume] をクリックします。

アプリケーション コードの実行が開始します。次の図に示すように、[Emulation Console] にアプリケーション コードの出力が表示されます。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 26

Page 27: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

Vivado 波形ウィンドウにさまざまな信号のステータスが表示されます。ハードウェア関数の適切な応答も RTL波形に表示されます。コードの実行中の一時停止でも、ボードで実行される FPGA と同様、RTL 波形は続けて実行されてアップデートされます。

5. エミュレーションを停止するには、[Xilinx] → [Start/Stop Emulator] をクリックして [Stop] をクリックします。ヒント: エミュレーションのデモのサンプル プロジェクトを参照するには、[Emulation Example] テンプレートを使用して新しい SDx 環境プロジェクトを作成します。プロジェクトの README.txt ファイルには、SDx IDE およびコマンド ラインの両方でエミュレーションを実行する手順が含まれています。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 27

Page 28: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

コマンド ラインからのシステム エミュレーションの実行SDx 統合開発環境 (IDE) を使用せずにデザインを作成するには、一般的なコマンド ライン フローで個別の SDx コマンドを使用してプロジェクトを構築およびコンパイルするか、makefile フローを使用します。次のスクリプト例では、TARGET でエミュレーション用にコンパイルするよう定義しています。# FPGA Board Platform (Default ~ zcu102)PLATFORM := zcu102# Run Target:# hw - Compile for hardware# emu - Compile for emulation (Default)TARGET := emu

エミュレーション モードでは、次のスクリプト例に示すように、次の 2 つのオプションのいずれかを選択できます。• debug: 確認およびデバッグ用 PL ハードウェア エミュレーションから波形データを取り込みます。• optimized: ハードウェア デバッグ情報を取り込まずに、エミュレーションを高速に実行します。# Target OS:# linux (Default), standaloneTARGET_OS := linux# Emulation Mode:# debug - Include debug data# optimized - Exclude debug data (Default)EMU_MODE := optimized

コマンド プロンプトに「make」と入力してプログラムをビルドします。波形をシミュレータで表示するには、_sdsディレクトリを含むレベルに移動し、「sdsoc_emulator -graphic-xsim」と入力します。これにより、次の図に示すように Vivado シミュレータが起動します。

すべてのプラットフォームで使用可能なハードウェア実行機能システム エミュレーションは、ザイリンクス ベースのプラットフォームで実行されているアプリケーション プロジェクトでしか使用できませんが、ハードウェア実行フローは SDSoC プロジェクトのターゲットであるどのプラットフォームでも実行できます。ハードウェア実行フローとは、ハードウェア プラットフォーム上で協調実行されるエンベデッド プロセッサ オペレーティング システム、アプリケーション コード、およびハードウェア関数です。ハードウェアで実行可能なデバッグには、次のタイプがあります。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 28

Page 29: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

• ザイリンクス システム デバッガー (XSDB) を使用した完全なソフトウェア デバッグ• ザイリンクス システム デバッガー (XSDB) を使用したハードウェアおよびソフトウェアの協調デバッグ• イベント トレース注記: ハードウェア デバッグには、Vivado ハードウェア マネージャーで信号の解析用にハードウェアをインストルメント化することも含まれます。ハードウェアをインストルメント化するため、アプリケーションを特別の命令を含めてビルドする必要があります。

ChipScope を使用した SDSoC でのハードウェア デバッグ最終的なシステム イメージを生成して SDSoC 環境で実行したら、エンベデッド プロセッサ OS、アプリケーション コード、およびアクセラレーションされたハードウェア関数を含むシステム全体が実際のハードウェア上で正しく実行されるかを検証し、必要なデバッグ操作を実行できます。ChipScope は、Vivado IDE を使用してハードウェアでデザインをデバッグするために使用します。ハードウェアとソフトウェアのクロスプローブには、SDx 環境および Vivadoツール スイートの詳細な知識が必要です。このデバッグ手順を使用すると、ターゲット プラットフォームへの接続、プロセッサの接続、プロセッサのブート、およびハードウェアのシステム イメージでのプログラムに関連する問題を発見できます。また、アプリケーション コードとハードウェア関数間のデータのやり取り (プロトコル違反)、複数のハードウェア関数とアプリケーション コードとの検証に関する問題を検出できる可能性があります。さらに、システム パフォーマンス メトリクスも取得でき、その結果作業の焦点がデバッグからパフォーマンスの調整に移行する場合もあります。SDx ツールでは、ハードウェア アクセラレータおよびアダプターのインターフェイスでのトランザクションを解析するため、ハードウェアをインストルメント化できます。また、デザインのハードウェア部分もデバッグできます。

--dk を使用したアクセラレーションされた関数のデバッグのイネーブルデザインの実行を視覚的に表示することは、アプリケーションがハングするような困難な問題をデバッグするために重要です。System Integrated Logic Analyzer (System ILA) デバッグ コアを使用すると、トランザクション レベルでアクセラレーションされたカーネルやハードウェアで実行される関数などを表示できます。ILA コアを使用すると、特定の AXI トラフィックをキャプチャして表示することも可能です。ILA コアは、既存の SDSoC 環境デザインのハードウェア全体にインスタンシエートしてそのデザイン内でデバッグ機能をイネーブルにするか、コンパイラで自動的に挿入されるようにできます。sds++ コンパイラには、デバッグおよびパフォーマンス監視用に System ILA コアをインターフェイスでハードウェア関数に接続するための -–dk オプションがあります。-–dk オプションを使用して ILA IP コアの挿入をイネーブルにします。 --dk arg <[protocol|chipscope|list_ports]:<compute_unit_name>:<interface_name>>

次に、-–dk オプションを使用する例を示します。sds++ -c --dk chipscope:vadd_cu0:s_axi_control --dk chipscope:vadd_cu0:m_axi_gmem

次に、デバッグ コアを挿入する makefile の例を示します。APPSOURCES = main.cpp mmult.cpp madd.cppEXECUTABLE = mmultadd.elfPLATFORM = zc702CLKID =

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 29

Page 30: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

DMCLKID = SDSFLAGS = -sds-pf ${PLATFORM} ${DMCLKID} \ -sds-hw mmult mmult.cpp ${CLKID} -sds-end \ -sds-hw madd madd.cpp ${CLKID} -sds-end \ -debug-port mmult:A \ -debug-port madd:C \ --dk chipscope:madd_1:A \ --dk chipscope:madd_1_if:ap_ctrl CC = sds++ ${SDSFLAGS}CFLAGS = -O3 -cCFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"LFLAGS = -O3OBJECTS := $(APPSOURCES:.cpp=.o)DEPS := $(OBJECTS:.o=.d).PHONY: all clean ultracleanall: ${EXECUTABLE}${EXECUTABLE}: ${OBJECTS} ${CC} ${LFLAGS} $^ -o $@ -include ${DEPS}%.o: %.cpp ${CC} ${CFLAGS} $^ -o $@clean: ${RM} ${EXECUTABLE} ${OBJECTS} ${DEPS}ultraclean: clean ${RM} ${EXECUTABLE}.bit ${RM} -rf _sds sd_card

–debug-port オプションは、アクセラレータの System ILA を挿入する関数名と引数名を指定します。下位レベルの--dk オプションは、ブロック デザイン インスタンスとポート名を再作成するために使用する Tcl ファイルを指定します。次に例を示します。• -debug-port mmult:A は --dk chipscope:mmult_1:A と同じですが、sds++ コマンドではブロック デザイ

ンの再作成に使用される Tcl ファイルに含まれるインスタンスとポート名が判断されます。注記: Tcl ファイルは、Vivado Design Suite のアクセラレータを含むハードウェア プラットフォームのブロック デザインを再作成するために SDx 環境で使用されます。• --xp param:compiler.userPostSysLinkTcl=<user_tcl_file> を使用して <user_tcl_file> に IP イ

ンテグレーターの Tcl コマンドを指定すると、システムのリンク後、合成前にブロック図の System ILA の後処理を実行できます。

注記: 上級ユーザーは、ILA 設定を Tcl コマンドを使用して変更できます。通常、必要に応じて ILA で追加のプローブおよびインターフェイスを有効にして、同じクロック ドメインのほかの信号をデバッグできます。このようにすると、FPGA のロジック リソースを削減できます。また、この機能を使用して ILA のチェーンをクロス トリガーすることも可能です。• --dk は、アクセラレータおよびアダプター ポート用に System ILA を挿入する場合に使用できます。このオプシ

ョンを使用すると、アダプター ポートを確認できます。デザインをビルドしたら、『Vivado Design Suite ユーザーガイド: プログラムおよびデバッグ』 (UG908) に説明するように、Vivado ハードウェア マネージャーを使用してデザインをデバッグできます。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 30

Page 31: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

ビルド設定へのフラグの追加SDSoC IDE で作業している場合は、次に示すように、ビルド設定で前述のシステム オプションを追加できます。1. [Assistant] ビューで [Debug] または [Release] ビルド コンフィギュレーションを右クリックし、[Settings] をクリ

ックします。2. [Build Configuration Settings] ダイアログ ボックスで [Edit Toolchain Settings] リンクをクリックします。3. [Properties for <application_name>] ダイアログ ボックスの [Tool Settings] タブで、[SDS++ Linker] →

[Miscellaneous] をクリックします。4. [Linker Flags] フィールドに必要なデバッグ フラグを追加します。

ヒント: [Tool Settings] タブの上部に [Configuration] フィールドがあり、設定を適用するビルド ([Debug]、[Release]、または [All]) を選択できます。

コンパイラおよびリンカー オプションの詳細は、『SDx コマンドおよびユーティリティ リファレンス ガイド』(UG1279) を参照してください。

ハードウェア デザインの解析適切な ILA (Integrated Logic Analyzer) インスタンスを含めてデザインをビルドしたら、次の手順を実行して Vivado デザインを開いて解析できます。1. デバッグ可能な信号を確認するには、[Project Explorer] ビューで [Debug/Release] → [_sds] → [p0] → [vivado] →

[prj] フォルダーに移動します。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 31

Page 32: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

2. prj.xpr をダブルクリックします。デザインが Vivado IDE で開きます。3. Vivado IDE で、Flow Navigator の [IP インテグレーター] → [Open Block Design] をクリックします。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 32

Page 33: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

4. [Designs] ウィンドウで system_ila_x のインスタンスを見つけます。

5. [Design] ウィンドウで ILA インスタンスを選択し、ブロック デザインでハイライトします。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 33

Page 34: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

6. ILA に接続されているインターフェイス ネットを選択し、SDx IDE で指定したインターフェイスに接続されていることを確認します。

Vivado ハードウェア マネージャーを使用したデザインのデバッグSDx 環境アプリケーションにデバッグ コアを挿入したら、Vivado ハードウェア マネージャーに接続して ILA(Integrated Logic Analyzer) コアのトランザクションを確認します。ハードウェア マネージャーを使用してターゲット ボードに接続するには、次の手順を実行します。1. Vivado Design Suite を起動します。2. [Tasks] セクションで [Open Hardware Manager] をクリックします。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 34

Page 35: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

または、Vivado を起動してプロジェクト (<appication_project_name>/Debug/_sds/p0/vivado/prj/prj.xpr) を開き、Flow Navigator で [Program and Debug] → [Open Hardware Manager] → [Open Target] →[Open New Target] をクリックします。

3. Open New Hardware Target ウィザードが開きます。[Next] をクリックします。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 35

Page 36: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

4. [Hardware Server Settings] ページで [Connect to] ドロップダウン リストから [Remote server] または [Localserver] を選択します。[Remote Server] を選択した場合は、[Host name] にホスト名を入力して [Port] に正しいポート番号を入力します。この例では、[Local server] を選択します。

5. [Next] をクリックします。[Select Hardware Target] ページが開き、ボードに存在するターゲットがリストされます。

6. [Next] をクリックします。[Open Hardware Target Summary] ページが開き、サーバー名、接続するポート、ターゲット、および動作周波数が表示されます。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 36

Page 37: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

7. [Finish] をクリックします。次の図に示すように Hardware Manager 環境が開きます。

8. これで、Vivado ハードウェア マネージャーを使用してデザインで実行中の Integrated Logic Analyzer (ILA) に接続できるようになります。ツールの詳細は、『Vivado Design Suite ユーザー ガイド: プログラムおよびデバッグ』(UG908) を参照してください。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 37

Page 38: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

ハードウェア/ソフトウェア イベントのトレースイベント トレースを使用すると、アクセラレータおよびデータ転送のソフトウェア設定、アクセラレータおよびデータ転送のハードウェア実行など、各フェーズを視覚的に確認できます。アプリケーションをトレースすると、ある期間におけるイベント間の関連を記録するログが生成されます。トレースの目標は、どのイベントがいつ発生するか、イベントにどれくらい時間がかかるかなどを監視し、デバッグを実行しやすくすることです。ソフトウェア イベント トレースでは、ハードウェア関数に自動的にスタブが挿入され、ハードウェア関数呼び出しに関連するソフトウェア制御イベントが検出されます。記録されたイベント タイプには、ハードウェア アクセラレータ、データ転送、およびハードウェア/ソフトウェア同期イベントの設定と初期化が含まれます。AXI4-Stream 接続を介するデータ転送を使用したアクセラレータのハードウェア イベント トレースは、sdscc/sds++ システム コンパイラの -trace オプションを使用してイネーブルにすることもできます。リンカーを -trace オプションを指定して起動すると、ハードウェア関数の RTL インプリメンテーションにハードウェア モニター IP コアが挿入され、アクセラレータの開始と停止、およびデータ転送期間が監視されます。ハードウェア デバッグと同様、ハードウェアへの接続で説明しているように、イベント トレースには SDSoC 環境プラットフォームをホスト コンピューターに接続する必要があります。イベント トレースを実行するには、[Debug] または [Release] ビルド コンフィギュレーションを使用してホストから SDSoC IDE でアプリケーションを実行します。

ハードウェア/ソフトウェア システムのランタイム操作SDSoC 環境のシステム コンパイラでは、ハードウェア関数を Vivado 高位合成 (HLS) ツールを使用して IP にクロスコンパイルするか、『SDSoC 環境プラットフォーム開発ガイド』 (UG1146) で説明するように C 呼び出し可能 IP としてリンクすることにより、ハードウェア関数がインプリメントされます。各ハードウェア関数の呼び出しサイトは、ハードウェア アクセラレータの実行を管理するスタブ関数を呼び出すように書き換えられます。次の図に、ハードウェア関数を書き換えた例を示します。左側が元のコード、右側が新しい関数名で書き換えられたハードウェア関数呼び出しです。

図 11: ハードウェア関数呼び出しサイトの書き換え

X16743-040516

スタブ関数は、ハードウェア アクセラレータを初期化し、関数引数に必要なデータ転送を開始して、アクセラレータと関連のデータ転送がすべて完了するまでプログラム内の適切なポイントで待機することによりハードウェアとソフトウェアを同期します。たとえば、ハードウェア関数 foo() が foo.cpp で定義されている場合書き換えられたコードはそのプロジェクトのビルド設定の _sds/swstubs/foo.cpp に生成されます。次のスタブ コードでは、ハードウェア用にマークされたユーザー関数を置き換えています。この関数はアクセラレータを開始し、アクセラレータからのデータの送受信を開始し、転送が終了するまで待機します。void _p0_mmult0(float *A, float *B, float *C) { switch_to_next_partition(0); int start_seq[3]; start_seq[0] = 0x00000f00; start_seq[1] = 0x00010100;

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 38

Page 39: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

start_seq[2] = 0x00020000; cf_send_i(cmd_addr,start_seq,cmd_handle); cf_wait(cmd_handle); cf_send_i(A_addr, A, A_handle); cf_send_i(B_addr, B, B_handle); cf_receive_i(C_addr, C, C_handle); cf_wait(A_handle); cf_wait(B_handle); cf_wait(C_handle);

イベント トレースを使用すると、アクセラレータおよびデータ転送のソフトウェア設定、アクセラレータおよびデータ転送のハードウェア実行など、各フェーズを視覚的に確認できます。たとえば、次のスタブ コードはトレース用に記述されています。アクセラレータを開始し、転送を開始し、転送が終了するまで待機するコマンドが記述されています。void_p0_mmult_0(float *A, float *B, float *C) { switch_to_next_partition(0); int start_seq[3]; start_seq[0] = 0x00000f00; start_seq[1] = 0x00010100; start_seq[2] = 0x00020000; sds_trace(EVENT_START); cf_send_i(cmd_addr,start_seq,cmd_handle); sds_trace(EVENT_STOP); sds_trace(EVENT_START); cf_wait(cmd_handle); sds_trace(EVENT_STOP); sds_trace(EVENT_START); cf_send_i(A_addr, A, A_handle); sds_trace(EVENT_STOP); sds_trace(EVENT_START); cf_send_i(B_addr, B, B_handle); sds_trace(EVENT_STOP); sds_trace(EVENT_START); cf_receive_i(C_addr, C, C_handle); sds_trace(EVENT_STOP); sds_trace(EVENT_START); cf_wait(A_handle); sds_trace(EVENT_STOP); sds_trace(EVENT_START); cf_wait(B_handle); sds_trace(EVENT_STOP); sds_trace(EVENT_START); cf_wait(C_handle); sds_trace(EVENT_STOP);

ソフトウェア トレースイベント トレースでは、スタブ関数が自動的に挿入され、ハードウェア関数呼び出しのインプリメンテーションに関連するソフトウェア制御イベントがキャプチャされます。イベントには、次のようなタイプがあります。• アクセラレータの設定および開始• データ転送設定• ハードウェア/ソフトウェア同期バリア (イベントを待つ)

これらのイベントはそれぞれ個別にトレースされ、プログラマブル ロジックへの 1 つの AXI4-Lite 書き込みとなり、ハードウェア イベントと同じグローバル タイマーからのタイムスタンプが付きます。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 39

Page 40: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

ハードウェア トレースSDSoC 環境では、Vivado 高位合成 (HLS) でクロス コンパイルされたアクセラレータのハードウェア イベント トレースと、AXI4-Stream 接続を介したデータ転送がサポートされます。sds++ を -trace オプションを使用して起動すると、ハードウェア モニター IP コアが生成されたシステムに自動的に挿入され、次のイベント タイプが記録されます。• ap_start および ap_done 信号で定義されたアクセラレータの開始および停止。• AXI4-Stream ハンドシェイク信号および TLAST 信号で定義されたデータ転送。これらのイベントはそれぞれ個別に監視され、ソフトウェア イベントで使用されたのと同じグローバル タイマーからのタイムスタンプが付けられます。ハードウェア関数で次のプラグマを使用して明示的に AXI4-Lite 制御インターフェイスが宣言されている場合は、ap_start および ap_done 信号は IP インターフェイスの一部ではないので、トレースできません。#pragma HLS interface s_axilite port=foo

これらのデバッグ コアでハードウェア リソースがいくらか使用されますが、ZC706 ボードでは 0.1% 未満です。AXI4-Stream モニター コアには、basic と statistics の 2 つのモードがあります。basic モードでは、開始/停止トレース イベントの生成のみが実行されます。statistics モードでは、AXI4-Lite インターフェイスが 2 つの 32 ビット レジスタに対して有効になります。オフセット 0x0 のレジスタには現在または今後の転送のワード カウントが、オフセット0x4 のレジスタには前の転送のワード カウントが示されます。転送が完了するとすぐに、現在のカウントが前のレジスタに移動されます。デフォルトでは、AXI4-Stream コアは basic モードに設定されます。ハードウェア トレース モニター コアに加え、出力トレース イベント信号が 1 つのインテグレーション コアによりまとめられます。このコアでは、ポート数を 1 ~ 63 に設定できるので、最大で 63 個のモニター コア (アクセラレータまたは AXI4-Stream) がサポートされます。このコアのリソース使用率は、イネーブルになったポートの数、つまり挿入されるモニター コアの数によります。ZC706 プラットフォームでは、使用可能なハードウェア リソースの約 0.1 ~ 1.0% が使用され、インテグレーションロジックを含めて約 10% までのメモリが使用されます。

インプリメンテーション フローインプリメンテーション フロー中にトレースがオンになっていると、トレース インストルメンテーションがソフトウェア コードに、ハードウェア モニターがハードウェア システムに自動的に挿入されます。この後、ハードウェア システムが (モニター コアも含めて) 合成およびインプリメントされ、ビットストリームが生成されます。ソフトウェアトレースは、通常のユーザー プログラムにコンパイルされます。ハードウェアおよびソフトウェア トレースはハードウェアでタイムスタンプが付けられて 1 つのトレース ストリームにまとめられ、プログラマブル ロジックのバッファーに格納されます。

第 2 章: SDSoC のデバッグ機能

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 40

Page 41: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

第 3 章

デバッグ手法この章では、SDSoC™ 環境デザインで使用可能な異なるデバッグ手法について説明します。ソフトウェア ベースのデバッグおよびハードウェア重視の異なる手法を示します。ソフトウェア ベースの方法では、FPGA でのデザインのインプリメンテーションを完全に理解する必要はありません。ただし、この概念が適用できるのはあるレベルの詳細度までで、それ以上はハードウェア ベースの詳細な解析を実行する必要があります。ソフトウェアのみのデバッグ手法を強調することは、この資料の意図ではありません。SDSoC アプリケーションのデバッグでは、標準 C/C++ をデバッグするのと同じ手法を使用できます。ほとんどのSDSoC アプリケーションには、ハードウェア アクセラレーション用にマークされた関数と、それを含む標準 C/C++コードが含まれます。デバッグ ホスト マシンに接続されたボードを使用して SDSoC アプリケーションをデバッグするには、[Assistant] ビューでビルド コンフィギュレーションを右クリックし、[Debug] → [Launch on Hardware] をクリックしてデバッグ セッションを開始します。オプションをデフォルト設定から変更する場合は、[Debug] → [Debug Configurations] をクリックして新しいビルド コンフィギュレーションを作成します。デバッグ環境は初期化されるので、ザイリンクスでは [Debug] パースペクティブに切り替えることをお勧めします。[Debug] パースペクティブには、コードのシングル ステップ、ブレークポイントの設定と削除、変数の表示、レジスタのダンプ、メモリの表示、run until および jump to などのデバッグ指示子を使用したコード フローの制御など、アプリケーションの標準 C/C++ 部分をデバッグする機能が含まれます。関数呼び出しの前後に入力および出力を監視でき、動作が正しいかを判断できます。ハードウェア アクセラレーションされたアプリケーションがリアルタイムの要件を満たすかどうかを判断するには、ハードウェア アクセラレーションされた関数の直前および直後にカウンターを開始および停止するデバッグ文を記述します。SDx™ 環境には、通常ハードウェア アクセラレーションされた関数の経過時間を計算するのに使用されるsds_clock_counter() 関数が含まれています。プロジェクトをエミュレーション用に SDx ビルドすると、デバッグ ホストに接続されたターゲット ボードがなくてもデバッグを実行できます。エミュレーション中は、前述のように [Debug] パースペクティブでソフトウェアおよびデータを制御および確認できますが、Vivado® シミュレータの波形ビューアーを使用してもハードウェア アクセラレーションされた関数を表示できます。アクセラレータの信号で Accelerator start、Accelerator done などの条件を確認したり、入力および出力のデータ バスを監視したりできます。プロジェクトをエミュレーション用にビルドすると、FPGA ビットストリームを生成するための時間のかかる Vivado インプリメンテーション段階を回避することもできます。SDx IDE でインタラクティブなデバッガーを使用する方法については、『SDSoC 環境デバッグ ガイド』 (UG1282) を参照してください。

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 41

Page 42: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

システムのハングとランタイム エラーのデバッグsds++ を使用してコンパイルされたプログラムは、SDSoC 環境または Vivado SDK 環境で提供される標準デバッガーを使用してデバッグできます。間違った結果、プログラムの早期終了、プログラムのハングなどが典型的なランタイム エラーとして挙げられます。最初の 2 つのエラーは、デバッガーでコードをステップ スルーすることによりデバッグできます。注記: アプリケーションがボードでの実行中にハングすることがあります。アプリケーションのハングは通常、プロデューサーとコンシューマーのデータ サイズが一致していないことが原因で発生します。プログラムのハングは、#pragma SDS data access_pattern(A:SEQUENTIAL) を使用して作成したストリーミング接続を介して転送するデータ量の間違った指定、Vivado 高位合成 (HLS) ツールにおける合成可能な関数へのストリーミング インターフェイスの指定、またはストリーミング ハードウェア インターフェイスを含むビルド済みライブラリの C 呼び出し可能なハードウェア関数が原因で発生するランタイム エラーです。プログラムは、ストリームのコンシューマーがプロデューサーから送信されるデータを待機しているときに、プロデューサーがデータの送信を停止するとハングします。ハードウェア関数からのストリーミング入力および出力となる次のようなコードがあるとします。#pragma SDS data access_pattern(in_a:SEQENTIAL, out_b:SEQUENTIAL)void f1(int in_a[20], int out_b[20]); // declarationvoid f1(int in_a[20], int out_b[20]) { // definition int i; for (i=0; i < 19; i++) { out_b[i] = in_a[i]; }}

In_a[] には 20 個の要素がありますが、ループでは 19 個しか読み出されません。f1 への呼び出しは、f1 が最後の要素を消費するまで無期限に待機することになるので、ハングしているように見えます。プログラムのハングの原因となるプログラム エラーは、システム エミュレーションを使用して関連するプロトコル信号 TREADY、TLAST、ap_ready、ap_done などを監視し、データ信号がスタティックであるかどうかを確認すると検出できます。または、非順次アクセスや関数内の間違ったアクセス カウントなどのストリーミング アクセス エラーがフラグされるようコードをインストルメント化してもプログラムのハングの原因となるプログラム エラーを検出できます。ストリーミング アクセスの問題は、通常ログ ファイルに警告 (improper streaming access) として示され、これらが実際にエラーであるかをユーザーが確認できます。SDSoC エミュレーターでアプリケーションを実行することは、デバッガーを使用してデータ転送を可視化するのに良い方法です。システムがソフトウェアのどこでハングしているか (ほとんどの場合 cf_wait() 呼び出し内) がわかるので、シミュレーション波形ビューで関連するデータ転送を、関連するハードウェア ブロックの信号を表示することにより調べることができます。

システム ハングのデバッグ例別の例として、ハードウェア関数からのストリーミング入力および出力となる次のようなコードがあるとします。#pragma SDS data access_pattern(in:SEQUENTIAL, out:SEQUENTIAL)#pragma SDS data copy(in[0:large], out[0:small])void too_large_copy(int* in, int* out, int small, int large){ for(int i = 0; i < small; i++) {out[i] = in[i];}}

int main(){

第 3 章: デバッグ手法

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 42

Page 43: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

int* temp_var1 = new int[1024 * 1024]; int* temp_var2 = new int[1024 * 1024]; too_large_copy(temp_var1, temp_var2, 1024, 1024 * 1024); //hangs because the input DMA continues to try to feed data to a halted HLS core}

この場合、ダイレクト メモリ アクセス (DMA) はデータを継続してハードウェア関数に送信しようとしますが、ハードウェア関数は既に終了しており、データを受信しません。これにより、システムがハングします。1. このような問題をデバッグするには、ベース プラットフォーム上にエミュレーション用のコードをビルドしま

す。アプリケーションをコンパイルしたら、[Xilinx] → [Start/Stop Emulator] をクリックしてエミュレーターを起動します。または、次の図に示すように [Assistant] ビューからエミュレーターを起動することもできます。アプリケーションのアクティブなビルド コンフィギュレーションを右クリックし、[Start/Stop Emulator] をクリックします。

2. [Emulation] ダイアログ ボックスで、[Show Waveform (Programmable Logic only)] チェック ボックスをオンにします。これにより Vivado シミュレータが起動し、異なるインターフェイスのステートが波形ウィンドウに表示されます。ハードウェア関数のインターフェイスを監視するには、関数を右クリックして [Add to Wave window] をクリックします。これにより選択した関数のすべての I/O ポートが波形ウィンドウに追加されます。

3. シミュレータを開始するには、ツールバーの [Run All] をクリックします。4. SDx 統合設計環境 (IDE) に戻り、デバッガーでアプリケーションを起動します。これには、デバッグするアプリ

ケーションを選択して右クリックし、[Launch on Emulator (SDx Application Debugger)] をクリックします。

[Confirm Perspective Switch] ダイアログ ボックスで [Yes] をクリックします。[Debug] パースペクティブが開き、ハードウェアでアプリケーションが実行されている状態になります。コードの実行は main プログラム入力で停止します。

5. ツールバーの [Resume] ボタンをクリックしてアプリケーションを実行します。

第 3 章: デバッグ手法

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 43

Page 44: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

アプリケーションが停滞します。つまり、システム ハングが発生します。

6. システム ハングの原因を調べるには、Vivado Design Suite に戻ります。関数の ap_done、ap_start、ap_idle、および ap_ready 信号のステートを確認します。インスタンスでトランザクションが開始すると ap_start 信号が High になり、トランザクションが終了すると ap_done 信号が Low になります。ap_ready およびap_idle 信号は、関数のレディーおよびアイドル状態を示します。

第 3 章: デバッグ手法

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 44

Page 45: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

同じ時点での DMA のステートを解析すると、ハードウェア関数がデータの受信を終了したのに、M00_AXIS_tready および M00_AXIS_tvalid に示されるように、DMA はまだ書き込みを実行しています。

第 3 章: デバッグ手法

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 45

Page 46: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

これでシステム ハングの原因がわかったので、ハードウェア関数のコードに戻って問題を修正します。

システム ハングの原因システムのハングは、ほかにも次のような状況で発生します。1. Ctrl + C キーを押してアプリケーションから抜け出せる場合は、アクセラレータから十分な情報がないことが考え

られます。Arm® プロセッサにアクセラレータが送信しているよりも多くのデータが必要です。プロデューサーからコンシューマーまでに複数のパスがある場合は、レイテンシを確認します。デザインに 2 つのアクセラレータ間のレイテンシが同じ複数のパスがある場合 (A → B ... → Z と直接の A → Z があるなど) は、分岐が均等になるように、デザイン レベルで修正する必要があります。

2. Ctrl + C キーが機能しないがボードに ping または ssh を発行できる場合は、スキャッター ギャザー DMA(SGDMA) 操作に十分なデータがありません。データ ムーバー (copy または zero-copy) とアクセス パターンを確認してください。

3. ボードに ping を発行できず、ハード ロックアップ状態で電源を切って入れ直さないとその状態を抜け出せない場合は、次のものの間のデータ転送が問題であるのが一般的です。a. SDSoC 環境デザインとプラットフォーム上の IP。ChipScope を使用して peeking および poking レジスタを

デバッグします (ChipScope を使用した SDSoC でのハードウェア デバッグ および IP レジスタの監視および変更 を参照)。

第 3 章: デバッグ手法

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 46

Page 47: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

b. SDSoC 環境デザインと C 呼び出し可能な IP ライブラリ。ChipScope を使用して peeking および poking レジスタをデバッグします (ChipScope を使用した SDSoC でのハードウェア デバッグ および IP レジスタの監視および変更 を参照)。

c. SDSoC フローで生成された RTL またはソフトウェア ドライバー。Vivado Design Suite または C ドライバーの使用に慣れている場合は、デバッグできると思われますザイリンクスが、そうでない場合はザイリンクスフォーラムを活用してください。

ランタイム エラーの原因次に、ランタイム エラーのその他の原因を示します。• wait() 文を不適切に配置すると、次の問題が発生することがあります。

○ ハードウェア アクセラレータで正しい値が書き込まれる前にソフトウェアが無効なデータを読み出す。○ 関連するアクセラレータよりも前にブロッキング wait() が呼び出されて、システムがハングする。

• メモリに一貫性を持たせる SDS data mem_attribute プラグマの使用に一貫性がないと、結果が正しくなくなることがある。

予期しないデータ値アプリケーションの実行中、予期しないデータが受信されることがあります。ハードウェア関数で予測されるデータが返されないか、予測されるデータが間違った時間に返されている可能性があります。この問題の原因は、ハードウェアまたはソフトウェアの問題のどちらである可能性もあります。ハードウェアが原因であると考えられる場合は、必要に応じて ChipScope を使用してボードへのデータ入力を確認します。ソフトウェアが原因であると考えられる場合は、次の手順を実行します。1. ソフトウェア デバッグに戻ってソフトウェアに問題がないことを確認します。2. ソフトウェア デバッグで問題がない場合は、コードを目で確認します。予期しないデータが受信される場合、

#SDS data または #SDS zero copy プラグマの使用が一般的な原因です。3. #SDS data プラグマを使用している場合は、ユーザーが書き込む内容がツールで信頼されるので、コードのデ

ータ アクセス パターンがプラグマで指定されているデータ アクセス パターンに一致していることを確認します。

4. #SDS zero copy のサイズが適切でない (通常は大きすぎる) と、キャッシュから無効なデータが読み出されることがあります。これはハードウェアで検出されます。ソフトウェアにはキャッシュ コントローラーがないので、エミュレーションでは通常検出されません。

IP レジスタの監視および変更ザイリンクス システム デバッガー ツール (XSDB) は、プラットフォームに含まれる IP ブロックやさまざまな C 呼び出し可能な IP を理解するのに便利なツールです。ザイリンクス ソフトウェア コマンド ライン ツール (XCST) のコンソールから、統合デザインのさまざまな IP ブロック内のレジスタを読み出しおよび書き込みできます。レジスタを読み出すには、メモリ読み出しコマンド mrd を使用します。デザインの IP の書き込み可能なレジスタに書き込むには、XSCT コンソールで mwr コマンドを使用します。コマンドのヘルプを表示するには、「<command> -help」と入力します。

第 3 章: デバッグ手法

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 47

Page 48: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

デザインの IP ブロックのレジスタに対して読み出しおよび書き込みを実行するには、レジスタのメモリ マップを理解しておく必要があります。この情報は、Vivado プロジェクトを開いて [Address Editor] ウィンドウを確認します。Vivado プロジェクトは、<project_name>/<Debug or Release>/_sds/p0/vivado/prj/prj.xpr にあります。prj.xpr をダブルクリックすると Vivado でプロジェクトが開きます。Vivado IDE で、Flow Navigator の [IPIntegrator] → [Open Block Design] をクリックします。[Address Editor] ウィンドウをクリックしてメモリ マップ情報を表示します。

XSDB の詳細は、SDK ヘルプ (UG782) を参照してください。注意: マップされていないアドレスにアクセスしようとすると、バス エラーが発生します。アドレスがマップされていても適切な補足がない場合は、システムがハングします。

イベント トレースこのセクションでは、トレースの収集方法と SDSoC 環境での表示方法について説明します。

ランタイム トレースの収集ソフトウェア トレースは、ハードウェア トレースと同じストレージ パスに挿入され、タイムスタンプにはハードウェア トレースと同じタイマー/カウンターが使用されます。この 1 つのトレース データ ストリームはハードウェア システム内のバッファーに格納され、ホスト PC から JTAG を介してアクセスされます。SDSoC 環境では、トレースはプログラムの実行中継続して読み出され、ハードウェア バッファーをできるだけすぐに空にしてバッファーがオーバーフローしないようにします。ただし、トレース データはアプリケーションが終了したときにのみ表示されます。トレース データは、ハードウェア上で実行中にリアルタイムで収集されます。ハードウェアへの接続については、ハードウェアへの接続を参照してください。

第 3 章: デバッグ手法

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 48

Page 49: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

トレースの可視化SDSoC 環境には、ハードウェアおよびソフトウェア トレース ストリームがグラフィカルに表示されます。ユーザーアプリケーションの各トレース ポイントに固有の名前が指定され、タイムラインの軸が示されます。コードの同じブロックがループで実行されたり、アクセラレータが複数回起動される場合など、アプリケーションの実行中にトレース ポイントは通常複数のトレース イベントを作成できます。

図 12: さまざまなイベント タイプを示すトレースのタイムライン表示例

X22041-112718

トレース イベントには、名前、タイプ、開始時間、終了時間、期間などの属性があります。このデータは、カーソルをビュー内のイベントの 1 つの上に置くとツール ヒントとして表示されます。

図 13: 各イベントの詳細な情報を示すトレースのタイムライン表示例

X22041-112718

第 3 章: デバッグ手法

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 49

Page 50: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

図 14: イベント名とユーザー プログラムとの関係を示すトレースのタイムライン表示例

X22040-112718

トラブルシューティングこのセクションでは、イベントのトレース時に発生するさまざまな状況をトラブルシューティングするのに役立つ一般情報を示します。• インクリメンタル ビルド フロー: SDSoC 環境ではトレース機能を使用したインクリメンタル ビルド フローはサポ

ートされていません。アプリケーションが正しくビルドされ、トレースが正しく収集されるようにするには、まずプロジェクトをクリーンアップして、ソース コードを変更した後ビルドします。ソース コードの変更がハードウェア用にマークされた関数には関係ない場合や影響のない場合でも、正しい結果にならないことがあります。

• プログラムおよびビットストリーム: トレース機能は、1 回完結型の解析です。イベントのタイムスタンプに使用されたタイマーは、最初のイベントが発生するまで開始せず、その後恒久的に実行されます。ビットストリームをプログラムした後にソフトウェア アプリケーションを 1 回実行すると、プログラムの実行が終了した後にタイマーが不明な状態になります。ソフトウェアを 2 回目に実行すると、イベントのタイムスタンプが間違ったものになります。まずビットストリームをプログラムしてから、アプリケーションを実行するたびにソフトウェア アプリケーションをダウンロードして、トレース機能を利用できるようにしてください。アプリケーションは 2 回目も正しく実行はされますが、トレース データは正しくありません。Linux では、ビットストリームが U-Boot によるブート時に読み込まれるので、再起動する必要があります。

• トレースのバッファリング: SDSoC 環境では、アプリケーションの実行中にトレースがバッファーに格納され、リアルタイムで読み出されますが (デバイス上で作成されるよりは低速)、アプリケーションが終了するまでは表示されません。そのため、ホスト PC でトレースを読み出すことができるようになるまでトレースを格納するのに十分なバッファー容量が必要です。デフォルトでは、1024 個のトレースを保存するのに十分なバッファー容量があります。バッファーがフルになると、その後生成されるトレースは破棄されて失われます。バッファーがオーバーフローする場合のエラー条件が設定されています。バッファーのオーバーフロー後に作成されたトレースは収集されず、オーバーフロー直前のトレースの表示されることがあります。

• エラー: SDSoC 環境では、トレースがハードウェアのバッファーに格納されてから、ホスト PC から JTAG を介して読み出されます。トレースが消費されるよりも速く生成される場合は、バッファー オーバーフロー イベントが発生する可能性があります。トレース構造によりこれが認識され、エラー フラグが設定されて、ホスト PC での収集中に検出されます。トレース データの収集中にエラー フラグが検出されると、収集が停止し、正しく読み出されたトレース データが表示用に準備されますが、バッファー オーバーフローが発生する直前に正しく読み出されたデータが、正しく表示されないことがあります。

第 3 章: デバッグ手法

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 50

Page 51: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

オーバーフローが発生すると、<build_config>/_sds/trace ディレクトリにarchive_DAY_MON_DD_HH_MM_SS_-GMT_YEAR_ERROR という名前のエラー ファイルが作成されます。アプリケーションを実行してトレース データを再収集する前に、デバイスをプログラムし直す (Linux を再起動するなど) 必要があります。デザインのトレース ハードウェアをリセットするには、プログラムし直すしかありません。

ソフトウェア/ハードウェアのクロスプローブのデバッグSDx 環境アプリケーションを作成し、関数をハードウェア アクセラレーション用にマークしたら、適切な設定でデザインをビルドし、ターゲット ボードに接続する必要があります (ハードウェアへの接続 を参照)。

デバッグ コンフィギュレーションの設定1. [Project Explorer] ビューで Debug フォルダーの ELF (.elf) ファイルを選択します。2. ツールバーで [Debug] をクリックするか、[Debug] のプルダウン リストから [Debug As] → [Launch on Hardware

(SDx Application Debugger)] をクリックします。3. または、プロジェクトを右クリックし、[Debug As] → [Launch on Hardware (SDx Application Debugger)] をクリッ

クします。[Confirm Perspective Switch] ダイアログ ボックスが表示されます。4. プロジェクトをデバッグする前にボードのスイッチがオンになっていることを確認します。[Yes] をクリックし

て [Debug] パースペクティブに切り替えます。これで、SDx IDE が [Debug] パースペクティブになりました。注記: デバッガーによりシステムがリセットされ、デバイスがプログラムおよび初期化され、main 関数で停止します。ソース コードが中央のパネルに表示され、ローカル変数は右上のパネルに表示されます。右下の SDx 環境ログには、デバッグ コンフィギュレーション ログが表示されます。

アプリケーションを実行する前に、シリアル ターミナルをボードに接続して、プログラムからの出力が表示されるようにします。たとえば、次の設定を使用できます。• [Connection Type]: Serial

• [Port]: COM<n>

• [Baud Rate]: 115200

アプリケーションの実行[Resume] をクリックしてアプリケーションを実行し、出力をターミナル ウィンドウで確認します。ソース コード ウィンドウに _exit 関数が表示され、[Terminal] タブにアプリケーションからの出力が表示されます。

第 3 章: デバッグ手法

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 51

Page 52: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

図 15: [Debug] パースペクティブ

コードの実行が main 関数で停止します。コードの特定の位置にブレークポイントを追加して、その位置でコードの実行を停止できます。コードの行番号の横にある青色のバーをダブルクリックすると、ブレークポイントのイネーブル/ディスエーブルを切り替えることができます。コードの実行を再開するには、ツールバーの [Resume] ボタンをクリックします。

パフォーマンスのデバッグに関するヒントSDSoC 環境では、次の関数を使用して基本的なパフォーマンス監視機能が提供されています。• sds_clock_counter(): アクセラレーションされるコードとされないコードなど、コード セクション間の実行

時間の差を調べるのに使用します。• sds_clock_frequency(): 1 秒ごとの CPU サイクル数を返します。Vivado Design Suite 高位合成 (HLS) ツールのレポート ファイル (_sds/vhls/…/*.rpt または IDE の [Reports] →[HLS Report]) のレイテンシ値を見ると、実際のハードウェア アクセラレーション時間を見積もることができます。アクセラレータ クロック サイクルのレイテンシは、X * (processor_clock_freq/accelerator_clock_freq)processor clock cycles と等しくなります。実際の関数呼び出しにかかる時間とこの時間を比較すると、設定およびデータ転送のオーバーヘッドがわかります。パフォーマンスを最大限に向上するには、アクセラレーションされる関数の実行に必要な時間が元のソフトウェア関数の実行に必要な時間よりも大幅に短縮されることが必要です。そうならない場合は、sds++ コマンドラインで別のclkid を選択して、アクセラレータをより高速の周波数で実行してみてください。この方法で改善が見られない場合は、データ転送のオーバーヘッドがアクセラレーションされる関数の実行時間に影響していないかを確認し、このオーバーヘッドを減らす必要があります。デフォルトの clkid はすべてのプラットフォームで 100 MHz です。特定のプラットフォームの clkid 値の詳細は、-sds-pf-info <path>/<platform_name> を実行すると取得できます。データ転送のオーバーヘッドが大きい場合は、次を変更すると改善される可能性があります。

第 3 章: デバッグ手法

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 52

Page 53: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

• 計算時間が増加するようにアクセラレーションされる関数に移動するコードを増やし、計算時間とデータ転送にかかる時間の比率を向上させます。

• コードを変更するかプラグマを使用して必要なデータのみを転送するようにし、転送するデータ量を減らします。• 無関係のランダム アクセスを連続して実行するよりも、バースト転送の方が効率的なので、アクセラレータ コー

ドの視点からアクセス パターンを順次化します。• データ転送に転送されるデータのキャッシュ可能性に適したシステム ポートが使用されるようにします。キャッ

シュ フラッシュにはリソースが多く使用されるので、コヒーレント データにアクセスするのにコヒーレント ポート、非コヒーレント ポートにアクセスするのに非コヒーレント ポートを使用すると、結果が大きく改善します。可能であれば、malloc の代わりに、sds_alloc() を使用します。sds_alloc() によるメモリは物理的に隣接しており、コンフィギュレーションが高速で物理的に隣接したメモリを必要とするデータ ムーバーを使用できるようになります。また、malloc() データによるデータ転送に必要な仮想ページをピン留めにもかなりのコストがかかります。

コンパイル時およびリンク時のエラーのトラブルシューティング通常、コンパイル/リンク時のエラーは、make を実行したときにエラー メッセージとして示されます。さらに解析するには、SDSoC 環境で作成されたビルド ディレクトリの _sds/reports サブディレクトリからログ ファイルと rptファイルを確認します。最後に生成されたログ ファイルには、該当する入力ファイルの構文エラーや、アクセラレータ ハードウェアまたはデータ モーション ネットワークの合成中にツールチェーンで生成されたエラーなど、エラーの原因が示されます。次に、SDSoC 環境に特定のエラーを解決するためのヒントおよびストラテジを示します。

SDSoC 開発チェーンのツールでレポートされたツール エラー次のトラブルシューティング手順を実行してみます。• 該当するコードが『SDSoC 環境プログラマ ガイド』 (UG1278) のコード ガイドラインに従っているかどうかを確

認します。• プラグマの構文を確認します。詳細は、『SDx プラグマ リファレンス ガイド』 (UG1253) を参照してください。• プラグマにスペルミスがないかどうか確認します。これが原因で正しく適用されていない可能性があります。Vivado Design Suite 高位合成 (HLS) でタイミング要件を満たすことができない次のトラブルシューティング手順を実行してみます。• SDSoC IDE (または sdscc/sds++ コマンド ライン パラメーター) でアクセラレータに対して低速のクロック周波

数を選択します。• HLS で高速のインプリメンテーションを生成できるようにコード構造を変更します。詳細は、『SDSoC 環境プロフ

ァイリングおよび最適化ガイド』 (UG1235) の「ハードウェア関数の並列処理の向上」を参照してください。Vivado ツールでタイミングを満たすことができない次のトラブルシューティング手順を実行してみます。

第 3 章: デバッグ手法

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 53

Page 54: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

• SDSoC IDE でデータ モーション ネットワークまたはアクセラレータ (あるいはその両方) に対してより低速のクロック周波数を選択します (コマンド ラインからの場合は sdscc/sds++ コマンド ライン パラメーターを使用)。

• -xp オプションを使用して Vivado インプリメンテーション ストラテジを適用し、結果を向上します。次に例を示します。-impl-strategy Performance_Explore

• ユーザーが HLS ブロックをより高速なクロック周波数に合成して合成/インプリメンテーション ツールに余裕を持たせられるようにする例/リソースを提供ます。

• HLS に渡される C/C++ コードを変更するか、HLS 指示子を追加して、HLS ブロックが高速になるようにします。• リソース使用率が 80% を超えている場合に、デザインのサイズを削減します。_sds フォルダーの Vivado ツール

レポートを参照してください。デザインが大きすぎてフィットしない次のトラブルシューティング手順を実行してみます。• アクセラレーションする関数の数を減らします。• アクセラレータ関数のコーディング スタイルを、よりコンパクトなアクセラレータが生成されるように変更しま

す。並列処理の量を減らすには、『SDSoC 環境プロファイリングおよび最適化ガイド』 (UG1235) の「ハードウェア関数の並列処理の向上」を参照してください。

• アクセラレータの複数のインスタンスが作成される原因となっているプラグマとコーディング スタイル (パイプライン処理) を変更します。

• プラグマを使用して AXIDMA_SG の代わりに AXIFIFO のようなより小型のデータ ムーバーを選択します。• 入力および出力パラメーター/引数の数が少なくなるようハードウェア関数を記述し直します (特に、入力/出力が

データ ムーバー ハードウェアを共有できない連続ストリーム (シーケンシャル アクセス配列引数) タイプの場合)。

パフォーマンス問題のトラブルシューティングSDSoC 環境では、sds_clock_counter() 関数により基本的なパフォーマンス監視機能が提供されています。この関数を使用すると、アクセラレーションされるコードとされないコードなど、コード セクション間における実行時間の差異を調べることができます。実際のハードウェア アクセラレーション時間を見積もるには、Vivado HLS レポートのレイテンシ値、アクセラレータのクロック周波数、および Arm CPU のクロック周波数が必要です。レイテンシ値を確認するために Vivado HLS レポートを開くには、[Assistant] ビューで [<Project Name>] → [<Build Configuration>] → [<Accelerator Name>] → [HLSreport] をクリックします。アクセラレータのクロック周波数を確認するには、[Project Settings] の [HardwareFunctions] セクションを見ます。[Project Settings] の [Platform] リンクをクリックし、[Platform Summary] ダイアログボックスを開きます。CPU の周波数は [Clock Frequencies] の下に表示されます。X アクセラレータ クロック サイクルのレイテンシは、X * (<プロセッサのクロック周波数>/<アクセラレータのクロック周波数>) プロセッサ クロック サイクルです。実際の関数呼び出しにかかる時間とこの時間を比較すると、データ転送のオーバーヘッドを確認できます。パフォーマンスを最大限に向上するには、アクセラレーションされる関数の実行に必要な時間が元のソフトウェア関数の実行に必要な時間よりも大幅に短縮されることが必要です。そうならない場合は、sdscc/sds++ コマンドラインで別の clkid を選択して、アクセラレータをより高速の周波数で実行してみてください。この方法で改善が見られない場合は、データ転送のオーバーヘッドがアクセラレーションされる関数の実行時間に影響していないかを確認し、このオーバーヘッドを減らす必要があります。

第 3 章: デバッグ手法

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 54

Page 55: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

注記: 特定のプラットフォームの clkid 値の詳細は、次のコマンドを実行すると取得できます。sds++ -sds-pf-info

データ転送のオーバーヘッドが大きい場合は、次を変更すると改善される可能性があります。• 計算時間が増加するようにアクセラレーションされる関数に移動するコードを増やし、計算時間とデータ転送に

かかる時間の比率を向上させます。• コードを変更するかプラグマを使用して必要なデータのみを転送するようにし、転送するデータ量を減らします。

第 3 章: デバッグ手法

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 55

Page 56: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

付録 A

SDSoC 環境でのトラブルシューティングSDSoC™ 環境を使用する際に発生する一般的な問題は、次のとおりです。• コンパイル/リンク時のエラーは、ソフトウェア コンパイラで検出される典型的なソフトウェア構文エラー、また

はデザインがターゲット プラットフォームには大きすぎるなどの SDSoC 環境フロー特有のエラーが原因で発生します。

• ランタイム エラーは、ヌル ポインター アクセスなどの一般的なソフトウェアの問題、またはアクセラレータとの誤データ転送などの SDSoC 環境特有の問題が原因で発生します。

• アクセラレーションに使用したアルゴリズムの選択、アクセラレータとのデータの送受信にかかる時間、およびアクセラレータとデータ モーション ネットワークの実動作速度などが原因で、パフォーマンスの問題が発生する可能性があります。

• プログラムの動作の問題の原因は、アルゴリズムの目的をインプリメントできないコードの論理的なエラーである可能性があります。

付録 A: SDSoC 環境でのトラブルシューティング

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 56

Page 57: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

付録 B

その他のリソースおよび法的通知

Documentation Navigator およびデザイン ハブザイリンクス Documentation Navigator (DocNav) では、ザイリンクスの資料、ビデオ、サポート リソースにアクセスでき、特定の情報を取得するためにフィルター機能や検索機能を利用できます。DocNav を開くには、次のいずれかを実行します。• Vivado® IDE で [Help] → [Documentation and Tutorials] をクリックします。• Windows で [スタート] → [すべてのプログラム] → [Xilinx Design Tools] → [DocNav] をクリックします。• Linux コマンド プロンプトに「docnav」と入力します。ザイリンクス デザイン ハブには、資料やビデオへのリンクがデザイン タスクおよびトピックごとにまとめられており、これらを参照することでキー コンセプトを学び、よくある質問 (FAQ) を参考に問題を解決できます。デザイン ハブにアクセスするには、次のいずれかを実行します。• DocNav で [Design Hub View] タブをクリックします。• ザイリンクス ウェブサイトで デザイン ハブ ページを参照します。注記: DocNav の詳細は、ザイリンクス ウェブサイトの Documentation Navigator ページを参照してください。注意: DocNav からは、日本語版は参照できません。ウェブサイトのデザイン ハブ ページをご利用ください。

参考資料このガイドの補足情報は、次の資料を参照してください。日本語版のバージョンは、英語版より古い場合があります。1. 『SDSoC 環境リリース ノート、インストール、およびライセンス ガイド』 (UG1294)

2. 『SDSoC 環境ユーザー ガイド』 (UG1027)

3. 『SDSoC 環境チュートリアル: 概要』 (UG1028: 英語版、日本語版)

4. 『SDSoC 環境チュートリアル: プラットフォームの作成』 (UG1236: 英語版、日本語版)

5. 『SDSoC 環境プラットフォーム開発ガイド』 (UG1146)

6. 『SDSoC 環境プロファイリングおよび最適化ガイド』 (UG1235)

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 57

Page 58: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

7. 『SDx コマンドおよびユーティリティ リファレンス ガイド』 (UG1279)

8. 『SDSoC 環境プログラマ ガイド』 (UG1278)

9. 『SDSoC 環境デバッグ ガイド』 (UG1282)

10. 『SDx プラグマ リファレンス ガイド』 (UG1253)

11. 『UltraFast エンベデッド デザイン設計手法ガイド』 (UG1046: 英語版、日本語版)

12. 『Zynq-7000 SoC ソフトウェア開発者向けガイド』 (UG821: 英語版、日本語版)

13. 『Zynq UltraScale+ MPSoC: ソフトウェア開発者向けガイド』 (UG1137: 英語版、日本語版)

14. 『Zynq-7000 XC7Z020 SoC 用 ZC702 評価ボード ユーザー ガイド』 (UG850)

15. 『ZCU102 評価ボード ユーザー ガイド』 (UG1182)

16. 『PetaLinux ツール資料: リファレンス ガイド』 (UG1144)

17. 『Vivado Design Suite ユーザー ガイド: 高位合成』 (UG902)

18. 『Vivado Design Suite ユーザー ガイド: カスタム IP の作成とパッケージ』 (UG1118)

19. SDSoC 開発環境ウェブ ページ20. Vivado® Design Suite 資料

トレーニング リソース1. トレーニング コース: SDSoC 開発環境および設計手法2. トレーニング コース: アドバンス SDSoC 開発環境および設計手法

お読みください: 重要な法的通知本通知に基づいて貴殿または貴社 (本通知の被通知者が個人の場合には「貴殿」、法人その他の団体の場合には「貴社」。以下同じ) に開示される情報 (以下「本情報」といいます) は、ザイリンクスの製品を選択および使用することのためにのみ提供されます。適用される法律が許容する最大限の範囲で、(1) 本情報は「現状有姿」、およびすべて受領者の責任で (with all faults) という状態で提供され、ザイリンクスは、本通知をもって、明示、黙示、法定を問わず (商品性、非侵害、特定目的適合性の保証を含みますがこれらに限られません)、すべての保証および条件を負わない (否認する)ものとします。また、(2) ザイリンクスは、本情報 (貴殿または貴社による本情報の使用を含む) に関係し、起因し、関連する、いかなる種類・性質の損失または損害についても、責任を負わない (契約上、不法行為上 (過失の場合を含む)、その他のいかなる責任の法理によるかを問わない) ものとし、当該損失または損害には、直接、間接、特別、付随的、結果的な損失または損害 (第三者が起こした行為の結果被った、データ、利益、業務上の信用の損失、その他あらゆる種類の損失や損害を含みます) が含まれるものとし、それは、たとえ当該損害や損失が合理的に予見可能であったり、ザイリンクスがそれらの可能性について助言を受けていた場合であったとしても同様です。ザイリンクスは、本情報に含まれるいかなる誤りも訂正する義務を負わず、本情報または製品仕様のアップデートを貴殿または貴社に知らせる義務も負いません。事前の書面による同意のない限り、貴殿または貴社は本情報を再生産、変更、頒布、または公に展示してはなりません。一定の製品は、ザイリンクスの限定的保証の諸条件に従うこととなるので、https://japan.xilinx.com/legal.htm#tos で見られるザイリンクスの販売条件を参照してください。IP コアは、ザイリンクスが貴

付録 B: その他のリソースおよび法的通知

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 58

Page 59: SDSoC 環境デバッグ ガイド · トストリームを含む完全なハードウェア システムを生成します。すべてのハードウェア関数呼び出しで元の動作が保

殿または貴社に付与したライセンスに含まれる保証と補助的条件に従うことになります。ザイリンクスの製品は、フェイルセーフとして、または、フェイルセーフの動作を要求するアプリケーションに使用するために、設計されたり意図されたりしていません。そのような重大なアプリケーションにザイリンクスの製品を使用する場合のリスクと責任は、貴殿または貴社が単独で負うものです。https://japan.xilinx.com/legal.htm#tos で見られるザイリンクスの販売条件を参照してください。

自動車用のアプリケーションの免責条項オートモーティブ製品 (製品番号に「XA」が含まれる) は、ISO 26262 自動車用機能安全規格に従った安全コンセプトまたは余剰性の機能 (「セーフティ設計」) がない限り、エアバッグの展開における使用または車両の制御に影響するアプリケーション (「セーフティ アプリケーション」) における使用は保証されていません。顧客は、製品を組み込むすべてのシステムについて、その使用前または提供前に安全を目的として十分なテストを行うものとします。セーフティ設計なしにセーフティ アプリケーションで製品を使用するリスクはすべて顧客が負い、製品の責任の制限を規定する適用法令および規則にのみ従うものとします。

著作権情報© Copyright 2018-2019 Xilinx, Inc. Xilinx、Xilinx のロゴ、Alveo、Artix、ISE、Kintex、Spartan、Versal、Virtex、Vivado、Zynq、およびこの文書に含まれるその他の指定されたブランドは、米国およびその他各国のザイリンクス社の商標です。OpenCL および OpenCL のロゴは Apple Inc. の商標であり、Khronos による許可を受けて使用されています。 HDMI、HDMI のロゴ、および High-Definition Multimedia Interface は、HDMI Licensing LLC の商標です。AMBA、AMBA Designer、Arm、ARM1176JZ-S、CoreSight、Cortex、PrimeCell、Mali、および MPCore は、EU およびその他各国の Arm Limited 社の商標です。 すべてのその他の商標は、それぞれの保有者に帰属します。

この資料に関するフィードバックおよびリンクなどの問題につきましては、[email protected] まで、または各ページの右下にある [フィードバック送信] ボタンをクリックすると表示されるフォームからお知らせください。フィードバックは日本語で入力可能です。いただきましたご意見を参考に早急に対応させていただきます。なお、このメール アドレスへのお問い合わせは受け付けておりません。あらかじめご了承ください。

付録 B: その他のリソースおよび法的通知

UG1282 (v2018.3) 2019 年 1 月 24 日 japan.xilinx.comSDSoC デバッグ ガイド 59