35
XAPP1078 (v1.0) 2013 2 14 japan.xilinx.com 1 © Copyright 2013 Xilinx, Inc. Xilinx, the Xilinx logo, Artix, ISE, Kintex, Spartan, Virtex, Vivado, Zynq, and other designated brands included herein are trademarks of Xilinx in the United States and other countries. ARM and Cortex are trademarks of ARM in the EU and other countries. All other trademarks are the property of their respective owners. 概要 Zynq™-7000 All Programmable SoC は、 独立 し た ソ フ ト ウ ェ ア ス タ ッ ク または実行フ ァ イルを同時に 実行で き る 2 つの ARM® Cortex™-A9 プロセッサを搭載しています。このアプリケーション ノートで は、両プロセッサを起動して、各々にオペレーティング システムとアプリケーションを実行させると共 に、 共有メ モ リ を介して両者間の通信を可能にする方法について説明し ます。 含まれるシステム デザインは、 Xilinx Platform Studio (XPS) 14.3 によって作成および構築されており、 ザイ リンクスの ソ フ ト ウ ェ ア開発キ ッ ト (SDK) を使用して構築されたソフ ト ウェアを含みます。このアプリ ケーシ ョ ン ノートにはプロジェクト フ ァ イルがすべて付属し、 これら をデザイ ンの検討や再構築に活用した り 、 新 規デザイン着手時のテンプレート として使用したりできます。 Zynq-7000 ZC702 デモ プ ラ ッ ト フ ォーム を タ ーゲ ッ ト と し て事前に構築、 イ ンプ リ メ ン ト さ れた フ ァ イルも用意されているため、ハードウェア、 ソフト ウェア、 またはブート ファイルのターゲッ トを再作 成する手順を省略できます。 はじめに Zynq-7000 AP SoC は、同じメモリおよびペリフェラルを共用する 2 つの Cortex-A9 プロセッサを搭載 しています。非対称型マルチプロセッシング (AMP) とは、両方のプロセッサがそれぞれのオペレーテ ィ ング システムまたはベアメタル アプリケーションを実行できるようにするメカニズムであり、共有リ ソースを介してこれらのアプリケーションを緩やかに結合させることもできます。リファレンス デザイ ンには、両方の Cortex-A9 プロセッサを AMP コンフィギュレーションで動作させるために必要なハー ドウェアとソフトウェアが含まれます。 CPU0 Linux を実行し、 CPU1 はベア メ タル アプ リ ケーシ ョ ンを実行します。 2 つの CPU が共有ハー ド ウ ェ ア リ ソース上で競合しないよ うに対策が講じ られてい ます。 このアプ リ ケーシ ョ ン ノ ー ト では、 ブー ト 可能な ソ リ ューシ ョ ンの作成方法 と 両 CPU のデバ ッ グ方法についても説明します。 デザインの概要 リファレンス デザインでは、2 つの Cortex-A9 プロセッサがそれぞれのソフトウェアを実行するように 構成します。 CPU0 Linux を実行する よ う に構成され、 CPU1 はベア メ タル アプ リ ケーシ ョ ンを実行 するよ うに構成されます。 この AMP の例では、CPU0 上で動作する Linux オペレーティング システムがシステムのマスターとな り、 次を実行します。 システムの初期化 CPU1 起動の制御 CPU1 と の通信 ユーザー と の相互作用 CPU1 上で動作するベア メ タル アプ リ ケーシ ョ ンは、 次を実行し ます。 CPU0 上の Linux によってモニターされる 「ハート ビート」 の管理 CPU0 上の Linux と の通信 プログラマブル ロジック (PL) にあるコアからの割り込みの処理 アプリケーション ノート : Zynq-7000 AP SoC XAPP1078 (v1.0) 2013 2 14 シンプルな AMP : 2 つの Zynq SoC プロセッサ 上で動作する Linux およびベアメ タル システム 著者 : John McDougall

シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 1

© Copyright 2013 Xilinx, Inc. Xilinx, the Xilinx logo, Artix, ISE, Kintex, Spartan, Virtex, Vivado, Zynq, and other designated brands included herein are trademarks of Xilinx in the United States and other countries. ARM and Cortex are trademarks of ARM in the EU and other countries. All other trademarks are the property of their respective owners.

概要 Zynq™-7000 All Programmable SoC は、独立したソフ ト ウェア スタ ッ クまたは実行ファイルを同時に

実行できる 2 つの ARM® Cortex™-A9 プロセッサを搭載しています。このアプリ ケーシ ョ ン ノートで

は、両プロセッサを起動して、各々にオペレーティング システムとアプリ ケーシ ョ ンを実行させる と共

に、 共有メモ リ を介して両者間の通信を可能にする方法について説明します。

含まれるシステム デザインは、 Xilinx Platform Studio (XPS) 14.3 によって作成および構築されており、 ザイ リ ンクスの

ソフ ト ウェア開発キッ ト (SDK) を使用して構築されたソフ ト ウェアを含みます。このアプリ ケーシ ョ ン

ノートにはプロジェク ト ファ イルがすべて付属し、 これらをデザインの検討や再構築に活用したり、新

規デザイン着手時のテンプレート と して使用したりできます。

Zynq-7000 ZC702 デモ プラ ッ ト フォームをターゲッ ト と して事前に構築、 インプ リ メン ト されたファ

イルも用意されているため、 ハード ウェア、 ソフ ト ウェア、 またはブート ファ イルのターゲッ ト を再作

成する手順を省略できます。

はじめに Zynq-7000 AP SoC は、同じ メモ リおよびペリ フェラルを共用する 2 つの Cortex-A9 プロセッサを搭載

しています。非対称型マルチプロセッシング (AMP) とは、両方のプロセッサがそれぞれのオペレーティ

ング システムまたはベアメ タル アプ リ ケーシ ョ ンを実行できるよ うにする メカニズムであ り、 共有リ

ソースを介してこれらのアプリ ケーシ ョ ンを緩やかに結合させるこ と もできます。 リ ファレンス デザイ

ンには、両方の Cortex-A9 プロセッサを AMP コンフ ィギュレーシ ョ ンで動作させるために必要なハー

ドウェアと ソフ ト ウェアが含まれます。CPU0 は Linux を実行し、CPU1 はベアメ タル アプリ ケーシ ョ

ンを実行します。 2 つの CPU が共有ハード ウェア リ ソース上で競合しないよ うに対策が講じられてい

ます。 このアプリ ケーシ ョ ン ノートでは、 ブート可能なソ リ ューシ ョ ンの作成方法と両 CPU のデバッ

グ方法についても説明します。

デザインの概要 リ ファレンス デザインでは、2 つの Cortex-A9 プロセッサがそれぞれのソフ ト ウェアを実行するよ うに

構成します。CPU0 は Linux を実行するよ うに構成され、CPU1 はベアメ タル アプリ ケーシ ョ ンを実行

するよ うに構成されます。

この AMP の例では、CPU0 上で動作する Linux オペレーティング システムがシステムのマスターとな

り、 次を実行します。

• システムの初期化

• CPU1 起動の制御

• CPU1 との通信

• ユーザーとの相互作用

CPU1 上で動作するベアメ タル アプリ ケーシ ョ ンは、 次を実行します。

• CPU0 上の Linux によってモニターされる 「ハート ビート 」 の管理

• CPU0 上の Linux との通信

• プログラマブル ロジッ ク (PL) にあるコアからの割り込みの処理

アプリケーシ ョ ン ノート : Zynq-7000 AP SoC

XAPP1078 (v1.0) 2013 年 2 月 14 日

シンプルな AMP : 2 つの Zynq SoC プロセッサ上で動作する Linux およびベアメ タル システム著者 : John McDougall

Page 2: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

デザインの概要

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 2

• CPU0 上で動作する Linux への割り込みイベン トの通知

Zynq SoC プロセッシング システム (PS) には、各 CPU 専用のリ ソース と両 CPU 間で共有される リ ソー

スがあ り ます。デザインを AMP コンフ ィギュレーシ ョ ンで動作させる場合、 2 つの CPU が共有リ ソー

ス上で競合しないよ うに注意する必要があ り ます。 共有リ ソースと専用リ ソースの詳細は、 『Zynq-7000All Programmable SoC テクニカル リ ファレンス マニュアル』 [参照 1] を参照してください。

専用リ ソースの例には、 次のものがあ り ます。

• L1 キャ ッシュ

• プライベート ペリ フェラル割り込み (PPI)

• メモ リ管理ユニッ ト (MMU)

• プライベート タイマー

共有リ ソースの例には、 次のものがあ り ます。

