sds++/sdscc コンパイラ コマンド

このセクションでは、SDSoC™sds++ コンパイラのコマンドおよびオプションについて説明します。

注記: sds++/sdscc コンパイラは GCC に基づいており、ここには記載されていませんが、多数の標準 GCC オプションをサポートします。詳細は、GCC オプション インデックスを参照してください。

コンパイラ コマンド

sdscc – SDSoC C compiler
sds++ - SDSoC C++ compiler

コマンドの概要

sdscc/sds++
           [hardware_function_options] [system_options]
           [merge_options] [performance_estimation_options]
           [options_passed_through_to_cross_compiler]
           [-sds-pf platform_name] [-sds-pf-info platform_name]
           [-sds-pf-list] [-sds-sys-config configuration_name]
           [-sds-proc processor_name] [-target-os os_name]
           [-sds-pf-path path] [-sds-image image_name]
           [-sds-clang-filter option_file]
           [-debug-xrf] [-debug-xrf-cc compiler_name]
           [-verbose] [-version] [--help] [files]

ハードウェア関数オプション

[-sds-hw function_name source_file
               [-clkid clock_id_number]
               [-files hls_file_list]
               [-hls-target boolean_value]
               [-hls-target-flags "target_options"]
               [-hls-tcl hls_tcl_directives_file]
               [-shared-aximm]
               -sds-end]*

これらのコマンドの詳細は、ハードウェア関数オプションを参照してください。

パフォーマンス見積もりオプション

[[-perf-funcs function_name_list -perf-root function_name]
               | [-perf-est data_file] [-perf-est-hw-only]]

これらのコマンドの詳細は、SDSCC/SDS++ パフォーマンス見積もりフロー オプションを参照してください。

統合オプション

[-merge input_project_directory [input_project_directory]*
           [-o output_project_directory]
           [-emulation <mode>]
           [-disable-ip-cache]
           [-maxjobs number]
           [-maxthreads number]
           [-mno-bitstream]
           [-mno-boot-files]
           [-remote-ip-cache cache_directory]
           [-xp xpvalue]]

これらのコマンドの詳細は、SDSCC/SDS++ パフォーマンス見積もりフロー オプションを参照してください。

システム オプション

[[-ac function_name:clock_id_number]* [-apm]
           [-bsp-config-file mss_file] [-bsp-config-merge-file mss_file]
           [-debug-port function:argument]
           [-disable-ip-cache] [-dk chipscope:instance:port]
           [-dm-sharing sharing_level]
           [-dmclkid clock_id_number] [-emulation <mode>]
           [-impl-strategy implementation strategy] [-instrument-stub]
           [-maxjobs number] [-maxthreads <1-8>] [-mno-bitstream]
           [-mno-boot-files] [-rebuild-hardware]
           [-remote-ip-cache cache_directory]
           [-sdcard data_directory]
           [-synth-strategy synthesis_strategy]
           [-trace] [-trace-no-sw] [-trace-buffer]
           [-vpl-ini ini_file] [-xp xpvalue]]

これらのコマンドの詳細は、システム オプションを参照してください。

sds++ コンパイラは、C/C++ ソース ファイルを Zynq®-7000 SoC または Zynq® UltraScale+™ MPSoC デバイスにインプリメントされたアプリケーション特定のハードウェア/ソフトウェア システム オン チップにコンパイルしてリンクします。

コマンドの使用方法とオプションは、sdsccsds++ で同じです。sds++ で認識されないオプションは、Arm® クロスコンパイラに渡されます。-sds-hw ... -sds-end 節内のコンパイラ オプションは、foo.c に指定したハードウェア関数が含まれない場合、-c foo.c オプションで無視されます。

アプリケーション ELF をリンクする場合、sds++ でハードウェア システムが作成されてインプリメントされます。また、ハードウェア システムを初期化するのに必要な ELF とブート ファイルを含む SD カード イメージが生成され、プログラマブル ロジックがコンフィギュレーションされ、ターゲット オペレーティング システムが実行されます。

Linux 以外のターゲット (スタンドアロン、FreeRTOS など) のアプリケーション ELF ファイルをリンクすると、<install_path>/platforms/<platform_name> フォルダーにあるデフォルトのリンカー スクリプトが使用されます。ユーザー定義のリンカー スクリプトが必要な場合は、–Wl,-T –Wl,<path_to_linker_script> リンカー オプションで指定できます。

ハードウェア アクセラレーション関数が含まれないシステムをビルドする際、sds++ ではターゲット プラットフォームで使用可能なビルド済みハードウェアを使用してビルド時間を短縮できます。

レポートおよびログ ファイルは、_sds/reports フォルダーに含まれます。

共有ライブラリを使用する Linux アプリケーションを実行する場合、ライブラリがそのルート ファイル システムまたは SD カードに含まれていて、ライブラリへのパスが LD_LIBRARY_PATH 環境変数に追加されている必要があります。

システム オプション

sds++ コンパイラは、C/C++ ソース ファイルを Zynq®-7000 SoC または Zynq® UltraScale+™ MPSoC デバイスにインプリメントされたアプリケーション特定のハードウェア/ソフトウェア システム オン チップにコンパイルしてリンクします。

sds++ で認識されないオプションは、Arm® クロスコンパイラに渡されます。-sds-hw ... -sds-end 節内のコンパイラ オプションは、foo.c に指定したハードウェア関数が含まれない場合、-c foo.c オプションで無視されます。

