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

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

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

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

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

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

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

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

セクション 改訂内容2020 年 6 月 3 日 バージョン 2020.1

資料全体 Vitis™ 統合ソフトウェア プラットフォーム用にアップデート。Vitis IDE および PetaLinux 2020.1 で検証。

改訂履歴

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 2

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

目次改訂履歴..........................................................................................................................................................................2

第 1 章: 概要................................................................................................................................................................. 5このガイドについて........................................................................................................................................................5Zynq UltraScale+ デバイスが提供するシングル チップ ソリューション................................................................... 6ザイリンクス デザイン ツールによる設計プロセスの高速化...................................................................................... 8必要なセットアップ........................................................................................................................................................9

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

第 3 章: PS サブシステム用ソフトウェアのビルド.......................................................................23Zynq UltraScale+ のプロセッシング ユニット........................................................................................................... 23Vitis IDE を使用したプラットフォームの作成............................................................................................................ 24サンプル プロジェクト: Arm Cortex-A53 から Hello World アプリケーションを実行........................................... 27cortexr5_0 のドメインの作成...................................................................................................................................... 32サンプル プロジェクト: Arm Cortex-R5 から Hello World アプリケーションを実行............................................. 32その他の情報.................................................................................................................................................................35サンプル プロジェクト: Vitis IDE でのベアメタル アプリケーション プロジェクトの作成.................................... 35プラットフォームでのソフトウェア プロジェクトの確認.........................................................................................39Arm Cortex-A53 ベースの APU 用 FSBL の作成......................................................................................................... 40サンプル プロジェクト: PetaLinux を使用した Linux イメージの作成.................................................................... 44

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

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 3

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

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

第 6 章: システム デザイン例......................................................................................................................132サンプル デザイン 1: GPIO、タイマー、および割り込みの使用............................................................................ 132デザイン サンプル 2: グラフィックスおよび DisplayPort ベース サブシステムの設定例.................................... 151

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

付録 B: その他のリソースおよび法的通知........................................................................................158ザイリンクス リソース...............................................................................................................................................158ソリューション センター........................................................................................................................................... 158Documentation Navigator およびデザイン ハブ.................................................................................................... 158このチュートリアルのデザイン ファイル................................................................................................................. 159参考資料...................................................................................................................................................................... 159お読みください: 重要な法的通知...............................................................................................................................160

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 4

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

第 1 章

概要このガイドについて

このガイドでは、Zynq® UltraScale+™ MPSoC を使用する場合のザイリンクス Vivado® Design Suite フローの概要を説明します。サンプル プロジェクトは、ザイリンクス ZCU102 Rev 1.0 および Rev 1.1 評価ボードをターゲットとしています。使用するツールは、Vitis™ 統合ソフトウェア プラットフォームです。このガイドのサンプル プロジェクトは、64 ビットの Windows 10 オペレーティング システムで実行するザイリンクス ツール、および 64 ビットの Linux オペレーティング システムで実行する PetaLinux を使用して作成されています。ほかの Windows インストールで別バージョンのツールを実行した場合、結果が異なることがあります。サンプル プロジェクトは、エンベデッド デザインの次の項目について紹介することに重点を置いています。注記: チュートリアルで説明されているハードウェア上で Linux をブートする各手順は、19.2 リリースに固有のものです。このガイドの Linux 部分の演習を行うために、Linux ホスト マシンにインストールする必要があります。第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフィギュレーション : Zynq UltraScale+ MPSoC プロセッシング システム (PS) を使用するシステムの作成、および Zynq UltraScale+ MPSoC のハードウェア プラットフォームの作成について説明します。この章では、簡単なデザインを例として使用し、ハードウェアおよびソフトウェアツールの概要を説明します。第 3 章: PS サブシステム用ソフトウェアのビルド: アプリケーション プロセッシング ユニット (APU)、リアルタイムプロセッシング ユニット (RPU) など、プロセッシング システム内のプロセッシング ブロックに応じてソフトウェアを設定および構築する手順を説明します。アプリケーション プロセッシング ユニット (APU) および RPU をターゲットとするベアメタル アプリケーションの作成も含まれています。ハードウェア プラットフォームのブート コンポーネントも確認します。第 4 章: Vitis デバッガーを使用したデバッグ: Vitis IDE のデバッグ機能を使用したソフトウェアのデバッグについて説明します。この章では、前のデザインを使用してソフトウェア ベアメタル (OS なし) を実行し、デバッグ方法を示します。また、Zynq UltraScale+ MPSoC のデバッグ コンフィギュレーションについても説明します。第 5 章: ブートおよびコンフィギュレーション : コンポーネントを統合して Zynq UltraScale+ システムを作成し、このシステムのブート イメージを作成する方法について説明します。この章の主旨は、ブートローダーを統合およびロードする方法を理解することです。第 6 章: システム デザイン例: 第 3 章: PS サブシステム用ソフトウェアのビルド で設定したソフトウェア ブロックを使用して Zynq UltraScale+ システムを作成する方法を紹介します。

サンプル プロジェクトツールを習得するための最良の方法は、使用してみることです。このガイドでは、説明に従ってツールを操作していきます。サンプル プロジェクトのセクションでは、サンプル プロジェクトの仕様のほかに、バックグランドで何が起こっているかも説明しています。各章およびサンプル プロジェクトは、エンベデッド デザインのさまざまな側面を紹介することを目的としています。サンプル プロジェクトを通して、各項目の学習を完了して次に進む形でフロー全体が説明されます。

第 1 章: 概要

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

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

その他の資料その他の資料は、付録 B: その他のリソースおよび法的通知 にリストされています。

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

次世代の Zynq デバイスである Zynq UltraScale+ MPSoC は、タスクごとに最適なエンジンを使用するという考えに基づいて設計されています。Zynq UltraScale+ は、多用途のプロセッシング システム (PS) と柔軟性および性能の高いプログラマグル ロジック (PL) をすべて 1 つのシステム オン チップ (SoC) に搭載したソリューションです。Zynq UltraScale+ MPSoC PS ブロックは、次のエンジンで構成されています。• クワッド コア Arm® Cortex™-A53 ベースのアプリケーション プロセッシング ユニット (APU)

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

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

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

• DisplayPort および SATA を含む一連の高速ペリフェラル注記: Cortex-R5F プロセッサは、オプションの Floating Point Unit (FPU) 拡張を含む Cortex-R5 プロセッサです。プログラマブル ロジックには、プログラマブル ロジック セルに加え、次に示す高性能ペリフェラルも統合されています。• PCI Express® 用統合ブロック• Interlaken 用統合ブロック• 100G Ethernet 用統合ブロック• システム モニター• ビデオ コーデック ユニットZynq UltraScale+ の PS と PL は、高性能で高帯域幅のさまざまな PS-PL インターフェイスを使用して厳密にまたは柔軟に連動させることができます。このような高度なデバイスのデザイン プロセスを単純にするため、ザイリンクスでは Vivado® Design Suite、VitisIDE、および Linux 用 PetaLinux ツールを提供しています。これらのツールは、FPGA と SoC を結合したデバイスのエンベデッド システム デザインを容易にするために必要なものをすべて提供します。これらのツールを組み合わせることで、ハードウェアとソフトウェアのアプリケーションの設計、デバッグ、コードの実行が可能になり、デザインを実際のボードに移行して検証および評価を実行できます。

Vitis 統合デザイン環境Vitis 統合ソフトウェア プラットフォームは、ザイリンクス エンベデッド プロセッサをターゲットとするエンベデッド ソフトウェア アプリケーションを開発する統合開発環境 (IDE) です。Vitis ソフトウェア プラットフォームでは、Vivado Design Suite で作成されたハードウェア デザインを使用できます。Vitis ソフトウェア プラットフォームは、Eclipse オープンソース規格に基づいています。ザイリンクスでは、多数の機能を追加しています。次のようなソフトウェア開発機能があります。

第 1 章: 概要

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 6

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

• 多機能 C/C/C++ コード エディターおよびコンパイル環境。• プロジェクト管理。• アプリケーション ビルド コンフィギュレーションおよび makefile の自動生成。• エラー ナビゲーション。• エンベデッド ターゲットをデバッグおよびプロファイルするための統合環境。• ソース コードのバージョン管理。• システム レベルのパフォーマンス解析。• FPGA をコンフィギュレーションするための特化ツール。• ブータブル イメージの作成。• フラッシュ メモリのプログラム。• スクリプト ベースのコマンド ライン ツール (XSCT)。Vitis 統合ソフトウェア プラットフォームの詳細は、『Vitis 統合ソフトウェア プラットフォームの資料: エンベデッドソフトウェア開発』 (UG1400: 英語版、日本語版) を参照してください。その他のコンポーネントは、次のとおりです。• エンベデッド ソフトウェア開発用のドライバーおよびライブラリ• Zynq UltraScale+ プロセッシング システム内の Arm Cortex-A53 および Arm Cortex-R5F MPCore プロセッサをターゲットにした C/C++ ソフトウェア開発用 Linaro GCC コンパイラ。

Vivado Design SuiteVivado Design Suite では FPGA インプリメンテーション用のさまざまな開発システム ツールが提供されています。ソフトウェアのプログラムが不要な場合はスタンドアロン ツールとしてインストールできます。Vitis IDE インストールにも含まれています。さまざまな Vivado Design Suite エディションをエンベデッド システム開発に使用できます。このガイドでは、Vitis IDE と共にインストールされた System Edition を使用します。次の図に、Vivado DesignSuiteのエディションを示します。

第 1 章: 概要

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 7

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

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

PetaLinux ツールPetaLinux ツール セットは、エンベデッド Linux システム開発キットです。このツールにより多面的な Linux ツールフローが提供され、Zynq UltraScale+ デバイスを含む ザイリンクス Zynq デバイス向けの Linux OS 環境を完全にコンフィギュレーション、ビルド、および運用できます。詳細は、『PetaLinux ツール資料: リファレンス ガイド』 (UG1144: 英語版、日本語版)を参照してください。PetaLinux ツールのデザイン ハブは、PetaLinux ツールの情報および資料へのリンクを提供します。詳細は、Documentation Navigator およびデザイン ハブを参照してください。

ザイリンクス デザイン ツールによる設計プロセスの高速化

Vivado Design Suite ツールを使用してハードウェアにデザイン ソースを追加できます。ツールには、既存のプロジェクトに IP を追加したり、クロックやリセットなどのポートの接続を作成したりするプロセスを簡単に実行できる IPインテグレーターが含まれます。Vivado ツールと IP インテグレーターは、一連のハードウェア システム開発を完了までサポートします。これには、Zynq UltraScale+ プロセッシング システムの仕様、ペリフェラル、各コンポーネントの接続、それらの詳細な設定などが含まれます。Vitis IDE は、ソフトウェア開発、ハードウェア アクセラレーション、およびプラットフォーム開発に使用できます。ソフトウェア アプリケーションのデバッグにも使用できます。

第 1 章: 概要

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 8

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

Zynq UltraScale+ プロセッシング システム (PS) は、FPGA (プログラマブル ロジック (PL)) をプログラムしなくても、ブートして動作させることができます。ただし、ファブリックでソフト IP を使用したり、EMIO を用いて PS ペリフェラルを接続するには、PL をプログラムする必要があります。PL のプログラムには、Vitis IDE または Vivado ハードウェア マネージャーを使用できます。エンベデッド デザイン プロセスの詳細は、『Vivado Design Suite チュートリアル: エンベデッド プロセッサ ハードウェア デザイン』 (UG940: 英語版、日本語版) を参照してください。Zynq UltraScale+ プロセッシング システムの詳細は、『Zynq UltraScale+ MPSoC Processing System LogiCORE IP 製品ガイド』 (PG201: 英語版、日本語版) を参照してください。

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

ハードウェア要件このチュートリアルでは、Zynq UltraScale+ ZCU102 評価ボードをターゲットとしています。このチュートリアルのサンプル プロジェクトは ZCU102 Rev 1 ボードを使用してテストされています。このガイドを活用するにあたって、評価ボードに同梱されている次のものを用意してください。• ZCU102 Rev1 評価ボード• AC 電源アダプター (12 VDC)

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

• USB-Micro JTAG 接続を介するプログラムおよびデバッグ用の USB Micro ケーブル• Linux ブート用の SD-MMC フラッシュ カード• ターゲット ボードとホスト マシンの接続用のイーサネット ケーブル• DisplayPort (DP) 機能を備えたモニター (1080P 以上の解像度)

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

インストール要件Vitis 統合デザイン環境および Vivado Design Suite2020.1 Vitis IDE がインストールされていることを確認します。ツール バージョンが最新であるかどうかは、https://japan.xilinx.com/support/download.html で確認できます。Vitis 2020.1 ソフトウェア開発プラットフォームがインストールされていることを確認します。Vitis IDE は、ハードウェアおよびソフトウェアが 1 つのパッケージとして提供されるザイリンクス統合ツールです。Vitis IDE をインストールすると、Vivado Design Suite および Vitis IDE の両方が自動的にインストールされます。インストール時に余分にオプションを選択する必要はありません。次にインストール時のオプション ウィンドウを示します。

第 1 章: 概要

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 9

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

図 2: Vivado Design Suite を含む Vitis IDE インストーラー

Vitis のインストールの詳細は、『Vitis 統合ソフトウェア プラットフォームの資料: エンベデッド ソフトウェア開発』(UG1400: 英語版、日本語版) を参照してください。

PetaLinux ツールこのチュートリアルの Linux 部分の演習で実行する PetaLinux ツールをインストールします。PetaLinux ツールは、次のいずれかが稼働している Linux ホスト システムで実行します。• Red Hat Enterprise Workstation/Server 7.4、7.5、7.6 (64 ビット)

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

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

このツールは、専用 Linux ホスト システム、または Windows 開発プラットフォーム上でこれらの Linux オペレーティング システムのいずれかが稼働している仮想マシンを使用できます。PetaLinux ツールを選択したシステムにインストールするには、次を実行する必要があります。• PetaLinux 2020.1 ツールをザイリンクス ウェブサイトからダウンロードする。• ZCU102 PetaLinux BSP (ZCU102 BSP (プロダクション シリコン)) を 2020.1 のダウンロード ページからダウンロードする。

第 1 章: 概要

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 10

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

• ワークステーションまたは仮想マシンに共通のシステム パッケージおよびライブラリを追加する。詳細は、『PetaLinux ツール資料: リファレンス ガイド』 (UG1144: 英語版、日本語版) の「インストール要件」を参照してください。

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

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

• 100 GB のハードディスク空き容量PetaLinux パッケージの展開PetaLinux ツールのインストールは簡単です。オプションを指定しない場合、PetaLinux ツールは現在のディレクトリにインストールされます。インストール先パスをオプションで指定することもできます。たとえば、PetaLinux ツールを /opt/pkg/petalinux/2020.1 にインストールするには、次のコマンドを使用します。$ mkdir -p /opt/pkg/petalinux/2020.1$ ./petalinux-v2020.1-final-installer.run /opt/pkg/petalinux/2020.1

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

ソフトウェアのライセンスザイリンクス ソフトウェアには FLEXnet ライセンスが使用されています。ソフトウェアを初めて起動する際、ライセンスの検証プロセスが実行されます。ライセンス検証で有効なライセンスが検出されない場合、ライセンス ウィザードに従ってライセンスを取得し、インストールしたツールでそのライセンスを使用できるようにします。ソフトウェアのフル バージョンが不要な場合は、評価版ライセンスを使用できます。インストールの手順と詳細は、『VivadoDesign Suite ユーザー ガイド: リリース ノート、インストール、およびライセンス』 (UG973: 英語版、日本語版) を参照してください。

チュートリアルのデザイン ファイル1. ザイリンクス ウェブサイトからリファレンス デザイン ファイルをダウンロードします。2. ZIP ファイルの内容を書き込み可能なディレクトリに抽出します。

ZIP ファイルの内容を表示するには、ZIP ファイルをダウンロードして C:\edt に解凍します。デザイン ファイルには、すべてのセクション用の XSA ファイル、ソース コード、およびビルド済みイメージが含まれています。

第 1 章: 概要

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 11

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

第 2 章

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

ザイリンクス Vivado® Design Suite の概要を学んだので、次にこのツールを使用して Zynq® UltraScale+™ MPSoC プロセッシング システム (PS) を使用するエンベデッド システムの開発方法を学びます。Zynq UltraScale+ デバイスは、クワッドコア Arm® Cortex™-A53 ベース APU、デュアルコア Arm® Cortex™-R5FRPU、Mali™ 400 MP2 GPU、および複数のハード IP (Intellectual Property) コンポーネント、およびプログラマブル ロジック (PL) で構成されています。これらは次の 2 つの方法で使用できます。• Zynq UltraScale+ PS は、ファブリック IP を追加せずに、スタンドアロン モードで使用できます。• IP コアをファブリックでインスタンシエートし、PS と PL の組み合わせとして Zynq UltraScale+ PS に接続できます。

Zynq UltraScale+ システムのコンフィギュレーションZynq UltraScale+ システム デザインの作成には、ブート デバイスおよびペリフェラルを適切に選択する PS のコンフィギュレーションが含まれます。PS ペリフェラルと利用可能な MIO の接続がデザイン要件を満たしていれば、ビットストリームは必要ありません。この章では、ビットストリームを必要としない簡単な PS ベースのデザインの作成手順を説明します。この章では、基本的な PS コンフィギュレーションに加え、保護されたメモリおよびペリフェラルを含むサブシステムを作成するための 隔離設定 定の概念についても説明します。PS ブロックでのこのアドバンス コンフィギュレーション モードを使用すると、マスターと専用メモリおよびペリフェラルで構成されるサブシステムを設定できます。この保護は、Zynq UltraScale+ PS ブロックの XMPU および XPPU により提供されます。隔離設定ではコンポーネントの TrustZone 設定も可能であり、セキュアおよび非セキュア環境でシステムを作成および設定できます。

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

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

デザインの開始1. Vivado Design Suite を起動します。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 12

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

2. Vivado の [Quick Started] セクションで [Create Project] をクリックし、New Project ウィザードを開きます。3. ウィザードの各ページで次の表の情報に基づいて設定を選択します。

表 1: New Project ウィザードのオプションウィザード ページ システム プロパティ 設定または使用するコマンド

Project Name Project name edt_zcu102

Project location C:/edt

Create project subdirectory オンProject Type Specify the type of project to create

(RTL または合成済み EDIF から開始可能)

RTL Project

Do not specify sources at this time オフAdd Sources 変更なし。Add Constraints 変更なし。Default Part 選択 Boards

Display Name Zynq UltraScale+ ZCU102 評価ボードNew Project Summary プロジェクト サマリ プロジェクト サマリを確認

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

ブロック デザイン プロジェクトの作成IP インテグレーターを使用し、ブロック デザイン プロジェクトを作成します。1. Flow Navigator で [IP Integrator] → [Create Block Design] をクリックします。

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

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 13

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

表 2: Create Block Design ウィザードの設定ウィザード ページ システム プロパティ 設定または使用するコマンド

Create Block Design Design name edt_zcu102

Directory <Local to Project>

Specify source set Design Sources

3. [OK] をクリックします。[Diagram] ウィンドウがこのデザインが空であることを示すメッセージと共に表示されます。デザインを開始するには、カタログから IP を追加します。

4. [Add IP] をクリックします。5. [Search] フィールドに「zynq」と入力して Zynq デバイス IP を検索します。6. [Zynq UltraScale+ MPSoC IP] をダブルクリックしてブロック デザインに追加します。次の図に示すように、[Diagram] ウィンドウに Zynq UltraScale+ MPSoC プロセッシング システム IP ブロックが表示されます。

Vivado での Zynq UltraScale+ MPSoC プロセッシング システムの設定Zynq MPSoC プロセッシング システムをデザインに追加したので、オプションを設定します。1. [Diagram] ウィンドウで、[Zynq UltraScale+ Processing System] ブロックをダブルクリックします。次の図に示す [Re-customize IP] ダイアログ ボックスが開きます。デフォルトでは、プロセッシング システムにペリフェラルは接続されていません。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 14

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

2. [Cancel] をクリックし、デザインを変更せずにウィザードを閉じます。ヒント: [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+ Processing System ブロックをダブルクリックします。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 15

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

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

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

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 16

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

このページでは、低速ペリフェラルおよび高速ペリフェラルを設定できます。ここでは、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] をオフにします。PS-PL インターフェイスは次の図のようになります。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 17

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

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

隔離設定このセクションは参照用で、さまざまなユース ケースでの隔離設定の重要性について説明します。隔離設定が必要なケースは複数あります。隔離設定はオプションで、システム要件に応じて設定できます。通常、安全性/セキュリティが重要なユース ケースでは、安全部分と非安全部分またはセキュア部分と非セキュア部分の間に隔離が必要です。これには、マスター (RPU など) とそのスレーブ (メモリ領域およびペリフェラル) を含む安全/セキュア領域を、デザインの非安全/非セキュア領域から隔離する必要があります。この場合、専用ペリフェラルまたはメモリ ロケーションに TrustZone 属性を適用できます。このようにすると、セキュア スレーブにアクセスできるのは、有効なトラステッド マスターのみになります。隔離が必要な別のユース ケースとして、プラットフォームとパワー マネージメントがあります。この場合、マスターとスレーブを含む独立したサブシステムを作成できます。これは、ランタイム パワーマネージメント、あるいはアップグレードまたは回復のためのウォーム再起動中に依存性を特定するために使用されます。Zynq UltraScale+ 再起動ソリューション Wiki ページに、このユース ケースの例があります。Zynq UltraScale+のザイリンクス メモリ保護ユニット (XMPU) およびザイリンクス ペリフェラル保護ユニット (XPPU) は、メモリおよびペリフェラルのハードウェア保護を提供します。これらの保護ユニットは、TrustZone (TZ) およびZynq UltraScale+ MPSoC SMMU で提供される隔離を補足します。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 18

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

Zynq UltraScale+ の XMPU および XPPU を使用すると、SoC レベルでリソースを隔離できます。Arm MMU およびTrustZone を使用すると、Arm Cortex-A53 コア APU 内での隔離が可能です。ハイパーバイザーおよび SMMU を使用すると、Cortex-A53 コア間の隔離を設定できます。これらの保護ユニットは、Zynq UltraScale+ PS IP ウィザードの[Isolation Configuration] ページで設定します。隔離設定は初期化ファイルとしてエクスポートされ、ブートローダー(この場合は FSBL (第 1 段階ブートローダー)) の一部として読み込まれます。詳細は、『Zynq UltraScale+ デバイス テクニカル リファレンス マニュアル』 (UG1085: 英語版、日本語版) を参照してください。1. ブロック図で [Zynq UltraScale+ Processing System] ブロックをダブルクリックします。2. [Switch To Advanced Mode] をオンにします。

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

3. 隔離を設定する場合は、[Isolation Configuration] をクリックします。このチュートリアルでは、隔離設定は使用しません。

4. [OK] をクリックして [Re-customize IP] ダイアログ ボックス閉じます。注記: 隔離設定の作成方法の詳細は、『Zynq UltraScale+ MPSoC での分離手法』 (XAPP1320: 英語版、日本語版)を参照してください。

デザインおよび接続ポートの検証次の手順に従ってデザインを検証します。1. [Diagram] ウィンドウの空白部分を右クリックして、[Validate Design] をクリックします。または、F6 キーを押します。

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

3. [OK] をクリックしてメッセージを閉じます。4. [Block Design] 環境の [Sources] ウィンドウをクリックします。5. [Hierarchy] をクリックします。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 19

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

6. [Design Sources] の下から [edt_zcu102] を右クリックし、[Create HDL Wrapper] をクリックします。[Create HDL Wrapper] ダイアログ ボックスが開きます。このダイアログ ボックスを使用して、プロセッサ サブシステム用の HDL ラッパー ファイルを作成します。

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

