Comments
Description
Transcript
シンプルな AMP : 2 つの Zynq SoC プロセッサ上で動作する
ア プ リ ケーシ ョ ン ノ ー ト : Zynq-7000 AP SoC シ ン プルな AMP : 2 つの Zynq SoC プ ロ セ ッ サ 上で動作する Linux およびベア メ タ ル シ ス テム XAPP1078 (v1.0) 2013 年 2 月 14 日 概要 著者 : John McDougall 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) にあ る コ アか ら の割 り 込みの処理 © 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. XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 1 デザイ ンの概要 • CPU0 上で動作す る Linux への割 り 込み イ ベン ト の通知 Zynq SoC プ ロ セ ッ シ ン グ シ ス テ ム (PS) には、各 CPU 専用の リ ソ ース と 両 CPU 間で共有 さ れ る リ ソ ー ス があ り ます。 デザ イ ン を AMP コ ン フ ィ ギ ュ レーシ ョ ンで動作 さ せる 場合、 2 つの CPU が共有 リ ソ ー ス上で競合 し ない よ う に注意す る 必要があ り ます。 共有 リ ソ ース と 専用 リ ソ ース の詳細は、 『Zynq-7000 All 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 Analyzer VIO コ ア を使用す る と 、 割 り 込みがいつ発生す る か を よ り 正確に制御で き る ため、 割 り 込みレ イ テ ン シ の測定が容易にな り ます。 ただ し 、 こ の コ アはデザ イ ン では現実的には使用 さ れません。 実用的な割 り 込みは、 ダ イ レ ク ト メ モ リ ア ク セ ス (DMA) エン ジ ン な ど PL 内で実際に機能を果たす ロ ジ ッ ク か ら 生 成 さ れます。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 2 デザイ ンの概要 ハー ド ウ ェ ア PL には、 ChipScope Analyzer VIO コ アの同期出力に接続 さ れた カ ス タ ム エンベデ ッ ド コ アが含まれ ます (図 1)。 VIO コ アは、 ユーザーが ChipScope Analyzer か ら ハー ド ウ ェ ア を制御す る メ カ ニズ ム を 提供 し ます。 X-Ref Target - Figure 1 ILA Irq_gen pcore VIO Core1_nIRQ PS AXI Interconnect M_AXI_GP0 X1078_01_011513 図 1 : PL のブ ロ ッ ク図 こ のデザ イ ンでは、 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 制御レ ジ ス タ の説明を示 し ます。 表 1 : IRQ_GEN 制御レ ジ ス タ ビッ ト ア ク セス [31:1] R/W [0] R/W 説明 未使用。 書 き 込まれた値を読み出 し 可能です。 IRQ のアサー ト • 0 : PS に対 し て IRQ はアサー ト さ れてい ません。 • 1 : PS に対 し て IRQ がアサー ト さ れてい ます。 VIO に よ っ て VIO_IRQ_TICK ピ ンがアサー ト さ れ る と 、 こ のビ ッ ト が セ ッ ト さ れます。 CPU に よ っ てセ ッ ト さ れ る こ と も あ り ま す。 こ のビ ッ ト への書 き 込みでビ ッ ト を ク リ アで き る のは CPU のみです。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 3 デザイ ンの概要 ソフ ト ウェア ソ フ ト ウ ェ アは、 次の 3 つの部分に分割で き ます。 • フ ァ ース ト ス テージ ブー ト ロ ーダー (FSBL) • CPU0 の Linux オペレーテ ィ ン グ シ ス テ ム と アプ リ ケーシ ョ ン • CPU1 のベア メ タ ル オペレーテ ィ ン グ シ ス テ ム と アプ リ ケーシ ョ ン FSBL FSBL は常に CPU0 上で動作 し ます。 こ れは、 PS のパ ワーオン リ セ ッ ト 後に最初に実行 さ れ る ソ フ ト ウ ェ ア アプ リ ケーシ ョ ンです。 FSBL は PL を プ ロ グ ラ ム し 、 両アプ リ ケーシ ョ ンの ELF (Executable and 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 はフ ェ ッ チ さ れた ア ド レ ス にジ ャ ンプ し ます。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 4 デザイ ンの概要 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 か ら 始 ま る メ モ リ 位置に配置 さ れ ま す。 開始 ア ド レ ス の設定には リ ン カー ス ク リ プ ト を使用 し ます。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 5 リ フ ァ レ ン ス デザイ ン 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 ス タ テ ィ ッ ク タ イ ミ ン グ解析の実施 あり XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 6 イ ン プ リ メ ン テーシ ョ ンの説明 表 2 : リ フ ァ レ ン ス デザイ ンの詳細 (続き ) パラ メ ー タ ー 説明 ハー ド ウ ェ ア検証 ハー ド ウ ェ ア検証の実施 あり 検証に使用 し たハー ド ウ ェ ア プ ラ ッ ト フ ォーム ZC702 ボー ド リ フ ァ レ ン ス デザ イ ンには、 次の フ ァ イ ルが含まれてい ます。 • XPS プ ロ ジ ェ ク ト • Linux お よ び CPU1 用アプ リ ケーシ ョ ンの SDK ソ ース フ ァ イ ル • 生成済みフ ァ イ ル • BIT フ ァ イ ル • SD カー ド 用の全フ ァ イ ル • Linux お よ び CPU1 用アプ リ ケーシ ョ ンの ELF フ ァ イ ル • BOOT.BIN ビル ド ス ク リ プ ト • 変更済みのベア メ タ ル BSP • 変更済みの sw_apps FSBL • 変更済みの devicetree.dts お よ び devicetree.dtb 表 3 と 表 4 にデバ イ ス使用率の詳細を示 し ます。 表 3 : デバイ ス使用率 (1) パラ メ ー タ ー 仕様/詳細 デバ イ ス使用率 ( テ ス ト ベンチな し ) ス ラ イ ス数 246 GCLK バ ッ フ ァ ー数 PS7 2 1 RAMB36 1 Verilog/VHDL HDL 言語のサポー ト 表 4 : デバイ ス使用率 (2) イ ン プ リ メ ン テー シ ョ ンの説明 デバイ ス ス ピー ド グレー ド パ ッ ケージ マ ッ プ前 (合成制約) 配線後 ス ラ イ ス数 XC7Z020 -1 CLG484 240MHz 160MHz 246 (1%) こ こ では、 リ フ ァ レ ン ス デザ イ ンの イ ンプ リ メ ン テーシ ョ ンについて説明 し ます。 デザ イ ン フ ァ イ ルは design と い う デ ィ レ ク ト リ に解凍 し ます。 フ ァ イ ルの解凍後、 design\work と い う 名前の新規デ ィ レ ク ト リ を作成 し ます。 フ ァ イ ルは、 次の よ う に コ ピー し ます。 design\src\bootgen か ら design\work\bootgen design\src\edk_system か ら design\work\edk_system リ フ ァ レ ン ス デ ザ イ ン に は 生成済み の フ ァ イ ル も すべ て 付属 し て お り 、 そ れ ら は デ ィ レ ク ト リ design\generated_files に格納 さ れてい ます。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 7 イ ン プ リ メ ン テーシ ョ ンの説明 ハー ド ウ ェ アの生成 こ のセ ク シ ョ ンでは、 ハー ド ウ ェ ア デザ イ ンの作成について説明 し ます。 こ のセ ク シ ョ ン を省略 し て、 「アプ リ ケーシ ョ ンの生成」 に進む こ と も で き ます。 コ ンパ イ ル済みのデザ イ ンは、 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 サブデ ィ レ ク ト リ が自動的に作成 さ れます。 X-Ref Target - Figure 2 X1078_02_011713 図 2 : ワー ク スペース デ ィ レ ク ト リ の選択 ア プ リ ケーシ ョ ンの生成 SDK の設定 こ のデザ イ ンには、 ス タ ン ド ア ロ ン BSP フ ァ イ ル (ベア メ タ ル アプ リ ケーシ ョ ンが使用) と 変更済みの FSBL フ ァ イ ルが含まれてい ます。 SDK で こ れ ら の フ ァ イ ルの情報を使用す る には、 新 し い リ ポジ ト リ を認識す る よ う に SDK を設定す る 必要があ り ます。 1. SDK を起動 し 、 ワ ー ク スペース の design\work\edk_system\SDK\Workspace を開き ます。 [Export & Launch SDK] を オンに し て XPS を使用 し た場合は、 こ の手順は不要です。 2. 変更済みス タ ン ド ア ロ ン BSP お よ び変更済み FSBL を含む付属の リ ポジ ト リ を SDK が参照で き る よ う に し ます (図 3)。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 8 イ ン プ リ メ ン テーシ ョ ンの説明 • [Xilinx_tools] → [Repositories] を ク リ ッ ク し ます。 a. [Local Repositories] の横にあ る [New] を ク リ ッ ク し ます。 • 参照ボ タ ン を ク リ ッ ク し 、 デ ィ レ ク ト リ design\src\sdk_repo を選択 し ます。 • [OK] を ク リ ッ ク し ます。 X-Ref Target - Figure 3 X1078_03_011713 図 3 : リ ポジ ト リ の選択 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 9 イ ン プ リ メ ン テーシ ョ ンの説明 カ ス タ ム FSBL ア プ リ ケーシ ョ ンの作成 1. 「SDK の設定」 で説明 さ れてい る 手順が既に実行 さ れてい る こ と を確認 し ます。 2. リ ポジ ト リ の新 し いテ ンプ レー ト を使用 し て FSBL を作成 し ます (図 4)。 a. [File] → [New] → [Application_Project] を ク リ ッ ク し ます。 b. [Project Name] に 「amp_fsbl」 と 入力 し ます。 X-Ref Target - Figure 4 X1078_04_011713 図 4 : FSBL の作成 c. [Next] を ク リ ッ ク し ます。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 10 イ ン プ リ メ ン テーシ ョ ンの説明 d. [Available Templates] か ら [Zynq FSBL for AMP] を選択 し ます。 リ ス ト に こ のテ ンプ レー ト が表示 さ れない場合は、 リ ポジ ト リ が正 し く 設定 さ れてい る こ と を確認 し て く だ さ い (図 5)。 X-Ref Target - Figure 5 X1078_05_011713 図 5 : カ ス タ ム FSBL テ ン プ レー ト の選択 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] を ク リ ッ ク し ます。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 11 イ ン プ リ メ ン テーシ ョ ンの説明 b. [Project name] を 「app_cpu1_bsp」 に変更 し ます。 c. [CPU] を [ps7_cortexa9_1] に変更 し ます。 d. [Board Support Package OS] を [standalone_amp] に変更 し ます。 X-Ref Target - Figure 6 X1078_06_011713 図 6 : CPU1 の BSP e. [Finish] を ク リ ッ ク し ます。 f. ボー ド サポー ト パ ッ ケージの設定画面で、 [overview] → [standalone_amp] を ク リ ッ ク し 、 [stdin] と [stdout] の両方を [none] に変更 し ます (図 7)。 X-Ref Target - Figure 7 X1078_07_011713 図 7 : CPU1 : STDIN な し 、 STDOUT な し の設定 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 12 イ ン プ リ メ ン テーシ ョ ンの説明 g. [Overview] → [drivers] → [cpu_cortexa9] を ク リ ッ ク し て、 [extra_compiler_flags] に -DUSE_AMP=1 を追加 し ます (図 8)。 X-Ref Target - Figure 8 X1078_08_011713 図 8 : CPU1 の BSP : USE_AMP の追加 h. [OK] を ク リ ッ ク し ます。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 13 イ ン プ リ メ ン テーシ ョ ンの説明 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] を選択 し ます。 X-Ref Target - Figure 9 X1078_09_011713 図 9 : CPU1 用ア プ リ ケーシ ョ ンの作成 e. [Next] を ク リ ッ ク し ます。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 14 イ ン プ リ メ ン テーシ ョ ンの説明 f. [Empty Application] テ ンプ レー ト を選択 し ます (図 10)。 X-Ref Target - Figure 10 X1078_10_011713 図 10 : CPU1 : 空のア プ リ ケーシ ョ ン g. [Finish] を ク リ ッ ク し ます。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 15 イ ン プ リ メ ン テーシ ョ ンの説明 h. SDK の [Project Explorer] タ ブで [app_cpu1] を展開 し 、[src] フ ォ ルダーを右 ク リ ッ ク し ます。 i. [Import] を ク リ ッ ク し ます (図 11)。 X-Ref Target - Figure 11 X1078_11_011713 図 11 : SDK によ る app_cpu1 のイ ンポー ト XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 16 イ ン プ リ メ ン テーシ ョ ンの説明 j. [General] → [File_System] を ク リ ッ ク し ます (図 12)。 X-Ref Target - Figure 12 X1078_12_011713 図 12 : CPU1 : 一般的な フ ァ イル シ ス テムのイ ンポー ト k. [Next] を ク リ ッ ク し ます。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 17 イ ン プ リ メ ン テーシ ョ ンの説明 l. 参照ボ タ ン を ク リ ッ ク し、 デ ィ レ ク ト リ design\src\apps\app_cpu1 を選択 し ます。 m. 左側のペ イ ンで [app_cpu1] を選択 し ますが、 チ ェ ッ ク ボ ッ ク ス はオンに し ないで く だ さ い。 右側のペ イ ンですべての フ ァ イ ルを選択 し ます (図 13)。 X-Ref Target - Figure 13 X1078_13_011713 図 13 : CPU1 イ ンポー ト する フ ァ イルの選択 n. [Finish] を ク リ ッ ク し ます。 o. [Yes] を ク リ ッ ク し て、 lscript.ld を上書 き し ます。 3. SDK が新規アプ リ ケーシ ョ ンの コ ンパ イ ルを完了す る と 、 次の場所に ELF が生成 さ れます。 design\work\edk_system\SDK\Workspace\app_cpu1\Debug\app_cpu1.elf XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 18 イ ン プ リ メ ン テーシ ョ ンの説明 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] に変更 し ます。 X-Ref Target - Figure 14 X1078_14_011713 図 14 : RWMEM の作成 d. [Next] を ク リ ッ ク し ます。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 19 イ ン プ リ メ ン テーシ ョ ンの説明 e. [Linux Empty Application] テ ンプ レー ト を選択 し ます (図 15)。 X-Ref Target - Figure 15 X1078_15_011713 図 15 : Linux の空のア プ リ ケーシ ョ ン 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 タ ー ミ ナルにエ コ ー さ れます。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 20 イ ン プ リ メ ン テーシ ョ ンの説明 こ のアプ リ ケーシ ョ ンは既に コ ンパ イ ル さ れ、 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.git cd linux-xlnx git pull origin xilinx-14.3-build2 ま たは git checkout -b xilinx-14.3-build2 xilinx-14.3-build2 2. Wiki の説明に従っ て カーネルを構築 し ます。 make ARCH=arm xilinx_zynq_defconfig make 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"; XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 21 イ ン プ リ メ ン テーシ ョ ンの説明 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.git cd u-boot-xlnx git pull origin xilinx-14.3-build2 ま たは git checkout -b xilinx-14.3-build2 xilinx-14.3-build2 2. Wiki の説明に従っ て U-boot を構築 し ます。 make zynq_zc70x_config make mv 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.gz gunzip ramdisk.gz mkdir tmp_copy sudo mount -o loop ramdisk ./tmp_copy 2. こ れで、 ramdisk は ./tmp_copy にマ ウ ン ト さ れます。 3. ramdisk を マ ウ ン ト 解除 し 、 再 ラ ッ プ し ます。 sudo umount ./tmp_copy gzip ramdisk XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 22 イ ン プ リ メ ン テーシ ョ ンの説明 <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 に コ ンパ イ ル済みの コ ピーがあ り ます。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 23 イ ン プ リ メ ン テーシ ョ ンの説明 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] XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 24 イ ン プ リ メ ン テーシ ョ ンの説明 ハー ド ウ ェ アのセ ッ ト ア ッ プ 『Zynq-7000 All Programmable SoC : ZC702 評価キ ッ ト お よ び ビ デオ/ 画像処理キ ッ ト (ISE Design Suite 14.3) ス タ ー ト ア ッ プ ガ イ ド 』 [参照 2] の 「TRD Demonstration Procedure」 に記載 さ れたボー ド のセ ッ ト ア ッ プ手順を実行 し ます。 こ のデザ イ ンには、 マ ウ ス、 キーボー ド 、 USB ハブ、 モニ タ ー、 モ ニ タ ー ケーブルは不要です。 ハー ド ウ ェ アのセ ッ ト ア ッ プでは、 ZC702 デモ ボー ド を SD カー ド か ら ブー ト す る よ う に設定 し ます。 端末プ ロ グ ラ ムは、 ボー レー ト 115200 で適切な COM ポー ト を待ち受け る よ う に設定 し ます。 デザ イ ンに電源を投入する と 、 ボー ド がブー ト し ます。 CPU0 は U-boot の実行を開始 し 、 Linux をブー ト し ます。 SD カー ド か ら ブー ト す る と 、 UART にシ ス テ ムの出力が現れ る ま で最大 18 秒かか り ます。 こ の UART はサー ド パーテ ィ 提供の ド ラ イ バーを使用 し ます。 詳細は、 『Zynq-7000 All Programmable SoC : ZC702 評価キ ッ ト お よ びビデオ/画像処理キ ッ ト (ISE Design Suite 14.3) ス タ ー ト ア ッ プ ガ イ ド 』 を参照 し て く だ さ い。 ブー ト 後、 コ ン ソ ールに Linux zynq> プ ロ ンプ ト が表示 さ れます (図 16)。 ボー ド に イ ーサネ ッ ト ケーブルが接続 さ れていない場合は、 DHCP 要求送信状態か ら の タ イ ム ア ウ ト に多少時 間がかか り ます。 X-Ref Target - Figure 16 X1078_16_011713 図 16 : コ ン ソ ール出力 ブー ト 時に 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 の内容を ク リ XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 25 イ ン プ リ メ ン テーシ ョ ンの説明 ア し ます。 こ の ク リ アに よ っ て、 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 Logic Analyzer (ILA) コ ア も 含まれてい ます。 CPU1 へ強制的に割 り 込むには、 Linux コ マ ン ド /mnt/rwmem.elf 0x78600000 1 を入力 し ます (図 17)。 3 ページの 「ア ド レ ス マ ッ プ」 を参照 し て、 セ ッ ト さ れたばか り の レ ジ ス タ ビ ッ ト を確認 し て く だ さ い。 こ のビ ッ ト を セ ッ ト す る こ と に よ っ て割 り 込みが CPU1 に送信 さ れ、 CPU1 の割 り 込みサー ビ ス ルーチンが、 OCM メ モ リ を介 し て soft UART アプ リ ケーシ ョ ンに 「CPU1: IRQ clr 0」 を出力 し ま し た。 X-Ref Target - Figure 17 X1078_17_011713 図 17 : 強制 さ れた割 り 込みの コ ン ソ ール出力 次の手順では、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] を ク リ ッ ク し 、 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 26 イ ン プ リ メ ン テーシ ョ ンの説明 design\src\chipscope\csdefaultproj.cpj にあ る ChipScope コ ン フ ィ ギ ュ レーシ ョ ン フ ァ イ ルを参照 し ます。 注記 : ILA は、 IRQ が High にな っ た と き に ト リ ガーす る よ う 設定済みです。 4. [UNIT:1 Trigger Setup] を選択 し て ト リ ガーを作動可能に し ます。 5. VIO コ ン ソ ール ウ ィ ン ド ウ には、 SyncOut[0] と い う パルス ボ タ ンがあ り ます (図 18)。 こ のボ タ ン を ク リ ッ ク し ます。 X-Ref Target - Figure 18 X1078_18_011713 図 18 : ChipScope Analyzer によ る最初の IRQ のキ ャ プ チ ャ Linux コ ン ソ ール内で動作す る softUART アプ リ ケーシ ョ ンは、 「CPU1:IRQ clr 1」 の よ う な文字列を 出力 し ます (図 19)。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 27 イ ン プ リ メ ン テーシ ョ ンの説明 X-Ref Target - Figure 19 X1078_19_011713 図 19 : ChipScope Analyzer の ト リ ガー後のコ ン ソ ール出力 注記 : 仮想ボ タ ン の ク リ ッ ク ご と に割 り 込みが生成 さ れ、 CPU1 の IRQ サービ ス ルーチ ンは softUart に文字列を出力 し ます。図 20 に示す よ う に、IRQ サービ ス ルーチンは最初の割 り 込みの処理後にキ ャ ッ シ ュ さ れ る ため、 後続の IRQ では割 り 込みレ イ テ ン シが大幅に短 く な り ます。 割 り 込みを処理す る ベア メ タ ル アプ リ ケーシ ョ ンは、 DDR メ モ リ 内に置かれてい ます。 最初の割 り 込 みが発生す る と 、 CPU1 はサービ ス ルーチンにジ ャ ンプする よ う に指示 さ れます。 こ のジ ャ ンプに よ っ て DDR メ モ リ に置かれた命令がキ ャ ッ シ ュ に読み出 さ れ、 実行 さ れます。 実行中、 エンベデ ッ ド コ ア に よ っ て生成 さ れてい る 割 り 込み信号を ク リ アす る と 、 サービ ス ルーチ ン が終了 し ます。 図 18 では、 割 り 込みのアサー ト か ら サービ ス ルーチンに よ る 制御ビ ッ ト の ク リ ア ま でに 65 ク ロ ッ ク を上回 る 遅延 があ り ます。 最初の割 り 込みの遅延は、 サービ ス ルーチンの フ ェ ッ チ と 同時に DDR メ モ リ が リ フ レ ッ シ ュ さ れ る か ど う かに よ っ て変わ る 可能性があ り ます。 最初の IRQ の発生後、 サービ ス ルーチンはキ ャ ッ シ ュ に保存 さ れ る ため、 2 番目以降の割 り 込みに対 す る ルーチンの命令は、 処理が よ り 低速で確定的でない DDR メ モ リ ではな く 、 キ ャ ッ シ ュ か ら フ ェ ッ チ さ れます。 図 20 に示す よ う に、 割 り 込み処理は 25 ク ロ ッ ク で完了 し てい ます。 こ の遅延は、 最初の キ ャ ッ シ ュ さ れない割 り 込み処理の約 1/3 です。 最初の割 り 込み処理 と 後続の割 り 込み処理の時間差を小 さ く す る には、 割 り 込みサービ ス ルーチ ン を キ ャ ッ シ ュ さ れない OCM に移動 し ます。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 28 イ ン プ リ メ ン テーシ ョ ンの説明 X-Ref Target - Figure 20 X1078_20_011713 図 20 : ChipScope Analyzer によ る 2 番目以降の IRQ のキ ャ プ チ ャ デザイ ンのデバ ッ グ CPU1 上で実行 さ れてい る アプ リ ケーシ ョ ンの接続 と デバ ッ グには SDK を使用で き ます。 XMD は、 コ マ ン ド シ ェ ルお よ び JTAG ケーブル を介 し て CPU に接続す る GNU デバ ッ ガー (GDB) サーバーを提供 し ます。 通常、 アプ リ ケーシ ョ ン のデバ ッ グ を開始す る と 、 SDK が自動的に XMD を バ ッ ク グ ラ ウ ン ド で起動 し ます。 こ のサンプル デザ イ ン では、 XMD を手動で起動 し て CPU1 に接続 し ます。 その後、 デバ ッ グ中に XMD GDB サーバーに接続す る よ う に SDK に指示 し ます。 FSBL を使用 し てデザ イ ン をブー ト し たため、 PS レ ジ ス タ の再初期化は不要です。 CPU0 上で動作す る Linux に影響を与えない よ う に、 PS 全体を リ セ ッ ト し ない よ う に注意する 必要があ り ます。 1. プ ラ ッ ト フ ォーム ケーブルを ZC702 ボー ド に接続 し ます。 ジ ャ ンパー オプシ ョ ンが使用す る デ バ ッ グ ケーブルに合わせて正 し く 設定 さ れてい る こ と を確認 し ます。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 29 イ ン プ リ メ ン テーシ ョ ンの説明 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 を介 し て応答 し ます。 X-Ref Target - Figure 21 X1078_21_011513 図 21 : XMD の CPU1 への接続 GDB サーバーが動作 し 、 TCP ポー ト 1234 を待ち受けてい ます。 XMD が接続 さ れ る と 、 CPU1 は 動作を停止 し ます。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 30 イ ン プ リ メ ン テーシ ョ ンの説明 3. SDK で CPU1 のデバ ッ グ を開始 し ます。 a. SDK の [Project Explorer] ウ ィ ン ド ウ で [app_cpu1] を右 ク リ ッ ク し 、 [debug_as] → [debug_configurations] を ク リ ッ ク し ます (図 22)。 X-Ref Target - Figure 22 X1078_22_011513 図 22 : CPU1 のデバ ッ グ コ ン フ ィ ギ ュ レーシ ョ ン XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 31 イ ン プ リ メ ン テーシ ョ ンの説明 b. [Xilinx C/C++ ELF] を ク リ ッ ク し てか ら 、 左上の [New launch configuration] ア イ コ ン を ク リ ッ ク し ます (図 23)。 X-Ref Target - Figure 23 X1078_23_011513 図 23 : CPU1 のデバ ッ グ コ ン フ ィ ギ ュ レーシ ョ ン c. コ ン フ ィ ギ ュ レーシ ョ ン名は自動的に 「app_cpu1 Debug」 に設定 さ れます (図 24)。 X-Ref Target - Figure 24 X1078_24_011513 図 24 : CPU1 のデバ ッ グ コ ン フ ィ ギ ュ レーシ ョ ン名 d. [Device Initialization] タ ブ を ク リ ッ ク し 、 [Path to initialization TCL file] の内容を削除 し ま す。 初期化は Linux と FSBL に よ っ て既に完了 し てい ます (図 25)。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 32 イ ン プ リ メ ン テーシ ョ ンの説明 X-Ref Target - Figure 25 X1078_25_011513 図 25 : CPU1 のデバ ッ グ初期化 e. [Remote Debug] タ ブ を ク リ ッ ク し ます。 f. [Connect to gdbserver on a different machine] を オンに し て、外部で生成 さ れた GDB サーバー に接続す る よ う に SDK に指示 し ます。 IP ア ド レ ス はデフ ォ ル ト の localhost に、 ポー ト は 1234 に設定する 必要があ り ます (図 26)。 X-Ref Target - Figure 26 X1078_26_011513 図 26 : CPU1 の リ モー ト デバ ッ グ コ ン フ ィ ギ ュ レーシ ョ ン g. [Apply] を ク リ ッ ク し ます。 h. [Debug] を ク リ ッ ク し ます。 [Yes] を ク リ ッ ク し てパースペ ク テ ィ ブ オプシ ョ ン を確定 し ます。 i. アプ リ ケーシ ョ ンがダ ウ ン ロ ー ド さ れ、 実行 さ れます (ELF のダ ウ ン ロ ー ド は [Device Initialization] タ ブで無効に さ れてい る 場合があ る )。 main() 内の最初の実行可能行に設定 さ れ たブ レー ク ポ イ ン ト でアプ リ ケーシ ョ ンが停止 し ます。 j. CPU1 上のアプ リ ケーシ ョ ンの実行を再開す る には、 [resume]、 [single step]、 お よ びほかの ボ タ ン を ク リ ッ ク し ます。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 33 ま とめ ま とめ こ のサンプル デザ イ ンは、Zynq-7000 AP SoC をブー ト し 、2 つの Cortex-A9 プ ロ セ ッ サを起動 (CPU0 で Linux を実行 し 、 CPU1 でベア メ タ ル アプ リ ケーシ ョ ン を実行) する 方法を示す も のです。 CPU1 上 で動作す る オーバーヘ ッ ド が少ないベア メ タ ル アプ リ ケーシ ョ ン を使用 し て PL か ら 生成 さ れ る 割 り 込 みを処理 し 、 CPU0 上で動作す る Linux に通知 し ます。 参考資料 こ のアプ リ ケーシ ョ ン ノ ー ト では、 次の参考資料が使用 さ れてい ます。 1. 2. UG585 : 『Zynq-7000 All Programmable SoC テ ク ニ カル リ フ ァ レ ン ス マニ ュ アル』 UG926 : 『Zynq-7000 All Programmable SoC : ZC702 評価キ ッ ト お よ びビデオ / 画像処理キ ッ ト (ISE Design Suite 14.3) ス タ ー ト ア ッ プ ガ イ ド 』 3. UG873 : 『Zynq-7000 All Programmable SoC : コ ン セプ ト 、 ツール、 テ ク ニ ッ ク ガ イ ド 』 改訂履歴 Notice of Disclaimer 4. AMBA AXI4 プ ロ ト コ ル仕様 http://www.arm.com/products/system-ip/amba/amba-open-specifications.php 5. 6. 7. 8. 9. 10. 11. UG683 : 『EDK コ ンセプ ト 、 ツール、 テ ク ニ ッ ク 』 DS768 : 『LogiCORE IP AXI イ ン タ ー コ ネ ク ト 』 UG111 : 『エンベデ ッ ド シ ス テ ム ツール リ フ ァ レ ン ス マニ ュ アル』 UG761 : 『AXI リ フ ァ レ ン ス ガ イ ド 』 UG642 : 『プ ラ ッ ト フ ォーム仕様フ ォーマ ッ ト リ フ ァ レ ン ス マニ ュ アル』 UG029 : 『ChipScope Pro ソ フ ト ウ ェ アお よ び コ ア ユーザー ガ イ ド 』 『Zynq-7000 ベース タ ーゲ ッ ト リ フ ァ レ ン ス デザ イ ン 14.3』 http://wiki.xilinx.com/zynq-base-trd-14-3 次の表に、 こ の文書の改訂履歴を示 し ます。 日付 バージ ョ ン 2013 年 2 月 14 日 1.0 内容 初版 The information disclosed to you hereunder (the “Materials”) is provided solely for the selection and use of 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 OF MERCHANTABILITY, 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 other theory of liability) for any loss or damage of any kind or nature related to, arising under, or in connection with, 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 loss or damage suffered as a result of any action brought by a third party) even if such damage or loss was reasonably foreseeable or Xilinx had been advised of the possibility of the same. Xilinx assumes no obligation to correct any errors contained in the Materials or to notify you of updates to the Materials or to product specifications. You may not reproduce, modify, distribute, or publicly display the Materials without prior written consent. Certain products are subject to the terms and conditions of the Limited Warranties which can be viewed at http://www.xilinx.com/warranty.htm; IP cores may be subject to warranty and support terms contained in a license issued to you by Xilinx. Xilinx products are not designed or intended to be fail-safe or for use in any application requiring fail-safe performance; you assume sole risk and liability for use of Xilinx products in Critical Applications: http://www.xilinx.com/warranty.htm#critapps. XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 34 Automotive Applications Disclaimer Automotive Applications Disclaimer XILINX PRODUCTS ARE NOT DESIGNED OR INTENDED TO BE FAIL-SAFE, OR FOR USE IN ANY APPLICATION REQUIRING FAIL-SAFE PERFORMANCE, SUCH AS APPLICATIONS RELATED TO: (I) THE DEPLOYMENT OF AIRBAGS, (II) CONTROL OF A VEHICLE, UNLESS THERE IS A FAIL-SAFE OR REDUNDANCY FEATURE (WHICH DOES NOT INCLUDE USE OF SOFTWARE IN THE XILINX DEVICE TO IMPLEMENT THE REDUNDANCY) AND A WARNING SIGNAL UPON FAILURE TO THE OPERATOR, OR (III) USES THAT COULD LEAD TO DEATH OR PERSONAL INJURY. CUSTOMER ASSUMES THE SOLE RISK AND LIABILITY OF ANY USE OF XILINX PRODUCTS IN SUCH APPLICATIONS. 本資料は英語版 (v1.0) を翻訳 し た も ので、 内容に相違が生 じ る 場合には原文を優先 し ます。 資料に よ っ ては英語版の更新に対応 し ていない も のがあ り ます。 日本語版は参考用 と し て ご使用の上、 最新情報につ き ま し ては、 必ず最新英語版を ご参照 く だ さ い。 こ の資料に関す る フ ィ ー ド バ ッ ク お よ び リ ン ク な ど の問題につ き ま し ては、 [email protected] ま でお知 ら せ く だ さ い。 いただ き ま し た ご意見を参考に早急に対応 さ せていただ き ます。 なお、 こ の メ ール ア ド レ スへのお問い合わせは受け付けてお り ません。 あ ら か じ め ご了承 く だ さ い。 XAPP1078 (v1.0) 2013 年 2 月 14 日 japan.xilinx.com 35