32
XAPP1079 (v1.0) 2013 4 3 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 European Union and other countries. All other trademarks are the property of their respective owners. 9 概要 Zynq®-7000 All Programmable SoC は、 独立 し た ソ フ ト ウ ェ ア ス タ ッ ク または実行フ ァ イルを同時に 実行で き る 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーション ノートでは、両プ ロセッサを起動して、 各々に独立したベアメ タル ソフトウェア アプリケーションを実行させると共に、 共有メ モ リ を介して両者間の通信を可能にする方法について説明し ます。 含まれるシステム デザインは、 Xilinx Platform Studio (XPS) 14.3 によって作成および構築されており、 ザイ リンクスの ソ フ ト ウ ェ ア開発キ ッ ト (SDK) を使用して構築されたソフ ト ウェアを含みます。このアプリ ケーシ ョ ン ノートにはプロジェクト フ ァ イルがすべて付属し、 これら をデザイ ンの検討や再構築に活用した り 、 新 規デザイン着手時のテンプレート として使用したりできます。 Zynq-7000 ZC702 デモ プ ラ ッ ト フ ォーム を タ ーゲ ッ ト と し て事前に構築、 イ ンプ リ メ ン ト さ れた フ ァ イルも用意されているため、ハードウェア、 ソフト ウェア、 またはブート ファイルのターゲッ トを再作 成する手順を省略できます。 はじめに Zynq-7000 AP SoC は、同じメモリおよびペリフェラルを共用する 2 つの Cortex-A9 プロセッサを搭載 しています。非対称型マルチプロセッシング (AMP) とは、両方のプロセッサがそれぞれのオペレーテ ィ ング システムまたはベアメタル アプリケーションを実行できるようにするメカニズムであり、共有リ ソースを介してこれらのアプリケーションを緩やかに結合させることもできます。 リファレンス デザイ ンには、両方の Cortex-A9 プロセッサを AMP コンフィギュレーションで動作させ るために必要なハード ウェアと ソフ ト ウェアが含まれます。 各 CPU は、 それぞれ独自の ス タ ン ド ア ロ ン環境下でベア メ タル アプ リ ケーシ ョ ンを実行し ます。 2 つの CPU が共有ハー ド ウ ェ ア リ ソース上で 競合しないよ う に対策が講じ られています。 このアプ リ ケーシ ョ ン ノ ー ト では、 ブー ト 可能な ソ リ ュ ー シ ョ ン の作成方法 と 両 CPU のデバッグ方法についても説明します。 デザインの概要 リファレンス デザインでは、 2 つの Cortex-A9 プロセッサ (CPU0 CPU1) がそれぞれのベア メ タル アプ リ ケーシ ョ ンを実行する よ う に構成し ます。 この AMP の例では、 CPU0 上で動作するベア メ タル アプリケーションがシステムのマスターとなり、 次を実行します。 システムの初期化 CPU1 起動の制御 CPU1 と の通信 CPU1 との UART の共有 CPU1 上で動作するベア メ タル アプ リ ケーシ ョ ンは、 次を実行し ます。 CPU0 と の通信 プログラマブル ロジック (PL) にあるコアからの割り込みの処理 CPU0 との UART の共有 アプリケーション ノート : Zynq-7000 AP SoC XAPP1079 (v1.0) 2013 4 3 シンプルな AMP : 2 つの Cortex-A9 プロセッサ 上で動作するベアメ タル システム 著者 : John McDougall

シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

XAPP1079 (v1.0) 2013 年 4 月 3 日 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 European Union and other countries. All other trademarks are the property of their respective owners.

9

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

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

ロセッサを起動して、 各々に独立したベアメ タル ソフ ト ウェア アプリ ケーシ ョ ンを実行させる と共に、

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

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

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

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

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

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

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

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

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

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

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

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

リ ファレンス デザインには、両方の Cortex-A9 プロセッサを AMP コンフ ィギュレーシ ョ ンで動作させ

るために必要なハード ウェアと ソフ ト ウェアが含まれます。 各 CPU は、 それぞれ独自のスタンドアロ

ン環境下でベアメ タル アプリ ケーシ ョ ンを実行します。 2 つの CPU が共有ハードウェア リ ソース上で

競合しないよ うに対策が講じられています。 このアプリ ケーシ ョ ン ノートでは、ブート可能なソ リ ュー