アプリケーション ELF をリンクする場合、sds++ でハードウェア システムが作成されてインプリメントされます。また、ハードウェア システムを初期化するのに必要な ELF とブート ファイルを含む SD カード イメージが生成され、プログラマブル ロジックがコンフィギュレーションされ、ターゲット オペレーティング システムが実行されます。

Linux 以外のターゲット (スタンドアロン、FreeRTOS など) のアプリケーション ELF ファイルをリンクすると、<install_path>/platforms/<platform_name> フォルダーにあるデフォルトのリンカー スクリプトが使用されます。ユーザー定義のリンカー スクリプトが必要な場合は、–Wl,-T –Wl,<path_to_linker_script> リンカー オプションで指定できます。

ハードウェア インプリメンテーションにマークされた関数が含まれないシステムをビルドする際、sds++ ではターゲット プラットフォームで使用可能な場合は、ビルド済みハードウェアが使用されます。

レポートおよびログ ファイルは、_sds/reports フォルダーに含まれます。

共有ライブラリを使用する Linux アプリケーションを実行する場合、ライブラリがそのルート ファイル システムまたは SD カードに含まれていて、ライブラリへのパスが LD_LIBRARY_PATH 環境変数に追加されている必要があります。

Linux ブート後のオプションの PL コンフィギュレーション

sds++sd_card フォルダーにビットストリーム .bin ファイルが作成される場合、Linux がブートした後アプリケーション ELF を実行する前にこのビットストリーム ファイルを使用して PL をコンフィギュレーションできます。使用するエンベデッド Linux コマンドは cat bin_file > /dev/xdevcfg です。

一般的なオプション

次のコマンド ライン オプションは、すべて sds++ コマンドまたは表示情報に使用できます。

表 1. 一般的なオプション
オプション 有効な値 説明
-sds-pf <platform_name> <platform_name> オペレーティング システムとブート ファイルを含むベース システムのハードウェアおよびソフトウェアを定義するターゲット プラットフォームを指定します。<platform_name> は、SDSoC 環境インストールのプラットフォーム名またはプラットフォーム ファイルを含むフォルダーへのファイル パス (パスの最後がプラットフォーム名) です。

プラットフォームでは、オペレーティング システムとブート ファイルを含むベース ハードウェアおよびソフトウェアが定義されます。アクセラレータのソース ファイルをコンパイルするときと ELF ファイルをリンクするときにこのオプションを使用します。使用可能なプラットフォームを表示するには、–sds-pf-list オプションを使用します。

-sds-pf-info <platform_name> <platform_name> プラットフォームの一般的な情報を表示します。使用可能なプラットフォームを表示するには、–sds-pf-list オプションを使用します。表示される情報には、使用可能なシステム コンフィギュレーションが含まれており、-sds-sys-config オプションで指定できます。

<platform_name> は、SDSoC 環境インストールのプラットフォーム名またはプラットフォーム ファイルを含むフォルダーへのファイル パスです。

-sds-pf-list なし 使用可能なプラットフォームの一覧を表示して終了します (ほかのオプションを指定しない場合)。表示される情報には、使用可能なシステム コンフィギュレーションが含まれており、-sds-sys-config オプションで指定できます。
-sds-sys-config <configuration_name> <configuration_name> 使用されるソフトウェア プラットフォームを定義するシステム コンフィギュレーションを指定します。これには、ターゲット オペレーティング システムとその他の設定が含まれます。-sds-pf-list および -sds-pf-info は、プラットフォームに対して使用可能なシステム コンフィギュレーションをリストするのに使用可能なオプションです。

-sds-sys-config オプションを使用する場合は、-target-os オプションは指定しないでください。-sds-sys-config オプションを指定しない場合は、デフォルトのシステム コンフィギュレーションが使用されます。

<configuration_name> は、プラットフォームで使用可能なシステム コンフィギュレーションのいずれかです。

-sds-proc <processor_name> <processor_name> -sds-sys-config オプションで定義されるシステム コンフィギュレーションと共に使用するプロセッサの名前を指定します。システム コンフィギュレーションでは、通常ターゲット CPU が指定されるので、このオプションは必要ありません。

<processor_name> は、使用するターゲット CPU を指定します。

-sds-pf-path <path> <path> プラットフォームの検索パスを指定します。指定したパスには、1 つまたは複数のサブフォルダーを含め、それぞれにプラットフォーム フォルダーを含めることができます。

<path> は、プラットフォームの検索パスを指定します。

-sds-image <image_name> <image_name> -sds-sys-config オプションと共に使用して、使用する SD カード イメージを指定します。このオプションを指定しない場合は、デフォルトの画像が使用されます。

<image_name> は、使用する SD カード イメージを指定します。

-target-os <os_name> <linux | standalone | freertos> ターゲット オペレーティング システムを指定します。選択した OS により、使用されるコンパイラ ツールチェーンとインクルード ファイル、sds++ で追加されたライブラリ パスなどが決まります。有効な os_name オプションのリストを生成するには、sdscc -sds-pf-info <plat_name> コマンドを使用します。

-sds-sys-config オプションを指定する場合、システム コンフィギュレーション自体でターゲット オペレーティング システムが定義されるので、-target-os オプションは使用しないでください。

-sds-sys-config を指定せずに -target-os オプションを指定すると、SDSoC-target-os で指定された OS と一致する OS のシステム コンフィギュレーションが検索されます。

