ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと...

32
XAPP1093 (v1.0) 2013 7 8 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. AMBA, AMBA Designer, ARM, ARM1176JZ-S, CoreSight, Cortex, and PrimeCell 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 つの Cortex®-A9 プロセッサを搭載しています。 Zynq SoC のプログラマブル ロジックに は、 MicroBlaze™ エンベデッ ド プロセッサも搭載されています。 このアプリケーション ノ ー ト では、 1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、 各々に独立したベアメ タル ソフ トウェア アプ リ ケーシ ョ ンを実行させる と共に、共有メ モ リ を介して両者間の通信を可能にする方法に ついて説明します。 含まれるシステム デザインは、 Xilinx Platform Studio (XPS) 14.5 によって作成および構築されており、 ザイ リンクスの ソ フ ト ウ ェ ア開発キ ッ ト (SDK) を使用して構築されたソフ ト ウェアを含みます。このアプリ ケーシ ョ ン ノートにはプロジェクト フ ァ イルがすべて付属し、 これら をデザイ ンの検討や再構築に活用した り 、 新 規デザイン着手時のテンプレート として使用したりできます。 Zynq-7000 ZC702 デモ プ ラ ッ ト フ ォーム を タ ーゲ ッ ト と し て事前に構築、 イ ンプ リ メ ン ト さ れた フ ァ イルも用意されているため、ハードウェア、 ソフト ウェア、 またはブート ファイルのターゲッ トを再作 成する手順を省略できます。このデザインでは、CES シリコンを搭載した ZC702 rev. C ボー ド と rev. C シリコンを搭載した ZC702 rev. 1.0 ボードを使用します。 はじめに Zynq-7000 AP SoC は、同 じ メ モ リ と ペ リ フ ェ ラ ル を共有す る 2 つの Cortex-A9 プロセッサを搭載して い ま す。 こ の 共 有 メ モ リ と ペ リ フ ェ ラ ル に は、 プ ロ グ ラ マ ブ ル ロジック (PL) 内に搭載された MicroBlaze プロセッサからアクセス可能です。 非対称型マルチプロセッシング (AMP) と は、 複数のプ ロセッサがそれぞれのオペレーティ ング システムまたはベアメタル アプリケーションを実行できるよ うにするメカニズムであり、 共有リ ソースを介してこれらのアプリケーションを緩やかに結合させるこ ともできます。 リファレンス デザインには、 1 つの Cortex-A9 プロセッサと 1 つの MicroBlaze プロセッサを AMP ンフィギュレーションで動作させるために必要なハードウェアとソフト ウェアが含まれます。 このデザ インでは、 2 つ目の Cortex-A9 プロセッサ (CPU1) は使用し ません。 各 CPU は、 それぞれ独自のス タ ン ド ア ロ ン環境下でベア メ タ ル アプ リ ケーシ ョ ンを実行し ます。 2 つの CPU が共有ハー ド ウ ェ ア ソース上で競合しないよ う に対策が講じ られています。 このアプ リ ケーシ ョ ン ノ ー ト では、 ブー ト 可能 な ソ リ ュ ーシ ョ ン の作成方法 と 両 CPU のデバッグ方法についても説明します。 このアプリケーション ノ ー ト には、 次のよ う な下位レベルの機能があ り ます。 複数のプロセッサを同時にデバッグする SDK MicroBlaze プロセッサによる、 高性能 (HP) ポートを介した Zynq SoC DDR3 へのアクセス MicroBlaze プロセッサによる、 スレーブ汎用ポート (S_GP0) を介した Zynq SoC プロセッシング システム (PS) のペリフェラルおよびオンチップ メモリ (OCM) へのアクセス MicroBlaze プロセッサのベクター テーブルの再配置 MicroBlaze 高速割 り 込み 制御ロジックに対する ChipScope™ Analyzer Virtual Input/Output (VIO) ChipScope Analyzer ILA (Integrated Logic Analyzer) を使用した割り込みレイテンシの測定 アプリケーション ノート : Zynq-7000 AP SoC XAPP1093 (v1.0) 2013 7 8 シンプルな AMP : Zynq SoC Cortex-A9 ベア メタル システムと MicroBlaze プロセッサ 著者 : John McDougall