シ ョ ンの作成方法と両 CPU のデバッグ方法についても説明します。

デザインの概要 リ ファレンス デザインでは、 2 つの Cortex-A9 プロセッサ (CPU0 と CPU1) がそれぞれのベアメ タル

アプリ ケーシ ョ ンを実行するよ うに構成します。 この AMP の例では、 CPU0 上で動作するベアメ タル

アプリ ケーシ ョ ンがシステムのマスターとな り、 次を実行します。

• システムの初期化

• CPU1 起動の制御

• CPU1 との通信

• CPU1 との UART の共有

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

• CPU0 との通信

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

• CPU0 との UART の共有

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

XAPP1079 (v1.0) 2013 年 4 月 3 日

シンプルな AMP : 2 つの Cortex-A9 プロセッサ上で動作するベアメ タル システム著者 : John McDougall

Page 2: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

デザインの概要

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 2

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

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

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

は専用リ ソースの管理手法にはアプリ ケーシ ョ ン固有のものもあ り ますが、このリ ファレンス デザイン

で使用している手法の多くは、 基本的にそのまま利用できます。

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

• L1 キャ ッシュ

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

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

• プライベート タイマー

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

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

• DDR メモ リ

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

• グローバル タイマー

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

• UART0

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

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

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

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

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

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

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

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

• DDR メモリ : CPU0 が認識できる メモリ範囲を 0x00100000 ~ 0x001FFFFF に限り ます。CPU1 は、

ベアメ タル アプリケーシ ョ ンの実行に 0x00200000 ~ 0x002FFFFF のメモリ範囲を使用します。

• L2 キャ ッシュ : CPU1 は L2 キャ ッシュを使用しません。 L2 キャ ッシュは共有リ ソースであ り、

CPU0 が所有します。 CPU1 が L2 キャ ッシュを使用した場合、 L2 キャ ッシュのフラ ッシュおよび

無効化は CPU0 から要求する必要があ り、CPU0 がこの動作を実行します。CPU1 が L2 キャ ッシュ

へのアクセスを要求できるよ うにする通信チャネルの実装は、このサンプル デザインには含まれて

いません。

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

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

• タイマー : CPU1 は専用のタイマーを使用します。

• OCM : OCM へのアクセスは、競合が起らないよ うに各 CPU が非常に注意深く処理します。OCMのアドレス位置の 1 つを、 2 つのプロセッサ間の通信用フラグと して使用します。 CPU1 を起動す

る前に、 CPU0 がこのフラグを 0 に初期化します。 フラグが 0 の場合、 CPU0 が UART を所有し

ます。 フラグが 0 以外の場合は、CPU1 が UART を所有します。 フラグをセッ トできるのは CPU0のみ、 フラグをク リ アできるのは CPU1 のみです。

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

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

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

Page 3: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

デザインの概要

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 3

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

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

成されます。

ハードウェア

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 に、 レジスタの説明を示します。

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

X1079_01_020613

Page 4: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

デザインの概要

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 4

ソフ トウェア

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

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

• CPU0 のベアメ タル アプリ ケーシ ョ ン

• CPU1 のベアメ タル アプリ ケーシ ョ ン

FSBL

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

ケーシ ョ ンです。 FSBL は PL をプログラムし、 両アプ リ ケーシ ョ ンの ELF (Executable and LinkableFormat) ファ イルを DDR メモ リにコピーします。 アプ リ ケーシ ョ ンを DDR メモ リにロード後、 FSBLは最初にロード されたアプリ ケーシ ョ ンの実行を開始します。

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

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

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

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

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

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

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

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

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

リ ファレンス デザインでは、 CPU0 と CPU1 が各々独立したベアメ タル アプリ ケーシ ョ ン コードを実

行します。 CPU0 が共有リ ソースを初期化し、 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 の改訂バージ ョ ンが含まれています。

CPU0 用アプリケーシ ョ ン

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

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

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

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

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

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

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

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

2. ICD を初期化します。

3. CPU1 を起動します。

4. UART に出力します (print)。

Page 5: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

リファレンス デザイン

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 5

5. セマフォ フラグと して使用する OCM 内のメモリ位置を設定します。

6. セマフォ フラグと して使用する OCM 内のメモリ位置がク リ アされるまで待機します。

CPU0 用アプリ ケーシ ョ ンは、 手順 3 ~手順 6 を無限に繰り返します。

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

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

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

