zynq ultrascale+ mpsoc - xilinx...zynq ultrascale+ の ps と pl...

155
Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 1 UG1209 (v2019.2) 2019 10 30 japan.xilinx.com Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッ ド システムを 構築するためのハンディ ガイド UG1209 (v2019.2) 2019 10 30 この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資料によって は英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報につきましては、必ず 最新英語版をご参照ください。

Upload: others

Post on 24-Sep-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 1UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル

効率的なエンベデッ ド システムを構築するためのハンディ ガイド

UG1209 (v2019.2) 2019 年 10 月 30 日

すべてのバージョンを表示

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

Page 2: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 2UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

改訂履歴

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

セクシ ョ ン 改訂内容

2019 年 10 月 30 日 バージョ ン 2019.2

全体的なアップデート フローを Vitis™ 統合ソフ ト ウェア プラ ッ ト フォームに移行。

全体的なアップデート Vitis IDE および PetaLinux 2019.2 で検証。

2019 年 7 月 3 日 バージョ ン 2019.1

全体的なアップデート Vivado® Design Suite および PetaLinux 2019.1 で検証。

Page 3: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

目次

改訂履歴 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2

第 1 章: 概要このガイ ドについて . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5Zynq UltraScale+ デバイスが提供するシングル チップ

ソ リ ューシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6ザイ リ ンクス デザイン ツールによるデザイン プロセスの加速 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9必要なセッ ト アップ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ンZynq UltraScale+ システムのコンフ ィギュレーシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12サンプル プロジェク ト : Zynq UltraScale+ MPSoC の新規エンベデッ ド プロジェク トの作成 . . . . . . . . . . . . . . . . . 13

第 3 章: PS サブシステム用ソフ トウェアのビルドZynq UltraScale+ のプロセッシング ユニッ ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27サンプル プロジェク ト : Arm Cortex-A53 から Hello World アプリ ケーシ ョ ンを実行 . . . . . . . . . . . . . . . . . . . . . . . . 28サンプル プロジェク ト : Arm Cortex-R5 から Hello World アプリ ケーシ ョ ンを実行 . . . . . . . . . . . . . . . . . . . . . . . . . 31その他の情報 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34サンプル プロジェク ト : Vitis IDE でのベアメ タル アプリ ケーシ ョ ン プロジェク トの作成 . . . . . . . . . . . . . . . . . . 35プラ ッ ト フォームでのソフ ト ウェア プロジェク トの

確認 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39サンプル プロジェク ト : PetaLinux を使用した Linux イ メージの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

第 4 章: Vitis デバッガーを使用したデバッグザイ リ ンクス システム デバッガー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49Vitis デバッガーを使用したソフ ト ウェアのデバッグ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51ザイ リ ンクス ソフ ト ウェア コマンド ライン ツール (XSCT) を使用したデバッグ . . . . . . . . . . . . . . . . . . . . . . . . . 53

第 5 章: ブートおよびコンフ ィギュレーシ ョ ンシステム ソフ ト ウェア . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63APU の Linux と RPU のベアメ タル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65SD ブートのブート シーケンス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65QSPI ブート モードのブート シーケンス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75JTAG を使用した QSPI ブート モードのブート シーケンス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86USB ブート モードのブート シーケンス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89セキュア ブート シーケンス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

第 6 章: システム デザイン例サンプル デザイン 1: GPIO、 タイマー、 および割り込みの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125サンプル デザイン 2: グラフ ィ ッ クおよびディ スプレイ ポート ベースのサブシステムのセッ ト アップ例 . . . . 145

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 3UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 4: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

付録 A: セキュア ブートでの問題のデバッグPUF 登録が実行されているかど うかの確認 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151ブート イ メージの読み出し . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

付録 B: その他のリソースおよび法的通知ザイ リ ンクス リ ソース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152ソ リ ューシ ョ ン センター . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152Documentation Navigator およびデザイン ハブ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152このチュート リ アルのデザイン ファ イル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153ザイ リ ンクス リ ソース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153ト レーニング リ ソース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154お読みください: 重要な法的通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 4UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 5: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 1 章

概要

このガイドについて

このガイ ドでは、Zynq® UltraScale+™ MPSoC を使用するザイ リ ンクス Vivado® Design Suite フローについて説明しま

す。 サンプル プロジェク トは、 ザイ リ ンクスの ZCU102 Rev 1.0 および Rev 1.1 評価ボードをターゲッ ト と していま

す。 ツールは Vitis™ 統合ソフ ト ウェア プラ ッ ト フォームを使用します。

このガイ ドのサンプル プロジェク トは、 64 ビッ トの Windows 10 オペレーティング システムで実行するザイ リ ンク

ス ツール、および 64 ビッ トの Linux オペレーティング システムで実行する PetaLinux を使用して作成されています。

ほかの Windows インス トールで別バージ ョ ンのツールを実行した場合、 結果が異なるこ とがあ り ます。 サンプル プロジェク トは、 エンベデッ ド デザインの次の項目について紹介するこ とに重点を置いています。

注記: チュート リ アルで説明されている、 ハード ウェア上で Linux をブートする各手順は、 2019.2 リ リースの PetaLinux ツールに固有のものです。 PetaLinux ツールは、 このガイ ドの Linux 部分の演習を行うために、 Linux ホス

ト マシンにインス トールする必要があ り ます。

• 第 2 章 「Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ン」 では、 Zynq UltraScale+ MPSoC プロセッシング システム (PS) を使用するシステムの作成、 および Zynq UltraScale+ MPSoC のハード

ウェア プラ ッ ト フォームの作成について説明します。 この章では、 簡単なデザインを例と して使用し、 ハード

ウェアおよびソフ ト ウェア ツールの概要を説明します。

• 第 3 章 「PS サブシステム用ソフ ト ウェアのビルド」 では、 アプリ ケーシ ョ ン プロセッシング ユニッ ト (APU)、リ アルタイム プロセッシング ユニッ ト (RPU) など、 プロセッシング システム内のプロセッシング ブロ ッ クに

応じてソフ ト ウェアを設定および構築する手順を説明します。 アプリ ケーシ ョ ン プロセッシング ユニッ ト (APU) および RPU をターゲッ ト とするベアメ タル アプリ ケーシ ョ ンの作成も含まれています。 ハード ウェア プラ ッ ト フォームのブート コンポーネン ト も確認します。

• 第 4 章 「Vitis デバッガーを使用したデバッグ」 では、 Vitis IDE のデバッグ機能を使用したソフ ト ウェアのデ

バッグについて説明します。 この章では、 前のデザインを使用してソフ ト ウェア ベアメ タル (OS なし ) を実行

し、 デバッグ方法を示します。 また、 Zynq UltraScale+ MPSoC のデバッグ コンフ ィギュレーシ ョ ンについても

説明します。

• 第 5 章 「ブートおよびコンフ ィギュレーシ ョ ン」 では、 コンポーネン ト を統合して Zynq UltraScale+ システムを

作成し、 このシステムのブート イ メージを作成する方法について説明します。 この章の主旨は、 ブート ロー

ダーを統合およびロードする方法を理解するこ とです。

• 第 6 章 「システム デザイン例」 では、 第 3 章で設定したソフ ト ウェア ブロッ クを使用して Zynq UltraScale+ システムを作成する方法を紹介します。

対象者および内容

このガイ ドは、 ソフ ト ウェア アプリ ケーシ ョ ン開発者、 システム ソフ ト ウェア設計者、 およびシステム ハードウェ

ア設計者を対象に次の情報を提供します。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 5UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 6: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 1 章: 概要

• Zynq UltraScale+ MPSoC システムを作成するチュート リ アル

• PS サブシステムのソフ ト ウェアをビルドするチュート リ アル

• Vitis IDE を使用したデバッグのチュート リ アル

• システム デザイン例

サンプル プロジェク ト

ツールを習得するための 良の方法は、 使用してみるこ とです。 このガイ ドでは、 説明に従ってツールを操作して

いきます。 サンプル プロジェク トのセクシ ョ ンでは、 サンプル プロジェク トの仕様のほかに、 背景で何が起こって

いるかも説明しています。 各章およびサンプル プロジェク トは、 エンベデッ ド デザインのさまざまな側面を紹介す

るこ とを目的と しています。 サンプル プロジェク ト を通して、 各項目の学習を完了して次に進む形でフロー全体が

説明されます。

その他の資料

その他の資料一覧は、 付録 B 「その他のリ ソースおよび法的通知」 に記載されています。

Zynq UltraScale+ デバイスが提供するシングル チップ ソリューシ ョ ン

次世代の Zynq デバイスである Zynq UltraScale+ MPSoC は、 タスクごとに 適なエンジンを使用する という考えに基

づいて設計されています。 Zynq UltraScale+ は、 多用途のプロセッシング システム (PS) と柔軟性および性能の高いプ

ログラマグル ロジッ ク (PL) をすべて 1 つのシステム オン チップ (SoC) に搭載したソ リ ューシ ョ ンです。 Zynq UltraScale+ MPSoC PS ブロッ クは、 次のエンジンで構成されています。

• クワ ッ ド コア Arm Cortex-A53 ベースのアプリ ケーシ ョ ン プロセッシング ユニッ ト (APU)

• デュアル コア Arm Cortex-R5 ベースのリ アルタイム プロセッシング ユニッ ト (RPU)

• Arm Mali-400 MP2 ベースのグラフ ィ ッ クス プロセッシング ユニッ ト (GPU)

• 専用のプラ ッ ト フォーム管理ユニッ ト (PMU) と コンフ ィギュレーシ ョ ン セキュ リティ ユニッ ト (CSU)

• ディ スプレイ ポートおよび SATA を含む一連の高速ペリ フェラル

プログラマブル ロジッ クには、 プログラマブル ロジッ ク セルに加え、 次に示す高性能ペリ フェラルも統合されてい

ます。

• PCI Express 用統合ブロッ ク

• Interlaken 用統合ブロッ ク

• 100G Ethernet 用統合ブロッ ク

• システム モニター

• ビデオ コーデッ ク ユニッ ト

Zynq UltraScale+ の PS と PL は、 高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

軟に連動させるこ とができます。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 6UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 7: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 1 章: 概要

このよ うな高度なデバイスのデザイン プロセスを単純にするため、 ザイ リ ンクスでは Vivado Design Suite、 Vitis IDE、 および Linux 用 PetaLinux ツールを提供しています。 これらのツールは、 FPGA と SoC を結合したデバイスの

エンベデッ ド システム デザインを容易にするために必要なものをすべて提供します。 これらのツールを組み合わせ

るこ とで、 ハード ウェアと ソフ ト ウェアのアプリ ケーシ ョ ンの設計、 デバッグ、 コードの実行が可能になり、 デザ

インを実際のボードに移行して検証および評価を実行できます。

Vitis 統合設計環境 (IDE)Vitis™ 統合ソフ ト ウェア プラ ッ ト フォームは、 ザイ リ ンクス エンベデッ ド プロセッサをターゲッ ト とするエンベ

デッ ド ソフ ト ウェア アプリ ケーシ ョ ンを開発する統合開発環境 (IDE) です。 Vitis ソフ ト ウェア プラ ッ ト フォームで

は、 Vivado® Design Suite で作成したハード ウェア デザインを使用できます。 Vitis ソフ ト ウェア プラ ッ ト フォーム

は、 Eclipse オープンソース規格をベースにしており、 次のよ うなソフ ト ウェア開発機能があ り ます。

• 多機能 C/C/C++ コード エディ ターおよびコンパイル環境

• プロジェク ト管理

• アプリ ケーシ ョ ン ビルド コンフ ィギュレーシ ョ ンおよび makefile の自動生成

• エラー ナビゲーシ ョ ン

• エンベデッ ド ターゲッ ト をデバッグおよびプロファイルするための統合環境

• ソース コードのバージ ョ ン管理

• システム レベルのパフォーマンス解析

• FPGA をコンフ ィギュレーシ ョ ンするための特化ツール

• ブータブル イ メージの作成

• フラ ッシュ メモ リのプログラム

• スク リプ ト ベースのコマンド ライン ツール

Eclipse 開発環境の詳細は、 http://www.eclipse.org を参照してください。

その他のコンポーネン トは、 次のとおりです。

• エンベデッ ド ソフ ト ウェア開発用のド ライバーおよびライブラ リ

• Zynq UltraScale+ プロセッシング システム内の Arm Cortex-A53 および Arm Cortex-R5F MPCore プロセッサをター

ゲッ トにした C/C++ ソフ ト ウェア開発用 Linaro GCC コンパイラ

Vivado Design SuiteVivado Design Suite では FPGA インプリ メンテーシ ョ ン用のさまざまな開発システム ツールが提供されています。 ソ

フ ト ウェアのプログラムが不要な場合はスタンドアロン ツールと してインス トールできます。 Vivado は Vitis IDE インス トールにも含まれています。さまざまな Vivado Design Suite エディシ ョ ンをエンベデッ ド システム開発に使用で

きます。 このガイ ドでは、 Vitis IDE と共にインス トールされた System Edition を使用します。次の図に Vivado Design Suite の各エディシ ョ ンの機能を示します。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 7UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 8: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 1 章: 概要

その他の Vivado コンポーネン ト

Vivado のその他のコンポーネン トは次のとおりです。

• ザイ リ ンクス エンベデッ ド プロセッサ用のエンベデッ ド /ソフ ト IP

• 資料

• サンプル プロジェク ト

PetaLinux ツール

PetaLinux ツール セッ トは、 エンベデッ ド Linux システム開発キッ トです。 このツールによ り多面的な Linux ツール フローが提供され、 Zynq UltraScale+ を含むザイ リ ンクス Zynq デバイス向けの Linux OS 環境を完全にコンフ ィギュ

レーシ ョ ン、 ビルド、 および運用できます。

詳細は、 『PetaLinux ツール資料: リ ファレンス ガイ ド』 (UG1144) [参照 7] を参照して ください。

X-Ref Target - Figure 1-1

図 1-1: Vivado Design Suite のエディシ ョ ン

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 8UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 9: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 1 章: 概要

PetaLinux ツールのデザイン ハブは、 PetaLinux ツールの情報および資料へのリ ンクを提供します。 詳細は、

「Documentation Navigator およびデザイン ハブ」 を参照してください。

ザイリンクス デザイン ツールによるデザイン プロセスの加速

Vivado Design Suite ツールを使用してハード ウェアにデザイン ソースを追加できます。 ツールには、 既存のプロジェ

ク トに IP を追加したり、 ク ロ ッ クやリセッ ト などのポートの接続を作成したりするプロセスを簡単に実行できる IP インテグレーターが含まれます。

Vivado ツールと IP インテグレーターは、 一連のハードウェア システム開発を完了までサポート します。 これには、

Zynq UltraScale+ プロセッシング システムの仕様、 ペリ フェラル、 各コンポーネン トの接続、 それらの詳細な設定な

どが含まれます。

Vitis IDE は、 ソフ ト ウェア開発、 ハード ウェア アクセラレーシ ョ ン、 およびプラ ッ ト フォーム開発に使用できます。

また、 ソフ ト ウェア アプリ ケーシ ョ ンのデバッグにも使用できます。

Zynq UltraScale+ プロセッシング システム (PS) は、 FPGA (プログラマブル ロジッ ク (PL)) をプログラムしな くても、

ブート して動作させるこ とができます。 ただし、 ファブ リ ッ クでソフ ト IP を使用したり、 EMIO を用いて PS ペリ

フェラルを接続するには、 PL をプログラムする必要があ り ます。 PL のプログラムには、 VitisIDE または Vivado ハー

ドウェア マネージャーを使用できます。

エンベデッ ド デザイン プロセスの詳細は、 『Vivado Design Suite チュート リ アル: エンベデッ ド プロセッサ ハード

ウェア デザイン』 (UG940) [参照 2] を参照してください。

Zynq UltraScale+ プロセッシング システムの詳細は、『Zynq UltraScale+ プロセッシング システム製品ガイ ド』 (PG201) [参照 8] を参照して ください。

必要なセッ トアップ

ツールについて詳し く説明する前に、 ツールが適切にインス トールされ、 使用する環境がこのガイ ドの 「サンプル プロジェク ト 」 の記載要件に一致しているかを確認します。

ハードウェア要件

このガイ ドでは、 Zynq UltraScale+ ZCU102 評価ボードをターゲッ ト と しています。 このチュート リ アルのサンプル プロジェク トは ZCU102 Rev 1 ボードを使用してテス ト されています。 このガイ ドを活用するにあたって、 評価ボー

ドに同梱されている次のものを用意してください。

• ZCU102 Rev1 評価ボード

• AC 電源アダプター (12 VDC)

• USB Type-A/Micro ケーブル (UART 通信用)

• USB-Micro JTAG 接続を介するプログラムおよびデバッグ用の USB Micro ケーブル

• Linux ブート用の SD-MMC フラ ッシュ カード

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 9UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 10: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 1 章: 概要

• ターゲッ ト ボード とホス ト マシンの接続用のイーサネッ ト ケーブル

• ディ スプレイ ポート (DP) 機能を備えたモニター (1080P 以上の解像度)

• ZCU102 ボードからのディ スプレイ出力を DP モニターに接続するための DP ケーブル

インストール要件

Vitis 統合デザイン環境および Vivado Design Suite

2019.2 Vitis IDE がインス トールされているこ とを確認します。 ツール バージ ョ ンが 新であるかど うかは、

https://japan.xilinx.com/support/download.html にアクセスして確認できます。

Vitits 2019.2 ソフ ト ウェア開発プラ ッ ト フォームがインス トールされているこ とを確認します。 Vitis IDE は、 ハード

ウェアおよびソフ ト ウェアが 1 つのパッケージと して提供されるザイ リ ンクス統合ツールです。 Vitis IDE をインス

トールする と、 Vivado Design Suite および Vitis IDE の両方が自動的にインス トールされます。 インス トール時に余分

にオプシ ョ ンを選択する必要はあ り ません。 次にインス トール時のオプシ ョ ン ウ ィンド ウを示します。

Vivado Design Suite のインス トールに関する詳細は、 『Vitis エンベデッ ド ソフ ト ウェア開発フローの資料』 [参照 13] を参照してください。

PetaLinux ツール

このチュート リ アルの Linux 部分の演習で実行する PetaLinux ツールをインス トールします。 PetaLinux ツールは、 次

のいずれかが稼働している Linux ホス ト システムで実行します。

• Red Hat Enterprise Workstation/Server 7.4、 7.5、 7.6 (64 ビッ ト )

• CentOS Workstation/Server 7.4、 7.5、 7.6 (64 ビッ ト )

• Ubuntu Linux 16.04.5、 16.04.6、 18.04.1、 18.04.02 (64 ビッ ト )

X-Ref Target - Figure 1-2

図 1-2: Vivado を含んだ Vitis IDE インストール

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 10UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 11: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 1 章: 概要

このツールは、 専用 Linux ホス ト システム、 または Windows 開発プラ ッ ト フォーム上でこれらの Linux オペレー

ティング システムのいずれかが稼働している仮想マシンを使用できます。

PetaLinux ツールを選択したシステムにインス トールするには、 次を実行する必要があ り ます。

• PetaLinux 2019.2 ツールを、 ザイ リ ンクスのウェブサイ トからダウンロードする。

• ZCU102 PetaLinux BSP (ZCU102 BSP (プロダクシ ョ ン シ リ コン)) を 2019.2 のダウンロード ページからダウン

ロードする。

• ワークステーシ ョ ンまたは仮想マシンに共通のシステム パッケージおよびライブラ リ を追加する。 詳細は、

『PetaLinux ツール資料: リ ファレンス ガイ ド』 (UG1144) [参照 7] の 「インス トール要件」 を参照して ください。

必要な環境

• 8 GB RAM (ザイ リ ンクス ツールで推奨される 小サイズ)

• 2 GHz CPU ク ロ ッ クまたは同等の CPU (少なく と も 8 つのコア)

• 100 GB のハードディ スク空き容量

PetaLinux パッケージの展開

PetaLinux ツールのインス トールは簡単です。 オプシ ョ ンを指定しない場合、 PetaLinux ツールは現在のディ レク ト リ

にインス トールされます。 インス トール先パスをオプシ ョ ンで指定するこ と もできます。

たとえば、 PetaLinux ツールを /opt/pkg/petalinux/2019.2 にインス トールするには、 次のコマンドを使用します。

$ mkdir -p /opt/pkg/petalinux/2019.2$ ./petalinux-v2019.2-final-installer.run /opt/pkg/petalinux/2019.2

詳細は、 『PetaLinux ツール資料: リ ファレンス ガイ ド』 (UG1144) [参照 7] を参照して ください。

ソフ トウェアのライセンス

ザイ リ ンクスのソフ ト ウェアには FLEXnet ラ イセンスが使用されています。 ソフ ト ウェアを初めて起動する際、 ラ

イセンスの検証プロセスが実行されます。 ライセンス検証で有効なライセンスが検出されない場合、 ライセンス ウ ィザードに従ってライセンスを取得し、 インス トールしたツールでそのライセンスを使用できるよ うにします。

ソフ ト ウェアのフル バージ ョ ンが不要な場合は、 評価版ライセンスを使用できます。 インス トールの手順と詳細は、

『Vivado Design Suite ユーザー ガイ ド : リ リース ノート、 インス トールおよびライセンス』 (UG973) [参照 3] を参照し

てください。

チュート リアルのデザイン ファイル

このチュート リ アルのデザイン ファ イルのダウンロードについては、 「このチュート リ アルのデザイン ファ イル」

を参照してください。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 11UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 12: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 2 章

Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ン

ザイ リ ンクスの Vivado® Design Suite の概要を学んだので、 次にこのツールを使用して Zynq® UltraScale+™ MPSoC プロセッシング システム (PS) を使用するエンベデッ ド システムの開発方法を学びます。

Zynq UltraScale+ は、 クワッ ド コア Arm® Cortex®-A53 APU、 デュアルコア Arm Cortex-R5 RPU、 Mali 400 MP2 GPU、

および複数のハード IP (Intellectual Property) コンポーネン ト、およびプログラマブル ロジッ ク (PL) で構成されていま

す。 これらは次の 2 つの方法で使用できます。

• Zynq UltraScale+ PS は、 ファブ リ ッ ク IP を追加せずに、 スタンドアロン モードで使用できます。

• IP コアをファブリ ッ クでインスタンシエート し、 PS と PL の組み合わせと して Zynq UltraScale+ PS に接続でき

ます。

Zynq UltraScale+ システムのコンフ ィギュレーシ ョ ン

Zynq UltraScale+ システム デザインの作成には、 ブート デバイスおよびペリ フェラルを適切に選択する PS のコン

フ ィギュレーシ ョ ンが含まれます。 PS ペリ フェラルと利用可能な MIO の接続がデザイン要件を満たしていれば、

ビッ ト ス ト リームは必要あ り ません。 この章では、 ビッ ト ス ト リームを必要と しない簡単な PS ベースのデザインの

作成手順を説明します。

この章では、 基本的な PS コンフ ィギュレーシ ョ ンに加え、 保護されたメモ リおよびペリ フェラルを含むサブシステ

ムを作成するための隔離設定の概念についても説明します。 PS ブロッ クでのこのアドバンス コンフ ィギュレーシ ョ

ン モードを使用する と、 マスターと専用メモ リおよびペリ フェラルで構成されるサブシステムを設定できます。 こ

の保護は、 Zynq UltraScale+ PS ブロ ッ クの XMPU および XPPU によ り提供されます。 隔離設定ではコンポーネン ト

の TrustZone 設定も可能であ り、 セキュアおよび非セキュア環境でシステムを作成および設定できます。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 12UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 13: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ン

サンプル プロジェク ト : Zynq UltraScale+ MPSoC の新規エンベデッ ド プロジェク トの作成

この例では、 Vivado Design Suite を起動し、エンベデッ ド プロセッシング システムのプロジェク ト を 上位と して作

成します。

デザインの開始

1. Vivado Design Suite を起動します。

2. [Quick Start] セクシ ョ ンの [Create Project] をク リ ッ ク し、 New Project ウ ィザードを開きます。

3. ウ ィザードの各ページで次の表の情報に基づいて設定を選択します。

4. [Finish] をク リ ッ ク します。 New Project ウ ィザードが閉じ、 作成したプロジェク トが Vivado デザイン ツールで

開きます。

ブロック デザイン プロジェク トの作成

IP インテグレーターを使用し、 ブロ ッ ク デザイン プロジェク ト を作成します。

1. Flow Navigator の [IP Integrator] → [Create Block Design] をク リ ッ ク します。

表 2-1: New Project ウィザード オプシ ョ ン

ウィザード ページ システム プロパティ 設定または使用するコマンド

Project Name Project name edt_zcu102

Project location C:/edt

Create project subdirectory オン

Project Type Specify the type of project to create. (RTL または合成済み EDIF から開始可

能。 )

RTL Project

Do not specify sources at this time オフ

Add Sources 変更なし。

Add Constraints 変更なし。

Default Part Select Boards

Display Name Zynq UltraScale+ ZCU102 Evaluation Board

New Project Summary プロジェク ト サマリ プロジェク ト サマリ を確認

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 13UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 14: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ン

[Create Block Design] ダイアログ ボッ クスが開きます。

2. [Create Block Design] ダイアログ ボッ クスで次のよ うに選択します。

3. [OK] をク リ ッ ク します。

[Diagram] ウ ィンド ウがこのデザインが空であるこ とを示すメ ッセージと共に表示されます。 デザインを開始す

るには、 カタログから IP を追加します。

4. [Add IP] をク リ ッ ク します。

5. [Search] フ ィールドに 「zynq」 と入力して Zynq デバイス IP を検索します。

6. ZYNQ UltraScale+ MPSoC IP をダブルク リ ッ ク し、 ブロ ッ ク デザインに追加します。

次の図に示すよ うに、Zynq UltraScale+ MPSoC プロセッシング システム IP ブロッ クが [Diagram] ウ ィンド ウに表

示されます。

Vivado での Zynq UltraScale+ MPSoC プロセッシング システムの設定

Zynq UltraScale+ MPSoC プロセッシング システムをデザインに追加したので、 オプシ ョ ンを設定します。

X-Ref Target - Figure 2-1

図 2-1: [Create Block Design]

表 2-2: Create Block Design ウィザードの設定

ウィザード ページ システム プロパティ 設定または使用するコマンド

Create Block Design Design name edt_zcu102

Directory <Local to Project>

Specify source set Design Sources

X-Ref Target - Figure 2-2

図 2-2: Zynq UltraScale+ MPSoC プロセッシング システム IP ブロック

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 14UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 15: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ン

1. [Diagram] ウ ィンド ウで、ZYNQ UltraScale+ MPSoC プロセッシング システム ブロ ッ クをダブルク リ ッ ク します。

次の図に示す [Re-customize IP] ダイアログ ボッ クスが開きます。 デフォルトでは、 プロセッシング システムに

ペリ フェラルは接続されていません。

2. [Cancel] をク リ ッ ク し、 デザインを変更せずにウ ィザードを閉じます。

ヒン ト : [Diagram] ウ ィンド ウで、 次の図に示すよ うなデザイン アシスタン トが使用可能であるこ とを示すメ ッセー

ジが表示されます。 デザイン アシスタン トが利用可能な場合、 リ ンクをク リ ッ クする と Vivado によ りデザインでこ

の手順が実行されます。

3. ZCU102 ボード用に作成されたテンプレート を使用します。 [Run Block Automation] リ ンクをク リ ッ ク します。

[Run Block Automation] ダイアログ ボッ クスが開きます。

4. [OK] をク リ ッ ク してデフォルトのプロセッシング システム オプシ ョ ンを選択し、 デフォルトのピン接続を作成

します。

X-Ref Target - Figure 2-3

図 2-3: [Re-customize IP] ダイアログ ボックス

X-Ref Target - Figure 2-4

図 2-4: デザイン アシスタン トのリンク

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 15UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 16: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ン

このコンフ ィギュレーシ ョ ン ウ ィザードによ り、 プロセッシング システムの複数のペリ フェラルがでイネーブ

ルになり、 ZCU102 のボード レイアウ トに従って MIO (Multiplexed I/O) ピンが割り当てられます。 たとえば、

UART0 および UART1 がイネーブルになり ます。 UART 信号は USB-UART コネクタに接続され、 UART を介し

て ZCU102 ボードの USB コンバーター チップに接続されます。

5. これを確認するには、 ブロ ッ ク図で Zynq UltraScale+ MPSoC プロセッシング システム ブロ ッ クをダブルク リ ッ

ク します。

Zynq UltraScale+ MPSoC のブロ ッ ク図でペリ フェラル名の横に表示されているチェッ ク マークは、 それらの I/O ペリ フェラルがアクティブであるこ とを示します。

X-Ref Target - Figure 2-5

図 2-5: アクティブなペリフェラルが示された I/O ユニッ ト

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 16UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 17: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ン

6. ブロ ッ ク図で緑色で示されている I/O ペリ フェラルの 1 つをク リ ッ ク します。 選択したペリ フェラルの [I/O Configuration] ページが開きます。

このページでは、 低速ペリ フェラルおよび高速ペリ フェラルを設定できます。 こ こでは、 ZCU102 用のボード プリセッ ト を使用して基本的な接続を有効にした状態で続けます。

7. Page Navigator で [PS-PL Configuration] をク リ ッ ク します。

8. [PS-PL Configuration] で、 [PS-PL Interfaces] → [Master Interface] を展開表示します。

このサンプル プロジェク トでは、 PL にデザインが読み込まれていないため、 PS-PL インターフェイスを無効に

できます。 こ こでは、 AXI HPM0 FPD および AXI HPM1 FPD マスター インターフェイスを無効にできます。

9. [AXI HPM0 FPD] および [AXI HPM1 FPD] をオフにします。

X-Ref Target - Figure 2-6

図 2-6: [Re-customize IP] ダイアログ ボックスの [I/O Configuration] ページ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 17UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 18: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ン

PS-PL インターフェイスは次の図のよ うにな り ます。

10. [OK] をク リ ッ ク して [Re-customize IP] ダイアログ ボッ クス閉じます。

隔離設定

このセクシ ョ ンは参照用で、 さまざまなユース ケースでの隔離設定の重要性について説明します。 隔離設定が必要

なケースは複数あ り ます。 隔離設定はオプシ ョ ンで、 システム要件に応じて設定できます。 通常、 安全性/セキュ リ

ティが重要なユース ケースでは、 安全部分と非安全部分またはセキュア部分と非セキュア部分の間に隔離が必要で

す。 これには、 マスター (RPU など) とそのスレーブ (メモ リ領域およびペリ フェラル) を含む安全/セキュア領域を、

デザインの非安全/非セキュア領域から隔離する必要があ り ます。 この場合、 専用ペリ フェラルまたはメモ リ ロケー

シ ョ ンに TrustZone 属性を適用できます。 このよ うにする と、 セキュア スレーブにアクセスできるのは、 有効な ト ラ

ステッ ド マスターのみになり ます。 隔離が必要な別のユース ケース と して、 プラ ッ ト フォームとパワー マネージメ

ン トがあ り ます。 この場合、 マスターとスレーブを含む独立したサブシステムを作成できます。 これは、 ランタイ

ム パワー マネージメン ト、 あるいはアップグレードまたは回復のためのウォーム再起動中に依存性を特定するため

に使用されます。 Zynq UltraScale+ 再起動ソ リ ューシ ョ ン Wiki ページに、 このユース ケースの例があ り ます。 Zynq UltraScale+ のザイ リ ンクス メモ リ保護ユニッ ト (XMPU) およびザイ リ ンクス ペリ フェラル保護ユニッ ト (XPPU) は、

メモ リおよびペリ フェラルのハード ウェア保護を提供します。 これらの保護ユニッ トは、TrustZone (TZ) および Zynq UltraScale+ MPSoC SMMU で提供される隔離を補足します。

Zynq UltraScale+ の XMPU および XPPU を使用する と、 SoC レベルでリ ソースを隔離できます。 Arm MMU および TrustZone を使用する と、 Arm Cortex-A53 APU 内での隔離が可能です。 ハイパーバイザーおよび SMMU を使用する

と、 Cortex-A53 コア間の隔離を設定できます。 これらの保護ユニッ トは、 Zynq UltraScale+ MPSoC PS IP ウ ィザード

の [Isolation Configuration] ページで設定します。 隔離設定は初期化ファイルと してエクスポート され、 ブート ロー

ダー (この場合は FSBL (第 1 段階ブート ローダー )) の一部と して読み込まれます。詳細は、『Zynq UltraScale+ MPSoC テクニカル リ ファレンス マニュアル』 (UG1085) [参照 5] を参照してください。

1. ブロ ッ ク図で ZYNQ UltraScale+ MPSoC プロセッシング システム ブロッ クをダブルク リ ッ ク します。

2. [Switch To Advanced Mode] をオンにします。

保護エレ メン トの境界がブロ ッ ク デザインに赤色のブロ ッ クで示されます。

X-Ref Target - Figure 2-7

図 2-7: [PS-PL Configuration]

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 18UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 19: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ン

3. 隔離を設定する場合は、 [Isolation Configuration] をク リ ッ ク します。

このチュート リ アルでは、 隔離設定は使用しません。

4. [OK] をク リ ッ ク して [Re-customize IP] ダイアログ ボッ クス閉じます。

注記: 隔離設定の設定方法は、 『Zynq UltraScale+ MPSoC での隔離方法』 (XAPP1320) を参照してください。

デザインおよび接続ポートの検証

次の手順に従ってデザインを検証します。

1. [Diagram] ウ ィンド ウの空白部分を右ク リ ッ ク して、 [Validate Design] をク リ ッ ク します。 または、 F6 キーを押

します。

2. 検証が成功し、 デザインにエラーや重大な警告がないこ とを示すメ ッセージ ダイアログ ボッ クスが表示されま

す。

3. [OK] をク リ ッ ク してメ ッセージを閉じます。

4. [Block Design] 環境の [Sources] ウ ィンド ウをク リ ッ ク します。

5. [Hierarchy] タブをク リ ッ ク します。

6. [Design Sources] の下の [edt_zcu102] を右ク リ ッ ク し、 [Create HDL Wrapper] をク リ ッ ク します。

[Create HDL Wrapper] ダイアログ ボッ クスが開きます。 このダイアログ ボッ クスを使用して、 プロセッサ サブ

システム用の HDL ラ ッパー ファ イルを作成します。

ヒン ト : HDL ラ ッパーは、 デザイン ツールに必要な 上位エンティティです。

