zynq ultrascale+ mpsoc · 2020. 9. 4. · zynq ultrascale+ mpsoc: エンベデッド デザイン...

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

Upload: others

Post on 24-Sep-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

UG1209 (v2018.1) 2018 年 6 月 5 日

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

Page 2: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

改訂履歴

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

セクシ ョ ン 改訂内容

2018 年 6 月 5 日 バージョ ン 2018.1

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

「セキュア ブート シーケンス」 よ り詳細な情報および手順でアップデート。

「隔離設定」 セクシ ョ ンをアップデート。

Page 3: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

目次

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

第 1 章: 概要このガイ ドについて . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

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

Vivado ツールでデザイン プロセスを加速. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

必要なセッ ト アップ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

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

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

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

その他の情報 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

第 3 章: PS サブシステム用ソフ トウェアのビルドZynq UltraScale+ のプロセッシング ユニッ ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

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

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

第 4 章: SDK を使用したデバッグXilinx System Debugger. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

SDK を使用したソフ ト ウェアのデバッグ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

ザイ リ ンクス ソフ ト ウェア コマンド ライン ツール (XSCT) を使用したデバッグ . . . . . . . . . . . . . . . . . . . . . . . . . . 55

第 5 章: ブートおよびコンフ ィギュレーシ ョ ンシステム ソフ ト ウェア . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

APU の Linux と RPU のベアメ タル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

SD ブートのブート シーケンス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

QSPI ブート モードのブート シーケンス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

JTAG を使用した QSPI ブート モードのブート シーケンス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

USB ブート モードのブート シーケンス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

セキュア ブート シーケンス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

第 6 章: システム デザイン例サンプル デザイン 1: GPIO、 タイマー、 および割り込みの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

サンプル デザイン 2: グラフ ィ ッ クおよびディ スプレイ ポート ベースのサブシステムのセッ ト アップ例 . . . . 150

付録 A: セキュア ブートでの問題のデバッグPUF 登録が実行されているかど うかの確認 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

ブート イ メージの読み出し . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 3UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 4: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

付録 B: その他のリソースおよび法的通知ザイ リ ンクス リ ソース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

ソ リ ューシ ョ ン センター . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

Xilinx Documentation Navigator およびデザイン ハブ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

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

ザイ リ ンクス リ ソース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

ト レーニング リ ソース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

お読みください: 重要な法的通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 4UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 5: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 1 章

概要

このガイドについて

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

す。 サンプル プロジェク トは、 ザイ リ ンクスの ZCU102 Rev1 評価ボードをターゲッ ト と しています。 使用したツー

ルのバージ ョ ンは、 2018.1 の Vivado およびザイ リ ンクス ソフ ト ウェア開発キッ ト (SDK) です。

注記: SDK を Vivado Design Suite の一部と してインス トールするには、インス トーラーに SDK を含めるよ う選択する

必要があ り ます。 8 ページの 「ザイ リ ンクス ソフ ト ウェア開発キッ ト (SDK)」 を参照して ください。

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

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

ほかの Windows インス トールで別バージ ョ ンのツールを実行した場合、 結果が異なるこ とがあ り ます。 サンプル プ

ロジェク トは、 エンベデッ ド デザインの次の項目について紹介するこ とに重点を置いています。

注記: チュート リ アルで説明されているハード ウェア上で Linux をブートする手順は、 2018.1 リ リースの PetaLinux

ツール特定のものです。 このガイ ドの Linux 部分の演習を実行するには、 PetaLinux ツールを Linux ホス ト マシンに

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

• 第 2 章 「Zynq UltraScale+ MPSoC プロセッシング システムのコンフ ィギュレーシ ョ ン」 では、 Zynq UltraScale+

MPSoC プロセッシング システム (PS) を使用するシステムの作成、 および Arm® Cortex®-A53 と Cortex-R5 プロ

セッサ上での簡単な Hello World アプリ ケーシ ョ ンの実行について説明します。 この章では、 簡単なデザインを

例と して使用し、 ハード ウェアおよびソフ ト ウェア ツールの概要を説明します。

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

リ アルタイム プロセッシング ユニッ ト (RPU)、 プラ ッ ト フォーム管理ユニッ ト (PMU) など、 プロセッシング

システム内のプロセッシング ブロ ッ クに応じてソフ ト ウェアを設定および構築する手順を説明します。

• 第 4 章 「SDK を使用したデバッグ」 では、 ザイ リ ンクスのソフ ト ウェア開発キッ ト (SDK) のデバッグ機能を使

用したソフ ト ウェアのデバッグについて説明します。 この章では、 前のデザインを使用してソフ ト ウェア ベア

メ タル (OS なし ) を実行し、 デバッグ方法を示します。 また、 Zynq UltraScale+ MPSoC のデバッグ コンフ ィギュ

レーシ ョ ンについても説明します。

• 第 5 章 「ブートおよびコンフ ィギュレーシ ョ ン」 では、 Zynq UltraScale+ システム用にブート イ メージを構成し

て作成するこ とを目的と したコンポーネン トの統合について説明します。 この章の主旨は、 ブート ローダーを

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

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

ステムをどのよ うに構築できるかを紹介します。

• 付録 B 「その他のリ ソースおよび法的通知」 では、 このガイ ドに関連するその他の資料へのリンクを提供します。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 5UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 6: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 1 章: 概要

サンプル プロジェク ト

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

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

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

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

説明されます。

その他の資料

その他の資料一覧は、 付録 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 インターフェイスを使用して厳密にまたは柔

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

このよ うな高度なデバイスのデザイン プロセスを単純にするため、 ザイ リ ンクスでは Vivado Design Suite、 ソフ ト

ウェア開発キッ ト (SDK)、 および Linux 用 PetaLinux ツールを提供しています。 これらのツールは、 FPGA を結合し

た SoC デバイス向けのエンベデッ ド システム デザインを容易にするために必要なものをすべて提供します。 これら

のツールを組み合わせるこ とで、 ハード ウェアと ソフ ト ウェアのアプリ ケーシ ョ ンの設計、 デバッグ、 コードの実

行が可能になり、 デザインを実際のボードに移行して検証および評価を実行できます。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 6UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 7: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 1 章: 概要

Vivado Design Suite

ザイ リ ンクスでは、 さまざまな開発システム ツールを Vivado Design Suite にまとめて提供しています。Vivado Design

Suite の複数のエディシ ョ ンをエンベデッ ドシステム開発に使用できます。 このガイ ドでは、 System Edition を使用し

ます。 次の図に Vivado Design Suite の各エディシ ョ ンの機能を示します。

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

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

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

• 資料

• サンプル プロジェク ト

X-Ref Target - Figure 1-1

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

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 7UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 8: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 1 章: 概要

ザイリンクス ソフ トウェア開発キッ ト (SDK)ソフ ト ウェア開発キッ ト (SDK) は Vivado を補完する統合開発環境で、C/C++ エンベデッ ド ソフ ト ウェア アプリ ケー

シ ョ ンの作成および検証に使用します。 SDK は Eclipse オープンソース フレームワークで構築されており、 ソフ ト

ウェア設計者や設計チームにとって使い慣れた環境です。

Vivado Design Suite をインス トールする際に、 インス トールに含める必要のあるオプシ ョ ンのソフ ト ウェア ツールと

して SDK を選択できます。 詳細は、 10 ページの 「インス トール要件」 を参照してください。

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

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

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

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

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

PetaLinux ツール

PetaLinux ツール セッ トは、 エンベデッ ド Linux システム開発キッ トです。 このツールによ り多面的な Linux ツール

フローが提供され、 Zynq UltraScale+ を含むザイ リ ンクス Zynq デバイス向けの Linux OS 環境を完全にコンフ ィギュ

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

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

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

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

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 8UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 9: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 1 章: 概要

Vivado ツールでデザイン プロセスを加速

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

ク トに IP を追加したり、 ク ロ ッ クやリセッ ト などのポートの接続を作成したりするプロセスを簡単に実行できる IP

インテグレーターが含まれます。

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

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

どが含まれます。

SDK はソフ ト ウェア開発に使用され、 Vivado Design Suite の一部と して利用できます。 または、 ほかのザイ リ ンクス

ツールをインス トールせずに、 SDK のみをインス トールして使用するこ と も可能です。 SDK は、 ソフ ト ウェア アプ

リ ケーシ ョ ンのデバッグにも使用できます。

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

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

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

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

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

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

Zynq UltraScale+ プロセッシング システムの詳細は、『Zynq UltraScale+ プロセッシング システム製品ガイ ド』 (PG201)

[参照 9] を参照して ください。

必要なセッ トアップ

ツールについて詳し く説明する前に、 ツールが適切にインス トールされ、 使用する環境がこのガイ ドのサンプル プ

ロジェク ト セクシ ョ ンに記載されている要件に一致するかを確認します。

ハードウェア要件

このガイ ドでは、 Zynq UltraScale+ ZCU102 評価ボードをターゲッ ト と しています。 このチュート リ アルのサンプル

プロジェク トは ZCU102 Rev 1 ボードを使用してテス ト されています。 このガイ ドを活用するにあたって、 評価ボー

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

• ZCU102 Rev1 評価ボード

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

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

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

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

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

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

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

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 9UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 10: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 1 章: 概要

インストール要件

Vivado Design Suite および SDK

2018.1 Vivado HL System Edition ツールがインス トール済みであるこ とを確認してください。 ツール バージ ョ ンが

新であるかど うかは、 https://japan.xilinx.com/support/download.html にアクセスして確認できます。

Vivado Design Suite および SDK ツールの両方がインス トールされているこ とを確認してください。 Vivado Design

Suite をインス トールする際に、 次の図に示すよ うに [Software Development Kit (SDK)] をオンにするこ とで、 インス

トールに含める必要のあるオプシ ョ ンのソフ ト ウェア ツールと して SDK を選択できます。 SDK を単独でインス

トールするには、 [Software Development Kit (SDK)] のみをオンにし、 ほかのソフ ト ウェア製品の選択をオフにしてイ

ンス トーラーを実行します。

Vivado Design Suite と SDK のインス トールの詳細は、 『Vivado Design Suite ユーザー ガイ ド : リ リース ノート、 インス

トールおよびライセンス』 (UG973) [参照 3] を参照してください。

重要: デフォルトでは、 インス トールによ り SDK 用のデスク ト ップ シ ョート カッ トは作成されません。 SDK バイナ

リは、 C:\Xilinx\SDK\2018.1\bin\xsdk.bat から起動可能です。

X-Ref Target - Figure 1-2

図 1-2: Vivado インストーラー - [Software Development Kit (SDK)] の選択

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

Page 11: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 1 章: 概要

PetaLinux ツール

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

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

• RHEL 7.2/7.3 (64 ビッ ト )

• CentOS 7.2/7.3 (64 ビッ ト )

• Ubuntu 16.04.1/2 (64 ビッ ト )

注記: 詳細は、 ザイ リ ンクス アンサー 70395 を参照してください。

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

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

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

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

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

ロードする。

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

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

必要な環境

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

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

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

PetaLinux パッケージの展開

デフォルトでは、 パッケージが現在のディ レク ト リのサブディ レク ト リ と してインス トールされます。 インス トー

ル パスを指定するこ と もできます。 ダウンロード した PetaLinux インス トーラーを実行します。

注記: PetaLinux のインス トール パスは短く して ください。 パスが 255 文字を超える と、 PetaLinux のビルドがエラー

になり ます。

bash> ./petalinux-v2018.1-final-installer.run

PetaLinux は、 このコマンドの作業ディ レク ト リの直下にある petalinux-v2018.1-final ディレク ト リにインス

トールされます。 インス トーラーをホーム ディレク ト リ (/home/user) に置いた場合、 PetaLinux は

/home/user/petalinux-v2018.1-final にインス トールされます。

PetaLinux 環境のセッ ト アップ、 プロジェク トの作成、 およびプロジェク トの使用例の詳細は、 第 3 章 「PS サブシス

テム用ソフ ト ウェアのビルド」 を参照してください。 PetaLinux のインス トールおよび使用方法に関する詳細は、

『PetaLinux ツール資料: リ ファレンス ガイ ド』 (UG1144) [参照 7] に記載されています。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 11UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 12: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 1 章: 概要

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

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

イセンスの検証プロセスが実行されます。 ライセンス検証で有効なライセンスが検出されない場合、 ライセンス

ウ ィザードに従ってライセンスを取得し、 インス トールしたツールでそのライセンスを使用できるよ うにします。

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

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

てください。

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

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

ン ファ イル」 を参照してください。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 12UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 13: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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+: エンベデッ ド デザイン チュート リアル 13UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 14: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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 デザイン ツールで

開きます。

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

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

Project Name Project name edt_zcu102

Project location C:/edt

Create project subdirectory オン

Project Type デザインのソース タイプを指定。 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+: エンベデッ ド デザイン チュート リアル 14UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 15: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

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

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

[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] ウ ィンド ウに表

示されます。

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

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 15UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 16: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

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

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

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

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

2. [Cancel] をク リ ッ クする と、 デザインが変更されずにウ ィザードが閉じます。

X-Ref Target - Figure 2-2

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

X-Ref Target - Figure 2-3

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

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 16UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 17: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

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

の手順が実行されます。

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

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

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

します。

このコンフ ィギュレーシ ョ ン ウ ィザードによ り、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-4

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

X-Ref Target - Figure 2-5

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

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 17UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 18: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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+: エンベデッ ド デザイン チュート リアル 18UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 19: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

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

隔離設定

Zynq UltraScale+ のザイ リ ンクス メモ リ保護ユニッ ト (XMPU) およびザイ リ ンクス ペリ フェラル保護ユニッ ト

(XPPU) は、 メモ リおよびペリ フェラルのハード ウェア保護を提供します。 これらの保護ユニッ トは、 TrustZone (TZ)

および Zynq UltraScale+ MPSoC SMMU で提供される隔離を補足します。 これらの保護ユニッ トは、 Zynq UltraScale+

MPSoC PS IP ウ ィザードの [Isolation Configuration] ページで設定します。 隔離設定は初期化ファイルと してエクス

ポート され、 ブート ローダー (この場合は FSBL (第 1 段階ブート ローダー )) の一部と して読み込まれます。 詳細は、

『Zynq UltraScale+ MPSoC テクニカル リ ファレンス マニュアル』 (UG1085) [参照 5] を参照してください。

次の手順に従って、 隔離に基づく単純なシステムを作成します。 [Switch to the Advanced Mode] をオンにして、

[Isolation Configuration] ページを表示してください。

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

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

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

X-Ref Target - Figure 2-7

図 2-7: [PS-PL Configuration]

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 19UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 20: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

3. [Isolation Configuration] をク リ ッ ク し、 [Enable Isolation] をオンにします。

4. [Enable Secure Debug] をオンにして、 DAP マスターがシステム内のすべてのスレーブにアクセスできるよ うにし

ます。 これは、 開発段階で簡単なデバッグを実行するためにのみオンにし、 プロダクシ ョ ン リ リースではオフ

にできます。

PMU サブシステムがデフォルトで有効になっています。 これはカスタム システム コンフ ィギュレーシ ョ ンに一致す

るよ う変更できますが、 PMU ファームウェア サブシステムは必要な場合以外は変更しないこ とをお勧めします。

PMU は、 pmu_subsystem の XMPU/XPPU マスターと して設定されています。 このチュート リ アルでは、 APU サブシ

ステムと RPU サブシステムの間の隔離に焦点を置きます。

RPU サブシステムの作成

次の手順に従って、 新しい RPU システムを作成します。

1. [+] ボタンをク リ ッ ク し、 [Add New Subsystem] をク リ ッ ク します。

2. 表示されたダイアログ ボッ クスに 「RPU」 と入力し、 Enter キーを押します。

3. [+] ボタンをク リ ッ ク し、 [Add New Subsystem] をク リ ッ ク します。

4. 表示されたダイアログ ボッ クスに 「APU」 と入力し、 Enter キーを押します。

X-Ref Target - Figure 2-8

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

X-Ref Target - Figure 2-9

図 2-9: 新しいサブシステムの追加

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 20UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 21: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

5. [RPU] を右ク リ ッ ク して [Add Master] をク リ ッ ク し、 [Processors] → [RPU0] をダブルク リ ッ ク します。

デフォルトでは、 RPU0 マスターには Secure Trustzone が設定されています。

6. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [Memory] → [R5_TCM_RAM_GLOBAL] をダブルク リ ッ ク

します。

7. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [Memory] → [DDR_LOW] をダブルク リ ッ ク します。 DDR