7. [Let Vivado Manage Wrapper] をオンにし、[OK] をクリックします。8. [Block Design] の [Sources] ウィンドウで、[Design Sources] の [edt_zcu102_wrapper] を展開します。9. [edt_zcu102_i : edt_zcu102 (edt_zcu102.bd)] という最上位ブロック図を右クリックし、[Generate Output

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

注記: Linux ホストマシンで Vivado Design Suite を実行している場合は、[Run Settings] の下に追加オプションが表示されることがあります。その場合は、デフォルト設定で続行します。

10. [Generate] をクリックします。この手順では、選択したソースに必要なすべての出力ファイルを作成します。たとえば、IP プロセッサ システムに対する制約を手動で作成する必要はありません。[Generate Output Products] をクリックすると、Vivado ツールでプロセッサ サブシステム用の XDC ファイルが自動的に生成されます。

11.「Out-of-context module run was launched for generating output products」 (出力ファイル生成のためアウト オブコンテキスト モジュール run が実行されました) というメッセージが表示されたら [OK] をクリックします。

12. [Generate Output Products] の処理が完了したら、[OK] をクリックします。13. [Block Design] の [Sources] ウィンドウで、[IP Sources] タブをクリックします。次の図に示すように、生成した出力ファイルが表示されます。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 20

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

ハードウェア プラットフォームのエクスポートGUI を使用してハードウェア プラットフォームを記述するには、次の手順に従います。1. Vivado Design Suite で [File] → [Export] → [Export Hardware] をクリックします。

[Export Hardware Platform] ウィザードが開きます。2. [Platform type] で [Fixed] をオンにします。3. [Next] をクリックします。4. [Output] ページで [Pre-synthesis] をオンにし、[Next] をクリックします。5. [XSA file name] および [Export path] を指定し、[Next] をクリックします。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 21

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

6. [Finish] をクリックしてハードウェア プラットフォーム ファイルを指定したパスに生成します。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 22

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

第 3 章

PS サブシステム用ソフトウェアのビルドこの章では、PS サブシステム用にソフトウェアを設定およびビルドする手順を示します。Vivado® Design Suite で設定した Zynq® UltraScale+™ ハードウェア プラットフォーム (ハードウェア定義ファイル) を使用します。第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフィギュレーション では、Vivado でハードウェアプラットフォームを作成し、エクスポートしました。このハードウェア プラットフォームには、ハードウェア ハンドオフ ファイル、プロセッシング システム初期化ファイル (psu_init)、および PL ビットストリームが含まれます。この章では、Vitis™ IDE および PetaLinux でハードウェア プラットフォームを使用して、プロセッシング システム用にソフトウェアを設定します。この章では、2 つの重要な点について説明します。1 つ目は、この後の章で使用可能なソフトウェア コンポーネントのビルドおよび設定に役立つ情報を提供します。2 つ目は、特定の PS サブシステムをビルドする手順を説明します。

Zynq UltraScale+ のプロセッシング ユニットZynq UltraScale+ に含まれるプロセッシング システムの主なプロセッシング ユニットは、次のとおりです。• アプリケーション処理ユニット: クワッド コア Arm® Cortex™- A53 MPCore プロセッサ。• リアルタイム プロセッシング ユニット: デュアル コア Arm Cortex™-R5F MPCore プロセッサ。• グラフィックス プロセッシング ユニット: Arm Mali™ 400 MP2 GPU

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

このセクションでは、上記のユニットをシステム ソフトウェアを使用して設定する方法を説明します。これは、FSBL(第 1 段階ブートローダー) を使用するブート レベルで実行するか、またはプラットフォーム管理ユニット (PMU) に適用可能なシステム ファームウェアを使用して実行できます。Vitis IDE で Zynq UltraScale+ ハードウェア プラットフォームを使用して、次のタスクを実行します。1. Arm Cortex-A53 64 ビット クワッド コア プロセッシング ユニット (APU) および Cortex-R5F デュアル コア リアルタイム プロセッシング ユニット (RPU) 用の FSBL (第 1 段階ブートローダー) を作成します。

2. APU および RPU 用のベアメタル アプリケーションを作成します。3. Vitis IDE を使用してプラットフォーム管理ユニット (PMU) 用にプラットフォーム管理ユニット ファームウェアを作成します。

ベアメタル アプリケーションのほかに、APU 用の U-Boot および Linux イメージのビルドについても説明します。Linux イメージおよび U-Boot は、PetaLinux ビルド システムを使用して設定およびビルドできます。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 23

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

Vitis IDE を使用したプラットフォームの作成1. Windows のスタート メニューからか、または C:\Xilinx\Vitis\2020.1\bin\vitis.bat ファイルをダブルクリックして Vitis IDE を起動します。

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

3. Vitis IDE で [File] → [New] → [Platform Project] をクリックします。4. [Create New Platform] ページでプラットフォーム名を入力し、[Next] をクリックします。5. [Platform] ページで [Create from hardware specification (XSA)] タブをクリックします。XSA ファイルを指定し、オペレーティング システム、プロセッサ、アーキテクチャを選択します。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 24

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

6. [Finish] をクリックします。7. Vitis IDE によりプラットフォームが数分で生成されます。次の図に示すように [Explorer] ビューに生成されたファイルが表示されます。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 25

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

8. プラットフォーム プロジェクトには、デフォルトの FSBL および PMU ファームウェアが含まれ、psu_cortexa53_0 ドメインもプラットフォームに追加されます。プラットフォームには複数のドメインを追加でき、ほかのアプリケーション同様 FSBL も作成できます。注記: psu_cortexa53_0 ドメインのスタンドアロンを変更して次のライブラリを追加するには、次の手順に従います。1. [standalone on psu_cortexa53_0] BSP をダブルクリックします。2. [Modify BSP Settings] をクリックします。3. [Overview] ページで [xilffs], [xilpm]、および [xilsecure] を選択します。

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

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 26

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

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

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

この例では、Vitis IDE のシステム デバッガーを使用して、Arm Cortex-A53 から JTAG モードでボード設定を管理、ケーブルを接続、PC を介してボードに接続、および単純な Hello World ソフトウェア アプリケーションを実行する方法を説明します。ボード設定1. 電源ケーブルをボードに接続します。2. マイクロ USB ケーブルで Windows ホスト マシンとターゲット ボードの J2 USB JTAG コネクタを接続します。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 27

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

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

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

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

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 28

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

「Hello World」の文字列を UART0 ペリフェラルに送信するには、次の手順に従います。1. Vitis IDE を開き、プロジェクト ファイルへのワークスペース パス (この例では C:\edt) を設定します。または、Vitis IDE をデフォルトのワークスペースで開き、後でそれを正しいワークスペースに切り替えることもできます。この場合、[File] → [Switch Workspace] をクリックしてワークスペースを選択します。

2. システムで割り当てられている COM ポートのシリアル通信ユーティリティを開きます。Vitis IDE では、チュートリアル全体で使用されるシリアル ターミナル ユーティリティが提供されています。[Window] → [Show View] → [Terminal] をクリックしてこのユーティリティを開きます。

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

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 29

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

4. 変更するには、[Disconnect] をクリックして接続を解除します。5. [Settings] をクリックして [Terminal Settings] ダイアログ ボックスを開きます。6. デバイス マネージャーでポートの詳細を検証します。

UART-0 ターミナルは、Interface-0 の COM ポートに対応します。この例では、デフォルトで UART-0 ターミナルが設定されているため、COM ポートに Interface-0 のポートを選択します。次の図に、Zynq UltraScale+ MPSoC プロセッシング システム用の標準的な設定を示します。

7. [File] → [New] → [Application Project] をクリックします。[New Application Project] ウィザードが開きます。8. [Next] をクリックします。9. ウィザードの各ページで次の表の情報に基づいて設定を選択します。

表 3: スタンドアロン APU アプリケーションの新規アプリケーション プロジェクト設定ウィザード ページ システム プロパティ 設定

Platform Select a platform from repository edt_zcu102_wrapper

Application Project Details Application project name test_a53

System project name test_a53_system

Target processor psu_cortexa53_0

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 30

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

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

ウィザード ページ システム プロパティ 設定Domain Domain standalone on psu_cortexa53_0

Templates Available Templates Hello World

Vitis IDE で test_a53 application プロジェクトおよび test_a53_system プロジェクトが作成され、[Project Explorer] ビューに表示されます。[test_a53 application project] を右クリックし、[build] をクリックしてアプリケーションをビルドします。

10. [test_a53] を右クリックし、[Run as] → [Run Configurations] をクリックします。11. [Xilinx Application Debugger] を右クリックし、[New Configuration] をクリックします。

Vitis IDE で Debugger_test_a53-Default という名前の新しい実行コンフィギュレーションが作成されます。アプリケーションに関連するコンフィギュレーションは、起動コンフィギュレーションの [Main] タブに自動入力されます。

12. [Target Setup] タブをクリックし、設定を確認します。注記: ボードは電源を切って入れ直す前に JTAG ブート モードになっている必要があります。

13. ボードの電源を切って入れ直します。14. [Run] をクリックします。次の図に示すように、[Terminal 1] のシリアル通信ユーティリティに「Hello World」と表示されます。

注記: Zynq UltraScale+ 評価ボードで実行する上記ソフトウェア アプリケーション用にビットストリームをダウンロードする必要はありませんでした。Arm Cortex-A53 クワッド コアは既にプロセッシング システムに実装されています。簡単なアプリケーションを実行することを目的としたこのシステムの基本的な初期化は、デバイス初期化 Tcl スクリプトで実行されます。

15. ボードの電源を切って入れ直し、次のセクションの手順用に同じ接続とボード設定を保持します。ここまでの結果アプリケーション ソフトウェアによって、「Hello World」の文字列が PS の UART0 ペリフェラルに送信されました。UART0 からホスト マシンで動作しているシリアル ターミナル アプリケーションへ、Hello World の文字列がバイトごとに送信され、文字列として表示されます。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 31

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

cortexr5_0 のドメインの作成次の手順に従って、cortexr5_0 の Vitis ドメインを作成します。1. edt_zcu102_wrapperedt_zcu102_wrapperpsu_cortexa53_0 プラットフォームは、デフォルトで

psu_cortexa53_0 のデフォルト ドメインに割り当てられます。RPU をターゲットしたアプリケーションでは、cortexr5_0 のドメインを作成する必要があります。

2. [platform.spr] をダブルクリックします。プラットフォームが [Explorer] ビューに開きます。3. ビュー右上の + ボタンをクリックして、ドメインを追加します。4. 次の設定でドメインを作成します。

表 4: 新規ドメインを作成する際の設定システム プロパティ 設定または使用するコマンド

Name psu_cortexr5_0

Display name psu_cortexr5_0

OS Standalone

Version Standalone (7.1)

Processor psu_cortexr5_0

Supported Runtime C/C++

<architecture> 32 ビット5. Vitis IDE で新しいドメインが作成され、edt_zcu102_wrapper プラットフォームの下に psu_cortexr5_0 が表示されます。注記: psu_cortexr5_0 ドメインを変更して、xilffs、xilpm、および xilsecure ライブラリを追加します。変更するには、[standalone on psu_cortexr5_0] をダブルクリックし、[Modify BSP Settings] をクリックします。[Overview] ページでライブラリを追加します。

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

この例では、Vitis IDE のシステム デバッガーを使用して、Arm Cortex-R5F から JTAG モードでボード設定を管理、ケーブルを接続、PC を介してボードに接続、および単純な Hello World ソフトウェア アプリケーションを実行する方法を説明します。注記: ボードが既に設定されている場合は、手順 5 に進みます。1. 電源ケーブルをボードに接続します。2. マイクロ USB ケーブルで Windows ホスト マシンとターゲット ボードの J2 USB JTAG コネクタを接続します。3. USB ケーブルを使用して Windows ホスト マシンとターゲット ボードのコネクタ J83 を接続します。シリアル転送に USB を使用する際はこのように接続します。

4. サンプル プロジェクト: Arm Cortex-A53 から Hello World アプリケーションを実行 に示すスイッチを使用してZCU102 ボードに電源を投入します。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 32

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

重要: SW6 スイッチが サンプル プロジェクト: Arm Cortex-A53 から Hello World アプリケーションを実行 に示すように JTAG ブート モードに設定されていることを確認します。

注記: Vitis IDE が既に起動している場合は、手順 6 へ進みます。5. Vitis IDE を起動し、プロジェクト ファイルへのワークスペース パス (この例では C:\edt\) を設定します。または、Vitis IDE をデフォルトのワークスペースで開き、後でそれを正しいワークスペースに切り替えることもできます。この場合、[File] → [Switch Workspace] をクリックしてワークスペースを選択します。

6. システムで割り当てられている COM ポートのシリアル通信ユーティリティを開きます。Vitis IDE では、チュートリアル全体で使用されるシリアル ターミナル ユーティリティが提供されています。[Window] → [Show View] → [Terminal] をクリックしてこのユーティリティを開きます。

7. [Connect] をクリックし、シリアル コンフィギュレーションを設定して接続します。8. [Settings] をクリックして [Terminal Settings] ダイアログ ボックスを開きます。

COM ポートの詳細はホスト マシンのデバイス マネージャーに表示されます。UART-0 ターミナルは、Interface-0 の COM ポートに対応します。この例では、UART-0 ターミナルがデフォルトで設定されているため、COM ポートに対して Interface-0 のポートを選択します。次の図に、Zynq UltraScale+ MPSoC プロセッシング システム用の標準的な設定を示します。

9. Vitis IDE で、[Debug] パースペクティブから [C/C++] パースペクティブに切り替えます。これには、[Windows] → [Open Perspective] → [C/C++] をクリックします。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 33

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

Vitis IDE で既に [C/C++] パースペクティブが開いている場合は、この手順は飛ばします。10. [File] → [New] → [Application Project] をクリックします。New Application Project ウィザードが開きます。11. 次の表の情報に基づいて、ウィザード画面で選択操作を実行します。

表 5: システム プロパティウィザード ページ システム プロパティ 設定

Platform Select a platform from repository edt_zcu102_wrapper

Application Project Details Application project name hello_world_r5

System project name hello_world_r5_system

Target processor psu_cortexr5_0

Domain Domain psu_cortexr5_0

Templates Available Templates Hello World

Vitis IDE で hello_world_r5 プロジェクトおよび hello_world_r5_system プロジェクトが作成され、[Project Explorer] ビューに表示されます。アプリケーションを手動でコンパイルする必要があります。

12. [hello_world_r5] を右クリックし、[Run as] → [ Run Configurations] をクリックします。13. [Xilinx Application Debugger] を右クリックし、[New Configuration] をクリックします。

Vitis IDE で Debugger_hello_world_r5-Default という名前の新しい実行コンフィギュレーションが作成されます。アプリケーションに関連するコンフィギュレーションは、起動コンフィギュレーションの [Main] タブに自動入力されます。

14. [Target Setup] タブをクリックし、設定を確認します。このファイルは、Vitis IDE でプラットフォームを作成した際にエクスポートされ、プロセッシング システムの初期化情報を含みます。

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

注記: Zynq UltraScale+ 評価ボードで実行する上記ソフトウェア アプリケーション用にビットストリームをダウンロードする必要はありませんでした。Arm Cortex-R5F デュアル コアは既にボードに実装されています。簡単なアプリケーションを実行することを目的としたこのシステムの基本的な初期化は、デバイス初期化 Tcl スクリプトで実行されます。

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

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 34

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

UART0 からホスト マシンで動作しているシリアル ターミナル アプリケーションへ、Hello World の文字列がバイトごとに送信され、文字列として表示されます。

その他の情報ドメインドメインは、スタンドアロン BSP、Linux OS、FreeRTOS などのサードパーティ OS/BSP、デバイス ツリー ジェネレーターなどのコンポーネントの設定およびファイルを指します。

ボード サポート パッケージ (BSP)

ボード サポート パッケージ (BSP) はハードウェア プラットフォームまたはボードのサポート コードです。このコードは、電源投入時の基本的な初期化に役立つだけでなく、ソフトウェア アプリケーションがハードウェア プラットフォームまたはボードの最上位で実行されるようにサポートします。これは、ブートローダーおよびデバイス ドライバーを備えるオペレーティング システム固有のものにできます。

ヒント: BSP ソースをリセットするには、[platform.prj] をダブルクリックして、ドメイン内の BSP を選択し、[Reset BSP Source] をクリックします。この場合、ソース ファイルのみがリセットされ、設定はリセットされません。アプリケーション プロジェクトの作成後にターゲット ドメインを変更するには、[Explorer] ビューで[project.prj] をダブルクリックします。[Application Project Settings] で [Domain] → [Domain change option] → [Domain] をクリックし、ターゲット ドメインを変更します。

スタンドアロン BSP

スタンドアロンはシンプルな下位ソフトウェア層です。これは、キャッシュ、割り込み、例外などの基本的なプロセッサ機能およびホスト環境の基本的なプロセッサ機能へのアクセスを提供します。これらの機能には、標準の入力/出力、プロファイル、停止、終了が含まれます。これはセミホスト型のシングル スレッド環境です。

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

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

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

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 35

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

この例では、サンプル プロジェクト: Arm Cortex-A53 から Hello World アプリケーションを実行で作成した test_a53アプリケーションを使用します。test_a53 では簡単な Hello World アプリケーションを選択しました。このアプリケーションは、APU または RPU上で動作している FSBL により APU にロードできます。Vitis IDE では、Zynq UltraScale+ デバイスでのアプリケーションを簡単に実行できるようにするベアメタル アプリケーション テンプレートをいくつか提供しています。また、[Available Templates] から [Empty Application] を選択し、アプリケーション フォルダー構造にカスタム アプリケーション コードをコピーまたは作成することもできます。

アプリケーション ソース コードの編集1. [Project Explorer] ビューで [test_a53] → [src] → [helloworld.c] をクリックします。

test_a53 アプリケーション用の helloworld.c ソース ファイルが開きます。2. print コマンドの引数を次のように編集します。

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

3. [Ctrl + S] キーを押して変更を保存します。4. [test_a 53] プロジェクトを右クリックし、[Build Project] をクリックします。5. アプリケーションがコンパイルされ、リンクが正常に確立され、test_a53.elf ファイルが [test_a53] → [Debug]フォルダーに生成されていることを確認します。

Arm Cortex-R5 ベースの RPU 用カスタム ベアメタル アプリケーションの作成この例では、Arm Cortex-R5F ベースの RPU 用ベアメタル アプリケーション プロジェクトを作成します。このプロジェクトでは、このチュートリアルでリリースされたデザイン ファイル (ZIP ファイル) に含まれるアプリケーション ソース ファイルをインポートする必要があります。これらのデザイン ファイルの場所は、このチュートリアルのデザイン ファイルを参照してください。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 36

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

アプリケーション プロジェクトの作成1. Vitis IDE で [File] → [New] → [Application Project] をクリックし、New Application Project ウィザードを開きます。2. ウィザードの各ページで次の表の情報に基づいて設定を選択します。

表 6: 新しい RPU アプリケーション プロジェクト作成時の設定ウィザード ページ システム プロパティ 設定

Platform Select a platform from repository edt_zcu102_wrapper

Application Project Details Application project name testapp_r5

System project name testapp_r5_system

Target processor psu_cortexr5_0

Domain Domain psu_cortexr5_0

Templates Available Templates Empty Application

3. [Finish] をクリックします。New Application Project ウィザードが閉じ、Vitis IDE により testapp_r5 アプリケーション プロジェクトが作成され、[Project Explorer] ビューに表示されます。

4. [Project Explorer] ビューで [testapp_r5 project] プロジェクトを展開します。5. [src] ディレクトリを右クリックし、[Import] をクリックして [Import] ダイアログ ボックスを開きます。6. [Import] ダイアログ ボックスで [General] を展開し、[File System] をクリックします。7. [Next] をクリックします。8. [Browse] をクリックし、前に保存したデザイン ファイル フォルダーに移動します (このチュートリアルのデザイン ファイル参照)。

9. [OK] をクリックします。10. [testapp.c file] を選択します。11. [Finish] をクリックします。12. [testapp.c] を開いてこのアプリケーションのソース コードを確認します。アプリケーションでは、UART 割り込みが設定され、プロセッサが WFI モードに設定されています。このアプリケーションについては、第 5 章: ブートおよびコンフィギュレーション での実行時に再度利用し、説明します。

リンカー スクリプトの変更1. [Project Explorer] ビューで [testapp_r5 project] プロジェクトを展開します。2. [src] を展開表示して [lscript.ld] をダブルクリックし、プロジェクトのリンカー スクリプトを開きます。3. リンカー スクリプトの [Available Memory Regions] で、psu_r5_ddr_0_MEM_0 のベース アドレスとサイズを次の

ように変更します。• [Base Address]: 0x70000000

• [Size]: 0x10000000

リンカー スクリプトの変更を次の図に示します。この図は表示のみです。実際のメモリ領域は、隔離設定が使用されている場合は異なることがあります。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 37

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

このリンカー スクリプトの変更により、RPU ベアメタル アプリケーションは DDR の 0x70000000 のベース アドレスより上位にあり、256 MB 以下のサイズとなります。

4. [Ctrl + S] キーを押して変更を保存します。5. [testapp_r5] プロジェクトを右クリックし、[Build Project] をクリックします。6. アプリケーションがコンパイルされ、リンクが正常に確立され、testapp_r5.elf ファイルが testapp_r5/

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

ボード サポート パッケージの変更ZCU102 評価キットには、Silicon Labs 社の USB-TO-QUAD-UART Bridge IC (CP2108) が搭載されています。これにより、Cortex-A53 および Cortex-R5F コアで動作するアプリケーションに異なる UART ポートを選択できます。この例では、Cortex-A53 にデフォルトの UART 0 を使用し、UART 1 を介して RPU シリアル データを送受信します。このためには、r5_bsp ファイルを少し変更する必要があります。1. psu_cortexr5_0 ドメインの BSP をダブルクリックし、[modify BSP settings] → [standalone] をクリックします。stdin および stdout を psu_uart_1 に変更します。

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

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 38

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

4. [OK] をクリックします。5. psu_cortexr5_0 ドメインおよび testapp_r5 アプリケーションをビルドします。6. アプリケーションがコンパイルされ、リンクが正常に確立され、testapp_r5.elf ファイルが [testapp_r5] → 

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

プラットフォームでのソフトウェア プロジェクトの確認プラットフォームでの FSBL の確認プラットフォームで FSBL を確認するには、次の手順に従います。1. [edt_zcu102_wrapper] を展開して zynqmp_fsbl をクリックし、zynqmp の FSBL ソース コードを開きます。このソースは編集してカスタマイズできます。

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

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

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

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 39

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

1. 任意のプラットフォームを展開し、デフォルトでプラットフォーム内に作成された zynqmp_pmufw ソフトウェア プロジェクトを確認します。

2. zynqmp_pmufw には、psu_pmu_0 の PMU ファームウェアのソース コードが含まれています。psu_pmu_0 でファームウェアをコンパイルして実行します。zynqmp_pmufw 用の psu_pmu_0 プロセッサ ドメインが自動的に作成されます。

Arm Cortex-A53 ベースの APU 用 FSBL の作成FSBL は必要なアプリケーションまたはデータをメモリにロードしてターゲット CPU コアでアプリケーションを起動できます。プラットフォーム プロジェクトには FSBL が 1 つ提供されていますが、追加で FSBL アプリケーションを汎用アプリケーションとして作成して変更を加えたりデバッグ目的で使用したりできます。この例では、Arm Cortex-A53 コア 0 をターゲットとした FSBL イメージを作成します。1. Vitis IDE を開いていない場合は起動します。2. 第 2 章で作成したプロジェクトに基づいてワークスペース パスを設定します。たとえば「C:\edt」と入力します。

3. [File] → [New] → [Application Project] をクリックします。New Project ウィザードが開きます。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 40

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

4. New Project ウィザードの各ページを次の表の情報に基づいて設定します。表 7: 新しいアプリケーション プロジェクト作成時の設定 - FSBL_A53

ウィザード ページ システム プロパティ 設定Platform Select a platform from repository edt_zcu102_wrapper

Application Project Details Application project name fsbl_a53

System project name fsbl_a53_system

Target processor psu_cortexa53_0

Domain Domain standalone on psu_cortexa53_0

Templates Available Templates Zynq MP FSBL

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

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 41

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

6. [Finish] をクリックします。Vitis IDE でシステム プロジェクトおよび FSBL アプリケーションが作成されます。

FSBL はデフォルトで基本メッセージを表示するように設定されています。次に、FSBL ビルド設定を変更してデバッグ出力を有効にします。FSBL のデバッグ オプションの一覧は、[fsbl_a53] → [src] → [xfsbl_debug.h] ファイルを参照してください。この例では、次を実行して FSBL_DEBUG_INFO を有効にします。1. [Project Explorer] ビューで [fsbl_a53 application] を右クリックします。2. [C/C++ Build Settings] をクリックします。3. [Settings] → [ARM V8 gcc compiler] → [Symbols] をクリックします。4. [Add] ボタン をクリックします。5. 「FSBL_DEBUG_INFO」と入力します。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 42

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

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

6. [OK] をクリックし、変更を適用して [Settings] ダイアログ ボックスを閉じます。7. BSP 設定に移動します。[Overview] → [Drivers] → [psu_cortexa53_0] → [extra_compiler_flags] をクリックし、

[extra_compiler_flags] に -Os -flto -ffat-lto-objects を追加します。8. fsbl_a53 アプリケーションを右クリックして [Build Project] をクリックします。9. FSBL の実行ファイルが fsbl_a53 > debug > fsbl_a53.elf に保存されます。

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

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 43

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

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

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

前のサンプル プロジェクトでは、Vitis IDE を使用して、APU、RPU、および PMU 用にブートローダー イメージとベアメタル アプリケーションを作成しました。この例では、Zynq UltraScale+ の Arm Cortex-A53 コア ベース APU 用の Linux オペレーティング システム プラットフォームを設定およびビルドします。PetaLinux のツール フローとボード固有の BSP を使用して Linux イメージを設定し、ビルドします。

重要:

1. このサンプル プロジェクトには、Linux ホスト マシンが必要です。PetaLinux 2020.1 の依存性については、『PetaLinux ツール資料: リファレンス ガイド』 (UG1144: 英語版、日本語版) を参照してください。

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

1. 次のコマンドを使用して PetaLinux プロジェクトを生成します。$petalinux-create -t project -s <path to the xilinx-zcu102-v2020.1-final.bsp>

注記: xilinx-zcu102-v2020.1-final.bsp は、ZCU102 プロダクション シリコン Rev1.0 ボード用のPetaLinux BSP です。Rev 1.0 ボードの ES2 シリコンを使用している場合は、xilinx-zcu102-ZU9-ES2-Rev1.0-v2020.1-final.bsp を使用してください。上記の手順で、PetaLinux プロジェクト ディレクトリ (例: xilinx-zcu102-2020.1) が作成されます。

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

ZCU102 PetaLinux-BSP はデフォルトの ZCU102 Linux BSP です。この例では、第 2 章: Zynq UltraScale+ MPSoCプロセッシング システムのコンフィギュレーション で Vivado Design Suite を使用して設定した ZynqUltraScale+ ハードウェア プラットフォームに基づいて、PetaLinux プロジェクトを再度設定します。

3. ハードウェア プラットフォーム edt_zcu102_wrapper.xsa を Linux ホスト マシンにコピーします。4. 次のコマンドを実行してプロジェクトを再度設定します。

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

[PetaLinux Configuration] ウィンドウが開きます。必要に応じて設定内容を変更してください。この例では、BSPからのデフォルト設定で必要なブート イメージを生成できます。次の手順で、PetaLinux が SD ブートの Linux およびブート イメージを作成するように設定されているかどうかを確認します。

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

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

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 44

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

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

9. メイン メニューに戻ります。[Image Packaging Configuration] → [Root filesystem type] を選択し、INITRAMFS を選択します。

10. 設定内容を保存し、Configuration ウィザードを終了します。11. PetaLinux がプロジェクトを再設定するのを待ちます。

次の手順で Linux イメージをビルドし、検証して、ブート イメージを生成します。12. デバイス ツリーで Heartbeat LED、SW19 プッシュボタンを無効にします。これにより、このチュートリアルのほかのデザインで、RPU R5-0 により PS LED および SW19 スイッチを使用できるようになります。使用する場合は、次のディレクトリにある system-user.dtsi に次の変更を追加します。<PetaLinux-project>/project-spec/meta-user/recipes-bsp/device-tr ee/files/system-user.dtsi

13. system-user.dtsi を次のように変更します。/include/ "system-conf.dtsi"/ {gpio-keys { sw19 {status = "disabled";};};};&uart1{status = "disabled";};

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

15. 上記の文が正常に実行されたら、次のコマンドを使用して、PetaLinux プロジェクト フォルダーの images ディレクトリ内にあるイメージとタイムスタンプを確認します。$ cd images/linux/$ ls -al

16. 次のコマンドを使用して、ブート イメージを生成します。$ petalinux-package --boot --fsbl zynqmp_fsbl.elf --u-boot

これで、次のディレクトリに BOOT.BIN イメージ ファイルが作成されます。<petalinux-project>/images/linux/BOOT.BIN

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 45

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

ログに、上記コマンドで PMU_FW および ATF が BOOT.BIN に含まれることが示されます。また上記コマンドで --pmufw <PMUFW_ELF> および --atf <ATF_ELF> を追加することもできます。詳細は、$ petalinux-package--boot --help を参照してください。注記: 上記のコマンドでは、ビットストリームを追加する --fpga コマンドは意図的に含めていません。これは、この時点でのハードウェア コンフィギュレーションは PS のみに基づいており、PL のデザインは含まれていないからです。デザインにビットストリームが存在する可能性を考慮して、次に示すように petalinux-package コマンドに--fpga を追加できます。petalinux-package --boot --fsbl zynqmp_fsbl.elf --fpga system.bit --pmufw pmufw.elf --atf bl31.elf --u-boot u-boot.elf

ZCU102 ボードでのイメージの検証イメージを検証するには、次の手順に従います。1. BOOT.BIN、image.ub、および boot.scr ファイルを SD カードにコピーします。boot.scr は U-Boot で読み出され、カーネルとルート ファイル システムがロードされます。

2. SD カードを ZCU102 ボードの J100 コネクタに挿入します。3. マイクロ USB ケーブルで ZCU102 ボードの USB UART ポート (J83) とホスト マシンの USB ポートを接続します。

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

5. 12V 電源を ZCU102 の 6 ピン Molex コネクタに接続します。6. 使用しているホスト マシンに応じて Tera Term または Minicom を使用し、ターミナル セッションを開始します。システムの COM ポートとボー レートを次の図に示すように設定します。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 46

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

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

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

QSPI フラッシュ用に PetaLinux を使用して Linux イメージを作成する前のサンプル プロジェクトでは、SD カードからブートするための Linux イメージとブート イメージを作成する方法について説明しました。このセクションでは、QSPI フラッシュ用の Linux イメージを生成するために PetaLinux を設定する方法を説明します。PetaLinux 2020.1 の依存性については、『PetaLinux ツール資料: リファレンス ガイド』(UG1144: 英語版、日本語版) を参照してください。1. サンプル プロジェクトを開始する前に、次のコマンドを使用して SD カードのセットアップ用に作成されたブート イメージのバックアップを作成します。$ cd <Petalinux-project-path>/xilinx-zcu102-2020.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-2020.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] を選択します。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 47

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

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] を選択して、パーティション テーブルに示されるエントリを確認します。注記: 一部のメモリ (0x1E00000 + 0x40000) は、初期ブート パーティションおよび U-Boot の設定用に確保されています。これらの値は、必要に応じて変更できます。