• 割り込み制御ディ ス ト リ ビューター (ICD)

• DDR メモ リ

• オンチップ メモ リ (OCM)

• グローバル タイマー

• スヌープ制御ユニッ ト (SCU) および L2 キャ ッシュ

この例では、 CPU0 をマスターと して扱い、 これが共有リ ソースを制御します。 CPU1 によって共有リ

ソースを制御する必要が生じた場合も、 その要求を CPU0 に通知し、 CPU0 にリ ソースを制御させる必

要があ り ます。 リ ファレンス デザインの複雑性を最小限に抑えるために、 CPU1 上で動作するベアメ タ

ル アプリ ケーシ ョ ンを変更して、 共有リ ソースへのアクセスを制限しています。

両プロセッサ間の相互通信には OCM を使用します。 OCM は DDR メモ リに比べて非常に高性能であ

り、 2 つのプロセッサから低レイテンシでアクセスできます。 両方のプロセッサから OCM へのキャッ

シュ アクセスを無効にするこ とで、 よ り確実に確定的なアクセスを保証できます。

共有リ ソースに関する問題を防ぐために、 次のよ うな対策を講じています。

1. DDR メモ リ : Linux が認識できる メモ リ範囲を 0x00000000 ~ 0x2FFFFFFF に限り ます。 CPU1は、ベアメ タル アプリ ケーシ ョ ンの実行に 0x30000000 ~ 0x3FFFFFFF のメモリ範囲を使用しま

す。

2. L2 キャ ッシュ : CPU1 は L2 キャ ッシュを使用しません。

3. ICD : PL 内のコアからの割り込みは、 CPU1 の PPI コン ト ローラーに転送されます。 PPI を使用す

るこ とで、 CPU1 は ICD へのアクセスを要求せずに、 割り込みを自由に処理できます。

4. タイマー : CPU1 は、 ハート ビートに専用のタイマーを使用します。

5. OCM : OCM へのアクセスは、 競合が起らないよ うに各 CPU が非常に注意深く処理します。 ハー

ト ビート については、 CPU1 のみが位置を書き込み、 CPU0 がそれを読み出します。 CPU1 から

CPU0 にデータを送信する際は、 CPU1 のみがデータ値を書き込み、 OCM の異なるアドレス位置

をセッ トするこ とによってフラグを送信します。 CPU0 はフラグを検出する と、 データを読み出し

てこのフラグをク リ アします。 フラグをセッ トできるのは CPU1 のみ、 フラグをク リ アできるのは

CPU0 のみです。

デモの目的でのみ、 このサンプル デザインに含まれるカスタム エンベデッ ド コアを使用して簡単な割

り込み要因を作成できます。 このコアに ChipScope™ Analyzer Virtual Input/Output (VIO) コアの出力

を接続すれば、 ユーザーは PS に対する割り込みをいつでも生成可能です。 また、 ChipScope AnalyzerVIO コアを使用する と、割り込みがいつ発生するかをよ り正確に制御できるため、割り込みレイテンシ

の測定が容易になり ます。 ただし、 このコアはデザインでは現実的には使用されません。 実用的な割り

込みは、ダイレク ト メモ リ アクセス (DMA) エンジンなど PL 内で実際に機能を果たすロジッ クから生

成されます。

Page 3: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

デザインの概要

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 3

ハードウェア

PL には、 ChipScope Analyzer VIO コアの同期出力に接続されたカスタム エンベデッ ド コアが含まれ

ます (図 1)。 VIO コアは、 ユーザーが ChipScope Analyzer からハード ウェアを制御する メカニズムを

提供します。

このデザインでは、VIO がパルスを生成する と、カスタム コアは割り込みを PS の Core1_nIRQ ピンに

転送します。カスタム コアは AXI インターコネク ト を介して PS のマスター汎用ポート (M_AXI_GP0)にも接続されるため、 CPU0 と CPU1 の両方がコア内の制御レジスタにアクセスできます。 CPU1 は割

り込みサービス ルーチン内で割り込み要求 (IRQ) をク リ アするために制御レジスタにアクセスします。

CPU0 はオプシ ョ ン と して、 この制御レジスタを使用して CPU1 に対する割り込みを作成できます。

Core1_nIRQ ピンは CPU1 の PPI ブロ ッ クに直接接続されるため、 共有 ICD のコンフ ィギュレーシ ョ

ンを変更する必要はあ り ません。デザインには ChipScope Analyzer の AXI モニター コアも含まれてい

るため、 ユーザーは処理中の IRQ のレイテンシを測定できます。

アドレス マップ

PL には、 制御レジスタを 1 つ備えた irq_gen エンベデッ ド コアが 1 つあ り ます。 レジスタの位置は、

BASE + 0 (0x78600000) です。 表 1 に IRQ_GEN 制御レジスタの説明を示します。

X-Ref Target - Figure 1

図 1 : PL のブロック図

表 1 : IRQ_GEN 制御レジスタ

ビッ ト アクセス 説明

[31:1] R/W 未使用。 書き込まれた値を読み出し可能です。

[0] R/W

IRQ のアサート

• 0 : PS に対して IRQ はアサート されていません。

• 1 : PS に対して IRQ がアサート されています。 VIO によっ

て VIO_IRQ_TICK ピンがアサート される と、 このビッ トが

セッ ト されます。 CPU によってセッ ト されるこ と もあ り ま

す。 このビッ トへの書き込みでビッ ト をク リ アできるのは CPU のみです。

ILA

VIO

AXI Interconnect

Core1_nIRQ

PS

M_AXI_GP0

Irq_genpcore

X1078_01_011513

Page 4: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

デザインの概要

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 4

ソフ トウェア

ソフ ト ウェアは、 次の 3 つの部分に分割できます。

• ファース ト ステージ ブート ローダー (FSBL)

• CPU0 の Linux オペレーティング システムとアプリ ケーシ ョ ン

• CPU1 のベアメ タル オペレーティング システムとアプリ ケーシ ョ ン

FSBL

FSBL は常に CPU0 上で動作します。 これは、 PS のパワーオン リセッ ト後に最初に実行されるソフ ト

ウェア アプリ ケーシ ョ ンです。 FSBL は PL をプログラムし、 両アプリ ケーシ ョ ンの ELF (Executableand Linkable Format) ファ イルを DDR メモ リにコピーします。アプリ ケーシ ョ ンを DDR メモ リにロー

ド後、 FSBL は最初にロード されたアプリ ケーシ ョ ンの実行を開始します。

ISE® Design Suite 14.3 に含まれる FSBL は、 複数のデータ ファ イルまたは ELF ファ イルをサポート

していません。 FSBL は、 まず BIT ファ イルを探します。 BIT ファ イルが見つかった場合は PL に書き

込みます。次に、BIT ファ イルが見つかったかど うかにかかわらず、 FSBL はアプリ ケーシ ョ ン ELF を1 つメモ リにロード し、 実行します。 この動作シーケンスは AMP コンフ ィギュレーシ ョ ンをサポート

していないため、 FSBL を変更する必要があ り ます。

この AMP のサンプル プロジェク ト ファ イルの FSBL は、 ロード先のアドレスが 0xFFFFFFF0 のファ

イルを検出するまでファイル検索と メモ リへのロードを継続するよ うに変更が加えられています。 ファ

イルを検出する と、 FSBL はこの最後のファイルをダウンロード した うえで、 最初に見つかった非 BITファ イルまたは非ブート ファ イル (これは CPU0 用アプリ ケーシ ョ ン) の実行可能なアドレスにジャン

プします。 CPU1 起動の詳細は、 『Zynq-7000 All Programmable SoC テクニカル リ ファレンス マニュ

アル』 [参照 1] を参照して ください。

Linux

AMP で Linux を使用する最も簡単な方法は、Linux を対称型マルチプロセッシング (SMP) と して構成

し、利用可能な CPU の数を 1 に制限するこ とです。 これによ り、Linux はマルチ CPU 環境向けに ICDおよび SCU を正し く構成します。

Linux カーネル、 U-Boot、 デバイス ツ リー、 およびルート ファ イル システム ramdisk の作成について

は、 Wiki ページ http://wiki.xilinx.com を参照して ください。 生成されたすべてのファ イルは、 このア

プリ ケーシ ョ ン ノートに付属のプロジェク ト ファ イルの一部と して使用できます。

SMP で CPU を 1 つだけ使用するよ うに Linux に指示するには、 デバイス ツ リー内の bootargs を変更

し、 maxcpus=1 を追加します。デフォルトでは、 Linux の .config は、 ZC702 デモ ボード上で SMPを使用するよ うに既にセッ ト アップされています。