のサイズ ([Size] 列) を 1 MB に変更します。 開始アドレス ([Start Address] 列) を 0x100000 に設定します。

8. [Memory] を右ク リ ッ ク して [Add] → [DDR_LOW] をク リ ッ ク します。DDR のサイズ ([Size] 列) を 1 MB に変更し

ます。 開始アドレス ([Start Address] 列) を 0x6FF00000 に設定します。

9. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [Peripherals] → [UART1] をダブルク リ ッ ク します。

10. [Peripherals] を右ク リ ッ ク して [Add] をク リ ッ ク し、 [GPIO] をダブルク リ ッ ク します。

11. [Peripherals] を右ク リ ッ ク して [Add] をク リ ッ ク し、 [SWDT0] をダブルク リ ッ ク します。

12. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [Control and Status Registers] → [CRF_APB] をダブルク リ ッ

ク します。

13. [Control and Status Registers] を右ク リ ッ ク して [Add] をク リ ッ ク し、 [RPU] をダブルク リ ッ ク します。

14. [Control and Status Registers] を右ク リ ッ ク して [Add] をク リ ッ ク し、 [EFUSE] をダブルク リ ッ ク します。

15. [Control and Status Registers] を右ク リ ッ ク して [Add] をク リ ッ ク し、 [IOU_SLCR] をダブルク リ ッ ク します。

16. [Control and Status Registers] を右ク リ ッ ク して [Add] をク リ ッ ク し、 [CRL_APB] をダブルク リ ッ ク します。

APU サブシステムの作成

次の手順に従って、 新しい APU システムを作成します。

1. [APU] を右ク リ ッ ク して [Add Master] をク リ ッ ク し、 [Processors] → [APU] をダブルク リ ッ ク します。

2. [APU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [Memory] → [DDR_LOW] をダブルク リ ッ ク します。 DDR

のサイズ ([Size] 列) を 1750 MB に変更します。

3. 開始アドレス ([Start Address] 列) を 0x0 に設定します。

4. [Memory] を右ク リ ッ ク して [Add] をク リ ッ ク し、 [DDR_LOW] をダブルク リ ッ ク します。 DDR のサイズ ([Size]

列) を 1 MB に変更します。

5. 開始アドレス ([Start Address] 列) を 0x6FF00000 に設定します。

注記: DDR 空間のこの 1 MB は、 APU および RPU の両方からアクセスされます。

6. [APU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [Peripherals] → [GPIO] をダブルク リ ッ ク します。

7. [Peripherals] を右ク リ ッ ク して [Add] をク リ ッ ク し、 [SWDT1] をダブルク リ ッ ク します。

8. [APU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [Control and Status Registers] → [CRF_APB] をダブルク リ ッ

ク します。

9. [Control and Status Registers] を右ク リ ッ ク して [Add] をク リ ッ ク し、 [RPU] をダブルク リ ッ ク します。

10. [Control and Status Registers] を右ク リ ッ ク して [Add] をク リ ッ ク し、 [EFUSE] をダブルク リ ッ ク します。

11. [Control and Status Registers] を右ク リ ッ ク して [Add] をク リ ッ ク し、 [IOU_SLCR] をダブルク リ ッ ク します

12. [Control and Status Registers] を右ク リ ッ ク して [Add] をク リ ッ ク し、 [CRL_APB] をダブルク リ ッ ク します。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 21UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 22: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

SD_DMA サブシステムの作成

次の手順に従って、 新しい SD_DMA システムを作成します。

1. [+] ボタンをク リ ッ ク し、 [Add New Subsystem] をク リ ッ ク します。

2. 表示されたダイアログ ボッ クスに 「SD_DMA」 と入力し、 Enter キーを押します。

3. [SD_DMA] を右ク リ ッ ク して [Add Master] をク リ ッ ク し、 [Processors] → [APU] をダブルク リ ッ ク します。

4. [SD_DMA] を右ク リ ッ ク して [Add Master] をク リ ッ ク し、 [Processors] → [SD1] をダブルク リ ッ ク します。

5. [SD_DMA] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [Memory] → [DDR_LOW] をダブルク リ ッ ク します。

DDR のサイズ ([Size] 列) を 1750 MB に変更します。

6. 開始アドレス ([Start Address] 列) を 0x0 に設定します。

7. [Memory] を右ク リ ッ ク して [Add] をク リ ッ ク し、 [DDR_LOW] をダブルク リ ッ ク します。 DDR のサイズ ([Size]

列) を 1 MB に変更します。

8. 開始アドレス ([Start Address] 列) を 0x6FF00000 に設定します。

USB サブシステムの作成

次の手順に従って、 新しい USB システムを作成します。

1. [+] ボタンをク リ ッ ク し、 [Add New Subsystem] をク リ ッ ク します。

2. 表示されたダイアログ ボッ クスに 「USB」 と入力し、 Enter キーを押します。

3. [USB] を右ク リ ッ ク して [Add Master] をク リ ッ ク し、 [Processors] → [APU] をダブルク リ ッ ク します。

4. [USB] を右ク リ ッ ク して [Add Master] をク リ ッ ク し、 [Processors] → [USB0] をダブルク リ ッ ク します。

5. [USB] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [Memory] → [DDR_LOW] をダブルク リ ッ ク します。 DDR

のサイズ ([Size] 列) を 1750 MB に変更します。

6. 開始アドレス ([Start Address] 列) を 0x0 に設定します。

7. [Memory] を右ク リ ッ ク して [Add] をク リ ッ ク し、 [DDR_LOW] をダブルク リ ッ ク します。 DDR のサイズ ([Size]

列) を 1 MB に変更します。

8. 開始アドレス ([Start Address] 列) を 0x6FF00000 に設定します。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 22UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 23: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

X-Ref Target - Figure 2-10

図 2-10: APU の隔離設定レジスタ

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 23UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 24: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

X-Ref Target - Figure 2-11

図 2-11: RPU の隔離設定レジスタ

X-Ref Target - Figure 2-12

図 2-12: SD_DMA および USB の隔離設定レジスタ

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 24UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 25: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

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

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

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] をク リ ッ ク します。

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

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

ク リ ッ ク します。

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

X-Ref Target - Figure 2-13

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

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 25UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 26: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

注記: 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] をク リ ッ ク します。

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

力ファイルが表示されます。X-Ref Target - Figure 2-14

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

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 26UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 27: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

この例では、 Vivado から SDK を起動します。

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

[Export Hardware] ダイアログ ボッ クスが開きます。 [Export to] フ ィールドはデフォルト オプシ ョ ンの [<Local to

Project>] のままにします。

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

ヒン ト : ハードウェアは ZIP ファ イル (<project wrapper>.hdf) でエクスポート されます。 SDK が起動する と

ファ イルは自動的に解凍され、 SDK プロジェク ト ハードウェア プラ ッ ト フォーム フォルダーにすべてのファイル

が含まれます。

3. [File] → [Launch SDK] をク リ ッ ク します。

[Launch SDK] ダイアログ ボッ クスが開きます。

ヒン ト : SDK はスタンドアロン モードで起動するこ と もでき、 エクスポート されたハードウェアを使用できます。

その場合、 SDK を起動し、 エクスポート された新しいターゲッ ト ハードウェアを新しいプロジェク トの作成時にポ

イン ト します。

4. [Exported location] および [Workspace] には、 デフォルト設定を選択します。

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

SDK が開きます。 SDK を起動する とハード ウェア記述ファイルが自動的に読み込まれます。

X-Ref Target - Figure 2-15

図 2-15: ハードウェアを SDK へエクスポートする

X-Ref Target - Figure 2-16

図 2-16: [Launch SDK] ダイアログ ボックス

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 27UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 28: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

次の図に示すよ うに、 [system.hdf] にプロセッシング システム全体のアドレス マップが表示されます。

ここまでの結果 Vivado によって、 ソフ ト ウェアを開発するための選択したワークスペースにハード ウェア仕様がエクスポート され

ました。 [<Local to Project>] を選択していれば、 Vivado プロジェク ト フォルダーに新しいワークスペースが作成され

ます。 ワークスペース名は <project_name>.sdk です。 この例では、 C:\edt\edt_zcu102\edt_zcu102.sdk

という名前のワークスペースが作成されます。

Vivado デザイン ツールによ り、 デザインのハード ウェア プラ ッ ト フォーム仕様 (この例では system.hdf) が SDK

にエクスポート されました。 system.hdf のほかに、 次のファイルが SDK にエクスポート されます。

• psu_init.c

• psu_init.h

• psu_init.tcl

• psu_init_gpl.c

• psu_init_gpl.h

• psu_init.html

system.hdf ファ イルは、 デフォルトでは SDK の起動時に開かれます。 このファイルから読み出されるシステムの

アドレス マップがデフォルトで SDK ウ ィンド ウに表示されます。

psu_init.c、 psu_init.h、 psu_init_gpl.c、 および psu_init_gpl.h の各ファイルには、 Zynq UltraScale+

MPSoC プロセッシング システムの初期化コード と、 DDR、 ク ロ ッ ク、 位相ロ ッ ク ループ (PLL)、 および I/O の初期

化設定が含まれます。 SDK は、 アプリ ケーシ ョ ンがプロセッシング システムの 上位で実行可能となるよ うに、 こ

れらの設定をプロセッシング システムの初期化時に使用します。 プロセッシング システムの設定には、 ZCU102 評

価ボード用に固定されているものもあ り ます。

X-Ref Target - Figure 2-17

図 2-17: SDK の [system.hdf] のアドレス マップ

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 28UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 29: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

次の手順

これで、 SDK を使用してプロジェク トのソフ ト ウェア開発を開始できます。 次のセクシ ョ ンでは、 ハード ウェア プ

ラ ッ ト フォーム向けのソフ ト ウェア アプリ ケーシ ョ ンの作成に役立つ情報を提供します。

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

この例では、 ザイ リ ンクス SDK の Xilinx System Debugger を使用して、 ボード設定の管理、 ケーブル接続、 PC を介

したボードへの接続、 および JTAG モードで Arm Cortex-A53 から簡単な hello world ソフ ト ウェア アプリ ケーシ ョ ン

を実行する方法を説明します。

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

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

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

からシ リアルへの転送に使用されます。

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

X-Ref Target - Figure 2-18

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

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 29UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 30: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

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

5. SDK を開き、 プロジェク ト ファ イルへのワークスペース パス (この例では

C:\edt\edt_zcu102\edt_zcu102.sdk) を設定します。

または、 デフォルトのワークスペースを使用して SDK を開き、 後で [File] → [Switch Workspace] をク リ ッ ク して

正しいワークスペースに切り替えるこ と もできます。

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

ターミナル ユーティ リ ティが提供されており、 これをチュート リ アルを通して使用します。 [Window] → [Show

View] → [Other] → [Terminal] をク リ ッ ク してこのユーティ リ ティ を開きます。

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

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

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

X-Ref Target - Figure 2-19

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

X-Ref Target - Figure 2-20

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

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 30UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 31: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

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

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

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

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

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

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

X-Ref Target - Figure 2-21

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

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

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

Application Project Project name test_a53

Use default location オン

OS Platform standalone

Hardware Platform edt_zcu102_wrapper_hw_platform_0

Processor psu_cortexa53_0

Language C

Compiler 64-bit

Hypervisor Guest No

Board Support Package [Create New] をオンにして 「test_a53_bsp」 と入力。

Templates Available Templates Hello World

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 31UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 32: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

test_a53 アプリ ケーシ ョ ン プロジェク トおよび test_a53_bsp ボード サポート パッケージ (BSP) プロジェ

ク トが作成され、 [Project Explorer] ビューに表示されます。 これら両プロジェク トが自動的にコンパイルされ、

ELF ファ イルが作成されます。

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

14. [Xilinx C/C++ application (System Debugger)] を右ク リ ッ ク して [New] をク リ ッ ク します。

test_a53 Debug という名前の新しい実行コンフ ィギュレーシ ョ ンが作成されます。

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

力されます。

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

初期化 Tcl ファ イルへのコンフ ィギュレーシ ョ ン パスがあるこ とに注目して ください。 こ こでは

psu_init.tcl へのパスです。 このファイルは、 デザインを SDK にエクスポート した際にエクスポート され

たもので、 プロセッシング システムの初期化情報を含みます。

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

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

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

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

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

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

スク リプ トで実行されます。

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

ここまでの結果

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

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

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

X-Ref Target - Figure 2-22

図 2-22: シリアル ターミナルへの出力

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 32UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 33: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

その他の情報

ボード サポート パッケージ

ボード サポート パッケージ (BSP) はハードウェア プラ ッ ト フォームまたはボードのサポート コードで、電源投入時

の基本的な初期化およびソフ ト ウェア アプリ ケーシ ョ ンのハード ウェア プラ ッ ト フォームまたはボード上での実行

をサポート します。 これは、 ブート ローダーおよびデバイス ド ラ イバーを使用するオペレーティング システム固有

のものにできます。

ヒン ト : BSP を再生成する場合は、 [Project Explorer] ビューに表示される BSP プロジェク ト を右ク リ ッ ク し、

[Re-generate BSP Sources] をク リ ッ ク します。

プロジェク トの作成後にターゲッ ト BSP を変更する場合は、 次を実行します。

1. ターゲッ ト用に新規のボード サポート パッケージを作成します。

2. [Project Explorer] ビューで、アプリ ケーシ ョ ン プロジェク ト を右ク リ ッ ク して [Change Referenced BSP] をク リ ッ ク

し、 新しい BSP を指定します。

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

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

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

T

重要: この章で実行したアプリ ケーシ ョ ンは、 スタンドアロン OS 上に作成されています。 ソフ ト ウェア アプリ ケー

シ ョ ンがターゲッ トにする BSP は、 新規アプリ ケーシ ョ ン プロジェク ト を作成するプロセスで選択します。 プロ

ジェク トの作成後にターゲッ ト BSP を変更する場合は、 ソフ ト ウェア アプリ ケーシ ョ ンを右ク リ ッ ク して [Change

Referenced BSP] をク リ ッ ク します。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 33UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 34: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 3 章

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

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

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

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

び PL ビッ ト ス ト リームが含まれます。 この章では、 ハード ウェア プラ ッ ト フォームをザイ リ ンクス SDK および

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) に適用可能なシステム ファームウェアを使用して実行できます。

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

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

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

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

3. ザイ リ ンクス SDK を使用してプラ ッ ト フォーム管理ユニッ ト (PMU) 用にプラ ッ ト フォーム管理ユニッ ト

ファームウェアを作成します。

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

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

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 34UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 35: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

このサンプル プロジェク トでは、 ザイ リ ンクス SDK を起動し、 Vivado Design Suite で作成した Zynq UltraScale+ 用

ハードウェア プラ ッ ト フォームを使用してベアメ タル アプリ ケーシ ョ ンを作成します。 36 ページの図 3-1 に示す