b. これに基づいて、Linux イメージのオフセットは QSPI フラッシュ デバイスの 0x1E40000 として計算されます。これは、第 5 章: ブートおよびコンフィギュレーション で QSPI ブート モードのブート イメージを作成する際に使用されます。

次の手順を使用して Linux のシステム メモリ サイズを約 1.79 GB に設定します。8. [Subsystem AUTO Hardware Settings] で次を実行します。

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

9. 設定内容を保存し、Configuration ウィザードを終了します。10. petalinux-build コマンドを使用して再構築します。11. u-boot.elf およびその他のイメージのバックアップを作成します。これらは第 5 章: ブートおよびコンフィギュレーションで使用します。

注記: 詳細は、『PetaLinux ツール資料: リファレンス ガイド』 (UG1144: 英語版、日本語版) を参照してください。この章では、ザイリンクス ツールを使用して Zynq UltraScale+ デバイスのソフトウェア ブロックを設定およびコンパイルする方法を説明しました。第 6 章: システム デザイン例ではこれらのイメージを使用して、特定のサンプル デザイン用にブート イメージを作成します。第 4 章: Vitis デバッガーを使用したデバッグ では、Vitis IDE を使用して Zynq UltraScale+ デバイスのソフトウェアをデバッグします。

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

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 48

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

第 4 章

Vitis デバッガーを使用したデバッグこの章では、これまで説明してきたデザイン フローで可能なデバッグについて説明します。最初のオプションは、Vitis™ デバッガーを使用したソフトウェアのデバッグです。Vitis デバッガーは、次のデバッグ機能を提供します。• Arm® Cortex™-A53、Arm® Cortex™-R5F、および MicroBlaze™ プロセッサ アーキテクチャ上のプログラムのデバッグをサポート (ヘテロジニアス マルチプロセッサ ハードウェア システムのデバッグ)

• ハードウェア ボード上のプログラムのデバッグをサポート• リモート ハードウェア システムでのデバッグ• プログラムをデバッグするための豊富な機能を備えた IDE を提供• テスト スクリプトの実行および自動化のためのツール コマンド言語 (Tcl) インターフェイスを提供Vitis デバッガーを使用すると、プログラムの実行中に何が起こっているかを確認できます。プロセッサを停止するブレークポイントまたはウォッチポイントの設定、プログラムのステップ実行、プログラム変数およびスタックの確認、システム内のメモリ内容の確認などを実行できます。Vitis デバッガーでは、ザイリンクス システム デバッガーを使用したデバッグがサポートされます。

ザイリンクス システム デバッガーザイリンクス システム デバッガーでは、ザイリンクス ハードウェア サーバーがデバッグ エンジンとして使用されます。Vitis IDE は、各ユーザー インターフェイス操作を一連の TCF (Target Communication Framework) コマンドに変換します。システム デバッガーからの出力を処理して、デバッグされているプログラムの現在のステートを表示します。ハードウェア上のプロセッサとの通信には、ザイリンクス ハードウェア サーバーが使用されます。次の図に、このデバッグ ワークフローを示します。

第 4 章: Vitis デバッガーを使用したデバッグ

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 49

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

図 3: システム デバッガーのフロー

hw_server の詳細を指定

デバッグ コンフィギュレーションを

作成

Vitis [Debug] パースペクティブ

hw_server

ハードウェアまたは ISS で実行中のプログラム

.elf

デバッグ実行ファイル

X16794-041816

ワークフローは、次の要素で構成されます。• 実行可能な ELF ファイル: ユーザー アプリケーションをデバッグするには、デバッグ用にコンパイルされた ELF

(Executable and Linkable Format) ファイルを使用する必要があります。デバッグ ELF ファイルには、デバッガーへの追加のデバッグ情報が含まれ、ソース コードとその元のソースから生成された 2 進数間が直接関連付けられます。ビルド コンフィギュレーションを管理するには、ソフトウェア アプリケーションを右クリックして [BuildConfigurations] → [Manage] をクリックします。

• デバッグ コンフィギュレーション : デバッグ セッションを開始するには、Vitis デバッガーでデバッグ コンフィギュレーションを作成する必要があります。このコンフィギュレーションには、実行ファイル名、デバッグするプロセッサ ターゲットなど、デバッグ セッションを開始するのに必要な情報が含まれます。デバッグ コンフィギュレーションを作成するには、ソフトウェア アプリケーションを右クリックして [Debug As] → [DebugConfigurations] をクリックします。

• Vitis の [Debug] パースペクティブ : [Debug] ウィンドウを使用すると、ワークベンチでプログラムのデバッグまたは実行を管理できます。ブレークポイントを設定、実行中のプログラムを一時停止、コードをステップ実行、変数の内容を確認するなど、プログラムの実行を制御できます。[Debug] パースペクティブを表示するには、[Window] → [Open Perspective] → [Debug] をクリックします。Vitis デバッガーで、コードの修正、実行ファイルの構築、プログラムのデバッグというサイクルを繰り返すことができます。

注記: コンパイル後にソースを編集すると、デバッグ情報がそのソースに直接関連付けられているため、その行番号はステップ実行されなくなります。同様に、最適化されたバイナリをデバッグすると、実行トレース中に予期しないジャンプが発生することがあります。

第 4 章: Vitis デバッガーを使用したデバッグ

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 50

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

Vitis デバッガーを使用したソフトウェアのデバッグこの例では、Hello World アプリケーションをデバッグします。APU または RPU で実行する Hello World アプリケーションがまだ作成されていない場合は、Arm Cortex-A53 ベースの APU 用カスタム ベアメタル アプリケーションの作成の手順に従って新しい Hello World アプリケーションを作成します。Hello World アプリケーションを作成した後に、Vitis デバッガーで次の例を実行してソフトウェアをデバッグします。1. サンプル プロジェクト: Arm Cortex-A53 から Hello World アプリケーションを実行の手順に従って、JTAG モー

ドでターゲットを設定し、電源を投入します。2. [C/C++] パースペクティブで [test_a53 Project] を右クリックし、[Debug As] → [Launch on Hardware (Application

Debugger)] をクリックします。注記: 上記の手順で、プロジェクト設定に基づき [Debug] ウィンドウでアプリケーション デバッガーを起動します。または、次の図に示すようにデバッグ コンフィギュレーションを作成することもできます。

[Confirm Perspective Switch] ダイアログ ボックスが表示されたら [Yes] をクリックします。[Debug] パースペクティブが開きます。注記: [Debug] パースペクティブが自動的に開かない場合は、[Window] → [Perspective] → [Open Perspective] → [Other] をクリックし、Open Perspective ウィザードで [Debug] を選択します。

第 4 章: Vitis デバッガーを使用したデバッグ

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 51

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

注記: このページに示されているアドレスは、システムで表示されているものと若干異なる場合があります。プロセッサが main() の冒頭にあり、プログラム実行が 0000000000000cf0 で停止していることがわかります。この情報は [Disassembly] ビューで確認できます。このビューに、アセンブリ レベルのプログラム実行が0000000000000cf0 で一時停止していることが示されています。注記: [Disassembly] ビューが表示されていない場合は、[Window] → [Show View] → [Disassembly] をクリックします。

3. helloworld.c ウィンドウにも、C コードの最初の実行可能な行で実行が一時停止していることが表示されています。[Registers] ビューを選択し、プログラム カウンターである pc レジスタに 0000000000000cf0 が含まれていることを確認します。注記: [Registers] ウィンドウが表示されていない場合は、[Window] → [ Show View] → [Registers] をクリックします。

4. helloworld.c ウィンドウの print (“Hello World\n\r”); を読み出すコード行の横の空白をダブルクリックします。これにより、printf コマンドにブレークポイントが設定されます。ブレークポイントの確認には、[Breakpoints] ウィンドウを使用します。注記: [Breakpoints] ウィンドウが表示されていない場合は、[Window] → [Show View] → [Breakpoints] をクリックします。

5. [Run] → [Step Into] をクリックし、init_platform() ルーチンにステップインします。プログラムの実行が 0000000000000d3c の位置で一時停止します。コール スタックの深さは 2 レベルになります。

6. [Run] → [Resume] をクリックし、プログラムをブレークポイントまで実行します。プログラムの実行は、printf コマンドを含むコードの行で停止します。[Disassembly] および [Debug] ウィンドウに、プログラムの実行が 0000000000001520 で停止していることが示されます。注記: hello world のソース コードを変更した場合、ウィンドウに表示される実行アドレスは異なる場合があります。

7. [Run] → [Resume] をクリックし、プログラムを最後まで実行します。プログラムの実行が完了すると、[Debug] ウィンドウにプログラムが exit というルーチンで一時停止していることが示されます。これは、デバッガーの制御下で実行しているときに発生します。

第 4 章: Vitis デバッガーを使用したデバッグ

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 52

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

8. コードを複数回再実行します。シングル ステップ、メモリの検査、ブレークポイント、コードの変更、およびprint 文の追加を試してみます。ビューの追加および移動を試します。ヒント: Vitis デバッガーのデバッグ ショートカット (ステップ イン (F5)、ステップ リターン (F7)、ステップ オーバー (F6)、および再開 (F8)) を使用できます。

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

前の手順に記載のとおり、Vitis アプリケーション デバッガー GUI を使用して、RPU および PMU 上で実行しているベアメタル アプリケーションをデバッグできます。また、XSCT の一部として含まれる XSDB を使用してコマンド ライン モードでデバッグすることもできます。この例では、XSCT を使用してベアメタル アプリケーション testapp_r5 をデバッグします。次の手順は、XSCT を使用して R5 にベアメタル アプリケーションをロードする方法を示しています。この例は、XSDB/XSCT を使用して可能なコマンド ライン デバッグを示すことを目的としています。要件に基づいて、システムデバッガー GUI または XSCT のコマンド ライン デバッガーのいずれかを選択してコードをデバッグできます。すべての XSCT コマンドはスクリプト記述可能であり、これはこの例で説明するコマンドに当てはまります。

ターゲットのセットアップ1. USB ケーブルでターゲットの USB-JTAG J2 コネクタとホスト マシンの USB ポートを接続します。2. SW6 を次の図のように設定して、ボードを JTAG ブート モードに設定します。

3. スイッチ SW1 を使用してボードに電源を投入します。

第 4 章: Vitis デバッガーを使用したデバッグ

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 53

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

4. ツールバーの [XSCT Console] をクリックして [XSCT Console] ビューを開きます。または、[Xilinx] → [XSCTConsole] をクリックして [XSCT Console] ビューを開くこともできます。

5. [XSCT Console] ビューで、次の connect コマンドを使用して JTAG を介してターゲットに接続します。xsct% connect

connect コマンドは、接続のチャネル ID を返します。6. targets コマンドを実行して使用可能なターゲットをリストし、ID を使用してターゲットを選択します。ターゲットには JTAG チェーンで検出されたときに ID が割り当てられるので、ターゲット ID はセッションごとに変わります。スクリプト記述などの非対話型の使用法では、ID を使用してターゲットを選択するのではなく、-filter オプションを利用してターゲットを選択できます。xsct% targets

次の図に示すように、ターゲットが一覧表示されます。

7. PSU ターゲットを選択します。Arm APU および RPU クラスターは、PSU の下にグループ化されています。次のコマンドを使用して、Cortex-A53#0 をターゲットとして選択します。xsct% targets -set -filter {name =~ "Cortex-A53 #0"}

targets コマンドはターゲットをリストし、選択されたターゲットをアスタリスク (*) マークで示します。または次の図に示すように、ターゲット番号を使用してターゲットを選択することもできます。

第 4 章: Vitis デバッガーを使用したデバッグ

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 54

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

8. プロセッサがリセットに保持されます。プロセッサ リセットをクリアするには、次のコマンドを使用します。rst -processor

9. Cortex-A53 #0 に fsb をロードします。FSBL は、Zynq UltraScale+ のプロセッシング システムを初期化します。xsct% dow {C:\edt\fsbl_a53\Debug\fsbl_a53.elf}xsct% conxsct% stop

注記: 上記のコマンドで使用されている {} は、Windows マシンでパスのバック スラッシュ (\) を有効にするために必要です。パスにフォワード スラッシュ (/) を使用する場合は、波かっこは不要です。Linux では、XSCT のパスは波かっこなしでも機能するので、Linux パスにはフォワード スラッシュ (/) を使用します。

XSCT を使用したアプリケーションのロード1. Arm Cortex-R5F コア 0 に testapp_r5 アプリケーションをダウンロードします。2. RPU Cortex-R5F コア 0 のターゲット ID をチェックして選択します。

xsct% targetsxsct% targets -set -filter {name =~ "Cortex-R5 #0"}xsct% rst -processor

rst -processor コマンドは個々のプロセッサ コアのリセットをクリアします。Zynq MPSoC を JTAG ブート モードで起動すると、すべての Cortex-A53 コアおよび Cortex-R5F コアがリセット状態に保持されるので、この操作は重要です。これらのコアでデバッグを実行する前に、各コアのリセットをクリアする必要があります。リセットは XSDB の rst コマンドでクリアできます。

第 4 章: Vitis デバッガーを使用したデバッグ

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 55

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

注記: rst -cores コマンドは、現在のターゲットが子である、グループ (APU または RPU など) 内にあるすべてのプロセッサ コアのリセットをクリアします。たとえば、Cortex-A53 #0 が現在のターゲットである場合、rst -cores は APU のすべての Cortex-A53 コアのリセットをクリアします。xsct% dow {C:\edt\testapp_r5\Debug\testapp_r5.elf}

またはxsct% dow {C:/edt/testapp_r5/Debug/testapp_r5.elf}

ここで、ELF ファイルのセクションが順にダウンロードされるのが表示されます。XSCT プロンプトはダウンロードが正常に完了すると表示されます。次に、シリアル ターミナル (Tera Term、Minicom、または UART-1 USB シリアル接続用のシリアル ターミナル インターフェイス ) を設定します。

シリアル ターミナルの設定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

第 4 章: Vitis デバッガーを使用したデバッグ

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 56

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

コアがブレークポイントに到達すると、次の情報メッセージが表示されます。xsct% Info: Cortex-R5 #0 (target 7) Stopped at 0x10021C (Breakpoint)

3. コアが停止しているので、レジスタを表示して確認します。xsct% rrd

4. ローカル変数を表示します。xsct% locals

5. ソース コードの行をステップ実行し、スタックト レースを表示します。xsct% nxtInfo: Cortex-R5 #0 (target 6) Stopped at 0x100490 (Step) xsct% bt

help コマンドを使用すると、ほかのオプションを表示できます。

help running コマンドを使用すると、XSCT を使用してアプリケーションを実行またはデバッグするためのオプションを表示できます。

第 4 章: Vitis デバッガーを使用したデバッグ

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 57

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

6. コードを実行します。xsct% con

ここで、UART-1 ターミナルに Cortex-R5F アプリケーションのメッセージが表示されます。

Vitis デバッガーを使用した FSBL のデバッグFSBL は、Vitis デバッガーでデフォルト設定の Size Optimization および Link Time Optimization フラグ (-Os およびLTO 最適化) を使用してビルドされます。これにより、FSBL のメモリ フットプリントが削減します。FSBL をデバッグする際は、これをディスエーブルにする必要があります。最適化をディスエーブルにするとコード サイズが増加し、FSBL をビルドできなくなる可能性があります。デバッグでの最適化をディスエーブルにするには、FSBL の xfsbl_config.h ファイルで一部の不要な FSBL 機能をディスエーブルにする必要があります。ここでは、第 3 章: PS サブシステム用ソフトウェアのビルドで作成した FSBL を変更する代わりにこのセクション用の新しい FSBL を作成します。これで、このチュートリアルの残りの章で使用する FSBL_a53 プロジェクトを変更せずにすみます。

第 4 章: Vitis デバッガーを使用したデバッグ

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 58

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

FSBL の作成および変更次の手順に従って、FSBL プロジェクトを作成します。1. Vitis デバッガーを開いていない場合は起動します。2. 第 3 章: PS サブシステム用ソフトウェアのビルドで作成したプロジェクトに基づいてワークスペース パスを設定します。たとえば「C:\edt」と入力します。

3. [File] → [New] → [Application Project] をクリックします。New Project ウィザードが開きます。4. New Project ウィザードの各ページを次の表の情報に基づいて設定します。

表 8: FSBL_debug プロジェクト作成時の設定ウィザード ページ システム プロパティ 設定

Platform Select a platform from repository edt_zcu102_wrapper

Application Project Details Application project name fsbl_debug

System project name fsbl_debug_system

Target processor psu_cortexa53_0

Domain Domain psu_cortexa53_0

Templates Available Templates Zynq MP FSBL

5. [Finish] をクリックします。Vitis デバッガーでシステム プロジェクトおよび FSBL アプリケーションが作成されます。次の手順に従って最適化をディスエーブルにします。1. [Project Explorer] ビューで [fsbl_debug application] を右クリックします。2. [C/C++ Build Settings] をクリックします。3. [Settings] → [Tool Settings] → [Arm v8 gcc Compiler] → [Miscellaneous] をクリックします。4. 次の図に示すように、[Other flags] で -flto -ffat-lto-objects を削除します。

第 4 章: Vitis デバッガーを使用したデバッグ

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 59

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

同様に、fsbl_debug_bsp を変更して最適化をディスエーブルにする必要があります。5. [fsbl_debug_bsp] を右クリックし、[Board Support Package Settings] をクリックします。6. [Overview] → [Drivers] → [psu_cortexa53_0] → [extra_compiler_flags] をクリックし、次の図に示すように

[extra_compiler_flags] に「-g -Wall -Wextra -Os」を入力します。

第 4 章: Vitis デバッガーを使用したデバッグ

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 60

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

7. [OK] をクリックしてこれらの変更を保存します。BSP が自動的に再ビルドされます。8. [fsbl_debug] → [src] → [fsbl_config.h] ファイルに移動します。FSBL コードにオプションを含めて次をディスエーブルにします。• #define FSBL_NAND_EXCLUDE_VAL (1U)

• #define FSBL_SECURE_EXCLUDE_VAL (1U)

• #define FSBL_SD_EXCLUDE_VAL (1U)

注記: 1 はディスエーブル、0 はイネーブルです。これで、FSBL をデバッグする準備ができました。FSBL は、ほかのスタンドアロン アプリケーションと同じようにデバッグするか (Vitis デバッガーを使用したソフトウェアのデバッグおよびザイリンクス ソフトウェア コマンド ライン ツール (XSCT) を使用してデバッグするを参照)、システム デバッガーの [Attach to running target] モードを使用してブート イメージの一部としてデバッグできます。

第 4 章: Vitis デバッガーを使用したデバッグ

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 61

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

第 5 章

ブートおよびコンフィギュレーションこの章では、コンポーネントを統合して Zynq® UltraScale+™ システムを作成します。Zynq UltraScale+ システム用にブートローダー、ベアメタル アプリケーション (APU/RPU 用)、および Linux オペレーティング システムを統合してロードする方法を示します。次の重要な項目について説明します。• システム ソフトウェア: FSBL、U-Boot、Arm® トラステッド ファームウェア (ATF)