-debug-xrf なし config_debug Tcl コマンドを追加して、ハードウェアの関数をコンパイルする際に Vivado® HLS デバッグ クロス リファレンス情報を作成します。
-debug-xrf-cc <compiler> <compiler> デバッグ クロス リファレンス シンボルのアクセラレータ ソース ファイルをコンパイルする際に使用するコンパイラ実行ファイルを指定します。指定しない場合のデフォルトは xcpp です。実行ファイルへのパスが定義されない場合は、環境からの PATH が使用されます。使用される場合、コンパイルおよびリンク コマンド ラインの両方に -debug-xrf-cc を指定します。
-verbose なし STDOUT に詳細出力を表示します。
-version なし STDOUT に sds++ バージョン情報を表示します。
--help なし コマンド ラインのヘルプ情報を表示します。ダッシュ (-) が 2 個使用されることに注意してください。

次のコマンド ライン オプションは、ソース ファイルをコンパイルするのに使用された sds++ 起動にのみ使用できます。

ハードウェア関数オプション

ハードウェア関数オプションを使用すると、sdscc/sds++ オプションを Makefile にまとめてコマンド ライン呼び出しを単純化し、既存の Makefile に最小限の変更を加えることができます。

-sds-hw-sds-end オプションはペアで使用します。
  • -sds-hw オプションは、ハードウェアに移動する 1 つの関数の記述を開始します。
  • -sds-end オプションは、その関数のコンフィギュレーション詳細のリストを終了します。
ハードウェアに移動する次の関数には、別の -sds-hw (コンフィギュレーションの開始) と -sds-end (コンフィギュレーションの終了) のペアを使用します。
次の Makefile の抜粋に、–sds-hw ブロックを使用し、SDSFLAGS という Makefile 変数に含まれるオプションをすべて収集して CC の定義を sds++ ${SDSFLAGS} に置換する方法を示します。これにより、アプリケーションの元の Makefile に最小限の変更を加えるだけで sds++ コンパイラの Makefile に変換できます。
APPSOURCES = add.cpp main.cpp
EXECUTABLE = add.elf
 
CROSS_COMPILE = arm-xilinx-linux-gnueabi-
AR = ${CROSS_COMPILE}ar
LD = ${CROSS_COMPILE}ld
#CC = ${CROSS_COMPILE}g++
PLATFORM = zc702
SDSFLAGS = -sds-pf ${PLATFORM} \
           -sds-hw add add.cpp -clkid 1 -sds-end \
           -dmclkid 2
CC = sds++ ${SDSFLAGS} 

INCDIRS = -I..
LDDIRS =
LDLIBS =
CFLAGS = -Wall -g -c ${INCDIRS}
LDFLAGS = -g ${LDDIRS} ${LDLIBS}
 
SOURCES := $(patsubst %,../%,$(APPSOURCES))
OBJECTS := $(APPSOURCES:.cpp=.o)
 
.PHONY: all
 
all: ${EXECUTABLE}
 
${EXECUTABLE}: ${OBJECTS}
 ${CC} ${OBJECTS} -o $@ ${LDFLAGS}
 
%.o: ../%.cpp
 ${CC} ${CFLAGS} $< 
表 2. ハードウェア関数オプション
オプション 有効な値 説明
-sds-hw function_name source_file なし sds++ コマンド ラインには、0 以上の –sds-hw ブロックを含めることができます。それぞれのブロックで最初の引数に最上位ハードウェア関数を、2 番目の引数に含まれるソース ファイルを指定します。-sds-hw ブロックで関連付けられるファイル名がコンパイルされるソース ファイル名と同じ場合に、オプションが適用されます。–sds-hw ブロック外のオプションは必要に応じて適用されます。

xfOpenCV ライブラリを使用する場合、function_name はダブル クォーテーションで囲んだテンプレート関数インスタンシエーション (例: "xf::Canny<1080,1920,0,0,3,2,1,1,1>") で、ファイルはそのテンプレート関数インスタンシエーションを含むソース ファイル (例: xf_canny_tb.cpp) です。

-clkid <n> <n> にはプラットフォーム別クロック ID 値の表にリストされている値のいずれかを指定。

アクセラレータ ID を <n> に設定します。<n> には、プラットフォーム別クロック ID 値の表にリストされている値のいずれかを指定します。プラットフォームの情報を表示するには、sds++ –sds-pf-info platform_name コマンドを使用します。clkid オプションを指定しない場合は、デフォルトのプラットフォームが使用されます。使用可能なプラットフォームおよび設定をすべて表示するには、sds++ –sds-pf-list コマンドを使用します。

-files file_list file_listVivado HLS を使用して現在の最上位関数をハードウェアにコンパイルするために必要な 1 つまたは複数のファイルのリスト。 現在の最上位関数を Vivado HLS を使用してハードウェアにコンパイルするのに必要な 1 つまたは複数のファイルを空白なしでカンマで区切って指定します。これらのファイルのいずれかに HLS では使用されないがアプリケーション実行ファイルを生成するのに必要なソース コードが含まれている場合は、ファイルを個別にコンパイルしてオブジェクト ファイル (.o) を作成し、リンク段階でその他のオブジェクト ファイルとリンクする必要があります。

xfOpenCV ライブラリを使用する場合、-files オプションで au_canny.hpp などの関数テンプレート定義を含むソース ファイルへのパスを指定します。

