zynq ultrascale+ mpsoc での 分離手法...zynq ultrascale+ mpsoc apu は arm® v8...

49
XAPP1320 (v3.0) 2020 4 30 1 japan.xilinx.com この資料は表記のバージ ョ ンの英語版を翻訳し たもので、 内容に相違が生じ る場合には原文を優先し ます。 資料によっては英語版の更新に対応していないものがあります。 日本語版は参考用 と し てご使用の上、 最新情報につき ま し ては、 必ず最新英語版を ご参照 く だ さ い。 概要 Zynq ® UltraScale+™ MPSoC は複数のプロセッシング ユニッ トを提供しており、 4 つの Cortex™-A53 コア、 2 つの Cortex-R5 コア、 プラ ッ ト フォーム管理ユニッ ト (PMU)、 コンフィギュレーション セキュリティ ユニッ ト (CSU)、 プログ ラマブル ロジック (PL) 内のユーザー指定数の MicroBlaze™ プロセッサが含まれています。 複数のソフ ト ウェア チームが システム開発に従事している場合、 これらのプロセッシング ユニ ッ ト が互いに干渉する可能性があ り ます。 こ の潜在的 な干渉を防ぐには分離が必要です。 セキ ュ リ テ ィ および機能安全アプ リ ケーシ ョ ンではその性質上、 分離が必要条件 と な り ます。 Zynq UltraScale+ MPSoC は、 ザ イ リ ン ク ス メ モ リ 保護ユニ ッ ト (XMPU) とザイリンクス ペ リ フ ェ ラ ル保護ユニ ッ ト (XPPU) でメモリ とペリフェラルのハードウェア保護を提供します。 これらの保護ユニッ トは、 TrustZone (TZ) Zynq UltraScale+ MPSoC の メ モ リ 管理ユニ ッ ト (MMU) およびシステム メ モ リ 管理ユニ ッ ト (SMMU) によって提供される分離 を補完する ものです。 こ こで説明する手法に従う こ とで、 構造化された分離手法を使用してシステムを構築できます。 こ のアプ リ ケーシ ョ ン ノ ー ト では、 XMPUXPPUTZ を使用して Zynq UltraScale+ MPSoC システム内のサブシステムを分 離する方法について説明し ます。 このアプリケーション ノートの リファレンス デザイン ファイルは、ザイリンクスのウェブサイトからダウンロードでき ます。 デザイン フ ァ イ ルの詳細は、 47 ページの 「デザイン フ ァ イ ル」 を参照してください。 注記: このアプリケーション ノートではターゲッ ト デバイスの例として MPSoC を使用し ますが、 こ こで説明する分離手 法は RFSoC デバイスにも適用できます。 はじめに Zynq UltraScale+ MPSoC のデザインは複数のサブシステムを使用します。 サブシステムには、 1 つ以上の中央演算処理装 (CPU) またはその他のマスター、 メモリ、 ペリ フェラルが含まれます。 干渉が生じるのは、 あるサブシステム内のマ スターが、 アクセスを想定されていないメモリ領域またはペリフェラルにアクセスしたときです。 干渉の原因には、 ソフ ト ウ ェ アのバグや悪意あ る攻撃者の存在があ り ます。 このアプリケーション ノ ー ト では、 Vivado ® Design Suite の分離手法を用いて、 分離サブシステムを使用するシステムを 定義します。 対象となるサブシステムは、 アプリケーション プロセッシング ユニッ ト (APU)、 リアルタイム プロセッシ ング ユニッ ト (RPU)PMU です。 これらの手法の目標は、 各サブシステムを、 ほかのサブシステム との間で無干渉 (FFI: Freedom From Inference) で実行で き る よ う にする こ と です。 保護ユニ ッ ト と TZ を構成してサブシステムの分離を実現し ます。 Vivado Design Suite で生成されたシステム ハードウェアをザイリンクスのソフトウェア開発キット (SDK) にエクス ポー ト し、 SDK を使用してシステム ソ フ ト ウ ェ ア を 作成 し ま す。 SDK は、 サブシステム上で実行される基本ソフ ト ウェ アだけでな く 、 保護ユニ ッ ト と TZ の機能を制御および監視するアプ リ ケーシ ョ ンの作成にも使用できます。 このソフ ト ウェアには、 サブシステムの干渉に対するエラー対応を含めるこ とができます。 システムを定義して実装したら、 サブシステム間の相互通信を含む基本機能を検証する必要があ り ます。 サブシステム間 の分離は、 保護ユニ ッ ト および TZ の分離機能を呼び出すフォール ト を挿入する こ とで検証できます。 これには、 システ ム設計者が定義した干渉へのエラー対応テス ト も含まれます。 アプリケーション ノート : Zynq UltraScale+ MPSoCs XAPP1320 (v3.0) 2020 4 30 Zynq UltraScale+ MPSoC での 分離手法 著者: Steven McNeilPeter SchillingerAniket KolarkarEmmanuel PuilletUwe Gertheinrich

Upload: others

Post on 23-Jan-2021

31 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

XAPP1320 (v3.0) 2020 年 4 月 30 日 1japan.xilinx.com

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

概要

Zynq® UltraScale+™ MPSoC は複数のプロセッシング ユニッ ト を提供しており、 4 つの Cortex™-A53 コア、 2 つの Cortex-R5 コア、 プラ ッ ト フォーム管理ユニッ ト (PMU)、 コンフ ィギュレーシ ョ ン セキュ リティ ユニッ ト (CSU)、 プログラマブル ロジッ ク (PL) 内のユーザー指定数の MicroBlaze™ プロセッサが含まれています。 複数のソフ ト ウェア チームがシステム開発に従事している場合、 これらのプロセッシング ユニッ トが互いに干渉する可能性があ り ます。 この潜在的な干渉を防ぐには分離が必要です。 セキュ リ ティおよび機能安全アプリ ケーシ ョ ンではその性質上、 分離が必要条件となり ます。

Zynq UltraScale+ MPSoC は、 ザイ リ ンクス メモ リ保護ユニッ ト (XMPU) とザイ リ ンクス ペリ フェラル保護ユニッ ト (XPPU) でメモ リ とペリ フェラルのハード ウェア保護を提供します。 これらの保護ユニッ トは、 TrustZone (TZ) と Zynq UltraScale+ MPSoC のメモリ管理ユニッ ト (MMU) およびシステム メモ リ管理ユニッ ト (SMMU) によって提供される分離を補完するものです。 こ こで説明する手法に従う こ とで、 構造化された分離手法を使用してシステムを構築できます。 このアプリ ケーシ ョ ン ノートでは、 XMPU、 XPPU、 TZ を使用して Zynq UltraScale+ MPSoC システム内のサブシステムを分離する方法について説明します。

このアプリ ケーシ ョ ン ノートの リ ファレンス デザイン ファ イルは、 ザイ リ ンクスのウェブサイ トからダウンロードできます。 デザイン ファ イルの詳細は、 47 ページの 「デザイン ファ イル」 を参照してください。

注記: このアプリ ケーシ ョ ン ノートではターゲッ ト デバイスの例と して MPSoC を使用しますが、 こ こで説明する分離手法は RFSoC デバイスにも適用できます。

はじめに

Zynq UltraScale+ MPSoC のデザインは複数のサブシステムを使用します。 サブシステムには、 1 つ以上の中央演算処理装置 (CPU) またはその他のマスター、 メモ リ、 ペリ フェラルが含まれます。 干渉が生じるのは、 あるサブシステム内のマスターが、 アクセスを想定されていないメモ リ領域またはペリ フェラルにアクセスしたと きです。 干渉の原因には、 ソフト ウェアのバグや悪意ある攻撃者の存在があ り ます。

このアプリ ケーシ ョ ン ノートでは、 Vivado® Design Suite の分離手法を用いて、 分離サブシステムを使用するシステムを定義します。 対象となるサブシステムは、 アプリ ケーシ ョ ン プロセッシング ユニッ ト (APU)、 リ アルタイム プロセッシング ユニッ ト (RPU)、 PMU です。 これらの手法の目標は、 各サブシステムを、 ほかのサブシステムとの間で無干渉 (FFI: Freedom From Inference) で実行できるよ うにするこ とです。 保護ユニッ ト と TZ を構成してサブシステムの分離を実現します。 Vivado Design Suite で生成されたシステム ハードウェアをザイ リ ンクスのソフ ト ウェア開発キッ ト (SDK) にエクスポート し、 SDK を使用してシステム ソフ ト ウェアを作成します。 SDK は、 サブシステム上で実行される基本ソフ ト ウェアだけでなく、 保護ユニッ ト と TZ の機能を制御および監視するアプリ ケーシ ョ ンの作成にも使用できます。 このソフ トウェアには、 サブシステムの干渉に対するエラー対応を含めるこ とができます。

システムを定義して実装したら、 サブシステム間の相互通信を含む基本機能を検証する必要があ り ます。 サブシステム間の分離は、 保護ユニッ トおよび TZ の分離機能を呼び出すフォールト を挿入するこ とで検証できます。 これには、 システム設計者が定義した干渉へのエラー対応テス ト も含まれます。

アプリケーシ ョ ン ノート : Zynq UltraScale+ MPSoCs

XAPP1320 (v3.0) 2020 年 4 月 30 日

Zynq UltraScale+ MPSoC での分離手法著者: Steven McNeil、 Peter Schillinger、 Aniket Kolarkar、Emmanuel Puillet、 Uwe Gertheinrich

Page 2: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

はじめに

XAPP1320 (v3.0) 2020 年 4 月 30 日 2japan.xilinx.com

このアプリ ケーシ ョ ン ノートの対象はベアメ タル システムです。 こ こで説明する手法は、 オペレーティング システムを使用するシステムでの分離開発フレームワークを提供します。 このアプリ ケーシ ョ ン ノートでは、 次の内容について説明しています。

• UltraScale MPSoC アーキテクチャ

• 分離ツール

• 分離リ ファレンス デザイン

ハードウェアおよびソフ トウェアの要件

リ ファレンス デザイン システムのハード ウェアおよびソフ ト ウェア要件は、 次のとおりです。

• ザイ リ ンクス ZCU102 評価プラ ッ ト フォーム

• USB Type-A/mini-B ケーブル 2 本 (UART、 JTAG 通信用)

• セキュア デジタル (SD) メモ リ カード

• ザイ リ ンクス SDK 2019.1

• ザイ リ ンクス Vivado Design Suite 2019.1

• シ リ アル通信ターミナル ソフ ト ウェア (Tera Term や PuTTY など)

• ウォーム リ スタート パッチが必要。 詳細は、 「ソフ ト ウェア パッチ要件 (2019.1/2019.2)」 を参照してください。

Page 3: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

UltraScale MPSoC アーキテクチャ

XAPP1320 (v3.0) 2020 年 4 月 30 日 3japan.xilinx.com

UltraScale MPSoC アーキテクチャ

このセクシ ョ ンでは、 サブシステムを作成するために使用する UltraScale MPSoC アーキテクチャのハード ウェア コンポーネン ト と、 FFI を実現するために使用する保護ユニッ トについて説明します。 Zynq UltraScale+ MPSoC はプロセッシング システム (PS) とプログラマブル ロジッ ク (PL) で構成されています。 また、 Zynq UltraScale+ MPSoC の領域は、 フル電力ド メ イン (FPD) 領域と低電力ド メ イン (LPD) 領域などの電力ド メ インによって定義されています。 これらの電力ド メインには、 ユーザーが電源を制御できるアイランドがあ り ます。

また、 ダブル データ レート (DDR) メモ リ、 オンチップ メモリ (OCM)、 密結合メモリ (TCM)、 PL 内の Advanced eXtensible Interface (AXI) ブロッ ク RAM という 4 つの基本メモリ領域があり ます。 メモリ アクセスを制御するのは、 メモリ コン トローラー、 ダイレク ト メモリ アクセス コン ト ローラー (DMAC)、 メモリ管理ユニッ ト (MMU)、 SMPU です。 主に LPD 内にあるペリ フェラルには、 入力/出力ユニッ ト (IOU) 内のデバイスと、 ギガビッ ト イーサネッ ト MAC (GEM) などのその他のデバイスが含まれます。 GEM ペリ フェラルと USB ペリ フェラルは、 マスターおよびスレーブのいずれの AXI デバイスと しても動作します。 ペリ フェラルには専用または共有でアクセスできますが、 ペリ フェラルを共有する場合、 アクセスに対してアービ ト レーシ ョ ンを実行するかはユーザーが指定します。 ペリ フェラルの分離は XPPU を使用して提供されます。

Zynq UltraScale+ MPSoC 内の XMPU と XPPU の位置を図 1 に示します。 合計 8 つの XMPU があ り、 6 つは DDR へのト ランザクシ ョ ンを保護し、 1 つは OCM を、 残りの 1 つは FPD へのト ランザクシ ョ ンを保護します。 XPPU は 1 つあり、LPD への入力位置にあ り ます。

Page 5: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

UltraScale MPSoC アーキテクチャ

XAPP1320 (v3.0) 2020 年 4 月 30 日 5japan.xilinx.com