CPU0 はアドレス 0xFFFFFFF0 に値 0x00200000 を書き込み、 つづいて Set Event (SEV) コマンドを

実行するこ とで CPU1 を起動します (CPU0 および CPU1 はいずれもベアメ タルを実行)。SEV によって

CPU1 はウ ェーク ア ッ プし、 ア ド レ ス 0xFFFFFFF0 から値 0x00200000 を読み出し、 ア ド レ ス

0x00200000 にジャンプします。 CPU1 の ELF は、 FSBL によって 0x00200000 に置かれます。

CPU1 用アプリケーシ ョ ン

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

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

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

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

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

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

アプリ ケーシ ョ ン ノートでは OCM の上位 64KB のみを使用するため、 アドレス 0xFFFF0000 ~0xFFFFFFFF に対してキャ ッシュを無効にします。

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

3. セマフォ フラグと して使用する OCM 内のメモリ位置が設定されるまで待機します。

4. UART に出力します (print)。 出力する文字列の選択は割り込みサービス ルーチンがグローバル変

数をインク リ メン ト したかど うかによって決ま り ます。グローバル変数 irq_count が 0 以外の場合、

CPU1 は値を 0 に設定します。

5. セマフォ フラグと して使用する OCM 内のメモリ位置をク リ アします。

CPU1 用アプリ ケーシ ョ ンは、 手順 3 ~手順 5 を無限に繰り返します。

プロセッサ間の通信

サンプル デザインではプロセッサ間の通信にセマフォ フラグを使用します。 セマフォが設定されてい

る場合、 CPU1 が UART を所有し、 CPU1 がセマフォをク リ アすれば、 CPU0 は UART を自由に使用

できます。 これは、 リ ソースを共有する簡単なメカニズムです。 セマフォ フラグの格納先と して OCMメモ リ を選択したのは、 共有リ ソースであ り、 かつレイテンシが短いためです。 さ らに、 OCM のこの

領域はキャッシュされないため、 メモ リへのアクセスが確定的になり ます。

DDR メモ リ をセマフォに使用する と、 キャ ッシュ ミ スの場合にアクセス レイテンシが大き くなる と共

に、バッ クグラウンドの リ フレッシュ サイ クルが原因でアクセス確定的でなくな り ます。 さ らに、DDRメモ リ アクセスには 「バース ト的」 な性質があるため、32 ビッ トの値 1 つにアクセスする場合にも、書

き込みまたは読み出しバース トが発生し、 時間を浪費する可能性があ り ます。

リファレンス デザイン

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

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

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

Page 6: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

リファレンス デザイン

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 6

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

• XPS プロジェク ト

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

• 生成済みファイル

• BIT ファ イル

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

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

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

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

• 変更済みの sw_apps FSBL

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

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

パラメーター 説明

全般

開発者 John McDougall

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

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

ソース コードの提供 あ り

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

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

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

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

なし

シミ ュレーシ ョ ン

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

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

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

ンチの利用

なし

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

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

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

インプリ メンテーシ ョ ン

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

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

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

ハードウェア検証

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

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

Page 7: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 7

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

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

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

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

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

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

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

ハードウェアの生成

このセクシ ョ ンでは、 ハード ウェア デザインの生成方法を説明します。

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 にエクスポート します。

4. [Export & Launch SDK] をオンにします。

こ こで、 XPS は system.xml ファ イルを使用してエンベデッ ド システムのコンフ ィギュレーシ ョ

ンをエクスポート します。SDK は、このファイルによってデザインに含まれるペリ フェラルとベー

ス アドレスを把握します。 このファイルは、 ディ レク ト リ design\work\edk_system\SDK\SDK_Export\hw に自動的にエクスポート されます。

5. SDK でワークスペースの場所を尋ねるダイアログ ボッ クスが表示されます。 参照ボタンをク リ ッ

ク して、 ディ レク ト リ design\work\edk_system\SDK を選択します。

6. [OK] をク リ ッ ク します (1 回)。

7. 選択したディ レク ト リの最後に \Workspace を追加します (図 2)。

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

パラメーター 仕様/詳細

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

GCLK バッファー数 2

PS7 1

RAMB36 1

HDL 言語のサポート Verilog、 VHDL

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

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

パッケージマップ前

(合成制約)配線後 スライス数

XC7Z020 -1 CLG484 240MHz 146MHz 251 (1%)