Transcript of ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと...

Page 1: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

XAPP1093 (v1.0) 2013 年 7 月 8 日 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. AMBA, AMBA Designer, ARM, ARM1176JZ-S, CoreSight, Cortex, and PrimeCell 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 つの Cortex®-A9 プロセッサを搭載しています。Zynq SoC のプログラマブル ロジッ クに

は、 MicroBlaze™ エンベデッ ド プロセッサも搭載されています。 このアプ リ ケーシ ョ ン ノートでは、

1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、 各々に独立したベアメ タル ソフ

ト ウェア アプリ ケーシ ョ ンを実行させる と共に、共有メモリ を介して両者間の通信を可能にする方法に

ついて説明します。

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

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

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

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

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

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

成する手順を省略できます。このデザインでは、CES シ リ コンを搭載した ZC702 rev. C ボード と rev. Cシ リ コンを搭載した ZC702 rev. 1.0 ボードを使用します。

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

います。 こ の共有 メ モ リ と ペ リ フ ェ ラルには、 プロ グ ラマブル ロ ジ ッ ク (PL) 内に搭載された

MicroBlaze プロセッサからアクセス可能です。 非対称型マルチプロセッシング (AMP) とは、 複数のプ

ロセッサがそれぞれのオペレーティング システムまたはベアメ タル アプリ ケーシ ョ ンを実行できるよ

うにする メカニズムであ り、 共有リ ソースを介してこれらのアプリ ケーシ ョ ンを緩やかに結合させるこ

と もできます。

リ ファレンス デザインには、 1 つの Cortex-A9 プロセッサと 1 つの MicroBlaze プロセッサを AMP コンフ ィギュレーシ ョ ンで動作させるために必要なハード ウェアと ソフ ト ウェアが含まれます。 このデザ

インでは、 2 つ目の Cortex-A9 プロセッサ (CPU1) は使用しません。 各 CPU は、 それぞれ独自のスタ

ン ドアロン環境下でベアメ タル アプ リ ケーシ ョ ンを実行します。 2 つの CPU が共有ハード ウェア リソース上で競合しないよ うに対策が講じられています。 このアプリ ケーシ ョ ン ノートでは、ブート可能

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

このアプリ ケーシ ョ ン ノートには、 次のよ うな下位レベルの機能があ り ます。

• 複数のプロセッサを同時にデバッグする SDK

• MicroBlaze プロセッサによる、 高性能 (HP) ポート を介した Zynq SoC DDR3 へのアクセス

• MicroBlaze プロセッサによる、 スレーブ汎用ポート (S_GP0) を介した Zynq SoC プロセッシング

システム (PS) のペリ フェラルおよびオンチップ メモ リ (OCM) へのアクセス

• MicroBlaze プロセッサのベクター テーブルの再配置

• MicroBlaze 高速割り込み

• 制御ロジッ クに対する ChipScope™ Analyzer Virtual Input/Output (VIO)

• ChipScope Analyzer の ILA (Integrated Logic Analyzer) を使用した割り込みレイテンシの測定

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

XAPP1093 (v1.0) 2013 年 7 月 8 日

シンプルな AMP : Zynq SoC Cortex-A9 ベアメ タル システムと MicroBlaze プロセッサ著者 : John McDougall

Page 2: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

デザインの概要

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 2

デザインの概要 リ ファレンス デザインでは、Cortex-A9 プロセッサ (CPU0) と MicroBlaze プロセッサ (MB0) がそれぞ

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

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

• システムの初期化

• PL のリセッ トの解放

• MB0 との通信

• MB0 との UART の共有

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

• CPU0 との通信

• PL にあるコアからの割り込みの処理

• CPU0 との UART の共有

Zynq SoC PS には、 CPU0 専用のリ ソースと MB0 からアクセス可能なリ ソースがあり ます。デザインを

AMP コンフ ィギュレーシ ョ ンで動作させる場合、2 つの CPU が共有リ ソース上で競合しないよ うに注意