システム メモ リ管理ユニッ ト (SMMU)、 AXI タイムアウ ト ブロ ッ ク (ATB)、 AXI 分離ブロッ ク (AIB)、 TZ といった分離に必要なその他のコンポーネン トがハード ウェアで提供されています。 SMMU は、 ダイレク ト メモ リ アクセス コン トローラー (DMAC) など、 CPU 以外のマスターのメモ リ管理を提供します。 SMMU はハイパーバイザーと組み合わせて使用でき、 同じ メモ リにアクセスする 2 つの異なるプロセッサ間を分離します。 ATB は、 スレーブ応答のない AXI ト ランザクシ ョ ンが停止しないよ うにするもので、 AIB は、 電源が切断された領域を電源切断ステートに移行します。 分離において、 未使用領域の電源切断は重要です。

いくつかのアクセス制御タイプを保護ユニッ トおよび TZ と組み合わせて使用する必要があ り ます。 AXI ト ランザクシ ョンは、 読み出しも書き込みもできますが、 コードまたはデータ定数を含むセクシ ョ ンの書き込みはしないよ うにしてください。 この分離要件に対応するため、 TZ とザイ リ ンクス保護ユニッ ト (XMPU および XPPU) を使用して、 メモ リ領域の読み出し /書き込みパーミ ッシ ョ ンを定義できます。

注記: 保護ユニッ トは分離を実現するためにマスター ID を使用しますが、 TZ は AXI AxProt[] を使用します。

Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであ り、 4 つの例外レベルをサポート しています。 これらの例外レベルを使用して、 アプリケーシ ョ ン レベルで権限を制御します (アプリケーシ ョ ンごとに個別の例外レベルがある)。Arm®v8 アーキテクチャの例外レベル (EL) は、 APU 上で実行されるアプリ ケーシ ョ ン専用であ り、 RPU と PMU ではサポート されていません。 ただし、 RPU は、 例外レベルと概念の似た特権レベルの制御モードをサポート しています。詳細は、 https://developer.arm.com/docs/den0024/latest/fundamentals-of-armv8/changing-exception-levels#BEIJHGDA を参照してください。

未使用の領域およびアイランドの電源を切断するこ とは、 分離だけでなく、 一般的なセキュ リ ティおよび安全性対策にも有効な手段です。 コンポーネン トの電源を切断すれば、 ほかのコンポーネン トに干渉するこ とはあ り ません。 図 2 に、Zynq UltraScale+ MPSoC の電源アイランドの概要を示します。

Page 6: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

UltraScale MPSoC アーキテクチャ

XAPP1320 (v3.0) 2020 年 4 月 30 日 6japan.xilinx.com

X-Ref Target - Figure 2

図 2: Zynq UltraScale+ MPSoC の電源ド メイン

VCU H.265, H.265

BRAM

PL SYSMON(SYSMONE4)

100 Gb Ethernet Interlaken

PL Con gura on

PL F

abric

PL Fabric

DSP, LUT, Clks

SerDes

HD I/O

eFUSE

RealTimeClock BBRAM

Oscillator

USB 0

USB 1

PS-GTR

1.2 to 1.5V

Ba ery Power Domain (BPD)

1.8VVCC_PSAUX good

1.8V to 3.3V VCCO_PSIO3

1.8V to 3.3V VCCO_PSIO2

1.8V to 3.3V VCCO_PSIO1

1.8V to 3.3V VCCO_PSIO0

0.85 or 0.9V VCC_PSINTLP

1.2V VCC_PSPLL

0.85 or 0.9VVCC_PSINTFP

0.85V PS_MGTRAVCC

1.8V PS_MGTRAVTT

1.1 to 1.5V VCCO_PSDDR

1.8V VCC_PSDDR_PLL

VCCBRAM

VCCINT_VCU0.9VVCCADC1.8VVREFP1.25VVCCAUX1.8V

VCCO1.2 to 3.3V

0.85 or 0.9V

VCC_PSINTFP_DDR

PS SysMon

APLLVPLLDPLL

RPLLIOPLL

System

MIO 2MIO 1MIO 0

L2 CacheRAM

CPU 3

CPU 1

CPU 2

CPU 0

APU MPCore(SCU, GIC, CCI)

APU DebugRPU debug

Arm DAPPL debug

FPDDMA SATA

GPU pipelinePCIe

Interconnect and SLCRDisplayPort

GPU PP0

GPU PP1

Bank 0

Bank 1

Bank 2

Bank 3

TCM A0

TCM A1

TCM B0

TCM B1

OCM CtrlIOP

CSU PMU

IPI

Interconnect and SLCRLPD DMA

PS TAP

PLLs (x6) DDR Memory ControllerDDRIOB Po

rts

Ba ery

Power Supplies

PCAP

PCAP-LPD Isola on WallPL

-LPD

Isol

aon

Wal

l

VCC_PSAUX

Low Power Domain (LPD)

Full Power Domain (FPD)

PL Power Domain (PLPD)

PSIO {0:3} Power

High-Performance I/O PL Power Domains for Mul ple PL Units

PLL Power DomainsVCC_PSBATT

ETMGIC

RPU MPCore

PL-FPD Isola on Wall

PS Auxiliary Power Domain

GTH/GTY Supplies0.9 to 1.8V

1.8V VCC_PSADC

PCIe Gen3, 4

PL TAP

PMU so ware control

PHY

HP I/OVCCAUX_IO1.8V

VCCINT0.72, 0.85, or 0.9V PLPDVCCO1.0 to 1.8V

X22405-022719

Page 7: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離ツール

XAPP1320 (v3.0) 2020 年 4 月 30 日 7japan.xilinx.com

分離ツール

Zynq UltraScale+ MPSoC には、 分離デザインの開発に役立つさまざまなツールがあ り ます。 こ こでは、 主なツールについて説明します。

TrustZoneこのアプリ ケーシ ョ ン ノートで説明する分離手法は、 前提と して保護ユニッ トおよび TZ を使用します。 保護ユニッ トは、 AXI ト ランザクシ ョ ンの違反を検出するこ とで分離を可能にします。 ザイ リ ンクスは、 保護ユニッ トによる分離と TZ による分離を区別するために、 それぞれト ランザクシ ョ ン分離とステート分離という用語を使用しています。ステート分離はト ランザクシ ョ ン分離よ り も範囲が広く、 サブシステム内のプロセッサ、 IP、 メモ リ、 割り込みが、 セキュア環境 (SW) 設定または非セキュア環境 (NSW) 設定に指定されます。 サブシステムは SW ステート と NSW ステート間でコンテキス ト切り替えを実行でき、 これによ り ソフ ト ウェアは複雑になり ますが、 デバイス使用率を高めるこ とができます。

リ ファレンス デザインでは、 TZ の使用開始に不可欠なフレームワークを提供します。 TZ は複雑なので、 その利点をすべて活用するには、 Trusted Execution Environment (TEE) の実行とザイ リ ンクスのエコシステム パートナーによるサポートが一般に必要になり ます。 詳細は、 『Zynq UltraScale+ デバイスにおけるセキュ リティ重視アプリ ケーシ ョ ンの分離』 (WP516) [参照 5] を参照してください。後述のリ ファレンス システム (図 13 を参照) では、APU と APU のメモ リおよびペリ フェラルが TZ の非セキュアに割り当てられており、RPU と PMU の専用メモ リおよびペリ フェラルは TZ セキュアに割り当てられています。 共有も可能ですが (通常は推奨されない)、 セキュ リ ティ レベルをマスターのレベルと一致させる必要があ り ます。 たとえば、 非セキュア マスターはセキュアのメモ リやペリ フェラルにはアクセスできませんが、 セキュア マスターは、 セキュアまたは非セキュアのいずれのメモ リおよびペリ フェラルにもアクセスできます。

一般的な Arm ユース ケースでは、 TZ はハードウェア機能と ソフ ト ウェア機能を使用して分離を提供します。 SW および NSW の動作ステートは TZ によって定義されます。 機能安全 (FS) アプリ ケーシ ョ ンでも、 セキュ リ ティ アプリ ケーシ ョンと同様の分離要件が求められるこ とがあ り ます。 FS アプリ ケーシ ョ ンでは、 セキュアおよび非セキュアの代わりに、それぞれセーフティ ク リ ティカルおよび非セーフティ ク リ ティカルという用語を使用します。 これらの用語は類似しているため、 セキュ リ ティの文脈での用語 (セキュア環境と非セキュア環境) と揃えるために、 簡潔にセーフティ環境と非セーフティ環境という用語を使用します。

こ こでの目的は、 セーフティ ク リ ティカル機能が非セーフティ ク リ ティカル機能によって損なわれないよ うにするこ とです。 すべてではあ り ませんが、 一部の TZ システムでは、 同一の CPU が SW と NSW 間で多重化されます。 これは、 リソースを効率的に使用できるためですが、 通常は非常に複雑なコンテキス ト切り替えが必要になり ます。 ただし、 ト ラステッ ド ソフ ト ウェアは一般に、 スタンドアロンのボード サポート パッケージ (BSP) または SW 内の小規模なオペレーティング システムを使用して、 SW 内で実行されます。 NSW ソフ ト ウェアは機能豊富なオペレーティング システム (多くの場合 Linux) で実行されるので、 一般に攻撃対象の領域が広くな り ます。

例を挙げる と、 セキュア ブート、 セキュア ファームウェア アップデート、 キー管理、 リセッ ト制御、 パワー マネージメン ト などのク リ ティカル システム機能が SW 内で実行されます。 ステータス通知、 必須ではないアナリティ クス、 パフォーマンス監視などの非ク リティカル アプリ ケーシ ョ ンは、 NSW 内で Linux アプリ ケーシ ョ ンと して実行されます。TZ が提供する分離によ り、NSW 内のサイバー攻撃やソフ ト ウェア バグが SW 内のコードまたはデータに影響する可能性が 小限に抑えられます。

SW と NSW 間で実行されているコードのコンテキス ト を切り替えるのは複雑な処理なので、 1 つの CPU を SW で動作するよ うに静的に設定し、 2 つ目の CPU は NSW で動作するよ うに静的に設定する方が簡単です。 Zynq UltraScale+ MPSoC で提供される CPU の数を考慮する と、 これは実行可能な選択肢です。 たとえば、 R5-0 を SW 内で静的に動作させて、A53-0 は NSW 内で静的に動作させるこ とができます。

TZ では、 マスター、 スレーブ、 メモ リは、 SW または NSW のいずれか一方で動作するよ うに指定します。 SW 内のマスターは、 SW と NSW のいずれかに属するスレーブおよびメモ リ (つま り、 すべて) にもアクセスできます。 NSW 内のマスターは、 NSW に属するスレーブおよびメモ リにのみアクセスできます。 NSW マスターが SW 内のペリ フェラルまたはメモ リにアクセスしよ う と しても許可されません。 権限のないアクセスはスレーブによって拒否され、 通常は SLVERR または DECERR 応答が返されます。

Page 8: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離ツール

XAPP1320 (v3.0) 2020 年 4 月 30 日 8japan.xilinx.com

Zynq UltraScale+ MPSoC の TZ ハードウェア分離は、 AXI バス上の AxPROT[1] 信号をフ ィルタ リ ングメカニズムと して使用して、 アクセスが正当かと うかを判断します。 これは、 PS 内の Arm Advanced High-performance Bus (AHB) と Advanced Peripheral Bus (APB) の両方で使用されています。 PL で使用される AXI Interconnect IP も AxPROT[1] をサポート しているため、 PL (1) では TZ による分離が比較的わかりやすくなっています。 MicroBlaze プロセッサおよび AXI IP は SW/NSW 動作ステート をサポート していませんが、 AxPROT 信号を追加するカスタム ロジッ クは比較的簡単です。

システム保護ユニッ ト

「TrustZone」 で詳細を説明したよ うに、 Arm TrustZone テク ノ ロジは、 それぞれの AXI ト ランザクシ ョ ンにセキュ リティ レベルをタグ付けします。 XMPU と XPPU は、 指定のアドレス範囲 (メモ リ とペリ フェラル) にセキュア環境または非セキュア環境の TrustZone タグを割り当てるこ とで、 特定のシステム マスターが明示的にアクセス許可されているこ とを検証します。

XMPU

どのよ うなセキュア システムや機能安全システムにとっても基本になるのがメモ リの分離です。 XMPU によ り、 ユーザー定義のメモ リ領域を分割して、 分離された特定のサブシステムに割り当てるこ とができます。 図 3 に XMPU の機能図を示します。

1. これらのビッ ト を利用するコアのデザインは、 ユーザーの責任で行います。

X-Ref Target - Figure 3

図 3: XMPU の機能

OCM Memory

OCM Switch

O set address +[BASE] register

APB

AXI

AddressPoison

AXI

FPD_XMPU

IOP Switch(to Peripheral Slaves)

FPD Switch

DECERR

DDR {0:5}

OriginalAddress

AxUser [Poison]signal

0: LPD AXI1: CCI AXI2: CCI AXI3: HP0, DisplayPort4: HP1, HP25: HP3, FPD_DMA

AXI

AttributePoison

AXI

OCM_XMPU andDDR_XMPUx

FPD_SinkIRQ

PSLVERRAPB

Poisoned Trans

or Invalid Reg

IRQ

PSLVERR Invalid Reg

Secure

BridgeAXI

Poisoned Transor Invalid Reg

APB

IRQ

PSLVERR Invalid Reg

Poisoned Transor Invalid Reg

X22784-042519

Page 9: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離ツール

XAPP1320 (v3.0) 2020 年 4 月 30 日 9japan.xilinx.com

