SDSoC ユーザー ガイド : プラットフォームおよびライブラリ

SDSoC 環境ユーザー ガイド
プラットフォームおよびライブラリ
UG1146 (v2015.2) 2015 年 7 月 20 日
本資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資
料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情
報につきましては、必ず最新英語版をご参照ください。
改訂履歴
次の表に、この文書の改訂履歴を示します。
日付
バージョン
改訂内容
2015/07/20
2015.2
初版
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
2
目次
改訂履歴 ................................................................................................ 2
目次 ...................................................................................................... 3
1 : 概要 ............................................................................................ 4
2 : SDSoC プラットフォーム..................................................................... 5
ハードウェア要件 ...................................................................................... 7
ソフトウェア要件 ....................................................................................... 8
メタデータ ファイル ....................................................................................10
Vivado Design Suite プロジェクト ....................................................................16
ライブラリ ヘッダー ファイル .........................................................................17
ビルド済みハードウェア ..............................................................................18
Linux ブート ファイル .................................................................................20
Petalinux を使用した Linux ブート ファイルの作成..............................................22
スタンドアロン ブート ファイル.......................................................................23
FreeRTOS コンフィギュレーション/バージョン変更 .............................................24
3 : C 呼び出し可能ライブラリ.................................................................. 26
ヘッダー ファイル......................................................................................27
スタティック ライブラリ .................................................................................27
ライブラリの作成 .......................................................................................30
ライブラリのテスト ......................................................................................32
C 呼び出し可能ライブラリの例 : Vivado FIR Compiler IP ......................................... 32
C 呼び出し可能ライブラリの例 : HDL IP ............................................................... 32
4 : チュートリアル : SDSoC プラットフォームの作成 ....................................... 35
例 : SDSoC プラットフォームのダイレクト I/O のエクスポート .................................35
例 : プラットフォーム IP のソフトウェア制御 ......................................................41
例 : Processing System 7 IP の AXI ポートの共有...............................................44
付録 A : その他のリソースおよび法的通知 ................................................. 48
ザイリンクス リソース...................................................................................48
ソリューション センター ...............................................................................48
参考資料 ................................................................................................48
法的通知 ................................................................................................49
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
3
第1章
概要
SDSoC™ (Software Define System on a Chip) 環境は、Zynq®-7000 All Programmable SoC を使用してヘテロジ
ニアス エンベデッド システムをインプリメントするための Eclipse ベースの統合設計環境 (IDE) です。SDSoC シ
ステム コンパイラは、ターゲット プラットフォームを拡張し、C/C++ で記述されたアプリケーション コードからアプ
リケーション特定のシステム オン チップを生成します。SDSoC 環境には、アプリケーション開発用の多数のプ
ラットフォームおよびザイリンクス パートナーから提供されるプラットフォームが含まれています。
SDSoC プラットフォームは、ベース ハードウェアおよびソフトウェア アーキテクチャと、プロセッシング システム、
カスタム入力/出力、およびオペレーティング システム (ベアメタルの場合もあり)、ブートローダー、プラット
フォーム ペリフェラルおよびルート ファイル システムなどのドライバーシステム ランタイムを含むアプリケーション
コンテキストを定義します。SDSoC 環境で作成するプロジェクトはすべて特定のプラットフォームをターゲットと
し、SDSoC IDE に含まれるツールを使用して、そのプラットフォームをアプリケーション特定のハードウェア アク
セラレータおよびアクセラレータをプラットフォームに接続するデータ モーション ネットワークでプラットフォー
ムをカスタマイズします。この方法を使用すると、さまざまなベース プラットフォーム向けに高度にカスタマイ
ズされたアプリケーション特定のシステム オン チップを簡単に作成でき、ベース プラットフォームをさまざ
まなアプリケーション特定のシステム オン チップに再利用できます。
この資料では、Vivado® Design Suite を使用してビルドされたハードウェア システムからカスタムの SDSoC プラッ
トフォームを作成する方法およびソフトウェアのランタイム環境について説明します。
重要 : SDSoC 環境の使用に関する詳細は、『SDSoC 環境ユーザー ガイド』 (UG1027) を参照してください。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
4
第2章
SDSoC プラットフォーム
SDSoC プラットフォームには、Vivado® Design Suite ハードウェア プロジェクト、オペレーティング システム、ブー
ト ファイル、およびソフトウェア ライブラリ (オプション) が含まれます。また、SDSoC プラットフォームにはハード
ウェアおよびソフトウェア インターフェイスが記述された XML メタデータ ファイルも含まれます。プラットフォーム
プロバイダーは、Vivado Design Suite と IP インテグレーターを使用してプラットフォーム ハードウェアを作成し、
Vivado ツール内の Tcl コマンドを使用して SDSoC 環境ハードウェア インターフェイスにタグを付けます。HSI
ユーティリティでは、ハードウェア メタデータ ファイルが生成されます。プラットフォーム クリエーターは、プラット
フォームをブートするのに必要なブート ローダーとオペレーティング システムも提供する必要があります。 また、
必要であれば、SDSoC 環境アプリケーションでリンク可能なソフトウェア ライブラリもオプションで提供されます。
現時点では、ソフトウェア プラットフォームのメタデータ ファイルは手動で作成する必要があります。
図 2–1 : SDSoC プラットフォームの主なコンポーネント
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
5
第2章 : SDSoC プラットフォーム
次に示すように、SDSoC プラットフォームのハードウェア コンポーネントは、Vivado Design Suite を使用してビル
ドされます。プラットフォームでターゲットの Linux オペレーティング システムがサポートされる場合は、コマンド
ラインまたは PetaLinux ツール スイートを使用してカーネルと U-Boot ブートローダーをビルドできます。プラット
フォーム ライブラリをビルドするには、PetaLinux ツール、SDSoC 環境、またはザイリンクス SDK を使用できます。
SDSoC プラットフォームには、次が含まれます。
•
•
•
•
メタデータ ファイル
–
プラットフォーム ハードウェア記述ファイル (<platform>_hw.pfm)
–
プラットフォーム ソフトウェア記述ファイル (<platform>_sw.pfm)
Vivado Design Suite プロジェクト
–
ソース
–
制約
–
IP ブロック
ソフトウェア ファイル
–
ライブラリ ヘッダー ファイル (オプション)
–
スタティック ライブラリ (オプション)
–
Linux 関連オブジェクト (デバイス ツリー、U-Boot、Linux カーネル、ramdisk)
ビルド済みハードウェア ファイル (オプション)
–
ビットストリーム
–
SDK 用にエクスポートされたハードウェア ファイル
–
前もって生成されたデバイス登録およびポート情報ソフトウェア ファイル
–
前もって生成されたハードウェアおよびソフトウェア インターフェイス ファイル
図 2–2 : 典型的な SDSoC プラットフォームのディレクトリ構造
通常は、プラットフォーム ビルダーだけでプラットフォームが SDSoC 環境内で正しく使用されるようにできます
が、<sdsoc_root>/docs/SDSoC_platform_checklist.xlsx のプラットフォーム チェックリストも参照
できます。 これには、本書で説明されるガイドラインの多くが含まれます。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
6
第2章 : SDSoC プラットフォーム
また、このスプレッドシートには platform_dm_test.zip ファイルも埋め込まれており、すべての SDSoC 環
境データ ムーバーに対する基本的なテストが含まれます。platform_dm_test.zip をワークエリアで解凍
し、SDSoC 開発のターミナル シェルから次を実行します。
$ make PLATFORM=<platform_path> axidma_simple
$ make PLATFORM=<platform_path> axidma_sg
$ make PLATFORM=<platform_path> axidma_2d
$ make PLATFORM=<platform_path> axififo
$ make PLATFORM=<platform_path> zero_copy
$ make PLATFORM=<platform_path> xd_adapter
これらの各テストはきれいにビルドされ、ボードでテストされるはずです。
また、プラットフォームにはすべてのカスタム インターフェイスに対するテストが提供されていて、ユーザーはこ
れらのインターフェイスへアクセスする方法の例を取得できるようになっています。
ハードウェア要件
このセクションでは、SDSoC プラットフォームのハードウェア デザイン コンポーネントの要件について説明します。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
7
第2章 : SDSoC プラットフォーム
Zynq®-7000 All Programmable SoC ハードウェア システムは、IP インテグレーター ツールを使用して Vivado®
Design Suite でビルドする必要があります。この際にハードウェア デザインでは、次の規則に必ず従ってください。
•
標準の Vivado IP カタログに含まれていないプラットフォーム IP は、Vivado Design Suite プロジェクトに含ま
れている必要があります。外部 IP リポジトリ パスを参照することはできません。
•
SDSoC プラットフォームのハードウェア ポート インターフェイスは、AXI、AXI4-Stream、クロック、リセッ
ト、および割り込みインターフェイスのみで構成されています。どのカスタム バス タイプまたはハードウェ
ア インターフェイスもプラットフォーム内に含める必要があります。
すべての AXI および AXI4-Stream インターフェイスは SDSoC 環境により 1 個のデータ モーション クロック
に接続されるので、プラットフォームで必要に応じてクロック乗せ換えをすべて処理する必要があります。
•
AXI4-Stream インターフェイスでは、SDSoC 環境のデータ ムーバーで使用される Vivado ツールの IP に
準拠するために TLAST および TKEEP 側帯波信号が必要です。
•
いずれのプラットフォームでも Vivado IP カタログに含まれている Processing System 7 IP ブロックを含
める必要があります。
Processing System 7 IP ブロックの未使用の AXI ポートは、自動的にエクスポートされる SDSoC プラット
フォームのインターフェイスの一部になります。
•
SDSoC 環境とプラットフォーム ロジック (たとえば S_AXI_ACP) 間で 1 個の AXI ポートを共有するには、
該当する AXI ポートに接続されている AXI Interconnect IP の未使用の AXI マスターまたはスレーブ
をエクスポートする必要があります。
•
インターコネクトの終端処理されていない AXI ポートをプラットフォームがエクスポートする場合は、どの
SDSoC 環境のアプリケーションでもこのポートを使用する必要があります。 使用しない場合、Vivado Design
Suite ツールを起動するときに SDSoC システム コンパイラでエラー メッセージが表示されます。SDSoC 環境
では、「プラットフォーム ハードウェア記述ファイル」に説明されているように、プラットフォーム ハードウェア
の XML ファイルで IP ポートをイネーブルにするパラメータを設定することで、Proessing System 7 IP ブロッ
クまたは AXI Interconnect ブロックの AXI ポートのみに自動的に終端が付けられます。
•
どのプラットフォームでも最低 1 個の汎用マスター AXI ポートを Processing System 7 IP ブロックからエ
クスポートする必要があります。プラットフォームで M_AXI_GP0 および M_AXI_GP1 の両方が必要な
場合は、これらの両方またはいずれかに接続されている AXI Interconnect IP ブロックのマスター ポート
をエクスポートする必要があります。
•
SDSoC 環境でエクスポートされたリセット信号は、Vivado IP カタログに含まれている Processor System Reset
IP ブロックで駆動する必要があります。このブロックは、エクスポートされる SDSoC 環境のクロック信号に同
期します。プラットフォーム インターフェイスに含まれる各クロックには、プラットフォーム インターフェイスに
含まれている関連ポートの proc_sys_reset、peripheral_reset、peripheral_aresetn、およ
び interconnect_reset を含める必要があります。
•
プラットフォームの割り込み入力は、Processing System 7 IP IRQ_F2P に接続されている Concat
(xlconcat) ブロックでエクスポートされる必要があります。プラットフォームに含まれている IP ブロックでは
16 個のファブリック割り込みの一部を使用できますが、IRQ_F2P ポートの最下位ビットからビットを飛ばさず
に使用する必要があります。SDSoC プラットフォームの割り込みインターフェイスは、残りの未使用の割り込み
で構成されます。プラットフォームで割り込みが使用されない場合は、Concat ブロックの入力には終端が付き
ませんが、SDSoC 環境では必要に応じて割り込み Concat ブロックの入力に終端が自動的に付けられます。
ソフトウェア要件
このセクションでは、SDSoC プラットフォームのランタイム ソフトウェア コンポーネントの要件について説明します。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
8
第2章 : SDSoC プラットフォーム
SDSoC 環境では、現在のところ Zynq®-7000 AP SoC ターゲットで実行される Linux、スタンドアロン (ベ
アメタル)、FreeRTOS オペレーティング システムがサポートされていますが、プラットフォームではそれらす
べてをサポートする必要はありません。
プラットフォーム ペリフェラルに Linux カーネル ドライバーが必要な場合は、drivers/staging/apf の
linux-xlnx カーネル ソースを使用して、使用可能な SDSoC 環境特有のドライバーを複数含めるように
カーネルをコンフィギュレーションする必要があります。SDSoC 環境に含まれるベース プラットフォームに
は、たとえば platforms/zc702/boot/how-to-build-this-linux-kernel.txt のようなインスト
ラクションが含まれています。
This linux kernel (uImage) and the associated device tree (devicetree.dtb) are based on
the 3.17 version of the linux kernel
To build the kernel:
Clone/pull from the master branch of the Xilinx/linux-xlnx tree at github,
and checkout the xlnx_3.17 branch
git checkout xlnx_3.17
Add the following CONFIGs to xilinx_zynq_defconfig and then configure the kernel
CONFIG_STAGING=y
CONFIG_XILINX_APF=y
CONFIG_XILINX_DMA_APF=y
CONFIG_DMA_CMA=y
CONFIG_CMA=y
CONFIG_CMA_SIZE_MBYTES=256
CONFIG_LOCALVERSION="-xilinx-apf"
# The following configs are optional, and remove some debug settings
CONFIG_PRINTK_TIME=n
CONFIG_LOCKUP_DETECTOR=n
CONFIG_DEBUG_RT_MUTEXES=n
CONFIG_DEBUG_WW_MUTEX_SLOWPATH=n
CONFIG_PROVE_LOCKING=n
CONFIG_DEBUG_ATOMIC_SLEEP=n
CONFIG_PROVE_RCU=n
CONFIG_DMA_API_DEBUG=n
One way to do this is to
cp arch/arm/configs/xilinx_zynq_defconfig arch/arm/configs/tmp_defconfig
Edit arch/arm/configs/tmp_defconfig using a text editor and add the above
config lines to the bottom of the file
make ARCH=arm tmp_defconfig
Build the kernel using
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- UIMAGE_LOADADDR=0x8000 uImage
デフォルトでは、sdsoc システム コンパイラでプラットフォームをブートするための SD カード イメージが生成
されます。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
9
第2章 : SDSoC プラットフォーム
メタデータ ファイル
SDSoC プラットフォームには次の XML メタデータ ファイルが含まれており、これらのファイルにはハードウェアお
よびソフトウェア インターフェイスが記述されています。
•
プラットフォーム ハードウェア記述ファイル
•
プラットフォーム ソフトウェア記述ファイル
プラットフォーム ハードウェア記述ファイル
プラットフォーム ハードウェア記述ファイル <platform>_hw.pfm は SDSoC 環境用にハードウェア システム
を記述した XML メタデータ ファイルで、使用可能なクロック周波数、割り込み、SDSoC 環境でハードウェア関
数との通信に使用できるハードウェア インターフェイスを含みます。
「SDSoC プラットフォーム」の図に示すように、この SDSoC プラットフォーム ハードウェア記述ファイルは Vivado
Design Suite を使用してベース ハードウェア プラットフォーム デザインをビルドし、Tcl コンソールで Tcl API を
使用して IP インテグレーター ブロック図でブロック、ブロック パラメーターおよびブロック ポートの属性を設定し
(バッチ フローを使用する場合はスクリプトを使用)、HSI ユーティリティを起動して生成します。このファイルは、
テキスト エディターを使用して手動で作成および編集することもできます。
SDSoC プラットフォーム ポート インターフェイスには、IP インテグレーター ブロック図内のプラットフォーム
IP に使用可能な AXI または AXI4-Stream バス インターフェイスのセットと、Processing System 7 IP ブロック
(processing_system7) の未使用の割り込み、クロック ポート、Vivado IP カタログの proc_sys_reset IP
から提供される同期されたリセットのセットが含まれます。
Vivado IP カタログの processing_system7 IP ブロックには、すべての未使用の AXI インターフェイスが
SDSoC 環境インターフェイスの一部になるという特徴があります。IP インテグレーターのその他すべての IP で
は、プラットフォーム ビルダーで AXI または AXI4-Stream インターフェイスに Tcl プロパティを明示的に設定し
ておかないと、インターフェイスが SDSoC 環境のプラットフォーム インターフェイスに含まれません。
Vivado IP インテグレーターの Tcl コマンド
このセクションでは、SDSoC™ プラットフォームのハードウェア インターフェイスを指定する Vivado® IP インテ
グレーターの Tcl コマンドについて説明します。
SDSoC 環境のハードウェア プラットフォーム記述の IP インテグレーター エクスポートをイネーブルにするに
は、次のコマンドを使用します。
set_param project.enablePlatformHandoff true
ファイル名とディレクトリ : <platform>/<platform>_hw.pfm
例 : platforms/zc702/zc702_hw.pfm
次は、Vivado Design Suite の Tcl API を使用してブロック図内に適用できる属性について説明しています。
プラットフォーム ポートとバス インターフェイスをそれぞれ宣言するには、次を使用します。
set_property SDSOC_PFM.MARK_SDSOC [get_bd_pins <pin>]
set_property SDSOC_PFM.MARK_SDSOC [get_bd_intf_pins <bus_interface>]
デフォルトのプラットフォーム クロック ソースを宣言するには、次を使用します。
set_property SDSOC_PFM.PFM_CLOCK TRUE [get_bd_pins /ps7/FCLK_CLK2]
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
10
第2章 : SDSoC プラットフォーム
プラットフォーム クロック ID (負でない整数) を宣言するには、次を使用します。
set_property SDSOC_PFM.CLOCK_ID 2 [get_bd_pins /ps7/FCLK_CLK2]
インスタンスが Linux UIO プラットフォームであることを宣言するには、次を使用します。
set_property SDSOC_PFM.UIO TRUE [get_bd_cells /axi_gpio_0]
プラットフォーム IP インスタンスのパラメーターを宣言するには、次を使用します。
set_property SDSOC_PFM.PFM_PARAMS {NUM_SI} [get_bd_cells /axi_interconnect_s_axi_acp]
{ } 内のリストでは、プラットフォーム IP インスタンスのパラメーター名をコロンで区切ったリストになりますが、この
例の場合は axi_interconnect_s_axi_acp です。
プラットフォーム IP インスタンスのパラメーターを宣言するには、次を使用します。
set_property SDSOC_PFM.NUM_SI
{count($designComponent/xd:connection/xd:busInterface[@xd:instanceRef=$instance
and @xd:name=’axi_interconnect_s_axi_acp_S00_AXI’])+1}
[get_bd_cells/axi_interconnect_s_axi_acp]
[get_bd_cells /axi_interconnect_s_axi_acp]
このインスタンスの場合、パラメーターは SDSOC_PARAMS にリストされる必要があります。式の項 +1 は、現在プ
ラットフォーム内で使用されているインターコネクト ポート数を反映しています。 この場合は、1 です。
重要 : このリリースの SDSoC 環境では、エクスポートしたハードウェア記述ファイル <platform>_hw.pfm
に一部の必要なメタデータが含まれていないことがあり、ユーザーが手動で追加する必要があります。
vivado.log ファイルを確認するか、特定の属性がまだサポートされていないことを示す Vivado ツールの
Tcl コンソールの出力の unknown attribute 警告を確認してください。
既知の問題 :
•
TLAST および TKEEP 側帯波信号を含む Platform AXI4-Stream バス インターフェイスには、該当する
xd:busInterface エレメントの xd:hasTlast 属性 (値は true) が必ず含まれている必要があります
が、自動的には検出されません。これらの属性は、手動で追加する必要があります (詳細は「例 : プラット
フォーム IP のソフトウェア制御」を参照してください)。
•
axi_interconnect IP ブロックの Platform AXI インターフェイスには、次の属性が含まれていないの
で、手動で追加する必要があります (詳細は、「例 : Processing System 7 IP の AXI ポートの共有」を参
照してください)。
–
xd:coherent : S_AXI_ACP に接続されたインターコネクト インターフェイスに必要です。 それ以外
の場合は、オプションです。
–
xd:numBits : このインターフェイスの使用可能な ID ビット数です。AXI インターフェイスにはそれぞ
れ決まった数の ID ビットが含まれ、各インターコネクトで ceil(log2(#interfaces)) ビットが
予約されています。プラットフォーム インターフェイスは axi_interconnects をカスケード接続
することで SDSoC 環境と共有されるので、インターフェイスがオーバーロードされないようにするた
めに SDSoC 環境でこの数が必要とされます。
–
xd:memport : Vivado ツールの MIG IP、Processing System 7 M_AXI_GP[01]、S_AXI_ACP または
S_AXI_HP[0-3] バス インターフェイスを介して axi_interconnect バス インターフェイスを外部メ
モリへのチャネルとしてタグ付けして、[“MIG”|”M_AXI_GP”|”S_AXI_ACP”|”S_AXI_HP”] の 1 つから
選択した値を使用します。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
11
第2章 : SDSoC プラットフォーム
クロック
クロック ソースはプラットフォームと一緒にエクスポートできますが、「リセット」に示すように、Processor System
Reset IP ブロックを使用して合成済みリセット信号もエクスポートする必要があります。
次の Tcl コマンドでは、Processing System 7 IP インスタンスで FCLK_CLK1 が SDSoC 環境インターフェイス
の一部になるように宣言されています。
set_property SDSOC_PFM.MARK_SDSOC true [get_bd_pins /ps7/FCLK_CLK1]
各クロックには、次の Tcl コマンドを使用して負ではない整数の ID を付ける必要があります。
set_property SDSOC_PFM.PFM_CLOCK_ID <id> [get_bd_pins <clock port>]
たとえば、次の Tcl コマンドでは FCLK_CLK1 の ID が 1 に設定されます。
set_property SDSOC_PFM.CLOCK_ID 1 [get_bd_pins /ps7/FCLK_CLK1]
processing_system7 ポートではないクロック ソースには、次のエレメントを生成された XML ハードウェア記
述ファイルに手動で追加する必要があります。たとえば、instance clkwiz_0 の clk_out1 ポートをエクス
ポートするには、プラットフォーム ハードウェア記述ファイルに次を挿入します。
<xd:busInterface
xd:busInterfaceRef="clk_out1"
xd:busTypeRef="clock"
xd:instanceRef="clkwiz_0"
xd:mode="master"
xd:name="clkwiz_0_clk_out1"/>
すべてのプラットフォームで、明示的にクロックが指定されていない場合は、SDSoC 環境でデフォルト クロックが
使用されるように宣言する必要があります。たとえば、次の Tcl コマンドでは Processing System 7 IP ブロックの
FCLK_CLK2 ポートをデフォルト プラットフォーム クロックとして宣言しています。
set_property SDSOC_PFM.CLOCK TRUE [get_bd_pins /ps7/FCLK_CLK2]
FCLK_CLK2 のクロック ID が 2 の場合、デフォルト プラットフォーム クロックをキャプチャするための XML エレメ
ントは <xd:systemClocks xd:defaultClock="2"> になります。デフォルト プラットフォーム クロックを宣
言しておかないと、システム生成中に SDSoC システム コンパイラでエラーになります。
リセット
SDSoC™ 環境では、Vivado® Design Suite の proc_sys_reset IP を使用してリセットを特定クロックに同期化
し、次のコマンドを使用してリセット インターフェイスをエクスポートするプラットフォームが必要です。
set_property SDSOC_PFM.MARK_SDSOC true [get_bd_pins <proc_sys_reset>/interconnect_aresetn]
set_property SDSOC_PFM.MARK_SDSOC true [get_bd_pins <proc_sys_reset>/peripheral_aresetn]
set_property SDSOC_PFM.MARK_SDSOC true [get_bd_pins <proc_sys_reset>/peripheral_reset]
割り込み
プラットフォーム プロセッシング システム 7 の IP ブロックには、IP インテグレーターの Concat ブロック
(xlconcat) を介して割り込みを接続する必要があります。プラットフォームに含まれる IP に割り込みが含まれ
る場合、これらの割り込みで Concat ブロックの最下位ビットからビットを飛ばさずに使用する必要があります。Tcl
API を使用して割り込みを明示的に宣言する必要はありません。Vivado® では使用可能な割り込みが SDSoC
プラットフォームのインターフェイスの一部として自動的にエクスポートされます。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
12
第2章 : SDSoC プラットフォーム
SDSoC プラットフォーム ハードウェア記述ファイルの作成
システムをエクスポートする場合は、Tcl に次のコマンドを入力します。
write_hwdef -file "[file join <platform>.sdk <platform>_wrapper.hdf]"
プラットフォーム記述ファイルを Vivado ツールの Tcl コンソールから生成する場合は、次のコマンドを入力して
Vivado ツールの HSI (Hardware/Software Interface) ユーティリティを起動します。
load_features hsi
hsi::open_hw_design <platform>.sdk/<platform>_wrapper.hdf
hsi::generate_target {sdsoc} [hsi::current_hw_design] –dir <target_directory>
これによりハードウェア プラットフォーム記述ファイルが ジャーナル Tcl ファイルと共に <target_directory>
ディレクトリに生成されます。ジャーナル Tcl ファイルにはプラットフォームの宣言で実行した Tcl コマン
ドが含まれています。
重要 : hsi では <platform>.pfm という名前のファイルが生成されるので、このファイルの名前を
<platform>_hw.pfm に変更する必要があります。
重要 : 「Vivado IP Integrator の Tcl コマンド」で説明されているように、ハードウェア記述ファイルには別の属性
を追加する必要があります。サンプルは、「チュートリアル : SDSoC プラットフォームの作成」を参照してください。
プラットフォーム ソフトウェア記述ファイル
「SDSoC プラットフォーム」で説明されているように、SDSoC プラットフォームにはソフトウェア コンポーネントが
含まれており、このコンポーネントにはオペレーティング システム、ブート ローダー、およびライブラリが含ま
れています。プラットフォーム ソフトウェア記述ファイルには、SDSoC システム コンパイラがプラットフォーム
上にビルドされるアプリケーション特定のシステム オン チップを生成するのに必要なソフトウェア ランタイム
に関するメタデータが含まれています。
ブート ファイル
SDSoC 環境では、ボードをブートして Linux オペレーティング システムをブートするかまたはスタンドアロン
プログラムを実行する SD カードを作成できます。
次のフォーマットを使用して Linux のファイルを記述します。カーネル イメージ、デバイス ツリー、およびルート
ファイル システムを含むユニファイド ブート イメージの .ub ファイルを使用している場合は、xd:devicetree
および xd:ramdisk を削除して xd:linuxImage=”boot/image.ub” を指定します。
<xd:bootFiles
xd:os=”linux”
xd:bif=”boot/linux.bif”
xd:readme=”boot/generic.readme”
xd:devicetree=”boot/devicetree.dtb”
xd:linuxImage=”boot/uImage”
xd:ramdisk=”boot/ramdisk.image.gz”/>
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
13
第2章 : SDSoC プラットフォーム
OS を使用しないスタンドアロン プログラムでは、次を記述します。
<xd:bootFiles
xd:os="standalone"
xd:bif="boot/standalone.bif"
xd:readme=”boot/generic.readme”
/>
注記 : これらのエレメントではブート イメージ ファイル (BIF) が参照されることに注意してください。指定ディレ
クトリに BIF ファイルが含まれている必要があります。
Linux ターゲットのサンプル プラットフォームの BIF ファイル テンプレートには、次が含まれています。
/* linux */
the_ROM_image:
{
[bootloader]<boot/fsbl.elf>
<bitstream>
<boot/u-boot.elf>
}
システム生成中、SDSoC システム コンパイラでは、このテンプレートを読み込んで、アプリケーション特有の
ファイル名を挿入して BIF ファイルが生成されます。 このファイルが bootgen ユーティリティに渡されて
ブート イメージが作成されます。
/* linux */
the_ROM_image:
{
[bootloader]<path_to_platform>/boot/fsbl.elf
<path_to_generated_bitstream>/<project_name>.elf.bit
<path_to_platform>/boot/u-boot.elf
}
standalone.bif サンプル ファイルには、次の内容が含まれます。
/* standalone */
the_ROM_image:
{
[bootloader]<boot/fsbl.elf>
<bitstream>
<elf>
}
システム生成中、SDSoC システム コンパイラでは、このテンプレートを読み込んで、アプリケーション特有の
ファイル名を挿入して BIF ファイルが生成されます。 このファイルが bootgen ユーティリティに渡されて
ブート イメージが作成されます。
/* standalone */
the_ROM_image:
{
[bootloader]<path_to_platform>/boot/fsbl.elf
<path_to_generated_bitstream_directory>/<project_name>.elf.bin
<path_to_generated_application_elf_directory>/<project_name>.elf
}
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
14
第2章 : SDSoC プラットフォーム
ライブラリ ファイル
プラットフォームには、オプションでライブラリを含めることができます。次のフォーマットを使用してライブラリ
ファイルを記述する場合は、コンパイラの呼び出し時に SDSoC 環境で該当するインクルード パスとライブラ
リ パスが -I および -L オプションを使用して自動的に追加されます。
<xd:libraryFiles
xd:os=”linux”
xd:includeDir=”arm-xilinx-linux-gnueabi/include”
xd:libDir=”arm-xilinx-linux-gnueabi/lib”/>
<xd:libraryFiles
xd:os=”standalone”
xd:includeDir=”arm-xilinx-eabi/include”
xd:libDir=”arm-xilinx-eabi/lib”/>
説明
次に、xd:libraryFiles の情報スキーマを示します。
<xd:libraryFiles
xd:os
Operating system. Valid values: linux, standalone
xd:includeDir
Directory passed to compiler using –I.
xd:libDir
Directory passed to the linker using –L .
Separate multiple paths with a colon ‘:’ character.
Separate multiple paths with a colon ‘:’ character.
xd:libName
Library name passed to the linker using –l.
Separate multiple library names with a colon ‘:’ character.
If this is specified, sdscc/sds++ automatically adds the –l option
when linking the ELF, otherwise the user adds the –l option.
/>
ビルド済みハードウェア ファイル
プラットフォームには、オプションでビルド済みハードウェア ファイルを含めることができます。 これが SDSoC 環
境では、アプリケーションにハードウェア関数が含まれない場合に、ビットストリームとブート イメージがビルドし
直されるのではなく、プロジェクトにコピーされます。これにより、ターゲットにアプリケーション ソフトウェアを実行
する高速コンパイルが提供されます。プラットフォームにビルド済みハードウェア ファイルが含まれる場合、
sdscc–rebuild-hardware オプションを使用してビットストリーム コンパイルが強制的に使用されるようにし
て、ハードウェア ファイルが作成されるようにできます。
次の例は、ZC702 プラットフォームに含まれるビルド済みハードウェアを示しています。
<xd:hardware
xd:system=”prebuilt”
xd:bitstream=”prebuilt/bitstream.bit”
xd:export=”prebuilt/export”
xd:hwcf=”prebuilt/hwcf”
xd:swcf=”prebuilt/swcf”/>
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
15
第2章 : SDSoC プラットフォーム
説明
次に、xd:hardware の情報スキーマを示します。
<xd:hardware
xd:system
Identifier associated with predefined hardware; when
the SDSoC environment searches for a pre-built bitstream, it looks
for the keyword “prebuilt”
xd:bitstream
Path to the bitstream.bit file for the pre-built hardware
xd:export
Path to the folder containing SDK-compatible files
created using the Vivado tools export_hardware command.
This folder contains the hardware handoff file <platform>.hdf,
for example, zc702.hdf.
xd:hwcf
Path to the folder containing hardware system
information files. Files found in this folder
are partitions.xml and apsys_0.xml.
xd:swcf
Path to the folder containing device registration and
port information files. Files found in this folder
are devreg.c, devreg.h, portinfo.c and portinfo.h.
/>
ビルド済みプラットフォーム ファイルは SDSoC システム コンパイラで Hello world プログラムをビルドすること
で作成できます。
すべてのベース プラットフォームの例は、
<sdsoc_install_directory>/platforms/*/hardware/prebuilt に含まれています。
XML ファイルのテスト
ハードウェア プラットフォーム記述ファイル (<platform>_hw.pfm) とソフトウェア プラットフォーム記述ファイ
ル (<platform>_sw.pfm) をプラットフォーム ディレクトリに含めたら、すべての使用可能なプラットフォームを
リストする次のコマンドを実行して、正しいファイルを SDSoC に読み込むことができます。表示リストに作成したプ
ラットフォームが表示されていれば、SDSoC 環境でそれが検出されます。
> sdscc –sds-pf-list
プラットフォームに関する詳細を表示するには、次のコマンドを使用します。
> sdscc –sds-pf-info <platform_name>
Vivado Design Suite プロジェクト
SDSoC™ 環境では、アプリケーション特定の SDSoC をビルドする際に <platform>/vivado ディレクトリ
に含まれる Vivado® Design Suite プロジェクトを開始点として使用します。プロジェクトには IP インテグレー
ター ブロック図が必ず含まれている必要があり、いくつでもソース ファイルを含めることができます。Zynq SoC
をターゲットにするほとんどすべてのプロジェクトが SDSoC 環境プロジェクトの基盤となりえますが、「ハード
ウェア要件」に示すような制約もいくつかあります。
ファイル名とディレクトリ : platforms/<platform>/vivado/<platform>.xpr
例 : platforms/zc702_hdmi/vivado/zc702_hdmi.xpr
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
16
第2章 : SDSoC プラットフォーム
注記 :
プロジェクトは、xpr ファイルと同じディレクトリに含める必要があります。
重要 : ファイルは Vivado プロジェクトで単純にコピーすることはできません。 Vivado ツールでは、単純なファイ
ル コピーでは保持されないような方式で内部ステートが管理されているからです。プロジェクトのコピーを作成す
るには、Vivado で [File] → [Archive Project] をクリックして ZIP アーカイブを作成します。このアーカイブ ファイ
ルをハードウェア プラットフォームの含まれる SDSoC のプラットフォーム ディレクトリで解凍します。
Vivado ツールでは、新しい Vivado Design Suite のバージョンがリリースされるたびに [Upgrade IP] を実行する必
要があります。SDSoC ハードウェア プラットフォームをアップグレードするには、新しいツール バージョンでプロ
ジェクトを開いてから、すべての IP をアップグレードします。プロジェクトをアーカイブして、このアーカイブ
を SDSoC プラットフォーム ハードウェア プロジェクトで解凍します。
SDSoC 環境で Vivado ツールを起動する際に IP のロックを示すエラーが発生した場合は、プラットフォームを
コピーできなかったことを意味します。
ライブラリ ヘッダー ファイル
プラットフォームにプラットフォーム特有のヘッダー ファイルを含めるためのアプリケーション コードが必要な場
合、これらをプラットフォーム ソフトウェア記述ファイルの該当する OS の xd:includeDir 属性で指定された
プラットフォーム ディレクトリの下位ディレクトリに含める必要があります。
プラットフォーム ソフトウェア記述ファイルに xd:includeDir=”<relative_include_path>” とある場
合、ディレクトリは次になります。
<platform root directory>/<relative_include_path>
例:
xd:includeDir=”arm-xilinx-linux-gnueabi/include” の場合、次のディレクトリになります。
<sdsoc_root>/samples/platforms/zc702_hdmi/arm-xilinx-linux-gnueabi/include/zc702hdmi/hwi_export.h
アプリケーション コードでヘッダー ファイルを使用するには、次を使用します。
#include “zc702hdmi/hwi_export.h”
複数のインクルード パスを区切るためには、コロン (:) を使用します。次はその例です。
xd:includeDir=”<relative_include_path1>:<relative_include_path2>”
プラットフォーム ソフトウェア記述ファイルでは、2 つのインクルード パスのリストが定義されます。
<platform_root_directory>/<relative_include_path1>
<platform root_directory>/<relative_include_path2>
推奨 : ヘッダー ファイルは、標準ディレクトリには含まれないので、ユーザーが SDSoC 環境のコンパイル コマ
ンドに –I オプションを使用してそれらを指定する必要があります。ファイルはプラットフォーム XML ファイ
ルに記述されるように、標準ディレクトリに含めることをお勧めします。
スタティック ライブラリ
プラットフォームに含まれるスタティック ライブラリに対してユーザーがリンクする必要がある場合、これらをプラッ
トフォーム ソフトウェア記述ファイルの該当する OS の xd:libDir 属性で指定されたプラットフォーム ディレ
クトリの下位ディレクトリに含める必要があります。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
17
第2章 : SDSoC プラットフォーム
プラットフォーム ソフトウェア記述ファイルに xd:libDir=”<relative_lib_path>” とある場合、ディレ
クトリは次になります。
<platform_root>/<relative_lib_path>
例:
xd:libDir=”arm-xilinx-linux-gnueabi/lib” の場合、次のディレクトリになります。
<sdsoc_root>/samples/platforms/zc702_hdmi/arm-xilinx-linux-gnueabi/lib/libzc702hdmi.a
ライブラリ ファイルを使用するには、次のリンカー オプションを使用します。
-lzc702hdmi
複数のライブラリ パスを区切るためには、コロン (:) を使用します。 次はその例です。
xd:libDir=”<relative_lib_path1>:<relative_lib_path2>”
プラットフォーム ソフトウェア記述ファイルでは、2 つのライブラリ パスのリストが定義されます。
<platform_root>/<relative_lib_path1>
<platform root>/<relative_lib_path2>
推奨 : スタティック ライブラリが標準ディレクトリには含まれない場合、sdscc リンク コマンドに –L オプションを
使用してすべてのアプリケーションがそれらを指定するようにする必要があります。ファイルはプラットフォーム ソ
フトウェア記述ファイルに記述されるように、標準ディレクトリに含めることをお勧めします。
ビルド済みハードウェア
プラットフォームには、オプションでビルド済みコンフィギュレーションを含めて、アプリケーションでハードウェア
関数を指定しない場合に直接使用されるようにできます。この場合、ビットストリームおよびその他の必要なファ
イルを作成するのに、プラットフォーム自体のハードウェア コンパイルを待つ必要はありません。
ビルド済みハードウェアは、プラットフォーム ディレクトリの下位ディレクトリに含める必要があります。下位ディレ
クトリのデータは、該当するビルド済みハードウェアに対して xd:bitstream、xd:export、xd:hwcf、
および xd:swcf 属性で指定します。
プラットフォーム XML に xd:bitsteam=”<relative_lib_path>/bitstream.bit” とある場合、
ディレクトリは次になります。
platforms/<platform>/<relative_lib_path>/bitstream.bit
プラットフォーム XML に xd:export=”<relative_export_path>” とある場合、ディレクトリは次に
なります。
platforms/<platform>/<relative_export_path>
プラットフォーム XML に xd:hwcf=”<relative_hwcf_path>” とある場合、ディレクトリは次になります。
platforms/<platform>/<relative_hwcf_path>
プラットフォーム XML に xd:swcf=”<relative_swcf_path>” とある場合、ディレクトリは次になります。
platforms/<platform>/<relative_swcf_path>
例:
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
18
第2章 : SDSoC プラットフォーム
xd:bitstream=”prebuilt/bitstream.bit” の場合は、次のディレクトリになります。
platforms/zc702/hardware/prebuilt/bitstream.bit
xd:export=”prebuilt/export” の場合は、次のディレクトリになります。
platforms/zc702/hardware/prebuilt/export
これには zc702.hdf が含まれます。
xd:hwcf=”prebuilt/hwcf” の場合は、次のディレクトリになります。
platforms/zc702/hardware/prebuilt/hwcf
これには partitions.xml および apsys_0.xml が含まれます。
xd:swcf=”prebuilt/swcf” の場合は、次のディレクトリになります。
platforms/zc702/hardware/prebuilt/swcf
これには devreg.c、devreg.h、portinfo.c および portinfo.h が含まれます。
ビルド済みハードウェア ファイルは、アプリケーションに通常フラグを使用したハードウェア関数が含まれな
い場合、SDSoC 環境で自動的に使用されます。
-sds-pf zc702
フル Vivado ツール ビットストリームと SD カード イメージがコンパイルされるようにするには、次の sdscc オ
プションを使用します。
-rebuild-hardware
platforms/<platform>/hardware/prebuilt フォルダーを生成するために使用したファイルは、アプリ
ケーション ELF とビットストリームを作成した後 _sds フォルダーに含まれます。
•
bitstream.bit
_sds/p0/ipi/<platform>.runs/impl_1/bitstream.bit に含まれます。
•
export
_sds/p0/ipi/<platform>.sdk (<platform>.hdf) に含まれます。
•
hwcf
_sds/.llvm (partitions.xml, apsys_0.xml) に含まれます。
•
swcf
_sds/swstubs (devreg.c、devreg.h、portinfo.c、portinfo.h) に含まれます。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
19
第2章 : SDSoC プラットフォーム
Linux ブート ファイル
SDSoC™ 環境では、ボードをブートして Linux オペレーティング システムをブートする SD カードを作成できま
す。ブートが完了すると、Linux プロンプが開き、コンパイルしたアプリケーションを実行できます。このために、
SDSoC 環境では、プラットフォームの一部として次のようなオプションジェクトが必要です。
•
「FSBL (First Stage Boot Loader)」
•
「U-Boot」
•
「デバイス ツリー」
•
「Linux イメージ」
•
「ramdisk イメージ」
SDSoC 環境ではザイリンクスの® bootgen ユーティリティ プログラムが使用され、ビットストリームと共に必要なファ
イルが 1 つの BOOT.BIN ファイルにまとめられます。このファイルは sd_card フォルダーに含まれます。エン
ド ユーザーはこのフォルダーの中身を SD カードのルートにコピーして、プラットフォームをブートします。
重要 : ブート ファイルのビルド方法の詳細は、http://wiki.xilinx.com にあるザイリンクス Wiki を参照し
てください。
FSBL (First Stage Boot Loader)
FSBL では、ブート時にビットストリームを読み込んで Zynq® アーキテクチャのプロセッシング システム (PS) がコ
ンフィギュレーションされます。
Vivado® IP インテグレーターでプラットフォームを開き、[File] → [Export] → [Export_to_SDK] をクリックし、ハー
ドウェアをザイリンクス SDK にエクスポートしてザイリンクス SDK を開きます。®このハードウェア プラットフォーム
を使用し、ザイリンクス SDK の新規プロジェクトを選択して新しいザイリンクス アプリケーションを作成してから
FSBL アプリケーションをリストから選択します。これで、FSBL 実行ファイルが作成されます。
ザイリンクス SDK の使用方法の詳細は、SDK ヘルプを参照してください。
プラットフォーム プロバイダーがザイリンクス SDK を使用して FSBL を生成する場合、SDSoC 環境フロー用の
標準ディレクトリにコピーしておく必要があります。
SDSoC システム コンパイラで FSBL が使用されるようにするには、BIF ファイルで指定する必要があります
(「ブート ファイル」を参照してください)。ファイルは、<platform_root>/boot/fsbl.elf フォルダー
に含まれる必要があります。
/* linux */
the_ROM_image:
{
[bootloader]<boot/fsbl.elf>
<bitstream>
<boot/u-boot.elf>
}
例:
samples/platforms/zc702_hdmi/boot/fsbl.elf
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
20
第2章 : SDSoC プラットフォーム
U-Boot
Das U-Boot は、オープン ソースのブートローダーです。wiki.xilinx.com のインストラクションに従って U-Boot を
ダウンロードしてプラットフォーム用にコンフィギュレーションします。
SDSoC 環境で U-Boot が使用されるようにするには、BIF ファイルで指定する必要があります (「ブート ファイル」を
参照してください)。ファイルは、<platform_root>/boot/fsbl.elf フォルダーに含まれる必要があります。
/* linux */
the_ROM_image:
{
[bootloader]<boot/fsbl.elf>
<bitstream>
<boot/u-boot.elf>
}
例 : samples/platforms/zc702_hdmi/boot/u-boot.elf
デバイス ツリー
デバイス ツリーはハードウェアを記述するデータ構造であり、詳細をオペレーティング システムにハード コード
する必要はありません。このデータ構造は、ブート時にオペレーティング システムに渡されます。ザイリンクス
SDK を使用してプラットフォームのデバイス ツリーを生成します。wiki.xilinx.com のデバイス ツリーに関する手順
に従って、デバイス ツリー ジェネレーター サポート ファイルをダウンロードし、ザイリンクス SDK で使用できるよ
うにインストールします。プラットフォームごとに 1 つのデバイス ツリーがあります。
ファイル名およびファイルのディレクトリは、プラットフォーム XML で定義されています。xd:devicetree 属性
を xd:bootFiles エレメントで使用します。カーネルを含むユニファイド ブート イメージ (.ub ファイル) を使用
する場合、デバイス ツリーおよびルート ファイル システムでは xd:devicetree 属性は定義されません。
XML 記述サンプル :
xd:devicetree=”boot/devicetree.dtb”
ディレクトリ : platforms/zc702_hdmi/boot/devicetree.dtb
Linux イメージ
Linux イメージは起動に必要なイメージです。ザイリンクスからは、プラットフォームに依存しない SDSoC プラット
フォームすべてで動作するビルド済みの Linux イメージが 1 つ提供されています。
ただし、独自のプラットフォームに合わせて Linux をコンフィギュレーションするには、wiki.xilinx.com の
方法に従って、Linux カーネルをダウンロードおよびビルドしてください。プラットフォーム用に Linux を
コンフィギュレーションする場合は、SDSoC 環境の APF ドライバーおよび CMA (Contiguous Memory
Allocator) をイネーブルにしてください。SDSoC プラットフォーム用に Linux カーネルをビルドする手順は、
<sds_install_root>/<platform>/boot/how-to-build-this-linux-kernel.txt に記述され
ています。
ファイル名およびファイルのディレクトリは、プラットフォーム XML で定義されています。xd:linuxImage
属性を xd:bootFiles エレメントで使用します。カーネル、デバイス ツリー、ルートファイルを含む
ユニファイド ブート イメージ (.ub ファイル) を使用する場合、xd:linuxImage 属性を定義して、
xd:linuxImage=”boot/image.ub” など .ub ファイルのディレクトリを指定します。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
21
第2章 : SDSoC プラットフォーム
XML 記述サンプル :
xd:linuxImage=”boot/uImage”
ディレクトリ : platforms/zc702_hdmi/boot/uImage
ramdisk イメージ
ramdisk は起動に必要なイメージです。ramdisk イメージは SDSoC 環境インストールに含まれています。このイメー
ジを変更したり新しい ramdisk を作成する必要がある場合は、wiki.xilinx.com に記載されている手順に従います。
ファイル名およびファイルのディレクトリは、プラットフォーム XML で定義されています。xd:ramdisk 属性を
xd:bootFiles エレメントで使用してください。カーネル、デバイス ツリーおよびルート ファイル システムを含
むユニファイド ブート イメージ (.ub ファイル) を使用する場合は、xd:ramdisk 属性は定義しないでください。
XML 記述サンプル
xd:ramdisk=”boot/uramdisk.image.gz”
ディレクトリ : platforms/zc702_hdmi/boot/uramdisk.image.gz
Petalinux を使用した Linux ブート ファイルの作成
PetaLinux を使用すると、Linux ブート ファイルすべてを生成できます。 この方法については、『PetaLinux ツー
ル資料 : ワークフロー チュートリアル』 (UG1156) を参照してください。PetaLinux を使用した場合も全体的な
ワークフローは同じですが、SDSoC 環境を使用して Linux ブート ファイルを生成するには、さらに追加で手順
を実行する必要があります。
1. <project-root>/subsystems/linux/config ファイルを開いて、次のコードを含めます。
CONFIG_STAGING=y
CONFIG_XILINX_APF=y
CONFIG_XILINX_DMA_APF=y
CONFIG_DMA_CMA=y
CONFIG_CMA_SIZE_MBYTES=256
CONFIG_CROSS_COMPILE="arm-xilinx-linux-gnueabi-"
CONFIG_LOCALVERSION="-xilinx-apf"
CONFIG_PRINTK_TIME=n
CONFIG_DEBUG_KERNEL=n
CONFIG_HAVE_DEBUG_KMEMLEAK=n
CONFIG_LOCKUP_DETECTOR=n
CONFIG_DEBUG_RT_MUTEXES=n
CONFIG_DEBUG_WW_MUTEX_SLOWPATH=n
CONFIG_PROVE_LOCKING=n
CONFIG_DEBUG_ATOMIC_SLEEP=n
CONFIG_PROVE_RCU=n
CONFIG_DMA_API_DEBUG=n
2. <project-root>/subsystems/linux/configs/device-tree/system-top.dts ファイ
ルを開いて、次のコードを含めます。
&clkc {
fclk-enable = <0x0>;
};
/ {
xlnk {
compatible = "xlnx,xlnk-1.0";
clock-names = "xclk0", "xclk1", "xclk2", "xclk3";
clocks = <&clkc 15>, <&clkc 16>, <&clkc 17>, <&clkc 18>;
};
};
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
22
第2章 : SDSoC プラットフォーム
3. petalinux-config –c rootfs を実行して、menuconfi システムを起動します。
4.
[Filesystem Packages] をクリックします。
5.
[base] をクリックします。
a.
[external-xilinx-toolchain] → [libstdc++6] をクリックします。
b.
[tcf-agent] → [tcf-agent] をクリックします。
6. petalinux-build コマンドを実行してプロジェクトをビルドし、<project-root>/images/linux
フォルダーに image.ub というファイルを生成します。 これには、カーネル、デバイス ツリー、ファイル
システムなどがパッケージされます。
スタンドアロン ブート ファイル
OS が不要な場合は、エンドユーザーが生成した実行ファイルを自動的に実行するブート イメージを作成
できます。
FSBL (First Stage Boot Loader)
FSBL では、ブート時にビットストリームを読み込んで Zynq® アーキテクチャのプロセッシング システム (PS) がコ
ンフィギュレーションされます。
Vivado® IP インテグレーターでプラットフォームを開き、[File] → [Export] → [Export_to_SDK] をクリックし、ハー
ドウェアをザイリンクス SDK にエクスポートしてザイリンクス SDK を開きます。®このハードウェア プラットフォーム
を使用し、ザイリンクス SDK の新規プロジェクトを選択して新しいザイリンクス アプリケーションを作成してから
FSBL アプリケーションをリストから選択します。これで、FSBL 実行ファイルが作成されます。
ザイリンクス SDK の使用方法の詳細は、SDK ヘルプを参照してください。
プラットフォーム プロバイダーがザイリンクス SDK を使用して FSBL を生成する場合、SDSoC 環境フロー用の
標準ディレクトリにコピーしておく必要があります。
SDSoC システム コンパイラで FSBL が使用されるようにするには、BIF ファイルで指定する必要があります
(「ブート ファイル」を参照してください)。ファイルは、<platform_root>/boot/fsbl.elf フォルダー
に含まれる必要があります。
/* linux */
the_ROM_image:
{
[bootloader]<boot/fsbl.elf>
<bitstream>
<boot/u-boot.elf>
}
例:
samples/platforms/zc702_hdmi/boot/fsbl.elf
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
23
第2章 : SDSoC プラットフォーム
実行ファイル
SDSoC 環境でブート イメージに含まれる実行ファイルが使用されるようにするには、BIT ファイルで設定
する必要があります (「ブート ファイル」を参照)。
/* standalone */
the_ROM_image:
{
[bootloader]<boot/fsbl.elf>
<bitstream>
<elf>
}
SDSoC 環境では、生成されたビットストリームと ELF ファイルが自動的に挿入されます。
FreeRTOS コンフィギュレーション/バージョン変更
SDSoC™ 環境における FreeRTOS サポートでは、v8.2.1 ソフトウェア配布に含まれているデフォルトの
FreeRTOSConfig.h を使用してビルド済みライブラリが定義済みリンカー スクリプトと共に使用されます。
FreeRTOS v8.2.1 コンフィギュレーションまたはそのリンカー スクリプトを変更、または別のバージョンの
FreeRTOS を使用するには、次の手順に従ってください。
1. <path_to_install>/SDSoC/<version>/platforms/zc702 フォルダーをローカルのフォル
ダーにコピーします。
2.
デフォルトのリンカー スクリプトを変更するには、
<path_to_your_platform>/zc702/freertos/lscript.ld を変更します。
3.
FreeRTOS のコンフィギュレーション (FreeRTOSConfig.h) またはバージョンを変更するには、次
を実行します。
a.
FeeRTOS ライブラリを libfreertos.a としてビルドします。
b.
インクルード ファイルを <path_to_your_platform>/zc702/freertos/include フォル
ダーに追加します。
c.
ライブラリ libfreertos.a を <path_to_your_platform>/zc702/freertos/li に追
加します。
d. <path_to_your_platform>/zc702/zc702_sw.pfm ファイルの ("xd:os="freertos"
(xd:includeDir="freertos/include" and xd:libDir="freertos/lib") 行を含
むセクションでパスを変更します。
4.
makefil で SDSoC プラットフォーム オプションを –sds-pf zc702 から –sds-pf
<path_to_your_platform>/zc702 に変更します。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
24
第2章 : SDSoC プラットフォーム
5.
ライブラリをビルドし直します。
SDSoC 環境のフォルダー <path_to_install>/SDSoC/2015.2/tps/FreeRTOS には、コンフィ
ギュレーション済み FreeRTOS v8.2.1 ライブラリ libfreertos.a をビルドするのに使用したソース
ファイル、単純な makefil 、および SDSoC_readme.txt ファイルが含まれています。その他の必要条
件や手順は、SDSoC_readme.txt ファイルを参照してください。
a.
コマンド シェルを開きます。
b.
SDSoC環境の <path_to_install>/SDSoC/2015.2/settings64 スクリプトを実行して、
Zynq®-7000 AP SoC 向けの ARM GNU ツールチェーンを含むコマンド ライン ツールを実行する
環境を設定します。
c.
フォルダーをローカル フォルダーにコピーします。
d. FreeRTOSConfig.h を変更します。
e.
make コマンドを実行します。
FreeRTOS v8.2.1 を使用していない場合は、SDSoC_readme.txt ファイルでソースがオフィシャル ソフトウェ
ア配布からどのように作成されたかを示す注記を確認してください。ZIP の解凍後、少数の変更 (デモ アプリ
ケーション main.c に含まれる memcpy、memset、および memcmp をライブラリ ソース ファイルへ追加し、
Task.h から task.h へのインクルード ファイル リファレンスを変更) が加わっていますが、フォルダー構造は
元のままです。フォルダー構造を維持すると、コンフィギュレーション済み FreeRTOS v8.2.1 ライブラリをビルド
するために作成された makefil を使用できます。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
25
第3章
C 呼び出し可能ライブラリ
このセクションでは、C 呼び出し可能ライブラリの作成方法を示します。C 呼び出し可能ライブラリを使用すると
SDSoC コンパイラでアプリケーション プログラムを関数ライブラリにリンクできます。関数ライブラリは、その他のス
タティック ライブラリ同様に、VHDL または Verilog などのハードウェア記述言語で記述されている IP ブロックと
共にプログラマブル ロジックにインプリメントされます。C 呼び出し可能ライブラリでは、sdscc でコンパイ
ルされたアプリケーションによるプラットフォームに含まれる IP ブロックへのアクセスも提供されます (「例 :
SDSoC でのダイレクト I/O のエクスポート」を参照)。
図 3–1 : C 呼び出し可能ライブラリの作成および使用
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
26
第3章 : C 呼び出し可能ライブラリ
次に、SDSoC プラットフォームのソフトウェア呼び出し可能ライブラリに含まれているエレメントを示します。
•
「ヘッダー ファイル」
関数プロトタイプ
•
「スタティック ライブラリ」
–
関数定義
–
IP コア
–
IP コンフィギュレーション パラメーター
–
関数引数マップ
ヘッダー ファイル
この関数プロトタイプは、すべての C/C++ スタティック ライブラリ同様、ヘッダーファイルに含まれています。
ヘッダー ファイルでは関数のインターフェイスが定義されます。このヘッダー ファイルがユーザーのソース
コードに含まれます。
例:
// FILE: fir.h
#define N 256
void fir(signed char X[N], short Y[N]);
配列 X はフィルター入力で Y はフィルター出力です。
スタティック ライブラリ
SDSoC 環境のスタティック ライブラリには、プログラマブル リソース上でソフトウェア関数を実行できるように
するエレメントが複数含まれています。
関数定義
関数インターフェイスではライブラリへのエントリ ポイントが定義されます。関数は、ユーザー コードから呼
び出すことができます。
SDSoC 環境では関数のボディが IP ブロック間とのデータ転送を実行する API 呼び出しで置き換えられる
ので、関数の中身は不要です。これらの呼び出しは、SDSoC 環境で作成されたデータ モーション ネット
ワークに依存します。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
27
第3章 : C 呼び出し可能ライブラリ
例:
// FILE: fir.c
#include "fir.h"
#include <stdlib.h>
#include <stdio.h>
void fir(signed char X[N], short Y[N])
{
// SDSoC replaces function body with API calls for data transfer
}
注記 : SDSoC 環境で使用される API 呼び出しでは、stdlib.h および stdio.h を使用することがこのファ
イルに記述されている必要があります。
IP コア
IP コアは Vivado® ツールと互換性がある HDL IP で、ライブラリ関数のハードウェア インプリメンテーションとして
使用されます。この IP コアは、Vivado ツールの IP リポジトリまたは別のディレクトリに含めることができます。ライ
ブラリが使用されるときに該当する IP コアがハードウェア システムにインスタンシエートされます。
『Vivado Design Suite ユーザー ガイド : IP を使用した設計』 (UG896) に説明されているように、Vivado Design
Suite で IP をパッケージする必要があります。Vivado IP パッケージャー ツールでは、HDL、その他のソース ファ
イル、および IEEE-1685 IP-XACT 規格に準拠した IP 定義ファイル (component.xml) のディレクトリ構造
が作成されます。また、パッケージャーでは Vivado Design Suite で必要なディレクトリおよびそのディレクトリ
に含まれるファイルを含んだアーカイブ ZIPファイルも作成されます。
IP では AXI4、AXI4-Lite、および AXI4 Stream インターフェイスをエクスポートできます。IP 制御レジスタは、アド
レス オフセット 0x0 に配置して、次の仕様に準拠させる必要があります。 この準拠は、Vivado HLS で生成され
る IP のネイティブ axilite 制御インターフェイスに一致しています。
制御信号は通常は簡単に判別できます。ap_start 信号で IP 実行が開始され、ap_done 信号で IP のタ
スクの完了が示され、ap_ready 信号で IP を開始できることが示されます。ap_ctrl_hs 定義の詳細は、
Vivado の高位合成に関する資料を参照してください。
// 0x00 : Control signals
// bit 0 - ap_start (Read/Write/COH)
// bit 1 - ap_done (Read/COR)
// bit 2 - ap_idle (Read)
// bit 3 - ap_ready (Read)
// bit 7 - auto_restart (Read/Write)
// others - reserved
// (COR = Clear on Read, COH = Clear on Handshake)
重要 : HDL IP を Vivado Design Suite に統合する方法の詳細は、『Vivado Design Suite ユーザー ガイド : カ
スタム IP の作成およびパッケージ』 (UG1118) を参照してください。
IP コンフィギュレーション パラメーター
HDL IP コアのほとんどは、合成時にカスタマイズできます。カスタマイズは、IP コアの動作を定義する IP パラ
メーターで設定できます。SDSoC 環境ではコアが生成されたシステムにインスタンシエートされるときにこの
情報が使用されます。この情報は XML ファイルに含まれています。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
28
第3章 : C 呼び出し可能ライブラリ
xd:component 名は spirit:component 名と同じで、xd:parameter 名はそれぞれ IP のパラメーター名
にする必要があります。IP インテグレーターに含まれるパラメーター名を表示するには、ブロックを右クリックして
[Edit IP Meta Data] をクリックし、[IP Customization Parameters] を表示します。
例:
<!—- FILE: fir.params.xml -><?xml version="1.0" encoding="UTF-8"?>
<xd:component xmlns:xd="http://www.xilinx.com/xd" xd:name="fir_compiler">
<xd:parameter xd:name="DATA_Has_TLAST" xd:value="Packet_Framing"/>
<xd:parameter xd:name="M_DATA_Has_TREADY" xd:value="true"/>
<xd:parameter xd:name="Coefficient_Width" xd:value="8"/>
<xd:parameter xd:name="Data_Width" xd:value="8"/>
<xd:parameter xd:name="Quantization" xd:value="Integer_Coefficients"/>
<xd:parameter xd:name="Output_Rounding_Mode" xd:value="Full_Precision"/>
<xd:parameter xd:name="CoefficientVector"
xd:value="6,0,-4,-3,5,6,-6,-13,7,44,64,44,7,-13,-6,6,5,-3,-4,0,6"/></xd:component>
関数引数マップ
SDSoC システム コンパイラには、ライブラリの関数プロトタイプから、関数をインプリメントする IP ブロックで
定義されているハードウェア インターフェイスへのマップが必要です。この情報は、関数マップ XML ファイ
ルに含まれます。
次の情報が含まれます。
•
関数名 : コンポーネントにマップされる関数の名前
•
コンポーネント リファレンス : IP-XACT VNLV (Vendor-Name-Library-Version) ID からの IP タイプの名前
関数がプラットフォームに関連付けられている場合は、コンポーネント リファレンスはプラットフォーム名で
す。「例 : SDSoC プラットフォームのダイレクト I/O のエクスポート」を参照してください。
•
C 引数名 : 関数引数のアドレス表現 (例 : x (スカラーを値で渡す) または *p (ポインターで渡す))
注記 :
関数マップの引数名は関数定義の引数と一致しており、同じ順序である必要があります。
•
関数引数の方向 : in (関数への入力引数) または out (関数への出力引数)。SDSoC 環境では現在の
ところ inout 関数引数はサポートされません。
•
バス インターフェイス : 関数引数に対応する IP ポートの名前。プラットフォーム コンポーネントでは、
この名前はプラットフォーム インターフェイス xd:name であり、対応するプラットフォーム IP の実際
のポート名ではありません。
•
ポート インターフェイス タイプ : 対応する IP ポート インターフェイス タイプ。 現在のところ、aximm (ス
レーブのみ) または axis である必要があります。
•
アドレス オフセット : aximm スレーブ ポートにマップされる引数に必要な 16 進数アドレス (0x40 など)
•
データ幅 : データごとのビット数
•
配列のサイズ : 配列引数のエレメント数
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
29
第3章 : C 呼び出し可能ライブラリ
次に、samples/fir_lib/build からの Vivado FIR Filter Compiler IP コンフィギュレーション用の関数
マップを示します。
<!—- FILE: fir.fcnmap.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<xd:repository xmlns:xd="http://www.xilinx.com/xd">
<xd:fcnMap xd:fcnName="fir" xd:componentRef="fir_compiler">
<xd:arg xd:name="X"
xd:direction="in"
xd:portInterfaceType="axis"
xd:dataWidth="8"
xd:busInterfaceRef="S_AXIS_DATA"
xd:arraySize="32"/>
<xd:arg xd:name="Y"
xd:direction="out"
xd:portInterfaceType="axis"
xd:dataWidth="16"
xd:busInterfaceRef="M_AXIS_DATA"
xd:arraySize="32"/>
<xd:latencyEstimates xd:worst-case="20" xd:average-case="20" xd:best-case="20"/>
<xd:resourceEstimates xd:BRAM="0" xd:DSP="1 xd:FF="200" xd:LUT="200"/>
</xd:fcnMap>
</xd:repository>
ライブラリの作成
ザイリンクスでは、SDSoC ライブラリを作成するための sdslib というユーティリティを提供しています。
使用方法
sdslib [arguments] [options]
引数 (必須)
引数
説明
-lib <libname>
作成または追加するライブラリの名前
<function_name file_name>+
関数名とファイル名のペアを 1 つ以上指定します。
例 : fir fir.c
-vlnv <v>:<l>:<n>:<v>
使用する IP コアを VLNV で指定します。たとえば「-vlnv
xilinx.com:ip:fir_compiler:7.1」のように指定し
ます。
-ip-map <file>
IP 関数マップとして使用するファイルを指定します。
-ip-params <file>
IP パラメーターとして使用するファイルを指定します。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
30
第3章 : C 呼び出し可能ライブラリ
オプション
説明
-ip-repo <path>
HDL IP リポジトリ検索パスを追加します。
-os <name>
ターゲット オペレーティング システムを指定します。
•
linux (デフォルト)
•
standalone (ベアメタル)
ヘルプ情報を表示します。
--help
たとえば fir filter IP コア用の SDSoC ライブラリを作成するには、次のコードを使用します。
> sdslib -lib libfir.a \
fir fir.c \
fir_reload fir_reload.c \
fir_config fir_config.c \
-vlnv xilinx.com:ip:fir_compiler:7.1 \
-ip-map fir_compiler.fcnmap.xml \
-ip-params fir_compiler.params.xml
この例では、sdslib により fir.c ファイルに含まれる fir 関数、fir_reload.c ファイルに含まれる
fir_reload 関数、および fir_config.c ファイルに含まれる fir_config 関数が libfir.a スタティッ
ク ライブラリにアーカイブされます。fir_compiler IP コアは -vlnv を使用して指定され、関数マップは
–ip-map、IP パラメーターは –ip-params を使用して指定されています。
プラットフォーム IP の SDSoC ハードウェア関数
ライブラリをインプリメントする IP ブロックがハードウェア プラットフォームに含まれている場合、関連する関数
マップも SDSoC 環境ハードウェア プラットフォーム記述ファイルに含まれている必要があります。 Vivado®
Design Suite 2015.2 にはこの関数マップを IP ブロックに関連付ける方法がありませんので、ユーザーがハード
ウェア プラットフォーム記述ファイルに手動で追加する必要があります。
関数マップと <IP>.xml を作成した後、<xd:fcnMap> と <xd:component> エレメントをハードウェア プ
ラットフォーム記述ファイル <platform>_hw.pfm の最後、プラットフォーム コンポーネントの後、閉じ
タグ </xd:repository> の前にコピーします。
また、IP 内の IP-XACT component.xml からのコンポーネント宣言を提供する必要もあります。このコンポー
ネント宣言は、SDSoC 環境のコマンド シェルで次のコマンドを実行すると作成できます。
xsltproc --stringparam P_XD_AUTOESL_COMP TRUE --stringparam \
P_XD_COMP_TYPE accelerator -o <IP>.xml \
<sds_root>/scripts/xsd/ipxact2xdcomp.xsl \
<platform_root>/vivado/<platform>.ipdefs/repo/<IP_name>/<IP_name>/component.xml
次の表に、コマンド ラインのパラメータを示します。
パラメーター
説明
<sds_root>
SDSoC インストールのルート ディレクトリ
<platform>
プラットフォーム名
<platform_root>
プラットフォーム ディレクトリ
<IP>
IP 名
<IP_name_version>
Vivado プロジェクトに含まれる IP ディレクトリ
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
31
第3章 : C 呼び出し可能ライブラリ
ライブラリのテスト
ライブラリをテストするには、そのライブラリを使用するプログラムを作成します。ソース コードに該当するヘッ
ダー ファイルを含めます。ライブラリ関数を呼び出すコードをコンパイルするときに、–I オプションを使用して
ヘッダー ファイルへのパスを含めます。
> sdscc –c –I<path to header> –o main.o main.c
ライブラリにリンクするには、–L および –l オプションを使用します。
> sdscc –sds-pf zc702 ${OBJECTS} –L<path to library> -lfir –o
fir.elf
上記の例では、コンパイラにより <path to library> に含まれる ライブラリ libfir.a が使用されます。
SDSoC IDE でライブラリを使用する方法については、「C 呼び出し可能な IP ライブラリの使用」も参照してください。
C 呼び出し可能ライブラリの例 : Vivado FIR Compiler IP
SDSoC 環境インストールの samples/fir_lib/build ディレクトリには、ライブラリをビルドする方法を示す
例が含まれています。この例では、Vivado® Design Suite で FIR Compiler IP のシングル チャネルのリロード可
能なフィルター コンフィギュレーションが使用されています。IP のデザインと一致するよう、すべての通信および
制御は AXI4-Stream チャネルを介して実行します。
SDSoC 環境インストールの samples/fir_lib/build ディレクトリには、ライブラリを使用する方法を示す
例が含まれています。SDSoC IDE でライブラリを使用する方法については、「C 呼び出し可能なライブラリ
の使用」も参照してください。
C 呼び出し可能ライブラリの例 : HDL IP
samples/rtl_lib/arraycopy/build ディレクトリには、Vivado ツールでパッケージされた RTL IP の例
が含まれています。この例には、2 個の IP コアが含まれており、それぞれのコアで配列の M エレメントが入
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
32
第3章 : C 呼び出し可能ライブラリ
力から出力にコピーされます。 ここでの M は、スカラー値を意味し、この値は関数呼び出しごとに異な
る可能性があります。
•
arraycopy_aximm : IP の AXI マスター インターフェイスを使用して配列が転送されます。
•
arraycopy_axis : AXI4-Stream インターフェイスを使用して配列が転送されます。次に IP のレジス
タ マップを示します。
// arraycopy_aximm
// 0x00 : Control signals
// bit 0 - ap_start (Read/Write/COH)
// bit 1 - ap_done (Read/COR)
// bit 2 - ap_idle (Read)
// bit 3 - ap_ready (Read)
// bit 7 - auto_restart (Read/Write)
// others - reserved
// 0x10 : Data signal of ap_return
// bit 31~0 - ap_return[31:0] (Read)
// 0x18 : Data signal of a
// bit 31~0 - a[31:0] (Read/Write)
// 0x1c : reserved
// 0x20 : Data signal of b
// bit 31~0 - b[31:0] (Read/Write)
// 0x24 : reserved
// 0x28 : Data signal of M
// bit 31~0 - M[31:0] (Read/Write)
// 0x2c : reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)
// arraycopy_axis
// 0x00 : Control signals
// bit 0 - ap_start (Read/Write/COH)
// bit 1 - ap_done (Read/COR)
// bit 2 - ap_idle (Read)
// bit 3 - ap_ready (Read)
// bit 7 - auto_restart (Read/Write)
// others - reserved
// 0x10 : Data signal of ap_return
// bit 31~0 - ap_return[31:0] (Read)
// 0x18 : Data signal of M
// bit 31~0 - M[31:0] (Read/Write)
// 0x1c : reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)
makefil では stdlib を使用してライブラリを作成する方法が示されます。ライブラリをビルドするには、
SDSoC IDE でターミナル シェルを開いてビルド ディレクトリから次のコマンドを実行します。
–
make librtl_arraycopy.a : Linux アプリケーションのライブラリをビルドします。
–
make standalone/lib_rtl_arraycopy.a : スタンドアロン アプリケーションのライブラリをビル
ドします。samples/rtl_lib/arraycopy/use ディレクトリには、両方の IP を使用した単純なテス
ト例が含まれています。ターミナル シェルで make コマンドを実行して両方のハードウェア関数を実行
する Linux アプリケーションを作成してください。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
33
第3章 : C 呼び出し可能ライブラリ
SDSoC IDE でライブラリを使用する方法については、「C 呼び出し可能なライブラリの使用」も参照してください。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
34
第4章
チュートリアル : SDSoC プラットフォーム
の作成
このチュートリアルでは、SDSoC™ 環境で Vivado® Design Suite を使用してビルドされたハードウェア システムか
ら単純なサンプル プラットフォームを作成します。
Vivado ツールでビルドされたデザインのコネクティビティ インターフェイス (AXI および AXI4-Stream、クロック、リ
セット、および割り込みポートを含む) は、プラットフォーム ハードウェア記述で定義します。このインターフェイス
は、SDSoC コンパイラで 1 つのコンポーネントととして認識されるプラットフォーム ハードウェア システムを含み、
ベース プラットフォーム ハードウェアの IP インテグレーターのブロック図 (BD) に対応します。このインターフェ
イスを属性を使用して BD および BD 内の IP ブロックに指定します。
SDSoC ハードウェア プラットフォーム仕様を作成するプロセスでは、Vivado ツールの Tcl コンソールで Tcl コマ
ンドを使用して IP インテグレーターでプラットフォーム インターフェイスを指定し、Vivado ツールを使用してハー
ドウェア記述を SDSoC にエクスポートします。インターフェイスの各ポートは明示的な外部ポートではなく、IP イ
ンテグレーターのブロック図に含まれる IP の特定のポートへの参照です。
Zynq® SoC をターゲットとする Vivado IP インテグレーター システムであればどれでも SDSoC 環境プラット
フォームのベースとして使用できます。SDSoC 環境では、必要に応じて AXI インターフェイスをイネーブルにす
るため Processing System 7 IP のパラメーターが自動的に設定されますが、それ以外はプラットフォーム シ
ステムの IP は変更しないでください。
SDSoC 環境に含まれている <sdsoc_root>/platforms ディレクトリのプラットフォームを参照すると役立つ場
合があります。また、samples/platform ディレクトリにプラットフォームのビルドに関する次の例が含まれています。
•
pf_axis : SDSoC プラットフォームのダイレクト I/O のエクスポート
•
zc702_led : プラットフォーム内の IP のソフトウェア制御
•
zc702_acp : プラットフォームと sdscc での AXI バス インターフェイスの共有
例 : SDSoC プラットフォームのダイレクト I/O のエクスポート
これは SDSoC™ 環境に含まれる ZC702 プラットフォームを使用した簡単な例で、Zynq® デバイスのプログラマ
ブル ロジック (PL) へのプロキシ直接入力に AXI4-Stream マスターを提供するる IP ブロックと、PL からのプロキ
シ直接出力に AXI4-Stream スレーブを提供する IP ブロックが含まれます。
実際のプラットフォームでは、これらのブロックは SDSoC 環境でアクセス可能な PL に対して入力および出力を
供給するプラットフォーム特定の IP に置き換えられます。
推奨 : このチュートリアルは、<sds_root>/samples/platforms/pf_axis/ のサンプルを使用し
ながら進めてください。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
35
第4章 : チュートリアル : SDSoC プラットフォームの作成
Vivado® デザインは、Tcl スクリプト pf_axis.bd.tcl にキャプチャされています。ハードウェア プラットフォー
ムをビルドするには、SDSoC 環境ターミナル シェルを開き、<sds_root>/samples/platforms/pf_axis
を新しいディレクトリにコピーし、cd を使用してこのディレクトリに移動します。make vivado コマンドでハー
ドウェア プラットフォームをビルドします。スクリプトが終了したら、$vivado pf_axis.xpr コマンドを使
用して作成された Vivado プロジェクトを開きます。
ブロック図を開きます。次の図に示すようなブロック図が表示されます。
図 4–1 : ブロック図
プラットフォームの直接入力 (出力) ポートは、io2axis_0 (pf_write_0) IP の終端されていない rbuf
(wbuf) ポートです。axis2io_0 ブロックの to_io 出力は io2axis_0ブロックの from_io 入力に接続
されているのでテストできますが、実際のプラットフォームではそれらのポートはほかの IP に接続され、最
終的に Zynq デバイスの PL ピンに接続されます。
SDSoC プラットフォーム インターフェイスでは、AXI4-Stream インターフェイスに SDSoC 環境のデータ ムーバー
で使用される IP に準拠するために TLAST および TKEEP 側帯波信号が必要です。これらの側帯波信号は、次
の図に示すように IP インテグレーターでポートを展開すると確認できます。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
36
第4章 : チュートリアル : SDSoC プラットフォームの作成
図 4–2 : AXI4-Stream のバス接続
プラットフォーム内に完全に含まれる AXI4-Stream のバスには、これらの側帯波信号は必要ありません。
推奨 : 現在のところ、エクスポートされた AXI および AXI4-Stream プラットフォーム インターフェイスは同じ
データ モーション クロック (dmclkid) で動作する必要があります。プラットフォーム I/O に SDSoC 環境のプラッ
トフォーム クロック以外のクロックが必要な場合は、Vivado IP カタログの AXI Data FIFO IP をクロック乗せ換えに
使用できます。TLAST および TKEEP 側帯波信号が生成されるように IP をコンフィギュレーションしてください。
Vivado Design Suite での SDSoC プラットフォームの Tcl コマンド
SDSoC™ 環境プラットフォームへのハードウェア ポート インターフェイスには、プラットフォーム IP (たとえば
Processing System 7 IP コア) の未使用の AXI または AXI4-Stream バス インターフェイスのセット、Processing
System 7 IP ブロックの未使用の割り込み、クロック ポートおよび同期されたリセット (Vivado® IP カタログの
Processor System Reset IP から提供) などが含まれます。
1.
SDSoC 環境のターミナル シェルから pf_axis.bd.tcl をテキスト エディターで開きます。このファイル
のほとんどは、IP インテグレーターの write_bd_tcl コマンドで生成されています。
2.
この Tcl ファイルの最後に近い部分 (411 行目) までスクロール ダウンして、「Vivado IP インテグレー
ターの Tcl コマンド」に示すように API 呼び出しを確認して、SDSoC プラットフォーム インターフェ
イスをマークします。
3.
次のコマンドを使用して IP インテグレーターをイネーブルにし、追加のメタデータをエクスポートして、
SDSoC ハードウェア プラットフォーム記述を作成します。
set_param project.enablePlatformHandoff true
4.
次のコマンドを使用して、プラットフォームのデフォルト クロックを宣言します。
set_property SDSOC_PFM.PFM_CLOCK TRUE [get_bd_pins /ps7/FCLK_CLK2]
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
37
第4章 : チュートリアル : SDSoC プラットフォームの作成
5.
次のコマンドを使用して、プラットフォームのクロックとそれに関連する ID を宣言します。
set_property SDSOC_PFM.CLOCK_ID 2 [get_bd_pins /ps7/FCLK_CLK2]
set_property SDSOC_PFM.MARK_SDSOC true [get_bd_pins /ps7/FCLK_CLK2]
6.
プラットフォーム リセットは、proc_sys_reset IP ブロックを使用して特定のクロックに同期させる
必要があります。
次のコマンドでプラットフォーム リセット バンドルを指定します。
set_property SDSOC_PFM.MARK_SDSOC true [get_bd_pins /proc_sys_reset_2/interconnect_aresetn]
set_property SDSOC_PFM.MARK_SDSOC true [get_bd_pins /proc_sys_reset_2/peripheral_aresetn]
set_property SDSOC_PFM.MARK_SDSOC true [get_bd_pins /proc_sys_reset_2/peripheral_reset]
残りの set_property コマンド タグが同様にリセットされます。
7.
次のコマンドを使用して、ダイレクト I/O をプロキシする io2axis マスターと axis2io スレーブ
AXI4-Stream バス インターフェイスを宣言します。
set_property SDSOC_PFM.MARK_SDSOC true [get_bd_intf_pins /io2axis_0/rbuf]
set_property SDSOC_PFM.MARK_SDSOC true [get_bd_intf_pins /axis2io_0/wbuf]
このスクリプトに含まれるその他すべてのコマンドは、Vivado ツールの標準コマンドです。次のコマンドでは、
Vivado Design Suite からハードウェア ハンドオフ ファイルが SDSoC 環境にエクスポートされ、HSI ユーティリティ
が起動されて、プラットフォーム記述が生成されます。
write_hwdef -file "[file join ${pf}.sdk ${pf}_wrapper.hdf]"
load_features hsi
hsi::open_hw_design <platform>.sdk/<platform>_wrapper.hdf
hsi::generate_target {sdsoc} [hsi::current_hw_design] –dir <target_directory>
これにより、ハードウェア プラットフォーム記述ファイル hsi/pf_axis.pfm が生成されます。make
pf_axis ターゲットを実行したら、このファイルがプラットフォーム ディレクトリにコピーされ、ファイル名
が pf_axis_hw.pfm に変わります。プラットフォーム記述ファイルをテキスト エディターで開いて、
pf_axis.bd.tcl で指定されたクロック、リセット、およびバス インターフェイスを検索します。
重要 :
すべてのメタデータが Tcl API を使用して Vivado ツールから自動的に生成されるわけではないので、このメタ
データは生成した XML ファイル <platform>_hw.pfm に手動で追加する必要があります。
既知の問題 : TLAST および TKEEP 側帯波信号を含む Platform AXI4-Stream バス インターフェイスには、該
当する xd:busInterface エレメントの xd:hasTlast 属性 (値は true) が必ず含まれている必要があり
ますが、自動的には検出されません。
SDSoC プラットフォーム ソフトウェア ライブラリ
SDSoC システム コンパイラ (sdscc/sds++) では、ハードウェア関数間のアプリケーション プログラム デー
タ フローがプラットフォームとプログラマブル ロジック ファブリックにインプリメントされたアクセラレータに含
まれる IP 間の接続にマップされます。
このため、ダイレクト I/O インターフェイスをエクスポートするすべてのプラットフォーム IP には、アプリケー
ションを呼び出してエクスポートされたインターフェイスに接続する C 呼び出し可能ライブラリが含まれている
必要があります。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
38
第4章 : チュートリアル : SDSoC プラットフォームの作成
「ライブラリの作成」に示すように、pf_lib/Makefile に含まれる make target の all 引数では、SDSoC
sdslib ユーティリティを使用して、スタティック C 呼び出し可能ライブラリが作成されるようになっています。
また、sdslib を使用すると、HDL IP をアプリケーション内に sdscc でリンクできるアクセラレータ関数とし
てラップすることもできます。
1.
I/O IP の C 呼び出し可能インターフェイスを定義します。SDSoC ツールのコマンド シェルで cd を使用し
て pf_lib ディレクトリに移動します。
C 呼び出し可能な関数を必要とするプラットフォーム IP は、pf_read および pf_write の 2 つです。
ハードウェア関数は、次のように pf_read.cpp および pf_write.cpp で定義されます。
void pf_read(u64 rbuf[N]) {}
void pf_write(u64 wbuf[N]) {}
関数のボディは空で、sdscc コンパイラによりスタブ関数のボディにデータを移動するための適切なコー
ドが記述されます。関数の引数がすべて IP ポートに一貫してマップされている場合にのみ、複数の関
数を 1 つの IP にマップできます (たとえば、サイズの異なる 2 つの配列引数はそれに該当する IP の
シングル AXIS ポートにはマップできません)。
2.
関数インターフェイスから該当する IP ポートへのマップを定義します。C 呼び出し可能インターフェ
イスの各関数では、関数引数から IP ポートへのマップを定義する必要があります。pf_read および
pf_write IP のマップは、pf_read.fcnmap.xml および pf_write.fcnmap.xml にキャプチャさ
れます。pf_read.fcnmap.xml を開きます。
<xd:fcnMap xd:fcnName="pf_read" xd:componentRef="pf_axis">
<xd:arg
xd:name="read_buf"
xd:direction="out"
xd:busInterfaceRef="io2axis_0_rbuf"
xd:portInterfaceType="axis"
xd:arraySize="128"
xd:dataWidth="64"/>
<xd:latencyEstimates xd:best-case="258" xd:worst-case="258" xd:average-case="258"/>
<xd:resourceEstimates xd:LUT="62" xd:FF="47" xd:BRAM="0" xd:DSP="0"/>
</xd:fcnMap>
各関数引数には、名前、方向、IP バス インターフェイス名、インターフェイス タイプ、およびデータ幅が必
要です。 配列引数には配列サイズを、スカラー引数にはレジスタ オフセットを指定する必要があります。
SDSoC 環境では、高位スケジュール中にレイテンシ予測が使用されます。
重要 : fcnMap はプラットフォーム関数 pf_read をプラットフォーム コンポーネント pf_axisのプラット
フォーム バス インターフェイス pf_read_0_rbuf に関連付けますが、関数をインプリメントする pf_axis
プラットフォーム内の実際の IP のバス インターフェイスには関連付けません。pf_axis_hw.pfm の
io2axis_0_rbuf (axis2io_0_wbuf) という名前の pf_axis バス インターフェイス (“port”) には、
xd:instanceRef 属性 (io2axis_0) 内に IP への実際のマップが含まれています。
3.
IP のパラメーターを指定します。
IP カスタマイズ パラメーターは、コンパイル時に XML ファイルで設定する必要があります。この演習
では、プラットフォーム IP にパラメーターが設定されていないので、pf_read.params.xml および
pf_write.params.xml は特に単純になっています。別の例を参照する場合は、SDSoC インストール ディ
レクトリから <sdsroot>/samples/fir_lib/build/fir_compiler.{fcnmap,params}.xml を
開いてください。その例では、複数の関数が Vivado FIR Compiler IP コアにマップされます。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
39
第4章 : チュートリアル : SDSoC プラットフォームの作成
4.
ライブラリをビルドします。
sdslib コマンドは次のようになります。
sdslib -lib libpf_axis.a \
pf_read pf_read.cpp \
-vlnv xilinx.com:sds:pf_read:1.0 \
-ip-map pf_read.fcnmap.xml \
-ip-repo ./xilinx_com_sds_pf_read_1_0 \
-ip-params pf_read.params.xml
sdslib -lib libpf_axis.a \
pf_write pf_write.cpp \
-vlnv xilinx.com:sds:pf_write:1.0 \
-ip-map pf_write.fcnmap.xml \
-ip-repo ./xilinx_com_sds_pf_write_1_0 \
-ip-params pf_write.params.xml
ライブラリの sdslib は繰り返し呼び出すことができます。呼び出しごとに、ライブラリに関数が追加されます。
SDSoC プラットフォーム ソフトウェア記述
SDSoC™ プラットフォーム ソフトウェア記述ファイルは XML ファイルです。 このファイルには プラットフォーム ラ
イブラリにリンクし、ハードウェア プラットフォームでアプリケーションを実行するブート イメージを作成するのに必
要な情報が含まれています。現段階では、この手順は自動的に実行されません。
pf_axis プラットフォームでは ZC702 ブート ファイルがすべて再利用されます。
1.
プラットフォームのソフトウェア記述 pf_axis/pf_axis/pf_axis_sw.pfm を開きます。
次のエレメントではプラットフォーム ディレクトリで作成されたプラットフォーム ソフトウェア ライブラリの保存
場所が SDSoC 環境に示されます。
<xd:libraryFiles
xd:os="linux"
xd:includeDir="arm-xilinx-linux-gnueabi/include"
xd:libDir="arm-xilinx-linux-gnueabi/lib"
xd:libName=”pf_axis”
/>
同様にブート ファイルは次のように指定されます。
<xd:bootFiles xd:os="linux"
xd:bif="boot/linux.bif"
xd:readme=”boot/generic.readme”
xd:devicetree="boot/devicetree.dtb"
xd:linuxImage="boot/uImage"
xd:ramdisk="boot/uramdisk.image.gz"
/>
pf_axis プラットフォームのビルド
1.
SDSoC™ 環境プラットフォームをビルドするには、SDSoC ターミナル シェルで次を実行します。
$ make pf_axis
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
40
第4章 : チュートリアル : SDSoC プラットフォームの作成
pf_axis ビルド ターゲットでは SDSoC 環境プラットフォームのすべてのコンポーネントがまとめられます。プラッ
トフォームの pf_axis ルート ディレクトリが作成されて、Vivado プロジェクトのアーカイブが vivado サブディ
レクトリに展開されます。次に make –C pf_lib が呼び出されてソフトウェア ライブラリが作成され、ライブラリ
とヘッダーが arm-xilinx-linux-gnueabi ディレクトリに、pf_axis_hw.pfm および pf_axis_sw.pfm
メタデータ ファイルがプラットフォーム ディレクトリにコピーされます。
pf_axis プラットフォームのテスト
pf_axis/pf_test/pf_test.cpp には、単純な C++ アプリケーションが含まれています。この関数の重要
なポイントの 1 つは、sds_alloc を使用してバッファーが割り当てられるという点です。
u64 *wbuf = (u64 *) sds_alloc(N * sizeof(u64));
u64 *rbuf = (u64 *) sds_alloc(N * sizeof(u64));
もう 1 つは、プラットフォームの関数が実行されてプラットフォーム入力から読み出されるか、プラットフォーム出
力に書き込まれるという点です。
pf_write(wbuf); // write to platform output
pf_read(rbuf); // read from platform input
1. cd コマンドで pf_axis/pf_test ディレクトリに移動して make all コマンドを実行します。
2.
SDSoC 環境で sd_card イメージが作成され、このイメージが SD カードにコピーされ、起動され、
pf_test.elf が実行されます。
sh-4.3# ./pf_axis.elf
registering devices
generating device nodes...
Test PASSED!
sh-4.3#
例 : プラットフォーム IP のソフトウェア制御
この例は 1 つのクロックを使用した ZC702-ベースのプラットフォームで、プログラマブル ロジックに General
Purpose I/O (AXI GPIO) IP ブロック (axi_gpio) がインプリメントされ、ボード上の LED に接続されています。
AXI GPIO IP には関連の Linux カーネル ドライバーがありますが、この例では Linux UIO (Userspace I/O) フ
レームワークを使用してプラットフォーム IP のソフトウェア制御を提供してテスト アプリケーションから GPIO と直
接通信する方法を示します。この例では、SDSoC™ 環境外にプラットフォーム ソフトウェア ライブラリを作成し、
SDSoC 環境内のアプリケーションで使用できるようにする方法を学びます。
推奨 : このチュートリアルでは、<sds_root>/samples/platforms/zc702_led/ のサンプルを使用し
ます。プラットフォームのビルドおよびテスト手順は、readme.txt ファイルを参照してください。
システムと SDSoC プラットフォーム ハードウェア記述のビルド
1. samples/platforms/zc702_led のローカル コピーをとっておき、SDSoC™ 環境のターミナル
シェルから cd でこのディレクトリに移動します。
このディレクトリには、プラットフォームをビルドする makefil のほか、プラットフォームを定義する Tcl スク
リプトが含まれます。
2.
ターミナル シェルから $ make vivado コマンドを実行します。
このコマンドで zc702_led.bd.tcl スクリプトを使用して Vivado ツールが起動され、ベース システ
ムがビルドされます。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
41
第4章 : チュートリアル : SDSoC プラットフォームの作成
このスクリプトでは、デフォルトのプラットフォーム クロック、それに該当するクロック ID、およびリセット インター
フェイスを指定するために Tcl API が実行されます。
set_property SDSOC_PFM.PFM_CLOCK TRUE [get_bd_pins /ps7/FCLK_CLK2]
set_property SDSOC_PFM.PFM_CLOCK_ID 2 [get_bd_pins /ps7/FCLK_CLK2]
set_property SDSOC_PFM.UIO true [get_bd_cells /axi_gpio_0]
set_property SDSOC_PFM.MARK_SDSOC true [get_bd_pins /ps7/FCLK_CLK2]
set_property SDSOC_PFM.MARK_SDSOC true [get_bd_pins /proc_sys_reset_2/interconnect_aresetn]
set_property SDSOC_PFM.MARK_SDSOC true [get_bd_pins /proc_sys_reset_2/peripheral_aresetn]
set_property SDSOC_PFM.MARK_SDSOC true [get_bd_pins /proc_sys_reset_2/peripheral_reset]
SDSoC 開発では、ハードウェア関数用に Linux UIO フレームワークが使用されるので、プラットフォーム内で
UIO プラットフォーム デバイスを宣言しておく必要があります。zc702_led プラットフォームの場合、これは
スクリプトの次の API 呼び出しで実行されます。
set_property SDSOC_PFM.UIO true [get_bd_cells /axi_gpio_0]
スクリプトのこの部分では、axi_gpio_0 インスタンスが UIO デバイスになるように宣言されています。
この後、スクリプトによりデザインがビルドされ、HSI ユーティリティを使用してハードウェア記述が生成されます。
load_features hsi
hsi::open_hw_design "[file join vivado ${pf}.sdk ${pf}_wrapper.hdf]"
hsi::generate_target {sdsoc} [hsi::current_hw_design] -dir hsi
これにより、プラットフォーム ハードウェア記述 hsi/zc702_led.pfm が生成されます。
SDSoC プラットフォームのビルド
1.
ターミナル シェルから SDSoC™ 環境プラットフォームをビルドするには、次のコマンドを実行します。
make zc702_led
これにより、1 つ前の手順でビルドした Vivado® ツール プロジェクトのアーカイブ バージョンが解凍され、
make –C lib コマンドを使用して GPIO ブロック (ZC702 ボードにある LED を駆動) にアクセスするプラット
フォーム ソフトウェア ライブラリがビルドされます。
zc702_led のブート環境は、axi_gpio プラットフォームのペリフェラルを登録する devicetree.dtb を除
いて、SDSoC 環境で提供される ZC702 プラットフォームと同じです。
プラットフォーム IP の Userspace 制御向け Linux UIO フレームワーク
デフォルトの lib ビルド ターゲットでは、uio_axi_gpio.[ch] ファイルで構成される axi_gpio ブロックの
UIO ドライバーを含むソフトウェア ライブラリが作成されます。このドライバーでは GPIO IP を制御する単純な
API が提供されます。API の使用例は test/pf_axis.cpp を参照してください。
zc702_led プラットフォームの一部として提供されているデバイス ツリーは、ZC702 プラットフォームの
devicetree.dtb を変更して手動で作成されています。まず zc702 devicetree.dtb が dtc コンパイラ
を使用してテキスト フォーマット (.dts またはデバイス ツリー ソース) に変換されます。
dtc –I dtb –O dts –o devicetree.dts boot/devicetree.dtb
重要 : dtc コンパイラは、Linux ホスト マシンまたは仮想マシン (VM) でビルド、実行される必要があります。dtc
をビルドするソースは、https://github.com/Xilinx/linux-xlnx/tree/master/scripts/dtc
で入手できます。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
42
第4章 : チュートリアル : SDSoC プラットフォームの作成
Linux を使用して axi_gpio_0 プラットフォーム ペリフェラルを登録するには、UIO フレームワークで必要とさ
れるように、次のデバイス ツリー ブロブを追加します。
gpio@41200000 {
compatible = "generic-uio";
reg = <0x41200000 0x10000>;
};
このブロブは手動で作成し、amba レコード内で最初に実行される generic-uio デバイスとしてデバイ
ス ツリーに挿入します。
名前は固有のものにする必要があります。ザイリンクスでは、システム生成中に Vivado で計算されたペリフェラ
ルのベース アドレスを使用した命名規則を採用しています。reg メンバーの値は、そのペリフェラルのベース ア
ドレスおよび その IP の該当するアドレス セグメントのバイト アドレス番号になるはずです。これらはどちらも
Vivado IP インテグレーターの [Address Editor] タブで確認できます。
デバイス ツリーを Linux カーネルで必要とされるバイナリ形式に変換し戻すには、dtc デバイス ツリー コン
パイラーを再び使用します。
dtc –I dts –O dtb –o devicetree.dtb boot/devicetree.dts
zc702_led/lib ディレクトリの UIO ドライバーには、UIO フレームワークに必要なフックが含まれています。
int axi_gpio_init(axi_gpio *inst, const char* instnm);
int axi_gpio_release(axi_gpio *inst);
ペリフェラルにアクセスするアプリケーションでは、ペリフェラルにアクセスする前に初期化関数を呼び出して、終
了する際にそのリソースをリリースする必要があります。この使用例については、zc702_led/test のテスト
アプリケーションを参照してください。
デバイス ツリーと Linux OS フレームワークの詳細については、次のようなウェブ上から入手可能なトレーニ
ング資料を参照してください。
http://www.free-electrons.com/docs.
SDSoC プラットフォームのテスト
1.
プラットフォームをテストするには、ターミナル シェルで $ make –C test コマンドを実行します。
テスト アプリケーションには、ループで呼び出される SDSoC™ 環境の axi_lite データ ムーバーを使用し
た単純な arraycopy ハードウェア関数が含まれています。ZC702 の LED は ループ インデックスのバイ
ナリ表現と一致するように点灯します。
このデザインは単純ですが、Linux UIO フレームワークを使用してプラットフォーム ペリフェラルを制御し、
SDSoC 環境のアプリケーションで使用できるようにソフトウェア ライブラリをプラットフォームに含める方法が
示されています。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
43
第4章 : チュートリアル : SDSoC プラットフォームの作成
例 : Processing System 7 IP の AXI ポートの共有
この例では、Processing System 7 (processing_system7) IP の AXI ポートをプラットフォームと SDSoC™ 環
境で生成された IP で共有する方法を示します。AXI ポートをプラットフォーム内の AXI Interconnect IP ブロック
に接続する必要があり、プラットフォームによりインターコネクトの対応するマスターまたはスレーブがエクスポー
トされます。システム生成中、このエクスポートされたポートに接続されたインターコネクトをカスケード接続
することにより、データ チャネルがプラットフォームにマップされます。
推奨 : このチュートリアルでは、<sds_root>/samples/platforms/zc702_acp/ のサンプルを使用し
ます。プラットフォームのビルドおよびテスト手順は、readme.txt ファイルを参照してください。
重要 : プラットフォームで Processing System 7 IP の一部でない AXI または AXI4-Stream バス インターフェイ
スがエクスポートされた場合、プラットフォームをターゲットとするすべてのアプリケーションでこのバス インター
フェイスを使用する必要があります。そのようにしないと、終端されていないインターフェイスのために Vivado
Design Suite でシステム エラーが表示されます。AXI Interconnect IP の AXI マスターまたはスレーブでは、正し
い数のスレーブまたはマスターを自動的にイネーブルにする NUM_SI および NUM_MI IP パラメーターを設
定できます。例の「手順 3」 を参照してください。
ハードウェアと SDSoC プラットフォーム ハードウェア記述のビルド
1. samples/platforms/zc702_acp のローカル コピーをとっておき、SDSoC™ 環境のターミナル
シェルから cd でこのディレクトリに移動します。
このディレクトリには、プラットフォームをビルドする makefil のほか、プラットフォームを定義する Tcl スク
リプトが含まれます。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
44
第4章 : チュートリアル : SDSoC プラットフォームの作成
2.
ターミナル シェルから $ make vivado コマンドを実行します。
このコマンドで zc702_acp.bd.tcl スクリプトを使用して Vivado ツールが起動され、ベース システムが
ビルドされます。次の図は、生成したシステムの IP インテグレーター ブロック図を示しています。
このデザインは特に単純で、プラットフォームでは ACP すら実際に使用されておらず、 AXI Interconnect
IP (axi_interconnect) のポートがエクスポートされています。実際のプラットフォームにはインターコ
ネクト スレーブ ポートがいくつか使用され、これらは最小の番号が付いた Snm_AXI ポート (ビットが飛ば
されていないポート) である必要があります。 この後、これらのインターコネクト スレーブ ポートが最小の番
号が付いたインデックス付きの未使用ポートをエクスポートします。
このスクリプトでは、デフォルトのプラットフォーム クロック、それに該当するクロック ID、およびリセット イ
ンターフェイスを指定するために Tcl API (詳細は、「Vivado IP インテグレーターの Tcl コマンド」を参
照) が起動されます。
set_property
set_property
set_property
set_property
set_property
set_property
SDSOC_PFM.PFM_CLOCK TRUE [get_bd_pins /ps7/FCLK_CLK2]
SDSOC_PFM.CLOCK_ID 2 [get_bd_pins /ps7/FCLK_CLK2]
SDSOC_PFM.MARK_SDSOC true [get_bd_pins /ps7/FCLK_CLK2]
SDSOC_PFM.MARK_SDSOC true [get_bd_pins /proc_sys_reset_2/interconnect_aresetn]
SDSOC_PFM.MARK_SDSOC true [get_bd_pins /proc_sys_reset_2/peripheral_aresetn]
SDSOC_PFM.MARK_SDSOC true [get_bd_pins /proc_sys_reset_2/peripheral_reset]
すべての Processing System 7 IP の AXI インターフェイスは、AXI Interconnect IP に接続されます。SDSoC
環境を使用してこのようなインターフェイスを共有するために、プラットフォームは Processing System 7 IP
の S_AXI_ACP ポートのマスターである IP の最小の番号が付いた未使用スレーブ インターコネクトをエク
スポートします。この例の場合、プラットフォーム内に AXI マスターがないので、プラットフォームは次のコ
マンドを使用して S00_AXI をエクスポートします。
set_property SDSOC_PFM.MARK_SDSOC true [get_bd_intf_pins /axi_interconnect_0/S00_AXI]
set_property SDSOC_PFM.MARK_SDSOC true [get_bd_pins /axi_interconnect_0/S00_ARESETN]
set_property SDSOC_PFM.MARK_SDSOC true [get_bd_pins /axi_interconnect_0/S00_ACLK]
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
45
第4章 : チュートリアル : SDSoC プラットフォームの作成
3.
AXI インターフェイスに該当するクロック ピンとリセット ピンはユーザーがマークする必要があります。
AXI Interconnect IP は、アプリケーションで使用される場合は常に SDSoC 環境でカスタマイズする必要
があります。カスタマイズするには、次のコードに示すように、プラットフォームにキャプチャされたメタ
データを使用し、生成したシステムのパラメーターを設定します。
set_property SDSOC_PFM.PFM_PARAMS {NUM_SI} [get_bd_cells /axi_interconnect_0]
set_property SDSOC_PFM.NUM_SI {count($designComponent/xd:connection/xd:busInterface
[@xd:instanceRef=$instance and @xd:name=’axi_interconnect_0_S00_AXI’])+0}
[get_bd_cells /axi_interconnect_0] [get_bd_cells /axi_interconnect_0]
# NOTE: set_property line breaks added for readability (remove in practice)
この後、スクリプトによりデザインがビルドされ、HSI ユーティリティを使用してハードウェア記述が生成
されます。
load_features hsi
hsi::open_hw_design "[file join vivado ${pf}.sdk ${pf}_wrapper.hdf]"
hsi::generate_target {sdsoc} [hsi::current_hw_design] -dir hsi
このプロセスでは、プラットフォーム ハードウェア記述 hsi/zc702_acp.pfm が生成されます。
現在の Vivado ツール リリースでは、この例に必要なプラットフォーム メタデータのいくつかが存在していない
か、正しくないので、手動で追加する必要があります。S00_AXI エレメントの xd:clockRef 属性値は正しくな
く、メタデータがありません。これは、次のようにする必要があります。
<xd:busInterface
xd:busInterfaceRef="S00_AXI"
xd:busTypeRef="aximm"
xd:clockRef="axi_interconnect_0_S00_ACLK"
xd:resetRef="axi_interconnect_0_S00_ARESETN"
xd:instanceRef="axi_interconnect_0"
xd:mode="slave"
xd:name="axi_interconnect_0_S00_AXI"
xd:idBits="3"
xd:coherent="true"
xd:memport="S_AXI_ACP"
/>
xd:idBits 値は、ACP ポートの使用可能な ID ビット数を表すべきで、ACP へのアクセスを提供するインター
コネクト ポートには xd:coherent 属性が必要で、DDR へのアクセスを提供する AXI スレーブ ポートには
xd:memport 属性が必要です。これらの変更はテキスト エディターに手動で加えてください。
SDSoC プラットフォームのビルド
1.
SDSoC™ プラットフォームをビルドするには、ターミナル シェルで make zc702_acp コマンドを実
行します。
前の手順でビルドしたアーカイブされたバージョンの Vivado® ツール プロジェクトが解凍されます。通常、
プラットフォーム クロックは Processing System 7 IP ブロック以外のクロック ソース (クロッキング ウィザード
など) で駆動でき、SDSoC 環境で生成した IP からは完全に独立させることができます。このため、Vivado
ツール プロジェクトでは各 AXI インターコネクトのクロック ポートは終端処理しないで置いておきます。
SDSoC 環境では、最終的なシステムを生成する際に、これが正しいクロックに自動的に接続されます。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
46
第4章 : チュートリアル : SDSoC プラットフォームの作成
2.
Vivado ツール プロジェクト zc702/vivado/zc702_acp.xpr を開いて、クロック ネットから
/axi_interconnect_0/S00_ACLK の接続を解除します。SDSoC 環境では、AXI がこのバス接続の
マスターであるので、このクロック ポートは同じクロック ネットに接続されます。axi_interconnect への
接続を削除したら、その他すべての IP クロック ピンを接続し直す必要があります。
次の図は、zc702_acp プラットフォーム システムを示しています。
重要 : axi_interconnect スレーブ クロック ポートへの接続は手動で削除して、SDSoC 環境でこの
ポートがこの AXI スレーブを駆動するプラットフォーム クロックに接続されるようにしておく必要がありま
す。削除しておかないと、SDSoC 環境クロックとプラットフォーム クロックが違う場合に、プラットフォームの
ユーザーが正しいロジックを生成できなくなります。
zc702_led のブート環境は、zc702 と同じです。
SDSoC プラットフォームのテスト
1.
プラットフォームをテストするには、ターミナル シェルで次のコマンドを実行します。make –C pf_test
2.
テスト アプリケーションには、アクセラレータがマスターである AXI バスと共に使用される SDSoC 環境のア
プリケーション プログラミング インターフェイス (API) 関数 zero_copy を使用した単純な arraycopy ハー
ドウェア関数が含まれています。pf_test/sd_card の内容を SD カードに読み込んで起動します。
$ /mnt/zc702_acp_test.elf
この例では、プラットフォームと SDSoC 環境で生成されたロジック間で Processing System 7 IP ポートを共
有する方法を示しています。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
47
付録 A
その他のリソースおよび法的通知
ザイリンクス リソース
アンサー、資料、ダウンロード、フォーラムなどのサポート リソースについては、ザイリンクス サポート サイ
トを参照してください。
ソリューション センター
デバイス、ツール、IP のサポートについては、ザイリンクス ソリューション センターを参照してください。このサイト
には、デザイン アシスタンス、アドバイザリ、トラブルシュートのヒントなどのトピックが含まれています。
参考資料
このガイドの補足情報は、次の資料を参照してください。
1.
『SDSoC 環境ユーザー ガイド : 入門』 ( UG1028) (SDSoC 環境の docs フォルダーからも入手可能)
2.
『SDSoC 環境ユーザー ガイド』 (UG1027) (SDSoC 環境の docs フォルダーからも入手可能)
3.
『SDSoC 環境ユーザー ガイド : プラットフォームおよびライブラリ』 (UG1146) (SDSoC 環境の docs フォル
ダーからも入手可能)
4.
『UltraFast エンベデッド デザイン設計手法ガイド』 (UG1046 : 英語版、日本語版)
5.
『ZC702 評価ボード (Zynq-7000 XC7Z020 All Programmable SoC 用) ユーザー ガイド』 (UG850)
6.
『Vivado Design Suite ユーザー ガイド : 高位合成』 (UG902)
7.
『PetaLinux ツール資料 : ワークフロー チュートリアル』 (UG1156)
8. Vivado® Design Suite 資料
9.
『Vivado Design Suite ユーザー ガイド : カスタム IP の作成およびパッケージ』 (UG1118)
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
48
付録 A : その他のリソースおよび法的通知
法的通知
The information disclosed to you hereunder (the “Materials”) is provided solely for the selection and use
of Xilinx products. To the maximum extent permitted by applicable law: (1) Materials are made available
"AS IS" and with all faults, Xilinx hereby DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS,
IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and (2) Xilinx shall not be liable
(whether in contract or tort, including negligence, or under any other theory of liability) for any loss or damage
of any kind or nature related to, arising under, or in connection with, the Materials (including your use of the
Materials), including for any direct, indirect, special, incidental, or consequential loss or damage (including loss of
data, profits goodwill, or any type of loss or damage suffered as a result of any action brought by a third party)
even if such damage or loss was reasonably foreseeable or Xilinx had been advised of the possibility of the same.
Xilinx assumes no obligation to correct any errors contained in the Materials or to notify you of updates to
the Materials or to product specifications You may not reproduce, modify, distribute, or publicly display the
Materials without prior written consent. Certain products are subject to the terms and conditions of Xilinx’s
limited warranty, please refer to Xilinx’s Terms of Sale which can be viewed at www.xilinx.com/legal.htm#tos;
IP cores may be subject to warranty and support terms contained in a license issued to you by Xilinx. Xilinx
products are not designed or intended to be fail-safe or for use in any application requiring fail-safe performance;
you assume sole risk and liability for use of Xilinx products in such critical applications, please refer to Xilinx’s
Terms of Sale which can be viewed at www.xilinx.com/legal.htm#tos.
© Copyright 2015 Xilinx, Inc. Xilinx, the Xilinx logo, Artix, ISE, Kintex, Spartan, Virtex, Vivado, Zynq, and other
designated brands included herein are trademarks of Xilinx in the United States and other countries. All other
trademarks are the property of their respective owners.
この資料に関するフィードバックおよびリンクなどの問題につきましては、[email protected] まで、ま
たは各ページの右下にある [フィードバック送信] ボタンをクリックすると表示されるフォームからお知らせくださ
い。フィードバックは日本語で入力可能です。いただきましたご意見を参考に早急に対応させていただきます。
なお、このメール アドレスへのお問い合わせは受け付けておりません。あらかじめご了承ください。
SDSoC 環境プラットフォームおよびライブラリ http://japan.xilinx.com
UG1146 (v2015.2) 2015 年 7 月 20 日
49