SDK の New Project ウ ィザードでは、Zynq UltraScale+ デバイスのプロセッシング サブシステム用にベアメ タル (スタ

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

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

第 1 段階ブート ローダー (FSBL) の作成から開始します。 Zynq UltraScale+ は APU または RPU 上で実行する FSBL を

サポート します。 これによ り、 必要な Arm プロセッサに FSBL をロードでき、 その FSBL で必要なアプリ ケーシ ョ

ンまたは第 2 段階ブート ローダーを必要なコアにロードできます。

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

1. SDK が起動していない場合は起動します。

2. 第 2 章で作成したプロジェク トに基づいてワークスペース パスを設定します。 たとえば、

C:\edt\edt_zcu102\edt_zcu102.sdk です。

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

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

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 35UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 36: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

X-Ref Target - Figure 3-1

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

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

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

Application Project Project name fsbl_a53

Use default location オン

OS Platform standalone

Hardware Platform edt_zcu102_wrapper_hw_platform_0

Processor psu_cortexa53_0

Language C

Compiler 64-bit

Hypervisor Guest No

Board Support Package [Create New] をオンにして 「a53_bsp」 と入力。

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

Templates Available Templates Zynq MP FSBL

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 36UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 37: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

.

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

ボード サポート パッケージおよび FSBL アプリ ケーシ ョ ンが作成されます。

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

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

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

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

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

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

3. [Settings] → [Tool Settings] → [Symbols] をク リ ッ ク します。

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

X-Ref Target - Figure 3-2

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

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 37UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 38: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

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

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

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

注記: [Project] → [Build Automatically] をク リ ッ クする と、 アプ リ ケーシ ョ ンが自動的にビルド されます。

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

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

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

9. ファ イルを保存し、 fsbl_a53 アプリ ケーシ ョ ンを再ビルド します。

注記: システム デザインで必要な場合は、 FSBL を RPU 上で実行するよ うにするこ とができ、 これによ り ソフ ト ウェ

ア スタ ッ クの残り を RPU および APU に読み込むこ とができます。

X-Ref Target - Figure 3-3

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

X-Ref Target - Figure 3-4

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

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 38UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 39: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

Arm Cortex-R5 ベースの RPU 用 FSBL の作成

次の手順に従って Arm Cortex-R5 コア用に FSBL を作成するこ と もできます。

1. [File] → [New] → [Application Project] をク リ ッ ク して、 New Project ウ ィザードを開きます。X-Ref Target - Figure 3-5

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

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 39UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 40: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

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

これによ り、 ボード サポート パッケージ、 および Zynq UltraScale+ RPU Arm Cortex-R5 コア 0 をターゲッ トにした

FSBL アプリ ケーシ ョ ンが作成されます。

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

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

この例では、 第 2 章の 「サンプル プロジェク ト : Arm Cortex-A53 から Hello World アプリ ケーシ ョ ンを実行」 で作成

した test_a53 アプリ ケーシ ョ ンを使用します。

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

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

SDK では、 Zynq UltraScale+ デバイスでのアプリ ケーシ ョ ン実行を簡単に開始できるよ うにため、 ほかにもベアメ タ

ル アプリ ケーシ ョ ン テンプレートがいくつか提供されています。 また、 [Available Templates] から [Empty

Application] を選択し、 アプリ ケーシ ョ ン フォルダー構造にカスタム アプリ ケーシ ョ ン コードをコピーまたは作成

するこ と もできます。

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

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

Application Project Project name fsbl_r5

Use default location オン

OS Platform standalone

Hardware Platform edt_zcu102_wrapper_hw_platform_0

Processor psu_cortexr5_0

Language C

Board Support Package [Create New] をオンにして 「r5_bsp」 と入力。

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

Templates Available Templates Zynq MP FSBL

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 40UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 41: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

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

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] フォルダーに生成されているこ とを確認します。

X-Ref Target - Figure 3-6

図 3-6: アプリケーシ ョ ン ソース コードの抜粋: print コマンド

X-Ref Target - Figure 3-7

図 3-7: [CDT Build Console]

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 41UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 42: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

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

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

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

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

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

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

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

注記: r5_bsp のボード サポート パッケージは、「Arm Cortex-R5 ベースの RPU 用 FSBL の作成」 の手順を実行し

た際に作成されています。

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

New Project ウ ィザードが閉じ、 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 章

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

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

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

Application Project Project name testapp_r5

Use default location オン

OS Platform standalone

Hardware Platform edt_zcu102_wrapper_hw_platform

Processor psu_cortexr5_0

Language C

Board Support Package [Use existing] をオンにして 「r5_bsp」 と入力。

Templates Available Templates Empty Application

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 42UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 43: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

注記: このセクシ ョ ンはオプシ ョ ンで、 アプリ ケーシ ョ ン用に異なる メモ リ属性を設定するためにリ ンカー スク リプ

ト を変更する方法を説明します。 これらの設定は第 2 章で作成した隔離によ り既に処理されているので、 この

チュート リ アルではこの手順はオプシ ョ ンです。 リ ンカー スク リプ トはソフ ト ウェア境界を作成するのに使用し、

隔離設定は XMPU に基づいて保護領域を不正アクセスから保護します。

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

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

3. リ ンカー スク リプ トの [Available Memory Regions] で、 psu_r5_ddr_0_MEM_0 (または psu_r5_ddr_0_MEM_1) の属

性を次のよ うに変更します。

° [Base Address]: 0x70000000

° [Size]: 0x10000000

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

よって異なる場合があ り ます。

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

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

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

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

6. アプリ ケーシ ョ ンがコンパイルされ、 リ ンクが正常に確立され、 testapp_r5.elf ファ イルが [testapp_r5]

→ [Debug] フォルダーに生成されているこ とを確認します。

X-Ref Target - Figure 3-8

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

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 43UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 44: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

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

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

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

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

1. [r5_bsp] を右ク リ ッ ク し、 [Board Support Package Settings] をク リ ッ ク します。

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

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

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

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

6. アプリ ケーシ ョ ンがコンパイルされ、 リ ンクが正常に確立され、 testapp_r5.elf が [testapp_r5] →

[Debug] フォルダーに生成されているこ とを確認します。

プラッ ト フォーム管理ユニッ ト用 PMU ファームウェアの作成

この例では、 ザイ リ ンクス SDK を使用して PMU ファームウェアを作成します。 PMU ファームウェアは、 Zynq

UltraScale+ MPSoC のブート アップおよび全体的なプラ ッ ト フォーム管理において重要な役割を果たします。 詳細

は、 第 5 章の 「プラ ッ ト フォーム管理ユニッ ト ファームウェア」 を参照して ください。

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

2. [Application Project] ページで、 [Project name] に 「pmu_fw」 と入力します。

3. [Use default location] はオンのままにします。

4. [OS Platform] で [standalone] を選択します。

5. [Target Hardware] で、 次を確認および設定します。

a. 第 2 章で Vivado からエクスポート されたハード ウェア プラ ッ ト フォームと して、 [Hardware Platform] に

[edt_zcu102_wrapper_hw_platform_0 ] が選択されているこ とを確認します。

b. [Processor] で [psu_pmu_0] を選択します。

X-Ref Target - Figure 3-9

図 3-9: RPU BSP の [Board Support Package Settings] ダイアログ ボックス

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 44UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 45: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

6. [Target Software] で、 次を設定します。

a. [Language] で [C] をオンにします。

b. [Board Support Package] の [Create New] をオンにして 「pmu_bsp」 と入力します。

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

8. [Available Templates] で [ZynqMP PMU Firmware] を選択します。

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

10. ファームウェアがコンパイルされ、 リ ンクが正常に確立され、 実行ファイルが [pmu_fw] → [Debug] →

[pmu_fw.elf] に生成されているこ とを確認します。

X-Ref Target - Figure 3-10

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

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 45UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 46: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

前のサンプル プロジェク トでは、 ザイ リ ンクス SDK を使用して、 APU、 RPU、 および PMU 用にブート ローダー イ

メージとベアメ タル アプリ ケーシ ョ ンを作成しました。 この章では、 Zynq UltraScale+ の Arm Cortex-A53 コア ベー

ス APU 用の Linux オペレーティング システム プラ ッ ト フォームを設定およびビルド します。 Linux イ メージの設定

とビルドには、 PetaLinux のツールフローとボード特定の BSP を使用できます。

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

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

重要: この例では、 ZCU102 PetaLinux BSP を使用して PetaLinux プロジェク ト を作成します。 11 ページの 「PetaLinux

ツール」 の説明に従って PetaLinux 用の ZCU102 BSP をダウンロード して ください。

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

$petalinux-create -t project -s <xilinx-zcu102-v2018.1-final.bsp>

注記: xilinx-zcu102-v2018.1-final.bsp は、 ZCU102 プロダクシ ョ ン シ リ コン Rev1.0 ボード用の

PetaLinux BSP です。 Rev 1.0 ボードの ES2 シ リ コンを使用している場合は、

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

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

xilinx-zcu102-2018.1

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

$ cd xilinx-zcu102-2018.1

ZCU102 PetaLinux-BSP はデフォルトの ZCU102 Linux BSP です。 この例では、 第 2 章で Vivado Design Suite

を使用して設定した Zynq UltraScale+ ハードウェア プラ ッ ト フォームに基づいて、 PetaLinux プロジェク ト を再

度設定します。 これは、 PetaLinux で第 2 章の 「隔離設定」 に基づいてデバイス ツ リーが設定されるよ うにする

のに役立ちます。

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

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

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

[PetaLinux Configuration] ウ ィンド ウが開きます。 必要に応じて設定内容を変更してください。 この例では、 BSP

からのデフォルト設定で必要なブート イ メージを生成できます。

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

を確認します。

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

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 46UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 47: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

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

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

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

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

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] を 0x6D5FFFFF に

設定します。

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-user.dtsi

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

/include/ "system-conf.dtsi"/ {

gpio-keys { sw19 {

status = "disabled";};

};leds {

heartbeat_led {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: エンベデッ ド デザイン チュート リアル 47UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 48: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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 bistrream.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-11

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

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 48UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 49: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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 2018.1 の依存性については、 『PetaLinux ツール資料: リ ファレンス ガイ ド』 (UG1144) [参

照 7] を参照してください。

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

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

$ cd <Petalinux-project-path>/xilinx-zcu102-2018.1/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-2018.1

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-12

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

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 49UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 50: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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] を 0x6D5FFFFF に設定します。

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

10. petalinux-build コマンドを使用して再構築します。

11. u-boot.elf およびその他のイ メージのバッ クアップを作成します。 これらは第 5 章で使用します。

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

この章では、 ザイ リ ンクス ツールを使用して Zynq UltraScale+ デバイスのソフ ト ウェア ブロ ッ クを設定およびコン

パイルする方法を説明しました。 第 6 章ではこれらのイ メージを使用して、 特定のサンプル デザイン用にブート イ

メージを作成します。

第 4 章 「SDK を使用したデバッグ」 では、 ザイ リ ンクス SDK を使用して Zynq UltraScale+ デバイスのソフ ト ウェア

をデバッグします。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 50UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 51: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 4 章

SDK を使用したデバッグこの章では、 これまで説明してきたデザイン フローで可能なデバッグについて説明します。 初のオプシ ョ ンは、

ザイ リ ンクス ソフ ト ウェア開発キッ ト (SDK) を使用したソフ ト ウェアのデバッグです。

SDK デバッガーは、 次のデバッグ機能を提供します。

• Arm® Cortex®-A53、 Arm Cortex-R5、 および MicroBlaze™ プロセッサ アーキテクチャ上のプログラムのデバッ

グをサポート (ヘテロジニアス マルチプロセッサ ハードウェア システムのデバッグ)

• ハードウェア ボード上のプログラムのデバッグをサポート

• リモート ハードウェア システムでのデバッグ

• プログラムをデバッグするための豊富な機能を備えた IDE を提供

• テス ト スク リプ トの実行および自動化のためのツール コマンド言語 (Tcl) インターフェイスを提供

SDK デバッガーを使用する と、 プログラムの実行中に何が起こっているかを確認できます。 プロセッサを停止する

ブレークポイン ト またはウォッチポイン トの設定、 プログラムのステップ実行、 プログラム変数およびスタ ッ クの

確認、 システム内のメモ リ内容の確認などを実行できます。

ザイ リ ンクス SDK では、 Xilinx System Debugger (XSDB) を使用したデバッグがサポート されます。

Xilinx System DebuggerXilinx System Debugger では、 ザイ リ ンクスの hw_server が基本のデバッグ エンジンと して使用されます。 SDK は各

ユーザー インターフェイス操作を一連の TCF (Target Communication Framework) コマンドに変換し、 システム デバッ

ガーからの出力を処理して、 デバッグされているプログラムの現在の状態を表示します。 SDK は、 ザイ リ ンクスの

hw_server を使用してハード ウェア上のプロセッサと通信します。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 51UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 52: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 4 章: SDK を使用したデバッグ

次の図に、 このデバッグ ワークフローを示します。

ワークフローは、 次のコンポーネン トで構成されています。

• 実行可能な ELF ファ イル: ユーザー アプリ ケーシ ョ ンをデバッグするには、 デバッグ用にコンパイルされた

ELF (Executable and Linkable Format) ファ イルを使用する必要があ り ます。 デバッグ ELF ファ イルには、 デバッ

ガーへの追加のデバッグ情報が含まれ、 ソース コード とその元のソースから生成された 2 進数間が直接関連付

けられます。 ビルド コンフ ィギュレーシ ョ ンを管理するには、 ソフ ト ウェア アプリ ケーシ ョ ンを右ク リ ッ ク し

て [Build Configurations] → [Manage] をク リ ッ ク します。

• デバッグ コンフ ィギュレーシ ョ ン: デバッグ セッシ ョ ンを開始するには、 SDK でデバッグ コンフ ィギュレー

シ ョ ンを作成する必要があ り ます。 このコンフ ィギュレーシ ョ ンには、 実行ファイル名、 デバッグするプロ

セッサ ターゲッ ト など、 デバッグ セッシ ョ ンを開始するの必要なオプシ ョ ンが含まれます。 デバッグ コンフ ィ

ギュレーシ ョ ンを作成するには、 ソフ ト ウェア アプリ ケーシ ョ ンを右ク リ ッ ク して [Debug As] → [Debug

Configurations] をク リ ッ ク します。

• SDK [Debug] パースペクティブ: [Debug] パースペクティブを使用する と、 ワークベンチでプログラムのデバッ

グまたは実行を管理できます。 プログラムの実行は、 ブレークポイン トの設定、 起動したプログラムの一時停

止、 コードのステップ実行、 および変数の内容の確認を実行するこ とによ り制御可能です。 [Debug] ウ ィンド ウ

を表示するには、 [Window] → [Open Perspective] → [Debug] をク リ ッ ク します。

SDK では、 コードの変更、 実行ファイルの構築、 プログラムのデバッグというサイ クルを繰り返すこ とができ

ます。

注記: コンパイル後にソースを編集する と、 デバッグ情報がそのソースに直接関連付けられているため、 その行

番号はステップ実行されなくな り ます。 同様に、 適化されたバイナリ をデバッグする と、 実行ト レース中に

予期しないジャンプが発生する場合があ り ます。

X-Ref Target - Figure 4-1

図 4-1: システム デバッガーのフロー

Debug Executable

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 52UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 53: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 4 章: SDK を使用したデバッグ

SDK を使用したソフ トウェアのデバッグ

この例では、 hello world アプリ ケーシ ョ ンをデバッグします。

APU または RPU で実行する hello world アプリ ケーシ ョ ンを作成していない場合は、 40 ページの 「Arm Cortex-A53

ベースの APU 用ベアメ タル アプリ ケーシ ョ ンの作成」 の手順に従って新しい hello world アプリ ケーシ ョ ンを作成し

てください。

hello world アプリ ケーシ ョ ンを作成したら、 SDK で次の例を実行してソフ ト ウェアをデバッグします。

1. 「サンプル プロジェク ト : Arm Cortex-A53 から Hello World アプリ ケーシ ョ ンを実行」 の手順に従って、 JTAG

モードでターゲッ ト を設定し、 電源を投入します。

2. [C/C++] パースペクティブで、 test_a53 プロジェク ト を右ク リ ッ ク して [Debug As] → [Launch on Hardware

(System Debugger)] をク リ ッ ク します。

注記: この手順によ り、 プロジェク ト設定に基づいて [Debug] ウ ィンド ウでシステム デバッガーが起動します。

または、 図 4-2 に示すよ うにデバッグ コンフ ィギュレーシ ョ ンを作成するこ と もできます。

[Confirm Perspective Switch] ダイアログ ボッ クスが表示されたら、 [Yes] をク リ ッ ク します。 [Debug] パースペク

ティブが開きます。

X-Ref Target - Figure 4-2

図 4-2: [Debug Configurations] ダイアログ ボックス

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 53UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 54: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 4 章: SDK を使用したデバッグ

注記: [Debug] ウ ィンド ウが自動的に開かない場合は、 [Window] → [Perspective] → [Open Perspective] → [Other] を

ク リ ッ ク して、 Open Perspective ウ ィザードで [Debug] を選択します。

注記: このページに示されているアドレスは、 システムで表示されているものと若干異なる場合があ り ます。

プロセッサが 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] をク リ ッ ク

します。

X-Ref Target - Figure 4-3

図 4-3: アプリケーシ ョ ン デバッグ用の [Debug] パースペクテ ィブ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 54UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 55: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 4 章: SDK を使用したデバッグ

5. [Run] → [Step Into] をク リ ッ ク し、 init_platform () ルーチンにステップインします。

プログラムの実行が 0x00000000000009c8 の位置で一時停止します。 コール スタ ッ クの深さは 2 レベルにな

り ます。

6. [Run] → [Resume] をク リ ッ ク し、 プログラムをブレークポイン ト まで実行します。

プログラムの実行は、 printf コマンドを含むコードの行で停止します。 [Disassembly] および [Debug] ウ ィンド

ウに、 プログラムの実行が 0x0000000000000984 で停止しているこ とが示されます。

注記: hello world のソース コードを変更した場合、 ウ ィ ンド ウに表示される実行アドレスは異なる場合があ り

ます。

7. [Run] → [Resume] をク リ ッ ク し、 プログラムを 後まで実行します。

プログラムの実行が完了する と、 [Debug] ウ ィンド ウにプログラムが exit というルーチンで一時停止している

こ とが示されます。 これは、 デバッガーの制御下で実行している と きに発生します。

8. コードを複数回再実行します。 シングル ステップ、 メモ リの検査、 ブレークポイン ト、 コードの変更、 および

print 文の追加を試してみます。 ビューの追加および移動を試します。

ヒン ト : SDK ツール デバッグ シ ョート カッ ト (ステップ イン (F5)、 ステップ リ ターン (F7)、 ステップ オーバー (F6)、

および再開 (F8)) を使用できます。

ザイリンクス ソフ トウェア コマンド ライン ツール (XSCT) を使用したデバッグ

先ほどの手順に従って、 SDK System Debugger GUI を使用して、 RPU および PMU 上で実行しているベアメ タル アプ

リ ケーシ ョ ンをデバッグできます。

また、 XSCT の一部と して含まれる XSDB を使用してコマンド ライン モードでデバッグするこ と もできます。 この

例では、 XSCT を使用してベアメ タル アプリ ケーシ ョ ン testapp_r5 をデバッグします。

次の手順は、 XSCT を使用して R5 にベアメ タル アプリ ケーシ ョ ンをロードする方法を示しています。

この例は、 XSDB/XSCT を使用して可能なコマンド ラ イン デバッグを示すこ とを目的と しています。 要件に基づい

て、 システム デバッガー GUI または XSCT のコマンド ラ イン デバッガーのいずれかを選択してコードをデバッグ

できます。 すべての XSCT コマンドはスク リプ ト記述可能であ り、 これはこの例で説明するコマンドに当てはま り

ます。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 55UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 56: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 4 章: SDK を使用したデバッグ

ターゲッ トのセッ トアップ

1. USB ケーブルでターゲッ トの USB-JTAG J2 コネクタ とホス ト マシンの USB ポート を接続します。

2. SW6 を次の図のよ うに設定して、 ボードを JTAG ブート モードに設定します。

3. スイ ッチ SW1 を使用してボードに電源を投入します。

4. SDK ツールバーの [XSCT Console] をク リ ッ ク して SDK の 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: エンベデッ ド デザイン チュート リアル 56UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 57: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 4 章: SDK を使用したデバッグ

次の図に示すよ うに、 ターゲッ トが一覧表示されます。

7. PSU ターゲッ ト を選択します。 Arm APU および RPU ク ラスターは、 PSU の下にグループ化されています。

xsct% targets -set -filter {name=~ “PSU”}

targets コマンドはターゲッ ト を リ ス ト し、 選択されたターゲッ ト をアスタ リ スク (*) マークで強調表示しま

す。 または次の図に示すよ うに、 ターゲッ ト番号を使用してターゲッ ト を選択するこ と もできます。

X-Ref Target - Figure 4-5

図 4-5: ターゲッ トのリスト

X-Ref Target - Figure 4-6

図 4-6: 選択した PSU ターゲッ ト

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 57UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 58: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 4 章: SDK を使用したデバッグ

8. source コマンドで psu_init.tcl スク リプ ト を読み込み、psu_init コマンドを実行して Zynq® UltraScale+™

のプロセッシング システムを初期化します。

xsct% source {C:\edt\edt_zcu102\edt_zcu102.sdk\edt_zcu102_wrapper_hw_platform_0\psu_init.tcl}xsctk% psu_init

上記のコマンドに中かっこ ({}) が使用されているこ とに注意してください。 これは、 Windows マシンでパスの

バッ ク スラ ッシュ (\) を有効にするために必要です。 パスにフォワード スラ ッシュ (/) を使用する場合は、 中

かっこは不要です。 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\edt_zcu102\edt_zcu102.sdk\testapp_r5\Debug\testapp_r5.elf}