DDRC インターフェイスの入力に XMPU が 6 つあり、 OCM の入力に XMPU が 1 つあり ます。 また、 FPD インターコネクトの入力には、 FPD コン ト ローラー (SATA および PCIe®) を保護するために XMPU が 1 つあ り ます。 Vivado ツールで生成される XMPU の設定は、 FSBL (第 1 段階ブート ローダー ) にエクスポート されます。 この FSBL で分離コンフ ィギュレーシ ョ ン レジスタが設定されます。 追加の安全またはセキュ リティ チェッ ク と して、 これらのレジスタが読み出され、 ステートが検証されます。 Zynq UltraScale+ MPSoC の機能安全ソフ ト ウェア テス ト ライブラ リ (STL) の一部と して、ザイ リンクスは XMPU でのセルフ テス ト実行機能を提供しています。 該当ライブラ リは、 機能安全ラウンジ (1) で提供されています。 XMPU が 大 16 の領域を保護し、 これらの領域は 1MB (DDR) または 4KB (OCM) の境界に揃えられています。 それぞれの領域に対して、 次の 2 つのチェッ クに基づいてメモ リ保護が提供されます。

• ト ランザクシ ョ ンのアドレスが、 START_ADDR および END_ADDR で定義された領域内にあるかど うか。

• 受信した ト ランザクシ ョ ンのマスター ID がアクセス許可されているかど うか。

これらのレジスタは実行時に再設定できますが、 安全システムやセキュア システムでは推奨されていません。 このよ うなシステムでは通常レジスタをロ ッ クする必要があ り ます。 この方法は XPPU に対して推奨されていますが、 XMPU には推奨されていません。 XMPU の設定をロ ッ クするこ とで、 XMPU からの割り込みがク リ アされなくなる場合 (割り込みをク リ アするレジスタもロ ッ ク される )、 競合が発生します。 この競合に起因して、 リ ファレンス デザインには追加のサブシステムと して XPMU マスターとなる PMU が追加されています。 この例では、 XMPU の設定はロッ ク されておらず、PMU システムによる書き込みのみが許可されます。 PMU のフレームワーク コードは割り込みハンド ラーと して提供されます。 このフレームワークでは、 ユーザーのエラー応答要件に基づいて付加的なコードを追加できます。

注記: この競合は XMPU でのみ発生します。 XPPU は、 割り込みのク リ ア機能に影響するこ とな く ロ ッ クできます。

START_ADDR、 END_ADDR、 マスター ID (MID) の値はシステム設定内に定義されており、 XMPU レジスタ空間で読み出すこ とができます。 APU のマスター ID は 1 つですが、 RPU には次の 2 つの可能性があ り ます。 ロ ッ クステップ モードで構成されている場合、 1 つの R5 マスター ID が使用されます。 スプリ ッ ト モードで構成されている場合、 それぞれの R5 が独自のマスター ID を持ちます。 アクセスがいずれかの保護条件に違反した場合、 XMPU がポイズン処理を適用するこ とでこれを阻止します。

条件違反のト ランザクシ ョ ンが試行された場合、 XMPU は AxUser[10] をアサート しますが、 ト ランザクシ ョ ンはメモ リ コン ト ローラーに渡されます。 このメカニズムは属性によるポイズンと呼ばれ、 ト ランザクシ ョ ンは XMPU 自体ではなくエンドポイン トによってゲート制御されます。 DDR の場合、 ユーザーが無効な ト ランザクシ ョ ンの処理方法を選択できます (いずれの方法も実際には許可しない)。 ト ランザクシ ョ ンのポイズン処理には 2 番目の方法 (アドレスによる ) があり ますが、 XMPU では属性によるポイズン処理を推奨します。

任意で XMPU から割り込みを生成するこ とで、 割り込みハンド ラーにエラー対応を含めるこ とができます。 XMPU の詳細は、 『Zynq UltraScale+ MPSoC テクニカル リ ファレンス マニュアル』 (UG1085) [参照 2] の 「システム保護ユニッ ト 」 の章を参照して ください。

1. ザイ リ ンクス機能安全ラウンジは、 機能安全に関する資料と ライブラ リにアクセス可能な有料のリポジ ト リです。 無料のランディン

グ ページは、 japan.xilinx.com/applications/industrial/functional-safety.html です。

Page 10: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離ツール

XAPP1320 (v3.0) 2020 年 4 月 30 日 10japan.xilinx.com

XPPU

XPPU は、 ペリ フェラル、 メ ッセージ バッファー、 プロセッサ間割り込み (IPI)、 通信、 およびクワッ ド SPI フラ ッシュ メモ リ を保護します。 保護対象オブジェク トへの ト ラフ ィ ッ クがすべて通過する 「チ ョーク ポイン ト 」 に実装する と、大の範囲に保護を適用できます。 XPPU は XMPU よ り も細かいアドレス照合を使用するため、 提供するアドレス ア

パーチャの数が多くな り ます。 また、 XMPU では、 属性ではなくアドレスによるポイズン処理の使用は推奨されていない一方で、 XPPU で使用できるのはアドレス ポイズン処理のみです。 アドレス ポイズン処理アプローチは、 図 3 の左側に示されています。 違反アクセスは、 この目的のために予約された特定のメモリ領域に転送されます。 マスター ID リ ストは、 ペリ フェラルへのアクセスが許可されたマスターを定義するために使用します。 20 個のうち 8 個のマスター ID が事前に定義されています。 アパーチャ パーミ ッシ ョ ン リ ス ト (APL) には、 マスターがアクセスできるペリ フェラル アドレスに対するパーミ ッシ ョ ンが指定されています。 パーミ ッシ ョ ンはマスター ID に基づきます。

図 4 に、 XPPU の機能図を示します。

マスター ID リ ス トおよびアパーチャ パーミ ッシ ョ ン リ ス ト 、 パーミ ッシ ョ ン チェッ ク、 エラー処理の詳細は、 『Zynq UltraScale+ MPSoC Processing System LogiCORE IP 製品ガイ ド』 (PG201) [参照 3] または 『Zynq UltraScale+ MPSoC テクニカル リ ファレンス マニュアル』 (UG1085) [参照 2] を参照してください。

X-Ref Target - Figure 4

図 4: XPPU の機能図

APBInterface

AxADDRAxUSERAxPROT

APB

ControlRegisters

Permission RAM

Address Decode

ADDR

IDPermission

CheckMatch

Data

Aperture Info

poison

Master ID Lookup

AXIAxADDRAxUSERAxPROT

AXI

X22786-042519

Page 11: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離ツール

XAPP1320 (v3.0) 2020 年 4 月 30 日 11japan.xilinx.com

メモリ管理ユニッ ト と メモリ保護ユニッ ト

ザイ リ ンクス保護ユニッ ト以外に、Arm Cortex R5 システムと A53 システムには標準的なメモ リ保護 (それぞれメモ リ保護ユニッ ト と メモ リ管理ユニッ ト ) が備わっているため、 各プロセッサ コンプレッ クス内で追加のアクセス制御を提供できます。 こ こでは要点のみを説明するため、 詳細はそれぞれのテクニカル リ ファレンス マニュアルを参照して ください。

Arm Cortex R5 のメモ リ保護ユニッ ト (MPU) では、 0、 12、 または 16 のメモ リ領域を作成できます。 このため、 各領域に個別の保護属性を設定できます。 各領域はベース アドレス とサイズを指定して定義します。 特定のアドレス空間を共有する必要がある場合は、 領域のオーバーラ ップが可能です。 また、 Armv8 アーキテクチャは 2 段階の変換をサポート しているため、 ユーザーの OS とハイパーバイザーが独自の段階で変換を実行できます。

各 Arm Cortex A53 で、 さ らに細かい領域を定義できます。 領域の数を指定するのではなく、 領域の粒度 (4KB または 64KB) を指定します。 アドレス領域ごとに独自の ID (ASID) が割り当てられます。

ザイ リ ンクスのシステム メモ リ管理ユニッ ト (SMMU) は、 プロセッサ コアの MMU 機能を残りの Zynq UltraScale+ MPSoC アーキテクチャに拡張したもので、 6 つの変換バッファー ユニッ ト (TBU) を使用するその他のマスター /DMA 対応デバイスにも適用されます。 使用に関する概略図を図 5 に示します。

X-Ref Target - Figure 5

図 5: SMMU システム ロケーシ ョ ンの例

Cache Coherent Interconnect (CCI)

DDR Memory Subsystem

Cache Coherent Master 1

Cache Coherent Master n

Interconnect

Non-coherent Master 1

Non-coherent Master n

Interconnect

SMMU TBUStage 1

SMMU TBUStages 1

and 2

SMMU TBUStages 1

and 2

MMU Stage 1 and 2

L1 Cache

GPU Masters

MMU Stage 1Cache

Coherent Interconnect

L2 Cache

APU MPCoreCPU 0

CPU 1CPU 2

CPU 3CPUx

X22407-022719

Page 12: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離ツール

XAPP1320 (v3.0) 2020 年 4 月 30 日 12japan.xilinx.com

AXI 分離ブロック

AXI 分離ブロッ ク (AIB) の本来の目的は、 電源切断に備えてマスターをスレーブから分離するこ とですが、 分離を拡張するためにも使用できます。 AXI ブロ ッ クはデバイスの PS 全体に分散しており、 権限のないアクセスが試行された場合、望まし くないアクセスをブロ ッ ク し、 SLVERR 応答を生成するよ うに設定できます。 AIB の制御レジスタは XPPU によって保護できます。

例外レベル

Armv8 アーキテクチャでは 4 つの例外レベル (EL0 ~ EL3) を設定できるため、Arm A53 コンプレッ クス内で追加のアクセス制御を提供できます。 4 つの例外レベルは次のとおりです。

• EL0: も低いソフ ト ウェア実行権限レベルで、 特権なし実行レベルと呼ばれるこ と もあ り ます。 ユーザー アプリケーシ ョ ンは通常このレベルで実行されます。

• EL1: 実際の 「特権」 を持つ 初のレベルで、 オペレーティング システムは通常このレベルで実行されます。 非セキュア ステートに基本サポート を提供します。

• EL2: プロセッサ仮想化サポートが追加された、 よ り高い特権レベルです。 ハイパーバイザーは通常このレベルで実行されます。 プロセッサ仮想化をサポート します。

• EL3: セキュア ステートのサポートが追加された も高い特権レベルです。 セキュア モニター コードはこのレベルで実行されます。 Zynq UltraScale+ MPSoC の場合、 これは Arm ト ラステッ ド ファームウェア (ATF) です。

図 6 は、 この構成 (と TrustZone) を図示したものです。

X-Ref Target - Figure 6

図 6: Armv8 の例外レベルと TrustZone

Non-secure State

App 0

AArch64 orAArch32

App n

AArch64 orAArch32

App 0

AArch64 orAArch32

App n

AArch64 orAArch32

Supervisor (Guest OS1)

AArch64 or AArch32

Supervisor (Guest OS2)

AArch64 or AArch32

Hypervisor Mode

AArch64 or AArch32

EL0

EL1

EL2

SVC

HVC

SMC

Secure Monitor Mode

Supervisor (Secure OS)

AArch64 or AArch32

App 0

AArch64 orAArch32

App n

AArch64 orAArch32

EL3

Secure State

X22408-022719

Page 13: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離ツール

XAPP1320 (v3.0) 2020 年 4 月 30 日 13japan.xilinx.com

プロセッサ間の通信

分離されているシステムを含め、 ほぼすべてのシステムで、 何らかのサブシステム間通信が必要になり ます。 たとえば、APU サブシステムは、 APU および RPU の両サブシステムで、 サーバーとの間でデータを送受信するイーサネッ ト インターフェイスをサポート します。 RPU サブシステムでログ ファ イルを生成して APU サブシステムに送信する と、 イーサネッ ト を使用してログ ファ イルがサーバーに転送されます。 同様に、 サーバーが APU サブシステムのイーサネッ ト を使用して RPU サブシステムにコマンドを送信する と、 サブシステム間通信メカニズムを使用してコマンドが RPU サブシステムに送信されます。

Zynq UltraScale+ MPSoC は、 APU、 RPU、 PMU サブシステム間でのプロセッサ間通信をサポートするため、 IPI バッファーを提供しています。 APU、 RPU、 PMU サブシステム間でのデータ交換には、 32 バイ トの要求および応答バッファーが使用されます。 リ ファレンス デザインで IPI を使用して、 APU および RPU サブシステム間でプロセッサ間通信を使用する具体例を図 7 に示します。 これは IPI を使用する一例にすぎず、 通信は IPI システムのいずれの参加サブシステムからでも開始できます。 IPI の詳細は、 『Zynq UltraScale+ MPSoC テクニカル リ ファレンス マニュアル』 (UG1085) [参照 2] を参照して ください。

このメ ッセージ交換のプロ ト コルでは、 要求側サブシステム (APU) が受信側サブシステム (RPU) への割り込みを ト リガーします。 割り込みを ト リガーするサブシステムは、 IPI チャネルの要求バッファー内にデータを書き込みます。 RPU の割り込み受信マスターは、 要求バッファーの内容を読み出します。 割り込み受信マスターが割り込みを ト リガーしたマスターに応答データを提供する必要がある場合、 応答バッファーを使用します。 応答バッファーは、 ト リガー側のマスター (APU) によって読み出されます。

X-Ref Target - Figure 7

図 7: IPI を使用したプロセッサ間通信

RPU Subsystem

A53 R5-0

APU Subsystem

Response

Request

Response

Request

WriteRead Write

Read

Write

Read

Read

Write

IPI Registers