• アプリケーション プロセッシング ユニット (APU): APU 用に SMP Linux を設定• リアルタイム プロセッシング ユニット (RPU): ロックステップで RPU 用にベアメタルを設定• 次のブート シーケンスのブート イメージを作成

1. APU

2. RPU ロックステップ• セキュア ブート イメージを作成およびロード注記: RPU ロックステップの詳細は、『Zynq UltraScale+ デバイス テクニカル リファレンス マニュアル』 (UG1085: 英語版、日本語版) を参照してください。ブート シーケンスでは、プラットフォーム管理ユニット (PMU) 用の PMU ファームウェアもロードされます。上記の設定は、Vitis™ IDE および PetaLinux ツール フローを使用して実行できます。第 3 章: PS サブシステム用ソフトウェアのビルドでは PS 内の各プロセッシング ユニットのソフトウェア ブロックを作成することにのみ重点を置いていましたが、この章ではより大規模なシステムの一部としてこれらのブロックをロードする方法を説明します。ブート イメージの生成には、Vitis IDE の Create Boot Image ウィザード (Bootgen - コマンド ライン ツール) を使用します。Create Boot Image ウィザードまたは Bootgen の主要な機能はパーティション (ハードウェア ビットストリームおよびソフトウェア) を統合することであり、ユーザーはデザインにセキュリティ オプションを指定できます。暗号化キーの作成も可能です。Bootgen は、Bootgen イメージ フォーマット (BIF) ファイルを入力として使用し、バイナリ BIN または MCS フォーマットで 1 つのファイル イメージを生成します。Bootgen により出力された 1 つのファイル イメージは、NVM(QSPI、SD カード) にロードされます。Bootgen GUI により、BIF 入力ファイルを簡単に作成できます。この章では、プロセッシング システム ブロックを使用します。サンプル デザイン 1: GPIO、タイマー、および割り込みの使用では、この章で使用される PS パーティションと PL ファブリックをターゲットとするビットストリームを含むブート イメージについて説明します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 62

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

システム ソフトウェアこの章のブートおよびコンフィギュレーションの説明の大部分は、ここで挙げるシステム ソフトウェア ブロックについてです。詳細なブート フローおよびさまざまなブート シーケンスについては 『Zynq UltraScale+ MPSoC: ソフトウェア開発者向けガイド』 (UG1137) の「システム ブートおよびコンフィギュレーション」の章を参照してください。

第 1 段階ブートローダー (FSBL)非セキュア ブート モードでは、プラットフォーム管理ユニット (PMU) はコンフィギュレーション セキュリティ ユニットのリセットを解除した後、PMU サーバー モードに移行して電力を監視します。この段階で、コンフィギュレーション セキュリティ ユニットは FSBL (第一段階ブートローダー) をオンチップ メモリ (OCM) にロードします。FSBLは、APU A53_0、RPU R5_0、または RPU R5_lockstep から実行できます。この例では、FSBL は APU Cortex™-A53コア 0 をターゲットとしています。この領域の最後の 512 バイトは、ATF がハンドオフするアプリケーションに対応するハンドオフ パラメーターを共有するため、FSBL で使用されます。第 1 段階ブートローダー (FSBL) は、プロセッシング サブシステム内の重要なブロックを初期化します。これには、プロセッサのリセットのクリアや、クロック、メモリ、および UART の初期化などが含まれます。その後、DDR の次のパーティションの制御を RPU または APU に渡します。この例では、FSBL は DDR にベアメタル アプリケーションをロードしてロックステップ モードで RPU Cortex-R5F にハンドオフし、同様に U-Boot をロードして、これをAPU Cortex-A53 コア 0 で実行します。詳細は、『Zynq UltraScale+ MPSoC: ソフトウェア開発者向けガイド』(UG1137) を参照してください。この章では、第 3 章: PS サブシステム用ソフトウェアのビルドで作成した FSBL 実行ファイルを使用できます。FSBLアプリケーションでは、 xfsbl_translation_table.S は Cortex-A53 の translation_table.S と DDR 領域が予約されているという点のみが異なります。これは、DDR が初期化される前に DDR が投機的アクセスされないようにするためです。FSBL で DDR の初期化が完了すると、DDR 領域のメモリ属性が Memory に変更されます。

プラットフォーム管理ユニット ファームウェア複数段階のブート プロセスは、プラットフォーム管理ユニット (PMU) とコンフィギュレーション セキュリティ ユニット (CSU) により管理および実行されます。プリコンフィギュレーション ステージは主に PMU が制御し、PMUROM を実行してシステムをセットアップします。リセットおよび復帰に関するプロセスはすべて PMU が処理します。Vitis IDE では、PMU ファームウェアを PMU 上で動作するように構築できます。プラットフォーム管理およびPMU ファームウェアの詳細は、『Zynq UltraScale+ MPSoC: ソフトウェア開発者向けガイド』 (UG1137) を参照してください。PMU ファームウェアは、次の方法で読み込むことができます。1. bootROM を使用 (SD ブートのブート シーケンスを参照)。2. FSBL を使用 (QSPI ブート モードのブート シーケンスを参照)。3. JTAG ブート モードを使用 (JTAG を使用した QSPI ブート モードのブート シーケンスを参照)。詳細は、PMU ファームウェア ザイリンクス Wiki を参照してください。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 63

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

U-BootU-Boot はセカンダリ ブートローダーとして機能します。FSBL のハンドオフ後、U-Boot は Arm® Cortex-A53 の APUに Linux をロードします。FSBL の後、U-Boot はボード構成に基づいてプロセッシング システムの残りのペリフェラルの設定を実行します。U-Boot は、eMMC、SATA、TFTP、SD、QSPI などのさまざまなメモリ ソースからイメージを取得できます。この例では、U-Boot とその他すべてのイメージが SD カードからロードされます。したがって、ここではボードは SD ブートモードに設定されます。U-Boot は、PetaLinux ツール フローを使用して設定およびビルドできます。この例では、第 3 章: PS サブシステム用ソフトウェアのビルドで作成された、またはこの資料に付属のデザイン ファイルから作成された U-Boot イメージを使用できます。このチュートリアルのデザイン ファイルのダウンロードについては、このチュートリアルのデザインファイルを参照してください。

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 と PMU ファームウェアの直後に .BIF に配置する必要があります。ATF (bl31.elf) はデフォルトで PetaLinux に含まれており、PetaLinux プロジェクトの image ディレクトリにあります。ATF の詳細は、『Zynq UltraScale+ MPSoC: ソフトウェア開発者向けガイド』 (UG1137) の「セキュリティ機能」の章の「Arm トラステッド ファームウェア」を参照してください。

APU の Linux と RPU のベアメタルシステム ソフトウェアが設定されたら、PetaLinux ツール フローを使用して Linux イメージを作成します。PetaLinuxイメージは第 3 章: PS サブシステム用ソフトウェアのビルドで既に作成されています。この例では、PetaLinux は SDブート用のイメージをビルドするように設定されています。これは PetaLinux のデフォルトのブート設定です。このイメージは $<PetaLinux_Project>/images/linux/ ディレクトリにあります。APU に Linux をロードするために、PetaLinux から次のイメージが使用されます。• ATF - bl31.elf

• U-Boot - u-boot.elf

• 次を含む Linux イメージ - image.ub:

○ カーネル イメージ

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 64

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

○ デバイス ツリー System.dtb

○ ファイル システム rootfs.cpio.gz.u-boot

この例では、APU の Linux に加え、ベアメタル アプリケーションをロックステップ モードで RPU Cortex-R5F にロードします。この例では、Arm Cortex-R5 ベースの RPU 用カスタム ベアメタル アプリケーションの作成 で作成した testapp_r5 アプリケーションを参考にしてください。また、このチュートリアルに付属のデザイン ファイルに testapp_r5.elf 実行ファイルがあります。このチュートリアルのデザイン ファイルのダウンロードについては、このチュートリアルのデザイン ファイルを参照してください。

SD ブートのブート シーケンス各イメージの準備が完了したので、ブート イメージを作成して Zynq UltraScale+ にこれらのコンポーネントをすべてロードします。この操作は、Vitis IDE の Create Boot Image ウィザードを使用して、次の手順に従って実行できます。1. Vitis IDE で [Xilinx] → [Create Boot Image] をクリックします。2. この章の前のセクションで説明したすべてのパーティションを選択し、次の図に示すように設定します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 65

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

1. FSBL パーティションを追加します。a. Create Boot Image ウィザードで、[Add] をクリックして [Add partition] ダイアログ ボックスを開きます。b. [Add partition] ダイアログ ボックスで、[Browse] をクリックして FSBL 実行ファイルを選択します。c. FSBL では、ツールによって [Partition type] に [bootloader] が選択され、[Destination CPU] が正しく選択さ

れていることを確認します。これは、FSBL 実行ファイルに基づいて設定されます。注記: FSBL はデフォルトで EL3 に設定されているため、[Exception Level] のドロップダウン リストは無視してください。また、この例では [Enable Trust Zone] をオフのままにします。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 66

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

d. [OK] をクリックして FSBL を選択し、Create Boot Image ウィザードに戻ります。2. PMU および ATF ファームウェア パーティションを追加します。

a. [Add] をクリックして、次の図に示す [Add partition] ダイアログ ボックスを開きます。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 67

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

b. PMU ファームウェア パーティションを追加します。i. [PMU Firmware executable] を選択します。ii. [Partision type] で [pmu] を選択します。

c. [Exception Level] はデフォルトのままにし、[Enable Trust Zone] はオフのままにします。d. [OK] をクリックします。e. [Add] をクリックして、[Add partition] ダイアログ ボックスを開きます。f. ATF ファームウェア bl31.elf パーティションを追加します。

注記: ATF ファームウェア bl31.elf は、<PetaLinux Project>/image/linux/ にあります。または、「このチュートリアルのデザイン ファイル」からの bl31.elf を使用することもできます。i. [Partision type] で [datafile] を選択します。ii. [Destination Device] を [PS] に設定します。iii. [Destination CPU] を [A53 0] に設定します。iv. [Exception Level] で [EL3] を選択し、[Enable TrustZone] をオンにします。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 68

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

g. [OK] をクリックします。3. R5 実行ファイルを追加し、これをロックステップ モードで有効にします。

a. [Add] をクリックして Cortex-R5F ベアメタル実行ファイルを追加します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 69

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

b. [Destination Device] を [PS] に設定します。c. [Destination CPU] を [R5 Lockstep] に設定します。これにより、RPU R5 コアがロックステップモードで実行されるように設定されます。

d. [Exception Level] はデフォルトのままにし、[Enable Trust Zone] はオフのままにします。e. [OK] をクリックします。

4. U-Boot パーティションを追加します。sd_boot モードの u-boot.elf は <PetaLinux_project>/images/linux/sd_boot にあります。a. [Add] をクリックして u-boot.elf パーティションを追加します。b. [Destination Device] で [PS] を選択します。c. [Destination CPU] で [A53 0] を選択します。d. [Exception Level] を [EL2] に設定します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 70

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

e. [OK] をクリックして、Create Boot Image ウィザードに戻ります。f. [Create Image] をクリックします。ウィザードが閉じ、ブート イメージが作成されます。

または、BIF 属性と Bootgen コマンドを使用して BOOT.bin イメージを作成することもできます。このコンフィギュレーションでは、BIF ファイルには次の属性が含まれます。//arch = zynqmp; split = false; format = BINthe_ROM_image:{[bootloader, destination_cpu = a53-0]C:\edt\fsbl_a53\Debug\fsbl_a53.elf[pmufw_image]C:\edt\edt_zcu102_wrapper\export\edt_zcu102_wrapper\sw\edt_zcu102_wrapper\boot\pmufw.elf[destination_cpu = a53-0, exception_level = el-3, trustzone]C:\edt\sd_boot\bl31.elf[destination_cpu = r5-lockstep]C:\edt\testapp_r5\Debug\testapp_r5.elf[destination_cpu = a53-0, exception_level = el-2]C:\edt\sd_boot\u-boot.elf}

Vitis IDE は次の Bootgen コマンドを呼び出して、このコンフィギュレーションの BOOT.bin イメージを生成します。bootgen -image sd_boot.bif -arch zynqmp -o C:\edt\sd_boot\BOOT.bin

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 71

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

ZCU102 ボードでのイメージの実行1. BOOT.bin、image.ub、および boot.scr ファイルを SD カードにコピーします。boot.scr は U-Boot で読み出され、カーネルとルート ファイル システムがロードされます。

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 ポートを選択します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 72

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

9. 同様に、UART-1 に Interface-1 の COM ポートを選択します。R5 BSP は UART-1 を使用するように設定されているため、R5 アプリケーション メッセージは UART-1 ターミナルの COM ポートに表示されます。

10. SW1 を使用して ZCU102 ボードに電源を投入し、Linux がボードにロードされるまで待ちます。UART-0 用のターミナル画面に初期ブート シーケンス メッセージが表示されます。UART-1 用に設定されたターミナル画面にもメッセージが表示されます。これは、RPU で実行されているUART-1 インターフェイスを使用するように設定された R5 ベアメタル アプリケーションからのメッセージです。このアプリケーションは、FSBL によって RPU にロードされます。ベアメタル アプリケーションは、UART 割り込みサンプルを含むように変更されています。このアプリケーションは、UART-1 ターミナルのキーボードからユーザーが入力するまで、WFI (Waiting For Interrupt) 状態で待機します。

一方、ブート シーケンスは APU で継続され、ロードされたイメージは UART-0 ターミナルに表示されるメッセージからわかります。次の図に、メッセージを表示します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 73

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

U-Boot は、SMP モードで Linux カーネルとその他のイメージを Arm Cortex-A53 の APU にロードします。ターミナル メッセージに U-Boot がカーネル イメージをロードしてカーネルを起動したことが示され、ターゲットLinux OS にユーザー インターフェイス プロンプトが表示されます。カーネルのロードおよびスタート シーケンスは、次の図のようになります。

QSPI ブート モードのブート シーケンスZCU102 ボードには、最大 128 MB のデュアル パラレル QSPI フラッシュも搭載されています。この例では、QSPIブート モードでブート イメージを作成し、Zynq UltraScale+ にロードします。イメージは、Vitis IDE の Create BootImage ウィザードを使用して設定できます。これは、次の手順に従って実行できます。注記: このセクションでは、QSPI フラッシュ用に PetaLinux を使用して Linux イメージを作成するの手順に従ってQSPI ブート モードで PetaLinux イメージが作成されていると想定しています。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 75

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

1. Vitis IDE が起動していない場合は起動し、第 3 章: PS サブシステム用ソフトウェアのビルド で説明したようにワークスペース パスを設定します。

2. [Xilinx] → [Create Boot Image] を選択します。3. [Architecture] で [Zynq MP] を選択します。4. [Create new BIF] file] をオンにします。5. [Output format] が [BIN] に設定されていることを確認します。6. [Basic] タブで、[Output BIF] file path] に出力 BIF ファイルのパス、[Output path] に出力パスを指定します。

7. 次の手順に従ってブート パーティションを追加します。a. [Add] をクリックして、[Add Partition] ダイアログ ボックスを開きます。b. [Add Partition] ダイアログ ボックスで、[File path] の [Browse] をクリックして FSBL 実行ファイルを選択します。i. FSBL では、ツールによって [Partition type] に [bootloader] が選択され、[Destination CPU] が正しく選

択されていることを確認します。これは、FSBL 実行ファイルに基づいて設定されます。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 76

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

ii. FSBL はデフォルトで EL3 に設定されているため、[Exception Level] のドロップダウン リストは無視します。また、この例では [Enable Trust Zone] をオフのままにします。

iii. [OK] をクリックして FSBL を選択し、Create Boot Image ウィザードに戻ります。c. [Add] をクリックして [Add Partition] ダイアログ ボックスを開き、次のパーティションを追加します。d. プラットフォーム管理ユニットの PMU ファームウェアを追加します。

i. [Partition type] で [datafile] を選択し、[Destination Device] で [PS] を選択します。ii. [Destination CPU] で [PMU] を選択します。iii. [OK] をクリックします。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 77

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

e. ATF ファームウェアを追加します。[Partition type] を [datafile] に設定します。i. ATF 実行ファイル bl31.elf は、PetaLinux イメージ フォルダー (<PetaLinux_project>/images/

linux/) にあります。ii. [Destination Device] で [PS] を選択し、[Destination CPU] で [A53 0] を選択します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 78

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

iii. [Exception Level] で [EL3] を選択し、[Enable Trust Zone] をオンにします。

iv. [OK] をクリックします。f. [Add] をクリックして R5 ベアメタル実行ファイルを追加します。

i. R5 実行ファイルを次の図に示すように追加し、[R5 Lockstep] を選択します。ii. [OK] をクリックします。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 79

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

g. [Add] をクリックして U-Boot パーティションを追加します。u-boot.elf は、<PetaLinux_Project>/images/linux/ にあります。i. 次のように設定します。

• [Partition type] を [datafile] に設定します。• [Destination Device] を [PS] に設定します。• [Destination CPU] を [A53 0] に設定します。• [Exception Level] を [EL2] に設定します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 80

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

ii. [OK] をクリックします。h. [Add] をクリックして Linux イメージ ファイル image.ub を追加します。

i. イメージ ファイル image.ub は、images/Linux ディレクトリの PetaLinux プロジェクトにあります。ii. image.ub では、次のように設定します。

• [Partition type] を [datafile] に設定します。• [Destination Device] を [PS] に設定します。• [Destination CPU] を [A53 0] に設定します。

iii. [Offset] に「0xF00000」と入力します。iv. [Exception Level] はデフォルトのままにし、[Enable Trust Zone] はオフのままにします。注記: オフセット値については、QSPI フラッシュ用に PetaLinux を使用して Linux イメージを作成するを参照してください。

i. [Add] をクリックして Linux スクリプト ファイル boot.scr を追加します。i. boot.scr ファイルは、PetaLinux プロジェクトの images/linux ディレクトリにあります。ii. boot.scr では、次のように設定します。

• [Partition type] を [datafile] に設定します。• [Destination Device] を [PS] に設定します。• [Destination CPU] を [A53 0] に設定します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 81

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

iii. [Offset] に「0x3e80000」と入力します。iv. [Exception Level] はデフォルトのままにし、[Enable Trust Zone] はオフのままにします。

8. [OK] をクリックして、Create Boot Image ウィザードに戻ります。9. [Create Image] をクリックして qspi_BOOT.bin イメージを作成します。または、BIF 属性と Bootgen コマンドを使用して qspi_BOOT.bin イメージを作成することもできます。このコンフィギュレーションの BIF 属性は、[Preview BIF Changes] をクリックして表示できます。このコンフィギュレーションでは、BIF ファイルには次の属性が含まれます。//arch = zynqmp; split = false; format = BINthe_ROM_image:{[bootloader, destination_cpu = a53-0]C:\edt\fsbl_a53\Debug\fsbl_a53.elf[destination_cpu = pmu]C:\edt\edt_zcu102_wrapper\export\edt_zcu102_wrapper\sw\edt_zcu102_wrapper\boot\pmufw.elf[destination_cpu = a53-0, exception_level = el-3, trustzone]C:\edt\qspi_boot\bl31.elf[destination_cpu = r5-lockstep]C:\edt\testapp_r5\Debug\testapp_r5.elf[destination_cpu = a53-0, exception_level = el-2]C:\edt\qspi_boot\u-boot.elf[offset = 0xF00000, destination_cpu = a53-0]C:\edt\qspi_boot\image.ub[offset = 0x3e80000, destination_cpu = a53-0]C:\edt\qspi_boot\boot.scr}

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 82

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

Vitis IDE は次の Bootgen コマンドを呼び出して、このコンフィギュレーションの qspi_BOOT.bin イメージを生成します。bootgen -image qspi_boot.bif -arch zynqmp -o C:\edt\qspi_BOOT.bin

注記: このブート シーケンスでは、FSBL (第一段階ブートローダー) によって PMU ファームウェアがロードされます。これは、[Partition type] を [datafile] に設定して PMU ファームウェアが追加されたためです。理想的には、前のセクションで説明したように、bootROM コードで PMU 用の PMU ファームウェアをロードできます。PMU ファームウェアの詳細は、『Zynq UltraScale+ MPSoC: ソフトウェア開発者向けガイド』 (UG1137) の「プラットフォーム管理」の章を参照してください。

ZCU102 ボードで QSPI ブート モードでイメージを実行この例でイメージをテストするには、Vitis IDE の Program Flash ユーティリティを使用して、ZCU102 ボードの QSPIにブート イメージ (qspi_BOOT.bin) イメージをロードします。または、XSDB デバッガーを使用することもできます。1. Vitis IDE で [Xilinx] → [Program Flash] をクリックします。2. [Program Flash Memory] ダイアログ ボックスで [Browse] をクリックし、このサンプル プロジェクトの一部として作成された qspi_BOOT.bin イメージ ファイルを選択します。

3. [Flash Type] で [qspi-x8-dual_parallel] を選択します。4. [Offset] を [0] に設定して、[FSBL ELF file] で FSBL ELF ファイル (fsbl_a53.elf) を選択します。5. 次の手順に従って、ZCU102 ターゲットの USB-JTAG コネクタとホスト マシンの USB ポートが USB ケーブルで接続されていることを確認します。a. SW6 ブート モード スイッチを次の図に示すように設定します。b. ボードの電源をオンにします。

6. [Program] をクリックし、qspi_BOOT.bin イメージで QSPI フラッシュをプログラムするプロセスを開始します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 83

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

次の図に示すように、コンソールに「Flash Operation Successful」というメッセージが表示されるまで待ちます。

ZCU102 ボードの設定1. ボードの USB-UART をホスト マシンに接続します。マイクロ USB ケーブルの一端を ZCU102 ボードのマイクロ USB ポート J83 に接続し、もう一端をホスト マシンの空きの USB ポートに接続します。

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

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 84

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

3. 12V 電源を ZCU102 の 6 ピン Molex コネクタに接続します。4. 使用しているホスト マシンに応じて Tera Term または Minicom を使用し、ターミナル セッションを開始します。

COM ポートとボー レートを次の図に示すように設定します。5. ポート設定では、デバイス マネージャーで COM ポートを検証します。ZCU102 では 4 つの USB UART インターフェイスが使用されています。

6. 最も小さい番号のインターフェイスに関連付けられた COM ポートを選択します。ここでは、UART-0 に対してInterface-0 の COM ポートを選択します。

7. 同様に、UART-1 に Interface-1 の COM ポートを選択します。R5 BSP は UART-1 を使用するように設定されているため、R5 アプリケーション メッセージは UART-1 ターミナルの COM ポートに表示されます。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 85

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

8. SW1 を使用して ZCU102 ボードに電源を投入します。ここで、UART-0 用のターミナル画面に初期ブート シーケンス メッセージが表示されます。UART-1 用に設定されたターミナル画面にもメッセージが表示されます。これは、RPU で実行されているUART-1 インターフェイスを使用するように設定された R-5 ベアメタル アプリケーションからのメッセージです。このアプリケーションは、FSBL によって RPU にロードされます。ベアメタル アプリケーションは、UART 割り込みサンプルを含むように変更されています。このアプリケーションは、UART-1 ターミナルのキーボードからユーザーが入力するまで、WFI 状態で待機します。

一方、ブート シーケンスは APU で継続され、ロードされたイメージは UART-0 ターミナルに表示されるメッセージからわかります。次の図に、メッセージを表示します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 86

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

U-Boot は、SMP モードで Linux カーネルとその他のイメージを Arm Cortex-A53 の APU にロードします。ターミナル メッセージは、U-Boot がカーネル イメージをロードしてカーネルが起動したことを示し、Linux カーネルでユーザー インターフェイス プロンプトが表示されます。カーネルのロードおよびスタート シーケンスは、次の図のようになります。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 88

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

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 を使用してボードに電源を投入します。Vitis IDE で XSCT ボタンをクリックして [XSCT Console]ビューを開きます。または、[Xilinx] → [XSCT Console] をクリックして [XSCT Console] ビューを開くこともできます。

4. [XSCT Console] ビューで、次の connect コマンドを使用して JTAG を介してターゲットに接続します。xsct% connect

connect コマンドは、接続のチャネル ID を返します。5. target コマンドにより、使用可能なターゲットがリストされ、各 ID を使用してターゲットを選択できます。ターゲットには JTAG チェーンで検出されたときに ID が割り当てられるので、ターゲット ID はセッションごとに変わります。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 89

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

注記: スクリプト記述などの非対話型の使用法では、ID を使用してターゲットを選択するのではなく、-filter オプションを使用してターゲットを選択できます。xsct% targets

次の図に示すように、ターゲットが一覧表示されます。

XSCT/XSDB を使用した U-Boot のロード1. 次のコマンドを使用して、Cortex-A53 # 0 に U-Boot アプリケーションをダウンロードします。

デフォルトでは、JTAG セキュリティ ゲートはイネーブルです。DAP、PL TAP、および PMU のセキュリティ ゲートをディスエーブルにします。これにより、PMU MB ターゲットがデバッガーに可視となります。xsct% targets -set -filter {name =~ "PSU"}xsct% mwr 0xffca0038 0x1ffxsct% targets