または

xsct% dow C:/edt/edt_zcu102/edt_zcu102.sdk/testapp_r5/Debug/testapp_r5.elf

こ こで、 ELF ファ イルのセクシ ョ ンが順にダウンロード されるのが表示されます。 XSCT プロンプ トはダウン

ロードが正常に完了する と表示されます。

次に、 シ リ アル ターミナル (Tera Term、 Minicom、 または UART-1 USB シ リアル接続用の SDK シ リ アル ターミ

ナル インターフェイス) を設定します。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 58UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 59: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 4 章: SDK を使用したデバッグ

シリアル ターミナルの設定

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: エンベデッ ド デザイン チュート リアル 59UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 60: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 4 章: SDK を使用したデバッグ

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: エンベデッ ド デザイン チュート リアル 60UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 61: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 4 章: SDK を使用したデバッグ

help running コマンドを使用する と、 XSCT を使用してアプリ ケーシ ョ ンを実行またはデバッグするための

オプシ ョ ンを表示できます。

6. コードを実行します。

xsct% con

こ こで、 UART-1 ターミナルに R5 アプリ ケーシ ョ ンのメ ッセージが表示されます。

SDK を使用した FSBL のデバッグ

FSBL は、SDK でデフォルトで Size Optimization および Link Time Optimization フラグ (-Os および LTO 適化) を使用

してビルド されます。 これによ り、 FSBL のメモ リ フッ トプ リ ン トが削減します。 FSBL をデバッグする際は、 これ

をディ スエーブルにする必要があ り ます。

適化をディ スエーブルにする と コード サイズが増加し、 FSBL をビルドできなくなる可能性があ り ます。 デバッ

グ用に 適化をディ スエーブルにするには、 FSBL の xfsbl_config.h ファ イルで一部の不要な FSBL 機能をディ

スエーブルにする必要があ り ます。

こ こでは、 第 3 章 「PS サブシステム用ソフ ト ウェアのビルド」 で作成した FSBL を変更する代わりにこのセクシ ョ

ン用の新しい FSBL を作成しします。 これで、 このチュート リ アルの残りの章で使用する FSBL_a53 プロジェク ト を

変更せずにすみます。

X-Ref Target - Figure 4-9

図 4-9: プログラム実行のデバッグに使用する XSCT ヘルプ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 61UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 62: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 4 章: SDK を使用したデバッグ

FSBL の作成および変更

次の手順に従って、 FSBL プロジェク ト を作成します。

1. SDK が起動していない場合は起動します。

2. 第 3 章 「PS サブシステム用ソフ ト ウェアのビルド」 で作成したプロジェク トに基づいてワークスペース パスを

設定します。 たとえば、 C:\edt\edt_zcu102\edt_zcu102.sdk です。

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

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

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

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

ボード サポート パッケージおよび FSBL アプリ ケーシ ョ ンが作成されます。 次の手順に従って 適化をディ スエー

ブルにします。

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

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

3. [Settings] → [Tool Settings] タブ → [Arm A53 gcc Compiler] → [Miscellaneous] をク リ ッ ク します。

表 4-1: FSBL_debug プロジェク ト作成時の設定

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

Application Project Project name fsbl_debug

Use default location オン

OS Platform standalone

Hardware Platform edt_zcu102_wrapper_hw_platform_0

Processor psu_cortexa53_0

Language C

Compiler 64-bit

Hypervisor Guest No

Board Support Package [Create New] をオンにして 「test_a53_bsp」 と入力

[Next] をク リ ッ ク

Templates Available Templates Zynq MP FSBL

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 62UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 63: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 4 章: SDK を使用したデバッグ

4. 次の図に示すよ うに、 [Other flags] で 「-Os -flto -ffat-lto-objects」 を削除します。

同様に、 fsbl_debug_bsp を変更して 適化をディ スエーブルにする必要があ り ます。

5. [fsbl_debug_bsp] を右ク リ ッ ク し、 [Board Support Package Settings] をク リ ッ ク します。

6. [Overview] → [Drivers] → [psu_cortexa53_0] → [extra_compiler_flags] をク リ ッ ク し、 次の図に示すよ うに

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

7. [Overview] → [Standalone] をク リ ッ ク します。

8. [zynqmp_fsbl_bsp] フラグを [false] に変更し、 これらの変更後に BSP を再ビルド したと きに FSBL の BSP の 適

化設定がデフォルトに リセッ ト されないよ うにします。

9. [OK] をク リ ッ ク してこれらの変更を保存します。 BSP が自動的に再ビルド されます。

これで、 FSBL をデバッグできるよ うにな り ました。

FSBL は、 ほかのスタンドアロン アプリ ケーシ ョ ンと同じよ うにデバッグするか ( 「SDK を使用したソフ ト ウェアの

デバッグ」 および 「ザイ リ ンクス ソフ ト ウェア コマンド ラ イン ツール (XSCT) を使用したデバッグ」 を参照)、

System Debugger の [Attach to running target] モードを使用してブート イ メージの一部と してデバッグできます。

X-Ref Target - Figure 4-10

図 4-10: FSBL BSP ビルド設定の変更

X-Ref Target - Figure 4-11

図 4-11: FSBL BSP ビルド設定の変更

X-Ref Target - Figure 4-12

図 4-12: FSBL BSP ビルド設定の変更

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 63UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 64: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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 ファームウェアもロード されます。 上記

の設定は、 ザイ リ ンクス SDK および PetaLinux ツール フローを使用して実行できます。 第 3 章では PS 内の各プロ

セッシング ユニッ トのソフ ト ウェア ブロ ッ クを作成するこ とにのみ重点を置いていましたが、 この章ではよ り大規

模なシステムの一部と してこれらのブロッ クをロードする方法を説明します。

ブート イ メージの生成には、 SDK の 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+: エンベデッ ド デザイン チュート リアル 64UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 65: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

システム ソフ トウェア

この章のブートおよびコンフ ィギュレーシ ョ ンの説明の大部分は、 こ こで挙げるシステム ソフ ト ウェア ブロッ クに

ついてです。 詳細なブート フローおよびさまざまなブート シーケンスについては、 『Zynq UltraScale+ MPSoC ソフ ト

ウェア開発者向けガイ ド』 (UG1137) [参照 6] の 「システム ブートおよびコンフ ィギュレーシ ョ ン」 の章を参照して

ください。

第 1 段階ブートローダー (FSBL)非セキュア ブート モードでは、 プラ ッ ト フォーム管理ユニッ ト (PMU) はコンフ ィギュレーシ ョ ン セキュ リ ティ ユ

ニッ トの リセッ ト を解除した後、 PMU サーバー モードに移行して電力を監視します。 この段階で、 コンフ ィギュ

レーシ ョ ン セキュ リティ ユニッ トは 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 が処理しま

す。 SDK では、 PMU 上で動作するよ う ビルド可能な PMU ファームウェアを提供しています。 プラ ッ ト フォーム管

理および PMU ファームウェアの詳細は、 『Zynq UltraScale+ MPSoC ソフ ト ウェア開発者向けガイ ド』 (UG1137) [参

照 6] を参照してください。

PMU ファームウェアは、 次の方法で読み込むこ とができます。

1. bootROM を使用 ( 「SD ブートのブート シーケンス」 を参照)。

2. FSBL を使用 ( 「QSPI ブート モードのブート シーケンス」 を参照)。

3. JTAG ブート モードを使用 ( 「JTAG を使用した QSPI ブート モードのブート シーケンス」 を参照)。

詳細は、 PMU ファームウェア ザイ リ ンクス Wiki を参照してください。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 65UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 66: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

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 イ メージを使用できます。 このチュート リ アルのデザ

イン ファ イルのダウンロードについては、 158 ページの 「このチュート リ アルのデザイン ファ イル」 を参照してく

ださい。

Arm ト ラステッ ド ファームウェア

Arm ト ラステッ ド ファームウェア (ATF) は、 APU の EL3 (例外レベル 3) で実行される透過的なベアメ タル アプリ

ケーシ ョ ン レイヤーです。 ATF には、 セキュア ワールド と非セキュア ワールドを切り替えるためのセキュア モニ

ター レイヤーが含まれます。 セキュア モニターの呼び出し と TBBR (Trusted Board Boot Requirements) の実装によ り、

Zynq UltraScale+ の APU に Linux をロードするには ATF レイヤーが必須です。

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 ト ラステッ ド ファームウェア」 を参照してください。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 66UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 67: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

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

この例では、 APU の Linux に加え、 ベアメ タル アプリケーシ ョ ンをロッ クステップ モードで RPU R5 にロード します。

この例では、 42 ページの 「Arm Cortex-R5 ベースの RPU 用ベアメ タル アプリ ケーシ ョ ンの作成」 で作成した

testapp_r5 アプリ ケーシ ョ ンを参考にしてください。

また、 このチュート リ アルに付属のデザイン ファ イルに testapp_r5.elf 実行ファイルがあ り ます。 このチュー

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

を参照してください。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 67UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 68: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

SD ブートのブート シーケンス

各イ メージの準備が完了したので、 ブート イ メージを作成して Zynq UltraScale+ にこれらのコンポーネン ト をすべて

ロード します。 これには、 次の手順に従って SDK の Create Boot Image ウ ィザードを使用します。

1. SDK で [Xilinx] → [Create Boot Image] をク リ ッ ク します。

2. この章の前のセクシ ョ ンで説明したすべてのパーティシ ョ ンを選択し、 次の図に示すよ うに設定します。

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+: エンベデッ ド デザイン チュート リアル 68UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 69: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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] ページ

X-Ref Target - Figure 5-3

図 5-3: PMUFW パーティシ ョ ンの追加

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 69UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 70: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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] をオンにします。

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

X-Ref Target - Figure 5-4

図 5-4: ATF パーティシ ョ ンの追加

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 70UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 71: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

R5 実行ファイルを追加し、 これをロ ッ クステップ モードで有効にします。

1. [Add] をク リ ッ ク して R5 ベアメ タル実行ファイルを追加します。

2. [Destination Device] を [PS] に設定します。

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 にあ り ます。

X-Ref Target - Figure 5-5

図 5-5: RPU イメージ パーティシ ョ ンの追加

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 71UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 72: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

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:{[bootloader, destination_cpu=a53-0][bootloader]C:\edt\edt_zcu102\edt_zcu102.sdk\fsbl_a53\Debug\fsbl_a53.elf[pmufw_image]C:\edt\edt_zcu102\edt_zcu102.sdk\pmu_fw\Debug\pmu_fw.elf

[destination_cpu = a53-0, exception_level=el-3, trustzone]C:\edt\design_files\bl31.elf[destination_cpu =

r5-lockstep]C:\edt\edt_zcu102\edt_zcu102.sdk\testapp_r5\Debug\testapp_r5.elf[destination_cpu = a53-0,

exception_level=el-2]C:\edt\design_files\sd_boot\u-boot.elf}

SDK は次の Bootgen コマンドを呼び出して、 このコンフ ィギュレーシ ョ ンの BOOT.bin イ メージを生成します。

bootgen -image sd_boot.bif -arch zynqmp -o C:\edt\BOOT.bin

X-Ref Target - Figure 5-6

図 5-6: U-Boot パーティシ ョ ンの追加

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 72UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 73: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

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 インターフェイスを使用できます。

8. も小さい番号のインターフェイスに関連付けられた COM ポート を選択します。 こ こでは、 UART-0 に対して

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

9. 同様に、 UART-1 に Interface-1 の COM ポート を選択します。

R5 BSP は UART-1 を使用するよ うに設定されているため、 R5 アプリ ケーシ ョ ン メ ッセージは UART-1 ターミナ

ルの COM ポートに表示されます。

X-Ref Target - Figure 5-7

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

X-Ref Target - Figure 5-8

図 5-8: COM ポートのセッ トアップ

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 73UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 74: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

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

UART-0 用のターミナル画面に初期ブート シーケンス メ ッセージが表示されます。

UART-1 用に設定されたターミナル画面にも メ ッセージが表示されます。 これは、 RPU で実行されている

UART-1 インターフェイスを使用するよ うに設定された R5 ベアメ タル アプリ ケーシ ョ ンからのメ ッセージで

す。 このアプリ ケーシ ョ ンは、 FSBL によって RPU にロード されます。

ベアメ タル アプリ ケーシ ョ ンは、 UART 割り込みサンプルを含むよ うに変更されています。 このアプリ ケー

シ ョ ンは、 UART-1 ターミナルのキーボードからユーザーが入力するまで、 WFI (Waiting For Interrupt) 状態で待

機します。

X-Ref Target - Figure 5-9

図 5-9: UART-1 に表示される R5-0 で実行する Hello World

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 74UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 75: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

一方、 ブート シーケンスは APU で継続され、 ロード されたイ メージは UART-0 ターミナルに表示される メ ッ

セージからわかり ます。 次の図に、 メ ッセージを強調表示します。

X-Ref Target - Figure 5-10