また、 デバイス ツ リーは、 CPU1 のアプリ ケーシ ョ ン用に未使用のメモ リ空間を確保するため、 Linuxが利用できる メモ リ容量を縮小するよ うに変更されています。

Linux アプリケーシ ョ ン

ベアメ タル アプリ ケーシ ョ ンを実行している CPU1 との通信用に、CPU0 上で実行される 2 つの Linuxアプリ ケーシ ョ ンが用意されています。 第 1 のアプリ ケーシ ョ ン (rwmem) は、 Linux から OCM への

シンプルなメモ リ読み出し /書き込みアクセスを提供します。 この rwmem アプ リ ケーシ ョ ンを使用し

て、 OCM 内のアドレスの peek と poke (読み出し と書き込み) を実行できます。 特定のアドレス位置が

変更される と、 CPU1 がこれを検出して特定の方法で応答します。 第 2 のアプリ ケーシ ョ ン (softUart)は、事前に定義された OCM 内のメモリ位置を介して、CPU0 上で動作する Linux と CPU1 上で動作す

るベアメ タル間に UART 形式の通信機能を提供します。

PS に電源が投入され、 内部ブート ROM の実行が完了する と、 CPU1 は OCM の 0xFFFFFE00 にある

短いコードにリダイレク ト されます。 このコードはイベン ト を待機する継続的なループで、 アドレス位

置 0xFFFFFFF0 に 0 以外の値が格納されていないかを確認してループを続行します。 0xFFFFFFF0 に0 以外の値がある と、 CPU1 はフェッチされたアドレスにジャンプします。

Page 5: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

デザインの概要

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 5

Linux を実行している CPU0 は、付属の rwmem アプリ ケーシ ョ ンを使用してアドレス 0xFFFFFFF0 に値 0x30000000 を書き込むこ とによ り、ベアメ タルを実行している CPU1 を起動します。通常は、CPU0は set event (SEV) コマンドを実行して CPU1 をウェークアップする必要があり ます。CPU0 上で動作し

ている Linux は、 常に割り込み (イベン トのも う 1 つのソース) を処理しているため、 SEV コマンドは

不要です。 CPU1 がウ ェーク ア ッ プする と、 rwmem コマン ド を使用し て書き込まれたア ド レ ス

0xFFFFFFF0 から値 0x30000000 を読み出し、 ア ド レス 0x30000000 にジャンプします。 CPU1 のELF は、 FSBL によって 0x30000000 に置かれたこ とに注意してください。

デザイン ファ イルに含まれている softUart アプリ ケーシ ョ ンは、 Linux でバッ クグラウンド タスク と

して実行されます。 softUart は、 実行中に共有 OCM のメモリ位置 0xFFFF9000 (COMM_TX_FLAG_OFFSET) および 0xFFFF9004 (COMM_TX_DATA_OFFSET) を継続的にモニ

ターします。 COMM_TX_FLAG_OFFSET に 1 が現れるごとに、 softUart は COMM_TX_DATA_OFFSET の値を読み出し、 その値を文字列の配列に一時的に格納します。 0x0A の値 (\n) を受信する と、 文字列の配列が STDOUT に示されます。 softUart は、

COMM_TX_DATA_OFFSET から値を読み出すたびに、 COMM_TX_FLAG_OFFSET の内容をク リ

アします。 このク リ アによって、Linux 上の softUart アプリ ケーシ ョ ンに別の文字を送信できるこ とが CPU1 に通知されます。

ベアメ タル アプリケーシ ョ ンのコード

リ ファレンス デザインでは、 CPU1 がベアメ タル アプリ ケーシ ョ ン コードを実行します。 CPU0 上で

動作する Linux が共有リ ソースを初期化し、 CPU1 を起動します。

EDK 14.3 インス トールの一部である standalone_v3_07_a とい う名前のベア メ タル ボード サポー ト

パッケージ (BSP) は、プリプロセッサの定義済み定数 USE_AMP をサポート します。この定数は、CPU0によって既に初期化されている PS SCU が BSP によって再度初期化される こ と を防ぎます。 定数

USE_AMP の使用に伴う注意点の 1 つと して、 メモ リのエイ リ アスを作成するための MMU のマッピ

ング調整があ り ます。 この調整によ り、 ア ド レス 0x20000000 に位置する物理メモ リ は、 仮想的に

0x00000000 にマッピングされます。 この再マッピングは、 BSP ブート ファ イル boot.S 内で実行さ

れます。このデザインでは、再マッピングの必要はあ り ません。リ ファレンス デザインには、USE_AMPが設定された場合に再マッピングを削除する、 BSP の改訂バージ ョ ンが含まれています。

この AMP リ ファレンス デザインでは、 ベアメ タル アプリ ケーシ ョ ンは Zynq UART を使用しません。

代わりに、CPU1 上で動作するアプリ ケーシ ョ ンには独自の outbyte() 関数が含まれており、CPU0 上の

Linux アプリ ケーシ ョ ンで動作するソフ ト ウェア UART との OCM を介した通信には、この関数が使用

されます。 outbyte() 関数を追加するこ とで、 スタンドアロン BSP のすべての stdout 機能は維持され、

xil_printf() などの関数が使用可能にになり ます。

共有リ ソースの競合を防ぐため、 CPU1 上で動作するベア メ タル アプ リ ケーシ ョ ンが SCU などの リ

ソースにアクセスしないよ うに注意する必要があ り ます。Linux は OCM へのキャッシュ アクセスを無

効にしますが、 デフォル ト のスタン ドアロン BSP は OCM のキャ ッシュを有効にしよ う とするため、

Linux と競合します。 AMP コンフ ィギュレーシ ョ ンでは、 CPU1 の main() アプリ ケーシ ョ ン関数内で

関数 XIL_SetTlbAttributes() を使用して、 OCM のキャッシュを無効にします。 付属のソース コードで

は、 この XIL_SetTlbAttributes() 関数が L1 キャ ッシュのみをフラ ッシュし、 L2 キャ ッシュをそのまま

残すよ うに変更されていますが、 これは L2 キャ ッシュが制御される SCU へのアクセスを防ぐためで

す。

CPU1 上で実行されるベアメ タル コードが L2 キャ ッシュを制御する必要が生じた場合は、 ベアメ タル

コードが Linux に対して必要な SCU の変更を要求できるよ うに、 通信チャネルが作成される必要があ

り ます。 これはサンプル デザインの範囲と要件を超えているため、ベアメ タル コードから SCU へは直

接アクセスできないよ うに変更が加えられています。

CPU1 用アプリケーシ ョ ン

CPU1 用のアプ リ ケーシ ョ ンは、 アドレス 0x30000000 から始まる メモ リ位置に配置されます。 開始

アドレスの設定にはリ ンカー スク リプ ト を使用します。

Page 6: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

リファレンス デザイン

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 6

CPU1 用のアプリ ケーシ ョ ンは、 次を実行します。

1. アドレス範囲 0xFFFF0000 ~ 0xFFFFFFFF の OCM アクセスに対してはキャ ッシュが無効になる

よ うに MMU を設定します。 OCM のアドレス マップは変更しません。 したがって、 OCM の位置

はアドレス 0x00000000 ~ 0x0002FFFF および 0xFFFF0000 ~ 0xFFFFFFFF になり ます。デザ

インは OCM の上位 64KB のみを使用するため、アドレス 0xFFFF0000 ~ 0xFFFFFFFF に対して

キャ ッシュを無効にします。

2. PPI 割り込みコン ト ローラーおよび割り込みサブシステムを初期化します。

3. OCM の位置 (COMM_VAL) をインク リ メン ト します。この OCM 位置はハート ビート と呼ばれま

す。

4. 1 秒間ス リープします。

5. CPU1 の main() 関数が、 手順 3 と手順 4 を続けて繰り返します。

6. 割り込みが検出される と、バッ クグラウンドの割り込みサービス ルーチンによってエンベデッ ド コアの割り込みステータスがク リ アされ、文字列が出力されます。print 文からの出力はリダイレク ト

され、 OCM の COMM_TX_FLAG_OFFSET および COMM_TX_DATA_OFFSET の位置が使用

されます。 Linux は OCM データを参照し、 Linux コンソールに文字列を出力します。

リファレンス デザイン

リ ファレンス デザイン ファ イルは、 次のサイ トからダウンロードできます。

https://secure.xilinx.com/webreg/clickthrough.do?cid=202155

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

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

パラメーター 説明

全般

開発者 John McDougall

ターゲッ ト デバイス (ステッピング レベル、ES、プロダ

クシ ョ ン、 スピード グレード )XC7Z020-CLG484-1