Page 8: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 8

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

SDK によってサブディレク ト リ \Workspace が自動的に作成されます。

アプリケーシ ョ ンの生成

SDK の設定

このアプ リ ケーシ ョ ン ノートには、 スタンドアロン BSP ファ イル (ベアメ タル アプリ ケーシ ョ ンが使

用) と変更済みの FSBL ソース ファ イルが付属しています。 これらのファ イルの情報を使用するには、

新しいリポジ ト リ を認識するよ うに SDK を設定する必要があ り ます。

SDK を設定するには、 次の手順に従います。

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

注記 : エクスポートおよび SDK の起動に XPS を使用した場合は、 この手順は不要です。

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

るよ うにします。

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

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

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

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

X-Ref Target - Figure 2

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

X1079_02_020613

Page 9: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 9

[Preferences] ウ ィンド ウが表示されます (図 3)。

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

カスタム FSBL はリポジ ト リの新規テンプレート を使用して作成します。

注記 : 次に進む前に、 「SDK の設定」 で説明した手順に従い SDK を設定しておく必要があ り ます。

カスタム FSBL アプリ ケーシ ョ ンを作成するには、 次の手順に従います。

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

X-Ref Target - Figure 3

図 3 : リポジト リの選択

X1079_03_020613

Page 10: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 10

2. [Project Name] に 「amp_fsbl」 と入力します (図 4)。

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

X-Ref Target - Figure 4

図 4 : カスタム FSBL の作成

X1079_04_020713

Page 11: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 11

4. [Available Templates] から [Zynq FSBL for AMP] を選択します (図 5)。

注記 : リ ス トに上記のテンプレートが表示されない場合は、 リポジ ト リが正し く設定されているこ とを

確認して ください。

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

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

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

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

ケーシ ョ ン ELF の作成方法について説明します。

注記 : アプリ ケーシ ョ ンはコンパイル済みであ り、

design\generated_files\SDK_apps\app_cpu0.elf にあ り ます。

CPU0 用アプリ ケーシ ョ ンを作成するには、 次の手順に従います。

1. SDK を起動します。

X-Ref Target - Figure 5

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

X1079_05_020613

Page 12: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 12

2. [File] → [New] → [Application _project] をク リ ッ ク します。

3. [Project name] を 「app_cpu0」 に変更します (図 6)。

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

X-Ref Target - Figure 6

図 6 : app_cpu0 の作成

X1079_06_020613

Page 13: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 13

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

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

X-Ref Target - Figure 7

図 7 : CPU0 用の空のアプリケーシ ョ ン

X1079_07_030113

Page 14: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 14

7. [Project Explorer] タブで [app_cpu0] を展開し、 [src] フォルダーを右ク リ ッ ク します (図 8)。X-Ref Target - Figure 8

図 8 : CPU0 のインポート

X1079_08_020613

Page 15: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 15

8. [General] → [File System] をク リ ッ ク します (図 9)。

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

10. 参照ボタンをク リ ッ ク し、 ディ レク ト リ design\src\apps\app_cpu0 を選択します (図 10)。

X-Ref Target - Figure 9

図 9 : CPU0 の [General] - [File System]

X-Ref Target - Figure 10

図 10 : CPU0 のインポート元ディ レク ト リの選択

X1079_09_020613

X1079_10_020613

Page 16: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 16

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

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

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

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

15. ポップアップ ウ ィンド ウで [Yes] をク リ ッ ク し、 lscript.ld を上書きします。

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

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

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

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

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

この手順は CPU0 用アプリ ケーシ ョ ンの作成方法とは若干異なり ます。このデザインに関して重要な点

は、 CPU1 は ICD や SCU などの共有リ ソースにはアクセスできないこ とです。 デザイン付属のリポジ

ト リにある、 カスタマイズされたスタンドアロン BSP を使用し、 SDK によって BSP を作成します。

注記 : アプリ ケーシ ョ ンはコンパイル済みであ り、

design\generated_files\SDK_apps\app_cpu1.elf にあ り ます。

アプリ ケーシ ョ ン作成の準備と して、 次の手順に従います。

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

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

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

X-Ref Target - Figure 11

図 11 : CPU0 のインポート対象ファイルの選択

X1079_11_020613

Page 17: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 17

4. [Board Supprot Package] を [standalone_amp] に変更します (図 12)。

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