7. [Let Vivado manage wrapper and auto-update] をオンにし、 [OK] をク リ ッ ク します。

X-Ref Target - Figure 2-8

図 2-8: PS 設定のアドバンス モード

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 19UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 20: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ン

8. [Sources] ウ ィンド ウで、 [Design Sources] の下にある [edt_zcu102_wrapper] を展開します。

9. [edt_zcu102_i - edt_zcu102 (edt_zcu102.bd)] という 上位ブロ ッ ク図を右ク リ ッ ク し、 [Generate Output Products] をク リ ッ ク します。

次に示す [Generate Output Products] ダイアログ ボッ クスが開きます。

注記: Linux ホス トマシンで Vivado Design Suite を実行している場合は、 [Run Settings] の下に追加オプシ ョ ンが表

示されるこ とがあ り ます。 その場合は、 デフォルト設定で続行します。

10. [Generate] をク リ ッ ク します。

この手順では、 選択したソースに必要なすべての出力ファイルを作成します。 たとえば、 IP プロセッサ システ

ムに対する制約を手動で作成する必要はあ り ません。 [Generate Output Products] を実行する と、 Vivado ツールで

プロセッサ サブシステム用の XDC ファ イルが自動的に生成されます。

11. 「Out-of-context module run was launched for generating output products」 (出力ファイル生成のためアウ ト オブ コンテ

キス ト モジュール run が実行されました) という メ ッセージが表示されたら [OK] をク リ ッ ク します。

12. [Generate Output Products] の処理が完了したら、 [OK] をク リ ッ ク します。

X-Ref Target - Figure 2-9

図 2-9: [Generate Output Products] ダイアログ ボックス

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 20UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 21: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ン

13. [Block Design] の [Sources] ウ ィンド ウで、 [IP Sources] タブをク リ ッ ク します。 次の図に示すよ うに、 生成した出

力ファイルが表示されます。

ハードウェアのエクスポート

1. [File] → [Export] → [Export Hardware] をク リ ッ ク します。

[Export Hardware] ダイアログ ボッ クスが開きます。 ハード ウェアのエクスポート先のローカル パスを入力し

ます。

2. [OK] をク リ ッ ク します。

ヒン ト : ハードウェアは ZIP ファ イル (<project wrapper>.xsa) でエクスポート されます。 Vitis IDE で hardware .xsa を使用してプラ ッ ト フォームを作成する と、 プロジェク ト プラ ッ ト フォームのフォルダーにこの ZIP ファ イル

が自動的に解凍され、 ファ イルが作成されます。

X-Ref Target - Figure 2-10

図 2-10: [IP Sources] の下に生成された出力

X-Ref Target - Figure 2-11

図 2-11: [Export Hardware]

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 21UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 22: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ン

Vitis IDE を使用したハードウェア プラッ ト フォームの作成

1. Windows のスタート メニューからか、 または C:\Xilinx\Vitis\2019.2\bin\vitis.bat ファ イルをダブ

ルク リ ッ ク して Vitis IDE を起動します。

2. ワークスペースを選択して操作を続けます。

3. Vitis IDE で [File] → [New] → [Platform Project] をク リ ッ ク します。

4. ハードウェア プラ ッ ト フォーム名を入力して [Next] をク リ ッ ク します。

X-Ref Target - Figure 2-12

図 2-12: Vitis IDE の起動

X-Ref Target - Figure 2-13

図 2-13: New Platform Project ウィザード

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 22UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 23: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ン

5. [Create from hardware specification (XSA/DSA)] をオンにして [Next] をク リ ッ ク します。

6. Vivado で生成された .xsa/.dsa ファ イルを指定します。

7. [Finish] をク リ ッ ク します。

X-Ref Target - Figure 2-14

図 2-14: カスタム ハードウェアの選択

X-Ref Target - Figure 2-15

図 2-15: ハードウェア使用の選択

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 23UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 24: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ン

8. Vitis IDE によ りプラ ッ ト フォームが数分で生成されます。 次の図に示すよ うに [Explorer] ビューに生成された

ファイルが表示されます。

9. プラ ッ ト フォーム プロジェク トには、 デフォルトの FSBL および PMU ファームウェアが含まれ、

psu_cortexa53_0 ド メ インもプラ ッ ト フォームに追加されます。 プラ ッ ト フォームには複数のド メ インを追加で

き、 ほかのアプリ ケーシ ョ ン同様 FSBL も作成できます。

注記: 次の手順に従い、 psu_cortexa53_0 ド メ インにライブラ リ を追加します。

a. standalone on psu_cortexa53_0 BSP をダブルク リ ッ ク します。

b. [Modify BSP Settings] をク リ ッ ク します。

c. [Overview] ページで [xilffs], [xilpm]、 および [xilsecure] を選択します。

10. プラ ッ ト フォームを右ク リ ッ ク して、 [Build Project] をク リ ッ ク してハード ウェアをビルド します。

X-Ref Target - Figure 2-16

図 2-16: カスタム プラッ ト フォームの追加

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 24UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 25: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ン

これでハード ウェア プラ ッ ト フォームが準備できました。 このプラ ッ ト フォームを使用してアプリ ケーシ ョ ン

を作成し、 zcu102 ハードウェアをテス トできます。

cortexr5_0 の Vitis ド メインの作成

次の手順に従って cortexr5_0 の Vitis ド メ インを作成します。

1. edt_zcu102_wrapper プラ ッ ト フォームは、 デフォルトで psu_cortexa53_0 のデフォルト ド メ インに割り当てられ

ます。 RPU をターゲッ ト したアプリ ケーシ ョ ンでは、 cortexr5_0 のド メ インを作成する必要があ り ます。

2. [platform.spr] をダブルク リ ッ ク します。 プラ ッ ト フォームが [Explorer] ビューに開きます。

3. ビュー右上の + ボタンをク リ ッ ク して、 ド メ インを追加します。

4. 次の設定でド メ インを作成します。

5. Vitis IDE で新しいド メ インが作成され、 edt_zcu102_wrapper プラ ッ ト フォームの下に psu_cortexr5_0 が表示され

ます。

X-Ref Target - Figure 2-17

図 2-17: ハードウェア プラッ ト フォームのビルド

表 2-3: 新規ド メインを作成する際の設定

システム プロパティ 設定または使用するコマンド

Name psu_cortexr5_0

Display name psu_cortexr5_0

OS Standalone

Version Standalone (7.1)

Processor psu_cortexr5_0

Supported Runtime C/C++

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 25UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 26: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ン

注記: psu_cortexr5_0 ド メ インを変更して、 xilffs、 xilpm、 および xilsecure ライブラ リ を追加します。 変更するに

は、 standalone on psu_cortexr5_0 bsp, をダブルク リ ッ ク し、 [Modify BSP Settings] をク リ ッ ク します。 [Overview] ページでライブラ リ を追加します。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 26UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 27: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章

PS サブシステム用ソフ トウェアのビルドこの章では、 PS サブシステム用にソフ ト ウェアを設定およびビルドする手順を示します。 Vivado® Design Suite で設

定した Zynq® UltraScale™+ ハードウェア プラ ッ ト フォーム (ハードウェア定義ファイル) を使用します。

第 2 章では、 Vivado でハードウェア プラ ッ ト フォームを作成し、 エクスポート しました。 このハード ウェア プラ ッ

ト フォームには、 ハード ウェア ハンドオフ ファ イル、 プロセッシング システム初期化ファイル (psu_init)、 およ

び PL ビッ ト ス ト リームが含まれます。 この章では、 Vitis IDE および PetaLinux でハードウェア プラ ッ ト フォームを 使用して、 プロセッシング システム用にソフ ト ウェアを設定します。

この章では、 2 つの重要な点について説明します。 1 つ目は、 この後の章で使用可能なソフ ト ウェア コンポーネン ト

のビルドおよび設定に役立つ情報を提供します。 2 つ目は、 特定の PS サブシステムをビルドする手順を説明します。

Zynq UltraScale+ のプロセッシング ユニッ ト

Zynq UltraScale+™ にあるプロセッシング システムの主なプロセッシング ユニッ トは次のとおりです。

• アプリ ケーシ ョ ン プロセッシング ユニッ ト : クワ ッ ド コア Arm® Cortex®-A53 MPCore プロセッサ

• リ アルタイム プロセッシング ユニッ ト : デュアル コア Arm Cortex-R5 MPCore プロセッサ

• グラフ ィ ッ クス プロセッシング ユニッ ト : Arm Mali 400 MP2 GPU

• プラ ッ ト フォーム管理ユニッ ト (PMU)

このセクシ ョ ンでは、 上記のユニッ ト をシステム ソフ ト ウェアを使用して設定する方法を説明します。 これは、

FSBL (第 1 段階ブート ローダー ) を使用するブート レベルで実行するか、 またはプラ ッ ト フォーム管理ユニッ ト (PMU) に適用可能なシステム ファームウェアを使用して実行できます。

Vitis IDE で Zynq UltraScale+ ハードウェア プラ ッ ト フォームを使用して、 次のタスクを実行します。

1. Arm Cortex-A53 64 ビッ ト クワ ッ ド コア プロセッシング ユニッ ト (APU) および Cortex-R5 デュアル コア リ アル

タイム プロセッシング ユニッ ト (RPU) 用の FSBL (第 1 段階ブート ローダー ) を作成します。

2. APU および RPU 用のベアメ タル アプリ ケーシ ョ ンを作成します。

3. Vitis IDE を使用してプラ ッ ト フォーム管理ユニッ ト (PMU) 用にプラ ッ ト フォーム管理ユニッ ト ファームウェア

を作成します。

ベアメ タル アプリ ケーシ ョ ンのほかに、 APU 用の U-Boot および Linux イ メージのビルドについても説明します。

Linux イ メージおよび U-Boot は、 PetaLinux ビルド システムを使用して設定およびビルドできます。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 27UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 28: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

サンプル プロジェク ト : Arm Cortex-A53 から Hello World アプリケーシ ョ ンを実行

この例では、 Vitis IDE のシステム デバッガーを使用して、 ボード設定の管理、 ケーブル接続、 PC を介したボードへ

の接続、 および JTAG モードで Arm Cortex-A53 から簡単な hello world ソフ ト ウェア アプリ ケーシ ョ ンを実行する方

法を説明します。

1. 電源ケーブルをボードに接続します。

2. USB Micro ケーブルで Windows ホス ト マシンと ターゲッ ト ボードの J2 USB JTAG コネクタを接続します。

3. USB Micro ケーブルで Windows ホス ト マシンと ターゲッ ト ボードのコネクタ J83 を接続します。 シ リ アル転送

に USB を使用する際はこのよ うに接続します。

重要: SW6 スイ ッチが、 次の図に示すよ うに JTAG ブート モードに設定されているこ とを確認します。

4. 次の図に示すスイ ッチを使用して ZCU102 ボードに電源を投入します。

X-Ref Target - Figure 3-1

図 3-1: JTAG ブート モードの SW6 スイッチ設定

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 28UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 29: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

注記: Vitis IDE が既に起動している場合は、 手順 6 へ進みます。

5. Vitis IDE を開き、 プロジェク ト ファ イルへのワークスペース パス (この例では、 C:\edt) を設定します。

または、 Vitis IDE をデフォルトのワークスペースで開き、 後でそれを正しいワークスペースに切り替えるこ と

もできます。 この場合、 [File] → [Switch Workspace] をク リ ッ ク してから、 ワークスペースを選択します。

6. システムで割り当てられている COM ポートのシ リ アル通信ユーティ リ ティ を開きます。 Vitis IDE では、 チュー

ト リ アル全体で使用されるシ リ アル ターミナル ユーティ リ ティが提供されています。[Window] → [Show View>] → [Terminal] をク リ ッ ク してこのユーティ リ ティ を開きます。

7. [Connect] をク リ ッ ク し、 シ リ アル コンフ ィギュレーシ ョ ンを設定して接続します。

8. 変更するには、 [Disconnect] ボタンをク リ ッ ク して接続を解除します。

9. [Settings] をク リ ッ ク して [Terminal Settings] ダイアログ ボッ クスを開きます。

10. デバイス マネージャーでポートの詳細を検証します。

X-Ref Target - Figure 3-2

図 3-2: ZCU102 ボードの電源スイッチ

X-Ref Target - Figure 3-3

図 3-3: [Terminal 1] ウィンドウのヘッダー バー

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 29UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 30: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

UART-0 ターミナルは、 Interface-0 の COM ポートに対応します。 この例では、 デフォルトで UART-0 ターミナル

が設定されているため、 COM ポートに Interface-0 のポート を選択します。

次の図に、 Zynq UltraScale+ MPSoC プロセッシング システム用の標準的な設定を示します。

11. [File] → [New] → [Application Project] をク リ ッ ク します。

New Project ウ ィザードが開きます。

12. ウ ィザードの各ページで次の表の情報に基づいて設定を選択します。

Vitis IDE で test_a53 アプリ ケーシ ョ ン プロジェク トおよび test_a53_system プロジェク トが [Project Explorer] の下に作成されます。 test_a53 アプリ ケーシ ョ ン プロジェク ト を右ク リ ッ ク し、 [Build Project] をク

リ ッ ク してアプ リ ケーシ ョ ンをビルド します。

13. [test_a53] を右ク リ ッ ク して [Run as] → [Run Configurations] をク リ ッ ク します。

X-Ref Target - Figure 3-4

図 3-4: [Terminal Settings] ダイアログ ボックス

表 3-1: スタンドアロン APU アプリケーシ ョ ンの新規アプリケーシ ョ ン プロジェク ト設定

ウィザード画面 システム プロパティ 設定または使用するコマンド

Application Project Project name test_a53

Use default location オン

System Project Create New

Platform edt_zcu102_wrapper

Domain standalone on psu_cortexa53_0

言語 C

CPU psu_cortexa53_0

OS Standalone

Templates Available Templates Hello World

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 30UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 31: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

14. [Xilinx Application Debugger] を右ク リ ッ ク して [New Configuration] をク リ ッ ク します。

Vitis IDE で Debugger_test_a53-Default という名前の新しい実行コンフ ィギュレーシ ョ ンが作成されま

す。

アプ リ ケーシ ョ ンに関連するコンフ ィギュレーシ ョ ンは、 起動コンフ ィギュレーシ ョ ンの [Main] タブに自動入

力されます。

15. [Target Setup] タブをク リ ッ ク し、 設定を確認します。

注記: ボードは電源を切って入れ直す前に JTAG ブート モードになっている必要があ り ます。

16. ボードの電源を切って入れ直します。

17. [Run] をク リ ッ ク します。

次の図に示すよ うに、 [Terminal 1] のシ リ アル通信ユーティ リ ティに 「Hello World」 と表示されます。

注記: Zynq UltraScale+ 評価ボードで実行する上記ソフ ト ウェア アプリ ケーシ ョ ン用にビッ ト ス ト リームをダウ

ンロードする必要はあ り ませんでした。 Arm Cortex-A53 クワ ッ ド コアは既にプロセッシング システムに実装さ

れています。 簡単なアプリ ケーシ ョ ンを実行するこ とを目的と したこのシステムの基本的な初期化は、 デバイ

ス初期化 Tcl スク リプ トで実行されます。

18. ボードの電源を切って入れ直し、 次のセクシ ョ ンの手順用に同じ接続とボード設定を保持します。

ここまでの結果

アプリ ケーシ ョ ン ソフ ト ウェアによって、 「Hello World」 の文字列が PS の UART0 ペリ フェラルに送信されました。

UART0 からホス ト マシンで動作しているシ リ アル ターミナル アプリ ケーシ ョ ンへ、 Hello World の文字列がバイ ト

ごとに送信され、 文字列と して表示されます。

サンプル プロジェク ト : Arm Cortex-R5 から Hello World アプリケーシ ョ ンを実行

この例では、 Vitis IDE のシステム デバッガーを使用して、 ボード設定の管理、 ケーブル接続、 PC を介したボードへ

の接続、および JTAG モードで Arm Cortex-R5 から簡単な hello world ソフ ト ウェア アプリ ケーシ ョ ンを実行する方法

を説明します。

注記: ボードが既に設定されている場合は、 手順 5 に進みます。

X-Ref Target - Figure 3-5

図 3-5: シリアル ターミナルへの出力

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 31UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 32: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

1. 電源ケーブルをボードに接続します。

2. マイクロ USB ケーブルで Windows ホス ト マシンと ターゲッ ト ボードの J2 USB JTAG コネクタを接続します。

3. USB ケーブルで Windows ホス ト マシンと ターゲッ ト ボードのコネクタ J83 を接続します。シ リ アル転送に USB を使用する際はこのよ うに接続します。

4. 図 3-1 に示すスイ ッチを使用して ZCU102 ボードに電源を投入します。

重要: 図 3-1 に示すよ うに SW6 スイ ッチが JTAG ブート モードに設定されているこ とを確認します。

注記: Vitis IDE が既に起動している場合は、 手順 6 へ進みます。

5. Vitis IDE を起動して、 プロジェク ト ファ イルへのワークスペース パスを設定します。 この例では次を使用しま

す。

C:\edt\.

または、 Vitis IDE をデフォルトのワークスペースで開き、 後でそれを正しいワークスペースに切り替えるこ と

もできます。 この場合、 [File] → [Switch Workspace] をク リ ッ ク してワークスペースを選択します。

6. システムで割り当てられている COM ポートのシ リ アル通信ユーティ リ ティ を開きます。 Vitis IDE では、 チュー

ト リ アル全体で使用されるシ リ アル ターミナル ユーティ リ ティが提供されています。 [Window] → [Show View] → [Terminal] をク リ ッ ク してこのユーティ リ ティ を開きます。

7. [Connect] をク リ ッ ク し、 シ リ アル コンフ ィギュレーシ ョ ンを設定して接続します。

8. [Settings] をク リ ッ ク して [Terminal Settings] ダイアログ ボッ クスを開きます。

COM ポートの詳細は、 ホス ト マシンのデバイス マネージャーから入手できます。 UART-0 ターミナルは、

Interface-0 の COM ポートに対応します。 この例では、 UART-0 ターミナルがデフォルトで設定されているため、

COM ポートに対して Interface-0 のポート を選択します。

次の図に、 Zynq UltraScale+ MPSoC プロセッシング システム用の標準的な設定を示します。

X-Ref Target - Figure 3-6

図 3-6: [Terminal 1] ウィンドウのヘッダー バー

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 32UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 33: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