する必要があり ます。共有リ ソースと専用リ ソースの詳細は、『Zynq-7000 All Programmable SoC テクニ

カル リ ファレンス マニュアル』 [参照 1] を参照してください。 共有または専用リ ソースの管理手法には

アプリケーシ ョ ン固有のものもあり ますが、このリ ファレンス デザインで使用している手法の多くは、基

本的にそのまま利用できます。

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

• L1 キャ ッシュ

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

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

• プライベート タイマー

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

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

• DDR メモ リ

• OCM

• グローバル タイマー

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

• UART0

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

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

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

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

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

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

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

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

• DDR メモ リ : CPU0 が認識できる メモ リ範囲を 0x00100000 ~ 0x2FFFFFFF に限り ます。 MB0は、ベアメ タル アプリ ケーシ ョ ンの実行に 0x30000000 ~ 0x3FFFFFFF の DDR メモ リ範囲を使

用します。

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

Page 3: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

デザインの概要

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 3

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

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

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

り込み要因を作成できます。 このコアに ChipScope Analyzer VIO コアの出力を接続すれば、 ユーザー

は MB0 に対する割り込みをいつでも生成可能です。 また、 ChipScope Analyzer VIO コアを使用する

と、 割り込みがいつ発生するかをよ り正確に制御できるため、 割り込みレイテンシの測定が容易になり

ます。 ただし、 このコアはデザインでは現実的には使用されません。 実用的な割り込みは、 ダイレク ト

メモ リ アクセス (DMA) エンジンなど PL 内で実際に機能を果たすロジッ クから生成されます。

ハードウェア

PL には、 MicroBlaze プロセッサと、 そして ChipScope Analyzer VIO コアの同期出力に接続されたカ

スタム エンベデッ ド コアが含まれます (図 1)。VIO コアは、ユーザーが ChipScope Analyzer からハー

ド ウェアを制御する メカニズムを提供します。

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

続された axi_intc コアに転送します。 カスタム コアは AXI インターコネク ト を介して MB0 のデータ

ポート (M_AXI_DP) にも接続されるため、 MB0 がコア内の制御レジスタにアクセスできます。 MB0は割り込みサービス ルーチン内で割り込み要求 (IRQ) をク リ アするために制御レジスタにアクセスし

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

X-Ref Target - Figure 1

図 1 : ブロック図

PS

AXI Interconnect(axi_interconnect_mb)

AXI Interconnect(axi4lite_mb_0)

ILA

MicroBlaze Processor

M_AXI_IC M_AXI_DC

HP0

DDR Multi-portController

DDR3

HP1S_GP0

Irq_gen GPIOVIO Axi_Intc MDM

M_AXI_DP

IRQ

X1093_01_070813

Proc_sys_reset Clock_generator

Page 4: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

デザインの概要

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 4

す。デザインには ChipScope Analyzer の ILA コアも含まれているため、ユーザーは処理中の IRQ のレ

イテンシを測定できます。

アドレス マップ

MB0 から見る と、0x30000000 ~ 0x3FFFFFFF のアドレス範囲に対するすべての命令フェッチまたは

データ フェッチは、MicroBlaze プロセッサの M_AXI 命令およびキャッシュ ポートから PS の HP0 および HP1 ポー ト に転送されます。 このア ド レス範囲外へのアクセスは、 MicroBlaze プロセッサの

M_AXI_DP データ ポート を介して転送されます。

表 1 に、 MicroBlaze プロセッサから見たアドレス マップを示します。

表 2 に、0x50000000 をベース アドレス とする IRQ_GEN カスタム コアのレジスタの説明を示します。

ソフ トウェア

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

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

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

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

FSBL

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

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

表 1 : MicroBlaze のアドレス マップ

アドレス範囲 デバイス/ペリフェラル

0x30000000–0x3FFFFFFF MB0 のキャ ッシュから HP ポート を介した PS DDR へのアクセ

ス。 HP ポートから PS DDR へのアクセスの詳細は、 『Zynq-7000All Programmable SoC テクニカル リ ファレンス マニュアル』 [参照 1] を参照してください。