ソース コードの提供 あ り

ソース コードの形式 VHDL および Verilog

既存のザイ リ ンクス アプリ ケーシ ョ ン ノート / リ ファレ

ンス デザイン、 CORE Generator ツール、 サードパー

ティからデザインへのコード /IP の使用

なし

シミ ュレーシ ョ ン

論理シ ミ ュレーシ ョ ンの実施 なし

タイ ミ ング シ ミ ュレーシ ョ ンの実施 なし

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

ンチの利用

なし

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

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

SPICE/IBIS シ ミ ュレーシ ョ ンの実施 なし

インプリ メンテーシ ョ ン

使用した合成ツール/バージ ョ ン XST 14.3

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

スタティ ッ ク タイ ミ ング解析の実施 あ り

Page 7: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 7

リ ファレンス デザインには、 次のファイルが含まれています。

• XPS プロジェク ト

• Linux および CPU1 用アプリ ケーシ ョ ンの SDK ソース ファ イル

• 生成済みファイル

• BIT ファ イル

• SD カード用の全ファイル

• Linux および CPU1 用アプリ ケーシ ョ ンの ELF ファ イル

• BOOT.BIN ビルド スク リプ ト

• 変更済みのベアメ タル BSP

• 変更済みの sw_apps FSBL

• 変更済みの devicetree.dts および devicetree.dtb

表 3 と表 4 にデバイス使用率の詳細を示します。

インプリ メンテーシ ョ ンの説明

こ こでは、 リ ファレンス デザインのインプ リ メンテーシ ョ ンについて説明します。

デザイン ファ イルは design とい うディ レク ト リに解凍します。 ファ イルの解凍後、 design\work とい う名前の新規ディ レク ト リ を作成します。 ファ イルは、 次のよ うにコピーします。

design\src\bootgen から design\work\bootgen

design\src\edk_system から design\work\edk_system

リ フ ァ レ ン ス デザイ ンには生成済みのフ ァ イルもすべて付属し てお り、 それらはデ ィ レ ク ト リ

design\generated_files に格納されています。

ハードウェア検証

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

検証に使用したハード ウェア プラ ッ ト フォーム ZC702 ボード

表 3 : デバイス使用率 (1)

パラメーター 仕様/詳細

デバイス使用率 (テス トベンチなし ) スライス数 246

GCLK バッファー数 2

PS7 1

RAMB36 1

HDL 言語のサポート Verilog/VHDL

表 4 : デバイス使用率 (2)

デバイススピード グレード

パッケージ マップ前 (合成制約) 配線後 スライス数

XC7Z020 -1 CLG484 240MHz 160MHz 246 (1%)

表 2 : リファレンス デザインの詳細 (続き)

パラメーター 説明

Page 8: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 8

ハードウェアの生成

このセクシ ョ ンでは、 ハード ウェア デザインの作成について説明します。 このセクシ ョ ンを省略して、

「アプ リ ケーシ ョ ンの生成」 に進むこ と もできます。 コンパイル済みのデザインは、

design\generated_files\fpga\download.bit にあ り ます。

エンベデッ ド デザインをインプ リ メン ト して SDK にエクスポートするには、 次の手順に従います。

1. XPS を起動して、 次の場所にあるエンベデッ ド プロジェク ト を開きます。

design\work\edk_system\system.xmp

2. [device_configuration] → [update_bitstream] をク リ ッ ク します。 完了する と、 次の場所にダウン

ロード可能な FPGA BIT ファ イルが生成されます。

design\work\edk_system\implementation\download.bit

次の場所にはコンパイル済みの BIT ファ イルがあ り ます。

design\generated_files\fpga\download.bit

3. [Project] → [export_hardware_design_to_SDK] をク リ ッ ク して、 ハードウェア プロジェク ト を

SDK にエクスポート します。[Export & Launch SDK] をオンにします。こ こで、XPS は system.xmlファイルを使用してエンベデッ ド システムのコンフ ィギュレーシ ョ ンをエクスポート します。SDKは、 このファイルによってデザインに含まれるペリ フェラルとベース アドレスを把握します。 この

ファイルは、ディ レク ト リ design\work\edk_system\SDK\SDK_Export\hw に自動的にエクス

ポート されます。 SDK でワークスペースの場所を尋ねるダイアログ ボッ クスが表示されます。 参

照ボタンをク リ ッ ク して、 ディ レ ク ト リ design\work\edk_system\SDK を選択し、 [OK] をク

リ ッ ク します。 2 度目に [OK] をク リ ッ クする前に、 選択したディ レク ト リの最後に \Workspaceを追加します (図 2)。 SDK によって Workspace サブディレク ト リが自動的に作成されます。

アプリケーシ ョ ンの生成

SDK の設定

このデザインには、 スタンドアロン BSP ファ イル (ベアメ タル アプリ ケーシ ョ ンが使用) と変更済みの

FSBL ファ イルが含まれています。SDK でこれらのファイルの情報を使用するには、新しいリポジ ト リ

を認識するよ うに SDK を設定する必要があ り ます。

1. SDK を起動し、 ワークスペースの design\work\edk_system\SDK\Workspace を開きます。

[Export & Launch SDK] をオンにして XPS を使用した場合は、 この手順は不要です。

2. 変更済みスタンドアロン BSP および変更済み FSBL を含む付属のリポジ ト リ を SDK が参照でき

るよ うにします (図 3)。

X-Ref Target - Figure 2

図 2 : ワークスペース ディレク ト リの選択

X1078_02_011713

Page 9: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 9

• [Xilinx_tools] → [Repositories] をク リ ッ ク します。

a. [Local Repositories] の横にある [New] をク リ ッ ク します。

• 参照ボタンをク リ ッ ク し、 ディ レク ト リ design\src\sdk_repo を選択します。

• [OK] をク リ ッ ク します。

X-Ref Target - Figure 3

図 3 : リポジト リの選択

X1078_03_011713

Page 10: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 10

カスタム FSBL アプリケーシ ョ ンの作成

1. 「SDK の設定」 で説明されている手順が既に実行されているこ とを確認します。

2. リ ポジ ト リの新しいテンプレート を使用して FSBL を作成します (図 4)。

a. [File] → [New] → [Application_Project] をク リ ッ ク します。

b. [Project Name] に 「amp_fsbl」 と入力します。

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

X-Ref Target - Figure 4

図 4 : FSBL の作成

X1078_04_011713

Page 11: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 11

d. [Available Templates] から [Zynq FSBL for AMP] を選択します。 リ ス トにこのテンプレート

が表示されない場合は、 リポジ ト リが正し く設定されているこ とを確認してください (図 5)。

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

3. SDK が新しい amp_fsbl_bsp および amp_fsbl アプリケーシ ョ ンのコンパイルを完了する と、次の場

所に FSBL ELF が生成されます。

design\work\edk_system\SDK\Workspace\amp_fsbl\Debug\amp_fsbl.elf

次の場所にはコンパイル済みの ELF があ り ます。

design\generated_files\SDK_apps\amp_fsbl.elf

CPU1 用ベアメ タル アプリケーシ ョ ンの作成

このセクシ ョ ンでは、 FSBL によって DDR メモ リにロード された後に CPU1 上で実行されるアプ リ

ケーシ ョ ンの ELF の作成方法について説明します。CPU1 はカスタマイズされた BSP を使用するため、

この手順は CPU0 用アプリ ケーシ ョ ンの作成手順と若干異なり ます。 このデザインでは、CPU1 が ICDや SCU などの共有リ ソースにアクセスするこ とはできません。

アプリ ケーシ ョ ンはコンパイル済みであ り、design\generated_files\SDK_apps\app_cpu1.elf

にあ り ます。

1. デザイン付属のリポジ ト リにある、カスタマイズされたスタンドアロン BSP を使用し、SDK によっ

て BSP を作成します (図 6)。

a. [File] → [New] → [board_support_package] をク リ ッ ク します。

X-Ref Target - Figure 5

図 5 : カスタム FSBL テンプレートの選択

X1078_05_011713

Page 12: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 12

b. [Project name] を 「app_cpu1_bsp」 に変更します。

c. [CPU] を [ps7_cortexa9_1] に変更します。

d. [Board Support Package OS] を [standalone_amp] に変更します。

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

f. ボード サポート パッケージの設定画面で、 [overview] → [standalone_amp] をク リ ッ ク し、

[stdin] と [stdout] の両方を [none] に変更します (図 7)。

X-Ref Target - Figure 6

図 6 : CPU1 の BSP

X-Ref Target - Figure 7