-hls-target boolean_value boolean_value0|1 1 に設定すると、Vivado HLS の add_files コマンドに -m32 または -m64 オプションに加え、-target および Arm GNU ツールチェーン インクルード オプションが挿入されます。

0 に設定すると、-m32 または -m64 オプションが挿入されます。

このオプションは、デフォルト ビヘイビアーがターゲット依存のコンパイル エラーになる場合に使用してください。

-sds-hw/-sds-end ブロック外に指定すると、すべてのハードウェア関数に適用されます。

-hls-target-flags "target_options" "target_options"Vivado HLS add_files コマンドのオプション。 Vivado HLS add_files コマンドで自動的に挿入されるオプション (例: -m32 または -m64) の代わりに使用するターゲット オプションのリストを指定します。このオプションは、コンパイラ オプションとして認識されないように、ダブル クォーテーションで囲む必要があります。
-hls-tcl hls_tcl_directives_file なし Vivado HLS ツールを使用してハードウェア アクセラレータを合成する際に、HLS 指示子を含む指定の Tcl ファイルを読み込みます。sds++ では、HLS 合成中に Vivado HLS ツールを駆動するのに使用する run.tcl ファイルが作成されます。この Tcl ファイルには次のコマンドが含まれています。
# synthesis directives
create_clock -period <clock_period>
set_clock_uncertainty 27.0%
config_rtl -reset_level low
source <sdsoc_generated_tcl_directives_file>
# end synthesis directives

–hls-tcl オプションを使用すると、ユーザー定義の Tcl ファイルが SDSoC 環境で生成された合成指示子の後に読み込まれます。

-shared-aximm なし 複数のポートをイネーブルにする代わりに、AXIMM ポートを共有します。
-sds-end なし 指定した function_name-sds-hw オプションの最後を指定します。

プラットフォーム別クロック ID 値

プラットフォーム別のクロック ID 値のリストは、プラットフォーム別クロック ID 値を参照してください。

SDSCC/SDS++ パフォーマンス見積もりフロー オプション

完全なビットストリームのコンパイルには、ソフトウェアのコンパイルよりもかなり時間がかかります。そのため、sds++/sdscc (sds++ と呼ぶ) には、ハードウェア関数呼び出しの実行時間の改善を見積もるパフォーマンス見積もりオプションが含まれています。

[Application Project Settings] で [Estimate Performance] チェック ボックスをオンにすると、現在のビルド コンフィギュレーションでパフォーマンス見積もりがイネーブルになり、プロジェクトがビルドされます。

図: [Application Project Settings] でのパフォーマンス見積もりの設定

スピードアップの見積もりは、2 段階のプロセスです。

  1. SDSoC 環境でハードウェア関数をコンパイルしてシステムを生成します。システムをビットストリームに合成する代わりに、sds++ でハードウェア関数のレイテンシ見積もりとハードウェア関数呼び出し元のデータ転送見積もり時間に基づいて、パフォーマンスが見積もられます。
  2. パフォーマンス ベースラインおよびパフォーマンス見積もりを確認するには、生成されたパフォーマンス レポートで [Click Here] をクリックしてインストルメント化されたバージョンのソフトウェアをターゲットで実行します。

パフォーマンス レポートの使用方法に関するチュートリアルは、『SDSoC 環境チュートリアル: 概要』 (UG1028) を参照してください。

コマンド ラインからパフォーマンス見積もりを生成することもできます。ソフトウェア ランタイムに関するデータを収集するため、まず -perf-funcs オプションを使用してプロファイルする関数を指定し、-perf-root オプションを使用してプロファイルされる関数への呼び出しを含むルート関数を指定します。

これにより、sds++ システム コンパイラでこれらの関数がインストルメント化され、ボードでアプリケーションを実行したときに自動的にランタイム データが収集されます。インストルメント化されたアプリケーションをターゲットで実行すると、プログラムにより SD カードに swdata.xml という実行のランタイム パフォーマンス データを含むファイルが作成されます。

swdata.xml をホストにコピーし、ハードウェア関数呼び出しごとおよび –perf-root で指定した最上位関数でのパフォーマンス向上を見積もるビルドを実行します。–perf-est オプションを使用して、swdata.xml をこのビルドの入力データとして指定します。

次の表に、アプリケーションをビルドするのに通常使用される sds++ システム コンパイラ オプションを示します。

表 3. よく使用される sds++ オプション
オプション 説明
-perf-funcs function_name_list インストルメント化されたソフトウェア アプリケーションでプロファイリングするすべての関数をカンマで区切って指定します。
-perf-root function_name プロファイリングする関数へのすべての呼び出しを含むルート関数を指定します。デフォルトは main 関数です。
-perf-est data_file インストルメント化されたソフトウェア アプリケーションをターゲット上で実行したときに生成されたランタイム データを含むファイルを指定します。ハードウェア アクセラレーションされた関数のパフォーマンス向上を見積もります。このファイルのデフォルト名は、swdata.xml です。
-perf-est-hw-only ソフトウェア実行データを収集せずに見積もりフローを実行します。このオプションを使用すると、ベースラインとの比較は含まれませんが、ハードウェア レイテンシおよびリソース使用率を確認できます。
注意:
プロファイル データを収集するためにボード上の sd_card イメージを実行したら、cd /; sync; umount /mnt; と入力します。これにより、swdata.xml ファイルが SD カードに書き込まれます。