0x40000000–0x4000FFFF 4 ビッ ト LED アクセス用の GPIO

0x41000000–0x4100FFFF MicroBlaze 割り込みコン ト ローラー

0x42000000–0x4200FFFF MicroBlaze デバッグ モジュール

0x50000000–0x5000FFFF IRQ_GEN カスタム コア

0xE0001000–0xE0001FFF PS UART1

0xFFFF0000–0xFFFF0000 PS の S_GP0 ポート を介した PS OCM へのアクセス

表 2 : IRQ_GEN 制御レジスタ

ビッ ト アクセス 説明

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

[0] R/W IRQ のアサート

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

1 : MB0 割り込みコン ト ローラーに対して IRQ がアサート されて

います。 VIO によって VIO_IRQ_TICK ピンがアサート される と、

このビッ ト がセッ ト されます。 MB0 によってセッ ト される こ と も

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

MB0 のみです。

Page 5: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

デザインの概要

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 5

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

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

行します。 CPU0 は共有リ ソースの初期化を実行し、 PL のリセッ ト を解除して MB0 を起動します。

CPU0 用アプリケーシ ョ ン

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

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

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

1. OCM の 256KB すべてをアドレス マップの最上位 (0xFFFC0000 ~ 0xFFFFFFFF) に再マッピン

グし、CPU0 のアドレス マップの最下位で DDR メモ リ を有効にする DDR メモ リ フ ィルタ リ ング

を無効にします。OCM の再マッピングと DDR メモ リのフ ィルタ リ ング機能の詳細は、『Zynq-7000All Programmable SoC テクニカル リ ファレンス マニュアル』 [参照 1] を参照してください。

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

よ うに MMU を設定します。

3. PL のリセッ ト を解放します。

4. 「CPU0: Hello World」 を UART に出力します。

5. UART TX FIFO が空になるまで待機します。

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

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

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

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

0xFFFFFFF0 に特定の値が格納されていないかを確認してループを続行します。 0xFFFFFFF0 に特定の

値が含まれていない場合、 CPU1 はフェッチされたアドレスにジャンプします。 このアプリ ケーシ ョ ン

ノートでは CPU1 は使用されないため、 このコードはイベン ト ループの待機を無限に実行し続けます。

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

このデザインの MicroBlaze プロセッサには、 メモ リ位置 0x30000000 を リセッ ト ベクターと して使

用するよ うに MB0 に指示するパラ メーター C_BASE_VECTORS=0x30000000 が指定されています。

CPU0 が PL のリセッ ト を解除する と、 MB0 は 0x30000000 にあるコードの実行を開始します。 MB0の ELF は、 FSBL によって 0x30000000 に置かれます。

MB0 用アプリケーシ ョ ン

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

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

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

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

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

3. 「MB0 : Waiting for IRQ」 を UART に出力します。

4. 割り込みサービス ルーチンが変数 irq_count をインク リ メン トするまで待機します。

5. 「MB0 : IRQ Acknowledged」 を UART に出力し、 変数 irq_count をク リ アします。

6. UART TX FIFO が空になるまで待機します。

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

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

Page 6: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

リファレンス デザイン

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 6

プロセッサ間の通信

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

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

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

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

MB0 は PS のスレーブ GP0 ポート を介して OCM にアクセスします。

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

に、 バッ クグラウンドの リ フレッシュ サイクルが原因でアクセス確定的でなくな り ます。 DDR メモ リ

へのアクセスは、 最小読み出しアクセスで連続する 8 ワードを読み出すため、 バース ト的になる性質が

あ り ます。 このため、 32 ビッ トの値 1 つにアクセスする場合にも読み出しバース トが発生し、時間を浪

費する可能性があ り ます。 さ らに、 各プロセッサ上で動作するソフ ト ウェアは、 共有データの変更後に

キャッシュをフラ ッシュして無効化し、 コ ヒーレンシを維持する必要があ り ます。

リファレンス デザイン

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

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

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

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

パラメーター 説明

全般

開発者 John McDougall

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

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

ソース コードの提供 あ り

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

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

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

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