X22421-030119

Page 14: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離ツール

XAPP1320 (v3.0) 2020 年 4 月 30 日 14japan.xilinx.com

Zynq UltraScale+ MPSoC は、サブシステム間通信用に 11 個の IPI チャネルを提供しています。11 個のうちのチャネル 3 ~ 6 は PMU 専用で、 残りはマスターと して設定可能です。 サブシステム間通信はハードウェアでサポート されており、xipipsu デバイス ド ラ イバーを使用します。 各チャネルが 6 つのレジスタを提供し、 割り込みの ト リガーと ステータスのチェッ クに使用されます。 図 8 に、 Vivado Design Suite でのプロセッサ間割り込みに対するハード ウェア サポート を示します。 このラボの目的上、 デフォルト設定を使用します。

X-Ref Target - Figure 8

図 8: Vivado Design Suite の IPI 通信設定

X19460-030119

Page 15: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離ツール

XAPP1320 (v3.0) 2020 年 4 月 30 日 15japan.xilinx.com

PMU による割り込みの処理

XMPU と XPPU は、 メモ リ またはペリ フェラルのアクセス違反が発生したと きに、 オプシ ョ ンで割り込みを生成します。割り込みが APU GIC、 RPU GIC、 AXI INTC のいずれかに接続されるよ うにシステムを設定する と、 APU、 RPU、 または PMU による割り込みハンド ラーの実装が可能です。

割り込みハンド ラーのエラー対応は、 システム要件で定義されています。 たとえば、 エラー対応と して、 システム電源を切断してシステム再起動のための介入を要求するシステムが考えられます。 また、 可用性が一般的な要件になっているシステムでは、 システム機能はそのまま維持するかもしれません。 その場合、 エラー対応と してエラーを記録し、 計画メンテナンスの可能性をサーバーに通知した上で、 運用を継続するでし ょ う。

図 9 に、 PMU FW のエラー処理コードを示します。 表示されているファイルは xpfw_xpu.c で、 SDK の BSP ツ リーにあり ます。 メ ッセージ (後述) は、 XPfw_Xpu_IntrHandler 関数から出力されます。 このハンド ラーは、 必要なエラー対応を実装するよ うに変更できます。

X-Ref Target - Figure 9

図 9: PMU FW のエラー処理コード

X19463-062617

Page 16: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離ツール

XAPP1320 (v3.0) 2020 年 4 月 30 日 16japan.xilinx.com

フォールト挿入/アプリケーシ ョ ン フォールトのエラー処理

機能安全システムとセキュ リ ティ システムでは、 安全機能やセキュ リティ機能が有効かど うかをテス トせずに機能を追加するこ とはできません。 機能性をテス トする場合は、 正常に実行できれば有効と判断されますが、 セキュ リ ティ または安全関連の機能では、 システムが機能するこ とは何の証明にもな り ません。 これらの機能を確認できるのは、 フォールトが発生した場合のみかもしれないからです。 フォールトの発生を待つのは現実的ではないため、 通常はシステムにフォールト を挿入する必要があ り ます。 このサンプル デザインでは、 違反を試行して分離を証明する必要があ り ます。

複数の分離領域間での分離を検証するため、 フォールト を挿入するためのコードを作成します。 このコードによ り、 TZ で保護された XMPU および XPPU ゲート を介して、 メモ リやペリ フェラルに権限のないアクセスが実行されるため、 このアクセスがブロ ッ ク されてシステムに通知が送信されるこ とを確認します。 PMU コードに別のシンボルを追加して詳細エラー メ ッセージを送信できるよ うにしておき、 アプリ ケーシ ョ ン コードに付加的なエラー処理ルーチンを追加すると、 分離違反が発生してもコードの実行を継続できます。 ただし、 これらのシンボルはオプシ ョ ンであ り、 UART へのエラー メ ッセージ送信でのみ使用されるため、 必須の処理ではなく、 実際には望まし くあ り ません。

権限のない読み出し と書き込みを実行するアプリ ケーシ ョ ンの実行を継続するには、 これに対処するエラー ハンド ラーの構築が不可欠です。 これによ り、 フォールトが発生した場合にも突然終了するのではなく、 アプ リ ケーシ ョ ンの実行を継続できます。 システム ハンド ラーの割り込み方法は、 割り込み処理に対するシステム要件に従って開発者が決定する必要があ り ます。 このサンプルはデモ用のコードであ り、 実際のユーザー コードを配置するプレースホルダーと して使用できます。

APU ド メ インで実行されるサンプル アプリ ケーシ ョ ンは、 同期アボート とエラー アボート という 2 種類の割り込みを生成します。 実際のエラー タイプがどちらになるかは、 対応する ト ランザクシ ョ ン タイプ (読み出しまたは書き込み) によって異なり、 それぞれに固有のハンド ラーが必要になり ます。 エラー タイプは、 対応する ト ランザクシ ョ ン タイプが読み出しであるか、 書き込みであるかによって異なり ます。 エラー タイプが 2 種類必要な理由は Arm アーキテクチャ自体によるもので、 ザイ リ ンクス固有の実装ではあ り ません。 図 10 に、 両方の割り込み用のエラー ハンド ラー コードを示します。 同期アボートの場合、 コードでブール変数を設定して、 メ イン ルーチンにアボートの発生を知らせます。 次に、命令を 1 つ進めて、 ループが問題となる同じステート メン トに戻らないよ うにします。 エラー アボートの場合は、 アボートの発生を記録するだけです。 アプリ ケーシ ョ ンはこのブール変数の値によって、 ステート メン トが 「通過」 したか、 「失敗」 したかを判断します。 図 11 に、 カスタム ハンド ラーを登録するコードを示します。 RPU システムでも同様のハンド ラーが生成されましたが、 生成される割り込みタイプは 1 つのみであるため、 必要なのは同期エラー ハンドラーのみでした。 これらのハンド ラーはデモ用であ り、 実際の使用を想定されているものではあ り ません。 エラーの処理方法は、 対象のシステムの要件に沿って開発者が決定する必要があ り ます。

X-Ref Target - Figure 10

図 10: アプリケーシ ョ ンの割り込みハンドラー

X22388-022819

Page 17: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 17japan.xilinx.com

分離リファレンス デザイン

Zynq UltraScale+ MPSoC でシステムを開発する際の 初の手順は、 アーキテクチャ面での機能定義です。 つま り、 APU、RPU、 PL で実行するタスクを定義します。 ほとんどのシステムで、 サブシステムを分離して干渉なしでタスクを実行可能にする という共通の要件があ り ます。

サブシステム間で何らかの通信が要求されるこ とはよ くあ り ます。 これに対応しながらサブシステム間の分離を維持する一般的な方法と して、 プロセス間割り込み (IPI) と共有メモリの 2 つがあ り ます。 IPI は共通のメ ッセージ バッファーと統合割り込みシステムを使用するのに対し、 共有メモリは 2 つのサブシステム間で共有される メモ リのパーティシ ョ ンを作成します。 IPI の場合、 Zynq UltraScale+ MPSoC アーキテクチャがメ ッセージ通知を処理しますが、 共有メモ リの場合はユーザーが同様の通知アーキテクチャを作成する必要があ り ます。 ユーザー要件によって、 いずれの方法にも メ リ ッ トがあ り ます。

サブシステム間でリ ソースを共有する理由がある場合があ り ます。 わかりやすい例に、 電源投入時にロード されるすべてのサブシステムのブート イ メージが不揮発性メモ リ (NVM) に格納されているデバイス コンフ ィギュレーシ ョ ンがあ り ます。 ほかにも、 DDR コン ト ローラー (DDRC) があ り ます。 AXI DDRC を PL に追加するこ とは可能ですが、 リ ソース使用量が増えるためコス トが増加します。 分離が強化されるのは事実ですが、 追加した DDRC リ ソースの使用による信頼性への効果が不明確になり ます。

ZCU102 や UltraZed-EG などの開発ボードを使用する場合、 各サブシステムが使用する リ ソースが制約を受ける可能性があ り ます。 多重化された I/O (MIO) とデバイス ボード インターフェイスによって、 カスタム ボードでは存在しないリソース制約が課される場合があ り ます。 このリ ファレンス デザインは ZCU102 開発ボードをターゲッ ト と しています。

X-Ref Target - Figure 11

図 11: アプリケーシ ョ ンの割り込みハンドラーの登録

X22389-022719

Page 18: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 18japan.xilinx.com

ソフ トウェア パッチ要件 (2019.1/2019.2)2019.1 および 2019.2 では、 ウォーム リ スタート機能が分離と競合する という問題が報告されています。 PMU はウォーム リ スタート をサポートする目的で FSBL を DDR にコピーしますが、 これによ り 2 つの重大な競合が発生します。

• このリ ファレンス デザインでは、 PMU が OCM を読み出す必要があ り ますが、 PMU には OCM のへアクセス権があり ません。

• FSBL に対する認証または暗号化を使用した場合、 セキュ リ ティ違反が発生します。

° FSBL がチップ外部の DDR に暗号化なしでコピーされます。

° 整合性のために FSBL のハッシュがコピーされますが、 このハッシュが外部の DDR にも格納されます。

詳細は、 AR73475 を参照して ください。 このラボでは次のパッチが必須です。

• 0001-sw_apps-zynqmp_fsbl-Fix-logic-in-writing-FSBL-runnin.patch

• 0002-sw_apps-zynqmp_pmufw-Make-FSBL-copy-as-user-option.patch

インス トール後に、 xpfw_config.h ファ イルを開き、 USE_DDR_FOR_APU_RESTART_VAL の値を (1) から (0) に変更します (図 12 を参照)。 プロジェク ト ごとに変更するこ と も可能ですが、 (デフォルトで有効になっている ) このオプシ ョ ンを無効にしなければ、 ほとんどの分離システムで分離エラーが発生します。 PMU ファームウェア プロジェク ト単位ではなく、 パッチ リ ポジ ト リで無効化するこ とを推奨します。 xpfw_config.h ファ イルは、 <local patch repository>/embeddedsw/lib/sw_apps/zynqmp_pmufw/src にあ り ます。

注記: パッチのインス トールの詳細は、 アンサー レコード 72710 を参照して ください。

X-Ref Target - Figure 12

図 12: 2019.1 パッチでの USE_DDR_FOR_APU_RESTART_VAL オプシ ョ ンの変更

X23827-041320

Page 19: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 19japan.xilinx.com

システムの概要

図 13 に、 3 つのサブシステムで構成される リ ファレンス システムを示します。 このデザインでは、 APU サブシステムが非セキュア システム (緑色) と見なされ、PMU および RPU サブシステムがセキュア システム (赤色) と見なされています。セキュア マスターと共有される非セキュア領域は、 緑色と赤色の両方で表示されています。

このリ ファレンス システムでは、 次のとおりに PS が分割されています。

• DDR は 3 つの領域にわかれています。 APU サブシステムがアドレス 0x0000_0000 ~ 0x01FF_FFFF を専有し、 アドレス 0x6000_0000 ~ 0x600F_FFFF を RPU サブシステムと共有しています。 領域 0x4000_0000 ~ 0x40FF_FFFF は RPU サブシステムが専有しています。

• OCM は 2 つの領域に分割されています。アドレス範囲 0xFFFC_0000 ~ 0xFFFC_0000 は RPU サブシステムが専有し、 残りのアドレス (0xFFFF_0000 ~ 0xFFFF_FFFF) は APU サブシステムと RPU サブシステムが共有しています。

• R5 は R5_0_ATCM 領域全体を占有しています。

• APU サブシステムは TTC0 と SWDT0 を占有していますが、 GPIO は RPU サブシステムと共有し、 UART0 については PMU サブシステムと共有しています。 RPU サブシステムは TTC1、 SWDT1、 I2C1 を占有し、 UART1 を PMU サブシステムと共有しています。

X-Ref Target - Figure 13

図 13: 分離リファレンス デザイン

UART_0

TTC_0

GPIO

SDWT_0

UART_1

TTC_1

SDWT_1

I2C_1

PMU Subsystem

RPU SubsystemAPU Subsystem

OCMDDR

0x0000_0000

0x01FF_FFFF

0x4000_0000

0x40FF_FFFF

0x6000_0000

0x600F_FFFF

0xFFFC_0000

0xFFFF_0000

0xFFFF_FFFF

R5_0 ATCM

0xFFE0_0000

0xFFE0_FFFF

Secure Subsystem

Non-secure Subsystem

Non-secure Subsystem (shared with Secure Subsystem)

CRF_APBCRL_APB

RPUEFUSE

IOU_SLCR

X22375-042120

Page 20: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 20japan.xilinx.com

よ り詳細なアドレス マップを表 1 に示します。

表 1: システム アドレス マップ

APU サブシステム

A53-0 NSW

OCM 0xFFFF_0000 64KB NSW R/W

DDR_LOW 0x0000_0000 32MB NSW R/W

DDR_LOW 0x6000_0000 1MB NSW R/W

UART0 NSW R/W

GPIO NSW R/W

SWDT0 NSW R/W

TTC0 NSW R/W

RPU サブシステム

R5-0 SW

OCM 0xFFFC_0000 192KB SW R/W

OCM 0xFFFF_0000 64KB NSW R/W

DDR_LOW 0x4000_0000 16MB SW R/W

DDR_LOW 0x6000_0000 1MB NSW R/W

R5_0_ATCM_GLOBAL SW R/W

SWDT1 SW R/W

UART1 SW R/W