6. [Overview] → [Drivers] → [cpu_cortexa9] をク リ ッ ク します。

7. [extra_compiler_flags] に -DUSE_AMP=1 を追加します (図 13)。

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

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

は、 次の手順に従います。

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

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

X-Ref Target - Figure 12

図 12 : CPU1 の BSP

X1079_12_020613

X-Ref Target - Figure 13

図 13 : CPU1 BSP への USE_AMP の追加

X1079_13_020613

Page 18: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 18

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

4. [Board Support Package] を [Use existing] に変更します。

5. [app_cpu1_bsp] を選択します (図 14)。

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

7. [Empty Application] テンプレート を選択します。

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

9. [Project Explorer] タブで [app_cpu1] を展開します。

10. [src] を右ク リ ッ ク して、 ポップアップ メニューから [Import] をク リ ッ ク します。

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

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

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

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

X-Ref Target - Figure 14

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

X1079_14_020613

Page 19: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 19

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

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

17. ポップアップ ウ ィンド ウで [Yes] をク リ ッ ク して、 lscript.ld を上書きします。

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

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

ブート ファイルの生成

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

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

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

ンの ELF も BOOT.BIN に含まれます。

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

または ELF フ ァ イルのダウ ン ロー ド を停止する よ う に FSBL を ト リ ガーするための

cpu1_bootvec.bin と呼ばれるファイルがあ り ます。

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

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

1. FSBL ELF

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

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

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

X-Ref Target - Figure 15

図 15 : CPU1 のインポート対象ファイルの選択

X1079_15_020613

Page 20: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 20

コンパイル済みの 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 またはバイナリ ファイルのロードを停止して、最初に

ダウンロード した 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. 生成された CPU0 用ベアメ タル アプリ ケーシ ョ ンを design\work\edk_system\SDK\Workspace\app_cpu0\Debug\app_cpu0.elf から design\work\bootgen にコピーします。

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

design\generated_files\SDK_apps\app_cpu0.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 にコピーがあ り ます。

6. ISE Design Suite のコマンド プロンプ ト を開きます。

このコマンド プロンプ トでは、 ザイ リ ンクス ツール向けの環境設定が可能です。

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

8. createBoot.bat ファ イルを実行します。

これで、 現在のディ レク ト リ (bootgen) に BOOT.BIN が作成されます。

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

SD カードに design\work\bootgen\BOOT.BIN ファ イルをコピーします。

注記 : BOOT.BIN を生成する前述の手順を実行しなかった場合は、

design\generated_files\boot\BOOT.BIN にコンパイル済みのファイルがあ り ます。

Page 21: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 21

デザインの実行

ハードウェア要件

• ZC702 評価ボード

• 12V AC アダプター電源

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

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

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

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

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

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

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

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

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

デザインに電源を投入する と、 ボードが SD カードからブート します。 UART にシステムの出力が現れ

はじめるまで最大 18 秒かかり ます。 この UART はサードパーティ提供のド ライバーを使用します。 詳

細は、 『Zynq-7000 All Programmable SoC : ZC702 評価キ ッ ト およびビデオ/画像処理キ ッ ト (ISEDesign Suite 14.3) スタート アップ ガイ ド』 を参照してください。

ファ イルが適切に作成されていれば、シ リ アル ポートに交互に出力される 「CPU0: Hello World CPU0」と 「CPU1: Hello World CPU1」 とい う文字列が表示されます (図 16)。

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

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

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

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

その実行を開始し ます。 FSBL は BIT フ ァ イル、 CPU0 と CPU1 の ELF、 そしてダ ミ ー フ ァ イル

cpu1_bootvec.bin をロード します。こ こで、CPU0 上で動作中の FSBL は、FSBL の次に最初にロー

ド されたアプリ ケーシ ョ ンの実行アドレスにジャンプします。 CPU0 は app_cpu0.elf の実行を開始

する と、 CPU1 アプリ ケーシ ョ ンの開始アドレス (0x00200000) を OCM の 0xFFFFFFF0 に書き込み

ます。次に、アセンブリ命令 SEV を実行して CPU1 をウェークアップするイベン ト を設定します。ブー

X-Ref Target - Figure 16

図 16 : 端末出力

X1079_16_020713

Page 22: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 22

ト ローダーは FSBL の実行を開始する前に、0xFFFFFF00 に小さなアプリ ケーシ ョ ンを生成して CPU1のプログラム カウンターをこの位置に設定済みです。 このアプリ ケーシ ョ ンは 0xFFFFFFF0 の内容を