なし

シミ ュレーシ ョ ン

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

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

論理シ ミ ュ レーシ ョ ンおよびタ イ ミ ング シ ミ ュ レー

シ ョ ンでのテス トベンチの利用

なし

テス トベンチの形式 なし

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

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

インプリ メンテーシ ョ ン

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

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

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

ハードウェア検証

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

検証に使用したハード ウェア プラ ッ ト フォーム CES シ リ コンの ZC702 rev. C ボード と rev. C シ リ コンの ZC702 rev. 1.0 ボード

Page 7: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 7

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

• XPS プロジェク ト

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

• 生成済みファイル

• BIT ファ イル

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

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

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

• 変更済みの sw_apps FSBL

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

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

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

は design とい うディ レ ク ト リ に解凍します。 ファ イルの解凍後、 design\work とい う名前の新規

ディ レク ト リ を作成します。 ファ イルは、 次のよ うにコピーします。

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

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

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

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

ハードウェアの生成

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

design\generated_files\system.bit にあるコンパイル済みデザインも使用できますが、 ハード

ウェア プラ ッ ト フォームを SDK にエクスポートするには、 次の手順に従う必要があ り ます。

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

design\work\edk_system\system.xmp

2. [Hardware] → [generate_bitstream] をク リ ッ ク します。

完了する と、 次の場所にダウンロード可能な FPGA BIT ファ イルが生成されます。

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

パラメーター 仕様/詳細

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

BUFG 3

DSP48E1 3

MMCME2_ADV 1

PS7 1

RAMB36 7

HDL 言語のサポート Verilog/VHDL

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

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

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

XC7Z020 -1 CLG484 176MHz 357MHz 2,155 (16%)

Page 8: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 8

design\work\edk_system\implementation\system.bit

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

design\generated_files\system.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)。

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

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

アプリケーシ ョ ンの生成

FSBL アプリケーシ ョ ンの作成

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

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

X-Ref Target - Figure 2

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

X1093_02_041713

Page 9: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 9

2. [Project name] に 「amp_fsbl」 と入力し、 [Processor] を 「ps7_cortexa9_0」 に変更します (図 3)。

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

X-Ref Target - Figure 3

図 3 : FSBL の作成

X1093_03_070813

Page 10: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 10

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

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\amp_fsbl.elf

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

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

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

注記 : アプリ ケーシ ョ ンはコンパイル済みであ り、design\generated_files\app_cpu0.elf にあ

り ます。

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

1. SDK を起動します。

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

X-Ref Target - Figure 4

図 4 : FSBL テンプレートの選択

X1093_04_061313

Page 11: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 11

3. [Project Name] を 「app_cpu0」 に変更し、 [Processor] を 「ps7_cortexa9_0」 に変更します (図 5)。

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

X-Ref Target - Figure 5

図 5 : app_cpu0 の作成

X1093_05_061413

Page 12: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 12

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

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

X-Ref Target - Figure 6

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

X1093_06_061313

Page 13: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 13

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

X-Ref Target - Figure 7

図 7 : CPU0 のインポート

X1093_07_061413

Page 14: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 14

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

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

X-Ref Target - Figure 8

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

X1093_08_061413

Page 15: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 15

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

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

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

X-Ref Target - Figure 9

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

X1093_09_061413

Page 16: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 16

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

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

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

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

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

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

このセクシ ョ ンでは、 FSBL によって DDR メモ リにロード され、 CPU0 によって PL のリセッ トが解

除された後に MB0 上で実行されるアプ リ ケーシ ョ ン ELF の作成方法について説明します。

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

design\generated_files\hello_world_mb.elf にあ り ます。

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

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

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

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

X-Ref Target - Figure 10

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

X1093_10_061413

Page 17: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 17

3. [Processor] が microblaze_0 に設定されているこ とを確認します (図 11)。

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

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

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

7. [Project Explorer] タブで [hello_world_mb] を展開します。

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

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

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

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

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

X-Ref Target - Figure 11

図 11 : MB0 用アプリケーシ ョ ンの作成

X1093_11_061413