コンパイラ マクロ

#ifdef および #ifndef プリプロセッサ文を含むコードを保護するため、定義済みマクロを使用します。マクロ名の前後にはアンダースコアを 2 つずつ付けます。__SDSCC__ マクロは、ソース ファイルをコンパイルするために sdscc または sds++ (まとめて sds++ と呼ぶ) が使用されると定義されます。コードは sds++ でコンパイルされるか GCC などの別のコンパイラでコンパイルされるかに基づいて保護できます。

sds++Vivado HLS を使用したハードウェア アクセラレーション向けにソース ファイルをコンパイルすると、__SDSVHLS__ マクロが定義され、高位合成が実行されるかされないかに基づいてコードを保護できます。

次のコードでは、sds++ でソース コードをコンパイルするときには __SDSCC__ マクロで sds_alloc() および sds_free() 関数が使用され、別のコンパイラ ツールを使用するときは、malloc() および free() 関数が使用されるように記述されています。
#ifdef __SDSCC__
#include <stdlib.h>
#include "sds_lib.h"
#define malloc(x) (sds_alloc(x))
#define free(x) (sds_free(x))
#endif
次の例では、__SDSVHLS__ マクロが使用されており、Vivado HLS でハードウェアを生成するときとソフトウェア インプリメンテーションで使用するときとで保護される関数定義に含まれるコードが異なります。
#ifdef __SDSVHLS__
void mmult(ap_axiu<32,1,1,1> A[A_NROWS*A_NCOLS],
           ap_axiu<32,1,1,1> B[A_NCOLS*B_NCOLS],
           ap_axiu<32,1,1,1> C[A_NROWS*B_NCOLS])
#else
void mmult(float A[A_NROWS*A_NCOLS],
           float B[A_NCOLS*B_NCOLS],
           float C[A_NROWS*B_NCOLS])
#endif

また、HLS_NO_XIL_FPO_LIB マクロは Vivado HLS ヘッダーのインクルード オプションよりも前に定義され、Vivado HLS、SDSoC 解析ツール、ターゲット クロスコンパイラで認識されます。このマクロは、ビット精度の浮動小数点シミュレーション モデルの使用をディスエーブルにし、ローカル システムからのより高速なインプリメンテーション (ビット精度ではない) を使用します。ビット精度の高いシミュレーション モデルは、Zynq-7000 SoC および Zynq UltraScale+ MPSoC Arm ターゲットには提供されていません。

システム オプション

表 4. システム オプション
オプション 説明
-ac <function_name>:<clock_id_number> デフォルトのクロック ID の代わりに、C 呼び出し可能 IP ライブラリの RTL アクセラレータ関数の指定クロック ID 番号を使用します。
-apm AXI AXI Performance Monitor IP ブロックを挿入し、生成されたすべてのハードウェア/ソフトウェア インターフェイスを監視します。SDSoC 開発環境の [Debug] パースペクティブで、[Performance Counters View] の [Start] ボタンをクリックすると、アプリケーションを実行する前に APM をアクティブにできます。詳細は、『SDSoC 環境チュートリアル: 概要』 (UG1028) を参照してください。
-bsp-config-file <mss_file> スタンドアロンまたは FreeRTOS などのベアメタル ベースのターゲット OS に対して自動的に生成されたファイルの代わりに使用する、ボード サポート パッケージ (BSP) コンフィギュレーション ファイル (.mss) へのパスを指定します。このオプションを使用する際は、BSP ヘッダー ファイルへのパスを指定するインクルード オプションも追加してください (-I</path/to/includes>)。
-bsp-config-merge-file <mss_file> ベース プラットフォームに使用するボード サポート パッケージ (BSP) コンフィギュレーション ファイル (.mss) へのパスを指定し、最終的なデザインからのハードウェア情報を使用して統合して、ベース プラットフォームのユーザー設定とベース プラットフォームに追加されたハードウェア設定 (DMA ドライバーなど) を含む BSP コンフィギュレーション ファイルが作成されるようにします。この統合された BSP コンフィギュレーション ファイルが、スタンドアロンまたは FreeRTOS などのベアメタル ベースのターゲット OS に対して自動的に生成されたファイルを使用する代わりに使用されます。このオプションを使用する際は、BSP ヘッダー ファイルへのパスを指定するインクルード オプションを追加してください (-I</path/to/includes>)。
-debug-port function:argument

System ILA モジュールを使用して監視する関数および引数を指定します。System ILA をインスタンシエートする際は、必要に応じて複数の -debug-port オプションを指定できます。System IlA なしで監視するインスタンス名およびポートを指定するには、-dk オプション (sds++-debug-port-dk にマップ) を使用します。

