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
© Copyright 2024 ExpyDoc