Page 18: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 18

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

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

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

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

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

ブート ファイルの生成

ブート ファ イル (BOOT.BIN) には、 FSBL、 FPGA BIT ファ イル、 CPU0 上で実行されるアプ リ ケー

シ ョ ンの ELF、CPU1 上で実行されるアプリ ケーシ ョ ンの ELF が含まれます。デザイン ファ イルには、

バッチ ファ イルおよび BootGen コンフ ィギュレーシ ョ ン ファ イルが含まれています。 BootGen コン

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

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

1. FSBL ELF

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

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

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

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

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

ブート ファ イルを生成するには、 次の手順に従います。

X-Ref Target - Figure 12

図 12 : MB0 のインポート対象ファイルの選択

X1093_12_061413

Page 19: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 19

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

ディ レク ト リには、 BootGen バッチ ファ イル (createBoot.bat) と .bif ファ イル (bootimage.bif) が格納されます。

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

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

design\generated_files\amp_fsbl.elf にコピーがあ り ます。

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

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

design\generated_files\system.bit にコピーがあ り ます。

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

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

design\generated_files\app_cpu0.elf にコピーがあ り ます。

5. 生成された MB0 用ベアメ タル アプリ ケーシ ョ ンを design\work\edk_system\SDK\Workspace\hello_world_mb\Debug\hello_world_mb.

elf から design\work\bootgen にコピーします。

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

design\generated_files\hello_world_mb.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.BIN にコンパイル済みのファイルがあ り ます。

デザインの実行

ハードウェア要件

• 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.5) スタート アップ ガイ ド』 [参照 2] の 「TRD Demonstration Procedure」 に記載されたボード

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

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

Page 20: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 20

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

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

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

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

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

ファ イルが適切に作成されていれば、 CPU0 によって 「CPU0: Hello World」 と表示され、 それに続い

て MB0 によって 「MB0 : Waiting for IRQ」 と表示されます (図 13)。

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

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

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

にこのフラグがあ り ます。 ブート ローダーはこのファ イルを DDR メモ リにロード し、 その実行を開始

します。 FSBL は BIT ファ イル、 CPU0 の ELF、 MB0 の ELF をロード します。 こ こで、 CPU0 上で動

作中の FSBL は、FSBL の次に最初にロード されたアプリ ケーシ ョ ンの実行アドレスにジャンプします。

CPU0 は app_cpu0.elf の実行を開始する と、PL のリセッ トが解除され、MB0 が MB0 用アプリケー

シ ョ ンの実行を開始します。 MB0 にはパラ メーター C_BASE_VECTORS=0x30000000 が指定されて

いるため、 0x30000000 にある リセッ ト ベクターにジャンプし、 FSBL によってダウンロード済みのア

プリケーシ ョ ンの実行を開始します。 MB0 のアプリ ケーシ ョ ンの開始アドレスは、

hello_world_mb.elf アプリ ケーシ ョ ンの lscript.ld リ ンカー スク リプ トで定義されています。

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

をモニターするための ChipScope Analyzer ILA コアも含まれています。

次の手順では、 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. 次の場所にある ChipScope Analyzer のコンフ ィギュレーシ ョ ン ファ イルを参照します。

design\src\chipscope\cs.cpj

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

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

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

X-Ref Target - Figure 13

図 13 : 端末出力

X1093_13_061413

Page 21: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 21

9. [gen_irq] をク リ ッ ク します (図 14)。 この図には、 [gen_irq] をク リ ッ クするこ とで生成された割り

込みの波形も示されています。

MB0 は割り込みを処理し、 グローバル フラグ irq_count をインク リ メン ト します。 MB0 の main() は、

irq_count がセッ ト されるのを待機して処理された割り込みを検出する と、 「MB0 : IRQ Acknowledged」を出力し、 MB0 による UART の所有を CPU0 に通知するのに使用された OCM のメモリ位置をク リ ア

します。 CPU0 は、応答と して 「CPU0: Hello World」 を出力し、 OCM のメモリ位置をセッ ト して MB0に制御を戻します。 MB0 は OCM のメモリ位置がセッ ト されているこ とを検出し、 「MB0 : Waiting forIRQ」 を出力してから、 次の割り込みが発生するまで while() ループ内で待機します (図 15)。

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