-disable-ip-cache 合成済み IP コアのキャッシュは使用しないでください。IP キャッシュを使用すると、スタティック IP コアを合成する必要がないので、全体的なビルド時間が短縮されます。ハードウェア システムをインプリメントするのに必要なリソースが使用可能なリソースよりも少しだけ多い場合は、-disable-ip-cache オプションを使用すると、sds++ ですべての IP コアがデザインのコンテキストで合成され、リソース使用量が削減されてインプリメンテーションが可能になることがあります。
-dmclkid <n> データ モーション ネットワーク クロック ID を <n> に設定します。<n> にはプラットフォーム別クロック ID 値にリストされている値のいずれかを指定します。プラットフォームの情報を表示するには、sds++ –sds-pf-info platform_name コマンドを使用します。dmclkid オプションを指定しない場合は、デフォルトのプラットフォームが使用されます。使用可能なプラットフォームおよび設定をすべて表示するには、sds++ –sds-pf-list コマンドを使用します。
-dk chipscope:instance:port System ILA モジュールを使用して監視するインスタンス名およびポートを指定します。System ILA をインスタンシエートする際は、必要に応じて複数の -dk オプションを指定できます。特殊な場合に、--xp param:compiler.userPostSysLinkTcl=<file> オプションを使用して、VivadoIP インテグレーター Tcl コマンドを含む Tcl ファイルを指定し、システムのリンク後、合成前にブロック図で System ILA を後処理することもできます。
注記: --dk オプションも使用できます。
-dk list_ports System ILA を挿入可能なインスタンスおよびポート名をリストします。このオプションは、デザインをリンクする場合にのみ指定でき、-mno-bitstream を指定して終了し、<pwd>/_sds/p0/dk_list_ports.txt を確認して、ビットストリームを作成するコマンド ラインをアップデートできます。
注記: --dk オプションも使用できます。
-dm-sharing <n> –dm-sharing <n> オプションを使用すると、初期のスケジューリングを緩和することができる場合に、データ ムーバーを共有可能かどうかを調べることができます。共有レベルは、指定しない場合はデフォルトで 0 (低) になります。その他の値は 1 (medium)、2 (high)、3 (maximum – スケジュールを無制限に緩和可能) です。たとえば、データ ムーバーの共有を最大限にするには、sds++ -dm-sharing 3 と指定します。
-emulation <mode> プロセッシング サブシステムに QEMU、プログラマブル ロジックに Vivado ロジック シミュレータを使用してシステムのエミュレーションを実行するのに必要なファイルを生成します。これは、このフローがイネーブルのボードでのみ機能します (現在のところ、ザイリンクス ベース プラットフォームのみ)。<mode> には、PL 用に作成されるシミュレーション モードのタイプ、debug または optimized を指定します。sds++ を実行したのと同じディレクトリで sdsoc_emulator コマンドを入力して、現在のシェルでエミュレーションを実行します。
-impl-strategy <strategy_name> デフォルト ストラテジの代わりに使用する Vivado インプリメンテーション ストラテジの名前 (Performance_Explore など) を指定します。ストラテジ名は、Vivado の [Settings] ダイアログ ボックスの [Implementation] ページに表示されます。ストラテジについては、『Vivado Design Suite ユーザー ガイド: インプリメンテーション』 (UG904)このセクションを参照してください。
注記: 合成およびインプリメンテーション用に Tcl ファイルを作成するには、set_property strategy <strategy_name> [get_runs impl_1] を追加します。
-instrument-stub –instrument-stub オプションは、カウンター関数 sds_clock_counter() への呼び出しを含む生成されたハードウェア関数スタブをインストルメント化します。ハードウェア関数スタブをインストルメント化すると、関数への各呼び出しに対して、送信および受信関数を呼び出すのに必要な時間、待機した時間が表示されます。
-maxjobs <n> -maxjobs <n> オプションでは、Vivado 合成で使用するジョブの最大数を指定します。デフォルトは、2 で割ったコア数です。
-maxthreads <n> –maxthreads <n> オプションでは、Vivado 配置配線などの一部のタスクを高速化するためのマルチスレッドに使用するスレッド数を指定します。有効なスレッド数は 1 ~ 8 です。デフォルト値は 4 ですが、マシンのコア数を超える数のスレッドは使用されません。また、OS の一般的な制限がすべてのタスクに適用されます。
-mno-bitstream プログラマブル ロジック (PL) をコンフィギュレーションするのに使用するデザインのビットストリームを生成しません。通常、ビットストリームは Vivado インプリメンテーション機能を実行して生成されますが、ビットストリームの生成にはデザインのサイズと複雑性によって数分から数時間かかります。このオプションを使用すると、ハードウェアの生成に影響しないフローを反復実行する場合にこの手順をディスエーブルにできます。アプリケーション ELF はビットストリーム生成前にコンパイルされます。
-mno-boot-files SD カード イメージを sd_card フォルダーに生成しません。このフォルダーには、デバイスをブートして指定の OS を起動するのに必要なアプリケーション ELF およびファイルが含まれます。このオプションを使用すると、sd_card フォルダーの作成をディスエーブルにし、このフォルダーに含まれている以前のバージョンを保持できます。
-rebuild-hardware ハードウェアにマップされた関数のないソフトウェアのみのデザインをビルドする場合、sds++ ではプラットフォーム内で使用可能な場合はビルド済みビットストリームが使用されますが、このオプションを使用するとシステム全体が強制的にビルドされます。
-remote-ip-cache <cache_directory> Vivado 合成の IP キャッシュに使用するディレクトリへのパスを指定します。IP キャッシュを使用すると、その後に続く run の論理合成に必要な時間を削減できます。--remote_ip_cache も使用できます。
-sdcard <data_directory> SD カード イメージを含めるためのオプションのディレクトリを指定します。
-synth-strategy <strategy_name> デフォルト ストラテジの代わりに使用する Vivado 合成ストラテジの名前 (Flow_RuntimeOptimized など) を指定します。ストラテジ名は、Vivado の [Settings] ダイアログ ボックスの [Synthesis] ページに表示されます。ストラテジについては、『Vivado Design Suite ユーザー ガイド: 合成』 (UG901)このセクションを参照してください。合成およびインプリメンテーション用に Tcl ファイルを作成するには、set_property strategy <strategy_name> [get_runs synth_1] を追加します。
-trace –trace オプションを使用すると、デザインにハードウェアおよびソフトウェア構造が挿入され、トレース機能が有効になります。
-trace-buffer <depth> -trace-buffer オプションは、トレース バッファー長を指定します。16 以上の 2 のべき乗値を指定します。このオプションを指定しない場合は、デフォルト値の 1024 が使用されます。
-trace-no-sw –trace-no-sw オプションは、トレース機能をイネーブルにした場合に、ソフトウェアをインストルメント化せずにデザインにハードウェア トレース モニターを挿入します。
-vpl-ini <ini_file> 各行に 1 つの -xp <parameter_value> を含む初期化ファイルを指定します。ただし、-xp オプション自体は含めないでください。これは、コマンド ラインに複数の -xp オプションを指定することと同じです。アドバンス ユーザーの場合は、このオプションを使用して Vivado 合成およびインプリメンテーション フローをカスタマイズできます。
-xp <xpvalue> Vivado 合成またはインプリメンテーションのプロパティまたはパラメーターを指定します。ダブル クォーテーションで囲むこともできます。<parameter_value> には、次のいずれかの形式を使用して Vivado プロパティまたはパラメーターを指定します。
"vivado_prop:run.run_name.<prop_name>=<value>"
 "vivado_param:<param_name>=<value>"