図 5-10: Zynq UltraScale+ ブート シーケンス時の APU からのメ ッセージ

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 75UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 76: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

U-Boot は、 SMP モードで Linux カーネルとその他のイ メージを Arm Cortex®-A53 の APU にロード します。 ター

ミナル メ ッセージに U-Boot がカーネル イ メージをロード してカーネルを起動したこ とが示され、 ターゲッ ト

Linux OS にユーザー インターフェイス プロンプ トが表示されます。 カーネルのロードおよびスタート シーケン

スは、 次の図のよ うになり ます。

X-Ref Target - Figure 5-11

図 5-11: カーネルのロードおよびスタート シーケンス

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 76UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 77: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

QSPI ブート モードのブート シーケンス

ZCU102 ボードには、 大 128 MB のデュアル パラレル QSPI フラ ッシュも搭載されています。 この例では、 QSPI

ブート モードでブート イ メージを作成し、 UltraScale+ にロード します。 イ メージは、 SDK の Create Boot Image ウ ィ

ザードを使用して設定できます。 これは、 次の手順に従って実行できます。

注記: このセクシ ョ ンでは、 「PetaLinux を使用した QSPI フラ ッシュ用 Linux イ メージの作成」 の手順に従って QSPI

ブート モードで PetaLinux イ メージが作成されている と想定しています。

1. SDK が起動していない場合は起動し、 第 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+: エンベデッ ド デザイン チュート リアル 77UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 78: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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+: エンベデッ ド デザイン チュート リアル 78UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 79: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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] をク リ ッ ク します。

X-Ref Target - Figure 5-14

図 5-14: PMU パーティシ ョ ンの追加

X-Ref Target - Figure 5-15

図 5-15: ATF パーティシ ョ ンの追加

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 79UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 80: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

6. [Add] をク リ ッ ク して R5 ベアメ タル実行ファイルを追加します。

a. R5 実行ファイルを次の図に示すよ うに追加し、 [R5 Lockstep] を選択します。

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

X-Ref Target - Figure 5-16

図 5-16: RPU ロックステップ イメージ パーティシ ョ ンの追加

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 80UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 81: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

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] に設定します。

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. [Load] に 「0x10000000」 と入力します。

e. [Exception Level] ド ロ ップダウン リ ス トは無視し、 [Enable Trust Zone] はオフのままにします。

注記: 上記のロード アドレス設定 ([Load]) はオプシ ョ ンで、 U-Boot を使用してイ メージを DDR にロードする場

合は必要あ り ません。 手順 8.d の設定で、 パーティシ ョ ンは FSBL によ り DDR 内のロケーシ ョ ンに書き込まれ

ます。 この例では、 FSBL と U-Boot の両方でイ メージが DDR にコピーされています。 イ メージのロードに

X-Ref Target - Figure 5-17

図 5-17: U-Boot パーティシ ョ ンの追加

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 81UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 82: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

FSBL または U-Boot のどちらを使用するかは、 BIF ファ イルで partition_owner = U-Boot (または FSBL) フラグを

設定して選択できます。

ヒン ト : オフセッ ト値については、 「PetaLinux を使用した QSPI フラ ッシュ用 Linux イ メージの作成」 を参照してくだ

さい。

9. [OK] をク リ ッ ク して、 Create Boot Image ウ ィザードに戻り ます。

10. [Create Image] をク リ ッ ク して qspi_BOOT.bin イ メージを作成します。

または、 BIF 属性と Bootgen コマンドを使用して qspi_BOOT.bin イ メージを作成するこ と もできます。 このコ

ンフ ィギュレーシ ョ ンの BIF 属性は、 [Preview BIF Changes] をク リ ッ ク して表示できます。 このコンフ ィギュ

レーシ ョ ンでは、 BIF ファ イルには次の属性が含まれます。

the_ROM_image:{[bootloader,

destination_cpu=a53-0]C:\edt\edt_zcu102\edt_zcu102.sdk\fsbl_a53\Debug\fsbl_a53.elf[destination_cpu = pmu]C:\edt\edt_zcu102\edt_zcu102.sdk\pmu_fw\

Debug\pmu_fw.elf[destination_cpu = a53-0, exception_level=el-3,

trustzone]C:\edt\design_files\bl31.elf[destination_cpu =

r5-lockstep]C:\edt\edt_zcu102\edt_zcu102.sdk\testapp_r5\Debug\testapp_r5.elf[destination_cpu = a53-0,

exception_level=el-2]C:\edt\design_files\qspi_boot\u-boot.elf

[offset = 0x1E40000, load=0X10000000, destination_cpu = a53-0]C:\edt\design_files\image.ub}

SDK は次の 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 ブート モードでイメージを実行

この例でイ メージをテス トするには、 SDK のプログラム フラ ッシュ ユーティ リ ティ を使用して、 ZCU102 ボードの

QSPI にブート イ メージ (qspi_BOOT.bin) イ メージをロード します。 または、 ザイ リ ンクス SDK で XSDB デバッ

ガーを使用するこ と もできます。

1. ザイ リ ンクス SDK で [Xilinx] → [Program Flash] をク リ ッ ク します。

2. [Program Flash Memory] ダイアログ ボッ クスで [Browse] をク リ ッ ク し、 このサンプル プロジェク トの一部と し

て作成された qspi_BOOT.bin イ メージ ファ イルを選択します。

3. [Flash Type] で [qspi_dual_parallel] を選択します。

4. [Offset] を 0 に設定し、 [FSBL File] で FSBL ELF ファ イル (fsbl_a53.elf) を選択します。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 82UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 83: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

5. 次の手順に従って、ZCU102 ターゲッ トの USB-JTAG コネクタ とホス ト マシンの USB ポートが USB ケーブルで

接続されているこ とを確認します。

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

b. ボードの電源をオンにします。

6. [Program] をク リ ッ ク し、 qspi_BOOT.bin イ メージで QSPI フラ ッシュをプログラムするプロセスを開始します。

次の図に示すよ うに、 SDK コンソールに 「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+: エンベデッ ド デザイン チュート リアル 83UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 84: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

ZCU102 ボードのセッ トアップ

1. ボードの USB-UART をホス ト マシンに接続します。 Micro USB ケーブルの一端を ZCU102 ボードの Micro USB

ポート J83 に接続し、 も う一端をホス ト マシンの空きの USB ポートに接続します。

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

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

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

COM ポート とボー レート を図 5-22 に示すよ うに設定します。

5. ポート設定では、デバイス マネージャーで COM ポート を検証します。ZCU102 では 4 つの USB UART インター

フェイスが使用されています。

6. も小さい番号のインターフェイスに関連付けられた COM ポート を選択します。 こ こでは、 UART-0 に対して

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

X-Ref Target - Figure 5-20

図 5-20: SDK コンソールのプログラム フラ ッシュ メ ッセージ

X-Ref Target - Figure 5-21

図 5-21: QSPI ブート モードの SW6 スイッチ設定

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 84UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 85: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

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 状態で待機します。

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+: エンベデッ ド デザイン チュート リアル 85UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 86: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

一方、 ブート シーケンスは APU で継続され、 ロード されたイ メージは UART-0 ターミナルに表示される メ ッ

セージからわかり ます。 次の図に、 メ ッセージを強調表示します。

X-Ref Target - Figure 5-24

図 5-24: UART-0 ターミナルに表示されるメ ッセージ

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 86UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 87: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

U-Boot は、SMP モードで Linux カーネルとその他のイ メージを Arm Cortex-A53 の APU にロード します。ターミ

ナル メ ッセージは、 U-Boot がカーネル イ メージをロード してカーネルが起動したこ とを示し、 Linux カーネル

でユーザー インターフェイス プロンプ トが表示されます。 カーネルのロードおよびスタート シーケンスは、 次

の図のよ うになり ます。

9. Linux がボードにロード されるまで待ちます。

X-Ref Target - Figure 5-25

図 5-25: カーネルのロードおよびスタート シーケンス

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 87UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 88: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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 ボタン をク リ ッ ク して、 SDK で XSCT コンソールを開きます。 または、 [Xilinx] → [XSCT Console]

をク リ ッ ク して XSCT コンソールを開く こ と もできます。

4. XSCT コンソールで、 次の connect コマンドを使用して JTAG を介してターゲッ トに接続します。

xsct% connect

connect コマンドは、 接続のチャネル ID を返します。

X-Ref Target - Figure 5-26

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

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 88UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 89: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

5. target コマンドを実行して使用可能なターゲッ ト を リ ス ト し、 ID を使用してターゲッ ト を選択します。

ターゲッ トには JTAG チェーンで検出されたと きに ID が割り当てられるので、 ターゲッ ト ID はセッシ ョ ンごと

に変わり ます。

注記: スク リプ ト記述などの非対話型の使用法では、 ID を使用してターゲッ ト を選択するのではなく、

-filter オプシ ョ ンを利用してターゲッ ト を選択できます。

xsct% targets

次の図に示すよ うに、 ターゲッ トが一覧表示されます。

XSCT/XSDB を使用した U-Boot のロード

1. 次のコマンドを使用して、 Cortex-A53 # 0 に u-boot アプリ ケーシ ョ ンをダウンロード します。

セキュ リ ティ ゲート を無効にして 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\edt_zcu102\edt_zcu102.sdk\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 は個々のプロセッサ コアのリセッ ト をク リ アします。

X-Ref Target - Figure 5-27

図 5-27: XSCT ターゲッ ト

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 89UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 90: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

Zynq UltraScale+ を JTAG ブート モードで起動する と、 すべての APU コアおよび RPU コアがリセッ ト状態に保

持されるので、 この手順は重要です。 これらのコアでデバッグを実行する前に、 各コアのリセッ ト をク リ アす

る必要があ り ます。 リセッ トは XSCT の rst コマンドでク リ アできます。

注記: rst -cores は、 現在のターゲッ トが子となっている、 グループ (APU または RPU など) 内にあるすべて

のプロセッサ コアのリセッ ト をク リ アします。 たとえば、 A53#0 が現在のターゲッ トである場合、 rst

-cores は APU のすべての A53 コアのリセッ ト をク リ アします。

FSBL をロード して実行します。

xsct% dow {C:\edt\edt_zcu102\edt_zcu102.sdk\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 シ リアル接続用の SDK シ リ アル ターミナル イ

ンターフェイス) を設定します。

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

X-Ref Target - Figure 5-28

図 5-28: ZCU102 ボードでイメージを検証する

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 90UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 91: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

XSDB を使用した DDR への BOOT.bin のロード

1. ZCU102 の DDR に BOOT.bin バイナリ をダウンロード します。QSPI ブート モード用に作成された同じ BOOT.bin

を使用します。

xsct% dow -data {C:\edt\qspi_BOOT.bin} 0x2000000

2. XSDB で con コマンドを使用して、 U-Boot を再開します。

xsct% con

U-Boot を使用した QSPI への BOOT.bin イメージのロード

1. ターゲッ ト ターミナルの U-Boot コンソールで次のコマンドを実行します。 これらのコマンドによって QSPI が

消去され、 BOOT.bin イ メージが DDR から QSPI に書き込まれます。

U-Boot-PetaLinux> sf probe 0 30000000 0U-Boot-PetaLinux> sf erase 0 0x4000000U-Boot-PetaLinux> sf write 0x2000000 0 0x4000000

2. イ メージが QSPI に書き込まれたら、 ZCU102 ボードの電源を切断し、 84 ページの 「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 ユー

ティ リ ティは、 ザイ リ ンクス SDK および PetaLinux に付属しています。

USB ブート モードを有効にするために必要な FSBL の設定

USB ブート モードを有効にするために必要な FSBL の変更はほとんどあ り ません。 USB ブート モード サポートは、

FSBL のフッ トプ リ ン ト を約 10 KB 増加します。 これは主に初期開発段階中に使用するこ とを目的と しているので、

このサポートは OCM 空間を節約するためデフォルトでは無効になっています。 このセクシ ョ ンでは、 FSBL を変更

して USB ブート モードを有効します。 FSBL プロジェク トはこのチュート リ アル全体で広く使用されているので、

既存の FSBL プロジェク トは変更しません。 その代わりに、 このセクシ ョ ンでは新しい FSBL プロジェク ト を使用し

ます。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 91UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 92: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

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

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

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

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. SDK で [Xilinx] → [Create Boot Image] をク リ ッ ク します。

2. fsbl_usb_boot.elf および pmu_fw.elf のパーティシ ョ ンを選択し、 次の図に示すよ うに設定します。

表 5-1: ウィザードのプロパティおよびコマンド

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

Application Project Project name fsbl_usb_boot

Use default location オン

OS Platform standalone

Hardware Platform edt_zcu102_wrapper_hw_platform_0

Processor psu_cortexa53_0

Language C

Compiler 64-bit

Hypervisor Guest No

Board Support Package [Use existing] をオンにして 「a53_bsp」 と入力。

Templates Available Templates Zynq MP FSBL

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 92UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 93: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

3. PMUFW パーティシ ョ ンが bootROM によってロード されるよ う設定されているこ とを確認します。

4. [Create Image] をク リ ッ ク して BOOT.bin を生成します。

PetaLinux の U-Boot の変更

PetaLinux の U-Boot を変更し、 image.ub をロードできるよ うにします。 デバイス ツ リーを変更して、 USB をペリ

フェラル モードに設定する必要があ り ます。 デフォルトの PetaLinux コンフ ィギュレーシ ョ ンでは、 USB はホス ト

モードに設定されています。

これには、 次の手順に従って PetaLinux プロジェク ト <PetaLinux-project>/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.d

tsi にある system-user.dtsi を変更します。

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

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

};};

leds {heartbeat_led {status = "disabled";

};};

};&dwc3_0 { dr_mode = "peripheral"; maximum-speed = "super-speed";

};

X-Ref Target - Figure 5-29

図 5-29: USB ブート モードの Create Boot Image ウィザード

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 93UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 94: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

変更済みの system-user.dtsi ファ イルは、 このチュート リ アル付属のデザイン ファ イル ZIP の usb_boot フォル

ダーに含まれています。

2. これらの変更を含めて PetaLinux をビルド します。

$ petalinux-build

次の手順に従って、 残りのパーティシ ョ ンを含む usb_boot.bin を作成します。

注記: 新し く生成された U-Boot を C:\edt\usb-edt\ にコピーします。 u-boot.elf は 「このチュート リ アルのデ

ザイン ファ イル」 にも含まれています。

1. SDK で [Xilinx] → [Create Boot Image] をク リ ッ ク します。

2. FSBL および残りのパーティシ ョ ンを選択し、 次の図に示すよ うに設定します。 これには、 SD ブート シーケン

スから BIF ファ イルをインポートするこ と もできます。

3. PMUFW パーティシ ョ ンは、 イ メージ (usb_boot.bin) がロード される前に bootROM によってロード されるた

め、 このイ メージには必要あ り ません。

4. [Create Image] をク リ ッ ク して usb_boot.bin を生成します。

注記: BOOT.bin および usb_boot.bin のほかに、image.ub といった Linux イ メージが Linux をブートするまで必

要です。 この image.ub は、 DFU ユーティ リ ティによって個別にロード されます。

X-Ref Target - Figure 5-30

図 5-30: 残りのパーティシ ョ ンのブート イメージの作成

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 94UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 95: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

USB ブート を使用したブート

このセクシ ョ ンでは、 DFU ユーティ リ ティ を使用して ZCU102 ターゲッ トにブート イ メージをロード します。 開始

する前に、 次のよ うにボード接続を設定します。

1. SW6 を次の図に示すよ うに 1 をオン、 2 をオフ、 3 をオフ、 4 をオフにして、 ZCU102 を USB ブート モードに設

定します。

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

ユーティ リ ティは、 SDK\2018.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 が問題なく ロード されているこ とをシ リ アル ターミナルで確認します。

X-Ref Target - Figure 5-31

図 5-31: USB ブート モードの SW6 設定

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 95UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 96: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

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 ロケーシ ョ ンに

コピーできます。 必要な場合は、 これらのイ メージを 「JTAG を使用した QSPI ブート モードのブート シーケンス」

に リ ス ト されている U-Boot コマンドを使用して QSPI にコピーできます。

Windows ホスト マシンのブート コマンド

1. SDK で、 [Xilinx] → [Launch Shell] をク リ ッ ク します。

2. シェルが起動したら、 DFU が USB ターゲッ ト を検出可能であるこ とを確認します。

> dfu-util.exe -l

注記: dfu-util.exe は

<SDK_Installation_path>\SDK\2018.1\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 アプリ ケーシ ョ