図 7 : CPU1 : STDIN なし、 STDOUT なしの設定

X1078_06_011713

X1078_07_011713

Page 14: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 14

2. CPU1 上で実行されるベアメ タル アプリ ケーシ ョ ンを作成し、付属のソフ ト ウェアをインポート し

ます (図 9)。

a. [File] → [New] → [application_project] をク リ ッ ク します。

b. [Project name] に 「app_cpu1」 と入力します。

c. [Processor] を [ps7_cortexa9_1] に変更します。

d. [Board Support Package] を [Use existing] に変更し、 [app_cpu1_bsp] を選択します。

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

X-Ref Target - Figure 9

図 9 : CPU1 用アプリケーシ ョ ンの作成

X1078_09_011713

Page 18: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 18

l. 参照ボタンをク リ ッ ク し、 ディ レク ト リ design\src\apps\app_cpu1 を選択します。

m. 左側のペインで [app_cpu1] を選択しますが、 チェッ ク ボッ クスはオンにしないでください。

右側のペインですべてのファイルを選択します (図 13)。

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

o. [Yes] をク リ ッ ク して、 lscript.ld を上書きします。

3. SDK が新規アプリ ケーシ ョ ンのコンパイルを完了する と、 次の場所に ELF が生成されます。

design\work\edk_system\SDK\Workspace\app_cpu1\Debug\app_cpu1.elf

X-Ref Target - Figure 13

図 13 : CPU1 インポートするファイルの選択

X1078_13_011713

Page 19: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 19

Linux アプリケーシ ョ ン RWMEM の作成

このユーティ リ ティは、 XMD (Xilinx Microprocessor Debug) の mrd および mwr コマンド と同様に、

Linux コンソールから メモ リ位置へのシンプルな読み出しおよび書き込みアクセスを提供します。 アプ

リ ケーシ ョ ンはコンパイル済みであ り、 design\generated_files\SDK_apps\rwmem.elf にあ り

ます。

1. 空の Linux アプリ ケーシ ョ ンを作成します (図 14)。

a. [File] → [new] → [Application_Project] をク リ ッ ク します。

b. [Project name] に 「rwmem」 と入力します。

c. [OS Platform] を [Linux] に変更します。

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

X-Ref Target - Figure 14

図 14 : RWMEM の作成

X1078_14_011713

Page 20: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 20

e. [Linux Empty Application] テンプレート を選択します (図 15)。

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

2. 付属の rwmem ソースをインポート します。

a. SDK の [Project Explorer] タブで [rwmem] を展開し、 [src] を右ク リ ッ ク します。

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

c. [General] → [File_System] をク リ ッ ク します。

d. 参照ボタンをク リ ッ ク し、 ディ レク ト リ design\src\apps\rwmem を選択します。

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

3. 右側のペインで [rwmem.c] を選択します。 左側のペインでは何も選択しないでください。 [Finish]をク リ ッ ク します。

4. SDK が新規アプリ ケーシ ョ ンのコンパイルを完了する と、

design\work\edk_system\SDK\Workspace\rwmem\Debug\rwmem.elf に ELF ファ イルが

生成されます。 コンパイル済みのファイルが design\generated_files\SDK_apps\rwmem.elf にあ り ます。

Linux アプリケーシ ョ ン Soft UART の作成

Soft UART アプリ ケーシ ョ ンは Linux 上で実行され、OCM を継続的にモニターして CPU1 からデータ

を受信します。 受信したデータは Linux ターミナルにエコーされます。

X-Ref Target - Figure 15

図 15 : Linux の空のアプリケーシ ョ ン

X1078_15_011713

Page 21: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 21

このアプリ ケーシ ョ ンは既にコンパイルされ、

design\generated_files\SDK_apps\softUart.elf で利用可能になっています。

1. 「Linux アプリ ケーシ ョ ン RWMEM の作成」 と同じ手順に従います。 ただし、 プロジェク トに softUart という名前を付けて、 付属の design\src\apps\softUart からソースをインポート し

ます。

2. SDK が新規アプリ ケーシ ョ ンのコンパイルを完了する と、

design\work\edk_system\SDK\Workspace\softUart\Debug\softUart.elf に EFL ファ

イルが生成されます。 コンパイル済みのファイルが design\generated_files\SDK_apps\softUart.elf にあ り ます。

Linux カーネルの作成

Linux カーネルのダウンロードおよびコンパイルの詳細は、 Wiki ページ http://wiki.xilinx.com を参照し

てください。 このサンプル デザインでは、 xilinx-14.3-build2 のタグが付いたビルドを使用します。 コン

パイル済みのカーネルのコピーは、 design\generated_files\linux\uImage に含まれています。

使用するコマンドは次のとおりです。

1. Wiki の説明に従って git を使用してカーネルをダウンロード し、ビルドを xilinx-14.3-build2に設定します。

git clone git://git.xilinx.com/linux-xlnx.gitcd linux-xlnxgit pull origin xilinx-14.3-build2

または

git checkout -b xilinx-14.3-build2 xilinx-14.3-build2

2. Wiki の説明に従ってカーネルを構築します。

make ARCH=arm xilinx_zynq_defconfigmake ARCH=arm uImage

注記 : 詳細は、 Wiki を参照してください。

カーネルがコンパイルされ、 arch/arm/boot/uImage に置かれます。

Linux デバイス ツリーの作成

デバイス ツ リーのコンパイル手順については、Wiki ページ http://wiki.xilinx.com を参照してください。

デバイス ツ リーを変更して、Linux SMP が 1 つの CPU のみを使用するよ うにし、Linux が利用できる

メモ リ容量を減らします。 変更済みの devicetree.dts およびコンパイル済みの devicetree.dtbのコピーは、 design\generated_files\boot に含まれています。

使用するコマンドは次のとおりです。

1. ダウンロード した Linux カーネルに含まれている zynq-zc702.dts デバイス ツ リーを新しい位

置にコピーします。

cp arch/arm/boot/dts/zynq-zc702.dts <somewhere>

2. コピーしたデバイス ツ リーを変更し、 メモ リ容量を減らします。 メモ リ エン ト リは次のよ うにな

り ます。

memory { device_type = "memory"; reg = <0x00000000 0x30000000>;};

3. bootargs 代入文に maxcpus=1 を追加し、 CPU の最大数を 1 に設定します。

bootargs = "console=ttyPS0,115200 maxcpus=1 root=/dev/ram rw ip=:::::eth0:dhcp earlyprintk";

Page 22: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 22

4. Wiki ページの説明に従って、 新しい devicetree.dts をコンパイルして devicetree.dtb を作成します。 scripts/dtc/dtc -I dts -O dtb -o <somewhere>/devicetree.dtb <somewhere>/zynq-zc702.dts

注記 : 詳細は Wiki を参照してください。

カーネルから利用可能なデバイス ツ リーは、 イーサネッ トに DHCP を使用します。 イーサネッ ト カー

ドが DHCP サーバーのネッ ト ワークにアクセスできない場合、 IP アドレスを固定で設定する と、Linuxのブート時間が大幅に短縮されます。 これを行うには、 bootargs の一部を次のよ うに変更します。

ip=:::::eth0:dhcp

から

ip=110.0.0.5::110.0.0.1:255.255.255.0::eth0:dhcp

U-Boot の作成

U-boot のダウンロードおよびコンパイルの詳細は、 Wiki ページ http://wiki.xilinx.com を参照してくだ

さい。 このサンプル デザインでは、 xilinx-14.3-build2 のタグが付いたビルドを使用します。 コンパイ

ル済みの U-Boot のコピーは、 design\generated_files\linux\u-boot.elf に含まれています。

使用するコマンドは次のとおりです。

1. Wiki の説明に従って git を使用して U-boot をダウンロード し、ビルドを xilinx-14.3-build2 に設定

します。

git clone git://git.xilinx.com/u-boot-xlnx.gitcd u-boot-xlnxgit pull origin xilinx-14.3-build2

または

git checkout -b xilinx-14.3-build2 xilinx-14.3-build2

2. Wiki の説明に従って U-boot を構築します。

make zynq_zc70x_configmakemv u-boot u-boot.elf

注記 : 詳細は Wiki を参照してください。

U-Boot がコンパイルされ、 ./u-boot.elf に置かれます。

ルート ファイル システムの取得

バージ ョ ン 14.3 用のルート ファ イル システム ramdisk のダウンロード手順については、 Wiki ページ http://wiki.xilinx.com を参照して ください。 ramdisk のコピーは、

design\generated_files\linux\uramdisk.image.gz に含まれています。

ダウンロード された ramdisk は、 U-Boot によって使用できるよ うに既にラ ップされています。 スター