PMU デバイスの下に PMU MB がリストされていることを確認します。PMU ファームウェアをロードして実行します。xsct% targets -set -filter {name =~ "MicroBlaze PMU"}xsct% dow {C:\edt\edt_zcu102_wrapper\export\edt_zcu102_wrapper\sw\edt_zcu102_wrapper\boot\pmufw.elf}xsct% con

APU Cortex-A53 コア 0 をリセットし、FSBL をロードして実行します。xsct% targets -set -filter {name =~ "Cortex-A53 #0"}xsct% rst -processor

注記: rst -processor は個々のプロセッサ コアのリセットをクリアします。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 90

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

Zynq UltraScale+ を JTAG ブート モードで起動すると、すべての APU コアおよび RPU コアがリセット状態に保持されるので、この手順は重要です。これらのコアでデバッグを実行する前に、各コアのリセットをクリアする必要があります。リセットは XSCT の rst コマンドでクリアできます。注記: rst -cores は、現在のターゲットが子となっている、グループ (APU または RPU など) 内にあるすべてのプロセッサ コアのリセットをクリアします。たとえば、Cortex-A53 #0 が現在のターゲットである場合、rst-cores は APU のすべての Cortex-A53 コアのリセットをクリアします。FSBL をロードして実行します。xsct% dow {C:\edt\fsbl_a53\Debug\fsbl_a53.elf}xsct% con

シリアル ターミナルに表示される FSBL メッセージを確認し、数秒後に FSBL を停止します。xsct% stop

ATF をロードして実行します。xsct% dow {C:\edt\qspi_boot\bl31.elf}xsct% conxsct% stop

2. シリアル ターミナル (Tera Term、Minicom、または UART-0 USB シリアル接続用のシリアル ターミナル インターフェイス ) を設定します。シリアル ターミナルの設定は、次の図を参照してください。

3. U-Boot をロードして実行します。xsct% dow {C:\edt\qspi_boot\u-boot.elf}

4. XSDB で con コマンドを使用して U-Boot を実行します。xsct% con

5. ターゲットのシリアル ターミナルで、任意のキーを押して U-Boot の自動ブートを停止します。6. XSDB で stop コマンドを使用してコアを停止します。

xsct% stop

XSDB を使用した DDR への BOOT.bin のロード1. ZCU102 の DDR に Boot.bin バイナリをダウンロードします。QSPI ブート モード用に作成された同じ

Boot.bin を使用します。xsct% dow -data {C:\edt\qspi_boot\qspi_BOOT.bin} 0x2000000

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 91

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

2. XSDB で con コマンドを使用して、U-Boot を再開します。xsct% con

U-Boot を使用した QSPI への BOOT.bin イメージのロード1. ターゲット ターミナルの U-Boot コンソールで次のコマンドを実行します。これらのコマンドによって QSPI が消去され、Boot.bin イメージが DDR から QSPI に書き込まれます。ZynqMP> sf probe 0 0 0ZynqMP> sf erase 0 0x4000000ZynqMP> sf write 0x2000000 0 0x4000000

2. イメージが QSPI に書き込まれたら、ZCU102 ボードの電源を切断し、ZCU102 ボードの設定のとおりにボードをセットアップします。UART-0 ターミナルで Linux のロード、UART-1 ターミナルで R5 アプリケーションの実行を確認できます。

この章では、主にシステム ブートと、システム ブートに関連するさまざまなコンポーネントを中心に説明しています。次の章で、PS ペリフェラル、PL IP、および APU コアと RPU コアの処理能力を活用する Linux およびスタンドアロン (ベアメタル) アプリケーションについて説明します。

USB ブート モードのブート シーケンスZynq UltraScale+ MPSoC は USB スレーブ ブート モードもサポートしています。これは、USB デバイス クラス仕様の USB DFU (Device Firmware Upgrade) を適用しています。OpenMoko DFU-Util のような標準アップデート ユーティリティを使用すると、新しく作成されたイメージを USB ポートを介して Zynq UltraScale+ にロードできます。次のセクションでは、このブート モードでブート イメージをロードするために必要な一連の設定を説明します。DFU ユーティリティは、Vitis 統合ソフトウェア プラットフォームおよび PetaLinux に付属しています。

USB ブート モードを有効にするために必要な FSBL の設定USB ブート モードを有効にするために必要な FSBL の変更はほとんどありません。USB ブート モード サポートは、FSBL のフットプリントを約 10 KB 増加します。これは主に初期開発段階中に使用することを目的としているので、このサポートは OCM 空間を節約するためデフォルトでは無効になっています。このセクションでは、FSBL を変更して USB ブート モードを有効します。FSBL プロジェクトはこのチュートリアル全体で広く使用されているので、既存の FSBL プロジェクトは変更しません。その代わりに、このセクションでは新しい FSBL プロジェクトを使用します。

USB ブート用の FSBL (第 1 段階ブートローダー) の作成1. Vitis IDE で [File] → [New] → [Application Project] をクリックし、New Application Project ウィザードを開きます。2. ウィザードの各ページで次の表の情報に基づいて設定を選択します。

表 9: ウィザードのプロパティおよびコマンドウィザード ページ システム プロパティ 設定

Platform Select a platform from repository edt_zcu102_wrapper

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 92

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

表 9: ウィザードのプロパティおよびコマンド (続き)

ウィザード ページ システム プロパティ 設定Application Project Details Application project name fsbl_usb_boot

System project name fsbl_usb_boot_system

Target processor psu_cortexa53_0

Domain Domain standalone on psu_cortexa53_0

Templates Available Templates Zynq MP FSBL

3. [Finish] をクリックします。4. [Project Explorer] ビューで fsbl_usb_boot プロジェクトを展開し、[fsbl_usb_boot] → [ src] → [xfsbl_config.h] か

ら 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) と PMU ファームウェアが、DFU ユーティリティを使用してホスト マシンの USB ポートから ZynqUltraScale+ のオンチップ メモリ (OCM) にコピーされます。OCM のサイズ (256 KB) により、bootROM で USB ブート モードでダウンロードされるブート イメージのサイズが制限されます。これを考慮し、サイズ要件が満たされていることを条件として、FSBL と PMU ファームウェアのみが最初の boot.bin に統合され、OCM にコピーされます。残りのブート パーティションは、別のブート イメージに統合されて DDR メモリにコピーされます。DDR は、この段階で既にロードされて実行されている FSBL によりロードされます。次の手順に従って、このブート モードのブート イメージを作成します。1. Vitis IDE で [Xilinx] → [Create Boot Image] をクリックします。2. fsbl_usb_boot.elf および pmufw.elf のパーティションを選択し、次の図に示すように設定します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 93

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

3. PMU パーティションが 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.dtsi で system-user.dtsi を変更するには、次の手順に従います。1. system-user.dtsi を次のようになるように変更します。

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

&uart1{

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 94

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

status = "disabled";};&dwc3_0 {dr_mode = "peripheral"; maximum-speed = "super-speed"; };

変更済みの system-user.dtsi ファイルは、このチュートリアル付属のデザイン ファイル ZIP の <DesignFiles>/usb_boot フォルダーに含まれています。

2. 次の変更を含めて PetaLinux をビルドします。$ petalinux-build

次の手順に従って、残りのパーティションを含む usb_boot.bin を作成します。注記: 新しく生成された U-Boot を C:\edt\usb_boot\ にコピーします。u-boot.elf はこのチュートリアルのデザイン ファイルにも含まれています。1. Vitis IDE で [Xilinx] → [Create Boot Image] をクリックします。2. [FSBL] および残りのパーティションを選択し、次の図に示すように設定します。SD ブート シーケンスから BIF

ファイルをインポートすることもできます。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 95

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

注記: ATF のパーティションの場合 [Exception Level] で [EL-3] を設定して [Enable Trust Zone] をオンにし、U-Boot のパーティションの場合は [Exception Level] で [EL-2] を設定します。これらの設定は、その他のパーティションでは無視できます。

3. PMU ファームウェア パーティションは、イメージ (usb_boot.bin) がロードされる前に bootROM によってロードされるため、このイメージには必要ありません。

4. [Create Image] をクリックして usb_boot.bin を生成します。注記: Linux までをブートするには、BOOT.bin および usb_boot.bin のほかに image.ub のような Linux イメージが必要です。この image.ub は、DFU ユーティリティによって個別にロードされます。

USB ブートを使用したブートこのセクションでは、DFU ユーティリティを使用して ZCU102 ターゲットにブート イメージをロードします。開始する前に、次のようにボード接続を設定します。1. SW6 を次の図に示すように 1 をオン、2 をオフ、3 をオフ、4 をオフにして、ZCU102 を USB ブート モードに設定します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 96

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

2. USB 3.0 ケーブルの一端を J96 USB 3 ULPI コネクタに接続し、もう一端をホスト マシンの USB ポートに接続します。

3. USB Micro ケーブルでボード (J83) とホスト マシン間の USB-UART ポートを接続します。4. 使用しているホスト マシンに応じて Tera Term または Minicom を使用し、ターミナル セッションを開始し、システムの COM ポートとボー レートを設定します。

5. ボードに電源を投入します。次のセクションの手順では、DFU ユーティリティを使用して USB 経由でブート イメージをロードします。DFU ユーティリティは、VITIS\2019.1\tps\lnx64\dfu-util-0.9 にあります。または、使用する Linux ディストリビューションでサポートされているパッケージ マネージャーを使用して DFU ユーティリティを Linux にインストールすることも可能です。

Linux ホスト マシンのブート コマンド1. DFU が USB ターゲットを検出可能かどうかをチェックします。

$ sudo dfu-util -l

USB デバイスは、VendorId: ProductId (03fd:0050) でエニュメレートする必要があります。次のようなメッセージが表示されます。Found DFU: [03fd:0050] ver=0100, devnum=30, cfg=1, intf=0, alt=0, name="Xilinx DFU Downloader", serial="2A49876D9CC1AA4"

注記: 「Found DFU」メッセージが表示されない場合は、接続を確認して再試行してください。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 97

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

2. USB ブート用ブート イメージの作成 で作成した BOOT.bin をダウンロードします。$ sudo dfu-util -d 03fd:0050 -D <USB_Boot_Image_Path>/Boot.bin

FSBL が問題なくロードされていることをシリアル ターミナルで確認します。3. usb_boot.bin をダウンロードします。その前に、UART-1 シリアル コンソール用に別のターミナル セッションを開始します。$ sudo dfu-util -d 03fd:0050 -D <USB_Boot_Image_Path>/usb_boot.bin

UART 0 ターミナルをチェックし、U-Boot がロードされるまで待機します。4. U-Boot のプロンプト画面で「[Enter]」と入力して自動ブートを終了します。R5 アプリケーションも問題なくロ

ードされていることを UART1 で確認します。5. U-Boot コマンド ラインに次のコマンドを入力して DFU 環境を設定します。

$ setenv loadaddr 0x10000000$ setenv kernel_addr 0x10000000$ setenv kernel_size 0x1e00000$ setenv dfu_ram_info "setenv dfu_alt_info image.ub ram $kernel_addr $kernel_size"

6. U-Boot コンソールで DFU_RAM を開始して Linux イメージのダウンロードを有効にします。U-boot> run dfu_ram

7. ホスト マシン ターミナルから次のコマンドを実行して Linux イメージの Image.ub をダウンロードします。$ sudo dfu-util -d 03fd:0300 -D <PetaLinux_project>/images/linux/image.ub -a 0

8. U-Boot コンソールで [CTRL+C] キーを押して dfu_ram を停止します。9. U-Boot コンソールで bootm コマンドを実行します。

U-boot> bootm

10. Linux がターゲットに問題なくロードされていることを確認します。注記: この例では、image.ub を U-Boot コンフィギュレーションの #define DFU_ALT_INFO_RAM の設定に基づいて DDR ロケーションにコピーします。同じものを変更して使用し、ほかのイメージ ファイルを DDR ロケーションにコピーできます。必要な場合は、これらのイメージを JTAG を使用した QSPI ブート モードのブート シーケンスにリストされている U-Boot コマンドを使用して QSPI にコピーできます。

Windows ホスト マシンのブート コマンド1. Vitis IDE で [Xilinx] → [Launch Shell] をクリックします。2. シェルが起動したら、DFU が USB ターゲットを検出可能であることを確認します。

> dfu-util.exe -l

注記: dfu-util.exe は <VITIS_Installation_path>\VITIS\2020.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] を選択し、[Installdriver] をクリックします。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 98

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

4. USB ブート用ブート イメージの作成 で作成した Boot.bin をダウンロードします。$ dfu-util.exe -d 03fd:0050 -D BOOT.bin

5. FSBL が問題なくロードされていることをシリアル ターミナル (UART 0) で確認します。6. usb_boot.bin をダウンロードします。その前に、UART-1 シリアル コンソール用に別のターミナル セッションを開始します。$ dfu-util.exe -d 03fd:0050 -D usb_boot.bin

7. U-Boot のプロンプトに「Enter」と入力して自動ブートを終了します。UART1 コンソールで R5 アプリケーションも問題なくロードされていることを確認します。注記: ここで、zadig ツールを使用してデバイス ID 03fd:0300 の「USB download gadget」用にドライバーをインストールします。このドライバーがない場合、ターゲットで U-Boot を起動した後に zadig ツールに「Xilinx DFUDownloader」が表示されません。

8. U-Boot コマンド ラインに次のコマンドを入力して DFU 環境を設定します。$ setenv loadaddr 0x10000000$ setenv kernel_addr 0x10000000$ setenv kernel_size 0x1e00000$ setenv dfu_ram_info "setenv dfu_alt_info image.ub ram $kernel_addr $kernel_size"

9. U-Boot コンソールで DFU_RAM を開始して Linux イメージのダウンロードを有効にします。U-boot> run dfu_ram

10. ホスト マシン ターミナルから次のコマンドを実行して Linux イメージの image.ub をダウンロードします。$ dfu-util.exe -d 03fd:0300 -D image.ub -a 0

11. U-Boot コンソールで bootm コマンドを実行します。U-boot> bootm

12. Linux がターゲットに問題なくロードされていることを確認します。

セキュア ブート シーケンスZynq UltraScale+ MPSoC のセキュア ブート機能により、パーティションの機密性、完全性、および認証がサポートされます。セキュア ブートは、Zynq UltraScale+ デバイスのハードウェアによる信頼のルート (HROT) 機能と、すべてのブート パーティションを暗号化する機能を組み合わせることで実現します。HROT は、ハードウェア アクセラレーションされた SHA-3/384 を使用する RSA-4096 非対称アルゴリズムに基づきます。機密性は、256 ビットAdvanced Encryption Standard - Galois Counter Mode (AES-GCM) により実現しています。このセクションでは、次の機能の使用方法と実装方法を中心に説明します。• キーの取り消しを含むハードウェアによる信頼のルート• 差分電力解析 (DPA) 対策を含むパーティション暗号化• 物理的複製防止機能 (Physically Unclonable Function: PUF) を使用したブラック キーの格納

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 99

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

セキュア ブート システム デザインにおける決定 では、デザイン開発の早期に実行すべき高レベルのセキュア ブートの判断について説明します。ハードウェアによる信頼のルート (HROT) では、ブートにおける信頼のルート (RoT) の使用について説明します。ブート イメージの機密性と DPA では、AES 暗号化を使用する機密性の保護手法について説明します。ブート イメージの機密性と DPA では、DPA 攻撃への対策としての操作キーとキー ローリング手法の使用について説明します。AES キーを変更することで、キーとそのキーで保護されているデータが脅威にさらされる危険性が低くなります。レッド キーは暗号化なしフォーマットのキーです。ブラック キーの格納 では、暗号化 (ブラック) フォーマットでAES キーを格納する方法について説明します。ブラック キーの格納では、PUF をキーの暗号化キー (KEK) として使用します。セキュア ブートでの実用的な方法 では、AES 暗号化および RSA 認証を使用するシステムの開発およびテスト手順を説明します。

セキュア ブート システム デザインにおける決定セキュア ブートに影響を及ぼすデバイス レベルの決定事項は次のとおりです。• ブート モード• AES キーの格納場所• AES の格納ステート (暗号化または暗号化なし)

• 暗号化および認証の要件• キーの設定セキュア ブートをサポートするブート モードは、クワッド シリアル ペリフェラル インターフェイス (QSPI)、SD、eMMC、USB ブート、および NAND です。AES キーは、eFUSE (暗号化または暗号化なし)、バッテリ バックアップランダム アクセス メモリ (BBRAM) (暗号化なし)、または外部 NVM (暗号化のみ) に格納されます。Zynq UltraScale+ MPSoC では、パーティションはパーティション単位で暗号化および認証できます。ザイリンクスでは通常、すべてのパーティションに RSA 認証を使用することをお勧めします。オープンソース (U-Boot、Linux) のパーティション、または専有情報や機密情報を含まないパーティションは通常、暗号化する必要はありません。機密データや専有 IP のソース/サプライヤーが複数存在するシステムでは、固有のキーを使用してパーティションを暗号化することが重要になります。耐 DPA 攻撃の要件は、攻撃者がデバイスに物理的にアクセスできるかどうかによって決まります。次の表に、特定のセキュア システム要件を満たすために必要な機能を決定する際に役立つ基準を示します。以降のセクションでは、これらの機能についてより詳しく説明します。表 10: システム レベルのセキュリティ要件

システムの考慮事項/要件 Zynq UltraScale+ の機能デバイスでユーザー ソフトウェアおよびハードウェアのみを実行可能 HWROT

ユーザー ソフトウェアおよびハードウェアが変更されない HWROT

攻撃者がソフトウェア/ハードウェアを複製またはリバース エンジニアリングできない ブート イメージの機密性

機密データおよび独自の IP (Intellectual Property) を保護 ブート イメージの機密性秘密キー (AES キー) をサイド チャネル攻撃から保護 DPA 保護

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 100

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

表 10: システム レベルのセキュリティ要件 (続き)

システムの考慮事項/要件 Zynq UltraScale+ の機能秘密キー (AES キー) が停止状態で暗号化されて格納される ブラック キーの格納

ハードウェアによる信頼のルート (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) でも認証されます。セキュア ブート フローでは、パーティションはまず認証され、その後必要に応じて復号化されます。

認証次の図に、パーティションの RSA 署名および検証を示します。Bootgen ツールは、セキュアな施設から秘密キーを使用してパーティションに署名を入れます。デバイス内では、公開キーを使用して、ROM が FSBL を検証し、FSBL または U-Boot のいずれかが続くパーティションを検証します。プライマリおよびセカンダリの秘密/公開キー ペアが使用されます。プライマリ秘密/公開キーは、セカンダリ秘密/公開キー ペアを認証します。セカンダリ キーは、パーティションを署名/検証します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 101

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

図 4: 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

SHA3SHA3 RSA

Verify

RSA Sign

X23615-010920

パーティションに署名を入れるため、Bootgen はまずパーティション データの SHA3 を計算します。その後、秘密キーを使用して 384 ビットのハッシュが RSA 署名されます。結果の RSA 署名が認証証明に追加されます。イメージ内では、署名された各パーティションにパーティション データがあり、その後に RSA 署名を含む認証証明が続きます。FSBL の検証は、CSU ROM コードで実行されます。後続のパーティションは、FSBL または U-Boot により xilsecureライブラリを使用して検証されます。ブート ヘッダー認証という認証用のデバッグ モードがあります。この認証モードでは、デバイス eFUSE に格納されているプライマリ公開キー ダイジェスト、セッション キー ID、およびキー取り消しビットは CSU ROM コードでチェックされません。そのため、このモードはセキュアではありませんが、eFUSE をプログラムする必要がないので、テストおよびデバッグには便利です。このチュートリアルではこのモードを使用します。フィールドに展開されたシステムではブート ヘッダー認証は使用しないでください。このセクションの最後に、完全にセキュアなシステム用のBIF ファイル例が含まれています。

ブート イメージの機密性と DPAAES を使用して、機密データおよび IP の機密性を確実に保護します。Zynq UltraScale+ では、AES Galois CounterMode (GCM) を使用します。また、Zynq UltraScale+ は 256 ビットの AES キーを使用します。Zynq UltraScale+ で改善された主な AES の機能は、Differential Power Analysis (DPA) 攻撃に対する耐性が強化されていることと、AES 暗号化/復号化後のブートが利用可能になっていることです。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 102

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

Bootgen および FSBL ソフトウェアでは AES 暗号化がサポートされています。秘密キーが AES 暗号化に使用され、AES 暗号化は Bootgen がキー ファイルを使用して実行します。キー ファイルは、Bootgen または OpenSSL により生成できます。操作キーを使用すると、デバイス キーが脅威にさらされる危険性が低くなります。次のセクションで、キー ローリングでの操作キーの使用について説明します。ブート イメージの機密性を保持するために、Bootgen を使用して暗号化されたブート イメージを作成できます。BBRAM および eFUSE にキーをプログラムするソフトウェアの例も、Vitis IDE で提供されています。そのうちの一例をセキュア ブートでの実用的な方法で説明します。

DPA 保護キー ローリングは耐 DPA 攻撃に使用されます。キー ローリングとブラック キーの格納は、同じデザインで使用できます。キー ローリングでは、ソフトウェアとビットストリームは複数のデータ ブロックに分割され、それぞれ固有のキーで暗号化されます。最初のキーは、BBRAM または eFUSE NVM に格納されます。続くデータ ブロックのキーは前のデータ ブロックで暗号化されます。最初のキーの後、キー アップデート レジスタがキー ソースとして使用されます。96 ビット初期化ベクター (IV) が 1 つ、NKY キー ファイルに含まれます。IV は 96 ビットを使用して AES カウンターを初期化します。キー ローリングが使用される場合、128 ビット IV が 1 つ、ブート ヘッダーに提供されます。32LSB で、現在のキーで復号化されるデータのブロック サイズが定義されます。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 登録を参照してください。PUF 登録および eFUSE モードの詳細は、『BBRAM および eFUSE のプログラミング』(XAPP1319: 英語版、日本語版) を参照してください。ヘルパー データおよび暗号化されたユーザー キーは共に、PUF eFUSE のときは eFUSE に、PUF ブート ヘッダー モードのときはブート ヘッダーに格納する必要があります。PUF ブート ヘッダー モードの手順は、ブート ヘッダー モードでの PUF の使用で説明します。eFUSE モードの PUF の使用方法は、『BBRAM および eFUSE のプログラミング』(XAPP1319: 英語版、日本語版) を参照してください。このチュートリアルでは、eFUSE のプログラムが不要でテストおよびデバッグに便利な PUF ブート ヘッダー モードを使用します。ただし、PUB ブート ヘッダー モードでは各デバイスに対して個別に Bootgen を実行する必要があるので、最も一般的なモードは PUF eFUSE モードです。セキュア ブート シーケンスの最後に、PUF eFUSE モードを示す完全にセキュアなシステム用の BIF ファイル例が含まれています。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 103

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

セキュア ブートでの実用的な方法このセクションでは、Zynq UltraScale+ システムでセキュア ブートを開発する手順を概説します。セキュアなエンベデッド システムを構築するには、2 段階のプロセスが必要です。第 1 段階では、暗号化キーを生成して NVM にプログラムします。第 2 段階では、セキュア システムを開発してテストします。どちらの段階でも Vitis IDE を使用し、ソフトウェア プロジェクトの作成、イメージの生成、およびイメージのプログラムを実行します。第 2 段階のテストシステムは、fsbl.elf および hello.elf ファイルのような単純なものにできます。このセクションでは、SD ブートのブート シーケンスで使用されているものと同じイメージを使用しますが、このイメージをアセンブルし、セキュア ブート シーケンスの一部としてセキュア属性を有効にします。このセクションでは、まず AES および RSA キーの生成方法を示します。キーの生成に続き、高度な AES および RSA手法を使用してシステムを開発し、テストします。このセクションで生成されるキーは、このチュートリアルのデザイン ファイルにも含まれています。AES 機能の開発に使用する手法は、次のセクションで説明されています。• 認証用のキーの生成• キー ローリングを使用した暗号化の有効化• 操作キーの使用の有効化• eFUSE の AES キー• PUF の使用RSA 秘密/公開キー ペアの作成 に、ブート時にロードされるすべてのパーティションを認証する手順を説明しています。キーの取り消し方法も示しています。セキュア システムの開発では、イメージの生成時に使用するセキュリティ属性を追加する必要があります。Bootgenによりブート イメージ フォーマット (BIF) ファイルが生成されます。BIF ファイルはテキスト ファイルです。最もシンプルなフォーマットの BIF では、ブート時にロードされるパーティションがリストされます。暗号化機能を指定するためのセキュリティ属性が BIF に追加されます。BIF ファイルは Bootgen GUI (Create Boot Image ウィザード)により生成されることがほとんどです。セキュリティ属性を追加する際、Bootgen で生成された BIF ファイルの変更が求められることがあります。Vitis IDE の Create Boot Image ウィザードで、[Security] タブをクリックし、[Authentication] タブおよび [Encryption] タブでセキュリティ属性を指定します。セキュア ブートで AES および RSA 暗号化をインプリメントしたら、ブート テストは完了します。システムが問題なくロードされ、ターミナルに FSBL メッセージが表示されます。これらのメッセージには、各パーティションで実行された暗号化操作が示されます。付録 A: セキュア ブートでの問題のデバッグでは、セキュア ブート テストで問題が検出された場合に実行する手順を説明します。