TTC1 SW R/W

I2C1 SW R/W

GPIO NSW R/W

CRF_APB SW R/W

CRL_APB SW R/W

RPU SW R/W

EFUSE SW R/W

IOU_SLCR SW R/W

PMU サブシステム

PMU SW

UART0 NSW R/W

UART1 SW R/W

CRF_APB SW R/W

DDR_XMPU0_CFG SW R/W

DDR_XMPU1_CFG SW R/W

DDR_XMPU2_CFG SW R/W

DDR_XMPU3_CFG SW R/W

DDR_XMPU4_CFG SW R/W

DDR_XMPU5_CFG SW R/W

FPD_SLCR SW R/W

Page 21: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 21japan.xilinx.com

XMPU および XPPU を使用して分離したセキュア システムと安全システムの場合、 不適切なソフ ト ウェアや攻撃者が設定を変更して意図した分離を無効にするこ とを防ぐため、 この設定を保護するこ とを推奨します。 これには次の方法があり ます。

• psu_protection_lock を呼び出す。

• XMPU/XPPU ロ ッ ク ビッ ト をセッ トする。

• FPD_XMPU 保護を使用する。

ただし、 「XMPU」 で説明した競合が発生するため、 XMPU のロ ッ クは推奨しません。 リ ファレンス デザインで実証されているよ うに、 PMU などのセキュア マスターに XMPU を追加する方が適切です。

ハードウェア プラッ ト フォームの構築

UltraScale+ MPSoC ファ ミ リでの分離の基本はハードウェアにあ り ます。 このため、 分離システムを構築するための 初の手順はハードウェアの設定になり ます。 次に示す手順では、 ハード ウェアをセッ ト アップして 3 つの分離サブシステムを作成し、 XMPU、 XPPU、 TrustZone ハードウェアを使用して各サブシステムを分離します。 初の手順は、 基盤となるベース ハードウェア プラ ッ ト フォームの作成です。

Vivado ツールを起動したら、 Quick Start ページで [Create Project] をク リ ッ ク し、 New Project ウ ィザードを開きます。 次の情報に基づいて、 ウ ィザードの各画面で項目を選択します。

• [Create a New Vivado Project]

選択肢はあ り ません。 [Next] をク リ ッ ク します。

• [Project Name]

[Project name]: ps_isolation_lab

[Project location]: c:/temp/xapp1320_2019.1/ (この後は <your lab location> と示します)

[Create project subdirectory]: オンにします。

• [Project Type]

[Example Project] をオンにします。

• [Select Project Template]

[Base Zynq UltraScale+ MPSoC] を選択します。

• [Default Board or Part]

[Zynq UltraScale+ ZCU102 Evaluation Board] を選択します。

• [New Project Summary]

選択肢はあ り ません。 [Finish] をク リ ッ ク します。

FPD_XMPU_CFG SW R/W

LPD_XPPU SW R/W

CRL_APB SW R/W

EFUSE SW R/W

IOU_SLCR SW R/W

LPD_SLCR SW R/W

OCM_XMPU_CFG SW R/W

RPU SW R/W

表 1: システム アドレス マップ (続き)

Page 22: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 22japan.xilinx.com

図 14 のよ うな画面が表示されます。

ベース ハードウェア プラ ッ ト フォームが生成されたので、 分離を提供するために定義を調節します。

1. [Zynq UltraScale+ IP] (zynq_ultra_ps_e_0 インスタンス) をダブルク リ ッ ク します。

2. 新たに表示されたポップアップ ウ ィンド ウの Page Navigator で、 [Switch To Advanced Mode] をオンにします。

3. Page Navigator で [Isolation Configuration] をク リ ッ ク します。

4. [Isolation Configuration] ページの上部で [Enable Isolation] をオンにします。

X-Ref Target - Figure 14

図 14: 初期の IP インテグレーター図

X22376-022819

Page 23: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 23japan.xilinx.com

Secure Subsystem はセキュア ブート を目的と したベースライン サブシステムで、 作業を開始するための基準と してツールによって作成されたものです。 説明を簡単にするために、 このリ ファレンス デザインでは独自システムを構築しますが、時間を節約するために Secure Subsystem を利用して作業を開始できます。 ただし、 2019.1 と 2019.2 では、 この名前を変更するオプシ ョ ンが提供されていません。 今後のソフ ト ウェア リ リースで名前を変更できるよ うになる可能性があ り ます。

5. Secure Subsystem を削除します。

6. 2 つの分離サブシステム (RPU と APU) を作成します。

a. ボタンをク リ ッ ク し、 RPU という名前の新規サブシステムを追加します。

b. ボタンをク リ ッ ク し、 APU という名前の新規サブシステムを追加します。

完了する と、 ウ ィンド ウは図 15 のよ うにな り ます。

分離サブシステムをカスタマイズする前に、 図 15 に示した 3 つのチェッ ク ボッ クスについて理解するこ とが重要です。これらは分離システムに重大な影響を及ぼします。

[Enable Isolation]

分離を実現するために も重要な機能です。 このリ ファレンス デザインで分離設定を有効にするには、 このチェッ ク ボッ クスをオンにする必要があ り ます。

[Enable Secure Debug]

これによ り、 それぞれの分離サブシステムに特定のコンポーネン トが追加されます。 具体的には、 DAP コンポーネン トと CoreSight コンポーネン トがマスターと して追加されます。 このオプシ ョ ンをオフにする と、 すべてのセキュア サブシステムへの JTAG アクセスが禁止されます。 このリ ファレンス デザインは、 分離およびデバッグを使用するための ト レーニング ガイ ド と しての利用が想定されているため、 このオプシ ョ ンはデフォルトでオンになっています。 ただし、 実際のシステムでは、 デバッグ ロジッ クおよびデバッグ アクセス ポイン トの使用には注意が必要です。 これらのコンポーネン トは、 デザイン内で もセキュアな (信頼できる ) サブシステムの制御下に置く こ とを推奨します。

X-Ref Target - Figure 15

図 15: [Re-customize IP] ウィンドウ: ベースの分離サブシステム

X22377-030119

Page 24: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 24japan.xilinx.com

[Lock Unused Memory]

このオプシ ョ ンをオンにする と、 分離設定によって明示的に定義されていないすべてのメモリ ロケーシ ョ ン (メモ リ とペリ フェラル) の使用が制限されます。 セキュア システムの場合、 このオプシ ョ ンは通常オンにしますが、 必ずしも明示的ではないシステム動作がある場合、 このパラ メーターによ り影響を受ける可能性があ り ます。 たとえば、 ブート後に認証されたイ メージや暗号化イ メージをロードする場合 (パーシャル ビッ ト ファ イル)、 システムには CSU や eFuse、 場合によっては BBRAM レジスタ空間へのアクセスが必要です。 これらが、 このアクシ ョ ンを実行するセキュア サブシステムに明示的に追加されていない場合、 [Lock Unused Memory] オプシ ョ ンをオンにする とアクセスがブロ ッ ク されます。 このリ ファレンス デザインでは、 このオプシ ョ ンの使用をテス ト しておらず、 オフになっている と想定しています。

こ こで、 各分離サブシステムにマスターを追加します。

1. [APU] を右ク リ ッ ク して [Add Master] をク リ ッ ク し、 [APU] を検索/選択します。

2. [RPU] を右ク リ ッ ク して [Add Master] をク リ ッ ク し、 [RPU0] を検索/選択します。

° デフォルトの [Secure] 設定はそのままにします。

各サブシステムにマスターを追加したので、 次に、 APU サブシステムにスレーブ コンポーネン ト を割り当てます。

1. スレーブ ペリ フェラルを APU サブシステムに追加します。