これらのパラメーターを最大限に活用するため、Vivado ツールの使用方法をよく理解しておくことをお勧めします。

最初の 2 つの例では、Vivado プロパティを設定して、合成後および最適化後の Tcl スクリプトをそれぞれ指定しています。

vivado_prop:run.synth_1.STEPS.SYNTH_DESIGN.TCL.POST=/path/to/postsynth.tcl"
"vivado_prop:run.impl_1.STEPS.OPT_DESIGN.TCL.POST=/path/to/postopt.tcl"

次の例では、Vivado で使用される最大スレッド数を設定しています。これは sds++ -maxthreadsオプションを使用するのと同じです。次に、Vivado パラメーターを設定する方法を示します。

"vivado_param:general.maxThreads=1"

上級ユーザーは、-xp オプションを使用して Vivado 合成およびインプリメンテーション フローをカスタマイズできます。--xp オプションも使用できます。

タイミング違反がある場合、通常 Vivado インプリメンテーションでビットストリームは生成されません。sds++ でタイミング違反チェックを飛ばして続行し、タイミング問題を後で解決する場合は、このパラメーターを使用します。

param:compiler.skipTimingCheckAndFrequencyScaling=1

プラットフォーム別クロック ID 値

プラットフォーム別のクロック ID 値のリストは、プラットフォーム別クロック ID 値を参照してください。

統合オプション

sds++ 統合コマンドでは、sds++ リンク オプションのサブセットがサポートされます。

表 5. 統合オプション
オプション 説明
-merge <input_dir> 統合する 1 つまたは複数の入力 SDSoC 開発環境プロジェクト ディレクトリを指定して、1 つのデザイン (それぞれ _sds サブディレクトリを含む) を作成します。
-o <output_dir> 統合したデザインを作成する出力ディレクトリを指定します。
<other_options> システム オプションの次のサブセットがサポートされます。
  • -emulation
  • -disable-ip-cache
  • -impl-strategy
  • -maxjobs
  • -maxthreads
  • -mno-boot-files
  • -mno-bitstream
  • -remote-ip-cache
  • -sdcard
  • -synth-strategy
  • -vpl-ini
  • -xp

コンパイラ ツールチェーン サポート

SDSoC 環境では、ザイリンクス ソフトウェア開発キット (SDK) に含まれるのと同じ GNU Arm クロスコンパイラ ツールチェーンが使用されます。

Linaro ベースの GCC コンパイラ ツールチェーンでは、Zynq-7000 SoC および Zynq UltraScale+ MPSoC ファミリ デバイスがサポートされます。このセクションには、ツールチェーンの使用方法に関する追加情報が含まれます。

アプリケーションをコンパイルおよびリンクする際は、SDSoC 環境と同じコンパイラ ツールチェーンとオプションを使用して、オブジェクト ファイルとライブラリ ビルトのみを使用してください。ソフトウェア ライブラリおよびソフトウェア コンポーネント (Linux カーネル、ルート ファイルシステム、BSP ライブラリおよびその他のプリビルド ライブラリ) に含まれるすべての SDSoC は、その含まれているツールチェーンを使用して構築されます。オブジェクト ファイルをコンパイルするのに sdscc/sds++ (sds++ と呼ぶ) を使用する場合、ツールにより少数のオプションが自動的に挿入されます。下位のツールチェーンを起動する場合も、同じオプションを使用する必要があります。

たとえば、Zynq-7000 SoC の浮動小数点アプリケーション バイナリ インターフェイス (ABI) を使用する場合、ユーザーのバイナリ オブジェクトには互換性がないので、SDSoC Zynq-7000 バイナリ オブジェクトおよびライブラリとはリンクできません。

次の表に、Zynq-7000 SoC ツールチェーンとオプションの sds++ の使用方法を示します。リストされているオプションは、sds++ を起動する代わりにツールチェーンの gcc および g++ コマンドを直接使用する場合にのみ指定する必要があります。