ト アップ タス クなどを変更する必要がある場合は、 ダウンロード した ramdisk のラ ップ解除、 マウン

ト、 修正、 マウン ト解除、 再ラ ップを実行する必要があ り ます。 必要な手順は次のとおりです。

1. ramdisk をラ ップ解除し、 マウン ト します。

dd if=./uramdisk.image.gz bs=64 skip=1 of=ramdisk.gzgunzip ramdisk.gzmkdir tmp_copysudo mount -o loop ramdisk ./tmp_copy

2. これで、 ramdisk は ./tmp_copy にマウン ト されます。

3. ramdisk をマウン ト解除し、 再ラ ップします。

sudo umount ./tmp_copygzip ramdisk

Page 23: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 23

<ubootRoot>/tools/mkimage -A arm -T ramdisk -C gzip -d ramdisk.image.gz uramdisk.image.gz

ブート ファイルの生成

ブート ファ イル BOOT.BIN には通常、 FSBL、 FPGA の BIT ファ イル、 および CPU0 上で動作するア

プリ ケーシ ョ ン用の ELF (U-Boot) が含まれています。 このサンプル デザインでは、 複数のアプリ ケー

シ ョ ンをダウンロードするよ うに FSBL が変更されているため、 CPU1 上で動作する 2 番目のアプ リ

ケーシ ョ ンの ELF も BOOT.BIN に含まれます。

デザイン ファ イルには、 バッチ ファ イル、 BootGen コンフ ィギュレーシ ョ ン ファ イル、 およびデータ

または ELF ファ イルのダウンロードを停止するよ うに FSBL を ト リガーするための cpu1_bootvec.bin と呼ばれるファイルがあ り ます。

コンフ ィギュレーシ ョ ン ファ イルには、 DDR メモ リにコピーされるファ イルの名前が記述されていま

す。 これらのファイルの順序は重要です。 このデザインでの順序は次のよ うになり ます。

1. FSBL ELF

2. CPU0 用アプリ ケーシ ョ ン

3. CPU1 用アプリ ケーシ ョ ン

4. ダ ミーの cpu1_bootvec.bin ファ イル

コンパイル済みの BOOT.BIN は、 design\generated_files\boot\BOOT.BIN にあ り ます。次の手

順で参照しているファ イルはすべてコンパイル済みであ り、design\generated_files に格納されて

います。

注記 : ブート ファ イルの名前は BOOT.BIN にする必要があ り ます。

1. 付属のディレク ト リ design\src\bootgen を design\work\bootgen にコピーします。このディ

レク ト リには、 BootGen バッチ ファ イル (createBoot.bat)、 BIF ファ イル (bootimage.bif)、そして 16 進数の値 0xFFFFFF00 ( リ トル エンディアン用にスワップする場合は 0x00、0xFF、0xFF、0xFF) のみを含むバイナリ ファ イル (cpu1_bootvec.bin) が格納されています。 FSBL は、 この

ファイルのロード アドレスを bootimage.bif で設定された 0xFFFFFFF0 と認識し、FSBL を ト リ

ガーするこ とで ELF または bin ファイルのロードを停止して、最初にダウンロード した ELF の実行

を開始します。

2. コンパイル済みの FSBL ELF を design\work\edk_system\SDK\Workspace\amp_fsbl\Debug\amp_fsbl.elf から design\work\bootgen にコピーします。

注記 : SDK 内で FSBL をコンパイルする手順を実行しなかった場合は、 リ ファレンス デザインの

design\generated_files\SDK_apps\amp_fsbl.elf にコ ンパイル済みのコ ピーがあ り ま

す。

3. BIT ファ イルを design\work\edk_system\implementation\download.bit から design\work\bootgen にコピーします。

注記 : FPGA BIT ファ イルをコンパイルする手順を実行しなかった場合は、リ ファレンス デザイン

の design\generated_files\fpga\download.bit にコンパイル済みのコピーがあ り ます。

4. Wiki の情報に従って作成した u-boot.elf を、 design\work\bootgen にコピーします。

注記 : アプ リ ケーシ ョ ンを コ ンパイルする手順を実行しなかった場合は、 付属のデザイ ンの

design\generated_files\linux\u-boot.elf にコンパイル済みのコピーがあ り ます。

5. 生成された CPU1 用ベアメ タル アプリ ケーシ ョ ンを design\work\edk_system\SDK\Workspace\app_cpu1\Debug\app_cpu1.elf から design\work\bootgen にコピーします。

注記 : アプリケーシ ョ ンをコンパイルする手順を実行しなかった場合は、 リ ファレンス デザインの

design\generated_files\SDK_apps\app_cpu1.elf にコンパイル済みのコピーがあり ます。

Page 24: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 24

6. ザイ リ ンクス ISE Design Suite のコマンド プロンプ ト を開きます。 このコマンド プロンプ トでは、

ザイ リ ンクス デザイン ツール向けの環境設定が可能です。

7. コマンド プロンプ トで、 ディ レク ト リ を design\work\bootgen に変更します。

8. createBoot.bat ファ イルを実行します。 これで、 現在のディ レク ト リにブート ファ イル BOOT.BIN が作成されます。

SD カードへのファイルのコピー

Zynq AP SoC では、 Linux をブートするには次のファ イルが SD カードに含まれている必要があ り ま

す。

1. BOOT.BIN (FSBL、 BIT ファ イル、 U-Boot、 CPU1 用アプリ ケーシ ョ ンを含む)

2. uramdisk.image.gz (U-boot によってメモリに抽出される ramdisk ファ イル システム)

3. devicetree.dtb (U-Boot および Linux によってデバイス情報の取得に使用される)

4. uImage (U-boot によってロード され、 実行される Linux カーネル)

次の 2 つの Linux アプリ ケーシ ョ ンも、 Linux 内で実行できるよ うに SD カードに追加されます。

1. rwmem.elf (メモ リへの読み出し /書き込みアクセスを可能にする)

2. softUart.elf (バッ クグラウンドで動作し、 OCM をモニターして stdout に出力する)

次のファイルを SD カードにコピーします。

1. devicetree.dtb : このファ イルは、 Wiki の情報に従って作成されたユーザーの devicetree.dtb か、 またはリ ファレンス デザインに含まれる design\generated_files\boot\devicetree.dtb からコピーされたファイルです。

2. uramdisk.image.gz : このファ イルは、 Wiki の情報に従って作成されたユーザー独自のファイ

ルか、 またはリ ファレンス デザインに含まれる design\generated_files\linux\uramdisk.image.gz からコピーされたファイルです。

3. uImage : このファ イルは、 Wiki の情報に従って作成されたユーザー独自のファイルか、 またはリ

ファレンス デザインに含まれる design\generated_files\linux\uImage からコピーされた

ファイルです。

4. BOOT.bin : このファ イルは、 上記の手順に従って作成されたユーザーの design\work\bootgen\BOOT.BIN か、 またはリ ファレンス デザインに含まれる design\generated_files\boot\BOOT.BIN からコピーされたファイルです。

5. rwmem.elf : このファ イルは、 ユーザーの design\work\edk_system\SDK\Workspace\rwmem\Debug\rwmem.elf か、 またはリ ファレ

ンス デザインに含まれる design\generated_files\SDK_apps\rwmem.elf です。

6. softUart.elf : このファ イルは、

design\work\edk_system\SDK\Workspace\rwmem\Debug\softUart.elf から作成された

ユーザー独自のファイルか、 またはリ ファレンス デザインに含まれる design\generated_files\SDK_apps\softUart.elf です。

デザインの実行

ハードウェア要件

• ZC702 評価ボード

• 12V AC アダプター電源

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

• TeraTerm Pro (または同等の) 端末プログラム

• Silicon Labs 社の USB-UART ド ラ イバー [参照 2]

Page 25: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 25

ハードウェアのセッ トアップ

『Zynq-7000 All Programmable SoC : ZC702 評価キッ ト およびビデオ/画像処理キッ ト (ISE DesignSuite 14.3) スタート アップ ガイ ド』 [参照 2] の 「TRD Demonstration Procedure」 に記載されたボード

のセッ ト アップ手順を実行します。 このデザインには、 マウス、 キーボード、 USB ハブ、 モニター、 モ

ニター ケーブルは不要です。

ハード ウェアのセッ ト アップでは、 ZC702 デモ ボードを SD カードからブートするよ うに設定します。

端末プログラムは、 ボー レート 115200 で適切な COM ポート を待ち受けるよ うに設定します。

デザインに電源を投入する と、 ボードがブート します。 CPU0 は U-boot の実行を開始し、 Linux をブー