設定します。 この変数は、 MB0 の main() 関数がコンソールへの print 出力を実行するために使用しま

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

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

X-Ref Target - Figure 14

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

X-Ref Target - Figure 15

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

X-Ref Target - Figure 16

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

X1093_14_061413

X1093_15_061413

X1093_16_061413

Page 22: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 22

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

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

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

ド コアによって生成されている割り込み信号をク リ アする と、 サービス ルーチンが終了します。 図 14では、割り込みのアサートからサービス ルーチンによる制御ビッ トのク リ アまでに 110 ク ロ ッ クの遅延

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

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

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

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

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

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

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

MicroBlaze プロセッサ上のローカル メモ リ バス (LMB) メモ リに移動します。

デザインのデバッグ

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

用できます。XMD (Xilinx Microprocessor Debug) は、コマンド シェルおよび JTAG ケーブルを介して

各プロセッサに接続する GDB サーバーを提供します。 通常、 アプ リ ケーシ ョ ンのデバッグを開始する

と、 SDK が自動的に XMD をバッ クグラウンドで起動します。 このサンプル デザインでは、 SDK 外で

XMD を手動で起動して CPU0 と MB0 の両方に接続します。 その後、 デバッグ中に各 XMD の GDBサーバーに接続するよ うに SDK に指示します。

FSBL を使用してデザインをブート したため、 PS レジスタの再初期化は不要です。 PS 全体を リセッ ト

する と PL も リセッ ト されるため、 2 つのプロセッサを同時にデバッグするには、 PS 全体を リセッ ト し

ないよ うに注意します。

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

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

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

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

ます。

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

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

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

Page 23: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 23

5. SDK で [Xilinx_Tools] → [Launch_shell] をク リ ッ ク して、も う 1 つのザイ リ ンクス コマンド シェ

ルを開きます。

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

7. コマンド connect mb mdm を入力します。

X-Ref Target - Figure 17

図 17 : XMD の CPU0 への接続

X1093_17_061413

Page 24: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 24

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

現在 2 つの GDB サーバーが動作中であ り、 TCP ポート 1234 と 1235 を待ち受けています。 XMD が各プロセッサに接続する と、 そのプロセッサは停止します。

X-Ref Target - Figure 18

図 18 : XMD の MB0 への接続

X1093_18_061413

Page 25: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 25

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

1. SDK の [Project Explorer] ウ ィンド ウで [app_cpu0] を右ク リ ッ ク し、 [Debug As] → [debug_configurations] をク リ ッ ク します (図 19)。

X-Ref Target - Figure 19

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

X1093_19_061413

Page 26: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 26

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

します (図 20)。

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

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

X-Ref Target - Figure 20

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

X1093_20_061313

X-Ref Target - Figure 21

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

X1093_21_061313

Page 27: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 27

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

るため) (図 22)。

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

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

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

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

X-Ref Target - Figure 22

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

X1093_22_061313

Page 28: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 28

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

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

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

アプリ ケーシ ョ ンがダウンロード され、 実行されます (FSBL によって ELF のダウンロードが既に完了

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

によっては main() の先頭でアプリ ケーシ ョ ンが自動的に停止しません。その場合は、 [Pause] (サスペン

ド ) をク リ ッ クする必要があ り ます。

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

ンをク リ ッ ク します。

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

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

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

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

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

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

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

に完了しているため)。

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

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

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

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

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

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

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

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

X-Ref Target - Figure 23

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

X1093_23_061313

Page 29: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

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

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 29

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

ンをク リ ッ ク します。

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

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

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

FSBL を使用しないデザインのデバッグ

22 ページの 「デザインのデバッグ」 では、 FSBL による PS の初期化、 DDR メモ リへの両方のアプリ

ケーシ ョ ンの書き込み、 PL のリセッ ト を解除する CPU0 のアプリ ケーシ ョ ンの実行の完了後にシステ

ムをデバッグするデバッグ手法について説明しました。