サンプル デザインの概要サンプル デザインは、さまざまなタイプのイメージをデバイスに読み込みます。FSBL、PMU ファームウェア、U-Boot、Linux、RPU ソフトウェア、および PL コンフィギュレーション イメージを読み込みます。このサンプルでは、これらすべてのイメージは FSBL により読み込まれ、FSBL ですべての認証および復号化が実行されます。これがシステムをブートする唯一の方法ではありませんが、2019.1 以降ではシンプルでセキュアな方法です。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 104

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

図 5: サンプル デザインの概要

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

X20902-052418

ブート イメージ内のさまざまなセクションはセキュリティ レベルが異なり、異なる場所に読み込まれます。次の表に、最終的なブート イメージの内容を示します。表 11: 最終的なブート イメージとセキュア属性

バイナリ RSA 認証 AES 暗号化 例外レベル ローダーFSBL あり あり EL3 CSU ROM

PMU ファームウェア あり あり 該当なし FSBL

PL ビットストリーム あり あり 該当なし FSBL

Arm トラステッド ファームウェア (ATF)あり なし EL3 FSBL

R5 ソフトウェア あり あり 該当なし FSBL

U-Boot あり なし EL2 FSBL

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 105

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

表 11: 最終的なブート イメージとセキュア属性 (続き)

バイナリ RSA 認証 AES 暗号化 例外レベル ローダーLinux あり なし EL1 FSBL

注記:1. セキュア ブート シーケンスでは、PMU イメージは FSBL により読み込まれます。PMU ファームウェアの読み込みに

bootROM/CSU を使用すると、まず FSBL の復号化、その後 PMU イメージの復号化にキー/IV の組み合わせが 2 回使用されるので、セキュリティ脆弱性が発生します。これはセキュア システムでは許容されません。

2. 2019.1 からは、U-Boot で Linux のセキュア認証読み込みは実行されません。U-Boot の代わりに FSBL で Linux イメージがメモリ アドレスに読み込まれ、U-Boot が使用されてそのメモリ アドレスにジャンプします。

このチュートリアルでは、第 6 章: システム デザイン例を使用して作成したバイナリを、すべてのセキュリティ機能を有効にしてブート イメージに統合します。このセクションでは、PL ビットストリームをセキュア ブート フローの一部として追加する方法も示します。第 6 章: システム デザイン例 の手順を ビルド設定の変更 まで実行して必要なファイルをすべて作成してから、このセクションに戻ります。ブート イメージでセキュリティ機能を有効にするには、2 つの方法があります。最初の方法では、テキスト エディターを使用して BIF ファイルを手動で作成し、その BIF ファイルを使用して Bootgen でキーを作成します。これにより、セキュリティ機能を有効にした BIF ファイルのセクションを特定できます。2 つ目の方法では、Vitis IDE のCreate Boot Image ウィザードを使用します。同じセキュリティ機能を示します。2 つ目の方法では、便宜上最初の方法と同じキーを使用します。

認証用のキーの生成キーの生成方法は複数あります。Bootgen、カスタマイズされたキー ファイル、OpenSSL、ハードウェア セキュリティ モジュール (HSM) を使用する方法などがあります。このチュートリアルでは、Bootgen を使用します。Bootgen で作成したファイルは、ほかのキー ソースからのユーザー指定キーを含むファイルを作成する際にテンプレートとして使用できます。Bootgen を使用してキーを作成するには、BIF ファイルを生成して変更する必要があります。このチュートリアルのキー生成セクションでは、これらの BIF ファイルをテキスト エディターを使用して手動で作成します。その次のブート イメージのビルド セクションでは、これらの BIF ファイルを Create Boot Image ウィザードを使用して作成する方法を示します。RSA 秘密/公開キー ペアの作成この例では、プライマリおよびセカンダリのキーを PEM フォーマットで作成します。キーは、Bootgen のコマンドライン オプションを使用して生成されます。または、OpenSSL などの外部ツールを使用してキーを作成できます。次の手順に従って RSA 秘密/公開キー ペアを作成します。1. Vitis IDE のシェルを起動します。2. [Xilinx] → [Vitis 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]pmufw.elf[destination_device = pl]edt_zcu102_wrapper.bit

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 106

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

[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. BIF ファイルで指定されている場所 (c:\edt\secure_boot_sd\keys) に psk0.pem および ssk0.pem ファイルが生成されていることを確認します。

RSA 秘密/公開キー ペアで公開キーの SHA3 を生成する次に示す手順は、eFUSE モードの RSA 認証でのみ実行する必要があり、ブート ヘッダーモードの RSA 認証ではスキップできます。sha3.txt からの 384 ビットを eFUSE にプログラムして、eFUSE モードの RSA 認証に使用できます。詳細は、『BBRAM および eFUSE のプログラミング』 (XAPP1319: 英語版、日本語版)を参照してください。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]pmufw.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) に生成されていることを確認します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 107

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

追加の RSA 秘密/公開キー ペアこのセクションでは、キーの取り消しに必要なセカンダリ RSA 秘密/公開キー ペアを生成する手順を示します。これには、eFUSE のプログラムが必要です。詳細は、『BBRAM および eFUSE のプログラミング』 (XAPP1319: 英語版、日本語版)を参照してください。キーの取り消しを使用する予定がない場合は、このセクションはスキップできます。2 つ目の RSA 秘密/公開キー ペアを作成し、この PPK の SHA3 を生成するには、RSA 秘密/公開キー ペアの作成 および RSA 秘密/公開キー ペアで公開キーの SHA3 を生成する の手順を繰り返します。1. 前のセクションの手順を psk0.pem、ssk0.pem、および ppk0_digest.txt をそれぞれ psk1.pem、

ssk1.pem、および ppk1_digest.pem に置き換えて実行します。このファイルを key_generation_1.bifという名前で保存します。この .bif ファイルは次のようになります。the_ROM_image:{[pskfile]psk1.pem [sskfile]ssk1.pem[auth_params]spk_id = 1; ppk_select = 1 [fsbl_config]a53_x64 [bootloader]fsbl_a53.elf [destination_cpu = pmu]pmufw.elf[destination_device = pl]edt_zcu102_wrapper.bit[destination_cpu = a53-0, exception_level = el-3, trustzone]bl31.elf [destination_cpu = r5-0]tmr_psled_r5.elf[destination_cpu = a53-0, exception_level = el-2]u-boot.elf [load = 0x1000000, destination_cpu = a53-0]image.ub}

2. 次の bootgen コマンドを実行して RSA 秘密/公開キー ペアを作成します。bootgen -p zu9eg -arch zynqmp -generate_keys auth pem -image key_generation_1.bif

3. key_generation_1.bif ファイルに authentication = rsa を追加します。.bif ファイルは次のようになります。the_ROM_image:{[pskfile]psk1.pem [sskfile]ssk1.pem[auth_params]spk_id = 1; ppk_select = 1 [fsbl_config]a53_x64[bootloader, authentication = rsa]fsbl_a53.elf[destination_cpu = pmu, authentication = rsa]pmufw.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\keys) に生成されていることを確認します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 108

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

ブート ヘッダー認証の有効化ブート ヘッダー認証モードでは、ROM での PPK の eFUSE ハッシュ、PPK の取り消しステータス、およびセカンダリ キーのセッション ID のチェックがスキップされます。このモードでは eFUSE をプログラムする必要がないので、テストおよびデバッグに便利です。このモードは、デバイスで RSA_EN eFUSE をプログラムすることにより恒久的に無効にできます。これにより、eFUSE チェックを使用した RSA 認証が強制的に実行されるようになります。フィールドに展開されたシステムでは、RSA_EN eFUSE を使用して eFUSE チェックが強制的に実行されるようにし、ブート ヘッダー認証は無効にしてください。[fsbl_config] 行に bh_auth_enable 属性を追加します。.bif ファイルは次のようになります。the_ROM_image:{[pskfile]psk0.pem [sskfile]ssk0.pem[auth_params]spk_id = 0; ppk_select = 0 [fsbl_config]a53_x64, bh_auth_enable [bootloader, authentication = rsa]fsbl_a53.elf[destination_cpu = pmu, authentication = rsa]pmufw.elf [destination_device = pl, authentication = rsa]edt_zcu102_wrapper.bit[destination_cpu = a53-0, exception_level = el-3, trustzone, authentication = rsa]bl31.elf[destination_cpu = r5-0, authentication = rsa]tmr_psled_r5.elf[destination_cpu = a53-0, exception_level = el-2, authentication = rsa]u-boot.elf [load = 0x1000000, destination_cpu = a53-0, authentication = rsa]image.ub}

機密性のためのキーの生成イメージの機密性についてはブート イメージの機密性と DPAで説明します。このセクションでは、認証セクションの .bif ファイルに属性を追加して、AES-256-GCM 暗号化アルゴリズムを使用したイメージの機密性を有効にします。最後に bootgen コマンドを実行して、必要な AES-256 キーを作成します。AES 暗号化の使用1. [keysrc_encryption] bbram_red_key 属性を使用して初期暗号キー (bbram_red_key) のキー ソースを指定し、イメージの機密性を有効にします。

2. パーティションに encryption = aes 属性を追加して機密性を有効にします。各パーティションに固有のキー ファイルも指定します。各パーティションに固有のキー ファイルを使用すると、キーが再利用されず、1 つのキーに暗号化される情報量が少なくなるので、セキュリティが向上します。key_generation.bif ファイルは次のようになります。the_ROM_image:{[pskfile]psk0.pem [sskfile]ssk0.pem[auth_params]spk_id = 0; ppk_select = 0 [keysrc_encryption]bbram_red_key [fsbl_config]a53_x64, bh_auth_enable[bootloader, authentication = rsa, encryption = aes, aeskeyfile = fsbl_a53.nky]fsbl_a53.elf[destination_cpu = pmu, authentication = rsa, encryption = aes, aeskeyfile = pmufw.nky]pmufw.elf[destination_device = pl, authentication = rsa, encryption = aes, aeskeyfile = edt_zcu102_wrapper.nky]edt_zcu102_wrapper.bit[destination_cpu = a53-0, exception_level = el-3, trustzone, authentication = rsa]bl31.elf[destination_cpu = r5-0, authentication = rsa, encryption =

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 109

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

aes,aeskeyfile = tmr_psled_r5.nky]tmr_psled_r5.elf[destination_cpu = a53-0, exception_level = el-2, authentication = rsa]u-boot.elf [load = 0x1000000, destination_cpu = a53-0, authentication = rsa]image.ub}

DPA 保護の有効化このセクションでは、差分電力解析 (DPA) への対策に有効な操作キーとキー ローリングの使用手順を示します。操作キーの使用の有効化操作キーを使用すると、デバイス キーを使用して暗号化される情報量が制限されます。操作キーの使用を有効にするには、BIF ファイルの [fsbl_config] 行に opt_key 属性を追加します。key_generation.bif ファイルは次のようになります。the_ROM_image:{[pskfile]psk0.pem [sskfile]ssk0.pem[auth_params]spk_id = 0; ppk_select = 0 [keysrc_encryption]bbram_red_key [fsbl_config]a53_x64, bh_auth_enable, opt_key[bootloader, authentication = rsa, encryption = aes, aeskeyfile = fsbl_a53.nky]fsbl_a53.elf[destination_cpu = pmu, authentication = rsa, encryption = aes, aeskeyfile = pmufw.nky]pmufw.elf

[destination_device = pl, authentication = rsa, encryption = aes, aeskeyfile = edt_zcu102_wrapper.nky]edt_zcu102_wrapper.bit[destination_cpu = a53-0, exception_level = el-3, trustzone, authentication = rsa]bl31.elf[destination_cpu = r5-0, authentication = rsa, encryption = aes, aeskeyfile = tmr_psled_r5.nky]tmr_psled_r5.elf[destination_cpu = a53-0, exception_level = el-2, authentication = rsa]u-boot.elf [load = 0x1000000, destination_cpu = a53-0, authentication = rsa]image.ub}

キー ローリングを使用した暗号化の有効化キー ローリングを使用すると、ほかのキーを使用して暗号化される情報の量が制限されます。キー ローリングを有効にするには、.bif ファイルでパーティションごとに blocks 属性を追加します。blocks 属性では、各キーで暗号化する情報量をバイト数で指定できます。たとえば、blocks=4096,1024(3),512(*) と記述すると最初のキーに 4096 バイト、2 ~ 4 番目キーには 1024 バイト、残りすべてのキーに 512 バイトが使用されます。この例では、各キーの情報量を 1728 バイトに制限しています。キー ローリングの使用を有効にするには、暗号化された各パーティションに blocks 属性を追加します。key_generation.bif ファイルは次のようになります。the_ROM_image:{[pskfile]psk0.pem[sskfile]ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[keysrc_encryption]bbram_red_key[fsbl_config]a53_x64, bh_auth_enable, opt_key[bootloader, authentication = rsa, encryption = aes, aeskeyfile = fsbl_a53.nky, blocks = 1728(*)]fsbl_a53.elf[destination_cpu = pmu, authentication = rsa, encryption = aes,aeskeyfile =

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 110

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

pmufw.nky, blocks = 1728(*)]pmufw.elf[destination_device = pl, authentication = rsa, encryption = aes,aeskeyfile = edt_zcu102_wrapper.nky, blocks = 1728(*)]edt_zcu102_wrapper.bit[destination_cpu = a53-0, exception_level = el-3, trustzone, authentication = rsa]bl31.elf[destination_cpu = r5-0, authentication = rsa, encryption = aes, aeskeyfile = tmr_psled_r5.nky, blocks = 1728(*)]tmr_psled_r5.elf[destination_cpu = a53-0, exception_level = el-2, authentication = rsa]u-boot.elf[load = 0x1000000, destination_cpu = a53-0, authentication = rsa]image.ub}

すべての AES キーの生成必要な暗号化機能をすべて有効にしたら、Bootgen を使用してキー ファイルを生成できます。ELF などの一部のソース ファイルには、複数のセクションがあります。これらの各セクションは個別のパーティションにマップされ、各パーティションに固有のキー ファイルが使用されます。その場合、キー ファイルに「.1.」が追加されます。たとえば、pmu_fw.elf ファイルに複数のセクションがある場合、pmu_fw.nky および pmu_fw.1.nky ファイルが生成されます。1. 次の bootgen コマンドを実行して必要な NKY ファイルすべてを作成します。このコマンドにより、最終的な

BOOT.bin イメージが作成されます。bootgen -p zcu9eg -arch zynqmp -image key_generation.bif

2. NKY ファイルが生成されていることを確認します。次のファイルがあります。edt_zcu102_wrapper.nky, fsbl_a53.nky, pmu_fw.nky, pmu_fw.1.nky,pmu_fw.2.nky, tmr_psled_r5.nky, and tmr_psled_r5.1.nky.

キー取り消しの使用キー取り消しを使用すると、RSA のプライマリ公開キーまたはセカンダリ公開キーを無効にできます。キーの使用時間が超過した場合、またはキーへの不正アクセスが検出された場合、キー取り消しが適用されます。プライマリおよびセカンダリ キーの取り消しは、ワンタイム プログラマブルな eFUSE によって制御されます。ザイリンクス セキュア キー ライブラリをキー取り消しに使用すると、フィールド展開されているデバイスに対するキー取り消しが可能になります。キー取り消しの詳細は、『Zynq UltraScale+ デバイス テクニカル リファレンス マニュアル』 (UG1085: 英語版、日本語版) を参照してください

PUF の使用このセクションでは、PUF を PUF ブート ヘッダー モードで使用してブラック キーを格納します。PUF を使用する場合は RSA 認証が必要です。PUF ブート ヘッダー モードでは、PUF ヘルパー データと暗号化されたユーザー AES キーはブート ヘッダーに格納されます。ここでは PUF を使用して BIF を作成する方法を説明します。ヘルパー データおよび暗号化されたユーザー キーはボードに特定なので、作成された Bootgen イメージはヘルパー データを作成したボードでしか機能しません。セキュア ブート シーケンスの最後に、eFUSE モードで PUF を使用した BIF ファイルが示されています。PUF eFUSEモードでは、PUF ヘルパー データと暗号化されたユーザー AES キーは eFUSE に格納されます。PUF eFUSE モードでは、すべてのボードで 1 つのブート イメージを使用できます。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 111

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

ブート ヘッダー モードでの PUF 登録PUF 登録ソフトウェアは kilskey ライブラリに含まれています。このソフトウェアはブート ヘッダー モードまたはeFUSE モードで動作します。ブート ヘッダー モードでは、OTP の eFUSE をプログラムすることなく開発が可能です。eFUSE モードは、プロダクション フローで使用されます。このチュートリアルでは、ブート ヘッダー モードでの PUF の登録までを実行します。eFUSE を使用した PUF 登録については、『BBRAM および eFUSE のプログラミング』 (XAPP1319: 英語版、日本語版) を参照してください。PUF 登録ソフトウェアはレッド (暗号化なし) キーを入力として受け取り、CHASH と AUX も含むシンドローム データ (ヘルパー データ) およびブラック (暗号化) キーを出力します。PUF ブート ヘッダー モードでは、この出力はブート ヘッダーに挿入されます。PUF eFUSE モードでは、この出力は eFUSE にプログラムされます。1. Vitis IDE で [tmr_psled_r5 Board Support Package Settings] に移動します。2. [Supported Libraries] で [xilskey] および [xilsecure] を必ずオンにします。

3. [OK] をクリックします。ハードウェア プラットフォームをビルドし直して変更を適用します。tmr_psled_r5_bsp 設定に移動します。

4. [Libraries] セクションまでスクロール ダウンします。[xilskey 6.8 Import Examples] をクリックします。5. [Incremental Implementation] ダイアログ ボックスで [xilskey_puf_registration example] をオンにします。[OK]

をクリックします。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 112

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

6. [Project Explorer] ビューで、xilskey_puf_example_1 アプリケーションが作成されていることを確認します。7. [Project Explorer] ビューで、xilskey_puf_example_1 'Src' の下の [xilskey_puf_registration.h] をダブルクリックして Vitis IDE を開きます。

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_BLACK_KEY_IV を次のように設定します。初期化ベクター (IV) はユーザーが選択する 12 バイトデータです。#define XSK_PUF_BLACK_KEY_IV "E1757A6E6DD1CC9F733BED31"

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 113

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

9. ファイルを保存して閉じます。10. [Project Explorer] ビューで [xilskey_puf_example_1] を右クリックし、[Build Project] をクリックします。11. Vitis IDE で [Xilinx] → [Create Boot Image] をクリックします。12. [Architecture] で [Zynq MP] を選択します。13. [Output BIF file path] で C:\edt\secureboot_sd\puf_registration\puf_registration.bif を指定します。

14. [Output path] で C:\edt\secureboot_sd\puf_registration\BOOT.bin を指定します。15. [Boot image partitions] ペインで [Add] をクリックします。パーティションを追加し、xilskey_puf_example_1 アプリケーションのデスティネーション CPU を R5-0 に設定します。C:\edt\fsbl_a53\Debug\fsbl_a53.elfC:\edt\xilskey_puf_example_1\Debug\xilskey_puf_example_1.elf

16. [Create Image] をクリックして PUF 登録用のブート イメージを作成します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 114

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

17. SD カードを PC の SD カード スロットに挿入します。18. C:\edt\secureboot_sd\puf_registration\BOOT.bin を SD カードにコピーします。19. SD カードを PC の SD カード スロットから取り出し、ZCU102 のカード スロットに挿入します。20. 使用しているホスト マシンに応じて Tera Term または Minicom を使用し、ターミナル セッションを開始します。システムの COM ポートとボー レートを ZCU102 ボードでのイメージの検証 に示すように設定します。

21. 通信ターミナルのメニュー バーで、[File] → [Log] をクリックします。ダイアログ ボックスに「C:\edt\secureboot_sd\puf_registration\puf_registration.log」と入力します。

22. ボードの電源を切って入れ直します。23. puf_registration ソフトウェアが実行されたら、通信ターミナルを終了します。24. puf_registration.log の内容は ブート ヘッダー モードでの PUF の使用 で使用されます。テキスト エディターで puf_registration.log を開きます。

25.「App PUF Syndrome data Start!!!;」の後から「PUF Syndrome data End!!!」まで (これらは含めない) の PUF シンドローム データを helperdata.txt というファイルに保存します。

26. App: Black Key IV で特定されたブラック キー IV を black_iv.txt というファイルに保存します。27. ブラック キーを black_key.txt というファイルに保存します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 115

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

28. helperdata.txt、black_key.txt、および black_iv.txt は、C:\edt\secure_boot_sd\keys に保存可能です。

ブート ヘッダー モードでの PUF の使用前のセクションの .bif ファイルを次の手順に従ってアップデートし、ブート ヘッダー モードでの PUF の使用を有効にします。このセクションでは、PUF 登録プロセスで作成したシンドローム データとブラック キーを使用します。1. 次に示す BIT ファイル (key_generation.bif) に太字で示されているフィールドおよび属性をすべて追加し

て、PUF の使用を有効にします。the_ROM_image:{[pskfile]psk0.pem[sskfile]ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[keysrc_encryption]bh_blk_key[bh_key_iv]black_iv.txt[bh_keyfile]black_key.txt[puf_file]helperdata.txt[fsbl_config]a53_x64, bh_auth_enable, opt_key, puf4kmode, shutter=0x0100005E,pufhd_bh[bootloader, authentication = rsa, encryption = aes, aeskeyfile = fsbl_a53.nky, blocks = 1728(*)]fsbl_a53.elf[destination_cpu = pmu, authentication = rsa, encryption = aes, aeskeyfile = pmufw.nky, blocks = 1728(*)]pmufw.elf[destination_device = pl, authentication = rsa, encryption = aes, aeskeyfile = edt_zcu102_wrapper.nky, blocks = 1728(*)]edt_zcu102_wrapper.bit[destination_cpu = a53-0, exception_level = el-3, trustzone, authentication = rsa]bl31.elf[destination_cpu = r5-0, authentication = rsa, encryption = aes, aeskeyfile = tmr_psled_r5.nky, blocks =1728(*)]tmr_psled_r5.elf[destination_cpu = a53-0, exception_level = el-2, authentication = rsa]u-boot.elf[load = 0x1000000, destination_cpu = a53-0, authentication = rsa]image.ub}

2. 上記の .bif ファイルを使用して、PUF KEK を使用してブート イメージ ヘッダーで暗号化された AES キーを使用して最終的なブート イメージを作成します。これには、次の bootgen コマンドを使用します。bootgen -p zcu9eg -arch zynqmp -image key_generation.bif -w -o BOOT.bin

注記: 上記の手順は、eFUSE モードの PUF でも実行できます。その場合は、eFUSE モードの PUF を使用して、前述の手順を繰り返します。これには、PUF 登録アプリケーションのビルドに使用したxilskey_puf_registration.h ファイルに XSK_PUF_PROGRAM_EFUSE マクロを設定して、PUF 登録中にeFUSE のプログラムをイネーブルにする必要があります。また、eFUSE からの暗号キーを使用するように BIF を変更し、ヘルパー データとブラック キー ファイルを削除する必要があります。開発またはチュートリアル システムの eFUSE をプログラムしないようにするため、このチュートリアルでは eFUSE モードの PUF については説明しません。[keysrc_encryption]efuse_blk_key[bh_key_iv]black_iv.txt

Vitis IDE の Create Boot Image ウィザードを使用したシステム例前のセクションでは、BIF ファイルを手動で編集して、さまざまなセキュリティ機能 (認証、機密性、DPA 保護、およびブラック キーの格納) を有効にしました。このセクションでは、同じ操作を Create Boot Image ウィザードを開始点として使用して実行します。Create Boot Image ウィザードで基本の BIF ファイルを作成し、その後ウィザードでサポートされていないセキュリティ機能をテキスト エディターを使用して追加します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 116

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

1. cd コマンドを使用して bootgen_files ディレクトリに移動します。cd C:\edt\secure_boot_sd\bootgen_files