ト します。 SD カードからブートする と、 UART にシステムの出力が現れるまで最大 18 秒かかり ます。

この UART はサードパーティ提供のド ライバーを使用します。 詳細は、 『Zynq-7000 All ProgrammableSoC : ZC702 評価キッ トおよびビデオ/画像処理キッ ト (ISE Design Suite 14.3) スタート アップ ガイ ド』

を参照してください。 ブート後、 コンソールに Linux zynq> プロンプトが表示されます (図 16)。 ボード

にイーサネッ ト ケーブルが接続されていない場合は、 DHCP 要求送信状態からのタイムアウ トに多少時

間がかかり ます。

ブート時に PS ブート ローダーは、 SD カードからブート されるよ うにモード ピンが設定されているこ

とを検出します。 つづいて PS ブート ローダーは BOOT.BIN ファ イルを開き、 ブート ローダーのフラグ

が付けられたデータ ブロ ッ クを探します。 bootimage.bif ファ イルに見られるよ うに、

amp_fsbl.elf にこのフラグがあ り ます。 ブート ローダーはこのファイルを DDR メモ リにロード し、

その実行を開始します。 FSBL は BIT ファ イル、 U-Boot ELF、 CPU1 の ELF、 そしてダ ミー ファ イル cpu1_bootvec.bin をロード します。 こ こで、 CPU0 上で動作中の FSBL は、 FSBL の次に最初に

ロード されたアプリ ケーシ ョ ンの実行アドレスにジャンプします。

softUart アプリ ケーシ ョ ンは、 コマンド /mnt/softUart.elf & によって Linux 内で起動されます。

このコマンドは、 softUart をバッ クグラウンドで実行します。 softUart は、 共有 OCM のメモ リ位置 0xFFFF9000 (COMM_TX_FLAG_OFFSET) および 0xFFFF9004 (COMM_TX_DATA_OFFSET) を継続的にモニターします。 COMM_TX_FLAG_OFFSET に 1 が現れるごとに、 softUart は COMM_TX_DATA_OFFSET の値を読み出し、 その値を文字列の配列に一時的に格納します。 0x0A の値 (\n) を受信する と、 文字列の配列が STDOUT 上に示されます。 softUart は、

COMM_TX_DATA_OFFSET から値を読み出すたびに、 COMM_TX_FLAG_OFFSET の内容をク リ

X-Ref Target - Figure 16

図 16 : コンソール出力

X1078_16_011713

Page 26: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 26

アします。 このク リ アによって、Linux 上の softUart アプリ ケーシ ョ ンに別の文字を送信できるこ とが CPU1 に通知されます。

第 2 の CPU は、 コマン ド /mnt/rwmem.elf 0xfffffff0 0x30000000 で起動し ます。 位置

0xFFFF8000 は 毎秒のインク リ メン ト を開始し、 値はコマンド /mnt/rwmem.elf 0xffff8000 を使

用して表示できます。

こ こで、 CPU1 上で動作しているベアメ タル アプリ ケーシ ョ ンは、 PL から割り込みを受信したと きに

のみ softUart に出力します。 PL にはカスタム コアが含まれ、 コアへの入力信号あるいはコア内のレジ

スタから、 割り込み信号を生成します。 ChipScope Analyzer VIO コアが、 カスタム コアの入力に接続

されています。 したがって、 ソフ ト ウェアと ChipScope Analyzer VIO コアのいずれも CPU1 への割り

込みを生成でき ます。 デザイ ンには、 IRQ 信号をモニターするために ChipScope Integrated LogicAnalyzer (ILA) コアも含まれています。

CPU1 へ強制的に割り込むには、 Linux コマンド /mnt/rwmem.elf 0x78600000 1 を入力します (図 17)。 3 ページの 「アドレス マップ」 を参照して、セッ ト されたばかりのレジスタ ビッ ト を確認して

ください。 このビッ ト をセッ トするこ とによって割り込みが CPU1 に送信され、 CPU1 の割り込みサー

ビス ルーチンが、 OCM メモ リ を介して soft UART アプリ ケーシ ョ ンに 「CPU1: IRQ clr 0」 を出力し

ました。

次の手順では、ChipScope Analyzer ILA コアを使用して IRQ 信号のアクティブ状態の時間 (IRQ のレイ

テンシを示す) を測定し、 ChipScope Analyzer VIO コンソールを使用して割り込みを生成します。

1. デザインの実行中に ChipScope Analyzer を起動します。

2. JTAG チェーンに接続します。ChipScope Analyzer はチェーン内の 2 つのデバイス (ARM_DAP とXC7Z020) を表示します。 [OK] をク リ ッ ク します。

3. [File] → [open_project] をク リ ッ ク して、 付属の ChipScope のコンフ ィギュレーシ ョ ン ファ イル

を開きます。 変更内容の保存に対して [No] をク リ ッ ク し、

X-Ref Target - Figure 17

図 17 : 強制された割り込みのコンソール出力

X1078_17_011713

Page 27: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 27

design\src\chipscope\csdefaultproj.cpj にある ChipScope コンフ ィギュレーシ ョ ン ファ イルを参照します。

注記 : ILA は、 IRQ が High になったと きに ト リガーするよ う設定済みです。

4. [UNIT:1 Trigger Setup] を選択して ト リガーを作動可能にします。

5. VIO コンソール ウ ィンド ウには、 SyncOut[0] というパルス ボタンがあ り ます (図 18)。 このボタ

ンをク リ ッ ク します。

Linux コンソール内で動作する softUART アプリ ケーシ ョ ンは、 「CPU1:IRQ clr 1」 のよ う な文字列を

出力します (図 19)。

X-Ref Target - Figure 18

図 18 : ChipScope Analyzer による最初の IRQ のキャプチャ

X1078_18_011713

Page 28: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 28

注記 : 仮想ボタンのク リ ッ クご とに割り込みが生成され、 CPU1 の IRQ サービス ルーチンは softUartに文字列を出力します。図 20 に示すよ うに、IRQ サービス ルーチンは最初の割り込みの処理後にキャッ

シュされるため、 後続の IRQ では割り込みレイテンシが大幅に短くなり ます。

割り込みを処理するベアメ タル アプリ ケーシ ョ ンは、 DDR メモ リ内に置かれています。 最初の割り込

みが発生する と、 CPU1 はサービス ルーチンにジャンプするよ うに指示されます。 このジャンプによっ

て DDR メモ リに置かれた命令がキャッシュに読み出され、 実行されます。 実行中、 エンベデッ ド コア

によって生成されている割り込み信号をク リ アする と、 サービス ルーチンが終了します。 図 18 では、

割り込みのアサートからサービス ルーチンによる制御ビッ トのク リ アまでに 65 ク ロ ッ クを上回る遅延

があ り ます。 最初の割り込みの遅延は、 サービス ルーチンのフェッチと同時に DDR メモ リが リ フレッ

シュされるかど うかによって変わる可能性があ り ます。

最初の IRQ の発生後、 サービス ルーチンはキャ ッシュに保存されるため、 2 番目以降の割り込みに対

するルーチンの命令は、 処理がよ り低速で確定的でない DDR メモ リではなく、 キャ ッシュからフェッ

チされます。 図 20 に示すよ うに、 割り込み処理は 25 ク ロ ッ クで完了しています。 この遅延は、 最初の

キャッシュされない割り込み処理の約 1/3 です。

最初の割り込み処理と後続の割り込み処理の時間差を小さ くするには、 割り込みサービス ルーチンを

キャ ッシュされない OCM に移動します。

X-Ref Target - Figure 19

図 19 : ChipScope Analyzer のト リガー後のコンソール出力

X1078_19_011713

Page 29: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 29

デザインのデバッグ

CPU1 上で実行されているアプリ ケーシ ョ ンの接続とデバッグには SDK を使用できます。

XMD は、 コマン ド シェルおよび JTAG ケーブルを介して CPU に接続する GNU デバッガー (GDB)サーバーを提供します。 通常、 アプ リ ケーシ ョ ンのデバッグを開始する と、 SDK が自動的に XMD をバッ クグラウンドで起動します。 このサンプル デザインでは、XMD を手動で起動して CPU1 に接続し

ます。 その後、 デバッグ中に XMD GDB サーバーに接続するよ うに SDK に指示します。

FSBL を使用してデザインをブート したため、PS レジスタの再初期化は不要です。CPU0 上で動作する

Linux に影響を与えないよ うに、 PS 全体を リセッ ト しないよ うに注意する必要があ り ます。