ンも問題なく ロード されているこ とを確認します。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 96UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 97: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

注記: こ こで、 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) 対策を含むパーティシ ョ ン暗号化

• Physically Unclonable Function (PUF: 物理的な複製防止機能) を用いたブラ ッ ク キーの格納

この 「セキュア ブート システム デザインにおける決定」 では、 デザイン開発の早期に実行すべきハイ レベルなセ

キュア ブートの判断について概説します。 「ハード ウェアによる信頼のルート (HROT)」 では、 ブートにおける信頼

のルート (RoT) の使用について説明します。 「ブート イ メージの機密性と DPA」 では、 AES 暗号化を使用する機密性

の保護手法について説明します。

「ブート イ メージの機密性と DPA」 では、 DPA 攻撃への対策と しての操作キーとキー ローリ ング手法の使用につい

て説明します。 AES キーを変更するこ とで、 キーとそのキーで保護されているデータが脅威にさら される危険性が

低くなり ます。

レッ ド キーは非暗号化フォーマッ トのキーです。 「ブラ ッ ク キーの格納」 では、 暗号化 (ブラ ッ ク ) フォーマッ トで

AES キーを格納する方法について説明します。 ブラ ッ ク キーの格納では、 Physically Unclonable Function (PUF) を

キーの暗号化キー (KEK) と して使用します。

「セキュア ブートでの実用的な方法」 では、 AES 暗号化および RSA 認証を使用するシステムの開発およびテス ト手

順を説明します。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 97UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 98: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

セキュア ブート システム デザインにおける決定

セキュア ブートに影響を及ぼすデバイス レベルの決定事項は次のとおりです。

• ブート モード

• 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) を保護 ブート イ メージの機密性

秘密キー (AES キー ) をサイ ド チャネル攻撃から保護 DPA 保護

秘密キー (AES キー ) が停止状態で暗号化されて格納される ブラ ッ ク キーの格納

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 98UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 99: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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) で

も認証されます。

セキュア ブート フローでは、 パーティシ ョ ンはまず認証され、 その後必要に応じて復号化されます。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 99UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 100: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

認証

図 5-32 に、 パーティシ ョ ンに対する RSA 署名と検証を示します。 SDK Bootgen ツールは、 セキュアな施設から秘密

キーを使用してパーティシ ョ ンに署名を入れます。 デバイス内では、 公開キーを使用して、 ROM が FSBL を検証し、

FSBL または U-Boot のいずれかが続くパーティシ ョ ンを検証します。 プライマ リおよびセカンダ リの秘密/公開キー

ペアが使用されます。 プライマ リ秘密/公開キーは、 セカンダ リ秘密/公開キー ペアを認証します。 セカンダ リ キー

は、 パーティシ ョ ンを署名/検証します。

パーティシ ョ ンに署名を入れるため、 Bootgen はまずパーティシ ョ ン データの SHA3 を計算します。 その後、 秘密

キーを使用して 384 ビッ トのハッシュが RSA 署名されます。 結果の RSA 署名が認証証明に追加されます。 イ メー

ジ内では、 署名された各パーティシ ョ ンにパーティシ ョ ン データがあ り、 その後に RSA 署名を含む認証証明が続

きます。

FSBL の検証は、 CSU ROM コードで実行されます。 後続のパーティシ ョ ンは、 FSBL または U-Boot によ り xilsecure

ライブラ リ を使用して検証されます。

ブート ヘッダー認証という認証用のデバッグ モードがあ り ます。 この認証モードでは、 デバイス eFUSE に格納され

ているプライマ リ公開キー ダイジェス ト、 セッシ ョ ン キー ID、 およびキー取り消しビッ トは CSU ROM コードで

チェッ ク されません。 そのため、 このモードはセキュアではあ り ませんが、 eFUSE をプログラムする必要がないの

で、 テス トおよびデバッグには便利です。 このチュート リ アルではこのモードを使用します。 フ ィールドに展開さ

れたシステムではブート ヘッダー認証は使用しないでください。 このセクシ ョ ンの 後に、 完全にセキュアなシス

テム用の BIF ファ イル例が含まれています。

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+: エンベデッ ド デザイン チュート リアル 100UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 101: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

ブート イメージの機密性と 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 にキーをプログラムするソフ ト ウェ

アの例も、 ザイ リ ンクス SDK で提供されています。 そのうちの一例を 「セキュア ブートでの実用的な方法」 で説明

します。

DPA 保護

キー ローリ ングは耐 DPA 攻撃に使用されます。 キー ローリ ングとブラ ッ ク キーの格納は、 同じデザインで使用で

きます。 キー ローリ ングでは、 ソフ ト ウェアとビッ ト ス ト リームは複数のデータ ブロッ クに分割され、 それぞれ固

有のキーで暗号化されます。 初のキーは、 BBRAM または eFUSE NVM に格納されます。 続くデータ ブロ ッ クの

キーは前のデータ ブロ ッ クで暗号化されます。 初のキーの後、 キー アップデート レジスタがキー ソース と して

使用されます。

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) [参照 13] を参照してください。

ヘルパー データおよび暗号化されたユーザー キーは共に、 PUF eFUSE のと きは eFUSE に、 PUF ブート ヘッダー

モードのと きはブート ヘッダーに格納する必要があ り ます。 PUF ブート ヘッダー モードの手順は、 「ブート ヘッ

ダー モードでの PUF の使用」 で説明します。 eFUSE モードの PUF の使用方法は、 『BBRAM および eFUSE のプログ

ラ ミ ング』 (XAPP1319) [参照 13] を参照してください。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 101UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 102: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

このチュート リ アルでは、 eFUSE のプログラムが不要でテス トおよびデバッグに便利な PUF ブート ヘッダー モード

を使用します。 ただし、 PUB ブート ヘッダー モードでは各デバイスに対して個別に Bootgen を実行する必要がある

ので、 も一般的なモードは PUF eFUSE モードです。 「セキュア ブート シーケンス」 の 後に、 PUF eFUSE モード

を示す完全にセキュアなシステム用の BIF ファ イル例が含まれています。

セキュア ブートでの実用的な方法

このセクシ ョ ンでは、 Zynq UltraScale+ システムでセキュア ブート を開発する手順を概説します。 セキュアなエンベ

デッ ド システムを構築するには、 2 段階のプロセスが必要です。 第 1 段階では、 暗号化キーを生成して NVM にプロ

グラムします。 第 2 段階では、 セキュア システムを開発してテス ト します。 どちらの段階にもザイ リ ンクスのソフ ト

ウェア開発キッ ト (SDK) を使用し、 ソフ ト ウェア プロジェク トの作成、 イ メージの生成、 およびイ メージのプログラ

ムを実行します。 第 2 段階のテス ト システムは、 fsbl.elf および hello.elf ファイルのよ うな単純なものにでき

ます。 このセクシ ョ ンでは、 「SD ブートのブート シーケンス」 で使用されているものと同じイ メージを使用します

が、 このイ メージをアセンブルし、 セキュア ブート シーケンスの一部と してセキュア属性を有効に設定します。

このセクシ ョ ンでは、 まず AES および RSA キーの生成方法を示します。 キーの生成に続き、 高度な AES および

RSA 手法を使用してシステムを開発し、 テス ト します。 このセクシ ョ ンで生成されるキーは、 「このチュート リ アル

のデザイン ファイル」 にも含まれています。

AES 機能の開発に使用する手法は、 次のセクシ ョ ンで説明されています。

• 「AES キーの生成」

• 「キー ローリ ングを使用した暗号化の有効化」

• 「操作キーの使用の有効化」

• eFUSE の AES キー

• 「PUF の使用」

「RSA 秘密/公開キー ペアの作成」 に、 ブート時にロード されるすべてのパーティシ ョ ンを認証する手順を説明して

います。 キーの取り消し方法も示しています。

セキュア システムの開発では、 イ メージの生成時に使用するセキュ リティ属性を追加する必要があ り ます。 SDK の

Bootgen によ りブート イ メージ フォーマッ ト (BIF) ファ イルが生成されます。 BIF ファ イルはテキス ト ファ イルで

す。 もシンプルなフォーマッ トの BIF では、 ブート時にロード されるパーティシ ョ ンが リ ス ト されます。 暗号化

機能を指定するためのセキュ リティ属性が BIF に追加されます。 BIF ファ イルは Bootgen GUI (Create Boot Image ウ ィ

ザード ) によ り生成されるこ とがほとんどです。 セキュ リ ティ属性を追加する際、 Bootgen で生成された BIF ファ イ

ルの変更が求められるこ とがあ り ます。 ザイ リ ンクス SDK の Create Boot Image ウ ィザードで、 [Security] タブをク

リ ッ ク し、 [Authentication] タブおよび [Encryption] タブでセキュ リティ属性を指定します。

セキュア ブートで AES および RSA 暗号化をインプリ メン ト したら、 ブート テス トは完了します。 システムが問題

なく ロード され、 ターミナルに FSBL メ ッセージが表示されます。 これらのメ ッセージには、 各パーティシ ョ ンで

実行された暗号化操作が示されます。 付録 A 「セキュア ブートでの問題のデバッグ」 では、 セキュア ブート テス ト

で問題が検出された場合に実行する手順を説明します。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 102UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 103: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

サンプル デザインの概要

サンプル デザインは、 さまざまなタイプのイ メージをデバイスに読み込みます。 FSBL、 PMU ファームウェア、

U-Boot、 Linux、 RPU ソフ ト ウェア、 および PL コンフ ィギュレーシ ョ ン イ メージを読み込みます。 このサンプルで

は、 これらすべてのイ メージは FSBL によ り読み込まれ、 FSBL ですべての認証および復号化が実行されます。 これ

がシステムをブートする唯一の方法ではあ り ませんが、 シンプルでセキュアな方法です。

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+: エンベデッ ド デザイン チュート リアル 103UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 104: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

ブート イ メージ内のさまざまなセクシ ョ ンはセキュ リティ レベルが異なり、 異なる場所に読み込まれます。 次の表

に、 終的なブート イ メージの内容を示します。

このチュート リ アルでは、 第 6 章 「システム デザイン例」 を使用して作成したバイナリ を、 すべてのセキュ リティ

機能を有効にしてブート イ メージに統合します。 このセクシ ョ ンでは、 PL ビッ ト ス ト リームをセキュア ブート フ

ローの一部と して追加する方法も示します。 第 6 章 「システム デザイン例」 の手順に 「ビルド設定の変更」 まで

従って必要なファイルをすべて作成してから、 このセクシ ョ ンに戻り ます。

ブート イ メージでセキュ リティ機能を有効にするには、 2 つの方法があ り ます。 初の方法では、 テキス ト エディ

ターを使用して BIF ファ イルを手動で作成し、 その BIF ファ イルを使用して Bootgen でキーを作成します。 これによ

り、 セキュ リ ティ機能を有効にした BIF ファ イルのセクシ ョ ンを特定できます。 2 つ目の方法では、 SDK の Create

Boot Image ウ ィザードを使用します。 同じセキュ リ ティ機能を示します。 2 つ目の方法では、 便宜上 初の方法と同

じキーを使用します。

認証用のキーの生成

キーの生成方法は複数あ り ます。 Bootgen、 カスタマイズされたキー ファ イル、 OpenSSL、 ハード ウェア セキュ リ

ティ モジュール (HSM) を使用する方法などがあ り ます。 このチュート リ アルでは、 Bootgen を使用します。 Bootgen

で作成したファイルは、 ほかのキー ソースからのユーザー指定キーを含むファイルを作成する際にテンプレート と

して使用できます。

Bootgen を使用してキーを作成するには、 BIF ファ イルを生成して変更する必要があ り ます。 このチュート リ アルの

キー生成セクシ ョ ンでは、 これらの BIF ファ イルをテキス ト エディ ターを使用して手動で作成します。 その次の

ブート イ メージのビルド セクシ ョ ンでは、これらの BIF ファ イルを SDK の Create Boot Image ウ ィザードを使用して

作成する方法を示します。

表 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. 2018.1 からは、 U-Boot で Linux のセキュア認証読み込みは実行されません。 U-Boot の代わりに FSBL で Linux イ メージがメモ

リ アドレスに読み込まれ、 U-Boot が使用されてそのメモ リ アドレスにジャンプします。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 104UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 105: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

RSA 秘密/公開キー ペアの作成

この例では、 プライマ リおよびセカンダ リのキーを PEM フォーマッ トで作成します。 キーは、 Bootgen のコマンド

ライン オプシ ョ ンを使用して生成されます。 または、 OpenSSL などの外部ツールを使用してキーを作成できます。

次の手順に従って RSA 秘密/公開キー ペアを作成します。

1. SDK のシェルを起動します。

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. ppk0.pem および ssk0.pem ファ イルが BIF ファ イルで指定された場所 (c:\edt\secure_boot_sd\keys)

に生成されているこ とを確認します。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 105UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 106: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

RSA 秘密/公開キー ペアで公開キーの SHA3 を生成

次に示す手順は、 eFUSE モードの RSA 認証でのみ実行する必要があ り、 ブート ヘッダーモードの RSA 認証ではス

キップできます。 sha3.txt からの 384 ビッ ト を eFUSE にプログラムして、 eFUSE モードの RSA 認証に使用できま

す。 詳細は、 『BBRAM および eFUSE のプログラ ミ ング』 (XAPP1319) [参照 13] を参照してください。

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

}

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) [参照 13]

を参照してください。 キーの取り消しを使用する予定がない場合は、 このセクシ ョ ンをスキップできます。

2 つ目の RSA 秘密/公開キー ペアを作成し、 この PPK の SHA3 を生成するには、「RSA 秘密/公開キー ペアの作成」 お

よび 「RSA 秘密/公開キー ペアで公開キーの SHA3 を生成」 の手順を繰り返します。

1. 前のセクシ ョ ンの手順を psk0.pem、 ssk0.pem、 および ppk0_digest.txt をそれぞれ psk1.pem、ssk1.pem、 および ppk1_digest.pem に置き換えて実行します。 このファイルを key_generate_keys_1.bif とい う名前で保存します。 この .bit ファ イルは次のよ うにな り ます。

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

}

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 106UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 107: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

2. 次の bootgen コマンドを実行して RSA 秘密/公開キー ペアを作成します。

bootgen -p zu9eg -arch zynqmp -generate_keys auth pem -image key_generation_1.bif

3. key_generation_1.bif ファ イルに authentication = rsa 属性を追加します。 .bit ファ イルは次のよ

うになり ます。

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) に生成されているこ とを確認します。

ブート ヘッダー認証の有効化

ブート ヘッダー認証モードでは、 ROM での PPK の eFUSE ハッシュ、 PPK の取り消しステータス、 およびセカンダ

リ キーのセッシ ョ ン ID のチェッ クがスキップされます。 このモードでは eFUSE をプログラムする必要がないので、

テス トおよびデバッグに便利です。 このモードは、 デバイスで RSA_EN eFUSE をプログラムするこ とによ り恒久的

に無効にできます。 これによ り、 eFUSE チェッ クを使用した RSA 認証が強制的に実行されるよ うにな り ます。

フ ィールドに展開されたシステムでは、 RSA_EN eFUSE を使用して eFUSE チェッ クが強制的に実行されるよ うに

し、 ブート ヘッダー認証は無効にしてください。

[fsbl_config] 行に bh_auth_enable 属性を追加します。 .bit ファ イルは次のよ うになり ます。

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

}

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 107UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 108: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

機密性のためのキーの生成

イ メージの機密性については 「ブート イ メージの機密性と 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[aeskeyfile]fsbl_a53.nky[bootloader, authentication = rsa, encryption = aes]fsbl_a53.elf[aeskeyfile]pmu_fw.nky[destination_cpu = pmu, authentication = rsa, encryption = aes]pmu_fw.elf[aeskeyfile]edt_zcu102_wrapper.nky[destination_device = pl, authentication = rsa, encryption =

aes]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]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 保護の有効化

このセクシ ョ ンでは、 差分電力解析 (DPA) への対策に有効な操作キーとキー ローリ ングの使用手順を示します。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 108UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 109: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

操作キーの使用の有効化

操作キーを使用する と、 デバイス キーを使用して暗号化される情報の量が制限されます。 操作キーの使用を有効に

するには、 .bit ファ イルの [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[aeskeyfile]fsbl_a53.nky[bootloader, authentication = rsa, encryption = aes]fsbl_a53.elf[aeskeyfile]pmu_fw.nky[destination_cpu = pmu, authentication = rsa, encryption = aes]pmu_fw.elf[aeskeyfile]edt_zcu102_wrapper.nky[destination_device = pl, authentication = rsa, encryption =

aes]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]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

}