2. 前の例からの次のデータをこの例にコピーします。cp ../keys/*nky .cp ../keys/*pem .cp ../keys/black_iv.txt .cp ../keys/helperdata.txt .cp ../keys/*.elf .cp ../keys/edt_zcu102_wrapper.bit .cp ../keys/image.ub .cp ../keys/black_key.txt.

3. [Programs] → [Xilinx Design Tools] → [Vitis 2020.1] → [Xilinx Vitis 2020.1] をクリックして Vitis IDE を起動します。

4. [Xilinx Tools] → [Create Boot Image] をクリックし、Create Boot Image ウィザードを開きます。5. [Architecture] で Zynq MP を選択します。6. [Output BIF file path] を c:\edt\secure_boot_sd\bootgen_files

\design_bh_bkey_keyrolling.bif に設定します。7. [Output format] で [BIN] を選択します。8. [Output path] に c:\edt\secure_boot_sd\bootgen_files\BOOT.bin を入力します。9. 認証を有効にします。

a. [Security] タブをクリックします。b. [Use Authentication] をオンにします。c. [Browse] ボタンを使用して、[PSK] に psk0.pem ファイル、[SSK] に ssk0.pem ファイルを選択します。d. [PPK Select] が 0 であることを確認します。e. [SPK ID] に 0 を入力します。f. [Use BH Auth] をオンにします。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 117

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

10. 暗号化を有効にします。a. [Encryption] タブをクリックします。b. [Use Encryption] をオンにします。c. [Part name] に「[zcu9eg]」と入力します。d. [Operational Key] をオンにします。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 118

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

11. [Basic] タブをクリックします。12. ブート イメージに FSBL バイナリを追加します。

a. [Add] をクリックします。b. [File path] で [Browse] ボタンをクリックして fsbl_a53.elf ファイルを選択します。c. [Partition type] を [bootloader]、[Destination CPU] を [a53x64] に設定します。d. [Authentication] を [rsa] に設定します。e. [Encryption] を [aes] に設定します。f. [Key file] に先ほど生成した fsbl_a53.nky ファイルを指定します。g. [OK] をクリックします。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 119

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

13. ブート イメージに PMU ファームウェア バイナリを追加します。a. [Add] をクリックします。b. [File path] で [Browse] ボタンをクリックして pmufw.elf ファイルを選択します。c. [Partition type] を [datafile] に設定します。d. [Destination CPU] を [PMU] に設定します。e. [Authentication] を [rsa] に設定します。f. [Encryption] を [aes] に設定します。g. [Key file] に pmufw.nky を指定します。h. [OK] をクリックします。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 120

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

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. [Key file] に edt_zcu102_wrapper.bit を指定します。h. [OK] をクリックします。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 121

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

15. イメージに Arm トラステッド ファームウェア (ATF) バイナリを追加します。a. [Add] をクリックします。b. [File path] で [Browse] ボタンをクリックして bl31.elf ファイルを選択します。c. [Partition type] を [datafile] に設定します。d. [Destination CPU] を [A53 0] に設定します。e. [Authentication] を [rsa] に設定します。f. [Encryption] を [none] に設定します。g. [Exception Level] を [EL3] に設定し、[Enable Trust Zone] をオンにします。h. [OK] をクリックします。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 122

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

16. ブート イメージに R5 ソフトウェア バイナリを追加します。a. [Add] をクリックします。b. [File path] で [Browse] ボタンをクリックして tmr_psled_r5.elf file ファイルを選択します。c. [Partition type] を [datafile] に設定します。d. [Destination CPU] を [R5 0] に設定します。e. [Authentication] を [rsa] に設定します。f. [Encryption] を [aes] に設定します。g. [Key file] に tmr_psled_r5.nky を指定します。h. [OK] をクリックします。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 123

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

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

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 124

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

18. ブート イメージに Linux イメージを追加します。a. [Add] をクリックします。b. [File path] で [Browse] ボタンをクリックして image.ub ファイルを選択します。c. [Partition type] を [datafile] に設定します。d. [Destination CPU] を [A53 0] に設定します。e. [Authentication] を [rsa] に設定します。f. [Encryption] を [none] に設定します。g. [Load] に 0x2000000 を入力します。h. [OK] をクリックします。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 125

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

20. design_bh_bkey_keyrolling.bif ファイルは次のようになります。//arch = zynqmp; split = false; format = BIN; key_part_name = zcu9egthe_ROM_image:{[pskfile]C:\edt\secure_boot_sd\bootgen_files\psk0.pem[sskfile]C:\edt\secure_boot_sd\bootgen_files\ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[keysrc_encryption]efuse_red_key[fsbl_config]bh_auth_enable, opt_key[bootloader, encryption = aes, authentication = rsa, aeskeyfile = C:\edt\secure_boot_sd\bootgen_files\fsbl_a53.nky]C:\edt\secure_boot_sd\bootgen_files\fsbl_a53.elf[encryption = aes, authentication = rsa, aeskeyfile = C:\edt\secure_boot_sd\bootgen_files\pmufw.nky, destination_cpu = pmu]C:\edt\secure_boot_sd\bootgen_files\pmufw.elf[encryption = aes, authentication = rsa, aeskeyfile = C:\edt\secure_boot_sd\bootgen_files\edt_zcu102_wrapper.nky, destination_device = pl]C:\edt\secure_boot_sd\bootgen_files\edt_zcu102_wrapper.bit[authentication = rsa, destination_cpu = a53-0, exception_level = el-3, trustzone]C:\edt\secure_boot_sd\bootgen_files\bl31.elf[encryption = aes, authentication = rsa, aeskeyfile = C:\edt\secure_boot_sd\bootgen_files\tmr_psled_r5.nky, destination_cpu = r5-0]C:\edt\secure_boot_sd\bootgen_files\tmr_psled_r5.elf

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 127

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

[authentication = rsa, destination_cpu = a53-0, exception_level = el-2]C:\edt\secure_boot_sd\bootgen_files\u-boot.elf[authentication = rsa, load = 0x2000000, destination_cpu = a53-0]C:\edt\secure_boot_sd\bootgen_files\image.ub}

21. この BIF ファイルにはまだ足りないセキュリティ機能があります。これらの機能は Create Boot Image ウィザードでサポートされていません。足りない機能は、キー ローリングおよびブラック キーの格納です。

22. BIF ファイルが次のようになるように、keysrc_encryption を変更し、項目を追加します。the_ROM_image:{[pskfile]C:\edt\secure_boot_sd\bootgen_files\psk0.pem[sskfile]C:\edt\secure_boot_sd\bootgen_files\ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[keysrc_encryption]bh_blk_key[bh_key_iv]black_iv.txt[bh_keyfile]black_key.txt[puf_file]helperdata.txt[fsbl_config]a53_x64, bh_auth_enable, opt_key,puf4kmode,shutter=0x0100005E,pufhd_bh[bootloader, encryption = aes, authentication = rsa, aeskeyfile = C:\edt\secure_boot_sd\bootgen_files\fsbl_a53.nky]C:\edt\secure_boot_sd\bootgen_files\fsbl_a53.elf[encryption = aes, authentication = rsa, aeskeyfile = C:\edt\secure_boot_sd\bootgen_files\pmufw.nky, destination_cpu = pmu]C:\edt\secure_boot_sd\bootgen_files\pmufw.elf[encryption = aes, authentication = rsa, aeskeyfile = C:\edt\secure_boot_sd\bootgen_files\edt_zcu102_wrapper.nky, destination_device = pl]C:\edt\secure_boot_sd\bootgen_files\edt_zcu102_wrapper.bit[authentication = rsa, destination_cpu = a53-0, exception_level = el-3, trustzone]C:\edt\secure_boot_sd\bootgen_files\bl31.elf[encryption = aes, authentication = rsa, aeskeyfile = C:\edt\secure_boot_sd\bootgen_files\tmr_psled_r5.nky, destination_cpu = r5-0]C:\edt\secure_boot_sd\bootgen_files\tmr_psled_r5.elf[authentication = rsa, destination_cpu = a53-0, exception_level = el-2]C:\edt\secure_boot_sd\bootgen_files\u-boot.elf[authentication = rsa, load = 0x2000000, destination_cpu = a53-0]C:\edt\secure_boot_sd\bootgen_files\image.ub}

23. 暗号化された各パーティションに blocks 属性を追加し、キー ローリング有効にします。BIF ファイルは次のようになります。//arch = zynqmp; split = false; format = BIN; key_part_name = zcu9egthe_ROM_image:{[pskfile]C:\edt\secure_boot_sd\bootgen_files\psk0.pem[sskfile]C:\edt\secure_boot_sd\bootgen_files\ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[keysrc_encryption]bh_blk_key[bh_key_iv]black_iv.txt[bh_keyfile]black_key.txt[puf_file]helperdata.txt[fsbl_config]a53_x64, bh_auth_enable, opt_key, puf4kmode,shutter=0x0100005E,pufhd_bh[bootloader, encryption = aes, authentication = rsa, aeskeyfile = C:\edt\secure_boot_sd\bootgen_files\fsbl_a53.nky, blocks = 1728(*)]C:\edt\secure_boot_sd\bootgen_files\fsbl_a53.elf[encryption = aes, authentication = rsa, aeskeyfile = C:\edt\secure_boot_sd\bootgen_files\pmufw.nky, destination_cpu = pmu, blocks = 1728(*)]C:\edt\secure_boot_sd\bootgen_files\pmufw.elf

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 128

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

[encryption = aes, authentication = rsa, aeskeyfile = C:\edt\secure_boot_sd\bootgen_files\edt_zcu102_wrapper.nky, destination_device = pl, blocks = 1728(*)]C:\edt\secure_boot_sd\bootgen_files\edt_zcu102_wrapper.bit[authentication = rsa, destination_cpu = a53-0, exception_level = el-3, trustzone]C:\edt\secure_boot_sd\bootgen_files\bl31.elf[encryption = aes, authentication = rsa, aeskeyfile = C:\edt\secure_boot_sd\bootgen_files\tmr_psled_r5.nky, destination_cpu = r5-0, blocks = 1728(*)]C:\edt\secure_boot_sd\bootgen_files\tmr_psled_r5.elf[authentication = rsa, destination_cpu = a53-0, exception_level = el-2]C:\edt\secure_boot_sd\bootgen_files\u-boot.elf[authentication = rsa, load = 0x2000000, destination_cpu = a53-0]C:\edt\secure_boot_sd\bootgen_files\image.ub}

24. 次のコマンドを実行して、ブート イメージを生成します。-encryption_dump オプションが追加されていることに注意してください。このオプションにより、ログ ファイル aes_log.txt が作成されます。このログ ファイルには、使用されたすべての暗号化操作の詳細が記述されます。このファイルを参照して、ブート イメージのどのセクションにどのキーおよび IV が使用されているかを確認できます。bootgen -p zcu9eg -arch zynqmp -image design_bh_bkey_keyrolling.bif -w -o BOOT.bin -encryption_dump

セキュア ブート イメージを使用したシステムのブートこのセクションでは、前のセクションで作成した BOOT.bin ブート イメージを使用して ZCU102 でセキュア ブートを実行する方法を示します。1. BOOT.bin イメージ、PetaLinux で生成された boot.scr、および ps_pl_linux_app.elf ファイルをコピーします。

2. SD カードを ZCU102 に挿入します。3. ZCU102 の SW6 を SD ブート モードに設定します (1 をオン、2、3、4 をオフ)。

4. シリアル ターミナルを ZCU102 に接続します (115200、8 データ ビット、1 停止ビット、パリティなし)。5. ZCU102 に電源を投入します。6. ターミナルに U-Boot の ZynqMP> プロンプトが表示されたら、「bootm 0x2000000」と入力します。

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 129

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

7. 次の資格情報を使用して、Linux にログインします。ログイン: root

パスワード: root

サンプル デザイン 1: GPIO、タイマー、および割り込みの使用 の手順に従って Linux アプリケーションを実行します。

Linux アプリケーションの実行次の手順に従って Linux アプリケーションを実行します。1. アプリケーションを SD カードのマウント ポイントから /tmp にコピーします。

# cp /run/media/mmcblk0p1/ps_pl_linux_app.elf /tmp

注記: この場所に SD カードの内容が見つからない場合は、SD カードを手動で挿入してください。# mount /dev/mmcblk0p1 /media/

2. アプリケーションを /tmp にコピーします。# cp /media/ps_pl_linux_app.elf /tmp

3. アプリケーションを実行します。# /tmp/ps_pl_linux_app.elf

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 130

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

フィールドで展開されているシステム用のサンプル BIF次に、フィールドで展開されているシステム用の BIF ファイル例を示します。この BIF ファイルをボード上で機能させるには、RSA_EN、PPK0 ダイジェスト、ブラック AES キー、および PUF ヘルパーを eFUSE にプログラムする必要があります。これらの eFUSE をプログラムすると、デバイスまたはボードのテストおよびデバッグでの使用が制限されるので、参照用にのみ含めています。チュートリアルの一部ではありません。最終的な generation.bif ファイルを次のように変更します。1. PUF ブート ヘッダー モードから PUF eFUSE モードに変更します。

a. keysrc_encryption 属性を efuse_blk_key に変更します。b. bh_keyfile および puf_file 行を削除します。c. fsbl_config 行から puf4kmode および pufhd_bh 属性を削除します。

2. ブート ヘッダー認証から eFUSE 認証に変更します。a. fsbl_config 行から bh_auth_enable 属性を削除します。//arch = zynqmp; split = false; format = BIN; key_part_name = zcu9egthe_ROM_image:{[pskfile]C:\edt\secure_boot_sd\bootgen_files\psk0.pem[sskfile]C:\edt\secure_boot_sd\bootgen_files\ssk0.pem[auth_params]spk_id = 0; ppk_select = 0[keysrc_encryption]bh_blk_key[bh_key_iv]black_iv.txt[bh_keyfile]black_key.txt[puf_file]helperdata.txt[fsbl_config]a53_x64, bh_auth_enable, opt_key, puf4kmode,shutter=0x0100005E,pufhd_bh[bootloader, encryption = aes, authentication = rsa, aeskeyfile = C:\edt\secure_boot_sd\bootgen_files\fsbl_a53.nky, blocks = 1728(*)]C:\edt\secure_boot_sd\bootgen_files\fsbl_a53.elf[encryption = aes, authentication = rsa, aeskeyfile = C:\edt\secure_boot_sd\bootgen_files\pmufw.nky, destination_cpu = pmu, blocks = 1728(*)]C:\edt\secure_boot_sd\bootgen_files\pmufw.elf[encryption = aes, authentication = rsa, aeskeyfile = C:\edt\secure_boot_sd\bootgen_files\edt_zcu102_wrapper.nky, destination_device = pl, blocks = 1728(*)]C:\edt\secure_boot_sd\bootgen_files\edt_zcu102_wrapper.bit[authentication = rsa, destination_cpu = a53-0, exception_level = el-3, trustzone]C:\edt\secure_boot_sd\bootgen_files\bl31.elf[encryption = aes, authentication = rsa, aeskeyfile = C:\edt\secure_boot_sd\bootgen_files\tmr_psled_r5.nky, destination_cpu = r5-0, blocks = 1728(*)]C:\edt\secure_boot_sd\bootgen_files\tmr_psled_r5.elf[authentication = rsa, destination_cpu = a53-0, exception_level = el-2]C:\edt\secure_boot_sd\bootgen_files\u-boot.elf[authentication = rsa, load = 0x2000000, destination_cpu = a53-0]C:\edt\secure_boot_sd\bootgen_files\image.ub}

第 5 章: ブートおよびコンフィギュレーション

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 131

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

第 6 章

システム デザイン例この章では、使用可能なツールとサポートされているソフトウェア ブロックを使用して、Zynq® UltraScale+™ デバイスをベースにしたシステムを構築する方法を説明します。また、第 3 章で設定したソフトウェア ブロックを使用してZynq® UltraScale+ システムを作成する方法も示します。ドメイン特定のデザインについては説明しませんが、ZynqUltraScale+ デバイスで利用可能な下位のソフトウェアを使用するさまざまな方法を重点的に示します。

サンプル デザイン 1: GPIO、タイマー、および割り込みの使用

Zynq ZCU102 UltraScale+ 評価ボードには、ユーザー設定可能なスイッチおよび LED がいくつかあります。このサンプル デザインでは、ベアメタルおよび Linux アプリケーションを使用して、これらの LED をトグルします。詳細は次のとおりです。• Linux アプリケーションは、PS DIP スイッチを使用してトグルする PL LED セットと、PL DIP スイッチ (SW17) を使用してトグルする PL LED セットを設定します。

• Linux APU A-53 コア 0 でこの Linux アプリケーションを実行し、RPU R5 コア 0 で別のベアメタル アプリケーションを実行します。

• R5 コア 0 のアプリケーションは、プログラマブル ロジックの AXI Timer IP を使用して PS LED (DS50) をトグルします。このアプリケーションは、タイマー カウンターのカウントが終了するたびに LED 状態をトグルするように設定されており、PL 内のタイマーは、ユーザー設定可能な期間が経過した後に定期的にリセットするように設定されています。システムは、APU Linux アプリケーションと RPU ベアメタル アプリケーションが同時に実行されるように設定されています。

ハードウェアの設定このデザインの最初の手順として、PS セクションと PL セクションを設定します。これは Vivado IP インテグレーターで実行できます。まず、Vivado IP カタログから必要な IP を追加し、PS サブシステムのブロックにコンポーネントを接続します。1. Vivado Design Suite が既に開いている場合は、ブロック デザイン プロジェクトの作成 に示すブロック図から開始して手順 4 に進みます。

2. 作成した Vivado プロジェクトを開きます。C:/edt/edt_zcu102/edt_zcu102.xpr

3. Flow Navigator で [IP Integrator] → [Open Block Design] をクリックし、edt_zcu102.bd を選択します。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 132

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

4. ブロック図を右クリックし、[Add IP] をクリックして IP カタログから IP を追加します。

IP の追加および設定1. IP カタログで [AXI Timer] を選択します。

次の図に示すように、[IP Details] に情報が表示されます。

2. [AXI Timer] をダブルクリックしてデザインに追加します。3. [AXI Timer] IP を再度ダブルクリックして、IP を次の図に示すように設定します。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 133

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

4. [OK] をクリックします。5. ブロック図を右クリックし、[Add IP] をクリックします。6. AXI GPIO を検索し、[AXI GPIO] をダブルクリックしてブロック図に追加します。7. 手順 5 および 6 を繰り返して、AXI GPIO IP の別のインスタンスを追加します。8. [axi_gpio_0] をダブルクリックし、GPIO の [Board Interface] ドロップダウン リストから [Push button 5bits] を選択します。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 134

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

9. [IP Configuration] タブで [Enable Dual Channel] をオフにします。10. [OK] をクリックし、プッシュボタンの AXI_GPIO 設定を確定します。11. [axi_gpio_1] をダブルクリックします。12. PL LED の axi_gpio_1 に対して、次の図に示すように、GPIO の [Board Interface] ドロップダウン リストからled_8bits を選択します。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 135

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

13. [IP Configuration] タブで [Enable Dual Channel] をオフにします。14. [OK] をクリックし、LED の AXI_GPIO 設定を確定します。

IP ブロックを接続して完全なシステムを作成ボードのプリセットを使用して初期接続を実行します。これには、次の手順に従います。1. [Zynq UltraScale+ IP] ブロックをダブルクリックし、次の図に示すように PL-PS の割り込みを設定します。デフォルトで選択されている場合は、次の手順に進みます。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 136

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

2. [PS-PL Configuration] で、[PS-PL Interfaces] → [Master Interface] を展開表示します。3. 次の図に示すように、[AXI HPM0 LPD] を展開して [AXI HPM0 LPD Data Width] ドロップダウン リストから 128ビットを選択します。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 137

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

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. 次のセクションで説明するようにデザインを検証し、デザインの出力ファイルを生成します。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 138

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

デザインを検証して出力ファイルを生成する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] をクリックします。次に示す [Generate Output Products] ダイアログ ボックスが開きます。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 139

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

注記: Linux ホストマシンで Vivado Design Suite を実行している場合は、[Run Settings] の下に追加オプションが表示されることがあります。その場合は、デフォルト設定で続行します。

8. [Generate] をクリックします。9. [Generate Output Products] の処理が完了したら、[OK] をクリックします。10. [Block Design] の [Sources] ウィンドウで、[IP Sources] タブをクリックします。次の図に示すように、生成した出力ファイルが表示されます。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 140

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

デザインの合成、インプリメンテーションの実行、およびビットストリームの生成1. デザインを合成します。Flow Navigator で [Synthesis] → [Run Synthesis] をクリックします。

2. Vivado から合成の開始前にプロジェクトを保存するようメッセージが表示された場合は、[Save] をクリックします。合成の実行中、ウィンドウの右上にステータス バーが表示されます。このステータス バーは、デザイン プロセスをとおして、さまざまな理由により表示されます。ステータス バーは、プロセスがバックグランドで実行されていることを示します。

合成が完了すると、[Synthesis Completed] ダイアログ ボックスが開きます。3. [Run Implementation] をクリックして [OK] をクリックします。この場合も、プロセスがバックグラウンドで実行されていることが、ステータス バーによって示されます。インプリメンテーションが完了すると、[Implementation Completed] ダイアログ ボックスが開きます。

4. [Generate Bitstream] をクリックして [OK] をクリックします。ビットストリームの生成が完了すると、[Bitstream Generation Completed] ダイアログ ボックスが開きます。

5. [Cancel] をクリックしてウィンドウを閉じます。6. ビットストリームの生成が完了したら、ハードウェアを Vitis IDE にエクスポートします。

ハードウェア プラットフォームのエクスポート1. Vivado Design Suite で [File] → [Export] → [Export Hardware] をクリックします。

Export Hardware Platform ウィザードが開きます。2. [Platform Type] に [Fixed] を選択し、[Next] をクリックします。3. [Output] ページで [Include bitstream] を選択し、[Next] をクリックします。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 141

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

4. [Files] ページで、[XSA file name] に XSA ファイル名を指定し、[Export to] にエクスポート パスを指定して、[Finish] をクリックします。

ハードウェア プラットフォーム ファイルが指定したパスに生成されます。

ソフトウェアの設定このユース ケースには、R5 コアで実行するベアメタル アプリケーションと、APU Linux ターゲットで実行する Linuxアプリケーションがあります。ほとんどのソフトウェア ブロックは、第 3 章: PS サブシステム用ソフトウェアのビルドで説明したものと同様です。このサンプル デザインのソフトウェアには、PL ロジックに追加されたコンポーネント用の追加ドライバーが必要です。そのため、このデザイン用に生成されたハードウェア ファイルを使用して VitisIDE で新しいベアメタル BSP を作成する必要があります。また、Linux では、新しいハードウェア プラットフォームファイル (XSA) に合わせて Linux BSP を再設定する必要があります。ソフトウェアを設定する前に、アプリケーション デザインの構成を確認してください。システムには RPU で実行するベアメタル アプリケーションがあり、これは PS LED をユーザーが設定した期間トグルすることで開始します。LED は、PL ブロックで動作している PL AXI Timer に合わせてトグルするように設定されています。ベアメタル アプリケーションは、AXI Timer を生成モードに設定し、タイマー カウントが満了になるたびに割り込みを生成します。このアプリケーションは、タイマー割り込みを処理した後、PS LED の状態を切り替えるように設計されています。アプリケーションは無限の while ループで実行され、ユーザーが設定した期間 LED をトグルした後に RPU を WFI モードに設定します。LED のこのトグル シーケンスは、外部割り込みを使用して RPU を WFI モードから遷移させることで繰り返すことができます。このため、UART 割り込みも同じアプリケーションで設定および有効化されます。ベ

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 142

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

アメタル アプリケーションが RPU 上で実行される一方で、Linux ターゲットも別の Linux アプリケーションを実行します。Linux アプリケーションは、PS または PL スイッチからのユーザー入力を使用して PL LED をトグルします。この Linux アプリケーションは無限の while ループでも実行し、PL LED をトグルするためのユーザー入力を待ちます。次の一連の手順では、このデザイン用にシステム ソフトウェアを設定し、ユーザー アプリケーションを構築する方法を示します。

PetaLinux を使用した Linux のコンフィギュレーションおよびビルド1. PetaLinux を使用して Linux イメージを作成します。Linux イメージは、このデザインのハードウェア設定に合わ

せて作成する必要があります。また、SD ブート用のイメージを作成するために PetaLinux を設定する必要があります。

2. サンプル プロジェクト: PetaLinux を使用した Linux イメージの作成 の手順 2 ~ 13 を繰り返してデバイス ツリーを更新し、PetaLinux を使用して Linux イメージをビルドします。または、このチュートリアルで共有しているLinux イメージ ファイルを使用することもできます。このセクションのイメージは、<design_files/design> にあります。

3. 手順 15 に従ってイメージを検証します。次の手順では、Arm Cortex-R5F ベースの RPU をターゲットとしたベアメタル アプリケーションを作成します。

注記: このサンプル デザインでは、このチュートリアルでリリースされたデザイン ファイル (ZIP) に含まれるアプリケーション ソース ファイルをインポートする必要があります。これらのデザイン ファイルの場所は、このチュートリアルのデザイン ファイルを参照してください。

ベアメタル アプリケーション プロジェクトの作成1. Vitis IDE で [File] → [New] → [Application Project] をクリックします。

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

表 12: タイマー ベースの RPU アプリケーション プロジェクト作成時の設定ウィザード ページ システム プロパティ 設定

Platform Select a platform from repository edt_zcu102_wrapper

Application Project Details Application project name tmr_psled_r5

System project name tmr_psled_r5_system

Target processor psu_cortexr5_0

Domain Domain psu_cortexr5_0

Templates Available Templates Empty Application

3. [Finish] をクリックします。New Application Project ウィザードが閉じ、Vitis IDE により tmr_psled_r5 アプリケーション プロジェクトが作成され、[Project Explorer] ビューに表示されます。

4. [Project Explorer] ビューで tmr_psled_r5 プロジェクトを展開します。5. [src] を右クリックし、[Import] をクリックして [Import] ダイアログ ボックスを開きます。6. [Import] ダイアログ ボックスで [General] を展開し、[File System] をクリックします。7. [Next] をクリックします。8. [Browse] をクリックし、前に作成した design-files/design1 フォルダーに移動します (このチュートリアルのデザイン ファイル を参照)。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 143

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

9. [OK] をクリックします。10. timer_psled_r5.c ファイルを選択して追加します。11. [Finish] をクリックします。

Vitis IDE は自動的にアプリケーションを構築し、コンソール ウィンドウにステータスを表示します。リンカー スクリプトの変更1. [Project Explorer] ビューで [tmr_psled_r5] プロジェクトを展開します。2. [src] を展開表示して lscript.ld をダブルクリックし、プロジェクトのリンカー スクリプトを開きます。3. リンカー スクリプトの [Available Memory Regions] で、psu_r5_ddr_0_MEM_0 のベース アドレスとサイズを次のように変更します。[Base Address]: 0x70000000

[Size]: 0x10000000

リンカー スクリプトの変更を次の図に示します。この図は表示のみです。実際のメモリ領域は、隔離設定が使用されている場合は異なることがあります。

このリンカー スクリプトの変更により、RPU ベアメタル アプリケーションが DDR の 0x70000000 のベース アドレスより上位に配置され、256 MB 以下のサイズとなります。

4. [Ctrl + S] キーを押して変更を保存します。5. [tmr_psled_r5] プロジェクトを右クリックし、[Build Project] をクリックします。6. アプリケーションがコンパイルされ、リンクが正常に確立され、tmr_psled_r5.elf ファイルが

tmr_psled_r5\Debug フォルダーに生成されていることを確認します。7. BSP が UART_1 用に設定されていることを確認します。詳細は、ボード サポート パッケージの変更 を参照して

ください。

Linux アプリケーションの Linux ドメインの作成Linux アプリケーションを生成するための Linux ドメインを作成するには、次の手順に従います。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 144

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

1. Vitis 統合ソフトウェア プラットフォームの [Explorer] ビューで、[edt_zcu102_wrapper] プラットフォーム プロジェクトを展開します。

2. platform.spr をダブルクリックしてプラットフォーム ビューを開きます。3. ビュー右上の [+] ボタンをクリックして、ドメインを追加します。4. [New Domain] ダイアログ ボックスが開いたら、次のように設定します。

• [Name]: Linux_Domain

• [Display Name]: Linux_Domain

• [OS]: [Linux]

• [Processor]: [psu_cortexa53_0]

• [Supported Runtimes]: [C/C++]

• [Architecture]: [64-bit]

• [Bif file]: サンプル BIF ファイルを指定• [Boot Component Directory]: ブート ディレクトリを作成してパスを指定• [Linux Image Directory]: 同じブート ディレクトリ パスを指定

5. ドメインをビルドして Linux アプリケーションを作成します。

Linux アプリケーション プロジェクトの作成1. Vitis IDE で [File] → [New] → [Application Project] をクリックします。

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

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 145

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

表 13: 新しい Linux アプリケーション プロジェクト作成時の設定ウィザード ページ システム プロパティ 設定

Platform Select a platform from repository edt_zcu102_wrapper

Application Project Details Application project name ps_pl_linux_app

System project name ps_pl_linux_app_system

Target processor psu_cortexa53 SMP

Domain Domain Linux_Domain

Templates Available Templates Linux Empty Application

3. [Finish] をクリックします。New Application Project ウィザードが閉じ、Vitis IDE により ps_pl_linux_app アプリケーション プロジェクトが作成され、[Project Explorer] ビューに表示されます。

4. [Project Explorer] ビューで ps_pl_linux_app プロジェクトを展開します。5. src を右クリックし、[Import] をクリックして [Import] ダイアログ ボックスを開きます。6. [Import] ダイアログ ボックスで [General] を展開し、[File System] をクリックします。7. [Next] をクリックします。8. [Browse] をクリックし、前に作成した design-files/design1 フォルダーに移動します (このチュートリアルのデザイン ファイル を参照)。

9. [OK] をクリックします。10. ps_pl_linux_app.c ファイルを選択して追加します。

注記: pthread ライブラリへの参照がないため、アプリケーションのビルドでエラーが発生することがあります。次のセクションに、pthread ライブラリを追加する方法を示します。

ビルド設定の変更このアプリケーションでは、pthread ライブラリから Pthread を使用します。pthread ライブラリを次のように追加します。1. [ps_pl_linux_app] を右クリックし、[C/C++ Build Settings] をクリックします。2. 次の図を参照して pthread ライブラリを追加します。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 146

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

3. 両方のウィンドウで [OK] をクリックします。アプリケーションを構築するには、アプリケーションを右クリックして [Build project] をクリックします。

ブート イメージの作成各イメージの準備が完了したので、ブート イメージを作成して Zynq UltraScale+ デバイスにこれらのコンポーネントをすべてロードします。この操作は、Vitis IDE の Create Boot Image ウィザードを使用して、次の手順に従って実行できます。この例では、C:\edt\design1 にブート イメージ BOOT.bin が作成されます。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 147

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

1. Vitis IDE を開いていない場合は、起動します。2. 第 2 章: Zynq UltraScale+ MPSoC プロセッシング システムのコンフィギュレーションで作成したプロジェクト

に基づいてワークスペース パスを設定します。たとえば、C:\edt のようになります。3. [Xilinx] → [Create Boot Image] をクリックします。4. Create Boot Image ウィザードでの設定については、次の図を参照してください。5. 次の図に示すように、パーティションを追加します。

注記: パーティションを追加する手順の詳細は、SD ブートのブート シーケンスを参照してください。

注記: このブート イメージには PL ビットストリーム edt_zcu102_wrapper.bit ([Partition Type] は[Datafile]、[Destination Device] は [PL] に設定) が必要です。ブート イメージの作成時に、ブートローダーの直後にビットストリーム ーティションを追加する必要があります。また、このブート イメージには、R5 アプリケーションの tmr_psled_r5.elf がパーティションとして追加されます。

6. すべてのパーティションを追加したら、[Create Image] をクリックします。重要: ATF のパーティションの場合 [Exception Level] で [EL-3] を設定して [Enable Trust Zone] をオンにし、U-Boot のパーティションの場合は [Exception Level] で [EL-2] を設定します。これらの設定は、その他のパーティションでは無視できます。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 148

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

ZCU102 ボードでのイメージの実行SD カードの準備SD カードにイメージと実行ファイルをコピーし、ボードの SD カード スロットにその SD カードを挿入します。1. BOOT.bin ファイルと image.ub ファイルを SD カードにコピーします。注記: BOOT.bin は C:\edt\design1 にあります。

2. Linux アプリケーション ps_pl_linux_app.elf を同じ SD カードにコピーします。このアプリケーションはc:\edt\ps_pl_linux_app\Debug にあります。

ターゲットの設定1. SD カードを ZCU102 ボードの J100 コネクタに挿入します。2. ボードの USB-UART をホスト マシンに接続します。3. マイクロ USB ケーブルの一端を ZCU102 ボードのマイクロ USB ポート J83 に接続し、もう一端をホスト マシンの空きの USB ポートに接続します。

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

5. 12V 電源を ZCU102 の 6 ピン Molex コネクタに接続します。6. 使用しているホスト マシンに応じて Tera Term または Minicom を使用し、ターミナル セッションを開始します。システムの COM ポートとボー レートを ZCU102 ボードでのイメージの実行 に示すように設定します。

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 ポートに表示されます。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 149

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

ターゲットへの電源投入とアプリケーションの実行1. SW1 を使用して ZCU102 ボードに電源を投入し、Linux がボードにロードされるまで待ちます。

UART-0 用のターミナル画面に初期ブート シーケンス メッセージが表示されます。UART-1 用に設定されたターミナル画面にもメッセージが表示されます。これは、RPU で実行されている UART-1 インターフェイスを使用するように設定された R-5 ベアメタル アプリケーションからのメッセージです。このアプリケーションは、FSBLによって RPU にロードされます。

2. アプリケーションが実行されます。PS LED がアプリケーションによりトグルされ、アプリケーション ターミナルの指示に従っていることが示されます。

Linux アプリケーションの実行Linux が ZCU102 システム上で起動したら、ログインに root、パスワードに root を使用して Linux ターゲットにログインします。これで、Linux ターゲットはアプリケーションの実行を開始できます。次の手順に従って Linux アプリケーションを実行します。1. アプリケーションを SD カードのマウント ポイントから /tmp にコピーします。

# cp /run/media/mmcblk0p1/ps_pl_linux_app.elf /tmp

注記: # mount /dev/mmcblk0p1 /media/ に SD カードの内容が見つからない場合は、SD カードを手動で挿入してください。アプリケーションを /tmp. # cp /media/ps_pl_linux_app.elf /tmp にコピーします。

2. アプリケーションを実行します。# /tmp/ps_pl_linux_app.elf

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 150

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

デザイン サンプル 2: グラフィックスおよび DisplayPortベース サブシステムの設定例

このサンプル デザインは、主に Zynq UltraScale+ MPSoC デバイスのグラフィックス プロセッシング ユニット (GPU)と DisplayPort をベースにしています。この例では、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 をロードし、ターゲット上でグラフィックス アプリケーションを実行して、DisplayPortにその結果を表示。

ハードウェアの設定このセクションでは、プロセッシング システムで DisplayPort の 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] に設定します。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 151

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

注記: このチュートリアルのサンプル デザインで解像度 UHD@30 がサポートされるように、DisplayPort のレーンをデュアル レーンに設定しています。この設定により、ディスプレイが対応するモニターに対して UHD@30と 1080p 60 などの低解像度にロックされます。

6. [OK] をクリックして [Re-customize IP] ダイアログ ボックス閉じます。注意: [Run Block Automation] リンクをクリックしないでください。リンクをクリックすると、デザインがボードのプリセットにリセットされ、このセクションで実行したデザインのアップデートが無効になります。

7. [File] → [Save Block Design] をクリックしてブロック デザインを保存します。または、[CTRL + S] キーを押してブロック デザインを保存することもできます。

8. [Generate Bitstream] をクリックしてデザインを再合成し、ビットストリームを生成します。9. ビットストリームの生成が完了したら、ハードウェア プラットフォームのエクスポート の説明に従って、Vivado

の Export Hardware Platform ウィザードを使用してハードウェア プラットフォームをエクスポートします。10. XSA ファイルを Linux ホスト マシンにコピーします。

次のセクションでは、ハードウェア設定用に Linux をビルドする手順と、GPU および X Window System 用の追加ソフトウェア パッケージを含める手順を説明します。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 152

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

PetaLinux を使用した設定の変更と Linux イメージのビルド新たに変更されたハードウェアに合わせて PetaLinux BSP を再設定します。このセクションでは、「サンプル プロジェクト: PetaLinux を使用した Linux イメージの作成」で作成された PetaLinux プロジェクトを使用します。1. 次のコマンドを使用して、PetaLinux ディレクトリに移動します。

$ cd xilinx-zcu102-2020.1

2. ハードウェア プラットフォーム edt_zcu102_wrapper.xsa を Linux ホスト マシンにコピーします。3. 次のコマンドを実行して BSP を再設定します。

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

[PetaLinux Configuration] ウィンドウが開きます。4. 追加の設定を実行せずにウィンドウの内容を保存して閉じます。

PetaLinux がプロジェクトを再設定するのを待ちます。5. 既存のブートローダー イメージを消去します。これは、新しいハードウェア デザインに合わせてブートローダ

ーを再作成するためです。$ petalinux-build -c bootloader -x distclean

Mali OpenGL ES アプリケーションのビルドこのセクションでは、Triangle-based Cubic (三角錐) アプリケーションのビルドについて説明します。このアプリケーションは OpenGL ES で記述されており、X Window System をベースにしています。詳細およびアプリケーション ソース コードは、このチュートリアルに付属の ZIP ファイルの tricube フォルダーにある design_files を参照してください。このチュートリアルのデザイン ファイルを参照してください。次の手順に従って、OpenGL ES アプリケーションを構築します。1. tricube のアプリケーション ソース ディレクトリ全体を PetaLinux プロジェクトの recipe-apps ディレクトリにある Linux ホスト マシンにコピーします。<PetaLinux-Project>/project-spec/meta-user/recipes-apps/tricube

2. 新しく作成した tricube を次の場所にある user-rootfsconfig に追加します。<plnx_project>/project-spec/meta-user/conf/user-rootfsconfig

このアプリケーションにより、ファイルは次のようになります。新しいアプリケーションは太字で示しています。CONFIG_gpio-demo

CONFIG_peekpoke

CONFIG_tricube

3. このアプリケーションをビルドする手順およびライブラリの詳細は、tricube/tricube.bb のレシピを参照してください。上記アプリケーションのビルド時に含まれる X Window System (X11) パッケージは、アプリケーションによって異なります。tricube.bb レシピに含まれるライブラリは、アプリケーションで使用されたパッケージに基づきます。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 153

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

GPU ライブラリとその他のパッケージを RootFS で有効にするこのセクションでは、PetaLinux の rootfs Configuration ウィザードを使用して Mali GPU ライブラリを追加します。PetaLinux には、Mali GPU ライブラリと Mali GPU 用のデバイス ドライバーが付属しています。デフォルトでは、Maliドライバーはカーネル ツリーで有効になっていますが、Mali ユーザー ライブラリは (必要に応じて) ルート ファイルシステムで設定する必要があります。さらに、同じウィザードを使用して 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 をターゲットにした OpenGLES アプリケーションをビルドして実行できます。

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. すべてのパッケージを有効にしたら、config ファイルを保存して rootfs Configuration ウィザードを終了します。

6. 次のコマンドを使用して、Linux イメージをビルドします。$ petalinux-build

注記: PetaLinux をビルドできなかった場合は、次のコマンドを使用してもう一度ビルドします。$ petalinux-build -x mrproper$ petalinux-build

7. Linux イメージ ファイル image.ub が images/linux ディレクトリに生成されていることを確認します。8. 次のようなサンプル デザインのブート イメージを生成します。

$ petalinux-package --boot --fsbl images/linux/zynqmp_fsbl.elf --pmufwimages/linux/pmufw.elf --atf images/linux/bl31.elf --fpga images/linux/system.bit--u-boot images/linux/u-boot.elf

BOOT.BIN ブート イメージが作成されます。これは、FSBL ブートローダー、PL ビットストリーム、PMU ファームウェア、ATF、および U-Boot で構成されています。または、ブート イメージの作成の手順に従ってこのブート イメージを作成します。

重要: この例では、PetaLinux 2019.2 のデフォルト設定である X ウィンドウ システムに基づく GPU パッケージを使用します。PetaLinux 2019.2 のフレーム バッファー fbdev ベースの GPU パッケージを有効にするには、/project-spec/meta-user/conf/petalinuxbsp.conf に次の行を追加します。DISTRO_FEATURES_remove_zynqmp = " x11"

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 154

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

このチュートリアルのデザイン ファイルのサンプル eglfbdev アプリケーション (fdev ベース) を参照してください。詳細は、ザイリンクス アンサー 68821 を参照してください。

Linux をロードしてターゲットで OpenGL ES アプリケーションを実行し、DisplayPort にその結果を表示SD カードの準備Linux イメージをビルドし、アプリケーションもビルドしたので、次のイメージを SD カードにコピーして SD カードを ZCU102 ボードに挿入します。• BOOT.BIN

• image.ub

Linux ターゲットでのアプリケーションの実行ターゲットの設定次の手順に従って、ターゲットをセットアップします。1. SD カードを ZCU102 ボードの J100 コネクタに挿入します。2. マイクロ USB ケーブルの一端を ZCU102 ボードのマイクロ USB ポート J83 に接続し、もう一端をホスト マシンの空きの USB ポートに接続します。JTAG ケーブルが接続されていないことを確認します。ケーブルが接続されていると、システムがハングする可能性があります。

3. DisplayPort モニターを ZCU102 ボードに接続します。DP モニターの DisplayPort ケーブルは、ZCU102 ボードの DisplayPort コネクタに接続できます。注記: これらのイメージは、UHD@30 Hz および FullHD@60 Hz DisplayPort に対応するモニターでテストされています。

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

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

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 155

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

6. 使用しているホスト マシンに応じて Tera Term または Minicom を使用し、ターミナル セッションを開始します。システムの COM ポートとボー レートを ZCU102 ボードでのイメージの実行 に示すように設定します。

7. ポート設定では、デバイス マネージャーで COM ポートを検証します。ZCU102 ボードには、4 つの USB UART インターフェイスがあります。最も小さい番号のインターフェイスに関連付けられた COM ポートを選択します。ここでは、UART-0 に対して Interface-0 の COM ポートを選択します。

ターゲットへの電源投入とアプリケーションの実行次の手順に従って、ターゲットをセットアップします。1. SW1 を使用して ZCU102 ボードに電源を投入し、Linux がボードにロードされるまで待ちます。2. Linux がロードされたら、ログインおよびパスワードに root を使用してターゲット Linux コンソールにログインします。

3. 表示パラメーターを設定し、Xorg を正しい深さで開始します。# export DISPLAY=:0.0# /usr/bin/Xorg -depth 16&

4. tricube アプリケーションを実行します。# tricube

ここで、回転するマルチカラーの立方体と回転する三角形が DisplayPort に表示されます。立方体もマルチカラーの三角形で作成されていることがわかります。

第 6 章: システム デザイン例

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 156

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

付録 A

セキュア ブートでの問題のデバッグここでは、セキュリティ エラーのデバッグ方法を説明します。まず、デバイスで PUF 登録が実行されたかどうかを確認します。続いて、ブート イメージのブート ヘッダーの値をチェックします。

PUF 登録が実行されているかどうかの確認次の手順で、PUF 登録ソフトウェアがデバイスで実行されたかどうかを確認できます。1. Vitis IDE で [Xilinx] → [XSCT Console] をクリックします。2. プロンプトに次のコマンドを入力します。

xsct% connectxsct% targetsxsct% targets -set -filter {name =~ "Cortex-A53 #0"}xsct% rst -processorxsct% mrd -force 0xFFCC1050 (0xFFCC1054)

3. この場所には CHASH および AUX の値が含まれます。値がゼロ以外の場合、PUF 登録ソフトウェアがデバイスで実行されています。

ブート イメージの読み出しBootgen ユーティリティを使用して、ブート イメージで使用されるヘッダー値とパーティション データを確認できます。1. BOOT.bin を含むディレクトリを変更します。2. XSCT プロンプトで次のコマンドを実行します。

bootgen_utility –bin BOOT.bin –out myfile –arch zynqmp

3. myfile で「BH」を検索します。

付録 A: セキュア ブートでの問題のデバッグ

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 157

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

付録 B

その他のリソースおよび法的通知

ザイリンクス リソースアンサー、資料、ダウンロード、フォーラムなどのサポート リソースは、ザイリンクス サポート サイトを参照してください。

ソリューション センターデバイス、ツール、IP のサポートについては、ザイリンクス ソリューション センターを参照してください。デザイン アシスタント、デザイン アドバイザリ、トラブルシューティングのヒントなどが含まれます。

Documentation Navigator およびデザイン ハブザイリンクス Documentation Navigator (DocNav) では、ザイリンクスの資料、ビデオ、サポート リソースにアクセスでき、特定の情報を取得するためにフィルター機能や検索機能を利用できます。DocNav を開くには、次のいずれかを実行します。• Vivado® IDE で [Help] → [Documentation and Tutorials] をクリックします。• Windows で [スタート] → [すべてのプログラム ] → [Xilinx Design Tools] → [DocNav] をクリックします。• Linux コマンド プロンプトに「docnav」と入力します。ザイリンクス デザイン ハブには、資料やビデオへのリンクがデザイン タスクおよびトピックごとにまとめられており、これらを参照することでキー コンセプトを学び、よくある質問 (FAQ) を参考に問題を解決できます。デザイン ハブにアクセスするには、次のいずれかを実行します。• DocNav で [Design Hub View] タブをクリックします。• ザイリンクス ウェブサイトでデザイン ハブ ページを参照します。注記: DocNav の詳細は、ザイリンクス ウェブサイトの Documentation Navigator ページを参照してください。DocNav からは、日本語版は参照できません。ウェブサイトのデザイン ハブ ページをご利用ください。

付録 B: その他のリソースおよび法的通知

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 158

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

このチュートリアルのデザイン ファイルこの資料に関連する ZIP ファイルには、チュートリアルのデザイン ファイルが含まれます。リファレンス デザインファイルは、ザイリンクス ウェブサイトからダウンロードできます。ZIP ファイルの内容を表示するには、ZIP ファイルをダウンロードして C:\edt に解凍します。デザイン ファイルには、すべてのセクション用の XSA ファイル、ソース コード、およびビルド済みイメージが含まれています。

参考資料このガイドの補足情報は、次の資料を参照してください。1. 『Vivado Design Suite ユーザー ガイド: 入門』 (UG910: 英語版、日本語版)

2. 『Vivado Design Suite チュートリアル: エンベデッド プロセッサ ハードウェア デザイン』 (UG940: 英語版、日本語版)

3. 『Vivado Design Suite ユーザー ガイド: リリース ノート、インストール、およびライセンス』 (UG973: 英語版、日本語版)

4. 『UltraFast エンベデッド デザイン設計手法ガイド』 (UG1046: 英語版、日本語版)

5. 『Zynq UltraScale+ デバイス テクニカル リファレンス マニュアル』 (UG1085: 英語版、日本語版)

6. 『Zynq UltraScale+ MPSoC: ソフトウェア開発者向けガイド』 (UG1137)

7. 『PetaLinux ツール資料: リファレンス ガイド』 (UG1144: 英語版、日本語版)

8. 『Zynq UltraScale+ MPSoC Processing System LogiCORE IP 製品ガイド』 (PG201: 英語版、日本語版)

9. 『Zynq-7000 SoC のメジャー ブート』 (XAPP1309: 英語版、日本語版)

10.『Zynq-7000 SoC のセキュア ブート』 (XAPP1175)

11.『Zynq-7000 SoC における暗号化キーの変更』 (XAPP1223)

12.『BBRAM および eFUSE のプログラミング』 (XAPP1319)

13. Vitis エンベデッド ソフトウェア開発フローの資料サポート リソース1. ザイリンクス Zynq UltraScale+ MPSoC ソリューション センター2. ソフトウェア ゾーン: https://japan.xilinx.com/products/design-tools/software-zone/sdsoc.html#docsdownload

その他のリソース1. 『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)

2. ザイリンクス GitHub ウェブサイト: https://github.com/xilinx

3. Linux カーネル モジュール プログラミング ガイド: http://tldp.org/LDP/lkmpg/2.6/html/index.html

付録 B: その他のリソースおよび法的通知

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 159

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

トレーニング リソースザイリンクスでは、この資料に含まれるコンセプトを説明するさまざまなトレーニング コースおよび 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-2020 Xilinx, Inc. Xilinx、Xilinx のロゴ、Alveo、Artix、Kintex、Spartan、Versal、Virtex、Vivado、Zynq、およびこの文書に含まれるその他の指定されたブランドは、米国およびその他各国のザイリンクス社の商標です。 AMBA、AMBA Designer、Arm、ARM1176JZ-S、CoreSight、Cortex、PrimeCell、Mali、および MPCore は、EUおよびその他各国の Arm Limited の商標です。 PCI、PCIe、および PCI Express は PCI-SIG の商標であり、ライセンスに基づいて使用されています。 すべてのその他の商標は、それぞれの保有者に帰属します。

この資料に関するフィードバックおよびリンクなどの問題につきましては、[email protected] まで、または各ページの右下にある [フィードバック送信] ボタンをクリックすると表示されるフォームからお知らせください。フィードバックは日本語で入力可能です。いただきましたご意見を参考に早急に対応させていただきます。なお、このメール アドレスへのお問い合わせは受け付けておりません。あらかじめご了承ください。

付録 B: その他のリソースおよび法的通知

UG1209 (v2020.1) 2020 年 6 月 3 日 japan.xilinx.comZynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル 160