エ ンベデ ッ ド シス テム ツール リ フ ァ レ ン ス マニ ュ アル UG1043 (v2014.1) 2014 年 5 月 15 日 本資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。 資料 によっては英語版の更新に対応していないものがあります。 日本語版は参考用としてご使用の上、最新情報に つきましては、必ず最新英語版をご参照ください。 改訂履歴 次の表に、 こ の文書の改訂履歴を示 し ます。 日付 バージ ョ ン 2014/05/15 2014.1 改訂内容 Vivado Design Suite 2014.1。 こ の文書は初版。 エ ンベデ ッ ド シ ス テム ツール リ フ ァ レ ン ス マニ ュ アルjapan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 2 目次 改訂履歴 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 第 1 章 : エ ンベデ ッ ド シ ス テム と ツールの概要 設計プ ロ セ ス の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Vivado Design Suite の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 ソ フ ト ウ ェ ア開発キ ッ ト (SDK). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 第 2 章 : GNU コ ンパイ ラ ツール 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . コ ンパ イ ラ の フ レーム ワー ク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . コ ンパ イ ラ の使用法 と オプシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MicroBlaze コ ンパ イ ラ の使用法 と オプシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ARM Cortex-A9 コ ンパ イ ラ の使用法 と オプシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . その他の注意事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 11 13 25 39 40 第 3 章 : XMD (Xilinx Microprocessor Debugger) XMD の使用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XMD コ ン ソ ール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XMD コ マ ン ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . connect コ マ ン ド のオプシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MicroBlaze プ ロ セ ッ サのデバ ッ グ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cortex A9 プ ロ セ ッ サ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XMD 内部 Tcl コ マ ン ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 44 45 58 59 70 73 第 4 章 : GNU デバ ッ ガー 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ツールの概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MicroBlaze GDB の タ ーゲ ッ ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ARM Cortex A9 の タ ーゲ ッ ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . GDB コ マ ン ド に関す る 参考資料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 78 79 80 80 第 5 章 : フ ラ ッ シ ュ メ モ リ のプ ログ ラ ム 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . サポー ト さ れ る フ ラ ッ シ ュ デバ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . フ ラ ッ シ ュ プ ロ グ ラ マのパフ ォーマ ン ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . フ ラ ッ シ ュ のプ ロ グ ラ ム設定のカ ス タ マ イ ズ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 82 84 84 付録 A : GNU ユーテ ィ リ テ ィ MicroBlaze プ ロ セ ッ サ用の汎用ユーテ ィ リ テ ィ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 MicroBlaze プ ロ セ ッ サ用ユーテ ィ リ テ ィ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 その他のプ ロ グ ラ ムお よ びフ ァ イ ル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 エ ンベデ ッ ド シ ス テム ツール リ フ ァ レ ン ス マニ ュ アルjapan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 3 付録 B : その他の リ ソ ースおよび法的通知 ザ イ リ ン ク ス リ ソ ース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ソ リ ュ ーシ ョ ン セ ン タ ー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . リ フ ァ レンス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 重要な法的通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . エ ンベデ ッ ド シ ス テム ツール リ フ ァ レ ン ス マニ ュ アルjapan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 92 92 92 93 4 第 1章 エ ンベデ ッ ド シス テム と ツールの概要 こ の章では、MicroBlaze™ エンベデ ッ ド プ ロ セ ッ サお よ び Cortex A9 ARM プ ロ セ ッ サをベース に し た シ ス テ ム を、ザ イ リ ン ク ス Vivado® Design Suite で開発す る 際に使用す る エンベデ ッ ド シ ス テ ム ツール と 開発フ ロ ーについて説明 し ます。 Vivado Design Suite は、ザ イ リ ン ク ス FPGA デバ イ ス に イ ンプ リ メ ン ト す る 完全エンベデ ッ ド プ ロ セ ッ サ シ ス テ ム を 設計す る ための ツールです。 Vivado Design Suite は、 デザ イ ン をザ イ リ ン ク ス のプ ロ グ ラ マブル ロ ジ ッ ク デバ イ ス に イ ンプ リ メ ン ト す る ために必 要な開発シ ス テ ム ツールで、 Vivado には次の も のが含まれてい ます。 • Vivado IP ツール。 エンベデ ッ ド プ ロ セ ッ サ ハー ド ウ ェ アの開発に使用 し ます。 • SDK ( ソ フ ト ウ ェ ア開発キ ッ ト )。 Eclipse オープン ソ ース フ レーム ワー ク に基づ く ツールで、 エンベデ ッ ド ソ フ ト ウ ェ ア アプ リ ケーシ ョ ンの開発に使用で き ます。 SDK は ス タ ン ド ア ロ ン プ ロ グ ラ ム と し て も 利用で き ます。 • プ ロ セ ッ サやペ リ フ ェ ラ ルな ど のエンベデ ッ ド プ ロ セ ッ サ IP コ ア Vivado ソ フ ト ウ ェ ア マニ ュ アルをは じ め と す る 資料等への リ ン ク は、 付録 B 「その他の リ ソ ー ス お よ び法的通知」 を参照 し て く だ さ い。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 5 第 1 章 : エ ンベデ ッ ド シ ス テム と ツールの概要 設計プ ロ セスの概要 Vivado に含まれ る ツールを使用す る と 、図 1-1 に示す よ う に、 エンベデ ッ ド シ ス テ ムの設計フ ロ ーを最初か ら 最後ま で実行で き ます。 ᆺⓗ䛺䜶䞁䝧䝕䝑䝗㻌䝣䝻䞊 Vivado HDL or ᅇ㊰ᅗ SDK 䝕䝄䜲䞁ධຊ 䜶䞁䝧䝕䝑䝗㻌 䝋䞊䝇䛾㏣ຍ 1. 㻮㼍㼟㼑㻌㻿㼥㼟㼠㼑㼙㻌㻮㼡㼕㼘㼐㼑㼞㻌䛷䝕䝄䜲䞁䜢సᡂ㻌 㻔᭱ึ䛿⮬ືⓗ䛻㉳ື㻕 2. 㻿㼥㼟㼠㼑㼙㻌㻭㼟㼟㼑㼙㼎㼘㼥㻌㼂㼕㼑㼣㻌䛷䝕䝄䜲䞁䜢ኚ᭦ 䝽䞊䜽䝇䝨䞊䝇䛾సᡂ㻛㆑ู 㻔⮬ື㻕 㻿㻰㻷㻌䜈䜶䜽䝇 䝫䞊䝖 ᪂つ䝥䝻䝆䜵䜽䝖㻛䝪䞊䝗㻌䝃䝫䞊䝖 䝟䝑䜿䞊䝆䛾సᡂ 䛭䛾䛾䝋䞊䝇 - RTL - Core Generator - System Generator (.xml 䛾䜏) 䝡䝑䝖䝇䝖䝸䞊䝮䜎䛷䛾 䜲䞁䝥䝸䝯䞁䝔䞊䝅䝵䞁 1. ྜᡂ 2. ኚ 3. MAP 4. PAR 5. 䝍䜲䝭䞁䜾 6. 䝡䝑䝖䝇䝖䝸䞊䝮⏕ᡂ 7. Data2MEM 䜰䝥䝸䜿䞊䝅䝵䞁㛤Ⓨ .elf 㻲㻼㻳㻭㻌䜈䛾䝎䜴䞁䝻䞊䝗 㻼㼘㼍㼠㻳㼑㼚㻌䜢⏝䛧䛯 䝛䝑䝖䝸䝇䝖⏕ᡂ .bit .bmm 䝕䝞䝑䜾 㻿㻰㻷㻌䜈䜶䜽䝇䝫䞊䝖 㻔㻚㼤㼙㼘䚸㻚㼎㼕㼠䚸㻚㼎㼙㼙㻌䝣䜯䜲䝹㻕 䝪䞊䝗 X10254 X-Ref Target - Figure 1-1 図 1‐1 : エ ン ベデ ッ ド シ ス テム設計プ ロ セスの フ ロー ハー ド ウ ェ ア開発 ザ イ リ ン ク ス の FPGA 技術を使用す る と 、 プ ロ セ ッ サ サブシ ス テ ムのハー ド ウ ェ ア ロ ジ ッ ク を カ ス タ マ イ ズで き ま す。 標準的なマ イ ク ロ プ ロ セ ッ サ チ ッ プ ま たは コ ン ト ロ ー ラ ー チ ッ プでは、 こ の よ う な カ ス タ マ イ ズはで き ません。 「ハー ド ウ ェ ア プ ラ ッ ト フ ォーム」 と い う 用語は、 ザ イ リ ン ク ス の技術を使用 し て作成する 柔軟なエンベデ ッ ド プ ロ セ ッ サ サブシ ス テ ム を指 し ます。 ハー ド ウ ェ ア プ ラ ッ ト フ ォームは、 プ ロ セ ッ サ バ ス に接続 さ れた 1 つま たは複数のプ ロ セ ッ サお よ びペ リ フ ェ ラ ル で構成 さ れてい ます。 ハー ド ウ ェ ア プ ラ ッ ト フ ォームの記述が完了 し た ら 、 こ れをエ ク ス ポー ト し て SDK で使用す る こ と がで き ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 6 第 1 章 : エ ンベデ ッ ド シ ス テム と ツールの概要 ソ フ ト ウ ェ ア開発 ボー ド サポー ト パ ッ ケージ (BSP) はアプ リ ケーシ ョ ン を構築す る ための ソ フ ト ウ ェ ア ド ラ イ バーお よ び OS を ま と めた も のです (OS はオプシ ョ ン)。 作成す る ソ フ ト ウ ェ ア イ メ ージには、 ザ イ リ ン ク ス ラ イ ブ ラ リ の う ちエンベデ ッ ド デザ イ ンで使用す る も ののみが含まれます。 BSP で実行する アプ リ ケーシ ョ ン を複数作成で き ます。 ソ フ ト ウ ェ ア アプ リ ケーシ ョ ンお よ び BSP を作成す る 前に、ハー ド ウ ェ ア プ ラ ッ ト フ ォーム を SDK に イ ン ポー ト し てお く 必要があ り ます。 検証 Vivado には、 ハー ド ウ ェ ア と ソ フ ト ウ ェ ア両方の検証ツールが含まれてい ます。 使用可能な検証ツールは、 次の と お り です。 シ ミ ュ レーシ ョ ン を使用 し たハー ド ウ ェ ア検証 ハー ド ウ ェ ア プ ラ ッ ト フ ォームの機能を検証する には、 シ ミ ュ レーシ ョ ン モデルを作成 し て HDL シ ミ ュ レー タ で実 行 し ます。 シ ス テ ム を シ ミ ュ レーシ ョ ンす る と 、 プ ロ セ ッ サは ソ フ ト ウ ェ ア プ ロ グ ラ ム を実行 し ます。 シ ミ ュ レー シ ョ ン モデルの タ イ プには、 ビヘ イ ビ アー、 構造、 ま たは タ イ ミ ン グのいずれか を選択 し 、 モデルを作成で き ます。 デバ ッ グに よ る ソ フ ト ウ ェ ア検証 ソ フ ト ウ ェ ア検証には、 次の方法があ り ます。 • サポー ト さ れてい る 開発ボー ド にデザ イ ン を読み込み、デバ ッ グ ツールで タ ーゲ ッ ト プ ロ セ ッ サ を制御 し ます。 • コ ー ド 実行のプ ロ フ ァ イ ルを作成 し て、 シ ス テ ムのパフ ォーマ ン ス を評価 し ます。 デバイ スの コ ン フ ィ ギ ュ レーシ ョ ン ハー ド ウ ェ ア プ ラ ッ ト フ ォ ームお よ び ソ フ ト ウ ェ ア プ ラ ッ ト フ ォ ーム が完成 し た ら 、 FPGA デバ イ ス用に コ ン フ ィ ギ ュ レーシ ョ ン ビ ッ ト ス ト リ ーム を作成 し ます。 • プ ロ ト タ イ プ を作成す る 場合は、 ホ ス ト コ ン ピ ュ ー タ ーに接続 し た状態で、 ビ ッ ト ス ト リ ーム を エンベデ ッ ド プ ラ ッ ト フ ォームで実行す る ソ フ ト ウ ェ ア と 共にダ ウ ン ロ ー ド し ます。 • プ ロ ダ ク シ ョ ン用の場合は、 コ ン フ ィ ギ ュ レーシ ョ ン ビ ッ ト ス ト リ ーム と ソ フ ト ウ ェ ア を FPGA に接続 し た不 揮発性 メ モ リ に保存 し ます。 Vivado Design Suite の概要 エ ンベデ ッ ド ハー ド ウ ェ ア プ ラ ッ ト フ ォ ームは通常、 プ ロ セ ッ サ バ ス で接続 さ れた 1 つま たは複数のプ ロ セ ッ サ、 ペ リ フ ェ ラ ル、 お よ び メ モ リ ブ ロ ッ ク で構成 さ れてい ます。 ま た、 デバ イ ス の外部に接続する ポー ト も あ り ます。 各 プ ロ セ ッ サ コ ア (pcore ま たはプ ロ セ ッ サ IP と も 呼ばれ る ) には、その動作を カ ス タ マ イ ズす る ためのパ ラ メ ー タ ーが あ り ます。 こ れ ら のパ ラ メ ー タ ーはペ リ フ ェ ラ ルお よ び メ モ リ のア ド レ ス マ ッ プ も 定義 し ます。IP イ ン テ グ レー タ ー では さ ま ざ ま なオプシ ョ ンの機能を選択で き る ので、 FPGA には作成す る アプ リ ケーシ ョ ンに必要な機能のサブセ ッ ト を イ ンプ リ メ ン ト す る だけで済みます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 7 第 1 章 : エ ンベデ ッ ド シ ス テム と ツールの概要 図 1-2 は Vivado アーキ テ ク チ ャ 構造の概要を示 し た も ので、 エ ンベデ ッ ド シ ス テ ム を作成す る ため各ツールの関連 性を表 し てい ます。 X-Ref Target - Figure 1-2 9LYDGR 6'. %,7%00 %,7%00 )LOHV ኲቾኁወ 㠿尞ኴዊንኄኌእ ኃኀናዙኦ ኤናኁዐቑ ኁዐኺዙእ 6'. ኤናኁዐት ኅኌኖኺዙእ ⚗㒟 %63ቿኴዙ ኔዄዐቑ⇫㒟 揜函揜偩 (/)ኲቾኁወቑ㱚乘 (/)ኲቾኁወ ቑኁዐኺዙእ ኰአእኖእዙኽ 䞮㒟 %,7%00 %,7%00 )LOHV ኲቾኁወ ኤናኁዐቑ ␜ኁዐኺዙእ 6'. ኤናኁዐት ኅኌኖኺዙእ ኬዙኦኃኄቿ ኚኲእኃኄቿ ኻኪዙንዀዙ )3*$ቑኴዊኍኽ :d'ĂďůĞ )3*$ኤክኁኖ 図 1‐2 : Vivado Design Suite ツールのアーキテ ク チ ャ ソ フ ト ウ ェ ア開発キ ッ ト (SDK) SDK ( ソ フ ト ウ ェ ア開発キ ッ ト ) は、 ソ フ ト ウ ェ ア ア プ リ ケーシ ョ ン プ ロ ジ ェ ク ト の開発環境で、 Eclipse オープ ン ソ ース をベース に し てい ます。 SDK には、 次の機能があ り ます。 • Vivado か ら 独立 し た形で イ ン ス ト ール さ れ、 デ ィ ス ク 容量使用率が小 さ い • シ ン グルま たはマルチプ ロ セ ッ サ シ ス テ ムでの ソ フ ト ウ ェ ア アプ リ ケーシ ョ ン開発をサポー ト • Vivado で生成 さ れ る ハー ド ウ ェ ア プ ラ ッ ト フ ォーム定義を イ ン ポー ト • チーム環境での ソ フ ト ウ ェ ア アプ リ ケーシ ョ ン開発をサポー ト エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 8 第 1 章 : エ ンベデ ッ ド シ ス テム と ツールの概要 • サー ド パーテ ィ OS 用のボー ド サポー ト パ ッ ケージ (BSP) を作成お よ びコ ン フ ィ ギ ュ レーシ ョ ン • ハー ド ウ ェ アお よ び ソ フ ト ウ ェ アの機能を テ ス ト す る ための標準サンプル ソ フ ト ウ ェ ア プ ロ ジ ェ ク ト を提供 • ソ フ ト ウ ェ ア アプ リ ケーシ ョ ン用 リ ン カー ス ク リ プ ト の生成、 FPGA デバ イ ス のプ ロ グ ラ ム、 パ ラ レル フ ラ ッ シ ュ メ モ リ のプ ロ グ ラ ムのための簡単な GUI イ ン タ ーフ ェ イ ス • 多機能な C/C++ コ ー ド エデ ィ タ ーお よ び コ ンパ イ ル環境 • プ ロ ジ ェ ク ト 管理機能 • アプ リ ケーシ ョ ンのビル ド を コ ン フ ィ ギ ュ レーシ ョ ン し 、 make フ ァ イ ル生成を自動化 • エ ラ ー ナビ ゲーシ ョ ン • エンベデ ッ ド タ ーゲ ッ ト のデバ ッ グお よ びプ ロ フ ァ イ ル作成を ス ムーズに行 う 統合環境 SDK の詳細は、 SDK ヘルプ(UG782) [参照 1]を参照 し て く だ さ い。 表 1‐1 : ソ フ ト ウ ェ ア開発および検証ツール GNU コ ンパ イ ラ ツール 作成 さ れたプ ラ ッ ト フ ォームに基づき 、 ソ フ ト ウ ェ ア アプ リ ケーシ ョ ン を作成 し ます。 XMD (Xilinx Microprocessor Debugger) ソ フ ト ウ ェ アのダ ウ ン ロ ー ド お よ びデバ ッ グに使用 し ます。GNU デバ ッ ガーが デバ イ ス にア ク セ スす る ためのチ ャ ネル も 提供 し ます。 GNU デバ ッ ガー シ ミ ュ レ ーシ ョ ン モデル ま たは タ ーゲ ッ ト デバ イ ス で ソ フ ト ウ ェ ア をデバ ッ グす る ための GUI を提供 し ます。 フ ラ ッ シュ メ モ リ プログ ラ マー タ ーゲ ッ ト プ ロ セ ッ サ を使用 し て、 オ ン ボー ド の、 共通フ ラ ッ シ ュ イ ン タ ー フ ェ イ ス (CFI) に準拠 し たパ ラ レル フ ラ ッ シ ュ デバ イ ス に ソ フ ト ウ ェ アお よ び デー タ を プ ロ グ ラ ム し ます。 GNU コ ンパイ ラ ツール シ ス テ ムに含ま れ る 各プ ロ セ ッ サのアプ リ ケーシ ョ ン実行フ ァ イ ルを コ ンパ イ ルお よ び リ ン ク す る には、 GNU コ ン パ イ ラ ツールを呼び出 し ます。 プ ロ セ ッ サ別の コ ンパ イ ラ は次の と お り です。 • MicroBlaze プ ロ セ ッ サの場合は mb-gcc コ ンパ イ ラ • ARM プ ロ セ ッ サの場合は arm-xilinx-eabi-gcc コ ンパ イ ラ 8 ページの図 1-2で説明す る エンベデ ッ ド ツールのアーキ テ ク チ ャ 概要にあ る よ う に、 • コ ンパ イ ラ は タ ーゲ ッ ト プ ロ セ ッ サ用の C ソ ース フ ァ イ ル と ヘ ッ ダー フ ァ イ ルま たはアセ ンブ ラ ソ ース フ ァ イ ルを読み込みます。 • リ ン カーは、 コ ンパ イ ル さ れた アプ リ ケーシ ョ ン と 選択 さ れた ラ イ ブ ラ リ を ま と め、 ELF フ ォーマ ッ ト の実行 フ ァ イ ルを生成 し ます。 リ ン カーは、 リ ン カー ス ク リ プ ト も 読み込みます。 ツールで生成 さ れたデフ ォ ル ト の も の、 ま たはユーザーが作成 し た も のが読み込まれます。 GNU コ ンパ イ ラ ツールお よ びユーテ ィ リ テ ィ については、 第 2 章 「GNU コ ンパ イ ラ ツール」、 第 4 章 「GNU デバ ッ ガー」、 お よ び付録 A 「GNU ユーテ ィ リ テ ィ 」 を参照 し て く だ さ い。 XMD (Xilinx Microprocessor Debugger) プ ロ グ ラ ムのデバ ッ グは、 命令セ ッ ト シ ミ ュ レー タ (ISS) を使用 し ソ フ ト ウ ェ アで行 う か、 ま たはハー ド ウ ェ ア ビ ッ ト ス ト リ ーム が読み込 ま れたザ イ リ ン ク ス FPGA を搭載す る ボー ド 上で行い ま す。 8 ページの図 1-2に あ る よ う に、 XMD ユーテ ィ リ テ ィ はアプ リ ケーシ ョ ン実行フ ァ イ ル (ELF) を読み込みます。 物理的に FPGA 上でデバ ッ グ を行 う 場合は、FPGA を ビ ッ ト ス ト リ ームで コ ン フ ィ ギ ュ レーシ ョ ンする 際に使用する の と 同 じ ダ ウ ン ロ ー ド ケーブルを使 用 し ます。 詳細は、 第 3 章 「XMD (Xilinx Microprocessor Debugger)」 を参照 し て く だ さ い。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 9 第 1 章 : エ ンベデ ッ ド シ ス テム と ツールの概要 GNU デバ ッ ガー GNU デバ ッ ガー (GDB) は、 さ ま ざ ま な開発段階で MicroBlaze お よ び Cortex A9 ARM プ ロ セ ッ サのシ ス テ ム を 1 つの イ ン タ ーフ ェ イ ス でデバ ッ グお よ び検証で き る よ う にす る 、 性能お よ び柔軟性の高い ツールです。 GDB は XMD (Xilinx Microprocessor Debugger) を タ ーゲ ッ ト のプ ロ セ ッ サ と 通信す る ための基本エ ン ジ ン と し て使用 し ます。 詳細は、 第 4 章 「GNU デバ ッ ガー」 を参照 し て く だ さ い。 フ ラ ッ シ ュ メ モ リ プ ログ ラ マー フ ラ ッ シ ュ メ モ リ プ ロ グ ラ マーは、 汎用性に優れ、 さ ま ざ ま な フ ラ ッ シ ュ デバ イ スお よ びレ イ ア ウ ト に対応す る よ う 設計 さ れてい ます。 第 5 章 「フ ラ ッ シ ュ メ モ リ のプ ロ グ ラ ム」 を参照 し て く だ さ い。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 10 第 2章 GNU コ ンパイ ラ ツール 概要 Vivado® Design Suite には、 MicroBlaze™ プ ロ セ ッ サお よ び Cortex A9 プ ロ セ ッ サ用の GNU コ ンパ イ ラ コ レ ク シ ョ ン (GCC) が含まれてい ます。 • Vivado GNU ツールでは、 C お よ び C++ 言語の両方がサポー ト さ れてい ます。 • MicroBlaze 用の GNU ツールには、 mb-gcc お よ び mb-g++ コ ンパ イ ラ 、 mb-as アセ ンブ ラ 、 mb-ld リ ン カーが含ま れてい ます。 • Cortex A9 ARM 用の ツールには、 arm-xilinx-eabi-gcc お よ び arm-xilinx-eabi-g++ コ ンパ イ ラ 、 arm-xilinx-eabi-as ア セ ンブ ラ 、 arm-xilinx-eabi-ld リ ン カーが含まれてい ます。 • ま た、 C、 数学、 GCC、 お よ び C++ の標準 ラ イ ブ ラ リ も 含まれてい ます。 コ ンパ イ ラ では、 アセ ン ブ ラ 、 リ ン カー、 オブジ ェ ク ト ダ ン プな ど、 共通バ イ ナ リ ユーテ ィ リ テ ィ (binutils と 呼ば れ る ) も 使用 さ れます。 MicroBlaze お よ び ARM 用の コ ンパ イ ラ ツールでは、 バージ ョ ン 2.16 の GNU に基づ く GNU binutils が使用 さ れ ま す。 概念、 オプ シ ョ ン、 使用法、 言語お よ び ラ イ ブ ラ リ サ ポー ト の例外につい ては、 付録 A 「GNU ユーテ ィ リ テ ィ 」 で説明 し ます。 コ ンパイ ラのフ レームワー ク こ のセ ク シ ョ ンでは、 MicroBlaze プ ロ セ ッ サ と Cortex A9ARM プ ロ セ ッ サの両方の コ ンパ イ ラ に共通 し た機能につい て説明 し ます。 図 2-1 は GNU ツールの フ ロ ーを表 し てい ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 11 第 2 章 : GNU コ ンパイ ラ ツール X-Ref Target - Figure 2-1 /ŶƉƵƚͬнн&ŝůĞƐ ĐƉƉϬ ĐĐϭ ĐĐϭƉůƵƐ ĂƐ ;ŵďͲĂƐŽƌĂƌŵͲdžŝůŝŶdžͲĞĂďŝͲĂƐͿ >ŝďƌĂƌŝĞƐ ůĚ ;ŵďͲůĚŽƌĂƌŵͲdžŝůŝŶdžͲĞĂďŝͲůĚͿ KƵƚƉƵƚ>&&ŝůĞ yϭϯϯϲϳ 図 2‐1 : GNU ツール フ ロー GNU コ ンパ イ ラ の名前は、 MicroBlaze 用が mb-gcc、 ARM 用が arm-xilinx-eabi-gcc です。 GNU コ ンパ イ ラ は ラ ッ パー で、 次のプ ロ グ ラ ム を呼び出 し ます。 • プ リ プ ロ セ ッ サ (cpp0) コ ンパ イ ラ に よ り 最初に呼び出 さ れ、 すべてのマ ク ロ を ソ ース フ ァ イ ルお よ びヘ ッ ダー フ ァ イ ルでの定義に置 き 換え ます。 • マシ ンお よ び言語別の コ ンパ イ ラ プ リ プ ロ セ ス さ れた コ ー ド 、 つま り 第 1 段階で出力 さ れた コ ー ド に対 し て実行 し ます。 言語別の コ ンパ イ ラ には 次の 2 つがあ り ます。 ° C コ ンパ イ ラ (cc1) 入力 C コ ー ド の最適化の大部分を担い、 アセ ンブ リ コ ー ド を生成 し ます。 ° C++ コ ンパ イ ラ (cc1plus) 入力 C++ コ ー ド の最適化の大部分を担い、 アセ ンブ リ コ ー ド を生成 し ます。 • アセ ンブ ラ (MicroBlaze 用の mb-as、 ARM 用の arm-xilinx-eabi-as) アセ ンブ ラ コ ー ド にはアセ ンブ リ 言語のニーモニ ッ ク があ り ます。 アセ ンブ ラ は、 こ れ ら のニーモニ ッ ク を機械 語に変換 し ます。 コ ンパ イ ラ で生成 さ れた ラ ベルの一部 も 解決 し ます。 アセ ンブ ラ はオブジ ェ ク ト フ ァ イ ルを生 成 し 、 リ ン カーに渡 し ます。 • リ ン カー (MicroBlaze 用の mb-ld、 ARM 用の arm-xilinx-eabi-ld) アセ ン ブ ラ で生成 さ れたオブジ ェ ク ト フ ァ イ ルを リ ン ク 付け ます。 コ マ ン ド ラ イ ン で ラ イ ブ ラ リ が指定 さ れて い る 場合は、 アセ ンブ ラ か ら の関数を リ ン ク す る こ と に よ り 、 コ ー ド 内の未定義の参照の一部を解決 し ます。 実行オプシ ョ ンは次のセ ク シ ョ ンで説明 さ れてい ます。 • 16 ページの 「 よ く 使用 さ れ る コ ンパ イ ラ オプシ ョ ン : 早見表」 • 20 ページの 「 リ ン カー オプシ ョ ン」 • 26 ページの 「MicroBlaze コ ンパ イ ラ オプシ ョ ン : 早見表」 • 31 ページの 「MicroBlaze リ ン カー オプシ ョ ン」 • 39 ページの 「ARM Cortex-A9 コ ンパ イ ラ の使用法 と オプシ ョ ン」 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 12 第 2 章 : GNU コ ンパイ ラ ツール 注記 : こ の章では、 「GCC」 と 表記 さ れてい る 場合は MicroBlaze の コ ンパ イ ラ であ る mb-gcc、 「G++」 と 表記 さ れてい る 場合は MicroBlaze の C++ コ ンパ イ ラ であ る mb-g++ を指 し ます。 コ ンパイ ラの使用法 と オプ シ ョ ン 使用法 GNU コ ンパ イ ラ を実行す る には、 コ マ ン ド ラ イ ンに次の よ う に入力 し ます。 <Compiler_Name> options files... <Compiler_Name> には mb-gcc ま たは arm-xilinx-eabi-gcc が入 り ます。C++ プ ロ グ ラ ム を コ ンパ イ ルす る には、mb-g++ ま たは arm-xilinx-eabi-g++ コ マ ン ド を使用 し ます。 入力 フ ァ イル コ ンパ イ ラ の入力フ ァ イ ル と し て、 次の中か ら 1 つま たは複数の フ ァ イ ルを指定 し ます。 • C ソ ース フ ァ イ ル • C++ ソ ース フ ァ イ ル • アセ ンブ リ フ ァ イ ル • オブジ ェ ク ト フ ァ イ ル • リ ン カー ス ク リ プ ト 注記 : こ れ ら の フ ァ イ ル の指定は オ プ シ ョ ン です。 入力 フ ァ イ ル を 指定 し な い場合は、 リ ン カ ー (mb-ld ま た は arm-xilinx-eabi-ld) のデフ ォ ル ト リ ン カー ス ク リ プ ト が使用 さ れます。 各フ ァ イ ルのデフ ォ ル ト の拡張子については、 表 2-1 を参照 し て く だ さ い。 上記の フ ァ イ ルに加え、 コ ンパ イ ラ では ラ イ ブ ラ リ フ ァ イ ルで あ る libc.a、 libgcc.a、 libm.a、 お よ び libxil.a が暗示的に参照 さ れ ま す。 こ れ ら の フ ァ イ ルは、 デフ ォ ル ト で Vivado の イ ン ス ト ール デ ィ レ ク ト リ にあ り ます。 G++ コ ンパ イ ラ を使用 し た場合は、 libsupc++.a お よ び libstdc++.a も 参照 さ れます。libsupc++.a は C++ 言語サポー ト 、libstdc++.a は C++ プ ラ ッ ト フ ォーム ラ イ ブ ラ リ です。 出力 フ ァ イル コ ンパ イ ラ では、 次の フ ァ イ ルが出力 と し て生成 さ れます。 • ELF フ ァ イ ル。 デフ ォ ル ト の出力フ ァ イ ル名は Windows の場合は 「a.exe」 です。 • アセ ンブ リ フ ァ イ ル (-save-temps ま たは -S オプシ ョ ン を使用 し た場合) • オブジ ェ ク ト フ ァ イ ル (-save-temps ま たは -c オプシ ョ ン を使用 し た場合) • プ リ プ ロ セ ッ サ出力フ ァ イ ル (-save-temps オプシ ョ ン を使用 し た場合、 .i ま たは .ii フ ァ イ ル) エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 13 第 2 章 : GNU コ ンパイ ラ ツール フ ァ イル タ イ プ と その拡張子 GNU コ ンパ イ ラ はフ ァ イ ルの拡張子か ら フ ァ イ ル タ イ プ を判断 し ます。 表 2-1 には、 有効な拡張子お よ びそれに対 応す る フ ァ イ ル タ イ プが ま と め ら れてい ます。 フ ァ イ ル タ イ プに応 じ て、 GCC ラ ッ パーが適切な ツールを呼び出 し ます。 表 2‐1 : フ ァ イルの拡張子 拡張子 フ ァ イル タ イ プ .c C フ ァ イル .C C++ フ ァ イ ル .cxx C++ フ ァ イ ル .cpp C++ フ ァ イ ル .c++ C++ フ ァ イ ル .cc C++ フ ァ イ ル .S アセ ンブ リ フ ァ イ ル (プ リ プ ロ セ ッ サ指示子を含む場合 も あ る ) .s アセ ンブ リ フ ァ イ ル (プ リ プ ロ セ ッ サ指示子は含ま ない) ライブラ リ 表 2-2 に、 mb_gcc お よ び arm-xilinx-eabi-gcc コ ンパ イ ラ で必要な ラ イ ブ ラ リ を リ ス ト し ます。 表 2‐2 : コ ンパイ ラ で使用 さ れる ラ イ ブ ラ リ ライブラ リ 説明 libxil.a Vivado ツール用に開発 さ れた ド ラ イ バー、 ソ フ ト ウ ェ ア サービ ス (XilMFS な ど)、初期化フ ァ イ ルが含まれます。 libc.a strcmp、 strlen な ど の関数を含む標準 C ラ イ ブ ラ リ です。 libgcc.a 浮動小数点お よ び 64 ビ ッ ト 演算用のエ ミ ュ レーシ ョ ン ルーチン を含む GCC の下位 ラ イ ブ ラ リ です。 libm.a cos、 sine な ど の関数を含む数学 ラ イ ブ ラ リ です。 libsupc++.a 例外処理、 RTTI な ど のルーチン を含む C++ サポー ト ラ イ ブ ラ リ です。 libstdc++.a C++ 標準プ ラ ッ ト フ ォーム ラ イ ブ ラ リ です。 ス ト リ ーム I/O、 フ ァ イ ル I/O、 文字列処理な ど の標準言語 ク ラ ス が含まれます。 ラ イ ブ ラ リ はど ち ら の コ ンパ イ ラ で も 自動的に リ ン ク さ れます。 標準 ラ イ ブ ラ リ と は別の ラ イ ブ ラ リ を使用す る 場合 は、 使用す る ラ イ ブ ラ リ の検索パ ス を指定する 必要があ り ます。 libxil.a は、 ド ラ イ バーお よ び ラ イ ブ ラ リ のルーチン を追加す る ため、 変更 さ れてい ます。 言語 タ イ プ GCC コ ンパ イ ラ は、C お よ び C++ の両言語を認識 し 、 それにあわせた コ ー ド を生成 し ます。GCC の規則に よ り 、 ソ ー ス フ ァ イ ルに GCC ま たは G++ コ ンパ イ ラ を同様に使用す る こ と が可能です。 使用す る コ ンパ イ ラ と ソ ース フ ァ イ ルの拡張子に基づいて、 入力フ ァ イ ルお よ び出力フ ァ イ ルの言語が決ま り ます。 GCC コ ンパ イ ラ を使用す る 場合、 プ ロ グ ラ ム の言語は14 ページの表 2-1に示す よ う に フ ァ イ ルの拡張子で決ま り ま す。 フ ァ イ ル拡張子か ら 判断 し て C++ ソ ース フ ァ イ ルであ る と 識別 さ れた場合は、 言語は C++ に設定 さ れます。 つ ま り 、 C コ ー ド が CC フ ァ イ ルに含まれてい る と 、 GCC コ ンパ イ ラ を使用 し た場合で も 、 関数名のマ ン グル処理が行 われます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 14 第 2 章 : GNU コ ンパイ ラ ツール GCC と G++ の主な違いは、G++ ではデフ ォ ル ト 言語が フ ァ イ ルの拡張子にかかわ ら ず C++ に自動的に設定 さ れ、C++ サポー ト ラ イ ブ ラ リ が読み込まれ る 点です。 そのため、 C フ ァ イ ル (.c) に含ま れ る C コ ー ド を G++ で コ ンパ イ ルす る と 、 関数名のマ ン グル処理が行われます。 名前マ ン グル処理は、 C++ な ど シ ン ボルのオーバー ロ ー ド をサポー ト する 言語に特有の概念です。 引数に よ っ て異な る 処理を実行 し 、 異な る 戻 り 値を返す よ う な関数を、 オーバー ロ ー ド (多重定義) さ れた関数 と 言い ま す。 こ れを サ ポー ト す る ため、 C++ コ ンパ イ ラ ではその関数名で呼び出 さ れ る 関数の タ イ プ をエン コ ー ド し て、 同 じ 名前の関数に 複数の定義が存在 し ない よ う に し ます。 一部の ソ ース フ ァ イ ルに C コ ー ド が含まれ、 その他に C++ コ ー ド が含まれ る 混合コ ンパ イ ル モー ド を使用する (一 部の フ ァ イ ルの コ ンパ イ ルに GCC を使用 し 、 その他の フ ァ イ ルの コ ンパ イ ルに G++ を使用す る ) 場合は、 名前マ ン グル処理に注意す る 必要があ り ます。 C シ ン ボルに対 し て名前マ ン グル処理が行われない よ う にする には、 シ ン ボル 宣言に次の文を使用 し ます。 #ifdef __cplusplus extern “C” { £endif int foo(); int morefoo(); #ifdef __cplusplus } £endif こ れ ら の宣言がヘ ッ ダー フ ァ イ ルで使用 さ れ る よ う に し 、 ソ ース フ ァ イ ルすべてに適用 さ れ る よ う に し ます。 こ れ に よ り 、 こ れ ら のシ ン ボルの定義お よ び参照を コ ンパ イ ルす る 際、 C 言語が使用 さ れ る よ う にな り ます。 注記 : Vivado のすべての ド ラ イ バーお よ び ラ イ ブ ラ リ は、 すべてのヘ ッ ダー フ ァ イ ルで上記の規則に従い ます。 G++ を使用 し て コ ンパ イ ルす る 場合は、 各 ド ラ イ バーお よ び ラ イ ブ ラ リ に記述 さ れてい る よ う に、 必要なヘ ッ ダー フ ァ イ ルを含め る 必要があ り ます。 こ れに よ り 、 コ ンパ イ ラ で ラ イ ブ ラ リ シ ン ボルが C タ イ プであ る こ と が確実に認識 さ れます。 ど ち ら の コ ンパ イ ラ で コ ンパ イ ルす る 場合で も 、 フ ァ イ ルを特定の言語に指定す る には -x lang オプシ ョ ン を使用 し ます。 こ のオプシ ョ ンの詳細は、 GNU の ウ ェ ブ サ イ ト の GCC マニ ュ アルを参照 し て く だ さ い。 付録 B 「その他の リ ソ ースお よ び法的通知」 に、 こ のマニ ュ アルへの リ ン ク があ り ます。 • GCC コ ンパ イ ラ を使用す る 場合は、 libstdc++.a お よ び libsupc++.a は自動的には リ ン ク さ れません。 • C++ プ ロ グ ラ ム を コ ンパ イ ルす る と き は、 G++ タ イ プの コ ンパ イ ラ を使用 し 、 必要なサポー ト ラ イ ブ ラ リ がす べて自動的に リ ン ク さ れ る よ う に し ます。 • ま た、 GCC コ マ ン ド に -lstdc++ お よ び -lsupc++ を追加す る こ と も 可能です。 それぞれの言語に応 じ て コ ンパ イ ルを起動す る 方法は、 GNU のオン ラ イ ン マニ ュ アルを参照 し て く だ さ い。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 15 第 2 章 : GNU コ ンパイ ラ ツール よ く 使用 さ れる コ ンパイ ラ オプ シ ョ ン : 早見表 MicroBlaze お よ び ARM の両方の コ ンパ イ ラ で共通の コ ンパ イ ラ オプシ ョ ン が次の表にわか り やす く ま と め ら れて い ます。 注記 : こ れ ら のオプシ ョ ンでは、 大文字 と 小文字が区別 さ れます。 オプシ ョ ン名を ク リ ッ ク す る と 、 そのオプシ ョ ンの説明にジ ャ ンプ し ます。 一般的なオプ シ ョ ン ラ イ ブ ラ リ 検索オプ シ ョ ン 「-E」 「-Wp,option」 「-l libraryname」 「-S」 「-Wa,option」 「-L Lib Directory」 「-c」 「-Wl,option」 「-g」 「-help」 ヘ ッ ダ フ ァ イ ル検索オプシ ョ ン 「-gstabs」 「-B directory」 「-I Directory Name」 「-On」 「-L directory」 「-v」 「-I directory」 リ ン カー オプシ ョ ン 「-save-temps」 「-l library」 「-defsym _STACK_SIZE=value」 「-o filename」 「-defsym _HEAP_SIZE=value」 一般的なオプ シ ョ ン -E プ リ プ ロ セ ス のみを実行 し 、 コ ンパ イ ル、 アセ ンブ リ 、 リ ン ク は実行 し ません。 プ リ プ ロ セ ス の結果は、 標準の出力 デバ イ ス に表示 さ れます。 -S コ ンパ イ ルのみを実行 し 、 アセ ンブ リ 、 リ ン ク は実行 し ません。 .s フ ァ イ ルを生成 し ます。 -c コ ンパ イ ルお よ びアセ ンブ リ のみを実行 し 、 リ ン ク は実行 し ません。 .o フ ァ イ ルを生成 し ます。 -g 出力フ ァ イ ルに DWARF2 ベース のデバ ッ グ情報を追加 し ます。 こ のデバ ッ グ情報は、 GNU デバ ッ ガー (mb-gdb ま た は arm-xilinx-eabi-gdb) で使用 さ れ ます。 デバ ッ ガーでは、 ソ ース レベル ま たはアセ ン ブ リ レベルでデバ ッ グ を実行 で き ます。 こ のオプシ ョ ンは、 入力が C ま たは C++ ソ ース フ ァ イ ルであ る 場合にのみデバ ッ グ情報を追加 し ます。 -gstabs ソ ース レベルのアセ ンブ リ フ ァ イ ル (.S) お よ びアセ ンブ リ フ ァ イ ル シ ン ボルに STABS ベース のデバ ッ グ情報を追 加 し ます。 こ れはアセ ンブ ラ オプシ ョ ンで、 GNU アセ ンブ ラ (mb-as ま たは arm-xilinx-eabi-as) に直接渡 さ れます。 ア セ ンブ リ フ ァ イ ルが コ ンパ イ ラ (mb-gcc ま たは arm-xilinx-eabi-gcc) を使用 し て コ ンパ イ ル さ れてい る 場合は、-Wa, を 前に付けて く だ さ い。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 16 第 2 章 : GNU コ ンパイ ラ ツール -On GNU コ ンパ イ ラ の最適化レベルを指定 し ます。 次の表にあ る 最適化レベルは、 C お よ び C++ ソ ース フ ァ イ ルにのみ 適用 さ れます。 表 2‐3 : 最適化レ ベル レ ベル 最適化 0 最適化は実行 さ れません。 1 中レベルの最適化が実行 さ れます。 2 完全な最適化を実行 し ます。 3 完全な最適化を実行 し ます。 サブプ ロ グ ラ ム を イ ン ラ イ ン化 し ます。 S サ イ ズ を小 さ く す る よ う 最適化 し ます。 注記 : 最適化レベルを 1 以上にす る と 、 コ ー ド の構成が変わ り ます。 コ ー ド のデバ ッ グ中は、 最適化レベルを 0 にす る こ と をお勧め し ます。 最適化 し たプ ロ グ ラ ム を GDB でデバ ッ グす る と 、 結果が不一致の よ う に見え る 場合があ り ます。 -v コ ンパ イ ラ お よ び コ ンパ イ ルに関連す る すべての ツールを詳細モー ド で実行 し ます。 こ のオプシ ョ ン を使用す る と 、 ツールで使用 さ れたオプシ ョ ンの詳細が得 ら れ る ので、 各ツールのデフ ォ ル ト オプシ ョ ン を見つけやす く な り ます。 -save-temps コ ンパ イ ル中に生成 さ れた中間フ ァ イ ルを保存 し ます。 次の フ ァ イ ルが保存 さ れます。 • プ リ プ ロ セ ッ サ出力 (C コ ー ド では input_file_name.i、 C++ では input_file_name.ii) • アセ ンブ リ フ ォーマ ッ ト の コ ンパ イ ラ (cc1) 出力 (input_file_name.s) • ELF フ ォーマ ッ ト のアセ ンブ ラ 出力 (input_file_name.s) デフ ォ ル ト では、 コ ンパ イ ルの内容全体が a.out に保存 さ れます。 -o filename コ ンパ イ ルの出力フ ァ イ ルは、 デフ ォ ル ト では a.out と い う ELF フ ァ イ ルです。 こ の フ ァ イ ル名は、 -o オプシ ョ ン を 使用す る と 変更で き ます。 出力フ ァ イ ルは ELF フ ォーマ ッ ト で生成 さ れます。 -Wp,option -Wa,option -Wl,option コ ンパ イ ラ (mb-gcc ま たは arm-xilinx-eabi-gcc) は ラ ッ パー フ ァ イ ルで、 プ リ プ ロ セ ッ サ、 コ ンパ イ ラ (cc1)、 アセ ンブ ラ 、 リ ン カーな ど を呼び出 し ます。 こ れ ら の ツールは、 コ ンパ イ ラ を介 し て ま と めて、 ま たは個別に実行で き ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 17 第 2 章 : GNU コ ンパイ ラ ツール こ れ ら の ツールで必要なオプシ ョ ンであ っ て も 、 最上位の コ ンパ イ ラ では不要な も の も あ り ます。 こ う し たオプシ ョ ンは、 次の表で示す よ う に指定 し ます。 表 2‐4 : ツール別オプ シ ョ ンの指定方法 オプ シ ョ ン ツール 例 -Wp,option プ リ プロセッサ mb-gcc -Wp,-D -Wp, MYDEFINE ... プ リ プ ロ セ ッ サで -D MYDEFINE オプシ ョ ン を使用 し て、シ ン ボ ル MYDEFINE が定義 さ れ る よ う 指定 し ます。 -Wa,option アセ ンブ ラ mb-as -Wa, ... MicroBlaze プ ロ セ ッ サ を タ ーゲ ッ ト にす る こ と を アセ ンブ ラ に知 ら せます。 -Wl,option リ ン カー mb-gcc -Wl,-M ... リ ン カーで -M オプシ ョ ン を使用 し て、 マ ッ プ フ ァ イ ルが生成 さ れ る よ う 指定 し ます。 -help GNU コ ンパ イ ラ で使用可能なオプシ ョ ンに関す る 情報を表示 し ます。 GCC のマニ ュ アル も 参照 し て く だ さ い。 -B directory C の ラ ン タ イ ムの ラ イ ブ ラ リ 検索パ ス に directory を加え ます。 -L directory ラ イ ブ ラ リ 検索パ ス に directory を加え ます。 -I directory ヘ ッ ダー検索パ ス に directory を加え ます。 -l library 未定義のシ ン ボルを library で検索 し ます。 注記 : こ の コ マ ン ド ラ イ ン オプシ ョ ンで指定 し た ラ イ ブ ラ リ 名に、 lib と い う 接頭辞が追加 さ れます。 ラ イ ブ ラ リ 検索オプ シ ョ ン -l libraryname デフ ォ ル ト では、 libc、 libm、 libxil な ど の標準 ラ イ ブ ラ リ のみが検索 さ れます。 カ ス タ ム ラ イ ブ ラ リ も 作成で き ます。 こ のオプシ ョ ン を使用 し てそのカ ス タ ム ラ イ ブ ラ リ を指定で き ます。 こ のオプシ ョ ン で指定 し た ラ イ ブ ラ リ 名に lib と い う 接頭辞が追加 さ れます。 コ マ ン ド ラ イ ン で指定す る オプシ ョ ン の順序には決ま り があ り 、 特に -l オプシ ョ ン では重要です。 こ のオプシ ョ ン は、 ソ ース フ ァ イ ルの後に使用 し て く だ さ い。 た と えば、 libproject.a と い う カ ス タ ム ラ イ ブ ラ リ を作成 し てい る 場合は、 次の コ マ ン ド を使用す る と こ の ラ イ ブ ラ リ に含まれ る 関数を使用で き ます。 Compiler Source_Files -L${LIBDIR} -l project エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 18 第 2 章 : GNU コ ンパイ ラ ツール 注意 : -l オプシ ョ ン を ソ ース フ ァ イ ルの前に使用す る と 、ソ ース フ ァ イ ルか ら 呼び出 さ れ る 関数を コ ンパ イ ラ は検索 で き ま セん。 こ れは、 コ ンパ イ ラ での検索は一方向にのみ行われ、 使用可能な ラ イ ブ ラ リ の リ ス ト で検索は行われな いか ら です。 -L Lib Directory ラ イ ブ ラ リ を検索す る デ ィ レ ク ト リ を指定 し ます。 デフ ォ ル ト の ラ イ ブ ラ リ が検索パス と し て設定 さ れてお り 、 標準 ラ イ ブ ラ リ は こ こ か ら 検索 さ れますが、 -L オプシ ョ ン を指定す る と 、 コ ンパ イ ラ の検索パ ス に ラ イ ブ ラ リ を検索す る デ ィ レ ク ト リ を追加で き ます。 ヘ ッ ダー フ ァ イル検索オプ シ ョ ン -I Directory Name ヘ ッ ダー フ ァ イ ルを標準パ ス で検索す る 前に、 /<dir_name> で指定 し たデ ィ レ ク ト リ で検索す る よ う 指定 し ます。 デ フ ォル ト の検索パス コ ンパ イ ラ (mb-gcc お よ び arm-xilinx-eabi-gcc) は、特定のパ ス か ら ラ イ ブ ラ リ お よ びヘ ッ ダー フ ァ イ ルを検索 し ます。 プ ラ ッ ト フ ォーム別の検索パ ス を、 次に示 し ます。 ラ イ ブ ラ リ 検索順序 ラ イ ブ ラ リ は、 次の順に検索 さ れます。 1. -L オプシ ョ ン で指定 さ れたデ ィ レ ク ト リ 2. -B オプシ ョ ンで指定 さ れたデ ィ レ ク ト リ 3. 次の ラ イ ブ ラ リ a. ${XILINX_}/gnu/processor/platform/processor-lib/lib b. ${XILINX_}/lib/processor 注記 : pocessor には、 MicroBlaze の場合は 「microblaze」、 ARM の場合は 「arm-xilinx-eabi」 が入 り ます。 ヘ ッ ダー フ ァ イル検索順序 ヘ ッ ダー フ ァ イ ルは、 次の順に検索 さ れます。 1. -I <dir_name> で指定 さ れたデ ィ レ ク ト リ 2. 次のヘ ッ ダー フ ァ イ ル a. ${XILINX_}/gnu/processor/platform/lib/gcc/processor/ {gcc version}/include b. ${XILINX_}/gnu/processor/platform/processor-lib/include 初期化フ ァ イル検索順序 初期化フ ァ イ ルは、 次の順に検索 さ れます。 1. -B <dir_name> で指定 さ れたデ ィ レ ク ト リ 2. ${XILINX_}/gnu/processor/platform/processor-lib/lib 3. 次の ラ イ ブ ラ リ エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 19 第 2 章 : GNU コ ンパイ ラ ツール a. $XILINX_/gnu/<processor>/platform/<processor-lib>/lib b. $XILINX_/lib/processor ° <processor> には、 MicroBlaze の場合は 「microblaze」、 ARM の場合は 「arm-xilinx-eabi」 が入 り ます。 ° <processor-lib> には、MicroBlaze の場合は 「microblaze-xilinx-elf」、ARM の場合は 「arm-xilinx-eabi」 が入 り ます。 注記 : platform には、 Linux の場合は 「lin」、 Linux 64 ビ ッ ト の場合は 「lin64」、 Windows Cygwin の場合は 「nt」 が 入 り ます。 リ ン カ ー オプ シ ョ ン -defsym _STACK_SIZE=value ス タ ッ ク 領域に割 り 当て ら れてい る メ モ リ 容量を変更 し ます。 変数 _STACK_SIZE は、 ス タ ッ ク 領域に割 り 当て ら れ てい る 総容量を示 し ます。 デフ ォ ル ト 値は 100 ワー ド (400 バ イ ト ) です。 ス タ ッ ク 領域 と ヒ ープ領域の合計に 400 バ イ ト 以上必要な場合は、 こ のオプシ ョ ン を使用 し て _STACK_SIZE の値を大き く し ます。 値はバ イ ト 単位で指定 し ま す。 プ ロ グ ラ ムで ス タ ッ ク 領域を大 き く す る 必要があ る 場合があ り ます。プ ロ グ ラ ムで必要な ス タ ッ ク サ イ ズが割 り 当て ら れてい る サ イ ズ よ り も 大 き い場合は、 ほかのプ ロ グ ラ ムの不正な領域に書き 込みが行われ、 コ ー ド が正常に実行 さ れない場合があ り ます。 注記 : ザ イ リ ン ク ス が提供す る C ラ ン タ イ ム (CRT) フ ァ イ ルに リ ン ク さ れたプ ロ グ ラ ム では、 ス タ ッ ク サ イ ズ を 16 バ イ ト (0x0010) 以上にす る 必要があ り ます。 -defsym _HEAP_SIZE=value ヒ ープ領域に割 り 当て ら れてい る メ モ リ 容量を変更 し ます。 変数 _HEAP_SIZE のデフ ォ ル ト 値は 0 です。 ダ イ ナ ミ ッ ク メ モ リ 割 り 当てルーチンは、 ヒ ープ領域を使用 し ます。 プ ロ グ ラ ム で こ の よ う に ヒ ープ領域を使用す る 場合は、 _HEAP_SIZE に適切な値を設定する 必要があ り ます。 上級者ユーザーであれば、 リ ン カー ス ク リ プ ト を IP イ ン テ グ レー タ ーか ら 直接生成する こ と も で き ます。 メ モ リ のレ イ アウ ト MicroBlaze お よ び ARM プ ロ セ ッ サは、32 ビ ッ ト の論理ア ド レ ス を使用 し 、シ ス テ ムの メ モ リ に 0x0 か ら 0xFFFFFFFF ま でのア ド レ ス を指定で き ます。 こ の範囲は、 予約済み メ モ リ と I/O メ モ リ に分け る こ と がで き ます。 予約済み メ モ リ 予約済み メ モ リ は、 ハー ド ウ ェ アお よ び ソ フ ト ウ ェ アのプ ロ グ ラ ム環境で専用に使用する ため定義 さ れ る 領域で、 割 り 込みベ ク タ ー ロ ケ ー シ ョ ン お よ び OS レ ベルのルーチ ン を 含む メ モ リ が一般的に予約済み メ モ リ と な り ま す。 表 2-5 には、 MicroBlaze お よ び ARM プ ロ セ ッ サそれぞれに対 し て規定 さ れてい る 予約済み メ モ リ ロ ケーシ ョ ンが ま と め ら れてい ます。 こ れ ら の メ モ リ ロ ケーシ ョ ンの詳細は、 使用す る プ ロ セ ッ サの リ フ ァ レ ン ス マニ ュ アルを参照 し て く だ さ い。 ARM メ モ リ マ ッ プについては 『Zynq-7000 All Programmable SoC テ ク ニ カル リ フ ァ レ ン ス マニ ュ アル』 (UG585)[参 照 2]を参照 し て く だ さ い。 注記 : ハー ド ウ ェ アだけでな く 、 ソ フ ト ウ ェ ア環境に対 し て も メ モ リ が予約 さ れ る 場合があ り ます。 ソ フ ト ウ ェ アに 対 し メ モ リ ロ ケーシ ョ ンが予約 さ れてい る か ど う か を確認す る には、 使用す る ソ フ ト ウ ェ ア プ ラ ッ ト フ ォームのマ ニ ュ アルを参照 し て く だ さ い。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 20 第 2 章 : GNU コ ンパイ ラ ツール 表 2‐5 : ハー ド ウ ェ ア で予約 さ れる メ モ リ ロ ケーシ ョ ン プロセ ッサ MicroBlaze 予約済み メ モ リ 用途 0x0 か ら 0x4F リ セ ッ ト 、 割 り 込み、 例外、 その他の予約済みベ ク タ ー の場所 デ フ ォル ト のテキス ト 開始ア ド レ ス 0x50 Cortex A9 ARM I/O メ モ リ I/O メ モ リ は、 プ ロ グ ラ ムがプ ロ セ ッ サ バ ス上の メ モ リ マ ッ プ さ れたペ リ フ ェ ラ ル と 通信す る ために使用 さ れます。 こ れ ら のア ド レ ス は、 ハー ド ウ ェ ア プ ラ ッ ト フ ォーム仕様の一部 と し て定義 さ れます。 ユーザーおよびプ ログ ラ ム メ モ リ ユーザーお よ びプ ロ グ ラ ム メ モ リ と は、 コ ンパ イ ル さ れた実行フ ァ イ ルの実行に必要な メ モ リ すべて を指 し ます。命 令、 読み出 し 専用デー タ 、 読み出 し /書 き 込みデー タ 、 プ ロ グ ラ ム ス タ ッ ク 、 プ ロ グ ラ ム ヒ ープの保存に使用 さ れま す。 こ れ ら のセ ク シ ョ ンは、 シ ス テ ム内のア ド レ ス指定可能な メ モ リ であればど こ にで も 保存で き ます。 デフ ォ ル ト では、 コ ンパ イ ラ で生成 さ れた コ ー ド お よ びデー タ は、 表 2-5 に リ ス ト さ れてい る ア ド レ ス か ら 開始 し て、 そ こ か ら 連続す る ア ド レ ス の メ モ リ ロ ケーシ ョ ンに保存 さ れます。 こ れが最 も 一般的なプ ロ グ ラ ムの メ モ リ レ イ ア ウ ト です。 プ ロ グ ラ ム の 開 始 位 置 を 変 更 す る に は、 MicroBlaze の 場合 は _TEXT_START_ADDR シ ン ボ ル、 ARM の 場合 は _START_ADDR シ ン ボルを定義 し ます。 ELF フ ァ イ ルのセ ク シ ョ ン を それぞれ異な る メ モ リ に分割す る 必要があ る 場合は、リ ン カー コ マ ン ド 言語を使用 し ま す。 詳細は、 24 ページの 「 リ ン カー ス ク リ プ ト 」 を参照 し て く だ さ い。 実行フ ァ イ ルの メ モ リ マ ッ プ を変更す る の は、 次の よ う な場合です。 ° 長い コ ー ド を複数の小型 メ モ リ に分割す る 場合 ° 頻繁に実行 さ れ る セ ク シ ョ ン を高速 メ モ リ にマ ッ プす る 場合 ° 読み出 し 専用セグ メ ン ト を不揮発性の フ ラ ッ シ ュ メ モ リ にマ ッ プする 場合 実行フ ァ イ ルの分割方法に制限はあ り ません。 分割は、 出力セ ク シ ョ ン レベル ま たは関数レベル、 デー タ レベルで 行 う こ と がで き ます。 生成 さ れ る ELF フ ァ イ ルが連続 し てお ら ず、 メ モ リ マ ッ プにギ ャ ッ プが存在す る こ と があ り ます。 予約済み ロ ケーシ ョ ン を使用 し ない よ う 注意 し て く だ さ い。 ま たは、ツールで提供 さ れ る 予約済み メ モ リ ロ ケーシ ョ ンのデフ ォ ル ト バ イ ナ リ デー タ を変更す る こ と も 可能です。 こ の場合、 リ ン カーで提供 さ れ る デフ ォ ル ト の ス タ ー ト ア ッ プ フ ァ イ ルお よ び メ モ リ マ ッ プ を置 き 換え る 必要があ り ます。 オブ ジ ェ ク ト フ ァ イルのセ ク シ ョ ン 実行フ ァ イ ルは、 オブジ ェ ク ト フ ァ イ ル (.o フ ァ イ ル) の入力セ ク シ ョ ン を リ ン ク し て作成 し ます。 デフ ォ ル ト では、 標準であ り 明確に定義 さ れたセ ク シ ョ ンか ら コ ンパ イ ラ が コ ー ド を作成 し ます。 各セ ク シ ョ ンには、 その意味お よ び 目的に応 じ て名前が付け ら れてい ます。 オブジ ェ ク ト フ ァ イ ルの さ ま ざ ま な標準セ ク シ ョ ン を次に示 し ます。 こ れ ら のセ ク シ ョ ンに加え、 カ ス タ ム セ ク シ ョ ン を作成 し て、 メ モ リ に割 り 当て る こ と も で き ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 21 第 2 章 : GNU コ ンパイ ラ ツール X-Ref Target - Figure 2-2 Sectional Layout of an object or an Executable File .text Text Section .rodata Read-Only Data Section .sdata2 Small Read-Only Data Section .sbss2 Small Read-Only Uninitialized Data Section .data Read-Write Data Section .sdata Small Read-Write Data Section .sbss Small Uninitialized Data Section .bss Uninitialized Data Section .heap Program Heap Memory Section .stack Program Stack Memory Section X11005 図 2‐2 : オブ ジ ェ ク ト (実行) フ ァ イルのセ ク シ ョ ン レ イ アウ ト .init、 .fini、 .ctors、 .dtors、 .got、 .got2、 .eh_frame な ど、 通常は変更 し ない予約済みセ ク シ ョ ンがあ り ます。 .text オブジ ェ ク ト フ ァ イ ルの こ のセ ク シ ョ ンには実行可能なプ ロ グ ラ ム命令が含まれてお り 、 x (実行 コ ー ド )、 r (読み出 し 専用)、 お よ び i (初期化) フ ラ グが付け ら れてい ます。 プ ロ セ ッ サ命令バ ス でア ド レ ス指定可能な初期化済み ROM に割 り 当て る こ と がで き ます。 .rodata こ のセ ク シ ョ ンには読み出 し 専用デー タ が含まれてお り 、r (読み出 し 専用) お よ び i (初期化) フ ラ グが付け ら れてい ま す。 .text セ ク シ ョ ン と 同様、 プ ロ セ ッ サ命令バ ス でア ド レ ス指定可能な初期化済み ROM に割 り 当て る こ と がで き ま す。 .sdata2 .rodata セ ク シ ョ ン と 同様ですが、 8 バ イ ト 未満のサ イ ズの小 さ い読み出 し 専用デー タ が含まれます。 こ のセ ク シ ョ ン のデー タ には、すべて読み出 し 専用の ス モール デー タ ア ン カーへの参照を使用 し てア ク セ ス し ます。 こ れに よ り 、 こ のセ ク シ ョ ンのすべてのデー タ に 1 つの命令でア ク セ ス で き ます。 こ のセ ク シ ョ ンに配置する デー タ のサ イ ズは、 -G オプシ ョ ンで変更で き ます。 r (読み出 し 専用) お よ び i (初期化) フ ラ グが付け ら れてい ます。 .data こ のセ ク シ ョ ンには読み出 し /書 き 込みデー タ が含まれてお り 、 w (読み出 し /書 き 込み) お よ び i (初期化) フ ラ グが付け ら れてい ます。 初期化済みの RAM にマ ッ プす る 必要があ り ます。 ROM にはマ ッ プで き ません。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 22 第 2 章 : GNU コ ンパイ ラ ツール .sdata こ のセ ク シ ョ ンには、 8 バ イ ト よ り も 小 さ い読み出 し /書き 込み可能なデー タ が含まれます。 こ のセ ク シ ョ ンに配置す る デー タ のサ イ ズは、 -G オプシ ョ ン で変更で き ます。 こ のセ ク シ ョ ンのデー タ には、 すべて読み出 し /書 き 込みの ス モール デー タ ア ン カーへの参照を使用 し て ア ク セ ス し ます。 こ れに よ り 、 こ のセ ク シ ョ ンのすべてのデー タ に 1 つ の命令でア ク セ ス で き ます。 w (読み出 し /書き 込み) お よ び i (初期化) フ ラ グが付け ら れてお り 、 初期化済み RAM に マ ッ プす る 必要があ り ます。 .sbss2 こ のセ ク シ ョ ンには、 8 バ イ ト よ り も 小 さ い読み出 し 専用の初期化 さ れないデー タ が含まれます。 こ のセ ク シ ョ ンに 配置す る デー タ のサ イ ズは、 -G オプシ ョ ン で変更で き ます。 r (読み出 し ) フ ラ グが付け ら れてお り 、 ROM にマ ッ プ す る 必要があ り ます。 .sbss こ のセ ク シ ョ ンには、 8 バ イ ト よ り も 小 さ い初期化 さ れないデー タ が含まれます。 こ のセ ク シ ョ ンに配置す る デー タ のサ イ ズは、 -G オプシ ョ ンで変更で き ます。 こ のセ ク シ ョ ンには、 w (読み出 し /書き 込み) フ ラ グが付け ら れてお り 、 RAM にマ ッ プす る 必要があ り ます。 .bss こ のセ ク シ ョ ン には、 初期化 さ れていないデー タ が含 ま れ ま す。 w (読み出 し /書 き 込み) フ ラ グ が付け ら れてお り 、 RAM にマ ッ プす る 必要があ り ます。 .heap こ のセ ク シ ョ ンには、 グ ロ ーバル プ ロ グ ラ ム ヒ ープ と し て使用 さ れ る 初期化 さ れていないデー タ が含ま れ ます。 こ のセ ク シ ョ ンの メ モ リ は、 ダ イ ナ ミ ッ ク メ モ リ 割 り 当てルーチンに よ り 割 り 当て ら れます。 RAM にマ ッ プす る 必要 があ り ます。 .stack こ のセ ク シ ョ ンには、 プ ロ グ ラ ム ス タ ッ ク と し て使用 さ れ る 初期化 さ れていないデー タ が含まれます。 RAM にマ ッ プす る 必要があ り ます。 通常は、 .heap セ ク シ ョ ンのすぐ 後に配置 さ れます。 リ ン カーに よ っ ては、 .stack と .heap セ ク シ ョ ンが .bss_stack と い う セ ク シ ョ ンにマージ さ れてい る よ う に見え ます。 .init こ のセ ク シ ョ ンには言語初期化 コ ー ド が含まれてお り 、 .text セ ク シ ョ ン と 同 じ フ ラ グが付け ら れてい ます。 初期化済 みの ROM にマ ッ プす る 必要があ り ます。 .fini こ のセ ク シ ョ ンには言語 ク リ ーン ア ッ プ コ ー ド が含まれてお り 、 .text セ ク シ ョ ン と 同 じ フ ラ グが付け ら れてい ます。 初期化済みの ROM にマ ッ プす る 必要があ り ます。 .ctors こ のセ ク シ ョ ンにはプ ロ グ ラ ムの起動時に呼び出す必要のあ る 関数が リ ス ト さ れてお り 、.data と 同 じ フ ラ グが付け ら れてい ます。 初期化済みの RAM にマ ッ プす る 必要があ り ます。 .dtors こ のセ ク シ ョ ンにはプ ロ グ ラ ムの終了時に呼び出す必要のあ る 関数が リ ス ト さ れてお り 、.data と 同 じ フ ラ グが付け ら れてい ます。 初期化済みの RAM にマ ッ プする 必要があ り ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 23 第 2 章 : GNU コ ンパイ ラ ツール .got2/.got こ のセ ク シ ョ ンにはプ ロ グ ラ ム デー タ へのポ イ ン タ ーが含まれてお り 、.data と 同 じ フ ラ グが付け ら れてい ます。 初期 化済みの RAM にマ ッ プす る 必要があ り ます。 .eh_frame こ のセ ク シ ョ ンには、 例外処理用の フ レーム巻き 戻 し 情報が含まれます。 こ のセ ク シ ョ ンには、 .rodata と 同 じ フ ラ グ が付け ら れてお り 、 初期化済みの ROM にマ ッ プで き ます。 .tbss こ のセ ク シ ョ ンには、 初期化 さ れない ス レ ッ ド の ロ ーカル デー タ が含まれてお り 、 こ のデー タ はプ ロ グ ラ ムの メ モ リ イ メ ージの一部にな り ます。 こ のセ ク シ ョ ンには、 .bss と 同 じ フ ラ グが付け ら れてお り 、 RAM にマ ッ プす る 必要があ り ます。 .tdata こ のセ ク シ ョ ン には、 初期化 さ れた ス レ ッ ド の ロ ーカル デー タ が含 ま れてお り 、 こ のデー タ はプ ロ グ ラ ム の メ モ リ イ メ ージの一部にな り ます。 初期化済みの RAM にマ ッ プす る 必要があ り ます。 .gcc_except_table こ のセ ク シ ョ ンには、 言語特定のデー タ が含まれてい ます。 初期化済みの RAM にマ ッ プする 必要があ り ます。 .jcr こ のセ ク シ ョ ンには、 コ ンパ イ ル さ れた Java ク ラ ス を登録す る ために必要な情報が含まれてい ます。内容は コ ンパ イ ラ に特化 し た も ので、 コ ンパ イ ラ 初期化関数が使用 し ます。 初期化済みの RAM にマ ッ プする 必要があ り ます。 .fixup こ のセ ク シ ョ ンには、 フ ィ ッ ク ス ア ッ プ ページ テーブルやフ ィ ッ ク ス ア ッ プ レ コ ー ド テーブルを実行す る ために必 要な情報が含まれてい ます。 初期化済みの RAM にマ ッ プす る 必要があ り ます。 リ ン カ ー ス ク リ プ ト リ ン カー ユーテ ィ リ テ ィ は、 リ ン カー ス ク リ プ ト で指定 し た コ マ ン ド を使用 し てユーザー プ ロ グ ラ ム を複数の メ モ リ ブ ロ ッ ク に分割 し ます。 リ ン カー ス ク リ プ ト は、 すべての入力オブジ ェ ク ト フ ァ イ ルのすべてのセ ク シ ョ ンか ら 実行フ ァ イ ルへのマ ッ プ を記述 し ます。 出力セ ク シ ョ ンは、 シ ス テ ムの メ モ リ にマ ッ プ さ れます。 プ ロ グ ラ ム デー タ を連続す る メ モ リ に割 り 当て る と い う デフ ォ ル ト 操作を変更 し ない場合は、 リ ン カー ス ク リ プ ト は必要あ り ません。 リ ン カーには、 セ ク シ ョ ンの内容を連続的に割 り 当て る 、 デフ ォ ル ト の リ ン カー ス ク リ プ ト が用意 さ れてい ます。 プ ロ グ ラ ムの開始 ロ ケーシ ョ ンのみを変更す る には、 次の例に示す よ う に、 MicroBlaze の場合は _TEXT_START_ADDR シ ン ボル、 ARM の場合は START_ADDR シ ン ボルを定義 し ます。 mb-gcc <input files and flags> -Wl,-defsym -Wl,_TEXT_START_ADDR=0x100 mb-ld <.o files> -defsym _TEXT_START_ADDR=0x100 $XILINX_/gnu/<procname>/<platform>/<processor_name>/lib/ldscripts にあ る 、 リ ン カーで使用 さ れ る デフ ォ ル ト ス ク リ プ ト には次の も のがあ り ます。 • elf32<procname>.x : こ の後に示すオプシ ョ ンのいずれ も 使用 さ れていない場合のデフ ォ ル ト • elf32<procname>.xn : -n オプシ ョ ン を使用 し た場合 • elf32<procname>.xbn : -N オプシ ョ ン を使用 し た場合 • elf32<procname>.xr : -r オプシ ョ ン を使用 し た場合 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 24 第 2 章 : GNU コ ンパイ ラ ツール • elf32<procname>.xu : -Ur オプシ ョ ン を使用 し た場合 <procname> =microblaze、<processor_name> = microblaze、 お よ び <platform> = lin ま たは nt と な り ます。 リ ン カー ス ク リ プ ト を使用す る には、 GCC コ マ ン ド ラ イ ンで指定 し ます。 コ ンパ イ ラ には、 次の よ う に -T <script> オプシ ョ ン を使用 し ます。 compiler -T <linker_script> <Other Options and Input Files> リ ン カーを個別に実行す る 場合は、 リ ン カー ス ク リ プ ト を次の よ う に指定 し ます。 compiler -T <linker_script> <Other Options and Input Files> こ の コ マ ン ド を使用す る と 、 デフ ォ ル ト の リ ン カー ス ク リ プ ト の代わ り に指定 し た リ ン カー ス ク リ プ ト が使用 さ れ ます。 プ ロ グ ラ ム用の リ ン カー ス ク リ プ ト は、 IP イ ン テ グ レー タ ーお よ び SDK か ら 生成で き ます。 IP イ ン テ グ レー タ ーま たは SDK で、 [Tooks] → [Generate Linker Script] を ク リ ッ ク し ます。 こ れで リ ン カー ス ク リ プ ト 生成ユーテ ィ リ テ ィ が開き ます。 セ ク シ ョ ンか ら メ モ リ へのマ ッ プは、 こ こ で行い ます。 ス タ ッ ク お よ び ヒ ープのサ イ ズ と メ モ リ マ ッ プ も こ こ で設定で き ます。 リ ン カー ス ク リ プ ト が生成 さ れ る と 、 IP イ ン テ グ レー タ ーま たは SDK 内で対応す る アプ リ ケーシ ョ ン を コ ンパ イ ル し た と き にその ス ク リ プ ト が自動的に GCC に入力 さ れます。 リ ン カー ス ク リ プ ト は、 メ モ リ に変数ま たは関数を割 り 当て る ために使用で き ます。 こ れには、 C コ ー ド のセ ク シ ョ ン属性を使用 し ます。 ま た、 リ ン カー ス ク リ プ ト で メ モ リ のセ ク シ ョ ンにオブジ ェ ク ト フ ァ イ ルを割 り 当て る こ と も で き ま す。 こ れ ら の機能お よ びその他の機能については、 オ ン ラ イ ン binutils マニ ュ アルの一部であ る GNU リ ン カーのマニ ュ アルを参照 し て く だ さ い。 GNU マニ ュ アルへの リ ン ク は付録 B 「その他の リ ソ ー ス お よ び法的通知」 にあ り ます。 MicroBlaze プ ロ セ ッ サの リ ン カー ス ク リ プ ト に よ り 割 り 当て ら れ る 入力セ ク シ ョ ンの詳細については、 32 ページの 「MicroBlaze リ ン カー ス ク リ プ ト で割 り 当て ら れ る セ ク シ ョ ン」 を参照 し て く だ さ い。 MicroBlaze コ ンパイ ラの使用法 と オプ シ ョ ン MicroBlaze 用の GNU コ ンパ イ ラ は、 標準の GNU ソ ース に基づいてい ます。MicroBlaze コ ンパ イ ラ に特定の機能お よ び オ プ シ ョ ン を 次 に 説 明 し ま す。 MicroBlaze コ ン パ イ ラ で コ ン パ イ ル す る 場合、 プ リ プ ロ セ ッ サ で 自動的 に __MICROBLAZE__ 定義が使用 さ れます。 こ の定義は、 ど の よ う な条件 コ ー ド で も 使用で き ます。 MicroBlaze コ ンパイ ラ ザ イ リ ン ク ス MicroBlaze ソ フ ト プ ロ セ ッ サ用の mb-gcc コ ンパ イ ラ では、 専用のオプシ ョ ンが追加 さ れてい る だけで な く 、 GNU コ ンパ イ ラ でサポー ト さ れてい る 一部のオプシ ョ ンが変更 さ れてい ます。 こ こ では、 その両方のオプシ ョ ンについて説明 し ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 25 第 2 章 : GNU コ ンパイ ラ ツール MicroBlaze コ ンパイ ラ オプ シ ョ ン : 早見表 オプシ ョ ン名を ク リ ッ ク す る と 、 そのオプシ ョ ンの説明にジ ャ ンプ し ます。 プ ロ セ ッ サ機能選択オプ シ ョ ン 一般プ ログ ラ ム オプ シ ョ ン -mcpu=vX.YY.Z -msmall-divides -mno-xl-soft-mul -mxl-gp-opt -mxl-multiply-high -mno-clearbss -mno-xl-multiply-high -mxl-stack-check -mxl-soft-mul ア プ リ ケーシ ョ ン実行モー ド -mno-xl-soft-div -xl-mode-executable -mxl-soft-div -xl-mode-bootstrap -mxl-barrel-shift -xl-mode-novectors -mno-xl-barrel-shift MicroBlaze リ ン カ ー オプ シ ョ ン -mxl-pattern-compare -defsym _TEXT_START_ADDR=value -mno-xl-pattern-compare -relax -mhard-float -N -msoft-float -mxl-float-convert -mxl-float-sqrt プ ロ セ ッ サ機能選択オプ シ ョ ン -mcpu=vX.YY.Z MicroBlaze ハー ド ウ ェ アのバージ ョ ン v.X.YY.Z に適 し た コ ー ド を生成 し ます。 プ ロ セ ッ サ用に最適化 さ れた正 し い コ ー ド を生成す る には、 こ のオプシ ョ ンでプ ロ セ ッ サのハー ド ウ ェ ア バージ ョ ン を指定 し ます。 指定す る バージ ョ ンに よ っ て、 -mcpu の動作は異な り ます。 • Pr-v3.00.a:3 段プ ロ セ ッ サ パ イ プ ラ イ ン モー ド を使用 し ます。命令を遅延ス ロ ッ ト に移動す る 例外は禁止 さ れません。 • v3.00.a お よ び v4.00.a3 段プ ロ セ ッ サ パ イ プ ラ イ ン モー ド を使用 し ます。 命令を遅延ス ロ ッ ト に移動す る 例外は禁止 さ れます。 • v5.00.a 以降5 段プ ロ セ ッ サ パ イ プ ラ イ ン モー ド を使用 し ます。 命令を遅延ス ロ ッ ト に移動す る 例外は禁止 さ れ ません。 -mlittle-endian / -mbig-endian コ ンパ イ ル さ れてい る コ ー ド の タ ーゲ ッ ト マシ ン のエ ンデ ィ ア ン を選択す る ため、 こ れ ら のオプシ ョ ン を使用 し ま す。生成 さ れ る バ イ ナ リ オブジ ェ ク ト フ ァ イ ルのエンデ ィ ア ン も こ のオプシ ョ ンに基づいて設定 さ れます。下位ツー ル (as、 cc1、 cc1plus、 ld な ど) で該当す る エンデ ィ ア ン を設定す る ため、 GCC ド ラ イ バーはオプシ ョ ン を下位ツール に渡 し ます。 デフ ォ ル ト は -mbig-endian です。 注記 : 複数のエンデ ィ ア ン を と り まぜたオブジ ェ ク ト フ ァ イ ルを リ ン ク さ せる こ と はで き ません。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 26 第 2 章 : GNU コ ンパイ ラ ツール -mno-xl-soft-mul 32 ビ ッ ト 乗算に対 し 、 ハー ド ウ ェ ア乗算命令を使用で き る よ う に し ます。 MicroBlaze プ ロ セ ッ サには、 ハー ド ウ ェ ア乗算 リ ソ ース の使用をオン/オ フ にす る オプシ ョ ンがあ り ます。 MicroBlaze でハー ド ウ ェ ア乗算オプシ ョ ンがオンにな っ てい る 場合は、 こ のオプシ ョ ン を使用する 必要があ り ます。 ハー ド ウ ェ ア乗算を使用す る と 、 アプ リ ケーシ ョ ンのパフ ォーマ ン ス が向上 し ます。 こ のオプシ ョ ン を使用する と 、 C プ リ プ ロ セ ッ サ定義 HAVE_HW_MUL が自動的に定義 さ れ ます。 こ れに よ り 、 こ の機能が使用可能か ど う かに基づいて、 ハー ド ウ ェ アに適 し た C ま たはアセ ンブ リ コ ー ド が記述 さ れます。 MicroBlaze での乗算器オプシ ョ ンの使用については、 『MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド 』 [参照 3] (UG081) を参照 し て く だ さ い。 -mxl-multiply-high MicroBlaze には、 32X32 ビ ッ ト 乗算の上位 32 ビ ッ ト を計算す る 命令を イ ネーブルにす る オプシ ョ ンがあ り ます。 こ のオプシ ョ ンは、 コ ンパ イ ラ で こ れ ら の上位ビ ッ ト 乗算命令を使用する よ う 指示 し ます。 こ のオプシ ョ ン を使用す る と 、 C プ リ プ ロ セ ッ サ定義 HAVE_HW_MUL_HIGH が自動的に定義 さ れます。 こ れに よ り 、 こ の機能が使用可能か ど う かに基づいて、 ハー ド ウ ェ アに適 し た C ま たはアセ ン ブ リ コ ー ド が記述 さ れ ます。 MicroBlaze での上位ビ ッ ト 乗 算命令の使用については、 『MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド 』 (UG081)[参照 3] を参照 し て く だ さ い。 -mno-xl-multiply-high 上位ビ ッ ト 乗算命令を使用 し ない よ う 指定 し ます。 こ のオプシ ョ ンがデフ ォ ル ト です。 -mxl-soft-mul MicroBlaze にハー ド ウ ェ ア乗算器がない こ と を示 し ます。 デバ イ ス にハー ド ウ ェ ア乗算器がない場合、 32 ビ ッ ト 乗算 操作は ソ フ ト ウ ェ ア エ ミ ュ レーシ ョ ン ルーチン __mulsi3 に置換 さ れます。 こ のオプシ ョ ンがデフ ォ ル ト です。 -mno-xl-soft-div MicroBlaze にハー ド ウ ェ ア除算器を イ ン ス タ ン シエー ト で き ます。除算器があ る 場合、 こ のオプシ ョ ン を指定す る と 、 コ ンパ イ ル さ れてい る プ ロ グ ラ ムでハー ド ウ ェ ア除算命令が使用で き る よ う にな り ます。 プ ロ グ ラ ムに除算処理が多数含まれてい る 場合、 こ のオプシ ョ ン を使用する と パフ ォーマ ン ス が向上 し ます。 こ のオ プシ ョ ン を使用す る と 、 C プ リ プ ロ セ ッ サ定義 HAVE_HW_DIV が自動的に定義 さ れ ます。 こ れに よ り 、 こ の機能が 使用可能か ど う かに基づいて、 ハー ド ウ ェ アに適 し た C ま たはアセ ン ブ リ コ ー ド が記述 さ れ ます。 MicroBlaze での ハー ド ウ ェ ア除算器オプシ ョ ンの使用については、『MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド 』 [参照 3] (UG081) を 参照 し て く だ さ い。 -mxl-soft-div タ ーゲ ッ ト の MicroBlaze にハー ド ウ ェ ア除算器がない こ と を示 し ます。 こ のオプシ ョ ンがデフ ォ ル ト です。 こ のオプシ ョ ン を設定す る と 、 すべての 32 ビ ッ ト 除算が対応す る ソ フ ト ウ ェ ア エ ミ ュ レーシ ョ ン ルーチン (__divsi3、 __udivsi3) に置換 さ れます。 -mxl-barrel-shift MicroBlaze プ ロ セ ッ サは、 バ レ ル シ フ タ ーを組み込む よ う コ ン フ ィ ギ ュ レ ーシ ョ ン で き ます。 プ ロ セ ッ サのバ レ ル シ フ ト 機能を使用す る には、 -mxl-barrel-shift オプシ ョ ン を使用 し ます。 デフ ォ ル ト ではバ レ ル シ フ タ ーはない と 判断 さ れ、 オペ ラ ン ド のシ フ ト には加算 と 乗算が使用 さ れ ます。 バ レ ル シ フ タ ーを イ ネーブルにす る と 、 特に浮動小数点 ラ イ ブ ラ リ を使用 し てい る 場合に、 アプ リ ケーシ ョ ンの速度が大幅に 向上 し ます。 こ のオプシ ョ ン を使用す る と 、 C プ リ プ ロ セ ッ サ定義 HAVE_HW_BSHIFT が自動的に定義 さ れます。 こ れに よ り 、 こ の機能が使用可能か ど う かに基づいて、 ハー ド ウ ェ アに適 し た C ま たはアセ ンブ リ コ ー ド が記述 さ れ ま す。 MicroBlaze でのバ レ ル シ フ タ ーのオプシ ョ ン の使用については、 『MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド 』 [参照 3] (UG081) を参照 し て く だ さ い。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 27 第 2 章 : GNU コ ンパイ ラ ツール -mno-xl-barrel-shift ハー ド ウ ェ ア バレル シ フ ト 命令を使用 し ない よ う 指定 し ます。 こ のオプシ ョ ンがデフ ォ ル ト です。 -mxl-pattern-compare コ ンパ イ ラ でのパ タ ーン比較命令の使用を オンに し ます。 パ タ ーン比較命令を使用す る と 、プ ロ グ ラ ムのブール演算の速度が向上 し ます。 ま た、パ タ ーン比較操作では、strcpy、 strlen、 strcmp な ど の文字列処理ルーチンにおいて、 バ イ ト 長ではな く ワ ー ド 長での操作が可能にな り ます。 文字列処 理ルーチン を多用す る プ ロ グ ラ ムでは、 こ れに よ り 処理速度が大幅に向上 し ます。 こ のオプシ ョ ン を使用す る と 、 C プ リ プ ロ セ ッ サ定義 HAVE_HW_PCMP が自動的に定義 さ れます。 こ れに よ り 、 こ の機能が使用可能か ど う かに基づい て、 ハー ド ウ ェ アに適 し た C ま たはアセ ン ブ リ コ ー ド が記述 さ れ ます。 MicroBlaze でのパ タ ーン比較オプシ ョ ン の 使用については、 『MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド 』 (UG081) [参照 3]を参照 し て く だ さ い。 -mno-xl-pattern-compare パ タ ーン比較命令を使用 し ない よ う 指定 し ます。 こ れがデフ ォ ル ト です。 -mhard-float コ ンパ イ ラ での単精度浮動小数点命令 (fadd、 frsub、 fmul、 fdiv) の使用を オンに し ます。 ま た、 fcmp.p 命令 (p は le、 ge、 lt、 gt、 eq、 ne な ど の述語条件) も 使用 し ます。 こ れ ら の命令は、 ハー ド ウ ェ アで FPU が イ ネーブルの場合に、 MicroBlaze でデ コ ー ド お よ び実行 さ れます。 こ のオプシ ョ ン を使用する と 、 C プ リ プ ロ セ ッ サ定義 HAVE_HW_FPU が自動的に定義 さ れます。 こ れに よ り 、 こ の機能が使用可能か ど う かに基づいて、 ハー ド ウ ェ アに適 し た C ま たはアセ ンブ リ コ ー ド が記述 さ れます。 MicroBlaze でのハー ド ウ ェ ア浮動小数点の使用については、 『MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド 』 (UG081) [参照 3]を参照 し て く だ さ い。 -msoft-float 浮動小数点演算の ソ フ ト ウ ェ ア エ ミ ュ レーシ ョ ン を使用する よ う 指定 し ます。 こ のオプシ ョ ンがデフ ォ ル ト です。 -mxl-float-convert コ ンパ イ ラ での単精度浮動小数点変換命令 (fint お よ び flt) の使用を オンに し ます。ハー ド ウ ェ アで FPU が イ ネーブル にな っ てお り 、 こ のオプシ ョ ン の命令が イ ネーブルにな っ てい る と 、 こ の命令は MicroBlaze に よ り ネ イ テ ィ ブにデ コ ー ド さ れ、 実行 さ れます。 MicroBlaze で のハー ド ウ ェ ア 浮動小数点の使用につい て は、 『MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス マ ニ ュ ア ル』 (UG081)[参照 3]を参照 し て く だ さ い。 -mxl-float-sqrt コ ンパ イ ラ での単精度浮動小数点平方根命令 (fsqrt) の使用をオンに し ます。ハー ド ウ ェ アで FPU が イ ネーブルにな っ てお り 、 こ のオプシ ョ ンの命令が イ ネーブルにな っ てい る と 、 こ の命令は MicroBlaze に よ り ネ イ テ ィ ブでデ コ ー ド さ れ、 実行 さ れます。 MicroBlaze で のハー ド ウ ェ ア 浮動小数点の使用につい て は、 『MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス マ ニ ュ ア ル』 (UG081)[参照 3]を参照 し て く だ さ い。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 28 第 2 章 : GNU コ ンパイ ラ ツール 一般プ ログ ラ ム オプ シ ョ ン -msmall-divides ハー ド ウ ェ ア除算器がない場合に、 小 さ い数値の除算に対 し て最適化 さ れた コ ー ド を生成 し ます。 分母 と 分子が 0 ~ 15 の間にあ る よ う な符号付 き 整数の除算では、 こ のオプシ ョ ン を使用す る と ル ッ ク ア ッ プ テーブルに基づ く 高速の 除算がで き る よ う にな り ます。 ハー ド ウ ェ ア除算器が イ ネーブルの場合は、 こ のオプシ ョ ンは無視 さ れます。 -mxl-gp-opt プ ロ グ ラ ムに上位 16 ビ ッ ト に 0 以外の値が含まれてい る ア ド レ ス があ る 場合、 読み込みま たは格納操作には 2 つの 命令が必要です。 MicroBlaze ABI には 2 つのグ ロ ーバル ス モール デー タ 領域があ り 、 それぞれ 64KB ま でのデー タ を保存で き ます。 こ れ ら のデー タ 領域にあ る メ モ リ ロ ケーシ ョ ンには、 ス モール デー タ 領域ア ン カーお よ び 16 ビ ッ ト の即値を使用 し て ア ク セ ス で き る ので、 ス モール デー タ 領域への読み込みま たは格納操作を 1 つの命令のみで実行で き ます。 こ の最適 化を オ ン にす る には、 -mxl-gp-opt オプシ ョ ン を使用 し ま す。 サ イ ズが し き い値未満の変数は こ れ ら の領域に保存 さ れ、 少ない命令数でア ド レ ス指定で き ます。 ア ド レ ス は リ ン ク 段階で計算 さ れます。 注意 : こ のオプシ ョ ン を使用す る 場合、 プ ロ グ ラ ムの ビル ド プ ロ セ ス の コ ンパ イ ル コ マ ン ド と リ ン ク コ マ ン ド の両 方で指定す る 必要があ り ます。 ど ち ら か一方のみで使用する と 、 コ ンパ イ ル、 リ ン ク 、 ま たは ラ ン タ イ ム エ ラ ーが発 生す る 可能性があ り ます。 -mno-clearbss こ のオプシ ョ ンは、 シ ミ ュ レーシ ョ ンで使用す る プ ロ グ ラ ム を コ ンパ イ ルす る 際に有益です。 C 言語のルールに基づ き 、 初期化 さ れていないグ ロ ーバル変数は .bss セ ク シ ョ ンに割 り 当て ら れ、 プ ロ グ ラ ム実行開 始時の値は常に 0 にな り ます。 通常、 プ ロ グ ラ ム実行開始時に、 .bss セ ク シ ョ ンが 0 で埋め ら れ る よ う に C ス タ ー ト ア ッ プ フ ァ イ ルをループで実行 し ます。 ま た、 コ ンパ イ ラ を最適化 し た場合 も 、 C コ ー ド で 0 に割 り 当て ら れた グ ロ ーバル変数が .bss セ ク シ ョ ンに割 り 当て ら れます。 シ ミ ュ レーシ ョ ン環境では、 上記の 2 言語機能は余分なオーバーヘ ッ ド と な る 場合があ り ます。 シ ミ ュ レー タ に よ っ ては、 メ モ リ 全体を自動的に 0 にす る も のがあ り ます。 通常の環境であ っ て も 、 グ ロ ーバル変数が開始時に 0 にな っ ていな く て も 良い よ う な C コ ー ド を記述で き ます。 その よ う な場合に こ のオプシ ョ ンが役立ち ます。 こ のオプシ ョ ン を使用す る と 、 C ス タ ー ト ア ッ プ フ ァ イ ルに よ り .bss セ ク シ ョ ンが 0 に初期化 さ れ る こ と はな く な り ます。 ま た、 こ のオプシ ョ ンは.bss セ ク シ ョ ンに 0 に初期化 さ れた グ ロ ーバル変数を割 り 当てず、 .data セ ク シ ョ ンに移動 し ます。 こ のオプシ ョ ンに よ り 、 アプ リ ケーシ ョ ンの起動時間が短縮 さ れ る 場合があ り ます。 こ のオプシ ョ ン を使用す る 場合は よ く 注意 し て く だ さ い。 ま た、 グ ロ ーバル変数を 0 に初期化す る こ と を前提に し てい る コ ー ド を使用 し ない、 ま たは シ ミ ュ レーシ ョ ン プ ラ ッ ト フ ォームが自動的に メ モ リ を 0 に初期化する コ ー ド を使用 し ない よ う に し て く だ さ い。 -mxl-stack-check プ ロ グ ラ ムの実行中に ス タ ッ ク オーバーフ ロ ーが発生 し てい る か ど う か をチ ェ ッ ク する よ う 指定 し ます。 コ ンパ イ ラ は、 各関数のプ ロ ロ ーグ コ ー ド 内に、 ス タ ッ ク ポ イ ン タ ー値 と 使用可能な メ モ リ を比較す る コ ー ド を挿 入 し ま す が、 ス タ ッ ク ポ イ ン タ ー が 使用可能 な メ モ リ を 超 え て い る 場合 は、 プ ロ グ ラ ム は サ ブ ル ー チ ン _stack_overflow_exit に飛びます。 こ のサブルーチンは、 変数 _stack_overflow_error の値を 1 に設定 し ます。 ス タ ッ ク オーバーフ ロ ー ハン ド ラ ー と し て機能す る 関数 _stack_overflow_exit を ソ ース コ ー ド に含め、 標準の ス タ ッ ク オーバーフ ロ ー ハン ド ラ ーの代わ り と し て使用す る こ と がで き ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 29 第 2 章 : GNU コ ンパイ ラ ツール ア プ リ ケーシ ョ ン実行モー ド -xl-mode-executable mb-gcc でプ ロ グ ラ ム を コ ンパ イ ルす る 際のデフ ォ ル ト モー ド です。 mb-gcc を使用す る 場合は、 指定す る 必要はあ り ません。 こ のオプシ ョ ン を使用す る と 、 ス タ ー ト ア ッ プ フ ァ イ ル crt0.o が使用 さ れます。 -xl-mode-bootstrap ブー ト ロ ーダーを使用 し て読み込むアプ リ ケーシ ョ ン を コ ンパ イ ルす る 際に使用 し ます。 通常ブー ト ロ ーダーは、 不 揮発性 メ モ リ にあ り 、 プ ロ セ ッ サ リ セ ッ ト ベ ク タ ーにマ ッ プ さ れます。 標準実行フ ァ イ ルが こ のブー ト ロ ーダーで読 み込まれた場合、 アプ リ ケーシ ョ ン リ セ ッ ト ベ ク ターがブー ト ローダーの リ セ ッ ト ベ ク タ ーを上書き し ます。 その場 合、 プ ロ セ ッ サの リ セ ッ ト 時にブー ト ロ ーダーが最初に実行 さ れず (通常は最初に実行 さ れ る よ う にな っ てい る)、 こ のアプ リ ケーシ ョ ンの再読み込みおよ びその他必要な初期化が行われません。 こ の状況を回避す る ため、 こ の コ ンパ イ ラ オプシ ョ ン を使用す る 必要があ り ます。 こ の コ ンパ イ ラ オプシ ョ ン を使 用す る と 、 プ ロ セ ッ サの リ セ ッ ト 時に、 アプ リ ケーシ ョ ンではな く ブー ト ロ ーダーが実行 さ れます。 上記 と は異な る 状況で使用 さ れ る アプ リ ケーシ ョ ン では、 こ のオプシ ョ ンは機能 し ません。 こ のモー ド では、 crt2.o が ス タ ー ト ア ッ プ フ ァ イ ル と し て使用 さ れます。 -xl-mode-novectors MicroBlaze ベ ク タ ーを必要 と し ない アプ リ ケーシ ョ ン を コ ンパ イ ルす る 際に使用 し ま す。 通常は、 プ ロ セ ッ サの リ セ ッ ト 、 割 り 込み、 ま たは例外機能を使用 し ない ス タ ン ド ア ロ ン アプ リ ケーシ ョ ンで使用 し ます。 こ のオプシ ョ ン を 使用す る と 、 ベ ク タ ーの命令が含まれないので、 コ ー ド サ イ ズが小 さ く な り ます。 こ のモー ド では、 crt3.o が ス タ ー ト ア ッ プ フ ァ イ ル と し て使用 さ れます。 注意 : コ マ ン ド ラ イ ンで、 複数の実行モー ド を指定 し ないで く だ さ い。 複数のモー ド を指定する と 、 シ ン ボルが複数 定義 さ れてい る こ と が原因で リ ン ク エ ラ ーが発生 し ます。 位置独立 コ ー ド (PIC) MicroBlaze 用の GNU コ ンパ イ ラ では、 -fPIC お よ び -fpic オプシ ョ ンがサポー ト さ れてい ます。 こ れ ら のオプシ ョ ン を使用す る と 、 コ ンパ イ ラ で位置独立 コ ー ド (PIC) を生成で き ます。 こ の機能は、 共有 ラ イ ブ ラ リ お よ び再配置可能 実行フ ァ イ ルを イ ン プ リ メ ン ト す る ために Linux 上で MicroBlaze に対 し てのみ使用 さ れ ま す。 生成 さ れた コ ー ド の デー タ ア ク セ ス をすべて再配置す る にはグ ロ ーバル オ フ セ ッ ト テーブル (GOT) が使用 さ れ、 共有 ラ イ ブ ラ リ への関 数呼び出 し にはプ ロ シージ ャ リ ン ケージ テーブル (PLT) が使用 さ れます。 こ れは、 GNU ベース のプ ラ ッ ト フ ォーム で再配置可能 コ ー ド を生成 し 、 共有 ラ イ ブ ラ リ を ダ イ ナ ミ ッ ク に リ ン ク す る 際の標準的な方法です。 MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス MicroBlaze 用の GNU コ ンパ イ ラ は、 『MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド 』 (UG081)[参照 3] で定義 さ れてい る 、 アプ リ ケーシ ョ ン バ イ ナ リ イ ン タ ーフ ェ イ ス (ABI) を使用 し ます。 レ ジ ス タ お よ びス タ ッ ク の使用法に関す る 規則、 コ ンパ イ ラ で使用 さ れ る 標準 メ モ リ モデルの説明は、 ABI の資料を参照 し て く だ さ い。 MicroBlaze アセ ン ブ ラ ザ イ リ ン ク ス MicroBlaze ソ フ ト プ ロ セ ッ サ用の mb-as アセ ンブ ラ では、標準 GNU コ ンパ イ ラ でサポー ト さ れてい る オプシ ョ ンお よ び標準 GNU アセ ンブ ラ でサポー ト さ れてい る アセ ンブ ラ 指示子がサポー ト さ れてい ます。 mb-as アセ ンブ ラ では、 imm 命令以外の MicroBlaze マシ ン命令セ ッ ト の opcode がサポー ト さ れてい ます。 imm 命令 は、 大 き い即値が使用 さ れ る 場合に生成 さ れます。 imm 命令を含む コ ー ド を記述す る ためのアセ ンブ リ 言語プ ロ グ ラ マは必要あ り ません。 MicroBlaze の命令セ ッ ト の詳細は、 『MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド 』 (UG081)[参 照 3]を参照 し て く だ さ い。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 30 第 2 章 : GNU コ ンパイ ラ ツール mb-as アセ ンブ ラ では、 即値オペ ラ ン ド を使用する すべての MicroBlaze 命令を定数ま たは ラ ベル と し て指定す る 必要 があ り ます。 命令に PC 相対オペ ラ ン ド が必要な場合は、mb-as アセ ンブ ラ に よ り それが算出 さ れ、必要に応 じ て imm 命令に含め ら れます。 た と えば、 beqi (Branch Immediate if Equal) 命令には PC 相対オペ ラ ン ド が必要です。 アセ ンブ リ プ ロ グ ラ マでは、 こ の命令を次の よ う に使用 し ます。 beqi r3, mytargetlabel こ こ で、 mytargetlabel は対象 と な る 命令の ラ ベルです。 mb-as アセ ン ブ ラ に よ り 、 命令の即値が mytargetlabel - PC と し て算出 さ れます。 即値が 16 ビ ッ ト よ り 大 き い場合は、 imm 命令が自動的に挿入 さ れ ます。 コ ンパ イ ル時に mytargetlabel の値が不明な 場合は、 常に imm 命令が挿入 さ れます。 不要な imm 命令を削除する には、 relax オプシ ョ ン を使用 し て く だ さ い。 同様に、 命令で大 き な定数のオペ ラ ン ド が必要な場合は、 ア セ ン ブ リ 言語プ ロ グ ラ マで imm 命令ではな く オペ ラ ン ド を その ま ま使用す る 必要があ り ます。 た と えば次の コ ー ド では、 レ ジ ス タ r3 の内容に定数 200,000 を追加 し 、 結果 を レ ジ ス タ r4 に保存 し ます。 addi r4, r3, 200000 mb-as アセ ンブ ラ は、 こ のオペ ラ ン ド に imm 命令が必要であ る と 判断 し 、 自動的に挿入 し ます。 mb-as アセ ンブ ラ では、 アセ ンブ リ のプ ロ グ ラ ム を簡単にす る ため、 標準の MicroBlaze 命令セ ッ ト に加え てい く つか の擬似 opcode がサポー ト さ れてい ます。 表 2-6 に、 サポー ト さ れてい る 擬似 opcode を示 し ます。 表 2‐6 : GNU アセ ン ブ ラ でサポー ト さ れる擬似 Opcode 擬似 Opcode 説明 nop 操作は実行 さ れません。 次の命令に置換 さ れます。 or R0, R0, R0 la Rd, Ra, Imm 次の命令に置換 さ れます。 addik Rd, Ra, imm; = Rd = Ra + Imm; not Rd, Ra 次の命令に置換 さ れます。 xori Rd, Ra, -1 neg Rd, Ra 次の命令に置換 さ れます。 rsub Rd, Ra, R0 sub Rd, Ra, Rb 次の命令に置換 さ れます。 rsub Rd, Rb, Ra MicroBlaze リ ン カ ー オプ シ ョ ン MicroBlaze ソ フ ト プ ロ セ ッ サ用の mb-ld リ ン カーでは、GNU コ ンパ イ ラ でサポー ト さ れてい る オプシ ョ ンに加え、追 加のオプシ ョ ン も 導入 さ れてい ます。 こ のセ ク シ ョ ンでは、 こ れ ら のオプシ ョ ンについて説明 し ます。 -defsym _TEXT_START_ADDR=value デフ ォ ル ト では、 出力 コ ー ド のテ キ ス ト セ ク シ ョ ンはベース ア ド レ ス 0x0 か ら 開始 し ますが、 こ のオプシ ョ ン を使 用す る と 、 こ のデフ ォ ル ト を変更で き ます。 mb-gcc コ ンパ イ ラ の実行時に こ のオプシ ョ ン を指定する と 、 出力 コ ー ド のテ キ ス ト セ ク シ ョ ンは value で指定 し た ア ド レ ス か ら 開始す る よ う にな り ます。 デフ ォ ル ト の開始ア ド レ ス を使用す る 場合は、 -defsym _TEXT_START_ADDR を設定す る 必要はあ り ません。 こ れは リ ン カー オプシ ョ ンであ り 、 リ ン カーを個別に実行する 場合に使用 し ます。 リ ン カーを mb-gcc の一部 と し て 実行す る 場合は、 次のオプシ ョ ン を使用 し て く だ さ い。 -Wl,-defsym -Wl,_TEXT_START_ADDR=value エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 31 第 2 章 : GNU コ ンパイ ラ ツール -relax アセ ンブ ラ で生成 さ れた不要な imm 命令を削除す る リ ン カー オプシ ョ ンです。 アセ ンブ ラ では、 即値を算出で き な い命令があ る と 、 imm 命令が生成 さ れます。 ほ と ん ど の場合、 imm 命令は必要あ り ません。 -relax オプシ ョ ン を使用す る と 、 リ ン カーに よ り 不要な imm 命令が削 除 さ れます。 こ のオプシ ョ ンは、 リ ン カーを個別に実行 し た場合にのみ必要です。 リ ン カーを mb-gcc の一部 と し て実行す る 場合 は、 こ のオプシ ョ ンは自動的に指定 さ れます。 -N テ キ ス ト お よ びデー タ セ ク シ ョ ン を読み出 し /書 き 込み可能に し ます。 デー タ セ グ メ ン ト はページ揃え さ れ ま せん。 こ のオプシ ョ ンは、 MicroBlaze プ ロ グ ラ ム にのみ必要です。 リ ン カーを GCC コ ンパ イ ラ の一部 と し て実行す る 場合 は、 こ のオプシ ョ ンが自動的に指定 さ れます。 リ ン カーを個別に実行す る 場合は、 こ のオプシ ョ ン を指定す る 必要が あ り ます。 こ のオプシ ョ ンの詳細は、 GNU のマニ ュ アルを参照 し て く だ さ い。 MicroBlaze リ ン カーでは、 リ ン カー ス ク リ プ ト を使用 し て次に リ ス ト す る セ ク シ ョ ン を メ モ リ に割 り 当て ます。 MicroBlaze リ ン カ ー ス ク リ プ ト で割 り 当て ら れる セ ク シ ョ ン 表 2-7 に、 MicroBlaze リ ン カー ス ク リ プ ト で割 り 当て ら れ る 入力セ ク シ ョ ン を示 し ます。 表 2‐7 : リ ン カ ー ス ク リ プ ト で割 り 当て ら れる セ ク シ ョ ン セクシ ョ ン 説明 .vectors.reset リ セ ッ ト ベク ター コー ド .vectors.sw_exception ソ フ ト ウ ェ ア例外ベ ク タ ー コ ー ド .vectors.interrupt ハー ド ウ ェ ア割 り 込みベ ク タ ー コ ー ド .vectors.hw_exception ハー ド ウ ェ ア例外ベ ク タ ー コ ー ド .text 関数の コ ー ド お よ びグ ロ ーバル アセ ンブ リ 文か ら のプ ロ グ ラ ム命令 .rodata 読み出 し 専用変数 .sdata2 初期値を持つ読み出 し 専用の小 さ い ス タ テ ィ ッ ク お よ びグ ロ ーバル変数 .data 初期値を持つス タ テ ィ ッ ク お よ びグ ロ ーバル変数。 ブー ト コ ー ド に よ り ゼ ロ に初期化 さ れます。 .sdata 初期値を持つ小 さ い ス タ テ ィ ッ ク お よ びグ ロ ーバル変数 .sbss2 初期値のない読み出 し 専用の小 さ い ス タ テ ィ ッ ク お よ びグ ロ ーバル変数。ブー ト コ ー ド に よ り ゼ ロ に初期化 さ れます。 .sbss 初期値のない小 さ い ス タ テ ィ ッ ク お よ びグ ロ ーバル変数。 ブー ト コ ー ド に よ り ゼ ロ に初期化 さ れます。 .bss 初期値のない ス タ テ ィ ッ ク お よ びグ ロ ーバル変数。 ブー ト コ ー ド に よ り ゼ ロ に初期化 さ れます。 .heap ヒ ープ用に定義 さ れた メ モ リ のセ ク シ ョ ン .stack ス タ ッ ク 用に定義 さ れた メ モ リ のセ ク シ ョ ン エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 32 第 2 章 : GNU コ ンパイ ラ ツール リ ン カ ー ス ク リ プ ト を記述またはカ ス タ マ イ ズする際の ヒ ン ト カ ス タ ム リ ン カー ス ク リ プ ト を記述す る 場合は、 次の点に留意 し て く だ さ い。 • ベ ク タ ー セ ク シ ョ ンが MicroBlaze ハー ド ウ ェ アで定義 さ れた適切な メ モ リ に割 り 当て ら れてい る こ と を確認 し ます。 • ス タ ッ ク お よ び ヒ ープは .bss セ ク シ ョ ンに配置 し ます。 _stack 変数を こ の領域の_STACK_SIZE の後に設定 し 、 _heap_start 変数を _STACK_SIZE の後の次の ロ ケーシ ョ ンに設定 し ます。 ス タ ッ ク お よ び ヒ ープは、 ハー ド ウ ェ アお よ びシ ミ ュ レーシ ョ ンで初期化す る 必要がないので、_bss_end 変数は .bss お よ び COMMON の後に定義 し ま す。 注記 : .bss セ ク シ ョ ンの境界には ス タ ッ ク お よ び ヒ ープは含まれません。 • _SDATA_START__、 _SDATA_END__、 SDATA2_START、 _SDATA2_END__、 _SBSS2_START__、 _SBSS2_END__、 _bss_start、 _bss_end、 _sbss_start、 お よ び _sbss_end 変数は、 それぞれ .sdata、 .sdata2、 .sbss2、 .bss、 .sbss セ ク シ ョ ンの最初 と 最後に定義す る 必要があ り ます。 • ANSI C では、初期化 さ れない メ モ リ はすべて ス タ ー ト ア ッ プに初期化する 必要があ り ます (ス タ ッ ク お よ び ヒ ー プでは不要)。 提供 さ れてい る 標準の CRT では、 1 つの .bss セ ク シ ョ ンが 0 に初期化 さ れ る と 想定 さ れ ます。 複 数の .bss セ ク シ ョ ンがあ る 場合は、 こ の CRT は使用で き ません。 その場合は、 すべての .bss セ ク シ ョ ン を初期 化す る CRT を作成す る 必要があ り ます。 ス タ ー ト ア ッ プ フ ァ イル コ ンパ イ ラ で実行フ ァ イ ルを生成す る 際、 最後の リ ン ク コ マ ン ド には コ ンパ イ ル済みの ス タ ー ト ア ッ プ フ ァ イ ルお よ びエン ド フ ァ イ ルが含まれます。 ス タ ー ト ア ッ プ フ ァ イ ルは、 アプ リ ケーシ ョ ン コ ー ド が実行 さ れ る 前に、 言語 お よ びプ ラ ッ ト フ ォーム環境を設定 し ます。 ス タ ー ト ア ッ プ フ ァ イ ルでは、 通常次の処理が実行 さ れます。 • 必要に応 じ て、 リ セ ッ ト 、 割 り 込み、 お よ び例外ベ ク タ ーを設定 し ます。 • ス タ ッ ク ポ イ ン タ ー、 ス モール デー タ ア ン カー、 お よ びその他の レ ジ ス タ を設定 し ます。 詳細は、 33 ページの 表 2-8を参照 し て く だ さ い。 • BSS メ モ リ 領域を 0 に ク リ ア し ます。 • C++ コ ン ス ト ラ ク タ な ど の言語初期化関数を呼び出 し ます。 • ハー ド ウ ェ ア サブシ ス テ ム を初期化 し ます。 た と えば、 プ ロ グ ラ ムのプ ロ フ ァ イ ルが作成 さ れ る 場合は、 プ ロ フ ァ イ ル タ イ マーを初期化 し ます。 • main プ ロ シージ ャ の引数を設定 し 、 呼び出 し ます。 エン ド フ ァ イ ルには、 プ ロ グ ラ ムの終わ り に実行する 必要のあ る コ ー ド が含まれてい ます。 エン ド フ ァ イ ルでは、通 常次の処理が実行 さ れます。 • C++ デス ト ラ ク タ な ど の言語 ク リ ーン ア ッ プ関数を呼び出 し ます。 • ハー ド ウ ェ ア サブシ ス テ ムの初期化を解除 し ます。 た と えば、 プ ロ グ ラ ムのプ ロ フ ァ イ ルが作成 さ れてい る 場合 は、 プ ロ フ ァ イ ル サブシ ス テ ム を ク リ ーン ア ッ プ し ます。 表 2-8 には、 C ラ ン タ イ ム フ ァ イ ルの レ ジ ス タ 名、 値、 お よ びその説明が ま と め ら れてい ます。 表 2‐8 : C ラ ン タ イム フ ァ イルでのレ ジ ス タ の初期化 レジス タ 値 説明 r1 _stack-16 ス タ ッ ク ポ イ ン タ ー レ ジ ス タ 。 16 バ イ ト の最初の負のオ フ セ ッ ト で ス タ ッ ク 領域の下部を ポ イ ン ト す る よ う 初期化 さ れます。こ の 16 バ イ ト は、 引数を渡すのに使用 さ れます。 r2 _SDA2_BASE 読み出 し 専用の ス モール デー タ 領域ア ン カー ア ド レ ス。 r13 _SDA_BASE_ 読み出 し /書 き 込み可能な ス モール デー タ 領域ア ン カー ア ド レ ス。 その他の レ ジ ス タ Undefined その他の レ ジ ス タ の値は定義 さ れてい ません。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 33 第 2 章 : GNU コ ンパイ ラ ツール こ の後、 さ ま ざ ま な アプ リ ケーシ ョ ン モー ド で使用 さ れ る 初期化フ ァ イ ルについて説明 し ます。 こ の情報は、 アプ リ ケーシ ョ ンの ス タ ー ト ア ッ プ コ ー ド を理解 し たい、 ま たは変更 し たい と い う 上級者ユーザーを対象に し てい ます。 MicroBlaze では、 C ラ ン タ イ ム初期化に 2 つの段階があ り ます。 最初の段階では主にベ ク タ ーが設定 さ れ、 その後に 第 2 段階が開始 し ます。 ま た、 アプ リ ケーシ ョ ン モー ド に よ っ ては、 exit ス タ ブ も 提供 さ れます。 第 1 段階の初期化 フ ァ イル crt0.o ブー ト ロ ーダーま たはデバ ッ グ ス タ ブ を使用せずに、 ス タ ン ド ア ロ ンで実行 さ れ る プ ロ グ ラ ムに対 し て使用 し ます。 こ の フ ァ イ ルは、 リ セ ッ ト 、 割 り 込み、 例外、 お よ びハー ド ウ ェ ア例外ベ ク タ ーを指定 し 、 第 2 段階の ス タ ー ト ア ッ プ ルーチン _crtinit を呼び出 し ます。 _crtinit か ら 戻 る と 、 _exit ラ ベルで無限ループ を実行す る こ と に よ り プ ロ グ ラ ム を終了 し ます。 crt1.o アプ リ ケーシ ョ ン をデバ ッ グす る 際に使用 し ます。 ブ レー ク ポ イ ン ト お よ び リ セ ッ ト ベ ク タ ー以外のすべてのベ ク タ ーを指定 し 、 第 2 段階の ス タ ー ト ア ッ プ ルーチン _crtinit を呼び出 し ます。 crt2.o 実行フ ァ イ ルがブー ト ロ ーダーで読み込まれ る 場合に使用 し ます。リ セ ッ ト ベ ク タ ー以外のすべてのベ ク タ ーを指定 し 、 第 2 段階の ス タ ー ト ア ッ プ ルーチン _crtinit を呼び出 し ます。 _crtinit か ら 戻 る と 、 _exit ラ ベルで無限ループ を実 行す る こ と に よ り プ ロ グ ラ ム を終了 し ます。 リ セ ッ ト ベ ク タ ーは指定 さ れないので、 プ ロ セ ッ サの リ セ ッ ト 時には、 ブー ト ロ ーダーに よ り プ ロ グ ラ ムが再度読み込まれ、 開始 さ れます。 crt3.o 実行フ ァ イ ルでベ ク タ ーを使用せず、 コ ー ド サ イ ズ を小 さ く す る 場合に使用 し ます。 リ セ ッ ト ベ ク タ ーのみを指定 し 、 第 2 段階の ス タ ー ト ア ッ プ ルーチン _crtinit を呼び出 し ます。 _crtinit か ら 戻 る と 、 _exit ラ ベルで無限ループ を実 行す る こ と に よ り プ ロ グ ラ ム を終了 し ます。 ほかのベ ク タ ーは指定 さ れないので、 リ ン ク の段階で割 り 込み処理お よ び例外処理に関連す る ルーチンが含まれ る こ と はな く 、 コ ー ド サ イ ズが小 さ く な り ます。 第 2 段階の初期化 フ ァ イル C 標準に従い、 すべてのグ ロ ーバルお よ び ス タ テ ィ ッ ク 変数は 0 に初期化す る 必要があ り ます。 こ れは上記すべて の CRT に必要な共通の機能です。 こ のため、 別のルーチン _crtinit が呼び出 さ れます。 こ のルーチンは、 プ ロ グ ラ ム の .bss セ ク シ ョ ンの メ モ リ を初期化 し ます。 _crtinit ルーチンは ラ ッ パー フ ァ イ ルで も あ り 、 main プ ロ シージ ャ も 呼 び出 し ます。 main プ ロ シージ ャ を呼び出す前に、 ほかの初期化関数が呼び出 さ れ る 場合 も あ り ます。 _crtinit ルーチ ンは、 次の ス タ ー ト ア ッ プ フ ァ イ ルに よ り 提供 さ れます。 crtinit.o こ のデフ ォ ル ト の第 2 段階の C ス タ ー ト ア ッ プ フ ァ イ ルは、 次の処理を実行 し ます。 1. .bss セ ク シ ョ ン を 0 に ク リ ア し ます。 2. _program_init を呼び出 し ます。 3. コ ン ス ト ラ ク タ 関数 (_init) を呼び出 し ます。 4. main プ ロ シージ ャ の引数を設定 し 、 呼び出 し ます。 5. デス ト ラ ク タ 関数 (_fini) を呼び出 し ます。 6. _program_clean を呼び出 し 、 戻 り ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 34 第 2 章 : GNU コ ンパイ ラ ツール pgcrtinit.o こ れはプ ロ フ ァ イ ルの作成時に使用 さ れ、 次の処理を実行 し ます。 1. .bss セ ク シ ョ ン を 0 に ク リ ア し ます。 2. _program_init を呼び出 し ます。 3. _profile_init を呼び出 し 、 プ ロ フ ァ イ ル ラ イ ブ ラ リ を初期化 し ます。 4. コ ン ス ト ラ ク タ 関数 (_init) を呼び出 し ます。 5. main プ ロ シージ ャ の引数を設定 し 、 呼び出 し ます。 6. デス ト ラ ク タ 関数 (_fini) を呼び出 し ます。 7. _profile_clean を呼び出 し 、 プ ロ フ ァ イ ル ラ イ ブ ラ リ を ク リ ーン ア ッ プ し ます。 8. _program_clean を呼び出 し 、 戻 り ます。 sim-crtinit.o コ ンパ イ ラ で -mno-clearbss オプシ ョ ンが設定 さ れてい る 場合に使用 さ れ、 次の処理を実行 し ます。 1. _program_init を呼び出 し ます。 2. コ ン ス ト ラ ク タ 関数 (_init) を呼び出 し ます。 3. main プ ロ シージ ャ の引数を設定 し 、 呼び出 し ます。 4. デス ト ラ ク タ 関数 (_fini) を呼び出 し ます。 5. _program_clean を呼び出 し 、 戻 り ます。 sim-pgcrtinit.o プ ロ フ ァ イ ルの作成時に、 コ ンパ イ ラ で -mno-clearbss オプシ ョ ンが設定 さ れてい る 場合に使用 さ れ、 次の処理を実行 し ます。 1. _program_init を呼び出 し ます。 2. _profile_init を呼び出 し 、 プ ロ フ ァ イ ル ラ イ ブ ラ リ を初期化 し ます。 3. コ ン ス ト ラ ク タ 関数 (_init) を呼び出 し ます。 4. main プ ロ シージ ャ の引数を設定 し 、 呼び出 し ます。 5. デス ト ラ ク タ 関数 (_fini) を呼び出 し ます。 6. _profile_clean を呼び出 し 、 プ ロ フ ァ イ ル ラ イ ブ ラ リ を ク リ ーン ア ッ プ し ます。 7. _program_clean を呼び出 し 、 戻 り ます。 その他の フ ァ イル コ ンパ イ ラ は、 C++ 言語を サポー ト す る ため、 特定の標準 ス タ ー ト フ ァ イ ルお よ びエ ン ド フ ァ イ ル も 使用 し ま す。 crti.o、 crtbegin.o、 crtend.o、 お よ び crtn.o がそれに当た り ます。 こ れ ら の標準 コ ンパ イ ラ フ ァ イ ルは、 .init、 .fini、 .ctors、 お よ び .dtors セ ク シ ョ ンの内容を指定 し ます。 ス タ ー ト ア ッ プ フ ァ イルの変更 初期化フ ァ イ ルは、 コ ンパ イ ル済みの フ ァ イ ルお よ び ソ ース フ ァ イ ルの両方で提供 さ れます。 コ ンパ イ ル済みのオブ ジ ェ ク ト フ ァ イ ルは、 コ ンパ イ ラ ラ イ ブ ラ リ デ ィ レ ク ト リ に含ま れ ます。 MicroBlaze の GNU コ ンパ イ ラ の初期化 フ ァ イ ルの ソ ー ス は、 <XILINX_>/sw/lib/microblaze/src デ ィ レ ク ト リ に あ り 、 <XILINX_> は Vivado イ ン ス ト ール デ ィ レ ク ト リ を表 し ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 35 第 2 章 : GNU コ ンパイ ラ ツール カ ス タ ム ス タ ー ト ア ッ プ フ ァ イ ルを使用す る には、 ソ ース デ ィ レ ク ト リ にあ る フ ァ イ ルを、 アプ リ ケーシ ョ ン ソ ー ス の一部 と し て含め る 必要があ り ます。 ま た、 フ ァ イ ルを .o フ ァ イ ルに統合 し て、 共有エ リ アに配置す る こ と も 可能 です。 標準 フ ァ イ ル で は な く 新 し く 作成 し た オ ブ ジ ェ ク ト フ ァ イ ル を 参照す る 場合は、 mb-gcc の実行時に -B directory -name を使用 し ます。 デフ ォ ル ト の ス タ ー ト ア ッ プ フ ァ イ ルが使用 さ れない よ う にす る には、 コ ンパ イ ルの最後の行に -nostartfiles を追加 し ます。 注記 : crti.o、 crtbegin.o な ど の コ ンパ イ ラ 標準 CRT フ ァ イ ルは、 ソ ース コ ー ド が提供 さ れないので、 こ れ ら の フ ァ イ ルは、 イ ン ス ト ール デ ィ レ ク ト リ に含まれてい る も のを その ま ま使用 し て く だ さ い。 こ れ ら のフ ァ イ ルは、 最後の リ ン ク コ マ ン ド に含め る 必要があ る 場合があ り ます。 C プ ログ ラ ムのス タ ー ト ア ッ プ コ ー ド サイ ズの縮小 C プ ロ グ ラ ムの コ ー ド サ イ ズの制限が厳 し い場合は、オーバーヘ ッ ド の原因 と な る あ ら ゆ る も のを取 り 除 く 必要があ り ます。 こ のセ ク シ ョ ンでは、C プ ロ グ ラ ムで不要な C++ コ ン ス ト ラ ク タ ま たはデス ト ラ ク タ コ ー ド に よ る オーバー ヘ ッ ド を削減す る 方法を説明 し ます。 次の変更を加え る こ と に よ り 、 コ ー ド のサ イ ズ を約 220 バ イ ト 縮小で き ます。 1. 前のセ ク シ ョ ンで説明 し た よ う に、 イ ン ス ト ール領域か ら ス タ ー ト ア ッ プ フ ァ イ ルのカ ス タ ム コ ピーを作成 し ます。 アプ リ ケーシ ョ ンに適 し た crtn.s お よ び xcrtinit.s を コ ピー し ます。 た と えば、 アプ リ ケーシ ョ ンがブー ト ロ ー ダ ー を 使用 し て 読み込 ま れ、 プ ロ フ ァ イ ル が 作成 さ れ る 場合は、 イ ン ス ト ール領域 か ら crt2.s お よ び pg-crtinit.s を コ ピー し ます。 2. pg-crtinit.s か ら 次の行を削除 し ます。 brlid r15, __init /* Invoke language initialization functions */ nop および brlid r15, __fini /* Invoke language cleanup functions */ nop こ れに よ り 、 コ ン ス ト ラ ク タ お よ びデス ト ラ ク タ の処理に使用 さ れ る コ ー ド は参照 さ れな く な り 、 コ ー ド サ イ ズ が小 さ く な り ます。 3. こ れ ら の フ ァ イ ルを .o フ ァ イ ルに コ ンパ イ ル し て任意のデ ィ レ ク ト リ に配置する か、 アプ リ ケーシ ョ ン ソ ース の一部 と し て含め ます。 4. コ ンパ イ ラ に -nostartfiles オプシ ョ ン を追加 し ます。 特定の フ ォ ルダーに フ ァ イ ルを統合す る 場合は、 -B directory オプシ ョ ン も 使用 し ます。 5. アプ リ ケーシ ョ ン を コ ンパ イ ル し ます。 アプ リ ケーシ ョ ン を異な る モー ド で実行す る 場合は、 33 ページの 「ス タ ー ト ア ッ プ フ ァ イ ル」 の説明に従っ て、 適 切な CRT フ ァ イ ルを選択す る 必要があ り ます。 コ ンパイ ラ ラ イ ブ ラ リ mb-gcc コ ンパ イ ラ には、 GNU C 標準 ラ イ ブ ラ リ と GNU 数学 ラ イ ブ ラ リ が必要です。 Vivado には、 あ ら か じ め コ ン パ イ ル さ れた こ れ ら の ラ イ ブ ラ リ が含まれてい ます。 MicroBlaze のハー ド ウ ェ ア コ ン フ ィ ギ ュ レーシ ョ ンに基づ き 、 MicroBlaze の CPU ド ラ イ バーの該当バージ ョ ンが コ ピー さ れ ます。 使用す る ラ イ ブ ラ リ のバージ ョ ン を選択す る に は、 次の フ ォ ルダーを確認 し ます。 $XILINX_/gnu/microblaze/<platform>/microblaze-xilinx-elf/lib エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 36 第 2 章 : GNU コ ンパイ ラ ツール フ ァ イ ル名は、 コ ンパ イ ラ のオプシ ョ ン と ラ イ ブ ラ リ の コ ンパ イ ルに使用 さ れた コ ン フ ィ ギ ュ レーシ ョ ンに基づいて 付け ら れてい ます。 た と えば、 libc_m_bs.a は、 ハー ド ウ ェ ア乗算器 と バ レ ル シ フ タ ーを イ ネーブルに し て コ ンパ イ ル さ れた C ラ イ ブ ラ リ です。 表 2-9に、 使用 さ れてい る エン コ ー ド と そのエ ン コ ー ド で指定 さ れ る ラ イ ブ ラ リ の コ ン フ ィ ギ ュ レーシ ョ ン を示 し ま す。 表 2‐9 : コ ンパイ ラ フ ラ グ上のエ ン コ ー ド さ れた ラ イ ブ ラ リ フ ァ イル名 エ ン コ ーデ ィ ング 説明 _bs バレル シ フ タ ー用に コ ン フ ィ ギ ュ レーシ ョ ン _m ハー ド ウ ェ ア乗算器用に コ ン フ ィ ギ ュ レーシ ョ ン _p パ タ ーン コ ンパレー タ 用に コ ン フ ィ ギ ュ レーシ ョ ン 注意が必要なのは、 数学 ラ イ ブ ラ リ フ ァ イ ル (libm*.a) です。 C 標準では、 倍精度の浮動小数点演算を使用す る ため に、 sin() お よ び cos() な ど の共通の数学 ラ イ ブ ラ リ 関数が必要です。 し か し 、 こ の倍精度の浮動小数点演算は、 MicroBlaze のオプシ ョ ンの単精度の浮動小数点機能を フル活用で き ない可能性があ り ます。 Newlib 数学 ラ イ ブ ラ リ には、 単精度演算を使用 し て こ れ ら の数学関数を イ ンプ リ メ ン ト す る バージ ョ ンがあ り ます。 こ れ ら の単精度 ラ イ ブ ラ リ では MicroBlaze ハー ド ウ ェ ア浮動小数点ユニ ッ ト (FPU) を直接使用で き る ので、パフ ォー マ ン ス が向上す る 可能性があ り ます。 ア プ リ ケーシ ョ ン で標準精度が必要ではな く 、 パ フ ォ ーマ ン ス を向上 さ せたい場合は、 リ ン ク さ れた ラ イ ブ ラ リ の バージ ョ ン を手動で変更で き ます。 デフ ォ ル ト では、 CPU ド ラ イ バーに よ り 倍精度バージ ョ ン の ラ イ ブ ラ リ (libm_*_fpd.a) が IP イ ン テ グ レー タ ー プ ロ ジ ェ ク ト に コ ピー さ れます。 単精度バージ ョ ン を利用す る には、 対応する libm_*_fps.a を コ ピーす る カ ス タ ム CPU ド ラ イ バーを作成 し ます。 こ の 場合、対応す る libm_*_fps.a フ ァ イ ルを libm.a と し てプ ロ セ ッ サの ラ イ ブ ラ リ フ ォ ルダー (microblaze_0/lib な ど) に コ ピー し ます。 使用す る ラ イ ブ ラ リ を コ ピー し た ら 、 アプ リ ケーシ ョ ン ソ フ ト ウ ェ ア プ ロ ジ ェ ク ト を再ビル ド し ます。 ス レ ッ ド セー フ Vivado に含ま れ る MicroBlaze の C ラ イ ブ ラ リ お よ び数学 ラ イ ブ ラ リ は、 マルチ ス レ ッ ド 環境で使用す る よ う にはビ ル ド さ れてい ません。 printf()、 scanf()、 malloc()、 free() な ど の共通 C ラ イ ブ ラ リ 関数は ス レ ッ ド セーフ ではな く 、 シ ス テ ムで回復不可能な ラ ン タ イ ム エ ラ ーを引 き 起 こ す こ と があ り ます。 マルチ ス レ ッ ド 環境で Vivado ラ イ ブ ラ リ を 使用す る 場合は、 相互排他的な メ カ ニズ ム を使用 し て く だ さ い。 コ マ ン ド ラ イ ン引数 MicroBlaze プ ロ セ ッ サ プ ロ グ ラ ム では、 コ マ ン ド ラ イ ン引数を使用で き ま せん。 コ マ ン ド ラ イ ン引数 argc お よ び argv は、 C ラ ン タ イ ム ルーチンで 0 に初期化 さ れます。 割 り 込みハン ド ラ 割 り 込みハン ド ラ は、 通常のサブルーチン呼び出 し と は別の方法で コ ンパ イ ル さ れます。 割 り 込みハン ド ラ では、 不 揮発性レ ジ ス タ だけでな く 、 使用 さ れてい る 揮発性レ ジ ス タ も 保存す る 必要があ り ます。 ま た、 割 り 込みが発生 し た 際に、 マシ ン ス テー タ ス レ ジ ス タ (RMSR) の値 も 保存す る 必要があ り ます。 interrupt_handler サブルーチン と 割 り 込みハン ド ラ を区別す る ため、 mb-gcc は コ ー ド の宣言部に interrupt_handler 属性があ る か ど う か をチ ェ ッ ク し ます。 こ の属性は、 次の よ う に定義 さ れてい ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 37 第 2 章 : GNU コ ンパイ ラ ツール void function_name () __attribute__ ((interrupt_handler)); 注記 : 割 り 込みハン ド ラ の属性は、 プ ロ ト タ イ プ内でのみ指定 し 、 定義には含め ません。 割 り 込みハン ド ラ は、 揮発性レ ジ ス タ を使用する ほかの関数を呼び出す こ と も あ り ます。 揮発性レ ジ ス タ で正 し い値 を保持す る ため、 ハン ド ラ が非 リ ーフ関数であ る 場合は、 すべての揮発性レ ジ ス タ が保存 さ れます。 注記 : 非 リ ーフ関数 と は、 ほかのサブルーチン を呼び出す関数の こ と です。 割 り 込みハン ド ラ は、 MSS (Microprocessor Software Specification) フ ァ イ ルで定義 さ れます。 こ れ ら の定義に よ り 、 割 り 込みハン ド ラ 関数に属性が自動的に追加 さ れます。 割 り 込みハン ド ラ は rtid 命令を使用 し て、 割 り 込みで中断 さ れた関数に戻 り ます。 save_volatiles save_volatiles 属性は、 interrupt_handler 属性 と 似てい ますが、 割 り 込み処理か ら 戻る のに rtid ではな く rtsd を使用 し ま す。 こ の属性を使用す る と 、 非 リ ーフ関数の場合はすべての揮発性レ ジ ス タ が保存 さ れ、 リ ーフ関数の場合は使用 さ れて い る 揮発性レ ジ ス タ のみが保存 さ れます。 void function_name () __attribute__((save_volatiles)); fast_interrupt MicroBlaze コ ンパ イ ラ には、 interrupt_handler 属性に類似 し た fast_interrupt と い う 属性があ り ます。 高速割 り 込みがあ る と 、 MicroBlaze は、 固定ア ド レ ス 0x10 に飛ぶのではな く 、 割 り 込みルーチン ア ド レ ス に飛びます。 標準割 り 込み と は異な り 、 fast_interrupt 属性が C 関数で使用 さ れ る 場合は、 MicroBlaze は最小限の レ ジ ス タ し か保存 し ません。 void function_name () __attribute__ ((fast_interrupt)); 表 2‐10 : 割 り 込みハン ド ラの 属性 関数 interrupt_handler マシ ン ス テー タ ス レ ジ ス タ 、 不揮発性レ ジ ス タ 、 お よ びすべての揮発性レ ジ ス タ を 保存 し ます。 割 り 込みか ら 戻 る には rtid を使用 し ます。 割 り 込みハン ド ラ 関数が リ ー フ関数の場合は、 関数で使用 さ れた揮発性レ ジ ス タ のみが保存 さ れます。 save_volatiles interrupt_handler と 似てい ますが、割 り 込みか ら 戻 る のに rtid ではな く rtsd が使用 さ れ ます。 fast_interrupt interrupt_handler と 似てい ますが、固定ア ド レ ス 0x10 に飛ぶのではな く 、割 り 込みルー チン ア ド レ ス に直接飛びます。 管理モー ド の呼び出 し (SVC) MicroBlaze の コ ンパ イ ラ には、 svc_handler と svc_table_handler と い う 属性があ り ます。 こ れ ら の属性を使用 し て、 管 理モー ド で関数を実行す る 場合な ど、 関数を特権関数 と し て定義す る こ と がで き ます。 こ の属性が使用 さ れてい る と 。 関数呼び出 し 中に、 次の命令を使用 し て、 MicroBlaze は _vector_sw_exception に飛び ます。 brki rd, 0x8 こ の命令は、 MicroBlaze を管理モー ド に設定 し ます。 SVC 属性には 2 種類あ り ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 38 第 2 章 : GNU コ ンパイ ラ ツール • svc_handler : こ の属性を使用する と 、 MicroBlaze はすべて を処理実行 し ます。 管理モー ド で関数を実行 し 、 実行後に標準モー ド に戻 し ます。 void function_name () __attribute__((svc_handler)); • svc_table_handler : こ の属性を使用 し て関数を宣言す る と 、MicroBlaze はその関数のサービ ス ID が入力 さ れ る も の と 想定 し ます。サービ ス ID は まず R18 レ ジ ス タ に保存 さ れ、 その後 MicroBlaze が _exception_handler を 呼び出 し ます。 該当す る SVC 関数を呼び出すには、 R18 レ ジ ス タ を使用 し て _exception_handler を上書 き す る 必 要があ り ます。 void function_name () __attribute__(( svc_table_handler (Service ID))); ARM Cortex‐A9 コ ンパイ ラの使用法 と オプ シ ョ ン Sourcery CodeBench Lite for Xilinx EABI を使用 し 、 ARM プ ロ セ ッ サ を コ ンパ イ ルす る こ と がで き ます。 Sourcery CodeBench には、 次の コ ン ポーネ ン ト をすべて含む、 GNU ツールチ ェーンが含まれてい ます。 • CodeSourcery の共通ス タ ー ト ア ッ プ コ ー ド シーケ ン ス • CodeSourcery Debug Sprite for ARM • GNU バ イ ナ リ ユーテ ィ リ テ ィ (Binutils) • GNU C コ ンパ イ ラ (GCC) • GNU C++ コ ンパ イ ラ (G++) • GNU C++ ラ ン タ イ ム ラ イ ブ ラ リ (Libstdc++) • GNU デバ ッ ガー (GDB) • Newlib C ラ イ ブ ラ リ 使用法 コ ンパイル arm-xilinx-eabi-gcc -c file1.c -I<include_path> -o file1.o arm-xilinx-eabi-gcc -c file2.c -I<include_path> -o file2.o リンク arm-xilinx-eabi-gcc -Wl,-T -Wl,lscript.ld -L<libxil.a path> -o "App.elf" file2.o -Wl,--start-group,-lxil,-lgcc,-lc,--end-group file1.o 上記の コ マ ン ド で使用 さ れてい る フ ラ グの説明については、 次の コ マ ン ド のいずれか を使用 し て、 コ ンパ イ ラ のヘル プ を参照 し て く だ さ い。 • arm-xilinx-eabi-gcc --help • arm-xilinx-eabi-gcc -v --help • arm-xilinx-eabi-gcc --target-help エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 39 第 2 章 : GNU コ ンパイ ラ ツール コ ンパイ ラ オプ シ ョ ン ARM 関 連 の フ ラ グ を 使 用 し て 適 用 で き る 、 GNU コ ン パ イ ラ オ プ シ ョ ン に つ い て は、 GNU ウ ェ ブ サ イ ト http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html を参照 し て く だ さ い。 こ れ ら の フ ラ グは、 要件に基づ き 上記の手順 で使用で き ます。 ARM の GCC コ ンパ イ ラ オプシ ョ ンはすべて、 上記の リ ン ク 先に リ ス ト さ れてい ます。 し か し 、 実際のサポー ト は 使用 し てい る プ ロ セ ッ サ ( こ の場合は ARM Cortex A9) お よ び コ ンパ イ ラ ツールチ ェーンに よ っ て異な り ます。 次に例を示 し ます。 Sourcery CodeBench Lite for Xilinx EABI は、 -mhard-float (-mfloat-abi=hard) をサポー ト し ません。 soft お よ び softfp の浮 動小数点オプシ ョ ンのみがサポー ト さ れてい ます。 ツールチ ェーンの詳細については、 次の SDK イ ン ス ト ール パ ス にあ る 資料を参照 し て く だ さ い。 <Xilinx_Vivado_Installation_Path>\SDK\<2014.1>\gnu\arm\nt\share\doc その他の注意事項 C++ コ ー ド のサイ ズ 最新のオープン ソ ース C++ 標準 ラ イ ブ ラ リ (libstdc++-v3) を含む GCC ツールでは、 同等の C プ ロ グ ラ ムに比べて生 成 さ れ る コ ー ド お よ びデー タ 片が大 き く な る 場合があ り ます。 こ のオーバーヘ ッ ド の大部分は、 例外処理お よ び ラ ン タ イ ム型情報の コ ー ド お よ びデー タ に よ る も のです。 C++ アプ リ ケーシ ョ ンに よ っ ては、 こ れ ら の機能は必要あ り ま せん。 こ のオーバーヘ ッ ド を な く し 、コ ー ド サ イ ズ を最適化する には、 -fno-exceptions お よ び -fno-rtti オプシ ョ ン を使用 し ま す。 こ れ ら のオプシ ョ ンは、 アプ リ ケーシ ョ ン要件や こ れ ら の言語の機能に精通 し てい る 場合のみに使用す る こ と を お勧め し ます。 使用可能な コ ンパ イ ラ オプシ ョ ンお よ びそれ ら のオプシ ョ ンに よ る 影響については、 GCC のマニ ュ アルを参照 し て く だ さ い。 C++ プ ロ グ ラ ムには、 よ り 複雑な言語機能お よ び ラ イ ブ ラ リ ルーチンのため、 ダ イ ナ ミ ッ ク メ モ リ の要件 (ス タ ッ ク お よ び ヒ ープ サ イ ズ) が厳 し く な っ てい る 場合があ り ます。 多 く の C++ ラ イ ブ ラ リ ルーチンは、 ヒ ープか ら の メ モ リ の割 り 当て を要求 し ます。 C++ プ ロ グ ラ ムに必要な ヒ ープ サ イ ズお よ びス タ ッ ク サ イ ズが満た さ れてい る こ と を確認 し て く だ さ い。 C++ 標準 ラ イ ブ ラ リ C++ 標準 ラ イ ブ ラ リ は、 C++ 標準に よ り 定義 さ れます。 こ れ ら のプ ラ ッ ト フ ォーム機能には、 デフ ォ ル ト のザ イ リ ン ク ス Vivado ソ フ ト ウ ェ ア プ ラ ッ ト フ ォ ーム では使用で き ない も の も あ り ます。 た と えば、 フ ァ イ ル I/O は明確に定 義 さ れた STDIN/STDOUT ス ト リ ームで し かサポー ト さ れません。 ま た、 ロ ケール関数、 ス レ ッ ド セーフ な ど の機能 も サポー ト さ れません。 注記 : C++ 標準 ラ イ ブ ラ リ は、 マルチ ス レ ッ ド 環境で使用す る よ う に構築 さ れてい ま せん。 new、 delete な ど の共通 C++ 関数は ス レ ッ ド セーフ ではあ り ません。 マルチ ス レ ッ ド 環境で C++ 標準 ラ イ ブ ラ リ を使用す る 場合は、 注意が 必要です。 GNU C++ 標準 ラ イ ブ ラ リ の詳細は、 GNU の ウ ェ ブ サ イ ト のマニ ュ アルを参照 し て く だ さ い。 位置独立 コ ー ド (PIC) MicroBlaze コ ンパ イ ラ では、 再配置可能な位置独立 コ ー ド を生成す る -fPIC オプシ ョ ンがサポー ト さ れてい ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 40 第 2 章 : GNU コ ンパイ ラ ツール こ れ ら の機能はザ イ リ ン ク ス の コ ンパ イ ラ でサポー ト さ れてい ますが、 Vivado では ス タ ン ド ア ロ ン プ ラ ッ ト フ ォ ー ム し か提供 さ れないので、 ほかの ラ イ ブ ラ リ お よ びツールではサポー ト さ れません。 位置独立 コ ー ド は、 ロ ーダーま たはデバ ッ ガーでは認識 さ れず、 ラ ン タ イ ムでの再配置は実行 さ れません。 こ れ ら の コ ー ド の機能は、 ザ イ リ ン ク ス ラ イ ブ ラ リ 、 ス タ ー ト ア ッ プ フ ァ イ ル、 お よ びその他のツールでサポー ト さ れません。 サー ド パーテ ィ OS ベン ダー の ツールでは、 こ れ ら の機能を標準で使用で き る も のがあ り ます。 その他のオプ シ ョ ンお よび機能 -fprofile-arcs な ど、 その他のオプシ ョ ンお よ び機能は、 ザ イ リ ン ク ス の Vivado コ ンパ イ ラ お よ びプ ラ ッ ト フ ォーム で サポー ト さ れていない可能性があ り ます。 一部の機能は、 オープン ソ ース GCC で定義 さ れてい る よ う に試験段階で あ り 、 不適切に使用す る と 、 不正な コ ー ド が生成 さ れ る こ と があ り ま す。 特定の機能の詳細は、 GCC のマニ ュ アル を参照 し て く だ さ い。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 41 第 3章 XMD (Xilinx Microprocessor Debugger) XMD (Xilinx® Microprocessor Debugger) は、 MicroBlaze™ プ ロ セ ッ サ ま たは Dual ARM Cortex-A9 MPC プ ロ セ ッ サ を 含むシ ス テ ムの検証 と プ ロ グ ラ ムのデバ ッ グ を行 う ための ツールです。 こ れを使用 し て、 ハー ド ウ ェ ア ボー ド 上ま た はサ イ ク ル精度命令セ ッ ト シ ミ ュ レー タ (ISS) で実行する プ ロ グ ラ ム をデバ ッ グで き ます。 XMD は、 Tcl (ツール コ マ ン ド 言語) イ ン タ ーフ ェ イ ス を提供 し ます。 こ の イ ン タ ーフ ェ イ ス は、 タ ーゲ ッ ト の コ マ ン ド ラ イ ンか ら の制御、 タ ーゲ ッ ト のデバ ッ グ、 お よ び完成 し たシ ス テ ム全体を テ ス ト す る 複雑な検証ス ク リ プ ト の実 行に使用 し ます。 XMD は、 タ ーゲ ッ ト のデバ ッ グ を制御する ため、 GNU デバ ッ ガー (GDB) リ モー ト TCP プ ロ ト コ ルをサポー ト し て い ま す。 Eclipse ベー ス の ソ フ ト ウ ェ ア ツールで あ る SDK ( ソ フ ト ウ ェ ア開発キ ッ ト ) に含 ま れ る 、 MicroBlaze GDB (mb-gdb) ま たは Cortex A9 GDB (arm-xilinx-eabi-gdb) な ど、 一部のグ ラ フ ィ カルなデバ ッ ガーはデバ ッ グ用 に こ の イ ン タ ーフ ェ イ ス を使用 し ます。 ど ち ら を使用 し て も 、 同 じ コ ン ピ ュ ー タ ー上ま たはネ ッ ト ワー ク を介 し た リ モー ト コ ン ピ ュ ー タ 上で実行 さ れてい る XMD にデバ ッ ガーは接続 し ます。 XMD は、 プ ロ グ ラ ム を デバ ッ グす る ハー ド ウ ェ ア シ ス テ ム に関す る 情報 を 得 る た め、 XMP (Xilinx Microprocessor Project) シ ス テ ム フ ァ イ ルま たは system.xml フ ァ イ ルの ど ち ら か使用可能なほ う の フ ァ イ ルを読み込みます。 こ の情 報は、 メ モ リ 範囲テ ス ト を実行 し た り 、高速ダ ウ ン ロ ー ド のための MicroBlaze と MDM (Microprocessor Debug Module) と の接続を決め る ためな ど に使用 さ れます。 X-Ref Target - Figure 3-1 'ĂŶĚ^< DĂŶƵĂůĚĞďƵŐŐĞƌͬd>^ĐƌŝƉƚƐ 'ZĞŵŽƚĞ ƉƌŽƚŽĐŽů 'ZĞŵŽƚĞWƌŽƚŽĐŽů/ŶƚĞƌĨĂĐĞ džƚĞƌŶĂůĚĞďƵŐŐĞƌ yD^ŽĐŬĞƚ /ŶƚĞƌĨĂĐĞ yDdĐů/ŶƚĞƌĨĂĐĞ yD^ŽĐŬĞƚ/ŶƚĞƌĨĂĐĞ yŝůŝŶdžDŝĐƌŽƉƌŽĐĞƐƐŽƌĞďƵŐ;yDͿ DŝĐƌŽůĂnjĞ/^^ :d'/ŶƚĞƌĨĂĐĞ DŝĐƌŽůĂnjĞͬZDͲŽƌƚĞdžͲϵ ŽŶďŽĂƌĚ ^ĞƌŝĂů/ŶƚĞƌĨĂĐĞ DŝĐƌŽůĂnjĞƵƐŝŶŐ ^ĞƌŝĂů/ŶƚĞƌĨĂĐĞ ,ĂƌĚǁĂƌĞŽŶďŽĂƌĚ dW^ŽĐŬĞƚ /ŶƚĞƌĨĂĐĞ DŝĐƌŽůĂnjĞhW yϭϯϯϲϯ 図 3‐1 : XMD を使用 し たデバ ッ グ エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 42 第 3 章 : XMD (Xilinx Microprocessor Debugger) XMD の使用法 xmd [-h] [-help] [-hw <hardware_specification_file>] [-ipcport <port_number>][-nx] [-opt <optfile>][-v] [-xmp <xmpfile>] [-tcl <tcl_file> <tcl_args>] XMD のオプ シ ョ ン ヘルプの表示 コ マ ン ド の使用方法を表示 し ます。 コ マ ン ド : -h、 -help ハー ド ウ ェ ア仕様 フ ァ イル ハー ド ウ ェ ア コ ン ポーネ ン ト を記述す る XML フ ァ イ ルを指定 し ます。 コ マ ン ド : -hw <hardware_specification_file> ポー ト 番号 XMD サーバーを <portnum> で指定 し たポー ト 番号で開始 し ます。 XMD の内部 コ マ ン ド は、 こ の TCP ポー ト を使用 し て出力 さ れます。 [<port_number>] を指定 し ない場合は、 2345 が使用 さ れます。 コ マ ン ド : -ipcport <port_number> 初期化フ ァ イルを使用 し ない 起動時に xmd.ini フ ァ イ ルを使用 し ません。 コ マ ン ド : -nx オプ シ ョ ン フ ァ イル タ ーゲ ッ ト に接続す る のに使用す る オプシ ョ ン フ ァ イ ルを指定 し ます。オプシ ョ ン フ ァ イ ルには XMD の接続 コ マ ン ド が含まれます。 コ マ ン ド : -opt <connect_option_file> Tcl フ ァ イルの指定 実行す る XMD Tcl ス ク リ プ ト を指定 し ます。 <tclargs> は、 Tcl ス ク リ プ ト への引数を指定 し ます。 こ の Tcl フ ァ イ ルは、 XMD で使用 さ れます。 ス ク リ プ ト の実行 が終了す る と 、 XMD が終了 し ます。 -tcl の後にほかのオプシ ョ ン を指定す る こ と はで き ません。 コ マ ン ド : -tcl <tclfile> <tclarg> バージ ョ ン バージ ョ ン番号を表示 し ます。 コ マ ン ド : -v エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 43 第 3 章 : XMD (Xilinx Microprocessor Debugger) XMP フ ァ イル 読み込む XMP フ ァ イ ルを指定 し ます。 コ マ ン ド : -xmp <xmpfile> XMD を起動す る と 、 次の処理が実行 さ れます。 • XMD Tcl ス ク リ プ ト が指定 さ れてい る 場合は、 その ス ク リ プ ト を実行 し て終了 し ます。 • XMD Tcl ス ク リ プ ト が指定 さ れていない場合は、 XMD が イ ン タ ラ ク テ ィ ブ モー ド で実行 さ れます。 こ の場合、 XMD は次の処理を実行 し ます。 a. b. ${HOME}/.xmdrc フ ァ イ ルを作成 し ます。 こ の コ ン フ ィ ギ ュ レーシ ョ ン フ ァ イ ルを使用 し て、 XMD コ マ ン ド を使用す る カ ス タ ム Tcl コ マ ン ド を作成で き ます。 - hw XMP フ ァ イ ルを読み込みます。 -nx オプシ ョ ン が指定 さ れていない場合、 xmd.ini フ ァ イ ルが現在のデ ィ レ ク ト リ にあれば、 それが使用 さ れます。 -opt プ ロ セ ッ サに接続す る ために接続オプシ ョ ン フ ァ イ ルを使用 し ます。 -ipcport XMD ソ ケ ッ ト サーバーを開き ます。 -xmp シ ス テ ム XMP フ ァ イ ルを読み込みます。 XMD% プ ロ ンプ ト を表示 し ます。 XMD Tcl プ ロ ンプ ト か ら 、 45 ページの 「XMD コ マ ン ド 」 で説明す る よ う に、 XMD コ マ ン ド を使用 し てデバ ッ グ を実行で き ます。 XMD コ ン ソ ール XMD コ ン ソ ールは標準 Tcl コ ン ソ ールで、 使用可能な Tcl コ マ ン ド はすべて こ こ で実行で き ます。 ま た、 XMD には、 フ ァ イ ル名や コ マ ン ド 名を自動入力 し た り 、 コ マ ン ド 履歴を保存す る 機能な ど、 編集に便利な機能があ り ます。 自動入力で き る Tcl コ マ ン ド は、 <_Install_Area>/data/xmd/cmdlist フ ァ イ ルで定義 さ れてい ます。 コ マ ン ド 履歴は $HOME/.xmdcmdhistory に保存 さ れてい ます。 コ メ ン ト 名の自動入力や コ マ ン ド 履歴の保存に別の フ ァ イ ルを使用す る 場合は、 $XILINX_XMD_CMD_LIST お よ び $XILINX_XMD_CMD_HISTORY の環境変数を使用 し て、 デフ ォ ル ト 設定を上書き し ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 44 第 3 章 : XMD (Xilinx Microprocessor Debugger) XMD コ マ ン ド XMD ユーザー コ マ ン ド の一覧 次に、 XMD コ マ ン ド の一覧を示 し ます。 コ マ ン ド 名を ク リ ッ ク す る と 、 そのオプシ ョ ンの説明にジ ャ ンプ し ます。 ユーザー コ マ ン ド 「bpl」 「dow -data」 「safemode [options]」 「bpr」 「elf_verify」 「srrd」 「bps」 「fpga -f <bitstream>」 「stackcheck」 「close_terminal」 「mrd <address> [<number of words|half words|bytes> {w|h|b}]」 「state」 「con」 「stats」 「mrd_var」 「connect」 「stop」 「mwr」 「cstp」 「stp」 「profile」 「data_verify」 「targets」 「read_uart」 「debugconfig」 「terminal」 「rrd」 「dis」 「tracestart」 「rst」 「disconnect」 「tracestop」 「rwr」 「dow」 「watch」 「run」 「xload」 XMD ユーザー コ マ ン ド bpl ブ レー ク ポ イ ン ト / ウ ォ ッ チポ イ ン ト を リ ス ト し ます。 オプ シ ョ ン 使用例 bpl bpl bpr ブ レー ク ポ イ ン ト / ウ ォ ッ チポ イ ン ト を削除 し ます。 オプ シ ョ ン bpr {all|<bp id>|<address>| <function>} 使用例 bpr 0x400 bpr main bpr all エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 45 第 3 章 : XMD (Xilinx Microprocessor Debugger) bps <address> ま たは <function name> の開始部分に ソ フ ト ウ ェ ア ブ レー ク ポ イ ン ト ま たはハー ド ウ ェ ア ブ レー ク ポ イ ン ト を設定 し ます。 function を指定す る と 、 最後にダ ウ ン ロ ー ド さ れた ELF フ ァ イ ルか ら 検索 さ れます。 デフ ォ ル ト は、 ソ フ ト ウ ェ ア ブ レー ク ポ イ ン ト (sw) です。 オプ シ ョ ン bps {<address>|<function_name>} {sw | hw} 使用例 bps 0x400 bps main hw close_terminal タ ー ミ ナル コ マ ン ド と MDM UART タ ーゲ ッ ト 接続で開いた タ ー ミ ナル サーバーを閉 じ ます。 オプ シ ョ ン close_terminal 使用例 close_terminal con 現在の PC ま たは指定のア ド レ ス <Execute Start Address> か ら 実行を続け ます。 -block オプシ ョ ン を指定 し た場合は、 プ ロ セ ッ サがブ レー ク ポ イ ン ト ま たは ウ ォ ッ チポ イ ン ト で停止 し た と き に、 コ マ ン ド が戻 り ます。 -timeout で値を指定す る と 、 タ イ ム ア ウ ト す る 時間を設定で き ます。 -block は、 ス ク リ プ ト 記述に便利なオプシ ョ ンです。 オプ シ ョ ン con [<Execute Start Address>] [-block [-timeout <Seconds>]] 使用例 con con 0x400 connect <target_type> に接続 し ます。 タ ーゲ ッ ト タ イ プには mb と mdm があ り ます。 詳細は、 58 ページの 「connect コ マ ン ド のオプシ ョ ン」 を参照 し て く だ さ い。 オプ シ ョ ン connect <target_type(s)> 使用例 connect mb mdm cstp 指定 し たサ イ ク ル数だけ進め ます。 こ の コ マ ン ド は ISS タ ーゲ ッ ト でのみサポー ト さ れてい ます。 オプ シ ョ ン cstp <number of cycles> 使用例 cstp cstp 10 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 46 第 3 章 : XMD (Xilinx Microprocessor Debugger) data_verify <Binary filename> で指定 さ れ る フ ァ イ ルが、 <Load Address> で指定 さ れてい る ア ド レ ス で タ ーゲ ッ ト に正 し く ダ ウ ン ロ ー ド さ れてい る か ど う か を確認 し ます。 オプ シ ョ ン data_verify <binary_filename> <load_address> 使用例 data_verify system.dat 0x400 debugconfig タ ーゲ ッ ト のデバ ッ グ セ ッ シ ョ ン を設定 し ます。 詳細は、 67 ページの 「デバ ッ グ セ ッ シ ョ ンの設定」 を参照 し て く だ さ い。 オプ シ ョ ン 使用例 debugconfig debugconfig debugconfig -step_mode enable_interrupt debugconfig -step_mode {disable_interrupt | enable_interrupt} debugconfig -memory_datawidth_ matching enable debugconfig -memory_datawidth_matching {disable | enable} debugconfig -reset_on_run system enable debugconfig -reset_on_run debugconfig -reset_on_data_dow processor enable debugconfig -reset_on_data_dow {system enable | processor enable | disable} {system enable | processor enable | disable} dis 逆アセ ンブルを実行 し ます。 MicroBlaze でのみサポー ト さ れてい ます。 オプ シ ョ ン dis [<address in hex>] [<number of words>] 使用例 dis 0x400 10 disconnect 現在 タ ーゲ ッ ト と な っ てい る プ ロ セ ッ サへの接続を解除 し 、 GDB サーバーを閉 じ て、 以前の タ ーゲ ッ ト であ る プ ロ セ ッ サに戻 り ます。 オプ シ ョ ン disconnect <target id> 使用例 disconnect 0 dow 指定の ELF フ ァ イ ルま たはデー タ フ ァ イ ル (-data オプシ ョ ン を使用) を、 現在の タ ーゲ ッ ト の メ モ リ にダ ウ ン ロ ー ド し ます。ア ド レ ス を指定 し ない場合は、ELF フ ァ イ ルのヘ ッ ダーを読み込んで、ダ ウ ン ロ ー ド ア ド レ ス が決ま り ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 47 第 3 章 : XMD (Xilinx Microprocessor Debugger) ELF フ ァ イ ルで LOAD に指定 さ れてい る セグ メ ン ト だけが、 メ モ リ に書 き 込まれます。 オプ シ ョ ン 使用例 dow <filename.elf> dow executable.elf dow <PIC filename.elf> <load_address> dow executable.elf 0x400 dow -data ELF フ ァ イ ルでア ド レ ス が指定 さ れ る 場合 (MicroBlaze が タ ーゲ ッ ト の場合のみ)、 位置独立 (PIC) コ ー ド と し て処理 さ れ、 指定ア ド レ ス でダ ウ ン ロ ー ド さ れます。 ま た、 R20 レ ジ ス タ が、 PIC コ ー ド に し たがっ て開始ア ド レ ス に設定 さ れます。 PIC で GOT (Global Offset Table) へのポ イ ン タ ーを保存する ために、 こ の R20 レ ジ ス タ は予約 さ れてい ます。 こ れは、 PIC 以外の コ ー ド では不揮発であ り 、 関数呼び出 し 全体に対 し 、 保存 し てお く 必要があ り ます。 ELF フ ァ イ ルがダ ウ ン ロ ー ド さ れ る と 、 リ セ ッ ト が実行 さ れ、 ソ フ ト ウ ェ ア ブ レー ク ポ イ ン ト を使用 し て リ セ ッ ト ロ ケーシ ョ ンでプ ロ セ ッ サが停止 し 、 ELF プ ロ グ ラ ムが メ モ リ に読み込まれます。 リ セ ッ ト は、 シ ス テ ム を既知の良 好状態にす る ために実行 さ れます。 リ セ ッ ト の動作は、 次の コ マ ン ド を使用 し て設定で き ます。 debugconfig -reset_on_run {system enable | processor enable | disable} debugconfig -reset_on_data_dow {system enable | processor enable | disable} 詳細は、 67 ページの 「デバ ッ グ セ ッ シ ョ ンの設定」 を参照 し て く だ さ い。 オプ シ ョ ン dow -data <binary_filename> <load_address> 使用例 dow -data system.dat 0x400 elf_verify executable.elf フ ァ イ ルが タ ーゲ ッ ト に正 し く ダ ウ ン ロ ー ド さ れたか ど う か を確認 し ます。 ELF フ ァ イ ルを指定 し ない 場合は、 タ ーゲ ッ ト に最後にダ ウ ン ロ ー ド さ れた ELF フ ァ イ ルが確認 さ れます。 オプ シ ョ ン elf_verify [<filename.elf>] 使用例 elf_verify executable.elf fpga -f <bitstream> FPGA デバ イ ス の ビ ッ ト ス ト リ ーム を読み込みます。 オプシ ョ ン で、 ケーブル、 JTAG コ ン フ ィ ギ ュ レーシ ョ ン、 お よ びデバ ッ グ デバ イ ス オプシ ョ ン を指定 し ます。 詳細は、 58 ページの 「connect コ マ ン ド のオプシ ョ ン」 を参照 し て く だ さ い。 オプ シ ョ ン 使用例 fpga -f <bitstream> fpga -f download.bit fpga -f <bitstream> fpga -f download.bit -cable type xilinx_parallel [-cable <cable_options>]| [-configdevice <configuration_options>] | [-debugdevice <device_name> ] エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 48 第 3 章 : XMD (Xilinx Microprocessor Debugger) mrd <address> [<number of words|half words|bytes> {w|h|b}] 指定 し た ア ド レ ス か ら 始ま る メ モ リ ロ ケーシ ョ ンか ら ワ ー ド /バ イ ト 数を読み出 し ます。デフ ォ ル ト では、1 ワー ド 読 み出 し ます (w)。 <Global Variable Name> を指定 し た場合、 以前にダ ウ ン ロ ー ド さ れた ELF フ ァ イ ルのグ ロ ーバル変数でポ イ ン ト さ れ る メ モ リ を読み出 し ます。 オプ シ ョ ン mrd <address> [<number of words| half words|bytes> {w|h|b}] mrd <Global Variable Name> 使用例 mrd 0x400 mrd 0x400 10 mrd 0x400 10 h mrd_var <filename.elf> で指定 し た ELF フ ァ イ ル、 ま たは以前にダ ウ ン ロ ー ド さ れた ELF フ ァ イ ルのグ ロ ーバル変数でポ イ ン ト さ れ る メ モ リ を読み出 し ます。 オプ シ ョ ン mrd_var <Global Variable Name> <filename.elf> 使用例 mrd_var global_var1 executable.elf mwr <address> ま たは <Global Variable Name> で指定 さ れた位置か ら 始ま る メ モ リ ロ ケーシ ョ ンに、 指定 し た ワ ー ド /バ イ ト 数を書 き 込みます。 デフ ォ ル ト では、 1 ワ ー ド 書き 込みます (w)。 オプ シ ョ ン mwr <address> <values> [<number of words/half words/bytes> {w|h|b}] mwr <Global Variable Name> <values> [<number of words/half words/bytes> {w|h|b}] 使用例 mwr 0x400 0x12345678 mwr 0x400 0x1234 1 h mwr 0x400 {0x12345678 0x87654321} 2 profile プ ロ フ ァ イ ル出力 フ ァ イ ル を 生成 し ま す。 こ の フ ァ イ ルは、 mb-gprof (MicroBlaze 用) ま た は arm-xilinx-eabi-gprof (Cortex A9 用) でプ ロ フ ァ イ ル情報を作成す る ために読み込まれます。 プ ロ フ ァ イ ル コ ン フ ィ ギ ュ レーシ ョ ンのサンプ リ ン グ周波数 (Hz)、 ヒ ス ト グ ラ ムのバ イ ナ リ サ イ ズ、 プ ロ フ ァ イ ル デー タ 収集のための メ モ リ ア ド レ ス を指定 し ます。 オプ シ ョ ン profile [-o <GMON Output filename>] 使用例 profile -o gproff.out read_uart read_uart start コ マ ン ド は、MDM UART イ ン タ ーフ ェ イ ス か ら の出力を Tcl チ ャ ネル (TCL チ ャ ネル ID) に出力 し ます。 read_uart stop コ マ ン ド は、 指定 し た Tcl チ ャ ネルへの出力を停止 し ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 49 第 3 章 : XMD (Xilinx Microprocessor Debugger) Tcl チ ャ ネルは、 開いてい る フ ァ イ ル ま たは ソ ケ ッ ト 接続を示 し ます。 read_uart コ マ ン ド を使用する 前に、 適切な コ マ ン ド を使用 し て Tcl チ ャ ネルを開いてお く 必要があ り ます。 オプ シ ョ ン 使用例 read_uart [{start | stop}] [<TCL Channel ID>] read_uart start read_uart stop read_uart start $channel_id rrd すべての レ ジ ス タ ま たは <reg_num> で指定 し た数の レ ジ ス タ を読み出 し ます。 オプ シ ョ ン 使用例 rrd [<reg_num>] rrd rrd r1 (ま たは) rrd R1 rrd 1 rst シ ス テ ム を リ セ ッ ト し ます。 -processor オプシ ョ ン を指定す る と 、 現在設定 さ れてい る プ ロ セ ッ サが リ セ ッ ト さ れます。 プ ロ セ ッ サが実行中でない場合 (state コ マ ン ド で確認)、 プ ロ セ ッ サは リ セ ッ ト 時にプ ロ セ ッ サ リ セ ッ ト ロ ケーシ ョ ンで停止 し ます。 オプ シ ョ ン 使用例 rst [-processor] rst rst - processor Zynq デバイ ス用の rst Zynq®-7000 EPP デバ イ ス の場合は、 rst に さ ら に追加オプシ ョ ンがい く つかあ り ます。 指定 さ れてい る プ ロ セ ッ サが ソ フ ト リ セ ッ ト を出力す る よ う に し ま す。 シ ス テ ムは良好な状態であ る 必要があ り ま す。 ハー ド ウ ェ ア ブ レー ク ポ イ ン ト は、 リ セ ッ ト を出力す る 前に bps コ マ ン ド を使用 し て設定で き ます。 こ れは フ ラ ッ シ ュ か ら ブー ト す る コ ー ド をデバ ッ グす る のに便利です。 オプ シ ョ ン 説明 使用例 rst [-processor] プ ロ セ ッ サを リ セ ッ ト し ます。 rst - processor [-slcr] SLCR リ セ ッ ト を ト リ ガー し ます。 rst - slcr [-debug_sys] DAP を介 し てデバ ッ グ シ ス テ ム リ セ ッ ト を ト リ ガー し ます。 rst - debug_sys [-srst] ソ フ ト リ セ ッ ト を ト リ ガ ーす る た め、 JTAG ケーブルの SRST ピ ン を アサー ト し ます。 rst -srst エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 50 第 3 章 : XMD (Xilinx Microprocessor Debugger) rwr <register_number>、 <register_name>、 ま たは <hex_value> か ら の書 き 込みを保存 し ます。 オプ シ ョ ン 使用例 rwr <register_number> | register_name> |<Hex_value> rwr pc 0x400 run プ ロ グ ラ ム を開始ア ド レ ス か ら 実行 し ま す。 こ の コ マ ン ド は リ セ ッ ト を実行 し 、 ブ レ ー ク ポ イ ン ト を使用 し てプ ロ セ ッ サを リ セ ッ ト ロ ケーシ ョ ンで停止 し 、 ELF プ ロ グ ラ ム デー タ セ ク シ ョ ン を メ モ リ に読み込みます。 ELF プ ロ グ ラ ム デー タ セ ク シ ョ ン を読み込む こ と に よ り 、 ス タ テ ィ ッ ク 変数が正 し く 初期化 さ れ、 リ セ ッ ト を実行す る こ と に よ り シ ス テ ムが既知の良好状態にな り ます。 リ セ ッ ト の動作は、 次の コ マ ン ド を使用 し て設定で き ます。 debugconfig -reset_on_run {system enable | processor enable | disable} debugconfig -reset_on_data_dow {system enable | processor enable | disable} 詳細は、 67 ページの 「デバ ッ グ セ ッ シ ョ ンの設定」 を参照 し て く だ さ い。 オプ シ ョ ン 使用例 run run safemode [options] セーフ モー ド のオン/オ フや詳細の設定を し た り 、 セーフ モー ド で読み出すための フ ァ イ ルを指定 し ます。 safemode で使用で き る オプシ ョ ンの詳細は次の と お り です。 オプ シ ョ ン 説明 使用例 現在の safemode コ ン フ ィ ギ ュ レー シ ョ ン を変更 し ます。 safemode -config safemode [{on|off}] safemode の オ ン/ オ フ を 設定 し ま す。 safemode on safemode off safemode [-config 例外ハ ン ド ラ ID お よ び ア ド レ ス を変更 し ます。 safemode -config safemode[-info] safemode に関す る 情報を表示 し ま す。 safemode -info safemode [-elf <elf_file>] デバ ッ グする ELF フ ァ イ ルを指定 し ます。 safemode -elf safemode [-config <mode> <exception_mask>] <exception_id> <exception_addr>] <mode> <exception_mask> <exception_id> <elf_file> srrd 特殊レ ジ ス タ ま たは<reg_name> で指定 し た レ ジ ス タ を読み出 し ます。 オプ シ ョ ン 使用例 srrd srrd srrd [<register_name>] srrd pc エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 51 第 3 章 : XMD (Xilinx Microprocessor Debugger) stackcheck 現在の タ ーゲ ッ ト で実行中のプ ロ グ ラ ムの ス タ ッ ク 使用情報を表示 し ます。 タ ーゲ ッ ト に最後にダ ウ ン ロ ー ド さ れた ELF フ ァ イ ルの ス タ ッ ク がチ ェ ッ ク さ れます。 オプ シ ョ ン stackcheck 使用例 stackcheck state タ ーゲ ッ ト を指定 し ない場合、 すべての タ ーゲ ッ ト の現在の ス テー ト が表示 さ れます。 <target_id> を指定 し た場合、 その タ ーゲ ッ ト の ス テー ト が表示 さ れます。 -system <system_id> を指定 し た場合、そのシ ス テ ムに含まれ る すべての タ ーゲ ッ ト の現在の ス テー ト が表示 さ れます。 オプ シ ョ ン 使用例 state state state [<target_id>] state <target_id> state -system <system_id> state -system <system_id> stats ISS タ ーゲ ッ ト に対す る 実行統計を表示 し ます。 <filename> には、 ト レース か ら 収集 さ れた情報が出力 さ れ る フ ァ イ ルを指定 し ます。 オプ シ ョ ン 使用例 stats stats stats [<filename>] stats trace.txt stop タ ーゲ ッ ト を停止 し ます。 MicroBlaze の場合、 メ モ リ ま たは FSL ア ク セ ス でプ ロ グ ラ ムが停止 し た場合は、 強 制停止にな り ます。 オプ シ ョ ン stop 使用例 stop stp 指定 し た ス テ ッ プ数だけ命令を進め ます。 オプ シ ョ ン 使用例 stp stp stp <number of instructions> stp 10 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 52 第 3 章 : XMD (Xilinx Microprocessor Debugger) targets 現在の タ ーゲ ッ ト に関す る 情報を リ ス ト し た り 、 タ ーゲ ッ ト を変更 し ます。 オプ シ ョ ン 使用例 targets targets targets <target_id> targets 0 targets -system <system_id> targets -system 1 terminal JTAG ベース のハ イ パー タ ー ミ ナルを mdm UART イ ン タ ーフ ェ イ ス と 通信 さ せます。 mdm で UART イ ン タ ーフ ェ イ ス を イ ネーブルにす る 必要があ り ます。 -jtag_uart_server オプシ ョ ン を指定 し た場合、 TCP サーバーが <port_no> で指定 し たポー ト 番号で開 き ます。 任意のハ イ パー タ ー ミ ナル ユーテ ィ リ テ ィ を使用 し て、 TCP ソ ケ ッ ト で opb_mdm UART イ ン タ ーフ ェ イ ス と 通信 し ます。 <port_number> のデフ ォ ル ト 値は 4321 です。 <baudrate> には JTAG UART のポー ト がデー タ を読み出す速度を指定 し ます。 こ こ で使用で き る 値は、 low、 med、 high です。 デフ ォ ル ト 値は med です。 XMD は JTAG UART ポー ト でデー タ を収集 し てい る ので、ボーレー ト を高 く す る と ほかのデバ ッ グ操作に影響 が出 る 可能性があ り ます。 オプ シ ョ ン 使用例 terminal terminal terminal [-jtag_uart_server] [<port_number>][<baudrate>] terminal -jtag_uart_server 4321 high tracestart ト レース情報の収集を開始 し 、 <filename> で指定 し た フ ァ イ ルに記述 し ます。 ト レース情報の収集は、 プ ロ グ ラ ム実行の ど の時点で も 停止、 開始で き ます。 フ ァ イ ル名は、 最初に tracestart を使用す る 場合にのみ指定 し ます。 < p c_trace_filename>のデフ ォ ル ト のフ ァ イ ル名は isstrace.out です。 <func_trace_filename> のデフ ォ ル ト の フ ァ イ ル名は fntrace.out です。 注記 : こ れは ISS タ ーゲ ッ ト でのみサポー ト さ れてい ます。 オプ シ ョ ン 使用例 tracestart tracestart tracestart [<pc_trace_filename>] [-function_name <func_trace_filename>] tracestart pctrace.txt tracestart pctrace.txt -function_name fntrace.txt tracestop ト レース情報の収集を停止 し ます。 done を指定 し た場合は、 ト レース情報収集を終了 し ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 53 第 3 章 : XMD (Xilinx Microprocessor Debugger) 注記 : こ れは ISS タ ーゲ ッ ト でのみサポー ト さ れてい ます。 オプ シ ョ ン 使用例 tracestop tracestop tracestop [done] tracestop done watch 指定ア ド レ ス に読み出 し ま たは書 き 込みの ウ ォ ッ チポ イ ン ト を設定 し ます。 値がデー タ と 一致する と 、 プ ロ セ ッ サを 停止 し ます。 ア ド レ スお よ びデー タ は、 16 進数フ ォーマ ッ ト (0x) ま たは 2 進数フ ォーマ ッ ト (0b) で指定で き ます。 ド ン ト ケ アの値は、 X で指定 し ます。 連続 し た ア ド レ ス のみを ア ド レ ス範囲に含め る こ と がで き ます。 data のデフ ォ ル ト 値は 0xXXXXXXXX です。 こ の値は、 任意の値に一致 し ます。 オプ シ ョ ン 使用例 watch {r | w} <address> [<data>] watch r 0x400 0x1234 watch r 0x40X 0x12X4 watch r 0b01000000XXXX 0b00010010XXXX0100 watch r 0x40X xload ハー ド ウ ェ ア仕様の XML フ ァ イ ルを読み込みます。 XMD は、 プ ロ セ ッ サの命令お よ びデー タ メ モ リ ア ド レ ス を取得す る ため XML フ ァ イ ルを読み込みます。 こ の情報は、 プ ロ セ ッ サの メ モ リ にダ ウ ン ロ ー ド さ れたプ ロ グ ラ ムお よ びデー タ を確認す る ために使用 さ れ ます。 IP イ ン テ グ レー タ ーは、 SDK へのエ ク ス ポー ト プ ロ セ ス中にハー ド ウ ェ ア仕様フ ァ イ ルを生成 し ます。 オプ シ ョ ン 使用例 xload hw <hw_spec_file> xload hw system.xml 特殊用途レ ジ ス タ 名 MicroBlaze の特殊用途レ ジ ス タ 名 MicroBlaze プ ロ セ ッ サ用の特殊用途レ ジ ス タ 名は次の と お り です。 pc msr ear esr zpr fsr btr pvr0 pvr1 zpr pvr2 pvr3 pvr4 pvr5 zpr pvr6 pvr7 pvr8 pvr9 pvr10 pvr11 edr pid MicroBlaze の特殊用途レ ジ ス タ 名の詳細、 説明、 使用法は、 『MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド 』 (UG081)[ 参照 3] の 「MicroBlaze アーキ テ ク チ ャ 」 の章で 「特殊用途レ ジ ス タ 」 を参照 し て く だ さ い。 注記 : MicroBlaze を XMDSTUB モー ド でデバ ッ グする 場合、 ア ク セ ス で き る レ ジ ス タ は PC お よ び MSR のみです。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 54 第 3 章 : XMD (Xilinx Microprocessor Debugger) 重要な Cortex A9 のレ ジ ス タ Cortex A9 には コ プ ロ セ ッ サ レ ジ ス タ のセ ッ ト があ り ます。 それを こ こ に リ ス ト し ます。 表 3‐1 : Cortex A9 レ ジス タ 名 ctrl dma tcm id etc vfp こ の章では、 こ れ ら の レ ジ ス タ について例を挙げて説明 さ れてい ます。 追加情報お よ び ARM レ ジ ス タ の全セ ッ ト に ついては、 ARM の資料を参照 し て く だ さ い。 XMD リ セ ッ ト シーケ ン ス rst コ マ ン ド が出力 さ れ る と 、 XMD はプ ロ セ ッ サ ま た は シ ス テ ム を 既知の ス テ ー ト に戻す た め リ セ ッ ト し ま す。 MicroBlaze プ ロ セ ッ サの場合の、 rst の操作実行シーケ ン ス は次の よ う にな っ てい ます。 1. リ セ ッ ト ロ ケーシ ョ ン (0x0) でハー ド ウ ェ ア ブ レー ク ポ イ ン ト を設定 し ます。 2. リ セ ッ ト 信号 (シ ス テ ム リ セ ッ ト ま たはプ ロ セ ッ サ リ セ ッ ト ) を出力 し ます。 プ ロ セ ッ サが実行を開始 し ます。 3. プ ロ セ ッ サが リ セ ッ ト ロ ケーシ ョ ンで停止 し た ら 、 ブ レー ク ポ イ ン ト を削除 し ます。 推奨 さ れる XMD フ ロー 次に、 1 つのプ ロ グ ラ ムのデバ ッ グ、 マルチプ ロ セ ッ サ環境での複数のプ ロ グ ラ ムのデバ ッ グ、 デバ ッ グ セ ッ シ ョ ン でのプ ロ グ ラ ムの実行に推奨 さ れ る XMD の手順を説明 し ます。 1 つのプ ログ ラ ムのデバ ッ グ 1 つのプ ロ グ ラ ム をデバ ッ グす る には、 次の手順に従い ます。 1. プ ロ セ ッ サを接続 し ます。 2. ELF フ ァ イ ルを ダ ウ ン ロ ー ド し ます。 3. 必要なブ レー ク ポ イ ン ト お よ び ウ ォ ッ チポ イ ン ト を設定 し ます。 4. con コ マ ン ド を使用 し てプ ロ セ ッ サの実行を開始す る か、stp コ マ ン ド を使用 し てプ ロ グ ラ ムの命令を順に実行 し ます。 5. state コ マ ン ド を使用 し てプ ロ セ ッ サの ス テー タ ス を確認 し ます。 6. 必要に応 じ て stop コ マ ン ド を使用 し 、 プ ロ セ ッ サを停止 し ます。 7. プ ロ セ ッ サが停止 し た ら 、 レ ジ ス タ お よ び メ モ リ に対 し て読み出 し お よ び書 き 込みを実行 し ます。 8. プ ロ グ ラ ム を再実行す る には、 run コ マ ン ド を使用 し ます。 マルチ プ ロ セ ッ サ環境での複数のプ ロ グ ラ ムのデバ ッ グ マルチプ ロ セ ッ サ環境で複数のプ ロ グ ラ ム をデバ ッ グす る には、 次の手順に従い ます。 1. プ ロ セ ッ サ 1 に接続 し ます。 2. debugconfig コ マ ン ド を使用 し て リ セ ッ ト の動作を設定 し ます。 リ セ ッ ト の動作は、 シ ス テ ム アーキ テ ク チ ャ に よ り 異な り ます。 詳細は、 67 ページの 「デバ ッ グ セ ッ シ ョ ンの設定」 を参照 し て く だ さ い。 3. ELF フ ァ イ ルを ダ ウ ン ロ ー ド し ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 55 第 3 章 : XMD (Xilinx Microprocessor Debugger) 4. 必要なブ レー ク ポ イ ン ト お よ び ウ ォ ッ チポ イ ン ト を設定 し ます。 5. con コ マ ン ド を使用 し てプ ロ セ ッ サの実行を開始す る か、stp コ マ ン ド を使用 し てプ ロ グ ラ ムの命令を順に実行 し ます。 6. プ ロ セ ッ サ 2 に接続 し ます。 7. debugconfig コ マ ン ド を使用 し て リ セ ッ ト の動作を設定 し ます。 リ セ ッ ト の動作は、 シ ス テ ム アーキ テ ク チ ャ に よ り 異な り ます。 詳細は、 67 ページの 「デバ ッ グ セ ッ シ ョ ンの設定」 を参照 し て く だ さ い。 8. ELF フ ァ イ ルを ダ ウ ン ロ ー ド し ます。 9. 必要なブ レー ク ポ イ ン ト お よ び ウ ォ ッ チポ イ ン ト を設定 し ます。 10. con コ マ ン ド を使用 し てプ ロ セ ッ サの実行を開始す る か、stp コ マ ン ド を使用 し てプ ロ グ ラ ムの命令を順に実行 し ます。 11. targets コ マ ン ド を使用 し てシ ス テ ムの タ ーゲ ッ ト を リ ス ト し ます。 各 タ ーゲ ッ ト には タ ーゲ ッ ト ID が付け ら れ てい ます。 現在指定 さ れてい る タ ーゲ ッ ト にはア ス タ リ ス ク (*) が付いてい ます。 12. targets <target id コ マ ン ド >を使用 し て タ ーゲ ッ ト を切 り 替え ます。 13. state コ マ ン ド を使用 し てプ ロ セ ッ サの ス テー タ ス を確認 し ます。 14. stop コ マ ン ド を使用 し て、 プ ロ セ ッ サを停止 し ます。 15. プ ロ セ ッ サが停止 し た ら 、 レ ジ ス タ お よ び メ モ リ に対 し て読み出 し お よ び書 き 込みを実行 し ます。 16. プ ロ グ ラ ム を再実行す る には、 run コ マ ン ド を使用 し ます。 デバ ッ グ セ ッ シ ョ ン でのプ ログ ラ ムの実行 1. プ ロ セ ッ サを接続 し ます。 2. ELF フ ァ イ ルを ダ ウ ン ロ ー ド し ます。 3. exit 関数でブ レー ク ポ イ ン ト を設定 し ます。 4. con コ マ ン ド を使用 し てプ ロ セ ッ サの実行を開始 し ます。 5. state コ マ ン ド を使用 し てプ ロ セ ッ サの ス テー タ ス を確認 し ます。 6. stop コ マ ン ド を使用 し て、 プ ロ セ ッ サを停止 し ます。 7. プ ロ セ ッ サが停止 し た ら 、 レ ジ ス タ お よ び メ モ リ に対 し て読み出 し お よ び書 き 込みを実行 し ます。 8. プ ロ グ ラ ム を再実行す る には、 run コ マ ン ド を使用 し ます。 例外の自動チ ェ ッ ク用の Safemode の使用 エ ラ ーが発生す る と 、プ ロ グ ラ ムで発生 し た例外をチ ェ ッ ク す る 機能が XMD にはあ り ます。 こ の場合のエ ラ ー と は、 無効な命令の実行やバ ス エ ラ ーな ど を指 し ます。 次の手順に従っ て く だ さ い。 1. プ ロ グ ラ ム を ダ ウ ン ロ ー ド し ます。 2. safemode on コ マ ン ド を実行 し ます。 3. con コ マ ン ド を使用 し てプ ロ セ ッ サの実行を開始 し ます。 例外が発生す る と 、 プ ロ グ ラ ム が停止 し ます。 GUI タ イ プのデバ ッ ガー (Insight GDB ま たは SDK) を使用す る 場合、 こ の機能は さ ら に便利です。 • SDK の場合は、 プ ロ グ ラ ム を実行す る 前に、 [Initialization ] タ ブの [Enable Safemode] チ ェ ッ ク ボ ッ ク ス を オンに し ます。 • GDB の場合は、GDB でプ ロ グ ラ ム を実行する 前に、プ ロ グ ラ ム を ダ ウ ン ロ ー ド し て、XMD コ ン ソ ールで safemode on コ マ ン ド を実行 し ます。 例外が発生す る と 、 プ ロ グ ラ ムは停止 し 、 GUI に例外を発生 さ せた コ ー ド が表示 さ れます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 56 第 3 章 : XMD (Xilinx Microprocessor Debugger) プ ロ セ ッ サのデ フ ォル ト 例外チ ェ ッ ク 設定 表 3-2 は、 MicroBlaze の例外チ ェ ッ ク のデフ ォ ル ト 設定を示 し てい ます。 表 3‐2 : MicroBlaze の例外処理設定 例外 ID チェ ッ ク 例外名 0 あり 高速シ ンプ レ ッ ク ス リ ン ク に よ る 例外 1 なし 不整列デー タ ア ク セ ス に よ る 例外 2 あり 不正な opcode に よ る 例外 3 あり 命令バ ス エ ラ ーに よ る 例外 4 あり デー タ バ ス エ ラ ーに よ る 例外 5 あり 0 での除算に よ る 例外 6 あり 浮動小数点ユニ ッ ト に よ る 例外 7 あり 特権命令に よ る 例外 8 あり デー タ 格納に よ る 例外 9 あり 命令格納に よ る 例外 10 あり デー タ TLB がない こ と に よ る 例外 11 あり 命令 TLB がない こ と に よ る に よ る 例外 12 あり アサー ト エ ラ ー 13 あり プ ロ グ ラ ム終了 例外設定の変更 デフ ォ ル ト の例外設定を変更す る には 2 通 り の方法があ り ます。 1. xmdconfig [-mb_trap_mask] [MASK] コ マ ン ド を使用 現在の XMD セ ッ シ ョ ンでのすべての タ ーゲ ッ ト にマ ス ク を設定 し ます。 すべての XMD セ ッ シ ョ ンに対 し 、 カ ス タ ムのデフ ォ ル ト 設定を定義す る には、 ホーム デ ィ レ ク ト リ にあ る .xmdrc フ ァ イ ルにその コ マ ン ド を記述 し ます。 2. safemode -config mode [MASK] コ マ ン ド を使用 現在の タ ーゲ ッ ト にのみマ ス ク を設定 し ます。 プ ロ グ ラ ム をデバ ッ グ し なが ら 、 例外チ ェ ッ ク の設定を変更す る のに便利な方法です。 注記 : 現在の タ ーゲ ッ ト と の接続を解除す る と 、 その タ ーゲ ッ ト は破棄 さ れます。 safemode 設定の確認 現在の safemode の設定を確認す る には、 safemode -info コ マ ン ド を使用 し ます。 セーフ モー ド の場合、 XMD はチ ェ ッ ク し たい例外ハン ド ラ にブ レー ク ポ イ ン ト を設定 し ます。 MicroBlaze プ ロ セ ッ サの場合、 すべての例外で PC か ら 0x20 ま でが使用で き ます。 ス タ ン ド ア ロ ン ま たは Xilkernel プ ロ ジ ェ ク ト のほ と ん ど で設定の確認がで き ま すが、 別の ソ フ ト ウ ェ ア プ ラ ッ ト フ ォームが使用 さ れてい る 場合は、設定確認がで き ない こ と があ り ます。 その場合は、safemode -config <exception_id> <exception_handler_addr> コ マ ン ド を使用 し て、 例外ハン ド ラ のア ド レ ス を設定 し ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 57 第 3 章 : XMD (Xilinx Microprocessor Debugger) XMD の ARM 用 コ マ ン ド 表 3‐3 : ARM 用 コ マ ン ド コマン ド 説明 mrc <CPx> <op1> <CRn> <CRm> <op2> CRn お よ び CRm パ ラ メ ー タ ー、 op1 お よ び op2 の opcode で指定 さ れて い る ARM コ プ ロ セ ッ サの CPx レ ジ ス タ を読み出 し ます。 こ れ ら のパ ラ メ ー タ ーお よ び opcode の順番は、ジ ェ ネ リ ッ ク の ARM MRC 命令 と 同 じ です。 dp_rrd <reg offset> ARM デバ ッ グ ア ク セ ス ポー ト (DAP) で使用可能なデバ ッ グ ポー ト レ ジ ス タ を読み出 し ます。 ap_rrd <reg offset> ARM デバ ッ グ ア ク セ ス ポー ト (DAP) で使用可能な ア ク セ ス ポー ト レ ジ ス タ を読み出 し ます。 mcr <CPx> <op1> <CRn> <CRm> <op2> <word> CRn お よ び CRm パ ラ メ ー タ ー、 op1 お よ び op2 の opcode で指定 さ れて い る ARM コ プ ロ セ ッ サの CPx レ ジ ス タ に書 き 込みます。 こ れ ら のパ ラ メ ー タ ーお よ び opcode の順番は、ジ ェ ネ リ ッ ク の ARM MRC 命令 と 同 じ です。 dp_rwr <reg offset> ARM デバ ッ グ ア ク セ ス ポー ト (DAP) で使用可能なデバ ッ グ ポー ト レ ジ ス タ に書 き 込みます。 ap_rwr <reg offset> ARM デバ ッ グ ア ク セ ス ポー ト (DAP) で使用可能な ア ク セ ス ポー ト レ ジ ス タ に書 き 込みます。 mrd_phys <address> [num] [w|h|b] AHB ア ク セ ス ポー ト か ら の ARM 物理 メ モ リ の読み出 し 。 num で指定 さ れてい る 数のバ イ ト /ハーフ ワー ド /ワ ー ド を、 <address> で 指定 さ れてい る ア ド レ ス で読み出 し ます。 デフ ォ ル ト : w ( ワー ド ) 0x0 で OCM か ら読み出し ます (DDR が 0x0 に再マ ッ プ さ れていない場合)。 [-ocm] dmrd <address> ARM デバ ッ グ イ ン タ ーフ ェ イ ス で使用可能な CoreSight メ モ リ を読み出 し ます。 mwr_phys <addr> <values> [<num> <w|h|b>] AHB ア ク セ ス ポー ト か ら の ARM 物理 メ モ リ の書 き 込み。 num で指定 さ れてい る 数のバ イ ト /ハーフ ワー ド /ワ ー ド を、 <address> で 指定 さ れてい る ア ド レ ス で書 き 込みます。 デフ ォ ル ト : w ( ワー ド ) 0x0 で OCM に書 き 込みます (DDR が 0x0 に再マ ッ プ さ れていない場合)。 [-ocm] dmwr <address> ARM デバ ッ グ イ ン タ ーフ ェ イ ス で使用可能な CoreSight メ モ リ に書 き 込 みます。 connect コ マ ン ド のオプ シ ョ ン XMD では、 異な る タ ーゲ ッ ト (プ ロ セ ッ サ ま たはペ リ フ ェ ラ ル) でプ ロ グ ラ ム をデバ ッ グで き ます。 • タ ーゲ ッ ト と 通信す る と き 、 XMD は タ ーゲ ッ ト に接続 し 、 ID を接続に各 タ ーゲ ッ ト に割 り 当て ます。 • プ ロ セ ッ サに接続す る と き 、 GDB サーバーが開始 し 、 GDB ま たは SDK と の通信が可能にな り ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 58 第 3 章 : XMD (Xilinx Microprocessor Debugger) 使用法 connect {mb | mdm | arm} <Connection_Type> [Options] 表 3‐4 : connect コ マ ン ド のオプ シ ョ ン オプ シ ョ ン 説明 mb MicroBlaze プ ロ セ ッ サに接続 し ます。 mdm MDM ペ リ フ ェ ラ ルに接続 し ます。 arm Cortex- A9 プ ロ セ ッ サお よ び Coresight に接続 し ます。 <Connection_Type> 接続方法を指定 し ます。 タ ーゲ ッ ト に よ っ て異な り ます。 [Options] 接続オプシ ョ ン 次のセ ク シ ョ ンでは タ ーゲ ッ ト 別の接続オプシ ョ ンについて説明 し ます。 MicroBlaze プ ロ セ ッ サのデバ ッ グ XMD では、 MDM ペ リ フ ェ ラ ルを使用 し て、 JTAG を介 し て複数の MicroBlaze プ ロ セ ッ サに接続で き ます。 XMD は、 JTAG ま たはシ リ アル イ ン タ ーフ ェ イ ス を介 し て、 XMDStub な ど の ROM モニ タ ー と 通信 し ま す。 プ ロ グ ラ ム のデ バ ッ グには、 ビル ト イ ンのサ イ ク ル精度 MicroBlaze ISS も 使用で き ます。 次のセ ク シ ョ ンでは、 こ れ ら の タ ーゲ ッ ト のデバ ッ グ オプシ ョ ンについて説明 し ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 59 第 3 章 : XMD (Xilinx Microprocessor Debugger) MDM を使用 し た MicroBlaze のデバ ッ グ MDM に接続す る には、 connect mb mdm コ マ ン ド を使用 し 、 リ モー ト GDB サーバーを起動 し ます。 MDM では、 ハー ド ウ ェ ア ブ レー ク ポ イ ン ト お よ びシ ン グル ス テ ッ プのデバ ッ グがサポー ト さ れてお り 、ROM モニ タ ーは必要あ り ま せん。 60 ページの図 3-2は、 MicroBlaze MDM タ ーゲ ッ ト を説明 し た も のです。 X-Ref Target - Figure 3-2 XMD JTAG UART AXI Bus Multiple MicroBlaze Processors MDM MicroBlaze Debug Signals MicroBlaze MicroBlaze X10843 図 3‐2 : MDM を使用 し た MicroBlaze のデバ ッ グ connect mb mdm コ マ ン ド でオプシ ョ ン を指定 し ない場合は、 XMD に よ り JTAG ケーブルを検出 し 、 MicroBlaze-MDM シ ス テ ム を含む FPGA デバ イ ス をチ ェーン で接続 し ます。 XMD が JTAG チ ェ ーン ま たは FPGA デバ イ ス を自動検出 し ない場合は、 次のオプシ ョ ン を使用 し て指定す る 必要が あ り ます。 使用法 connect mb hw [-cable <JTAG Cable options>] {[-configdevice <JTAG chain options>]} [-debugdevice <MicroBlaze options>] エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 60 第 3 章 : XMD (Xilinx Microprocessor Debugger) JTAG ケーブルおよび JTAG チ ェ ーンのオプ シ ョ ン JTAG ケーブルお よ びチ ェ ーンのオプシ ョ ンについては73 ページの表 3-8 「プ ロ グ ラ ム初期化オプシ ョ ン」 お よ び75 ページの表 3-9 「レ ジ ス タ / メ モ リ のオプシ ョ ン」 を それぞれ参照 し て く だ さ い。 MicroBlaze のオプ シ ョ ン 表 3-5 は MicroBlaze のオプシ ョ ン を説明 し てい ます。 表 3‐5 : MicroBlaze のオプ シ ョ ン オプ シ ョ ン 説明 cpunr <CPU Number> MDM に接続 さ れた MicroBlaze プ ロ セ ッ サが複数あ る FPGA で、デバ ッ グす る MicroBlaze プ ロ セ ッ サの番号を指定 し ます。 プ ロ セ ッ サの番号 は、 1 か ら 開始 し ます。 devicenr <MicroBlaze device position> MicroBlaze プ ロ セ ッ サ を含む FPGA デバ イ ス の JTAG チ ェ ーン内での 位置を指定 し ます。 デバ イ ス位置の番号は、 1 か ら 開始 し ます。 romemstartadr <ROM start address> 読み出 し 専用 メ モ リ (ROM) の開始ア ド レ ス を指定 し ます。 フ ラ ッ シ ュ メ モ リ の範囲を指定す る には、 こ のオプシ ョ ン を使用 し ま す。 XMD は、 ソ フ ト ウ ェ ア ブ レ ー ク ポ イ ン ト ではな く ハー ド ウ ェ ア ブ レー ク ポ イ ン ト を設定 し ます。 romemsize <ROM Size in Bytes> 読み出 し 専用 メ モ リ (ROM) のサ イ ズ を指定 し ます。 tlbstartadr <TLB start address> 変換ル ッ ク アサ イ ド バ ッ フ ァ ー (TLB) の読み出 し お よ び書 き 込みの開 始ア ド レ ス を指定 し ます。 MDM を使用 し た MicroBlaze のデバ ッ グにおける要件 1. ハー ド ウ ェ ア ブ レー ク ポ イ ン ト 、 ス テ ッ プや停止な ど の MicroBlaze のハー ド ウ ェ ア デバ ッ グ機能を使用す る に は、 ハー ド ウ ェ ア デバ ッ グ ポー ト を MDM に接続する 必要があ り ます。 2. MDM で UART 機能を使用す る には、シ ス テ ムに MDM コ ア を イ ン ス タ ン シエー ト し て、C_USE_UART パ ラ メ ー タ ーを設定す る 必要があ り ます。 注記 : MDM を使用す る 場合は、 XMDSTUB モー ド ではな く executable モー ド でプ ロ グ ラ ム を コ ンパ イ ルす る 必要が あ り ます。 XMDStub を コ ンパ イ ルす る ための XMDSTUB_PERIPHERAL を指定する 必要はあ り ません。 デバ ッ グ セ ッ シ ョ ンの例 MDM を使用 し た MicroBlaze のデバ ッ グの例 こ こ では、 MDM を使用 し た MicroBlaze のデバ ッ グのセ ッ シ ョ ン例を示 し ます。 基本的な XMD コ マ ン ド は、 connect mb mdm コ マ ン ド を使用 し て MDM に接続 し た後に使用 し ます。 セ ッ シ ョ ンの最後に、 GDB リ モー ト タ ーゲ ッ ト を使用 し て mb-gdb に接続 し ます。 GDB か ら XMD への接続につい ては、 第 4 章 「GNU デバ ッ ガー」 を参照 し て く だ さ い。 XMD% connect mb mdm JTAG chain configuration -------------------------------------------------Device ID Code IR Length Part Name 1 0a001093 8 2 f5059093 16 XCF32P 3 01e58093 10 XC4VFX12 4 49608093 8 xc95144xl エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 61 第 3 章 : XMD (Xilinx Microprocessor Debugger) MicroBlaze Processor Configuration: ------------------------------------Version............................7.00.a Optimisation.......................Performance Interconnect.......................PLBv46 No of PC Breakpoints...............3 No of Read Addr/Data Watchpoints...1 No of Write Addr/Data Watchpoints..1 Exceptions Support................off FPU Support.......................off Hard Divider Support...............off Hard Multiplier Support............on - (Mul32) Barrel Shifter Support.............off MSR clr/set Instruction Support....on Compare Instruction Support........on PVR Supported......................on PVR Configuration Type.............Base Connected to MDM UART Target Connected to “mb” target. id = 0 Starting GDB server for “mb” target (id = 0) at TCP port no 1234 XMD% rrd r0:00000000 r8:00000000 r16:00000000 r24:00000000 r1:00000510 r9:00000000 r17:00000000 r25:00000000 r2:00000140 r10:00000000 r18:00000000 r26:00000000 r3: a5a5a5a5 r11:00000000 r19:00000000 r27:00000000 r4:00000000 r12:00000000 r20:00000000 r28:00000000 r5:00000000 r13:00000140 r21:00000000 r29:00000000 r6:00000000 r14:00000000 r22:00000000 r30:00000000 r7:00000000 r15:00000064 r23:00000000 r31:00000000 pc:00000070 msr:00000004 <--- Launching GDB from XMD% console ---> XMD% start mb-gdb microblaze_0/code/executable.elf XMD% <--- From GDB, a connection is made to XMD and debugging is done from the GDB GUI ---> XMD:Accepted a new GDB connection from 127.0.0.1 on port 3791 XMD% XMD:GDB Closed connection XMD% stp BREAKPOINT at 114: F1440003 sbi r10, r4, 3 XMD% dis 0x114 10 114: F1440003 sbi r10, r4, 3 118: E0E30004 lbui r7, r3, 4 11C: E1030005 lbui r8, r3, 5 120: F0E40004 sbi r7, r4, 4 124: F1040005 sbi r8, r4, 5 128: B800FFCC bri -52 12C: B6110000 rtsd r17, 0 130: 80000000 Or r0, r0, r0 134: B62E0000 rtid r14, 0 138: 80000000 Or r0, r0, r0 XMD% dow microblaze_0/code/executable.elf XMD% con Info:Processor started.Type “stop” to stop processor RUNNING> stop XMD% Info:User Interrupt, Processor Stopped at 0x0000010c XMD% con エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 62 第 3 章 : XMD (Xilinx Microprocessor Debugger) Info:Processor started.Type “stop” to stop processor RUNNING> rrd pc pc :0x000000f4 <--- With the MDM, the current PC of MicroBlaze can be while the program is running RUNNING> rrd pc pc :0x00000110 <--- Note: the PC is constantly changing, as the program is running RUNNING> stop Info:Processor started.Type “stop” to stop processor XMD% rrd r0:00000000 r8:00000065 r16:00000000 r24:00000000 r1:00000548 r9:0000006c r17:00000000 r25:00000000 r2:00000190 r10:0000006c r18:00000000 r26:00000000 r3:0000014c r11:00000000 r19:00000000 r27:00000000 r4:00000500 r12:00000000 r20:00000000 r28:00000000 r5:24242424 r13:00000190 r21:00000000 r29:00000000 r6:0000c204 r14:00000000 r22:00000000 r30:00000000 r7:00000068 r15:0000005c r23:00000000 r31:00000000 pc:0000010c msr:00000000 XMD% bps 0x100 Setting breakpoint at 0x00000100 XMD% bps 0x11c hw Setting breakpoint at 0x0000011c XMD% bpl SW BP: addr = 0x00000100, instr = 0xe1230002 <-- Software Breakpoint HW BP:BP_ID 0 : addr = 0x0000011c <--- Hardware Breakpoint XMD% con Info:Processor started.Type “stop” to stop processor RUNNING> Processor stopped at PC:0x00000100 Info:Processor stopped.Type “start” to start processor XMD% con Info:Processor started.Type “stop” to stop processor RUNNING> Info:Processor started.Type “stop” to stop processor read Cortex A9 ARM を使用 し た例 こ こ では、 Cortex A9 ARM のデバ ッ グのセ ッ シ ョ ン例を示 し ます。 XMD% connect arm hwCortexA9 [Processor Configuration] ------------------------------------Version.............................0x00000003 User ID.............................0x00000000 No of PC Breakpoints................6 No of Addr/Data Watchpoints.........4 Connected to "arm" target. id = 64 Starting GDB server for "arm" target (id = 64) at TCP port no 1234 XMD% rrd r0:0x00000000 r1:0x00000000 r2:0x00000000 r3:0x00000000 r4:0x00000000 r5:0x00000000 r6:0x00000000 r7:0x00000000 r8:0x00000000 r9:0x00000000 r10:0x00000000 r11:0x00000000 r12:0x00000000 sp:0x00000000 lr:0x00000000 pc:0xffff0000 fpscr:0x00120c20 cpsr:0x000001d3 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 63 第 3 章 : XMD (Xilinx Microprocessor Debugger) XMDStub を使用 し た MicroBlaze のデバ ッ グ XMDStub (プ ロ セ ッ サ上で実行 さ れ る ROM モニ タ ー) を使用 し て MicroBlaze に接続 し 、GDB サーバーを起動 し ます。 XMD は、 JTAG ま たはシ リ アル イ ン タ ーフ ェ イ ス を使用 し て XMDStub に接続 し ます。 デフ ォ ル ト オプシ ョ ン では、 JTAG イ ン タ ーフ ェ イ ス を使用 し て接続 さ れます。 XMDStub/JTAG を使用 し た MicroBlaze のデバ ッ グ用の コ マ ン ド オ プシ ョ ン 使用法 connect mb stub -comm jtag [-cable {<JTAG Cable options>}] [-configdevice <{JTAG chain options>}] [-debugdevice {<MicroBlaze options>}] MicroBlaze オプ シ ョ ン オプ シ ョ ン devicenr <MicroBlaze device position> 説明 MicroBlaze を含む FPGA デバ イ ス の JTAG チ ェ ーン内での位置を指 定 し ます。 XMDStub/シ リ アル イ ン タ ー フ ェ イ ス を使用 し た MicroBlaze のデ バ ッ グ用の コ マ ン ド オプ シ ョ ン 使用法 connect mb stub -comm serial {<Serial Communication options>} シ リ アル通信オプ シ ョ ン 表 3-6 に、 XMDStub/シ リ アル イ ン タ ーフ ェ イ ス を使用する MicroBlaze のオプシ ョ ン を リ ス ト し ます。 表 3‐6 : XMDStub/シ リ アル イ ン タ ー フ ェ イ ス を使用 し た MicroBlaze のデバ ッ グ用のコ マ ン ド オプ シ ョ ン オプ シ ョ ン 説明 -baud <serial port baud rate> シ リ ア ル ポ ー ト の ボ ー レ ー ト を bps で 指定 し ま す。 デ フ ォ ル ト 値 は 19200bps です。 -port <serial port> XMD がシ リ アル ケーブルを介 し て接続 さ れてい る 場合、 リ モー ト ハー ド ウ ェ アが接続 さ れてい る シ リ アル ポー ト を指定 し ます。 デフ ォ ル ト のシ リ アル ポー ト は、 次の と お り です。 /dev/ttyS0 (Linux) Com1 (Windows) -timeout <timeout in secs> XMD コ マ ン ド が XMDStub か ら の応答を待つ時間を秒で指定 し ます。 注記 : プ ロ グ ラ ム に UART ま たは MDM UART に出力を書 き 出す print() ま たは putnum() な ど の I/O 関数が あ る 場合 は、 XMD を起動 し た コ ン ソ ールま たは タ ー ミ ナルに表示 さ れます。 図 3-3 は、 MDM UART お よ び UARTlite を使用 し た MicroBlaze のデバ ッ グ を示 し てい ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 64 第 3 章 : XMD (Xilinx Microprocessor Debugger) X-Ref Target - Figure 3-3 XMD RS-232 (Serial Cable) Uartlite AXI Bus Local Memory MicroBlaze XMD JTAG UART MDM AXI Bus MicroBlaze Local Memory X10844 図 3‐3 : XMDStub を使用 し 、 MDM UART および UARTlite を介 し た MicroBlaze のデバ ッ グ XMDStub を使用 し たデバ ッ グにおける要件 XMD を使用 し たハー ド ウ ェ ア ボー ド 上のプ ロ グ ラ ムのデバ ッ グは、 次の よ う に行われます。 • XMD は、 JTAG ま たはシ リ アル接続を使用 し てボー ド 上の XMDStub と 通信 し ます。 そのため、 タ ーゲ ッ ト の MicroBlaze シ ス テ ムの MSS フ ァ イ ルで MDM ま たは UART を XMDSTUB_PERIPHERAL で指定する 必要があ り ます。 Platform Generator は、 MDM ま たは UART を含むシ ス テ ム を作成で き ま す。 XMDStub モー ド でサポー ト さ れて い る JTAG ケーブルには次の も のがあ り ます。 ° ザ イ リ ン ク ス パ ラ レル ケーブル ° プ ラ ッ ト フ ォーム USB ケーブル エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 65 第 3 章 : XMD (Xilinx Microprocessor Debugger) • ボー ド 上の XMDStub は、 ホ ス ト コ ン ピ ュ ー タ ー と の通信に MDM ま たは UART を使用する ため、 MicroBlaze シ ス テ ムで MDM ま たは UART を使用す る よ う に コ ン フ ィ ギ ュ レーシ ョ ンす る 必要があ り ます。 • XMDStub の実行フ ァ イ ルは、シ ス テ ムの起動時に MicroBlaze の ロ ーカル メ モ リ に含まれてい る 必要があ り ます。 XMDStub の MicroBlaze メ モ リ への書 き 込みは、 Data2MEM に よ り 行われ ます。 MicroBlaze シ ス テ ムのビ ッ ト ス ト リ ー ム の 内 容 を ブ ロ ッ ク RAM に 書 き 込む た め の Data2MEM ス ク リ プ ト が 生 成 さ れ ま す。 こ れ に は、 DEFAULT_INIT で指定 さ れてい る 実行フ ァ イ ルが使用 さ れます。 • デバ ッ グ用にボー ド にダ ウ ン ロ ー ド す る 必要のあ る プ ロ グ ラ ムは、 開始ア ド レ ス を 0x800 よ り 大き く し 、 crt1.o の ス タ ー ト ア ッ プ コ ー ド と リ ン ク さ せる 必要があ り ます。 mb-gcc を -xl-mode-xmdstub オプシ ョ ン を使用 し て実行す る と 、こ れ ら の条件を満た し てプ ロ グ ラ ム を コ ンパ イ ル で き ます。 注記 : ソ ース レベルのデバ ッ グでは、 プ ロ グ ラ ムの コ ンパ イ ルに -g オプシ ョ ン も 使用する 必要があ り ます。C プ ロ グ ラ ムの機能を初めて検証す る 場合は、 -O2 ま たは -O3 な ど の mb-gcc の最適化オプシ ョ ン を使用 し ない こ と をお勧め し ます。 こ れ ら のオプシ ョ ン を使用す る と 、 最適化に よ り コ ー ド が大幅に変わ る 場合があ る ので、 デバ ッ グが困難に な り ます。 シ ミ ュ レー タ を使用 し た MicroBlaze のデバ ッ グ mb-gdb お よ び XMD を使用 し て、 XMD に組み込まれたサ イ ク ル精度シ ミ ュ レー タ 上でプ ロ グ ラ ム をデバ ッ グで き ま す。 使用法 connect mb sim [-memsize <size>] シ ミ ュ レー タ を使用 し た MicroBlaze のデバ ッ グのオプ シ ョ ン オプ シ ョ ン memsize <size> 説明 シ ミ ュ レー タ に割 り 当て る メ モ リ ア ド レ ス バ ス の幅を指定 し ます。 プ ロ グ ラ ムは、 0 か ら (2size)-1 の メ モ リ 範囲にア ク セ ス で き ます。 デフ ォ ル ト の メ モ リ サ イ ズは 64 KB です。 シ ミ ュ レー タ を使用 し たデバ ッ グにおける要件 XMD を使用 し てサ イ ク ル精度 ISS (命令セ ッ ト シ ミ ュ レ ー タ ) でプ ロ グ ラ ム をデバ ッ グす る には、 プ ロ グ ラ ム をデ バ ッ グ用に コ ンパ イ ル し 、 crt0.o の ス タ ー ト ア ッ プ コ ー ド に リ ン ク さ せる 必要があ り ます。 mb-gcc を -g オプシ ョ ン を使用 し て実行す る と 、 プ ロ グ ラ ムがデバ ッ グ用に コ ンパ イ ル さ れ、 デフ ォ ル ト ですべての プ ロ グ ラ ムが crt0.o に リ ン ク さ れます。 オプシ ョ ンは -xl-mode-executable です。 プ ロ グ ラ ムの メ モ リ サ イ ズは 64K を超え てはな ら ず、 ま た ア ド レ ス 0 で開始す る 必要があ り ます。 プ ロ グ ラ ムは メ モ リ の最初の 64KB に格納す る 必要があ り ます。 注記 : シ ミ ュ レー タ を使用 し たデバ ッ グでは、 OPB ペ リ フ ェ ラ ルのシ ミ ュ レーシ ョ ンはサポー ト さ れてい ません。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 66 第 3 章 : XMD (Xilinx Microprocessor Debugger) MDM ペ リ フ ェ ラ ルおよび UART を使用 し たデバ ッ グ デバ ッ グ、 お よ びシ ス テ ムか ら の情報を収集す る ため、 MDM ペ リ フ ェ ラ ルに接続 し 、 UART イ ン タ ーフ ェ イ ス を使 用す る こ と がで き ます。 使用法 connect mdm -uart MDM を使用 し たデバ ッ グにおける要件 MDM で UART 機能を使用す る には、 シ ス テ ム に MDM を イ ン ス タ ン シエー ト し て、 C_USE_UART パ ラ メ ー タ ーを 設定す る 必要があ り ます。 xuart w <byte> コ マ ン ド を使用 し て も 、 ホ ス ト か ら MicroBlaze 上のプ ロ グ ラ ムに UART 入力を供給で き ます。 terminal コ マ ン ド を使用す る と 、 ハ イ パー タ ー ミ ナルの よ う な イ ン タ ーフ ェ イ ス が開き 、 UART イ ン タ ーフ ェ イ ス か ら の読み 出 し お よ び書 き 込みを実行で き ま す。 read_uart コ マ ン ド を使用す る と 、 STDIO ま たは フ ァ イ ルに書 き 込む イ ン タ ー フ ェ イ ス が提供 さ れます。 デバ ッ グ セ ッ シ ョ ンの設定 デバ ッ グ セ ッ シ ョ ン を設定す る には、 debugconfig コ マ ン ド を使用 し ます。 デバ ッ ガーの命令の進行方法、 メ モ リ の ア ク セ ス方法な ど を設定で き ます。 使用法 debugconfig [-step_mode {disable_interrupt | enable_interrupt}] [-memory_datawidth_matching {disable | enable}] [-reset_on_run {system enable | processor enable | disable}] [-reset_on_data_dow {system enable | processor enable | disable}] 表 3-7 は、 デバ ッ グ設定オプシ ョ ン を示 し てい ます。 表 3‐7 : デバ ッ グ設定オプ シ ョ ン オプ シ ョ ン 説明 オプシ ョ ン な し -step_mode {disable_interrupt enable_interrupt} -memory_datawidth_matching {disable | enable} 現在のセ ッ シ ョ ンの現在のデバ ッ グ設定を表示 し ます。 | XMD の命令ス テ ッ プ モー ド を指定 し ます。 disable_interrupt がデ フ ォ ル ト モー ド です。 命令中、 割 り 込みはデ ィ ス エーブルにな り ます。 enable_interrupt は命令中の割 り 込みを イ ネーブルに し ます。 命令中に割 り 込みが発生す る と 、 その割 り 込みはプ ロ グ ラ ム の割 り 込み ハン ド ラ に よ り 処理 さ れます。 XMD での メ モ リ の読み出 し お よ び書き 込みの処理方法を指定 し ます。デ フ ォ ル ト では、 enable に設定 さ れてい ます。 すべてのデー タ 幅 (バ イ ト 、 ハーフ ワー ド 、 ワ ー ド )が、 最適な方法で処 理 さ れ ます。 こ のオプシ ョ ンは、 デー タ 幅ア ク セ ス に厳密に従 う 必要の あ る メ モ リ コ ン ト ロ ー ラ ーやフ ラ ッ シ ュ メ モ リ な ど で特に便利です。 こ のオプシ ョ ン を disable に設定にす る と 、 XMD に よ り ワ ー ド ア ク セ ス な ど の最適なデー タ 幅ア ク セ ス方法が選択 さ れます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 67 第 3 章 : XMD (Xilinx Microprocessor Debugger) 表 3‐7 : デバ ッ グ設定オプ シ ョ ン (続き) オプ シ ョ ン 説明 -reset_on_run [system enable | processor enable | disable] プ ロ グ ラ ム実行時の リ セ ッ ト の処理方法を指定 し ます。 リ セ ッ ト に よ り 、 シ ス テ ムはプ ロ グ ラ ム実行のための既知の一定 し た ス テー ト にな り 、 前 のプ ロ グ ラ ム実行か ら の影響な し に、 プ ロ グ ラ ム を正 し く 実行す る こ と がで き ます。 デフ ォ ル ト では、 プ ロ グ ラ ム のダ ウ ン ロ ー ド お よ びプ ロ グ ラ ムの実行時にシ ス テ ム リ セ ッ ト が実行 さ れます。 異な る リ セ ッ ト タ イ プ を設定す る には、 次の よ う に入力 し ます。 debugconfig -reset_on_run processor enable debugconfig -reset_on_run system enable リ セ ッ ト をデ ィ ス エーブルにす る には、 次の よ う に入力 し ます。 debugconfig -reset_on_run disable -reset_on_data_dow [system enable | processor enable | disable] デー タ ダ ウ ン ロ ー ド での リ セ ッ ト 処理方法を変更 し ます。 リ セ ッ ト に よ り 、 シ ス テ ムはプ ロ グ ラ ム実行のための既知の一定 し た ス テー ト にな り 、 前のプ ロ グ ラ ム実行か ら の影響な し に、 プ ロ グ ラ ム を正 し く 実行する こ と がで き ます。デフ ォ ル ト では、プ ロ グ ラ ムのダ ウ ン ロ ー ド お よ びプ ロ グ ラ ムの実行時にシ ス テ ム リ セ ッ ト が実行 さ れます。 異な る リ セ ッ ト タ イ プ を設定す る には、 次の よ う に入力 し ます。 debugconfig -reset_on_data_dow processor enable debugconfig -reset_on_data_dow system enable リ セ ッ ト をデ ィ ス エーブルにす る には、 次の よ う に入力 し ます。 debugconfig -reset_on_data_dow disable -run_poll_interval <time in millisec> run ま たは con コ マ ン ド を使用 し てプ ロ セ ッ サが実行 し てい る と き は、一 定間隔で (100ms お き に)、 プ ロ セ ッ サ ス テー ト を XMD が監視 し ま す。 監視頻度を下げ る 必要があ る 場合は、 こ のオプシ ョ ン を使用 し てその間 隔を指定 し ます。 命令ス テ ッ プ モー ド の設定 XMD では、 2 種類の命令ス テ ッ プ モー ド がサポー ト さ れてい ます。 モー ド を選択する には、 debugconfig コ マ ン ド を 使用 し ます。 サポー ト さ れてい る 2 つのモー ド は、 次の と お り です。 • 割 り 込みデ ィ ス エーブル こ れがデフ ォ ル ト モー ド です。 命令の進行中の割 り 込みはデ ィ ス エーブルにな っ てい ます。 • 割 り 込み イ ネーブル 命令進行中の割 り 込みは イ ネーブルにな っ てい ます。 XMD は次の命令にハー ド ウ ェ ア ブ レー ク ポ イ ン ト を設定 し 、 プ ロ セ ッ サを実行 し ます。 命令中に割 り 込みが発生す る と 、 その割 り 込みは割 り 込みハン ド ラ に よ り 処理 さ れます。 プ ロ グ ラ ムは次の命令 で停止 し ます。 注記 : プ ロ グ ラ ムの命令 メ モ リ は、 プ ロ セ ッ サの D 側 イ ン タ ーフ ェ イ ス に接続す る 必要があ り ます。 .XMD% debugconfig Debug Configuration for Target 0 --------------------------------Step Mode....................Interrupt Disabled Memory Data Width Matching...Disabled XMD% debugconfig -step_mode enable_interrupt XMD% debugconfig Debug Configuration for Target 0 --------------------------------- エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 68 第 3 章 : XMD (Xilinx Microprocessor Debugger) Step Mode....................Interrupt Enabled Memory Data Width Matching...Disabled メ モ リ ア ク セスの設定 XMD では、 異な る メ モ リ デー タ 幅へのア ク セ ス がサポー ト さ れてい ます。 サポー ト さ れ る デー タ 幅は、 ワ ー ド (32 ビ ッ ト )、 ハーフ ワ ー ド (16 ビ ッ ト )、 お よ びバ イ ト (8 ビ ッ ト ) です。 デフ ォ ル ト では、 メ モ リ の読み出 し お よ び書 き 込み処理に適切なデー タ 幅が XMD に よ り 選択 さ れます。 debugconfig コ マ ン ド を使用す る と 、 デー タ 幅が メ モ リ 処理 のデー タ 幅 と 一致す る よ う 設定で き ます。 こ の設定は、 異な る デー タ 幅の フ ラ ッ シ ュ デバ イ ス にア ク セ スす る 場合に 必要です。 XMD% debugconfig Debug Configuration for Target 0 --------------------------------Step Mode....................Interrupt Disabled Memory Data Width Matching...Enabled XMD% debugconfig -memory_datawidth_matching disable XMD% debugconfig Debug Configuration for Target 0 --------------------------------Step Mode....................Interrupt Disabled Memory Data Width Matching...Disabled マルチ プ ロ セ ッ シ ング シ ス テムでの リ セ ッ ト の設定 デフ ォ ル ト では、 プ ロ セ ッ サにプ ロ グ ラ ムがダ ウ ン ロ ー ド さ れ る と シ ス テ ム リ セ ッ ト が実行 さ れます。 こ れは、 プ ロ グ ラ ム を実行す る 前にプ ロ セ ッ サの ス テー ト を既知の も のにす る ためです。 マルチプ ロ セ ッ シ ン グ シ ス テ ムでは、 プ ロ グ ラ ムのダ ウ ン ロ ー ド お よ び実行が複数のプ ロ セ ッ サで順次処理 さ れます。 シ ス テ ム アーキ テ ク チ ャ に よ っ ては、 ダ ウ ン ロ ー ド 時に実行 さ れ る シ ス テ ム リ セ ッ ト に よ り 、 別のプ ロ セ ッ サにダ ウ ン ロ ー ド さ れたプ ロ グ ラ ムが リ セ ッ ト さ れて し ま う こ と があ り ます。 こ の動作が求め ら れ る 場合 と そ う でない場合 があ る ので、 debugconfig コ マ ン ド を使用 し て シ ス テ ム リ セ ッ ト をデ ィ ス エーブルに し た り 、 特定のプ ロ セ ッ サのみ で リ セ ッ ト が イ ネーブルにな る よ う に設定 し ます。 次に例を示 し ます。 例 1 :1 つのマ ス タ ー プ ロ セ ッ サ と 複数のス レーブ プ ロ セ ッ サ こ の例では、 マ ス タ ー プ ロ セ ッ サ上のプ ロ グ ラ ムが最初にダ ウ ン ロ ー ド さ れて実行 さ れ、 その後ほかのプ ロ セ ッ サへ のダ ウ ン ロ ー ド が実行 さ れます。 こ の場合、 マ ス タ ー プ ロ セ ッ サへのダ ウ ン ロ ー ド 時のシ ス テ ム リ セ ッ ト を イ ネー ブルに し 、 ほかのプ ロ セ ッ サへのダ ウ ン ロ ー ド 時にはプ ロ セ ッ サ リ セ ッ ト のみを イ ネーブルにす る か、 ま たは リ セ ッ ト な し に し ます。 例 2 :同格の2 つのプ ロ セ ッ サ こ の例では、 ダ ウ ン ロ ー ド シーケ ン ス は任意にで き 、 両方のプ ロ セ ッ サでプ ロ セ ッ サ リ セ ッ ト のみを イ ネーブルに す る か、 ま たは リ セ ッ ト な し に し ます。 こ の よ う にす る と 、 一方のプ ロ セ ッ サへのプ ロ グ ラ ムのダ ウ ン ロ ー ド が も う 一方のプ ロ セ ッ サのシ ス テ ム ス テー ト に影響を及ぼす こ と はあ り ません。 こ のモデルにおけ る リ セ ッ ト の接続 と シーケ ン ス については、 proc_sys_reset IP モジ ュ ールの資料を参照 し て く だ さ い。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 69 第 3 章 : XMD (Xilinx Microprocessor Debugger) Cortex A9 プ ロ セ ッ サ XMD% connect arm hw JTAG chain configuration -------------------------------------------------Device ID Code IR Length Part Name 1 4ba00477 4 Cortex-A9 2 03727093 6 XC7Z020 CortexA9 Processor Configuration ------------------------------------Version.............................0x00000003 User ID.............................0x00000000 No of PC Breakpoints................6 No of Addr/Data Watchpoints.........1 Connected to "arm" target. id = 64 Starting GDB server for "arm" target (id = 64) at TCP port no 1234 srrd [reg name] 特殊 レ ジ ス タ 読み出 し 。 CortexA9 の場合、 [reg name] で識別 さ れ る コ プ ロ セ ッ サ レ ジ ス タ の セ ッ ト を読み出 し ます。 [reg name] は、 ctrl、 debug、 dma、 tcm、 id、 etc、 vfp のいずれかにな り ます。 (デフ ォ ル ト は ctrl) mrc <CPx> <op1> <CRn> <CRm> <op2> Cortex A9 コ プ ロ セ ッ サ レ ジ ス タ 読み出 し 。 rwr <register> <word> レ ジ ス タ に書き 込みます。 mcr <CPx> <op1> <CRn> <CRm> <op2> <word> Cortex A9 コ プ ロ セ ッ サ レ ジ ス タ 書 き 込み。 mrd <address> [num] [w|h|b] メ モ リ の読み出 し ロ ッ ク 。デフ ォ ル ト は w ( ワー ド ) です。 mrd_var <variable name> [ELF file] グ ロ ーバル変数での読み出 し メ モ リ 。 mrd_phys <address> [num] [w|h|b] AHB AP を介 し た Cortex A9 の メ モ リ 読み出 し 。 デフ ォ ル ト は w (ワ ー ド ) です。 [-force] 0x0 で OCM か ら 読み出 し ます (DDR が 0x0 に再 マ ッ プ さ れていない場合)。 mwr <address> <values> [<num> <w|h|b>] メ モ リ の書き 込み。 デフ ォ ル ト は w ( ワー ド ) で す。 mwr_phys <address> <values> [<num> <w|h|b>] AHB AP を介 し た Cortex A9 の メ モ リ 書き 込み。 デフ ォ ル ト は w (ワ ー ド ) です。 [-force] 0x0 で OCM に書 き 込み ま す (DDR が 0x0 に再 マ ッ プ さ れていない場合)。 srrd ctrl Control:08c50879 Auxiliary Control:00000045 Coprocessor Access Control:00f00000 Secure Configuration:00000000 Secure Debug Enable:00000000 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 70 第 3 章 : XMD (Xilinx Microprocessor Debugger) Non-Secure Access Control:00000000 Translation Table Base 0:00108059 Translation Table Base 1:00108059 Translation Table Base Control:00000002 Domain Access Control: ffffffff Data Fault Status:00000000 Instruction Fault Status:00000000 Fault Address:00000000 Watchpoint Fault Address:00000000 Instruction Fault Address:00000000 Secure or Non-secure Vector Base Address:00100000 Monitor Vector Base Address:00000000 Interrupt Status:00000000 FCSE PID:00000000 Context ID::00000000 User Read/Write Thread and Process ID:00000000 User Read-only Thread and Process ID:00000000 Privileged Only Thread and Process ID:00000000 Peripheral Port Memory Remap:00000000 XMD% srrd dbg Unknown CortexA9 Register name dbg XMD% srrd debug Debug ID:35137030 Debug Status and Control:02086003 Data Transfer: f8000008 Watchpoint Fault Address:00000000 Vector Catch:00000000 Debug State Cache Control:00000000 Debug State MMU Control:00000000 Breakpoint Value 0:00100000 Breakpoint Value 1:00000000 Breakpoint Value 2:00000000 Breakpoint Value 3:00000000 Breakpoint Value 4:00000000 Breakpoint Value 5:00000000 Breakpoint Control 0:004001e6 Breakpoint Control 1:00000000 Breakpoint Control 2:00000000 Breakpoint Control 3:00000000 Breakpoint Control 4:00000000 Breakpoint Control 5:00000000 Watchpoint Value 0:00000000 Watchpoint Value 1:00000000 Watchpoint Control 0:00000000 Watchpoint Control 1:00000000 DMA DMA DMA DMA DMA DMA DMA DMA DMA DMA DMA DMA Identification and Status present:00100001 Identification and Status queued:00000000 Identification and Status running:00000000 Identification and Status interrupting:00000000 User Accessibility:00000000 Channel Number:00000000 Control:00000000 Internal Start Address:00000000 External Start Address:00000000 Internal End Address:00000000 Channel Status:00000000 Context ID:00000000 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 71 第 3 章 : XMD (Xilinx Microprocessor Debugger) Data Cache Lockdown:00000000 Instruction Cache Lockdown:00000000 Data TCM Region:00000000 Instruction TCM Region:00000000 Data TCM Non-secure Control Access:00000000 Instruction TCM Non-secure Control Access:00000000 TCM Selection:00000000 Cache Behavior Override:00000000 Main ID:413fc090 Cache Type:83338003 TCM status:00000000 TLB Type:00000402 Processor Feature 0:00001231 Processor Feature 1:00000011 Debug Feature 0:00010444 Auxiliary Feature 0:00000000 Memory Model Feature 0:00100103 Memory Model Feature 1:20000000 Memory Model Feature 2:01230000 Memory Model Feature 3:00102111 Instruction Set Feature Attribute Instruction Set Feature Attribute Instruction Set Feature Attribute Instruction Set Feature Attribute Instruction Set Feature Attribute Instruction Set Feature Attribute 0:00101111 1:13112111 2:21232041 3:11112131 4:00011142 5:00000000 XMD% srrd etc PA:00000000 Cache Dirty Status:00000000 TLB Lockdown:00000000 Primary Region Memory Remap:00098aa4 Normal Region Memory Remap:44e048e0 Secure User and Non-secure Access Validation Control:00000000 Performance Monitor Control:00000000 Cycle Counter:00000000 Count 0:00000000 Count 1:00000000 Reset Counter:00000000 Interrupt Counter:00000000 Fast Interrupt Counter:00000000 System Validation Cache Size Mask:00000000 TLB Lockdown Index:00000000 TLB Lockdown VA:00000000 TLB Lockdown PA:000000c6 TLB Lockdown Attributes:00000000 XMD% srrd vfp Floating-Point System ID:41033094 Floating-Point Status And Control:00000000 Floating-Point Exception:40000000 Floating-Point Instruction:40000000 Floating-Point Instruction 2:40000000 Media and VFP Feature 0:10110222 Media and VFP Feature 1:01111111 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 72 第 3 章 : XMD (Xilinx Microprocessor Debugger) XMD 内部 Tcl コ マ ン ド Tcl イ ン タ ーフ ェ イ ス モー ド では、 XMD コ マ ン ド が追加 さ れた Tcl シ ェ ルが起動 し ます。 XMD Tcl コ マ ン ド はすべて x と い う 文字で開始 し 、 XMD で 「x?」 と 入力す る と 表示 さ れます。 こ れ ら の内部 コ マ ン ド には、 43 ページの 「XMD のオプシ ョ ン」 に示す Tcl ラ ッ パーを使用す る こ と をお勧め し ます。 Tcl ラ ッ パー フ ァ イ ルに よ り こ れ ら の コ マ ン ド ほ と ん ど の出力が表示 さ れ、 よ り 多 く のオプシ ョ ン が提供 さ れ ます。 Tcl ラ ッ パーは以前のバージ ョ ンで も 機能 し ますが、 x <name> コ マ ン ド は今後の リ リ ース で使用で き な く な り ます。 次の Tcl コ マ ン ド について説明 し ます。 • 「プ ロ グ ラ ム初期化オプシ ョ ン」 • 「レ ジ ス タ / メ モ リ のオプシ ョ ン」 • 「プ ロ グ ラ ム制御オプシ ョ ン」 • 「プ ロ グ ラ ム ト レース/プ ロ フ ァ イ ル オプシ ョ ン」 • 「その他の コ マ ン ド 」 プ ログ ラ ム初期化オプ シ ョ ン 表 3‐8 : プ ログ ラ ム初期化オプ シ ョ ン オプ シ ョ ン 説明 <connect type> プ ロ セ ッ サ ま たはペ リ フ ェ ラ ルに接続 し ます。 タ ーゲ ッ ト タ イ プには mb と mdm があ り ます。 オ プ シ ョ ン の詳細は、 58 ページ の 「connect コ マ ン ド のオ プ シ ョ ン」 を参照 し て く だ さ い。 xdebugconfig <target id> [-step_mode <Step Type>] [-memory_datawidth_matching {disable | enable}] [-reset_on_run {system enable| processor enable | disable}] [-reset_on_data_dow {system enable | processor enable | disable}] [run_poll_interval <time in millisec> タ ー ゲ ッ ト のデバ ッ グ セ ッ シ ョ ン を 設定 し ま す。 詳細は、 67 ページの 「デバ ッ グ セ ッ シ ョ ンの設定」 を参照 し て く だ さ い。 xdisconnect [<target id>] [-cable] タ ーゲ ッ ト と の接続を解除 し ま す。 ケーブルお よ びすべての タ ーゲ ッ ト か ら 接続解除する には、 -cable option コ マ ン ド を使 用 し ます。 xconnect <target> {mb|mdm} {options} エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 73 第 3 章 : XMD (Xilinx Microprocessor Debugger) 表 3‐8 : プ ログ ラ ム初期化オプ シ ョ ン (続き) オプ シ ョ ン 説明 xdownload <target_id> <filename> [load address] xdownload <target_id> -data <filename> <load_address> 指定の ELF フ ァ イ ルま たはデー タ フ ァ イ ル (-data オプシ ョ ン を 使用) を、 現在の タ ーゲ ッ ト の メ モ リ に ダ ウ ン ロ ー ド し ま す。 ア ド レ ス を指定 し ない場合は、 ELF フ ァ イ ルのヘ ッ ダーか ら ダ ウ ン ロ ー ド する ア ド レ ス が判断 さ れます。 ア ド レ ス を指定 し た場合は、 ELF フ ァ イ ルは位置独立 コ ー ド (PIC コ ー ド ) と し て処理 さ れて指定の ア ド レ ス にダ ウ ン ロ ー ド さ れ、PIC コ ー ド に従っ て、 レ ジ ス タ R20 が開始ア ド レ ス に 設定 さ れます。 XMD では、 XMDSTUB 領域 (ア ド レ ス 0x0 ~ 0x800) への書き 込みを禁止す る 目的以外では、 バ ウ ン ド チ ェ ッ ク は行われ ま せん。 xrcableesn ホ ス ト マシ ン に接続 さ れてい る USB ケーブルの ESN 値を返 し ます。 xrjtagchain [-cable <cable_options>] ホ ス ト マ シ ン に 接続 さ れ て い る ボ ー ド の JTAG デ バ イ ス チ ェ ーン情報を返 し ます。 xfpga -f <bitstream> [-cable <cable_options>]| [-configdevice <configuration_options>] [-debugdevice <device_name> ] FPGA デバ イ ス のビ ッ ト ス ト リ ーム を読み込み、 ま たオプシ ョ ンで、 ケーブル コ ン フ ィ ギ ュ レーシ ョ ンお よ びデバ ッ グ デバ イ ス オプシ ョ ン を読み込みます。 | xload_sysfile hw <hw_spec_file> ハー ド ウ ェ ア仕様フ ァ イ ルを読み込みます。 xrut [Session ID] XMD ソ ケ ッ ト イ ン タ ー フ ェ イ ス を 介 し て通信す る 場合に、 XMD セ ッ シ ョ ン を認証 し ます。 まずセ ッ シ ョ ン ID が割 り 当 て ら れ、 続 く 呼び出 し に よ り セ ッ シ ョ ン ID が返 さ れます。 xtargets -listSysID xtargets -system <system_ID> [-print] [-listTgtID} xtargets -target <target_ID> {-print | -prop} 現在の XMD セ ッ シ ョ ン の シ ス テ ムお よ び タ ーゲ ッ ト 情報を 表示 し ます。 -listSysID は既存のシ ス テ ム を リ ス ト 表示 し ます。 -system <system_ID> は指定 し た シ ス テ ムの情報を表示 し ま す。 -print はシ ス テ ムの異な る タ ーゲ ッ ト を表示 し ます。 -listTgtID はシ ス テ ム の既存 タ ーゲ ッ ト を リ ス ト し て表示 し ます。 -target <target_ID> は指定 し た タ ーゲ ッ ト の情報を表示 し ます。 次のオプシ ョ ンがあ り ます。 -print : タ ーゲ ッ ト の情報を表示 し ます。 -prop : タ ーゲ ッ ト のプ ロ パテ ィ を表示 し ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 74 第 3 章 : XMD (Xilinx Microprocessor Debugger) レ ジ ス タ / メ モ リ のオプ シ ョ ン 表 3‐9 : レ ジ ス タ / メ モ リ のオプ シ ョ ン オプ シ ョ ン 説明 xdata_verify <target id> <Binary filename><load address> <Binary filename> が <load address> メ モ リ に 正 し く ダ ウ ン ロ ー ド さ れたか ど う かを確認 し ます。 xdisassemble <inst> 逆アセ ンブルを実行 し 、 32 ビ ッ ト 命令を 1 つ表示 し ます。 xelf_verify <target id> [<filename>.elf] <filename>.elf が メ モ リ に正 し く ダ ウ ン ロ ー ド さ れて い る か ど う かを確認 し ます。 <filename>.elf を指定 し ない場合は、 最後にダ ウ ン ロ ー ド さ れた ELF フ ァ イ ルが確認 さ れます。 xrmem <target id> <address> {<number of bytes|half|word>} {b | h | w} xrmem <target id> -var <Global Variable Name> 指定 メ モ リ ア ド レ ス の メ モ リ ロ ケーシ ョ ン の ワ ー ド /バ イ ト 数を読み出 し ま す。 デフ ォ ル ト では、 1 バ イ ト 読み出 し ま す (b)。 デー タ 値の リ ス ト が返 さ れます。 デー タ タ イ プは、 メ モ リ ア ク セ ス のデー タ 幅に よ っ て異な り ます。 xwmem <target id> <address> {<number of bytes>|half|word} {b | h | w} <value list> xwmem <target id> -var <Global Variable Name> <value list> 指定 メ モ リ ア ド レ ス のデー タ 値の ワ ー ド /バ イ ト 数 を書 き 込 みます。 デフ ォ ル ト では、 1 バ イ ト 書き 込みます (b)。 xrreg <target id> [reg] すべての レ ジ ス タ ま たは <reg> で指定 し た レ ジ ス タ のみを読 み出 し ます。 xwreg <target id> [reg] [value] <reg> で指定 し た レ ジ ス タ に 32 ビ ッ ト の値を書き 込みます。 xstack_check <target id> 現在の タ ーゲ ッ ト で実行中のプ ロ グ ラ ム の ス タ ッ ク 使用情報 を表示 し ます。 タ ーゲ ッ ト に最後にダ ウ ン ロ ー ド さ れた ELF フ ァ イ ルの ス タ ッ ク がチ ェ ッ ク さ れます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 75 第 3 章 : XMD (Xilinx Microprocessor Debugger) プ ログ ラ ム制御オプ シ ョ ン X-Ref Target - Figure 3-4 表 3‐10 : プ ログ ラ ム制御オプ シ ョ ン オプ シ ョ ン 説明 xbreakpoint <target id> {addr | function name} {sw | hw} 指定のア ド レ ス ま たは関数の開始部分にブ レ ー ク ポ イ ン ト を 設定 し ます。 注記 : XMDStub タ ーゲ ッ ト の場合、 imm 命令の直後の命令に ブ レ ー ク ポ イ ン ト が あ る と 、 不定な結果 と な る 場合が あ り ま す。 xcontinue <target id> [<Execute Start Address>] [-block] 現在の PC ま たは指定のア ド レ ス <Execute Start Address> か ら 実行を続け ます。 -block オプシ ョ ン を指定 し た場合は、プ ロ セ ッ サがブ レー ク ポ イ ン ト ま たは ウ ォ ッ チポ イ ン ト で停止す る と 、 コ マ ン ド が戻 さ れます。 -block は、 ス ク リ プ ト 記述に便利なオプシ ョ ンで す。 xcycle_step <target id> [cycles] 1 ク ロ ッ ク サ イ ク ル分進め ま す。 サ イ ク ル数を指定 し た場合 は、 その ク ロ ッ ク サ イ ク ル数だけ進め ます。a xlist <target id> すべてのブ レー ク ポ イ ン ト のア ド レ ス を表示 し ます。 xremove <target id> {<addr> | <function name> | <bp id> | all} 1 つ ま たは複数のブ レ ー ク ポ イ ン ト / ウ ォ ッ チポ イ ン ト を削除 し ます。 xreset <target id> [reset type] タ ーゲ ッ ト を リ セ ッ ト し ます。Table 3-11 on page 77に示 さ れて い る 信号な ど、 特定の リ セ ッ ト タ イ プ を設定す る こ と も 可能 です。 xrun <target id> プ ロ グ ラ ム を開始ア ド レ ス か ら 実行 し ます。 xstate <target id> プ ロ セ ッ サ タ ーゲ ッ ト の ス テー ト (実行ま たは停止) を返 し ま す。 xstep <target id> MicroBlaze で 1 命令分進め ます。 imm 命令では、 次の命令 も 実行 さ れます。 こ の操作では、 BIP フ ラ グが設定 さ れ、 割 り 込 みはデ ィ ス エーブ ルに な り ま す。 デバ ッ グ で割 り 込み を イ ネーブルにす る には、 xcontinue を ブ レー ク ポ イ ン ト と 共に使 用 し て く だ さ い。 xstop <target id> プ ロ グ ラ ムの実行を停止 し ます。 xwatch <target id> {r | w} <address> [<data value>] <address> で指定 し た ア ド レ ス に読み出 し /書 き 込み ウ ォ ッ チ ポ イ ン ト を設定 し 、<data value> をチ ェ ッ ク し ます。<data value> を指定 し ない場合は、 ウ ォ ッ チポ イ ン ト は任意の値に一致 し ます。 ア ド レ スお よ びデー タ は、 16 進数フ ォ ーマ ッ ト ま たは 2 進数フ ォーマ ッ ト で指定で き ます。 a. こ の コ マ ン ド は、 シ ミ ュ レー タ を使用す る 場合のみ使用可能です。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 76 第 3 章 : XMD (Xilinx Microprocessor Debugger) ハー ド ウ ェ ア を使用 し た MicroBlaze のデバ ッ グで使用 さ れる信号 表 3‐11 : ハー ド ウ ェ ア を使用 し た MicroBlaze のデバ ッ グで使用 さ れる信号 信号名 (値) 説明 マ ス ク 不可ブ レー ク (0x10) ブ レー ク 信号 と 同様に機能 し ますが、BIP フ ラ グが設定 さ れてい る 場合で も 機能 し ます。 BIP フ ラ グの詳細は、 『MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド 』 (UG081) [参 照 3]を参照 し て く だ さ い。 プ ロ セ ッ サ ブ レー ク (0x20) JTAG UART Ext_Brk 信号 を 使用 し て、 MicroBlaze の Brk 信号 を High に し ま す。 MicroBlaze の BIP (Break-in-Progress) フ ラ グ を設定 し 、 ア ド レ ス 0x18 にジ ャ ンプ し ます。 プ ロ セ ッ サ リ セ ッ ト (0x80) JTAG UART Debug_Rst 信号を使用 し て MicroBlaze を リ セ ッ ト し ます。 シ ス テ ム リ セ ッ ト (0x40) OPB Rst を JTAG UART Debug_SYS_Rst 信号を使用 し て送信 し 、 シ ス テ ム全体を リ セ ッ ト し ます。 プ ログ ラ ム ト レース/プ ロ フ ァ イル オプ シ ョ ン 表 3‐12 : プ ログ ラ ム ト レース/プ ロ フ ァ イル オプ シ ョ ン オプ シ ョ ン 説明 xprofile <target id> [-o <GMON Output File>] xprofile <target id> -config [sampling_freq_hw <value>] [binsize <value>] [profile_mem <start addr>] プ ロ フ ァ イ ル出力フ ァ イ ルを生成 し ます。 こ の フ ァ イ ルは、mb-gprof (MicroBlaze) ま たは arm-xilinx-eabi-gprof (Cortex A9) に よ り 読み出 さ れます。 プ ロ フ ァ イ ル コ ン フ ィ ギ ュ レ ー シ ョ ン の サ ン プ リ ン グ 周波数 (Hz)、ヒ ス ト グ ラ ムのバ イ ナ リ サ イ ズ、収集 し たプ ロ フ ァ イ ル デー タ の メ モ リ ア ド レ ス を指定 し ます。 xstats <target id> {options} 現在のセ ッ シ ョ ンのシ ミ ュ レーシ ョ ン統計を表示 し ます。 reset オ プシ ョ ン を使用す る と 、 シ ミ ュ レーシ ョ ン統計を リ セ ッ ト で き ま す。a xtracestart <target id> ト レース情報の収集を開始 し ます。 xtracestop <target id> ト レース情報の収集を停止 し ます。 (a) a. こ の コ マ ン ド は、 ISS を使用す る 場合のみ使用可能です。 その他の コ マ ン ド 表 3‐13 : その他の コ マ ン ド コマン ド 説明 xclean ケーブルを使用 し てい る ザ イ リ ン ク ス リ ソ ース をすべて ク リ ーン ア ッ プ し ます。 xhelp XMD コ マ ン ド を リ ス ト 表示 し ます。 xverbose 詳細モー ド のオン/オ フ を切 り 替え ます。 XMD か ら のデバ ッ グ情報を表示 し ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 77 第 4章 GNU デバ ッ ガー こ の章では、 MicroBlaze プ ロ セ ッ サお よ び Cortex A9 プ ロ セ ッ サ用のザ イ リ ン ク ス® GNU デバ ッ ガー (GDB) の一般 的な使用法について説明 し ます。 概要 GDB は、 さ ま ざ ま な開発段階で MicroBlaze シ ス テ ム をデバ ッ グお よ び検証す る ための イ ン タ ーフ ェ イ ス を提供す る 、 高性能で柔軟性の高い ツールです。 ま た、 プ ロ セ ッ サ と の通信す る ための基本エン ジ ンに XMD (Xilinx Microprocessor Debugger) を使用 し ます。 ツールの概要 ツールの使用法 MicroBlaze GDB の場合 mb-gdb <options> executable-file ARM Coretx A9 GDB の場合 arm-xilinx-eabi-gdb <options> executable ツールのオプ シ ョ ン GNU デバ ッ ガーで よ く 使用 さ れ る オプシ ョ ンは、 次の と お り です。 -command=FILE 指定 し た フ ァ イ ルか ら GDB コ マ ン ド を実行 し ます。 バ ッ チお よ びス ク リ プ ト モー ド でデ バ ッ グ を実行す る 際に使用 し ます。 -batch オプシ ョ ン を処理 し た後、 終了 し ます。 バ ッ チお よ びス ク リ プ ト モー ド でデバ ッ グ を実行 す る 際に使用 し ます。 -nx 初期化フ ァ イ ル .gdbinit を読み込みません。 XMD への接続で問題が発生 し た場合は (GDB は XMD タ ーゲ ッ ト か ら 接続/接続解除)、 こ のオプシ ョ ン を使用 し て GDB を起動す る か、 .gdbinit フ ァ イ ルを削除 し て く だ さ い。 -nw GUI イ ン タ ーフ ェ イ ス を使用 し ません。 -w GUI イ ン タ ーフ ェ イ ス を使用 し ます (デフ ォ ル ト )。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 78 第 4 章 : GNU デバ ッ ガー GDB を使用 し たデバ ッ グ フ ロー 1. コ マ ン ド プ ロ ンプ ト ま たは タ ー ミ ナルを開 き ます。 2. こ のセ ッ シ ョ ンでは、 <Vivado_SDK_Installation_Path>\SDK\<2014.1> か ら settings64.bat を実行 し ます。 3. 「XMD」 と 入力 し 、 XMD を起動 し ます。 4. プ ロ セ ッ サを接続 し ます。 こ の操作に よ り 、 タ ーゲ ッ ト の GDB サーバーが開 き ます。 例: XMD% connect arm hw Connected to "arm" target. id = 64 Starting GDB server for "arm" target (id = 64) at TCP port no 1234 5. XMD コ マ ン ド の詳細については、 第 3 章 「XMD (Xilinx Microprocessor Debugger)」 を参照 し て く だ さ い。 6. も う 1 度 コ マ ン ド プ ロ ンプ ト を開いて別のセ ッ シ ョ ン を開始 し 、 手順 2 を繰 り 返 し ます。 7. こ のセ ッ シ ョ ンでは、 MicroBlaze ま たは ARM Cortex A9 MP コ アのいずれか、 使用 し てい る ほ う の タ ーゲ ッ ト に 合っ た コ マ ン ド を使用 し て GDB を開始 し ます。 例 : arm-xilinx-eabi-gdb -nw executable.elf 8. XMD の リ モー ト GDB サーバーに接続す る ため、GDB で target remote <hostname>:<TCP port num> を実行 し ます。 た と えば、 TCP ポー ト 番号が 1234 の場合は次の よ う に実行 し ます。 <GDB> target remote localhost:1234 9. プ ロ グ ラ ムお よ びデバ ッ グ アプ リ ケーシ ョ ン を ダ ウ ン ロ ー ド し ます。 GDB で、 プ ロ グ ラ ム を ダ ウ ン ロ ー ド す る ために load コ マ ン ド を実行 し ます。 <GDB> load MicroBlaze GDB の タ ーゲ ッ ト MicroBlaze GNU デバ ッ ガーお よ び XMD ツ ールでは、 リ モー ト タ ーゲ ッ ト を使用で き ま す。 リ モー ト デバ ッ グ は XMD を介 し て行い ます。 XMD サーバー プ ロ グ ラ ムは、 シ ミ ュ レー タ ま たはハー ド ウ ェ ア を使用 し て、 ホ ス ト コ ン ピ ュ ー タ ー上で起動で き ます。 サ イ ク ル精度命令セ ッ ト シ ミ ュ レー タ (ISS) お よ びハー ド ウ ェ ア イ ン タ ーフ ェ イ ス は、MicroBlaze シ ス テ ムの完全な 検証を実行す る 高性能のデバ ッ グ ツールです。 mb-gdb は、 TCP/IP ソ ケ ッ ト 接続で GDB リ モー ト プ ロ ト コ ルを使用 し て、 XMD に接続 し ます。 シ ミ ュ レー タ XMD シ ミ ュ レー タ は MicroBlaze シ ス テ ムのサ イ ク ル精度 ISS で、 シ ミ ュ レーシ ョ ン さ れた MicroBlaze シ ス テ ムの ス テー ト を GDB に示 し ます。 ハー ド ウ ェ ア ハー ド ウ ェ ア上でのデバ ッ グでは、 シ リ アル ケーブル ま たは JTAG ケーブルを介 し て、 マ イ ク ロ プ ロ セ ッ サ デバ ッ グ モジ ュ ール (mdm) デバ ッ グ コ ア、 ま たはハー ド ウ ェ ア ボー ド 上で実行 さ れ る xmdstub プ ロ グ ラ ム と XMD は通信 し 、 実行中の MicroBlaze シ ス テ ムの ス テー ト を GDB に示 し ます。 XMD の詳細は、 第 3 章 「XMD (Xilinx Microprocessor Debugger)」 を参照 し て く だ さ い。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 79 第 4 章 : GNU デバ ッ ガー MicroBlaze をデバ ッ グする ための コ ンパイル プ ロ グ ラ ム をデバ ッ グす る には、 プ ロ グ ラ ム を コ ンパ イ ルする 際にデバ ッ グ情報を生成する 必要があ り ます。 こ のデ バ ッ グ情報はオブジ ェ ク ト フ ァ イ ルに保存 さ れ、各変数お よ び関数のデー タ 型、 ソ ース の行番号に対応す る 実行 コ ー ド のア ド レ ス な ど が記述 さ れてい ます。 適切な修飾子を指定す る と 、 ザ イ リ ン ク ス MicroBlaze ソ フ ト プ ロ セ ッ サ用 の mb-gcc コ ンパ イ ラ に よ り こ の情報が含まれます。 mb-gcc の -g オプシ ョ ン を使用す る と 、 ソ ース レベルでのデバ ッ グ を実行で き ます。 mb-gcc が実行フ ァ イ ルにデバ ッ グ情報を追加す る ので、 コ ー ド をデバ ッ グ し やす く な り ま す。 ま た、 ソ ー ス、 ア セ ン ブ リ 、 ま たはその混合でのデ バ ッ グが可能にな り ます。 注記 : C プ ロ グ ラ ムの機能を初めて検証す る 場合は、-O2 ま たは -O3 な ど の mb-gcc の最適化オプシ ョ ン を使用 し ない こ と をお勧め し ま す。 こ れ ら のオプシ ョ ン を使用す る と 、 最適化に よ り コ ー ド が大幅に変わ る 場合が あ る ので、 デ バ ッ グが困難にな り ます。 注 記 : XMDSTUB を 使 用 し て ハ ー ド ウ ェ ア モ ー ド で XMD を 使用 し て デ バ ッ グ す る 場合 は、 mb-gcc の -xl-mode-xmdstub オプシ ョ ン を指定 し て く だ さ い。 特定の タ ーゲ ッ ト 用に コ ンパ イ ルする 方法は、 第 3 章を参照 し て く だ さ い。 ARM Cortex A9 の タ ーゲ ッ ト ARM Cortex A9 MP コ アのデバ ッ グは、 arm-xilinx-eabi-gdb、 お よ びGDB リ モー ト TCP プ ロ ト コ ルを介 し た XMD でサ ポー ト さ れてい ます。 リ モー ト デバ ッ グは XMD を介 し て行い ます。 ARM Cortex A9 MP コ アに接続す る には、 次の手順に従っ て く だ さ い。 1. 第 3 章 「XMD (Xilinx Microprocessor Debugger)」 の説明に従っ て XMD を起動 し 、 connect arm hw コ マ ン ド を使用 し てボー ド に接続 し ます。 2. 79 ページの 「GDB を使用 し たデバ ッ グ フ ロ ー」 にあ る 手順に従っ て実行 し ます。 arm-xilinx-eabi-gdb に よ り XMD への接続が開始 さ れます。 接続が完了する と 、 XMD を開始 し たシ ェ ル ウ ィ ン ド ウ に メ ッ セージが表示 さ れます。 こ れでデバ ッ ガーが XMD に接続 さ れ、 デバ ッ グ を始め る こ と がで き ます。 GDB コ マ ン ド については、 次の SDK イ ン ス ト ール デ ィ レ ク ト リ に含まれてい る refcard.pdf を参照 し て く だ さ い。 <Xilinx_Vivado_Installation_Path>\SDK\<2014.1>\gnu\arm\nt\share\doc\ xilinx-arm-xilinx-eabi\pdf GDB コ マ ン ド に関する参考資料 mb-gdb の使用に関 し てヘルプ を開 く には、 コ ン ソ ール モー ド で 「help」 と 入力 し ます。 GDB の コ ン ソ ール ウ ィ ン ド ウ を開 く には、 GDB で [View] → [Console] を ク リ ッ ク し ます。 GDB の使用法についてのオン ラ イ ン マニ ュ アルは、 GNU の ウ ェ ブ サ イ ト を参照 し て く だ さ い。 mb-gdb Insight GUI については、 Red Hat Insight の ウ ェ ブ サ イ ト を参照 し て く だ さ い。 付録 B 「その他の リ ソ ースお よ び法的通知」 に、 こ れ ら の資料への リ ン ク があ り ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 80 第 4 章 : GNU デバ ッ ガー 表 4-1 は、 よ く 使用 さ れ る mb-gdb コ マ ン ド を ま と め、 説明 し た も のです。 こ の コ マ ン ド に対応す る GUI コ マ ン ド は、 mb-gdb GUI ウ ィ ン ド ウ のア イ コ ンで確認で き ます。 info target、 monitor info な ど一部の コ マ ン ド は、 コ ン ソ ール モー ド で し か使用で き ません。 表 4‐1 : よ く 使用 さ れる GDB の コ ン ソ ール コ マ ン ド コマン ド 説明 load <program> タ ーゲ ッ ト にプ ロ グ ラ ム を読み込みます。 b main main 関数にブ レー ク ポ イ ン ト を設定 し ます。 c ブ レー ク ポ イ ン ト の後、 プ ロ グ ラ ムの実行を再開 し ます。 run コ マ ン ド を使用 し ないで く だ さ い。 l 現時点でのプ ロ グ ラ ムの リ ス ト を表示 し ます。 n 1 行進め ます。 関数呼び出 し があ っ て も 、 停止せずに次の行ま で実行 し ます。 s 1 行進め ます。 関数呼び出 し があ る 場合は、 その関数の次の行で停止 し ます。 stepi アセ ンブ リ 1 行分進め ます。 info reg レ ジ ス タ 値を表示 し ます。 info target 命令数 と 実行 さ れたサ イ ク ル数を表示 し ます (ビル ト イ ン シ ミ ュ レー タ のみ)。 p <xyz> <xyz> デー タ の値を表示 し ます。 hbreak main main() 関数にハー ド ウ ェ ア ブ レー ク ポ イ ン ト を設定 し ます。 watch <gvar1> グ ロ ーバル変数 gvar1 に ウ ォ ッ チポ イ ン ト を設定 し ます。 rwatch <gvar1> グ ロ ーバル変数 gvar1 に読み出 し ウ ォ ッ チポ イ ン ト を設定 し ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 81 第 5章 フ ラ ッ シ ュ メ モ リ のプ ログ ラ ム 概要 フ ラ ッ シ ュ には、 次の も のをプ ロ グ ラ ムで き ます。 • アプ リ ケーシ ョ ンの実行 イ メ ージ • FPGA のハー ド ウ ェ ア ビ ッ ト ス ト リ ーム • フ ァ イ ル シ ス テ ム イ メ ージ、 サンプル デー タ やアルゴ リ ズ ム テーブルな ど のデー タ フ ァ イ ル アプ リ ケーシ ョ ンの実行 イ メ ージが最 も 一般的です。デザ イ ンのプ ロ セ ッ サの リ セ ッ ト が完了す る と 、ブ ロ ッ ク RAM のプ ロ セ ッ サの リ セ ッ ト 位置に保存 さ れてい る 実行コ ー ド が開始 し ます。 通常ブ ロ ッ ク RAM のサ イ ズは数 KB で ソ フ ト ウ ェ ア アプ リ ケーシ ョ ンの イ メ ージ全体を保存す る には小 さ すぎ る ので、 フ ラ ッ シ ュ メ モ リ (単位は MB) を使 用 し ます。 小型のブー ト ロ ーダーはブ ロ ッ ク RAM に フ ィ ッ ト す る よ う 設計 さ れてい ます。 プ ロ セ ッ サは リ セ ッ ト 時 に こ のブー ト ロ ーダーを実行 し 、 ソ フ ト ウ ェ ア アプ リ ケーシ ョ ン イ メ ージが フ ラ ッ シ ュ か ら 外部 メ モ リ へ と コ ピー さ れます。 こ の後、 制御はブー ト ロ ーダーか ら ソ フ ト ウ ェ ア アプ リ ケーシ ョ ンへ と 移 り 、 実行が継続 さ れます。 プ ロ ジ ェ ク ト で作成 し た ソ フ ト ウ ェ ア アプ リ ケーシ ョ ンの フ ォーマ ッ ト は、 ELF (Executable Linked Format) です。 フ ラ ッ シ ュ か ら ソ フ ト ウ ェ ア アプ リ ケーシ ョ ン をブー ト ロ ー ド する 場合、ELF イ メ ージ を、SREC (モ ト ロ ー ラ S レ コ ー ド ) な ど のブー ト ロ ー ド 可能な イ メ ージ フ ォーマ ッ ト に変換す る 必要があ り ます。 こ う す る と 、 ブー ト ロ ーダーを シ ンプルに、 ま たサ イ ズ も 小 さ く 抑え る こ と がで き ます。 Vivado® Design Suite では、 グ ラ フ ィ カル イ ン タ ーフ ェ イ ス お よ び コ マ ン ド ラ イ ン オプシ ョ ン を使用 し て、 SREC フ ォーマ ッ ト でブー ト ロ ーダ を作成で き ます。 IP イ ン テグ レー タ ーを介 し た フ ラ ッ シ ュのプ ログ ラ ム IP イ ン テ グ レ ー タ ー イ ン タ ー フ ェ イ ス には、 外部共通フ ラ ッ シ ュ イ ン タ ーフ ェ イ ス (CFI) に準拠 し たパ ラ レ ル フ ラ ッ シ ュ デバ イ ス を ボー ド にプ ロ グ ラ ム し 、 外部 メ モ リ コ ン ト ロ ー ラ ー (EMC) IP コ ア を介 し て接続す る ためのダ イ ア ロ グ ボ ッ ク ス があ り ます。 こ のプ ロ グ ラ ミ ン グ ソ リ ュ ーシ ョ ンは、 汎用性を持たせて、 さ ま ざ ま な フ ラ ッ シ ュ デ バ イ スお よ びレ イ ア ウ ト に対応す る よ う 設計 さ れてい ます。 フ ラ ッ シ ュ メ モ リ のプ ロ グ ラ ムは、デバ ッ ガーか ら プ ロ セ ッ サへの接続を使用 し て行われます。IP イ ン テ グ レー タ ー に よ り 、 小型の イ ン シ ス テ ム フ ラ ッ シ ュ プ ロ グ ラ ム ス タ ブが タ ーゲ ッ ト プ ロ セ ッ サにダ ウ ン ロ ー ド さ れ、 実行 さ れ ます。 イ ン シ ス テ ム プ ロ グ ラ ム ス タ ブの動作には、 8KB 以上の メ モ リ が必要です。 ホ ス ト Tcl ス ク リ プ ト は、 コ マ ン ド お よ びデー タ を使用 し て イ ン シ ス テ ム フ ラ ッ シ ュ プ ロ グ ラ ム ス タ ブ を駆動 し 、 フ ラ ッ シ ュ のプ ロ グ ラ ミ ン グ を 完了 さ せます。 フ ラ ッ シ ュ プ ロ グ ラ マは、 プ ロ グ ラ ム さ れ る イ メ ージ フ ァ イ ルを処理せず、 その ま ま フ ラ ッ シ ュ メ モ リ にプ ロ グ ラ ム し ます。 フ ァ イ ルの内容が正 し く プ ロ グ ラ ム さ れ る よ う 、 ソ フ ト ウ ェ アお よ びハー ド ウ ェ ア アプ リ ケーシ ョ ン を設定す る 必要があ り ます。 サポー ト さ れる フ ラ ッ シ ュ デバイ ス フ ラ ッ シ ュ プ ロ グ ラ マは、 フ ラ ッ シ ュ デバ イ ス と の通信に共通フ ラ ッ シ ュ イ ン タ ーフ ェ イ ス (CFI) を使用す る ので、 フ ラ ッ シ ュ デバ イ ス が CFI に準拠 し てい る 必要があ り ま す。 必要な幅の メ モ リ イ ン タ ーフ ェ イ ス を形成す る ため、 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 82 第 5 章 : フ ラ ッ シ ュ メ モ リ のプ ロ グ ラ ム フ ラ ッ シ ュ デバ イ ス の レ イ ア ウ ト も 重要です。 次の表示は、 サポー ト さ れてい る フ ラ ッ シ ュ レ イ ア ウ ト お よ び コ ン フ ィ ギ ュ レーシ ョ ンが リ ス ト さ れてい ます。 フ ラ ッ シ ュ の レ イ ア ウ ト が表 5-1 の コ ン フ ィ ギ ュ レーシ ョ ン と 一致 し な い場合は、 フ ラ ッ シ ュ のプ ロ グ ラ ム セ ッ シ ョ ン を カ ス タ マ イ ズす る 必要があ り ます。 詳細は、 84 ページの 「フ ラ ッ シ ュ のプ ロ グ ラ ム設定のカ ス タ マ イ ズ」 を参照 し て く だ さ い。 表 5‐1 : サポー ト さ れる フ ラ ッ シ ュ コ ン フ ィ ギ ュ レーシ ョ ン x8 のみに対応 し たデバ イ ス (8 ビ ッ ト デー タ バ ス を形成) x16/x8 対応のデバ イ ス を x8 モー ド に設定 (8 ビ ッ ト デー タ バ ス を形成) x32/x8 対応のデバ イ ス を x8 モー ド に設定 (8 ビ ッ ト デー タ バ ス を形成) x16/x8 対応のデバ イ ス を x16 モー ド に設定 (16 ビ ッ ト デー タ バ ス を形成) x8 対応のデバ イ ス のペア (16 ビ ッ ト デー タ バ ス を形成) x8 対応のデバ イ ス 4 個 (32 ビ ッ ト デー タ バ ス を形成) x16 対応のデバ イ ス のペア (32 ビ ッ ト デー タ バ ス を形成) x32/x8 対応のデバ イ ス を x32 モー ド に設定 (32 ビ ッ ト デー タ バ ス を形成) x32 のみに対応 し たデバ イ ス (32 ビ ッ ト デー タ バ ス を形成) 物理 レ イ ア ウ ト 、 ジオ メ ト リ 情報、 お よ び コ マ ン ド セ ッ ト な ど の論理情報は、 CFI を使用 し て決 ま り ま す。 フ ラ ッ シ ュ プ ロ グ ラ マは、 CFI で規定 さ れた コ マ ン ド セ ッ ト のみを使用す る フ ラ ッ シ ュ デバ イ ス で使用で き ます。 CFI で 規定 さ れてい る コ マ ン ド セ ッ ト は表 5-2 に ま と め ら れてい ます。 表 5‐2 : CFI で規定 さ れた コ マ ン ド セ ッ ト CFI ベ ン ダー ID イ ン タ ー フ ェ イ ス名 OEM スポンサー 1 イ ン テル/シ ャ ープ イ ン テル/シ ャ ープ拡張 コ マ ン ド セ ッ ト 2 AMD/富士通 AMD/富士通標準 コ マ ン ド セ ッ ト 3 イ ン テル イ ン テル標準 コ マ ン ド セ ッ ト 4 AMD/富士通 AMD/富士通拡張 コ マ ン ド セ ッ ト デフ ォ ル ト では、 フ ラ ッ シ ュ プ ロ グ ラ マはセ ク タ ー マ ッ プが CFI テーブルに保存 さ れてい る も の と 一致す る フ ラ ッ シ ュ デバ イ ス のみをサポー ト し ます。 フ ラ ッ シ ュ ベン ダーに よ っ ては、 ト ッ プ ブー ト と ボ ト ム ブー ト の フ ラ ッ シ ュ デバ イ ス を提供 し てい る と こ ろ があ り ますが、 両方に同 じ CFI テーブルが使用 さ れ ます。 デバ イ ス のブー ト ト ポ ロ ジ を識別す る フ ィ ール ド は、 CFI 規格の対象外です。 こ のため、 こ の フ ィ ール ド があ る フ ラ ッ シ ュ デバ イ ス を使用す る 場合は、 フ ラ ッ シ ュ プ ロ グ ラ マに問題が生 じ ます。 ブー ト ト ポ ロ ジ を識別す る フ ィ ール ド に関す る 問題を回避す る 方法は、 84 ページの 「フ ラ ッ シ ュ のプ ロ グ ラ ム設定 のカ ス タ マ イ ズ」 を参照 し て く だ さ い。 フ ラ ッ シ ュ デバ イ ス をプ ロ グ ラ ムす る 際は、 まず次の点を確認 し て く だ さ い。 • フ ラ ッ シ ュ プ ロ グ ラ ム ス タ ブがプ ロ グ ラ ム を実行す る と き 、フ ラ ッ シ ュ デバ イ ス が リ セ ッ ト 状態にな っ てい る 。 • フ ラ ッ シ ュ のセ ク タ ーはすべて保護 さ れていない状態であ る 。 フ ラ ッ シ ュ デバ イ ス が ロ ッ ク さ れていた り 、 プ ロ グ ラ ムで き る 状態でない場合、 フ ラ ッ シ ュ プ ロ グ ラ ム ス タ ブが フ ラ ッ シ ュ の ロ ッ ク を解除 し た り 初期化す る こ と はな く 、 エ ラ ー メ ッ セージが表示 さ れます。 注記 : フ ラ ッ シ ュ プ ロ グ ラ マでは、 各フ ラ ッ シ ュ コ マ ン ド を DBA (Device Base Address) 値でオ フ セ ッ ト す る 必要の あ る デ ュ ア ル ダ イ フ ラ ッ シ ュ デバ イ ス は、 現在の と こ ろ サ ポ ー ト さ れ て い ま せん。 イ ン テ ル社の StrataFlash® Embedded Memory (P30) フ ァ ミ リ の フ ラ ッ シ ュ メ モ リ の 512Mb デバ イ ス な ど がその例です。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 83 第 5 章 : フ ラ ッ シ ュ メ モ リ のプ ロ グ ラ ム フ ラ ッ シ ュ プ ロ グ ラ マのパフ ォ ーマ ン ス イ メ ージのプ ロ グ ラ ム速度には、 次の要因が影響 し ます。 • フ ラ ッ シ ュ プ ロ グ ラ マは JTAG を使用 し て イ ン シ ス テ ム プ ロ グ ラ ム ス タ ブ と 通信 し ます。 こ のため、 大抵の場 合、 JTAG ケーブルのバン ド 幅に よ っ て フ ラ ッ シ ュ のプ ロ グ ラ ム速度が制限 さ れて し ま い ます。 • シ ス テ ムで使用可能であれば、 外部 メ モ リ を ス ク ラ ッ チ パ ッ ド メ モ リ と し て使用す る のがベス ト です。 デバ ッ ガーで フ ラ ッ シ ュ イ メ ージ デー タ を数回に分け る こ と な く 一度にダ ウ ン ロ ー ド で き ます。 • MicroBlaze ソ フ ト プ ロ セ ッ サを使用す る 場合は、で き る だけ高速な コ ン フ ィ ギ ュ レーシ ョ ン を イ ンプ リ メ ン ト す る よ う に し ます。 バレル シ フ タ ーや乗算器な ど の機能をオ フ にする と 、 プ ロ グ ラ ム速度を改善で き ます。 フ ラ ッ シ ュのプ ロ グ ラ ム設定のカ ス タ マ イ ズ フ ラ ッ シ ュ のプ ロ グ ラ ムでは、 ハー ド ウ ェ アの違い、 フ ラ ッ シ ュ コ マ ン ド セ ッ ト の違い、 メ モ リ サ イ ズの制限な ど を考慮す る 必要があ り ます。 こ のセ ク シ ョ ンでは、 フ ラ ッ シ ュ のプ ロ グ ラ ムのアルゴ リ ズ ムについて簡単に説明 し ま す。 アルゴ リ ズ ム を理解す る と 、 特定の要件に合わせてプ ロ グ ラ ム設定を カ ス タ マ イ ズで き ます。 [Program Flash] ボ タ ン を ク リ ッ ク し 、 ハー ド ウ ェ ア プ ラ ッ ト フ ォーム プ ロ ジ ェ ク ト を選択する と 、次の処理が実行 さ れます。 1. flash.tcl フ ァ イ ルが <hardware platform project>/settings フ ォ ルダーに作成 さ れます。 こ の フ ァ イ ルには、 フ ラ ッ シ ュ のプ ロ グ ラ ム セ ッ シ ョ ン を記述する パ ラ メ ー タ ーが含まれてお り 、フ ラ ッ シ ュ プ ロ グ ラ マの Tcl フ ァ イ ルで 使用 さ れます。 2. IP イ ン テ グ レー タ ーが XMD を起動 し 、フ ラ ッ シ ュ プ ロ グ ラ マ Tcl の ス ク リ プ ト で次の コ マ ン ド が実行 さ れます。 xmd -nx -hw <hardware platform project>/system.xml -tcl flashwriter.tcl <hardware platform project>/settings/flash.tcl. こ の フ ラ ッ シ ュ プ ロ グ ラ マのホ ス ト Tcl は、 イ ン ス ト ール デ ィ レ ク ト リ にあ り ます。 [Program Flash] ボ タ ン を ク リ ッ ク し た と き にカ ス タ マ イ ズ し た Tcl が実行 さ れ る よ う にす る には、 <hardware platform project>/tmp デ ィ レ ク ト リ に flashwriter.tcl の コ ピーを保存 し て、 デフ ォ ル ト の flashwriter.tcl フ ァ イ ル と 置 き 換え ます。 XMD は まずプ ロ ジ ェ ク ト デ ィ レ ク ト リ で指定フ ァ イ ルを検索 し 、 その後 イ ン ス ト ール デ ィ レ ク ト リ で検索 し ます。 3. フ ラ ッ シ ュ プ ロ グ ラ マ Tcl の ス ク リ プ ト は、イ ン ス ト ール デ ィ レ ク ト リ か ら <hardware platform project>/tmp デ ィ レ ク ト リ に、 フ ラ ッ シ ュ プ ロ グ ラ マ アプ リ ケーシ ョ ン の ソ ース フ ァ イ ルを コ ピー し ます。 こ の ス ク リ プ ト は、 ダ イ ア ロ グ ボ ッ ク ス で指定 し た ス ク ラ ッ チ パ ッ ド メ モ リ ア ド レ ス か ら アプ リ ケーシ ョ ン が ロ ーカルで実行 さ れ る よ う コ ンパ イ ル し ます。 ユーザーの ソ ース を コ ンパ イ ルす る には、 ロ ーカルに保存 さ れてい る flashwriter.tcl の コ ピーを変更 し ます。 4. ス ク リ プ ト は、 フ ラ ッ シ ュ プ ロ グ ラ マ を プ ロ セ ッ サにダ ウ ン ロ ー ド し 、 メ モ リ の メ ールボ ッ ク ス を介 し て フ ラ ッ シ ュ プ ロ グ ラ マ と 通信 し ます。 つま り 、 フ ラ ッ シ ュ プ ロ グ ラ マのア ド レ ス空間の変数に対応す る メ モ リ ロ ケーシ ョ ンにパ ラ メ ー タ ーを書 き 込 み、 フ ラ ッ シ ュ プ ロ グ ラ マ を実行 さ せます。 5. ス ク リ プ ト は、 各操作の終わ り に コ ールバ ッ ク 関数を フ ラ ッ シ ュ プ ロ グ ラ マが実行す る のを待ち、 こ の コ ール バ ッ ク 関数の始めにブ レー ク ポ イ ン ト を設定 し て、 アプ リ ケーシ ョ ン を停止 さ せます。 フ ラ ッ シ ュ プ ロ グ ラ マが 停止す る と 、 ホ ス ト Tcl は結果を処理 し 、 必要に応 じ て コ マ ン ド を さ ら に実行 し ます。 6. 実行中、 フ ラ ッ シ ュ プ ロ グ ラ マは、 イ メ ージ を保存する のに必要な数の フ ラ ッ シ ュ ブ ロ ッ ク だけ を消去 し ます。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 84 第 5 章 : フ ラ ッ シ ュ メ モ リ のプ ロ グ ラ ム 7. 使用可能な ス ク ラ ッ チ パ ッ ド メ モ リ の容量に応 じ て、 フ ラ ッ シ ュ ラ イ タ ーが ス ト リ ー ミ ン グ バ ッ フ ァ ーを割 り 当て、 イ メ ージ フ ァ イ ルを ス ト リ ー ミ ン グ手法で複数回に分けてプ ロ グ ラ ム し ます。 こ の ス ト リ ー ミ ン グ バ ッ フ ァ ーは、 フ ラ ッ シ ュ プ ロ グ ラ ム内に割 り 当て ら れます。 ス ク ラ ッ チ パ ッ ド メ モ リ に イ メ ージすべて をプ ロ グ ラ ムす る のに十分な メ モ リ 量があ る 場合は、 プ ロ グ ラ ムは短時間で完了 し ます。 8. プ ロ グ ラ ムが終了す る と 、 フ ラ ッ シ ュ プ ロ グ ラ マ Tcl が、 フ ラ ッ シ ュ プ ロ グ ラ マに終了 コ マ ン ド を送信 し 、XMD セ ッ シ ョ ン を終了 さ せます。 カ ス タ ム フ ロー IP イ ン テ グ レー タ ーは、 ハー ド ウ ェ ア プ ロ ジ ェ ク ト デ ィ レ ク ト リ に フ ラ ッ シ ュ 設定お よ び一時フ ァ イ ルを保存 し ま す。 ワー ク スペース に複数のハー ド ウ ェ ア プ ロ ジ ェ ク ト があ る 場合は、 フ ラ ッ シ ュ プ ロ グ ラ マのダ イ ア ロ グ ボ ッ ク ス が開 く ので、 そ こ でハー ド ウ ェ ア プ ラ ッ ト フ ォ ーム を選択 し ます。 次に説明す る 手順では、 <IP integrator project> は、 ハー ド ウ ェ ア プ ラ ッ ト フ ォーム プ ロ ジ ェ ク ト を指 し ます。 1. <IP integrator project> デ ィ レ ク ト リ の下に 「tmp」 と い う 名前のサブデ ィ レ ク ト リ を作成 し ます。 注記 : こ の フ ォ ルダーが既にあ る 場合は、 こ の手順を飛ば し ます。 2. <edk_install>/data/xmd/flashwriter.tcl にあ る flashwriter.tcl を コ ピー し 、 <IP integrator project>/tmp デ ィ レ ク ト リ に保 存 し ます。 3. プ ロ ジ ェ ク ト 内に sw_services デ ィ レ ク ト リ を作成 し ます。 4. <edk_install>/data/xmd/flashwriter デ ィ レ ク ト リ 全体を sw_services デ ィ レ ク ト リ に コ ピー し ます。 5. プ ロ ジ ェ ク ト デ ィ レ ク ト リ に コ ピー し た flashwriter.tcl の次の行を変更 し ます。 set flashwriter_src [file join $xilinx_edk “data” “xmd” “flashwriter” “src”] こ れを次の よ う に変更 し ます。 set flashwriter_src [file join “..”“sw_services” "flashwriter" "src"] こ れで、IP イ ン テ グ レー タ ーの [Program Flash Memory] ダ イ ア ロ グ ボ ッ ク ス で [Program Flash] ボ タ ン を ク リ ッ ク し た と き に、 sw_services デ ィ レ ク ト リ に コ ピー し た ス ク リ プ ト と ソ ース が使用 さ れ る よ う にな り ます。 必要に応 じ て、 こ れ ら の フ ァ イ ルを カ ス タ マ イ ズ し ます。 <IP integrator project>/settings/flash.tcl を GUI で上書 き し た く な く 、 flash.tcl で指定 さ れてい る 値のみを使用 し たい場合は、 コ マ ン ド ラ イ ンで次の コ マ ン ド を実行 し ます。 xmd -nx -hw system.xml -tcl tmp/flashwriter.tcl settings/flash.tcl 表 5-3 には、 <IP integrator project> デ ィ レ ク ト リ で使用可能なパ ラ メ ー タ ーが リ ス ト さ れてい ます。 表 5‐3 : フ ラ ッ シ ュのプ ログ ラ ムのパラ メ ー タ ー 変数 機能 EXTRA_COMPILER_FLAGS MicroBlaze の場合、 ハー ド ウ ェ ア機能のサポー ト を オ ン にす る コ ンパ イ ラ オプシ ョ ン を指定 し ます。 た と えば、 ハー ド ウ ェ ア乗算器を イ ネーブ ルに し た場合は、 -mno-xl-soft-mul を こ こ に追加 し ます。 FLASH_BASEADDR フ ラ ッ シ ュ メ モ リ バン ク のベース ア ド レ ス FLASH_BOOT_CONFIG 詳細は、 86 ページの 「競合す る セ ク タ ー レ イ ア ウ ト でのフ ラ ッ シ ュ デバ イ ス の処理」 を参照 し て く だ さ い。 FLASH_FILE プ ロ グ ラ ムす る フ ァ イ ルへの完全パス FLASH_PROG_OFFSET プ ロ グ ラ ム を実行する フ ラ ッ シ ュ メ モ リ バン ク のオ フ セ ッ ト PROC_INSTANCE プ ロ グ ラ ムに使用する プ ロ セ ッ サの イ ン ス タ ン ス名 SCRATCH_BASEADDR プ ロ グ ラ ム中に使用 さ れ る ス ク ラ ッ チ パ ッ ド メ モ リ のベース メ モ リ エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 85 第 5 章 : フ ラ ッ シ ュ メ モ リ のプ ロ グ ラ ム 表 5‐3 : フ ラ ッ シ ュのプ ログ ラ ムのパラ メ ー タ ー (続き) 変数 機能 SCRATCH_LEN ス ク ラ ッ チ パ ッ ド メ モ リ の長 さ (バ イ ト ) TARGET_TYPE プ ロ グ ラ ム に使用す る プ ロ セ ッ サ イ ン ス タ ン ス の タ イ プ(MicroBlaze ま たは Cortex A9) XILINX_PLATFORM_FLASH ザ イ リ ン ク ス プ ラ ッ ト フ ォーム フ ラ ッ シ ュ XL フ ラ ッ シ ュ デバ イ ス を使 用 XMD_CONNECT XMD でプ ロ セ ッ サに接続する ために使用 さ れ る 接続コ マ ン ド ブー ト ローダー ア プ リ ケーシ ョ ン用に ELF フ ァ イルを SREC に手 動で変換する方法 ELF フ ァ イ ル を SREC フ ォ ー マ ッ ト に 手動 で 変換す る 場合 は、 コ マ ン ド ラ イ ン を 使用 で き ま す。 た と え ば、 myexecutable.elf と い う ソ フ ト ウ ェ ア アプ リ ケーシ ョ ン イ メ ージ を変換する 場合は、 OS の コ ン ソ ール (Windows では Cygwin) で ELF フ ァ イ ルを含むフ ォ ルダーに移動 し 、 次の コ マ ン ド を入力 し ます。 <platform>-objcopy -O srec myexecutable.elf myexecutable.srec <platform> には、 使用 し てい る プ ロ セ ッ サが MicroBlaze であれば mb が入 り ます。 こ れに よ り 、 SREC フ ァ イ ルが生成 さ れます。 mb-objcopy は Vivado に含まれ る GNU バ イ ナ リ ユーテ ィ リ テ ィ です。 操作上の注意点 と 回避策 ザイ リ ン ク ス プ ラ ッ ト フ ォ ーム フ ラ ッ シ ュ モー ド の処理 ザ イ リ ン ク ス プ ラ ッ ト フ ォーム フ ラ ッ シ ュ メ モ リ デバ イ ス は、 同期モー ド で初期化 し ます。 デバ イ ス の操作を実行 す る 前に、 こ の メ モ リ デバ イ ス は非同期に設定 し てお く 必要が あ り ま す。 ザ イ リ ン ク ス ソ フ ト ウ ェ ア開発キ ッ ト (SDK) を使用 し てい る 場合は、 タ ーゲ ッ ト デバ イ ス をザ イ リ ン ク ス プ ラ ッ ト フ ォーム フ ラ ッ シ ュ と し て処理す る よ う 、 フ ラ ッ シ ュ プ ロ グ ラ ミ ン グ イ ン タ ーフ ェ イ ス に指示をする チ ェ ッ ク ボ ッ ク ス があ る ので、 それを オンに し ます。 こ の設定で、 プ ロ グ ラ ミ ン グ前にデバ イ ス を非同期に設定する 、 プ ロ グ ラ マの内部折 り 返 し を有効にす る こ と がで き ます。 Read‐Reset コ マ ン ド の 0xF0 で フ ラ ッ シ ュ デバイ ス を処理 CFI の仕様では、 Read-Reset (読み出 し - リ セ ッ ト ) コ マ ン ド は 0xFF/0xF0 に定義 さ れてい ま す。 デフ ォ ル ト では、 フ ラ ッ シ ュ プ ロ グ ラ マは 0xFF をRead-Reset コ マ ン ド と し て使用 し ます。 一部のデバ イ ス で、 読み出 し ・ リ セ ッ ト コ マ ン ド を 0xF0 に し なければな ら ない も のがあ り ますが。 フ ラ ッ シ ュ プ ロ グ ラ マは自動的に こ の判断をす る こ と がで き ません。 こ のため、 新 し いデバ イ ス をプ ロ グ ラ ムす る と き に問題に直面す る 場合があ り ます。 も し エ ラ ーが発生 し た場合は、 84 ページ の 「フ ラ ッ シ ュ のプ ロ グ ラ ム設定の カ ス タ マ イ ズ」 に あ る 手順に従っ て、 cfi.c フ ァ イ ルの #define FRR_CMD 0xFF を #define FRR_CMD 0xF0 に変更 し ます。 競合する セ ク タ ー レ イ アウ ト でのフ ラ ッ シ ュ デバイ スの処理 フ ラ ッ シ ュ ベン ダーに よ っ ては、 あ る セ ク タ ー マ ッ プを CFI テーブルに保存 し 、 別のセ ク タ ー マ ッ プ を フ ラ ッ シ ュ デバ イ ス のブー ト ト ポ ロ ジに応 じ て フ ラ ッ シ ュ デバ イ ス に保存 し ます。 ブー ト ト ポ ロ ジ情報は CFI で規格化 さ れて いないので、 フ ラ ッ シ ュ デバ イ ス で使用 さ れてい る レ イ ア ウ ト を フ ラ ッ シ ュ プ ロ グ ラ マが判断す る こ と はで き ませ ん。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 86 第 5 章 : フ ラ ッ シ ュ メ モ リ のプ ロ グ ラ ム フ ラ ッ シ ュ デバ イ ス のセ ク タ ー レ イ ア ウ ト が、 そのデバ イ ス の CFI テーブルに保存 さ れてい る も の と 異な る 場合は、 カ ス タ ム フ ラ ッ シ ュ プ ロ グ ラ ム フ ロ ーを作成す る 必要があ り ます。 フ ラ ッ シ ュ デバ イ ス が ト ッ プ ブー ト かボ ト ム ブー ト か を判断す る 必要があ り ます。 ト ッ プ ブー ト フ ラ ッ シ ュ デバ イ ス ではフ ラ ッ シ ュ の最後のセ ク タ ーが最小のセ ク タ ーであ り 、ボ ト ム ブー ト フ ラ ッ シ ュ デバ イ ス では最初のセ ク タ ーが最小のセ ク タ ーです。 ト ッ プ ブー ト かボ ト ム ブー ト かが判断で き た ら 、 フ ァ イ ルを コ ピー し 、 カ ス タ ム プ ロ グ ラ ム フ ロ ーを作成 し ます。 • ボ ト ム ブー ト フ ラ ッ シ ュ の場合は、 etc/flash_params.tcl フ ァ イ ルに次の行を追加 し ます。 set FLASH_BOOT_CONFIG BOTTOM_BOOT_FLASH • ト ッ プ ブー ト フ ラ ッ シ ュ の場合は、 次の行を追加 し ます。 set FLASH_BOOT_CONFIG TOP_BOOT_FLASH その後、 次の コ マ ン ド を使用 し て フ ラ ッ シ ュ プ ロ グ ラ ム を実行 し ます。 xmd -tcl flashwriter.tcl ブー ト ト ポ ロ ジに応 じ て、 セ ク タ ー マ ッ プが並べ替え ら れます。 AMD/富士通 コ マ ン ド セ ッ ト のデー タ ポー リ ン グ アルゴ リ ズム ADM/富士通 コ マ ン ド セ ッ ト をサポー ト する フ ラ ッ シ ュ デバ イ ス では、 プ ロ グ ラ ムお よ び消去に DQ7 デー タ ポー リ ン グ アルゴ リ ズ ムが使用 さ れます。 フ ラ ッ シ ュ デバ イ ス に よ っ ては、デー タ ポー リ ン グ DQ7 ビ ッ ト の動作を制御する のに コ ン フ ィ ギ ュ レーシ ョ ン レ ジ ス タ が使用 さ れます。 コ ン フ ィ ギ ュ レーシ ョ ン レ ジ ス タ 機能のあ る フ ラ ッ シ ュ デバ イ ス と し ては、 AT49BV322A(T)、 AT49BV162A(T)、 AT49BV163A(T) な ど があ り ます。 DQ7 は消去中は 0 を出力 し 、 消去が終了 し た ら 1 を出力す る よ う 規定 さ れてい ます。 ま た、 プ ロ グ ラ ム中は反転 し た デー タ を出力 し 、 プ ロ グ ラ ムが終了 し た ら 実際のデー タ を出力す る 必要があ り ます。 フ ラ ッ シ ュ デバ イ ス の コ ン フ ィ ギ ュ レーシ ョ ンが [Program Flash Memory] ダ イ ア ロ グ ボ ッ ク ス で指定 し た も の と 異な る 場合は、 プ ロ グ ラ ム でエ ラ ー が発生す る 可能性があ り ます。 消去お よ び終了時に DQ7 が正 し い値を出力す る よ う 、 コ ン フ ィ ギ ュ レーシ ョ ン を リ セ ッ ト す る 方法は、 フ ラ ッ シ ュ デバ イ ス のデー タ シー ト を参照 し て く だ さ い。 エンベデ ッ ド システム ツール リ フ ァ レ ンス マニ ュ アル japan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 87 付録 A GNU ユーテ ィ リ テ ィ こ の付録では、 Vivado® Design Suite で使用可能な GNU ユーテ ィ リ テ ィ について説明 し ます。 MicroBlaze プ ロ セ ッ サ用の汎用ユーテ ィ リ テ ィ cpp C お よ び C++ コ ー ド の プ リ プ ロ セ ッ サ。 プ リ プ ロ セ ッ サ は GCC (GNU コ ン パ イ ラ ) に よ り 自動的 に 実行 さ れ、 file-include、 define な ど の指示子を イ ンプ リ メ ン ト し ます。 gcov GCC と 共に使用 し 、 ユーザー プ ロ グ ラ ムのテ ス ト 範囲のプ ロ フ ァ イ ル作成お よ び解析を実行 し ます。 gprof プ ロ フ ァ イ ル作成プ ロ グ ラ ムで も 使用で き ます。 注記 : gcov は IP イ ン テ グ レー タ ーま たは SDK ではサポー ト さ れてい ませんが、 カ ス タ ム テ ス ト フ ロ ーを実行す る 必要があ る ケース用に提供 さ れてい ます。 MicroBlaze プ ロ セ ッ サ用ユーテ ィ リ テ ィ MicroBlaze™ 用ユーテ ィ リ テ ィ には接頭辞 mb が付いていお り 、 次の も のがあ り ます。 mb‐addr2line 実行フ ァ イ ルのデバ ッ グ情報を使用 し て、 プ ロ グ ラ ム ア ド レ ス を対応す る 行番号 と フ ァ イ ル名に変換す る プ ロ グ ラ ム。 mb‐ar アーカ イ ブか ら フ ァ イ ルを作成、 変更、 お よ び抽出する プ ロ グ ラ ム。 アーカ イ ブは、 通常 ラ イ ブ ラ リ のオブジ ェ ク ト フ ァ イ ルな ど の複数の フ ァ イ ルを含むフ ァ イ ルです。 mb‐as アセ ンブ ラ プ ロ グ ラ ム。 エ ンベデ ッ ド シ ス テム ツール リ フ ァ レ ン ス マニ ュ アルjapan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 88 付録 A : GNU ユーテ ィ リ テ ィ mb‐c++ mb-gcc と 同 じ ク ロ ス コ ンパ イ ラ で、 プ ロ グ ラ ム言語が C++ に設定 さ れてい る 場合に実行 さ れます。mb-g++ と 同 じ で す。 mb‐c++filt アセ ンブ リ リ ス ト の C++ お よ び Java 関数名をデマ ン グルする プ ロ グ ラ ム。 mb‐g++ mb-gcc と 同 じ ク ロ ス コ ンパ イ ラ で、 プ ロ グ ラ ム言語が C++ に設定 さ れてい る 場合に実行 さ れます。 mb-c++ と 同 じ で す。 mb‐gasp アセ ンブ ラ プ ロ グ ラ ムのマ ク ロ プ リ プ ロ セ ッ サ。 mb‐gcc C お よ び C++ プ ロ グ ラ ムの ク ロ ス コ ンパ イ ラ 。 フ ァ イ ル拡張子か ら 、 使用 さ れてい る プ ロ グ ラ ム言語を自動的に認 識 し ます。 mb‐gdb プ ロ グ ラ ムのデバ ッ ガー。 mb‐gprof プ ロ グ ラ ムの各部分に どれだけの時間がかか る かを解析す る プ ロ フ ァ イ ル生成プ ロ グ ラ ム。 ラ ン タ イ ム を最適化す る のに有益です。 mb‐ld リ ン カー プ ロ グ ラ ム。 ラ イ ブ ラ リ フ ァ イ ル と オブジ ェ ク ト フ ァ イ ルを結合 し 、 必要な リ ロ ケーシ ョ ン を実行 し て、 実行フ ァ イ ルを生成 し ます。 mb‐nm オブジ ェ ク ト フ ァ イ ルのシ ン ボルを リ ス ト する プ ロ グ ラ ム。 mb‐objcopy オブジ ェ ク ト フ ァ イ ルの内容を あ る フ ォーマ ッ ト か ら 別の フ ォーマ ッ ト に変換する プ ロ グ ラ ム。 エ ンベデ ッ ド シ ス テム ツール リ フ ァ レ ン ス マニ ュ アルjapan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 89 付録 A : GNU ユーテ ィ リ テ ィ mb‐objdump オブジ ェ ク ト フ ァ イ ルの情報を表示す る プ ロ グ ラ ム。 プ ロ グ ラ ム のデバ ッ グにおいて有益で、 正 し い コ ー ド お よ び デー タ が正 し い メ モ リ ロ ケーシ ョ ンにあ る か ど う か を検証する のに使用 さ れます。 mb‐ranlib アーカ イ ブ フ ァ イ ルの イ ンデ ッ ク ス を作成 し 、 アーカ イ ブ フ ァ イ ルに追加す る プ ロ グ ラ ム。 アーカ イ ブで示 さ れ る ラ イ ブ ラ リ への リ ン ク プ ロ セ ス を高速化で き ます。 mb‐readelf ELF (Executable Linked Format) フ ァ イ ルの情報を表示する プ ロ グ ラ ム。 mb‐size オブジ ェ ク ト フ ァ イ ルの各セ ク シ ョ ン のサ イ ズ を リ ス ト す る プ ロ グ ラ ム。 コ ー ド お よ びデー タ の ス タ テ ィ ッ ク メ モ リ 要件を判断す る のに便利です。 mb‐strings バ イ ナ リ フ ァ イ ルの内容を判断す る のに便利なプ ロ グ ラ ム。 オブジ ェ ク ト フ ァ イ ルに含ま れ る 表示可能な文字列を リ ス ト し ます。 mb‐strip オブジ ェ ク ト フ ァ イ ルか ら シ ン ボルを削除す る プ ロ グ ラ ム。 フ ァ イ ル サ イ ズ を削減 し 、 フ ァ イ ル内のシ ン ボル情報 が見 ら れない よ う にす る ために使用 し ます。 その他のプ ログ ラ ムおよび フ ァ イル 次の Tcl お よ び Tk シ ェ ルは、 さ ま ざ ま な フ ロ ン ト エン ド プ ロ グ ラ ムか ら 起動 さ れます。 • cygitclsh30 • cygitkwish30 • cygtclsh80 • cygwish80 • tix4180 エ ンベデ ッ ド シ ス テム ツール リ フ ァ レ ン ス マニ ュ アルjapan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 90 付録 A : GNU ユーテ ィ リ テ ィ エ ンベデ ッ ド シ ス テム ツール リ フ ァ レ ン ス マニ ュ アルjapan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 91 付録 B その他の リ ソ ースおよび法的通知 ザイ リ ン ク ス リ ソ ース ア ンサー、 資料、 ダ ウ ン ロ ー ド 、 フ ォー ラ ム な ど のサポー ト リ ソ ース は、 次のザ イ リ ン ク ス サポー ト サ イ ト を参照 し て く だ さ い。 ソ リ ュ ーシ ョ ン セ ン タ ー デバ イ ス、 ツール、 IP のサポー ト については、 ザ イ リ ン ク ス ソ リ ュ ーシ ョ ン セ ン タ ーを参照 し て く だ さ い。 ト ピ ッ ク には、 デザ イ ン ア シ ス タ ン ト 、 ア ド バ イ ザ リ 、 ト ラ ブルシ ュ ー ト ヒ ン ト な ど が含まれます。 リ フ ァ レンス こ のガ イ ド では、 次の Vivado® Design Suite ガ イ ド が参照 さ れてい ます。 1. 『 ソ フ ト ウ ェ ア開発キ ッ ト (SDK) ヘルプ』 (UG782) 2. 『Zynq-7000 All Programmable SoC テ ク ニ カル リ フ ァ レ ン ス マニ ュ アル』 (UG585) (UG585) 3. 『MicroBlaze プ ロ セ ッ サ ユーザー ガ イ ド 』 (UG081) その他のザイ リ ン ク ス資料 • Vivado Design Suite User Guide: Embedded Hardware Design (UG898) • Vivado Design Suite Tutorial: Embedded Hardware Design (UG940) • 『Platform Specification Format Reference Manual』 (UG1044) • Zynq-7000 All Programmable SoC Software Developers Guide (UG821) その他の リ ソ ース • GNU の ウ ェ ブ サ イ ト : http://www.gnu.org • Red Hat Insight の ウ ェ ブ サ イ ト : http://sources.redhat.com/insight. エ ンベデ ッ ド シ ス テム ツール リ フ ァ レ ン ス マニ ュ アルjapan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 92 Appendix B: その他の リ ソ ースおよび法的通知 重要な法的通知 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 Xilinx’s limited warranty, please refer to Xilinx’s Terms of Sale which can be viewed at http://www.xilinx.com/legal.htm#tos; 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 such critical applications, please refer to Xilinx’s Terms of Sale which can be viewed at http://www.xilinx.com/legal.htm#tos. © Copyright 2014 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.All other trademarks are the property of their respective owners. こ の資料に関す る フ ィ ー ド バ ッ ク お よ び リ ン ク な ど の問題につ き ま し ては、 [email protected] ま で、 ま たは各ページの 右下にあ る [フ ィ ー ド バ ッ ク 送信] ボ タ ン を ク リ ッ ク す る と 表示 さ れ る フ ォ ーム か ら お知 ら せ く だ さ い。 フ ィ ー ド バ ッ ク は日本語で 入力可能です。 いただ き ま し た ご意見を参考に早急に対応 さ せていただ き ます。 なお、 こ の メ ール ア ド レ スへのお問い合わせは受 け付けてお り ません。 あ ら か じ めご了承 く だ さ い。 エ ンベデ ッ ド シ ス テム ツール リ フ ァ レ ン ス マニ ュ アルjapan.xilinx.com UG1043 (v2014.1) 2014 年 5 月 15 日 93
© Copyright 2024 ExpyDoc