9. Vitis IDE で [Debug] ウ ィンド ウから [C/C++] ウ ィンド ウに切り替えます。 これには、 [Window] → [Open Perspective → [C/C++] をク リ ッ ク します。

Vitis IDE で [C/C++] ウ ィンド ウが既に表示されている場合は、 この手順を無視してください。

10. [File] → [New] → [Application Project] をク リ ッ ク します。

New Project ウ ィザードが開きます。

11. 次の表の情報に基づいて、 ウ ィザード画面で選択操作を実行します。

Vitis IDE で hello_world_r5 アプリ ケーシ ョ ン プロジェク トおよび hello_world_r5_system プロジェク

トが [Project Explorer] の下に作成されます。 アプリ ケーシ ョ ンを手動でコンパイルする必要があ り ます。

12. [hello_world_r5] を右ク リ ッ ク して [Run as] → [Run Configurations] をク リ ッ ク します。

13. [Xilinx Application Debugger] を右ク リ ッ ク して [New Configuration] をク リ ッ ク します。

X-Ref Target - Figure 3-7

図 3-7: [Terminal Settings] ダイアログ ボックス

ウィザード画面 システム プロパティ 設定または使用するコマンド

Application Project Project name hello_world_r5

Use default location オン

System Project Create New

Platform edt_zcu102_wrapper

Domain psu_cortexr5_0

Language C

CPU psu_cortexr5_0

OS standalone

Templates Available Templates Hello World

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 33UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 34: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

Vitis IDE で Debugger_hello_world_r5-Default とい う名前の新しい実行コンフ ィギュレーシ ョ ンが作成されます。

アプ リ ケーシ ョ ンに関連するコンフ ィギュレーシ ョ ンは、 起動コンフ ィギュレーシ ョ ンの [Main] タブに自動入

力されます。

14. [Target Setup] タブをク リ ッ ク し、 設定を確認します。

このファイルは、 Vitis IDE でプラ ッ ト フォームを作成した際にエクスポート され、 プロセッシング システムの

初期化情報を含みます。

15. [Run] をク リ ッ ク します。

次の図に示すよ うに、 [Terminal 1] のシ リ アル通信ユーティ リ ティに 「Hello World」 と表示されます。

注記: Zynq UltraScale+ 評価ボードで実行する上記ソフ ト ウェア アプリ ケーシ ョ ン用にビッ ト ス ト リームをダウ

ンロードする必要はあ り ませんでした。 Arm Cortex -R5 デュアル コアは既にボードに実装されています。 簡単

なアプリ ケーシ ョ ンを実行するこ とを目的と したこのシステムの基本的な初期化は、 デバイス初期化 Tcl スク リ

プ トで実行されます。

ここまでの結果

アプリ ケーシ ョ ン ソフ ト ウェアによって、 「Hello World」 の文字列が PS の UART0 ペリ フェラルに送信されまし

た。

UART0 からホス ト マシンで動作しているシ リ アル ターミナル アプリ ケーシ ョ ンへ、 「Hello world」 の文字列が

バイ ト ごとに送信され、 文字列と して表示されます。

その他の情報

ド メイン

ド メ インは、 スタンドアロン BSP、 Linux OS、 FreeRTOS などのサードパーティ OS/BSP、 デバイス ツ リー ジェネ

レーターなどのコンポーネン トの設定およびファイルを指します。

X-Ref Target - Figure 3-8

図 3-8: シリアル ターミナルへの出力

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 34UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 35: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

ボード サポート パッケージ (BSP)ボード サポート パッケージ (BSP) はハードウェア プラ ッ ト フォームまたはボードのサポート コードです。 このコー

ドは、 電源投入時の基本的な初期化に役立つだけでなく、 ソフ ト ウェア アプリ ケーシ ョ ンがハード ウェア プラ ッ ト

フォームまたはボードの 上位で実行されるよ うにサポート します。 これは、 ブート ローダーおよびデバイス ド ラ

イバーを備えるオペレーティング システム固有のものにできます。

ヒン ト : BSP ソースを リセッ トするには、 [platform.prj] をダブルク リ ッ ク して、 ド メ イン内の BSP を選択し、 [Reset BSP Source] をク リ ッ ク します。 この場合、 ソース ファ イルのみがリセッ ト され、 設定はリセッ ト されません。

アプ リ ケーシ ョ ン プロジェク トの作成後にターゲッ ト ド メ インを変更するには、 [Explorer] ビューで project.prj をダ

ブルク リ ッ ク します。 [Application Project Settings] で [Domain] → [Domain change option] → [Domain] をク リ ッ ク し、

ターゲッ ト ド メ インを変更します。

スタンドアロン BSPスタンドアロンはシンプルな下位ソフ ト ウェア層です。 これは、 キャ ッシュ、 割り込み、 例外などの基本的なプロ

セッサ機能およびホス ト環境の基本的なプロセッサ機能へのアクセスを提供します。 これらの機能には、 標準の入

力/出力、 プロファ イル、 停止、 終了が含まれます。 これはセミ ホス ト型のシングル スレッ ド環境です。

サンプル プロジェク ト : Vitis IDE でのベアメ タル アプリケーシ ョ ン プロジェク トの作成

このサンプル プロジェク トでは、 Vitis IDE を起動し、 Vivado Design Suite を使用して作成された Zynq UltraScale+ 用ハードウェア プラ ッ ト フォームを使用してベアメ タル アプリ ケーシ ョ ンを作成します。 図 3-13 に示す New Project ウ ィザードは、 Zynq UltraScale+ デバイスのプロセッシング サブシステム用にベアメ タル (スタンドアロン) アプリ

ケーシ ョ ンを作成するためのオプシ ョ ンを示しています。

Arm Cortex-A53 ベースの APU 用ベアメ タル アプリケーシ ョ ンの作成

FSBL が作成されたので、 Arm A53 コア 0 をターゲッ トにした簡単なベアメ タル アプリ ケーシ ョ ンを作成できます。

この例では、 「サンプル プロジェク ト : Arm Cortex-A53 から Hello World アプリ ケーシ ョ ンを実行」 で作成した test_a53 アプリ ケーシ ョ ンを使用します。

test_a53 では簡単な Hello World アプリ ケーシ ョ ンを選択しました。 このアプリ ケーシ ョ ンは、 APU または RPU 上で

動作している FSBL によ り APU にロードできます。

Vitis IDE では、 Zynq UltraScale+ デバイスでのアプリ ケーシ ョ ンを簡単に実行できるよ うにするベアメ タル アプリ

ケーシ ョ ン テンプレート をいくつか提供しています。 また、 [Available Templates] から [Empty Application] を選択し、

アプ リ ケーシ ョ ン フォルダー構造にカスタム アプリ ケーシ ョ ン コードをコピーまたは作成するこ と もできます。

アプリケーシ ョ ン ソース コードの編集

1. [Project Explorer] ビューで [Test_a53] → [src] → [helloworld.c] をク リ ッ ク します。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 35UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 36: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

test_a53 アプリ ケーシ ョ ン用の helloworld.c ソース ファ イルが開きます。

2. print コマンドの引数を次のよ うに編集します。

Print("Hello World from APU\n\r");

3. Ctrl + S キーを押して変更を保存します。

4. test_a53 プロジェク ト を右ク リ ッ ク し、 [Build Project] をク リ ッ ク します。

5. アプリ ケーシ ョ ンがコンパイルされ、 リ ンクが正常に確立され、 test_a53.elf ファ イルが [test_a53] → [Debug] フォルダーに生成されているこ とを確認します。

Arm Cortex-R5 ベースの RPU 用ベアメ タル アプリケーシ ョ ンの作成

この例では、 Arm Cortex-R5 ベースの RPU 用ベアメ タル アプリ ケーシ ョ ン プロジェク ト を作成します。 このプロ

ジェク トでは、 このチュート リ アルでリ リースされたデザイン ファ イル (ZIP ファ イル) に含まれるアプリ ケーシ ョ

ン ソース ファ イルをインポートする必要があ り ます。 これらのデザイン ファ イルの場所は、 付録 B の 「このチュー

ト リ アルのデザイン ファ イル」 を参照してください。

アプリケーシ ョ ン プロジェク トの作成

1. Vitis IDE で [File] → [New] → [Application Project] をク リ ッ ク して、 New Project ウ ィザードを開きます。

2. ウ ィザードの各ページで次の表の情報に基づいて設定を選択します。

X-Ref Target - Figure 3-9

図 3-9: Application Source Code Snippet: Print Command

X-Ref Target - Figure 3-10

図 3-10: [CDT Build Console]

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 36UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 37: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

3. [Finish] をク リ ッ ク します。

New Project ウ ィザードが閉じ、 Vitis IDE によって testapp_r5 アプリ ケーシ ョ ン プロジェク トが [Project Explorer] の下に作成されます。

4. [Project Explorer] ビューで [testapp_r5] プロジェク ト を展開します。

5. [src] を右ク リ ッ ク し、 [Import] をク リ ッ ク して [Import] ダイアログ ボッ クスを開きます。

6. [Import] ダイアログ ボッ クスで [General] を展開し、 [File System] をク リ ッ ク します。

7. [Next] をク リ ッ ク します。

8. [Browse] をク リ ッ ク し、 前に保存したデザイン ファ イル フォルダーに移動します (付録 B の 「このチュート リ

アルのデザイン ファ イル」 参照)。

9. [OK] をク リ ッ ク します。

10. testapp.c ファ イルを選択します。

11. [Finish] をク リ ッ ク します。

12. testapp.c を開いてこのアプリ ケーシ ョ ンのソース コードを確認します。 アプリ ケーシ ョ ンでは、 UART 割り

込みが設定され、 プロセッサが WFI モードに設定されています。 このアプリ ケーシ ョ ンについては、 第 5 章

「ブートおよびコンフ ィギュレーシ ョ ン」 での実行時に再度利用し、 説明します。

リンカー スクリプ トの変更

1. [Project Explorer] ビューで [testapp_r5] プロジェク ト を展開します。

2. [src] を展開表示して [lscript.ld] をダブルク リ ッ ク し、 プロジェク トの リ ンカー スク リプ ト を開きます。

3. リ ンカー スク リプ トの [Available Memory Regions] で、 psu_r5_ddr_0_MEM_0 のベース アドレス とサイズを次の

よ うに変更します。

° [Base Address]: 0x70000000

° [Size]: 0x10000000

表 3-2: 新しい RPU アプリケーシ ョ ン プロジェク ト作成時の設定

ウィザード ページ システム プロパティ 設定または使用するコマンド

Application Project Project name testapp_r5

Use default location オン

System Project Create New

Platform edt_zcu102_wrapper

Domain psu_cortexr5_0

Language C

CPU psu_cortexr5_0

OS Standalone

Templates Available Templates Empty Application

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 37UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 38: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

リ ンカー スク リプ トの変更を次の図に示します。 この図は表示のみです。 実際のメモ リ領域は、 隔離設定が使

用されている場合は異なるこ とがあ り ます。

この リ ンカー スク リプ トの変更によ り、RPU ベアメ タル アプリ ケーシ ョ ンは DDR の 0x70000000 のベース アド

レスよ り上位にあ り、 256 MB 以下のサイズとな り ます。

4. Ctrl + S キーを押して変更を保存します。

5. testapp_r5 プロジェク ト を右ク リ ッ ク し、 [Build Project] をク リ ッ ク します。

6. アプリ ケーシ ョ ンがコンパイルされ、 リ ンクが正常に確立され、 testapp_r5.elf ファ イルが [testapp_r5] → [Debug] フォルダーに生成されているこ とを確認します。

ボード サポート パッケージの変更

ZCU102 評価キッ トには、 Silicon Labs 社の USB-TO-QUAD-UART Bridge IC (CP2108) が搭載されています。 これによ

り、 A53 および R5 コアで動作するアプリ ケーシ ョ ンに異なる UART ポート を選択できます。 この例では、 A53 にデ

フォルトの UART 0 を使用し、 UART 1 を介して RPU シ リ アル データを送受信します。 このためには、 r5_bsp ファ

イルを少し変更する必要があ り ます。

1. psu_cortexr5_0 ド メ インの BSP をダブルク リ ッ ク し、 [Modify BSP Settngs] をク リ ッ ク します。 stdin および stdout を psu_uart_1 に変更します。

2. [Standalone] をク リ ッ ク します。

3. 次の図に示すよ うに、 [stdin ] および [stdout] の値 ([Value] 列) を 「psu_uart_1」 に変更します。

X-Ref Target - Figure 3-11

図 3-11: リンカー スクリプ トの変更

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 38UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 39: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

4. [OK] をク リ ッ ク します。

5. psu_cortexr5_0 ド メ インおよび testapp_r5 アプリ ケーシ ョ ンをビルド します。

6. アプリ ケーシ ョ ンがコンパイルされ、 リ ンクが正常に確立され、 testapp_r5.elf が [testapp_r5] → [Debug] フォルダーに生成されているこ とを確認します。

プラッ ト フォームでのソフ トウェア プロジェク トの確認

プラッ ト フォームでの FSBL の確認

プラ ッ ト フォームで FSBL を確認するには、 次の手順に従います。

1. edt_zcu102_wrapper を展開して zynqmp_fsbl をク リ ッ ク し、 zynqmp の FSBL ソース コードを開きます。 この

ソースは編集してカスタマイズできます。

2. JTAG を使用してスタンドアロン アプリ ケーシ ョ ンを起動する と き と異なり、 プラ ッ ト フォームで生成された FSBL は PS 初期化に含められます。

3. この FSBL は psu_cortexa53_0 用に作成されていますが、zynqmp_fsbl ド メ イン設定で [re-target to psu_cortexr5_0] オプシ ョ ンを使用する と、 psu_cortexr5_0 にターゲッ ト し直すこ とが可能です。

プラ ッ ト フォームでの PMU ファームウェアの確認

プラッ ト フォームで PMU ファームウェアを確認するには、 次の手順に従います。

1. 任意のプラ ッ ト フォームを展開し、 デフォルトでプラ ッ ト フォーム内に作成された zynqmp_pmufw ソフ ト ウェ

ア プロジェク ト を確認します。

X-Ref Target - Figure 3-12

図 3-12: psu_cortexr5_0 ド メインの [Board Support Package Settings] ダイアログ ボックス

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 39UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 40: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

2. zynqmp_pmufw には、 psu_pmu_0 の PMU ファームウェアのソース コードが含まれています。 psu_pmu_0. でファームウェアをコンパイルして実行します。

zynqmp_pmufw 用の psu_pmu_0 プロセッサ ド メ インが自動的に作成されます。

Arm Cortex-A53 ベースの APU 用 FSBL の作成

FSBL は必要なアプリ ケーシ ョ ンまたはデータをメモ リにロード してターゲッ ト CPU コアでアプリ ケーシ ョ ンを起

動できます。プラ ッ ト フォーム プロジェク トには FSBL が 1 つ提供されていますが、追加で FSBL アプリ ケーシ ョ ン

を汎用アプリ ケーシ ョ ンと して作成して変更を加えたりデバッグ目的で使用したりできます。

この例では、 Arm Cortex-A53 コア 0 をターゲッ ト と した FSBL イ メージを作成します。

1. Vitis IDE を開いていない場合は、 起動します。

2. 第 2 章で作成したプロジェク トに基づいてワークスペース パスを設定します。 たとえば 「C:\edt」 と入力しま

す。

3. [File] → [New] → [Application Project] をク リ ッ ク します。

New Project ウ ィザードが開きます。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 40UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 41: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

4. New Project ウ ィザードの各ページを次の表の情報に基づいて設定します。

X-Ref Target - Figure 3-13

図 3-13: New Project ウィザードの [Application Project] ページ

表 3-3: 新しいアプリケーシ ョ ン プロジェク ト作成時の設定 - FSBL_A53

ウィザード ページ システム プロパティ 設定またはコマンド

Application Project Project name fsbl_a53

Use default location オン

System Project Create New

Platform edt_zcu102_wrapper

Domain Standalone on psu_cortexa53_0

Language C

CPU psu_cortexa53_0

OS Standalone

[Next] をク リ ッ ク

Templates Available Templates Zynq MP FSBL

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 41UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 42: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

5. [Templates] ページで [Zynq MP FSBL] を選択します。

.

6. [Finish] をク リ ッ ク します。

Vitis IDE でシステム プロジェク トおよび FSBL アプリ ケーシ ョ ンが作成されます。

FSBL はデフォルトで基本メ ッセージを表示するよ うに設定されています。 次に、 FSBL ビルド設定を変更してデ

バッグ出力を有効にします。

FSBL のデバッグ オプシ ョ ンの一覧は、 [fsbl_a53] → [src] → [xfsbl_debug.h] ファ イルを参照してください。

X-Ref Target - Figure 3-14

図 3-14: New Project ウィザードの [Templates] ページ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 42UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 43: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

この例では、 次を実行して FSBL_DEBUG_INFO を有効にします。

1. [Project Explorer] ビューで fsbl_a53 アプリ ケーシ ョ ンを右ク リ ッ ク します。

2. [C/C++ Build] → [Settings] をク リ ッ ク します。

3. [Settings] → [ARM V8 gcc compiler] → [Symbols] をク リ ッ ク します。

4. [Add] をク リ ッ ク します。

5. 「FSBL_DEBUG_INFO」 と入力します。

次の図に示すよ うにシンボルを設定します。

6. [OK] をク リ ッ ク し、 変更を適用して [Settings] ダイアログ ボッ クスを閉じます。

7. BSP 設定に移動します。 [Overview] → [Drivers] → [psu_cortexa53_0] → [extra_compiler_flags] をク リ ッ ク し、

[extra_compiler_flags] で 「-Os -flto -ffat-lto-objects」 を追加します。

8. fsbl_a53 アプリ ケーシ ョ ンを右ク リ ッ ク して [Build Project] をク リ ッ ク します。

9. FSBL の実行ファイルが [fsbl_a53] → [debug] → [fsbl_a53.elf] に保存されます。

このチュート リ アルの fsbl_a53 という アプリ ケーシ ョ ン名は、FSBL が APU (Arm Cortex-A53 コア) をターゲッ ト

にしているこ とを示しています。

注記: FSBL を RPU 上で実行するよ うに変更するこ と も可能で、 この場合はソフ ト ウェア スタ ッ クの残り を RPU および APU に読み込むこ とができます。

X-Ref Target - Figure 3-15

図 3-15: [Enter Value] ダイアログ ボックス

X-Ref Target - Figure 3-16

図 3-16: fsbl_a53 アプリケーシ ョ ンのシンボルの設定

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 43UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 44: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

サンプル プロジェク ト : PetaLinux を使用した Linux イメージの作成

前のサンプル プロジェク トでは、 Vitis IDE を使用して、 APU、 RPU、 および PMU 用にブート ローダー イ メージと

ベアメ タル アプリ ケーシ ョ ンを作成しました。 この例では、 Zynq UltraScale+ の Arm Cortex-A53 コア ベース APU 用の Linux オペレーティング システム プラ ッ ト フォームを設定およびビルド します。PetaLinux のツール フローとボー

ド固有の BSP を使用して Linux イ メージを設定し、 ビルド します。

重要: このサンプル プロジェク トには、 Linux ホス ト マシンが必要です。 PetaLinux 2019.2 の依存性については、

『PetaLinux ツール資料: リ ファレンス ガイ ド』 (UG1144) [参照 7] を参照して ください。

重要: この例では、 ZCU102 PetaLinux BSP を使用して PetaLinux プロジェク ト を作成します。 10 ページの 「PetaLinux ツール」 の説明に従って PetaLinux 用の ZCU102 BSP をダウンロード して ください。

1. 次のコマンドを使用して PetaLinux プロジェク ト を生成します。

$petalinux-create -t project -s <path to the directory that has xilinx-zcu102-v2019.2-final.bsp>

注記: xilinx-zcu102-v2019.2-final.bsp は、 ZCU102 プロダクシ ョ ン シ リ コン Rev1.0 ボード用の PetaLinux BSP です。 Rev 1.0 ボードの ES2 シ リ コンを使用している場合は、

xilinx-zcu102-ZU9-ES2-Rev1.0-v2019.2-final.bsp を使用してください。

上記の手順で、 次のよ うな PetaLinux プロジェク ト ディ レク ト リが作成されます。

xilinx-zcu102-2019.2

2. 次のコマンドを使用して、 PetaLinux プロジェク ト ディ レク ト リに移動します。

$ cd xilinx-zcu102-2019.2

ZCU102 PetaLinux-BSP はデフォルトの ZCU102 Linux BSP です。 この例では、 第 2 章で Vivado Design Suite を使用して設定した Zynq UltraScale+ ハードウェア プラ ッ ト フォームに基づいて、 PetaLinux プロジェク ト を再

度設定します。

3. ハードウェア プラ ッ ト フォーム edt_zcu102_wrapper.xsa を Linux ホス ト マシンにコピーします。

4. 次のコマンドを実行してプロジェク ト を再度設定します。

$ petalinux-config --get-hw-description=<path containing edt_zcu102_wrapper.xsa>/

[PetaLinux Configuration] ウ ィンド ウが開きます。 必要に応じて設定内容を変更してください。 この例では、 BSP からのデフォルト設定で必要なブート イ メージを生成できます。

次の手順で、 PetaLinux が SD ブートの Linux およびブート イ メージを作成するよ うに設定されているかど うか

を確認します。

5. [Subsystem AUTO Hardware Settings] を選択します。

6. [Advanced Bootable Images Storage Settings] を選択します。

a. [boot image settings] を選択します。

b. [Image Storage Media] を選択します。

c. ブート デバイス と して [primary sd] を選択します。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 44UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 45: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

7. [Advanced Bootable Images Storage Settings] サブメニューで、 次の操作を実行します。

a. [kernel image settings] を選択します。

b. [Image Storage Media] を選択します。

c. ス ト レージ デバイス と して [primary sd] を選択します。

8. [Subsystem AUTO Hardware Settings] の下の [Memory Settings] を選択し、 [System Memory Size] を 0x6FFFFFFF に設定します。

9. 設定内容を保存し、 Configuration ウ ィザードを終了します。

10. PetaLinux がプロジェク ト を再設定するのを待ちます。

次の手順で Linux イ メージをビルド し、 検証して、 ブート イ メージを生成します。

11. デバイス ツ リーで Heartbeat LED、 SW19 プッシュボタンを無効にします。 これによ り、 このチュート リ アルの

ほかのデザインで、 RPU R5-0 によ り PS LED および SW19 スイ ッチを使用できるよ うにな り ます。 使用する場

合は、 次のディ レク ト リにある system-user.dtsi に次の変更を追加します。

<PetaLinux-project>/project-spec/meta-user/recipes-bsp/device-tree/files/system-use

r.dtsi

12. system-user.dtsi を次のよ うに変更します。

/include/ "system-conf.dtsi"/ {gpio-keys {sw19 {status = "disabled";

};};leds {heartbeat_led {status = "disabled";

};};

};&uart1{status = "disabled";

};

13. <PetaLinux-project> で、 次のコマンドを使用して Linux イ メージをビルド します。

$ petalinux-build

14. 上記の文が正常に実行されたら、 次のコマンドを使用して、 PetaLinux プロジェク ト フォルダーの images ディ

レク ト リ内にあるイ メージと タイムスタンプを検証します。

$ cd images/linux/$ ls -al

15. 次のコマンドを使用して、 ブート イ メージを生成します。

$ petalinux-package --boot --fsbl zynqmp_fsbl.elf --u-boot

これで、 <petalinux-project>/images/linux/BOOT.BIN ディレク ト リに BOOT.BIN イ メージ ファ イル

が作成されます。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 45UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 46: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

ログに、 上記コマンドで PMU_FW および ATF が BOOT.BIN に含まれるこ とが示されます。 また上記コマンドで --pmufw <PMUFW_ELF> および --atf <ATF_ELF> を追加するこ と もできます。 詳細は、 $

petalinux-package --boot --help を参照して ください。

注記: 上記のコマンドでは、 ビッ ト ス ト リームを追加する --fpga コマンドは意図的に含めていません。 これは、 この

時点でのハードウェア コンフ ィギュレーシ ョ ンは PS のみに基づいており、 PL のデザインは含まれていないからで

す。 デザインにビッ ト ス ト リームが存在する可能性を考慮して、 次に示すよ うに petalinux-package コマンドに --fpga を追加できます。

petalinux-package --boot --fsbl zynqmp_fsbl.elf --fpga system.bit --pmufw pmufw.elf --atf bl31.elf --u-boot u-boot.elf

ZCU102 ボードのイメージの検証

次を実行してイ メージを検証します。

1. BOOT.BIN ファイルと image.ub ファ イルを SD カードにコピーします。

2. SD カードを ZCU102 ボードの J100 コネクタに挿入します。

3. マイクロ USB ケーブルで ZCU102 ボードの USB UART ポート (J83) とホス ト マシンの USB ポート を接続しま

す。

4. スイ ッチ SW6 を次の図に示すよ うに設定し、 ボードを SD ブート モードに設定します。

5. 12V 電源を ZCU102 の 6 ピン Molex コネクタに接続します。

X-Ref Target - Figure 3-17

図 3-17: SD ブート モードの SW6 スイッチ設定

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 46UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 47: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

6. 使用しているホス ト マシンに応じて Tera Term または Minicom を使用し、 ターミナル セッシ ョ ンを開始します。

システムの COM ポート とボー レート を次の図に示すよ うに設定します。

7. ポート設定では、 デバイス マネージャーで COM ポート を検証し、 COM ポートに対して Interface-0 を選択しま

す。

8. SW1 を使用して ZCU102 ボードに電源を投入し、 Linux がボードにロード されるまで待ちます。

PetaLinux を使用した QSPI フラッシュ用 Linux イメージの作成

前のサンプル プロジェク トでは、 SD カードからブートするための Linux イ メージとブート イ メージを作成する方法

について説明しました。 このセクシ ョ ンでは、 QSPI フラ ッシュ用の Linux イ メージを生成するために PetaLinux を設

定する方法を説明します。 PetaLinux 2019.2 の依存性については、 『PetaLinux ツール資料: リ ファレンス ガイ ド』 (UG1144) [参照 7] を参照してください。

1. サンプル プロジェク ト を開始する前に、 次のコマンドを使用して SD カードのセッ ト アップ用に作成された

ブート イ メージのバッ クアップを作成します。

$ cd <Petalinux-project-path>/xilinx-zcu102-2019.2/images/linux/$ mkdir sd_boot$ cp image.ub sd_boot/$ cp u-boot.elf sd_boot/$ cp BOOT.BIN sd_boot/

2. ディ レク ト リ を次の PetaLinux プロジェク トのルート ディ レク ト リに変更します。

$ cd <Petalinux-project-path>/xilinx-zcu102-2019.2

3. 上位のシステム設定メニューを起動します。

$ petalinux-config

Configuration ウ ィザードが開きます。

4. [Subsystem AUTO Hardware Settings] を選択します。

5. [Advanced Bootable Images Storage Settings] を選択します。

a. [boot image settings] を選択します。

b. [Image Storage Media] を選択します。

c. ブート デバイス と して [primary flash] を選択します。

X-Ref Target - Figure 3-18

図 3-18: COM ポートのセッ トアップ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 47UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 48: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 3 章: PS サブシステム用ソフ トウェアのビルド

6. [Advanced Bootable Images Storage Settings] サブメニューで、 次の操作を実行します。

a. [kernel image settings] を選択します。

b. [Image Storage Media] を選択します。

c. [primary flash] をス ト レージ デバイス と して選択します。

7. 1 つ上の [Subsystem AUTO Hardware Settings] で次の操作を実行します。

a. [Flash Settings] を選択して、 パーティシ ョ ン テーブルに示されるエン ト リ を確認します。

b. 一部のメモ リ (0x1E00000 + 0x40000) は、初期ブート パーティシ ョ ンおよび U-Boot の設定用に確保されてい

ます。 これらの値は、 必要に応じて変更できます。

c. これに基づいて、 Linux イ メージのオフセッ トは QSPI フラ ッシュ デバイスの 0x1E40000 と して計算されま

す。 これは、 第 5 章で QSPI ブート モードのブート イ メージを作成する際に使用されます。

次の手順を使用して Linux のシステム メモ リ サイズを約 1.79 GB に設定します。

8. [Subsystem AUTO Hardware Settings] で次を実行します。

a. [Memory Settings] を選択します。

a. [System Memory Size] を 0x6FFFFFFF に設定します。

9. 設定内容を保存し、 Configuration ウ ィザードを終了します。

10. petalinux-build コマンドを使用して再構築します。

11. u-boot.elf およびその他のイ メージのバッ クアップを作成します。 これらは第 5 章で使用します。

注記: 詳細は、 『PetaLinux ツール資料: リ ファレンス ガイ ド』 (UG1144) [参照 7] を参照して ください。

この章では、 ザイ リ ンクス ツールを使用して Zynq UltraScale+ デバイスのソフ ト ウェア ブロ ッ クを設定およびコン

パイルする方法を説明しました。 第 6 章ではこれらのイ メージを使用して、 特定のサンプル デザイン用にブート イメージを作成します。

第 4 章 「Vitis デバッガーを使用したデバッグ」 では、 Vitis IDE を使用して Zynq UltraScale+ デバイスのソフ ト ウェア

をデバッグします。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 48UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 49: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 4 章

Vitis デバッガーを使用したデバッグこの章では、 これまで説明してきたデザイン フローで可能なデバッグについて説明します。 初のオプシ ョ ンは、

Vitis デバッガーを使用したソフ ト ウェアのデバッグです。

Vitis デバッガーは、 次のデバッグ機能を提供します。

• Arm® Cortex®-A53、 Arm Cortex-R5、 および MicroBlaze™ プロセッサ アーキテクチャ上のプログラムのデバッ

グをサポート (ヘテロジニアス マルチプロセッサ ハードウェア システムのデバッグ)

• ハードウェア ボード上のプログラムのデバッグをサポート

• リモート ハードウェア システムでのデバッグ

• プログラムをデバッグするための豊富な機能を備えた IDE を提供

• テス ト スク リプ トの実行および自動化のためのツール コマンド言語 (Tcl) インターフェイスを提供

Vitis デバッガーを使用する と、 プログラムの実行中に何が起こっているかを確認できます。 プロセッサを停止する

ブレークポイン ト またはウォッチポイン トの設定、 プログラムのステップ実行、 プログラム変数およびスタ ッ クの

確認、 システム内のメモ リ内容の確認などを実行できます。

Vitis デバッガーでは、 ザイ リ ンクス システム デバッガーを使用したデバッグがサポート されます。

ザイリンクス システム デバッガー

ザイ リ ンクス システム デバッガーでは、ザイ リ ンクスの hw_server が基本のデバッグ エンジンと して使用されます。

Vitis IDE は、 各ユーザー インターフェイス操作を一連の TCF (Target Communication Framework) コマンドに変換しま

す。 システム デバッガーからの出力を処理して、 デバッグされているプログラムの現在のステート を表示します。

Vits IDE は、 ザイ リ ンクスの hw_server を使用してハード ウェア上のプロセッサと通信します。

次の図に、 このデバッグ ワークフローを示します。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 49UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 50: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 4 章: Vitis デバッガーを使用したデバッグ

ワークフローは、 次の要素で構成されます。

• 実行可能な ELF ファ イル: ユーザー アプリ ケーシ ョ ンをデバッグするには、 デバッグ用にコンパイルされた ELF (Executable and Linkable Format) ファ イルを使用する必要があ り ます。 デバッグ ELF ファ イルには、 デバッ

ガーへの追加のデバッグ情報が含まれ、 ソース コード とその元のソースから生成された 2 進数間が直接関連付

けられます。 ビルド コンフ ィギュレーシ ョ ンを管理するには、 ソフ ト ウェア アプリ ケーシ ョ ンを右ク リ ッ ク し

て [Build Configurations] → [Manage] をク リ ッ ク します。

• [Debug Configuration]: デバッグ コンフ ィギュレーシ ョ ン: デバッグ セッシ ョ ンを開始するには、 Vitis デバッガー

でデバッグ コンフ ィギュレーシ ョ ンを作成する必要があ り ます。 このコンフ ィギュレーシ ョ ンには、 実行ファ

イル名、 デバッグするプロセッサ ターゲッ ト など、 デバッグ セッシ ョ ンを開始するのに必要な情報が含まれま

す。 デバッグ コンフ ィギュレーシ ョ ンを作成するには、 ソフ ト ウェア アプリ ケーシ ョ ンを右ク リ ッ ク して [Debug As] → [Debug Configurations] をク リ ッ ク します。

• Vitis [Debug] パースペクティブ: [Debug] パースペクティブを使用する と、 ワークベンチでプログラムのデバッグ

または実行を管理できます。 ブレークポイン ト を設定、 実行中のプログラムを一時停止、 コードをステップ実

行、 変数の内容を確認するなど、 プログラムの実行を制御できます。 [Debug] ウ ィンド ウを表示するには、

[Window] → [Open Perspective] → [Debug] をク リ ッ ク します。

Vitis デバッガーで、 コードの修正、 実行ファイルの構築、 プログラムのデバッグというサイ クルを繰り返すこ

とができます。

注記: コンパイル後にソースを編集する と、 デバッグ情報がそのソースに直接関連付けられているため、 その行

番号はステップ実行されなくな り ます。 同様に、 適化されたバイナリ をデバッグする と、 実行ト レース中に

予期しないジャンプが発生するこ とがあ り ます。

X-Ref Target - Figure 4-1

図 4-1: システム デバッガーのフロー

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 50UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 51: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 4 章: Vitis デバッガーを使用したデバッグ

Vitis デバッガーを使用したソフ トウェアのデバッグ

この例では、 hello world アプリ ケーシ ョ ンをデバッグします。

APU または RPU で実行する hello world アプリ ケーシ ョ ンがまだ作成されていない場合は、 「Arm Cortex-A53 ベース

の APU 用ベアメ タル アプリ ケーシ ョ ンの作成」 の手順に従って新しい hello world アプリ ケーシ ョ ンを作成します。

hello world アプリ ケーシ ョ ンを作成した後に、 Vitis デバッガーで次の例を実行してソフ ト ウェアをデバッグします。

1. 「サンプル プロジェク ト : Arm Cortex-A53 から Hello World アプリ ケーシ ョ ンを実行」 の手順に従って、 JTAG モードでターゲッ ト を設定し、 電源を投入します。

2. C/C++ 用の表示では、 test_a53 プロジェク ト を右ク リ ッ ク して [Debug As] → [Launch on Hardware (Single Application Debug)] をク リ ッ ク します。

注記: 上記の手順で、 プロジェク ト設定に基づき [Debug] ウ ィンド ウでアプリ ケーシ ョ ン デバッガーを起動しま

す。 または、 図 4-2 に示すよ うにデバッグ コンフ ィギュレーシ ョ ンを作成するこ と もできます。

[Confirm Perspective Switch] ダイアログ ボッ クスが表示されたら、 [Yes] をク リ ッ ク します。 [Debug] パースペク

ティブが開きます。

注記: [Debug] ウ ィンド ウが自動的に開かない場合は、 [Window] → [Perspective] → [Open Perspective] → [Other] をク リ ッ ク してから Open Perspective ウ ィザードの [Debug] をク リ ッ ク します。

X-Ref Target - Figure 4-2

図 4-2: [Debug Configurations] ダイアログ ボックス

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 51UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 52: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 4 章: Vitis デバッガーを使用したデバッグ

注記: このページに示されているアドレスは、 システムで表示されているものと若干異なる場合があ り ます。

プロセッサが main() の冒頭にあ り、 プログラム実行が 0x0000000000000980 で停止しているこ とがわかり

ます。 この情報は [Disassembly] ビューで確認できます。 このビューに、 アセンブリ レベルのプログラム実行が 0x0000000000000980 で一時停止しているこ とが示されています。

注記: [Disassembly] ビューが表示されていない場合は、 [Window] → [Show View] → [Disassembly] をク リ ッ ク しま

す。

3. helloworld.c ウ ィンド ウにも、 C コードの 初の実行可能な行で実行が一時停止しているこ とが表示されて

います。 [Registers] ビューを選択し、 プログラム カウンターである pc レジスタに 0x0000000000000980 が含

まれているこ とを確認します。

注記: [Registers] ウ ィンド ウが表示されていない場合は、 [Window] → [Show View] → [Registers] をク リ ッ ク しま

す。

4. print("Hello World\n\r"); を読み出すコードの行の横にある、 helloworld.c ウ ィンド ウの空白をダブ

ルク リ ッ ク します。 これによ り、 printf コマンドにブレークポイン トが設定されます。 ブレークポイン トの

確認には、 [Breakpoints] ウ ィンド ウを使用します。

注記: [Breakpoints] ウ ィンド ウが表示されていない場合は、 [Window] → [Show View] → [Breakpoints] をク リ ッ ク

します。

5. [Run] → [Step Into] をク リ ッ ク し、 init_platform () ルーチンにステップインします。

プログラムの実行が 0x00000000000009c8 の位置で一時停止します。 コール スタ ッ クの深さは 2 レベルにな

り ます。

6. [Run] → [Resume] をク リ ッ ク し、 プログラムをブレークポイン ト まで実行します。

X-Ref Target - Figure 4-3

図 4-3: アプリケーシ ョ ン デバッグ用の [Debug] パースペクテ ィブ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 52UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 53: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 4 章: Vitis デバッガーを使用したデバッグ

プログラムの実行は、 printf コマンドを含むコードの行で停止します。 [Disassembly] および [Debug] ウ ィンド

ウに、 プログラムの実行が 0x0000000000000984 で停止しているこ とが示されます。

注記: hello world のソース コードを変更した場合、 ウ ィンド ウに表示される実行アドレスは異なる場合があ り ま

す。

7. [Run] → [Resume] をク リ ッ ク し、 プログラムを 後まで実行します。

プログラムの実行が完了する と、 [Debug] ウ ィンド ウにプログラムが exit というルーチンで一時停止している

こ とが示されます。 これは、 デバッガーの制御下で実行している と きに発生します。

8. コードを複数回再実行します。 シングル ステップ、 メモ リの検査、 ブレークポイン ト、 コードの変更、 および print 文の追加を試してみます。 ビューの追加および移動を試します。

ヒン ト : Vitis デバッガーのデバッグ シ ョート カッ ト (ステップ イン (F5)、ステップ リ ターン (F7)、ステップ オーバー (F6)、 および再開 (F8)) を使用できます。

ザイリンクス ソフ トウェア コマンド ライン ツール (XSCT) を使用したデバッグ

前の手順に記載のとおり、 Vitis アプリ ケーシ ョ ン デバッガー GUI を使用して、 RPU および PMU 上で実行している

ベアメ タル アプリ ケーシ ョ ンをデバッグできます。

また、 XSCT の一部と して含まれる XSDB を使用してコマンド ライン モードでデバッグするこ と もできます。 この

例では、 XSCT を使用してベアメ タル アプリ ケーシ ョ ン testapp_r5 をデバッグします。

次の手順は、 XSCT を使用して R5 にベアメ タル アプリ ケーシ ョ ンをロードする方法を示しています。

この例は、 XSDB/XSCT を使用して可能なコマンド ライン デバッグを示すこ とを目的と しています。 要件に基づいて、

システム デバッガー GUI または XSCT のコマンド ライン デバッガーのいずれかを選択してコードをデバッグできま

す。 すべての XSCT コマンドはスク リプ ト記述可能であり、 これはこの例で説明するコマンドに当てはま り ます。

ターゲッ トのセッ トアップ

1. USB ケーブルでターゲッ トの USB-JTAG J2 コネクタ とホス ト マシンの USB ポート を接続します。

2. SW6 を次の図のよ うに設定して、 ボードを JTAG ブート モードに設定します。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 53UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 54: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 4 章: Vitis デバッガーを使用したデバッグ

3. スイ ッチ SW1 を使用してボードに電源を投入します。

4. ツールバーの [XSCT Console] をク リ ッ ク して XSCT コンソールを開きます。

または、 [Xilinx] → [XSCT Console] をク リ ッ ク して XSCT コンソールを開く こ と もできます。

5. [XSCT Console] で、 次の connect コマンドを使用して JTAG を介してターゲッ トに接続します。

xsct% connect

connect コマンドは、 接続のチャネル ID を返します。

6. target コマンドを実行して使用可能なターゲッ ト を リ ス ト し、 ID を使用してターゲッ ト を選択します。

ターゲッ トには JTAG チェーンで検出されたと きに ID が割り当てられるので、 ターゲッ ト ID はセッシ ョ ンごと

に変わり ます。

スク リプ ト記述などの非対話型の使用法では、 ID を使用してターゲッ ト を選択するのではなく、 -filter オプ

シ ョ ンを利用してターゲッ ト を選択できます。

xsct% targets

次の図に示すよ うに、 ターゲッ トが一覧表示されます。

X-Ref Target - Figure 4-4

図 4-4: JTAG ブート モードの SW6 スイッチ設定

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 54UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 55: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 4 章: Vitis デバッガーを使用したデバッグ

7. PSU ターゲッ ト を選択します。 Arm APU および RPU ク ラスターは、 PSU の下にグループ化されています。

xsct% targets -set -filter {name =~ "Cortex-A53 #0"}

targets コマンドはターゲッ ト を リ ス ト し、 選択されたターゲッ ト をアスタ リ スク (*) マークで強調表示しま

す。 または次の図に示すよ うに、 ターゲッ ト番号を使用してターゲッ ト を選択するこ と もできます。

8. Cortex-A53 #0 の FSBL をロード します。 FSBL は、 Zynq® UltraScale+™ のプロセッシング システムを初期化し

ます。

xsct% dow {C:\edt\fsbl_a53\Debug\fsbl_a53.elf}xsct% conxsct% stop

上記のコマンドに中かっこ ({}) が使用されているこ とに注意してください。 これは、 Windows マシンでパスの

バッ ク スラ ッシュ (\) を有効にするために必要です。 パスにフォワード スラ ッシュ (/) を使用する場合は、 中

X-Ref Target - Figure 4-5

図 4-5: ターゲッ トのリスト

X-Ref Target - Figure 4-6

図 4-6: 選択した PSU ターゲッ ト

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 55UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 56: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 4 章: Vitis デバッガーを使用したデバッグ

かっこは不要です。 Linux のパスは、 XSCT のパスは中かっこなしでも機能するため、 フォワード スラ ッシュ (/) を使用します。

XSCT を使用したアプリケーシ ョ ンのロード

1. Arm R5 コア 0 に testapp_r5 アプリ ケーシ ョ ンをダウンロード します。

2. RPU Cortex-R5 コア 0 のターゲッ ト ID をチェッ ク して選択します。

xsct% targetsxsct% targets -set -filter {name =~ "Cortex-R5 #0"} xsct% rst -processor

rst-processoror コマンドは個々のプロセッサ コアのリセッ ト をク リ アします。

Zynq MPSoC を JTAG ブート モードで起動する と、 すべての A53 コアおよび R5 コアがリセッ ト状態に保持され

るので、 この操作は重要です。 これらのコアでデバッグを実行する前に、 各コアのリセッ ト をク リ アする必要

があ り ます。 リセッ トは XSDB の rst コマンドでク リ アできます。

注記: rst -cores コマンドは、 現在のターゲッ トが子である、 グループ (APU または RPU など) 内にあるすべ

てのプロセッサ コアのリセッ ト をク リ アします。 たとえば、 A53#0 が現在のターゲッ トである場合、 rst

-cores は APU のすべての A53 コアのリセッ ト をク リ アします。

xsct% dow {C:\edt\testapp_r5\Debug\testapp_r5.elf}

または

xsct% dow {C:/edt/testapp_r5/Debug/testapp_r5.elf}

こ こで、 ELF ファ イルのセクシ ョ ンが順にダウンロード されるのが表示されます。 XSCT プロンプ トはダウン

ロードが正常に完了する と表示されます。

次に、 シ リ アル ターミナル (Tera Term、 Minicom、 または UART-1 USB シ リアル接続用のシ リ アル ターミナル インターフェイス) を設定します。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 56UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 57: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 4 章: Vitis デバッガーを使用したデバッグ

シリアル ターミナルの設定

1. 使用しているホス ト マシンに応じて Tera Term または Minicom を使用し、 ターミナル セッシ ョ ンを開始します。

COM ポート とボー レート を次の図に示すよ うに設定します。

2. ポート設定では、デバイス マネージャーで COM ポート を検証します。ZCU102 ボードでは 4 つの USB UART インターフェイスを使用できます。 も小さい番号のインターフェイスに関連付けられた COM ポート を選択しま

す。 つま り こ こでは、 UART-0 に Interface-0 の COM ポート を選択します。

3. 同様に、 UART-1 に Interface-1 の COM ポート を選択します。 R5 BSP は UART-1 を使用するよ うに設定されてい

るため、 R5 アプリ ケーシ ョ ン メ ッセージは UART-1 ターミナルの COM ポートに表示されます。

XSCT を使用したアプリケーシ ョ ンの実行およびデバッグ

1. アプリ ケーシ ョ ンを実行する前に、 main () にブレークポイン ト を設定します。

xsct% bpadd -addr &main

このコマンドによ り、 ブレークポイン ト ID が返されます。

bplist コマンドを使用して挿入されたブレークポイン ト を確認できます。

XSCT のブレークポイン トの詳細は、 XSCT で 「help breakpoint」 と入力して確認します。

2. プロセッサ コアの実行を再開します。

xsct% con

コアがブレークポイン トに到達する と、 次の情報メ ッセージが表示されます。

xsct% Info: Cortex-R5 #0 (target 7) Stopped at 0x10021C (Breakpoint)

3. コアが停止しているので、 レジスタを表示して確認します。

xsct% rrd

4. ローカル変数を表示します。

xsct% locals

X-Ref Target - Figure 4-7

図 4-7: COM ポートのセッ トアップ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 57UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 58: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 4 章: Vitis デバッガーを使用したデバッグ

5. ソース コードの行をステップ実行し、 スタ ッ ク ト レースを表示します。

xsct% nxtInfo: Cortex-R5 #0 (target 6) Stopped at 0x100490 (Step)xsct% bt

help コマンドを使用する と、 ほかのオプシ ョ ンを表示できます。

X-Ref Target - Figure 4-8

図 4-8: XSCT ヘルプのカテゴリ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 58UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 59: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 4 章: Vitis デバッガーを使用したデバッグ

help running コマンドを使用する と、 XSCT を使用してアプリ ケーシ ョ ンを実行またはデバッグするための

オプシ ョ ンを表示できます。

6. コードを実行します。

xsct% con

こ こで、 UART-1 ターミナルに R5 アプリ ケーシ ョ ンのメ ッセージが表示されます。

Vitis デバッガーを使用した FSBL のデバッグ

FSBL は、Vitis デバッガーでデフォルト設定の Size Optimization および Link Time Optimization フラグ (-Os および LTO 適化) を使用してビルド されます。 これによ り、 FSBL のメモ リ フッ トプ リ ン トが削減します。 FSBL をデバッグ

する際は、 これをディ スエーブルにする必要があ り ます。

適化をディ スエーブルにする と コード サイズが増加し、 FSBL をビルドできなくなる可能性があ り ます。 デバッ

グでの 適化をディ スエーブルにするには、 FSBL の xfsbl_config.h ファ イルで一部の不要な FSBL 機能をディ

スエーブルにする必要があ り ます。

こ こでは、 第 3 章 「PS サブシステム用ソフ ト ウェアのビルド」 で作成した FSBL を変更する代わりにこのセクシ ョ

ン用の新しい FSBL を作成しします。 これで、 このチュート リ アルの残りの章で使用する FSBL_a53 プロジェク ト を

変更せずにすみます。

FSBL の作成および変更

次の手順に従って、 FSBL プロジェク ト を作成します。

X-Ref Target - Figure 4-9

図 4-9: プログラム実行のデバッグに使用する XSCT ヘルプ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 59UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 60: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 4 章: Vitis デバッガーを使用したデバッグ

1. Vitis デバッガーを開いていない場合は、 起動します。

2. 第 3 章 「PS サブシステム用ソフ ト ウェアのビルド」 で作成したプロジェク トに基づいてワークスペース パスを

設定します。 たとえば 「C:\edt」 と入力します。

3. [File] → [New] → [Application Project] をク リ ッ ク します。

New Project ウ ィザードが開きます。

4. New Project ウ ィザードの各ページを次の表の情報に基づいて設定します。

5. [Finish] をク リ ッ ク します。

Vitis デバッガーでシステム プロジェク トおよび FSBL アプリ ケーシ ョ ンが作成されます。 次の手順に従って 適化

をディ スエーブルにします。

1. [Project Explorer] ビューで fsbl_debug アプリ ケーシ ョ ンを右ク リ ッ ク します。

2. [C/C++ Build] → [Settings] をク リ ッ ク します。

3. [Settings] → [Tool Settings] タブ → [Arm v8 gcc Compiler] → [Miscellaneous] をク リ ッ ク します。

4. 次の図に示すよ うに、 [Other flags] で 「-flto -ffat-lto-objects」 を削除します。

表 4-1: FSBL_debug プロジェク ト作成時の設定

ウィザード ページ システム プロパティ 設定または使用するコマンド

Application Project Project name fsbl_debug

Use default location オン

System Project Create New

Platform edt_zcu102_wrapper

Domain standalone on psu_cortexa53_0

Language C

CPU psu_cortexa53_0

OS standalone

[Next] をク リ ッ ク

Templates Available Templates Zynq MP FSBL

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 60UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 61: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 4 章: Vitis デバッガーを使用したデバッグ

同様に、 fsbl_debug_bsp を変更して 適化をディ スエーブルにする必要があ り ます。

5. [fsbl_debug_bsp] を右ク リ ッ ク し、 [Board Support Package Settings] をク リ ッ ク します。

6. [Overview] → [Drivers] → [psu_cortexa53_0] → [extra_compiler_flags] をク リ ッ ク し、 次の図に示すよ うに [extra_compiler_flags] に 「-g -Wall -Wextra -Os」 を入力します。

X-Ref Target - Figure 4-10

図 4-10: FSBL BSP ビルド設定の変更

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 61UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 62: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 4 章: Vitis デバッガーを使用したデバッグ

7. [OK] をク リ ッ ク してこれらの変更を保存します。 BSP が自動的に再ビルド されます。

8. [fsbl_debug] → [src] → [fsbl_config.h] ファ イルを開きます。 FSBL コードにオプシ ョ ンを含めて次をディ スエーブ

ルにします。

° #define FSBL_NAND_EXCLUDE_VAL (1U)

° #define FSBL_SECURE_EXCLUDE_VAL(1U)

注記: 1 はディ スエーブル、 0 はイネーブルです。

これで、 FSBL をデバッグできるよ うにな り ました。

FSBL は、 ほかのスタンドアロン アプリ ケーシ ョ ンと同じよ うにデバッグするか ( 「Vitis デバッガーを使用したソフ

ト ウェアのデバッグ」 および 「ザイ リ ンクス ソフ ト ウェア コマンド ラ イン ツール (XSCT) を使用したデバッグ」 を

参照)、 システム デバッガーの [Attach to running target] モードを使用してブート イ メージの一部と してデバッグでき

ます。

X-Ref Target - Figure 4-11

図 4-11: FSBL BSP ビルド設定の変更

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 62UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 63: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章

ブートおよびコンフ ィギュレーシ ョ ン

この章では、 コンポーネン ト を統合して Zynq UltraScale+ システムを作成します。 Zynq UltraScale+ システム用にブー

ト ローダー、 ベアメ タル アプリ ケーシ ョ ン (APU/RPU 用)、 および Linux オペレーティング システムを統合してロー

ドする方法を示します。

次の重要な項目について説明します。

• システム ソフ ト ウェア: FSBL、 U-Boot、 Arm® ト ラステッ ド ファームウェア (ATF)

• アプリ ケーシ ョ ン プロセッシング ユニッ ト (APU): APU 用に SMP Linux を設定

• リ アルタイム プロセッシング ユニッ ト (RPU): ロ ッ クステップで RPU 用にベアメ タルを設定

• 次のブート シーケンスのブート イ メージを作成

a. APU

b. RPU ロ ッ クステップ

• セキュア ブート イ メージを作成およびロード

注記: RPU ロ ッ クステップの詳細は、 『Zynq UltraScale+ MPSoC テクニカル リ ファレンス マニュアル』 (UG1085) [参照 5] を参照してください。

ブート シーケンスでは、 プラ ッ ト フォーム管理ユニッ ト (PMU) 用の PMU ファームウェアもロード されます。 上記

の設定は、 Vitis IDE および PetaLinux ツール フローを使用して実行できます。 第 3 章では PS 内の各プロセッシング ユニッ トのソフ ト ウェア ブロ ッ クを作成するこ とにのみ重点を置いていましたが、 この章ではよ り大規模なシステ

ムの一部と してこれらのブロ ッ クをロードする方法を説明します。

ブート イ メージの生成には、Vitis IDE の Create Boot Image ウ ィザード (Bootgen - コマンド ライン ツール) を使用しま

す。 Create Boot Image ウ ィザードまたは Bootgen の主要な機能はパーティシ ョ ン (ハードウェア ビッ ト ス ト リームお

よびソフ ト ウェア) を統合するこ とであ り、 ユーザーはデザインにセキュ リティ オプシ ョ ンを指定できます。 暗号化

キーの作成も可能です。

Bootgen は、 Bootgen イ メージ フォーマッ ト (BIF) ファイルを入力と して使用し、 バイナリ BIN または MCS フォー

マッ トで 1 つのファイル イ メージを生成します。 Bootgen によ り出力された 1 つのファイル イ メージは、 NVM (QSPI、 SD カード ) にロード されます。 Bootgen GUI によ り、 BIF 入力ファイルを簡単に作成できます。

この章では、 プロセッシング システム ブロッ クを使用します。 「サンプル デザイン 1: GPIO、 タイマー、 および割り

込みの使用」 では、 この章で使用される PS パーティシ ョ ンと PL ファブリ ッ クをターゲッ ト とするビッ ト ス ト リー

ムを含むブート イ メージについて説明します。

システム ソフ ト ウェア

この章のブートおよびコンフ ィギュレーシ ョ ンの説明の大部分は、 こ こで挙げるシステム ソフ ト ウェア ブロッ クに

ついてです。 詳細なブート フローおよびさまざまなブート シーケンスについては、 『Zynq UltraScale+ MPSoC ソフ ト

ウェア開発者向けガイ ド』 (UG1137) [参照 6] の 「システム ブートおよびコンフ ィギュレーシ ョ ン」 の章を参照して

ください。

第 1 段階ブート ローダー (FSBL)

非セキュア ブート モードでは、 プラ ッ ト フォーム管理ユニッ ト (PMU) はコンフ ィギュレーシ ョ ン セキュ リ ティ ユニッ トの リセッ ト を解除した後、 PMU サーバー モードに移行して電力を監視します。 この段階で、 コンフ ィギュ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 63UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 64: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

レーシ ョ ン セキュ リティ ユニッ トは FSBL (第一段階ブート ローダー ) をオンチップ メモ リ (OCM) にロード します。

FSBL は、 APU A53_0、 RPU R5_0、 または RPU R5_lockstep から実行できます。 この例では、 FSBL は APU A53 コア 0 をターゲッ ト と しています。 この領域の 後の 512 バイ トは、 ATF がハンドオフするアプ リ ケーシ ョ ンに対応する

ハンドオフ パラ メーターを共有するため、 FSBL で使用されます。

第 1 段階ブート ローダー (FSBL) は、 プロセッシング サブシステム内の重要なブロッ クを初期化します。 これには、

プロセッサのリセッ トのク リ アや、 ク ロ ッ ク、 メモ リ、 および UART の初期化などが含まれます。 その後、 DDR の次のパーティシ ョ ンの制御を RPU または APU に渡します。 この例では、 FSBL は DDR にベアメ タル アプリ ケー

シ ョ ンをロード してロ ッ クステップ モードで RPU R5 にハンドオフし、 同様に U-Boot をロード して、 これを APU A53 コア 0 で実行します。詳細は、『Zynq UltraScale+ MPSoC ソフ ト ウェア開発者向けガイ ド』 (UG1137) [参照 6] を参

照してください。

この章では、 第 3 章で作成した FSBL 実行ファイルを使用できます。 FSBL アプリ ケーシ ョ ンでは、

xfsbl_translation_table.S が A53 の translation_table.S と比べたと きに DDR 領域が予約されている という点のみが異なり

ます。 これは、 DDR が初期化される前に DDR が投機的アクセスされないよ うにするためです。 FSBL で DDR の初

期化が完了する と、 DDR 領域のメモ リ属性が Memory に変更されます。

プラ ッ ト フォーム管理ユニッ ト ファームウェア

複数段階のブート プロセスは、 プラ ッ ト フォーム管理ユニッ ト (PMU) と コンフ ィギュレーシ ョ ン セキュ リティ ユニッ ト (CSU) によ り管理および実行されます。 プリ コンフ ィギュレーシ ョ ン ステージは主に PMU が制御し、 PMU ROM を実行してシステムをセッ ト アップします。 リセッ トおよび復帰に関するプロセスはすべて PMU が処理しま

す。 Vitis IDE では、 PMU ファームウェアを PMU 上で動作するよ うに構築できます。 プラ ッ ト フォーム管理および PMU ファームウェアの詳細は、 『Zynq UltraScale+ MPSoC ソフ ト ウェア開発者向けガイ ド』 (UG1137) [参照 6] を参照

してください。

PMU ファームウェアは、 次の方法で読み込むこ とができます。

1. bootROM を使用 ( 「SD ブートのブート シーケンス」 を参照)。

2. FSBL を使用 ( 「QSPI ブート モードのブート シーケンス」 を参照)。

3. JTAG ブート モードを使用 ( 「JTAG を使用した QSPI ブート モードのブート シーケンス」 を参照)。

詳細は、 PMU ファームウェア ザイ リ ンクス Wiki を参照してください。

U-Boot

U-Boot はセカンダ リ ブート ローダーと して機能します。 FSBL のハンドオフ後、 U-Boot は Arm A53 の APU に Linux をロード します。 FSBL の後、 U-Boot はボード構成に基づいてプロセッシング システムの残りのペリ フェラルの設

定を実行します。 U-Boot は、 eMMC、 SATA、 TFTP、 SD、 QSPI などのさまざまなメモ リ ソースからイ メージを取得

できます。 この例では、 U-Boot とその他すべてのイ メージが SD カードからロード されます。 したがって、 こ こで

はボードは SD ブートモードに設定されます。

U-Boot は、 PetaLinux ツール フローを使用して設定およびビルドできます。 この例では、 第 3 章で作成された、 また

はこの資料に付属のデザイン ファ イルから作成された U-Boot イ メージを使用できます。 このチュート リ アルのデザ

イン ファ イルのダウンロードについては、 153 ページの 「このチュート リ アルのデザイン ファ イル」 を参照してく

ださい。

Arm ト ラステッ ド ファームウェア

Arm ト ラステッ ド ファームウェア (ATF) は、 APU の EL3 (例外レベル 3) で実行される透過的なベアメ タル アプリ

ケーシ ョ ン レイヤーです。 ATF には、 セキュア ワールド と非セキュア ワールドを切り替えるためのセキュア モニ

ター レイヤーが含まれます。 セキュア モニターの呼び出し と TBBR (Trusted Board Boot Requirements) の実装によ り、

Zynq UltraScale+ の APU に Linux をロードするには ATF レイヤーが必須です。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 64UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 65: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

FSBL は APU で実行される ATF をロード します。 ATF は EL3 で動作し続けてサービス要求を待ちます。 ATF は 0xFFFEA000 ステートで開始します。 FSBL は APU で実行される U-Boot を DDR にロード します。 U-Boot は SMP モードで Linux OS を APU にロード します。 こ こで重要なのは、 PL ビッ ト ス ト リームは ATF がロード される前に

ロードする必要がある という こ とです。 これは、 ビッ ト ス ト リームが .BIN ファイルに存在する場合に一時バッ

ファーを保持するため、 ATF 用に予約されている OCM 領域が FSBL で使用されるからです。 そのため、 ビッ ト ス ト

リームを ATF の後にロードする と、 FSBL で ATF イ メージとその一時バッファーが上書きされ、 ATF イ メージが破

損します。 この理由から、 ビッ ト ス ト リームは ATF の前、 理想的には FSBL と PMUFW の直後に .BIF に配置する必

要があ り ます。

ATF (bl31.elf) はデフォルトで PetaLinux に含まれており、 PetaLinux プロジェク トの image ディ レク ト リにあ り ます。

ATF の詳細は、 『Zynq UltraScale+ MPSoC ソフ ト ウェア開発者向けガイ ド』 (UG1137) [参照 6] の 「セキュ リ ティ」 の章

の 「Arm ト ラステッ ド ファームウェア」 を参照してください。

APU の Linux と RPU のベアメ タル

システム ソフ ト ウェアが設定されたら、 PetaLinux ツール フローを使用して Linux イ メージを作成します。 PetaLinux イ メージは第 3 章で既に作成されています。 この例では、 PetaLinux は SD ブート用のイ メージをビルドするよ うに

設定されています。 これは PetaLinux のデフォルトのブート設定です。

イ メージは $<PetaLinux_Project>/images/linux/ ディ レク ト リにあ り ます。

APU に Linux をロードするために、 PetaLinux から次のイ メージが使用されます。

• ATF - bl31.elf

• U-Boot - u-boot.elf

• 次を含む Linux イ メージ - Image.ub:

° カーネル イ メージ

° デバイス ツ リー System.dtb

° ファ イルシステム - rootfs.cpio.gz.u-boot

この例では、 APU の Linux に加え、 ベア メ タル アプ リ ケーシ ョ ンをロ ッ クステップ モードで RPU R5 にロード し

ます。

この例では、 36 ページの 「Arm Cortex-R5 ベースの RPU 用ベアメ タル アプリ ケーシ ョ ンの作成」 で作成した testapp_r5 アプリ ケーシ ョ ンを参考にしてください。

また、 このチュート リ アルに付属のデザイン ファ イルに testapp_r5.elf 実行ファイルがあ り ます。 このチュート リ ア

ルのデザイン ファイルのダウンロードについては、 153 ページの 「このチュート リ アルのデザイン ファ イル」 を参

照してください。

SD ブートのブート シーケンス

各イ メージの準備が完了したので、 ブート イ メージを作成して Zynq UltraScale+ にこれらのコンポーネン ト をすべて

ロード します。 これは、 Vitis IDE の Create Boot Image ウ ィザードを使用して、 次の手順に従って実行できます。

1. Vitis IDE で [Xilinx] → [Create Boot Image] をク リ ッ ク します。

2. この章の前のセクシ ョ ンで説明したすべてのパーティシ ョ ンを選択し、 次の図に示すよ うに設定します。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 65UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 66: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

FSBL パーティシ ョ ンを追加します。

1. Create Boot Image ウ ィザードで、 [Add] をク リ ッ ク して [Add partition] ダイアログ ボッ クスを開きます。

2. [Add partition] ダイアログ ボッ クスで、 [Browse] をク リ ッ ク して FSBL 実行ファイルを選択します。

3. [Partition type] に [bootloader] が選択され、 [Destination CPU] が正し く選択されているこ とを確認します。 これは、

FSBL 実行ファイルに基づいて設定されます。

注記: FSBL はデフォルトで EL3 に設定されているため、 [Exception Level] のド ロ ップダウン リ ス トは無視して

ください。 また、 この例では [Enable Trust Zone] をオフのままにしてください。

X-Ref Target - Figure 5-1

図 5-1: SD ブート モードの Create Boot Image ウ ィザード

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 66UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 67: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

4. [OK] をク リ ッ ク して FSBL を選択し、 Create Boot Image ウ ィザードに戻り ます。

PMU および ATF ファームウェア パーティシ ョ ンを追加します。

1. [Add] をク リ ッ ク して、 次の図に示す [Add partition] ダイアログ ボッ クスを開きます。

X-Ref Target - Figure 5-2

図 5-2: [Add new boot image partition] ページ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 67UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 68: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

2. PMU ファームウェア パーティシ ョ ンを追加します。

a. [Browse] をク リ ッ ク して、 PMU ファームウェア実行ファイルを選択します。

b. [Partision type] で [pmu] を選択します。

注記: pmu パーティシ ョ ン タイプでは実行ファイルが PMU をターゲッ ト とするので、[Destination Device] と [Destination CPU] は淡色表示されます。

3. [Exception Level] ド ロ ップダウン リ ス トは無視し、 [Enable Trust Zone] はオフのままにします。

4. [OK] をク リ ッ ク します。

5. [Add] をク リ ッ ク して、 [Add partition] ダイアログ ボッ クスを開きます。

6. ATF ファームウェア bl31.elf パーティシ ョ ンを追加します。

注記: ATF ファームウェア (bl31.elf) は <PetaLinux Project>/image/linux/ にあ り ます。 または、 「このチュート リ ア

ルのデザイン ファ イル」 の bl31.elf を使用するこ と もできます。

a. [Partision type] で [datafile] を選択します。

b. [Destination Device] を [PS] に設定します。

c. [Destination CPU] を [A53 0] に設定します。

d. [Exception Level] で [EL3] を選択し、 [Enable Trust Zone] をオンにします。

X-Ref Target - Figure 5-3

図 5-3: PMUFW パーティシ ョ ンの追加

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 68UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 69: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

7. [OK] をク リ ッ ク します。

R5 実行ファイルを追加し、 これをロ ッ クステップ モードで有効にします。

1. [Add] をク リ ッ ク して R5 ベアメ タル実行ファイルを追加します。

2. [Destination Device] を [PS] に設定します。

X-Ref Target - Figure 5-4

図 5-4: ATF パーティシ ョ ンの追加

X-Ref Target - Figure 5-5

図 5-5: RPU イ メージ パーティシ ョ ンの追加

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 69UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 70: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

3. [Destination CPU] を [R5 Lockstep] に設定します。

これによ り、 RPU R5 コアがロッ クステップモードで実行されるよ うに設定されます。

4. [Exception Level] ド ロ ップダウン リ ス トは無視し、 [Enable Trust Zone] はオフのままにします。

5. [OK] をク リ ッ ク します。

U-Boot パーティシ ョ ンを追加します。 sd_boot モードの u-boot.elf は、 <PetaLinux_project>/images/linux/sd_boot にあ り

ます。

1. [Add] をク リ ッ ク して u-boot.elf パーティシ ョ ンを追加します。

2. [Destination Device] で [PS] を選択します。

3. [Destination CPU] で [A53 0] を選択します。

4. [Exception Level] を [EL2] に設定します。

5. [OK] をク リ ッ ク して、 Create Boot Image ウ ィザードに戻り ます。

6. [Create Image] をク リ ッ ク します。 ウ ィザードが閉じ、 ブート イ メージが作成されます。

BIF 属性と Bootgen コマンドを使用して BOOT.bin イ メージを作成するこ と もできます。

このコンフ ィギュレーシ ョ ンでは、 BIF ファ イルには次の属性が含まれます。

the_ROM_image:{[fsbl_config]a53_x64[bootloader]C:\edt\fsbl_a53\Debug\fsbl_a53.elf[pmufw_image]C:\edt\pmu_fw\Debug\pmu_fw.elf[destination_cpu = a53-0, exception_level = el-3, trustzone]C:\edt\sd_boot\bl31.elf

X-Ref Target - Figure 5-6

図 5-6: U-Boot パーティシ ョ ンの追加

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 70UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 71: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

[destination_cpu = r5-lockstep]C:\edt\testapp_r5\Debug\testapp_r5.elf[destination_cpu = a53-0, exception_level = el-2]C:\edt\sd_boot\u-boot.elf}

Vitis IDE は次の Bootgen コマンドを呼び出して、 このコンフ ィギュレーシ ョ ンの BOOT.bin イ メージを生成します。

bootgen -image sd_boot.bif -arch zynqmp -o C:\edt\sd_boot\BOOT.bin

ZCU102 ボードでのイ メージの実行

1. BOOT.bin および image.ub イ メージを SD カードにコピーします。

2. SD カードを ZCU102 ボードの J100 コネクタに挿入します。

3. マイクロ USB ケーブルで ZCU102 ボードの USB UART ポート (J83) とホス ト マシンの USB ポート を接続します。

4. スイ ッチ SW6 を次の図に示すよ うに 1 をオン、 2 をオフ、 3 をオフ、 4 をオフにして、 ボードを SD ブート モー

ドに設定します。

5. 12V 電源を ZCU102 の 6 ピン Molex コネクタに接続します。

6. 使用しているホス ト マシンに応じて Tera Term または Minicom を使用し、 ターミナル セッシ ョ ンを開始します。

システムの COM ポート とボー レート を次の図に示すよ うに設定します。

7. ポート設定では、 デバイス マネージャーで COM ポート を検証します。

ZCU102 ボードには、 4 つの USB UART インターフェイスがあ り ます。

X-Ref Target - Figure 5-7

図 5-7: SD ブート モードの SW6 スイ ッチ設定

X-Ref Target - Figure 5-8

図 5-8: COM ポートのセッ ト アップ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 71UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 72: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

8. も小さい番号のインターフェイスに関連付けられた COM ポート を選択します。 こ こでは、 UART-0 に対して Interface-0 の COM ポート を選択します。

9. 同様に、 UART-1 に Interface-1 の COM ポート を選択します。

R5 BSP は UART-1 を使用するよ うに設定されているため、 R5 アプリ ケーシ ョ ン メ ッセージは UART-1 ターミナ

ルの COM ポートに表示されます。

10. SW1 を使用して ZCU102 ボードに電源を投入し、 Linux がボードにロード されるまで待ちます。

UART-0 用のターミナル画面に初期ブート シーケンス メ ッセージが表示されます。

UART-1 用に設定されたターミナル画面にも メ ッセージが表示されます。 これは、 RPU で実行されている UART-1 インターフェイスを使用するよ うに設定された R5 ベアメ タル アプリ ケーシ ョ ンからのメ ッセージで

す。 このアプリ ケーシ ョ ンは、 FSBL によって RPU にロード されます。

ベアメ タル アプリ ケーシ ョ ンは、 UART 割り込みサンプルを含むよ うに変更されています。 このアプリ ケー

シ ョ ンは、 UART-1 ターミナルのキーボードからユーザーが入力するまで、 WFI (Waiting For Interrupt) 状態で待

機します。

一方、 ブート シーケンスは APU で継続され、 ロード されたイ メージは UART-0 ターミナルに表示される メ ッ

セージからわかり ます。 次の図に、 メ ッセージを表示します。

X-Ref Target - Figure 5-9

図 5-9: UART-1 に表示される R5-0 で実行する Hello World

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 72UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 73: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

X-Ref Target - Figure 5-10

図 5-10: Zynq UltraScale+ ブート シーケンス時の APU のメ ッセージ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 73UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 74: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

U-Boot は、 SMP モードで Linux カーネルとその他のイ メージを Arm Cortex®-A53 の APU にロード します。 ター

ミナル メ ッセージに U-Boot がカーネル イ メージをロード してカーネルを起動したこ とが示され、 ターゲッ ト Linux OS にユーザー インターフェイス プロンプ トが表示されます。 カーネルのロードおよびスタート シーケン

スは、 次の図のよ うになり ます。

X-Ref Target - Figure 5-11

図 5-11: カーネルのロードおよびスタート シーケンス

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 74UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 75: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

QSPI ブート モードのブート シーケンス

ZCU102 ボードには、 大 128 MB のデュアル パラレル QSPI フラ ッシュも搭載されています。 この例では、 QSPI ブート モードでブート イ メージを作成し、 UltraScale+ にロード します。 イ メージは、 Vitis IDE の Create Boot Image ウ ィザードを使用して設定できます。 これは、 次の手順に従って実行できます。

注記: このセクシ ョ ンでは、 「PetaLinux を使用した QSPI フラ ッシュ用 Linux イ メージの作成」 の手順に従って QSPI ブート モードで PetaLinux イ メージが作成されている と想定しています。

1. Vitis IDE が起動していない場合は起動し、 第 3 章で説明したよ うにワークスペース パスを設定します。

2. [Xilinx] → [Create Boot Image] をク リ ッ ク します。

3. [Architecture] で [Zynq MP] を選択します。

4. [Create new BIF file] をオンにします。

5. [Output format] が [BIN] に設定されているこ とを確認します。

6. [Basic] タブで、 [Output BIF file path] および [Output path] の [Browse] をク リ ッ ク し、 適切に選択します。

X-Ref Target - Figure 5-12

図 5-12: QSPI ブート モードの Create Boot Image ウ ィザード

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 75UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 76: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

ブート パーティシ ョ ンを追加します。

1. [Add] をク リ ッ ク して、 [Add Partition] ダイアログ ボッ クスを開きます。

2. [Add Partition] ダイアログ ボッ クスで、 [Browse] をク リ ッ ク して FSBL 実行ファイルを選択します。

a. [Partition type] に [bootloader] が選択され、 [Destination CPU] が正し く選択されているこ とを確認します。 こ

れは、 FSBL 実行ファイルに基づいて設定されます。

b. FSBL はデフォルトで EL3 に設定されているため、 [Exception Level] のド ロ ップダウン リ ス トは無視しま

す。 また、 この例では [Enable Trust Zone] をオフのままにしてください。

c. [OK] をク リ ッ ク して FSBL を選択し、 Create Boot Image ウ ィザードに戻り ます。

3. [Add] をク リ ッ ク して [Add Partition] ダイアログ ボッ クスを開き、 次のパーティシ ョ ンを追加します。

4. プラ ッ ト フォーム管理ユニッ トの PMU ファームウェアを追加します。

a. [Partition type] で [datafile] を選択し、 [Destination Device] で [PS] を選択します。

b. [Destination CPU] で [PMU] を選択します。

c. [OK] をク リ ッ ク します。

X-Ref Target - Figure 5-13

図 5-13: [Add new boot image partition] ページ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 76UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 77: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

5. ATF ファームウェアを追加します。 [Partition type] を [datafile] に設定します。

a. ATF 実行ファイル bl31.elf は、PetaLinux イ メージ フォルダー (<PetaLinux_project>/images/linux/) にあ り ます。

b. [Destination Device] で [PS] を選択し、 [Destination CPU] で [A53 0] を選択します。

c. [Exception Level] で [EL3] を選択し、 [Enable Trust Zone] をオンにします。

d. [OK] をク リ ッ ク します。

6. [Add] をク リ ッ ク して R5 ベアメ タル実行ファイルを追加します。

X-Ref Target - Figure 5-14

図 5-14: PMU パーティシ ョ ンの追加

X-Ref Target - Figure 5-15

図 5-15: ATF パーティシ ョ ンの追加

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 77UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 78: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

a. R5 実行ファイルを次の図に示すよ うに追加し、 [R5 Lockstep] を選択します。

b. [OK] をク リ ッ ク します。

7. [Add] をク リ ッ ク して U-Boot パーティシ ョ ンを追加します。u-boot.elf は <PetaLinux_Project>/images/linux/ にあ り

ます。

a. 次のよ うに設定します。

- [Partition type] を [datafile] に設定します。

- [Destination Device] を [PS] に設定します。

- [Destination CPU] を [A53 0] を設定します。

- [Exception Level] を [EL2] に設定します。

X-Ref Target - Figure 5-16

図 5-16: RPU ロ ッ クステップ イ メージ パーティシ ョ ンの追加

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 78UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 79: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

b. [OK] をク リ ッ ク します。

8. [Add] をク リ ッ ク して Linux イ メージ ファ イル image.ub を追加します。

a. イ メージ ファ イル image.ub は、 images/Linux ディ レク ト リの PetaLinux プロジェク トにあ り ます。

b. 次のよ うに設定します。

- [Partition type] を [datafile] に設定します。

- [Destination Device] を [PS] に設定します。

- [Destination CPU] を [A53 0] を設定します。

c. [Offset] に 「0x1E40000」 と入力します。

d. [Exception Level] ド ロ ップダウン リ ス トは無視し、 [Enable Trust Zone] はオフのままにします。

ヒ ン ト : オフセッ ト値については、 「PetaLinux を使用した QSPI フラ ッシュ用 Linux イ メージの作成」 を参照してくだ

さい。

9. [OK] をク リ ッ ク して、 Create Boot Image ウ ィザードに戻り ます。

10. [Create Image] をク リ ッ ク して qspi_BOOT.bin イ メージを作成します。

X-Ref Target - Figure 5-17

図 5-17: U-Boot パーティシ ョ ンの追加

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 79UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 80: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

または、 BIF 属性と Bootgen コマンドを使用して qspi_BOOT.bin イ メージを作成するこ と もできます。 このコン

フ ィギュレーシ ョ ンの BIF 属性は、 [Preview BIF Changes] をク リ ッ ク して表示できます。 このコンフ ィギュレー

シ ョ ンでは、 BIF ファ イルには次の属性が含まれます。

the_ROM_image:{[fsbl_config]a53_x64[bootloader]C:\edt\fsbl_a53\Debug\fsbl_a53.elf[destination_cpu = pmu]C:\edt\pmu_fw\Debug\pmu_fw.elf[destination_cpu = a53-0, exception_level = el-3, trustzone]C:\edt\qspi_boot\bl31.elf[destination_cpu = r5-lockstep]C:\edt\testapp_r5\Debug\testapp_r5.elf[destination_cpu = a53-0, exception_level = el-2]C:\edt\qspi_boot\u-boot.elf[offset = 0x1E40000, destination_cpu = a53-0]C:\edt\qspi_boot\image.ub}

Vitis IDE は次の Bootgen コマンドを呼び出して、 このコンフ ィギュレーシ ョ ンの qspi_BOOT.bin イ メージを生成

します。

bootgen -image qspi_boot.bif -arch zynqmp -o C:\edt\qspi_BOOT.bin

注記: このブート シーケンスでは、 FSBL (第一段階ブート ローダー ) によって PMU ファームウェアがロード されま

す。 これは、 [Partition type] を [datafile] に設定して PMU ファームウェアが追加されたためです。 理想的には、 前の

セクシ ョ ンで説明したよ うに、 bootROM コードで PMU 用の PMU ファームウェアをロードできます。 PMU ファーム

ウェアの詳細は、『Zynq UltraScale+ MPSoC ソフ ト ウェア開発者向けガイ ド』 (UG1137) [参照 6] の 「プラ ッ ト フォーム

管理」 の章を参照してください。

ZCU102 ボードで QSPI ブート モードでイ メージを実行

この例でイ メージをテス トするには、Vitis IDE の Program Flash ユーティ リティを使用して、 ZCU102 ボードの QSPI にブート イ メージ (qspi_BOOT.bin) イ メージをロード します。 または、 XSDB デバッガーを使用するこ と もできます。

1. Vitis IDE で [Xilinx] → [Program Flash] をク リ ッ ク します。

2. [Program Flash Memory] ダイアログ ボッ クスで [Browse] をク リ ッ ク し、 このサンプル プロジェク トの一部と し

て作成された qspi_BOOT.bin イ メージ ファ イルを選択します。

3. [Flash Type] で [qspi-x8-dual_parallel] を選択します。

4. [Offset] を 0 に設定し、 [FSBL File] で FSBL ELF ファ イル (fsbl_a53.elf) を選択します。

5. 次の手順に従って、ZCU102 ターゲッ トの USB-JTAG コネクタ とホス ト マシンの USB ポートが USB ケーブルで

接続されているこ とを確認します。

a. SW6 ブート モード スイ ッチを次の図に示すよ うに設定します。

b. ボードの電源をオンにします。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 80UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 81: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

6. [Program] をク リ ッ ク し、 qspi_BOOT.bin イ メージで QSPI フラ ッシュをプログラムするプロセスを開始します。

次の図に示すよ うに、 コンソールに 「Flash Operation Successful」 とい う メ ッセージが表示されるまで待ちます。

X-Ref Target - Figure 5-18

図 5-18: JTAG ブート モードの SW6 スイ ッチ設定

X-Ref Target - Figure 5-19s

図 5-19: [Program Flash Memory] ダイアログ ボッ クス

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 81UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 82: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

ZCU102 ボードのセッ ト アップ

1. ボードの USB-UART をホス ト マシンに接続します。 Micro USB ケーブルの一端を ZCU102 ボードの Micro USB ポート J83 に接続し、 も う一端をホス ト マシンの空きの USB ポートに接続します。

2. スイ ッチ SW6 を次の図に示すよ うに設定して、 ボードを QSPI ブート モードに設定します。

3. 12V 電源を ZCU102 の 6 ピン Molex コネクタに接続します。

X-Ref Target - Figure 5-20

図 5-20: Vitis IDE コンソールに表示される メモ リ フラ ッシュ プログラムの完了を示すメ ッセージ

X-Ref Target - Figure 5-21

図 5-21: QSPI ブート モードの SW6 スイ ッチ設定

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 82UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 83: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

4. 使用しているホス ト マシンに応じて Tera Term または Minicom を使用し、 ターミナル セッシ ョ ンを開始します。

COM ポート とボー レート を図 5-22 に示すよ うに設定します。

5. ポート設定では、デバイス マネージャーで COM ポート を検証します。ZCU102 では 4 つの USB UART インター

フェイスが使用されています。

6. も小さい番号のインターフェイスに関連付けられた COM ポート を選択します。 こ こでは、 UART-0 に対して Interface-0 の COM ポート を選択します。

7. 同様に、 UART-1 に Interface-1 の COM ポート を選択します。

R5 BSP は UART-1 を使用するよ うに設定されているため、 R5 アプリ ケーシ ョ ン メ ッセージは UART-1 ターミナ

ルの COM ポートに表示されます。

8. SW1 を使用して ZCU102 ボードに電源を投入します。

こ こで、 UART-0 用のターミナル画面に初期ブート シーケンス メ ッセージが表示されます。

UART-1 用に設定されたターミナル画面にも メ ッセージが表示されます。 これは、 RPU で実行されている UART-1 インターフェイスを使用するよ うに設定された R-5 ベアメ タル アプリ ケーシ ョ ンからのメ ッセージで

す。 このアプリ ケーシ ョ ンは、 FSBL によって RPU にロード されます。

ベアメ タル アプリ ケーシ ョ ンは、 UART 割り込みサンプルを含むよ うに変更されています。 このアプリ ケー

シ ョ ンは、 UART-1 ターミナルのキーボードからユーザーが入力するまで、 WFI 状態で待機します。

一方、 ブート シーケンスは APU で継続され、 ロード されたイ メージは UART-0 ターミナルに表示される メ ッ

セージからわかり ます。 次の図に、 メ ッセージを強調表示します。

X-Ref Target - Figure 5-22

図 5-22: UART-1 ターミナル用の COM ポート設定

X-Ref Target - Figure 5-23

図 5-23: UART-1 に表示される R5-0 で実行する Hello World

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 83UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 84: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

X-Ref Target - Figure 5-24

図 5-24: UART-0 ターミナルに表示される メ ッセージ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 84UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 85: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

U-Boot は、SMP モードで Linux カーネルとその他のイ メージを Arm Cortex-A53 の APU にロード します。ターミ

ナル メ ッセージは、 U-Boot がカーネル イ メージをロード してカーネルが起動したこ とを示し、 Linux カーネル

でユーザー インターフェイス プロンプ トが表示されます。 カーネルのロードおよびスタート シーケンスは、 次

の図のよ うになり ます。

9. Linux がボードにロード されるまで待ちます。

X-Ref Target - Figure 5-25

図 5-25: カーネルのロードおよびスタート シーケンス

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 85UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 86: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

JTAG を使用した QSPI ブート モードのブート シーケンス

Zynq UltraScale+ MPSoC では、 ブート イ メージをロードするさまざまな方法がサポート されています。 その 1 つが JTAG インターフェイスを使用する方法です。 この XSCT セッシ ョ ンの例では、 XSDB デバッガーを使用して QSPI にブート イ メージ ファ イル (qspi_BOOT.bin) をダウンロードする方法を示します。 QSPI がロード される と qspi_BOOT.bin イ メージは Zynq UltraScale+ の QSPI ブート モード と同じ方法で実行されます。 同様のブート フロー

をデバッグするために、 この XSCT セッシ ョ ンまたはシステム デバッガーを使用できます。

次のセクシ ョ ンでは、 このブート モードに関連する基本的な手順を示します。

ターゲッ トの設定

1. USB ケーブルでターゲッ トの USB-JTAG J2 コネクタ とホス ト マシンの USB ポート を接続します。

2. スイ ッチ SW6 を次の図に示すよ うに設定して、 ボードを JTAG ブート モードに設定します。

3. スイ ッチ SW1 を使用してボードに電源を投入します。

XSCT ボタン をク リ ッ ク して、 Vitis IDE で XSCT コンソールを開きます。 または、 [Xilinx] → [XSCT Console] をク リ ッ ク して XSCT コンソールを開く こ と もできます。

4. XSCT コンソールで、 次の connect コマンドを使用して JTAG を介してターゲッ トに接続します。

xsct% connect

connect コマンドは、 接続のチャネル ID を返します。

5. target コマンドを実行して使用可能なターゲッ ト を リ ス ト し、 ID を使用してターゲッ ト を選択します。

ターゲッ トには JTAG チェーンで検出されたと きに ID が割り当てられるので、 ターゲッ ト ID はセッシ ョ ンごと

に変わり ます。

注記: スク リプ ト記述などの非対話型の使用法では、 ID を使用してターゲッ ト を選択するのではなく、 -filter オプシ ョ ンを利用してターゲッ ト を選択できます。

xsct% targets

X-Ref Target - Figure 5-26

図 5-26: JTAG ブート モードの SW6 スイ ッチ設定

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 86UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 87: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

次の図に示すよ うに、 ターゲッ トが一覧表示されます。

XSCT/XSDB を使用した U-Boot のロード

1. 次のコマンドを使用して、 Cortex-A53 # 0 に u-boot アプリ ケーシ ョ ンをダウンロード します。

デフォルトでは、 JTAG セキュ リティ ゲートはイネーブルです。 DAP、 PL TAP、 および PMU のセキュ リティ ゲート をディ スエーブルにします。 これによ り、 PMU MB ターゲッ トがデバッガーに可視とな り ます。

xsct% targets -set -filter {name =~ "PSU"}xsct% mwr 0xffca0038 0x1ff xsct% targets

PMU デバイスの下に PMU MB がリ ス ト されているこ とを確認します。 PMUFW をロード して実行します。

xsct% targets -set -filter {name =~ "MicroBlaze PMU"} xsct% dow {C:\edt\pmu_fw\Debug\pmu_fw.elf}xsct% con

APU Cortex A53 コア 0 を リセッ ト し、 FSBL をロード して実行します。

xsct% targets -set -filter {name =~ "Cortex-A53 #0"} xsct% rst -processor

ヒ ン ト : rst-processoror は個々のプロセッサ コアのリセッ ト をク リ アします。

Zynq UltraScale+ を JTAG ブート モードで起動する と、 すべての APU コアおよび RPU コアがリセッ ト状態に保

持されるので、 この手順は重要です。 これらのコアでデバッグを実行する前に、 各コアのリセッ ト をク リ アす

る必要があ り ます。 リセッ トは XSCT の rst コマンドでク リ アできます。

X-Ref Target - Figure 5-27

図 5-27: XSCT ターゲッ ト

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 87UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 88: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

注記: rst -cores は、 現在のターゲッ トが子となっている、 グループ (APU または RPU など) 内にあるすべてのプ

ロセッサ コアのリセッ ト をク リ アします。 たとえば、 A53#0 が現在のターゲッ トである場合、 rst -cores は APU のすべての A53 コアのリセッ ト をク リ アします。

FSBL をロード して実行します。

xsct% dow {C:\edt\fsbl_a53\Debug\fsbl_a53.elf}xsct% con

シ リアル ターミナルに表示される FSBL メ ッセージを確認し、 数秒後に FSBL を停止します。

xsct% stop

ATF をロード して実行します。

xsct% dow {C:\edt\design_files\bl31.elf}xsct% conxsct% stop

2. シ リアル ターミナル (Tera Term、 Minicom、 または UART-0 USB シ リアル接続用のシ リ アル ターミナル イン

ターフェイス) を設定します。

3. シ リアル ターミナルの設定は、 図 5-22 を参照してください。

4. U-Boot をロード して実行します。

xsct% dow {C:\edt\design_files\sd_boot\u-boot.elf}

5. XSDB で con コマンドを使用して U-Boot を実行します。

xsct% con

6. ターゲッ トのシ リ アル ターミナルで、 任意のキーを押して U-Boot の自動ブート を停止します。

7. XSDB で stop コマンドを使用してコアを停止します。

xsct% stop

XSDB を使用した DDR への BOOT.bin のロード

1. ZCU102 の DDR に BOOT.bin バイナリ をダウンロード します。QSPI ブート モード用に作成された同じ BOOT.bin を使用します。

xsct% dow -data {C:\edt\qspi_boot\qspi_BOOT.bin} 0x2000000

2. XSDB で con コマンドを使用して、 U-Boot を再開します。

xsct% con

X-Ref Target - Figure 5-28

図 5-28: ZCU102 ボードでイ メージを検証する

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 88UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 89: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

U-Boot を使用した QSPI への BOOT.bin イ メージのロード

1. ターゲッ ト ターミナルの U-Boot コンソールで次のコマンドを実行します。 これらのコマンドによって QSPI が消去され、 BOOT.bin イ メージが DDR から QSPI に書き込まれます。

ZynqMP> sf probe 0 0 0ZynqMP> sf erase 0 0x4000000ZynqMP> sf write 0x2000000 0 0x4000000

2. イ メージが QSPI に書き込まれたら、 ZCU102 ボードの電源を切断し、 82 ページの 「ZCU102 ボードのセッ ト

アップ」 のとおりにボードをセッ ト アップします。

UART-0 ターミナルで Linux のロード、 UART-1 ターミナルで R5 アプリ ケーシ ョ ンの実行を確認できます。

この章では、 主にシステム ブート と、 システム ブートに関連するさまざまなコンポーネン ト を中心に説明していま

す。 次の章で、 PS ペリ フェラル、 PL IP、 および APU コアと RPU コアの処理能力を活用する Linux およびスタンド

アロン (ベアメ タル) アプリ ケーシ ョ ンについて説明します。

USB ブート モードのブート シーケンス

Zynq UltraScale+ MPSoC は USB スレーブ ブート モード もサポート しています。これは、USB デバイス ク ラス仕様の USB DFU (Device Firmware Upgrade) を適用しています。 OpenMoko DFU-Util のよ うな標準アップデート ユーティ リ

ティ を使用する と、 新し く作成されたイ メージを USB ポート を介して Zynq UltraScale+ にロードできます。 次のセ

クシ ョ ンでは、 このブート モードでブート イ メージをロードするために必要な一連の設定を説明します。 DFU ユー

ティ リ ティは、 Vitis 統合ソフ ト ウェア プラ ッ ト フォームおよび PetaLinux に付属しています。

USB ブート モードを有効にするために必要な FSBL の設定

USB ブート モードを有効にするために必要な FSBL の変更はほとんどあ り ません。 USB ブート モード サポートは、

FSBL のフッ トプ リ ン ト を約 10 KB 増加します。 これは主に初期開発段階中に使用するこ とを目的と しているので、

このサポートは OCM 空間を節約するためデフォルトでは無効になっています。 このセクシ ョ ンでは、 FSBL を変更

して USB ブート モードを有効します。 FSBL プロジェク トはこのチュート リ アル全体で広く使用されているので、

既存の FSBL プロジェク トは変更しません。 その代わりに、 このセクシ ョ ンでは新しい FSBL プロジェク ト を使用し

ます。

Arm Cortex-A53 ベースの APU 用 FSBL の作成

1. Vitis IDE で [File] → [New] → [Application Project] をク リ ッ ク して、 New Project ウ ィザードを開きます。

2. ウ ィザードの各ページで次の表の情報に基づいて設定を選択します。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 89UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 90: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

3. [Finish] をク リ ッ ク します。

4. [Project Explorer] ビューで、 次のよ うに [fsbl_usb_boot] プロジェク ト を展開し、 xfsbl_config.h を開きます。

fsbl_usb_boot > src > xfsbl_config.h

5. xfsbl_config.h で、 次のよ うに変更または設定します。

#define FSBL_QSPI_EXCLUDE_VAL (1U) #define FSBL_SD_EXCLUDE_VAL (1U) #define FSBL_USB_EXCLUDE_VAL (0U)

6. Ctrl + S キーを押して変更を保存します。

7. FSBL (fsbl_usb_boot) をビルド します。

USB ブート用ブート イ メージの作成

このセクシ ョ ンでは、 ブート イ メージを作成し、 DFU ユーティ リ ティ を使用して USB を介してロード します。

Device Firmware Upgrade (DFU) は、 ファームウェアを USB を介して接続されたデバイスにダウンロード、 または

ファームウェアをデバイスからアップロード します。 このブート モードでは、 bootROM によってロード されるブー

ト ローダー (FSBL) と PMUFW が、DFU ユーティ リ ティ を使用してホス ト マシンの USB ポートから Zynq UltraScale+ のオンチップ メモ リ (OCM) にコピーされます。 OCM のサイズ (256 KB) によ り、 bootROM で USB ブート モードで

ダウンロード されるブート イ メージのサイズが制限されます。 これを考慮し、 サイズ要件が満たされているこ とを

条件と して、 FSBL と PMUFW のみが 初の BOOT.bin に統合され、 OCM にコピーされます。 残りのブート パー

ティシ ョ ンは、 別のブート イ メージに統合されて DDR メモ リにコピーされます。 DDR は、 この段階で既にロード

されて実行されている FSBL によ り ロード されます。 次の手順に従って、 このブート モードのブート イ メージを作

成します。

1. Vitis IDE で [Xilinx] → [Create Boot Image] をク リ ッ ク します。

2. fsbl_usb_boot.elf および pmu_fw.elf のパーティシ ョ ンを選択し、 次の図に示すよ うに設定します。

表 5-1: ウ ィザードのプロパティおよびコマンド

ウ ィザード ページ システム プロパティ 設定または使用するコマンド

Application Project Project name fsbl_usb_boot

Use default location オン

System Project Create New

Platform edt_zcu102_wrapper

Domain standalone on psu_cortexa53_0

Language C

CPU psu_cortexa53_0

OS standalone

Templates Available Templates Zynq MP FSBL

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 90UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 91: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

3. PMUFW パーティシ ョ ンが bootROM によってロード されるよ う設定されているこ とを確認します。

4. [Create Image] をク リ ッ ク して BOOT.bin を生成します。

PetaLinux の U-Boot の変更

PetaLinux の U-Boot を変更し、 image.ub をロードできるよ うにします。 デバイス ツ リーを変更して、 USB をペリ

フェラル モードに設定する必要があ り ます。 デフォルトの PetaLinux コンフ ィギュレーシ ョ ンでは、 USB はホス ト モードに設定されています。

X-Ref Target - Figure 5-29

図 5-29: USB ブート モードの Create Boot Image ウ ィザード

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 91UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 92: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

これには、 次444444444444444の手順に従って PetaLinux プロジェク ト <PetaLinux-project>/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi にある system-user.dtsi を変更しま

す。

1. system-user.dtsi を次のよ うになるよ うに変更します。

/include/ "system-conf.dtsi"/ {

gpio-keys {sw19 {

status = "disabled";};

};leds {

heartbeat_led {status = "disabled";};

};};

&uart1{status = "disabled";};

&dwc3_0 { dr_mode = "peripheral"; maximum-speed = "super-speed";

};

変更済みの system-user.dtsi ファ イルは、 このチュート リ アル付属のデザイン ファ イル ZIP の <Design Files>/usb_boot フォルダーに含まれています。

2. 次の変更を含めて PetaLinux をビルド します。

$ petalinux-build

次の手順に従って、 残りのパーティシ ョ ンを含む usb_boot.bin を作成します。

注記: 新し く生成された U-Boot を C:\edt\usb-boot\ にコピーします。 u-boot.elf は 「このチュート リ アルのデザイン ファ イル」 にも含まれています。

1. Vitis IDE で [Xilinx] → [Create Boot Image] をク リ ッ ク します。

2. FSBL および残りのパーティシ ョ ンを選択し、 次の図に示すよ うに設定します。 これには、 SD ブート シーケン

スから BIF ファ イルをインポートするこ と もできます。

注記: ATF のパーティシ ョ ンでは [Exception Level] を [EL3] に設定して [Enable Trust Zone] をオンにし、 U-Boot のパーティシ ョ ンでは [Exception Level] を [EL2] に設定します。 これらの設定は、 その他のパーティシ ョ ンでは無視

できます。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 92UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 93: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

3. PMUFW パーティシ ョ ンは、 イ メージ (usb_boot.bin) がロード される前に bootROM によってロード されるため、

このイ メージには必要あ り ません。

4. [Create Image] をク リ ッ ク して usb_boot.bin を生成します。

注記: BOOT.bin および usb_boot.bin のほかに、 image.ub といった Linux イ メージが Linux をブートするまで必要です。

この image.ub は、 DFU ユーティ リ ティによって個別にロード されます。

USB ブート を使用したブート

このセクシ ョ ンでは、 DFU ユーティ リ ティ を使用して ZCU102 ターゲッ トにブート イ メージをロード します。 開始

する前に、 次のよ うにボード接続を設定します。

1. SW6 を次の図に示すよ うに 1 をオン、 2 をオフ、 3 をオフ、 4 をオフにして、 ZCU102 を USB ブート モードに設

定します。

X-Ref Target - Figure 5-30

図 5-30: 残りのパーティシ ョ ンのブート イ メージの作成

X-Ref Target - Figure 5-31

図 5-31: USB ブート モードの SW6 設定

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 93UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 94: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

2. USB 3.0 ケーブルの一端を J96 USB 3 ULPI コネクタに接続し、 も う一端をホス ト マシンの USB ポートに接続し

ます。

3. USB Micro ケーブルでボード (J83) とホス ト マシン間の USB-UART ポート を接続します。

4. 使用しているホス ト マシンに応じて Tera Term または Minicom を使用し、 ターミナル セッシ ョ ンを開始します。

システムの COM ポート とボー レート を図 5-31 に示すよ うに設定します。

5. ボードに電源を投入します。

次のセクシ ョ ンの手順では、 DFU ユーティ リ ティ を使用して USB 経由でブート イ メージをロード します。 DFU ユーティ リ ティは、 VITIS\2019.1\tps\lnx64\dfu-util-0.9 にあ り ます。

または、 使用する Linux ディ ス ト リ ビューシ ョ ンでサポート されているパッケージ マネージャーを利用して DFU ユーティ リ ティ を Linux にインス トールするこ と も可能です。

Linux ホス ト マシンのブート コマンド

1. DFU が USB ターゲッ ト を検出可能かど うかをチェッ ク します。

$ sudo dfu-util -l

USB デバイスは、 VendorId : ProductId (03fd:0050) でエニュ メ レートする必要があ り ます。 次のよ うなメ ッセージ

が表示されるはずです。

Found DFU: [03fd:0050] ver=0100, devnum=30, cfg=1, intf=0, alt=0, name="Xilinx DFU Downloader", serial="2A49876D9CC1AA4"

注記: 「Found DFU」 メ ッセージが表示されない場合は、 接続を確認して再試行してください。

2. 「USB ブート用ブート イ メージの作成」 で作成した BOOT.bin をダウンロード します。

$ sudo dfu-util -d 03fd:0050 -D <USB_Boot_Image_Path>/Boot.bin

FSBL が問題なく ロード されているこ とをシ リ アル ターミナルで確認します。

3. usb_boot.bin をダウンロード します。 その前に、 UART-1 シ リアル コンソール用に別のターミナル セッシ ョ ンを

開始します。

$ sudo dfu-util -d 03fd:0050 -D <USB_Boot_Image_Path>/usb_boot.bin

UART 0 ターミナルをチェッ ク し、 U-Boot がロード されるまで待機します。

4. U-Boot のプロンプ ト画面で 「Enter」 と入力して自動ブート を終了します。 R5 アプリ ケーシ ョ ンも問題なく ロー

ド されているこ とを UART1 で確認します。

5. U-Boot コンソールで DFU_RAM を開始して Linux イ メージのダウンロードを有効にします。

U-boot> run dfu_ram

6. ホス ト マシン ターミナルから次のコマンドを実行して Linux イ メージの Image.ub をダウンロード します。

$ sudo dfu-util -d 03fd:0300 -D <PetaLinux_project>/images/linux/image.ub -a 0

7. U-Boot コンソールで Ctrl + C キーを押して dfu_ram を停止します。

8. U-Boot コンソールで bootm コマンドを実行します。

U-boot> bootm

9. Linux がターゲッ トに問題なく ロード されているこ とを確認します。

注記: この例では、 image.ub を U-Boot コンフ ィギュレーシ ョ ンの #define DFU_ALT_INFO_RAM の設定に基づいて DDR ロケーシ ョ ンにコピーします。 同じものを変更して使用し、 ほかのイ メージ ファ イルを DDR ロケーシ ョ ンに

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 94UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 95: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

コピーできます。 必要な場合は、 これらのイ メージを 「JTAG を使用した QSPI ブート モードのブート シーケンス」

に リ ス ト されている U-Boot コマンドを使用して QSPI にコピーできます。

Windows ホス ト マシンのブート コマンド

1. Vitis IDE で [Xilinx] → [Launch Shell] をク リ ッ ク します。

2. シェルが起動したら、 DFU が USB ターゲッ ト を検出可能であるこ とを確認します。

> dfu-util.exe -l

注記: dfu-util.exe は <VITIS_Installation_path>\VITIS\2019.2\tps\Win64\dfu-util-0.9\dfu-util.exe にあ り ます。

3. USB デバイスを VendorId : ProductId (03fd:0050) でエニュ メ レート します。

注記: 「Found DFU」 で始まる メ ッセージが表示されない場合、 zadig ツールをダウンロード してインス トールし

ます。 [Options] をク リ ッ ク して [List all devices] をク リ ッ ク します。 [Xilinx DFU downloader] をク リ ッ ク し、

[Install Driver] をク リ ッ ク します。

4. 「USB ブート用ブート イ メージの作成」 で作成した BOOT.bin をダウンロード します。

$ dfu-util.exe -d 03fd:0050 -D BOOT.bin

5. FSBL が問題なく ロード されているこ とをシ リ アル ターミナル (UART 0) で確認します。

6. usb_boot.bin をダウンロード します。 その前に、 UART-1 シ リアル コンソール用に別のターミナル セッシ ョ ンを

開始します。

$ dfu-util.exe -d 03fd:0050 -D usb_boot.bin

7. U-Boot のプロンプ トに 「Enter」 と入力して自動ブート を終了します。 UART1 コンソールで R5 アプリ ケーシ ョ

ンも問題なく ロード されているこ とを確認します。

注記: こ こで、 zadig ツールを使用してデバイス ID 03fd:0300 の 「Usb download gadget」 用にド ライバーをインス トー

ルします。 このド ライバーがない場合、 ターゲッ トで U-Boot を起動した後に zadig ツールに 「Xilinx DFU Downloader」 が表示されません。

8. U-Boot コンソールで DFU_RAM を開始して Linux イ メージのダウンロードを有効にします。

U-boot> run dfu_ram

9. ホス ト マシン ターミナルから次のコマンドを実行して Linux イ メージの image.ub をダウンロード します。

$ dfu-util.exe -d 03fd:0300 -D image.ub -a 0

10. U-Boot コンソールで bootm コマンドを実行します。

U-boot> bootm

11. Linux がターゲッ トに問題なく ロード されているこ とを確認します。

セキュア ブート シーケンス

Zynq UltraScale+ MPSoC のセキュア ブート機能によ り、 パーティシ ョ ンの機密性、 完全性、 および認証がサポート

されます。 セキュア ブートは、 Zynq UltraScale+ デバイスのハード ウェアによる信頼のルート (HROT) 機能と、 すべ

てのブート パーティシ ョ ンを暗号化する機能を組み合わせるこ とで実現します。 HROT は、 ハード ウェア アクセラ

レーシ ョ ンを用いた SHA-3/384 またはソフ ト ウェアと して実装された SHA-2/256 を使用した、 RSA-4096 非対称アル

ゴ リズムに基づきます。 機密性は、 256 ビッ ト Advanced Encryption Standard - Galois Counter Mode (AES-GCM) によ り

実現しています。 このセクシ ョ ンでは、 次の機能の使用方法と実装方法を中心に説明します。

• キーの取り消しを含むハードウェアによる信頼のルート

• 差分電力解析 (DPA) 対策を含むパーティシ ョ ン暗号化

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 95UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 96: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

• Physically Unclonable Function (PUF: 物理的な複製防止機能) を用いたブラ ッ ク キーの格納

この 「セキュア ブート システム デザインにおける決定」 では、 デザイン開発の早期に実行すべきハイ レベルなセ

キュア ブートの判断について概説します。 「ハード ウェアによる信頼のルート (HROT)」 では、 ブートにおける信頼

のルート (RoT) の使用について説明します。 「ブート イ メージの機密性と DPA」 では、 AES 暗号化を使用する機密性

の保護手法について説明します。

「ブート イ メージの機密性と DPA」 では、 DPA 攻撃への対策と しての操作キーとキー ローリ ング手法の使用につい

て説明します。 AES キーを変更するこ とで、 キーとそのキーで保護されているデータが脅威にさら される危険性が

低くなり ます。

レッ ド キーは非暗号化フォーマッ トのキーです。 「ブラ ッ ク キーの格納」 では、 暗号化 (ブラ ッ ク ) フォーマッ トで AES キーを格納する方法について説明します。 ブラ ッ ク キーの格納では、 Physically Unclonable Function (PUF) をキーの暗号化キー (KEK) と して使用します。

「セキュア ブートでの実用的な方法」 では、 AES 暗号化および RSA 認証を使用するシステムの開発およびテス ト手

順を説明します。

セキュア ブート システム デザインにおける決定

セキュア ブートに影響を及ぼすデバイス レベルの決定事項は次のとおりです。

• ブート モード

• AES キーの格納場所

• AES の格納ステート (暗号化または非暗号化)

• 暗号化および認証の要件

• キーの提供

セキュア ブート をサポートするブート モードは、 Quad Serial Peripheral Interface (QSPI)、 SD、 eMMC、 および NAND です。 AES キーは、 eFUSE (暗号化または暗号化なし )、 バッテ リ バッ クアップ ランダム アクセス メモ リ (BBRAM) (暗号化なし )、 または外部 NVM (暗号化のみ) に格納されます。

Zynq UltraScale+ MPSoC では、 パーティシ ョ ンはパーティシ ョ ン単位で暗号化および/または認証できます。 ザイ リ

ンクスは一般に、 すべてのパーティシ ョ ンに RSA 認証を使用するこ とを推奨しています。 オープンソース (U-Boot、Linux) のパーティシ ョ ン、 または専有情報や機密情報を含まないパーティシ ョ ンは通常、 暗号化する必要はあ り ま

せん。 機密データや専有 IP のソース /サプライヤーが複数存在するシステムでは、 固有のキーを使用してパーティ

シ ョ ンを暗号化するこ とが重要になり ます。

耐 DPA 攻撃の要件は、 攻撃者がデバイスに物理的にアクセスできるかど うかによって決ま り ます。

表 5-2 に、 特定のセキュア システム要件を満たすために必要な機能を決定する際に役立つ基準を示します。 以降の

セクシ ョ ンでは、 これらの機能についてよ り詳し く説明します。

表 5-2: システム レベルのセキュ リティ要件

システムの考慮事項/要件 Zynq UltraScale+ の機能

デバイスでユーザー SW および HW のみを実行可能 HWROT

ユーザー SW および HW が変更されない HWROT

攻撃者が SW/HW を複製またはリバース エンジニア リ ングできない ブート イ メージの機密性

機密データおよび独自の Intellectual Property (IP) を保護 ブート イ メージの機密性

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 96UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 97: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

ハードウェアによる信頼のルート (HROT)

信頼のルートは、 ス ト レージ (RTS)、 完全性 (RTI)、 検証 (RTV)、 対策 (RTM)、 およびレポート (RTR) の各セキュ リ

ティ要素から成り ます。 RoT はハードウェア、 ファームウェア、 およびソフ ト ウェアで構成されています。 HROT は変更不可で、 攻撃対象領域が小さ く、 動作の信頼性が高いこ とから、 ソフ ト ウェアによる RoT よ り も利点があ り

ます。

HROT は CSU、 eFUSE、 BBRAM、 および分離エレ メン トに基づいています。 動作環境およびコンフ ィギュレーシ ョ

ンが変更されていないこ とを検証するこ とは、 HROT の役割です。 RoT はブートのアンカーと して機能するため、

検出機能が起動する前に攻撃者が悪意のあるコードを挿入するこ とはできません。

ファームウェアと ソフ ト ウェアはブート時に HROT 上で実行されます。 Zynq UltraScale は、 変更不可の bootROM コード、 第 1 段階ブート ローダー、 デバイス ド ラ イバー、 および HROT で動作する kilskey と xilsecure ライブラ リ を

提供します。 これらによ り、 十分にテス ト された実績のある API が提供されるため、 開発者はセキュ リティ コン

ポーネン ト を 初から作成する必要はなく、 テス トにも制限はあ り ません。

データの完全性

データの完全性とは、 ハード ウェア、 ファームウェア、 およびソフ ト ウェアに破損がないこ とを意味します。 デー

タの完全性機能では、 攻撃者によ り コンフ ィギュレーシ ョ ンおよび動作環境が改ざんされていないこ とが検証され

ます。

Zynq UltraScale+ は、 対称キー (AES-GCM) および非対称キー (RSA) の認証を使用してパーティシ ョ ンの完全性を検

証します。 RSA は秘密/公開キー ペアを使用します。 フ ィールドで展開されているエンベデッ ド システムには、 公

開キーしか含まれていません。 現在の技術では公開キーから秘密キーを導出するこ とは不可能であるため、 公開

キーを盗難してもあま り価値があ り ません。 暗号化されたパーティシ ョ ンは、 AES の Galois Counter Mode (GCM) でも認証されます。

セキュア ブート フローでは、 パーティシ ョ ンはまず認証され、 その後必要に応じて復号化されます。

認証

図 5-32 に、 パーティシ ョ ンに対する RSA 署名と検証を示します。 Bootgen ツールは、 セキュアな施設から秘密キー

を使用してパーティシ ョ ンに署名を入れます。 デバイス内では、 公開キーを使用して、 ROM が FSBL を検証し、

FSBL または U-Boot のいずれかが続くパーティシ ョ ンを検証します。 プライマ リおよびセカンダ リの秘密/公開キー ペアが使用されます。 プライマ リ秘密/公開キーは、 セカンダ リ秘密/公開キー ペアを認証します。 セカンダ リ キー

は、 パーティシ ョ ンを署名/検証します。

秘密キー (AES キー ) をサイ ド チャネル攻撃から保護 DPA 保護

秘密キー (AES キー ) が停止状態で暗号化されて格納される ブラ ッ ク キーの格納

表 5-2: システム レベルのセキュ リティ要件

システムの考慮事項/要件 Zynq UltraScale+ の機能

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 97UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 98: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

パーティシ ョ ンに署名を入れるため、 Bootgen はまずパーティシ ョ ン データの SHA3 を計算します。 その後、 秘密

キーを使用して 384 ビッ トのハッシュが RSA 署名されます。 結果の RSA 署名が認証証明に追加されます。 イ メー

ジ内では、 署名された各パーティシ ョ ンにパーティシ ョ ン データがあ り、 その後に RSA 署名を含む認証証明が続

きます。

FSBL の検証は、 CSU ROM コードで実行されます。 後続のパーティシ ョ ンは、 FSBL または U-Boot によ り xilsecure ライブラ リ を使用して検証されます。

ブート ヘッダー認証という認証用のデバッグ モードがあ り ます。 この認証モードでは、 デバイス eFUSE に格納され

ているプライマ リ公開キー ダイジェス ト、 セッシ ョ ン キー ID、 およびキー取り消しビッ トは CSU ROM コードで

チェッ ク されません。 そのため、 このモードはセキュアではあ り ませんが、 eFUSE をプログラムする必要がないの

で、 テス トおよびデバッグには便利です。 このチュート リ アルではこのモードを使用します。 フ ィールドに展開さ

れたシステムではブート ヘッダー認証は使用しないでください。 このセクシ ョ ンの 後に、 完全にセキュアなシス

テム用の BIF ファ イル例が含まれています。

ブート イ メージの機密性と DPA

AES を使用して、 機密データおよび IP の機密性を確実に保護します。 Zynq UltraScale+ では、 AES Galois Counter Mode (GCM) を使用します。 また、 256 ビッ トの AES キーを使用します。 Zynq UltraScale+ で改善された主な AES の機能は、 Differential Power Analysis (DPA) 攻撃に対する耐性が強化されているこ と と、 AES 暗号化/復号化後のブート

が利用可能になっているこ とです。

Bootgen および FSBL ソフ ト ウェアでは AES 暗号化がサポート されています。 秘密キーが AES 暗号化に使用され、

AES 暗号化は Bootgen がキー ファ イルを使用して実行します。 キー ファ イルは、 Bootgen または OpenSSL によ り生

成できます。 操作キーを使用する と、 デバイス キーが脅威にさら される危険性が低くな り ます。 次のセクシ ョ ンで、

キー ローリ ングでの操作キーの使用について説明します。 ブート イ メージの機密性を保持するために、 Bootgen を使用して暗号化されたブート イ メージを作成できます。 BBRAM および eFUSE にキーをプログラムするソフ ト ウェ

アの例も、 Vitis IDE で提供されています。 そのうちの一例を 「セキュア ブートでの実用的な方法」 で説明します。

DPA 保護

キー ローリ ングは耐 DPA 攻撃に使用されます。 キー ローリ ングとブラ ッ ク キーの格納は、 同じデザインで使用で

きます。 キー ローリ ングでは、 ソフ ト ウェアとビッ ト ス ト リームは複数のデータ ブロッ クに分割され、 それぞれ固

有のキーで暗号化されます。 初のキーは、 BBRAM または eFUSE NVM に格納されます。 続くデータ ブロ ッ クの

X-Ref Target - Figure 5-32

図 5-32: Zynq UltraScale+ の RSA 認証

Verification – ROMCode, FSBL, U-Boot

Partition Data Partition Data RSA Signature

384 Bit Hash

384 Bit Hash 384 Bit Hash

Public Key

Private Key==

Signing - Bootgen

RSA Signature

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 98UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 99: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

キーは前のデータ ブロ ッ クで暗号化されます。 初のキーの後、 キー アップデート レジスタがキー ソース と して

使用されます。

96 ビッ ト初期化ベクター (IV) が 1 つ、NKY キー ファ イルに含まれます。IV は 96 ビッ ト を使用して AES カウンター

を初期化します。 キー ローリ ングが使用される場合、 128 ビッ ト IV が 1 つ、 ブート ヘッダーに提供されます。 32 LSB で、 現在のキーで復号化されるデータのブロ ッ ク サイズが定義されます。 IV で定義される 初のブロ ッ クに続

くブロ ッ クのサイズは、 Bootgen イ メージ フォーマッ ト (BIF) ファ イルの属性と して定義されます。

キー ローリ ングの効果的な方法は操作キーを使用するこ とです。 操作キーを使用する場合、 Bootgen でユーザー指

定の操作キーを使用して 初のブロ ッ ク IV で暗号化されたセキュア ヘッダーが作成されます。 eFUSE または BBRAM 内の AES キーは、 256 ビッ ト操作キーを含む 384 ビッ ト セキュア ヘッダーを復号化する目的にのみ使用し

ます。 これによ り、 デバイス キーが DPA 攻撃にさら される可能性が制限されます。

ブラ ッ ク キーの格納

PUF を使用する と、 AES キーを暗号化 (ブラ ッ ク ) フォーマッ トで格納できます。 ブラ ッ ク キーは、 eFUSE または

ブート ヘッダー内に格納できます。 復号化に必要な場合は、 eFUSE またはブート ヘッダー内にある暗号化された

キーが PUF で生成された KEK (Key Encryption Key、 キーの暗号化キー ) で復号化されます。

PUF をブラ ッ ク キーの格納に使用するには、 2 つの手順に従います。 まず、 PUF 登録ソフ ト ウェアを使用して PUF ヘルパー データ と PUF KEK を生成します。 この PUF 登録データを使用するこ とで、 PUF は KEK を生成するごとに

同一のキーを再生成できるよ うになり ます。 PUF 登録ソフ ト ウェアの使用の詳細は、 「PUF の登録 - ブート ヘッダー モード」 を参照してください。 eFUSE モードの PUF 登録の詳細は、 『BBRAM および eFUSE のプログラ ミ ング』 (XAPP1319) [参照 12] を参照してください。

ヘルパー データおよび暗号化されたユーザー キーは共に、 PUF eFUSE のと きは eFUSE に、 PUF ブート ヘッダー モードのと きはブート ヘッダーに格納する必要があ り ます。 PUF ブート ヘッダー モードの手順は、 「ブート ヘッ

ダー モードでの PUF の使用」 で説明します。 eFUSE モードの PUF の使用方法は、 『BBRAM および eFUSE のプログ

ラ ミ ング』 (XAPP1319) [参照 12] を参照してください。

このチュート リ アルでは、 eFUSE のプログラムが不要でテス トおよびデバッグに便利な PUF ブート ヘッダー モード

を使用します。 ただし、 PUB ブート ヘッダー モードでは各デバイスに対して個別に Bootgen を実行する必要がある

ので、 も一般的なモードは PUF eFUSE モードです。 「セキュア ブート シーケンス」 の 後に、 PUF eFUSE モード

を示す完全にセキュアなシステム用の BIF ファ イル例が含まれています。

セキュア ブートでの実用的な方法

このセクシ ョ ンでは、 Zynq UltraScale+ システムでセキュア ブート を開発する手順を概説します。 セキュアなエンベ

デッ ド システムを構築するには、 2 段階のプロセスが必要です。 第 1 段階では、 暗号化キーを生成して NVM にプロ

グラムします。 第 2 段階では、 セキュア システムを開発してテス ト します。 どちらの段階でも Vitis IDE を使用し、

ソフ ト ウェア プロジェク トの作成、 イ メージの生成、 およびイ メージのプログラムを実行します。 第 2 段階のテス

ト システムは、 fsbl.elf および hello.elf ファ イルのよ うな単純なものにできます。 このセクシ ョ ンでは、 「SD ブート

のブート シーケンス」 で使用されているものと同じイ メージを使用しますが、 このイ メージをアセンブルし、 セ

キュア ブート シーケンスの一部と してセキュア属性を有効にします。

このセクシ ョ ンでは、 まず AES および RSA キーの生成方法を示します。 キーの生成に続き、 高度な AES および RSA 手法を使用してシステムを開発し、 テス ト します。 このセクシ ョ ンで生成されるキーは、 「このチュート リ アル

のデザイン ファイル」 にも含まれています。

AES 機能の開発に使用する手法は、 次のセクシ ョ ンで説明されています。

• 「AES キーの生成」

• 「キー ローリ ングを使用した暗号化の有効化」

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 99UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 100: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

• 「操作キーの使用の有効化」

• eFUSE の AES キー

• 「PUF の使用」

「RSA 秘密/公開キー ペアの作成」 に、 ブート時にロード されるすべてのパーティシ ョ ンを認証する手順を説明して

います。 キーの取り消し方法も示しています。

セキュア システムの開発では、 イ メージの生成時に使用するセキュ リティ属性を追加する必要があ り ます。 Bootgen によ りブート イ メージ フォーマッ ト (BIF) ファ イルが生成されます。 BIF ファ イルはテキス ト ファ イルです。 も

シンプルなフォーマッ トの BIF では、 ブート時にロード されるパーティシ ョ ンが リ ス ト されます。 暗号化機能を指

定するためのセキュ リティ属性が BIF に追加されます。 BIF ファ イルは Bootgen GUI (Create Boot Image ウ ィザード ) によ り生成されるこ とがほとんどです。 セキュ リ ティ属性を追加する際、 Bootgen で生成された BIF ファ イルの変更

が求められるこ とがあ り ます。 Vitis IDE の Create Boot Image ウ ィザードで、 [Security] タブをク リ ッ ク し、

[Authentication] タブおよび [Encryption] タブでセキュ リティ属性を指定します。

セキュア ブートで AES および RSA 暗号化をインプリ メン ト したら、 ブート テス トは完了します。 システムが問題

なく ロード され、 ターミナルに FSBL メ ッセージが表示されます。 これらのメ ッセージには、 各パーティシ ョ ンで

実行された暗号化操作が示されます。 付録 A 「セキュア ブートでの問題のデバッグ」 では、 セキュア ブート テス ト

で問題が検出された場合に実行する手順を説明します。

サンプル デザインの概要

サンプル デザインは、 さまざまなタイプのイ メージをデバイスに読み込みます。 FSBL、 PMU ファームウェア、

U-Boot、 Linux、 RPU ソフ ト ウェア、 および PL コンフ ィギュレーシ ョ ン イ メージを読み込みます。 このサンプルで

は、 これらすべてのイ メージは FSBL によ り読み込まれ、 FSBL ですべての認証および復号化が実行されます。 これ

がシステムをブートする唯一の方法ではあ り ませんが、 2019.1 以降ではシンプルでセキュアな方法です。

X-Ref Target - Figure 5-33

図 5-33: サンプル デザインの概要

CSU

APU

RPU

PL

RPUSW Assumption: Executes out of a combination of int/ext memory

PMURAM

CSURAM

OCM

ProtectedDDR

CRAM

KeyGeneration

DeviceProvisioning

Boot ImageCreation

HardwareExecution

PL Programmed and Operational – loaded by FSBL instead of Uboot sinceUboot operates out of DDR and is not as secure,BIT

PMU PMUROM

ReleaseCSU

Reset

PMUFW Config Mgr (XILFPGA, XILSECURE), Framework, Warm-Restart, etc.

CSUROM

FSBL (Auth+Enc)

Load Auth+Enc PMU FW;Load Auth ATF; Load Auth+Enc Bitstream, Load Auth U-Boot;Needs to run out of OCM for Security Reasons

ATF Needs to run out of OCM for Security Reasons

UBoot Authentication is done in external memory; Too large for internal

Linux Authentication is done in external memory; Too large for internal

FSBL

TimeX20902-052418

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 100UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 101: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

ブート イ メージ内のさまざまなセクシ ョ ンはセキュ リティ レベルが異なり、 異なる場所に読み込まれます。 次の表

に、 終的なブート イ メージの内容を示します。

このチュート リ アルでは、 第 6 章 「システム デザイン例」 を使用して作成したバイナリ を、 すべてのセキュ リティ

機能を有効にしてブート イ メージに統合します。 このセクシ ョ ンでは、 PL ビッ ト ス ト リームをセキュア ブート フローの一部と して追加する方法も示します。 第 6 章 「システム デザイン例」 の手順に 「ビルド設定の変更」 まで

従って必要なファイルをすべて作成してから、 このセクシ ョ ンに戻り ます。

ブート イ メージでセキュ リティ機能を有効にするには、 2 つの方法があ り ます。 初の方法では、 テキス ト エディ

ターを使用して BIF ファ イルを手動で作成し、 その BIF ファ イルを使用して Bootgen でキーを作成します。 これによ

り、 セキュ リ ティ機能を有効にした BIF ファ イルのセクシ ョ ンを特定できます。 2 つ目の方法では、 Vitis IDE の Create Boot Image ウ ィザードを使用します。 同じセキュ リ ティ機能を示します。 2 つ目の方法では、 便宜上 初の方

法と同じキーを使用します。

認証用のキーの生成

キーの生成方法は複数あ り ます。 Bootgen、 カスタマイズされたキー ファ イル、 OpenSSL、 ハード ウェア セキュ リ

ティ モジュール (HSM) を使用する方法などがあ り ます。 このチュート リ アルでは、 Bootgen を使用します。 Bootgen で作成したファイルは、 ほかのキー ソースからのユーザー指定キーを含むファイルを作成する際にテンプレート と

して使用できます。

Bootgen を使用してキーを作成するには、 BIF ファ イルを生成して変更する必要があ り ます。 このチュート リ アルの

キー生成セクシ ョ ンでは、 これらの BIF ファ イルをテキス ト エディ ターを使用して手動で作成します。 その次の

ブート イ メージのビルド セクシ ョ ンでは、 これらの BIF ファ イルを Create Boot Image ウ ィザードを使用して作成す

る方法を示します。

RSA 秘密/公開キー ペアの作成

この例では、 プライマ リおよびセカンダ リのキーを PEM フォーマッ トで作成します。 キーは、 Bootgen のコマンド ライン オプシ ョ ンを使用して生成されます。 または、 OpenSSL などの外部ツールを使用してキーを作成できます。

次の手順に従って RSA 秘密/公開キー ペアを作成します。

表 5-3: 終的なブート イ メージとセキュア属性

バイナリ RSA 認証 AES 暗号化 例外レベル ローダー

FSBL あ り あ り EL3 CSU ROM

PMU ファームウェア あ り あ り 該当なし FSBL

PL ビッ ト ス ト リーム あ り あ り 該当なし FSBL

Arm ト ラステッ ド ファーム

ウェア (ATF)あ り なし EL3 FSBL

R5 ソフ ト ウェア あ り あ り 該当なし FSBL

U-Boot あ り なし EL2 FSBL

Linux あ り なし EL1 FSBL

注記:

1. セキュア ブート シーケンスでは、 PMU イ メージは FSBL によ り読み込まれます。 PMU ファームウェアの読み込みに bootROM/CSU を使用する と、 まず FSBL の復号化、 その後 PMU イ メージの復号化にキー /IV の組み合わせが 2 回使用されるので、 セキュ リ ティ脆弱性が発生します。 これはセキュア システムでは許容されません。

2. 2019.1 からは、 U-Boot で Linux のセキュア認証読み込みは実行されません。 U-Boot の代わりに FSBL で Linux イ メージがメモ リ アドレスに読み込まれ、 U-Boot が使用されてそのメモ リ アドレスにジャンプします。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 101UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 102: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

1. Vitis IDE のシェルを起動します。

2. [Xilinx] → [Launch Shell] をク リ ッ ク します。

3. key_generation.bif という名前のファイルを作成します。

注記: key_generation.bif ファ イルは、 この手順で使用する非対称キーと後の手順で使用する対称キーの両方を作

成するのに使用します。

the_ROM_image:{

[pskfile]psk0.pem[sskfile]ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[fsbl_config]a53_x64[bootloader]fsbl_a53.elf[destination_cpu = pmu]pmu_fw.elf[destination_device = pl]edt_zcu102_wrapper.bit[destination_cpu = a53-0, exception_level = el-3, trustzone] bl31.elf[destination_cpu = r5-0]tmr_psled_r5.elf[destination_cpu = a53-0, exception_level = el-2]u-boot.elf[load = 0x1000000, destination_cpu = a53-0]image.ub

}

4. key_generation.bif ファ イルを C:\edt\secure_boot_sd\keys ディ レク ト リに保存します。

5. 第 6 章 「システム デザイン例」 で作成した ELF、 BIF、 および UB ファ イルを C:\edt\secure_boot_sd\keys ディレ

ク ト リにコピーします。

6. BIF ファ イルを含むフォルダーに移動します。

cd C:\edt\secure_boot_sd\keys

7. 次のコマンドを実行してキーを生成します。

bootgen -p zu9eg -arch zynqmp -generate_keys auth pem -image key_generation.bif

8. psk0.pem および ssk0.pem ファイルが BIF ファ イルで指定された場所 (c:\edt\secure_boot_sd\keys) に生成されてい

るこ とを確認します。

RSA 秘密/公開キー ペアで公開キーの SHA3 を生成

次に示す手順は、 eFUSE モードの RSA 認証でのみ実行する必要があ り、 ブート ヘッダーモードの RSA 認証ではス

キップできます。 sha3.txt からの 384 ビッ ト を eFUSE にプログラムして、 eFUSE モードの RSA 認証に使用できます。

詳細は、 『BBRAM および eFUSE のプログラ ミ ング』 (XAPP1319) [参照 12] を参照してください。

1. 前のセクシ ョ ンの手順を実行します。

2. PEM ファ イルが定義されたので、 key_generation.bif に次に示すよ うに authentication = rsa 属性を追加します。

the_ROM_image:{

[pskfile]psk0.pem[sskfile]ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[fsbl_config]a53_x64[bootloader, authentication = rsa]fsbl_a53.elf[destination_cpu = pmu, authentication = rsa]pmu_fw.elf[destination_device = pl, authentication = rsa]edt_zcu102_wrapper.bit[destination_cpu = a53-0, exception_level = el-3, trustzone, authentication = rsa]bl31.elf[destination_cpu = r5-0, authentication = rsa]tmr_psled_r5.elf[destination_cpu = a53-0, exception_level = el-2, authentication = rsa]u-boot.elf[load = 0x1000000, destination_cpu = a53-0, authentication = rsa]image.ub

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 102UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 103: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

}

3. 次の bootgen コマンドを使用して PPK のハッシュを計算します。

bootgen -p zcu9eg -arch zynqmp -efuseppkbits ppk0_digest.txt -image key_generation.bif

4. ppk0_digest.txt ファ イルが指定された場所 (c:\edt\secure_boot_sd\keys) に生成されているこ とを確認します。

追加の RSA 秘密/公開キー ペア

このセクシ ョ ンでは、 キーの取り消しに必要なセカンダ リ RSA 秘密/公開キー ペアを生成する手順を示します。 こ

れには、 eFUSE のプログラムが必要です。詳細は、『BBRAM および eFUSE のプログラ ミ ング』 (XAPP1319) [参照 12] を参照してください。 キーの取り消しを使用する予定がない場合は、 このセクシ ョ ンはスキップできます。

2 つ目の RSA 秘密/公開キー ペアを作成し、 この PPK の SHA3 を生成するには、「RSA 秘密/公開キー ペアの作成」 お

よび 「RSA 秘密/公開キー ペアで公開キーの SHA3 を生成」 の手順を繰り返します。

1. 前のセクシ ョ ンの手順を psk0.pem、 ssk0.pem、 および ppk0_digest.txt をそれぞれ psk1.pem、 ssk1.pem、 および ppk1_digest.pem に置き換えて実行します。 このファイルを key_generation_1.bif という名前で保存します。 この .bif ファ イルは次のよ うにな り ます。

the_ROM_image:{

[pskfile]psk1.pem[sskfile]ssk1.pem[auth_params]spk_id = 1; ppk_select = 1[fsbl_config]a53_x64[bootloader]fsbl_a53.elf[destination_cpu = pmu]pmu_fw.elf[destination_device = pl]edt_zcu102_wrapper.bit[destination_cpu = a53-0, exception_level = el-3, trustzone]bl31.elf[destination_cpu = r5-0]tmr_psled_r5.elf[destination_cpu = a53-0, exception_level = el-2]u-boot.elf[load = 0x1000000, destination_cpu = a53-0]image.ub

}

2. 次の bootgen コマンドを実行して RSA 秘密/公開キー ペアを作成します。

bootgen -p zu9eg -arch zynqmp -generate_keys auth pem -image key_generation_1.bif

3. key_generation_1.bif ファ イルに authentication = rsa 属性を追加します。 .bif ファ イルは次のよ うにな り ます。

the_ROM_image:{

[pskfile]psk1.pem[sskfile]ssk1.pem[auth_params]spk_id = 1; ppk_select = 1[fsbl_config]a53_x64[bootloader, authentication = rsa]fsbl_a53.elf[destination_cpu = pmu, authentication = rsa]pmu_fw.elf[destination_device = pl, authentication = rsa]edt_zcu102_wrapper.bit[destination_cpu = a53-0, exception_level = el-3, trustzone, authentication = rsa]bl31.elf[destination_cpu = r5-0, authentication = rsa]tmr_psled_r5.elf[destination_cpu = a53-0, exception_level = el-2, authentication = rsa]u-boot.elf[load = 0x1000000, destination_cpu = a53-0, authentication = rsa]image.ub

}

4. 次の bootgen コマンドを使用してプライマ リ RSA 公開キーのハッシュを生成します。

bootgen -p zcu9eg -arch zynqmp -efuseppkbits ppk1_digest.txt -image key_generation_1.bif

5. ppk1.pem、 spk1.pem、 および ppk1_digest.txt ファ イルが指定された場所 (c:\edt\secure_boot_sd\keys) に生成されて

いるこ とを確認します。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 103UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 104: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

ブート ヘッダー認証の有効化

ブート ヘッダー認証モードでは、 ROM での PPK の eFUSE ハッシュ、 PPK の取り消しステータス、 およびセカンダ

リ キーのセッシ ョ ン ID のチェッ クがスキップされます。 このモードでは eFUSE をプログラムする必要がないので、

テス トおよびデバッグに便利です。 このモードは、 デバイスで RSA_EN eFUSE をプログラムするこ とによ り恒久的

に無効にできます。 これによ り、 eFUSE チェッ クを使用した RSA 認証が強制的に実行されるよ うにな り ます。

フ ィールドに展開されたシステムでは、 RSA_EN eFUSE を使用して eFUSE チェッ クが強制的に実行されるよ うに

し、 ブート ヘッダー認証は無効にしてください。

[fsbl_config] 行に bh_auth_enable 属性を追加します。 .bif ファ イルは次のよ うにな り ます。

the_ROM_image:{

[pskfile]psk0.pem[sskfile]ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[fsbl_config]a53_x64, bh_auth_enable[bootloader, authentication = rsa]fsbl_a53.elf[destination_cpu = pmu, authentication = rsa]pmu_fw.elf[destination_device = pl, authentication = rsa]edt_zcu102_wrapper.bit[destination_cpu = a53-0, exception_level = el-3, trustzone, authentication = rsa]bl31.elf[destination_cpu = r5-0, authentication = rsa]tmr_psled_r5.elf[destination_cpu = a53-0, exception_level = el-2, authentication = rsa]u-boot.elf[load = 0x1000000, destination_cpu = a53-0, authentication = rsa]image.ub

}

機密性のためのキーの生成

イ メージの機密性については 「ブート イ メージの機密性と DPA」 で説明します。 このセクシ ョ ンでは、 認証セク

シ ョ ンの .bif ファ イルに属性を追加して、 AES-256-GCM 暗号化アルゴ リズムを使用したイ メージの機密性を有効に

します。 後に bootgen コマンドを実行して、 必要な AES-256 キーを作成します。

AES 暗号化の使用

1. [keysrc_encryption] bbram_red_key 属性を使用して初期暗号キー (bbram_red_key) のキー ソースを指定し、 イ メー

ジの機密性を有効にします。

2. パーティシ ョ ンに encryption = aes 属性を追加して機密性を有効にします。 各パーティシ ョ ンに固有のキー ファ

イルも指定します。 各パーティシ ョ ンに固有のキー ファ イルを使用する と、 キーが再利用されず、 1 つのキー

に暗号化される情報量が少なくなるので、 セキュ リ ティが向上します。 key_generation.bif ファ イルは次のよ うに

なり ます。

the_ROM_image:{[pskfile]psk0.pem[sskfile]ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[keysrc_encryption]bbram_red_key[fsbl_config]a53_x64, bh_auth_enable[bootloader, authentication = rsa, encryption = aes, aeskeyfile =fsbl_a53.nky]fsbl_a53.elf[destination_cpu = pmu, authentication = rsa, encryption = aes, aeskeyfile = pmu_fw.nky]pmu_fw.elf[destination_device = pl, authentication = rsa, encryption = aes, aeskeyfile = edt_zcu102_wrapper.nky]edt_zcu102_wrapper.bit[destination_cpu = a53-0, exception_level = el-3, trustzone, authentication = rsa]bl31.elf[destination_cpu = r5-0, authentication = rsa, encryption = aes,aeskeyfile = tmr_psled_r5.nky]tmr_psled_r5.elf[destination_cpu = a53-0, exception_level = el-2, authentication = rsa]u-boot.elf[load = 0x1000000, destination_cpu = a53-0, authentication = rsa]image.ub}

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 104UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 105: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

DPA 保護の有効化

このセクシ ョ ンでは、 差分電力解析 (DPA) への対策に有効な操作キーとキー ローリ ングの使用手順を示します。

操作キーの使用の有効化

操作キーを使用する と、 デバイス キーを使用して暗号化される情報量が制限されます。 操作キーの使用を有効にす

るには、 .bif ファ イルの [fsbl_config] 行に opt_key 属性を追加します。 key_generation.bif ファ イルは次のよ うになり ま

す。

the_ROM_image:{

[pskfile]psk0.pem[sskfile]ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[keysrc_encryption]bbram_red_key[fsbl_config]a53_x64, bh_auth_enable, opt_key[bootloader, authentication = rsa, encryption = aes, aeskeyfile = fsbl_a53.nky]fsbl_a53.elf[destination_cpu = pmu, authentication = rsa, encryption = aes, aeskeyfile = pmu_fw.nky]pmu_fw.elf[destination_device = pl, authentication = rsa, encryption = aes, aeskeyfile =

edt_zcu102_wrapper.nky]edt_zcu102_wrapper.bit[destination_cpu = a53-0, exception_level = el-3, trustzone, authentication = rsa]bl31.elf[destination_cpu = r5-0, authentication = rsa, encryption = aes, aeskeyfile = tmr_psled_r5.nky]tmr_psled_r5.elf[destination_cpu = a53-0, exception_level = el-2, authentication = rsa]u-boot.elf[load = 0x1000000, destination_cpu = a53-0, authentication = rsa]image.ub

}

キー ローリ ングを使用した暗号化の有効化

キー ローリ ングを使用する と、 ほかのキーを使用して暗号化される情報の量が制限されます。 キー ローリ ングを有

効にするには、 .bif ファ イルでパーティシ ョ ンごとに blocks 属性を追加します。 blocks 属性では、 各キーで暗号化す

る情報量をバイ ト数で指定できます。 たとえば、 blocks=4096,1024(3),512(*) と記述する と 初のキーに 4096 バイ ト、

2 ~ 4 番目キーには 1024 バイ ト、 残りすべてのキーに 512 バイ トが使用されます。 この例では、 各キーの情報量を 1728 バイ トに制限しています。

キー ローリ ングの使用を有効にするには、 暗号化された各パーティシ ョ ンに blocks 属性を追加します。

key_generation.bif ファ イルは次のよ うになり ます。

the_ROM_image:{[pskfile]psk0.pem[sskfile]ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[keysrc_encryption]bbram_red_key[fsbl_config]a53_x64, bh_auth_enable, opt_key[bootloader, authentication = rsa, encryption = aes, aeskeyfile = fsbl_a53.nky, blocks = 1728(*)]fsbl_a53.elf[destination_cpu = pmu, authentication = rsa, encryption = aes,aeskeyfile = pmu_fw.nky, blocks = 1728(*)]pmu_fw.elf[destination_device = pl, authentication = rsa, encryption = aes,aeskeyfile = edt_zcu102_wrapper.nky, blocks = 1728(*)]edt_zcu102_wrapper.bit[destination_cpu = a53-0, exception_level = el-3, trustzone, authentication = rsa]bl31.elf[destination_cpu = r5-0, authentication = rsa, encryption = aes, aeskeyfile = tmr_psled_r5.nky, blocks = 1728(*)]tmr_psled_r5.elf[destination_cpu = a53-0, exception_level = el-2, authentication = rsa]u-boot.elf[load = 0x1000000, destination_cpu = a53-0, authentication = rsa]image.ub}

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 105UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 106: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

AES キーの生成

必要な暗号化機能をすべて有効にしたら、 Bootgen を使用してキー ファ イルを生成できます。 ELF などの一部のソー

ス ファ イルには、 複数のセクシ ョ ンがあ り ます。 これらの各セクシ ョ ンは個別のパーティシ ョ ンにマップされ、 各

パーティシ ョ ンに固有のキー ファ イルが使用されます。 その場合、 キー ファ イルに 「.1.」 が追加されます。 たとえ

ば、 pmu_fw.elf ファ イルに複数のセクシ ョ ンがある場合、 pmu_fw.nky および pmu_fw.1.nky ファ イルが生成されます。

1. 次の bootgen コマンドを実行して必要な NKY ファ イルすべてを作成します。 このコマンドによ り、 終的な BOOT.bin イ メージが作成されます。

bootgen -p zcu9eg -arch zynqmp -image key_generation.bif

2. NKY ファ イルが生成されているこ とを確認します。 edt_zcu102_wrapper.nky、 fsbl_a53.nky、 pmu_fw.nky、pmu_fw.1.nky、 pmu_fw.2.nky、 tmr_psled_r5.nky、 および tmr_psled_r5.1.nky ファ イルが生成されているはずです。

キー取り消しの使用

キー取り消しを使用する と、 RSA のプライマ リ公開キーまたはセカンダ リ公開キーを無効にできます。 キーの使用

時間が超過した場合、 またはキーへの不正アクセスが検出された場合、 キー取り消しが適用されます。 プライマ リ

およびセカンダ リ キーの取り消しは、 ワンタイム プログラマブルな eFUSE によって制御されます。 ザイ リ ンクス セキュア キー ライブラ リ をキー取り消しに使用する と、 フ ィールド展開されているデバイスに対するキー取り消し

が可能になり ます。 キー取り消しの詳細は、 『Zynq UltraScale+ MPSoC テクニカル リ ファレンス マニュアル』 (UG1085) [参照 5] を参照してください。

PUF の使用

このセクシ ョ ンでは、 PUF を PUF ブート ヘッダー モードで使用してブラ ッ ク キーを格納します。 PUF を使用する

場合は RSA 認証が必要です。 PUF ブート ヘッダー モードでは、 PUF ヘルパー データ と暗号化されたユーザー AES キーはブート ヘッダーに格納されます。 こ こでは PUF を使用して BIF を作成する方法を説明します。 ヘルパー デー

タおよび暗号化されたユーザー キーはボードに特定なので、 作成された Bootgen イ メージはヘルパー データを作成

したボードでしか機能しません。

「セキュア ブート シーケンス」 の 後に、 eFUSE モードで PUF を使用した BIF ファ イルが示されています。 PUF eFUSE モードでは、 PUF ヘルパー データ と暗号化されたユーザー AES キーは eFUSE に格納されます。 PUF eFUSE モードでは、 すべてのボードで 1 つのブート イ メージを使用できます。

PUF の登録 - ブート ヘッダー モード

PUF 登録ソフ ト ウェアは kilskey ライブラ リに含まれています。 このソフ ト ウェアはブート ヘッダー モードまたは eFUSE モードで動作します。 ブート ヘッダー モードでは、 OTP の eFUSE をプログラムするこ とな く開発が可能で

す。 eFUSE モードは、 プロダクシ ョ ン フローで使用されます。 このチュート リ アルでは、 ブート ヘッダー モードで

の PUF の登録までを実行します。 eFUSE を使用した PUF 登録については、 『BBRAM および eFUSE のプログラ ミ ン

グ』 (XAPP1319) [参照 12] を参照してください。

PUF 登録ソフ ト ウェアはレッ ド (非暗号化) キーを入力と して受け取り、CHASH と AUX も含むシンド ローム データ (ヘルパー データ ) およびブラ ッ ク (暗号化) キーを出力します。PUF ブート ヘッダー モードでは、 この出力はブート ヘッダーに挿入されます。 PUF eFUSE モードでは、 この出力は eFUSE にプログラムされます。

1. Vitis IDE で、 [tmr_psled_r5_bsp] を右ク リ ッ ク し、 [Board Support Package Settings] をク リ ッ ク します。

2. [Supported Libraries] で [xilskey] および [xilsecure] を必ずオンにします。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 106UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 107: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

3. [OK] をク リ ッ ク します。ハード ウェア プラ ッ ト フォームをビルド し直して変更を適用します。 tmr_psled_r5_bsp 設定に移動します。

4. [Libraries] セクシ ョ ンまでスクロール ダウンします。 xilskey 6.8 の [Import Examples] をク リ ッ ク します。

5. 表示されたダイアログ ボッ クスで、 [xilskey_puf_registration] をオンにします。 [OK] をク リ ッ ク します。

6. [Project Explorer] ビューで、 xilskey_puf_example_1 アプリ ケーシ ョ ンが system_bsp_example_1.の下に作成されま

す。

7. [Project Explorer] ビューの xilskey_puf_example_1 'Src' で [xilskey_puf_registration.h] をダブルク リ ッ ク して Vitis IDE で開きます。

8. xilskey_puf_registration.h を次のよ うに変更します。

X-Ref Target - Figure 5-34

図 5-34: [Supported Libraries] で [xilskey] および [xilsecure] をオンにする

X-Ref Target - Figure 5-35

図 5-35: PUF 登録サンプルのインポート

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 107UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 108: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

a. #define XSK_PUF_INFO_ON_UART を FALSE から TRUE に変更します。

b. #define XSK_PUF_PROGRAM_EFUSE が FALSE に設定されているこ とを確認します。

c. XSK_PUF_AES_KEY (256 ビッ ト キー ) を設定します。

キーは 16 進数フォーマッ トで入力し、 「AES キーの生成」 で生成した fsbl_a53.nky ファ イルの Key 0 キーである

必要があ り ます。 次にサンプル キーを示します。

#define XSK_PUF_AES_KEY "68D58595279ED1481C674383583C1D98DA816202A57E7FE4F67859CB069CD510"

注記: このキーはコピーしないでください。 ユーザー キーについては、 fsbl_a53.nky ファ イルを参照してくださ

い。

d. XSK_PUF_BLACK_KEY_IV を次のよ うに設定します。 初期化ベクター (IV) はユーザーが選択する 12 バイ

ト データです。

#define XSK_PUF_BLACK_KEY_IV "E1757A6E6DD1CC9F733BED31"

9. ファ イルを保存して閉じます。

10. [Project Explorer] ビューで [xilskey_puf_example_1 project] を右ク リ ッ ク し、 [Build Project] をク リ ッ ク します。

11. Vitis IDE で [Xilinx] → [Create Boot Image] をク リ ッ ク します。

12. [Architecture] で [Zynq MP] を選択します。

13. [Output BIF file path] で次のよ うに指定します。

C:\edt\secureboot_sd\puf_registration\puf_registration.bif

14. [Output path] で次のよ うに指定します。

C:\edt\secureboot_sd\puf_registration\BOOT.bin

15. [Boot image partitions] で [Add] をク リ ッ ク します。 パーティシ ョ ンを追加し、 xilskey_puf_example_1 アプリ ケー

シ ョ ンのデスティネーシ ョ ン CPU を R5-0 に設定します。

C:\edt\fsbl_a53\Debug\fsbl_a53.elfC:\edt\xilskey_puf_example_1\Debug\xilskey_puf_example_1.elf

16. [Create Image] をク リ ッ ク して、 PUF 登録用のブート イ メージを作成します。

X-Ref Target - Figure 5-36

図 5-36: ブート ヘッダー モードでの PUF 登録

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 108UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 109: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

17. SD カードを PC の SD カード スロ ッ トに挿入します。

18. C:\edt\secureboot_sd\puf_registration\BOOT.bin を SD カードにコピーします。

19. SD カードを PC の SD カード スロ ッ トから取り出し、 ZCU102 のカード スロ ッ トに挿入します。

20. 使用しているホス ト マシンに応じて Tera Term または Minicom を使用し、 ターミナル セッシ ョ ンを開始します。

システムの COM ポート とボー レート を図 3-18 に示すよ うに設定します。

21. 通信ターミナルのメニュー バーで、 [File] → [Log] をク リ ッ ク します。 ダイアログ ボッ クスに

「C:\edt\secureboot_sd\puf_registration\puf_registration.log」 と入力します。

22. ボードの電源を切って入れ直します。

23. puf_registration ソフ ト ウェアが実行されたら、 通信ターミナルを終了します。

24. puf_registration.log の内容は 「ブート ヘッダー モードでの PUF の使用」 で使用されます。 テキス ト エディ ター

で puf_registration.log を開きます。

25. 「App:PUF Syndrome data Start!!!」 の後から 「App:PUF Syndrome data End!!!」 まで (これらは含めない) の PUF シン

ド ローム データを helperdata.txt という ファ イルに保存します。

26. App: Black Key IV というブラ ッ ク キーを black_iv.txt とい う ファ イルに保存します。

27. ブラ ッ ク キーを black_key.txt という ファ イルに保存します。

28. helperdata.txt、 black_key.txt、 および black_iv.txt ファ イルは、 C:\edt\secure_boot_sd\keys に保存します。

X-Ref Target - Figure 5-37

図 5-37: PUF 登録ソフ ト ウェア

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 109UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 110: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

ブート ヘッダー モードでの PUF の使用

前のセクシ ョ ンの .bif ファ イルを次の手順に従ってアップデート し、 ブート ヘッダー モードでの PUF の使用を有効

にします。 このセクシ ョ ンでは、 PUF 登録プロセスで作成したシンド ローム データ とブラ ッ ク キーを使用します。

1. 次に示す .bif ファ イル (key_generation.bif) に太字で示されているフ ィールドおよび属性をすべて追加して、 PUF の使用を有効にします。

the_ROM_image:{[pskfile]psk0.pem[sskfile]ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[keysrc_encryption]bh_blk_key[bh_key_iv]black_iv.txt[bh_keyfile]black_key.txt[puf_file]helperdata.txt[fsbl_config]a53_x64, bh_auth_enable, opt_key, puf4kmode, shutter=0x0100005E,pufhd_bh[bootloader, authentication = rsa, encryption = aes, aeskeyfile = fsbl_a53.nky, blocks = 1728(*)]fsbl_a53.elf[destination_cpu = pmu, authentication = rsa, encryption = aes, aeskeyfile = pmu_fw.nky, blocks = 1728(*)]pmu_fw.elf[destination_device = pl, authentication = rsa, encryption = aes, aeskeyfile = edt_zcu102_wrapper.nky, blocks = 1728(*)]edt_zcu102_wrapper.bit[destination_cpu = a53-0, exception_level = el-3, trustzone, authentication = rsa]bl31.elf[destination_cpu = r5-0, authentication = rsa, encryption = aes, aeskeyfile = tmr_psled_r5.nky, blocks =1728(*)]tmr_psled_r5.elf[destination_cpu = a53-0, exception_level = el-2, authentication = rsa]u-boot.elf[load = 0x1000000, destination_cpu = a53-0, authentication = rsa]image.ub}

2. 上記の .bif ファ イルを使用して、PUF KEK を使用してブート イ メージ ヘッダーで暗号化された AES キーを使用

して 終的なブート イ メージを作成します。 これには、 次の bootgen コマンドを使用します。

bootgen -p zcu9eg -arch zynqmp -image key_generation.bif -w -o BOOT.bin

注記: 上記の手順は、 eFUSE モードの PUF でも実行できます。 その場合は、 eFUSE モードの PUF を使用して、 前述

の手順を繰り返します。 これには、 PUF 登録アプリ ケーシ ョ ンのビルドに使用した xilskey_puf_registration.h ファ イ

ルに XSK_PUF_PROGRAM_EFUSE マクロを設定して、 PUF 登録中に eFUSE のプログラムをイネーブルにする必要

があ り ます。 また、 eFUSE からの暗号キーを使用するよ うに BIF を変更し、 ヘルパー データ とブラ ッ ク キー ファ イ

ルを削除する必要があ り ます。 開発またはチュート リ アル システムの eFUSE をプログラムしないよ うにするため、

このチュート リ アルでは eFUSE モードの PUF については説明しません。

[keysrc_encryption]efuse_blk_key[bh_key_iv]black_iv.txt

Vitis IDE の Create Boot Image ウ ィザードを使用したシステム例

前のセクシ ョ ンでは、 BIF ファ イルを手動で編集して、 さまざまなセキュ リティ機能 (認証、 機密性、 DPA 保護、 お

よびブラ ッ ク キーの格納) を有効にしました。 このセクシ ョ ンでは、 同じ操作を Create Boot Image ウ ィザードを開始

点と して使用して実行します。 Create Boot Image ウ ィザードで基本の BIF ファ イルを作成し、 その後ウ ィザードでサ

ポート されていないセキュ リティ機能をテキス ト エディ ターを使用して追加します。

1. cd コマンドを使用して bootgen_files ディ レク ト リに移動します。

cd C:\edt\secure_boot_sd\bootgen_files

2. 前の例からの次のデータをこの例にコピーします。

cp ../keys/*nky .cp ../keys/*pem .cp ../keys/black_iv.txt .

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 110UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 111: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

cp ../keys/helperdata.txt .cp ../keys/*.elf .cp ../keys/edt_zcu102_wrapper.bit .cp ../keys/image.ub .cp ../keys/black_key.txt.

3. [Programs] → [Xilinx Design Tools] → [Vitis 2019.2] → [Xilinx Vitis 2019.2] をク リ ッ ク して Vitis IDE を起動します。

4. メニュー バーから [Xilinx Tools] → [Create Boot Image] をク リ ッ ク し、 Create Boot Image ウ ィザードを開きます。

5. [Architecture] で [Zynq MP] を選択します。

6. [Output BIF file path] を c:\edt\secure_boot_sd\bootgen_files\design_bh_bkey_keyrolling.bif に設定します。

7. [Output format] で [BIN] を選択します。

8. [Output path] に c:\edt\secure_boot_sd\bootgen_files\BOOT.bin を入力します。

9. 認証を有効にします。

a. [Security] タブをク リ ッ ク します。

b. [Use Authentication] をオンにします。

c. [Browse] ボタンを使用して、 [PSK] に psk0.pem ファ イル、 [SSK] に ssk0.pem ファ イルを選択します。

d. [PPK Select] が 0 であるこ とを確認します。

e. [SPK ID] に 0 を入力します。

f. [Use BH Auth] をオンにします。

10. 暗号化を有効にします。

X-Ref Target - Figure 5-38

図 5-38: 認証の有効化

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 111UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 112: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

a. [Encryption] タブをク リ ッ ク します。

b. [Use Encryption] をオンにします。

c. [Key File] で [Browse] ボタンをク リ ッ ク して fsbl_a53.nky ファ イルを選択します。

d. [Operational Key] をオンにします。

11. [Basic] タブをク リ ッ ク します。

12. ブート イ メージに FSBL バイナリ を追加します。

a. [Add] をク リ ッ ク します。

b. [File path] で [Browse] ボタンをク リ ッ ク して fsbl_a53.elf ファ イルを選択します。

c. [Partition type] を [bootloader]、 [Destination CPU] を [a53x64] に設定します。

d. [Authentication] を [rsa] に設定します。

e. [Encryption] を [aes] に設定します。

f. [OK] をク リ ッ ク します。

X-Ref Target - Figure 5-39

図 5-39: 暗号化の有効化

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 112UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 113: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

13. ブート イ メージに PMW ファームウェア バイナリ を追加します。

a. [Add] をク リ ッ ク します。

b. [File path] で [Browse] ボタンをク リ ッ ク して pmu_fw.elf ファ イルを選択します。

c. [Partition type] を [datafile] に設定します。

d. [Destination CPU] を [PMU] に設定します。

e. [Authentication] を [rsa] に設定します。

f. [Encryption] を [aes] に設定します。

g. [OK] をク リ ッ ク します。

X-Ref Target - Figure 5-40

図 5-40: FSBL バイナリの追加

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 113UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 114: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

14. ブート イ メージに PL ビッ ト ス ト リームを追加します。

a. [Add] をク リ ッ ク します。

b. [File path] で [Browse] ボタンをク リ ッ ク して edt_zcu102_wrapper.bit ファ イルを選択します。

c. [Partition type] を [datafile] に設定します。

d. [Destination Device] を [PL] に設定します。

e. [Authentication] を [rsa] に設定します。

f. [Encryption] を [aes] に設定します。

g. [OK] をク リ ッ ク します。

X-Ref Target - Figure 5-41

図 5-41: PMU ファームウェア バイナリの追加

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 114UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 115: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

15. ブート イ メージに Arm ト ラステッ ド ファームウェア (ATF) バイナリ を追加します。

a. [Add] をク リ ッ ク します。

b. [File path] で [Browse] ボタンをク リ ッ ク して bl31.elf ファ イルを選択します。

c. [Partition type] を [datafile] に設定します。

d. [Destination CPU] を [A53 0] に設定します。

e. [Authentication] を [rsa] に設定します。

f. [Encryption] を [none] に設定します。

g. [Exception Level] を [EL3] に設定し、 [Enable Trust Zone] をオンにします。

h. [OK] をク リ ッ ク します。

X-Ref Target - Figure 5-42

図 5-42: PL ビッ ト ス ト リームの追加

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 115UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 116: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

16. ブート イ メージに R5 ソフ ト ウェア バイナリ を追加します。

a. [Add] をク リ ッ ク します。

b. [File path] で [Browse] ボタンをク リ ッ ク して tmr_psled_r5.elf ファ イルを選択します。

c. [Partition type] を [datafile] に設定します。

d. [Destination CPU] を [R5 0] に設定します。

e. [Authentication] を [rsa] に設定します。

f. [Encryption] を [aes] に設定します。

g. [OK] をク リ ッ ク します。

X-Ref Target - Figure 5-43

図 5-43: Arm ト ラステッ ド ファームウェアの追加

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 116UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 117: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

17. ブート イ メージに U-Boot ソフ ト ウェア バイナリ を追加します。

a. [Add] をク リ ッ ク します。

b. [File path] で [Browse] ボタンをク リ ッ ク して u-boot.elf ファ イルを選択します。

c. [Partition type] を [datafile] に設定します。

d. [Destination CPU] を [A53 0] に設定します。

e. [Authentication] を [rsa] に設定します。

f. [Encryption] を [none] に設定します。

g. [Exception Level] を [EL2] に設定します。

h. [OK] をク リ ッ ク します。

X-Ref Target - Figure 5-44

図 5-44: R5 アプリ ケーシ ョ ン バイナリの追加

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 117UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 118: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

18. ブート イ メージに Linux イ メージを追加します。

a. [Add] をク リ ッ ク します。

b. [File path] で [Browse] ボタンをク リ ッ ク して image.ub ファ イルを選択します。

c. [Partition type] を [datafile] に設定します。

d. [Destination CPU] を [A53 0] に設定します。

e. [Authentication] を [rsa] に設定します。

f. [Encryption] を [none] に設定します。

g. [Load] に 0x2000000 を入力します。

h. [OK] をク リ ッ ク します。

X-Ref Target - Figure 5-45

図 5-45: U-Boot ソフ ト ウェアの追加

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 118UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 119: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

19. [Create Image] をク リ ッ ク します。

20. design_bh_bkey_keyrolling.bif は次のよ うになり ます。

X-Ref Target - Figure 5-46

図 5-46: Linux ブート イ メージの追加

X-Ref Target - Figure 5-47

図 5-47: 終的なブート イ メージの作成

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 119UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 120: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

the_ROM_image:{

[pskfile]psk0.pem[sskfile]ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[aeskeyfile]fsbl_a53.nky[keysrc_encryption]efuse_red_key[fsbl_config]a53_x64, bh_auth_enable, opt_key[bootloader, encryption = aes, authentication = rsa]fsbl_a53.elf[encryption = aes, authentication = rsa, destination_cpu = pmu]pmu_fw.elf[encryption = aes, authentication = rsa, destination_device = pl]edt_zcu102_wrapper.bit[authentication = rsa, destination_cpu = a53-0, exception_level = el-3]bl31.elf[encryption = aes, authentication = rsa, destination_cpu = r5-0]tmr_psled_r5.elf[authentication = rsa, destination_cpu = a53-0, exception_level = el-2]u-boot.elf[authentication = rsa, load = 0x2000000, destination_cpu = a53-0]image.ub

}

21. この BIF ファ イルにはまだ足りないセキュ リティ機能があ り ます。 これらの機能は Create Boot Image ウ ィザー

ドでサポート されていません。 足りない機能は、 パーティシ ョ ンごとの .nky ファ イル、 キー ローリ ング、 およ

びブラ ッ ク キーの格納です。

22. BIF ファ イルが次のよ うになるよ うに、 keysrc_encryption を変更し、 項目を追加します。

the_ROM_image:{

[pskfile]psk0.pem[sskfile]ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[aeskeyfile]fsbl_a53.nky[keysrc_encryption]bh_blk_key

[bh_key_iv]black_iv.txt[bh_keyfile]black_key.txt[puf_file]helperdata.txt

[fsbl_config]a53_x64, bh_auth_enable, opt_key, puf4kmode, shutter=0x0100005E, pufhd_bh[bootloader, encryption = aes, authentication = rsa]fsbl_a53.elf[encryption = aes, authentication = rsa, destination_cpu = pmu]pmu_fw.elf[encryption = aes, authentication = rsa, destination_device = pl]edt_zcu102_wrapper.bit[authentication = rsa, destination_cpu = a53-0, exception_level = el-3]bl31.elf[encryption = aes, authentication = rsa, destination_cpu = r5-0]tmr_psled_r5.elf[authentication = rsa, destination_cpu = a53-0, exception_level = el-2]u-boot.elf[authentication = rsa, load = 0x2000000, destination_cpu = a53-0]image.ub

}

23. BIF ファ イルを次のよ うになるよ うに変更し、 暗号化された各パーティシ ョ ンに固有の AES キー ファ イルを指

定します。

the_ROM_image:{[pskfile]psk0.pem[sskfile]ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[keysrc_encryption]bh_blk_key[bh_key_iv]black_iv.txt[bh_keyfile]black_key.txt[puf_file]helperdata.txt[fsbl_config]a53_x64, bh_auth_enable, opt_key, puf4kmode, shutter=0x0100005E, pufhd_bh[bootloader, encryption = aes, aeskeyfile = fsbl_a53.nky, authentication = rsa]fsbl_a53.elf[encryption = aes, aeskeyfile = pmu_fw.nky, authentication = rsa, destination_cpu = pmu]pmu_fw.elf[encryption = aes, aeskeyfile = edt_zcu102_wrapper.nky, authentication = rsa, destination_device = pl]edt_zcu102_wrapper.bit

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 120UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 121: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

[authentication = rsa, destination_cpu = a53-0, exception_level = el-3]bl31.elf[encryption = aes, aeskeyfile = tmr_psled_r5.nky, authentication = rsa, destination_cpu = r5-0]tmr_psled_r5.elf[authentication = rsa, destination_cpu = a53-0, exception_level = el-2]u-boot.elf[authentication = rsa, load = 0x2000000, destination_cpu = a53-0]image.ub}

24. 暗号化された各パーティシ ョ ンに blocks 属性を追加し、 キー ローリ ング有効にします。 BIF ファ イルは次のよ

うになり ます。

the_ROM_image:{[pskfile]psk0.pem[sskfile]ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[keysrc_encryption]bh_blk_key[bh_key_iv]black_iv.txt[bh_keyfile]black_key.txt[puf_file]helperdata.txt[fsbl_config]a53_x64, bh_auth_enable, opt_key, puf4kmode, shutter=0x0100005e, pufhd_bh[bootloader, encryption = aes, aeskeyfile = fsbl_a53.nky, authentication = rsa, blocks = 1728(*)]fsbl_a53.elf[encryption = aes, aeskeyfile = pmu_fw.nky, authentication = rsa, destination_cpu = pmu, blocks = 1728(*)]pmu_fw.elf[encryption = aes, aeskeyfile = edt_zcu102_wrapper.nky, authentication = rsa, destination_device = pl, blocks = 1728(*)]edt_zcu102_wrapper.bit[authentication = rsa, destination_cpu = a53-0, exception_level = el-3]bl31.elf[encryption = aes, aeskeyfile = tmr_psled_r5.nky, authentication = rsa, destination_cpu = r5-0, blocks = 1728(*)]tmr_psled_r5.elf[authentication = rsa, destination_cpu = a53-0, exception_level = el-2]u-boot.elf[authentication = rsa, load = 0x2000000, destination_cpu = a53-0]image.ub}

25. 次のコマンドを実行して、 ブート イ メージを生成します。 -encryption_dump オプシ ョ ンが追加されているこ とに

注意してください。 このオプシ ョ ンによ り、 ログ ファ イル aes_log.txt が作成されます。 このログ ファ イルには、

使用されたすべての暗号化操作の詳細が記述されます。 このファイルを参照して、 ブート イ メージのどのセク

シ ョ ンにどのキーおよび IV が使用されているかを確認できます。

bootgen -p zcu9eg -arch zynqmp -image design_bh_bkey_keyrolling.bif -w -o BOOT.bin -encryption_dump

セキュア ブート イ メージを使用したシステムのブート

このセクシ ョ ンでは、 前のセクシ ョ ンで作成した BOOT.bin ブート イ メージを使用して ZCU102 でセキュア ブート

を実行する方法を示します。

1. c:\edt\secure_boot_sd\bootgen_files から BOOT.bin イ メージおよび ps_pl_linux_app.elf を SD カードにコピーします。

2. SD カードを ZCU102 に挿入します。

3. ZCU102 の SW6 を SD ブート モードに設定します (1 をオン、 2、 3、 4 をオフ)。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 121UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 122: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

4. シ リアル ターミナルを ZCU102 に接続します (115200、 8 データ ビッ ト 、 1 停止ビッ ト、 パリ ティなし )。

5. ZCU102 に電源を投入します。

6. ターミナルに U-Boot の ZynqMP> プロンプ トが表示されたら、 「bootm 0x2000000」 と入力します。

7. 次の資格情報を使用して、 Linux にログインします。

ログイン: root

パスワード : root

X-Ref Target - Figure 5-48

図 5-48: SD ブート モードの SW6 スイ ッチ設定

X-Ref Target - Figure 5-49

図 5-49: U-Boot プロンプ ト

X-Ref Target - Figure 5-50

図 5-50: Linux ログイン

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 122UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 123: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

「サンプル デザイン 1: GPIO、 タイマー、 および割り込みの使用」 の手順に従って Linux アプリ ケーシ ョ ンを実行し

ます。

Linux アプリ ケーシ ョ ンの実行

次の手順に従って Linux アプリ ケーシ ョ ンを実行します。

1. アプリ ケーシ ョ ンを SD カードのマウン ト ポイン トから /tmp にコピーします。

# cp /run/media/mmcblk0p1/ps_pl_linux_app.elf /tmp

注記: この場所に SD カードの内容が見つからない場合は、 SD カードを手動で挿入してください。

# mount /dev/mmcblk0p1 /media/

2. アプリ ケーシ ョ ンを /tmp にコピーします。

# cp /media/ps_pl_linux_app.elf /tmp

3. アプリ ケーシ ョ ンを実行します。

# /tmp/ps_pl_linux_app.elf

フ ィールドで展開されているシステム用のサンプル BIF

次に、 フ ィールドで展開されているシステム用の BIF ファ イル例を示します。 この BIF ファ イルをボード上で機能

させるには、 RSA_EN、 PPK0 ダイジェス ト、 ブラ ッ ク AES キー、 および PUF ヘルパーを eFUSE にプログラムする

必要があ り ます。 これらの eFUSE をプログラムする と、 デバイスまたはボードのテス トおよびデバッグでの使用が

制限されるので、 参照用にのみ含めています。 チュート リ アルの一部ではあ り ません。

終的な generation.bif ファ イルを次のよ うに変更します。

1. PUF ブート ヘッダー モードから PUF eFUSE モードに変更します。

a. keysrc_encryption 属性を efuse_blk_key に変更します。

b. bh_keyfile および puf_file 行を削除します。

c. fsbl_config 行から puf4kmode および pufhd_bh 属性を削除します。

2. ブート ヘッダー認証から eFUSE 認証に変更します。

a. fsbl_config 行から bh_auth_enable 属性を削除します。

the_ROM_image:{

[pskfile]psk0.pem[sskfile]ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[keysrc_encryption]efuse_blk_key[bh_key_iv]black_iv.txt[fsbl_config]a53_x64, opt_key, shutter=0x0100005E[aeskeyfile]fsbl_a53.nky[bootloader, authentication = rsa, encryption = aes, blocks = 1728(*)]fsbl_a53.elf[aeskeyfile]pmu_fw.nky[destination_cpu = pmu, authentication = rsa, encryption = aes, blocks = 1728(*)]pmu_fw.elf[aeskeyfile]edt_zcu102_wrapper.nky[destination_device = pl, authentication = rsa, encryption = aes, blocks = 1728(*)]edt_zcu102_wrapper.bit[destination_cpu = a53-0, exception_level = el-3, trustzone, authentication = rsa]bl31.elf[aeskeyfile]tmr_psled_r5.nky[destination_cpu = r5-0, authentication = rsa, encryption = aes, blocks = 1728(*)]tmr_psled_r5.elf[destination_cpu = a53-0, exception_level = el-2, authentication = rsa]u-boot.elf[load = 0x2000000, destination_cpu = a53-0, authentication = rsa]image.ub

}

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リ アル 123UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 125: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章

システム デザイン例この章では、 使用可能なツールとサポート されているソフ ト ウェア ブロ ッ クを使用して、 Zynq® UltraScale+™ デバ

イスをベースにしたシステムを構築する方法を説明します。 また、 第 3 章で設定したソフ ト ウェア ブロ ッ クを使用

して Zynq UltraScale+ システムを作成する方法も示します。 ド メ イン特定のデザインについては説明しませんが、

Zynq UltraScale+ デバイスで利用可能な下位のソフ ト ウェアを使用するさまざまな方法を重点的に示します。

サンプル デザイン 1: GPIO、 タイマー、 および割り込みの使用

Zynq ZCU102 UltraScale+ 評価ボードには、 ユーザー設定可能なスイ ッチおよび LED がいくつかあ り ます。 このサン

プル デザインでは、 ベアメ タルおよび Linux アプリ ケーシ ョ ンを使用して、 これらの LED を ト グルします。 詳細は

次のとおりです。

• Linux アプリ ケーシ ョ ンは、 PS DIP スイ ッチを使用して ト グルする PL LED セッ ト と、 PL DIP スイ ッチ (SW17) を使用して ト グルする PL LED セッ ト を設定します。

• Linux APU A-53 コア 0 でこの Linux アプリ ケーシ ョ ンを実行し、 RPU R5 コア 0 で別のベアメ タル アプリ ケー

シ ョ ンを実行します。

• R5 コア 0 のアプリ ケーシ ョ ンは、 プログラマブル ロジッ クの AXI Timer IP を使用して PS LED (DS50) を ト グル

します。 このアプ リ ケーシ ョ ンは、 タイマー カウンターのカウン トが終了するたびに LED 状態を ト グルするよ

うに設定されており、 PL 内のタイマーは、 ユーザー設定可能な期間が経過した後に定期的にリセッ トするよ う

に設定されています。 システムは、 APU Linux アプリ ケーシ ョ ンと RPU ベアメ タル アプリ ケーシ ョ ンが同時に

実行されるよ うに設定されています。

ハードウェアの設定

このデザインの 初の手順と して、 PS セクシ ョ ンと PL セクシ ョ ンを設定します。 これは Vivado IP インテグレー

ターで実行できます。 まず Vivado IP カタログから必要な IP を追加し、 PS サブシステムのブロ ッ クにコンポーネン

ト を接続します。

1. Vivado Design Suite が既に開いている場合は、 図 2-2 に示すブロ ッ ク図から開始して手順 4 に進みます。

2. 作成した Vivado プロジェク ト を開きます。

C:/edt/edt_zcu102/edt_zcu102.xpr

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 125UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 126: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

3. Flow Navigator の [IP Integrator] で、 [Open Block Design] をク リ ッ ク して [edt_zcu102.bd] をク リ ッ ク します。

4. ブロ ッ ク図を右ク リ ッ ク し、 [Add IP] をク リ ッ ク して IP カタログから IP を追加します。

IP の追加および設定

1. IP カタログで [AXI Timer] を選択します。

次の図に示すよ うに、 [IP Details] に情報が表示されます。

2. [AXI Timer] をダブルク リ ッ ク してデザインに追加します。

X-Ref Target - Figure 6-1

図 6-1: ブロック デザインを開く

X-Ref Target - Figure 6-2

図 6-2: [IP Details] の情報

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 126UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 127: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

3. [AXI Timer] を再度ダブルク リ ッ ク して、 次の図のよ うに IP を設定します。

4. [OK] をク リ ッ ク します。

5. ブロ ッ ク図を右ク リ ッ ク し、 [Add IP] をク リ ッ ク します。

6. AXI GPIO を検索し、 [AXI GPIO] をダブルク リ ッ ク してブロ ッ ク図に追加します。

7. 手順 5 および手順 6 を繰り返して、 AXI GPIO IP の別のインスタンスを追加します。

8. axi_gpio_0 をダブルク リ ッ ク し、GPIO の [Board Interface] ド ロ ップダウン リ ス トから [push button 5bits] を選択し

ます。

X-Ref Target - Figure 6-3

図 6-3: AXI Timer の [Re-customize IP] ダイアログ ボックス

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 127UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 128: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

9. [OK] をク リ ッ ク して、 プッシュボタンの AXI_GPIO 設定を確定します。

10. [axi_gpio_1] をダブルク リ ッ ク します。

11. 次の図に示すよ うに、 GPIO の [Board Interface] ド ロ ップダウン リ ス トから [led 8bits] を選択します。

12. [OK] をク リ ッ ク して、 LED の AXI_GPIO 設定を確定します。

X-Ref Target - Figure 6-4

図 6-4: AXI GPIO の [Re-customize IP] ダイアログ ボックス

X-Ref Target - Figure 6-5

図 6-5: led_8bits の GPIO の設定

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 128UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 129: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

IP ブロックを接続して完全なシステムを作成

ボードのプリセッ ト を使用して初期接続を実行します。 これには、 次の手順に従います。

1. [Zynq UltraScale+ IP] ブロ ッ クをダブルク リ ッ ク し、 図 6-6 に示すよ うに PL-PS の割り込みを設定します。 デ

フォルトで選択されている場合は、 次の手順に進みます。

2. [PS-PL Configuration] で、 [PS-PL Interfaces] → [Master Interface] を展開表示します。

X-Ref Target - Figure 6-6

図 6-6: PL-PS 割り込みの設定

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 129UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 130: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

3. 図 6-7 に示すよ うに、 [AXI HPM0 LPD] を展開して [AXI HPM0 LPD Data Width] ド ロ ップダウン リ ス トから 128 ビッ ト を選択します。

4. [OK] をク リ ッ ク して設定を完了し、 ブロ ッ ク図に戻り ます。

5. [Diagram] ウ ィンド ウで、 [axi_timer_0] の割り込みポート を [pl_ps_irq [0:0]] に接続します。

6. [Run Connection Automation] をク リ ッ ク します。 [Run Block Automation] はク リ ッ ク しないでください。

7. [Run Connection Automation] ダイアログ ボッ クスで、 [All Automation] をオンにします。

8. [OK] をク リ ッ ク します。

9. [Address Editor] ウ ィンド ウで、 次の図に示すよ うに該当する IP に同じアドレス マップが割り当てられているこ

とを確認します。 割り当てられていない場合は、 オフセッ ト アドレスを次の図に示す内容と一致するよ うに設

定します。

.

10. 次のセクシ ョ ンで説明するよ うにデザインを検証し、 デザインの出力ファイルを生成します。

X-Ref Target - Figure 6-7

図 6-7: AXI HPM0 LPD のデータ幅の設定

X-Ref Target - Figure 6-8

図 6-8: [Run Connection Automation] リンク

X-Ref Target - Figure 6-9

図 6-9: PL IP のアドレス マップ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 130UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 131: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

デザインを検証して出力ファイルを生成する

1. [Diagram] ウ ィンド ウに戻り、 ブロ ッ ク デザインを保存します (Ctrl + S キーを押す)。

2. [Diagram] ウ ィンド ウの空白部分を右ク リ ッ ク して、 [Validate Design] をク リ ッ ク します。

または、 F6 キーを押します。

検証が成功し、 デザインにエラーや重大な警告がないこ とを示すメ ッセージ ダイアログ ボッ クスが表示され

ます。

3. [OK] をク リ ッ ク してメ ッセージを閉じます。

4. [Block Design] 環境の [Sources] ウ ィンド ウをク リ ッ ク します。

5. [Hierarchy] タブをク リ ッ ク します。

6. [Block Design] の [Sources] ウ ィンド ウで、 [Design Sources] の [edt_zcu102_wrapper] を展開します。

7. 「edt_zcu102_i - edt_zcu102 (edt_zcu102.bd)」 とい う名前の 上位ブロ ッ ク図を右ク リ ッ ク し、

[Generate Output Products] をク リ ッ ク します。

図 6-10 に示す [Generate Output Products] ダイアログ ボッ クスが表示されます。

注記: Linux ホス トマシンで Vivado Design Suite を実行している場合は、 [Run Settings] の下に追加オプシ ョ ンが表

示されるこ とがあ り ます。 その場合は、 デフォルト設定で続行します。

8. [Generate] をク リ ッ ク します。

9. [Generate Output Products] の処理が完了したら、 [OK] をク リ ッ ク します。

X-Ref Target - Figure 6-10

図 6-10: [Generate Output Products] ダイアログ ボックス

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 131UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 132: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

10. [Block Design] の [Sources] ウ ィンド ウで、 [IP Sources] タブをク リ ッ ク します。 次の図に示すよ うに、 生成した出

力ファイルが表示されます。

デザインの合成、 インプリ メンテーシ ョ ンの実行、 およびビッ トス ト リームの生成

1. デザインを合成します。 Flow Navigator で [Synthesis] → [Run Synthesis] をク リ ッ ク します。

X-Ref Target - Figure 6-11

図 6-11: [IP Sources] の下に生成された出力

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 132UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 133: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

2. 合成の開始前にプロジェク ト を保存するよ う メ ッセージが表示された場合は、 [Save] をク リ ッ ク します。

合成の実行中、 ウ ィンド ウの右上にステータス バーが表示されます。 このステータス バーは、 デザイン プロセ

スをとおして、 さまざまな理由によ り表示されます。 ステータス バーは、 プロセスがバッ クグランドで実行さ

れているこ とを示します。

合成が完了する と、 [Synthesis Completed] ダイアログ ボッ クスが開きます。

3. [Run Implementation] をク リ ッ ク して [OK] をク リ ッ ク します。

この場合も、 プロセスがバッ クグラウンドで実行されているこ とが、 ステータス バーによって示されます。 イ

ンプ リ メンテーシ ョ ンが完了する と、 [Implementation Completed] ダイアログ ボッ クスが開きます。

4. [Generate Bitstream] をク リ ッ ク して [OK] をク リ ッ ク します。

ビッ ト ス ト リームの生成が完了する と、 [Bitstream Generation Completed] ダイアログ ボッ クスが開きます。

5. [Cancel] をク リ ッ ク してウ ィンド ウを閉じます。

6. ビッ ト ス ト リームの生成が完了したら、 ハード ウェアを Vitis IDE にエクスポート します。

ハードウェアのエクスポート

1. [File] → [Export] → [Export Hardware] をク リ ッ ク します。

[Export Hardware] ダイアログ ボッ クスが開きます。 [Include bitstream] がオンになっているこ と (デザインで、 PL デザインとビッ ト ス ト リームが生成されている場合のみ)、 および [Export to] がローカル パスに設定されている

こ とを確認します。

2. [OK] をク リ ッ ク します。

3. Vitis IDE でハードウェアをアップデートするには、 edt_zcu102_wrapper プラ ッ ト フォーム プロジェク ト を選択し

ます。 右ク リ ッ ク して [Update the Hardware] をク リ ッ ク し、 Vivado からエクスポート したハード ウェアのパスを

入力します。

X-Ref Target - Figure 6-12

図 6-12: Run Synthesis

X-Ref Target - Figure 6-13

図 6-13: ステータ スバー

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 133UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 134: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

ソフ トウェアの設定

このユース ケースには、 R5 コアで実行するベアメ タル アプリ ケーシ ョ ンと、 APU Linux ターゲッ トで実行する Linux アプリ ケーシ ョ ンがあ り ます。 ほとんどのソフ ト ウェア ブロ ッ クは、 第 3 章で説明したものと同様です。 こ

のサンプル デザインのソフ ト ウェアには、 PL ロジッ クに追加されたコンポーネン ト用の追加ド ライバーが必要で

す。 そのため、 このデザイン用に生成されたハード ウェア ファ イルを使用して Vitis IDE で新しいベアメ タル BSP を作成する必要があ り ます。 また、 Linux では、 新しいハード ウェア デザイン ファ イル (HDF) に合わせて Linux BSP を再設定する必要があ り ます。 ソフ ト ウェアを設定する前に、 アプリ ケーシ ョ ン デザインの構成を確認して くださ

い。 システムには RPU で実行するベアメ タル アプリ ケーシ ョ ンがあ り、 これは PS LED をユーザーが設定した期間

ト グルするこ とで開始します。 LED は、 PL ブロッ クで動作している PL AXI Timer に合わせて ト グルするよ うに設定

されています。 ベアメ タル アプリ ケーシ ョ ンは、 AXI Timer を生成モードに設定し、 タイマー カウン トが満了にな

るたびに割り込みを生成します。 このアプリ ケーシ ョ ンは、 タイマー割り込みを処理した後、 PS LED の状態を切り

替えるよ うに設計されています。アプリ ケーシ ョ ンは無限の while ループで実行され、ユーザーが設定した期間 LED を ト グルした後に RPU を WFI モードに設定します。 LED のこの ト グル シーケンスは、 外部割り込みを使用して RPU を WFI モードから遷移させるこ とで繰り返すこ とができます。 このため、 UART 割り込みも同じアプリ ケー

シ ョ ンで設定および有効化されます。 ベアメ タル アプリ ケーシ ョ ンが RPU 上で実行される一方で、 Linux ターゲッ

ト も別の Linux アプリ ケーシ ョ ンを実行します。 Linux アプリ ケーシ ョ ンは、 PS または PL スイ ッチからのユーザー

入力を使用して PL LED を ト グルします。 この Linux アプリ ケーシ ョ ンは無限の while ループでも実行し、 PL LED をト グルするためのユーザー入力を待ちます。 次の一連の手順では、 このデザイン用にシステム ソフ ト ウェアを設定

し、 ユーザー アプリ ケーシ ョ ンを構築する方法を示します。

PetaLinux を使用した Linux のコンフ ィギュレーシ ョ ンおよびビルド

まず、 PetaLinux を使用して Linux イ メージを作成します。 Linux イ メージは、 このデザインのハード ウェア設定に合

わせて作成する必要があ り ます。 また、 SD ブート用のイ メージを作成するために PetaLinux を設定する必要があ り

ます。

第 3 章の 「サンプル プロジェク ト : PetaLinux を使用した Linux イ メージの作成」 を参照し、 手順 2 から手順 13 を繰

り返してデバイス ツ リーを更新し、 PetaLinux を使用して Linux イ メージを構築します。 または、 このチュート リ ア

ルで共有している Linux イ メージ ファ イルを使用するこ と もできます。 このセクシ ョ ンのイ メージは、

<design_files>/design にあ り ます。

手順 15 に従ってイ メージを検証します。 次のステップでは、 Arm Cortex-R5 ベースの RPU をターゲッ ト と したベア

メ タル アプリ ケーシ ョ ンを作成します。

このサンプル デザインでは、 このチュート リ アルでリ リースされたデザイン ファ イル (ZIP) に含まれるアプリ ケー

シ ョ ン ソース ファ イルをインポートする必要があ り ます。 これらのデザイン ファ イルの場所は、 付録 B の 「この

チュート リ アルのデザイン ファ イル」 を参照してください。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 134UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 135: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

ベアメ タル アプリケーシ ョ ン プロジェク トの作成

1. Vitis IDE で [File] → [New] → [Application Project] をク リ ッ ク します。

New Project ウ ィザードが開きます。

2. ウ ィザードの各ページで次の表の情報に基づいて設定を選択します。

3. [Finish] をク リ ッ ク します。

New Project ウ ィザードが閉じ、 Vitis IDE によって tmr_psled_r5 アプリ ケーシ ョ ン プロジェク トが [Project Explorer] の下に作成されます。

4. [Project Explorer] ビューで [tmr_psled_r5] プロジェク ト を展開します。

5. [src] を右ク リ ッ ク し、 [Import] をク リ ッ ク して [Import] ダイアログ ボッ クスを開きます。

6. [Import] ダイアログ ボッ クスで [General] を展開し、 [File System] をク リ ッ ク します。

7. [Next] をク リ ッ ク します。

8. [Browse] をク リ ッ ク し、 前に保存したデザイン ファ イル design-files/design1 フォルダーに移動します (付録 B の 「その他のリ ソースおよび法的通知」 を参照)。

9. [OK] をク リ ッ ク します。

10. timer_psled_r5.c ファ イルを選択して追加します。

11. [Finish] をク リ ッ ク します。

Vitis IDE は自動的にアプリ ケーシ ョ ンを構築し、 コンソール ウ ィンド ウにステータスを表示します。

リンカー スクリプ トの変更

1. [Project Explorer] ビューで [tmr_psled_r5] プロジェク ト を展開します。

2. [src] を展開表示して [lscript.ld] をダブルク リ ッ ク し、 プロジェク トの リ ンカー スク リプ ト を開きます。

3. リ ンカー スク リプ トの [Available Memory Regions] で、 psu_r5_ddr_0_MEM_0 のベース アドレス とサイズを次の

よ うに変更します。

[Base Address]: 0x70000000

[Size]: 0x10000000

表 6-1: タイマー ベースの RPU アプリケーシ ョ ン プロジェク ト作成時の設定

ウィザード ページ システム プロパティ 設定または使用するコマンド

Application Project Project name tmr_psled_r5

Use default location オン

System Project Create New

Platform edt_zcu102_wrapper

ド メ イン psu_cortexr5_0

Language C

CPU psu_cortexr5_0

OS Standalone

Templates Available Templates Empty Application

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 135UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 136: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

リ ンカー スク リプ トの変更を次の図に示します。 この図は表示のみです。 実際のメモ リ領域は、 隔離設定が使

用されている場合は異なるこ とがあ り ます。

この リ ンカー スク リプ トの変更によ り、RPU ベアメ タル アプリ ケーシ ョ ンは DDR の 0x70000000 のベース アド

レスよ り上位にあ り、 256 MB 以下のサイズとな り ます。

4. Ctrl + S キーを押して変更を保存します。

5. tmr_psled_r5 プロジェク ト を右ク リ ッ ク し、 [Build Project] をク リ ッ ク します。

6. アプリ ケーシ ョ ンがコンパイルされ、 リ ンクが正常に確立され、 tmr_psled_r5.elf ファ イルが [tmr_psled_r5] → [Debug] フォルダーに生成されているこ とを確認します。

7. BSP が UART_1 用に設定されているこ とを確認します。 詳細は、 第 3 章の 「ボード サポート パッケージの変

更」 を参照してください。

Linux アプリケーシ ョ ンの Linux ド メインの作成

Linux アプリ ケーシ ョ ンの Linux ド メ インを作成するには、 次の手順に従います。

1. Vitis IDE の [Explore] ビューで、 edt_zcu102_wrapper プラ ッ ト フォーム プロジェク ト を展開します。

2. platform.spr をダブルク リ ッ ク してハード ウェアを開きます。 プラ ッ ト フォームが [Explorer] ビューに開き

ます。

X-Ref Target - Figure 6-14

図 6-14: リンカー スクリプ トの変更

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 136UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 137: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

3. ビュー右上の + ボタンをク リ ッ ク してド メ インを追加します。

4. 新規ド メ イン ウ ィンド ウに次の情報を入力します。

5. [Use pre-built software components] をク リ ッ ク し、 次を実行します。

a. ブート ディレク ト リ を作成して、 Vitis ツールおよび PetaLinux ツールで生成されたブート コンポーネン ト (Vitis IDE で作成された FSBL および PMU ファームウェアおよび PetaLinux で作成された ATF、 u_boot.elf、および image.ub) をコピーします。

b. design1 フォルダーにデザイン ファ イルと共に配布されている bif ファ イルをコピーし、 bif ファイル パスを

入力します。

X-Ref Target - Figure 6-15

図 6-15: Linux ド メインの追加

表 6-2: 新規 Linux ド メインを作成するための情報

システム プロパティ 設定または使用するコマンド

Name Linux Domain

Display Name Linux_application_domain

OS Linux

Processor psu_cortexa53_0

Supported Run times C/C++

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 137UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 138: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

6. [OK] をク リ ッ ク して、 終了します。

次の図に示すよ うに、 Linux ド メ インのプロパティはウ ィンド ウで確認できます。

7. [Image] に image.ub ファ イル パスを追加します。

Linux ド メ インが準備できたので、 Linux アプリ ケーシ ョ ンを作成できます。

X-Ref Target - Figure 6-16

図 6-16: Linux アプリケーシ ョ ン ド メインの作成

X-Ref Target - Figure 6-17

図 6-17: Linux ド メインのプロパティ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 138UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 139: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

Linux アプリケーシ ョ ン プロジェク トの作成

1. Vitis IDE で [File] → [New] → [Application Project] をク リ ッ ク します。

New Project ウ ィザードが開きます。

2. ウ ィザードの各ページで次の表の情報に基づいて設定を選択します。

s

3. [Finish] をク リ ッ ク します。

New Project ウ ィザードが閉じ、 Vitis IDE によって ps_pl_linux_app アプリ ケーシ ョ ン プロジェク トが [Project Explorer] の下に作成されます。

4. [Project Explorer] ビューで [ps_pl_linux_app] プロジェク ト を展開します。

5. [src] を右ク リ ッ ク し、 [Import] をク リ ッ ク して [Import] ダイアログ ボッ クスを開きます。

6. [Import] ダイアログ ボッ クスで [General] を展開し、 [File System] をク リ ッ ク します。

7. [Next] をク リ ッ ク します。

8. [Browse] をク リ ッ ク し、 前に保存したデザイン ファ イル design-files/design1 フォルダーに移動します (付録 B の 「このチュート リ アルのデザイン ファ イル」 を参照)。

9. [OK] をク リ ッ ク します。

10. ps_pl_linux_app.c ファ イルを選択して追加します。

注記: pthread ライブラ リへの参照がないため、 アプリ ケーシ ョ ンのビルドでエラーが発生するこ とがあ り ます。

次のセクシ ョ ンに、 pthread ライブラ リ を追加する方法を示します。

表 6-3: 新しい Linux アプリケーシ ョ ン プロジェク ト作成時の設定

ウィザード ページ システム プロパティ 設定または使用するコマンド

Application Project Project name ps_pl_linux_app

Use default location オン

System Project Create New

Platform edt_zcu102_wrapper

ド メ イン Linux_application_domain

言語 C

CPU cortex-a53

OS Linux

Templates Available Templates Linux Empty Application

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 139UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 140: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

ビルド設定の変更

このアプ リ ケーシ ョ ンでは、 pthread ライブラ リから Pthread を使用します。 Pthread ライブラ リ を次のよ うに追加し

ます。

1. [ps_pl_linux_app] を右ク リ ッ ク して、 [C/C++ Build] → [Settings] をク リ ッ ク します。

2. 次の図を参照して pthread ライブラ リ を追加します。

3. 両方のウ ィンド ウで [OK] をク リ ッ ク します。

アプリ ケーシ ョ ンを構築するには、 アプリ ケーシ ョ ンを右ク リ ッ ク して [Build project] をク リ ッ ク します。

X-Ref Target - Figure 6-18

図 6-18: C/C++ ビルド設定

X-Ref Target - Figure 6-19

図 6-19: pthread ライブラリの追加

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 140UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 141: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

ブート イメージの作成

各イ メージの準備が完了したので、 ブート イ メージを作成して Zynq UltraScale+ にこれらのコンポーネン ト をすべて

ロード します。 この操作は、 Vitis IDE の Create Boot Image ウ ィザードを使用して、 次の手順に従って実行できます。

この例では、 C:\edt\design1 にブート イ メージ BOOT.bin が作成されます。

1. Vitis IDE を開いていない場合は、 起動します。

2. 第 2 章で作成したプロジェク トに基づいてワークスペース パスを設定します。 次に例を示します。

C:\edt

3. [Xilinx] → [Create Boot Image] をク リ ッ ク します。

4. Create Boot Image ウ ィザードで図 6-20 に示すよ うに設定します。

5. 次の図に示すよ うに、 パーティシ ョ ンを追加します。

注記: パーティシ ョ ンを追加する手順の詳細は、 「SD ブートのブート シーケンス」 を参照してください。X-Ref Target - Figure 6-20

図 6-20: SD ブート モードの Create Boot Image ウィザード

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 141UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 142: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

注記: このブート イ メージには PL ビッ ト ス ト リーム edt_zcu102_wrapper.bit ([Partition Type] は [Datafile]、[Destination Device] は [PL] に設定) が必要です。 ブート イ メージの作成時に、 ブート ローダーの直後にビッ ト ス

ト リーム ーティシ ョ ンを追加する必要があ り ます。 また、 このブート イ メージには、 R5 アプリ ケーシ ョ ンの tmr_psled_r5.elf がパーティシ ョ ンと して追加されます。

6. すべてのパーティシ ョ ンを追加したら、 [Create Image] をク リ ッ ク します。

重要: ATF のパーティシ ョ ンでは [Exception Level] を [EL3] に設定して [Enable Trust Zone] をオンにし、U-Boot のパー

ティシ ョ ンでは [Exception Level] を [EL2] に設定します。 これらの設定は、 その他のパーティシ ョ ンでは無視できま

す。

ZCU102 ボードでのイメージの実行

SD カードの準備

SD カードにイ メージと実行ファイルをコピーし、 ボードの SD カード スロ ッ トにその SD カードを挿入します。

1. BOOT.BIN ファイルと image.ub ファ イルを SD カードにコピーします。

注記: BOOT.BIN は C:\edt\design1 にあ り ます。

2. Linux アプリ ケーシ ョ ンの ps_pl_linux_app.elf を同じ SD カードにコピーします。 このアプリ ケーシ ョ ン

は次のディ レク ト リにあ り ます。

c:\edt\ps_pl_linux_app\Debug

ターゲッ トのセッ トアップ

1. SD カードを ZCU102 ボードの J100 コネクタに挿入します。

2. ボードの USB-UART をホス ト マシンに接続します。

3. Micro USB ケーブルの一端を ZCU102 ボードの Micro USB ポート J83 に接続し、も う一端をホス ト マシンの空き

の USB ポートに接続します。

4. スイ ッチ SW6 を次の図に示すよ うに設定し、 ボードを SD ブート モードに設定します。

5. 12V 電源を ZCU102 の 6 ピン Molex コネクタに接続します。

X-Ref Target - Figure 6-21

図 6-21: SD ブート モードの SW6 スイッチ設定

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 142UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 143: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

6. 使用しているホス ト マシンに応じて Tera Term または Minicom を使用し、 ターミナル セッシ ョ ンを開始します。

図 5-8 に示すよ うに、 システムの COM ポート とボー レート を設定します。

7. ポート設定では、 デバイス マネージャーで COM ポート を検証します。

ZCU102 ボードには、 4 つの USB UART インターフェイスがあ り ます。

8. も小さい番号のインターフェイスに関連付けられた COM ポート を選択します。 こ こでは、 UART-0 に対して Interface-0 の COM ポート を選択します。

9. 同様に、 UART-1 に Interface-1 の COM ポート を選択します。

R5 BSP は UART-1 を使用するよ うに設定されているため、 R5 アプリ ケーシ ョ ン メ ッセージは UART-1 ターミナ

ルの COM ポートに表示されます。

ターゲッ トへの電源投入とアプリケーシ ョ ンの実行

1. SW1 を使用して ZCU102 ボードに電源を投入し、 Linux がボードにロード されるまで待ちます。

UART-0 用のターミナル画面に初期ブート シーケンス メ ッセージが表示されます。

UART-1 用に設定されたターミナル画面にも メ ッセージが表示されます。 これは、 RPU で実行されている UART-1 インターフェイスを使用するよ うに設定された R-5 ベアメ タル アプリ ケーシ ョ ンからのメ ッセージで

す。 このアプリ ケーシ ョ ンは、 FSBL によって RPU にロード されます。

2. アプリ ケーシ ョ ンが実行されます。 PS LED がアプリ ケーシ ョ ンによ り ト グルされ、 アプリ ケーシ ョ ン ターミナ

ルの指示に従っているこ とが示されます。X-Ref Target - Figure 6-22

図 6-22: R5-0 ベアメ タル アプリケーシ ョ ン

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 143UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 144: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

Linux アプリケーシ ョ ンの実行

Linux が ZCU102 システム上で起動したら、 ログインに root、 パスワードに root を使用して Linux ターゲッ トにログ

インします。 これで、 Linux ターゲッ トはアプリ ケーシ ョ ンの実行を開始できます。

次の手順に従って Linux アプリ ケーシ ョ ンを実行します。

1. アプリ ケーシ ョ ンを SD カードのマウン ト ポイン トから /tmp にコピーします。

# cp /run/media/mmcblk0p1/ps_pl_linux_app.elf /tmp

注記: この場所に SD カードの内容が見つからない場合は、 SD カードを手動で挿入してください。 # mount /dev/mmcblk0p1 /media/

アプリ ケーシ ョ ンを /tmp にコピーします。

# cp /media/ps_pl_linux_app.elf /tmp

2. アプリ ケーシ ョ ンを実行します。

# /tmp/ps_pl_linux_app.elfX-Ref Target - Figure 6-23

図 6-23: Linux ターミナル

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 144UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 145: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

サンプル デザイン 2: グラフ ィ ッ クおよびディスプレイ ポート ベースのサブシステムのセッ トアップ例

このサンプル デザインは、主に Zynq UltraScale+ MPSoC デバイスのグラフ ィ ッ クス プロセッシング ユニッ ト (GPU) とディ スプレイ ポート (DP) をベースにしています。 この例では、 Zynq UltraScale+ MPSoC デバイスの GPU と DP をベース と したデザインを実行するために必要な設定、 パッケージ、 およびツール フローを示します。 このサンプル デザインは、 次のセクシ ョ ンで構成されます。

1. ハードウェアを設定。

2. 次に示す必要なパッケージを含むよ うに PetaLinux RootFS を設定。

a. GPU 関連のパッケージ

b. X Window System と依存性情報

3. PetaLinux を使用してブート イ メージと Linux イ メージをビルド。

4. Mali GPU をターゲッ ト と したグラフ ィ ッ クス OpenGL ES アプリ ケーシ ョ ンをビルド。 このアプ リ ケーシ ョ ン

は、 X Window System をベースにしています。

5. ZCU102 ボードに Linux をロード し、 ターゲッ ト上でグラフ ィ ッ クス アプリ ケーシ ョ ンを実行して、 ディ スプレ

イ ポートにその結果を表示。

ハードウェアの設定

このセクシ ョ ンでは、 ディ スプレイ ポートの GT レーンに Dual Lower を設定するよ うにプロセッシング システムを

設定します。 このセクシ ョ ンのハード ウェア設定は、 「サンプル デザイン 1: GPIO、 タイマー、 および割り込みの使

用」 で作成した同じ Vivado プロジェク トに基づいています。

Vivado IP インテグレーターでのハードウェアの設定

1. edt_zcu102 プロジェク ト とブロ ッ ク デザインが Vivado で開いているこ とを確認します。

2. [Diagram] ウ ィンド ウで、 ZYNQ UltraScale+ Processing System ブロッ クをダブルク リ ッ ク し、 [Re-customize IP] ダイアログ ボッ クスを開きます。

3. [Re-customize IP] ダイアログ ボッ クスで、 [I/O Configuration] → [High Speed] をク リ ッ ク します。

4. PCIe ペリ フェラルの接続をオフにします。

5. 次の図に示すよ うに、 [Display Port] を展開表示して、 [Lane Selection] を [Dual Lower] に設定します。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 145UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 146: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

注記: このチュート リ アルのサンプル デザインで解像度 UHD@30 がサポート されるよ うに、 ディ スプレイ ポー

トのレーンをデュアル レーンに設定しています。 この設定によ り、 ディ スプレイが対応するモニターに対して UHD@30 と 1080p 60 などの低解像度にロッ ク されます。

6. [OK] をク リ ッ ク して [Re-customize IP] ダイアログ ボッ クス閉じます。

注意: [Run Block Automation] リ ンクをク リ ッ ク しないでください。 リ ンクをク リ ッ クする と、 デザインがボードのプ

リセッ トに リセッ ト され、 このセクシ ョ ンで実行したデザインのアップデートが無効になり ます。

7. [File] → [Save Block Design] をク リ ッ ク してブロ ッ ク デザインを保存します。 または、 Ctrl + S キーを押してブ

ロ ッ ク デザインを保存するこ と もできます。

8. [Generate Bitstream] をク リ ッ ク してデザインを再合成し、 ビッ ト ス ト リームを生成します。

9. ビッ ト ス ト リームが正常に生成されたら、 [File] → [Export] → [Export Hardware] をク リ ッ ク して、 ハードウェア デザインをエクスポート します。

10. [Include bistream] をオンにします。

11. [OK] をク リ ッ ク します。

Vivado で .xsa ハードウェア ファ イルが指定のフォルダーに生成されます。

12. XSA ファ イルを Linux ホス ト マシンにコピーします。

次のセクシ ョ ンでは、 ハード ウェア設定用に Linux をビルドする手順と、 GPU および X Window System 用の追加ソ

フ ト ウェア パッケージを含める手順を説明します。

PetaLinux を使用した設定の変更と Linux イメージのビルド

新たに変更されたハード ウェアに合わせて PetaLinux BSP を再設定します。 このセクシ ョ ンでは、 「サンプル プロ

ジェク ト : PetaLinux を使用した Linux イ メージの作成」 で作成された PetaLinux プロジェク ト を使用します。

1. 次のコマンドを使用して、 PetaLinux ディレク ト リに移動します。

$ cd xilinx-zcu102-2019.2

X-Ref Target - Figure 6-24

図 6-24: ディスプレイ ポートのレーンの選択

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 146UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 147: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

2. ハードウェア プラ ッ ト フォーム edt_zcu102_wrapper.xsa を Linux ホス ト マシンにコピーします。

3. 次のコマンドを実行して BSP を再設定します。

$ petalinux-config --get-hw-description=<path containing edt_zcu102_wrapper.xsa>/

[PetaLinux Configuration] ウ ィンド ウが開きます。

4. 追加の設定を実行せずにウ ィンド ウの内容を保存して閉じます。

PetaLinux がプロジェク ト を再設定するのを待ちます。

5. 既存のブート ローダー イ メージを消去します。 これは、 新しいハード ウェア デザインに合わせてブート ロー

ダーを再作成するためです。

$ petalinux-build -c bootloader -x distclean

Mali OpenGL ES アプリケーシ ョ ンのビルド

このセクシ ョ ンでは、 Triangle-based Cubic (三角錐) アプリ ケーシ ョ ンの構築について説明します。 このアプリ ケー

シ ョ ンは OpenGL ES で記述されており、 X Window System をベースにしています。 詳細およびアプリ ケーシ ョ ン ソース コードは、 このチュート リ アルに付属の ZIP ファ イルの design_files フォルダーにある tricube を参照

してください。 「このチュート リ アルのデザイン ファ イル」 を参照して ください。

次の手順に従って、 OpenGL ES アプリ ケーシ ョ ンを構築します。

1. tricube のアプリ ケーシ ョ ン ソース ディレク ト リ全体を PetaLinux プロジェク トの recipe-apps ディ レク ト リに

ある Linux ホス ト マシンにコピーします。

<PetaLinux-Project>/project-spec/meta-user/recipes-apps/tricube

2. 新し く作成した tricube を次の場所にある user-rootfsconfig に追加します。

<plnx_project>/project-spec/meta-user/conf/user-rootfsconfig

このアプ リ ケーシ ョ ンによ り、 ファ イルは次のよ うになり ます。 新しいアプリ ケーシ ョ ンは太字で示していま

す。

CONFIG_gpio-demoCONFIG_peekpokeCONFIG_tricube

3. このアプ リ ケーシ ョ ンをビルドする手順およびライブラ リの詳細は、 tricube/tricube.bb のレシピを参照

してください。 上記アプリ ケーシ ョ ンのビルド時に含まれる X Window System (X11) パッケージは、 アプリ ケー

シ ョ ンによって異なり ます。 tricube.bb レシピに含まれるライブラ リは、 アプリ ケーシ ョ ンで使用された

パッケージに基づきます。

GPU ライブラリ とその他のパッケージを RootFS で有効化

このセクシ ョ ンでは、 PetaLinux の rootfs Configuration ウ ィザードを使用して Mali GPU ラ イブラ リ を追加します。

PetaLinux には、 Mali GPU ライブラ リ と Mali GPU 用のデバイス ド ラ イバーが付属しています。 デフォルトでは、

Mali ド ラ イバーはカーネル ツ リーで有効になっていますが、 Mali ユーザー ライブラ リは (必要に応じて) rootfs で設

定する必要があ り ます。 さ らに、 同じウ ィザードを使用して X Window System ライブラ リ を含めます。

1. PetaLinux の rootfs Configuration ウ ィザードを開きます。

$ petalinux-config -c rootfs

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 147UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 148: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

2. 次のよ うにパッケージに移動して有効にします。

Filesystem Packages ---> libs ---> libmali-xlnx ---> libmali-xlnxFilesystem Packages ---> libs ---> libmali-xlnx ---> libmali-xlnx-dev

これらのパッケージを使用する と、 Zynq UltraScale+ MPSoC デバイスで Mali GPU をターゲッ トにした OpenGL ES アプリ ケーシ ョ ンをビルド して実行できます。

3. X11 パッケージ グループを追加して、 X ウ ィンド ウに関連するパッケージを追加します。

Petalinux Package Groups > packagegroup-petalinux-x11 >packagegroup-petalinux-x11Petalinux Package Groups > packagegroup-petalinux-x11 > packagegroup-petalinux-x11-dev

4. 前のセクシ ョ ンで作成した OpenGLES アプリ ケーシ ョ ンを追加します。

User Packages ---> [*]tricube

5. すべてのパッケージを有効にしたら、 設定ファイルを保存して rootfs Configuration ウ ィザードを終了します。

6. 次のコマンドを使用して、 Linux イ メージをビルド します。

$ petalinux-build

注記: PetaLinux をビルドできなかった場合は、 次のコマンドを使用しても う一度ビルド します。

$ petalinux-build -x mrproper $ petalinux-build

7. Linux イ メージ ファ イル images.ub が images/linux ディ レク ト リに生成されているこ とを確認します。

8. 次のよ うなサンプル デザインのブート イ メージを生成します。

$ petalinux-package --boot --fsbl images/linux/zynqmp_fsbl.elf --pmufw images/linux/pmufw.elf --atf images/linux/bl31.elf --fpga images/linux/system.bit --u-boot images/linux/u-boot.elf

BOOT.BIN ブート イ メージが作成されます。 これは、 FSBL ブート ローダー、 PL ビッ ト ス ト リーム、 PMU ファーム

ウェア、 ATF、 および U-Boot で構成されています。 または、 「ブート イ メージの作成」 の手順に従ってこのブート イ メージを作成します。

重要: この例では、 PetaLinux 2019.2 のデフォルト設定である X ウ ィンド ウ システムに基づく GPU パッケージを使用

します。 PetaLinux 2019.2 のフレーム バッファー fbdev ベースの GPU パッケージを有効にするには、

<PetaLinux_project>/project-spec/meta-user/conf/petalinuxbsp.conf に次の行を追加します。

DISTRO_FEATURES_remove_zynqmp = " x11"

「このチュート リ アルのデザイン ファ イル」 のサンプル eglfbdev アプリ ケーシ ョ ン (fdev ベース) を参照してくださ

い。 詳細は、 ザイ リ ンクス アンサー 68821 を参照してください。

Linux をロード してターゲッ トで OpenGL ES アプリケーシ ョ ンを実行し、 ディスプレイ ポートにその結果を表示

SD カードの準備

Linux イ メージをビルド し、 アプリ ケーシ ョ ンもビルド したので、 次のイ メージを SD カードにコピーして SD カー

ドを ZCU102 ボードに挿入します。

• BOOT.BIN

• image.ub

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 148UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 149: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

Linux ターゲッ トでのアプリケーシ ョ ンの実行

ターゲッ ト をセッ トアップする

次の手順に従って、 ターゲッ ト をセッ ト アップします。

1. SD カードを ZCU102 ボードの J100 コネクタに挿入します。

2. Micro USB ケーブルの一端を ZCU102 ボードの Micro USB ポート J83 に接続し、も う一端をホス ト マシンの空き

の USB ポートに接続します。

JTAG ケーブルが接続されていないこ とを確認します。 ケーブルが接続されている と、 システムがハングする可

能性があ り ます。

3. ディ スプレイ ポート モニターを ZCU102 ボードに接続します。DP モニターのディ スプレイ ポート ケーブルは、

ZCU102 ボードのディ スプレイ ポート コネクタに接続できます。

注記: これらのイ メージは、 UHD@30 Hz および FullHD@60 Hz ディ スプレイ ポートに対応するモニターでテス

ト されています。

4. スイ ッチ SW6 を次の図に示すよ うに設定し、 ボードを SD ブート モードに設定します。

5. 12V 電源を ZCU102 の 6 ピン Molex コネクタに接続します。

6. 使用しているホス ト マシンに応じて Tera Term または Minicom を使用し、 ターミナル セッシ ョ ンを開始します。

図 5-8 に示すよ うに、 システムの COM ポート とボー レート を設定します。

7. ポート設定では、 デバイス マネージャーで COM ポート を検証します。

ZCU102 ボードには、 4 つの USB UART インターフェイスがあ り ます。 も小さい番号のインターフェイスに関連付

けられた COM ポート を選択します。 こ こでは、 UART-0 に対して Interface-0 の COM ポート を選択します。

ターゲッ トへの電源投入とアプリケーシ ョ ンの実行

1. SW1 を使用して ZCU102 ボードに電源を投入し、 Linux がボードにロード されるまで待ちます。

2. Linux がロード されたら、 ログインおよびパスワードに root を使用してターゲッ ト Linux コンソールにログイ

ンします。

3. 表示パラ メーターを設定し、 Xorg を正しい深さで開始します。

# export DISPLAY=:0.0# /usr/bin/Xorg -depth 16&

X-Ref Target - Figure 6-25

図 6-25: SD ブート モードの SW6 スイッチ設定

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 149UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 150: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

第 6 章: システム デザイン例

4. tricube アプリ ケーシ ョ ンを実行します。

# tricube

こ こで、 回転するマルチカラーの立方体と回転する三角形がディ スプレイ ポートに表示されます。 立方体もマルチ

カラーの三角形で作成されているこ とがわかり ます。 X-Ref Target - Figure 6-26

図 6-26: 回転する立方体と三角形

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 150UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 151: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 151UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

付録 A

セキュア ブートでの問題のデバッグこ こでは、 セキュ リ ティ エラーのデバッグ方法を説明します。 まず、 デバイスで PUF 登録が実行されたかど うかを

確認します。 続いて、 ブート イ メージのブート ヘッダーの値をチェッ ク します。

PUF 登録が実行されているかどうかの確認

次の手順で、 PUF 登録ソフ ト ウェアがデバイスで実行されたかど うかを確認できます。

1. Vitis IDE で [Xilinx] → [XSCT Console] をク リ ッ ク します。

2. プロンプ トに次のコマンドを入力します。

xsct% connectxsct% targetsxsct% targets -set -filter {name =~ "Cortex-A53 #0"}xsct% rst -processorxsct% mrd -force 0xFFCC1050 (0xFFCC1054)

3. この場所には CHASH および AUX の値が含まれます。 値がゼロ以外の場合、 PUF 登録ソフ ト ウェアがデバイス

で実行されています。

ブート イメージの読み出し

Bootgen ユーティ リ ティ を使用して、 ブート イ メージで使用されるヘッダー値とパーティシ ョ ン データを確認でき

ます。

1. BOOT.bin を含むディレク ト リ を変更します。

2. XSCT プロンプ トで次のコマンドを実行します。

bootgen_utility –bin BOOT.bin –out myfile –arch zynqmp

3. myfile で 「BH」 を検索します。

Page 152: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

付録 B

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

ザイリンクス リソース

アンサー、 資料、 ダウンロード、 フォーラムなどのサポート リ ソースは、 ザイ リ ンクス サポート サイ ト を参照して

ください。

ソリューシ ョ ン センター

デバイス、 ツール、 IP のサポートについては、 ザイ リ ンクス ソ リ ューシ ョ ン センターを参照して ください。 デザイ

ン アシスタン ト 、 デザイン アドバイザリ、 ト ラブルシューティングのヒン ト などが含まれます。

Documentation Navigator およびデザイン ハブ

ザイ リ ンクス Documentation Navigator (DocNav) では、 ザイ リ ンクスの資料、 ビデオ、 サポート リ ソースにアクセス

でき、 特定の情報を取得するためにフ ィルター機能や検索機能を利用できます。 DocNav を開くには、 次のいずれか

を実行します。

• Vivado IDE で [Help] → [Documentation and Tutorials] をク リ ッ ク します。

• Windows で [スタート ] → [すべてのプログラム] → [Xilinx Design Tools] → [DocNav] → [DocNav] をク リ ッ ク し

ます。

• Linux コマンド プロンプ トに 「docnav」 と入力します。

ザイ リ ンクス デザイン ハブには、 資料やビデオへのリ ンクがデザイン タスクおよびト ピッ クごとにま とめられてお

り、 これらを参照するこ とでキー コンセプ ト を学び、 よ く ある質問 (FAQ) を参考に問題を解決できます。 デザイン ハブにアクセスするには、 次のいずれかを実行します。

• DocNav で [Design Hubs View] タブをク リ ッ ク します。

• ザイ リ ンクス ウェブサイ トのデザイン ハブ ページを参照します。

注記: DocNav の詳細は、 ザイ リ ンクス ウェブサイ トの Documentation Navigator ページを参照して ください。 DocNav からは、 日本語版は参照できません。 ウェブサイ トのデザイン ハブ ページをご利用ください。

DocNav に含まれるデザイン ハブを使用する と、 特定のデザイン タスクの資料、 ト レーニング、 情報をすばやく入

手できます。 このガイ ドで説明されるエンベデッ ド開発および手法には、 次のデザイン ハブが該当します。

• エンベデッ ドデザイン ハブ - PetaLinux ツール

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 152UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 153: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

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

• Vitis エンベデッ ド ソフ ト ウェア開発フローの資料

このチュート リアルのデザイン ファイル

この資料に関連する ZIP ファ イルには、 チュート リ アルのデザイン ファ イルが含まれます。 リ ファレンス デザイン ファ イルは、 ザイ リ ンクス ウェブサイ トからダウンロードできます。

ZIP ファ イルの内容を表示するには、 ZIP ファ イルをダウンロード して C:\edt に解凍します。 デザイン ファ イルに

は、 すべてのセクシ ョ ン用の HDF ファ イル、 ソース コード、 およびビルド済みイ メージが含まれています。

ザイリンクス リソース

この資料では、 次のザイ リ ンクス Vivado Design Suite および Zynq® UltraScale+™ のガイ ドが参照されています。

注記: 日本語版のバージ ョ ンは、 英語版よ り古い場合があ り ます。

1. 『Vivado Design Suite ユーザー ガイ ド : 入門』 (UG910)

2. 『Vivado Design Suite チュート リ アル: エンベデッ ド プロセッサ ハードウェア デザイン』 (UG940)

3. 『Vivado Design Suite ユーザー ガイ ド : リ リース ノート 、 インス トールおよびライセンス』 (UG973)

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

5. 『Zynq UltraScale+ MPSoC テクニカル リ ファレンス マニュアル』 (UG1085: 英語版、 日本語版)

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

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

8. 『Zynq UltraScale+ Processing System 製品ガイ ド』 (PG201: 英語版、 日本語版)

9. 『Zynq-7000 SoC のメジャー ブート 』 (XAPP1309: 英語版、 日本語版)

10. 『Zynq-7000 SoC のセキュア ブート 』 (XAPP1175: 英語版、 日本語版)

11. 『Zynq-7000 SoC における暗号化キーの変更』 (XAPP1223: 英語版、 日本語版)

12. 『BBRAM および eFUSE のプログラ ミ ング』 (XAPP1319: 英語版、 日本語版)

13. Vitis エンベデッ ド ソフ ト ウェア開発フローの資料

サポート リソース

14. ザイ リ ンクス Zynq UltraScale+ MPSoC ソ リ ューシ ョ ン センター

15. ソフ ト ウェア ゾーン: https://japan.xilinx.com/products/design-tools/software-zone/sdsoc.html#docsdownload

その他のリソース

16. 『The Effect and Technique of System Coherence in Arm Multicore Technology』、 著者: John Goodacre (Senior Program Manager、 Arm Processor Division) (http://www.mpsoc-forum.org/previous/2008/slides/8-6%20Goodacre.pdf)

17. ザイ リ ンクス GitHub ウェブサイ ト : https://github.com/xilinx

18. Linux カーネル モジュール プログラ ミ ング ガイ ド : http://tldp.org/LDP/lkmpg/2.6/html/index.html

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 153UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 154: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

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

ト レーニング リソース

ザイ リ ンクスでは、 この資料に含まれるコンセプ ト を説明するさまざまな ト レーニング コースおよび QuickTake ビデ

オを提供しています。 次のリ ンクから関連するビデオを参照して ください。

1. Vivado Design Suite QuickTake ビデオ チュート リ アル

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 154UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com

Page 155: Zynq UltraScale+ MPSoC - Xilinx...Zynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔

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

お読みください: 重要な法的通知本通知に基づいて貴殿または貴社 (本通知の被通知者が個人の場合には 「貴殿」、 法人その他の団体の場合には 「貴社」。 以下同じ ) に開示される情報 (以下 「本情報」 といいます) は、 ザイ リ ンクスの製品を選択および使用するこ とのためにのみ提供されます。 適

用される法律が許容する 大限の範囲で、 (1) 本情報は 「現状有姿」、 およびすべて受領者の責任で (with all faults) とい う状態で提供

され、 ザイ リ ンクスは、 本通知をもって、 明示、 黙示、 法定を問わず (商品性、 非侵害、 特定目的適合性の保証を含みますがこれ

らに限られません)、 すべての保証および条件を負わない (否認する ) ものと します。 また、 (2) ザイ リ ンクスは、 本情報 (貴殿または

貴社による本情報の使用を含む) に関係し、 起因し、 関連する、 いかなる種類 ・ 性質の損失または損害についても、 責任を負わな

い (契約上、 不法行為上 (過失の場合を含む)、 その他のいかなる責任の法理によるかを問わない) ものと し、 当該損失または損害に

は、 直接、 間接、 特別、 付随的、 結果的な損失または損害 (第三者が起こした行為の結果被った、 データ、 利益、 業務上の信用の

損失、 その他あらゆる種類の損失や損害を含みます) が含まれるものと し、 それは、 たとえ当該損害や損失が合理的に予見可能で

あったり、 ザイ リ ンクスがそれらの可能性について助言を受けていた場合であったと しても同様です。 ザイ リ ンクスは、 本情報に

含まれるいかなる誤り も訂正する義務を負わず、 本情報または製品仕様のアップデート を貴殿または貴社に知らせる義務も負いま

せん。 事前の書面による同意のない限り、 貴殿または貴社は本情報を再生産、 変更、 頒布、 または公に展示してはなり ません。 一

定の製品は、 ザイ リ ンクスの限定的保証の諸条件に従う こ と となるので、 https://japan.xilinx.com/legal.htm#tos で見られるザイ リ ンク

スの販売条件を参照してください。 IP コアは、 ザイ リ ンクスが貴殿または貴社に付与したライセンスに含まれる保証と補助的条件

に従う こ とにな り ます。 ザイ リ ンクスの製品は、 フェイルセーフと して、 または、 フェイルセーフの動作を要求するアプリ ケー

シ ョ ンに使用するために、 設計されたり意図されたり していません。 そのよ うな重大なアプリ ケーシ ョ ンにザイ リ ンクスの製品を

使用する場合のリ スク と責任は、 貴殿または貴社が単独で負う ものです。 https://japan.xilinx.com/legal.htm#tos で見られるザイ リ ンク

スの販売条件を参照してください。

自動車用のアプリ ケーシ ョ ンの免責条項

オートモーティブ製品 (製品番号に 「XA」 が含まれる ) は、 ISO 26262 自動車用機能安全規格に従った安全コンセプ ト または余剰性

の機能 ( 「セーフティ設計」 ) がない限り、 エアバッグの展開における使用または車両の制御に影響するアプリ ケーシ ョ ン ( 「セー

フティ アプリ ケーシ ョ ン」 ) における使用は保証されていません。 顧客は、 製品を組み込むすべてのシステムについて、 その使用

前または提供前に安全を目的と して十分なテス ト を行う ものと します。 セーフティ設計なしにセーフティ アプリ ケーシ ョ ンで製品

を使用する リ スクはすべて顧客が負い、 製品の責任の制限を規定する適用法令および規則にのみ従う ものと します。

© Copyright 2017-2019 Xilinx, Inc. Xilinx、 Xilinx のロゴ、 Artix、 ISE、 Kintex、 Spartan、 Virtex、 Vivado、 Zynq、 およびこの文書に含

まれるその他の指定されたブランドは、 米国およびその他各国のザイ リ ンクス社の商標です。 AMBA、 AMBA Designer、 Arm、

ARM1176JZ-S、 CoreSight、 Cortex、 PrimeCell、 Mali、 および MPCore は、 EU およびその他各国の Arm Limited の商標です。 すべての

その他の商標は、 それぞれの保有者に帰属します。

この資料に関するフ ィードバッ クおよびリ ンクなどの問題につきましては、 [email protected] まで、 または各ページの

右下にある [フ ィードバッ ク送信] ボタンをク リ ッ クする と表示されるフォームからお知らせください。 フ ィードバッ クは日本語で

入力可能です。 いただきましたご意見を参考に早急に対応させていただきます。 なお、 このメール アドレスへのお問い合わせは受

け付けており ません。 あらかじめご了承ください。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 155UG1209 (v2019.2) 2019 年 10 月 30 日 japan.xilinx.com