キー ローリングを使用した暗号化の有効化

キー ローリ ングを使用する と、 ほかのキーを使用して暗号化される情報量が制限されます。 キー ローリ ングを有効

化するには、 .bit ファ イルでパーティシ ョ ンごとに 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[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 = 0x1000000, destination_cpu = a53-0, authentication = rsa]image.ub

}

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 109UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 110: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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、 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) [参照 13] を参照してください。

PUF 登録ソフ ト ウェアはレッ ド (非暗号化) キーを入力と して受け取り、CHASH と AUX も含むシンド ローム データ

(ヘルパー データ ) およびブラ ッ ク (暗号化) キーを出力します。PUF ブート ヘッダー モードでは、 この出力はブート

ヘッダーに挿入されます。 PUF eFUSE モードでは、 この出力は eFUSE にプログラムされます。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 110UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 111: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

1. SDK で、 [tmr_psled_r5_bsp] を右ク リ ッ ク し、 [Board Support Package Settings] をク リ ッ ク します。

2. [Supported Libraries] で [xilskey] および [xilsecure] を必ずオンにします。

3. [OK] をク リ ッ ク します。 [Project Explorer] ビューで [tmr_psled_r5_bsp] を展開して [system.mss] をダブルク リ ッ ク

します。

4. [Libraries] セクシ ョ ンまでスクロール ダウンします。 xilskey 6.4 の [Import Examples] をダブルク リ ッ ク します。

5. 表示されたダイアログ ボッ クスで、 [xilskey_puf_registration] をオンにします。 [OK] をク リ ッ ク します。

X-Ref Target - Figure 5-34

図 5-34: [Supported Libraries] で [xilskey] および [xilsecure] をオンにする

X-Ref Target - Figure 5-35

図 5-35: PUF 登録サンプルのインポート

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 111UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 112: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

6. [Project Explorer] ビューで [tmr_psled_r_bsp_xilskey_puf_registration_1] を右ク リ ッ ク します。 [Rename] をク リ ッ ク

し、開いた [Rename Resource] ダイアログ ボッ クスで [New name] に 「puf_registration」 と入力して [OK] をク リ ッ

ク します。

7. [Project Explorer] ビューで、 [puf_registration] → [src] を展開して [xilskey_puf_registration.h] をダブル

ク リ ッ ク し、 SDK を開きます。

8. xilskey_puf_registration.h を次のよ うに変更します。

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_IV を次のよ うに設定します。 初期化ベクター (IV) はユーザーが選択する 12 バイ ト データです。

#define XSK_PUF_IV "E1757A6E6DD1CC9F733BED31"

9. ファ イルを保存して閉じます。

10. [Project Explorer] ビューで [puf_registration project] を右ク リ ッ ク し、 [Build Project] をク リ ッ ク します。

X-Ref Target - Figure 5-36

図 5-36: PUF 登録プロジェク トの名前の変更

X-Ref Target - Figure 5-37

図 5-37: ブート ヘッダー モードでの PUF 登録

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 112UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 113: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

11. SDK で [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] をク リ ッ ク します。 パーティシ ョ ンを追加し、 puf_registration アプリ ケーシ ョ ン

のデスティネーシ ョ ン CPU を R5-0 に設定します。

C:\edt\edt_zcu102\edt_zcu102.sdk\fsbl_a53\Debug\fsbl_a53.elfC:\edt\edt_zcu102\edt_zcu102.sdk\puf_registration\Debug\puf_registration.elf

16. [Create Image] をク リ ッ ク して、 PUF 登録用のブート イ メージを作成します。

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-12 に示すよ うに設定します。

21. 通信ターミナルのメニュー バーで、 [File] → [Log] をク リ ッ ク します。 ダイアログ ボッ クスに

「C:\edt\secureboot_sd\puf_registration\puf_registration.log」 と入力します。

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

23. puf_registration ソフ ト ウェアが実行されたら、 通信ターミナルを終了します。

24. puf_registration.log の内容は 「ブート ヘッダー モードでの PUF の使用」 で使用されます。 テキス ト エ

ディ ターで puf_registration.log を開きます。

X-Ref Target - Figure 5-38

図 5-38: PUF 登録ソフ トウェア

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 113UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 114: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

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 に保存します。

ブート ヘッダー モードでの PUF の使用

前のセクシ ョ ンの .bif ファイルを次の手順に従ってアップデート し、 ブート ヘッダー モードでの PUF の使用を有

効にします。 このセクシ ョ ンでは、 PUF 登録プロセスで作成したシンド ローム データ とブラ ッ ク キーを使用します。