1. プラ ッ ト フォーム ケーブルを ZC702 ボードに接続します。 ジャンパー オプシ ョ ンが使用するデ

バッグ ケーブルに合わせて正し く設定されているこ とを確認します。

X-Ref Target - Figure 20

図 20 : ChipScope Analyzer による 2 番目以降の IRQ のキャプチャ

X1078_20_011713

Page 30: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 30

2. SDK から XMD を起動して CPU1 に接続します (図 21)。

a. SDK で [Xilinx_Tools] → [Launch_shell] をク リ ッ ク して、ザイ リ ンクス コマンド シェルを開

きます。

b. 新しいコマンド シェルで 「xmd」 と入力します。

c. XMD のプロンプ トで、 コマンド connect arm hw -debugdevice cpunr 2 を入力しま

す。

d. XMD は TCP ポート番号 1234 を介して応答します。

GDB サーバーが動作し、 TCP ポート 1234 を待ち受けています。 XMD が接続される と、 CPU1 は動作を停止します。

X-Ref Target - Figure 21

図 21 : XMD の CPU1 への接続

X1078_21_011513

Page 31: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 31

3. SDK で CPU1 のデバッグを開始します。

a. SDK の [Project Explorer] ウ ィンド ウで [app_cpu1] を右ク リ ッ ク し、 [debug_as] → [debug_configurations] をク リ ッ ク します (図 22)。

X-Ref Target - Figure 22

図 22 : CPU1 のデバッグ コンフ ィギュレーシ ョ ン

X1078_22_011513

Page 32: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 32

b. [Xilinx C/C++ ELF] をク リ ッ ク してから、 左上の [New launch configuration] アイコンをク

リ ッ ク します (図 23)。

c. コンフ ィギュレーシ ョ ン名は自動的に 「app_cpu1 Debug」 に設定されます (図 24)。

d. [Device Initialization] タブをク リ ッ ク し、 [Path to initialization TCL file] の内容を削除しま

す。 初期化は Linux と FSBL によって既に完了しています (図 25)。

X-Ref Target - Figure 23

図 23 : CPU1 のデバッグ コンフ ィギュレーシ ョ ン

X-Ref Target - Figure 24

図 24 : CPU1 のデバッグ コンフ ィギュレーシ ョ ン名

X1078_23_011513

X1078_24_011513

Page 33: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

インプリ メンテーシ ョ ンの説明

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 33

e. [Remote Debug] タブをク リ ッ ク します。

f. [Connect to gdbserver on a different machine] をオンにして、外部で生成された GDB サーバー

に接続するよ うに SDK に指示します。 IP アドレスはデフォルトの localhost に、 ポートは 1234 に設定する必要があ り ます (図 26)。

g. [Apply] をク リ ッ ク します。

h. [Debug] をク リ ッ ク します。 [Yes] をク リ ッ ク してパースペクティブ オプシ ョ ンを確定します。

i. アプリ ケーシ ョ ンがダウンロード され、 実行されます (ELF のダウンロードは [Device Initialization] タブで無効にされている場合がある)。 main() 内の最初の実行可能行に設定され

たブレークポイン トでアプリ ケーシ ョ ンが停止します。

j. CPU1 上のアプリ ケーシ ョ ンの実行を再開するには、 [resume]、 [single step]、 およびほかの

ボタンをク リ ッ ク します。

X-Ref Target - Figure 25

図 25 : CPU1 のデバッグ初期化

X-Ref Target - Figure 26

図 26 : CPU1 のリモート デバッグ コンフ ィギュレーシ ョ ン

X1078_25_011513

X1078_26_011513

Page 34: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

まとめ

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 34

まとめ このサンプル デザインは、Zynq-7000 AP SoC をブート し、2 つの Cortex-A9 プロセッサを起動 (CPU0で Linux を実行し、 CPU1 でベアメ タル アプリ ケーシ ョ ンを実行) する方法を示すものです。 CPU1 上で動作するオーバーヘッ ドが少ないベアメ タル アプリ ケーシ ョ ンを使用して PL から生成される割り込

みを処理し、 CPU0 上で動作する Linux に通知します。

参考資料 このアプリ ケーシ ョ ン ノートでは、 次の参考資料が使用されています。

1. UG585 : 『Zynq-7000 All Programmable SoC テクニカル リ ファレンス マニュアル』

2. UG926 : 『Zynq-7000 All Programmable SoC : ZC702 評価キッ トおよびビデオ / 画像処理キッ ト (ISE Design Suite 14.3) スタート アップ ガイ ド』

3. UG873 : 『Zynq-7000 All Programmable SoC : コンセプ ト、 ツール、 テクニッ ク ガイ ド』

4. AMBA AXI4 プロ ト コル仕様http://www.arm.com/products/system-ip/amba/amba-open-specifications.php

5. UG683 : 『EDK コンセプ ト、 ツール、 テクニッ ク』

6. DS768 : 『LogiCORE IP AXI インターコネク ト 』

7. UG111 : 『エンベデッ ド システム ツール リ ファレンス マニュアル』

8. UG761 : 『AXI リ ファレンス ガイ ド』

9. UG642 : 『プラ ッ ト フォーム仕様フォーマッ ト リ ファレンス マニュアル』

10. UG029 : 『ChipScope Pro ソフ ト ウェアおよびコア ユーザー ガイ ド』

11. 『Zynq-7000 ベース ターゲッ ト リ ファレンス デザイン 14.3』http://wiki.xilinx.com/zynq-base-trd-14-3

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

Notice of Disclaimer

The information disclosed to you hereunder (the “Materials”) is provided solely for the selection and useof Xilinx products. To the maximum extent permitted by applicable law: (1) Materials are made available"AS IS" and with all faults, Xilinx hereby DISCLAIMS ALL WARRANTIES AND CONDITIONS,EXPRESS, IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OFMERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE;and (2) Xilinx shall not be liable (whether in contract or tort, including negligence, or under any othertheory of liability) for any loss or damage of any kind or nature related to, arising under, or in connectionwith, the Materials (including your use of the Materials), including for any direct, indirect, special,incidental, or consequential loss or damage (including loss of data, profits, goodwill, or any type of lossor damage suffered as a result of any action brought by a third party) even if such damage or loss wasreasonably foreseeable or Xilinx had been advised of the possibility of the same. Xilinx assumes noobligation to correct any errors contained in the Materials or to notify you of updates to the Materials orto product specifications. You may not reproduce, modify, distribute, or publicly display the Materialswithout prior written consent. Certain products are subject to the terms and conditions of the LimitedWarranties which can be viewed at http://www.xilinx.com/warranty.htm; IP cores may be subject towarranty and support terms contained in a license issued to you by Xilinx. Xilinx products are notdesigned or intended to be fail-safe or for use in any application requiring fail-safe performance; youassume sole risk and liability for use of Xilinx products in Critical Applications: http://www.xilinx.com/warranty.htm#critapps.

日付 バージョ ン 内容

2013 年 2 月 14 日 1.0 初版

Page 35: シンプルな AMP : 2 Zynq SoC 上で動作する Linux · CPU0 は Linux を実行するように構成され、CPU1 はベアメタル アプリケーションを実行 するように構成されます。

Automotive Applications Disclaimer

XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 35

Automotive Applications Disclaimer

XILINX PRODUCTS ARE NOT DESIGNED OR INTENDED TO BE FAIL-SAFE, OR FOR USE INANY APPLICATION REQUIRING FAIL-SAFE PERFORMANCE, SUCH AS APPLICATIONSRELATED TO: (I) THE DEPLOYMENT OF AIRBAGS, (II) CONTROL OF A VEHICLE, UNLESSTHERE IS A FAIL-SAFE OR REDUNDANCY FEATURE (WHICH DOES NOT INCLUDE USE OFSOFTWARE IN THE XILINX DEVICE TO IMPLEMENT THE REDUNDANCY) AND A WARNINGSIGNAL UPON FAILURE TO THE OPERATOR, OR (III) USES THAT COULD LEAD TO DEATHOR PERSONAL INJURY. CUSTOMER ASSUMES THE SOLE RISK AND LIABILITY OF ANY USEOF XILINX PRODUCTS IN SUCH APPLICATIONS.

本資料は英語版 (v1.0) を翻訳したもので、 内容に相違が生じる場合には原文を優先します。

資料によっては英語版の更新に対応していないものがあ り ます。

日本語版は参考用と してご使用の上、 最新情報につきましては、 必ず最新英語版をご参照ください。

この資料に関するフ ィードバッ クおよびリ ンクなどの問題につきましては、

[email protected] までお知らせください。 いただきましたご意見を参考に早急に対応さ

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

ご了承ください。