a. [APU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [GPIO] を検索/選択します。 [TZ Settings] の [NonSecure] はそのままにします。

注記: これは RPU サブシステムと共有されます。

b. [APU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [SWDT0] を検索/選択します。 [TZ Settings] の [NonSecure] はそのままにします。

c. [APU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [TTC0] を検索/選択します。 [TZ Settings] の [NonSecure] はそのままにします。

d. [APU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [UART0] を検索/選択します。 [TZ Settings] の [NonSecure] はそのままにします。

2. スレーブ メモ リ を APU サブシステムに追加します。

a. [APU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [OCM] を検索/選択します。

- [Start Address]: 0xFFFF0000

- [Size]: 64KB

- [TZ Settings]: NonSecure

注記: これは RPU サブシステムと共有されます。

b. [APU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [DDR_LOW] を検索/選択します。

- [Start Address]: 0x0

- [Size]: 32MB

- [TZ Settings]: NonSecure

c. [APU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [DDR_LOW] を検索/選択します。

- [Start Address]: 0x60000000

- [Size]: 1MB

- [TZ Settings]: NonSecure

注記: これは RPU サブシステムと共有されます。

Page 25: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 25japan.xilinx.com

APU サブシステムの入力を完了したので、 次に、 スレーブ コンポーネン ト を RPU サブシステムに割り当てます。

注記: このサブシステムの構築中、 初に追加した時点で、 一部のリ ソースが赤色で表示される場合があ り ます。 これは一時的なセキュ リティの競合によるもので、 サブシステムをすべて定義する と解決します。 構築が正し く完了していれば、 競合 (赤色) は表示されません。

1. スレーブ ペリ フェラルを RPU サブシステムに追加します。

a. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [GPIO] を検索/選択します。 [TZ Settings] の [NonSecure] はそのままにします。

注記: これは APU サブシステムと共有されます。

b. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [I2C1] を検索/選択します。 [TZ Settings] の [Secure] を選択します。

c. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [SWDT1] を検索/選択します。 [TZ Settings] の [Secure] を選択します。

d. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [TTC1] を検索/選択します。 [TZ Settings] の [Secure] を選択します。

e. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [UART1] を検索/選択します。 [TZ Settings] の [Secure] を選択します。

2. スレーブ レジスタを RPU サブシステムに追加します (FSBL が RPU で実行されるため必要)。

a. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [CRF_APB] を検索/選択します。 [TZ Settings] の [Secure] を選択します。

b. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [CRL_APB] を検索/選択します。 [TZ Settings] の [Secure] を選択します。

c. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [EFUSE] を検索/選択します。 [TZ Settings] の [Secure] を選択します。

d. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [IOU_SLCR] を検索/選択します。 [TZ Settings] の [Secure] を選択します。

e. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [RPU] を検索/選択します。 [TZ Settings] の [Secure] を選択します。

3. スレーブ メモ リ を RPU サブシステムに追加します。

a. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [OCM] を検索/選択します。

- [Start Address]: 0xFFFC0000

- [Size]: 192KB

- [TZ Settings]: Secure

b. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [OCM] を検索/選択します。

- [Start Address]: 0xFFFF0000

- [Size]: 64KB

- [TZ Settings]: NonSecure

注記: これは APU サブシステムと共有されます。

c. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [DDR_LOW] を検索/選択します。

- [Start Address]: 0x40000000

- [Size]: 16MB

- [TZ Settings]: Secure

d. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [DDR_LOW] を検索/選択します。

- [Start Address]: 0x60000000

- [Size]: 1MB

- [TZ Settings]: NonSecure

Page 26: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 26japan.xilinx.com

e. [RPU] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [R5_0_ATCM_GLOBAL] を検索/選択します。

- [Start Address]: <デフォルト >

- [Size]: <デフォルト >- [TZ Settings]: Secure

この時点で、 APU サブシステムと RPU サブシステムの入力が完了しました。 ただし、 エラー メ ッセージが外部に届く ようにするため、 PMU サブシステムを数か所変更する必要があ り ます。

1. スレーブ ペリ フェラルを PMU ファームウェア サブシステムに追加します。

a. [PMU Firmware] を右ク リ ッ ク して [Add Slaves] をク リ ッ ク し、 [UART0] を検索/選択します。 [TZ Settings] の [NonSecure] はそのままにします。

注記: これは APU サブシステムと共有されます。

b. [PMU Firmware] を右ク リ ッ ク して [Add Slaves] ク リ ッ ク し、 [UART1] を検索/選択します。 [TZ Settings] の [Secure] はそのままにします。

注記: これは RPU サブシステムと共有されます。

2. この時点で、 [Isolation Configuration] ページは図 16 のよ うになり ます。

Page 27: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 27japan.xilinx.com

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

X-Ref Target - Figure 16

図 16: Re-customize IP ウィンドウ: PMU の完了

X22379-022619

Page 28: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 28japan.xilinx.com

Vivado ツールによって、 サンプル デザイン内に AXI IP のアドレス マップが自動的に生成されます。 ただし、 分離制限のためにプラ ッ ト フォームを変更したので、 この IP を リマップする必要があ り ます。

1. [Block Design] ウ ィンド ウの [Address Editor] で、 [axi_bram_ctrl_0] と [axi_gpio_0] の両セグメン ト を同時に選択します。

a. 右ク リ ッ ク して、 [Unmap Segment] をク リ ッ ク します。

2. [Address Editor] で、 [Data] セグメン ト を選択します。

a. 右ク リ ッ ク し、 [Auto Assign Address] をク リ ッ ク します。

注記: PL ペリ フェラルの axi_bram_ctrl_0 と axi_gpi_0 は保護メカニズムをサポート しておらず、 AXI マスターからアクセスできます。

プラ ッ ト フォーム デザインを作成したので、 次に、 デザインをインプリ メン ト して、 SDK に必要なハードウェア ファ イルをすべて生成します。

1. Flow Navigator ウ ィンド ウで、 [Generate Bitstream] をク リ ッ ク し、 [Yes] をク リ ッ ク します。

a. 要求された場合は、 [Save] をク リ ッ ク します。

2. [Launch Runs] ポップアップ ウ ィンド ウで [OK] をク リ ッ ク します。

a. この処理は、 実行するマシンの性能によって数分かかる場合があ り ます。

3. [Bitstream Generation Completed] ポップアップ ウ ィンド ウで [Cancel] をク リ ッ ク します。 インプリ メン ト されたデザインを開く必要はあ り ません。

次に、 新し く作成されたハード ウェア プラ ッ ト フォームをエクスポート して、 SDK を起動します。

1. [File] → [Export] → [Export Hardware] をク リ ッ ク して、 ハード ウェア プラ ッ ト フォームをエクスポート します。

2. [Export Hardware] ポップアップ ウ ィンド ウで [Include bitstream] をオンにし、 [OK] をク リ ッ ク します。

a. デフォルトの [Local to Project] 設定はそのままにします。

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

a. [Exported location] と [Workspace] の両方で、 デフォルトの [Local to Project] をそのままにします。

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

デモ用ソフ トウェアの作成

このセクシ ョ ンでは、 SDK を使用して、 前のセクシ ョ ンで作成した分離システム上で稼働するソフ ト ウェアを作成する方法を説明します。 前述の機能をテス トするため、 5 つのソフ ト ウェア プロジェク ト を作成します。 これらのプロジェクト とその機能を表 2 に示します。

このラボでは複数のプロジェク ト を同時に実行するため、 プロジェク ト ごとにリ ンカー スク リプ ト を手動で変更する必要があ り ます。 変更しない場合、 メモ リ競合が発生します。 ただし、 このラボの目的上、 リ ンカー スク リプ ト と コードをインポート します (FSBL プロジェク ト と PMU プロジェク トはデフォルト設定のままなので対象外)。

表 2: ソフ トウェア プロジェク ト

プロジェク ト 機能

pmu_firmware PMU ファームウェア: イベン ト ハンド ラー

r5_fsbl R5_0 で実行される FSBL

rpu_ipi R5_0 で実行されるプロセッサ間割り込みコード

rpu_fault_injection R5_0 で実行されるフォールト挿入コード

apu_ipi APU_0 で実行されるプロセッサ間割り込みコード

apu_fault_injection APU_0 で実行されるフォールト挿入コード

Page 29: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 29japan.xilinx.com

FSBL プロジェク トの作成

FSBL はブート時に実行され、 PS ソフ ト ウェア プロジェク ト と PL ビッ ト ス ト リーム (存在する場合) をロード します。このセクシ ョ ンでは、 FSBL プロジェク トの作成に必要な手順を説明します。

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

a. [Project name]: r5_fsbl

b. [OS Platform]: <デフォルト >

c. [Hardware Platform]: <デフォルト >d. [Processor]: psu_cortexr5_0

e. [Language]: <デフォルト >

f. [Compiler]: <デフォルト >

g. [Hypervisor Guest]: <デフォルト >

h. [Board Support Package]: <デフォルト >

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

a. [Available Templates]: Zynq MP FSBL

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

PMU プロジェク トの作成

次の理由によ り、 PMU ファームウェア プロジェク ト を含める必要があ り ます。

• すべのて MPSoC プロセッサ システムで、 PMU ファームウェア プロジェク トが必須である。

• XMPU 割り込みの問題があるため、 独立したセキュア マスターが保護ユニッ ト (XMPU および XPPU) を使用することが望ましい。

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

a. [Project name]: pmu_firmware

b. [OS Platform]: <デフォルト >

c. [Hardware Platform]: <デフォルト >d. [Processor]: psu_pmu_0

e. [Language]: <デフォルト >

f. [Compiler]: <デフォルト >

g. [Hypervisor Guest]: <デフォルト >

h. [Board Support Package]: <デフォルト >

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

a. [Available Templates]: ZynqMP PMU Firmware

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

PMU が保護ユニッ ト を所有しており、 システム レベルのプライマ リ エラー ハンド ラーとなるため、 4 つのビルド変数を追加する必要があ り ます。

• ENABLE_EM: PMU のエラー マネージャーを有効にします。

• ENABLE_SCHEDULER: ENABLE_EM を使用するための前提と して必須です ( 『Zynq UltraScale+ MPSoC ソフ ト ウェア開発者向けガイ ド』 (UG1137) [参照 4] の PMU ファームウェアのビルド フラグ表を参照)。

• XPU_INTR_DEBUG_PRINT_ENABLE: 拡張されたデバッグ出力情報。

• XPFW_DEBUG_DETAILED: 拡張されたデバッグ出力情報。

注記: 上記の変数は実際のシステムでは不要です。 これらの目的は、 外部へのメ ッセージ通知と よ り詳細なメ ッセージの追加のみであ り、 実際のシステムでは通常設定されません。

Page 30: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 30japan.xilinx.com

1. SDK の [Project Explorer] で [pmu_firmware] を右ク リ ッ ク し、 [C/C++ Build Settings] をク リ ッ ク します。

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

3. MicroBlaze gcc compiler の下の [Symbols] をク リ ッ ク します。

4. [Defined Symbols] ビューで アイコンをク リ ッ ク します。

a. 「ENABLE_EM」 と入力し、 [OK] をク リ ッ ク します。

5. [Defined Symbols] ビューで アイコンをク リ ッ ク します。

a. ENABLE_SCHEDULER と入力し、 [OK] をク リ ッ ク します。

6. [Defined Symbols] ビューで アイコンをク リ ッ ク します。

a. 「XPU_INTR_DEBUG_PRINT_ENABLE」 と入力し、 [OK] をク リ ッ ク します。

7. [Defined Symbols] ビューで アイコンをク リ ッ ク します。

a. 「XPFW_DEBUG_DETAILED」 と入力し、 [OK] をク リ ッ ク します。

8. SDK の [Project Explorer] で [OK] をク リ ッ ク します。

[Properties for pmu_firmware] ウ ィンド ウは図 17 のよ うになり ます。

X-Ref Target - Figure 17

図 17: PMU のビルド シンボル

X23828-041320

Page 31: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 31japan.xilinx.com

APU プロセッサ間割り込みプロジェク トの作成

分離システムでも、 サブシステム間での通信が必要になる場合があ り ます。 これを安全かつセキュアに実現する方法の 1 つが IPI システムの利用です。 これを実証するために 2 つのプロジェク ト を使用します。 1 つは APU サブシステム内で実行され、 も う 1 つは RPU サブシステム内で実行されます。 このプロジェク トのターゲッ トは APU サブシステムです。

実際のソース コードはラボで提供されるため、 コードをインポートするための空のプロジェク ト を作成します。

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

a. [Project name]: apu_ipi

b. [OS Platform]: <デフォルト >

c. [Hardware Platform]: <デフォルト >d. [Processor]: psu_cortexa53_0

e. [Language]: <デフォルト >

f. [Compiler]: <デフォルト >

g. [Hypervisor Guest]: <デフォルト >

h. [Board Support Package]: <デフォルト >

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

a. [Available Templates]: Empty Application

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

空のプロジェク ト を作成したので、 提供されたコードをインポート します。

1. [Project Explorer] で、 [apu_ipi] を展開し、 [src] を選択します。

2. [src] を右ク リ ッ ク して [Import] をク リ ッ ク します。

3. [Import] ウ ィンド ウで [General] を展開し、 [File System] をク リ ッ ク して [Next] をク リ ッ ク します。

4. [Browse] ボタンを使用して <各自のラボ ロケーシ ョ ン>\software\c\ipiTest\apu に移動し、 [OK] をク リ ッ クします。

5. 左側のペインで [apu] をク リ ッ ク し、 右側のペインに表示されるファ イルがすべて選択されているこ とを確認して、[Finish] をク リ ッ ク します。 ファ イルを上書きするかど うかを尋ねるプロンプ トが表示されたら、 [Yes] をク リ ッ ク します。

RPU プロセッサ間割り込みプロジェク トの作成

分離システムでも、 サブシステム間での通信が必要になる場合があ り ます。 これを安全かつセキュアに実現する方法の 1 つが IPI システムの利用です。 これを実証するために 2 つのプロジェク ト を使用します。 1 つは APU サブシステム内で実行され、 も う 1 つは RPU サブシステム内で実行されます。 このプロジェク トのターゲッ トは RPU サブシステムです。

実際のソース コードはラボで提供されるため、 コードをインポートするための空のプロジェク ト を作成します。

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

a. [Project name]: rpu_ipi

b. [OS Platform]: <デフォルト >

c. [Hardware Platform]: <デフォルト >d. [Processor]: psu_cortexr5_0

e. [Language]: <デフォルト >

f. [Compiler]: <デフォルト >

g. [Hypervisor Guest]: <デフォルト >

h. [Board Support Package]: <デフォルト >

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

a. [Available Templates]: Empty Application

Page 32: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 32japan.xilinx.com

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

空のプロジェク ト を作成したので、 提供されたコードをインポート します。

1. [Project Explorer] で、 [rpu_ipi] を展開し、 [src] を選択します。

2. [src] を右ク リ ッ ク して [Import] をク リ ッ ク します。

3. [Import] ウ ィンド ウで [General] を展開し、 [File System] をク リ ッ ク して [Next] をク リ ッ ク します。

4. [Browse] ボタンを使用して <各自のラボ ロケーシ ョ ン>\software\c\ipiTest\rpu に移動し、 [OK] をク リ ッ クします。

5. 左側のペインで [rpu] をク リ ッ ク し、 右側のペインに表示されるファ イルがすべて選択されているこ とを確認して、[Finish] をク リ ッ ク します。 ファ イルを上書きするかど うかを尋ねるプロンプ トが表示されたら、 [Yes] をク リ ッ ク します。

APU フォールト挿入プロジェク トの作成

アプリ ケーシ ョ ンの安全性やセキュ リティを確保する上で、 分離システムをセッ ト アップして想定どおり動作するこ とを確認するだけでは不十分です。 実行中のソフ ト ウェアを使用した物理的なテス トが必要です。 デバッグ モード (JTAG ブート など) を使用した検証は初期システムの立ち上げには便利ですが、 システムを全面的に検証または認証するには不十分です。 このため、 APU サブシステムから各種メモリおよびペリ フェラルへの読み出し /書き込みで権限が不足している場合にこのアクセスを阻止する機能を実証するためのベース テンプレート と して、 アプリ ケーシ ョ ンが作成されています。 現実のシステムでは、 このテス トの範囲はずっと網羅的なものになる と考えられます。

実際のソース コードはラボで提供されるため、 コードをインポートするための空のプロジェク ト を作成します。

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

a. [Project name]: apu_fault_injection

b. [OS Platform]: <デフォルト >

c. [Hardware Platform]: <デフォルト >d. [Processor]: psu_cortexa53_0

e. [Language]: <デフォルト >

f. [Compiler]: <デフォルト >

g. [Hypervisor Guest]: <デフォルト >

h. [Board Support Package]: <デフォルト >

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

a. [Available Templates]: Empty Application

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

空のプロジェク ト を作成したので、 提供されたコードをインポート します。

1. [Project Explorer] で、 [apu_fault_injection] を展開し、 [src] を選択します。

2. [src] を右ク リ ッ ク して [Import] をク リ ッ ク します。

3. [Import] ウ ィンド ウで [General] を展開し、 [File System] をク リ ッ ク して [Next] をク リ ッ ク します。

4. [Browse] ボタンを使用して <各自のラボ ロケーシ ョ ン>\software\c\faultInjectionTest\apu に移動し、[OK] をク リ ッ ク します。

5. 左側のペインで [apu] をク リ ッ ク し、 右側のペインに表示されるファ イルがすべて選択されているこ とを確認して、[Finish] をク リ ッ ク します。 ファ イルを上書きするかど うかを尋ねるプロンプ トが表示されたら、 [Yes] をク リ ッ ク します。

Page 33: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 33japan.xilinx.com

RPU フォールト挿入プロジェク トの作成

アプリ ケーシ ョ ンの安全性やセキュ リティを確保する上で、 分離システムをセッ ト アップして想定どおり動作するこ とを確認するだけでは不十分です。 実行中のソフ ト ウェアを使用した物理的なテス トが必要です。 デバッグ モード (JTAG ブート など) を使用した検証は初期システムの立ち上げには便利ですが、 システムを全面的に検証または認証するには不十分です。 このため、 RPU サブシステムから各種メモ リおよびペリ フェラルへの読み出し /書き込みで権限が不足している場合にこのアクセスを阻止する機能を実証するためのベース テンプレート と して、 アプリ ケーシ ョ ンが作成されています。 現実のシステムでは、 このテス トの範囲はずっと網羅的なものになる と考えられます。

実際のソース コードはラボで提供されるため、 コードをインポートするための空のプロジェク ト を作成します。

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

a. [Project name]: rpu_fault_injection

b. [OS Platform]: <デフォルト >

c. [Hardware Platform]: <デフォルト >d. [Processor]: psu_cortexr5_0

e. [Language]: <デフォルト >

f. [Compiler]: <デフォルト >

g. [Hypervisor Guest]: <デフォルト >

h. [Board Support Package]: <デフォルト >

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

a. [Available Templates]: Empty Application

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

空のプロジェク ト を作成したので、 提供されたコードをインポート します。

1. [Project Explorer] で、 [rpu_fault_injection] を展開し、 [src] を選択します。

2. [src] を右ク リ ッ ク して [Import] をク リ ッ ク します。

3. [Import] ウ ィンド ウで [General] を展開し、 [File System] をク リ ッ ク して [Next] をク リ ッ ク します。

4. [Browse] ボタンを使用して <各自のラボ ロケーシ ョ ン>\software\c\faultInjectionTest\rpu に移動し、[OK] をク リ ッ ク します。

5. 左側のペインで [rpu] をク リ ッ ク し、 右側のペインに表示されるファ イルがすべて選択されているこ とを確認して、[Finish] をク リ ッ ク します。 ファ イルを上書きするかど うかを尋ねるプロンプ トが表示されたら、 [Yes] をク リ ッ ク します。

Page 34: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 34japan.xilinx.com

アプリケーシ ョ ンの実行

ハードウェア プラ ッ ト フォームと関連ソフ ト ウェア アプリ ケーシ ョ ンの構築が完了したので、 次に、 ブート イ メージを生成してデモ用ソフ ト ウェアを実行します。

注記: プロジェク ト をまだ構築していない場合、 [Project] → [Build All] をク リ ッ ク し、 ビルドが完了してから次の手順に進みます。

プロセッサ間割り込み

IPI 機能をテス トするこのアプリ ケーシ ョ ンは、 2 つのシステム間で干渉を引き起こすこ とな く、 2 つの分離サブシステムが相互通信する方法を実証するために構築されたものです。 このビルドには、 APU プロセッサと RPU プロセッサ上で同時に実行されるソフ ト ウェアが含まれています。 各アプリ ケーシ ョ ンが次の 2 つの重要機能を備えています。

• 一方のサブシステムにメ ッセージを送信する

• 一方のサブシステムから受信したメ ッセージを出力する

このシステムを構築するには、 5 つのパーティシ ョ ンを含む BIF ファ イルを作成する必要があ り ます。

• r5_fsbl: デバイスの分離の設定とその他すべてのパーティシ ョ ンのロード。

• pmu_firmware: エラー ハンド ラーおよびメ ッセンジャー。

• Base_Zynq_MPSoC_wrapper_hw_platform_0 (PL ビッ ト ス ト リーム): このシステムには実際の機能は含まれません。

• apu_ipi: A53_0 で実行されるアプリ ケーシ ョ ンで、 RPU サブシステムとの間でメ ッセージを送受信します。

• rpu_ipi: R5_0 で実行されるアプリ ケーシ ョ ンで、 APU サブシステムとの間でメ ッセージを送受信します。

注記: こ こから先の手順では、 <ビルド パス> = <各自のラボ ロケーシ ョ ン>\xapp1320_2019.1\ps_isolation_lab.sdk と します。

1. [Xilinx] → [Create Boot Image] をク リ ッ ク します。

a. [Architecture]: Zynq MP

b. [Create new BIF file] をオンにします。

c. [Output BIF file path]: <ビルド パス>\output.bif

d. [Output path]: <ビルド パス>\BOOT.bin

e. [Create Image] をク リ ッ クせずに、 次の手順に進みます。

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

a. [File path]: <ビルド パス>\r5_fsbl\Debug\r5_fsbl.elf

b. [Partition type]: bootloader

c. [Destination Device]: PS

d. [Destination CPU]: R5 Single

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

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

a. [File path]: <ビルド パス>\pmu_firmware\Debug\pmu_firmware.elf

b. [Partition type]: datafile

- オプシ ョ ン: pmu の選択も可能です (bootROM によるロード )。c. [Destination Device]: PS

d. [Destination CPU]: PMU

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

Page 35: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 35japan.xilinx.com

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

a. [File path]: <ビルド パス>\Base_Zynq_MPSoC_wrapper_hw_platform_0\Base_Zynq_MPSoC_wrapper.bit

b. [Partition type]: datafile

c. [Destination Device]: PL

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

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

a. [File path]: <ビルド パス>\apu_ipi\Debug\apu_ipi.elf

b. [Partition type]: datafile

c. [Destination Device]: PS

d. [Destination CPU]: A53 0

e. [Exception Level]: EL0

f. [Enable Trust Zone]: オン

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

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

a. [File path]: <ビルド パス>\rpu_ipi\Debug\rpu_ipi.elf

b. [Partition type]: datafile

c. [Destination Device]: PS

d. [Destination CPU]: R5 0

11. [Create Boot Image] ウ ィンド ウは図 18 のよ うにな り ます。

12. [Create Image] をク リ ッ ク します。

X-Ref Target - Figure 18

図 18: IPI システムの BIF の設定

X22381-042220

Page 36: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 36japan.xilinx.com

BOOT.bin ファ イルを作成したので、 開発ボードのブート用に SD カードにコピーします。

1. <ビルド パス>\BOOT.bin を SD カードにコピーします。

2. USB-UART ケーブルをボードの UART ポートに接続し、 このポートにマップされていた COM ポート を確認します。

3. UART0 (APU) および UART1 (RPU) の出力を観察するため、 シ リ アル通信ターミナルを 2 つセッ ト アップします。

a. [Baud rate]: 115200

b. [Data]: 8-bit

c. [Parity]: None

d. [Stop]: 1 bit

4. ブート モードを SD に設定します (図 19 を参照)。a. MODE[3:0] > 1110 > ON-ON-ON-OFF

5. SD カードを挿入します。

6. ボードに電源を投入します。

X-Ref Target - Figure 19

図 19: ZCU102 ボードの設定

3

4

5X22382-022619

Page 37: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 37japan.xilinx.com

図 20 に、 IPI システムの出力を示します。

APU のフォールト挿入

それぞれのデモで、フォールト挿入は APU と RPU の 2 つのシステムに分割されます。 初に構築されるシステムは APU で、 その機能は次のとおりです。

• APU ド メ イン内のメモ リの非セキュア領域の読み出し と書き込み。

• APU ド メ イン外部のメモ リの非セキュア領域の読み出し と書き込み。

• メモ リのセキュア領域の読み出し と書き込み (APU ド メ インの外部)。

• メモ リの未定義領域の読み出し と書き込み。

° このラボでは許可していますが、 未定義領域は必要に応じて除外できます。 除外するには、 分離サブシステムを設定する と きに、 [Isolation Configuration] ページで [Lock Unused Memory] をオンにします。

• APU ド メ イン内の非セキュア ペリ フェラルの読み出し。

° ペリ フェラルに書き込むこ とで望まし くない結果が生じるこ とを避けるため、 書き込みは意図的に省略されています。

• セキュア ペリ フェラルの読み出し (APU ド メ インの外部)。

° ペリ フェラルに書き込むこ とで望まし くない結果が生じるこ とを避けるため、 書き込みは意図的に省略されています。

このシステムを構築するには、 4 つのパーティシ ョ ンを含む BIF ファ イルを作成する必要があ り ます。

• r5_fsbl: デバイスの分離の設定とその他すべてのパーティシ ョ ンのロード。

• pmu_firmware: エラー ハンド ラーおよびメ ッセンジャー。

• Base_Zynq_MPSoC_wrapper_hw_platform_0 (PL ビッ ト ス ト リーム): このシステムには実際の機能は含まれません。

• apu_fault_injection: A53_0 で実行されるアプ リ ケーシ ョ ンで、 システムの各種メモ リおよびペリ フェラルの読み出しと書き込みを実行します。

X-Ref Target - Figure 20

図 20: IPI システムの出力

X23829-041320

Page 38: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 38japan.xilinx.com

FSBL、 PMU、 アプ リ ケーシ ョ ンの間でメ ッセージが競合するこ とを避けるため、 PMU が使用する UART を変更する必要があ り ます。 前述したよ うに、 PMU は UART0 と UART1 の両方を使用できますが、 APU が UART0 に出力する必要があるため、 PMU の UART は UART1 に変更します。

1. [Project Explorer] で [pmu_firmware_bsp] を右ク リ ッ ク し、 [Board Support Package Settings] をク リ ッ ク します。

2. [standalone] を選択します。

3. stdin と stdout の値を psu_uart_1 に変更します。 それぞれのフ ィールドをク リ ッ ク し、 プルダウン メニューから [psu_uart_1] を選択します (図 21 を参照)。

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

次に、 システムを構築します。

注記: こ こから先の手順では、 <ビルド パス> = <各自のラボ ロケーシ ョ ン>\ps_isolation_lab\ps_isolation_lab.sdk と します。

1. [Xilinx] → [Create Boot Image] をク リ ッ ク します。

a. [Architecture]: Zynq MP

b. [Create new BIF file] をオンにします。

c. [Output BIF file path]: <ビルド パス>\output.bif

d. [Output path]: <ビルド パス>\BOOT.bin

e. [Create Image] をク リ ッ クせずに、 次の手順に進みます。

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

a. [File path]: <ビルド パス>\r5_fsbl\Debug\r5_fsbl.elf

b. [Partition type]: bootloader

c. [Destination Device]: PS

d. [Destination CPU]: R5 Single

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

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

a. [File path]: <ビルド パス>\pmu_firmware\Debug\pmu_firmware.elf

b. [Partition type]: datafile

- オプシ ョ ン: pmu の選択も可能です (bootROM によるロード )。c. [Destination Device]: PS

d. [Destination CPU]: PMU

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

X-Ref Target - Figure 21

図 21: [Board Support Package Settings]

X22785-042519

Page 39: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 39japan.xilinx.com

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

a. [File path]: <ビルド パス>\Base_Zynq_MPSoC_wrapper_hw_platform_0\Base_Zynq_MPSoC_wrapper.bit

b. [Partition type]: datafile

c. [Destination Device]: PL

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

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

a. [File path]: <ビルド パス>\apu_fault_injection\Debug\apu_fault_injection.elf

b. [Partition type]: datafile

c. [Destination Device]: PS

d. [Destination CPU]: A53 0

e. [Exception Level]: EL0

f. [Enable Trust Zone]: オン

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

10. [Create Boot Image] ウ ィンド ウは図 22 のよ うにな り ます。

11. [Create Image] をク リ ッ ク します。 作成済みの BIF/BIN ファ イルを上書きするかど うかを尋ねられたら、 [OK] をクリ ッ ク します。

X-Ref Target - Figure 22

図 22: APU フォールト挿入システムの BIF の設定

X22384-042220

Page 40: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 40japan.xilinx.com

BOOT.bin ファ イルを作成したので、 開発ボードのブート用に SD カードにコピーします。

1. <ビルド パス>\BOOT.bin を SD カードにコピーします。

2. UART0 (APU) および UART1 (PMU) の出力を観察するため、 シ リ アル通信ターミナルを 2 つセッ ト アップします。

a. [Baud rate]: 115200

b. [Data]: 8-bit

c. [Parity]: None

d. [Stop]: 1 bit

3. ブートモードを SD に設定します (図 19 を参照)。a. MODE[3:0] > 1110 > ON-ON-ON-OFF

4. SD カードを挿入します。

5. ボードに電源を投入します。

X-Ref Target - Figure 23

図 23: ZCU102 ボードの設定

3

4

5X22382-022619

Page 41: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 41japan.xilinx.com

図 24 に、 APU フォールト挿入システムの出力を示します。

注記: 図 24 に表示された PMU エラー メ ッセージは、 制限されたアドレスへの APU システムによるアクセス試行の 「失敗」 に相当します。

RPU のフォールト挿入

それぞれのデモで、フォールト挿入は APU と RPU の 2 つのシステムに分割されます。 初に構築されたシステムは APU です。 このセクシ ョ ンでは、 次の機能を持つ RPU システムの構築方法を説明します。

• RPU ド メ イン内のメモ リの非セキュア領域の読み出し と書き込み。

• RPU ド メ イン外部のメモ リの非セキュア領域の読み出し と書き込み。

• メモ リのセキュア領域の読み出し と書き込み。

• メモ リの未定義領域の読み出し と書き込み。

° このラボでは許可していますが、 未定義領域は、 必要に応じて分離サブシステムの設定時に除外できます。

• RPU ド メ イン内の非セキュア ペリ フェラルの読み出し。

° むやみにペリ フェラルに書き込むこ とで望まし くない結果が生じるこ とを避けるため、 書き込みは意図的に省略されています。

• セキュア ペリ フェラルの読み出し (RPU ド メ インの外部)。

° むやみにペリ フェラルに書き込むこ とで望まし くない結果が生じるこ とを避けるため、 書き込みは意図的に省略されています。

X-Ref Target - Figure 24

図 24: APU フォールト挿入システムの出力

X23830-041320

Page 42: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 42japan.xilinx.com

このシステムを構築するには、 4 つのパーティシ ョ ンを含む BIF ファ イルを作成する必要があ り ます。

• r5_fsbl: デバイスの分離の設定とその他すべてのパーティシ ョ ンのロード。

• pmu_firmware: エラー ハンド ラーおよびメ ッセンジャー。

• Base_Zynq_MPSoC_wrapper_hw_platform_0 (PL ビッ ト ス ト リーム): このシステムには実際の機能は含まれません。

• rpu_fault_injection: R5_0 で実行されるアプリ ケーシ ョ ンで、 システムの各種メモ リおよびペリ フェラルの読み出しと書き込みを実行します。

FSBL、 PMU、 アプ リ ケーシ ョ ンの間でメ ッセージが競合するこ とを避けるため、 PMU が使用する UART を変更する必要があ り ます。 前述したよ うに、 PMU は UART0 と UART1 の両方を使用できますが、 RPU が UART1 に出力する必要があるので、 PMU の UART は UART0 に変更します。

1. [Project Explorer] で [pmu_firmware_bsp] を右ク リ ッ ク し、 [Board Support Package Settings] をク リ ッ ク します。

2. [standalone] を選択します。

3. stdin と stdout の値を psu_uart_0 に変更します。 それぞれのフ ィールドをク リ ッ ク し、 プルダウン メニューから [psu_uart_0] を選択します。

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

次に、 システムを構築します。

注記: こ こから先の手順では、 <ビルド パス> = <各自のラボ ロケーシ ョ ン>\ps_isolation_lab\ps_isolation_lab.sdk と します。

1. [Xilinx] → [Create Boot Image] をク リ ッ ク します。

a. [Architecture]: Zynq MP

b. [Create new BIF file] をオンにします。

c. [Output BIF file path]: <ビルド パス>\output.bif

d. [Output path]: <ビルド パス>\BOOT.bin

e. [Create Image] をク リ ッ クせずに、 次の手順に進みます。

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

a. [File path]: <ビルド パス>\r5_fsbl\Debug\r5_fsbl.elf

b. [Partition type]: bootloader

c. [Destination Device]: PS

d. [Destination CPU]: R5 Single

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

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

a. [File path]: <ビルド パス>\pmu_firmware\Debug\pmu_firmware.elf

b. [Partition type]: datafile

- オプシ ョ ン: pmu の選択も可能です (bootROM によるロード )。c. [Destination Device]: PS

d. [Destination CPU]: PMU

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

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

a. [File path]: <ビルド パス>\Base_Zynq_MPSoC_wrapper_hw_platform_0\Base_Zynq_MPSoC_wrapper.bit

b. [Partition type]: datafile

c. [Destination Device]: PL

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

Page 43: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 43japan.xilinx.com

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

a. [File path]: <ビルド パス>\rpu_fault_injection\Debug\rpu_fault_injection.elf

b. [Partition type]: datafile

c. [Destination Device]: PS

d. [Destination CPU]: R5 0

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

10. [Create Boot Image] ウ ィンド ウは図 25 のよ うにな り ます。

11. [Create Image] をク リ ッ ク します。 作成済みの BIF/BIN ファ イルを上書きするかど うかを尋ねられたら、 [OK] をクリ ッ ク します。

X-Ref Target - Figure 25

図 25: RPU フォールト挿入システムの BIF の設定

X22386-042220

Page 44: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 44japan.xilinx.com

BOOT.bin ファ イルを作成したので、 開発ボードのブート用に SD カードにコピーします。

1. <ビルド パス>\BOOT.bin を SD カードにコピーします。

2. UART0 (PMU) および UART1 (RPU) の出力を観察するため、 シ リ アル通信ターミナルを 2 つセッ ト アップします。

a. [Baud rate]: 115200

b. [Data]: 8-bit

c. [Parity]: None

d. [Stop]: 1 bit

3. ブートモードを SD に設定します (図 19 を参照)。a. MODE[3:0] > 1110 > ON-ON-ON-OFF

4. SD カードを挿入します。

5. ボードに電源を投入します。

X-Ref Target - Figure 26

図 26: ZCU102 ボードの設定

3

4

5X22382-022619

Page 45: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 45japan.xilinx.com

図 27 に、 RPU フォールト挿入システムの出力を示します。

注記: 図 27 に表示された PMU エラー メ ッセージは、 制限されたアドレスへの RPU システムによるアクセス試行の 「失敗」 に相当します。 「失敗」 メ ッセージは、 アプリ ケーシ ョ ン エラー ハンド ラーの一部です。 PMU メ ッセージは、 組み込みの PMU システム エラー ハンド ラーの一部です。

X-Ref Target - Figure 27

図 27: RPU フォールト挿入システムの出力

X23831-041320

Page 46: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 46japan.xilinx.com

セキュア ブート

こ こまで、 リ ファレンス デザインの焦点は分離にのみ当てられていましたが、 分離を使用するアプリ ケーシ ョ ンの多くで、 デバイスのセキュアなブートが求められます。 このよ うなアプリ ケーシ ョ ンでは、 ブート イ メージを使用する前に、その信頼性を検証する必要があ り ます。 IP の機密性を維持する場合は、 ブート イ メージの暗号化が必要です。

セキュア ブートに関しては専用のアプリ ケーシ ョ ン ノートが提供されているため、 こ こでは詳し く説明しません。 必要な変更はすべて リ ファレンス デザインの ZIP ファ イルに含まれています。 セキュア ブート なしで構築されたものと同じブート イ メージを生成する BIF、 キー、 スク リプ トが含まれており、 次の方法が示されています。

• RSA 4096 と SHA3 を署名に使用した認証の追加。

• AES-256 と Galois/Counter Mode (GCM) を使用した暗号化。

• オペレーシ ョ ン キーの使用 (適切なキー管理手法のため)。

• Physically Unclonable Function (PUF: 物理複製困難関数) を使用した、 ブラ ッ ク (暗号化) 形式でのユーザーの暗号化キーの格納。

次にサンプル BIF ファ イルを示します。

//arch = zynqmp; split = false; format = BIN

boot_image:

{

// Authentication

[pskfile]..\..\..\..\..\keys\psk0.pem

[sskfile]..\..\..\..\..\keys\ssk0.pem

// Encryption

[keysrc_encryption]efuse_blk_key

[bh_key_iv]..\..\..\..\..\keys\black_iv.txt

// FSBL

[fsbl_config]shutter=0x01000005E, opt_key

[bootloader, authentication = rsa, ppk_select = 0, spk_select=spk-efuse, spk_id = 0x00, encryption = aes, aeskeyfile = ..\..\..\..\..\keys\RedAESkey.nky, destination_cpu = r5-0]..\..\..\r5_fsbl\Debug\r5_fsbl.elf

// PMU Firmware

[authentication = rsa, ppk_select = 0, spk_select=user-efuse, spk_id = 0x001, encryption = aes, aeskeyfile = ..\..\..\..\..\keys\pmuFW.nky, destination_cpu = pmu]..\..\..\pmu_firmware\Debug\pmu_firmware.elf

// PL Bitfile

[authentication = rsa, ppk_select = 0, spk_select=user-efuse, spk_id = 0x002, encryption = aes, aeskeyfile = ..\..\..\..\..\keys\pl_bitfile.nky, destination_device = pl]..\..\..\Base_Zynq_MPSoC_wrapper_hw_platform_0\Base_Zynq_MPSoC_wrapper.bit

// R5-0 Application

[authentication = rsa, ppk_select = 0, spk_select=user-efuse, spk_id = 0x003, encryption = aes, aeskeyfile = ..\..\..\..\..\keys\r50_hello.nky, destination_cpu = r5-0]..\..\..\rpu_ipi\Debug\rpu_ipi.elf

// A53-0 Application

[authentication = rsa, ppk_select = 0, spk_select=user-efuse, spk_id = 0x004, encryption = aes, aeskeyfile = ..\..\..\..\..\keys\a530_hello.nky, destination_cpu = a53-0]..\..\..\apu_ipi\Debug\apu_ipi.elf

}

セキュア ブート を追加するためにリ ファレンス デザインを変更する必要はあ り ません。 変更するのは、 終的な BOOT.BIN ファ イルの生成に使用する BIF のみですが、 次の準備が必要になり ます。

• RSA 認証および AES 暗号化用のキー セッ ト (デバイス キーとオペレーシ ョ ン キー )。

• PUF をプロビジ ョ ニングしたデバイス。

• RSA キーをプロビジ ョ ニングしたデバイス。

• AES キーをプロビジ ョニングしたデバイス (BBRAM または EFUSE)。

ベース リ ファレンス デザインとセキュア ブート用の変更に必要なすべてのファイルが含まれるディ レク ト リの情報は、付属の README.TXT ファ イルを参照して ください。

Page 47: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

分離リファレンス デザイン

XAPP1320 (v3.0) 2020 年 4 月 30 日 47japan.xilinx.com

デザイン ファイル

このアプリ ケーシ ョ ン ノートの リ ファレンス デザイン ファ イルは、 ザイ リ ンクスのウェブサイ トからダウンロードできます。

表 3 に、 リ ファレンス デザインの詳細を示します。

表 3: リファレンス デザインの詳細

パラメーター 説明

全般

開発者 Steven McNeil

ターゲッ ト デバイス Zynq UltraScale+ MPSoCs

ソース コードの提供 あ り

ソース コードの形式 C

既存のザイ リ ンクス アプリ ケーシ ョ ン ノート / リ ファレンス デザイン、またはサードパーティからデザインへのコード /IP の使用

なし

コードのスタティ ッ ク解析/MISRA C なし

シミ ュレーシ ョ ン

論理シ ミ ュレーシ ョ ンの実施 N/A

タイ ミ ング シ ミ ュレーシ ョ ンの実施 N/A

論理シ ミ ュレーシ ョ ンおよびタイ ミ ング シ ミ ュレーシ ョ ンでのテス トベンチの利用

N/A

テス トベンチの形式 N/A

使用したシ ミ ュレータ /バージ ョ ン N/A

SPICE/IBIS シ ミ ュレーシ ョ ンの実施 N/A

インプリ メンテーシ ョ ン

使用した合成ツール/バージ ョ ン N/A

使用したインプリ メンテーシ ョ ン ツール/バージ ョ ン N/A

スタティ ッ ク タイ ミ ング解析の実施 N/A

ハードウェア検証

ハードウェア検証の実施 あ り

使用したハード ウェア プラ ッ ト フォーム ZCU102 評価ボード

Page 48: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

まとめ

XAPP1320 (v3.0) 2020 年 4 月 30 日 48japan.xilinx.com

まとめ

Zynq UltraScale+ MPSoC に多数のプロセッサが存在する場合、 設計者は、 任意のプロセッサまたはマスター上で実行されるコードが、 そのマスターのサブシステムに含まれていないメモリ領域やペリ フェラルに対して干渉や破損を引き起こ さないよ うにする必要があ り ます。 このアプリ ケーシ ョ ン ノートでは、 XMPU、 XPPU、 TZ によって提供されるハードウェアおよびソフ ト ウェアのメカニズムを使用して、 サブシステムを分離する方法について説明しています。 この機能は、 小権限、 ハイパーバイザー、 Trusted Execution Environment (TEE) などのその他の分離手法を補完します。

参考資料

注記: 日本語版のバージ ョ ンは、 英語版よ り古い場合があ り ます。

1. 『Zynq UltraScale+ MPSoC レジスタ リ ファレンス』 (UG1087)

2. 『Zynq UltraScale+ MPSoC テクニカル リ ファレンス マニュアル』 (UG1085: 英語版、 日本語版)

3. 『Zynq UltraScale+ MPSoC Processing System LogiCORE IP 製品ガイ ド』 (PG201: 英語版、 日本語版)

4. 『Zynq UltraScale+ MPSoC ソフ ト ウェア開発者向けガイ ド』 (UG1137: 英語版、 日本語版)

5. 『Zynq UltraScale+ デバイスにおけるセキュ リティ重視アプリ ケーシ ョ ンの分離』 (WP516)6. Arm TrustZone

改訂履歴

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

日付 バージョ ン 改訂内容

2017 年 7 月 26 日 1.0 初版

2019 年 6 月 21 日 2.0 新しいソフ ト ウェア バージ ョ ンに合わせた更新とカスタマー フ ィードバッ クによる問題への対応。

2020 年 4 月 30 日 3.0 • 新しいソフ ト ウェア バージ ョ ンに合わせた更新。

• セキュア ブートおよびソフ ト ウェア パッチ セクシ ョ ンの追加。

Page 49: Zynq UltraScale+ MPSoC での 分離手法...Zynq UltraScale+ MPSoC APU は Arm® v8 アーキテクチャであり、4 つの例外レベルをサポートしています。これらの例外レ

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

XAPP1320 (v3.0) 2020 年 4 月 30 日 49japan.xilinx.com

お読みください: 重要な法的通知本通知に基づいて貴殿または貴社 (本通知の被通知者が個人の場合には 「貴殿」、 法人その他の団体の場合には 「貴社」。 以下同じ ) に開

示される情報 (以下 「本情報」 といいます) は、 ザイ リ ンクスの製品を選択および使用するこ とのためにのみ提供されます。 適用される

法律が許容する 大限の範囲で、 (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 のロゴ、 Artix、 ISE、 Kintex、 Spartan、 Virtex、 Vivado、 Zynq、 およびこの文書に含まれる

その他の指定されたブランドは、 米国およびその他各国のザイ リ ンクス社の商標です。 PCI、 PCIe、 および PCI Express は PCI-SIG の商標

であ り、 ライセンスに基づいて使用されています。 AMBA、 AMBA Designer、 Arm、 ARM1176JZ-S、 CoreSight、 Cortex、 PrimeCell、Mali、 および MPCore は、 EU およびその他各国の Arm Limited の商標です。 すべてのその他の商標は、 それぞれの保有者に帰属します。

この資料に関するフ ィードバッ クおよびリ ンクなどの問題につきましては、 [email protected] まで、 または各ページの右下

にある [フ ィードバッ ク送信] ボタンをク リ ッ クする と表示されるフォームからお知らせください。 いただきましたご意見を参考に早急

に対応させていただきます。 なお、 このメール アドレスへのお問い合わせは受け付けており ません。 あらかじめご了承ください。