確認し、 0 の場合は Wait For Event (WFE) 命令を実行します。 イベン トの発生ごとに CPU1 はウェー

クアップして 0xFFFFFFF0 に 0 以外の値が格納されていないかを確認するループを再実行します。0 以外の値が検出される と CPU1 はただちに 0xFFFFFFF0 から読み出されたアドレス位置にジャンプしま

す。 この例の場合の値は 0x00200000 です。 これは app_cpu1 アプ リ ケーシ ョ ンの リ ンカー スク リプ

ト lscript.ld に定義された、 CPU1 アプリ ケーシ ョ ンの開始アドレスです。

CPU1 への割り込み生成には ChipScope Analyzer の VIO コアを使用します。デザインには、 IRQ 信号

をモニターするために ChipScope ILA (Integrated Logic Analyzer) コアも含まれています。

次の手順では、 ILA コアを使用して IRQ 信号のアクティブ状態の時間 (IRQ のレイテンシを示す) を測

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

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

2. JTAG チェーンに接続します。

ChipScope Analyzer はチェーン内の 2 つのデバイス (ARM_DAP と XC7Z020) を表示します。

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

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

ファ イルを開きます。

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

6. design\src\chipscope\csdefaultproj.cpj にある ChipScope Analyzer のコンフ ィギュ

レーシ ョ ン ファイルを参照します。

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

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

8. ChipScope Analyzer の [VIO Console] を選択します。

9. [SyncOut[0]] ボタンをク リ ッ ク します (図 17)。 図 17 には、 SyncOut[0] ボタンをク リ ッ クするこ

とで生成された割り込みの波形も示されています。

CPU1 は割り込みを処理し、グローバル フラグをセッ ト します。CPU1 の main() は「CPU1: HelloWorld With Interrupt CPU 1」 を出力します (図 18)。

X-Ref Target - Figure 17

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

X1079_17_020613

Page 23: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 23

仮想ボタンのク リ ッ クご とに割り込みが生成され、 CPU1 の IRQ サービス ルーチンはグローバル変数

を設定します。 この変数は、 CPU1 の main() 関数が CPU1 からの print 出力を変更するために使用し

ます。図 19 に示すよ うに、IRQ サービス ルーチンは最初の割り込みの処理後にキャッシュされるため、

後続の IRQ では割り込みレイテンシが大幅に短くなり ます。

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

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

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

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

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

X-Ref Target - Figure 18

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

X-Ref Target - Figure 19

図 19 : ChipScope Analyzer による後続の IRQ のキャプチャ

X1079_18_020713

X1079_19_020713

Page 24: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 24

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

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

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

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

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

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

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

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

デザインのデバッグ

両方の CPU でタンデムに実行されているアプ リ ケーシ ョ ンの接続とデバッグには SDK を使用できま

す。 XMD は、 コマンド シェルおよび JTAG ケーブルを介して CPU に接続する GDB サーバーを提供

します。 通常、 アプ リ ケーシ ョ ンのデバッグを開始する と、 SDK が自動的に XMD をバッ クグラウン

ドで起動します。 このサンプル デザインでは、 XMD を手動で起動して CPU0 と CPU1 の両方に接続

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

FSBL を使用してデザインをブート したため、 PS レジスタの再初期化は不要です。 両方の CPU を同時

にデバッグするため、 PS 全体を リセッ ト しないよ うに注意します。

デザインのデバッグを準備する手順は次のとおりです。

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

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

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

す。

3. コマンド シェルのプロンプ トで 「xmd」 と入力します。

4. XMD のプロンプ トで、 コマンド connect arm hw を入力します。

XMD は TCP ポート番号 1234 を介して応答します (図 20)。

5. connect arm hw -debugdevice cpunr 2 コマンドを入力します。

XMD は TCP ポート番号 1235 を介して応答します (図 21)。

X-Ref Target - Figure 20

図 20 : XMD の CPU0 への接続

X1079_20_0120713

Page 25: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 25

現在 2 つの GDB サーバーが動作中であ り、 TCP ポート 1234 と 1235 を待ち受けています。 XMD が接続される と CPU が停止し、 端末への出力が停止します。

X-Ref Target - Figure 21

図 21 : SMD の CPU1 への接続

X1079_21_020713

Page 26: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 26