1. 「キー ローリ ングを使用した暗号化の有効化」 セクシ ョ ンからの .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[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 = 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

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 114UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 115: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

SDK の Create Boot Image ウィザードを使用したシステム例

前のセクシ ョ ンでは、 BIF ファ イルを手動で編集して、 さまざまなセキュ リティ機能 (認証、 機密性、 DPA 保護、 お

よびブラ ッ ク キーの格納) を有効にしました。 このセクシ ョ ンでは、 同じ操作を SDK の Create Boot Image ウ ィザー

ドを開始点と して使用して実行します。 Create Boot Image ウ ィザードで基本の BIF ファ イルを作成し、 その後ウ ィ

ザードでサポート されていないセキュ リティ機能をテキス ト エディ ターを使用して追加します。

1. cd コマンドを使用して bootgen_lab_files ディ レク ト リに移動します。

cd C:\edt\secure_boot_sd\bootgen_files

2. 前の例からの次のデータをこの例にコピーします。

cp ../keys/*nky .cp ../Keys/*pem .cp ../keys/black_iv.txt .cp ../keys/helper_data.txt .cp ../keys/*.elf .cp ../keys/edt_zcu102_wrapper.bit .cp ../keys/image.ub .

3. [Programs] → [Xilinx Design Tools] → [SDK 2018.1] → [Xilinx SDK 2018.1] をク リ ッ ク して SDK を起動します。

4. SDK のメニュー バーから [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 を入力します。

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 115UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 116: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

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] をオンにします。

X-Ref Target - Figure 5-39

図 5-39: 認証の有効化

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 116UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 117: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

10. 暗号化を有効にします。

a. [Encryption] タブをク リ ッ ク します。

b. [Use Encryption] をオンにします。

c. [Key File] で [Browse] ボタンをク リ ッ ク して fsbl_a53.nky ファ イルを選択します。

d. [Operational Key] をオンにします。

11. [Basic] タブをク リ ッ ク し、 ブート イ メージにバイナリ を追加します。

X-Ref Target - Figure 5-40

図 5-40: 暗号化の有効化

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 117UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 118: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

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-41

図 5-41: FSBL バイナリの追加

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 118UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 119: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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-42

図 5-42: PMU ファームウェア バイナリの追加

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 119UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 120: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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-43

図 5-43: PL ビッ トス ト リームの追加

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 120UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 121: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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] に設定します。

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

X-Ref Target - Figure 5-44

図 5-44: Arm ト ラステッ ド ファームウェアの追加

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 121UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 122: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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-45

図 5-45: R5 アプリケーシ ョ ン バイナリの追加

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 122UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 123: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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-46

図 5-46: U-Boot ソフ トウェアの追加

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 123UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 124: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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] に 0x1000000 を入力します。

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

X-Ref Target - Figure 5-47

図 5-47: Linux ブート イメージの追加

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 124UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 125: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

19. [Create Image] をク リ ッ ク します。

20. design_bh_bkey_keyrolling.bif は次のよ うになり ます。

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 = 0x1000000, destination_cpu = a53-0]image.ub

}

21. この BIF ファ イルにはまだ足りないセキュ リティ機能があ り ます。 これらの機能は Create Boot Image ウ ィザー

ドでサポート されていません。 足りない機能は、 パーティシ ョ ンごとの .nky ファ イル、 キー ローリ ング、 およ

びブラ ッ ク キーの格納です。

X-Ref Target - Figure 5-48

図 5-48: 最終的なブート イメージの作成

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 125UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 126: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

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 = 0x1000000, 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[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[aeskeyfile]pmu_fw.nky[encryption = aes, authentication = rsa, destination_cpu = pmu]pmu_fw.elf[aeskeyfile]edt_zcu102_wrapper.nky[encryption = aes, authentication = rsa, destination_device =

pl]edt_zcu102_wrapper.bit[authentication = rsa, destination_cpu = a53-0, exception_level = el-3]bl31.elf[aeskeyfile]tmr_psled_r5.nky[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 = 0x1000000, destination_cpu = a53-0]image.ub

}

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 126UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 127: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

24. 暗号化された各パーティシ ョ ンに blocks 属性を追加し、 キー ローリ ング有効にします。 BIF ファ イルは次の

よ うになり ます。

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, blocks = 1728(*)]fsbl_a53.elf[aeskeyfile]pmu_fw.nky[encryption = aes, authentication = rsa, destination_cpu = pmu, blocks =

1728(*)]pmu_fw.elf[aeskeyfile]edt_zcu102_wrapper.nky[encryption = aes, authentication = rsa, destination_device = pl, blocks =

1728(*)]edt_zcu102_wrapper.bit[authentication = rsa, destination_cpu = a53-0, exception_level = el-3]bl31.elf[aeskeyfile]tmr_psled_r5.nky[encryption = aes, 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 = 0x1000000, 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

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 127UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 128: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

セキュア ブート イメージを使用したシステムのブート

このセクシ ョ ンでは、 前のセクシ ョ ンで作成した 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 をオフ)。

4. シ リアル ターミナルを ZCU102 に接続します (115200、 8 データ ビッ ト 、 1 停止ビッ ト、 パリ ティなし )。

5. ZCU102 に電源を投入します。

6. ターミナルに B-Boot の ZynqMP> プロンプ トに到達したら、 「bootm 0x1000000」 と入力します。

X-Ref Target - Figure 5-49

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

X-Ref Target - Figure 5-50

図 5-50: U-Boot プロンプ ト

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 128UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 129: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

7. 次の資格情報を使用して、 Linux にログインします。

ログイン: root

パスワード : root

「サンプル デザイン 1: GPIO、 タイマー、 および割り込みの使用」 の手順に従って 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 属性を削除します。

X-Ref Target - Figure 5-51

図 5-51: Linux ログイン

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 129UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 130: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 5 章: ブートおよびコンフ ィギュレーシ ョ ン

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 = 0x1000000, destination_cpu = a53-0, authentication = rsa]image.ub

}

Zynq UltraScale+: エンベデッ ド デザイン チュート リアル 130UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 131: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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 ベアメ タル アプリ ケーシ ョ ンが同時に実行されるよ うに

設定されています。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 131UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 132: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

ハードウェアの設定

このデザインの 初の手順と して、 PS セクシ ョ ンと PL セクシ ョ ンを設定します。 これは Vivado IP インテグレー

ターで実行できます。 まず Vivado IP カタログから必要な IP を追加し、 PS サブシステムのブロ ッ クにコンポーネン

ト を接続します。

1. Vivado Design Suite が既に開いている場合は、 図 2-2 に示すブロ ッ ク図から開始して手順 4 に進みます。

2. 作成した Vivado プロジェク ト を開きます。

C:/edt/edt_zcu102/edt_zcu102.xpr

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: エンベデッ ド デザイン チュート リアル 132UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 133: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

3. [AXI Timer] を再度ダブルク リ ッ ク して、 次の図のよ うに IP を設定します。

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

5. ブロ ッ ク図を右ク リ ッ ク し、 [Add IP] をク リ ッ ク します。

6. AXI GPIO を検索し、 [AXI GPIO] をダブルク リ ッ ク してブロ ッ ク図に追加します。

7. 手順 5 および手順 6 を繰り返して、 AXI GPIO IP の別のインスタンスを追加します。

X-Ref Target - Figure 6-3

図 6-3: AXI Timer の [Re-customize IP] ダイアログ ボックス

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 133UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 134: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

8. axi_gpio_0 をダブルク リ ッ ク し、GPIO の [Board Interface] ド ロ ップダウン リ ス トから [push button 5bits] を選択し

ます。

9. [OK] をク リ ッ ク して、 プッシュボタン向けの AXI_GPIO 設定を確定します。

10. [axi_gpio_1] をダブルク リ ッ ク します。

11. 次の図に示すよ うに、 GPIO の [Board Interface] ド ロ ップダウン リ ス トから [led 8bits] を選択して、 PL LED

向けに 「axi_gpio_1」 と して設定します。

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: エンベデッ ド デザイン チュート リアル 134UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 135: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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: エンベデッ ド デザイン チュート リアル 135UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 136: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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: エンベデッ ド デザイン チュート リアル 136UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 137: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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: エンベデッ ド デザイン チュート リアル 137UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 138: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

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

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

デザインの合成、 インプリ メンテーシ ョ ンの実行、 およびビッ トス ト リームの生成

1. デザインを合成します。 Flow Navigator で [Synthesis] → [Run Synthesis] をク リ ッ ク します。

2. 合成の開始前にプロジェク ト を保存するよ う メ ッセージが表示された場合は、 [Save] をク リ ッ ク します。

合成の実行中、 ウ ィンド ウの右上にステータス バーが表示されます。 このステータス バーは、 デザイン プロセ

スをとおして、 さまざまな理由によ り表示されます。 ステータス バーは、 プロセスがバッ クグランドで実行さ

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

合成が完了する と、 [Synthesis Completed] ダイアログ ボッ クスが開きます。

X-Ref Target - Figure 6-11

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

X-Ref Target - Figure 6-12

図 6-12: Run Synthesis

X-Ref Target - Figure 6-13

図 6-13: ステータ スバー

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 138UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 139: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

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

この場合も、 プロセスがバッ クグラウンドで実行されているこ とが、 ステータス バーによって示されます。 イ

ンプ リ メンテーシ ョ ンが完了する と、 [Implementation Completed] ダイアログ ボッ クスが開きます。

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

ビッ ト ス ト リームの生成が完了する と、 [Bitstream Generation Completed] ダイアログ ボッ クスが開きます。

5. [Cancel] をク リ ッ ク してウ ィンド ウを閉じます。

6. ビッ ト ス ト リームの生成が完了したら、 ハード ウェアを SDK にエクスポート します。

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

この例では、 Vivado から SDK を起動します。

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

[Export Hardware] ダイアログ ボッ クスが開きます。 [Include bitstream] がオンになっているこ と (デザインで、 PL

デザインとビッ ト ス ト リームが生成されている場合のみ)、 および [Export to] がデフォルト オプシ ョ ンの

[<Local to Project>] に設定されているこ とを確認します。

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

ハード ウェア モジュールが既にエクスポート されているこ とを示す警告メ ッセージが表示されます。

3. [OK] をク リ ッ ク して既存の HDF ファ イルを上書きします。

X-Ref Target - Figure 6-14

図 6-14: 既存のハードウェア ファイルの上書きを許可

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 139UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 140: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

4. ハードウェア ファ イルがエクスポート される と、 SDK で新しい HDF も検出され、 次の警告メ ッセージが表示

されます。

この警告メ ッセージでは、 SDK で新しい HDF に合わせてプロジェク ト をアップデートするかど うかも選択で

きます。

5. [Yes] をク リ ッ ク します。

これで、 SDK プロジェク トは新しい HDF ファ イルに合わせてアップデート されます。 これを検証するには、 既存プ

ロジェク トの BSP パッケージに追加された GPIO ド ラ イバーと AXI Timer ド ラ イバーを検索します。

X-Ref Target - Figure 6-15

図 6-15: アップデート された HDF の検出に関する SDK の警告メ ッセージ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 140UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 141: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

ソフ トウェアの設定

このユース ケースには、 R5 コアで実行するベアメ タル アプリ ケーシ ョ ンと、 APU Linux ターゲッ トで実行する

Linux アプリ ケーシ ョ ンがあ り ます。 ほとんどのソフ ト ウェア ブロ ッ クは、 第 3 章で説明したものと同様です。 こ

のサンプル デザインのソフ ト ウェアには、 PL ロジッ クに追加されたコンポーネン ト用の追加ド ライバーが必要で

す。 そのため、 このデザイン用に生成されたハード ウェア ファ イルを使用して SDK で新しいベアメ タル 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: エンベデッ ド デザイン チュート リアル 141UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 142: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

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

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

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

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

3.

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

New Project ウ ィザードが閉じ、 SDK によって tmr_psled_r5 アプリ ケーシ ョ ン プロジェク トが作成されて

[Project Explorer] ビューに表示されます。

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

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

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

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

9. [Browse] をク リ ッ ク し、 前に保存したデザイン ファ イル design-files/design1 フォルダーに移動します

(付録 B の 「その他のリ ソースおよび法的通知」 を参照)。

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

11. timer_psled_r5.c ファ イルを選択して追加します。

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

アプリ ケーシ ョ ンが自動的にビルド され、 コンソール ウ ィンド ウにステータスが表示されます。

表 6-1: タイマー ベースの RPU アプリケーシ ョ ン プロジェク ト作成時の設定

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

Application Project Project name tmr_psled_r5

Use default location オン

Hardware Platform edt_zcu102_wrapper_hw_platform_0

OS Platform standalone

Processor psu_cortexr5_0

Language C

Board Support Package [Use existing] をオンにして 「r5_bsp」 と入力。

Templates Available Templates Empty Application

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 142UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 143: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

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

注記: このセクシ ョ ンはオプシ ョ ンで、 アプリ ケーシ ョ ン用に異なる メモ リ属性を設定するためにリ ンカー スク リプ

ト を変更する方法を説明します。 これらの設定は第 2 章で作成した隔離によ り既に処理されているので、 この

チュート リ アルではこの手順はオプシ ョ ンです。 リ ンカー スク リプ トはソフ ト ウェア境界を作成するのに使用し、

隔離設定は XMPU に基づいて保護領域を不正アクセスから保護します。

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

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

3. リ ンカー スク リプ トの [Available Memory Regions] で、 psu_r5_ddr_0_MEM_0 (または psu_r5_ddr_0_MEM_1) の属

性を次のよ うに変更します。

[Base Address]: 0x70000000

[Size]: 0x10000000

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

よって異なる場合があ り ます。

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

のベース アドレスよ り上位にあ り、 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 章の 「ボード サポート パッケージの変

更」 を参照してください。

X-Ref Target - Figure 6-16

図 6-16: リンカー スクリプ トの変更

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 143UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 144: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

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

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

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

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

s

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

New Project ウ ィザードが閉じ、 SDK によって 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-2: 新しい Linux アプリケーシ ョ ン プロジェク ト作成時の設定

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

Application Project Project name ps_pl_linux_app

Use default location オン

OS Platform Linux

Processor psu_cortexA53

Language C

Compiler 64-bit

Templates Available Templates Linux Empty Application

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 144UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 145: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

ビルド設定の変更

このアプ リ ケーシ ョ ンでは、 pthread ライブラ リから Pthread を使用します。 Pthread ライブラ リ を次のよ うに追加し

ます。

1. [ps_pl_linux_app] を右ク リ ッ ク して、 [C/C++ Build] → [Settings] をク リ ッ ク します。

2. 次の図を参照して pthread ライブラ リ を追加します。

3. 両方のウ ィンド ウで [OK] をク リ ッ ク します。

アプリ ケーシ ョ ンが自動的にビルド され、 コンソール ウ ィンド ウにステータスが表示されます。

X-Ref Target - Figure 6-17

図 6-17: C/C++ ビルド設定

X-Ref Target - Figure 6-18

図 6-18: pthread ライブラリの追加

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 145UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 146: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

ブート イメージの作成

各イ メージの準備が完了したので、 ブート イ メージを作成して Zynq UltraScale+ にこれらのコンポーネン ト をすべて

ロード します。 これは、 SDK の Create Boot Image ウ ィザードを使用して、 次の手順に従って実行できます。 この例

では、 C:\edt\design1 にブート イ メージ BOOT.bin が作成されます。

1. SDK が起動していない場合は起動します。

2. 第 2 章で作成したプロジェク トに基づいてワークスペース パスを設定します。 次に例を示します。

C:\edt\edt_zcu102\edt_zcu102.sdk

3. [Xilinx] → [Create Boot Image] をク リ ッ ク します。

4. Create Boot Image ウ ィザードで図 6-19 に示すよ うに設定します。

5. 次の図に示すよ うに、 パーティシ ョ ンを追加します。

注記: パーティシ ョ ンを追加する手順の詳細は、 「SD ブートのブート シーケンス」 を参照してください。

注記: このブート イ メージには PL ビッ ト ス ト リーム edt_zcu102_wrapper.bit ([Partition Type] は [Datafile]、

[Destination Device] は [PL] に設定) が必要です。 ブート イ メージの作成時に、 ブート ローダーの直後にビッ ト ス

ト リーム ーティシ ョ ンを追加する必要があ り ます。 また、 このブート イ メージには、 R5 アプリ ケーシ ョ ンの

tmr_psled_r5.elf がパーティシ ョ ンと して追加されます。

X-Ref Target - Figure 6-19

図 6-19: SD ブート モードの Create Boot Image ウィザード

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 146UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 147: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

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\edt_zcu102\edt_zcu102.sdk\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 コネクタに接続します。

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

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

7. ポート設定では、 デバイス マネージャーで COM ポート を検証します。

ZCU102 ボードでは 4 つの USB UART インターフェイスが使用されています。

X-Ref Target - Figure 6-20

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

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 147UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 148: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

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-21

図 6-21: R5-0 ベアメ タル アプリケーシ ョ ン

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 148UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 149: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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-22

図 6-22: Linux ターミナル

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 149UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 150: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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: エンベデッ ド デザイン チュート リアル 150UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 151: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 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] をク リ ッ ク します。

エクスポート されたデザインは、

<edt_zcu102_Vivado_project_path>\edt_zcu102.sdk\edt_zcu102_wrapper.hdf にあ り ます。

この例では、 C:\edt\edt_zcu102\edt_zcu102.sdk\edt_zcu102_wrapper.hdf に保存されます。

12. HDF ファ イルを Linux ホス ト マシンにコピーします。

次のセクシ ョ ンでは、 ハード ウェア設定用に Linux をビルドする手順と、 GPU および X Window System 用の追加ソ

フ ト ウェア パッケージを含める手順を説明します。

X-Ref Target - Figure 6-23

図 6-23: ディスプレイ ポートのレーンの選択

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 151UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 152: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

PetaLinux を使用した設定の変更と Linux イメージの構築

新たに変更されたハード ウェアに合わせて PetaLinux BSP を再設定します。 このセクシ ョ ンでは、 「サンプル プロ

ジェク ト : PetaLinux を使用した Linux イ メージの作成」 で作成された PetaLinux プロジェク ト を使用します。

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

$ cd xilinx-zcu102-2018.1

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

3. 次のコマンドを実行して BSP を再設定します。

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

[PetaLinux Configuration] ウ ィンド ウが開きます。

4. 追加の設定を実行せずにウ ィンド ウの内容を保存して閉じます。

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

5. ザイ リ ンクス アンサー 69248 の手順に従って、 デュアル レーン ディ スプレイ ポートのデバイス ツ リーを変更

します。 これらの変更が反映された system-user.dtsi は 「このチュート リ アルのデザイン ファ イル」 から

入手可能です。

6. 既存のブート ローダー イ メージを消去します。 これは、 新しいハード ウェア デザインに合わせてブート ロー

ダーを再作成するためです。

$ 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 を petalinux-image.bbappend に追加します。 これは次の場所にあ り ます。

<plnx_project>/project-spec/meta-user/recipes-core/images/petalinux-image.bbappend

このアプリケーショ ンによ り、 ファイルは次のよ うになり ます。 新しいアプリケーシ ョ ンは太字で示しています。

IMAGE_INSTALL_append = " peekpoke"IMAGE_INSTALL_append = " gpio-demo"IMAGE_INSTALL_append = " tricube"

3. このアプ リ ケーシ ョ ンをビルドする手順およびライブラ リの詳細は、 tricube/tricube.bb のレシピを参照

してください。 上記アプリ ケーシ ョ ンのビルド時に含まれる X Window System (X11) パッケージは、 アプリ ケー

シ ョ ンによって異なり ます。 tricube.bb レシピに含まれるライブラ リは、 アプリ ケーシ ョ ンで使用された

パッケージに基づきます。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 152UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 153: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

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

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

7. Linux イ メージ ファ イル images.ub が images/linux ディ レク ト リに生成されているこ とを確認します。

8. 次のよ うなサンプル デザインのブート イ メージを生成します。

$ petalinux-package --boot --fsbl images/linux/zynqmp_fsbl.elf --fpga images/linux/edt-zcu102_wrapper.bit --u-boot

BOOT.BIN ブート イ メージが作成されます。 これは、 FSBL ブート ローダー、 PL ビッ ト ス ト リーム、 PMU ファーム

ウェア、 ATF、 および U-Boot で構成されています。 または、 「ブート イ メージの作成」 の手順に従ってこのブート

イ メージを作成します。

重要: この例では、 PetaLinux 2018.1 のデフォルト設定である X ウ ィンド ウ システムに基づく GPU パッケージを使用

します。 PetaLinux 2018.1 のフレーム バッファー fbdev ベースの GPU パッケージを有効にするには、

<PetaLinux_project>/project-spec/meta-user/conf/petalinuxbsp.conf に次の行を追加します。

DISTRO_FEATURES_remove_zynqmp = " x11"

「このチュート リ アルのデザイン ファ イル」 のサンプル eglfbdev アプリ ケーシ ョ ン (fdev ベース) を参照してくださ

い。 詳細は、 ザイ リ ンクス アンサー 68821 を参照してください。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 153UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 154: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

Linux をロード してターゲッ トで OpenGL ES アプリケーシ ョ ンを実行し、 ディスプレイ ポートにその結果を表示

SD カードの準備

Linux イ メージをビルド し、 アプリ ケーシ ョ ンもビルド したので、 次のイ メージを SD カードにコピーして SD カー

ドを ZCU102 ボードに挿入します。 また、 runtricube.sh ( 「このチュート リ アルのデザイン ファ イル」 から入手

可能) スク リプ ト も SD カードにコピーします。

• BOOT.BIN

• Image.ub

• runtricube.sh

Linux ターゲッ トでのアプリケーシ ョ ンの実行

ターゲッ ト をセッ トアップする

次の手順に従って、 ターゲッ ト をセッ ト アップします。

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

2. Micro USB ケーブルの一端を ZCU102 ボードの Micro USB ポート J83 に接続し、も う一端をホス ト マシンの空き

の USB ポートに接続します。

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 ポート を検証します。

X-Ref Target - Figure 6-24

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

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 154UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 155: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

第 6 章: システム デザイン例

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&

4. tricube アプリ ケーシ ョ ンを実行します。

# tricube

こ こで、 回転するマルチカラーの立方体と回転する三角形がディ スプレイ ポートに表示されます。 立方体もマルチ

カラーの三角形で作成されているこ とがわかり ます。 X-Ref Target - Figure 6-25

図 6-25: 回転する立方体と三角形

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 155UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 156: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 156UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

付録 A

セキュア ブートでの問題のデバッグこ こでは、 セキュ リ ティ エラーのデバッグ方法を説明します。 まず、 デバイスで PUF 登録が実行されたかど うかを

確認します。 続いて、 ブート イ メージのブート ヘッダーの値をチェッ ク します。

PUF 登録が実行されているかどうかの確認

次の手順で、 PUF 登録ソフ ト ウェアがデバイスで実行されたかど うかを確認できます。

1. SDK で、 [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 157: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

付録 B

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

ザイリンクス リソース

アンサー、 資料、 ダウンロード、 フォーラムなどのサポート リ ソースは、 ザイ リ ンクス サポート サイ ト を参照して

ください。

ソリューシ ョ ン センター

デバイス、 ツール、 IP のサポートについては、 ザイ リ ンクス ソ リ ューシ ョ ン センターを参照して ください。 デザイ

ン アシスタン ト 、 デザイン アドバイザリ、 ト ラブルシューティングのヒン ト などが含まれます。

Xilinx Documentation Navigator およびデザイン ハブ

Xilinx Documentation Navigator (DocNav) では、 ザイ リ ンクスの資料、 ビデオ、 サポート リ ソースにアクセスでき、 特

定の情報を取得するためにフ ィルター機能や検索機能を利用できます。 DocNav を開くには、 次のいずれかを実行し

ます。

• Vivado IDE で [Help] → [Documentation and Tutorials] をク リ ッ ク します。

• Windows で [スタート ] → [すべてのプログラム] → [Xilinx Design Tools] → [DocNav] → [DocNav] をク リ ッ ク し

ます。

• Linux コマンド プロンプ トに 「docnav」 と入力します。

ザイ リ ンクス デザイン ハブには、 資料やビデオへのリ ンクがデザイン タスクおよびト ピッ クごとにま とめられてお

り、 これらを参照するこ とでキー コンセプ ト を学び、 よ く ある質問 (FAQ) を参考に問題を解決できます。 デザイン

ハブにアクセスするには、 次のいずれかを実行します。

• DocNav で [Design Hubs View] タブをク リ ッ ク します。

• ザイ リ ンクス ウェブサイ トのデザイン ハブ ページを参照します。

注記: Documentation Navigator の詳細は、 ザイ リ ンクス ウェブサイ トの Documentation Navigator ページを参照してく

ださい。

注意: DocNav からは日本語版は参照できません。 ウェブサイ トのデザイン ハブ ページをご利用ください。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 157UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 158: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

DocNav に含まれるデザイン ハブを使用する と、 特定のデザイン タスクの資料、 ト レーニング、 情報をすばやく入手

できます。 このガイ ドで説明されるエンベデッ ド開発および手法には、 次のデザイン ハブが該当します。

• エンベデッ ドデザイン ハブ - PetaLinux ツール

• エンベデッ ド デザイン ハブ - ソフ ト ウェア開発キッ ト (SDK)

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

この資料に関連する 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. 『ザイ リ ンクス ソフ ト ウェア開発キッ ト (SDK) ユーザー ガイ ド : システム パフォーマンス解析』 (UG1145)

9. 『Zynq UltraScale+ Processing System 製品ガイ ド』 (PG201: 英語版、 日本語版)

10. 『Zynq-7000 SoC のメジャー ブート 』 (XAPP1309: 英語版、 日本語版)

11. 『Zynq-7000 SoC のセキュア ブート 』 (XAPP1175: 英語版、 日本語版)

12. 『Zynq-7000 SoC における暗号化キーの変更』 (XAPP1223: 英語版、 日本語版)

13. 『BBRAM および eFUSE のプログラ ミ ング』 (XAPP1319: 英語版、 日本語版)

サポート リソース

14. ザイ リ ンクス Zynq UltraScale+ MPSoC ソ リ ューシ ョ ン センター

15. ソフ ト ウェア ゾーン: https://japan.xilinx.com/products/design-tools/software-zone/sdsoc.html#docsdownload

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 158UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com

Page 159: Zynq UltraScale+ MPSoC · 2020. 9. 4. · Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 効率的なエンベデッド システムを 構築するためのハンディ

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

その他のリソース

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

ト レーニング リソース

ザイ リ ンクスでは、 この資料に含まれるコンセプ ト を説明するさまざまな ト レーニング コースおよび QuickTake ビデ

オを提供しています。 次のリ ンクから関連するビデオを参照して ください。

1. Vivado Design Suite QuickTake ビデオ チュート リ アル

お読みください: 重要な法的通知本通知に基づいて貴殿または貴社 (本通知の被通知者が個人の場合には 「貴殿」、 法人その他の団体の場合には 「貴社」。 以下同じ ) に開示される情報 (以下 「本情報」 といいます) は、 ザイ リ ンクスの製品を選択および使用するこ とのためにのみ提供されます。 適

用される法律が許容する 大限の範囲で、 (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-2018 Xilinx, Inc. Xilinx、 Xilinx のロゴ、 Artix、 ISE、 Kintex、 Spartan、 Virtex、 Vivado、 Zynq、 およびこの文書に含

まれるその他の指定されたブランドは、 米国およびその他各国のザイ リ ンクス社の商標です。 AMBA、 AMBA Designer、 Arm、

ARM1176JZ-S、 CoreSight、 Cortex、 PrimeCell、 Mali、 および MPCore は、 EU およびその他各国の Arm 社の商標です。 すべてのその

他の商標は、 それぞれの保有者に帰属します。

この資料に関するフ ィードバッ クおよびリ ンクなどの問題につきましては、 [email protected] まで、 または各ページの

右下にある [フ ィードバッ ク送信] ボタンをク リ ッ クする と表示されるフォームからお知らせください。 フ ィードバッ クは日本語で

入力可能です。 いただきましたご意見を参考に早急に対応させていただきます。 なお、 このメール アドレスへのお問い合わせは受

け付けており ません。 あらかじめご了承ください。

Zynq UltraScale+ MPSoC: エンベデッ ド デザイン チュート リアル 159UG1209 (v2018.1) 2018 年 6 月 5 日 japan.xilinx.com