表 6. Zynq-7000 SoC の場合の sds++ 使用法
使用法 説明
Zynq-7000Arm ベアメタル コンパイラおよびリンカー オプション -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard
Zynq-7000Arm ベアメタル リンカー オプション -Wl,--build-id=none -specs=<specfile>

<specfile> は次を含む

*startfile:

crti%O%s crtbegin%O%s

Zynq-7000 Arm ベアメタル コンパイラ ${SDX_install}/SDK/2019.1/gnu/aarch32/lin/gcc-arm-none-eabi/bin

ツールチェーン接頭辞: arm-none-eabi

gcc 実行ファイル: arm-none-eabi-gcc

g++ 実行: arm-none-eabi-g++

Zynq-7000 SDSoC ベアメタル ソフトウェア (lib、include) ${SDX_install}/SDK/2019.1/gnu/aarch32/lin/gcc-arm-none-eabi
Zynq-7000 Arm Linux コンパイラ ${SDX_install}/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin

ツールチェーン接頭辞: arm-linux-gnueabihf-

gcc 実行ファイル: arm-linux-gnueabihf-gcc

g++ 実行: arm-linux-gnueabihf-g++

SDSoCZynq-7000 Linux ソフトウェア (lib、include) ${SDX_install}/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi

次の表に、Zynq UltraScale+ MPSoC Cortex™-A53 ツールチェーンとオプションの sds++ の使用方法を示します。リストされているオプションは、sds++ を起動する代わりにツールチェーンの gcc および g++ コマンドを直接使用する場合にのみ指定する必要があります。

表 7. Zynq UltraScale+ MPSoC Cortex-A53 の場合の sds++ 使用法
使用法 説明
Zynq UltraScale+ MPSoCArm ベアメタル コンパイラおよびリンカー オプション -mcpu=cortex-a53 -DARMR5 -mfloat-abi=hard -mfpu=vfpv3-d16
Zynq UltraScale+ MPSoCArm ベアメタル リンカー オプション -Wl,--build-id=none
Zynq UltraScale+ MPSoC Arm ベアメタル コンパイラ ${SDX_install}/SDK/2019.1/gnu/aarch64/lin/aarch64-none/bin

ツールチェーン接頭辞: aarch64-none-elf

gcc 実行ファイル: aarch64-none-elf-gcc

g++ 実行: aarch64-none-elf-g++

Zynq UltraScale+ MPSoC SDSoC ベアメタル ソフトウェア (lib、include) ${SDX_install}/SDK/2019.1/gnu/aarch64/lin/aarch64-none
Zynq UltraScale+ MPSoC Arm Linux コンパイラ ${SDX_install}/SDK/2019.1/gnu/aarch64/lin/aarch64-linux/bin

ツールチェーン接頭辞: aarch64-linux-gnu-

gcc 実行ファイル: aarch64-linux-gnu-gcc

g++ 実行: aarch64-linux-gnu-g++

SDSoCZynq UltraScale+ MPSoC Linux ソフトウェア (lib、include) ${SDX_install}/SDK/2019.1/gnu/aarch64/lin/aarch64-linux

次の表は、Zynq UltraScale+ MPSoC Cortex-R5 ツールチェーンとオプションの sds++ の使用方法をまとめたものです。リストされているオプションは、sds++ を起動する代わりにツールチェーンの gcc および g++ コマンドを直接使用する場合にのみ指定する必要があります。

表 8. Zynq UltraScale+ MPSoC Cortex-R5 の場合の sds++ 使用法
使用法 説明
Zynq UltraScale+ MPSoCArm ベアメタル コンパイラおよびリンカー オプション -mcpu=cortex-r5 -DARMR5 -mfloat-abi=hard -mfpu=vfpv3-d16
Zynq UltraScale+ MPSoCArm ベアメタル リンカー オプション -Wl,--build-id=none
Zynq UltraScale+ MPSoC Arm ベアメタル コンパイラ ${SDX_install}/SDK/2019.1/gnu/armr5/lin/gcc-arm-none-eabi/bin

ツールチェーン接頭辞: armr5-none-eabi

gcc 実行ファイル: armr5-none-eabi-gcc

g++ 実行: armr5-none-eabi-g++

Zynq UltraScale+ MPSoC SDSoC ベアメタル ソフトウェア (lib、include) ${SDX_install}/SDK/2019.1/gnu/armr5/lin/gcc-arm-none-eabi
重要: Zynq-7000 ソース ファイルをコンパイルするのに sds++ を使用する場合に、NEON 組み込み関数が含まれていると、SDSoC ツールでソース ファイルを処理および解析する際にエラーが発生します。ハードウェア アクセラレータ (または呼び出し元) ソース ファイルに NEON 組み込み関数が含まれる場合は、__SDSCC__ および __SDSVHLS__ マクロを使用して保護してください。

ハードウェア アクセラレータまたは呼び出し元を含まず、NEON 組み込み関数を使用するソース ファイルの場合は、GNU ツールチェーンを使用して直接コンパイルしてオブジェクトを sds++ とリンクするか、これらのソース ファイルに対して sds++ コマンド ライン オプション -mno-ir を追加できます。このオプションを使用すると、解析に使用される中間表記 (IR) を作成する Clang ベースのツールが起動されなくなります。これは、アクセラレータまたは呼び出し元がないので、これらのツールが必要ないとわかっているからです。