CPU0 のデバッグを開始するには、 次の手順に従います。

1. SDK の [Project Explorer] ウ ィンド ウで [app_cpu0] を右ク リ ッ ク し、 [Debug As] →

[debug_configurations] をク リ ッ ク します (図 22)。X-Ref Target - Figure 22

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

X1079_22_012413

Page 27: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 27

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

します (図 23)。

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

3. [Device Initialization] タブをク リ ッ ク します。

X-Ref Target - Figure 23

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

X1079_23_020713

X-Ref Target - Figure 24

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

X1079_24_012413

Page 28: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 28

4. [Path to initialization TCL file] の内容を削除します (FSBL によって初期化は既に完了しているた

め) (図 25)。

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

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

続するよ うに SDK に指示します。

X-Ref Target - Figure 25

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

X1079_25_012413

Page 29: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

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

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 29

IP アドレスはデフォルトの loclahost に、 ポートは 1234 に設定する必要があ り ます (図 26)。

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

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

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

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

ン トでアプリ ケーシ ョ ンが停止します。 場合によっては main() の先頭でアプリ ケーシ ョ ンが自動

的に停止しません。その場合は、[Pause] (サスペンド ) をク リ ッ クする必要があ り ます。SDK によっ

て main() の先頭に手動でブレーク ポイ ン ト を設定し、 PC (プロ グ ラ ム カ ウ ン ター ) を

0x00100000 に変更した うえで [Resume] をク リ ッ クすれば CPU0 上のアプリ ケーシ ョ ンを再開で

きます。

10. アプリ ケーシ ョ ンの実行を再開するには、 [Resume]、 [Single Step]、 その他のデバッグ ボタンをク

リ ッ ク します。

CPU0 のデバッグ中に CPU1 のデバッグを開始するには、 次の手順に従います。

1. [SDK] ウ ィンド ウの [C/C+ View] を選択します。

2. [Project Explorer] ウ ィンド ウで [app_cpu1] を右ク リ ッ ク し、 [Debug As] → [debug_configurations]をク リ ッ ク します。

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

します。 コンフ ィギュレーシ ョ ン名は自動的に 「app_cpu1 Debug」 に設定されます。

4. [DeXvice Initialization] タブをク リ ッ ク します。

5. [Path to initialization TCL file] の内容を削除します (CPU0 と FSBL によって初期化は既に完了してい

るため)。

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

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

続するよ うに SDK に指示します。

X-Ref Target - Figure 26

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

X1079_26_012413

Page 30: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

まとめ

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 30

IP アドレスはデフォルトの loclahost に、 ポートは 1235 に設定する必要があ り ます。

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

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

アプリ ケーシ ョ ンがダウンロード され、 実行されます。 main() 関数の最初の実行可能行に設定さ

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

10. アプリ ケーシ ョ ンの実行を再開するには、 [Resume]、 [Single Step]、 その他のデバッグ ボタンをク

リ ッ ク します。

[Debug] ビューの [Thread] の下に一覧表示された関数を選択するこ とで、 任意の箇所で CPU0 および

CPU1 のデバッグに対するフォーカスを切り換えるこ とができます。 各関数を選択する と、 表示される

ソースが変化します (図 27)。

まとめ このサンプル デザインは、 Zynq-7000 AP SoC をブート し、 それぞれ独立したベアメ タル アプ リ ケー

シ ョ ンを実行する 2 つの Cortex-A9 プロセッサの起動方法を示すものです。 CPU1 上で動作するオー

バーヘッ ドが少ないベア メ タル アプ リ ケーシ ョ ンを使用して PL から生成される割り込みを処理し、

CPU0 上で動作するベアメ タル アプリ ケーシ ョ ンに通知します。

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

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

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

X-Ref Target - Figure 27

図 27 : [Debug] ビュー

X1079_27_012413

Page 31: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

改訂履歴

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 31

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

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.3http://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.

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.

日付 バージョ ン 内容

2013 年 4 月 3 日 1.0 初版

Page 32: シンプルな AMP : 2 つの Cortex-A9 プロセッサ シス …...実行できる 2 つの Cortex®-A9 プロセッサを搭載しています。このアプリケーションノートでは、両プ

Automotive Applications Disclaimer

XAPP1079 (v1.0) 2013 年 4 月 3 日 japan.xilinx.com 32

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

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

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

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

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

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

ご了承ください。