こ こでは、 FSBL を使用しないも う 1 つのデバッグ手法の手順について説明します。

1. SDK が現在デバッグ セッシ ョ ンに接続されている場合は、 次の手順に従います。

a. 各デバッグ エージェン ト を終了します。

b. 終了したセッシ ョ ンをすべて削除します。

X-Ref Target - Figure 24

図 24 : [Debug] ビュー

X1093_24_061413

Page 30: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

まとめ

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 30

c. XMD セッシ ョ ンをすべて終了します。

2. ChipScope Analyzer がケーブルに接続されている場合は、[JTAG Chain] → [Close Cable] をク リ ッ

ク します。

3. ZC702 ボードから SD カードを取りはずします。

4. ZC702 ボードの電源を再度オンにします。

5. [SDK Xilinx Tools] → [Program FPGA] をク リ ッ ク して FPGA をダウンロード します。

6. app_cpu0/src/main.c の行 60 と 61 のコ メン ト を削除します。

7. app_cpu0 用の新しいデバッグ コンフ ィギュレーシ ョ ンを作成し、 すべての設定値をデフォルトの

ままにします (つま り、[Reset Type] や [Path to initialization TCL file] は変更せず、[Remote Debug]は選択しない)。

8. 新しいデバッグ コンフ ィギュレーシ ョ ンを開始します。

SDK は XMD セッシ ョ ンを開始して PS に接続し、 PS7_init と init_user を実行した後、 ELF をダ

ウンロード し、 main() の最初の行に到達するまでアプリ ケーシ ョ ンを実行します。

9. 少なく と も PL がリセッ トから解除される行 68 を超えるまで、CPU0 用アプリ ケーシ ョ ンを通して

実行するか、シングル ステップ実行します。 PL がリセッ トから解除されないと、XMD は MB0 に接続できません。

10. 新しいシェルを開き、 XMD を起動して connect mb mdm コマンドを入力します。

注記 : SDK は CPU0 に接続したと きに既に XMD を起動しているため、 TCP ポートは 1235 にな

り ます。

11. SDK で、 hello_world_mb の既に作成済みのデバッグ セッシ ョ ンを開始します。

こ こで、 SDK は MB0 の ELF をダウンロード し、 CPU0 が 0x30000000 に配置したブートループ

を上書きします。 つづいて SDK はアプリ ケーシ ョ ンの実行を開始し、 main() 関数の最初の実行可

能行で停止します。

12. ChipScope Analyzer が現在起動している場合は、 JTAG ケーブルに再接続します。 ChipScopeAnalyzer が起動していない場合は、 それ起動して JTAG ケーブルに接続し、 ChipScope プロジェ

ク ト ファ イル cs.cpj を開きます。

MicroBlaze プロセッサが応答しなくなった場合は、MB0 の XMD コマンド ウ ィンド ウに次のコマンド

を入力します。

• stop

• rst

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

シ ョ ンを実行する Cortex-A9 プロセッサと MicroBlaze プロセッサを起動する方法を示すものです。

MB0 上で動作するオーバーヘッ ドが少ないベアメ タル アプリ ケーシ ョ ンを使用して、PL から生成され

る割り込みを処理し、 CPU0 上で動作するベアメ タル アプリ ケーシ ョ ンに通知します。

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

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

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

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

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

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

Page 31: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

改訂履歴

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 31

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

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

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

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

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

11. 『Zynq-7000 ベース ターゲッ ト リ ファレンス デザイン 14.5』 http://www.wiki.xilinx.com/Zynq+Base+TRD+14.5

12. 『MicroBlaze プロセッサ リ ファレンス ガイ ド』 (UG081)

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

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 年 7 月 8 日 1.0 初版

Page 32: ザイリンクス XAPP1093 シンプルな AMP : Zynq …...1 つの Cortex®-A9 プロセッサと MicroBlaze プロセッサを起動して、各々に独立したベアメタル

Automotive Applications Disclaimer

XAPP1093 (v1.0) 2013 年 7 月 8 日 japan.xilinx.com 32

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

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

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

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

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

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

ご了承ください。