MicroBlaze プ ロ セ ッ サ リ フ ァ レンス ガイ ド UG984(v2015.1) (v2015.2) (v2015.3) 2015 615月 24 UG984 2015 年 4年 月9 日 30 日 本資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資 料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情 報につきましては、必ず最新英語版をご参照ください。 改訂履歴 次の表に、 こ の文書の改訂履歴を示 し ます。 2015/06/24 2015/09/30 : Vivado Design Suite 2015.2 リリース。内容の変更なし。 2015.3 日付 バージ ョ ン 改訂内容 2013/03/20 2013.1 初版。 UG081 を元に記述 2013/06/19 2013.2 Vivado 2013.2 リ リ ース用に更新 2013/10/02 2013.3 Vivado 2013.3 リ リ ース用に更新 2013/12/18 2013.4 Vivado 2013.4 リ リ ース用に更新 2014/04/02 2014.1 Vivado 2014.1 リ リ ース用に更新 • • • • • • • 2014/10/01 2014.3 Vivado 2014.3 リ リ ース用に更新 • • • 2015/04/15 2015.1 PVR の MicroBlaze リ リ ース バージ ョ ン コ ー ド に v9.3 を追加 ス タ ッ ク 保護レ ジ ス タ の使用 と 動作について明記 LMB 命令お よ びデー タ バ ス例外の説明を訂正 v9.3 の新機能であ る 拡張デバ ッ グ機能の説明を含め る (パフ ォ ーマ ン ス 監視、 プ ロ グ ラ ム ト レース、 非侵入型プ ロ フ ァ イ リ ン グ) v9.3 の新機能であ る リ セ ッ ト モー ド 信号の定義を含め る AXI4-Stream TLAST 信号の処理方法を明記 UltraScale を追加、 2014.1 用にパフ ォーマ ン スお よ び リ ソ ース使用率を ア ッ プデー ト 表 2-1 の PCMPEQ お よ び PCMPNE の説明を訂正 PVR の MicroBlaze リ リ ース バージ ョ ン コ ー ド に v9.4 を追加 v9.4 の新機能であ る 外部プ ロ グ ラ ム ト レース の説明を含め る Vivado 2015.1 リ リ ース用に更新 • • • • • • • • • • v9.5 の新機能であ る 16 ワ ー ド キ ャ ッ シ ュ の説明を含め る PVR の MicroBlaze リ リ ース バージ ョ ン コ ー ド に v9.5 を追加 サポー ト さ れ る デンデ ィ ア ンお よ びパ ラ メ ー タ ー C_ENDIANNESS の説明を訂正 命令お よ びデー タ キ ャ ッ シ ュ の未処理読み出 し の説明を訂正 FPGA コ ン フ ィ ギ ュ レーシ ョ ン メ モ リ 保護についての参照 [参照 10] を ア ッ プデー ト 表 3-12 の ロ ッ ク ス テ ッ プ比較のバ ス イ ンデ ッ ク ス範囲の定期を訂正 IDIV 命令で変更 さ れ る レ ジ ス タ を明記 MFS 命令の PVR アセ ンブ ラ ニーモニ ッ ク を訂正 2015.1 用にパフ ォ ーマ ン スお よ び リ ソ ース使用率を ア ッ プデー ト ト レーニ ン グ リ ソ ース に参考資料を追加 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド (UG081) UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 2 目次 第 1 章 : 概要 内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 第 2 章 : MicroBlaze アーキテ ク チ ャ 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 デー タ タ イ プ と エンデ ィ ア ン設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 レ ジ ス タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 パ イ プ ラ イ ン アーキ テ ク チ ャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 メ モ リ アーキ テ ク チ ャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 特権命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 仮想 メ モ リ 管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 リ セ ッ ト 、 割 り 込み、 例外、 お よ びブ レー ク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 命令キ ャ ッ シ ュ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 デー タ キ ャ ッ シ ュ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 浮動小数点ユニ ッ ト (FPU) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 ス ト リ ーム リ ン ク イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 デバ ッ グお よ び ト レース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 フ ォール ト ト レ ラ ン ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 ロ ッ ク ス テ ッ プ操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 コ ヒ ーレ ン シ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MicroBlaze の I/O 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . AXI4 お よ び ACE イ ン タ ーフ ェ イ ス について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ロ ーカル メ モ リ バス (LMB) イ ン タ ーフ ェ イ ス について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ロ ッ ク ス テ ッ プ イ ン タ ーフ ェ イ ス について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . デバ ッ グ イ ン タ ーフ ェ イ ス について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ト レース イ ン タ ーフ ェ イ ス について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MicroBlaze コ アの コ ン フ ィ ギ ュ レーシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 103 112 116 124 129 131 134 第 4 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス デー タ 型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . レ ジ ス タ の使用規則 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ス タ ッ ク 規則 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . メ モ リ モデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 割 り 込み、 ブ レー ク 、 例外処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 144 146 148 149 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 記号の説明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 3 フ ォーマ ッ ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 付録 A : パフ ォ ーマ ン スおよび リ ソ ース使用率 パフ ォーマ ン ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 リ ソ ース使用量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 付録 B : その他の リ ソ ースおよび法的通知 ザ イ リ ン ク ス リ ソ ース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ソ リ ュ ーシ ョ ン セ ン タ ー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 参考資料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ト レーニ ン グ リ ソ ース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . お読み く だ さ い : 重要な法的通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 257 257 257 258 259 4 第 1 章 概要 本書は、 Vivado リ リ ース に含まれ る 32 ビ ッ ト の ソ フ ト プ ロ セ ッ サ、 MicroBlaze™ に関す る 資料で、 MicroBlaze ハー ド ウ ェ ア アーキ テ ク チ ャ の リ フ ァ レ ン ス ガ イ ド です。 内容 こ のガ イ ド は、 次の各章で構成 さ れてい ます。 • 第 2 章 「MicroBlaze アーキ テ ク チ ャ 」 では、 MicroBlaze の機能の概要をは じ め、 ビ ッ グ エンデ ィ ア ンお よ び リ ト ル エンデ ィ ア ンのビ ッ ト 反転フ ォーマ ッ ト 、 32 ビ ッ ト の汎用レ ジ ス タ 、 キ ャ ッ シ ュ ソ フ ト ウ ェ ア サポー ト 、 お よ び高速シ ンプ レ ッ ク ス リ ン ク イ ン タ ーフ ェ イ ス な ど の機能 も 説明 し ます。 • 第 3 章 「MicroBlaze 信号 イ ン タ ーフ ェ イ ス の説明」 では、 MicroBlaze を接続す る ために使用可能な信号 イ ン タ ー フ ェ イ ス の種類を説明 し ます。 • 第 4 章 「MicroBlaze アプ リ ケーシ ョ ン バ イ ナ リ イ ン タ ーフ ェ イ ス」 では、 MicroBlaze 用にアセ ンブ リ 言語で ソ フ ト ウ ェ ア を開発す る のに重要な、 アプ リ ケーシ ョ ン バ イ ナ リ イ ン タ ーフ ェ イ ス を説明 し ます。 • 第 5 章 「MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 」 では、 MicroBlaze の命令セ ッ ト アーキ テ ク チ ャ のシ ン ボル、 フ ォーマ ッ ト 、 お よ び命令について説明 し ます。 • 付録 A 「パフ ォーマ ン スお よ び リ ソ ース使用率」 では、 各 コ ン フ ィ ギ ュ レーシ ョ ンの最大周波数お よ び リ ソ ース 使用率を説明 し ます。 • 付録 B 「その他の リ ソ ースお よ び法的通知」 には、 さ ま ざ ま な資料お よ びその他の リ ソ ースへの リ ン ク があ り ま す。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 5 第 2 章 MicroBlaze アーキテ ク チ ャ こ の章では、MicroBlaze™ の機能の概要 と 、ビ ッ グ エンデ ィ ア ン ま たは リ ト ル エンデ ィ ア ンのビ ッ ト 反転フ ォーマ ッ ト 、 32 ビ ッ ト 汎用レ ジ ス タ 、 仮想 メ モ リ 管理、 キ ャ ッ シ ュ ソ フ ト ウ ェ ア サポー ト 、 AXI4-Stream イ ン タ ーフ ェ イ ス な ど、 こ のアーキ テ ク チ ャ の詳細について説明 し ます。 概要 MicroBlaze™ エンベデ ッ ド プ ロ セ ッ サは、 ザ イ リ ン ク ス フ ィ ール ド プ ロ グ ラ マブル ゲー ト ア レ イ (FPGA) の イ ンプ リ メ ン テーシ ョ ン用に最適化 さ れた RISC (Reduced Instruction Set Computer) コ アです。図 2-1 は、MicroBlaze コ アの機 能ブ ロ ッ ク デザ イ ンです。 命令側 バス イ ン タ ー フ ェ イ ス デー タ 側 バス イ ン タ ー フ ェ イ ス メ モ リ 管理ユニ ッ ト (MMU) M_AXI_IC M_ACE_IC ITLB UTLB 特殊 用途 レジス タ 分岐 タ ーゲ ッ ト キャ ッ シュ M_AXI_IP ILMB M_ACE_DC シフ ト バレル シ フ ト 乗算器 M_AXI_DP 除算器 FPU バス IF D キャ ッ シュ I キャ ッ シュ ALU プ ログラム カウン タ ー M_AXI_DC DTLB バス IF 命令 バッ フ ァー DLMB 命令 デコード レ ジ ス タ フ ァ イル 32 X 32b M0_AXIS.. M15_AXIS S0_AXIS.. S15_AXIS オプ シ ョ ンの MicroBlaze 機能 図 2‐1 : MicroBlaze コ アのブ ロ ッ ク図 機能 MicroBlaze ソ フ ト コ ア プ ロ セ ッ サは細か く コ ン フ ィ ギ ュ レーシ ョ ン を設定で き る ため、 デザ イ ンに必要な特定の機 能セ ッ ト を選択で き ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 6 第 2 章 : MicroBlaze アーキテ ク チ ャ プ ロ セ ッ サの固定機能セ ッ ト には、 次の よ う な も のがあ り ます。 • 32 個の 32 ビ ッ ト 汎用レ ジ ス タ • オペ ラ ン ド 3 つ と ア ド レ ス指定モー ド 2 つを含む 32 ビ ッ ト 命令ワ ー ド • 32 ビ ッ ト のア ド レ ス バス • 単一発行のパ イ プ ラ イ ン こ れ ら の固定機能のほか、 MicroBlaze プ ロ セ ッ サには追加機能を選択 し て有効にで き る パ ラ メ ー タ ー値があ り ます。 古いバージ ョ ン (サポー ト さ れな く な っ た も の) の MicroBlaze の場合は、 本書で説明す る オプシ ョ ン の機能の一部だ けがサポー ト さ れます。 最新バージ ョ ンの MicroBlaze (v9.5) では、 すべてのオプシ ョ ンがサポー ト さ れます。 新 し いデザ イ ンには最新バージ ョ ンの MicroBlaze を使用す る よ う に し て く だ さ い。 7 ページの表 2-1には、 MicroBlaze のバージ ョ ン別に、 コ ン フ ィ ギ ュ レーシ ョ ン可能な機能が ま と め ら れてい ます。 表 2‐1 : コ ン フ ィ ギ ュ レーシ ョ ン可能な機能 (MicroBlaze バージ ョ ン別) MicroBlaze バージ ョ ン 機能 v9.0 v9.1 v9.2 v9.3 v9.4 v9.5 サポー ト 終了 サポー ト 終了 サポー ト 終了 サポー ト 終了 サポー ト 終了 推奨 3/5 3/5 3/5 3/5 3/5 3/5 ロ ーカル メ モ リ バ ス (LMB) デー タ 側 イ ン タ ーフ ェ イ ス オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ロ ーカル メ モ リ バ ス (LMB) 命令側 イ ン タ ーフ ェ イ ス オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ハー ド ウ ェ ア バレル シ フ タ ー オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ハー ド ウ ェ ア除算器 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ハー ド ウ ェ アのデバ ッ グ ロ ジ ッ ク オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン 0-15 AXI 0-15 AXI 0-15 AXI 0-15 AXI 0-15 AXI 0-15 AXI オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン 4、 8 4、 8 4、 8 4、 8 4、 8 4、 8、 16 ハー ド ウ ェ ア例外サポー ト オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン パ タ ーン比較命令 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン 浮動小数点ユニ ッ ト (FPU) オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ハー ド ウ ェ ア乗算器のデ ィ ス エーブル1 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ○ ○ ○ ○ ○ ○ プ ロ セ ッ サ バージ ョ ン レ ジ ス タ (PVR) オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン エ リ ア ま たは ス ピー ド の最適化 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ハー ド ウ ェ ア乗算器 64 ビ ッ ト 結果 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン LUT キ ャ ッ シ ュ メ モ リ オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン 浮動小数点変換お よ び平方根命令 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン メ モ リ 管理ユニ ッ ト (MMU) オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン 拡張ス ト リ ーム命令 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン すべての I キ ャ ッ シ ュ メ モ リ ア ク セ ス に キ ャ ッ シ ュ イ ン タ ーフ ェ イ ス を使用 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン すべて の D キ ャ ッ シ ュ メ モ リ ア ク セ ス にキ ャ ッ シ ュ イ ン タ ーフ ェ イ ス を使用 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン バージ ョ ン ス テー タ ス プ ロ セ ッ サのパ イ プ ラ イ ンの深 さ ス ト リ ーム リ ン ク イ ン タ ーフ ェ イ ス マシン ステータ ス セ ッ ト およびク リ ア命令 キ ャ ッ シ ュ ラ イ ン ワー ド 長 ハー ド ウ ェ ア デバ ッ グの読み出 し 可能な ESR お よ び EAR MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 7 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐1 : コ ン フ ィ ギ ュ レーシ ョ ン可能な機能 (MicroBlaze バージ ョ ン別) MicroBlaze バージ ョ ン 機能 v9.0 v9.1 v9.2 v9.3 v9.4 v9.5 D キ ャ ッ シュのラ イ ト バッ ク キャ ッ シュ ポ リ シーを使用 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン 分岐先キ ャ ッ シ ュ (BTC) オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン I キ ャ ッ シ ュ 用ス ト リ ーム オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン I キ ャ ッ シ ュ 用ビ ク テ ィ ム処理 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン D キ ャ ッ シ ュ 用ビ ク テ ィ ム処理 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン AXI4 (M_AXI_DP) デー タ 側 イ ン タ ーフ ェ イス オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン AXI4 (M_AXI_IP) 命令側イ ン ターフ ェ イ ス オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン D キ ャ ッ シ ュ 用 AXI4 (M_AXI_DC) プ ロ ト コル オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン I キ ャ ッ シ ュ 用 AXI4 (M_AXI_IC) プ ロ ト コル オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ス ト リ ーム ア ク セ ス用 AXI4 プ ロ ト コ ル オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン フ ォ ール ト ト レ ラ ン ス オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン キ ャ ッ シ ュ タ グ用に分散 RAM を使用 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン コ ン フ ィ ギ ャ ラ ブル キ ャ ッ シ ュ デー タ 幅 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン 前ゼ ロ のカ ウ ン ト 命令 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ○ ○ ○ ○ ○ ○ ス タ ッ ク オーバーフ ロ ーお よ びア ン ダー フ ロ ーの検出 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ユーザー モー ド の ス ト リ ーム命令 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ロ ッ ク ス テ ッ プ サポー ト オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン FPGA プ リ ミ テ ィ ブの コ ン フ ィ ギ ュ レ ー シ ョ ン設定 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン 低レ イ テ ン シ割 り 込みモー ド オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ス ワ ッ プ命令 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ○ ○ ○ ○ ○ ○ 配置換え可能なベース ベ ク タ ー オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン D キ ャ ッ シ ュ 用 ACE (M_ACE_DC) プ ロ ト コル オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン I キ ャ ッ シ ュ 用 ACE (M_ACE_IC) プ ロ ト コル オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン 拡張デバ ッ グ : パフ ォ ーマ ン ス監視、プ ロ グ ラ ム ト レース、 非侵入型プ ロ フ ァ イ リ ング オプシ ョ ン オプシ ョ ン オプシ ョ ン リ セ ッ ト モー ド : ス リ ープに入 る 、 ま た は リ セ ッ ト でデバ ッ グ停止 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン メ モ リ バ リ ア命令 ス リ ープ モー ド お よ びス リ ープ命令 拡張デバ ッ グ : 外部プ ロ グ ラ ム ト レース 1. DSP48E プ リ ミ テ ィ ブを節約す る ために使用 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 8 第 2 章 : MicroBlaze アーキテ ク チ ャ デー タ タ イ プ と エ ンデ ィ ア ン設定 MicroBlaze では、 設定に よ り 、 デー タ 表現に ビ ッ グ エ ンデ ィ ア ン ま たは リ ト ル エ ンデ ィ ア ン が使用 さ れ ます。 パ ラ メ ー タ ー C_ENDIANNESS は 1 ( リ ト ル エンデ ィ ア ン) に固定 さ れてい ます。 MicroBlaze の場合、 ハー ド ウ ェ ア サポー ト さ れてい る デー タ タ イ プは、 ワー ド 、 ハーフ ワー ド 、 お よ びバ イ ト です。 反転 ロ ー ド お よ び反転 ス ト ア命令の LHUR、 LWR、 SHR、 SWR を使用す る と 、 表のバ イ ト 反転順序に示す よ う に、 デー タ 内のバ イ ト が反転 さ れます。 各デー タ タ イ プのビ ッ ト お よ びバ イ ト 構成は次の表に ま と め ら れてい ます。 表 2‐2 : ワー ド デー タ タ イ プ ビ ッ グ エンデ ィ ア ン バ イ ト ア ド レ ス n n+1 n+2 n+3 ビ ッ グ エンデ ィ ア ン上位/下位バ イ ト 最上位バ イ ト ビ ッ グ エンデ ィ ア ン バ イ ト 順序 n n+1 n+2 n+3 ビ ッ グ エンデ ィ ア ン バ イ ト 反転順序 n+3 n+2 n+1 n リ ト ル エンデ ィ ア ン バ イ ト ア ド レ ス n+3 n+2 n+1 n リ ト ル エンデ ィ ア ン上位/下位バ イ ト 最上位バ イ ト リ ト ル エンデ ィ ア ン バ イ ト 順序 n+3 n+2 n+1 n リ ト ル エンデ ィ ア ン バ イ ト 反転順序 n n+1 n+2 n+3 ビ ッ ト ラ ベル 0 31 上位ビ ッ ト /下位ビ ッ ト 最上位ビ ッ ト 最下位ビ ッ ト 最下位バ イ ト 最下位バ イ ト 表 2‐3 : ハー フ ワー ド デー タ タ イ プ ビ ッ グ エンデ ィ ア ン バ イ ト ア ド レ ス n n+1 ビ ッ グ エンデ ィ ア ン上位/下位バ イ ト 最上位バ イ ト 最下位バ イ ト ビ ッ グ エンデ ィ ア ン バ イ ト 順序 n n+1 ビ ッ グ エンデ ィ ア ン バ イ ト 反転順序 n+1 n リ ト ル エンデ ィ ア ン バ イ ト ア ド レ ス n+1 n リ ト ル エンデ ィ ア ン上位/下位バ イ ト 最上位バ イ ト 最下位バ イ ト リ ト ル エンデ ィ ア ン バ イ ト 順序 n+1 n リ ト ル エンデ ィ ア ン バ イ ト 反転順序 n n+1 ビ ッ ト ラ ベル 0 15 上位ビ ッ ト /下位ビ ッ ト 最上位ビ ッ ト 最下位ビ ッ ト 表 2‐4 : バイ ト デー タ タ イ プ バイ ト ア ド レ ス n ビ ッ ト ラ ベル 0 7 上位ビ ッ ト /下位ビ ッ ト 最上位ビ ッ ト 最下位ビ ッ ト MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 9 第 2 章 : MicroBlaze アーキテ ク チ ャ 命令 命令のま と め MicroBlaze 命令はすべて 32 ビ ッ ト で、 タ イ プ A ま たは タ イ プ B と し て定義 さ れてい ます。 タ イ プ A 命令には、 ソ ー ス レ ジ ス タ オペ ラ ン ド が最高で 2 つ、 ソ ース レ ジ ス タ オペ ラ ン ド が 1 つあ り ます。 タ イ プ B 命令には 1 つの ソ ース レ ジ ス タ お よ び 16 ビ ッ ト の即値オペ ラ ン ド があ り ます (即値命令で タ イ プ B 命令を先行 さ せて、32ビ ッ ト に拡張可能 )。 タ イ プ B 命令にはシ ン グル デス テ ィ ネーシ ョ ン レ ジ ス タ オペ ラ ン ド が 1 つあ り ます。 命令には、 演算、 論理、 分 岐、 ロ ー ド / ス ト ア、 お よ び特殊、 と い う カ テ ゴ リ があ り ます。 表 2-6 には MicroBlaze 命令セ ッ ト が リ ス ト さ れてい ます。 こ れ ら の命令の詳細については、 第 5 章 「MicroBlaze 命令セ ッ ト アーキ テ ク チ ャ 」 を参照 し て く だ さ い。 表 2-5 には、 各命令のセマ ン テ ィ ク ス で使用 さ れ る 命令セ ッ ト 用語が説明 さ れてい ます。 表 2‐5 : 命令セ ッ ト の用語 シ ンボル 説明 Ra R0 - R31、 汎用レ ジ ス タ 、 ソ ース オペ ラ ン ド a Rb R0 - R31、 汎用レ ジ ス タ 、 ソ ース オペ ラ ン ド b Rd R0 - R31、 汎用レ ジ ス タ 、 デス テ ィ ネーシ ョ ン オペ ラ ン ド SPR[x] 特殊用途レ ジ ス タ 番号 x MSR マシ ン ス テー タ ス レ ジ ス タ = SPR[1] ESR 例外ス テー タ ス レ ジ ス タ = SPR[5] EAR 例外ア ド レ ス レ ジ ス タ = SPR[3] FSR 浮動小数点ユニ ッ ト ス テー タ ス レ ジ ス タ = SPR[7] PVRx プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 、 x はレ ジ ス タ番号 = SPR[8192 + x] BTR 分岐先レ ジ ス タ = SPR[11] PC 実行段 プ ロ グ ラ ム カ ウ ン タ ー = SPR[0] x[y] レ ジ ス タ x のビ ッ ト y x[y:z] レ ジ ス タ x のビ ッ ト 範囲 y か ら z x レ ジ ス タ x のビ ッ ト 反転値 Imm 16 ビ ッ ト の即値 Immx x ビ ッ ト の即値 FSLx 4 ビ ッ ト AXI4-Stream ポー ト の指定 (x はポー ト 番号) C キ ャ リ ーフ ラ グ、 MSR[29] Sa 特殊用途レ ジ ス タ 、 ソ ース オペ ラ ン ド Sd 特殊用途レ ジ ス タ 、 デス テ ィ ネーシ ョ ン オペ ラ ン ド s(x) 符号拡張引数x を 32ビ ッ ト 値にす る *Addr ロ ケーシ ョ ンAddr での メ モ リ 内容 (デー タ サ イ ズは揃っ てい る ) := 割 り 当て演算子 = 同等比較 != 不等比較 > 大な り MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 10 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐5 : 命令セ ッ ト の用語 (続き) シ ンボル 説明 >= それ以上 < 小な り <= それ以下 + 加算 * 乗算 / 除算 >> x x ビ ッ ト 右シ フ ト << x x ビ ッ ト 左シ フ ト and 論理 AND or 論理 OR xor 論理排他的 OR op1 if cond else op2 条件 cond が真な ら ば、 op1 を実行 し 、 それ以外は op2 を実行 & 連結。 た と えば、 「0000100 & Imm7」 は固定フ ィ ール ド 「0000100」 と 7 ビ ッ ト 即値の連結です。 signed 符号付 き の整数デー タ タ イ プで実行す る 演算。 すべての演算は、 指定がない限 り 、 符号付 き ワー ド オペ ラ ン ド で実行 さ れます。 unsigned 符号な し の整数デー タ タ イ プで実行す る 演算 float 浮動小数点のデー タ タ イ プで実行す る 演算 clz(r) 前ゼ ロ のカ ウ ン ト 表 2‐6 : MicroBlaze 命令セ ッ ト のま と め タ イ プ A 0‐5 6‐10 11‐15 タ イ プ B 0‐5 6‐10 11‐15 ADD Rd,Ra,Rb 000000 Rd Ra Rb 00000000000 Rd := Rb + Ra RSUB Rd,Ra,Rb 000001 Rd Ra Rb 00000000000 Rd := Rb + Ra + 1 ADDC Rd,Ra,Rb 000010 Rd Ra Rb 00000000000 Rd := Rb + Ra + C RSUBC Rd,Ra,Rb 000011 Rd Ra Rb 00000000000 Rd := Rb + Ra + C ADDK Rd,Ra,Rb 000100 Rd Ra Rb 00000000000 Rd := Rb + Ra RSUBK Rd,Ra,Rb 000101 Rd Ra Rb 00000000000 Rd := Rb + Ra + 1 CMP Rd,Ra,Rb 000101 Rd Ra Rb 00000000001 Rd := Rb + Ra + 1 Rd[0] := 0 if (Rb >= Ra) else Rd[0] := 1 CMPU Rd,Ra,Rb 000101 Rd Ra Rb 00000000011 Rd := Rb + Ra + 1 (unsigned) Rd[0] := 0 if (Rb >= Ra, unsigned) else Rd[0] := 1 ADDKC Rd,Ra,Rb 000110 Rd Ra Rb 00000000000 Rd := Rb + Ra + C RSUBKC Rd,Ra,Rb 000111 Rd Ra Rb 00000000000 Rd := Rb + Ra + C ADDI Rd,Ra,Imm 001000 Rd Ra Imm Rd := s(Imm) + Ra RSUBI Rd,Ra,Imm 001001 Rd Ra Imm Rd := s(Imm) + Ra + 1 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 16‐20 21‐31 セマ ン テ ィ ク ス 16‐31 japan.xilinx.com 11 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐6 : MicroBlaze 命令セ ッ ト のま と め (続き) タ イ プ A 0‐5 6‐10 11‐15 タ イ プ B 0‐5 6‐10 11‐15 16‐31 ADDIC Rd,Ra,Imm 001010 Rd Ra Imm Rd := s(Imm) + Ra + C RSUBIC Rd,Ra,Imm 001011 Rd Ra Imm Rd := s(Imm) + Ra + C ADDIK Rd,Ra,Imm 001100 Rd Ra Imm Rd := s(Imm) + Ra RSUBIK Rd,Ra,Imm 001101 Rd Ra Imm Rd := s(Imm) + Ra + 1 ADDIKC Rd,Ra,Imm 001110 Rd Ra Imm Rd := s(Imm) + Ra + C RSUBIKC Rd,Ra,Imm 001111 Rd Ra Imm Rd := s(Imm) + Ra + C MUL Rd,Ra,Rb 010000 Rd Ra Rb MULH Rd,Ra,Rb 010000 Rd Ra Rb 00000000001 Rd := (Ra * Rb) >> 32 (signed) MULHU Rd,Ra,Rb 010000 Rd Ra Rb 00000000011 Rd := (Ra * Rb) >> 32 (unsigned) MULHSU Rd,Ra,Rb 010000 Rd Ra Rb 00000000010 Rd := (Ra, signed * Rb, unsigned) >> 32 (signed) BSRL Rd,Ra,Rb 010001 Rd Ra Rb 00000000000 Rd := 0 & (Ra >> Rb) BSRA Rd,Ra,Rb 010001 Rd Ra Rb 01000000000 Rd := s(Ra >> Rb) BSLL Rd,Ra,Rb 010001 Rd Ra Rb 10000000000 Rd := (Ra << Rb) & 0 IDIV Rd,Ra,Rb 010010 Rd Ra Rb 00000000000 Rd := Rb/Ra IDIVU Rd,Ra,Rb 010010 Rd Ra Rb 00000000010 Rd := Rb/Ra, unsigned TNEAGETD Rd,Rb 010011 Rd 00000 Rb 0N0TAE 00000 Rd := FSL Rb[28:31] (data read) MSR[FSL] := 1 if (FSL_S_Control = 1) MSR[C] := not FSL_S_Exists if N = 1 TNAPUTD Ra,Rb 010011 00000 Ra Rb 0N0TA0 00000 FSL Rb[28:31] := Ra (data write) MSR[C] := FSL_M_Full if N = 1 TNECAGETD Rd,Rb 010011 Rd 00000 Rb 0N1TAE 00000 Rd := FSL Rb[28:31] (control read) MSR[FSL] := 1 if (FSL_S_Control = 0) MSR[C] := not FSL_S_Exists if N = 1 TNCAPUTD Ra,Rb 010011 00000 Ra Rb 0N1TA0 00000 FSL Rb[28:31] := Ra (control write) MSR[C] := FSL_M_Full if N = 1 FADD Rd,Ra,Rb 010110 Rd Ra Rb 00000000000 Rd := Rb+Ra, float1 FRSUB Rd,Ra,Rb 010110 Rd Ra Rb 00010000000 Rd := Rb-Ra, float1 FMUL Rd,Ra,Rb 010110 Rd Ra Rb 00100000000 Rd := Rb*Ra, float1 FDIV Rd,Ra,Rb 010110 Rd Ra Rb 00110000000 Rd := Rb/Ra, float1 FCMP.UN Rd,Ra,Rb 010110 Rd Ra Rb 01000000000 Rd := 1 if (Rb = NaN or Ra = NaN, float1) else Rd := 0 FCMP.LT Rd,Ra,Rb 010110 Rd Ra Rb 01000010000 Rd := 1 if (Rb < Ra, float1) else Rd := 0 FCMP.EQ Rd,Ra,Rb 010110 Rd Ra Rb 01000100000 Rd := 1 if (Rb = Ra, float1) else Rd := 0 FCMP.LE Rd,Ra,Rb 010110 Rd Ra Rb 01000110000 Rd := 1 if (Rb <= Ra, float1) else Rd := 0 FCMP.GT Rd,Ra,Rb 010110 Rd Ra Rb 01001000000 Rd := 1 if (Rb > Ra, float1) else Rd := 0 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 16‐20 21‐31 00000000000 japan.xilinx.com セマ ン テ ィ ク ス Rd := Ra * Rb 12 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐6 : MicroBlaze 命令セ ッ ト のま と め (続き) タ イ プ A 0‐5 6‐10 11‐15 タ イ プ B 0‐5 6‐10 11‐15 FCMP.NE Rd,Ra,Rb 010110 Rd Ra Rb 01001010000 Rd := 1 if (Rb != Ra, float1) else Rd := 0 FCMP.GE Rd,Ra,Rb 010110 Rd Ra Rb 01001100000 Rd := 1 if (Rb >= Ra, float1) else Rd := 0 FLT Rd,Ra 010110 Rd Ra 0 01010000000 Rd := float (Ra)1 FINT Rd,Ra 010110 Rd Ra 0 01100000000 Rd := int (Ra)1 FSQRT Rd,Ra 010110 Rd Ra 0 01110000000 Rd := sqrt (Ra)1 MULI Rd,Ra,Imm 011000 Rd Ra Imm BSRLI Rd,Ra,Imm 011001 Rd Ra 00000000000 & Imm5 Rd : = 0 & (Ra >> Imm5) BSRAI Rd,Ra,Imm 011001 Rd Ra 00000010000 & Imm5 Rd := s(Ra >> Imm5) BSLLI Rd,Ra,Imm 011001 Rd Ra 00000100000 & Imm5 Rd := (Ra << Imm5) & 0 TNEAGET Rd,FSLx 011011 Rd 00000 0N0TAE000000 & FSLx Rd := FSLx (data read, blocking if N = 0) MSR[FSL] := 1 if (FSLx_S_Control = 1) MSR[C] := not FSLx_S_Exists if N = 1 TNAPUT Ra,FSLx 011011 00000 Ra 1N0TA0000000 & FSLx FSLx := Ra (data write, blocking if N = 0) MSR[C] := FSLx_M_Full if N = 1 TNECAGET Rd,FSLx 011011 Rd 00000 0N1TAE000000 & FSLx Rd := FSLx (control read, blocking if N = 0) MSR[FSL] := 1 if (FSLx_S_Control = 0) MSR[C] := not FSLx_S_Exists if N = 1 TNCAPUT Ra,FSLx 011011 00000 Ra 1N1TA0000000 & FSLx FSLx := Ra (control write, blocking if N = 0) MSR[C] := FSLx_M_Full if N = 1 OR Rd,Ra,Rb 100000 Rd Ra Rb 00000000000 Rd := Ra or Rb PCMPBF Rd,Ra,Rb 100000 Rd Ra Rb 10000000000 Rd := 1 if (Rb[0:7] = Ra[0:7]) else Rd := 2 if (Rb[8:15] = Ra[8:15]) else Rd := 3 if (Rb[16:23] = Ra[16:23]) else Rd := 4 if (Rb[24:31] = Ra[24:31]) else Rd := 0 AND Rd,Ra,Rb 100001 Rd Ra Rb 00000000000 Rd := Ra and Rb XOR Rd,Ra,Rb 100010 Rd Ra Rb 00000000000 Rd := Ra xor Rb PCMPEQ Rd,Ra,Rb 100010 Rd Ra Rb 10000000000 Rd := 1 if (Rb = Ra) else Rd := 0 ANDN Rd,Ra,Rb 100011 Rd Ra Rb 00000000000 Rd := Ra and Rb PCMPNE Rd,Ra,Rb 100011 Rd Ra Rb 10000000000 Rd := 1 if (Rb != Ra) else Rd := 0 SRA Rd,Ra 100100 Rd Ra 0000000000000001 Rd := s(Ra >> 1) C := Ra[31] SRC Rd,Ra 100100 Rd Ra 0000000000100001 Rd := C & (Ra >> 1) C := Ra[31] SRL Rd,Ra 100100 Rd Ra 0000000001000001 Rd := 0 & (Ra >> 1) C := Ra[31] SEXT8 Rd,Ra 100100 Rd Ra 0000000001100000 Rd := s(Ra[24:31]) MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 16‐20 21‐31 セマ ン テ ィ ク ス 16‐31 japan.xilinx.com Rd := Ra * s(Imm) 13 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐6 : MicroBlaze 命令セ ッ ト のま と め (続き) タ イ プ A 0‐5 6‐10 11‐15 タ イ プ B 0‐5 6‐10 11‐15 16‐31 SEXT16 Rd,Ra 100100 Rd Ra 0000000001100001 Rd := s(Ra[16:31]) CLZ Rd, Ra 100100 Rd Ra 0000000011100000 Rd = clz(Ra) SWAPB Rd, Ra 100100 Rd Ra 0000000111100000 Rd = (Ra)[24:31, 16:23, 8:15, 0:7] SWAPH Rd, Ra 100100 Rd Ra 0000000111100010 Rd = (Ra)[16:31, 0:15] WIC Ra,Rb 100100 00000 Ra Rb 00001101000 ICache_Line[Ra >> 4].Tag := 0 if (C_ICACHE_LINE_LEN = 4) ICache_Line[Ra >> 5].Tag := 0 if (C_ICACHE_LINE_LEN = 8) ICache_Line[Ra >> 6].Tag := 0 if (C_ICACHE_LINE_LEN = 16) WDC Ra,Rb 100100 00000 Ra Rb 00001100100 キ ャ ッ シ ュ ラ イ ンは ク リ ア、 格納 さ れた デー タ を破棄。 DCache_Line[Ra >> 4].Tag := 0 if (C_DCACHE_LINE_LEN = 4) DCache_Line[Ra >> 5].Tag := 0 if (C_DCACHE_LINE_LEN = 8) DCache_Line[Ra >> 6].Tag := 0 if (C_DCACHE_LINE_LEN = 16) WDC.FLUSH Ra,Rb 100100 00000 Ra Rb 00001110100 キ ャ ッ シ ュ ラ イ ンはフ ラ ッ シ ュ 、 格納 さ れ たデー タ を メ モ リ に書き 込んでか ら 、 ク リ ア。 C_DCACHE_USE_WRITEBACK = 1 の と き 使用。 WDC.CLEAR Ra,Rb 100100 00000 Ra Rb 00001110110 一致 し た ア ド レ ス のキ ャ ッ シ ュ ラ イ ンは ク リ ア、 格 納 さ れ た デ ー タ を 破 棄。 C_DCACHE_USE_WRITEBACK = 1 の と き 使用。 MTS Sd,Ra 100101 00000 Ra MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 16‐20 21‐31 11 & Sd japan.xilinx.com セマ ン テ ィ ク ス SPR[Sd] := Ra · SPR[0x0001] は MSR · SPR[0x0007] は FSR · SPR[0x0800] は SLR · SPR[0x0802] は SHR · SPR[0x1000] は PID · SPR[0x1001] は ZPR · SPR[0x1002] は TLBX · SPR[0x1003] は TLBLO · SPR[0x1004] は TLBHI · SPR[0x1005] は TLBSX 14 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐6 : MicroBlaze 命令セ ッ ト のま と め (続き) タ イ プ A 0‐5 6‐10 11‐15 タ イ プ B 0‐5 6‐10 11‐15 16‐31 MFS Rd,Sa 100101 Rd 00000 10 & Sa MSRCLR Rd,Imm 100101 Rd 00001 00 & Imm14 Rd := MSR MSR := MSR and Imm14 MSRSET Rd,Imm 100101 Rd 00000 00 & Imm14 Rd := MSR MSR := MSR or Imm14 BR Rb 100110 00000 00000 Rb 00000000000 PC := PC + Rb BRD Rb 100110 00000 10000 Rb 00000000000 PC := PC + Rb BRLD Rd,Rb 100110 Rd 10100 Rb 00000000000 PC := PC + Rb Rd := PC BRA Rb 100110 00000 01000 Rb 00000000000 PC := Rb BRAD Rb 100110 00000 11000 Rb 00000000000 PC := Rb BRALD Rd,Rb 100110 Rd 11100 Rb 00000000000 PC := Rb Rd := PC BRK Rd,Rb 100110 Rd 01100 Rb 00000000000 PC := Rb Rd := PC MSR[BIP] := 1 BEQ Ra,Rb 100111 00000 Ra Rb 00000000000 PC := PC + Rb if Ra = 0 BNE Ra,Rb 100111 00001 Ra Rb 00000000000 PC := PC + Rb if Ra != 0 BLT Ra,Rb 100111 00010 Ra Rb 00000000000 PC := PC + Rb if Ra < 0 BLE Ra,Rb 100111 00011 Ra Rb 00000000000 PC := PC + Rb if Ra <= 0 BGT Ra,Rb 100111 00100 Ra Rb 00000000000 PC := PC + Rb if Ra > 0 BGE Ra,Rb 100111 00101 Ra Rb 00000000000 PC := PC + Rb if Ra >= 0 BEQD Ra,Rb 100111 10000 Ra Rb 00000000000 PC := PC + Rb if Ra = 0 BNED Ra,Rb 100111 10001 Ra Rb 00000000000 PC := PC + Rb if Ra != 0 BLTD Ra,Rb 100111 10010 Ra Rb 00000000000 PC := PC + Rb if Ra < 0 BLED Ra,Rb 100111 10011 Ra Rb 00000000000 PC := PC + Rb if Ra <= 0 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 16‐20 21‐31 japan.xilinx.com セマ ン テ ィ ク ス Rd := SPR[Sa] · SPR[0x0000] は PC · SPR[0x0001] は MSR · SPR[0x0003] は EAR · SPR[0x0005] は ESR · SPR[0x0007] は FSR · SPR[0x000B] は BTR · SPR[0x000D] は EDR · SPR[0x0800] は SLR · SPR[0x0802] は SHR · SPR[0x1000] は PID · SPR[0x1001] は ZPR · SPR[0x1002] は TLBX · SPR[0x1003] は TLBLO · SPR[0x1004] は TLBHI · SPR[0x2000 to 0x200B] は PVR[0 to 12] 15 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐6 : MicroBlaze 命令セ ッ ト のま と め (続き) タ イ プ A 0‐5 6‐10 11‐15 タ イ プ B 0‐5 6‐10 11‐15 BGTD Ra,Rb 100111 10100 Ra Rb 00000000000 PC := PC + Rb if Ra > 0 BGED Ra,Rb 100111 10101 Ra Rb 00000000000 PC := PC + Rb if Ra >= 0 ORI Rd,Ra,Imm 101000 Rd Ra Imm Rd := Ra or s(Imm) ANDI Rd,Ra,Imm 101001 Rd Ra Imm Rd := Ra and s(Imm) XORI Rd,Ra,Imm 101010 Rd Ra Imm Rd := Ra xor s(Imm) ANDNI Rd,Ra,Imm 101011 Rd Ra Imm Rd := Ra and s(Imm) IMM Imm 101100 00000 00000 Imm Imm[0:15] := Imm RTSD Ra,Imm 101101 10000 Ra Imm PC := Ra + s(Imm) RTID Ra,Imm 101101 10001 Ra Imm PC := Ra + s(Imm) MSR[IE] := 1 RTBD Ra,Imm 101101 10010 Ra Imm PC := Ra + s(Imm) MSR[BIP] := 0 RTED Ra,Imm 101101 10100 Ra Imm PC := Ra + s(Imm) MSR[EE] := 1, MSR[EIP] := 0 ESR := 0 BRI Imm 101110 00000 00000 Imm PC := PC + s(Imm) MBAR Imm 101110 Imm 00010 0000000000000100 BRID Imm 101110 00000 10000 Imm PC := PC + s(Imm) BRLID Rd,Imm 101110 Rd 10100 Imm PC := PC + s(Imm) Rd := PC BRAI Imm 101110 00000 01000 Imm PC := s(Imm) BRAID Imm 101110 00000 11000 Imm PC := s(Imm) BRALID Rd,Imm 101110 Rd 11100 Imm PC := s(Imm) Rd := PC BRKI Rd,Imm 101110 Rd 01100 Imm PC := s(Imm) Rd := PC MSR[BIP] := 1 BEQI Ra,Imm 101111 00000 Ra Imm PC := PC + s(Imm) if Ra = 0 BNEI Ra,Imm 101111 00001 Ra Imm PC := PC + s(Imm) if Ra != 0 BLTI Ra,Imm 101111 00010 Ra Imm PC := PC + s(Imm) if Ra < 0 BLEI Ra,Imm 101111 00011 Ra Imm PC := PC + s(Imm) if Ra <= 0 BGTI Ra,Imm 101111 00100 Ra Imm PC := PC + s(Imm) if Ra > 0 BGEI Ra,Imm 101111 00101 Ra Imm PC := PC + s(Imm) if Ra >= 0 BEQID Ra,Imm 101111 10000 Ra Imm PC := PC + s(Imm) if Ra = 0 BNEID Ra,Imm 101111 10001 Ra Imm PC := PC + s(Imm) if Ra != 0 BLTID Ra,Imm 101111 10010 Ra Imm PC := PC + s(Imm) if Ra < 0 BLEID Ra,Imm 101111 10011 Ra Imm PC := PC + s(Imm) if Ra <= 0 BGTID Ra,Imm 101111 10100 Ra Imm PC := PC + s(Imm) if Ra > 0 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 16‐20 21‐31 セマ ン テ ィ ク ス 16‐31 japan.xilinx.com PC := PC + 4、 メ モ リ ア ク セ ス を待機 16 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐6 : MicroBlaze 命令セ ッ ト のま と め (続き) タ イ プ A 0‐5 6‐10 11‐15 16‐20 21‐31 タ イ プ B 0‐5 6‐10 11‐15 16‐31 BGEID Ra,Imm 101111 10101 Ra Imm LBU Rd,Ra,Rb LBUR Rd,Ra,Rb 110000 Rd Ra Rb 00000000000 01000000000 Addr := Ra + Rb Rd[0:23] := 0 Rd[24:31] := *Addr[0:7] LHU Rd,Ra,Rb LHUR Rd,Ra,Rb 110001 Rd Ra Rb 00000000000 01000000000 Addr := Ra + Rb Rd[0:15] := 0 Rd[16:31] := *Addr[0:15] LW Rd,Ra,Rb LWR Rd,Ra,Rb 110010 Rd Ra Rb 00000000000 01000000000 Addr := Ra + Rb Rd := *Addr LWX Rd,Ra,Rb 110010 Rd Ra Rb 10000000000 Addr := Ra + Rb Rd := *Addr Reservation := 1 SB Rd,Ra,Rb SBR Rd,Ra,Rb 110100 Rd Ra Rb 00000000000 01000000000 Addr := Ra + Rb *Addr[0:8] := Rd[24:31] SH Rd,Ra,Rb SHR Rd,Ra,Rb 110101 Rd Ra Rb 00000000000 01000000000 Addr := Ra + Rb *Addr[0:16] := Rd[16:31] SW Rd,Ra,Rb SWR Rd,Ra,Rb 110110 Rd Ra Rb 00000000000 01000000000 Addr := Ra + Rb *Addr := Rd SWX Rd,Ra,Rb 110110 Rd Ra Rb 10000000000 Addr := Ra + Rb *Addr := Rd if Reservation = 1 Reservation := 0 LBUI Rd,Ra,Imm 111000 Rd Ra Imm Addr := Ra + s(Imm) Rd[0:23] := 0 Rd[24:31] := *Addr[0:7] LHUI Rd,Ra,Imm 111001 Rd Ra Imm Addr := Ra + s(Imm) Rd[0:15] := 0 Rd[16:31] := *Addr[0:15] LWI Rd,Ra,Imm 111010 Rd Ra Imm Addr := Ra + s(Imm) Rd := *Addr SBI Rd,Ra,Imm 111100 Rd Ra Imm Addr := Ra + s(Imm) *Addr[0:7] := Rd[24:31] SHI Rd,Ra,Imm 111101 Rd Ra Imm Addr := Ra + s(Imm) *Addr[0:15] := Rd[16:31] SWI Rd,Ra,Imm 111110 Rd Ra Imm Addr := Ra + s(Imm) *Addr := Rd セマ ン テ ィ ク ス PC := PC + s(Imm) if Ra >= 0 1. 浮動小数点演算には多 く の コ ーナー ケース が関与 し てい る ため、 標準動作のみを説明 し てい ます。 こ の動作の詳細については、 第 5 章 「MicroBlaze 命令セ ッ ト アーキ テ ク チ ャ 」 を参照 し て く だ さ い。 セマ フ ォ同期化 LWX お よ び SWX 命令は、 テ ス ト と セ ッ ト 、 比較 と ス ワ ッ プ、 メ モ リ 交換、 フ ェ ッ チ と 追加な ど、 共通セマ フ ォ操作 を イ ンプ リ メ ン ト す る ために使用 さ れます。 ま た、 ス ピ ン ロ ッ ク を イ ンプ リ メ ン ト す る のに も 使用 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 17 第 2 章 : MicroBlaze アーキテ ク チ ャ こ れ ら の命令は、 通常、 シ ス テ ム プ ロ グ ラ ム に よ っ て使用 さ れ、 適宜アプ リ ケーシ ョ ン プ ロ グ ラ ムに よ っ て呼び出 さ れます。 一般的には、 プ ロ グ ラ ムは、 メ モ リ か ら セマ フ ォ を ロ ー ド す る のに LWX を使用 し 、 予約が設定 さ れます (プ ロ セ ッ サは予約を内部で維持)。 プ ロ グ ラ ムは、 セマ フ ォ値に基づいて結果を計算 し 、 SWX 命令を使用 し て、 同 じ メ モ リ ロ ケーシ ョ ンにその結果を条件付き で ス ト ア し ます。 こ の条件付 き ス ト アは、 その前の LWX 命令に よ っ て設 定 さ れた予約に基づいて、 実行 さ れ ます。 ス ト ア実行時に予約が存在す る 場合は、 ス ト アが実行 さ れ、 MSR[C] は 0 に ク リ アにな り ます。 ス ト ア実行時に予約が存在 し ない場合は、 ス ト アが実行 さ れ、 MSR[C] は 1 にセ ッ ト さ れます。 ス ト アが問題な く 実行 さ れ る と 、 セマ フ ォ の ロ ー ド か ら セマ フ ォ の ス ト ア ま で、 順番に命令が、 ほかの命令を差 し 挟 む こ と な く 、 実行 さ れます。 ほかのデバ イ ス が、 読み出 し か ら ア ッ プデー ト ま でのセマ フ ォ ロ ケーシ ョ ン を変更す る こ と はあ り ま せん。 こ の操作中、 ほかのデバ イ ス は こ のセマ フ ォ ロ ケーシ ョ ン か ら 読み出 し を実行で き ます。 セマ フ ォ 操作が正 し く 実行には、 LWX 命令を SWX 命令 と ペアに し 、 その両方が同 じ ア ド レ ス を指定す る 必要があ り ま す。 MicroBlaze での予約単位は ワ ー ド です。 両方の命令に対 し 、 ア ド レ ス は ワ ー ド ア ラ イ ン し てい る 必要があ り ま す。 ア ラ イ ン さ れていない例外は、 こ れ ら の命令に対 し ては生成 さ れません。 条件付 き ス ト アは、 ス ト ア ア ド レ ス が、 予約を設定 し た ロ ー ド ア ド レ ス に一致 し ていな く て も 、 予約が存在 し てい る と 常に実行 さ れます。 1 回につ き 、 1 予約のみが維持 さ れ ます。 予約に関連付け ら れてい る ア ド レ ス は、 後続の LWX 命令を実行す る こ と で、 変更で き ます。 こ の条件付 き ス ト アは、 その前の LWX 命令に よ っ て設定 さ れた予約に基づいて、 実行 さ れます。 LWX で設定 さ れた ア ド レ ス に一致す る か ど う かに関わ ら ず、 プ ロ セ ッ サで保持 さ れてい る 予約は、 SWX 命令を実行 す る と 常に ク リ アにな り ます。 リ セ ッ ト 、 割 り 込み、 例外、 ブ レー ク (BRK お よ び BRKI 命令を含む) はすべて予約を ク リ ア し ます。 LWX お よ び SWX 命令の使用に関す る 一般ガ イ ド ラ イ ンは、 次の よ う にな っ てい ます。 • LWX お よ び SWX 命令はペアに し 、 同 じ ア ド レ ス を使用する よ う に し ます。 • LWX と ペアにな っ ていない SWX 命令で、 任意ア ド レ ス に割 り 当て ら れてい る も のは、 プ ロ セ ッ サで保持 さ れて い る 予約を ク リ アす る のに使用 し ます。 • 条件付 き シーケ ン ス は LWX 命令か ら 始ま り ます。 その後に、 メ モ リ ア ク セ ス が続 く か、 ま たは ロ ー ド さ れた値 に基づいた計算が続 き ます。 シーケ ン ス は SWX 命令で終わ り ます。 一般的には、 SWX 命令にエ ラ ーがあ る と 、 分岐は LWX に戻っ て、 繰 り 返 し 命令が実行 さ れます。 • LWX に よ っ て ロ ー ド さ れた値がゼ ロ でなければ、一部の同期化プ リ ミ テ ィ ブ を実行する と き 、その LWX は SWX と ペアに し な く て も よ い場合があ り ます。 次は、 テ ス ト ア ン ド セ ッ ト の イ ンプ リ メ ン テーシ ョ ン例です。 loop: lwx r5,r3,r0 bnei r5,next addik r5,r5,1 swx r5,r3,r0 addic r5,r0,0 bnei r5,loop next: • load and reserve branch if not equal to zero increment value try to store non-zero value check reservation loop if reservation lost パフ ォーマ ン ス は、 目的の値を返す こ と がで き ない LWX 命令でのループ を最小限にする こ と で、 改善で き ます。 ま た、 初期値チ ェ ッ ク をす る 普通の ロ ー ド 命令を使用す る こ と で、 パフ ォ ーマ ン ス を改善す る こ と も で き ます。 次は、 ス ピ ン ロ ッ ク の イ ンプ リ メ ン テーシ ョ ン例です。 loop: lw r5,r3,r0 bnei r5,loop lwx r5,r3,r0 bnei r5,loop addik r5,r5,1 swx r5,r3,r0 addic r5,r0,0 bnei r5,loop • ; ; ; ; ; ; ; ; ; ; ; ; ; ; load the word loop back if word not equal to 0 try reserving again likely that no branch is needed increment value try to store non-zero value check reservation loop if reservation lost LWX/SWX 命令ペアでのループ を最小限にす る と 、 前進する 可能性が高 く な り ます。 古い値は、 ス ト ア を実行す る 前にテ ス ト す る 必要があ り ます。 順番が逆の場合 (ス ト アの後に ロ ー ド を実行)、 実行 さ れ る SWX 命令の数が 多 く な り 、 LWX と SWX と の間で、 予約が失われ る 可能性が高 く な り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 18 第 2 章 : MicroBlaze アーキテ ク チ ャ 自己変更 コ ー ド 自己変更 コ ー ド を使用す る 場合は、 変更 さ れた命令を実行する のにフ ェ ッ チする 前に、 メ モ リ にその命令が書 き 込ま れてい る こ と を ソ フ ト ウ ェ アで確認す る 必要があ り ます。 次の点に注意す る 必要があ り ます。 • 変更 さ れ る 命令が、 変更前に既に、 次の場所に フ ェ ッ チ さ れてい る 可能性があ る 。 命令プ リ フ ェ ッ チバ ッ フ ァ ー ¨ 命令キ ャ ッ シ ュ ( イ ネーブルにな っ てい る 場合) ¨ ス ト リ ーム バ ッ フ ァ ー (命令キ ャ ッ シ ュ ス ト リ ーム バ ッ フ ァ ーが使用 さ れてい る 場合) ¨ 命令キ ャ ッ シ ュ 。 その後、 ビ ク テ ィ ム バ ッ フ ァ ーが使用 さ れてい る 場合はそ こ に保存 さ れ る 。 ¨ 古い未変更の コ ー ド ではな く 、 変更 さ れた コ ー ド が常に実行 さ れてい る こ と を確認する には、 ソ フ ト ウ ェ アは こ れ ら のすべてのケース を処理す る 必要があ り ます。 • 変更 し たい命令が 1 つ以上分岐で、 分岐先キ ャ ッ シ ュ が使用 さ れてい る 場合は、 分岐先ア ド レ ス がキ ャ ッ シ ュ さ れてい る 可能性があ り ます。 キ ャ ッ シ ュ さ れた分岐先ア ド レ ス の使用を避け る には、 変更 さ れた コ ー ド を実行する 前に、 分岐先キ ャ ッ シ ュ が ク リ アにな っ てい る こ と を ソ フ ト ウ ェ アで確認す る 必要があ り ます。 • 変更 さ れた命令は、 実行前に メ モ リ に書 き 込まれていない可能性があ り ます。 ¨ ¨ ¨ 変更 さ れた命令は メ モ リ に書 き 込まれ る 手前で、イ ン タ ーコ ネ ク ト ま たは メ モ リ コ ン ト ロ ー ラ ーの一時的な ス ト レージにあ る 可能性があ り ます。 ラ イ ト バ ッ ク キ ャ ッ シ ュ が使用 さ れてい る 場合は、 変更 さ れた命令はデー タ キ ャ ッ シ ュ に格納 さ れてい る 可能性があ り ます。 ラ イ ト バ ッ ク キ ャ ッ シ ュ お よ びビ ク テ ィ ム バ ッ フ ァ ーが使用 さ れてい る 場合は、 変更 さ れた命令はビ ク テ ィ ム バ ッ フ ァ ーに格納 さ れてい る 可能性があ り ます。 プ ロ セ ッ サが フ ェ ッ チす る 前に、 変更 さ れた命令が メ モ リ に書 き 込まれてい る こ と を ソ フ ト ウ ェ アで確認す る 必 要があ り ます。 次の注釈付 き コ ー ド は、上記の問題のそれぞれが ど の よ う に解決 さ れ る か を示 し てい ます。こ の コ ー ド は、命令キ ャ ッ シ ュ お よ び ラ イ ト バ ッ ク デー タ キ ャ ッ シ ュ の両方が使用 さ れてい る こ と を前提に し てい ます。 使用 さ れていない場 合は、 その部分の命令は省 く こ と がで き ます。 次の コ ー ド 例は、 変更 さ れた命令を格納 し ます。 swi r5,r6,0 ; ; wdc.flush r6,r0 ; mbar 1 ; wic r7,r0 ; ; mbar 2 ; r5 = new instruction r6 = physical instruction address flush write-back data cache line ensure new instruction is written to memory invalidate line, empty stream & victim buffers r7 = virtual instruction address empty prefetch buffer, clear branch target cache MMU 仮想モー ド が使用 さ れていない限 り 、 上記の物理お よ び仮想ア ド レ ス は同 じ です。 MMU が イ ネーブルにな っ てい る 場合は、 WIC お よ び WDC は特権命令であ る ため、 コ ー ド シーケ ン ス を リ アル モー ド で実行す る 必要があ り ます。 上記の コ ー ド シーケ ン ス の後の最初の命令はプ リ フ ェ ッ チ さ れてい る 可能性があ る ため、 変更 し ないで く だ さ い。 レ ジス タ MicroBlaze には、 直交性のあ る 命令セ ッ ト アーキ テ ク チ ャ があ り 、 選定 さ れてい る オプシ ョ ン に よ っ て異な り ます が、 32 個の 32 ビ ッ ト の汎用レ ジ ス タ と 、 18 個の 32 ビ ッ ト の特殊レ ジ ス タ があ り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 19 第 2 章 : MicroBlaze アーキテ ク チ ャ 汎用レ ジ ス タ 32 個の 32 ビ ッ ト の汎用レ ジ ス タ には、 R0 か ら R31 ま での番号が付いてい ます。 レ ジ ス タ フ ァ イ ルは、 ビ ッ ト ス ト リ ーム ダ ウ ン ロ ー ド で リ セ ッ ト さ れます ( リ セ ッ ト 値は 0x00000000)。 図 2-2 は汎用レ ジ ス タ を表 し てお り 、 表 2-7 に は、 各レ ジ ス タ お よ びレ ジ ス タ リ セ ッ ト 値 (あれば) が ま と め ら れてい ます。 注記 : レ ジ ス タ フ ァ イ ルは、 外部 リ セ ッ ト 入力であ る 、 Reset お よ び Debug_Rst では リ セ ッ ト さ れません。 R0-R31 図 2‐2 : R0‐R31 表 2‐7 : 汎用レ ジ ス タ (R0‐R31) ビッ ト 名前 説明 リセッ ト値 0x00000000 0:31 R0 常に値はゼ ロ にな り ます。 R0 に書 き 込まれた値は破棄 さ れます。 0:31 R1 か ら R13 ま で 32 ビ ッ ト 汎用レ ジ ス タ - 0:31 R14 割 り 込み用に戻 り ア ド レ ス を格納す る ために使用 さ れ る 32 ビ ッ ト レジス タ - 0:31 R15 32 ビ ッ ト 汎用レ ジ ス タ 。 ユーザー ベ ク タ ー用の戻 り ア ド レ ス を 格納す る ために推奨。 - 0:31 R16 ブ レー ク 用に戻 り ア ド レ ス を格納す る ために使用 さ れ る 32 ビ ッ ト レジス タ - 0:31 R17 MicroBlaze がハー ド ウ ェ ア例外 を サポー ト す る よ う に コ ン フ ィ ギ ュ レー ト さ れてい る 場合は、 こ の レ ジ ス タ には、 命令のア ド レ ス が ロ ー ド さ れ、 その命令の後にハー ド ウ ェ ア例外が発生 し ま す。 ただ し 、 BTR を使用する 遅延ス ロ ッ ト の例外を除き ます ( 「分岐先レ ジ ス タ (BTR)」 を参照)。 ハー ド ウ ェ ア例外を サポー ト する よ う に コ ン フ ィ ギ ュ レー ト さ れていない場合は、 レ ジ ス タ は汎用レ ジ ス タ です。 - 0:31 R18 か ら R31 ま で R18 か ら R31 ま では 32 ビ ッ ト の汎用レ ジ ス タ です。 - 汎用レ ジ ス タ を使用す る 場合の ソ フ ト ウ ェ アに関 し ては、 表 4-2 を参照 し て く だ さ い。 特殊用途レ ジ ス タ プ ログ ラ ム カ ウ ン タ ー (PC) プ ロ グ ラ ム カ ウ ン タ ー (PC) は実行命令の 32 ビ ッ ト ア ド レ ス です。 こ れは、 MFS 命令で読み出 し で き ますが、 MTS 命令で書 き 込む こ と はで き ません。 MFS 命令で使用 さ れ る 場合は、 PC レ ジ ス タ は Sa = 0x0000 で指定 さ れ ます。 PC は図 2-3 で図説 さ れ、 表 2-8 には、 その詳細お よ び リ セ ッ ト 値が ま と め ら れてい ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 20 第 2 章 : MicroBlaze アーキテ ク チ ャ PC 図 2‐3 : PC 表 2‐8 : プ ログ ラ ム カ ウン タ ー (PC) ビッ ト 0:31 名前 PC 説明 リセッ ト値 プロ グ ラ ム カ ウ ン ター 実行命令のア ド レ ス、 つま り mfs r2 0 は、 mfs 命令自体のア ド レ ス を R2 に 格納 し ます。 0x00000000 マ シ ン ス テー タ ス レ ジス タ (MSR) マシ ン ス テー タ ス レ ジ ス タ には、 プ ロ セ ッ サの制御ビ ッ ト お よ びス テー タ ス ビ ッ ト が含まれてい ます。 こ れは MFS 命令で読み出す こ と がで き ま す。 MSR を読み出す と き 、 ビ ッ ト 29 は ビ ッ ト 0 にキ ャ リ ー コ ピー と し て複製 さ れ ま す。 MSR への書 き 込みは、 MTS 命令を使用 し て、 ま たは専用 MSRSET お よ び MSRCLR 命令を使用 し て行 う こ と が で き ます。 MSRSET ま たは MSRCLR を使用 し て MSR に書 き 込む場合、 キ ャ リ ー ビ ッ ト はす ぐ に適用 さ れ、 残 り の ビ ッ ト は 1 ク ロ ッ ク サ イ ク ル後に使用 さ れます。 MTS を使用 し て書き 込む場合は、 すべてのビ ッ ト が 1 ク ロ ッ ク サ イ ク ル後に 使用で き る よ う にな り ます。 ビ ッ ト 0 に書 き 込まれた値はすべて破棄 さ れます。 MTS ま たは MFS 命令で使用 さ れ る 場合は、 MSR は Sx = 0x0001 と い う 設定で指定 さ れます。 MSR レ ジ ス タ は 図 2-4 で図説 さ れ、 表 2-9 には、 ビ ッ ト の説明お よ び リ セ ッ ト 値が ま と め ら れてい ます。 予約 VMS VM UMS UM PVR EIP EE DCE DZO ICE FSL BIP C IE RES 図 2‐4 : MSR 表 2‐9 : マシ ン ス テー タ ス レ ジ ス タ (MSR) ビッ ト 名前 0 CC 1:16 予約 17 VMS 説明 リセッ ト値 演算キ ャ リ ー コ ピー 演算キ ャ リ ーの コ ピー (ビ ッ ト 29)。 CC はビ ッ ト C と 常に同 じ です。 0 仮想保護モー ド 保存 MMU で コ ン フ ィ ギ ュ レー ト し た場合にのみ使用可能。 (C_USE_MMU > 1 お よ び C_AREA_OPTIMIZED = 0 の場合) 読み出 し /書 き 込み 0 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 21 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐9 : マシ ン ス テー タ ス レ ジ ス タ (MSR) (続き) 説明 リセッ ト値 18 ビッ ト VM 名前 仮想保護モー ド 0 = C_USE_MMU = 3 (仮想) で、 MMU ア ド レ ス変換お よ びア ク セ ス保護が デ ィ ス エーブル。C_USE_MMU = 2 (保護) で、ア ク セ ス保護はデ ィ ス エーブル。 1 = C_USE_MMU = 3 (仮想)で、 MMU ア ド レ ス変換お よ びア ク セ ス保護が イ ネーブル。 C_USE_MMU = 2 (保護) で、 ア ク セ ス保護は イ ネーブル。 MMU で コ ン フ ィ ギ ュ レー ト し た場合にのみ使用可能。 (C_USE_MMU > 1 お よ び C_AREA_OPTIMIZED = 0 の場合) 読み出 し /書 き 込み 0 19 UMS ユーザー モー ド 保存 MMU で コ ン フ ィ ギ ュ レー ト し た場合にのみ使用可能。 (C_USE_MMU > 0 お よ び C_AREA_OPTIMIZED = 0 の場合) 読み出 し /書 き 込み 0 20 UM ユーザー モー ド 0 = 特権モー ド 、 すべての命令が使用で き る 。 1 = ユーザー モー ド 、 一部の命令が使用で き ない。 MMU で コ ン フ ィ ギ ュ レー ト し た場合にのみ使用可能。 (C_USE_MMU > 0 お よ び C_AREA_OPTIMIZED = 0 の場合) 読み出 し /書 き 込み 0 21 PVR プ ロ セ ッ サ バージ ョ ン レ ジ ス タ が存在する 。 0 = プ ロ セ ッ サ バージ ョ ン レ ジ ス タ な し 1 = プ ロ セ ッ サ バージ ョ ン レ ジ ス タ あ り 読み出 し 専用 22 EIP 処理中例外 0 = 処理中ハー ド ウ ェ ア例外な し 1 = 処理中ハー ド ウ ェ ア例外あ り 例外サポー ト を有効に し て コ ン フ ィ ギ ュ レ ー ト し てい る 場合 (C_*_EXCEPTION ま たは C_USE_MMU > 0) にのみ使用可能 読み出 し /書 き 込み 0 23 EE 例外 イ ネーブル 0 = ハー ド ウ ェ ア例外をデ ィ ス エーブル1 1 = ハー ド ウ ェ ア例外を イ ネーブル 0 パラ メ ーター C_PVR に基 づく。 例外サポー ト を有効に し て コ ン フ ィ ギ ュ レ ー ト し てい る 場合 (C_*_EXCEPTION ま たは C_USE_MMU > 0) にのみ使用可能 読み出 し /書 き 込み 24 DCE デー タ キ ャ ッ シ ュ イ ネーブル 0 = デー タ キ ャ ッ シ ュ をデ ィ ス エーブル 1 = デー タ キ ャ ッ シ ュ を イ ネーブル 0 デー タ キ ャ ッ シ ュ を 使用す る よ う に コ ン フ ィ ギ ュ レ ー ト し て い る 場合 (C_USE_DCACHE = 1) にのみ使用可能 読み出 し /書 き 込み MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 22 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐9 : マシ ン ス テー タ ス レ ジ ス タ (MSR) (続き) ビッ ト 25 名前 DZO 説明 ま たは除算オーバーフ ロ ー2 ゼ ロ 除算、 0 = ゼ ロ 除算、 ま たは除算オーバーフ ロ ーが発生 し ていない 1 = ゼ ロ 除算、 ま たは除算オーバーフ ロ ーが発生 リセッ ト値 0 ハー ド ウ ェ ア 除算器 を 使用す る よ う に コ ン フ ィ ギ ュ レ ー ト し て い る 場合 (C_USE_DIV = 1) にのみ使用可能 読み出 し /書 き 込み 26 ICE 命令キ ャ ッ シ ュ イ ネーブル 0 = 命令キ ャ ッ シ ュ をデ ィ ス エーブル 1 = 命令キ ャ ッ シ ュ を イ ネーブル 0 命令 キ ャ ッ シ ュ を 使用す る よ う に コ ン フ ィ ギ ュ レ ー ト し て い る 場合 (C_USE_ICACHE = 1) にのみ使用可能 読み出 し /書 き 込み 27 FSL AXI4-Stream エ ラ ー 0 = get ま たは getd にエ ラ ーな し 1 = get ま たは getd の制御 タ イ プが一致 し ない こ の ビ ッ ト は ス テ ィ ッ キー ビ ッ ト で、 た と えば、 制御ビ ッ ト が一致 し ない場 合に get ま たは getd 命令で設定 さ れます。 こ れを ク リ アにする には、 mts ま たは msrclr 命令を使用す る 必要があ り ます。 0 ス ト リ ー ム リ ン ク を 使用す る よ う に コ ン フ ィ ギ ュ レ ー ト し て い る 場合 (C_FSL_LINKS > 0) にのみ使用可能 読み出 し /書 き 込み 28 BIP 処理中ブ レー ク 0 = 処理中ブ レー ク な し 1 = 処理中ブ レー ク あ り ブ レ ー ク ソ ー ス は ソ フ ト ウ ェ ア ブ レ ー ク 命令、 ま た は Ext_Brk ま た は Ext_NM_Brk ピ ンか ら のハー ド ウ ェ ア ブ レー ク にな る 。 読み出 し /書 き 込み 0 29 C 演算キ ャ リ ー 0 = 繰 り 上げな し (繰 り 下げ) 1 = 繰 り 上げあ り (繰 り 下げな し ) 読み出 し /書 き 込み 0 30 IE 割 り 込み イ ネーブル 0 = 割 り 込みをデ ィ ス エーブル 1 = 割 り 込みを イ ネーブル 読み出 し /書 き 込み 0 31 - 予約 0 1. MMU 例外 (デー タ ス ト レージ例外、 命令ス ト レージ例外、 デー タ TLB ミ ス例外、 命令 TLB ミ ス例外) はデ ィ ス エーブルにで き ません。 ま た こ の ビ ッ ト の影響を受け ません。 2. こ の ビ ッ ト は、 整数をゼ ロ で割 る 場合、 ま たは除算オーバーフ ロ ー シ グナ リ ン グにのみ使用 さ れます。 FSR には浮動小数点の 同等の も のがあ り ま す。 例外処理がで き る よ う に コ ン フ ィ ギ ュ レー ト さ れてい る か ど う かにかかわ ら ず、 DZO ビ ッ ト はゼ ロ 除 算、 ま たは除算オーバーフ ロ ー コ ンデ ィ シ ョ ン を フ ラ グ し ます。 例外ア ド レ ス レ ジ ス タ (EAR) 例外ア ド レ ス レ ジ ス タ は、 次の例外を引き 起 こ すフルの ロ ー ド /ス ト ア ア ド レ ス を格納 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 23 第 2 章 : MicroBlaze アーキテ ク チ ャ • ア ラ イ ン さ れていないア ク セ ス例外、 つま り ア ラ イ ン さ れていないア ク セ ス ア ド レ ス • エ ラ ーの起 き てい る AXI4 デー タ ア ク セ ス ア ド レ ス を指定す る M_AXI_DP 例外 • ア ク セ ス のあ っ た (仮想) 実効ア ド レ ス を指定す る デー タ ス ト レージ例外 • 読み出 し のあ っ た (仮想) 実効ア ド レ ス を指定す る 命令ス ト レージ例外 • ア ク セ ス のあ っ た (仮想) 実効ア ド レ ス を指定す る デー タ TLB ミ ス例外 • 読み出 し のあ っ た (仮想) 実効ア ド レ ス を指定す る 命令 TLB ミ ス例外 ほかのすべて の例外の場合は、 こ の レ ジ ス タ の内容は未定義です。 MFS 命令で読み出 さ れ る 場合は、 EAR は Sa = 0x0003 で指定 さ れます。 EAR レ ジ ス タ は 図 2-5 で図説 さ れ、 表 2-10 にはビ ッ ト の説明 と リ セ ッ ト 値が ま と め ら れて い ます。 EAR 図 2‐5 : EAR 表 2‐10 : 例外ア ド レ ス レ ジ ス タ (EAR) ビッ ト 0:31 名前 EAR 説明 リセッ ト値 0x00000000 例外ア ド レ ス レ ジ ス タ 例外ス テー タ ス レ ジ ス タ (ESR) 例外ス テー タ ス レ ジ ス タ には、 プ ロ セ ッ サの ス テー タ ス ビ ッ ト が含まれてい ます。 MFS 命令で読み出 さ れ る 場合は、 ESR は Sa = 0x0005 で指定 さ れます。 ESR レ ジ ス タ は図 2-6 で図説 さ れ、 表 2-11 にはビ ッ ト の説明お よ び リ セ ッ ト 値 が、 表 2-12 には例外別ス テー タ ス (ESS) が ま と め ら れてい ます。 予約 20 DS ESS EC 図 2‐6 : ESR 表 2‐11 : 例外ス テー タ ス レ ジ ス タ (ESR) ビッ ト 名前 0:18 予約 19 DS 説明 遅延ス ロ ッ ト 例外 0 = 遅延ス ロ ッ ト 命令で引 き 起 こ さ れていない 1 = 遅延ス ロ ッ ト 命令で引 き 起 こ さ れてい る 読み出 し 専用 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com リセッ ト値 0 24 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐11 : 例外ス テー タ ス レ ジ ス タ (ESR) (続き) ビッ ト 名前 説明 リセッ ト値 20:26 ESS 例外別ス テー タ ス 表 2-12 を参照 読み出 し 専用 27:31 EC 例外原因 00000 = ス ト リ ーム例外 00001 = ア ラ イ ン さ れていないデー タ ア ク セ ス例外 00010 = 無効なオペコ ー ド 例外 00011 = 命令バ ス エ ラ ー例外 00100 = デー タ バ ス エ ラ ー例外 00101 = 除算例外 00110 = 浮動小数点ユニ ッ ト 例外 00111 = 特権命令例外 00111 = ス タ ッ ク 保護違反例外 10000 = デー タ ス ト レージ例外 10001 = 命令ス ト レージ例外 10010 = デー タ TLB ミ ス例外 10011 = 命令 TLB ミ ス例外 読み出 し 専用 表 2-12 を参照 0 表 2‐12 : 例外別ス テー タ ス (ESS) 例外原因 ビッ ト 名前 説明 リセッ ト値 20 W ワー ド ア ク セ ス例外 0 = ア ラ イ ン し ていないハーフ ワー ド ア ク セ ス 1 = ア ラ イ ン し ていない ワー ド ア ク セ ス 0 21 S ス ト ア ア ク セ ス例外 0 = ア ラ イ ン し ていない ロ ー ド ア ク セ ス 1 = ア ラ イ ン し ていない ス ト ア ア ク セ ス 0 22:26 Rx ソ ース/デス テ ィ ネーシ ョ ン レ ジ ス タ ア ラ イ ン し ていないア ク セ ス で ソ ース (ス ト ア) ま たは デス テ ィ ネーシ ョ ン ( ロ ー ド ) と し て使用 さ れ る 汎用レ ジス タ 0 無効な命令 20:26 予約 命令バ ス エラー 20 ECC 21:26 予約 20 ECC 21:26 予約 20 DEC 21:26 予約 0 浮動小数点ユ ニッ ト 20:26 予約 0 特権命令 20:26 予約 0 ス タ ッ ク 保護 違反 20:26 予約 0 アラ インして いないデー タ ア ク セス デー タ バス エ ラー 除算 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 0 ILMB の訂正可能エ ラ ー ま たは訂正不可能なエ ラ ーに よ る 例外 0 0 DLMB の訂正可能エ ラ ーま たは訂正不可能なエ ラ ーに よ る 例外 0 0 除算 - 除算エ ラ ー原因 0 = ゼ ロ 除算 1 = 除算オーバーフ ロ ー japan.xilinx.com 0 25 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐12 : 例外別ス テー タ ス (ESS) (続き) 例外原因 ス ト リ ーム デー タ ス ト レージ 命令 ス ト レージ デー タ TLB ミ ス 命令 TLB ミ ス ビッ ト 名前 説明 リセッ ト値 20:22 予約 23:26 FSL 0 例外を引 き 起 こ し た AXI4-Stream イ ンデ ッ ク ス 0 20 DIZ デー タ ス ト レージ - ゾーン保護 0 = 発生 し なか っ た 1 = 発生 し た 0 21 S デー タ ス ト レージ - ス ト ア命令 0 = 発生 し なか っ た 1 = 発生 し た 0 22:26 予約 20 DIZ 21:26 予約 0 20 予約 0 21 S 22:26 予約 0 20:26 予約 0 0 命令ス ト レージ - ゾーン保護 0 = 発生 し なか っ た 1 = 発生 し た デー タ TLB ミ ス - ス ト ア命令 0 = 発生 し なか っ た 1 = 発生 し た 0 0 分岐先レ ジ ス タ (BTR) MicroBlaze プ ロ セ ッ サが例外を使用す る よ う に コ ン フ ィ ギ ュ レー ト さ れてい る 場合にのみ、 分岐先レ ジ ス タ は存在 し ます。 こ の レ ジ ス タ は、 MSR[EIP] = 0 の と き に実行 さ れたすべての遅延ス ロ ッ ト の分岐命令の分岐先ア ド レ ス を格納 し ます。 例外が遅延ス ロ ッ ト の命令に よ っ て引き 起 こ さ れた場合 (つま り ESR[DS]=1)、 例外ハン ド ラ ーは、 R17 に格 納 さ れてい る 標準例外戻 り ア ド レ ス ではな く 、 BTR に格納 さ れてい る ア ド レ ス に実行を戻す必要があ り ます。 MFS 命令で読み出 さ れ る 場合は、 BTR は Sa = 0x000B で指定 さ れます。 BTR レ ジ ス タ は 図 2-7 で図説 さ れ、 表 2-13 には ビ ッ ト の説明 と リ セ ッ ト 値が ま と め ら れてい ます。 BTR 図 2‐7 : BTR 表 2‐13 : 分岐先レ ジ ス タ (BTR) ビッ ト 0:31 名前 BTR 説明 リセッ ト値 遅延 ス ロ ッ ト の例外に よ っ て引 き 起 こ さ れた例外か ら 戻 る と き に、 0x00000000 ハン ド ラ ーに よ り 使用 さ れ る 分岐先ア ド レ ス 読み出 し 専用 浮動小数点ス テー タ ス レ ジ ス タ (FSR) 浮動小数点ス テー タ ス レ ジ ス タ には、 浮動小数点ユニ ッ ト の ス テー タ ス ビ ッ ト が含まれてい ます。 こ れは、 MFS 命 令で読み出 し で き 、 MTS 命令で書 き 込みで き ま す。 読み出 し ま たは書 き 込みが実行 さ れ る 場合は、 こ の レ ジ ス タ は MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 26 第 2 章 : MicroBlaze アーキテ ク チ ャ Sa = 0x0007 で指定 さ れ ます。 こ の レ ジ ス タ の ビ ッ ト は ス テ ィ ッ キーで、 浮動小数点命令は、 レ ジ ス タ の ビ ッ ト し か セ ッ ト で き ません。 MTS 命令を使用 し ない と 、 レ ジ ス タ を ク リ アにで き ません。 FSR レ ジ ス タ は 図 2-8 で図説 さ れ、 表 2-14 には、 ビ ッ ト の説明お よ び リ セ ッ ト 値が ま と め ら れてい ます。 IO DZ OF UF DO 予約 図 2‐8 : FSR 表 2‐14 : 浮動小数点ス テー タ ス レ ジ ス タ (FSR) ビッ ト 名前 説明 リセッ ト値 0:26 予約 27 IO 無効の操作 0 28 DZ ゼ ロ 除算 0 29 OF オーバーフ ロ ー 0 30 UF ア ン ダーフ ロ ー 0 31 DO 非正規オペ ラ ン ド エ ラ ー 0 未定義 例外デー タ レ ジ ス タ (EDR) 例外デー タ レ ジ ス タ は、 ス ト リ ーム例外を引き 起 こ し た AXI4-Stream リ ン ク で読み出 さ れたデー タ を格納 し ます。 ほかのすべて の例外の場合は、 こ の レ ジ ス タ の内容は未定義です。 MFS 命令で読み出 さ れ る 場合は、 EDR は Sa = 0x000D で指定 さ れます。 EDR レ ジ ス タ は 図 2-9 で図説 さ れ、 表 2-15 には、 ビ ッ ト の説明お よ び リ セ ッ ト 値が ま と め ら れてい ます。 注記 : C_FSL_LINKS が 0 よ り 大 き く 、 C_FSL_EXCEPTION が 1 に設定 さ れてい る 場合にのみ、 こ の レ ジ ス タ は イ ンプ リ メ ン ト さ れます。 EDR 図 2‐9 : EDR 表 2‐15 : 例外デー タ レ ジ ス タ (EDR) ビッ ト 0:31 名前 EDR 説明 リセッ ト値 0x00000000 例外デー タ レ ジ ス タ ス タ ッ ク ロウ レ ジ ス タ (SLR) ス タ ッ ク ロ ウ レ ジ ス タ は、 ス タ ッ ク オーバーフ ロ ーを検出す る ための ス タ ッ ク の最低値を格納 し ます。 rA と し て ス タ ッ ク ポ イ ン タ ー (レ ジ ス タ R1) を使用す る ロ ー ド ま たは ス ト ア命令のア ド レ ス が、 ス タ ッ ク ロ ウ レ ジ ス タ よ り 小 さ い と 、 ス タ ッ ク オーバーフ ロ ーが発生 し 、 MSR で例外が イ ネーブルにな っ てい る 場合は、 ス タ ッ ク 保護違反例外 にな り ます。 MFS 命令で読み出 さ れ る 場合は、 SLR は Sa = 0x0800 で指定 さ れます。 SLR レ ジ ス タ は 図 2-10 で図説 さ れ、 表 2-16 には、 ビ ッ ト の説明お よ び リ セ ッ ト 値が ま と め ら れてい ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 27 第 2 章 : MicroBlaze アーキテ ク チ ャ 注記 : パ ラ メ ー タ ー C_USE_STACK_PROTECTION が 1 に設定 さ れていて ス タ ッ ク 保護が イ ネーブルにな っ てい る 場合にのみ、 こ の レ ジ ス タ は イ ンプ リ メ ン ト さ れます。 ス タ ッ ク 保護が イ ンプ リ メ ン ト さ れていない場合は、 こ の レ ジ ス タ への書 き 込みには効力はあ り ません。 注記 : MMU が イ ネーブルの場合 (C_USE_MMU > 0)、 ス タ ッ ク 保護は使用で き ません。 UTLB の代わ り に、 MMU ペー ジ ベース の メ モ リ を使用 し て保護 さ れます。 SLR 図 2‐10 : SLR 表 2‐16 : ス タ ッ ク ロウ レ ジ ス タ (SLR) ビッ ト 0:31 名前 SLR 説明 リセッ ト値 0x00000000 ス タ ッ ク ロ ウ レジス タ ス タ ッ ク ハイ レ ジ ス タ (SHR) ス タ ッ ク ハ イ レ ジ ス タ は、 ス タ ッ ク ア ン ダーフ ロ ーを検出す る ための ス タ ッ ク の最高値を格納 し ます。 rA と し て ス タ ッ ク ポ イ ン タ ー (レ ジ ス タ R1) を使用す る ロ ー ド ま たは ス ト ア命令のア ド レ ス が、 ス タ ッ ク ハ イ レ ジ ス タ よ り 大 き い と 、 ス タ ッ ク ア ン ダーフ ロ ーが発生 し 、 MSR で例外が イ ネーブルにな っ てい る 場合は、 ス タ ッ ク 保護違反例外 にな り ます。 MFS 命令で読み出 さ れ る 場合は、 SHR は Sa = 0x0802 で指定 さ れます。 SHR レ ジ ス タ は 図 2-11 で図説 さ れ、 表 2-17 には、 ビ ッ ト の説明お よ び リ セ ッ ト 値が ま と め ら れてい ます。 注記 : パ ラ メ ー タ ー C_USE_STACK_PROTECTION が 1 に設定 さ れていて ス タ ッ ク 保護が イ ネーブルにな っ てい る 場合にのみ、 こ の レ ジ ス タ は イ ンプ リ メ ン ト さ れます。 ス タ ッ ク 保護が イ ンプ リ メ ン ト さ れていない場合は、 こ の レ ジ ス タ への書 き 込みには効力はあ り ません。 注記 : MMU が イ ネーブルの場合 (C_USE_MMU > 0)、 ス タ ッ ク 保護は使用で き ません。 UTLB の代わ り に、 MMU ペー ジ ベース の メ モ リ を使用 し て保護 さ れます。 SHR 図 2‐11 : SHR 表 2‐17 : ス タ ッ ク ハイ レ ジ ス タ (SHR) ビッ ト 0:31 名前 SHR 説明 リセッ ト値 0xFFFFFFFF ス タ ッ ク ハイ レジス タ プ ロ セス ID レ ジ ス タ (PID) プ ロ セ ス ID レ ジ ス タ は、 MMU ア ド レ ス変換中の ソ フ ト ウ ェ ア プ ロ セ スの特定に使用 さ れます。 こ れは、 MicroBlaze の C_USE_MMU コ ン フ ィ ギ ュ レーシ ョ ン オプシ ョ ン で制御 さ れ ます。 C_USE_MMU が 1 よ り 大 き く (ユーザー モー ド )、 C_AREA_OPTIMIZED が 0 に設定 さ れてい る場合にのみ、 こ のレ ジ ス タ は イ ンプ リ メ ン ト さ れます。 MFS および MTS MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 28 第 2 章 : MicroBlaze アーキテ ク チ ャ 命令でア ク セ ス さ れる場合は、 PID は Sa = 0x1000 で指定さ れます。 こ のレ ジ ス タ には、 メ モ リ 管理特殊レ ジ ス タ のパ ラ メ ーター C_MMU_TLB_ACCESS の設定に従っ てア ク セ スで き ます。 PID は TLB エン ト リ にア ク セ スす る と き に も 使用 さ れます。 • TLBHI (変換ル ッ ク アサ イ ド バ ッ フ ァ ー ハ イ ) を書 き 込む と 、 PID の値は、 TLB エン ト リ の TID フ ィ ール ド に格 納 さ れます。 • TLBHI お よ び MSR[UM] の読み出 し がセ ッ ト さ れていない場合は、 TID フ ィ ール ド の値は PID に格納 さ れます。 PID レ ジ ス タ は 図 2-12 で図説 さ れ、 表 2-18 には、 ビ ッ ト の説明お よ び リ セ ッ ト 値が ま と め ら れてい ます。 予約 PID 図 2‐12 : PID 表 2‐18 : プ ロ セス ID レ ジ ス タ (PID) ビッ ト 名前 0:23 予約 24:31 PID 説明 リセッ ト値 MMU ア ド レ ス変換中の ソ フ ト ウ ェ ア プ ロ セ ス を特定す る のに使用 さ れます。 読み出 し /書 き 込み 0x00 ゾーン保護レ ジ ス タ (ZPR) ゾーン保護 レ ジ ス タ は、 TLB エ ン ト リ で定義 さ れてい る MMU メ モ リ 保護を上書 き す る ために使用 さ れ ま す。 こ れ は、 MicroBlaze の C_USE_MMU コ ン フ ィ ギ ュ レーシ ョ ン オプシ ョ ン で制御 さ れ ます。 C_USE_MMU が 1 よ り も 大 き く (ユーザー モー ド )、 C_AREA_OPTIMIZED が 0 に設定 さ れていて、 さ ら に指定 さ れてい る メ モ リ 保護ゾーンの数 が 0 よ り も 大 き い (C_MMU_ZONES > 0) 場合にのみ、 こ の レ ジ ス タ は イ ンプ リ メ ン ト さ れます。 イ ンプ リ メ ン ト さ れ る レ ジ ス タ ビ ッ ト は、 指定 さ れてい る メ モ リ 保護ゾーンの数 (C_MMU_ZONES) に左右 さ れます。 MFS お よ び MTS 命 令でア ク セ ス さ れ る 場合は、 ZPR は Sa = 0x1001 で指定 さ れます。 こ の レ ジ ス タ には、 メ モ リ 管理特殊レ ジ ス タ のパ ラ メ ー タ ー C_MMU_TLB_ACCESS の設定に従っ て ア ク セ ス で き ます。 ZPR レ ジ ス タ は 図 2-13 で図説 さ れ、 表 2-19 には、 ビ ッ ト の説明お よ び リ セ ッ ト 値が ま と め ら れてい ます。 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 図 2‐13 : ZPR MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 29 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐19 : ゾーン保護レ ジ ス タ (ZPR) ビッ ト 0:1 2:3 ... 30:31 名前 ZP0 ZP1 ... ZP15 説明 リセッ ト値 ゾーン保護 ユーザー モー ド (MSR[UM] = 1) : 00 = TLB エン ト リ で V を上書 き 。 ページへのア ク セ ス は不可。 01 = 上書 き な し 。 TLB エン ト リ の V、 WR、 EX を使用。 10 = 上書 き な し 。 TLB エン ト リ の V、 WR、 EX を使用。 11 = TLB エン ト リ で WR お よ び EX を上書き 。書 き 込み可能お よ び実行可能 の権限でページにア ク セ ス。 特権モー ド (MSR[UM] = 0) : 00 = 上書 き な し 。 TLB エン ト リ の V、 WR、 EX を使用。 01 = 上書 き な し 。 TLB エン ト リ の V、 WR、 EX を使用。 10 = TLB エン ト リ で WR お よ び EX を上書 き 。書 き 込み可能お よ び実行可能 の権限でページにア ク セ ス。 11 = TLB エン ト リ で WR お よ び EX を上書き 。書 き 込み可能お よ び実行可能 の権限でページにア ク セ ス。 読み出 し /書 き 込み 0x00000000 変換ル ッ ク アサイ ド バ ッ フ ァ ー ロ ウ レ ジス タ (TLBLO) 変換ル ッ ク アサ イ ド バ ッ フ ァ ー ロ ウ レ ジ ス タ は、 MMU の統合変換ル ッ ク アサ イ ド バ ッ フ ァ ー (UTLB) エ ン ト リ に ア ク セ スす る ために使用 さ れ ます。 こ れは、 MicroBlaze の C_USE_MMU コ ン フ ィ ギ ュ レーシ ョ ン オプシ ョ ン で制御 さ れます。 C_USE_MMU が 1 よ り 大き く (ユーザー モー ド )、 C_AREA_OPTIMIZED が 0 に設定 さ れてい る 場合にの み、 こ の レ ジ ス タ は イ ンプ リ メ ン ト さ れます。MFS お よ び MTS 命令でア ク セ ス さ れ る 場合は、TLBLO は Sa = 0x1003 で指定 さ れ ます。 TLBLO を読み出 し ま たは書 き 込みす る と き は、 TLBX レ ジ ス タ で イ ンデ ッ ク ス化 さ れた UTLB エ ン ト リ にア ク セ ス し ます。 こ の レ ジ ス タ は、 メ モ リ 管理特殊レ ジ ス タ のパ ラ メ ー タ ー C_MMU_TLB_ACCESS の設定 に従っ て、 読み出 し 可能です。 UTLB は ビ ッ ト ス ト リ ー ム ダ ウ ン ロ ー ド で リ セ ッ ト さ れ ま す ( すべ て の TLBLO エ ン ト リ の リ セ ッ ト 値 は 0x00000000)。 注記 : UTLB は、 外部 リ セ ッ ト 入力であ る Reset お よ び Debug_Rst では リ セ ッ ト さ れません。 つま り 、 デー タ の陳 腐化を避け る ため、 リ セ ッ ト 後 UTLB 全体を初期化す る 必要があ り ます。 TLBLO レ ジ ス タ は 図 2-14 で図説 さ れ、 表 2-20 には、 ビ ッ ト の説明お よ び リ セ ッ ト 値が ま と め ら れてい ます。 0 22 23 24 RPN EX WR 28 29 30 31 ZSEL W I M G 図 2‐14 : TLBLO MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 30 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐20 : 変換ル ッ ク アサイ ド バ ッ フ ァ ー ロウ レ ジ ス タ (TLBLO) ビッ ト 名前 説明 リセッ ト値 0:21 RPN 実ページ番号ま たは物理ページ番号 TLB ヒ ッ ト が発生す る と 、 こ の フ ィ ール ド は TLB エン ト リ か ら 読み出 さ れ、 物理ア ド レ ス を作成す る ために使用 さ れ ます。 SIZE フ ィ ール ド の値に よ り ますが、RPN ビ ッ ト の一部は物理ア ド レ ス では使用 さ れません。 ソ フ ト ウ ェ アは、 こ の フ ィ ール ド の未使用 ビ ッ ト を ゼ ロ に ク リ ア にす る 必要が あ り ま す。 C_USE_MMU=3 (仮想) の場合のみ定義 さ れます。 読み出 し /書 き 込み 0x000000 22 EX 実行フ ァ イ ル ビ ッ ト が 1 にセ ッ ト さ れてい る 場合、ページには実行可能コ ー ド が含まれて いて、 ページか ら 命令を フ ェ ッ チで き ます。 ビ ッ ト が 0 に ク リ ア さ れてい る 場合は、 命令はページか ら フ ェ ッ チで き ません。 ク リ ア EX ビ ッ ト でページ か ら 命令を フ ェ ッ チ し よ う と する と 、 命令ス ト レージ例外が発生 し ます。 読み出 し /書 き 込み 0 23 WR 書 き 込み可能 ビ ッ ト が 1 にセ ッ ト さ れてい る 場合、 ページは書き 込み可能で、 ス ト ア命令 をページ内のア ド レ ス でデー タ を格納する のに使用で き ます。 ビ ッ ト が 0 に ク リ ア さ れてい る 場合は、 ページは読み出 し 専用 (書き 込み不 可) です。 ク リ ア WR ビ ッ ト でページにデー タ を格納 し よ う と する と 、 デー タ ス ト レージ例外が発生 し ます。 読み出 し /書 き 込み 0 24:27 ZSEL ゾーン選択 こ の フ ィ ール ド は、 ゾーン保護レ ジ ス タ (ZPR) の Z0 か ら Z15 ま での 16 個 の ゾーンか ら 1 つ選択 し ます。 た と えば、 ZSEL 0x5 の場合、 ゾーン フ ィ ール ド Z5 が選択 さ れます。 選択 さ れた ZPR フ ィ ール ド は、 TLB エン ト リ の EX お よ び WR フ ィ ール ド に よ り 指定 さ れてい る ア ク セ ス保護を変更する のに使用 さ れます。 ま た、 TLB V (有効) フ ィ ール ド を上書 き す る こ と に よ り 、ページへのア ク セ ス を防ぐ のに も 使用 さ れます。 読み出 し /書 き 込み 0x0 28 W ラ イ ト スルー パ ラ メ ー タ ー C_DCACHE_USE_WRITEBACK が 1 に設定 さ れてい る 場合、 こ の ビ ッ ト がキ ャ ッ シ ン グ ポ リ シーを制御 し ます。 こ れが 1 に設定 さ れて い る 場合 ラ イ ト ス ルー ポ リ シーが選択 さ れ、 それ以外の場合は ラ イ ト バ ッ ク ポ リ シーが選択 さ れます。 C_DCACHE_USE_WRITEBACK が 0 に ク リ アに さ れてい る と 、 こ のビ ッ ト は 1 に固定 さ れ、 ラ イ ト スルーは常に使用 さ れます。 読み出 し /書 き 込み 0/1 29 I キ ャ ッ シ ン グの禁止 ビ ッ ト が 1 にセ ッ ト さ れてい る 場合は、ページへのア ク セ ス はキ ャ ッ シ ュ さ れません (キ ャ ッ シ ン グの禁止) ビ ッ ト が 0 に ク リ ア さ れてい る 場合は、ページへのア ク セ ス はキ ャ ッ シ ュ 可 能です。 読み出 し /書 き 込み 0 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 31 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐20 : 変換ル ッ ク アサイ ド バ ッ フ ァ ー ロウ レ ジ ス タ (TLBLO) (続き) 説明 リセッ ト値 30 ビッ ト M 名前 メ モ リ コ ヒ ーレ ン ト メ モ リ コ ヒ ー レ ン シは MicroBlaze には イ ン プ リ メ ン ト さ れていないため、 こ の ビ ッ ト は 0 に固定 さ れてい ます。 読み出 し 専用 0 31 G ガー ド ビ ッ ト が 1 にセ ッ ト さ れてい る 場合、 投機的ページ ア ク セ ス は許可 さ れ ま せん ( メ モ リ がガー ド さ れてい る )。 ビ ッ ト が 0 に ク リ ア さ れてい る 場合、 投機的ページ ア ク セ ス は許可 さ れ ま す。 G 属性は、 メ モ リ マ ッ プ さ れた I/O を不正な命令ア ク セ ス か ら 保護する ため に使用で き ます。 読み出 し /書 き 込み 0 変換ル ッ ク アサイ ド バ ッ フ ァ ー ハイ レ ジス タ (TLBHI) 変換ル ッ ク アサ イ ド バ ッ フ ァ ー ハ イ レ ジ ス タ は、 MMU の統合変換ル ッ ク アサ イ ド バ ッ フ ァ ー (UTLB) エ ン ト リ に ア ク セ スす る ために使用 さ れます。 こ れは、 MicroBlaze の C_USE_MMU コ ン フ ィ ギ ュ レーシ ョ ン オプシ ョ ン で制御 さ れ ます。 C_USE_MMU が 1 よ り 大 き く (ユーザー モー ド )、 C_AREA_OPTIMIZED が 0 に設定 さ れてい る 場合に のみ、こ の レ ジ ス タ は イ ンプ リ メ ン ト さ れます。MFS お よ び MTS 命令でア ク セ ス さ れ る 場合は、TLBHI は Sa = 0x1003 で指定 さ れます。 TLBHI を読み出 し ま たは書き 込みする と き は、 TLBX レ ジ ス タ で イ ンデ ッ ク ス化 さ れた UTLB エン ト リ にア ク セ ス し ます。 こ の レ ジ ス タ は、 メ モ リ 管理特殊レ ジ ス タ のパ ラ メ ー タ ー C_MMU_TLB_ACCESS の設定に 従っ て、 読み出 し 可能です。 PID は TLB エン ト リ にア ク セ スす る と き に も 使用 さ れます。 • TLBHI を書き 込む と 、 PID の値は、 TLB エン ト リ の TID フ ィ ール ド に格納 さ れます。 • TLBHI お よ び MSR[UM] の読み出 し がセ ッ ト さ れていない場合は、 TID フ ィ ール ド の値は PID に格納 さ れます。 UTLB は ビ ッ ト ス ト リ ー ム ダ ウ ン ロ ー ド で リ セ ッ ト さ れ ま す ( すべ て の TLBHI エ ン ト リ の リ セ ッ ト 値 は 0x00000000)。 注記 : UTLB は、 外部 リ セ ッ ト 入力 Reset お よ び Debug_Rst に よ っ て リ セ ッ ト さ れません。 TLBHI レ ジ ス タ は 図 2-15 で図説 さ れ、 表 2-21 には、 ビ ッ ト の説明お よ び リ セ ッ ト 値が ま と め ら れてい ます。 0 22 25 26 27 28 TAG SIZE V E U0 31 予約 図 2‐15 : TLBHI MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 32 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐21 : 変換ル ッ ク アサイ ド バ ッ フ ァ ー ハイ レ ジ ス タ (TLBHI) ビッ ト 名前 説明 リセッ ト値 0:21 TAG TLB エン ト リ タ グ SIZE フ ィ ール ド の制御の下、仮想 メ モ リ ア ド レ ス のページ番号の部分 と 比 較 さ れます。 読み出 し /書 き 込み 0x000000 22:24 SIZE サイズ ページ サ イ ズ を指定 し ます。 SIZE フ ィ ール ド は、 TAG フ ィ ール ド を仮想 メ モ リ ア ド レ ス のページ番号部分 と 比較する と き に使用 さ れ る ビ ッ ト 範囲 を制御 し ます。 こ の フ ィ ール ド で定義 さ れ る ページ サ イ ズは表 2-37 に リ ス ト さ れてい ます。 読み出 し /書 き 込み 000 25 V 有効 こ のビ ッ ト が 1 にセ ッ ト さ れてい る 場合、 TLB エン ト リ は有効で、 ページ 変換エン ト リ が含まれてい ます。 0 に ク リ ア さ れてい る 場合は、 TLB エン ト リ は無効です。 読み出 し /書 き 込み 0 26 E エンデ ィ ア ン こ の ビ ッ ト が 1 にセ ッ ト さ れて い る 場合、 ページは ビ ッ グ エ ンデ ィ ア ン ページ と し て ア ク セ ス さ れます。 0 に ク リ ア さ れてい る 場合、 ページは リ ト ル エンデ ィ ア ン ページ と し て ア ク セ ス さ れます。 E ビ ッ ト はデー タ 読み出 し ま たはデー タ 書 き 込みア ク セ ス にのみ影響 し ま す。 命令ア ク セ ス には影響 し ません。 E ビ ッ ト は、 C_USE_REORDER_INSTR が 1 に設定 さ れてい る 場合にのみ イ ンプ リ メ ン ト さ れ、 それ以外の場合は 0 に固定 さ れます。 読み出 し /書 き 込み 0 27 U0 ユーザー定義 MicroBlaze にはユーザー定義の ス ト レージ属性がないため、 こ の ビ ッ ト は 0 に固定 さ れてい ます。 読み出 し 専用 0 28:31 予約 変換ル ッ ク アサイ ド バ ッ フ ァ ー イ ンデ ッ ク ス レ ジ ス タ (TLBX) 変換ル ッ ク アサ イ ド バ ッ フ ァ ー イ ンデ ッ ク ス レ ジ ス タ は、 TLBLO お よ び TLBHI レ ジ ス タ にア ク セ スす る と き 、 統 合変換ル ッ ク アサ イ ド バ ッ フ ァ ー (UTLB) への イ ンデ ッ ク ス と し て使用 さ れます。こ れは、MicroBlaze の C_USE_MMU コ ン フ ィ ギ ュ レ ー シ ョ ン オ プ シ ョ ン で 制御 さ れ ま す。 C_USE_MMU が 1 よ り 大 き く ( ユ ー ザ ー モ ー ド )、 C_AREA_OPTIMIZED が 0 に設定 さ れてい る 場合にのみ、こ の レ ジ ス タ は イ ンプ リ メ ン ト さ れます。MFS お よ び MTS 命令でア ク セ ス さ れ る 場合は、 TLBX は Sa = 0x1002 で指定 さ れます。 TLBX レ ジ ス タ は 図 2-16 で図説 さ れ、 表 2-22 には、 ビ ッ ト の説明お よ び リ セ ッ ト 値が ま と め ら れてい ます。 ミス 予約 イ ンデ ッ ク ス 図 2‐16 : TLBX MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 33 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐22 : 変換ル ッ ク アサイ ド バ ッ フ ァ ー イ ンデ ッ ク ス レ ジ ス タ (TLBX) ビッ ト 名前 0 MISS 1:25 予約 26:31 INDEX 説明 リセッ ト値 TLB ミ ス TLBSX レ ジ ス タ が仮想ア ド レ ス で書 き 込ま れ、 その仮想ア ド レ ス が TLB エン ト リ にあ る 場合、 こ の ビ ッ ト は 0 に ク リ アにな り ます。 仮想ア ド レ ス が検出 さ れない場合は、ビ ッ ト は 1 にセ ッ ト さ れます。TLBX レ ジ ス タ 自体が書き 込まれ る と 、 ビ ッ ト も ク リ アにない ます。 読み出 し 専用 メ モ リ 管理特殊 レ ジ ス タ の パ ラ メ ー タ ーが C_MMU_TLB_ACCESS > 0 (MINIMAL) の場合、 読み出 し 可能です。 0 TLB イ ンデ ッ ク ス TLBLO お よ び TLBHI レ ジ ス タ に よ っ て ア ク セ ス さ れ る 変換ル ッ ク アサ イ ド バ ッ フ ァ ー エ ン ト リ を イ ンデ ッ ク ス化す る のに こ の フ ィ ール ド は使用 さ れ ま す。 TLBSX レ ジ ス タ が仮想ア ド レ ス で書 き 込 ま れ、 その仮想ア ド レ ス が対応す る TLB エ ン ト リ に あ る 場合、 こ の フ ィ ール ド は TLB イ ン デ ッ ク ス でア ッ プデー ト さ れます。 読み出 し /書 き 込み メ モ リ 管理特殊 レ ジ ス タ の パ ラ メ ー タ ーが C_MMU_TLB_ACCESS > 0 (MINIMAL) の場合、 読み出 し お よ び書き 込み可能です。 000000 変換ル ッ ク アサイ ド バ ッ フ ァ ー検索イ ンデ ッ ク ス レ ジ ス タ (TLBSX) 変換ル ッ ク アサ イ ド バ ッ フ ァ ー検索 イ ンデ ッ ク ス レ ジ ス タ は、 統合変換ル ッ ク アサ イ ド バ ッ フ ァ ー (UTLB) で仮想 ページ番号を検索す る ために使用 さ れ ます。 こ れは、 MicroBlaze の C_USE_MMU コ ン フ ィ ギ ュ レーシ ョ ン オプシ ョ ンで制御 さ れます。 C_USE_MMU が 1 よ り 大き く (ユーザー モー ド )、 C_AREA_OPTIMIZED が 0 に設定 さ れてい る 場合にのみ、 こ の レ ジ ス タ は イ ンプ リ メ ン ト さ れます。 MTS 命令で書 き 込まれ る 場合は、 TLBSX は Sa = 0x1005 で指 定 さ れ ます。 TLBSX レ ジ ス タ は 図 2-17 で図説 さ れ、 表 2-23 には、 ビ ッ ト の説明お よ び リ セ ッ ト 値が ま と め ら れて い ます。 VPN 予約 図 2‐17 : TLBSX MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 34 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐23 : 変換ル ッ ク アサイ ド バ ッ フ ァ ー検索イ ンデ ッ ク ス レ ジ ス タ (TLBSX) ビッ ト 名前 0:21 VPN 22:31 予約 説明 リセッ ト値 仮想ページ番号 こ の フ ィ ール ド は、 仮想 メ モ リ ア ド レ ス のページ番号部分を表 し ま す。 V ビ ッ ト が 1 にセ ッ ト さ れてい る 変換ル ッ ク アサ イ ド バ ッ フ ァ ー エン ト リ の それぞれで、 SIZE フ ィ ール ド の制御の下、 仮想 メ モ リ ア ド レ ス のページ番 号部分 と 、 こ の フ ィ ール ド が比較 さ れます。 仮想ページ番号が検出 さ れ る と 、 TLBX レ ジ ス タ は TLB エ ン ト リ の イ ン デ ッ ク ス で書 き 込まれ、 TLBX の MISS ビ ッ ト は 0 に ク リ アにな り ます。 仮 想ページ番号が ど の TLB エン ト リ に も 検出 さ れない場合、 TLBX レ ジ ス タ の MISS ビ ッ ト は 1 にセ ッ ト さ れます。 書 き 込み専用 プ ロ セ ッ サ バージ ョ ン レ ジ ス タ (PVR) プ ロ セ ッ サ バージ ョ ン レ ジ ス タ は、 MicroBlaze の C_PVR コ ン フ ィ ギ ュ レーシ ョ ン オプシ ョ ンで制御 さ れます。 • C_PVR が 0 (None) に設定 さ れてい る と 、 プ ロ セ ッ サは PVR を イ ンプ リ メ ン ト せず、 MSR[PVR]=0 です。 • C_PVR が 1 (Basic) に設定 さ れてい る と 、 MicroBlaze は最初の レ ジ ス タ PVR0 のみを イ ンプ リ メ ン ト し 、 C_PVR が 2 (Full) に設定 さ れてい る と 、 PVR レ ジ ス タ は 13 個すべて (PVR0 か ら PVR12 ま で) イ ンプ リ メ ン ト さ れます。 MFS 命令で読み出 さ れ る 場合、 PVR は Sa = 0x200x で指定 さ れ ます。 こ の場合 x には 0x0 か ら 0xB ま での レ ジ ス タ 番号が入 り ます。 ビ ッ ト の説明お よ び値は、 表 2-24 か ら 表 2-35 ま でに ま と め ら れてい ます。 表 2‐24 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 0 (PVR0) ビッ ト 名前 説明 値 0 CFG PVR イ ンプ リ メ ン テーシ ョ ン : 0 = Basic、 1 = Full パ ラ メ ー タ ー C_PVR に基づ く 。 1 BS バレル シ フ タ ーを使用 C_USE_BARREL 2 DIV 除算器を使用 C_USE_DIV 3 MUL ハー ド ウ ェ ア乗算器を使用 C_USE_HW_MUL > 0 (None) 4 FPU FPU を使用 C_USE_FPU > 0 (None) 5 EXC 任意 タ イ プの例外を使用 C_*_EXCEPTION に基づ く 。 C_USE_MMU > 0 (None) の場合 も 設定 される 6 ICU 命令キ ャ ッ シ ュ を使用 C_USE_ICACHE 7 DCU デー タ キ ャ ッ シ ュ を使用 C_USE_DCACHE 8 MMU MMU を使用 C_USE_MMU > 0 (None) 9 BTC 分岐先キ ャ ッ シ ュ を使用 C_USE_BRANCH_TARGET_CACHE 10 ENDI 選択 さ れ る エンデ ィ ア ン 常に1 = リ ト ル エンデ ィ ア ン C_ENDIANNESS 11 FT フ ォール ト ト レ ラ ン ス機能を イ ンプ リ メ ン ト C_FAULT_TOLERANT 12 SPROT ス タ ッ ク 保護を使用 C_USE_STACK_PROTECTION 13 REORD 再順序付け命令を イ ンプ リ メ ン ト C_USE_REORDER_INSTR 14:15 予約 16:23 MBV 0 MicroBlaze リ リ ース バージ ョ ン コ ー ド MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com リ リ ース別 35 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐24 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 0 (PVR0) (続き) ビッ ト 名前 説明 0x19 = v8.40.b 0x1B = v9.0 0x1D = v9.1 0x1F = v9.2 24:31 USR1 値 0x20 = v9.3 0x21 = v9.4 0x22 = v9.5 C_PVR_USER1 ユーザー コ ン フ ィ ギ ュ レー ト さ れた値 1 表 2‐25 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 1 (PVR1) ビッ ト 0:31 名前 USR2 説明 ユーザー コ ン フ ィ ギ ュ レー ト さ れた値 2 値 C_PVR_USER2 表 2‐26 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 2 (PVR2) ビッ ト 名前 説明 値 0 DAXI デー タ 側の使用 さ れてい る AXI4 ま たは ACE C_D_AXI 1 DLMB デー タ 側の使用 さ れてい る LMB C_D_LMB 2 IAXI 命令側の使用 さ れてい る AXI4 ま たは ACE C_I_AXI 3 ILMB 命令側の使用 さ れてい る LMB C_I_LMB 4 IRQEDGE 割 り 込みはエ ッ ジで ト リ ガー C_INTERRUPT_IS_EDGE 5 IRQPOS 割 り 込みエ ッ ジは正 C_EDGE_IS_POSITIVE 6 CEEXC LMB メ モ リ の ECC 訂正可能エ ラ ーに対 し 、 バ ス例外を生成 C_ECC_USE_CE_EXCEPTION 7:8 予約 0 9 予約 1 10 ACE ACE イ ン タ ー コ ネ ク ト を使用 11 AXI4DP デー タ ペ リ フ ェ ラ ル AXI イ ン タ ーフ ェ イ ス は、 C_M_AXI_DP_EXCLUSIVE_ACCESS AXI4 プ ロ ト コ ル を 使用 (排他的ア ク セ ス のサ ポー ト あ り ) 12 FSL 拡張 AXI4-Stream 命令を使用 C_USE_EXTENDED_FSL_INSTR 13 FSLEXC AXI4-Stream 制御ビ ッ ト 不一致に対 し 例外を生 成 C_FSL_EXCEPTION 14 MSR msrset お よ び msrclr 命令を使用 C_USE_MSR_INSTR 15 PCMP パ タ ーン比較お よ び CLZ 命令を使用 C_USE_PCMP_INSTR 16 AREA 低い命令 ス ループ ッ ト で エ リ ア を 最適化す る ための イ ンプ リ メ ン テーシ ョ ン を選択 C_AREA_OPTIMIZED 17 BS バレル シ フ タ ーを使用 C_USE_BARREL 18 DIV 除算器を使用 C_USE_DIV 19 MUL ハー ド ウ ェ ア乗算器を使用 C_USE_HW_MUL > 0 (None) 20 FPU FPU を使用 C_USE_FPU > 0 (None) 21 MUL64 64 ビ ッ ト ハー ド ウ ェ ア乗算器を使用 C_USE_HW_MUL = 2 (Mul64) MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com C_INTERCONNECT = 3 (ACE) 36 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐26 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 2 (PVR2) (続き) ビッ ト 名前 説明 値 22 FPU2 浮動小数点変換お よ び平方根命令を使用 C_USE_FPU = 2 (Extended) 23 IMPEXC LMB メ モ リ の ECC 訂正可能エ ラ ーに対 し 、 曖 昧例外を許可 C_IMPRECISE_EXCEPTIONS 24 予約 25 OP0EXC 0x0 の無効なオペコ ー ド に対 し 例外を生成 C_OPCODE_0x0_ILLEGAL 26 UNEXC ア ラ イ ン さ れて い な いデー タ ア ク セ ス に対 し 例外を生成 C_UNALIGNED_EXCEPTIONS 27 OPEXC 任意の無効なオペコ ー ド に対 し 例外を生成 C_ILL_OPCODE_EXCEPTION 28 AXIDEXC M_AXI_D エ ラ ーに対 し 例外を生成 C_M_AXI_D_BUS_EXCEPTION 29 AXIIEXC M_AXI_I エ ラ ーに対 し 例外を生成 C_M_AXI_I_BUS_EXCEPTION 30 DIVEXC ゼ ロ 除算 ま た は除算オーバー フ ロ ーに対 し 例 外を生成 C_DIV_ZERO_EXCEPTION 31 FPUEXC FPU か ら の例外を生成 C_FPU_EXCEPTION 0 表 2‐27 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 3 (PVR3) ビッ ト 名前 説明 0 DEBUG 1 EXT_DEBU 拡張デバ ッ グ ロ ジ ッ ク を使用 G 2 予約 3:6 PCBRK 7:9 予約 10:12 RDADDR 13:15 予約 16:18 WRADDR 19 予約 20:24 FSL 25:28 予約 29:31 BTC_SIZE デバ ッ グ ロ ジ ッ ク を使用 値 C_DEBUG_ENABLED > 0 C_DEBUG_ENABLED = 2 (Extended) PC ブ レー ク ポ イ ン ト の数 C_NUMBER_OF_PC_BRK 読み出 し ア ド レ ス ブ レー ク ポ イ ン ト の数 C_NUMBER_OF_RD_ADDR_BRK 書 き 込みア ド レ ス ブ レー ク ポ イ ン ト の数 C_NUMBER_OF_WR_ADDR_BRK 0 AXI4-Stream リ ン ク の数 C_FSL_LINKS 分岐先キ ャ ッ シ ュ サ イ ズ C_BRANCH_TARGET_CACHE_SIZE MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 37 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐28 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 4 (PVR4) ビッ ト 名前 説明 値 0 ICU 命令キ ャ ッ シ ュ を使用 C_USE_ICACHE 1:5 ICTS 命令キ ャ ッ シ ュ タ グ サ イ ズ C_ADDR_TAG_BITS 6 予約 7 ICW 命令キ ャ ッ シ ュ 書 き 込みを許可 C_ALLOW_ICACHE_WR 8:10 ICLL 2 を底 と す る 対数の命令キ ャ ッ シ ュ ラ イ ンの長 さ log2(C_ICACHE_LINE_LEN) 11:15 ICBS 2 を底 と す る 対数の命令キ ャ ッ シ ュ バ イ ト サ イ ズ log2(C_CACHE_BYTE_SIZE) 16 IAU 命令キ ャ ッ シ ュ が、 キ ャ ッ シ ュ 可能範囲内のすべ ての メ モ リ ア ク セ ス に対 し て使用 さ れ る C_ICACHE_ALWAYS_USED 17:18 予約 19:21 ICV 命令キ ャ ッ シ ュ ビ ク テ ィ ム 0-3 : C_ICACHE_VICTIMS = 0,2,4,8 22:23 ICS 命令キ ャ ッ シ ュ ス ト リ ーム C_ICACHE_STREAMS 24 IFTL 命令キ ャ ッ シ ュ タ グは分散 RAM を使用 C_ICACHE_FORCE_TAG_LUTRAM 25 ICDW 命令キ ャ ッ シ ュ デー タ 幅 C_ICACHE_DATA_WIDTH > 0 26:31 予約 1 0 0 表 2‐29 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 5 (PVR5) ビッ ト 名前 説明 値 0 DCU デー タ キ ャ ッ シ ュ を使用 C_USE_DCACHE 1:5 DCTS デー タ キ ャ ッ シ ュ タ グ サ イ ズ C_DCACHE_ADDR_TAG 6 予約 7 DCW デー タ キ ャ ッ シ ュ 書 き 込みを許可 C_ALLOW_DCACHE_WR 8:10 DCLL 2 を底 と す る 対数のデー タ キ ャ ッ シ ュ ラ イ ンの長 さ log2(C_DCACHE_LINE_LEN) 11:15 DCBS 2 を底 と す る 対数のデー タ キ ャ ッ シ ュ バ イ ト サ イズ log2(C_DCACHE_BYTE_SIZE) 16 DAU デー タ キ ャ ッ シ ュ が、 キ ャ ッ シ ュ 可能範囲内のす べての メ モ リ ア ク セ ス に対 し て使用 さ れ る C_DCACHE_ALWAYS_USED 17 DWB デー タ キ ャ ッ シ ュ ポ リ シーは ラ イ ト バ ッ ク C_DCACHE_USE_WRITEBACK 18 予約 19:21 DCV 22:23 予約 24 DFTL デー タ キ ャ ッ シ ュ タ グは分散 RAM を使用 C_DCACHE_FORCE_TAG_LUTRAM 25 DCDW デー タ キ ャ ッ シ ュ デー タ 幅 C_DCACHE_DATA_WIDTH > 0 1 0 デー タ キ ャ ッ シ ュ ビ ク テ ィ ム 0-3 : C_DCACHE_VICTIMS = 0,2,4,8 0 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 38 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐29 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 5 (PVR5) (続き) ビッ ト 名前 26 AXI4DC 27:31 予約 説明 値 デー タ キ ャ ッ シ ュ AXI イ ン タ ーフ ェ イ ス は、AXI4 C_M_AXI_DC_EXCLUSIVE_ACCESS プ ロ ト コ ル を使用 (排他的ア ク セ ス のサポー ト あ り) 0 表 2‐30 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 6 (PVR6) ビッ ト 0:31 名前 ICBA 説明 命令キ ャ ッ シ ュ ベース ア ド レ ス 値 C_ICACHE_BASEADDR 表 2‐31 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 7 (PVR7) ビッ ト 0:31 名前 ICHA 説明 命令キ ャ ッ シ ュ ハ イ ア ド レ ス 値 C_ICACHE_HIGHADDR 表 2‐32 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 8 (PVR8) ビッ ト 0:31 名前 DCBA 説明 デー タ キ ャ ッ シ ュ ベース ア ド レ ス 値 C_DCACHE_BASEADDR 表 2‐33 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 9 (PVR9) ビッ ト 0:31 名前 DCHA 説明 デー タ キ ャ ッ シ ュ ハ イ ア ド レ ス 値 C_DCACHE_HIGHADDR 表 2‐34 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 10 (PVR10) ビッ ト 0:7 8:31 名前 ARCH 説明 タ ーゲ ッ ト アーキ テ ク チ ャ : 0xF 0x10 0x11 = = = 0x12 = 0x13 0x14 = = パ ラ メ ー タ ー C_FAMILY で定義 Virtex-7、 防衛グ レー ド Virtex-7 Q Kintex™-7、 防衛グ レー ド Kintex-7 Q Artix™-7、 オー ト モーテ ィ ブ Artix-7、 防 衛グ レー ド Artix-7 Q Zynq™-7000、 オ ー ト モ ー テ ィ ブ Zynq7000 防衛グ レー ド Zynq-7000 Q UltraScale™ Virtex UltraScale Kintex 0 予約 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 値 japan.xilinx.com 39 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐35 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 11 (PVR11) ビッ ト 0:1 名前 MMU 説明 値 C_USE_MMU MMU を使用 : 0 = なし 1 = ユーザー モー ド 2 = 保護 3 = 仮想 2:4 ITLB 命令シ ャ ド ウ TLB サ イ ズ log2(C_MMU_ITLB_SIZE) 5:7 DTLB デー タ シ ャ ド ウ TLB サ イ ズ log2(C_MMU_DTLB_SIZE) 8:9 TLBACC TLB レ ジ ス タ ア ク セ ス : C_MMU_TLB_ACCESS 0 = 最小 1 = 読み出 し 2 = 書き 込み 3 = フル 10:14 ZONES メ モ リ 保護ゾーンの数 C_MMU_ZONES 15 PRIVINS 特権命令 : 0 = フル保護 1 = ス ト リ ーム命令を許可 C_MMU_PRIVILEGED_INSTR 16:16 予約 将来使用す る ために予約 0 17:31 RSTMSR MSR の リ セ ッ ト 値 C_RESET_MSR 表 2‐36 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 12 (PVR12) ビッ ト 0:31 名前 VECTORS 説明 MicroBlaze ベ ク タ ーの位置 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 値 C_BASE_VECTORS 40 第 2 章 : MicroBlaze アーキテ ク チ ャ パイ プ ラ イ ン アーキテ ク チ ャ MicroBlaze 命令実行はパ イ プ ラ イ ン処理 さ れてい ます。 ほ と ん ど の命令の場合、 各段が完了する のに 1 ク ロ ッ ク サ イ ク ルかか り ます。 つま り 、 特定の命令が完了す る のに必要な ク ロ ッ ク サ イ ク ル数は、 パ イ プ ラ イ ンの段数 と 等 し く な り 、 各サ イ ク ルで命令が 1 つ完了 し ます。 実行段で完了する のに複数の ク ロ ッ ク サ イ ク ルが必要にな る 命令 も い く つ かあ り ます。 こ の場合は、 パ イ プ ラ イ ン を ス ト ール さ せます。 遅い メ モ リ か ら 実行す る 場合、 命令フ ェ ッ チには複数サ イ ク ルかか る こ と があ り ます。 こ の追加レ イ テ ン シは、 パ イ プ ラ イ ンの効率に直接影響 し ます。 MicroBlaze は、 その よ う なマルチサ イ ク ル命令 メ モ リ レ イ テ ン シの影響を抑え る 命令プ リ フ ェ ッ チ バ ッ フ ァ ーを イ ンプ リ メ ン ト し ます。実行段でマルチサ イ ク ル命令に よ っ てパ イ プ ラ イ ンが ス ト ー ル し てい る 間、 プ リ フ ェ ッ チ バ ッ フ ァ ーは順次命令を ロ ー ド し 続け ます。 パ イ プ ラ イ ンが実行を再開する と 、 命令 メ モ リ ア ク セ ス が完了する のを待たずに、 フ ェ ッ チ段はプ リ フ ェ ッ チ バ ッ フ ァ ーか ら 直接新 し い命令を ロ ー ド し ます。 実行中に命令が変更 さ れ る 場合 (自己変更コ ー ド な ど)、 変更 さ れた命令が実行 さ れ る 前に、 古い未変更の命令が含ま れていない よ う にす る ため、 プ リ フ ェ ッ チ バ ッ フ ァ ーを空にす る 必要があ り ます。 BRI 4 な ど、 同期分岐命令を使用 す る こ と も 可能ですが、 MBAR 命令を使用する こ と を推奨 し ます。 3 段パイ プ ラ イ ン C_AREA_OPTIMIZED が 1 に設定 さ れてい る 場合、 ハー ド ウ ェ ア コ ス ト を最小限に抑え る ため、 パ イ プ ラ イ ンは、 フ ェ ッ チ、 デ コ ー ド 、 実行の 3 段に分け ら れます。 命令 1 サイ クル 1 サイ クル 2 サイ クル 3 フェ ッチ デコー ド 実行 フェ ッチ 命令 2 サイ クル 4 サイ クル 5 サイ クル 6 デコ ー ド 実行 実行 実行 フェ ッチ デコー ド ス ト ール ス ト ール 命令 3 サイ クル 7 実行 5 段パイ プ ラ イ ン C_AREA_OPTIMIZED が 0 に設定 さ れてい る 場合、 パ フ ォ ーマ ン ス を最大にす る ため、 パ イ プ ラ イ ンは、 フ ェ ッ チ (IF)、 デ コ ー ド (OF)、 実行 (EX)、 ア ク セ ス メ モ リ (MEM)、 お よ び ラ イ ト バ ッ ク (WB). の 5 段に分け ら れます。 命令 1 命令 2 サイ クル 1 サイ クル 2 サイ ク ル3 サイ クル 4 サイ クル 5 IF OF EX MEM WB IF OF EX IF OF 命令 3 サイ クル 6 サイ クル 7 サイ クル 8 MEM MEM MEM WB EX ス トー ル ス トー ル MEM サイ クル 9 WB 分岐 通常、 フ ェ ッ チお よ びデ コ ー ド 段の命令は (プ リ フ ェ ッ チ バ ッ フ ァ ー も )、 分岐 し てい る 分岐を実行す る と き に、 フ ラ ッ シ ュ さ れます。 フ ラ ッ シ ュ 後、 フ ェ ッ チ パ イ プ ラ イ ン段は、 算出 さ れた分岐ア ド レ ス か ら の新 し い命令で リ ロ ー ド さ れます。 MicroBlaze で分岐 し てい る 分岐は実行に 3 ク ロ ッ ク サ イ ク ル要 し ます。 その う ち 2 サ イ ク ルは、 パ イ プ ラ イ ン を再度埋め る のに必要です。 こ の レ イ テ ン シ オーバーヘ ッ ド を抑え る ため、 MicroBlaze は遅延ス ロ ッ ト のあ る 分岐をサポー ト し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 41 第 2 章 : MicroBlaze アーキテ ク チ ャ 遅延ス ロ ッ ト 分岐 し てい る 遅延ス ロ ッ ト のあ る 分岐を実行す る 場合は、MicroBlaze の フ ェ ッ チ パ イ プ ラ イ ン段のみが フ ラ ッ シ ュ さ れ、 デ コ ー ド 段の命令 (分岐遅延ス ロ ッ ト ) を完了で き る よ う にな り ます。 こ のテ ク ニ ッ ク に よ り 、 分岐ペナルテ ィ を 2 ク ロ ッ ク サ イ ク ルか ら 1 ク ロ ッ ク サ イ ク ルに低減す る こ と がで き ます。 遅延ス ロ ッ ト のあ る 分岐命令には、 命令 ニーモニ ッ ク に D が付いてい ま す。 た と えば、 BNE 命令は後に続 く 命令 (遅延 ス ロ ッ ト がない) を実行 し ませんが、 BNED は、 制御が分岐位置に送 ら れ る 前に、 次の命令を実行 し ます。 遅延 ス ロ ッ ト には、 IMM、 分岐、 ま たはブ レー ク の命令が含 ま れていてはいけ ま せん。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了する ま で先送 り さ れます。 リ カバ リ 可能な例外を引 き 起 こ す可能性のあ る 命令 (ア ラ イ ン さ れていない ワ ー ド やハーフ ワ ー ド の ロ ー ド お よ びス ト ア) は遅延ス ロ ッ ト で処理 さ れます。 遅延ス ロ ッ ト で例外が発生す る し ESR[DS] ビ ッ ト がセ ッ ト さ れ る と 、 例外ハ ン ド ラ ーがその実行を分岐先に戻 さ なければな り ません (特殊レ ジ ス タ BTR に格納)。 ESR[DS] ビ ッ ト がセ ッ ト さ れ てい る 場合、 レ ジ ス タ R17 は無効です (そ う でない場合は、 例外を引 き 起 こ す命令の後に続いてア ド レ ス が含まれま す)。 分岐先キ ャ ッ シ ュ 分岐パフ ォーマ ン ス を向上 さ せ る ため、 MicroBlaze には、 分岐予測機能のあ る 分岐先キ ャ ッ シ ュ (BTC) があ り ます。 こ の BTC が イ ネーブルにな っ てい る と 、 正 し く 予測 さ れた直近の分岐ま たは戻 り 命令にはオーバーヘ ッ ド が発生 し ません。 BTC は、 命令が初めて処理 さ れた と き 、 直近の分岐お よ び戻 り 命令の タ ーゲ ッ ト ア ド レ ス を保存 し ます。 次にその 命令が処理 さ れ る と き は、 通常、 分岐先キ ャ ッ シ ュ にそのア ド レ ス が格納 さ れていて、 その分岐が分岐す る 場合は、 命令フ ェ ッ チ プ ロ グ ラ ム カ ウ ン タ ーがその格納 さ れてい る タ ーゲ ッ ト ア ド レ ス に変わ り ます。 条件な し 分岐お よ び 戻 り 命令は常に分岐 し ますが、 条件付 き 分岐は、 分岐すべ き でない も のを分岐 さ せて し ま う のを避け る ため、 分岐予 測を使用 し ます。 メ モ リ バ リ ア (MBAR 0) ま たは同期分岐 (BRI 4) が実行 さ れ る と 、BTC は ク リ アにな り ます。た と え分岐 し ていて も 、 分岐命令のす ぐ後に メ モ リ バ リ ア ま たは同期分岐が続 く と き に も 、 BTC は ク リ アにな り ます。 間違っ て BTC を ク リ アにす る のを避け る ため、 分岐命令のす ぐ後に メ モ リ バ リ ア ま たは同期分岐を配置 し ないで く だ さ い。 分岐予測で間違っ て予測 さ れて し ま う ケース には、 次の よ う な 3 つのケース があ り ます。 • 分岐 し てはいけないはずの条件付 き 分岐が、 実際に分岐 し てい る 。 • 分岐 し てい る べ き 条件付 き 分岐が分岐 し ていない。 • 戻 り 命令の タ ーゲ ッ ト ア ド レ ス が間違っ てい る ( こ れは コ ー ド の別の位置か ら 読み出 さ れた関数か ら 戻 る と き に発生す る 可能性があ り ます)。 こ う し た ケース のすべては、 分岐ま たは戻 り 命令が実行段に達 し た と き に検出お よ び訂正 さ れ、 分岐予測ビ ッ ト ま た は タ ーゲ ッ ト ア ド レ ス は、 実際の命令の動作を反映 さ せ る ため、 BTC でア ッ プデー ト さ れ ま す。 こ の訂正は、 2 ク ロ ッ ク サ イ ク ルのペナルテ ィ にな り ます。 BTC のサ イ ズ は、 C_BRANCH_TARGET_CACHE_SIZE で選択で き ま す。 デ フ ォ ル ト の推奨設定には、 1 ブ ロ ッ ク RAM が使用 さ れ、 こ れで 512 エン ト リ にな り ます。 64 以下のエン ト リ を選択する 場合は、 BTC の イ ンプ リ メ ン ト に 分散 RAM が使用 さ れます。 それ以外の場合はブ ロ ッ ク RAM が使用 さ れます。 BTC がブ ロ ッ ク RAM を使用 し 、 C_FAULT_TOLERANT が 1 に設定 さ れてい る 場合は、 ブ ロ ッ ク RAM はパ リ テ ィ で 保護 さ れます。 パ リ テ ィ エ ラ ーが発生 し た場合は、 分岐は予測 さ れません。 こ のケース でエ ラ ーを重ね る のを避け る には、 同期分岐で定期的に BTC を ク リ アにす る 必要があ り ます。 分岐先キ ャ ッ シ ュ は C_USE_BRANCH_TARGET_CACHE が 1、 C_AREA_OPTIMIZED が 0 に設定 さ れてい る と き に 使用で き ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 42 第 2 章 : MicroBlaze アーキテ ク チ ャ メ モ リ アーキテ ク チ ャ MicroBlaze は、 命令お よ びデー タ のア ク セ ス がそれぞれ別のア ド レ ス空間で行われ る ハーバー ド メ モ リ アーキ テ ク チ ャ で イ ンプ リ メ ン ト さ れてい ます。各ア ド レ ス空間は 32 ビ ッ ト です (つま り 、命令 と デー タ メ モ リ それぞれに 4GB ま で処理す る と い う こ と です)。命令お よ びデー タ メ モ リ の範囲は、両方を同 じ 物理 メ モ リ にマ ッ ピ ン グ し てオーバー ラ ッ プ さ せ る こ と がで き ます。 後者は ソ フ ト ウ ェ ア デバ ッ グに便利です。 MicroBlaze の命令お よ びデー タ イ ン タ ーフ ェ イ ス はど ち ら も 、 幅はデフ ォ ル ト 32 ビ ッ ト で、 ど のエンデ ィ ア ンが設 定 さ れてい る かに よ っ て異な り ますが、 ビ ッ グ エンデ ィ ア ン、 リ ト ル エ ンデ ィ ア ン、 ビ ッ ト 反転フ ォーマ ッ ト を使 用 し ます。 MicroBlaze は、 デー タ メ モ リ へのア ク セ ス に ワー ド 、 ハーフ ワ ー ド 、 バ イ ト をサポー ト し ます。 ア ラ イ ン さ れていない例外をサポー ト す る よ う プ ロ セ ッ サが コ ン フ ィ ギ ュ レー ト さ れていない限 り 、デー タ ア ク セ ス はア ラ イ ン さ れてい る 必要があ り ます (ワ ー ド ア ク セ ス な ら ワー ド の境界で、 ハーフ ワー ド な ら ハーフ ワー ド の境界 でア ラ イ ン さ れてい る 必要があ る )。 命令ア ク セ ス はすべて ワー ド でア ラ イ ン さ れてい る 必要があ り ます。 MicroBlaze は、 命令プ リ フ ェ ッ チ バ ッ フ ァ ーお よ び ( イ ネーブルにな っ ていれば) 命令キ ャ ッ シ ュ ス ト リ ーム を使用 し て、 パフ ォーマ ン ス を向上 さ せ る ため、 命令をプ リ フ ェ ッ チ し ます。 物理 メ モ リ の終わ り を越え て メ モ リ が命令を プ リ フ ェ ッ チす る と 、 命令バ ス エ ラ ーやプ ロ セ ッ サ ス ト ールが発生す る 可能性が あ る た め、 そ う い う 命令 を プ リ フ ェ ッ チす る のを防 ぐ ため、 物理 メ モ リ の終わ り に近い位置に命令を配置 し ない よ う にす る 必要があ り ます。 命令プ リ フ ェ ッ チ バ ッ フ ァ ーには 16 バ イ ト のマージ ンが必要で、 命令キ ャ ッ シ ュ ス ト リ ーム を使用する と 、 さ ら に 2 つの キ ャ ッ シ ュ ラ イ ン (32、 64、 ま たは 128 バ イ ト ) が追加 さ れます。 MicroBlaze は、 I/O へのデー タ ア ク セ ス と メ モ リ へのデー タ ア ク セ ス を分け ません ( メ モ リ マ ッ プ さ れた I/O を使用 )。 メ モ リ ア ク セ ス には最高 3 つの イ ン タ ーフ ェ イ ス があ り ます。 • ロ ーカル メ モ リ バ ス (LMB) • ペ リ フ ェ ラ ル ア ク セ ス用の AXI4 (Advanced eXtensible Interface) • キ ャ ッ シ ュ ア ク セ ス用の AXI4 ま たは AXI4 コ ヒ ーレ ン シ拡張 (ACE) LMB メ モ リ ア ド レ ス範囲は、 AXI4 の範囲 と オーバー ラ ッ プ さ せ る こ と はで き ません。 C_ENDIANNESS パ ラ メ ー タ ーは常に リ ト ル エンデ ィ ア ンに設定 さ れてい ます。 ロ ーカル メ モ リ (LMB) へのア ク セ スお よ びキ ャ ッ シ ュ 読み出 し ヒ ッ ト に対 し 、 MicroBlaze には 1 サ イ ク ル レ イ テ ン シがあ り ます。 例外は、 C_AREA_OPTIMIZED が 1 で、 デー タ 側のア ク セ スお よ びデー タ キ ャ ッ シ ュ 読み出 し ヒ ッ ト に 2 ク ロ ッ ク サ イ ク ル必要な場合、 ま た C_FAULT_TOLERANT が 1 に設定 さ れていて、 LMB へのバ イ ト 書 き 込 みお よ びハーフ ワー ド 書 き 込みに 2 ク ロ ッ ク サ イ ク ル必要な場合です。 デー タ キ ャ ッ シ ュ 書 き 込みレ イ テ ン シは、 C_DCACHE_USE_WRITEBACK に左右 さ れます。 C_DCACHE_USE_WRITEBACK が 1 に設定 さ れてい る 場合、 書き 込みレ イ テ ン シは通常 1 サ イ ク ルです (キ ャ ッ シ ュ が メ モ リ にア ク セ スす る 場合はレ イ テ ン シは増え る )。 C_DCACHE_USE_WRITEBACK が 0 に設定 さ れてい る 場合、 書 き 込みレ イ テ ン シは通常 2 サ イ ク ルです ( メ モ リ コ ン ト ロ ー ラ ーのポ ス テ ッ ド 書 き 込みバ ッ フ ァ ーがいっぱいの場 合はレ イ テ ン シは増え る )。 MicroBlaze の命令お よ びデー タ のキ ャ ッ シ ュ は、4、8、 ま たは 16 ワ ー ド のキ ャ ッ シ ュ ラ イ ン を使用す る よ う コ ン フ ィ ギ ュ レー ト で き ます。 長いキ ャ ッ シ ュ ラ イ ン を使用す る 場合、 よ り 多 く のバ イ ト がフ ェ ッ チ さ れ、 一般的には順次ア ク セ ス パ タ ーン で ソ フ ト ウ ェ アのパフ ォーマ ン ス を向上 さ せます。 し か し 、 よ り ラ ン ダ ム な ア ク セ ス パ タ ーンの ソ フ ト ウ ェ アだ と 、 パフ ォーマ ン ス は落ち る 可能性があ り ます。 利用可能な キ ャ ッ シ ュ ラ イ ン数が少ないため、 キ ャ ッ シ ュ ヒ ッ ト 率が低 く な る ため、 パフ ォーマ ン ス が低下 し ます。 さ ま ざ ま な メ モ リ イ ン タ ーフ ェ イ ス の詳細については、 第 3 章 「MicroBlaze 信号 イ ン タ ーフ ェ イ ス の説明」 を参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 43 第 2 章 : MicroBlaze アーキテ ク チ ャ 特権命令 次の MicroBlaze 命令は特権命令です。 • GET、 GETD、 PUT、 PUTD (明示的に許可 さ れてい る 場合を除 く ) • WIC、 WDC • MTS • MSRCLR、 MSRSET (C ビ ッ ト のみが影響を受け る 場合を除 く ) • BRK • RTID、 RTBD、 RTED • BRKI (物理ア ド レ ス C_BASE_VECTORS + 0x8 ま たは C_BASE_VECTORS + 0x18 にジ ャ ンプす る 場合を除 く ) • SLEEP ユーザー モー ド で こ れ ら の命令を実行 し よ う と する と 、 特権命令例外が発生 し ます。 パ ラ メ ー タ ー C_MMU_PRIVILEGED_INSTR を 1 に設定 し てい る 場合、 命令 GET、 GETD、 PUT、 お よ び PUTD は特 権命令 と はみな さ れず、 ユーザー モー ド で実行す る こ と がで き ます。 し か し 、 そ う す る と アプ リ ケーシ ョ ンが互いに 干渉 し 合 う こ と にな っ て し ま う ので、 パフ ォーマ ン ス上の理由で ど う し て も 必要でない限 り は、 こ の設定に し ないで く だ さ い。 ユーザー モー ド お よ び仮想モー ド か ら 離れ る には、 次の 6 つの方法があ り ます。 1. ハー ド ウ ェ ア生成 さ れた リ セ ッ ト (デバ ッ グ リ セ ッ ト を含む) 2. ハー ド ウ ェ ア例外 3. マ ス ク で き ないブ レー ク ま たはハー ド ウ ェ ア ブ レー ク 4. 割 り 込み 5. ユーザー ベ ク タ ー例外を実行す る ため 「BRALID Re,C_BASE_VECTORS + 0x8」 を実行 6. ソ フ ト ウ ェ ア ブ レー ク 命令 BRKI C_BASE_VECTORS + 0x18 にジ ャ ンプ を実行 し て、 物理ア ド レ ス C_BASE_VECTORS + 0x8 ま たは ハー ド ウ ェ ア生成 さ れた リ セ ッ ト を除 き 、 上記のすべての方法で、 ユーザー モー ド お よ び仮想モー ド ス テー タ ス は、 MSR UMS お よ び VMS ビ ッ ト に保存 さ れます。 ア プ リ ケ ー シ ョ ン ( ユ ー ザ ー モ ー ド ) プ ロ グ ラ ム は、 BRALID ま た は BRKI 命令 を 使用 し て、 物理 ア ド レ ス C_BASE_VECTORS + 0x8 にジ ャ ンプ し て、 シ ス テ ム サービ ス ルーチン (特権モー ド プ ロ グ ラ ム) へ制御を移行 さ せ ます。 こ の命令を実行す る と 、 シ ス テ ム コ ール例外が発生 し ます。 例外ハン ド ラ ーは、 ど のシ ス テ ム サービ ス ルー チン を呼び出すか を判断 し 、 そのサービ ス を呼び出すための権限が呼び出 し を し てい る アプ リ ケーシ ョ ンにあ る か ど う か確認 し ます。 権限が認め ら れた場合は、 例外ハン ド ラ ーは、 アプ リ ケーシ ョ ン プ ロ グ ラ ムの代わ り に、 シ ス テ ム サービ ス ルーチンへの実際のプ ロ シージ ャ コ ールを実行 し ます。 シ ス テ ム サービ ス ルーチンの実行環境を設定す る には、 プ ロ ロ ーグ命令を実行す る 必要があ り ます。 こ れ ら の命令 は、 通常、 プ ロ シージ ャ 情報の (ア ク テ ィ ベーシ ョ ン レ コ ー ド ) の保持、 ポ イ ン タ ーのア ッ プデー ト お よ び初期化、 揮 発性レ ジ ス タ (シ ス テ ム サービ ス ルーチンが使用する レ ジ ス タ ) の保存を行 う ス ト レージ を作成 し ます。 実行可能な モジ ュ ールを作成す る と き 、 リ ン カーでプ ロ ロ ーグ コ ー ド を挿入す る か、 ま たは、 シ ス テ ム コ ール割 り 込みハン ド ラ ーかシ ス テ ム ラ イ ブ ラ リ ルーチンのど ち ら かに ス タ ブ コ ー ド と し てプ ロ ロ ーグ コ ー ド を含め る こ と がで き ます。 シ ス テ ム サービ ス ルーチンか ら の リ タ ーンは、前出のプ ロ セ ス の逆にな り ます。エ ピ ロ ーグ コ ー ド は、ア ク テ ィ ベー シ ョ ン レ コ ー ド を逆に し て割 り 当て を解放 し 、 ポ イ ン タ ーを元に戻 し 、 揮発性レ ジ ス タ を元に戻 し ます。 割 り 込みハ ン ド ラ ーは、 アプ リ ケーシ ョ ンに戻 る ために例外命令 (RTED) か ら の リ タ ーン を実行 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 44 第 2 章 : MicroBlaze アーキテ ク チ ャ 仮想 メ モ リ 管理 MicroBlaze で実行 し てい る プ ロ グ ラ ムは、 フ ラ ッ ト な 4GB ア ド レ ス空間にア ク セ スす る ため、 実効ア ド レ ス を使用 し ます。 プ ロ セ ッ サは こ のア ド レ ス空間を、 ど の変換モー ド が指定 さ れてい る かに よ り 、 次のいずれかの方法で解釈 し ます。 • リ アル モー ド の場合、 実効ア ド レ ス は物理 メ モ リ に直接ア ク セ スする ために使用 さ れます。 • 仮想モー ド の場合、 プ ロ セ ッ サの仮想 メ モ リ 管理ハー ド ウ ェ アに よ り 、 実効ア ド レ スは物理ア ド レ スへ変換 さ れ ます。 仮想モー ド の場合、 シ ス テ ム ソ フ ト ウ ェ アは、 物理ア ド レ ス空間の任意の位置にプ ロ グ ラ ムお よ びデー タ を移動 さ せ る こ と がで き ま す。 ア ク テ ィ ブなプ ロ グ ラ ムお よ びデー タ に空間が必要にな る と 、 シ ス テ ム ソ フ ト ウ ェ アが非ア ク テ ィ ブなプ ロ グ ラ ムお よ びデー タ を物理 メ モ リ か ら 移 し ます。 こ の位置換えに よ り 、 実際にシ ス テ ムに イ ンプ リ メ ン ト さ れてい る よ り も 多 く の メ モ リ が存在 し てい る よ う にプ ロ グ ラ ムには見え ます。 シ ス テ ムにあ る 物理 メ モ リ 量の制限内で、 プ ロ グ ラ ム を う ま く 実行す る こ と がで き る よ う にな り ます。 ど の物理 メ モ リ ア ド レ ス がほかの ソ フ ト ウ ェ ア プ ロ セ スやハー ド ウ ェ ア デバ イ ス に割 り 当て ら れてい る か を プ ロ グ ラ マーが知っ てお く 必要はあ り ません。 プ ロ グ ラ ムに見え てい る ア ド レ ス は、 プ ロ セ ッ サに よ り 、 適切な物理 ア ド レ ス に変換 さ れます。 仮想モー ド だ と 、 メ モ リ 保護を さ ら に制御す る こ と がで き ます。 1KB 程度の メ モ リ のブ ロ ッ ク は、 個別に不正ア ク セ ス か ら 保護す る こ と がで き ま す。 メ モ リ の保護 と 位置換えに よ り 、 シ ス テ ム ソ フ ト ウ ェ アでマルチ タ ス ク 機能を サ ポー ト す る こ と がで き ます。 複数のプ ロ グ ラ ムは同時実行 し てい る か、 ま たはほぼ同時に近い状態で実行 し てい る よ う に見え ます。 MicroBlaze では、 C_USE_MMU が 3 (仮想)、 C_AREA_OPTIMIZED が 0 に設定 さ れてい る と き に、 メ モ リ 管理ユニ ッ ト (MMU) に よ っ て、 仮想モー ド が イ ン プ リ メ ン ト さ れ ます。 MMU は、 実効ア ド レ ス を物理ア ド レ ス にマ ッ ピ ン グ し 、 メ モ リ 保護をサポー ト し ます。 こ れ ら の機能を使用す る こ と に よ り 、 シ ス テ ム ソ フ ト ウ ェ アはデマ ン ド ページ の仮想 メ モ リ お よ びほかの メ モ リ 管理機能を イ ンプ リ メ ン ト す る こ と がで き ます。 MicroBlaze の MMU の イ ンプ リ メ ン ト は PowerPC™ 405 をベース に し てい ます。詳細は、『PowerPC プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド 』 (UG011) を参照 し て く だ さ い。 MMU の機能は次の よ う に ま と め ら れます。 • 実効ア ド レ ス を物理ア ド レ ス に変換 • ア ド レ ス変換中にページ レベルのア ク セ ス を コ ン ト ロ ール • ゾーン を使用 し た、 追加仮想モー ド 保護を提供 • 命令/ア ド レ ス、 デー タ /ア ド レ ス の変換お よ び保護を個別に コ ン ト ロ ール • 1kB、 4kB、 64kB、 1MB、 4MB、 16MB の 8 つのページ サ イ ズ をサポー ト 。 ページ サ イ ズの ど の組み合わせで も シ ス テ ム ソ フ ト ウ ェ アで使用で き ます。 • ページ置 き 換え ス ト ラ テジ を ソ フ ト ウ ェ アで コ ン ト ロ ール リ アル モー ド プ ロ セ ッ サが メ モ リ を フ ェ ッ チ し 、 ロ ー ド ま たは ス ト ア命令でデー タ にア ク セ スす る と き 、 プ ロ セ ッ サは メ モ リ を参 照 し ます。 プ ロ セ ッ サで計算 さ れ る 32 ビ ッ ト の実効ア ド レ ス を使用 し て、 プ ロ グ ラ ムは メ モ リ ロ ケーシ ョ ン を参照 し ます。 リ アル モー ド が イ ネーブルにな っ てい る 場合、 物理ア ド レ ス は実効ア ド レ ス と 同 じ にな り 、 プ ロ セ ッ サはそ れを使用 し て、 物理 メ モ リ にア ク セ ス し ます。 プ ロ セ ッ サ リ セ ッ ト の後、 プ ロ セ ッ サは リ アル モー ド で動作 し ます。 リ アル モー ド は、 MSR の VM ビ ッ ト を ク リ アに し て、 イ ネーブルにす る こ と も で き ます。 物理 メ モ リ のデー タ ア ク セ ス ( ロ ー ド お よ びス ト ア) は、 実効ア ド レ ス を使用 し て リ アル モー ド で実行 さ れます。 リ アル モー ド では、 シ ス テ ム ソ フ ト ウ ェ アで仮想ア ド レ ス変換はで き ませんが、 C_USE_MMU > 1 (ユーザー モー ド ) お よ び C_AREA_OPTIMIZED = 0 の と き に、 フ ル メ モ リ ア ク セ ス保護は イ ン プ リ メ ン ト さ れて使用可能にな り ま す。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 45 第 2 章 : MicroBlaze アーキテ ク チ ャ リ アル モー ド の メ モ リ マネージ ャ ーの イ ンプ リ メ ン テーシ ョ ンは、 仮想モー ド の も の よ り も 簡単です。 リ アル モー ド は、 ア ク セ ス保護が必要で、 仮想ア ド レ ス変換は不要な と き 、 簡単なエンベデ ッ ド 環境での メ モ リ 管理の ソ リ ュ ー シ ョ ン と し て適切です。 仮想モー ド 仮想モー ド では、 図 2-18 で説明 さ れてい る プ ロ セ ス を使用 し 、 プ ロ セ ッ サが実効ア ド レ ス を物理ア ド レ ス に変換 し ます。 仮想モー ド は、 MSR の VM ビ ッ ト を セ ッ ト し て、 イ ネーブルにす る こ と がで き ます。 0 24 31 Process ID Register PID n 0 Effective Page Number 0 8 PID 31 32-Bit Effective Address Offset n+8 Effective Page Number 39 40-Bit Virtual Address Offset Translation Look-Aside Buffer (TLB) Look-Up 0 n Real Page Number 31 Offset 32-Bit Physical Address UG011_37_021302 図 2‐18 : 仮想モー ド のア ド レ ス変換 図 2-18 にあ る 各ア ド レ ス には、 ページ番号フ ィ ール ド と オ フ セ ッ ト フ ィ ール ド があ り ます。 ページ番号は、 MMU に よ っ て変換 さ れた ア ド レ ス部分です。 オ フ セ ッ ト は、 ページへのバ イ ト オ フ セ ッ ト で、MMU で変換 さ れてい ません。 仮想ア ド レ ス には、 プ ロ セ ス ID (PID) と 呼ばれ る 追加フ ィ ール ド があ り ます。 こ れは PID レ ジ ス タ か ら の情報です (プ ロ セ ス ID レ ジ ス タ の詳細は29を参照)。 PID と 実効ページ番号 (EPN) の組み合わせは、 仮想ページ番号 (VPN) と 呼ばれます。 値 n は、 表 2-37 にあ る よ う に、 ページ サ イ ズに よ っ て決め ら れます。 シ ス テ ム ソ フ ト ウ ェ アはページ変換テーブルを管理する のですが、 こ のテーブルには、 各仮想ページ を物理ページに 変換す る ために使用 さ れ る エン ト リ が含まれてい ます。 ページ変換エン ト リ で定義 さ れ る ページ サ イ ズで、 ページ番 号お よ びオ フ セ ッ ト フ ィ ール ド のサ イ ズが決ま り ます。 た と えば、 4kB のページ サ イ ズが使用 さ れ る 場合、 ページ 番号フ ィ ール ド は 20 ビ ッ ト で、 オ フ セ ッ ト フ ィ ール ド は 12 ビ ッ ト にな り ます。 こ の場合の VPN は 28 ビ ッ ト です。 その後、 最 も 頻繁に使用 さ れ る ページ変換が、 変換ル ッ ク アサ イ ド バ ッ フ ァ ー (TLB) に格納 さ れ ます。 仮想ア ド レ ス を変換す る と き 、 MMU は、 一致す る VPN (PID お よ び EPN) をページ変換エン ト リ の中か ら 検索 し ます。 テーブル のすべてのエ ン ト リ を検索す る のではな く 、 プ ロ セ ッ サ TLB に含ま れてい る エ ン ト リ のみを確認 し ます。 一致す る VPN のあ る ページ変換エン ト リ が検出 さ れ る と 、 対応す る 物理ページ番号がそのエン ト リ か ら 読み出 さ れ、 オ フ セ ッ ト と 組み合わせて 32 ビ ッ ト の物理ア ド レ ス に変換 し ます。 こ の物理ア ド レ ス はプ ロ セ ッ サが メ モ リ を参照す る と き に使用 さ れます。 シ ス テ ム ソ フ ト ウ ェ アは、 PID を使用 し て、 プ ロ セ ッ サ上で実行 し てい る ソ フ ト ウ ェ ア プ ロ セ ス ( タ ス ク 、 サブルー チン、 ス レ ッ ド ) を特定す る こ と がで き ます。 個々に コ ンパ イ ル さ れてい る プ ロ セ ス は、 互いにオーバー ラ ッ プす る 実効ア ド レ ス領域で動作す る 可能性があ り ます。 こ のオーバー ラ ッ プは、 マルチ タ ス ク 機能がサポー ト さ れてい る 場 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 46 第 2 章 : MicroBlaze アーキテ ク チ ャ 合は、 シ ス テ ム ソ フ ト ウ ェ アで解決す る 必要があ り ます。 PID を各プ ロ セ ス に割 り 当て る こ と で、 シ ス テ ム ソ フ ト ウ ェ アは、 各プ ロ セ ス を仮想ア ド レ ス空間の 1 領域に移動 さ せて、 オーバー ラ ッ プ を解決す る こ と がで き ます。 仮想 ア ド レ ス空間マ ッ ピ ン グは、 各プ ロ セ ス を物理ア ド レ ス空間に個別に変換 さ せ る こ と がで き ます。 ページ変換テーブル ページ変換テーブルは、 ソ フ ト ウ ェ ア で定義お よ び管理 さ れ る 、 ページ変換情報を含んだデー タ 構造です。 エ ンベ デ ッ ド シ ス テ ム アプ リ ケーシ ョ ン を タ ーゲ ッ ト に し た アーキ テ ク チ ャ 上の ト レー ド オ フ と し て、 ソ フ ト ウ ェ ア管理 のページ変換が必要にな り ます。 エ ンベデ ッ ド シ ス テ ムには、 厳 し く 管理 さ れた環境 と 、 アプ リ ケーシ ョ ン ソ フ ト ウ ェ ア を細か く 定義 し たセ ッ ト があ る こ と が多 く 、 そ う い う 環境では、 次の よ う な方法で、 各エンベデ ッ ド シ ス テ ム 用に仮想 メ モ リ 管理を最適化す る こ と がで き ます。 • ページ変換エン ト リ をすばや く 検索で き る よ う に、 ページ テーブル検索 (テーブル ウ ォー ク と も 言われ る ) の速 度を最大限にす る ため、 ページ変換テーブルを構成す る こ と がで き ます。 最 も 一般的なプ ロ セ ッ サは、 イ ンデ ッ ク ス テーブル (ページ テーブル サ イ ズが大 き く 、 簡単な検索方法) か、 ハ ッ シ ュ テーブル (ページ テーブル サ イ ズが小 さ く 、 複雑な検索方法) の ど ち ら か を イ ンプ リ メ ン ト し ます。 ソ フ ト ウ ェ アでテーブルを辿 る こ と で、 特 定のエンベデ ッ ド シ ス テ ムに合わせ、 ど んな組み合わせでテーブルで も 構成で き ます。 ページ テーブル サ イ ズ お よ びア ク セ ス時間の両方を最適化で き ます。 • アプ リ ケーシ ョ ン モジ ュ ール、 デバ イ ス ド ラ イ バー、 シ ス テ ム サービ ス ルーチン、 お よ びデー タ に対 し 、 ペー ジ を個別に使用す る こ と がで き ます。 個別にページ サ イ ズ を選択する こ と で、 フ ラ グ メ ン テーシ ョ ン (未使用の メ モ リ ) を低減 し て、 シ ス テ ム ソ フ ト ウ ェ ア が効率 よ く メ モ リ を使用す る こ と がで き ま す。 た と えば、 大 き な デー タ 構造な ら 16MB のページに、 小 さ な I/O デバ イ ス ド ラ イ バーな ら 1KB ページに割 り 当て る こ と がで き ま す。 • ページ変換が見つか ら ないケース を最小限に抑え る ため、 ページ置き 換え を調節する こ と がで き ます。 こ の後の セ ク シ ョ ン で説明す る よ う に、 最 も 頻繁に使用 さ れ る ページ変換は、 変換ル ッ ク アサ イ ド バ ッ フ ァ ー (TLB) に 格納 さ れ ます。 ど の変換が TLB に格納 さ れ、 新 し い変換が必要な場合、 ど の変換が置 き 換え ら れ る か を判断す る のは ソ フ ト ウ ェ アです。 ページ変換エ ン ト リ は常に TLB に格納 さ れた り 、 TLB か ら 移動 さ せた り と 、 転送 さ れてい ます。 その ス ラ ッ シ ン グ を避け る ため、 置き 換え ス ト ラ テジ を設定する こ と がで き ます。 ま た、 置 き 換え ス ト ラ テジは、 ク リ テ ィ カルなページ変換を置 き 換え ら れ る のを防ぐ ために、 設定す る こ と も で き ます。 こ れは ページ ロ ッ キ ン グ と も 呼ばれ る プ ロ セ ス です。 統合 さ れた 64 エン ト リ の TLB は、 ソ フ ト ウ ェ アに よ り 管理 さ れ、 MMU でア ク セ ス で き る 命令お よ びデー タ のペー ジ変換エン ト リ のサブセ ッ ト を キ ャ ッ シ ュ し ます。 シ ス テ ム メ モ リ のページ変換テーブルか ら エン ト リ を読み出 し 、 TLB にそれ を格納す る のは ソ フ ト ウ ェ アです。 次のセ ク シ ョ ン では、 統合 TLB を詳 し く 説明 し ま す。 内部的には、 C_MMU_ITLB_SIZE と C_MMU_DTLB_SIZE でそれぞれにサ イ ズ を を コ ン フ ィ ギ ュ レー ト し た命令お よ びデー タ の シ ャ ド ウ TLB も 含まれてい ます。 こ れ ら のシ ャ ド ウ TLB は、 プ ロ セ ッ サですべて管理 さ れ ( ソ フ ト ウ ェ アには透過的)、 統合 TLB と のア ク セ ス衝突を 最小限に抑え る ために使用 さ れます。 変換ル ッ ク アサイ ド バ ッ フ ァ ー 変換ル ッ ク アサ イ ド バ ッ フ ァ ー (TLB) は、MicroBlaze が仮想モー ド で実行 し ていて、 メ モ リ 保護お よ びス ト レージ制 御が行われてい る と き のア ド レ ス変換のために、 MMU に よ っ て使用 さ れます。 TLB 内の各エン ト リ には、 仮想ペー ジ (PID お よ び実効ページ番号) を特定 し 、 物理ページに変換 し 、 ページの保護特性を決め、 ページに関連付け ら れて い る ス ト レージ属性を指定す る ために必要な情報が含まれてい ます。 MicroBlaze の TLB は物理的に次の 3 つの TLB と し て イ ンプ リ メ ン ト さ れてい ます。 • 統合 TLB (UTLB) : 64 個のエン ト リ が含まれていて、 擬似連想型です。 命令ページお よ びデー タ ページの変換は ど の UTLB に も 格納で き ます。 UTLB の初期化お よ び管理は、 ソ フ ト ウ ェ アに よ っ て完全に行われます。 • 命令シ ャ ド ウ TLB (ITLB) : 命令ページ変換エン ト リ が含まれていて、 完全連想型です。 ITLB に格納 さ れ る ペー ジ変換エン ト リ は、 UTLB か ら 最近ア ク セ ス さ れた命令ページ変換です。 ITLB は、 命令変換 と UTLB ア ッ プデー ト 操作 と の間の衝突を最小限に抑え る のに使用 さ れます。 I TLB の初期化お よ び管理は、 ハー ド ウ ェ アに よ っ て 完全に行われ、 ソ フ ト ウ ェ アには透過的です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 47 第 2 章 : MicroBlaze アーキテ ク チ ャ • デー タ シ ャ ド ウ TLB (DTLB) : デー タ ページ変換エン ト リ が含まれていて、 完全連想型です。 DTLB に格納 さ れ るページ変換エン ト リ は、UTLB か ら 最近ア ク セ ス さ れたデー タ ページ変換です。DTLB は、デー タ 変換 と UTLB ア ッ プデー ト 操作 と の間の衝突を最小限に抑え る のに使用 さ れます。 DTLB の初期化お よ び管理は、 ハー ド ウ ェ アに よ っ て完全に行われ、 ソ フ ト ウ ェ アには透過的です。 図 2-19 は TLB の変換フ ロ ーを表 し てい ます。 I サイ ド の D サイ ド の 効ア ド レ ス 実効ア ド レ ス 変換デ ィ ス エ ー ブル (MSR[VM]=0) 変換 イ ネー ブル 変換 イ ネー ブル (MSR[VM]=1) 変換な し ル ッ ク ア ッ プ実行 ル ッ ク ア ッ プ実行 ITLB ヒ ッ ト (MSR[VM]=0) DTLB ITLB 変換な し 変換デ ィ ス エ ー ブル (MSR[VM]=1) ITLB ミ ス DTLB ミ ス DTLB ヒ ッ ト UTLB 実際ア ド レ スの抽出 (ITLB か ら ) 実際ア ド レ スの抽出 (DTLB か ら ) ル ッ ク ア ッ プ実行 UTLB ヒ ッ ト UTLB ミ ス I キャ ッ シュ I キャ ッ シュ ま たは D キ ャ ッ シ ュ ア ク セ スの継続 ア ク セ スの継続 実際ア ド レ スの抽出 I サ イ ド の TLB ミ ス (UTLB か ら ) ま たは D サ イ ド の TLB ミ ス 例外 ア ド レスを ITLB へ変換 ア ド レスを DTLB へ変換 図 2‐19 : TLB ア ド レ ス変換フ ロー MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 48 第 2 章 : MicroBlaze アーキテ ク チ ャ TLB エ ン ト リ フ ォ ーマ ッ ト 図 2-20 は TLB エン ト リ の フ ォーマ ッ ト を示 し てい ます。 各 TLB エン ト リ は 68 ビ ッ ト で、 TLBLO (デー タ エン ト リ と も 言われ る) お よ び TLBHI ( タ グ エン ト リ と も 言われ る ) と い う 2 部か ら 構成 さ れてい ます。 TLBLO 0 RPN 22 23 24 28 29 30 31 EX WR ZSEL W I M G 22 25 26 27 28 TLBHI 0 TAG SIZE V E U0 35 TID 図 2‐20 : TLB エ ン ト リ フ ォ ーマ ッ ト TLB エン ト リ の内容は、 31 ページの表 2-20 お よ び33 ページの表 2-21 で説明 さ れてい ます。 TLB エン ト リ 内のフ ィ ール ド は次の よ う に分類 さ れてい ます。 • 仮想ページの識別 (TAG、 SIZE、 V、 TID) : ページ変換エン ト リ を特定 し ます。 変換プ ロ セ ス中に仮想ページ番号 と 比較 さ れます。 • 物理ページの識別 (RPN、 SIZE) : 物理 メ モ リ の変換 さ れたページ を特定 し ます。 • ア ク セ ス制御 (EX、 WR、 ZSEL) : ページで許可 さ れ る ア ク セ ス タ イ プを指定 し 、 不正ア ク セ ス か ら ページ を保護 す る のに使用 さ れます。 • ス ト レージ属性 (W、 I、 M、 G、 E、 U0) : デー タ キ ャ ッ シ ュ のキ ャ ッ シ ン グ ポ リ シー ( ラ イ ト バ ッ ク や ラ イ ト ス ルー )、 ページがキ ャ ッ シ ュ 可能か ど う か、 バ イ ト の順序付け (エンデ ィ ア ンの設定) な ど の ス ト レージ制御属性 を指定 し ます。 表 2-37 は TLB エン ト リ の SIZE フ ィ ール ド と 、 変換 さ れたページ サ イ ズ と の関係を示 し てい ます。 ま た、 こ の表で は、 タ グ比較に ど のア ド レ ス ビ ッ ト が関与す る か、 ど のア ド レ ス ビ ッ ト がページ オ フ セ ッ ト と し て使用 さ れ る か、 物理ページ番号の ど のビ ッ ト が物理ア ド レ ス で使用 さ れ る か、ど の よ う にページ サ イ ズに よ っ て決ま る かが説明 さ れ てい ます。 表 2‐37 : ページ変換ビ ッ ト 範囲 (ページ サイ ズ別) SIZE (TLBHI フ ィ ール ド ) タ グ比較 ビ ッ ト 範囲 ページ オ フ セ ッ ト 物理ページ番号 RPN ビ ッ ト (0 に ク リ ア) 1KB 000 TAG[0:21] - Address[0:21] Address[22:31] RPN[0:21] - 4KB 001 TAG[0:19] - Address[0:19] Address[20:31] RPN[0:19] 20:21 16KB 010 TAG[0:17] - Address[0:17] Address[18:31] RPN[0:17] 18:21 64KB 011 TAG[0:15] - Address[0:15] Address[16:31] RPN[0:15] 16:21 256 KB 100 TAG[0:13] - Address[0:13] Address[14:31] RPN[0:13] 14:21 1MB 101 TAG[0:11] - Address[0:11] Address[12:31] RPN[0:11] 12:21 4MB 110 TAG[0:9] - Address[0:9] Address[10:31] RPN[0:9] 10:21 16MB 111 TAG[0:7] - Address[0:7] Address[8:31] RPN[0:7] 8:21 ページ サイ ズ MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 49 第 2 章 : MicroBlaze アーキテ ク チ ャ TLB ア ク セス MMU が仮想ア ド レ ス (PID と 実効ア ド レ ス の組み合わせ) を物理ア ド レ ス に変換す る 場合、 まず、 ページ変換エン ト リ を検索す る ため、 該当す る シ ャ ド ウ TLB を確認 し ます。 エ ン ト リ が見つかれば、 物理 メ モ リ へア ク セ スす る ため にそれが使用 さ れ ます。 エ ン ト リ が見つか ら な ければ、 MMU は今度は UTLB を確認 し ま す。 シ ャ ド ウ TLB ミ ス が あ っ て UTLB にア ク セ スす る 必要があ る と 、 その都度遅延が発生 し ます。 こ の ミ ス レ イ テ ン シは 2 か ら 32 サ イ ク ル の範囲にな り ます。DTLB と ITLB の両方が UTLB に同時にア ク セ スする 場合、DTLB のほ う が ITLB よ り も 優先 さ れ ます。 51 ページの図 2-21は、 シ ャ ド ウ TLB の 1 つま たは UTLB のページ変換エン ト リ を確認する と き の、 MMU の論理プ ロ セ ス を示 し てい ます。 TLB の有効エン ト リ はすべてチ ェ ッ ク さ れます。 TLB エン ト リ で次の条件がすべて満た さ れ る と 、 TLB ビ ッ ト にな り ます。 • エン ト リ が有効であ る • エン ト リ の TAG フ ィ ール ド が実効ア ド レ ス EPN と 一致す る (エン ト リ の SIZE フ ィ ール ド の制御の下) • エン ト リ の TID が PID と 一致す る 上記の条件のいずれかが満た さ れていない と 、 TLB ミ ス にな り ます。 TLB ミ ス が発生する と 、 次の よ う な例外が発生 し ます。 TID の値が 0x00 だ と 、 TID と PID の比較が MMU で無視 さ れ、 TAG お よ び EA[EPN] のみが比較 さ れます。 TID=0x00 の TLB エン ト リ は、プ ロ セ ス に依存 し ない変換を表 し てい ます。すべてのプ ロ セ ス がグ ロ ーバルにア ク セ スす る ペー ジには、 TID に 0x00 を割 り 当て る 必要があ り ます。 PID の値が 0x00 の場合、 ど のページに も ア ク セ ス で き る プ ロ セ ス は特定 さ れません。 PID=0x00 の場合、 TID=0x00 の と き にのみページ変換 ヒ ッ ト が発生 し ます。 EA[EPN] と PID の 1 組み合わせに一致す る エン ト リ が複数あ る TLB を ソ フ ト ウ ェ アが ロ ー ド する こ と は可能です。 し か し 、 こ れはプ ロ グ ラ ミ ン グ エ ラ ー と 見な さ れ、 動作が未定義にな り ます。 ヒ ッ ト が発生す る と 、 MMU は対応す る TLB エン ト リ か ら RPN フ ィ ール ド を読み出 し ます。 SIZE フ ィ ール ド の値に よ り ますが、 こ の フ ィ ール ド の一部ま たはすべてのビ ッ ト が使用 さ れます (表 2-37 参照)。 た と えば、 SIZE フ ィ ール ド が 256KB のページ サ イ ズ を指定す る 場合、RPN[0:13] は物理ページ番号を表 し 、物理ア ド レ ス を形成す る のに使用 さ れます。 TLB エン ト リ を初期化す る と き は、 RPN[14:21] は使用 さ れず、 ソ フ ト ウ ェ アは こ れ ら のビ ッ ト を 0 に ク リ アにす る 必要があ り ます。 物理ア ド レ ス の残 り の部分は EA のページ オ フ セ ッ ト 部分か ら 取 ら れ ます。 ページ サ イ ズが 256KB の場合、 実効ア ド レ ス の ビ ッ ト 14:31 と RPN[0:13] を連結 さ せて、 32 ビ ッ ト の物理ア ド レ ス は形成 さ れ ます。 物理 メ モ リ にア ク セ スす る 前に、 MMU は TLB エ ン ト リ ア ク セ ス制御フ ィ ール ド を確認 し ます。 こ れ ら の フ ィ ール ド は、 現在実行中のプ ロ グ ラ ムが リ ク エ ス ト さ れた メ モ リ ア ク セ ス を実行で き る か ど う か を示 し ます。 ア ク セ ス が許可 さ れた場合、MMU はページにア ク セ スする 方法を決定する ため、ス ト レージ属性フ ィ ール ド をチ ェ ッ ク し ます。 ス ト レージ属性フ ィ ール ド は、 メ モ リ ア ク セ ス のキ ャ ッ シ ン グ ポ リ シーを指定 し ます。 TLB ア ク セス エ ラ ー TLB ア ク セ ス エ ラ ーがあ る と 、 例外が発生 し ます。 そ う す る と 、 エ ラ ーを引 き 起 こ し た命令の実行が割 り 込まれ、 エ ラ ーを解決す る ため、 割 り 込みハン ド ラ ーに コ ン ト ロ ールが渡 さ れます。 TLB ア ク セ ス は次の 2 つの理由か ら エ ラ ー にな る 可能性があ り ます。 • 一致す る TLB エン ト リ が見つか ら ず、 TLB ミ ス にな る • 一致す る TLB エン ト リ が見つか っ たが、 ス ト レージ属性ま たはゾーン保護に よ り ページへア ク セ ス で き ない 割 り 込みが発生す る と 、 プ ロ セ ッ サは、 MSR[VM] を 0 に ク リ アに し て、 リ アル モー ド にな り ます。 リ アル モー ド で は、 MMU で実行 さ れ る すべてのア ド レ ス変換お よ び メ モ リ 保護チ ェ ッ ク がデ ィ ス エーブルにな り ます。 シ ス テ ム ソ フ ト ウ ェ アがページ変換エ ン ト リ で UTLB を初期化 し た後、 MicroBlaze の UTLB は、 通常、 リ アル モー ド で実行 し てい る 割 り 込みハン ド ラ ーを使用 し て管理 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 50 第 2 章 : MicroBlaze アーキテ ク チ ャ 図 2-21 は、 TLB エン ト リ を検索す る 一般プ ロ セ ス を示 し てい ます。 No TLBHI[V]=1 TLB-Entry Miss Yes TLBHI[TID]=0x00 Yes No Compare TLBHI[TID] with PID No Match TLB-Entry Miss Match Compare TLBHI[TAG] with EA[EPN] using TLBHI[SIZE] No Match TLB-Entry Miss Match (TLB Hit) Check Access Not Allowed Access Violation Allowed Data Reference Instruction Fetch Check for Guarded Storage Guarded Storage Violation Not Guarded Read TLBLO[RPN] using TLBHI[SIZE] Generate Physical Address from TLBLO[RPN] and Offset Extract Offset from EA using TLBHI[SIZE] UG011_41_033101 図 2‐21 : TLB エ ン ト リ の検索プ ロ セス 次のセ ク シ ョ ンでは、 TLB ア ク セ ス エ ラ ーが原因で例外が発生す る 条件を説明 し ます。 デー タ ス ト レージ例外 仮想モー ド が イ ネーブルの場合 (MSR[VM]=1)、 次のいずれかの理由でページへの ア ク セ ス が許可 さ れない と き に、 デー タ ス ト レージ例外が発生 し ます。 • • ユーザー モー ド か ら ¨ ページへのア ク セ ス を妨げ る ゾーン フ ィ ール ド を TLB エン ト リ が指定 し ます (ZPR[Zn]=00)。 こ れは ロ ー ド お よ びス ト ア命令に適用 し ます。 ¨ 特に指定がなければゾーン フ ィ ール ド (ZPR[Zn]‚ 11) で上書 き さ れ る 、読み出 し 専用ページ (TLBLO[WR]=0) を TLB エン ト リ が指定 し ます。 こ れは ス ト ア命令に適用 し ます。 特権モー ド か ら ¨ 特に指定がなければゾーン フ ィ ール ド (ZPR[Zn]‚ 10 お よ び ZPR[Zn]‚ 11) で上書き さ れ る 、読み出 し 専用ペー ジ (TLBLO[WR]=0) を TLB エン ト リ が指定 し ます。 こ れは ス ト ア命令に適用 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 51 第 2 章 : MicroBlaze アーキテ ク チ ャ 命令ス ト レージ例外 仮想モー ド が イ ネーブルの場合 (MSR[VM]=1)、次のいずれかの理由でページへのア ク セ ス が許可 さ れない と き に、命 令ス ト レージ例外が発生 し ます。 • • ユーザー モー ド か ら ¨ ページへのア ク セ ス を妨げ る ゾーン フ ィ ール ド を TLB エン ト リ が指定 し ます (ZPR[Zn]=00)。 ¨ 特に指定がなければゾーン フ ィ ール ド (ZPR[Zn]‚ 11) で上書 き さ れ る 、 実行可能でないページ (TLBLO[EX]=0) を TLB エン ト リ が指定 し ます。 ¨ TLB エン ト リ が保護 さ れた ス ト レージ ページ (TLBLO[G]=1) を指定 し ます。 特権モー ド か ら ¨ 特に指定がなければゾーン フ ィ ール ド (ZPR[Zn]‚ 10 お よ び ZPR[Zn]‚ 11) で上書き さ れ る 、 実行可能でない ページ (TLBLO[EX]=0) を TLB エン ト リ が指定 し ます。 ¨ TLB エン ト リ が保護 さ れた ス ト レージ ページ (TLBLO[G]=1) を指定 し ます。 デー タ TLB ミ ス例外 仮想モー ド が イ ネーブルの場合 (MSR[VM]=1)、 有効で一致する TLB エン ト リ が、 TLB (シ ャ ド ウお よ び UTLB) で見 つか ら ない と 、 デー タ TLB ミ ス例外が発生 し ます。 任意の ロ ー ド ま たは ス ト ア命令がデー タ TLB ミ ス例外を引 き 起 こ す可能性があ り ます。 命令 TLB ミ ス例外 仮想モー ド が イ ネーブルの場合 (MSR[VM]=1)、 有効で一致する TLB エン ト リ が、 TLB (シ ャ ド ウお よ び UTLB) で見 つか ら ない と 、 命令 TLB ミ ス例外が発生 し ます。 任意の命令フ ェ ッ チで命令 TLB ミ ス例外を引 き 起 こ す可能性があ り ます。 ア ク セス保護 不正ア ク セ ス か ら 慎重に扱 う べ き メ モ リ ロ ケーシ ョ ン を保護す る ため、 シ ス テ ム ソ フ ト ウ ェ アはア ク セ ス保護を使 用 し ます。 シ ス テ ム ソ フ ト ウ ェ アは、 ユーザー モー ド で も 特権モー ド で も 、 メ モ リ ア ク セ ス に制限を加え る こ と が で き ます。 制限は、 読み出 し 、 書 き 込み、 お よ び命令フ ェ ッ チに設け る こ と が可能です。 仮想保護モー ド が イ ネーブ ルにな っ てい る と 、 ア ク セ ス保護を使用で き ます。 ア ク セ ス制御は、 命令フ ェ ッ チ、 デー タ ロ ー ド 、 お よ びデー タ 格納に適用 さ れます。 仮想ページの TLB エン ト リ が、 ページに許可 さ れてい る ア ク セ ス タ イ プ を指定 し ます。 ま た、 TLB エ ン ト リ に よ っ て指定 さ れ る ア ク セ ス制御を上 書 き す る のに使用 さ れ る ゾーン保護レ ジ ス タ にあ る ゾーン保護フ ィ ール ド も 、 TLB エン ト リ が指定 し ます。 TLB ア ク セス保護制御 各 TLB エン ト リ は次の 3 タ イ プのア ク セ ス を制御 し ます。 • プ ロ セ ス : 各プ ロ セ ス にプ ロ セ ス ID (PID) を割 り 当て る こ と に よ り 、 プ ロ セ ス を不正ア ク セ ス か ら 保護 し ます。 シ ス テ ム ソ フ ト ウ ェ アがユーザー モー ド アプ リ ケーシ ョ ン を開始す る と 、 そのアプ リ ケーシ ョ ンの PID が PID レ ジ ス タ に読み込 ま れ ま す。 ア プ リ ケーシ ョ ン が実行す る と 、 その PID に一致す る 変換ル ッ ク ア サ イ ド バ ッ フ ァ ー ハ イ (TLBHI) の TID フ ィ ール ド のあ る TLB エン ト リ のみを使用 し て、 メ モ リ ア ド レ ス を変換 し ます。 こ れに よ り 、 シ ス テ ム ソ フ ト ウ ェ アが、 仮想 メ モ リ の特定エ リ アにアプ リ ケーシ ョ ンのア ク セ ス を制限す る こ と が で き ます。 TID=0x00 の TLB エン ト リ は、 プ ロ セ ス に依存 し ない変換を表 し てい ます。 すべてのプ ロ セ ス がグ ロ ーバルにア ク セ スす る ページには、 TID に 0x00 を割 り 当て る 必要があ り ます。 • 実行 : 実行可能に指定 さ れてい る 仮想ページ (TLBLO[EX]=1) か ら 命令が フ ェ ッ チ さ れ る 場合のみ、プ ロ セ ッ サは 命令を実行 し ます。 TLBLO[EX] を 0 に ク リ アにす る と 、 ページか ら フ ェ ッ チ さ れた命令は実行 さ れな く な り 、 命 令ス ト レージ割 り 込み (ISI) は発生 し ません。 ISI は命令が フ ェ ッ チ さ れた と き には発生 し ませんが、 命令が実行 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 52 第 2 章 : MicroBlaze アーキテ ク チ ャ さ れた と き に発生 し ます。 こ れに よ り 、 後で破棄 さ れ る (実行 さ れ る のではな く ) 投機的に フ ェ ッ チ さ れた命令が ISI を引 き 起 こ すのを防ぐ こ と がで き ます。 ゾーン保護レ ジ ス タ は実行保護を上書 き す る こ と がで き ます。 • 読み出 し /書 き 込み : デー タ は書 き 込み可能に指定 さ れてい る 仮想ページ (TLBLO[WR]=1) にのみ書 き 込まれま す。 TLBLO[WR] を 0 に ク リ アにす る と 、 ページは読み出 し 専用にな り ます。 読み出 し 専用ページに書 き 込みを 実行 し よ う と す る と 、 デー タ ス ト レージ割 り 込み (DSI) が発生 し ます。 ゾーン保護レ ジ ス タ は書 き 込み保護を上書 き す る こ と がで き ます。 TLB エン ト リ を使用 し て、 プ ロ グ ラ ムに よ る ページの読み出 し を防ぐ こ と はで き ません。 仮想モー ド では、 ゾーン保 護を使用 し て、 ページが読み出 さ れない よ う に し ます。 まず、 ア ク セ ス で き ないゾーン を定義 し (ZPR[Zn] = 00)、 そ れを使用 し て TLB エン ト リ ア ク セ ス保護を上書き し ます。 ユーザー モー ド で実行 し てい る プ ロ グ ラ ムのみをページ を読み出 さ ない よ う にす る こ と がで き ます。 特権モー ド のプ ロ グ ラ ムには常にページへの読み出 し ア ク セ ス があ り ま す。 ゾーン保護 ゾーン保護は、 TLB エン ト リ に指定 さ れてい る ア ク セ ス保護を上書き する のに使用 さ れます。 ゾーンは、 共通のア ク セ ス保護が設定 さ れてい る 仮想ページ を任意に ま と めた も のです。 ゾーンには、 いろいろ なページ サ イ ズ を組み合わ せて指定 し 、 任意ページ数含め る こ と がで き ます。 ゾーンには、 近接す る ページ を含め る 必要はあ り ません。 ゾーン保護レ ジ ス タ (ZPR) は 32 ビ ッ ト の レ ジ ス タ で、 16 個あ る ゾーンのそれぞれに適用 さ れ る 保護上書 き タ イ プ を 指定す る のに使用 さ れ ま す。 ゾーン の保護上書 き は、 2 ビ ッ ト フ ィ ール ド と し て ZPR にエ ン コ ー ド さ れ ます。 TLB エン ト リ の 4 ビ ッ ト ゾーン選択フ ィ ール ド (TLBLO[ZSEL]) は、 ZPR (Z0–Z15) の 16 個あ る ゾーン フ ィ ール ド の 1 つ を選択 し ます。 た と えば、 ゾーン Z5 は、 ZSEL = 0101 の と き に選択 さ れます。 ZPR の 1 ゾーン を変更す る と 、 そのゾーンのすべてのページに保護上書 き が適用 さ れます。 ZPR を使用 し ないで、 保 護を変更す る 場合は、 そのゾーン内の各ページ変換エン ト リ を個別に変更す る 必要があ り ます。 イ ンプ リ メ ン ト さ れていないゾーン (C_MMU_ZONES < 16) は、 ゾーン フ ィ ール ド が 11 個含まれてい る も の と し て処 理 さ れます。 UTLB 管理 UTLB は、 プ ロ セ ッ サの MMU と メ モ リ 管理 ソ フ ト ウ ェ ア と の イ ン タ ーフ ェ イ ス の役割を果た し ます。 シ ス テ ム ソ フ ト ウ ェ アが UTLB を管理 し 、 仮想ア ド レ ス を物理ア ド レ ス に変換す る 方法を MMU に伝え ま す。 変換で き なか っ た り 、 ア ク セ ス違反が原因で問題が発生す る と 、 MMU は、 例外を使用 し てシ ス テ ム ソ フ ト ウ ェ アに問題が起 き た こ と を伝え ます。 MMU が メ モ リ 変換を継続実行で き る よ う に、 こ れ ら の問題を修正する ための割 り 込みハン ド ラ ーを提 供す る のはシ ス テ ム ソ フ ト ウ ェ アの役目です。 ソ フ ト ウ ェ アは、 MFS お よ び MTS 命令を使用 し て、 UTLB エン ト リ を それぞれ読み出 し 、 あ る いは書 き 込み し ます。 こ れ ら の命令は、 UTLB の 64 個のエ ン ト リ の 1 つに対応す る 、 TLBX レ ジ ス タ イ ンデ ッ ク ス (0 か ら 63 ま で付番 さ れてい る ) を使用 し ます。 タ グ と デー タ の部分は別々に読み出 さ れ、 ま た書 き 込まれ る ため、 ソ フ ト ウ ェ アは、 エン ト リ へ完全にア ク セ スす る のに、 MFS 命令を 2 つ、 ま たは MTS 命令を 2 つ実行する 必要があ り ます。 TLBSX レ ジ ス タ を使用 し て特定の変換を見つけ出すため、UTLB が検索 さ れます。TLBSX は実効ア ド レ ス を使用 し て変換を見つけ 出 し 、 対応す る UTLB イ ンデ ッ ク ス を TLBX レ ジ ス タ に ロ ー ド し ます。 TLB エ ン ト リ の タ グ部分の有効ビ ッ ト (TLBHI[V]) を ク リ アにす る MTS 命令を使用 し て、 個々の UTLB エ ン ト リ を 無効化 し ます。 C_FAULT_TOLERANT が 1 に設定 さ れてい る 場合は、 UTLB のブ ロ ッ ク RAM はパ リ テ ィ に よ り 保護 さ れます。 パ リ テ ィ エ ラ ーが発生 し た場合は、 TLB ミ ス例外が発生 し ます。 こ のケース でエ ラ ーが累積する のを避け る ため、 UTLB の各エン ト リ は定期的に無効化にす る 必要があ り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 53 第 2 章 : MicroBlaze アーキテ ク チ ャ ページ ア ク セスおよびページ変更の記録 仮想 メ モ リ の ソ フ ト ウ ェ ア管理にはい く つか問題があ り ます。 • 仮想 メ モ リ 環境では、 ソ フ ト ウ ェ アお よ びデー タ が使用する メ モ リ 量が、 物理的に利用可能な メ モ リ 容量を超え て し ま う こ と が よ く あ り ます。 そ こ で、 ソ フ ト ウ ェ アやデー タ ページが使用 さ れていない場合は、 ハー ド ド ラ イ ブな ど、 外部物理 メ モ リ にその一部を格納 し てお く 必要があ り ます。 理想的には、 頻繁に使用 さ れ る ページ を 物理 メ モ リ に残 し 、 あ ま り 使用 さ れないページ を ど こ か別の場所に格納 し てお き ます。 • 物理 メ モ リ のページ を、 新 し いページ を読み込むために ど こ かに移動 さ せ る 場合は、 移動 さ せる (古い) ページが 変更 さ れていないか ど う か知っ てお く こ と が重要です。 変更 さ れてい る 場合は、 新 し いページ を読み込む前に、 古いページ を保存 し てお く 必要が あ り ま す。 古いページが変更 さ れていない場合は、 それ を保存せずに新 し い ページ を読み込む こ と がで き ます。 • UTLB に格納 さ れ る ページ変換の数は限 ら れてい ます。 こ こ に格納で き ない変換はページ変換テーブルに格納す る 必要があ り ます。 変換が UTLB にない場合 ( ミ ス な ど の理由で)、 シ ス テ ム ソ フ ト ウ ェ アは、 ど の UTLB エン ト リ を破棄す る か決めて、 その変換が見つか る よ う に別の変換を読み込む必要があ り ます。 その場合は、 頻繁に 使用 さ れ る 変換ではな く 、 あ ま り 使用 さ れない変換を別の場所に移動 さ せ る こ と が望ま し く な り ます。 上記の問題を効率 よ く 解決す る には、 ページ ア ク セ スお よ びページ変換を記録 し てお く 必要があ り ます。 MicroBlaze の場合、 ハー ド ウ ェ アではページ ア ク セ ス と ページ変更を記録 し ません。 代わ り に、 シ ス テ ム ソ フ ト ウ ェ アが TLB ミ ス例外 と デー タ ス ト レージ例外を使用 し て、 こ の情報を収集 し ます。 収集 さ れた情報は、 ページ変換テーブルに関 連付け ら れてい る デー タ 構造に格納で き ます。 ページ ア ク セ ス情報は、 ど のページ を物理 メ モ リ に置いてお く か、 物理 メ モ リ 空間が必要にな っ た と き に ど のページ を移動 さ せ る か を決め る ために使用 さ れます。 シ ス テ ム ソ フ ト ウ ェ アは、 TLB エン ト リ の有効ビ ッ ト (TLBHI[V]) を 使用 し て、 ページ ア ク セ ス を監視 し ます。 こ の場合、 ページにア ク セ ス がない こ と を示すため、 ページ変換を無効に 初期化す る 必要があ り ます (TLBHI[V]=0)。 最初にページにア ク セ ス し よ う と する と 、 TLB ミ ス例外が発生 し ますが、 こ れは、 UTLB エン ト リ が無効にな っ てい る か、 ま たはページ変換が UTLB にないか ら です。 UTLB ミ ス ハン ド ラ ー は、 有効な変換 (TLBHI[V]=1) で UTLB を ア ッ プデー ト し ます。 セ ッ ト さ れた有効ビ ッ ト は、 ページお よ びその変換 がア ク セ ス さ れた こ と を記録 し ます。 ま た、 TLB ミ ス ハン ド ラ ー も 、 ページ変換エ ン ト リ に関連付け ら れてい る 別 のデー タ 構造に こ の情報を記録で き ます。 ページ変更情報は、 古いページ を新 し いページで上書 き で き る か ど う か、 ま たは古いページ を まずハー ド デ ィ ス ク に 格納す る 必要があ る か ど う か を示すために使用 さ れ ます。 シ ス テ ム ソ フ ト ウ ェ アは、 TLB エ ン ト リ の書 き 込み保護 ビ ッ ト (TLBLO[WR]) を使用 し て、 ページ変更を監視 し ます。 こ の場合、 ページが変更 さ れていない こ と を示すため、 ページ変換を読み出 し 専用に初期化す る 必要があ り ます (TLBLO[WR]=0)。 ページに既にア ク セ ス があ り 、 上記の よ う に有効 と 指定 さ れてい る と 仮定 し て、 最初にページにデー タ を書 き 込 も う と す る と 、 デー タ ス ト レージ例外が発生 し ます。 ソ フ ト ウ ェ アにページへの書 き 込み権限があ る 場合、 デー タ ス ト レージ ハン ド ラ ーは、 そのページ を書 き 込み可能に設定 し (TLBLO[WR]=1)、 戻 り ます。 セ ッ ト さ れた書 き 込み保護ビ ッ ト は、 ページが変更 さ れた記録にな り ます。 ま た、 デー タ ス ト レージ ハン ド ラ ー も 、 ページ変換エン ト リ に関連付け ら れてい る 別のデー タ 構造に こ の 情報を記録で き ます。 仮想モー ド に最初に入っ た と き 、 新 し いプ ロ セ ス を開始 し た と き に、 ページ変更を記録 し てお く と 便利です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 54 第 2 章 : MicroBlaze アーキテ ク チ ャ リ セ ッ ト 、 割 り 込み、 例外、 およびブ レー ク MicroBlaze は、 リ セ ッ ト 、 割 り 込み、 ユーザー例外、 ブ レー ク 、 お よ びハー ド ウ ェ ア例外をサポー ト し ます。 次のセ ク シ ョ ンでは、 こ れ ら の イ ベン ト それぞれに関連付け ら れてい る 実行フ ロ ーを説明 し ます。 こ れ ら の イ ベン ト の優先順位は高い も のか ら 次の よ う にな っ てい ます。 1. 2. 3. 4. 5. 6. リ セッ ト ハー ド ウ ェ ア例外 マ ス ク 可能でないブ レー ク ブ レー ク 割 り 込み ユーザー ベ ク タ ー (例外) 表 2-38 は、 関連付け ら れてい る ベ ク タ ーの メ モ リ ア ド レ ス ロ ケーシ ョ ンお よ び戻 り ア ド レ ス のハー ド ウ ェ アの レ ジ ス タ フ ァ イ ル ロ ケーシ ョ ン を定義 し てい ます。 各ベ ク タ ーはア ド レ ス を 2 つ割 り 当てて、 フル ア ド レ ス範囲での分 岐を可能に し ます (IMM の後に BRAI 命令を続け る 必要があ り ます)。 通常、 ベ ク タ ーはア ド レ ス 0x00000000 で始ま り ますが、 パ ラ メ ー タ ー C_BASE_VECTORS を使用 し て、 ベ ク タ ーを メ モ リ の任意の位置に移動 さ せ る こ と がで き ます。 0x28 か ら 0x4F ま では、 今後の ソ フ ト ウ ェ ア サポー ト のため、 ザ イ リ ン ク ス に よ っ て予約 さ れてい ます。 ユーザー ア プ リ ケーシ ョ ンに こ の範囲内のア ド レ ス を割 り 当て る と 、 今後の SDK ソ フ ト ウ ェ ア サポー ト で競合が起 き る 可能性 が高 く な り ます。 表 2‐38 : ベ ク タ ーおよび戻 り ア ド レ ス レ ジ ス タ フ ァ イルのロ ケーシ ョ ン ベ ク タ ー ア ド レ ス レ ジ ス タ フ ァ イル 戻り ア ド レス リ セッ ト C_BASE_VECTORS + 0x00000000 - C_BASE_VECTORS + 0x00000004 - ユーザー ベ ク タ ー (例外) C_BASE_VECTORS + 0x00000008 - C_BASE_VECTORS + 0x0000000C Rx 割 り 込み1 C_BASE_VECTORS + 0x00000010 - C_BASE_VECTORS + 0x00000014 R14 C_BASE_VECTORS + 0x00000018 - C_BASE_VECTORS + 0x0000001C R16 ハー ド ウ ェ ア例外 C_BASE_VECTORS + 0x00000020 - C_BASE_VECTORS + 0x00000024 R17 ま たは BTR 今後の サ ポー ト の た め ザ イ リ ン ク ス に よ り 予約 C_BASE_VECTORS + 0x00000028 - C_BASE_VECTORS + 0x0000004F - イ ベン ト ブ レー ク : マ ス ク 可能でない ハー ド ウ ェ ア ブ レー ク : ハー ド ウ ェ ア ブ レー ク : ソ フ ト ウ ェ ア 1. 低レ イ テ ン シ割 り 込みモー ド の場合、 ベ ク タ ー ア ド レ ス は割 り 込み コ ン ト ロ ー ラ ーに よ り 提供 さ れます。 セマ フ ォ や ス ピ ン ロ ッ ク な ど、 相互排他機能を イ ン プ リ メ ン ト す る ため LWX と SWX 命令 と 一緒にす る と 、 こ れ ら の イ ベン ト はすべて予約ビ ッ ト を ク リ アに し ます。 リセッ ト Reset ま たは Debug_Rst (1) が発生す る と 、 MicroBlaze はパ イ プ ラ イ ン を フ ラ ッ シ ュ し 、 リ セ ッ ト ベ ク タ ー (ア ド レ ス 0x0) か ら 命令を フ ェ ッ チ し 始め ます。両方の外部 リ セ ッ ト 信号がア ク テ ィ ブ High で、最低 16 サ イ ク ル間アサー ト す る 必要があ り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 55 第 2 章 : MicroBlaze アーキテ ク チ ャ 等価擬似 コ ー ド PC C_BASE_VECTORS + 0x00000000 MSR C_RESET_MSR (第 3 章の 「MicroBlaze コ アの コ ン フ ィ ギ ュ レーシ ョ ン」 を参照) EAR 0; ESR 0; FSR 0 PID 0; ZPR 0; TLBX 0 Reservation 0 ハー ド ウ ェ ア例外 無効の命令、 命令お よ びデー タ バ ス エ ラ ー、 ア ラ イ ン さ れていないア ク セ ス と いっ た内部エ ラ ー コ ンデ ィ シ ョ ン を 捕捉す る よ う 、 MicroBlaze を コ ン フ ィ ギ ュ レー ト する こ と がで き ます。 除算例外は、 プ ロ セ ッ サがハー ド ウ ェ ア除算 器で コ ン フ ィ ギ ュ レー ト さ れてい る (C_USE_DIV=1) 場合にのみ、 イ ネーブルにで き ます。 ハー ド ウ ェ ア浮動小数点 ユニ ッ ト で コ ン フ ィ ギ ュ レー ト さ れてい る (C_USE_FPU>0) 場合は、 ア ン ダーフ ロ ー、 オーバーフ ロ ー、 浮動小数点 のゼ ロ 除算、 無効操作、 非正規化オペ ラ ン ド エ ラ ー と い っ た浮動小数点の例外 も 捕捉で き ます。 ハー ド ウ ェ アの メ モ リ 管理ユニ ッ ト で コ ン フ ィ ギ ュ レー ト さ れてい る 場合は、 無効な命令例外、 デー タ ス ト レージ例 外、 命令ス ト レージ例外、 デー タ TLB ミ ス例外、 例外 TLB ミ ス例外 と いっ た メ モ リ 管理の例外 も 捕捉で き ます。 ハー ド ウ ェ ア例外が起 き る と 、 MicroBlaze はパ イ プ ラ イ ン を フ ラ ッ シ ュ し 、 ハー ド ウ ェ ア例外ベ ク タ ー (ア ド レ ス C_BASE_VECTORS + 0x20) に分岐 し ます。 例外サ イ ク ルの実行ス テージの命令は実行 さ れません。 ま た、 例外は次の方法で汎用レ ジ ス タ R17 を ア ッ プデー ト し ます。 • MMU 例外の場合 (デー タ ス ト レージ例外、 命令ス ト レージ例外、 デー タ TLB ミ ス例外、 命令 TLB ミ ス例外)、 リ タ ーン にな る と 例外を発生 さ せ る 命令を再実行す る ために レ ジ ス タ R17 に適切なプ ロ グ ラ ム カ ウ ン タ ー値が ロ ー ド さ れ ます。 その前に IMM 命令があ る 場合は、 その命令に戻 る よ う 値が調節 さ れ ます。 例外が分岐遅延ス ロ ッ ト の命令に よ っ て引 き 起 こ さ れ る 場合、 その分岐命令に戻 る よ う に値が調節 さ れます (その前に IMM 命令が あ る 場合はそのための調節 も 含めて)。 • その他の例外の場合は、 例外が分岐遅延ス ロ ッ ト の命令に よ っ て引き 起 こ さ れていない限 り 、 後に続 く 命令のプ ロ グ ラ ム カ ウ ン タ ー値で、 レ ジ ス タ R17 は ロ ー ド さ れ ます。 例外が分岐遅延ス ロ ッ ト の命令に よ っ て引 き 起 こ さ れてい る 場合は、 ESR[DS] ビ ッ ト がセ ッ ト さ れ ます。 こ の場合、 例外ハン ド ラ ーは BTR に格納 さ れてい る 分 岐先ア ド レ ス か ら 実行を再開す る 必要があ り ます。 MSR の EE お よ び EIP ビ ッ ト は、 RTED 命令を実行する と き に自動的に戻 さ れます。 MSR の VM お よ び UM ビ ッ ト は、 RTED、 RTBD、 お よ び RTID 命令を実行す る と き に、 自動的に VMS お よ び UMS か ら 戻 さ れます。 例外の優先順位 複数の例外が同時に発生す る 場合は、 優先順位の高い も のか ら 低い も のへ と 、 次の順序で処理 さ れます。 • 命令バ ス例外 • 命令 TLB ミ ス例外 • 命令ス ト レージ例外 • 無効なオペ コ ー ド 例外 • 特権命令例外ま たは ス タ ッ ク 保護違反例外 • デー タ TLB ミ ス例外 • デー タ ス ト レージ例外 • ア ラ イ ン さ れていない例外 1. リ セ ッ ト 入力は、 MDM を介 し てデバ ッ ガーで制御 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 56 第 2 章 : MicroBlaze アーキテ ク チ ャ • デー タ バ ス例外 • 除算例外 • FPU 例外 • ス ト リ ーム例外 例外の原因 • ス ト リ ーム例外 制御ビ ッ ト が一致 し ていない と き に、 e ビ ッ ト が 1 にセ ッ ト さ れてい る get ま たは getd を実行す る と 、 AXI4Stream 例外が発生 し ます。 • 命令バ ス例外 メ モ リ か ら デー タ を読み出す と き のエ ラ ーに よ り 、 命令バ ス例外が発生 し ます。 ¨ ¨ ¨ • 命令ペ リ フ ェ ラ ル AXI4 イ ン タ ーフ ェ イ ス (M_AXI_IP) は、 M_AXI_IP_RRESP でのエ ラ ー応答が原因で発 生 し ます。 命令キ ャ ッ シ ュ ペ リ フ ェ ラ ル AXI4 イ ン タ ーフ ェ イ ス (M_AXI_IC) は、 M_AXI_IC_RRESP でのエ ラ ー応答 が原因で発生 し ます。 こ の例外は、 C_ICACHE_ALWAYS_USED が 1 に設定 さ れていて、 キ ャ ッ シ ュ がオ フ にな っ てい る と き 、ま たは MMU 抑止キ ャ ッ シ ン グ ビ ッ ト がア ド レ ス に対 し て設定 さ れてい る 場合にのみ発 生 し ます。 それ以外のケース では応答は無視 さ れます。 命令側の ロ ーカル メ モ リ (ILMB) は、 IUE 信号に示 さ れてい る よ う に、 LMB メ モ リ で訂正不可能なエ ラ ー が発生 し た と き 、 ま たは ICE 信号に示 さ れてい る よ う に、 C_ECC_USE_CE_EXCEPTION が 1 に設定 さ れ ていて、 LMB メ モ リ で訂正可能なエ ラ ーが発生 し た と き にのみ、 命令バ ス例外を引き 起 こ し ます。 無効なオペ コ ー ド 例外 無効の メ ジ ャ ー オペ コ ー ド で命令を実行する と (命令のビ ッ ト 0 か ら 5 ま で)、無効なオペ コ ー ド 例外が発生 し ま す。 命令の ビ ッ ト 6 か ら 31 はチ ェ ッ ク さ れ ません。 オプシ ョ ンのプ ロ セ ッ サ命令が イ ネーブルにな っ ていない 場合は、 無効な命令 と し て検出 さ れ ま す。 ま た、 オプシ ョ ン機能 C_OPCODE_0x0_ILLEGAL が イ ネーブルに な っ てい る 場合、 命令が 0x00000000 に等 し い と 、 無効なオペ コ ー ド 例外が発生 し ます。 • デー タ バ ス例外 メ モ リ か ら デー タ を読み出す と き 、 ま たはデー タ を メ モ リ に書 き 込む と き のエ ラ ーに よ り 、 デー タ バ ス例外が発 生 し ます。 ¨ デー タ ペ リ フ ェ ラ ル AXI4 イ ン タ ーフ ェ イ ス (M_AXI_DP) は、 M_AXI_DP_RRESP ま たは M_AXI_DP_BRESP でのエ ラ ー応答が原因で発生 し ます。 ¨ デー タ キ ャ ッ シ ュ AXI4 イ ン タ ーフ ェ イ ス (M_AXI_DC) 例外は次の も のが原因で発生 し ます。 - M_AXI_DC_RRESP ま たは M_AXI_DC_BRESP のエ ラ ー応答 - LWX を使用 し た排他的ア ク セ ス の場合は、 M_AXI_DC_RRESP の OKAY 応答 こ の例外は、C_DCACHE_ALWAYS_USED が 1 に設定 さ れていて、キ ャ ッ シ ュ がオ フ にな っ てい る と き 、LWX ま たは SWX がを使用 し て排他的ア ク セ ス が行われてい る と き 、 ま たは MMU 抑止キ ャ ッ シ ン グ ビ ッ ト がア ド レ ス に対 し てセ ッ ト さ れてい る 場合にのみ発生 し ます。 それ以外のケース では応答は無視 さ れます。 ¨ • デー タ 側の ロ ーカル メ モ リ (DLMB) は、 DUE 信号に示 さ れてい る よ う に、 LMB メ モ リ で訂正不可能なエ ラ ーが発生 し た と き 、 ま たは DCE 信号に示 さ れてい る よ う に、 C_ECC_USE_CE_EXCEPTION が 1 に設定 さ れていて、 LMB メ モ リ で訂正可能なエ ラ ーが発生 し た と き にのみ、 デー タ バ ス 例外を引 き 起 こ し ま す。 すべての読み出 し ア ク セ ス、 バ イ ト お よ びハーフバ イ ト の書き 込みア ク セ ス に対 し 、 エ ラ ーが発生す る 可能 性があ り ます。 ア ラ イ ン さ れていない例外 デー タ バ スへのア ド レ ス にビ ッ ト 30 ま たは 31 が設定 さ れてい る ワー ド ア ク セ ス、 ま たはビ ッ ト 31 が設定 さ れ てい る ハーフ ワー ド ア ク セ ス に よ っ て、 ア ラ イ ン さ れていない例外が発生 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 57 第 2 章 : MicroBlaze アーキテ ク チ ャ • 除算例外 除数が 0 の整数除算 (idiv ま たは idivu) に よ っ て、 ま たはオーバーフ ロ ーが発生する 符号付き 整数除算 (idiv) (-2147483648 / -1) に よ っ て、 除算例外が発生 し ます。 • FPU 例外 ア ン ダーフ ロ ー、 オーバーフ ロ ー、 ゼ ロ 除算、 無効な操作、 ま たは浮動小数点の命令で起 き る 非正規オペ ラ ン ド に よ っ て、 FPU 例外は発生 し ます。 • ¨ 結果が非正規化数の場合ア ン ダーフ ロ ーが発生 し ます。 ¨ 結果が非数の場合 (NaN) オーバーフ ロ ーが発生 し ます。 ¨ rB が無限大でない と き に、 fdiv の rA オペ ラ ン ド がゼ ロ にな っ てい る と 、 ゼ ロ 除算例外が発生 し ます。 ¨ NaN オペ ラ ン ド を使用す る か、 ま たは無効の無限大やゼ ロ オペ ラ ン ド の組み合わせに よ っ て、 無効な操作 が発生 し ます。 特権命令例外 ユーザー モー ド で特権命令を実行 し よ う と する と 、 特権命令例外が発生 し ます。 • ス タ ッ ク 保護違反例外 特殊な ス タ ッ ク ロ ウ お よ び ス タ ッ ク ハ イ の レ ジ ス タ で定義 さ れてい る ス タ ッ ク 境界の外側にあ る ア ド レ ス で、 rA に ス タ ッ ク ポ イ ン タ ー (レ ジ ス タ R1) を使用 し た ロ ー ド ま たは ス ト ア命令を実行す る と 、ス タ ッ ク 保護違反例 外が発生 し 、 ス タ ッ ク オーバーフ ロ ーま たは ス タ ッ ク ア ン ダーフ ロ ーが発生 し ます。 • デー タ ス ト レージ例外 メ モ リ 保護違反にな る メ モ リ のデー タ にア ク セ ス し よ う と す る と 、 デー タ ス ト レージ例外が発生 し ます。 • 命令ス ト レージ例外 メ モ リ 保護違反にな る メ モ リ の命令にア ク セ ス し よ う と す る と 、 命令ス ト レージ例外が発生 し ます。 • デー タ TLB ミ ス例外 有効な変換ル ッ ク アサ イ ド バ ッ フ ァ ー エン ト リ がな く 、仮想保護モー ド が イ ネーブルにな っ てい る と き に、デー タ にア ク セ ス し よ う と す る と 、 デー タ TLB ミ ス例外が発生 し ます。 • 命令 TLB ミ ス例外 有効な変換ル ッ ク アサ イ ド バ ッ フ ァ ー エ ン ト リ がな く 、 仮想保護モー ド が イ ネーブルにな っ てい る と き に、 命 令にア ク セ ス し よ う と す る と 、 命令 TLB ミ ス例外が発生 し ます。 C_FAULT_TOLERANT が 1 に設定 さ れ、 例外が発生中の と き に (MSR[EIP] がセ ッ ト さ れ、 MSR[EE] が ク リ アにな っ てい る な ど)、 命令バ ス例外、 無効なオペ コ ー ド 例外、 ま たはデー タ バ ス例外が発生 し た場合は、 パ イ プ ラ イ ンが停 止 し 、 外部信号 MB_Error がセ ッ ト さ れます。 不明瞭な例外 通常、 MicroBlaze の例外はすべて明瞭です。 つま り 、 例外を引 き 起 こ す命令の後のパ イ プ ラ イ ンにあ る 命令はすべて 無効化 さ れていて、 影響がない と い う こ と です。 C_IMPRECISE_EXCEPTIONS が 1 (ECC) に設定 さ れてい る と 、 LMB メ モ リ の ECC エ ラ ーに よ っ て発生す る 命令バ ス例外ま たはデー タ バ ス例外は不明瞭です。 つま り 、 パ イ プ ラ イ ン にあ る 後続の メ モ リ ア ク セ ス命令が実行 さ れ る 可能性があ る と い う こ と です。 こ の動作が許容で き る 場合は、 こ のパ ラ メ ー タ ーを 1 に設定す る と 、 最大周波数を向 上 さ せ る こ と がで き ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 58 第 2 章 : MicroBlaze アーキテ ク チ ャ 等価擬似 コ ー ド ESR[DS] exception in delay slot if ESR[DS] then BTR branch target PC if MMU exception then if branch preceded by IMM then r17 PC - 8 else r17 PC - 4 else r17 invalid value else if MMU exception then if instruction preceded by IMM then r17 PC - 4 else r17 PC else r17 PC + 4 PC C_BASE_VECTORS + 0x00000020 MSR[EE] 0, MSR[EIP] 1 MSR[UMS] MSR[UM], MSR[UM] 0, MSR[VMS] MSR[VM], MSR[VM] 0 ESR[EC] exception specific value ESR[ESS] exception specific value EAR exception specific value FSR exception specific value Reservation 0 ブ レー ク ブ レー ク には次の 2 種類があ り ます。 • ハー ド ウ ェ ア (外部) ブ レー ク • ソ フ ト ウ ェ ア (内部) ブ レー ク ハー ド ウ ェ ア ブ レー ク ハー ド ウ ェ ア ブ レー ク は、 外部信号 (すなわち Ext_BRK お よ び Ext_NM_BRK 入力ポー ト ) を アサー ト す る こ と に よ っ て実行 さ れます。 ブ レー ク が実行 さ れ る と 、 実行段の命令は完了 し ますが、 デ コ ー ド 段の命令は、 ブ レー ク ベ ク タ ーへの分岐に置 き 換え ら れます (ア ド レ ス C_BASE_VECTORS + 0x18)。 ブ レー ク の戻 り ア ド レ ス (ブ レー ク 時のデ コ ー ド 段にあ る 命令に関連付け ら れてい る PC) は、 汎用レ ジ ス タ R16 に自動的に ロ ー ド さ れます。 ま た、 MicroBlaze は処理中ブ レー ク (BIP) フ ラ グ を マシ ン ス テー タ ス レ ジ ス タ (MSR) に設定 し ます。 標準のハー ド ウ ェ アブ レー ク (すなわち Ext_BRK 入力ポー ト ) は、 MSR[BIP] お よ び MSR[EIP] が 0 に設定 さ れてい る (つま り 処理中のブ レー ク や命令がない) と き にのみ処理 さ れます。処理中ブ レー ク フ ラ グは割 り 込みをデ ィ ス エー ブルに し ます。 マ ス ク 可能でないブ レー ク (すなわち Ext_NM_BRK 入力ポー ト ) は常にすぐ に処理 さ れます。 MSR の BIP ビ ッ ト は、 RTBD 命令が実行 さ れ る と 、 自動的に ク リ アにな り ます。 Ext_BRK 信号は、 ブ レー ク が発生す る ま でアサー ト に し 、 RTBD 命令が実行 さ れ る 前にデ ィ アサー ト にす る 必要が あ り ます。 Ext_NM_BRK 信号は、 1 ク ロ ッ ク サ イ ク ルのみアサー ト する 必要があ り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 59 第 2 章 : MicroBlaze アーキテ ク チ ャ ソ フ ト ウ ェ ア ブ レー ク ソ フ ト ウ ェ ア ブ レー ク を実行す る には、 brk お よ び brki 命令を使用 し ます。 ソ フ ト ウ ェ ア ブ レー ク の詳細は、 第 5 章 「MicroBlaze 命令セ ッ ト アーキ テ ク チ ャ 」 を参照 し て く だ さ い。 特殊な ケース と し て、 C_USE_DEBUG がセ ッ ト さ れていて、 「brki rD, 0x18」 が実行 さ れ る 場合、 ソ フ ト ウ ェ アブ レー ク ポ イ ン ト は、 C_BASE_VECTORS の値にかかわ ら ず、 XMD (Xilinx Microprocessor Debugger) な ど のデバ ッ グ ツール に通知 さ れます。 レ イテンシ MicroBlaze がブ レー ク 発生時か ら ブ レー ク サービ ス ルーチンに入る ま でにかか る 時間は、 現在実行段にあ る 命令 と 、 ブ レー ク ベ ク タ ーを格納す る メ モ リ ま での レ イ テ ン シに左右 さ れます。 等価擬似 コ ー ド r16 PC PC C_BASE_VECTORS + 0x00000018 MSR[BIP] 1 MSR[UMS] MSR[UM], MSR[UM] 0, MSR[VMS] MSR[VM], MSR[VM] 0 Reservation 0 割 り 込み MicroBlaze は外部割 り 込み ソ ース を 1 つサポー ト し ます (Interrupt 入力ポー ト に接続 さ れてい る )。 マシ ン ス テー タ ス レ ジ ス タ (MSR) の割 り 込み イ ネーブル (IE) ビ ッ ト が 1 に設定 さ れてい る 場合にのみ、 プ ロ セ ッ サは割 り 込みに反応 し ます。 割 り 込みが発生す る と 、 実行段の命令は完了 し ますが、 デ コ ー ド 段の命令は、 割 り 込みベ ク タ ーへの分岐に 置 き 換え ら れます。 こ のア ド レ ス は、 C_BASE_VECTORS + 0x10 か、 低レ イ テ ン シ割 り 込みモー ド の場合は、 割 り 込 み コ ン ト ロ ー ラ ーで決め ら れ る ア ド レ ス にな り ます。 割 り 込みの戻 り ア ド レ ス (割 り 込み時のデコ ー ド 段にあ る 命令に関連付け ら れてい る PC) は、 汎用レ ジ ス タ R14 に自 動的に ロ ー ド さ れます。 さ ら に、 プ ロ セ ッ サは、 MSR の IE ビ ッ ト を ク リ アに し て、 今後の割 り 込みをデ ィ ス エーブ ルに し ます。 RTID 命令が実行 さ れ る と 、 IE ビ ッ ト は自動的に再びセ ッ ト さ れます。 MSR の処理中ブ レー ク (BIP) ま たは処理中例外 (EIP) が 1 にセ ッ ト さ れてい る と 、 プ ロ セ ッ サは割 り 込みを無視 し ます。 パ ラ メ ー タ ー C_INTERRUPT_IS_EDGE を使用する と 、外部割込みはレベル セ ン シテ ィ ブ ま たはエ ッ ジ セ ン シテ ィ ブに設定 さ れます。 • レベル セ ン シテ ィ ブの割 り 込みを使用する 場合、MicroBlaze が割 り 込みを処理 し て割 り 込みベ ク タ ーにジ ャ ンプ す る ま で、 Interrupt 入力はセ ッ ト さ れた状態を維持す る 必要があ り ます。 ソ フ ト ウ ェ アは、 割 り 込みハン ド ラ ー か ら 戻 る 前に割 り 込みを ク リ アにす る 必要があ り ます。 ク リ アにな っ ていない と 、 割 り 込みハン ド ラ ーか ら 戻っ た と き に割 り 込みが イ ネーブルな る と すぐ に、 ま た割 り 込みが処理 さ れます。 • エ ッ ジ セ ン シテ ィ ブの割 り 込みを使用する 場合、 MicroBlaze は Interrupt 入力エ ッ ジ を検出 し て ラ ッ チ し ます。 つ ま り 、 入力は 1 ク ロ ッ ク サ イ ク ルだけアサー ト す る 必要があ り ます。 割 り 込み入力はアサー ト し た ま ま にで き ま すが、 新 し い割 り 込みが検出で き る よ う にす る には、 その前に最低 1 ク ロ ッ ク サ イ ク ル間デ ィ アサー ト し てお く 必要が あ り ま す。 エ ッ ジ セ ン シ テ ィ ブの割 り 込みの ラ ッ チは、 MSR の IE ビ ッ ト と は独立 し て行われ ま す。 IE ビ ッ ト が 0 の と き に割 り 込みが発生 し た場合は、 IE ビ ッ ト が 1 にな っ た と き にすぐ に実行 さ れます。 低レ イ テ ン シ割 り 込みモー ド Interrupt_Address 入力ポー ト を介 し て、 各割 り 込みに対 し 、 割 り 込み コ ン ト ロ ー ラ ーが直接割 り 込みベ ク タ ーを供給 す る こ と がで き る 、 低レ イ テ ン シ モー ド が利用で き ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 60 第 2 章 : MicroBlaze アーキテ ク チ ャ 割 り 込みシ ス テ ム を初期化す る と き 、 それぞれの高速割 り 込みハン ド ラ ーのア ド レ ス を割 り 込み コ ン ト ロ ー ラ ーに渡 す必要があ り ます。 特定の割 り 込みが発生する と 、 こ の割 り 込みア ド レ スは割 り 込み コ ン ト ロ ー ラ ーに よ っ て提供 さ れ、 MicroBlaze はハン ド ラ ー コ ー ド に直接ジ ャ ンプす る こ と がで き ます。 こ のモー ド な ら 、 MicroBlaze は割 り 込み コ ン ト ロ ー ラ ーへ、 適切な割 り 込み肯定応答を直接送信す る こ と も で き ます (Interrupt_Ack 出力ポー ト を介す) が、 ソ ース で レベル セ ン シテ ィ ブの割 り 込みを肯定応答す る のは、 やは り 割 り 込み サービ ス ルーチンの役目です。 こ の情報に よ り 、 割 り 込み コ ン ト ロ ー ラ ーは、 レベル セ ン シ テ ィ ブの割 り 込み と エ ッ ジ ト リ ガーの割 り 込みの両方 に対 し て、 適切に割 り 込みを肯定応答で き ます。 割 り 込み処理 イ ベン ト を割 り 込み コ ン ト ロ ー ラ ーに通知す る には、 Interrupt_Ack を次の よ う に設定 し ます。 • 01 : MicroBlaze が割 り 込みハン ド ラ ー コー ド にジ ャ ンプす る • 10 : RTID 命令が割 り 込みか ら 戻 る よ う に実行 さ れ る • 11 : MSR[IE] が 0 か ら 1 へ と 変更 さ れ る 。 つま り 割 り 込みが再び イ ネーブルにな る 。 Interrupt_Ack 出力ポー ト は、 1 ク ロ ッ ク サ イ ク ル間ア ク テ ィ ブにな り 、 それか ら 00 に リ セ ッ ト さ れます。 レ イテンシ MicroBlaze が割 り 込み発生時か ら 割 り 込みサービ ス ルーチ ン (ISR) に入 る ま でにかか る 時間は、 プ ロ セ ッ サの コ ン フ ィ ギ ュ レ ー シ ョ ン と 、 割 り 込みベ ク タ ー を 格納す る メ モ リ コ ン ト ロ ー ラ ー の レ イ テ ン シ に 左右 さ れ ま す。 MicroBlaze にハー ド ウ ェ ア ド ラ イ バーが コ ン フ ィ ギ ュ レー ト さ れてい る 場合は、除算命令の実行中に割 り 込みが発生 す る と き 、 レ イ テ ン シが最大にな り ます。 低レ イ テ ン シ割 り 込みモー ド では、 各割 り 込みの割 り 込みベ ク タ ーが割 り 込み コ ン ト ロ ー ラ ーに よ り 直接供給 さ れ る ので、 ISR に入 る 時間が大幅に短縮 さ れます。 高速割 り 込みには コ ンパ イ ラ サポー ト があ る ので、 共通 ISR の必要は ま っ た く あ り ません。 代わ り に、 個々の割 り 込みの ISR は直接読み出 さ れ、 コ ンパ イ ラ は ISR で使用 さ れ る レ ジ ス タ の保存 と 復元を行い ます。 等価擬似 コ ー ド r14 PC if C_USE_INTERRUPT = 2 PC Interrupt_Address Interrupt_Ack 01 else PC C_BASE_VECTORS + 0x00000010 MSR[IE] 0 MSR[UMS] MSR[UM], MSR[UM] 0, MSR[VMS] MSR[VM], MSR[VM] 0 Reservation 0 ユーザー ベ ク タ ー (例外) ユーザー例外ベ ク タ ーはア ド レ ス 0x8 にあ り ます。 ユーザー例外は、 ソ フ ト ウ ェ ア フ ロ ーに 「BRALID Rx,0x8」 命令 を挿入す る と 発生 し ま す。 Rx は任意の汎用レ ジ ス タ を指定で き ま すが、 ユーザー例外戻 り ア ド レ ス の格納には R15 を使用 し 、 ユーザー例外ハン ド ラ ーか ら 戻 る には RTSD 命令を使用す る こ と を推奨 し ます。 擬似 コ ー ド rx PC PC C_BASE_VECTORS + 0x00000008 MSR[UMS] MSR[UM], MSR[UM] 0, MSR[VMS] MSR[VM], MSR[VM] 0 Reservation 0 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 61 第 2 章 : MicroBlaze アーキテ ク チ ャ 命令キ ャ ッ シ ュ 概要 MicoBlaze にオプシ ョ ンで命令キ ャ ッ シ ュ を使用す る と 、LMB ア ド レ ス範囲外にあ る コ ー ド を実行す る 際のパフ ォー マ ン ス を改善で き ます。 命令キ ャ ッ シ ュ の機能は、 次の と お り です。 • 直接マ ッ プ (一方向のア ソ シエ イ テ ィ ブ) • 選択可能な キ ャ ッ シ ュ 可能な メ モ リ ア ド レ ス範囲 • コ ン フ ィ ギ ュ レーシ ョ ン可能な キ ャ ッ シ ュ お よ び タ グ サ イ ズ • AXI4 イ ン タ ーフ ェ イ ス でのキ ャ ッ シ ン グ (M_AXI_IC) • 4、 8、 ま たは 16 ワ ー ド のキ ャ ッ シ ュ ラ イ ン を使用す る オプシ ョ ン • MSR のビ ッ ト を使用 し て キ ャ ッ シ ュ のオン/オ フ を制御 • オプシ ョ ンの WIC 命令で命令キ ャ ッ シ ュ ラ イ ン を無効化 • オプシ ョ ンの ス ト リ ーム バ ッ フ ァ ーで命令をプ リ フ ェ ッ チ し てパフ ォーマ ン ス を改善 • オプシ ョ ンのビ ク テ ィ ム キ ャ ッ シ ュ で追い出 さ れた キ ャ ッ シ ュ ラ イ ン デー タ を保存 し てパフ ォーマ ン ス を改善 • オプシ ョ ンのパ リ テ ィ 保護で、 ブ ロ ッ ク RAM ビ ッ ト エ ラ ーが検出 さ れた場合にキ ャ ッ シ ュ ラ イ ン を無効化 • オプシ ョ ンでデー タ 幅を 32 ビ ッ ト にす る か、 キ ャ ッ シ ュ ラ イ ン全体にす る か、 ま たは 512 ビ ッ ト にす る か選択 一般的な命令キ ャ ッ シ ュの機能 命令キ ャ ッ シ ュ が使用 さ れ る 場合、 メ モ リ ア ド レ ス空間は、 キ ャ ッ シ ュ 可能なセグ メ ン ト と キ ャ ッ シ ュ 不可能なセグ メ ン ト に分け ら れます。 キ ャ ッ シ ュ 可能なセグ メ ン ト は、 C_ICACHE_BASEADDR お よ び C_ICACHE_HIGHADDR と い う 2 つのパ ラ メ ー タ ーで決め ら れます。 こ の範囲内のア ド レ ス はすべて、 キ ャ ッ シ ュ 可能な ア ド レ ス セグ メ ン ト に 対応 し ます。 その他のア ド レ ス はみな キ ャ ッ シ ュ 不可能なセグ メ ン ト です。 キ ャ ッ シ ュ 可能なセグ メ ン ト サ イ ズは 2N であ る 必要があ り ます。 こ の と き N は正の整数です。 C_ICACHE_BASEADDR お よ び C_ICACHE_HIGHADDR で指定 さ れ る 範囲は、 2 のべ き 乗 (= 2N) で、 C_ICACHE_BASEADDR の N 個の最下位ビ ッ ト はゼ ロ であ る 必要があ り ます。 キ ャ ッ シ ュ 可能な命令ア ド レ ス は、 キ ャ ッ シ ュ ア ド レ ス と タ グ ア ド レ ス の 2 つの部分で構成 さ れてい ます。 MicroBlaze 命令キ ャ ッ シ ュ は、 64 バ イ ト か ら 64kB ま での範囲で コ ン フ ィ ギ ュ レー ト で き ます。 こ れは、 6 か ら 16 ビ ッ ト ま でのキ ャ ッ シ ュ ア ド レ ス に対応 し てい ます。 キ ャ ッ シ ュ ア ド レ ス と 合わせた タ グ ア ド レ ス は、 キ ャ ッ シ ュ 可能な メ モ リ の フル ア ド レ ス と 一致 し てい る 必要があ り ます。 2kB 未満のキ ャ ッ シ ュ サ イ ズ を選択する 場合、 タ グ RAM と 命令 RAM を イ ンプ リ メ ン ト す る のに、 分散 RAM が使用 さ れます。 パ ラ メ ー タ ー C_ICACHE_FORCE_TAG_LUTRAM が 1 に設定 さ れてい る 場合は、タ グ RAM を イ ンプ リ メ ン ト す る のに分散 RAM が常に使用 さ れます。 こ のパ ラ メ ー タ ーは、 4 ワー ド のキ ャ ッ シ ュ ラ イ ンの場合は 8kB 以下、 8 ワ ー ド のキ ャ ッ シ ュ ラ イ ンの場合は 16kB 以下、16 ワ ー ド のキ ャ ッ シ ュ ラ イ ンの場合は 32kB 以下のキ ャ ッ シ ュ サ イ ズでのみ使用で き ま す。 た と えば、 C_ICACHE_BASEADDR= 0x00300000、 C_ICACHE_HIGHADDR=0x0030ffff、 C_CACHE_BYTE_SIZE=4096、 C_ICACHE_LINE_LEN=8、 お よ び C_ICACHE_FORCE_TAG_LUTRAM=0 で コ ン フ ィ ギ ュ レー ト さ れてい る MicroBlaze では、 64kB のキ ャ ッ シ ュ 可能 メ モ リ はバ イ ト ア ド レ ス の 16 ビ ッ ト を、 4kB のキ ャ ッ シ ュ はバ イ ト ア ド レ ス の 12 ビ ッ ト のを使用する ので、 ア ド レ ス の タ グ幅は 16-12=4 ビ ッ ト にな り ます。 こ の コ ン フ ィ ギ ュ レーシ ョ ンに必要なブ ロ ッ ク RAM プ リ ミ テ ィ ブの総数は、 1024 の命令ワ ー ド を格納する のに RAMB16 を 2 つ、 128 のキ ャ ッ シ ュ ラ イ ン エン ト リ に RAMB16 を 1 つで、 それぞれ、 4 ビ ッ ト の タ グ、 8 ワー ド の 有効ビ ッ ト 、 1 ラ イ ン有効ビ ッ ト で構成 さ れてい ます。 合計で 3 つの RAMB16 プ リ ミ テ ィ ブにな り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 62 第 2 章 : MicroBlaze アーキテ ク チ ャ 63 ページの図 2-22 は、 命令キ ャ ッ シ ュ の構成を示 し てい ます。 命令ア ド レ ス ビ ッ ト 0 タグ ア ド レス ラ イン ア ド レス ワー ド ア ド レ ス タグ RAM 3031 - - キャ ッ シュ ア ド レス タグ キャ ッ シュ ヒ ッ ト = 有効 ( ワー ド と ラ イ ン ) 命令 キ ャ ッ シ ュ命令デー タ RAM 図 2‐22 : 命令キ ャ ッ シ ュの構成 命令キ ャ ッ シ ュ操作 フ ェ ッ チ さ れ る ど の命令に対 し て も 、 命令ア ド レ ス がキ ャ ッ シ ュ 可能なセグ メ ン ト にあ る か ど う か を命令キ ャ ッ シ ュ が検出 し ます。 ア ド レ ス がキ ャ ッ シ ュ で き ない場合、 キ ャ ッ シ ュ コ ン ト ロ ー ラ ーは命令を無視 し 、 M_AXI_IP ま たは LMB に リ ク エ ス ト を完了 さ せます。 ア ド レ ス がキ ャ ッ シ ュ で き る 場合は、 リ ク エ ス ト さ れた ア ド レ ス が現在キ ャ ッ シ ュ さ れてい る こ と をチ ェ ッ ク す る ため、 タ グ メ モ リ でル ッ ク ア ッ プが実行 さ れ ます。 ワ ー ド お よ び ラ イ ン の有効 ビ ッ ト がセ ッ ト さ れていて、 タ グ ア ド レ ス が命令ア ド レ ス の タ グ セグ メ ン ト と 一致 し ていれば、 ル ッ ク ア ッ プは成 功です。 キ ャ ッ シ ュ ミ ス の場合、 キ ャ ッ シ ュ コ ン ト ロ ー ラ ーは命令 AXI4 イ ン タ ーフ ェ イ ス (M_AXI_IC) を介 し て新 し い命令を リ ク エ ス ト し 、 メ モ リ コ ン ト ロ ー ラ ーが関連付け ら れてい る キ ャ ッ シ ュ ラ イ ン を返すま で待機 し ます。 C_ICACHE_DATA_WIDTH はバ ス デー タ 幅を指定 し ますが、 32 ビ ッ ト 、 キ ャ ッ シ ュ ラ イ ン全体 (128、 256、 ま たは 512)、 ま たは 512 ビ ッ ト を選択 し ます。 C_FAULT_TOLERANT が 1 に設定 さ れてい る 場合、 タ グ ま たは命令ブ ロ ッ ク RAM でパ リ テ ィ エ ラ ーが検出 さ れ る と 、 キ ャ ッ シ ュ ミ ス も 発生 し ます。 命令キ ャ ッ シ ュ は、 32 ビ ッ ト のデー タ 幅が選択 さ れてい る 場合、 AXI4 イ ン タ ーフ ェ イ ス に対 し バース ト ア ク セ ス を 実行 し ますが、 それ以外の場合はシ ン グル ア ク セ ス にな り ます。 ス ト リ ーム バ ッ フ ァ ー C_ICACHE_STREAMS を 1 に設定 し て ス ト リ ーム バ ッ フ ァ ーを イ ネーブルに し てい る 場合、 ス ト リ ーム バ ッ フ ァ ー がい っぱいにな る ま で、 最後に リ ク エ ス ト さ れた ア ド レ ス に続いて、 順次、 前 も っ て投機的にキ ャ ッ シ ュ ラ イ ン が フ ェ ッ チ さ れます。 ス ト リ ーム バ ッ フ ァ ーはキ ャ ッ シ ュ ラ イ ン を 2 つま で保持で き ます。 その後、 ス ト リ ーム バ ッ フ ァ ーに よ り プ リ フ ェ ッ チ さ れた キ ャ ッ シ ュ ラ イ ンか ら 、プ ロ セ ッ サが命令を リ ク エ ス ト す る と ( リ ニ ア コ ー ド で起 き る )、 命令はす ぐ に使用可能にな り ます。 ス ト リ ーム バ ッ フ ァ ーを イ ネーブルにす る と 、プ ロ セ ッ サが メ モ リ か ら 命令を フ ェ ッ チす る のにかか る 時間が短 く な る ため、 パフ ォーマ ン ス が改善 さ れ る こ と が よ く あ り ます。 C_ICACHE_DATA_WIDTH は、 各 ク ロ ッ ク サ イ ク ルで ス ト リ ーム バ ッ フ ァ ーか ら 転送 さ れ る デー タ 量を指定 し ます (32 ビ ッ ト ま たはキ ャ ッ シ ュ ラ イ ン全体の ど ち ら か を指定)。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 63 第 2 章 : MicroBlaze アーキテ ク チ ャ 命令キ ャ ッ シ ュ ス ト リ ーム バ ッ フ ァ ーを使用で き る よ う にす る には、 エ リ ア最適化を イ ネーブルに し ないで く だ さ い。 ビ ク テ ィ ム キ ャ ッ シ ュ C_ICACHE_VICTIMS を 2、 4、 ま たは 8 に設定す る と 、 ビ ク テ ィ ム キ ャ ッ シ ュ は イ ネーブルにな り ます。 こ のパ ラ メ ー タ ーは ビ ク テ ィ ム キ ャ ッ シ ュ に格納で き る キ ャ ッ シ ュ ラ イ ン の数を定義 し ま す。 キ ャ ッ シ ュ ラ イ ン が キ ャ ッ シ ュ か ら 追い出 さ れ る と 、 常にビ ク テ ィ ム キ ャ ッ シ ュ に格納 さ れます。 最近の ラ イ ン を格納 し てお く と 、 プ ロ セ ッ サ がそれを リ ク エ ス ト し た場合、 よ り 高速に フ ェ ッ チで き る ので、 パ フ ォ ーマ ン ス が改善 し ま す。 ビ ク テ ィ ム キ ャ ッ シ ュ が使用 さ れない場合、 追い出 さ れた キ ャ ッ シ ュ ラ イ ンは、 必要にな っ た と き に、 も う 1 度 メ モ リ か ら 読み出す必 要があ り ます。 C_ICACHE_DATA_WIDTH は、 各 ク ロ ッ ク サ イ ク ルで、 ビ ク テ ィ ム キ ャ ッ シ ュ か ら 、 ま たはビ ク テ ィ ム キ ャ ッ シ ュ へ転送 さ れ る デー タ 量を指定 し ます (32 ビ ッ ト ま たはキ ャ ッ シ ュ ラ イ ン全体の ど ち ら かを指定)。 ビ ク テ ィ ム キ ャ ッ シ ュ を使用で き る よ う にする には、 エ リ ア最適化を イ ネーブルに し ないで く だ さ い。 命令キ ャ ッ シ ュ ソ フ ト ウ ェ ア サポー ト MSR ビ ッ ト MSR の ICE ビ ッ ト を使用 し 、 ソ フ ト ウ ェ ア制御でキ ャ ッ シ ュ を イ ネーブルお よ びデ ィ ス エーブルにで き ます。 キ ャ ッ シ ュ がデ ィ ス エーブルの場合は、 デ フ ォ ル ト で、 キ ャ ッ シ ュ の内容は保持 さ れ ま す。 キ ャ ッ シ ュ ラ イ ン は、 WIC 命令を使用す る か、 MicroBlaze のハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク を使用 し て、 無効化する こ と がで き ます。 WIC 命令 オプシ ョ ンの WIC 命令 (C_ALLOW_ICACHE_WR=1) は、 アプ リ ケーシ ョ ンか ら 命令キ ャ ッ シ ュ のキ ャ ッ シ ュ ラ イ ン を無効化す る のに使用 し ます。 詳細は、 第 5 章 「MicroBlaze 命令セ ッ ト アーキ テ ク チ ャ 」 を参照 し て く だ さ い。 WIC 命令をパ リ テ ィ 保護 と 一緒に使用す る と 、 エ ラ ーを累積す る のを避け る ため、 定期的にキ ャ ッ シ ュ のエン ト リ を 無効化す る こ と がで き ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 64 第 2 章 : MicroBlaze アーキテ ク チ ャ デー タ キ ャ ッ シ ュ 概要 MicroBlaze では、 パ フ ォ ーマ ン ス向上のため、 オプシ ョ ン のデー タ キ ャ ッ シ ュ を使用す る こ と がで き ます。 キ ャ ッ シ ュ さ れた メ モ リ の範囲には、 LMB ア ド レ ス範囲内のア ド レ ス を含めないで く だ さ い。 デー タ キ ャ ッ シ ュ の機能は、 次の と お り です。 • 直接マ ッ プ (1 ウ ェ イ ア ソ シエ イ テ ィ ブ) • ラ イ ト スルーま たは ラ イ ト バ ッ ク • ユーザー選択可能な キ ャ ッ シ ュ 可能な メ モ リ ア ド レ ス範囲 • コ ン フ ィ ギ ュ レーシ ョ ン可能な キ ャ ッ シ ュ サ イ ズお よ び タ グ サ イ ズ • AXI4 イ ン タ ーフ ェ イ ス でのキ ャ ッ シ ン グ (M_AXI_IC) • 4、 8、 ま たは 16 ワ ー ド のキ ャ ッ シ ュ ラ イ ン を使用す る オプシ ョ ン • MSR のビ ッ ト を使用 し て キ ャ ッ シ ュ のオン/オ フ を制御 • デー タ キ ャ ッ シ ュ ラ イ ン を無効化ま たはフ ラ ッ シ ュ す る ためのオプシ ョ ンの WDC 命令 • オプシ ョ ンのビ ク テ ィ ム キ ャ ッ シ ュ ( ラ イ ト バ ッ ク ) で追い出 さ れた キ ャ ッ シ ュ ラ イ ン デー タ を保存 し てパ フ ォーマ ン ス を改善 • ラ イ ト スルー キ ャ ッ シ ュ のオプシ ョ ンのパ リ テ ィ 保護で、 ブ ロ ッ ク RAM ビ ッ ト エ ラ ーが検出 さ れた場合に キ ャ ッ シ ュ ラ イ ン を無効化 • オプシ ョ ンでデー タ 幅を 32 ビ ッ ト にす る か、 キ ャ ッ シ ュ ラ イ ン全体にす る か、 ま たは 512 ビ ッ ト にす る か選択 一般的なデー タ キ ャ ッ シ ュの機能 デー タ キ ャ ッ シ ュ が使用 さ れ る 場合、 メ モ リ ア ド レ ス空間は、 キ ャ ッ シ ュ 可能なセグ メ ン ト と キ ャ ッ シ ュ 不可能な セグ メ ン ト に分かれます。 キ ャ ッ シ ュ 可能なセグ メ ン ト は、 C_DCACHE_BASEADDR お よ び C_DCACHE_HIGHADDR と い う 2 つのパ ラ メ ー タ ーで決め ら れます。 こ の範囲内のア ド レ ス はすべて、 キ ャ ッ シ ュ 可能なア ド レ ス空間に対応 し ます。 その他のア ド レ ス はみな キ ャ ッ シ ュ 不可能なセグ メ ン ト です。 キ ャ ッ シ ュ 可能なセグ メ ン ト サ イ ズは 2N であ る 必要があ り ます。 こ の と き N は正の整数です。 C_DCACHE_BASEADDR お よ び C_DCACHE_HIGHADDR で指定 さ れ る 範囲は、 2 のべ き 乗 (= 2N) で、 C_DCACHE_BASEADDR の N 個の最下位ビ ッ ト はゼ ロ であ る 必要があ り ます。 図 2-23 はデー タ キ ャ ッ シ ュ の構成を示 し てい ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 65 第 2 章 : MicroBlaze アーキテ ク チ ャ デー タ ア ド レ ス ビ ッ ト 0 タグ ア ド レス タグ ア ド レス RAM タグ キ ャ ッ シ ュ ワー ド ア ド レ ス = 有効 3031 - - キャ ッ シュ ヒ ッ ト ロー ド 命令 デー タ ア ド レス キ ャ ッ シ ュ デー タ RAM 図 2‐23 : デー タ キ ャ ッ シ ュの構成 キ ャ ッ シ ュ 可能 な デー タ ア ド レ ス は、 キ ャ ッ シ ュ ア ド レ ス と タ グ ア ド レ ス の 2 つの部分で構成 さ れ て い ま す。 MicroBlaze デー タ キ ャ ッ シ ュ は、 64 バ イ ト か ら 64kB ま での範囲で コ ン フ ィ ギ ュ レー ト で き ます。 こ れは、 6 か ら 16 ビ ッ ト ま でのキ ャ ッ シ ュ ア ド レ ス に対応 し てい ます。 キ ャ ッ シ ュ ア ド レ ス と 合わせた タ グ ア ド レ ス は、 キ ャ ッ シ ュ 可能な メ モ リ の フル ア ド レ ス と 一致 し てい る 必要があ り ます。 2kB 未満のキ ャ ッ シ ュ サ イ ズ を選択す る 場合は、 タ グ RAM お よ び デ ー タ RAM を イ ン プ リ メ ン ト す る の に 分散 RAM が 使 用 さ れ ま す が、 例 外 が あ っ て、 C_AREA_OPTIMIZED が設定 さ れていて、C_DCACHE_USE_WRITEBACK が設定 さ れていない場合は、デー タ RAM には常にブ ロ ッ ク RAM が使用 さ れます。パ ラ メ ー タ ー C_DCACHE_FORCE_TAG_LUTRAM が 1 に設定 さ れてい る 場 合は、 タ グ RAM を イ ンプ リ メ ン ト す る のに分散 RAM が常に使用 さ れます。 こ のパ ラ メ ー タ ーは、 4 ワー ド のキ ャ ッ シ ュ ラ イ ンの場合は 8kB 以下、 8 ワー ド のキ ャ ッ シ ュ ラ イ ンの場合は 16kB 以下、 16 ワー ド のキ ャ ッ シ ュ ラ イ ンの 場合は 32kB 以下のキ ャ ッ シ ュ サ イ ズでのみ使用で き ます。 た と えば、 C_DCACHE_BASEADDR=0x00400000、 C_DCACHE_HIGHADDR=0x00403fff、 C_DCACHE_BYTE_SIZE=2048、 C_DCACHE_LINE_LEN=4、 お よ び C_DCACHE_FORCE_TAG_LUTRAM=0 で コ ン フ ィ ギ ュ レー ト さ れてい る MicroBlaze では、 16 kB のキ ャ ッ シ ュ 可能 メ モ リ はバ イ ト ア ド レ ス の 14 ビ ッ ト を、 2 kB のキ ャ ッ シ ュ はバ イ ト ア ド レ ス の 11 ビ ッ ト を使用す る ので、 ア ド レ ス の タ グ幅は 14-11=3 ビ ッ ト にな り ます。 こ の コ ン フ ィ ギ ュ レーシ ョ ンに必要なブ ロ ッ ク RAM プ リ ミ テ ィ ブの総数は、 512 のデー タ ワー ド を格納す る のに RAMB16 を 1 つ、 128 のキ ャ ッ シ ュ ラ イ ン エン ト リ に RAMB16 を 1 つで、 それぞれ、 3 ビ ッ ト の タ グ、 4 ワー ド の 有効ビ ッ ト 、 1 ラ イ ン有効ビ ッ ト で構成 さ れてい ます。 合計で 2 つの RAMB16 プ リ ミ テ ィ ブにな り ます。 デー タ キ ャ ッ シ ュ操作 MicroBlaze のデー タ キ ャ ッ シ ュ で使用 さ れ る キ ャ ッ シ ン グ ポ リ シー ( ラ イ ト バ ッ ク ま たは ラ イ ト スルー ) は、 C_DCACHE_USE_WRITEBACK で決ま り ます。 こ のパ ラ メ ー タ ーが設定 さ れてい る と 、 ラ イ ト バ ッ ク プ ロ ト コ ルが イ ンプ リ メ ン ト さ れ、 ま た、 設定 さ れていなければ、 ラ イ ト スルーが イ ンプ リ メ ン ト さ れます。 し か し 、 MMU を使 用 し て コ ン フ ィ ギ ュ レー ト さ れてい る 場合 (C_USE_MMU > 1、 C_AREA_OPTIMIZED = 0、 C_DCACHE_USE_WRITEBACK = 1) は、仮想モー ド のキ ャ ッ シ ン グ ポ リ シーは TLB エン ト リ の W ス ト レージ属性で 決ま り ます。 リ アル モー ド の場合は ラ イ ト バ ッ ク が使用 さ れます。 ラ イ ト バ ッ ク プ ロ ト コ ルの場合、 キ ャ ッ シ ュ 可能な範囲にあ る ア ド レ ス に ス ト ア命令があ る と 、 キ ャ ッ シ ュ さ れた デー タ が常にア ッ プデー ト さ れ ま す。 タ ーゲ ッ ト ア ド レ ス ワ ー ド がキ ャ ッ シ ュ にな く (すなわち ア ク セ ス はキ ャ ッ シ ュ ミ ス)、キ ャ ッ シ ュ の ロ ケーシ ョ ンに ま だ メ モ リ に書き 込まれていないデー タ が含まれてい る (キ ャ ッ シ ュ ロ ケー シ ョ ンがダーテ ィ ) 場合、新 し いデー タ でキ ャ ッ シ ュ がア ッ プデー ト さ れ る 前に、古いデー タ がデー タ AXI4 イ ン タ ー フ ェ イ ス (M_AXI_DC) を介 し て外部 メ モ リ に書 き 込ま れます。 1 ワー ド のみを書 き 込む必要があ る 場合は、 1 ワー ド 書 き 込みが使用 さ れ、そ う でなければバース ト 書 き 込みが使用 さ れます。バ イ ト ま たはハーフバ イ ト の ス ト アの場合、 キ ャ ッ シ ュ ミ ス があ る と 、 まずア ド レ ス がデー タ AXI4 イ ン タ ーフ ェ イ ス を介 し て リ ク エ ス ト さ れ、 ワ ー ド ス ト アは キ ャ ッ シ ュ だけ を ア ッ プデー ト し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 66 第 2 章 : MicroBlaze アーキテ ク チ ャ ラ イ ト ス ルー プ ロ ト コ ルの場合、 キ ャ ッ シ ュ 可能な範囲にあ る ア ド レ スへの ス ト ア命令は、 等価のバ イ ト 、 ハーフ ワー ド 、 ワー ド の書き 込みをデー タ AXI4 イ ン タ ーフ ェ イ ス を外部 メ モ リ に対 し て生成 し ます。 タ ーゲ ッ ト ア ド レ ス ワー ド がキ ャ ッ シ ュ にあ る 場合 (つま り 書 き 込みがキ ャ ッ シ ュ ヒ ッ ト )、書 き 込み も キ ャ ッ シ ュ さ れたデー タ を ア ッ プ デー ト し ます。 書 き 込みキ ャ ッ シ ュ ミ ス は、 関連付け ら れた キ ャ ッ シ ュ ラ イ ン を キ ャ ッ シ ュ には ロ ー ド し ません。 キ ャ ッ シ ュ が イ ネーブルにな っ てい る も の と し て、 リ ク エ ス ト さ れたデー タ が現在キ ャ ッ シ ュ さ れてい る か ど う か を 判断す る ためのチ ェ ッ ク が、 キ ャ ッ シ ュ 可能範囲にあ る ア ド レ ス か ら の ロ ー ド 命令に よ っ て実行 さ れ ま す。 キ ャ ッ シ ュ さ れていれば (すなわち キ ャ ッ シ ュ ヒ ッ ト )、 リ ク エ ス ト さ れたデー タ はキ ャ ッ シ ュ か ら 読み出 さ れます。 キ ャ ッ シ ュ さ れていなければ (すなわち キ ャ ッ シ ュ ミ ス)、 バース ト 読み出 し を使用 し てデー タ AXI4 イ ン タ ーフ ェ イ ス を介 し て ア ド レ ス が リ ク エ ス ト さ れ、 リ ク エ ス ト さ れた ア ド レ ス に関連付け ら れてい る キ ャ ッ シ ュ ラ イ ン が外部 メ モ リ コ ン ト ロ ー ラ ーか ら 返 さ れ る ま で、 プ ロ セ ッ サのパ イ プ ラ イ ンは ス ト ール し ます。 C_DCACHE_DATA_WIDTH はバ ス デー タ 幅を指定 し ますが、 32 ビ ッ ト 、 キ ャ ッ シ ュ ラ イ ン全体 (128、 256、 ま たは 512)、 ま たは 512 ビ ッ ト を選択 し ます。 C_FAULT_TOLERANT が 1 に設定 さ れ、 ラ イ ト スルー プ ロ ト コ ルが使用 さ れてい る 場合、 タ グ ま たはデー タ ブ ロ ッ ク RAM でパ リ テ ィ エ ラ ーが検出 さ れ る と 、 キ ャ ッ シ ュ ミ ス も 発生 し ます。 デー タ キ ャ ッ シ ュ AXI4 イ ン タ ーフ ェ イ ス で処理 さ れ る ア ク セ ス タ イ プはすべて、 表 2-39 に ま と め ら れてい ます。 表 2‐39 : デー タ キ ャ ッ シ ュ イ ン タ ー フ ェ イ ス ア ク セス ポ リ シー ラ イ ト スルー ラ イ ト バッ ク ス テー ト 方向 ア ク セス タ イ プ キャ ッ シュはイ ネーブル 読み出 し 32 ビ ッ ト イ ン タ ーフ ェ イ ス の非排他的ア ク セ ス お よ び ACE が イ ネーブルにな っ てい る 排他的な ア ク セ ス の場合はバース ト 、 それ以外の場合はシ ン グル ア ク セ ス 書 き 込み シ ン グル ア ク セ ス キャ ッ シュは ディ ス エーブル 読み出 し ACE が イ ネーブルに な っ て い る 32 ビ ッ ト イ ン タ ー フ ェ イ ス の排他的な ア ク セ ス の場合はバース ト 、 それ 以外の場合はシ ン グル ア ク セ ス 書 き 込み シ ン グル ア ク セ ス キャ ッ シュはイ ネーブル 読み出 し 32 ビ ッ ト イ ン タ ーフ ェ イ ス の場合はバー ス ト 、 それ 以外の場合はシ ン グル ア ク セ ス 書 き 込み 複数の有効ワー ド があ る 32 ビ ッ ト イ ン タ ーフ ェ イ ス のキ ャ ッ シ ュ ラ イ ンの場合はバース ト 、 それ以外はシ ン グル ア ク セ ス キャ ッ シュは ディ ス エーブル 読み出 し 32 ビ ッ ト イ ン タ ーフ ェ イ ス の非排他的ア ク セ ス の場 合はバース ト で目的のデー タ 以外はすべて破棄、 それ 以外の場合はシ ン グル ア ク セ ス 書 き 込み シ ン グル ア ク セ ス ビ ク テ ィ ム キ ャ ッ シ ュ C_DCACHE_VICTIMS を 2、 4、 ま たは 8 に設定す る と 、 ビ ク テ ィ ム キ ャ ッ シ ュ は イ ネーブルにな り ます。 こ のパ ラ メ ー タ ーは ビ ク テ ィ ム キ ャ ッ シ ュ に格納で き る キ ャ ッ シ ュ ラ イ ン の数 を 定義 し ま す。 キ ャ ッ シ ュ ラ イ ン 全体が キ ャ ッ シ ュ か ら 追い出 さ れ る と 、 常にビ ク テ ィ ム キ ャ ッ シ ュ に格納 さ れます。 最近の ラ イ ン を格納 し てお く と 、 プ ロ セ ッ サがそれを リ ク エ ス ト し た場合、 よ り 高速に フ ェ ッ チで き る ので、 パ フ ォ ーマ ン ス が改善 し ま す。 ビ ク テ ィ ム キ ャ ッ シ ュ が使用 さ れない場合、 追い出 さ れた キ ャ ッ シ ュ ラ イ ンは、 必要にな っ た と き に、 も う 1 度 メ モ リ か ら 読み 出す必要があ り ます。 AXI4 イ ン タ ーフ ェ イ ス の場合、 C_DCACHE_DATA_WIDTH は、 各 ク ロ ッ ク サ イ ク ルで、 ビ ク テ ィ ム キ ャ ッ シ ュ か ら 、 ま たはビ ク テ ィ ム キ ャ ッ シ ュ へ転送 さ れ る デー タ 量を指定 し ます (32 ビ ッ ト ま たはキ ャ ッ シ ュ ラ イ ン全体の ど ち ら か を指定)。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 67 第 2 章 : MicroBlaze アーキテ ク チ ャ ビ ク テ ィ ム キ ャ ッ シ ュ を使用で き る よ う にする には、 ラ イ ト バ ッ ク を必ず イ ネーブルに し 、 エ リ ア最適化を イ ネーブ ルに し ないで く だ さ い。 デー タ キ ャ ッ シ ュ ソ フ ト ウ ェ ア サポー ト MSR ビ ッ ト キ ャ ッ シ ュ を イ ネーブルにす る か ど う かは、 MSR の DCE ビ ッ ト で制御 し ます。 キ ャ ッ シ ュ をデ ィ ス エーブルにす る 場合は、 M_AXI_DP を介 し て リ ー ド バ ッ ク をする 前に、 キ ャ ッ シ ュ 可能な範囲内の こ れま での書き 込みすべてが、 外 部 メ モ リ で完了 し てい る こ と を ユーザーが確認す る 必要があ り ます。 こ れには、 まずキ ャ ッ シ ュ を オ フ にす る 直前に セマ フ ォ に書 き 込みを し てか ら 、 書 き 込みが完了す る ま でループでポー リ ン グ し ます。 キ ャ ッ シ ュ がデ ィ ス エーブルの場合は、 デキ ャ ッ シ ュ の内容は保持 さ れます。 WDC 命令 オプシ ョ ンの WDC 命令 (C_ALLOW_DCACHE_WR=1) は、 アプ リ ケーシ ョ ンか ら デー タ キ ャ ッ シ ュ のキ ャ ッ シ ュ ラ イ ン を無効化ま たはフ ラ ッ シ ュ す る のに使用 し ます。 詳細は、 第 5 章 「MicroBlaze 命令セ ッ ト アーキ テ ク チ ャ 」 を参 照 し て く だ さ い。 WDC 命令をパ リ テ ィ 保護 と 一緒に使用す る と 、 エ ラ ーを累積す る の を避け る ため、 定期的にキ ャ ッ シ ュ のエン ト リ を無効化す る こ と がで き ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 68 第 2 章 : MicroBlaze アーキテ ク チ ャ 浮動小数点ユニ ッ ト (FPU) 概要 MicroBlaze の浮動小数点ユニ ッ ト は、 IEEE 754-1985 standard に基づいてい ます。 • 無限大、 非数 (NaN) お よ び 0 も 含めて、 IEEE 754 の単精度浮動小数点フ ォーマ ッ ト を使用 • 加算、 減算、 乗算、 除算、 比較、 変換、 平方根の命令をサポー ト • 近似値に丸め る モー ド を イ ンプ リ メ ン ト • ア ン ダーフ ロ ー、 オーバーフ ロ ー、 ゼ ロ 除算、 無効な操作に対 し 、 ス テ ィ ッ キース テー タ ス ビ ッ ト を生成 パフ ォーマ ン ス を向上 さ せ る 場合は、 規格外で次の よ う な簡素化が行われてい ます。 • 非正規化 (1) オペ ラ ン ド がサポー ト さ れてい ません。 非正規化数のハー ド ウ ェ ア浮動小数点演算は、 quiet NaN を 返 し 、 ス テ ィ ッ キーな非正規化オペ ラ ン ド エ ラ ー ビ ッ ト を FSR にセ ッ ト し ます。 詳細は26 ページの 「浮動小数 点ス テー タ ス レ ジ ス タ (FSR)」 を参照 し て く だ さ い。 • 非正規数の結果は、 符号付 き の 0 と し て格納 さ れ、 FSR にア ン ダーフ ロ ー ビ ッ ト を セ ッ ト し ます。 こ の方法は、 一般的にゼ ロ に フ ラ ッ シ ュ (FTZ) と 呼ばれます。 • quiet NaN での操作は、 NaN オペ ラ ン ド の 1つではな く 、 fixed NaN (0xFFC00000) を返 し ます。 • 浮動小数点演算の結果発生す る オーバーフ ロ ーは常に符号付 き の ¥ を返 し ます。 フ ォ ーマ ッ ト IEEE 754 の単精度浮動小数点数は、 次の 3 つの フ ィ ール ド か ら 構成 さ れてい ます。 1. 符号部 : 1 ビ ッ ト 2. 指数部 : バ イ ヤ ス し た 8 ビ ッ ト 3. 仮数部 : 23 ビ ッ ト 図 2-24 に定義 さ れてい る よ う に、 こ れ ら の フ ィ ール ド は 32 ビ ッ ト ワー ド に格納 さ れます。 符号 部 指数部 仮数部 図 2‐24 : IEEE 754 単精度フ ォ ーマ ッ ト MicroBlaze での浮動小数点数の値 v は次の よ う に解釈 さ れます。 1. 指数 = 255 で 仮数 <> 0 な ら ば、 符号ビ ッ ト に関係な く v= NaN にな り ます。 2. 指数 = 255 で 仮数 = 0 な ら ば、 v= (-1)符号 * ¥ にな り ます。 3. 0 < 指数 < 255 な ら ば、 v = (-1)符号 * 2(指数-127) * (1. 仮数) にな り ます。 4. 指数 = 0 で 仮数 <> 0 な ら ば、 v = (-1)符号 * 2-126 * (0. 仮数) にな り ます。 5. 指数 = 0 で 仮数 = 0 な ら ば、 v= (-1)sign * * 0 にな り ます。 1. 全精度で表現で き ない 0 の近似値は、 ( 1.17549*10-38 > n > 0 ) ま たは ( 0 > n > -1.17549 * 10-38 ) の範囲内の任意数 n です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 69 第 2 章 : MicroBlaze アーキテ ク チ ャ 実際には、 3 お よ び 5 のみが有用で、 後の も のはエ ラ ーか、 32 ビ ッ ト フ ォーマ ッ ト の全精度では表現で き な く な っ た 数値を表 し てい ます。 丸め MicroBlaze の FPU は、 IEEE 754 で指定 さ れてい る デフ ォ ル ト の丸めモー ド 「近似値へ丸め」 のみを イ ン プ リ メ ン ト し ます。 定義上、 任意の浮動小数点数の演算結果は、 単精度の近似値を無限大に返 し ます。 2 つの近似値が ど ち ら も 同 じ 近 さ であ る 場合、 最下位ビ ッ ト 0 のあ る ほ う が返 さ れます。 演算 MicroBlaze の FPU 演算はすべて、 専用の浮動小数点レ ジ ス タ フ ァ イ ルではな く 、 プ ロ セ ッ サの汎用レ ジ ス タ を使用 し ます。 詳細は、 「汎用レ ジ ス タ 」 を参照 し て く だ さ い。 算術演算 FPU は次の浮動小数点数演算を イ ンプ リ メ ン ト し ます。 • 加算、 fadd • 減算、 fsub • 乗算、 fmul • 減算、 fdiv • 平方根、 fsqrt (C_USE_FPU = 2, EXTENDED の場合に使用可能) 比較 FPU は次の浮動小数点数比較を イ ンプ リ メ ン ト し ます。 • 小な り 比較、 fcmp.lt • 相当比較、 fcmp.eq • 以下の比較、 fcmp.le • 大な り 比較、 fcmp.gt • 不等比較、 fcmp.ne • 以上の比較、 fcmp.ge • 不順比較、 fcmp.un (NaN に対 し 使用) 変換 FPU は次の変換を イ ンプ リ メ ン ト し ます (C_USE_FPU = 2, EXTENDED の場合に使用可能)。 • 符号付 き 整数を浮動小数点数に変換、 flt • 浮動小数点数を符号付 き 整数に変換、 fint 例外 浮動小数点ユニ ッ ト は、 MicroBlaze の一般的なハー ド ウ ェ ア例外 メ カ ニズ ム を使用 し ます。 イ ネーブルにな っ てい る 場合は、 ア ン ダーフ ロ ー、 オーバーフ ロ ー、 ゼ ロ 除算、 無効な操作 と い っ たすべての IEEE 規格の コ ンデ ィ シ ョ ン、 お よ び MicroBlaze の例外であ る 非正規化オペ ラ ン ド エ ラ ーに対 し て、 例外が投げ ら れます。 浮動小数点の例外は、 デス テ ィ ネーシ ョ ン レ ジ ス タ (Rd) への書 き 込みを抑止 し ます。 こ のため、 浮動小数点例外ハ ン ド ラ ーが、 破損 し ていない レ ジ ス タ フ ァ イ ルで操作で き ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 70 第 2 章 : MicroBlaze アーキテ ク チ ャ ソ フ ト ウ ェ ア サポー ト GCC をベース に し た、 SDK コ ンパ イ ラ シ ス テ ムでは、 MicroBlaze API に準拠 し た浮動小数点ユニ ッ ト がサポー ト さ れてい ます。 SDK を使用す る 場合、 シ ス テ ムにあ る FPU の種類に基づいて、 GCC コ マ ン ド ラ イ ンに コ ンパ イ ラ フ ラ グが自動的に追加 さ れます。 倍精度演算はすべて ソ フ ト ウ ェ アでエ ミ ュ レー ト さ れます。 xil_printf() は浮動小数点数の出力をサポー ト し ないので 注意が必要です。 標準 C ラ イ ブ ラ リ の printf() お よ び関連関数は、 浮動小数点数の出力をサポー ト し てい ますが、 プ ロ グ ラ ムの コ ー ド サ イ ズが大 き く な り ます。 ラ イ ブ ラ リ およびバイ ナ リ の互換性 SDK コ ンパ イ ラ シ ス テ ムには、 ソ フ ト ウ ェ アの浮動小数点 C ラ イ ン タ イ ム ラ イ ブ ラ リ のみが含まれてい ます。 ハー ド ウ ェ アの FPU を利用す る には、 こ れ ら の ラ イ ブ ラ リ を適切な コ ンパ イ ラ オプシ ョ ン を使用 し て再 コ ンパ イ ルす る 必要があ り ます。 異な る コ ンパ イ ルが使用 さ れてい る 場合は常に、 ビル ド 全体で FPU コ ンパ イ ラ フ ラ グが一貫 し てい る こ と を必ず確 認 し て く だ さ い。 演算子レ イ テ ン シ FPU でサポー ト さ れてい る さ ま ざ ま な演算の レ イ テ ン シは、 第 5 章 「MicroBlaze 命令セ ッ ト アーキ テ ク チ ャ 」 に ま と め ら れてい ます。 FPU 命令はパ イ プ ラ イ ン化 さ れていないため、 1 回に 1 つの演算 し か実行で き ません。 C 言語プ ロ グ ラ ミ ング 下位のアセ ンブ リ 言語のプ ロ グ ラ ミ ン グ を使用せずに、 FPU の機能を最大限に活用す る には、 ソ ース コ ー ド が C コ ンパ イ ラ に ど の よ う に処理 さ れ る のか を考え る こ と が重要です。 同 じ アルゴ リ ズ ムで も 表現方法は複数あ っ て、 記述 の し かたに よ っ ては効率の よ いアルゴ リ ズ ムにな る こ と が よ く あ り ます。 即値定数 C の浮動小数点定数はデフ ォ ル ト で倍精度です。 単精度の FPU を使用す る 場合は、 注意 し て コ ー ド を記述 し ない と 、 ネ イ テ ィ ブの単精度命令ではな く 、 倍精度の ソ フ ト ウ ェ ア エ ミ ュ レーシ ョ ン ルーチンが使用 さ れ る こ と があ り ます。 こ れを避け る には、 演算式で即値定数に単精度値を明示的に指定 し ます (キ ャ ス ト ま たは接尾辞を使用)。 例: float x = 0.0; ... x += (float)1.0; /* float addition */ x += 1.0F; /* alternative to above */ x += 1.0; /* warning - uses double addition! */ -fsingle-precision-constants と い う コ ンパ イ ラ フ ラ グ を使用 し て、 GNU C コ ンパ イ ラ ですべての浮動小数点定数を単精 度 と し て処理す る よ う に指定す る こ と がで き ます (ANSI C 規格 と は異な る )。 不必要なキ ャ ス ト の回避 C_USE_FPU が 2 に設定 さ れてい る 場合 (拡張)、浮動小数点 と 整数の変換は FPU に よ り ハー ド ウ ェ アでサポー ト さ れ てい ますが、 で き る 限 り その変換は避けて く だ さ い。 次の例は悪い例で、 浮動小数点を使用 し て 1 か ら 10 の整数の平方根の和を計算 し てい ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 71 第 2 章 : MicroBlaze アーキテ ク チ ャ float sum, t; int i; sum = 0.0f; for (i = 1; i <= 10; i++) { t = (float)i; sum += t * t; } 上記の コ ー ド では、 各ループ反復で、 整数か ら 浮動小数点数へのキ ャ ス ト が必要にな り ます。 こ れは次の よ う に書 き 換え る こ と がで き ます。 float sum, t; int i; t = sum = 0.0f; for(i = 1; i <= 10; i++) { t += 1.0f; sum += t * t; } 上記の 2 つの コ ー ド の抜粋は、 場合に よ っ ては異な る 結果を出力す る 可能性があ る ので (非常に大 き な t が出力 さ れ る な ど)、 通常、 こ の最適化は コ ンパ イ ラ では実行 さ れません。 平方根ラ ン タ イ ム ラ イ ブ ラ リ 関数 標準 C ラ ン タ イ ム数学 ラ イ ブ ラ リ 関数は、 倍精度演算を使用 し て計算を行い ます。 平方根関数 (sqrt()) への単精度の FPU コ ールを使用す る 場合、 FPU 命令ではな く 、 非効率的なエ ミ ュ レーシ ョ ン ルーチンが代わ り に使用 さ れます。 #include <math.h> ... float x=-1.0F; ... x = sqrt(x); /* uses double precision */ こ こ では、 コ ンパ イ ラ か ら 警告 メ ッ セージが表示 さ れ る のを避け る ため、 math.h ヘ ッ ダーが含まれてい ます。 単精度のデー タ 型で使用す る と 、 結果は倍精度へキ ャ ス ト さ れ、 ラ ン タ イ ム ラ イ ブ ラ リ (FPU を使用 し ない) が呼び 出 さ れ、 浮動小数点への切 り 捨てが実行 さ れます。 解決方法 と し ては、 非 ANSI 関数 sqrtf() を代わ り に使用 し ます。 こ れは、 単精度を使用 し て演算を行い、 FPU を使用 し て実行す る こ と が可能です。 次はその例です。 #include <math.h> ... float x=-1.0F; ... x = sqrtf(x); /* uses single precision */ こ の コ ー ド を コ ンパ イ ルす る 場合は、 コ ンパ イ ラ フ ラ グ -fno-math-errno (-mhard-float and -mxl-float-sqrt に加えて) を必 ず使用 し 、 errno 変数を ア ッ プデー ト し て、 エ ラ ー コ ンデ ィ シ ョ ン を処理す る ための不必要な コ ー ド を コ ンパ イ ラ が 生成 し ない よ う に し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 72 第 2 章 : MicroBlaze アーキテ ク チ ャ ス ト リ ーム リ ン ク イ ン タ ー フ ェ イ ス MicroBlaze は、 最大 16 個の AXI4-Stream イ ン タ ーフ ェ イ ス を使用 し て コ ン フ ィ ギ ュ レー ト で き 、 各 イ ン タ ーフ ェ イ ス には入力ポー ト と 出力ポー ト が 1 つずつあ り ます。 チ ャ ネルは専用の単一方向のポ イ ン ト ツー ポ イ ン ト のデー タ ス ト リ ー ミ ン グ イ ン タ ーフ ェ イ ス です。 AXI4-Stream イ ン タ ーフ ェ イ ス の詳細については、 『AMBA 4 AXI4-Stream Protocol Specification, Version 1.0』 (ARM IHI 0051A) を参照 し て く だ さ い。 MicroBlaze の イ ン タ ーフ ェ イ スは 32 ビ ッ ト 幅です。 別の 1 ビ ッ ト が送/受信 さ れた ワー ド が制御 タ イ プなのかデー タ タ イ プなのか を示 し ます。 MicroBlaze ISA の get 命令は、 ポー ト か ら 汎用レ ジ ス タ ま で情報を伝送す る のに使用 さ れ ます。put 命令はその逆方向にデー タ を伝送する のに使用 さ れます。両方の命令に、 ブ ロ ッ キ ン グ デー タ 、 ノ ンブ ロ ッ キ ン グ デー タ 、 ブ ロ ッ キ ン グ制御、 ノ ン ブ ロ ッ キ ン グ制御 と い う 4 つの タ イ プがあ り ます。 get お よ び put 命令の詳 細については、 第 5 章 「MicroBlaze 命令セ ッ ト アーキ テ ク チ ャ 」 を参照 し て く だ さ い。 ハー ド ウ ェ ア ア ク セ ラ レーシ ョ ン プ ロ セ ッ サ パ イ プ ラ イ ンへの低レ イ テ ン シ専用 イ ン タ ーフ ェ イ ス を各 リ ン ク が提供 し てい ます。 し たがっ て、 カ ス タ ム のハー ド ウ ェ ア ア ク セ ラ レ ー タ を 使用 し た プ ロ セ ッ サ実行ユ ニ ッ ト を 拡張す る の に理想的です。 簡単な 例 を 図 2-25 に示 し ます。 こ の コ ー ド は、 使用 リ ン ク を示すため RFSLx を使用 し てい ます。 コー ド例 リンク x // Configure fx カ ス タ ム ハー ド ウ ェ ア ア ク セ ラ レー タ cput Rc,RFSLx MicroBlaze // Store operands レジス タ フ ァ イル put Ra, RFSLx // op 1 Op1Reg Op2Reg ConfigReg fx put Rb, RFSLx // op 2 // Load result ResultReg リンク x get Rt, RFSLx 図 2‐25 : ス ト リ ーム リ ン ク (ハー ド ウ ェ ア ア ク セ ラ レー ト さ れた関数 fx を使用) こ の方法は、 カ ス タ ム命令で ISA を拡張する のに似てい ますが、 プ ロ セ ッ サのパ イ プ ラ イ ンの全体的な ス ピー ド を カ ス タ ム関数に依存 さ せない と い う 利点があ り ます。 ま た、 こ の タ イ プの機能拡張な ら ば、 ソ フ ト ウ ェ ア ツール チ ェー ンへの追加要件 も あ り ません。 デバ ッ グおよび ト レース デバ ッ グの概要 MicroBlaze に は、 一般的 に BDM ま た は バ ッ ク グ ラ ン ド デバ ッ グ モ ー ド デバ ッ ガ ー と 呼ばれ る 、 XMD (Xilinx Microprocessor Debug ) な ど の JTAG ベース の ソ フ ト ウ ェ ア デバ ッ グ ツールをサポー ト す る ため、 デバ ッ グ イ ン タ ー MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 73 第 2 章 : MicroBlaze アーキテ ク チ ャ フ ェ イ ス があ り ま す。 デバ ッ グ イ ン タ ーフ ェ イ ス は、 ザ イ リ ン ク ス FPGA の JTAG ポー ト と イ ン タ ーフ ェ イ スす る MDM (Microprocessor Debug Module) コ アに接続す る ために設計 さ れてい ます。 マルチプ ロ セ ッ サ デバ ッ グ を イ ネー ブルにす る ため、 1 つの MDM に複数の MicroBlaze イ ン ス タ ン ス を接続す る こ と がで き ます。 デバ ッ グ レ ジ ス タ には、 JTAG デバ ッ グ イ ン タ ーフ ェ イ ス を介 し て ア ク セ ス し ま す。 こ れ ら の レ ジ ス タ は、 ソ フ ト ウ ェ アがユーザー ア ク セ ス可能なデバ ッ グ レ ジ ス タ にア ク セ ス で き る よ う MDM が コ ン フ ィ ギ ュ レー ト さ れていな い限 り 、 プ ロ セ ッ サで実行 さ れてい る ソ フ ト ウ ェ アには直接は見え ません。 MDM の機能については、 『MicroBlaze Debug Module (MDM) 製品ガ イ ド 』 (PG115) を参照 し て く だ さ い。 C_DEBUG_ENABLED を 1 (基本) に設定 し て イ ネーブルにな る 基本デバ ッ グ機能には次の も のがあ り ます。 • ハー ド ウ ェ ア ブ レー ク ポ イ ン ト お よ びウ ォ ッ チポ イ ン ト の数、 無制限の ソ フ ト ウ ェ ア プ レー ク ポ イ ン ト の数を 設定可能 • 外部プ ロ セ ッ サ制御に よ り 、 デバ ッ グ ツールの停止、 リ セ ッ ト 、 MicroBlaze のシ ン グル ス テ ッ プ を設定可能 • メ モ リ 、 汎用レ ジ ス タ 、 特殊レ ジ ス タ か ら の読み出 し お よ び書 き 込み (但 し 、 EAR、 EDR、 ESR、 BTR、 お よ び PVR0 か ら PVR12 ま では読み出 し 専用) • 複数のプ ロ セ ッ サをサポー ト C_DEBUG_ENABLED を 2 (拡張) に設定 し て イ ネーブルにな る 拡張デバ ッ グ機能には次の も のがあ り ます。 • パフ ォーマ ン ス監視 イ ベン ト お よ びレ イ テ ン シ カ ウ ン タ ーの数を設定可能 • プ ロ グ ラ ム ト レース ° エンベデ ッ ド プ ロ グ ラ ム ト レース ( ト レース バ ッ フ ァ ー サ イ ズは設定可能) ° MDM で接続 さ れてい る 複数プ ロ セ ッ サに対 し 外部プ ロ グ ラ ム ト レース • 設定可能なプ ロ フ ァ イ リ ン グ バ ッ フ ァ ー サ イ ズで非侵入型プ ロ フ ァ イ リ ン グ サポー ト • 複数のプ ロ セ ッ サ間の ク ロ ス ト リ ガー サポー ト 、 さ ら に MDM に よ り 提供 さ れ る 外部 ク ロ ス ト リ ガーの入力お よ び出力 パ フ ォ ーマ ン ス監視 MicroBlaze の拡張デバ ッ グ を使用す る 場合は、 パフ ォーマ ン ス監視カ ウ ン タ ーが提供 さ れてお り 、 さ ま ざ ま な イ ベン ト を カ ウ ン ト し 、 プ ロ グ ラ ム実行中の レ イ テ ン シ を測定す る こ と がで き ます。 イ ベン ト カ ウ ン タ ーお よ びレ イ テ ン シ カ ウ ン タ ーの数は、 それぞれ、 C_DEBUG_EVENT_COUNTERS お よ び C_DEBUG_LATENCY_COUNTERS で設定で き 、 カ ウ ン タ ー幅は C_DEBUG_COUNTER_WIDTH で、 32、 48、 ま たは 64 ビ ッ ト に設定で き ます。 デフ ォ ル ト コ ン フ ィ ギ ュ レーシ ョ ンでは、 カ ウ ン タ ー幅が 32 ビ ッ ト に、 イ ベン ト カ ウ ン タ ーは 5 つ、 レ イ テ ン シ カ ウ ン タ ーは 1 つに設定 さ れます。 イ ベン ト カ ウ ン タ ーは、 単に、 イ ベン ト が発生 し た回数を カ ウ ン ト し ますが、 レ イ テ ン シ カ ウ ン タ ーは次の情報を 計測 し ます。 • イ ベン ト が発生 し た回数 (N) • イ ベン ト 開始か ら イ ベン ト 終了ま での ク ロ ッ ク サ イ ク ルを カ ウ ン ト し て計測 さ れた各 イ ベン ト レ イ テ ン シの合 計 (ΣL)。 平均レ イ テ ン シ を計算す る のに使用 し ます。 • 各 イ ベン ト レ イ テ ン シの平方の合計 (ΣL2)。 レ イ テ ン シの標準偏差を計算す る のに使用 し ます。 • すべての イ ベン ト の レ イ テ ン シの最小計測値 (Lmin) • すべての イ ベン ト の レ イ テ ン シの最大計測値 (Lmax) 平均レ イ テ ン シ (μ) は次の式で計算 さ れます。 L = ‐‐‐‐‐‐‐ N レ イ テ ン シの標準偏差 (σ) は、 次の式で求め ら れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 74 第 2 章 : MicroBlaze アーキテ ク チ ャ 2 NL 2 – L = ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ N カ ウ ン ト の開始/停止は、 パフ ォーマ ン ス カ ウ ン タ ー コ マ ン ド レ ジ ス タ ま たは ク ロ ス ト リ ガー イ ベン ト で制御 し ま す (表 2-61 を参照)。 カ ウ ン タ ーを コ ン フ ィ ギ ュ レー ト し た り 、 読み出 し や書 き 込みを実行す る と き 、 パフ ォ ーマ ン ス カ ウ ン タ ー レ ジ ス タ を介 し て、 カ ウ ン タ ーに順次ア ク セ ス し てい き ます。 各ア ク セ ス の後、 選択 さ れた カ ウ ン タ ー ア イ テ ムは イ ン ク リ メ ン ト し ます。 パフ ォーマ ン ス カ ウ ン タ ー コ マ ン ド レ ジ ス タ を介 し て読み出 し をす る ため、 すべてのカ ウ ン タ ーは同時にサンプル さ れます。 こ れは、 カ ウ ン ト 中ま たはカ ウ ン ト 停止後に行われます。 イ ベ ン ト カ ウ ン タ ーが最大値に達す る と 、 オーバー フ ロ ー ス テー タ ス ビ ッ ト が セ ッ ト さ れ、 外部割 り 込み信号 Dbg_Intr が 1 に設定 さ れます。 パフ ォーマ ン ス カ ウ ン タ ー コ マ ン ド レ ジ ス タ を介 し て カ ウ ン タ ーを ク リ アにす る と 、 割 り 込み信号は 0 に リ セ ッ ト さ れます。 イ ベン ト カ ウ ン タ ーの 1 つを ク ロ ッ ク サ イ ク ル数を カ ウ ン ト す る ために使用 し 、 こ のカ ウ ン タ ーを、 あ ら か じ め設 定 さ れてい る サンプ リ ン グ間隔が過ぎ る と オーバーフ ロ ーに初期化す る こ と で、パフ ォーマ ン ス カ ウ ン タ ーを定期的 にサンプルす る ために外部割 り 込みを使用で き ます。 使用可能な イ ベン ト は表 2-40 に説明 さ れてお り 、 順番に リ ス ト さ れてい ます。 パフ ォーマ ン ス監視カ ウ ン タ ーを初期化 し て使用す る 手順は、 通常次の よ う にな り ます。 • イ ベン ト を監視で き る よ う に初期化 し ます。 ° ° パフ ォーマ ン ス コ マ ン ド レ ジ ス タ (表 2-43) を使用 し て、 リ セ ッ ト ビ ッ ト を セ ッ ト し 、 選択 し た カ ウ ン タ ー を最初のカ ウ ン タ に リ セ ッ ト し ます。 パフ ォーマ ン ス制御レ ジ ス タ を使用 し て、 すべてのカ ウ ン タ ーに対 し 順番に、 目的の イ ベン ト 数を書 き 込み ます (表 2-42)。 デフ ォ ル ト コ ン フ ィ ギ ュ レーシ ョ ンであれば、 イ ベン ト カ ウ ン タ ーの場合は 5 回、 レ イ テ ン シの場合は 1 回、 レ ジ ス タ に書 き 込みを実行 し ます。 • ク リ ア ビ ッ ト お よ び開始ビ ッ ト を セ ッ ト し て、 パフ ォーマ ン ス コ マ ン ド レ ジ ス タ を使用 し て、 すべてのカ ウ ン タ ーを ク リ アに し 、 監視を開始 し ます。 • 監視 し たいプ ロ グ ラ ム ま たはフ ァ ン ク シ ョ ン を実行 し ます。 • サンプル ビ ッ ト お よ び停止ビ ッ ト を セ ッ ト し て、 パフ ォーマ ン ス コ マ ン ド レ ジ ス タ を使用 し て、 カ ウ ン タ ーを サンプル し 、 監視を停止 し ます。 • すべてのカ ウ ン タ ーか ら 結果を読み出 し ます。 • ° パフ ォーマ ン ス コ マ ン ド レ ジ ス タ を使用 し て、 リ セ ッ ト ビ ッ ト を セ ッ ト し 、 選択 し た カ ウ ン タ ーを最初の カ ウ ン タ に リ セ ッ ト し ます。 ° パフ ォーマ ン ス カ ウ ン タ ー ス テー タ ス レ ジ ス タ を使用 し て、 すべてのカ ウ ン タ ーの ス テー タ ス を順番に読 み出 し ます (表 2-44)。デフ ォ ル ト コ ン フ ィ ギ ュ レーシ ョ ンであれば、 イ ベン ト カ ウ ン タ ーの場合は 5 回、 レ イ テ ン シ カ ウ ン タ ーの場合は 1 回、 レ ジ ス タ を読み出 し ます。 オーバーフ ロ ー ビ ッ ト お よ びフル ビ ッ ト が セ ッ ト さ れていない こ と をチ ェ ッ ク し 、 結果が有効であ る こ と を確認 し ます。 ° パフ ォーマ ン ス コ マ ン ド レ ジ ス タ を使用 し て、 リ セ ッ ト ビ ッ ト を セ ッ ト し 、 選択 し た カ ウ ン タ ーを最初の カ ウ ン タ に リ セ ッ ト し ます。 ° パフ ォーマ ン ス カ ウ ン タ ー デー タ 読み出 し レ ジ ス タ を使用 し て、 すべてのカ ウ ン タ ーのカ ウ ン タ ー ア イ テ ム を順番に読み出 し ま す (表 2-52)。 表 2-53 にあ る よ う に、 デフ ォ ル ト コ ン フ ィ ギ ュ レ ーシ ョ ン で あれば、 イ ベン ト カ ウ ン タ ーの場合は 5 回、 レ イ テ ン シ カ ウ ン タ ーの場合は 4 回、 レ ジ ス タ を読み出 し ます。 計測 さ れた イ ベン ト に よ り ますが、 最終結果を計算 し ます。 た と えば、 ° 計測 さ れた レ イ テ ン シの平均レ イ テ ン シお よ び標準偏差を求め る には、 上記の式を使用 し ます。 ° 命令ご と の ク ロ ッ ク サ イ ク ル (CPI) は、 E30 / E0 で求め る こ と がで き ます。 ° 命令お よ びデー タ キ ャ ッ シ ュ ヒ ッ ト 率は、 E11 / E10 お よ び E47 / E46 で求め る こ と がで き ます。 ° 命令キ ャ ッ シ ュ ミ ス レ イ テ ン シは、 (E60(ΣL) - E60(N)) / (E10 - E11) で求め ら れ、 同等の式を使っ て、 デー タ キ ャ ッ シ ュ 読み出 し お よ び書 き 込みの ミ ス レ イ テ ン シ を求め る こ と がで き ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 75 第 2 章 : MicroBlaze アーキテ ク チ ャ ° プ ロ グ ラ ムの浮動小数点命令の比率は E29/E0 です。 表 2‐40 : MicroBlaze パ フ ォ ーマ ン ス監視イ ベン ト イベン ト イベ ント 説明 説明 イ ベン ト カ ウ ン タ ーの イ ベン ト 0 任意の有効命令実行 29 浮動小数点(fadd、 ...、 fsqrt) 1 ロ ー ド ワー ド (lw、 lwi、 lwx) 実行 30 ク ロ ッ ク サ イ ク ル数 2 ロ ー ド ハーフ ワー ド (lhu、 hui) 実行 31 Immediate (imm) 実行 3 ロ ー ド バ イ ト (lbu, lbui) 実行 32 パ タ ーン比較 (pcmpbf、 pcmpeq、 pcmpne) 4 ス ト ア ワー ド (sw、 swi、 swx) 実行 33 符号拡張命令 (sext8、 sext16) 実行 5 ス ト ア ハーフ ワー ド (sh、 shi) 実行 34 命令キ ャ ッ シ ュ 無効化 (wic) 実行 6 ス ト ア バ イ ト (sb、 sbi) 実行 35 デー タ キ ャ ッ シ ュ の無効化 ま たは フ ラ ッ シ ュ (wdc) 実行 7 条件な し 分岐 (br、 bri、 brk、 brki) 実行 36 マシ ン ス テー タ ス命令 (msrset、 msrclr) 8 分岐 し た条件付 き 分岐 (beq、 ...、 bnei) 実行 37 遅延ス ロ ッ ト のあ る 条件な し 分岐を実行 9 分岐 し ていない条件付 き 分岐 (beq、 ...、 bnei) 実行 38 遅延ス ロ ッ ト のあ る 分岐 し た条件付 き 分岐を実行 10 命令キ ャ ッ シ ュ か ら のデー タ 要求 39 遅延 ス ロ ッ ト の あ る 分岐 し ていない条件付 き 分岐を 実行 11 命令キ ャ ッ シ ュ で ヒ ッ ト 40 演算命令が実行 さ れていない遅延ス ロ ッ ト 12 リ ク エ ス ト さ れたデー タ を デー タ キ ャ ッ シ ュ か ら 読 み出 し 41 ロ ー ド 命令 (lbu、 ...、 lwx) 実行 13 デー タ キ ャ ッ シ ュ で読み出 し デー タ ヒ ッ ト 42 ス ト ア命令 (sb、 ...、 swx) 実行 14 Write data request to data cache 43 MMU デー タ ア ク セ ス リ ク エ ス ト 15 デー タ キ ャ ッ シ ュ で書 き 込みデー タ ヒ ッ ト 44 条件付 き 分岐 (beq、 ...、 bnei) 実行 16 Load (lbu, ..., lwx) with r1 as operand executed 45 分岐 (br、 bri、 brk、 brki、 beqm、 ...、 bnei) 実行 17 Store (sb, ..., swx) with r1 as operand executed 46 Read or write data request from/to data cache 18 論理演算 (and、 andn、 or、 xor) 実行 47 読み出 し ま たは書 き 込みデー タ キ ャ ッ シ ュ ヒ ッ ト 19 演算 (add、 idiv、 mul、 rsub) 実行 48 MMU 例外発生 20 乗算 (mul、 mulh、 mulhu、 mulhsu、 muli) 49 MMU 命令側例外発生 21 バレル シ フ タ ー演算 (bsrl、 bsra、 bsll) 実行 50 MMU デー タ 側例外発生 22 シ フ ト 演算 (sra、 src、 srl) 実行 51 パ イ プ ラ イ ンの ス ト ール 23 例外 taken 52 分岐ま たは リ タ ーンの分岐先キ ャ ッ シ ュ ヒ ッ ト 24 割 り 込み発生 53 MMU 命令側ア ク セ ス リ ク エ ス ト 25 オペ ラ ン ド フ ェ ッ チ段 (OF) が原因でパ イ プ ラ イ ン が ス ト ール 54 MMU 命令 TLB (ITLB) ヒ ッ ト 26 実行段 (EX) が原因でパ イ プ ラ イ ンが ス ト ール 55 MMU デー タ TLB (DTLB) ヒ ッ ト 27 メ モ リ 段 (MEM) が原因でパ イ プ ラ イ ンが ス ト ール 56 MMU 統合 TLB (UTLB) ヒ ッ ト 28 整数除算 (idiv、 idivu) 実行 レ イ テ ン シお よ び イ ベン ト カ ウ ン タ ーの イ ベン ト 57 入力か ら 割 り 込みベ ク タ ーま での割 り 込みレ イ テ ン シ 61 MMU ア ド レ ス ル ッ ク ア ッ プ レ イ テ ン シ 58 メ モ リ 読み出 し のデー タ キ ャ ッ シ ュ レ イ テ ン シ 62 ペ リ フ ェ ラ ル AXI イ ン タ ーフ ェ イ ス デー タ 読み出 し レ イ テンシ MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 76 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐40 : MicroBlaze パ フ ォ ーマ ン ス監視イ ベン ト イベン ト イベ ント 説明 59 メ モ リ 書 き 込みのデー タ キ ャ ッ シ ュ レ イ テ ン シ 60 メ モ リ 読み出 し の命令キ ャ ッ シ ュ レ イ テ ン シ 63 説明 ペ リ フ ェ ラ ル AXI イ ン タ ーフ ェ イ ス デー タ 書 き 込み レ イ テンシ パフ ォーマ ン ス監視を コ ン フ ィ ギ ュ レー ト お よ び制御 し 、イ ベン ト お よ びレ イ テ ン シ カ ウ ン タ に読み出 し かお よ び書 き 込みを実行す る ために使用 さ れ る デバ ッ グ レ ジ ス タ は、 表 2-41 に リ ス ト さ れてい ます。 こ れ ら の レ ジ ス タ はすべ て (パフ ォーマ ン ス カ ウ ン タ ー コ マ ン ド レ ジ ス タ を除 く )、 まずすべての イ ベン ト カ ウ ン タ ー用に、 続いて レ イ テ ン シ カ ウ ン タ ー用に、 読み出 し /書 き 込みを行 う ために繰 り 返 し ア ク セ ス さ れます。 DBG_CTRL 値は、 レ ジ ス タ にア ク セ スする ための MDM デバ ッ グ レ ジ ス タ ア ク セ ス制御レ ジ ス タ で使用 さ れ る 値を 示 し 、 こ の値は、 デバ ッ グ レ ジ ス タ への MDM ソ フ ト ウ ェ ア ア ク セ ス で使用 さ れます。 表 2‐41 : MicroBlaze パ フ ォ ーマ ン ス デバ ッ グ レ ジ ス タ レジス タ名 サイ ズ (ビ ッ ト ) MDM コマン ド DBG_CTRL 値 R/W 説明 パ フ ォ ーマ ン ス カ ウ ン タ ー制御 8 0101 0001 4A207 W 表 2-40 に あ る よ う に、 コ ン フ ィ ギ ュ レ ー ト さ れた カ ウ ン タ ーそれぞれの イ ベン ト を選択 パ フ ォ ーマ ン ス カ ウ ン ター コ マン ド 5 0101 0010 4A404 W カ ウ ン タ ーの ク リ ア、カ ウ ン タ ーの開始 ま たは停止、カ ウ ン タ ーのサンプルを実 行する コ マ ン ド パ フ ォ ーマ ン ス カ ウ ン タ ー ス テー タ ス 2 0101 0011 4A601 R コ ン フ ィ ギ ュ レ ー ト さ れた パ フ ォ ーマ ン ス カ ウ ン タ ーそれぞれのサ ン プル さ れた ス テー タ ス を読み出 し パ フ ォ ーマ ン ス カ ウ ン タ ー デー タ 読み出 し 32 0101 0110 4AC1F R コ ン フ ィ ギ ュ レ ー ト さ れた パ フ ォ ーマ ン ス カ ウ ン タ ーそれぞれのサ ン プル さ れた値を読み出 し パ フ ォ ーマ ン ス カ ウ ン タ ー デー タ 書 き 込 み 32 0101 0111 4AE1F W コ ン フ ィ ギ ュ レ ー ト さ れた パ フ ォ ーマ ン ス カ ウ ン タ ーそれぞれの初期値を書 き 込み パ フ ォ ーマ ン ス カ ウ ン タ ー制御レ ジ ス タ パフ ォーマ ン ス カ ウ ン タ ー制御レ ジ ス タ (PCCTRLR) は、 コ ン フ ィ ギ ュ レー ト さ れたパフ ォーマ ン ス カ ウ ン タ ーでカ ウ ン ト さ れ る イ ベン ト を定義す る ために使用 さ れます。 コ ン フ ィ ギ ュ レー ト さ れた カ ウ ン タ ーすべての イ ベン ト を定 義す る には、 各カ ウ ン タ ーに対 し て こ の レ ジ ス タ を繰 り 返 し 書き 込む必要があ り ます。 こ の レ ジ ス タ は書 き 込み専用 レ ジ ス タ です。 読み出 し リ ク エ ス ト を出力 し て も 効力はな く 、 未定義デー タ が読み出 さ れます。 レ ジ ス タ を書 き 込みむたびに、 選択 さ れた カ ウ ン タ ーが イ ン ク リ メ ン ト し ます。 パフ ォ ーマ ン ス カ ウ ン タ ー コ マ ン ド レ ジ ス タ を使用 し 、 選択 し た カ ウ ン タ ーを最初のカ ウ ン タ ーに再び リ セ ッ ト す る こ と がで き ます。 予約 イ ベン ト 図 2‐26 : パ フ ォ ーマ ン ス カ ウン タ ー制御レ ジ ス タ MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 77 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐42 : パフ ォ ーマ ン ス カ ウン タ ー制御レ ジ ス タ (PCCTRLR) ビッ ト 7:0 名前 イ ベン ト 説明 リセッ ト値 0 パフ ォーマ ン ス カ ウ ン タ ー イ ベン ト (表 2-40 を参照) パ フ ォ ーマ ン ス カ ウ ン タ ー コ マ ン ド レ ジ ス タ パフ ォーマ ン ス カ ウ ン タ ー コ マ ン ド レ ジ ス タ (PCCMDR) は、 すべてのカ ウ ン タ ーの ク リ ア、 開始、 停止、 ま たはサ ンプルを行 う コ マ ン ド を実行す る ために使用 さ れます。 こ の レ ジ ス タ は書き 込み専用レ ジ ス タ です。 読み出 し リ ク エ ス ト を出力 し て も 効力はな く 、 未定義デー タ が読み出 さ れます。 CLR STA STOP SAM RES 予約 図 2‐27 : パ フ ォ ーマ ン ス カ ウン タ ー コ マ ン ド レ ジス タ 表 2‐43 : パフ ォ ーマ ン ス カ ウン タ ー コ マ ン ド レ ジ ス タ (PCCMDR) ビッ ト 名前 4 クリア 3 説明 リセッ ト値 すべてのカ ウ ン タ ーを 0 に ク リ ア 0 開始 すべての カ ウ ン タ ーの コ ン フ ィ ギ ュ レ ー ト さ れた イ ベン ト を同時に カ ウ ン ト 開始 0 2 停止 すべてのカ ウ ン タ ーのカ ウ ン ト を同時に停止 0 1 サンプル 読み出 し のため、 すべてのカ ウ ン タ ーの ス テー タ スお よ び値を同時にサンプル 0 0 リ セッ ト パフ ォーマ ン ス カ ウ ン タ ーの コ マ ン ド 、 ス テー タ ス、 読み出 し デー タ 、 書き 込 みデー タ を使用 し て ア ク セ スする ため、 ア ク セ ス さ れた カ ウ ン タ ーを最初の イ ベン ト カ ウ ン タ ーに リ セ ッ ト 0 パ フ ォ ーマ ン ス カ ウ ン タ ー ス テー タ ス レ ジ ス タ パフ ォーマ ン ス カ ウ ン タ ー ス テー タ ス レ ジ ス タ (PCSR) は、 カ ウ ン タ ーのサ ン プル さ れた ス テー タ ス を読み出 し ま す。 コ ン フ ィ ギ ュ レー ト さ れた カ ウ ン タ ーすべての ス テー タ ス を読み出すには、 各カ ウ ン タ ーに対 し て こ の レ ジ ス タ を繰 り 返 し 読み出す必要があ り ます。 こ の レ ジ ス タ は読み出 し 専用レ ジ ス タ です。 レ ジ ス タ に書 き 込み リ ク エ ス ト を 出 し て も 何 も 起 き ません。 レ ジ ス タ を読み出すたびに、 選択 さ れた カ ウ ン タ ーが イ ン ク リ メ ン ト し ます。 パフ ォ ーマ ン ス カ ウ ン タ ー コ マ ン ド レ ジ ス タ を使用 し 、 選択 し た カ ウ ン タ ーを最初のカ ウ ン タ ーに再び リ セ ッ ト す る こ と がで き ます。 予約 OF FULL 図 2‐28 : パ フ ォ ーマ ン ス カ ウン タ ー ス テー タ ス レ ジ ス タ MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 78 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐44 : パ フ ォ ーマ ン ス カ ウン タ ー ス テー タ ス レ ジ ス タ (PCSR) ビッ ト 名前 説明 リセッ ト値 1 オーバー フ ロー カ ウ ン タ ーが最大値 を 超え て カ ウ ン ト す る と 、 こ の ビ ッ ト がセ ッ ト さ れ ま す。 0 0 FULL 前の イ ベン ト が完了す る 前に新 し い レ イ テ ン シ カ ウ ン タ ー イ ベン ト が開始 す る と 、 こ の ビ ッ ト がセ ッ ト さ れます。 こ れは計測 さ れた値の正確 さ が落ち た こ と を示 し ます。 0 パ フ ォ ーマ ン ス カ ウ ン タ ー デー タ 読み出 し レ ジ ス タ パフ ォ ーマ ン ス カ ウ ン タ ー デー タ 読み出 し レ ジ ス タ (PCDRR) は、 カ ウ ン タ ーのサン プル さ れた値を読み出 し ます。 コ ン フ ィ ギ ュ レ ー ト さ れた カ ウ ン タ ーすべての値を読み出すには、 こ の レ ジ ス タ を繰 り 返 し 読み出す必要があ り ま す。 こ の レ ジ ス タ は読み出 し 専用レ ジ ス タ です。 レ ジ ス タ に書 き 込み リ ク エ ス ト を出 し て も 何 も 起き ません。 コ ン フ ィ ギ ュ レーシ ョ ンに よ り ますが、カ ウ ン タ ーには 32 ビ ッ ト を超え る ビ ッ ト を格納で き る ため、特定カ ウ ン タ ー の情報をすべて取 り 出すため、 こ の レ ジ ス タ を繰 り 返 し 読み出す必要があ る 場合があ り ます。 詳細は、 表 2-46 を参 照 し て く だ さ い。 ア イ テム 図 2‐29 : パ フ ォ ーマ ン ス カ ウン タ ー デー タ 読み出 し レ ジ ス タ 表 2‐45 : パ フ ォ ーマ ン ス カ ウン タ ー デー タ 読み出 し レ ジ ス タ (PCDRR) ビッ ト 名前 31:0 ア イ テム 説明 リセッ ト値 0 サンプル さ れた カ ウ ン タ ー値ア イ テ ム 表 2‐46 : パフ ォ ーマ ン ス カ ウン タ ー デー タ ア イ テム カ ウン タ ー タ イ プ アイ テム 説明 C_DEBUG_COUNTER_WIDTH = 32 イ ベン ト カ ウ ン ター 1 イ ベン ト が発生 し た回数 レ イ テンシ カ ウ ン ター 1 イ ベン ト が発生 し た回数 2 各 イ ベン ト レ イ テ ン シの合計 3 各 イ ベン ト レ イ テ ン シの平方の和 4 31:16 15:0 最小計測レ イ テ ン シ、 16 ビ ッ ト 最大計測レ イ テ ン シ、 16 ビ ッ ト C_DEBUG_COUNTER_WIDTH = 48 イ ベン ト カ ウ ン ター 1 31:16 15:0 2 イ ベン ト が発生 し た回数、 最下位ビ ッ ト 32 ビ ッ ト MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 0x0000 イ ベン ト が発生 し た回数、 最上位ビ ッ ト 16 ビ ッ ト japan.xilinx.com 79 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐46 : パフ ォ ーマ ン ス カ ウン タ ー デー タ ア イ テム (続き) カ ウン タ ー タ イ プ レ イ テンシ カ ウ ン ター アイ テム 説明 1 イ ベン ト が発生 し た回数 2 31:16 15:0 3 各 イ ベン ト レ イ テ ン シの合計、 最下位ビ ッ ト 32 ビ ッ ト 4 31:16 15:0 5 各 イ ベン ト レ イ テ ン シの平方の和、 最下位ビ ッ ト 32 ビ ッ ト 6 最小計測レ イ テ ン シ、 32 ビ ッ ト 7 最大計測レ イ テ ン シ、 32 ビ ッ ト 0x0000 各 イ ベン ト レ イ テ ン シの合計、 最上位ビ ッ ト 16 ビ ッ ト 0x0000 各 イ ベン ト レ イ テ ン シの平方の和、 最上位ビ ッ ト 16 ビ ッ ト C_DEBUG_COUNTER_WIDTH = 64 イ ベン ト カ ウ ン ター 1 イ ベン ト が発生 し た回数、 最上位ビ ッ ト 32 ビ ッ ト 2 イ ベン ト が発生 し た回数、 最下位ビ ッ ト 32 ビ ッ ト レ イ テンシ カ ウ ン ター 1 イ ベン ト が発生 し た回数、 32 ビ ッ ト 2 各 イ ベン ト レ イ テ ン シの合計、 最上位ビ ッ ト 32 ビ ッ ト 3 各 イ ベン ト レ イ テ ン シの合計、 最下位ビ ッ ト 32 ビ ッ ト 4 各 イ ベン ト レ イ テ ン シの平方の和、 最上位ビ ッ ト 32 ビ ッ ト 5 各 イ ベン ト レ イ テ ン シの平方の和、 最下位ビ ッ ト 32 ビ ッ ト 6 最小計測レ イ テ ン シ、 32 ビ ッ ト 7 最大計測レ イ テ ン シ、 32 ビ ッ ト パ フ ォ ーマ ン ス カ ウ ン タ ー デー タ 書き込みレ ジ ス タ パ フ ォ ーマ ン ス カ ウ ン タ ー デー タ 書 き 込み レ ジ ス タ (PCDWR) は、 初期値を カ ウ ン タ ーに書 き 込み ます。 コ ン フ ィ ギ ュ レー ト さ れた カ ウ ン タ ーすべてに書 き 込むには、 こ の レ ジ ス タ に繰 り 返 し 書き 込む必要があ り ます。 こ の レ ジ ス タ は書 き 込み専用レ ジ ス タ です。 読み出 し リ ク エ ス ト を出力 し て も 効力はな く 、 未定義デー タ が読み出 さ れます。 表 2-46 にあ る よ う に、 コ ン フ ィ ギ ュ レーシ ョ ンに よ り ますが、 カ ウ ン タ ーには 32 ビ ッ ト を超え る ビ ッ ト を格納で き る ため、 特定カ ウ ン タ ーの情報をすべて ア ッ プデー ト する ため、 こ の レ ジ ス タ に繰 り 返 し 書 き 込む必要があ る 場合が あ り ます。 ア イ テム 図 2‐30 : パ フ ォ ーマ ン ス カ ウン タ ー デー タ 書き込みレ ジ ス タ 表 2‐47 : パ フ ォ ーマ ン ス カ ウン タ ー デー タ 書き込みレ ジ ス タ (PCDWR) ビッ ト 名前 31:0 ア イ テム 説明 カ ウ ン タ ーに書 き 込むためのカ ウ ン タ ー値ア イ テ ム MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com リセッ ト値 0 80 第 2 章 : MicroBlaze アーキテ ク チ ャ プ ログ ラ ム ト レース MicroBlaze の拡張デバ ッ グには、 プ ロ グ ラ ム実行 ト レース を イ ネーブルにす る プ ロ グ ラ ム ト レース機能が含まれ、 エ ンベデ ッ ド ト レース バ ッ フ ァ ーに情報を格納す る か、 ま たは MDM へ情報を転送 し て、 プ ロ グ ラ ム実行の追跡を可 能に し ます。 MDM は、 C_DEBUG_EXTERNAL_TRACE が設定 さ れてい る と き に使用 さ れ、 外部 イ ン タ ーフ ェ イ ス を介 し て、 複数のプ ロ セ ッ サか ら のプ ロ グ ラ ム ト レース の出力を可能に し ます。 エンベデ ッ ド ト レース バ ッ フ ァ ーのサ イ ズは、 C_DEBUG_TRACE_SIZE を使用 し て、 8KB か ら 128KB の範囲で設定 で き ます。 C_DEBUG_TRACE_SIZE を 0 (None) に設定す る と 、 プ ロ グ ラ ム ト レース はデ ィ ス エーブルにな り ます。 プ ロ グ ラ ム ト レース では、ト レース デー タ 量が圧縮 さ れますが、プ ロ グ ラ ム実行フ ロ ーま たはプ ロ セ ッ サ ソ フ ト ウ ェ ア ス テー ト 全体を再構築で き ます。 圧縮には主に 3 つの レベルがあ り ます。 • 完全 ト レース 設定 さ れてい る エンベデ ッ ド ト レース バ ッ フ ァ ー サ イ ズに よ り ますが、 512 か ら 8192 ア イ テ ムの範囲で、 144 ビ ッ ト を使用 し て実行 さ れた各命令のサ イ ク ル カ ウ ン ト な ど、 完全 ト レース情報を格納 し ます。 C_DEBUG_EXTERNAL_TRACE が設定 さ れてい る と 、 こ れは使用で き ません。 • プロ グ ラ ム フ ロー 分岐 し た/分岐 し ていない分岐シーケ ン ス、 間接的な分岐、 割 り 込み、 例外、 ハー ド ウ ェ ア ブ レー ク の新 し いプ ロ グ ラ ム カ ウ ン タ ーな ど、 プ ロ グ ラ ム フ ロ ーの変化を格納 し ます。 ま た、 リ タ ーン命令がプ ロ グ ラ ム フ ロ ーの再構築を簡素化で き る よ う に、 ま たは分岐 し たすべての分岐が自己変 更 コ ー ド を処理で き る よ う に、 オプシ ョ ンでプ ロ グ ラ ム カ ウ ン タ ーを格納する こ と も 可能です。 メ モ リ か ら 読み出 さ れたデー タ 、 ま たは AXI4-Stream イ ン タ ーフ ェ イ ス か ら フ ェ ッ チ さ れたデー タ は、 オプシ ョ ンで、 プ ロ セ ッ サ ソ フ ト ウ ェ ア ス テー ト 全体を再構築で き る よ う に格納で き 、 逆方向のシ ン グル ス テ ッ プ機能 を可能に し ます。 • プ ロ グ ラ ム フ ロ ーお よ びサ イ ク ル カ ウ ン ト プ ロ グ ラ ム フ ロ ーのみ と 同 じ 情報 と 一緒に、 命令 と 命令 と の間のサ イ ク ル カ ウ ン ト を格納 し 、 プ ロ グ ラ ム実行 時間の再構築 も 可能に し ます。 ト レー ス制御レ ジ ス タ で ト レー ス ポ イ ン ト と し て設定 さ れてい る プ ロ グ ラ ム ブ レー ク ポ イ ン ト ま たは ウ ォ ッ チポ イ ン ト にあ た る か、 ま たは ク ロ ス ト リ ガー イ ベン ト に よ り 、 ト レース コ マ ン ド レ ジ ス タ を介 し て、 ト レース は開始で き ます (表 2-61 参照)。 ト レース バ ッ フ ァ ーがいっぱいにな る と 、 ト レース は自動的に停止 し ますが、 ト レース コ マ ン ド レ ジ ス タ ま たは ク ロ ス ト リ ガー イ ベン ト に よ り 、 停止 さ せ る こ と も 可能です (表 2-61 参照)。 サ イ ク ル カ ウ ン ト は、 完全 ト レース を使用 し てい る 場合は最大 32768 ク ロ ッ ク サ イ ク ル ま でカ ウ ン ト で き 、 プ ロ グ ラ ム フ ロ ーお よ びサ イ ク ル カ ウ ン ト を使用 し てい る 場合は、 命令 と 命令の間で 8182 サ イ ク ル ま で カ ウ ン ト で き ま す。 サ イ ク ル カ ウ ン ト が こ の値を超え る と 、 ト レース ス テー タ ス レ ジ ス タ オーバーフ ロ ー ビ ッ ト が 1 にセ ッ ト さ れ ます。 ト レース バ ッ フ ァ ーがい っぱいにな っ た と き 、 ま たはサ イ ク ル カ ウ ン ト がオーバーフ ロ ーにな っ た と き 、 プ ロ セ ッ サを停止す る よ う ト レース を設定す る こ と は可能です。 その よ う に設定 し てお く と 、 ト レース バ ッ フ ァ ーを読み出す のに必要な時間が原因で、 リ アル タ イ ム でないに も かかわ ら ず、 プ ロ グ ラ ム フ ロ ー全体を継続的に ト レース で き ま す。 ト レース を コ ン フ ィ ギ ュ レー ト お よ び制御 し 、 エ ンベデ ッ ド ト レース バ ッ フ ァ ーを読み出すのに使用 さ れ る デバ ッ グ レ ジ ス タ は、 表 2-48 に リ ス ト さ れてい ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 81 第 2 章 : MicroBlaze アーキテ ク チ ャ DBG_CTRL 値は、 レ ジ ス タ にア ク セ スする ための MDM デバ ッ グ レ ジ ス タ ア ク セ ス制御レ ジ ス タ で使用 さ れ る 値を 示 し 、 こ の値は、 デバ ッ グ レ ジ ス タ への MDM ソ フ ト ウ ェ ア ア ク セ ス で使用 さ れます。 表 2‐48 : MicroBlaze プ ログ ラ ム ト レース デバ ッ グ レ ジス タ サイ ズ (ビ ッ ト ) MDM コ マン ド DBG_CTRL 値 R/W 説明 ト レース制御 22 0110 0001 4C215 W ト レース ポ イ ン ト 、 ト レース圧縮レベルを設 定、お よ びオプシ ョ ンで ト レース情報を格納 ト レース コ マ ン ド 4 0110 0010 4C403 W ト レ ー ス バ ッ フ ァ ーの ク リ ア、 ト レ ー ス の 開始/停止、 お よ び現在のバ ッ フ ァ ー ア イ テ ム数をサンプルする コ マ ン ド ト レース ス テー タ ス 18 0110 0011 4C611 R サンプル さ れた ト レース バ ッ フ ァ ー ス テー タ ス の読み出 し ト レース デー タ 読み出 し 1 18 0110 0110 4CC11 R エンベデ ッ ド ト レース バ ッ フ ァ ーか ら 一番 古いア イ テ ム を読み出 し レジス タ名 1. C_DEBUG_EXTERNAL_TRACE が設定 さ れてい る と 、 こ の レ ジ ス タ は使用で き ません。 ト レース制御レ ジ ス タ ト レース制御レ ジ ス タ (TCTRLR) は、 ト レース動作を定義す る ために使用 さ れます。 こ の レ ジ ス タ は書 き 込み専用レ ジ ス タ です。 読み出 し リ ク エ ス ト を出力 し て も 効力はな く 、 未定義デー タ が読み出 さ れます。 予約 ト レースポ イ ン ト レ ベル FH SPC SL SR 図 2‐31 : ト レース制御レ ジス タ 表 2‐49 : ト レース制御レ ジ ス タ (TCTRLR) ビッ ト 名前 説明 リセッ ト値 21:6 ト レース ポ イン ト 対応す る ブ レー ク ポ イ ン ト ま たは ウ ォ ッ チポ イ ン ト を ト レー ス ポ イ ン ト に 変更 0 5:4 レベル ト レース圧縮レベル 00 = 完全 ト レース (C_DEBUG_EXTERNAL_TRACE と 一緒には使用で き ない) 01 = プ ロ グ ラ ム フ ロ ー 10 = プ ロ グ ラ ム フ ロ ーお よ びサ イ ク ル カ ウ ン ト 11 = 予約 00 3 フル停止 フ ル ト レ ー ス バ ッ フ ァ ー ま た はサ イ ク ル カ ウ ン ト オーバー フ ロ ーでデ バ ッ グ停止 0 2 プログラ ム カ ウ ン ター (PC) 保存 分岐 し てい る すべての分岐に対 し 新 し いプ ロ グ ラ ム カ ウ ン タ ーを保存 0 1 ロ ー ド 保存 ロ ー ド を保存 し 、 命令新規デー タ 値を取得 0 0 リ タ ーン 保存 戻 り 命令に対 し 新 し いプ ロ グ ラ ム カ ウ ン タ ーを保存 0 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 82 第 2 章 : MicroBlaze アーキテ ク チ ャ ト レース コ マ ン ド レ ジ ス タ ト レース コ マ ン ド レ ジ ス タ (TCMDR) は、 ト レース の ク リ ア、 開始、 停止だけでな く 、 ト レース ア イ テ ム数をサン プルす る ための コ マ ン ド を出力す る のに使用 さ れます。 こ の レ ジ ス タ は書き 込み専用レ ジ ス タ です。 読み出 し リ ク エ ス ト を出力 し て も 効力はな く 、 未定義デー タ が読み出 さ れます。 CLRSTA STOP SAM 予約 図 2‐32 : ト レース コ マ ン ド レ ジ ス タ 表 2‐50 : ト レース コ マ ン ド レ ジ ス タ (TCMDR) ビッ ト 名前 説明 3 クリア 2 リセッ ト値 ト レース ス テー タ ス を ク リ アに し 、 ト レース バ ッ フ ァ ーを空にす る 0 開始 ト レース をすぐ に開始 0 1 停止 ト レース をすぐ に停止 0 0 サンプル ト レース バ ッ フ ァ ーの現在のア イ テ ム数をサンプル 0 ト レース ス テー タ ス レ ジ ス タ ト レース ス テー タ ス レ ジ ス タ (TSR) は、 ト レース が開始 し たか ど う かの判断、 サ イ ク ル カ ウ ン ト オーバー フ ロ ーの チ ェ ッ ク 、 エンベデ ッ ド ト レース バ ッ フ ァ ーでのサンプル さ れた ア イ テ ム数の読み出 し を行 う ために使用 さ れます。 こ の レ ジ ス タ は読み出 し 専用レ ジ ス タ です。 レ ジ ス タ に書 き 込み リ ク エ ス ト を出 し て も 何 も 起き ません。 - STA OF 予約 ア イ テム カ ウ ン ト 図 2‐33 : ト レース ス テー タ ス レ ジ ス タ 表 2‐51 : ト レース ス テー タ ス レ ジ ス タ (TSR) ビッ ト 名前 説明 リセッ ト値 17 開始 ト レ ー ス 開始、 ト レ ー ス が開始す る と き は 1 にセ ッ ト 、 停止 し た と き は 0 にク リ ア 0 16 オーバー フ ロー サ イ ク ル カ ウ ン ト オーバーフ ロ ー、 サ イ ク ル カ ウ ン ト オーバーフ ロ ーの と き は 1 にセ ッ ト 、 ク リ ア コ マ ン ド に よ り 0 に ク リ ア 0 15:0 ア イ テム カウン ト ト レース バ ッ フ ァ ー ア イ テ ム カ ウ ン ト をサンプル 0x0000 ト レース デー タ 読み出 し レ ジ ス タ ト レース デー タ 読み出 し レ ジ ス タ (TDRR) には、 エンベデ ッ ド ト レース バ ッ フ ァ ーか ら 読み出 さ れた一番古いア イ テ ムが含ま れてい ます。 こ の レ ジ ス タ が読み出 さ れ る と 、 次のア イ レ ムが ト レース バ ッ フ ァ ーか ら 読み出 さ れます。 ト レース ス テー タ ス レ ジ ス タ のア イ テ ム数で示 さ れてい る 、 ト レース バ ッ フ ァ ーで使用可能なア イ テ ム を超え る 数 を読み出す と エ ラ ーにな り ます。 こ の レ ジ ス タ は読み出 し 専用レ ジ ス タ です。 レ ジ ス タ に書 き 込み リ ク エ ス ト を出 し て も 何 も 起 き ません。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 83 第 2 章 : MicroBlaze アーキテ ク チ ャ 圧縮レベル と 格納 さ れてい る デー タ に よ り ますが、 ト レース デー タ エン テ ィ テ ィ は 18 ビ ッ ト を超え る ビ ッ ト で構成 さ れてい る 可能性があ る ため、 特定デー タ 絵テ ィ テ ィ の情報をすべて取 り 出すため、 こ の レ ジ ス タ を繰 り 返 し 読み出 す必要があ る 場合があ り ます。 詳細は、 表 2-53 を参照 し て く だ さ い。 予約 バ ッ フ ァ ー値 図 2‐34 : ト レース デー タ 読み出 し レ ジス タ 表 2‐52 : ト レース デー タ 読み出 し レ ジス タ (TDRR) ビッ ト 名前 17:0 バッ フ ァー 値 説明 リセッ ト値 0x00000 エンベデ ッ ド ト レース バ ッ フ ァ ー ア イ テ ム 表 2‐53 : ト レース カ ウン タ ー デー タ エ ン テ ィ テ ィ エンテ ィ テ ィ 完全 ト レース MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 項目 ビッ ト 説明 1 17:3 2:0 実行 さ れた命令のサ イ ク ル カ ウ ン ト マシ ン ス テー タ ス レ ジ ス タ [17:19] 2 17:6 5:1 0 マシ ン ス テー タ ス レ ジ ス タ [20:31] デス テ ィ ネーシ ョ ン レ ジ ス タ ア ド レ ス (r0 - r31)、書 き 込ま れてい る 場合は有効 1 にセ ッ ト さ れてい る 場合は、 デス テ ィ ネーシ ョ ン レ ジ ス タ に書 き 込み 3 17:13 12 11 10 9:6 5:0 例外ス テー タ ス レ ジ ス タ 、 例外があ る 場合は有効 1 にセ ッ ト さ れてい る 場合は例外があ る 1 にセ ッ ト さ れてい る 場合は ロ ー ド 命令でデー タ 読み出 し 1 にセ ッ ト さ れてい る 場合は ス ト ア命令でデー タ 書 き 込み バ イ ト イ ネーブル、 ス ト ア命令の場合有効 ス ト ア命令の場合は書き 込みデー タ [0:5]、 ま たはその他の 命令の場合はデス テ ィ ネーシ ョ ン レ ジ ス タ デー タ [0:5] 4 17:0 書き 込みデー タ [6:23]、 ま たはデス テ ィ ネーシ ョ ン レ ジ ス タ デー タ [6:23] 5 17:10 9:0 書き 込みデー タ [24:31]、ま たはデス テ ィ ネーシ ョ ン レ ジ ス タ デー タ [24:31] ロ ー ド お よ びス ト ア命令の場合はデー タ ア ド レ ス [0:9]、ま たは その他の命令の場合は実行 さ れた命令 [0:9] 6 17:0 デー タ ア ド レ ス [10:27] ま たは実行 さ れた命令 [10:27] 7 17:14 13:0 デー タ ア ド レ ス [28:31] ま たは実行 さ れた命令 [28:31] プ ラ グ ラ ム カ ウ ン タ ー [0:13] 8 17:0 プ ラ グ ラ ム カ ウ ン タ ー [14:31] japan.xilinx.com 84 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐53 : ト レース カ ウン タ ー デー タ エ ン テ ィ テ ィ (続き) エンテ ィ テ ィ 項目 ビッ ト 説明 プ ロ グ ラ ム フ ロ ー : 分岐 1 17:16 15:12 11:0 00 - ア イ テ ムにプ ロ グ ラ ム フ ロ ー分岐が含まれ る ア イ テ ム (1 - 12) でカ ウ ン ト さ れ る 分岐の数 (N) 左の N ビ ッ ト はプ ロ グ ラ ム フ ロ ーの分岐を表す こ の ビ ッ ト が 1 の場合、 分岐は分岐 し てお り 、 それ以外の場合は分 岐 し ていない プロ グ ラ ム フ ロー : プロ グ ラ ム カ ウ ン ター 1 17:16 15:0 01 - ア イ テ ムにプ ロ グ ラ ム カ ウ ン タ ー値が含まれ る プ ラ グ ラ ム カ ウ ン タ ー [0:15] 2 17:16 15:0 01 - ア イ テ ムにプ ロ グ ラ ム カ ウ ン タ ー値が含まれ る プ ラ グ ラ ム カ ウ ン タ ー [16:31] 1 17:16 15:0 10 - ア イ テ ムに読み出 し デー タ が含まれ る ロ ー ド お よ び get 命令で読み出 さ れたデー タ [0:15] 2 17:16 15:0 10 - ア イ テ ムに読み出 し デー タ が含まれ る ロ ー ド お よ び get 命令で読み出 さ れたデー タ [15:31] プ ロ グ ラ ム フ ロ ー (サ イ ク ル カ ウ ン ト 付き) : 分岐お よ び短いサ イ ク ル カ ウ ン ト 1 17:16 15:14 13:8 7 6:1 0 00 - ア イ テ ムにプ ロ グ ラ ム フ ロ ー分岐が含まれ る 01、 10 - カ ウ ン ト さ れた (1 - 2) 分岐の数 (N) 前に実行 さ れた命令のサ イ ク ル カ ウ ン ト 1 にセ ッ ト の場合は分岐は分岐 し てお り 、 それ以外の場合 は分岐 し ていない 前に実行 さ れた命令のサ イ ク ル カ ウ ン ト 1 にセ ッ ト の場合は分岐は分岐 し てお り 、 それ以外の場合 は分岐 し ていない プ ロ グ ラ ム フ ロ ー (サ イ ク ル カ ウ ン ト 付き) : 分岐お よ び長いサ イ ク ル カ ウ ン ト 1 17:16 15:14 13:1 0 00 - ア イ テ ムにプ ロ グ ラ ム フ ロ ー分岐が含まれ る 11 - ア イ テ ムに分岐お よ び長いサ イ ク ル カ ウ ン ト が含まれ る 前に実行 さ れた命令のサ イ ク ル カ ウ ン ト 1 にセ ッ ト の場合は分岐は分岐 し てお り 、 それ以外の場合 は分岐 し ていない プ ロ グ ラ ム フ ロ ー : 読み出 し デー タ 非侵入型のプ ロ フ ァ イ リ ング 拡張デバ ッ グ では、 プ ロ グ ラ ム実行の統計を格納す る のにプ ロ フ ァ イ リ ン グ バ ッ フ ァ ーを使用す る 、 非侵入型プ ロ フ ァ イ リ ン グが提供 さ れてい ます。 プ ロ フ ァ イ リ ン グ バ ッ フ ァ ーのサ イ ズは、 C_DEBUG_PROFILE_SIZE を使用 し て、 4KB か ら 128KB の範囲で設定で き ま す。 C_DEBUG_PROFILE_SIZE を 0 (None) に設定す る と 、 非侵入型プ ロ フ ァ イ リ ン グはデ ィ ス エーブルにな り ます。 プ ロ フ ァ イ リ ン グ バ ッ フ ァ ーは ビ ン に分かれていて、 各ビ ンは、 あ る ア ド レ ス範囲内で実行 さ れた命令数ま たは ク ロ ッ ク サ イ ク ル数を カ ウ ン ト し ます。 各ピ ンは、 命令ま たはサ イ ク ルを 236 - 1 = 68719476735 ま でカ ウ ン ト し ます。 プ ロ フ ァ イ リ ン グ ロ ウ ア ド レ ス レ ジ ス タ お よ びプ ロ フ ァ イ リ ン グ ハ イ ア ド レ ス レ ジ ス タ を介 し て定義 さ れ る プ ロ フ ァ イ ル さ れた ア ド レ ス範囲お よ びバ ッ フ ァ ー サ イ ズに よ っ て、 各ビ ンのア ド レ ス範囲は決ま り ます。 プ ロ フ ァ イ リ ン グの開始/停止は、 プ ロ フ ァ イ リ ン グ制御レ ジ ス タ ま たは ク ロ ス ト リ ガー イ ベン ト で制御 し ます (表 2-61 を参照)。 プ ロ フ ァ イ リ ン グ を コ ン フ ィ ギ ュ レー ト お よ び制御 し 、 プ ロ フ ァ イ リ ン グ バ ッ フ ァ ーの読み出 し /書 き 込みに使用 さ れ る デバ ッ グ レ ジ ス タ は、 表 2-54 に リ ス ト さ れてい ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 85 第 2 章 : MicroBlaze アーキテ ク チ ャ DBG_CTRL 値は、 レ ジ ス タ にア ク セ スする ための MDM デバ ッ グ レ ジ ス タ ア ク セ ス制御レ ジ ス タ で使用 さ れ る 値を 示 し 、 こ の値は、 デバ ッ グ レ ジ ス タ への MDM ソ フ ト ウ ェ ア ア ク セ ス で使用 さ れます。 表 2‐54 : MicroBlaze プ ロ フ ァ イ リ ング デバ ッ グ レ ジ ス タ レ ジス タ 名 サイ ズ (ビ ッ MDM コ マ ン ト) ド DBG_CTRL 値 R/W 説明 プロ フ ァ イ リ ング 制御 8 0111 0001 4E207 W プ ロ フ ァ イ リ ン グ の イ ネ ー ブ ル/デ ィ ス エーブル、 カ ウ ン ト 方法お よ びビ ンの使用 方法の設定 プロ フ ァ イ リ ング ロウ アドレス 30 0111 0010 4E41D W プ ロ フ ァ イ ル さ れた ア ド レ ス 範囲の低ア ド レ ス を定義 プロ フ ァ イ リ ング ハイ ア ド レ ス 30 0111 0011 4E61D W プ ロ フ ァ イ ル さ れた ア ド レ ス 範囲の高ア ド レ ス を定義 W 読み出 し ま た は書 き 込み を す る プ ロ フ ァ イ リ ン グ バ ッ フ ァ ーのア ド レ ス を設定 (ビ ン) プロ フ ァ イ リ ング バッ フ ァー アド レス 9 - 14 0111 0100 9: 4E808 10: 4E809 ... 14: 4E80D プロ フ ァ イ リ ング デー タ 読み出 し 36 0111 0110 4EC23 R プ ロ フ ァ イ リ ン グ バ ッ フ ァ ーか ら の読み 出 し デー タ プロ フ ァ イ リ ング デー タ 書 き 込み 36 0111 0111 4EE23 W プ ロ フ ァ イ リ ン グ バ ッ フ ァ ーへの書 き 込 みデー タ プ ロ フ ァ イ リ ング制御レ ジ ス タ プ ロ フ ァ イ リ ン グ制御レ ジ ス タ (PCTRLR) は、 プ ロ フ ァ イ リ ン グの イ ネーブル (開始)/デ ィ ス エーブル (停止) のため に使用 さ れます。 ま た、 実行命令数ま たは実行 ク ロ ッ ク サ イ ク ルのカ ウ ン ト の設定、 お よ びプ ロ フ ァ イ リ ン グ バ ッ フ ァ ー ビ ンの使用方法の定義に も 使用 さ れます。 こ の レ ジ ス タ は書 き 込み専用レ ジ ス タ です。 読み出 し リ ク エ ス ト を 出力 し て も 効力はな く 、 未定義デー タ が読み出 さ れます。 ビ ン制御値 (B) は、 次の式で求め る こ と がで き ます。 B = H–L+S4 log 2 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ S4 L はプ ロ フ ァ イ リ ン グ ロ ウ レ ジ ス タ 、 H はプ ロ フ ァ イ リ ン グ ハ イ レ ジ ス タ 、 S は C_DEBUG_PROFILE_SIZE にな り ます。 ENA DIS CC 予約 ビ ン制御 図 2‐35 : プ ロ フ ァ イ リ ング制御レ ジス タ 表 2‐55 : プ ロ フ ァ イ リ ン グ制御レ ジス タ (PCTRLR) ビッ ト 名前 説明 7 イ ネーブル プ ロ フ ァ イ リ ン グの イ ネーブル (開始) 0 6 デ ィ ス エー ブル プ ロ フ ァ イ リ ン グのデ ィ ス エーブル (停止) 0 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com リセッ ト値 86 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐55 : プ ロ フ ァ イ リ ン グ制御レ ジス タ (PCTRLR) (続き) ビッ ト 名前 5 サイ クル カ ウン ト のイ ネーブル 4:0 ビ ン制御 説明 実行 さ れた命令の ク ロ ッ ク サ イ ク ルを カ ウ ン ト 0 = デ ィ ス エーブル、 実行 さ れた命令のカ ウ ン ト 数 1 = イ ネーブル、 実行 さ れた命令の ク ロ ッ ク サ イ ク ルの数 プ ロ フ ァ イ リ ン グ バ ッ フ ァ ーの各ビ ンでカ ウ ン ト さ れ る ア ド レ ス数 リセッ ト値 0 00000 プ ロ フ ァ イ リ ング ロ ウ ア ド レ ス レ ジ ス タ プ ロ フ ァ イ リ ン グ ロ ウ ア ド レ ス レ ジ ス タ (PLAR) は、 プ ロ フ ァ イ ル さ れたエ リ アの ロ ウ ワ ー ド ア ド レ ス を定義す る のに使用 さ れます。 こ の レ ジ ス タ は書 き 込み専用レ ジ ス タ です。 読み出 し リ ク エ ス ト を出力 し て も 効力はな く 、 未定 義デー タ が読み出 さ れます。 予約 ロウ ワー ド ア ド レ ス 図 2‐36 : プ ロ フ ァ イ リ ン グ ロウ ア ド レ ス レ ジ ス タ 表 2‐56 : プ ロ フ ァ イ リ ング ロウ ア ド レ ス レ ジス タ (PLAR) ビッ ト 名前 29:0 ロウ ワー ド 説明 プ ロ フ ァ イ ル さ れたエ リ アの ロ ウ ワー ド ア ド レ ス リセッ ト値 0 プ ロ フ ァ イ リ ング ハイ ア ド レ ス レ ジ ス タ プ ロ フ ァ イ リ ン グ ハ イ ア ド レ ス レ ジ ス タ (PHAR) は、プ ロ フ ァ イ ル さ れたエ リ アのハ イ ワ ー ド ア ド レ ス を定義す る のに使用 さ れます。 こ の レ ジ ス タ は書 き 込み専用レ ジ ス タ です。 読み出 し リ ク エ ス ト を出力 し て も 効力はな く 、 未定 義デー タ が読み出 さ れます。 予約 ハイ ワー ド ア ド レ ス 図 2‐37 : プ ロ フ ァ イ リ ング ハイ ア ド レ ス レ ジス タ 表 2‐57 : プ ロ フ ァ イ リ ング ハイ ア ド レ ス レ ジス タ (PHAR) ビッ ト 名前 29:0 ハイ ワー ド 説明 プ ロ フ ァ イ ル さ れたエ リ アのハ イ ワ ー ド ア ド レ ス リセッ ト値 0 プ ロ フ ァ イ リ ング バ ッ フ ァ ー ア ド レ ス レ ジ ス タ プ ロ フ ァ イ リ ン グ バ ッ フ ァ ー ア ド レ ス レ ジ ス タ (PBAR) は、読み出す/書き 込むプ ロ フ ァ イ リ ン グ バ ッ フ ァ ーのビ ン を定義す る のに使用 さ れます。 C_DEBUG_PROFILE_SIZE の設定に よ り 、 こ の レ ジ ス タ のビ ッ ト 数は変わ り ます。 こ MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 87 第 2 章 : MicroBlaze アーキテ ク チ ャ の レ ジ ス タ は書 き 込み専用レ ジ ス タ です。 読み出 し リ ク エ ス ト を出力 し て も 効力はな く 、 未定義デー タ が読み出 さ れ ます。 予約 バッ フ ァー ア ド レス 図 2‐38 : プ ロ フ ァ イ リ ン グ バ ッ フ ァ ー ア ド レ ス レ ジ ス タ 表 2‐58 : プ ロ フ ァ イ リ ング バ ッ フ ァ ー ア ド レ ス レ ジ ス タ (PBAR) ビッ ト 名前 説明 リセッ ト値 n-1:0 バッ フ ァー アドレス 読み出 し ま たは書 き 込みをする プ ロ フ ァ イ リ ン グ バ ッ フ ァ ーのビ ン。 ビ ッ ト 数 (n) は、4KB バ ッ フ ァ ーの場合は 9、8KB バ ッ フ ァ ーの場合は 10、.... 128KB バ ッ フ ァ ーの場合は 14。 0 プ ロ フ ァ イ リ ング デー タ 読み出 し レ ジ ス タ プ ロ フ ァ イ リ ン グ デー タ 読み出 し レ ジ ス タ (PDRR) は、 プ ロ フ ァ イ リ ン グ バ ッ フ ァ ー ア ド レ ス レ ジ ス タ で示 さ れ る ビ ンの値を読み出 し 、 プ ロ フ ァ イ リ ン グ バ ッ フ ァ ー ア ド レ ス レ ジ ス タ を イ ン ク リ メ ン ト し ます。 こ の レ ジ ス タ は読 み出 し 専用レ ジ ス タ です。 レ ジ ス タ に書 き 込み リ ク エ ス ト を出 し て も 何 も 起 き ません。 レ ジ ス タ をデバ ッ グす る ため MDM ソ フ ト ウ ェ ア ア ク セ ス で こ の レ ジ ス タ を読み出す場合、 2 回連続ア ク セ スす る と デー タ が読み出 さ れます。 読み出 し デー タ 図 2‐39 : プ ロ フ ァ イ リ ング デー タ 読み出 し レ ジス タ 表 2‐59 : プ ロ フ ァ イ リ ング デー タ 読み出 し レ ジ ス タ (PDRR) ビッ ト 名前 35:0 読み出 し デー タ 説明 ビ ンで実行 さ れた命令数ま たは実行 さ れた ク ロ ッ ク サ イ ク ル数 リセッ ト値 0 プ ロ フ ァ イ リ ング デー タ 書き込みレ ジ ス タ プ ロ フ ァ イ リ ン グ デー タ 書 き 込みレ ジ ス タ (PDWR) は、プ ロ フ ァ イ リ ン グ バ ッ フ ァ ー ア ド レ ス レ ジ ス タ で示 さ れ る ビ ンに新 し い値を書 き 込み、 プ ロ フ ァ イ リ ン グ バ ッ フ ァ ー ア ド レ ス レ ジ ス タ を イ ン ク リ メ ン ト し ます。 こ の レ ジ ス タ は書 き 込み専用レ ジ ス タ です。 読み出 し リ ク エ ス ト を出力 し て も 効力はな く 、 未定義デー タ が読み出 さ れます。 こ の レ ジ ス タ は、プ ロ フ ァ イ リ ン グ を イ ネーブルする 前にプ ロ フ ァ イ リ ン グ バ ッ フ ァ ーを ク リ アにす る ために使用で き ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 88 第 2 章 : MicroBlaze アーキテ ク チ ャ レ ジ ス タ をデバ ッ グす る ため MDM ソ フ ト ウ ェ ア ア ク セ ス で こ の レ ジ ス タ に書 き 込む場合、 2 回連続ア ク セ スす る と デー タ が書 き 込ま れます。 書き込みデー タ 図 2‐40 : プ ロ フ ァ イ リ ング デー タ 書き込みレ ジス タ 表 2‐60 : プ ロ フ ァ イ リ ング デー タ 書き込みレ ジ ス タ (PDWR) ビッ ト 名前 説明 35:0 書 き 込み デー タ リセッ ト値 0 ビ ンに書 き 込むデー タ ク ロ ス ト リ ガー サポー ト ク ロ ス ト リ ガーは、 DBG_STOP と MB_Halted の 2 つの信号で指定で き ます。 • DBG_STOP 入力が 1 に設定 さ れてい る と 、 い く つか命令が出た後に MicroBlaze は停止 し ます。 XMD は、 MicoBlaze の停止 を 検出 し 、 停止の発生 し た 箇所 を 示 し ま す。 こ の信号は、 ChipScope™ ILA (Integrated Logic Analyzer) の ト リ ガーな ど の外部 イ ベン ト で MicroBlaze プ ロ セ ッ サ を停止 さ せる のに使用で き ます。 • MicroBlaze が停止す る と き は常に MB_Halted 出力信号は 1 に設定 さ れてい ます。 た と えば、 ブ レー ク ポ イ ン ト ま たは ウ ォ ッ チポ イ ン ト を通過 し た後、 停止 XMD コ マ ン ド の後、 ま たは DBG_STOP 入力が設定 さ れた と き な ど です。 こ の出力は MicroBlaze 実行が XMD コ マ ン ド で再開 さ れ る と ク リ アにな り ます。 MB_Halted 信号は、 ChipScope ILA を ト リ ガー し た り 、 DBG_STOP 入力に接続 し てマルチプ ロ セ ッ サ シ ス テ ム でほかの MicroBlaze コ ア を停止す る のに使用で き ます。 拡張デバ ッ グでは、 ク ロ ス ト リ ガーは MDM と 共に使用する と サポー ト さ れます。 MDM には、 接続 さ れたすべての プ ロ セ ッ サ間のプ ロ グ ラ マブル ク ロ ス ト リ ガー と 、外部 ト リ ガー入力お よ び出力が含まれます。詳細は、『MicroBlaze Debug Module (MDM) 製品ガ イ ド 』 (PG115) を参照 し て く だ さ い。 MicroBlaze では最大 8 個の ク ロ ス ト リ ガー ア ク シ ョ ンが処理で き ます。 ク ロ ス ト リ ガー ア ク シ ョ ンは、 デバ ッ グ バ ス を介 し て接続 さ れてい る 、対応す る MDM の ク ロ ス ト リ ガー出力に よ っ て生成 さ れます。ク ロ ス ト リ ガー ア ク シ ョ ン それぞれの影響は、 表 2-61 に ま と め ら れてい ます。 MicroBlaze では最大 8 個の ク ロ ス ト リ ガー イ ベン ト が生成で き ます。 ク ロ ス ト リ ガー イ ベン ト は、 デバ ッ グ バ ス を 介 し て接続 さ れてい る 、 その イ ベン ト に対応す る MDM の ク ロ ス ト リ ガー入力に影響 し ます。 ク ロ ス ト リ ガー イ ベ ン ト は表 2-62 で説明 さ れてい ます。 表 2‐61 : MicroBlaze ク ロ ス ト リ ガー ア ク シ ョ ン 番号 動作 説明 0 デバ ッ グ停止 プ ロ セ ッ サ が実行中の場合 MicroBlaze を 停止 し 、 MB_Halted 出力 を セ ッ ト 。 Dbg_Stop 入力を セ ッ ト し て も 同 じ 効果が得 ら れ る 。 1 実行継続 2 プロ グ ラ ム ト レース停止 ト レース中の場合はプ ロ グ ラ ム ト レース を停止 3 プロ グ ラ ム ト レース開始 ト レース が停止 し てい る 場合は、 プ ロ グ ラ ム ト レース を開始 4 パフ ォーマ ン ス監視 停止 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 プ ロ セ ッ サが実行中の場合実行を継続 し 、 MB_Halted 出力を ク リ ア パフ ォーマ ン ス監視中の場合はそれを停止 japan.xilinx.com 89 第 2 章 : MicroBlaze アーキテ ク チ ャ 表 2‐61 : MicroBlaze ク ロ ス ト リ ガー ア ク シ ョ ン 番号 動作 5 説明 パフ ォーマ ン ス監視 開始 パフ ォーマ ン ス監視停止の場合はそれを開始 6 プ ロ フ ァ イ リ ン グの デ ィ ス エーブル プ ロ フ ァ イ リ ン グ中の場合はそれをデ ィ ス エーブル 7 プ ロ フ ァ イ リ ン グの イ ネーブル プ ロ フ ァ イ リ ン グがデ ィ ス エーブルの場合はそれを イ ネーブルにす る 表 2‐62 : MicroBlaze ク ロ ス ト リ ガー イ ベン ト 番号 イ ベン ト 説明 0 MicroBlaze 停止 MicroBlaze が停止 し てい る と き イ ベン ト を生成。MB_Halted 出力が設定 さ れて い る と 、 同 じ イ ベン ト にな る 。 1 実行再開 デ バ ッ グ 停 止 か ら プ ロ セ ッ サ が 実 行 を 再 開 す る と き 、 イ ベ ン ト を 生 成。 MB_Halted 出力が ク リ アにな る と 、 同 じ イ ベン ト にな る 。 2 プ ロ グ ラ ム ト レース 停止 プ ロ グ ラ ム ト レース コ マ ン ド レ ジ ス タ に コ マ ン ド を書 き 込む こ と に よ り プ ロ グ ラ ム ト レース が停止す る と き 、 ト レース バ ッ フ ァ ーがいっぱいの と き 、 ま た は ク ロ ス ト リ ガー ア ク シ ョ ンに よ り 、 イ ベン ト を生成 3 プ ロ グ ラ ム ト レース 開始 プ ロ グ ラ ム ト レース コ マ ン ド レ ジ ス タ に コ マ ン ド を書 き 込む こ と に よ り プ ロ グ ラ ム ト レース が開始す る と き 、 ト レース ポ イ ン ト を通過する と き 、 ま たは ク ロ ス ト リ ガー ア ク シ ョ ンに よ り 、 イ ベン ト を生成 4 パフ ォーマ ン ス監視 停止 パ フ ォ ーマ ン ス カ ウ ン タ ー コ マ ン ド レ ジ ス タ に コ マ ン ド を書 き 込む こ と に よ り パフ ォーマ ン ス監視が停止する と き 、 ま たは ク ロ ス ト リ ガー ア ク シ ョ ンに よ り 、 イ ベン ト を生成 5 パフ ォーマ ン ス監視 開始 パ フ ォ ーマ ン ス カ ウ ン タ ー コ マ ン ド レ ジ ス タ に コ マ ン ド を書 き 込む こ と に よ り パフ ォーマ ン ス監視が開始する と き 、 ま たは ク ロ ス ト リ ガー ア ク シ ョ ンに よ り 、 イ ベン ト を生成 6 プ ロ フ ァ イ リ ン グの デ ィ ス エーブル プ ロ フ ァ イ リ ン グ制御レ ジ ス タ に コ マ ン ド を書 き 込む こ と に よ り プ ロ フ ァ イ リ ン グが イ ネーブルにな る と き 、 ま たは ク ロ ス ト リ ガー ア ク シ ョ ンに よ り 、 イ ベ ン ト を生成 7 プ ロ フ ァ イ リ ン グの イ ネーブル プ ロ フ ァ イ リ ン グ制御レ ジ ス タ に コ マ ン ド を書 き 込む こ と に よ り プ ロ フ ァ イ リ ン グがデ ィ ス エーブルにな る と き 、 ま たは ク ロ ス ト リ ガー ア ク シ ョ ン に よ り 、 イ ベン ト を生成 ト レース イ ン タ ー フ ェ イ スの概要 MicroBlaze の ト レース イ ン タ ーフ ェ イ ス は、 パフ ォーマ ン ス の監視お よ び解析のため、 多数の内部ス テー ト 信号を エ ク ス ポー ト し ます。 ザ イ リ ン ク ス が開発 し た解析コ ア を介 し てのみ、 こ の ト レース イ ン タ ーフ ェ イ ス を使用す る こ と を推奨 し ます。 今後の MicroBlaze リ リ ース での こ の イ ン タ ーフ ェ イ ス には、 下位互換性がない可能性があ り ます。 エ ク ス ポー ト さ れ る 信号の リ ス ト は、 表 3-14 を参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 90 第 2 章 : MicroBlaze アーキテ ク チ ャ フ ォ ール ト ト レ ラ ン ス MicroBlaze に含まれ る フ ォール ト ト レ ラ ン ス機能は、 C_FAULT_TOLERANT を使用 し て イ ネーブルにす る こ と がで き 、 内部ブ ロ ッ ク RAM にはエ ラ ー検出を提供 し 、 LMB ブ ロ ッ ク RAM ではエ ラ ー検出お よ びエ ラ ー訂正 (ECC) のサ ポー ト を提供 し ます。 フ ォール ト ト レ ラ ン ス が イ ネーブルにな っ てい る と 、 ブ ロ ッ ク RAM の ソ フ ト エ ラ ーはすべて 検出 さ れ訂正 さ れ る ため、 全体的なエ ラ ー発生率を著 し く 下げ る こ と がで き ます。 ブ ロ ッ ク RAM を保護す る だけでな く 、通常は、FPGA の コ ン フ ィ ギ ュ レーシ ョ ン メ モ リ も 保護す る 必要があ り ます。 こ の ト ピ ッ ク の詳細、 参考資料に関 し ては、 『LogiCore IP Soft Error Mitigation Controller 製品ガ イ ド 』 (PG036) を参照 し て く だ さ い。 コ ン フ ィ ギ ュ レーシ ョ ン MicroBlaze コ ン フ ィ ギ ュ レーシ ョ ンの使用 [General] ページにあ る MicroBlaze の コ ン フ ィ ギ ュ レーシ ョ ンのダ イ ア ロ グ ボ ッ ク ス で、 フ ォール ト ト レ ラ ン ス は イ ネーブルにで き ます。 MicroBlaze で フ ォール ト ト レ ラ ン ス を イ ネーブルに し た後、 シ ス テ ムが生成 さ れ る と 、 接続 さ れてい る LMB BRAM Interface Controller で ECC は自動的に イ ネーブルにな り ます。つま り 、 フ ォール ト ト レ ラ ン スお よ び最小限の ECC サ ポー ト を有効にす る のに、 ほかには何 も 設定す る 必要がない と い う こ と です。 すべての接続 さ れてい る LMB BRAM Interface Controller の コ ン フ ィ ギ ュ レーシ ョ ン ダ イ ア ロ グ ボ ッ ク ス で、 C_ECC をデ ィ ス エーブルに し 、 LMB ブ ロ ッ ク RAM を保護 し ない ま ま、 ECC サポー ト を手動で上書 き す る こ と は可能です (推奨 さ れてはい ません)。 こ の場合、 フ ォール ト ト レ ラ ン スは イ ネーブルなので、 内部 MicroBalze ブ ロ ッ ク RAM の 保護は有効の ま ま です。 LMB BRAM Interface Controller の使用 先ほ ど説明 し た方法 と は別の方法で、 すべての接続 さ れてい る LMB BRAM Interface Controller の コ ン フ ィ ギ ュ レ ー シ ョ ン ダ イ ア ロ グ ボ ッ ク ス で、 ECC を イ ネーブルにす る こ と も 可能です。 こ の場合、 シ ス テ ム が生成 さ れ る と き 、 フ ォ ール ト ト レ ラ ン ス は MicroBlaze で自動的に イ ネーブルに な り ま す。 つ ま り 、 ECC サポー ト お よ び MicroBlaze フ ォール ト ト レ ラ ン ス を有効にす る のに、 ほかには何 も 設定する 必要がない と い う こ と です。 ECC はすべての コ ン ト ロ ー ラ ーで イ ネーブルま たはデ ィ ス エーブルにする 必要があ り 、 こ れは DRC でチ ェ ッ ク さ れ ます。 MicroBlaze の コ ン フ ィ ギ ュ レーシ ョ ン ダ イ ア ロ グ ボ ッ ク ス で、 C_FAULT_TOLERANT を明示的にデ ィ ス エーブルに し て、MicroBlaze で フ ォール ト ト レ ラ ン ス サポー ト を手動で上書 き す る こ と は可能です。MicroBlaze でブ ロ ッ ク RAM が使用 さ れていない限 り 、 こ れは推奨 さ れ ません。 ま た、 訂正不可能な ECC エ ラ ーか ら のバ ス例外を処理す る 必要 はあ り ません。 機能 MicroBlaze の フ ォール ト ト レ ラ ン ス機能の概要を こ こ に説明 し ます。 各機能の詳細は、 次のセ ク シ ョ ン を参照 し て く だ さ い。 • 命令キ ャ ッ シ ュ 操作 • デー タ キ ャ ッ シ ュ 操作 • UTLB 管理 • 分岐 タ ーゲ ッ ト キ ャ ッ シ ュ • 命令バ ス例外 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 91 第 2 章 : MicroBlaze アーキテ ク チ ャ • デー タ バ ス例外 • 例外の原因 MB BRAM Interface Controller v4.0 ま たはそれ以降のバージ ョ ンでは、 LMB ECC イ ンプ リ メ ン テーシ ョ ン を提供 し ま す。 パフ ォーマ ン スや リ ソ ース使用率な ど の詳細については、 『LogiCORE IP LMB BRAM Interface Controller 製品ガ イ ド 』 (PG112) を参照 し て く だ さ い。 命令およびデー タ キ ャ ッ シ ュ保護 命令お よ びデー タ キ ャ ッ シ ュ でブ ロ ッ ク RAM を保護する には、 パ リ テ ィ が使用 さ れます。パ リ テ ィ エ ラ ーが検出 さ れ る と 、 対応す る キ ャ ッ シ ュ ラ イ ンが無効化 さ れます。 こ れに よ り 、 外部 メ モ リ か ら 正 し い値がキ ャ ッ シ ュ に リ ロ ー ド さ れます。 キ ャ ッ シ ュ ヒ ッ ト が発生する たびにパ リ テ ィ はチ ェ ッ ク さ れます。 こ れは ラ イ ト ス ルーの場合のみ機能す る ため、 フ ォール ト ト レ ラ ン ス が イ ネーブルの と き は、 ラ イ ト バ ッ ク デー タ キ ャ ッ シ ュ は使用で き ません。 こ れは DRC でチ ェ ッ ク さ れます。 キ ャ ッ シ ュ のブ ロ ッ ク RAM に新 し い値が書き 込まれ る と 、 パ リ テ ィ も 計算 さ れて書き 込まれます。 タ グ用に 1 パ リ テ ィ ビ ッ ト 、 命令キ ャ ッ シ ュ デー タ 用に 1 パ リ テ ィ ビ ッ ト 、 デー タ キ ャ ッ シ ュ ラ イ ン の各 ワ ー ド 用に 1 パ リ テ ィ ビ ッ ト が使用 さ れます。 大抵の場合、 フ ォ ール ト ト レ ラ ン ス を有効に し て も 、 スペア ビ ッ ト がパ リ テ ィ 用に使用で き る ため、 必要な キ ャ ッ シ ュ ブ ロ ッ ク RAM の数が増え る こ と はあ り ません。 フ ォール ト ト レ ラ ン ス を有効にす る 場合、 リ ソ ース使用率の増 加、 特にブ ロ ッ ク RAM の数な どは、 MicroBlaze の コ ン フ ィ ギ ュ レーシ ョ ン ダ イ ア ロ グ ボ ッ ク ス で簡単に確認で き ま す。 メ モ リ 管理ユニ ッ ト (MMU) 保護 MMU の統合変換ル ッ ク アサ イ ド バ ッ フ ァ ー (UTLB) でブ ロ ッ ク RAM を保護す る には、 パ リ テ ィ が使用 さ れ ま す。 ア ド レ ス変換中にパ リ テ ィ エ ラ ーが検出 さ れ る と 、 TLB ミ ス例外が発生 し 、 ソ フ ト ウ ェ アはエ ン ト リ を リ ロ ー ド す る こ と にな り ます。 TLBHI お よ び TLBLO レ ジ ス タ を使用 し て新 し い TLB エ ン ト リ を書 き 込む と 、 パ リ テ ィ が計算 さ れ ます。 各エ ン ト リ で 1 パ リ テ ィ ビ ッ ト が使用 さ れます。 TLBHI お よ び TLBLO レ ジ ス タ を使用 し て UTLB エン ト リ を読み出す と き 、 パ リ テ ィ も チ ェ ッ ク さ れます。 こ の場合 でパ リ テ ィ エ ラ ーが検出 さ れ る と 、 有効ビ ッ ト が ク リ アにな っ て、 エン ト リ は無効にな り ます。 フ ォール ト ト レ ラ ン ス を有効に し て も 、 スペア ビ ッ ト がパ リ テ ィ に使用で き る ため、 MMU のブ ロ ッ ク RAM サ イ ズ が大 き く な る こ と はあ り ません。 分岐先キ ャ ッ シ ュ保護 分岐先キ ャ ッ シ ュ でブ ロ ッ ク RAM を保護す る には、 パ リ テ ィ が使用 さ れます。 分岐先ア ド レ ス を検索 し てい る と き にパ リ テ ィ エ ラ ーが検出 さ れ る と 、 ア ド レ ス は無視 さ れ、 標準分岐にな り ます。 分岐先キ ャ ッ シ ュ に新 し いア ド レ ス が書 き 込まれ る と 、 パ リ テ ィ が計算 さ れます。 各ア ド レ ス に 1 パ リ テ ィ ビ ッ ト が 使用 さ れます。 フ ォ ール ト ト レ ラ ン ス を 有効に し て も 、 ス ペア ビ ッ ト がパ リ テ ィ に使用で き る た め、 分岐キ ャ ッ シ ュ のブ ロ ッ ク RAM サ イ ズが増え る こ と はあ り ません。 例外処理 フ ォ ール ト ト レ ラ ン ス が有効に な っ て い て、 LMB ブ ロ ッ ク RAM で エ ラ ーが発生す る と 、 LMB BRAM Interface Controller が LMB イ ン タ ーフ ェ イ ス でエ ラ ー信号を生成 し ます。 マシ ン ス テー タ ス レ ジ ス タ で EE ビ ッ ト を セ ッ ト し て、 MicroBlaze で例外を有効にする 場合、 影響を受け る イ ン タ ー フ ェ イ ス に よ り ますが、 訂正不可能なエ ラ ー信号は、 命令バ ス例外かデー タ バス例外の ど ち ら か を生成 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 92 第 2 章 : MicroBlaze アーキテ ク チ ャ 例外処理中にバ ス例外が発生 し た場合は、 MicroBlaze は停止 し 、 外部エ ラ ー信号 MB_Error がセ ッ ト さ れ ます。 こ の動作に よ り 、 訂正不可能なエ ラ ーに よ り 壊れた命令を実行す る こ と は不可能にな り ます。 ソ フ ト ウ ェ ア サポー ト ス ク ラ ビ ング ビ ッ ト エ ラ ーがブ ロ ッ ク RAM に蓄積 さ れない よ う にする ため、定期的に ビ ッ ト エ ラ ーを ス ク ラ ブす る 必要があ り ま す。 特定の コ ン フ ィ ギ ュ レーシ ョ ンで使用 さ れ る LMB ブ ロ ッ ク RAM 全体お よ び MicroBlaze 内部ブ ロ ッ ク RAM すべて の ス ク ラ ブ を実行す る ため、 ス タ ン ド ア ロ ン BSP には microblaze_scrub() と い う 関数があ り ます。 こ の関数は、 タ イ マー割 り 込みルーチンか ら 定期的に呼び出 さ れ る よ う にな っ てい ます。 次はその コ ー ド 例です。 #include #include #include #include "xparameters.h" "xtmrctr.h" "xintc.h" "mb_interface.h" #define SCRUB_PERIOD ... XIntc InterruptController; /* The Interrupt Controller instance */ XTmrCtr TimerCounterInst;/* The Timer Counter instance */ void MicroBlazeScrubHandler(void *CallBackRef, u8 TmrCtrNumber) { /* Perform other timer interrupt processing here */ microblaze_scrub(); } int main (void) { int Status; /* * Initialize the timer counter so that it's ready to use, * specify the device ID that is generated in xparameters.h */ Status = XTmrCtr_Initialize(&TimerCounterInst, TMRCTR_DEVICE_ID); if (Status != XST_SUCCESS) { return XST_FAILURE; } /* * Connect the timer counter to the interrupt subsystem such that * interrupts can occur. */ Status = XIntc_Initialize(&InterruptController, INTC_DEVICE_ID); if (Status != XST_SUCCESS) { return XST_FAILURE; } /* * Connect a device driver handler that will be called when an * interrupt for the device occurs, the device driver handler performs MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 93 第 2 章 : MicroBlaze アーキテ ク チ ャ * the specific interrupt processing for the device */ Status = XIntc_Connect(&InterruptController, TMRCTR_DEVICE_ID, (XInterruptHandler)XTmrCtr_InterruptHandler, (void *) &TimerCounterInst); if (Status != XST_SUCCESS) { return XST_FAILURE; } /* * Start the interrupt controller such that interrupts are enabled for * all devices that cause interrupts, specifying real mode so that the * timer counter can cause interrupts thru the interrupt controller. */ Status = XIntc_Start(&InterruptController, XIN_REAL_MODE); if (Status != XST_SUCCESS) { return XST_FAILURE; } /* * Setup the handler for the timer counter that will be called from the * interrupt context when the timer expires, specify a pointer to the * timer counter driver instance as the callback reference so the * handler is able to access the instance data */ XTmrCtr_SetHandler(&TimerCounterInst, MicroBlazeScrubHandler, &TimerCounterInst); /* * Enable the interrupt of the timer counter so interrupts will occur * and use auto reload mode such that the timer counter will reload * itself automatically and continue repeatedly, without this option * it would expire once only */ XTmrCtr_SetOptions(&TimerCounterInst, TIMER_CNTR_0, XTC_INT_MODE_OPTION | XTC_AUTO_RELOAD_OPTION); /* * Set a reset value for the timer counter such that it will expire * earlier than letting it roll over from 0, the reset value is loaded * into the timer counter when it is started */ XTmrCtr_SetResetValue(TmrCtrInstancePtr,TmrCtrNumber,SCRUB_PERIOD); /* * Start the timer counter such that it's incrementing by default, * then wait for it to timeout a number of times */ XTmrCtr_Start(&TimerCounterInst, TIMER_CNTR_0); ... } ス ク ラ ブ レー ト の計算方法な ど、 ス ク ラ ブの イ ンプ リ メ ン ト 方法の詳細については、 「ス ク ラ ビ ン グ」 を参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 94 第 2 章 : MicroBlaze アーキテ ク チ ャ ブ ロ ッ ク RAM ド ラ イバー ス タ ン ド ア ロ ンの BSP ブ ロ ッ ク RAM ド ラ イ バーは、LMB BRAM Interface Controller の ECC レ ジ ス タ にア ク セ スす る ために使用 さ れ、 ま た包括的なセルフ テ ス ト も 提供 し ます。 SDK ザ イ リ ン ク ス C プ ロ ジ ェ ク ト の 「ペ リ フ ェ ラ ル テ ス ト 」 を イ ンプ リ メ ン ト す る と 、 シ ス テ ムの 各 LMB BRAM Interface Controller の ブ ロ ッ ク RAM セ ル フ テ ス ト を 含む セ ル フ テ ス ト 例が生成 さ れ ま す。 LMB BRAM Interface Controller で ど の ECC 機能が有効にな っ てい る かに よ り ますが、 こ の コ ー ド は、 ECC 機能のすべてのテ ス ト を実行 し ます。 セ ル フ テ ス ト 例 は、 ス タ ン ド ア ロ ン BSP ブ ロ ッ ク RAM ド ラ イ バ ー の ソ ー ス microblaze_0/libsrc/bram_v3_03_a/src/xbram_selftest.c と い う サブデ ィ レ ク ト リ にあ り ます。 コ ー ド に あ り 、 通常 は、 ス ク ラ ビ ング ス ク ラ ビ ング方法 ス ク ラ ビ ン グは、 ブ ロ ッ ク RAM の タ イ プご と に特化 し た方法で行われます。 • 命令お よ びデー タ キ ャ ッ シ ュ : キ ャ ッ シ ュ のすべての ラ イ ンは、 WIC お よ び WDC 命令を それぞれ使用 し て、 周 期的に無効化 さ れます。 こ れに よ り 、 外部 メ モ リ か ら キ ャ ッ シ ュ ラ イ ンがキ ャ ッ シ ュ に リ ロ ー ド さ れます。 • メ モ リ 管理ユニ ッ ト (MMU) 保護 : UTLB のすべてのエン ト リ は、 有効ビ ッ ト を ク リ アに し て、 TLBHI レ ジ ス タ を書 き 込む こ と に よ り 、 周期的に無効化 さ れます。 • 分岐先キ ャ ッ シ ュ (BTC) : BTC 全体が、 分岐 BRI4 を同期化する こ と に よ り 、 無効化 さ れます。 • LMB ブ ロ ッ ク RAM : メ モ リ のすべてのア ド レ ス が周期的に読み出 し お よ び書 き 込まれ、 各ア ド レ ス の任意の 1 ビ ッ ト エ ラ ーが訂正 さ れます。 LMB BRAM Interface Controller か ら の訂正可能なエ ラ ー用に割 り 込みを追加 し て、 割 り 込みハン ド ラ ーの こ のア ド レ ス をす ぐ に ス ク ラ ブす る こ と も 可能ですが、 大抵の場合は、 信頼性を若干向上 さ せ る 程度です。 それぞれの LMB BRAM Interface Controller で訂正可能エ ラ ー フ ァ ース ト フ ェ ー リ ン グ ア ド レ ス レ ジ ス タ を読み出 し て、 エ ラ ーが発生 し てい る ア ド レ ス を検出で き ます。 割 り 込みを生成で き る よ う にす る には、 接続 さ れてい る LMB BRAM Interface Controller で C_ECC_STATUS_REGISTERS を 1 に設定 し 、 ま た、 エ ラ ーの発生 し てい る ア ド レ ス を 読み出すには、 C_CE_FAILING_REGISTERS を 1 に設定する 必要があ り ます。 ス ク ラ ブ レー ト の計算 ス ク ラ ブ レー ト は、 エ ラ ー発生率お よ び求め る 信頼性の度合いに左右 さ れます。 LMB メ モ リ の ス ク ラ ブ レー ト を概算す る ための式は、 次の よ う に し て求め ら れます。 BER2 P W 760 ‐‐‐‐‐‐‐‐‐‐‐2‐ SR PW は 1 メ モ リ ワー ド での訂正可能なエ ラ ーの発生確率で、 BER は 1 メ モ リ ビ ッ ト の ソ フ ト エ ラ ー レー ト 、 SR は ス ク ラ ブ レー ト です。 各製品フ ァ ミ リ のブ ロ ッ ク RAM に影響す る ソ フ ト エ ラ ー レー ト については、『デバ イ ス信頼性レ ポー ト 』 (UG116) を 参照 し て く だ さ い。 使用例 一 般 的 な 使 用 例 を い く つ か こ こ で 説 明 し ま す。 こ れ ら の 使用例 は、 『LogiCore IP Processor LMB BRAM Interface Controller 製品ガ イ ド 』 (PG112) か ら の抜粋です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 95 第 2 章 : MicroBlaze アーキテ ク チ ャ 最小限 MicroBlaze で フ ォ ール ト ト レ ラ ン ス を イ ネーブルに し ていて、 ほかの コ ン フ ィ ギ ュ レーシ ョ ン を実行 し ていない場 合、 こ のシ ス テ ムにな り ます。 エ リ ア制約が厳 し く 、 ECC 機能のテ ス ト やエ ラ ー頻度や ロ ケーシ ョ ンの解析をす る 必要がない場合に適 し てい ます。 ECC レ ジ ス タ は イ ン プ リ メ ン ト さ れ ません。 1 ビ ッ ト エ ラ ーは、 MicroBlaze に渡 さ れ る 前に、 ECC ロ ジ ッ ク に よ っ て訂正 さ れます。 訂正不可能なエ ラ ーは、 MicroBlaze で例外を生成す る エ ラ ー信号を セ ッ ト し ます。 小型 エ ラ ー ウ ィ ン ド を監視す る 必要があ る けれど、 ECC 機能のテ ス ト をす る 必要がない場合に、 こ のシ ス テ ム を使用 し て く だ さ い。 こ れは、 最小限のシ ス テ ムに、 1 ビ ッ ト エ ラ ー レー ト を監視す る ための訂正可能エ ラ ー カ ウ ン タ ー レ ジ ス タ が追加 さ れた も のです。 エ ラ ー レー ト が高すぎ る 場合は、 ス ク ラ ブ レー ト を増や し 、 1 ビ ッ ト エ ラ ーが訂正不 可能な 2 ビ ッ ト エ ラ ーに な る リ ス ク を 最低限に抑え る よ う に し て く だ さ い。 パ ラ メ ー タ ーは、 C_ECC = 1 お よ び C_CE_COUNTER_WIDTH = 10 に設定 し ます。 標準 こ のシ ス テ ムは標準的な使用例を表 し てい ます。 エ ラ ー頻度を監視する 必要があ る だけでな く 、 ソ フ ト ウ ェ ア を介 し て 1 ビ ッ ト エ ラ ーをす ぐ に訂正す る ための割 り 込みを生成 し ます。 ECC 機能のテ ス ト サポー ト はあ り ません。 こ れ は、 小型シ ス テ ムに、 訂正可能なエ ラ ー フ ァ ース ト フ ェー リ ン グ レ ジ ス タ お よ びス テー タ ス レ ジ ス タ が追加 さ れた も のです。 1 ビ ッ ト エ ラ ーが発生す る と 、 訂正可能なエ ラ ー フ ァ ース ト フ ェ ー リ ン グ レ ジ ス タ へア ク セ スす る ため のア ド レ ス が ラ ッ チ さ れ、 ECC ス テー タ ス レ ジ ス タ で CE_STATUS ビ ッ ト を セ ッ ト し ます。 割 り 込みが生成 さ れ る と 、 MicroBlaze がエ ラ ーの発生 し てい る ア ド レ ス を読み出 し てか ら 、 そのア ド レ ス で まず読み出 し を実行 し て、 それ に続いて書 き 込みを実行 し ます。 こ れで、 ブ ロ ッ ク RAM か ら 1 ビ ッ ト エ ラ ーが削除 さ れ、 1 ビ ッ ト エ ラ ーが訂正不 可能な 2 ビ ッ ト エ ラ ーにな る リ ス ク を軽減 し ま す。 パ ラ メ ー タ ーは、 C_ECC = 1、 C_CE_COUNTER_WIDTH = 10、 C_ECC_STATUS_REGISTER = 1、 お よ び C_CE_FAILING_REGISTERS = 1 に設定 し ます。 フル こ のシ ス テ ムは、 LMB BRAM Interface Controller で提供 さ れ る 機能をすべて使用 し 、 フル エ ラ ー挿入機能だけでな く 、 エ ラ ー監視や割 り 込み生成 も イ ネーブルに し ます。 こ れは、 標準シ ス テ ムに、 訂正可能なエ ラ ー フ ァ ース ト フ ェー リ ン グ レ ジ ス タ お よ びフ ォール ト 挿入レ ジ ス タ が追加 さ れた も のです。 シ ス テ ム デバ ッ グ ま たは高い フ ォー ル ト ト レ ラ ン ス要件のないシ ス テ ムの ECC 機能の フル コ ン ト ロ ール用の機能がすべてオンにな っ てい ます。 パ ラ メ ー タ ーは、 C_ECC = 1、 C_CE_COUNTER_WIDTH = 10、 C_ECC_STATUS_REGISTER = 1 お よ び C_CE_FAILING_REGISTERS = 1、 C_UE_FAILING_REGISTERS = 1 お よ び C_FAULT_INJECT = 1 に設定 し ま す。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 96 第 2 章 : MicroBlaze アーキテ ク チ ャ ロ ッ ク ス テ ッ プ操作 MicroBlaze は ロ ッ ク ス テ ッ プ コ ン フ ィ ギ ュ レーシ ョ ンで動作可能です。 こ の コ ン フ ィ ギ ュ レーシ ョ ンでは、 複数の同 じ MicroBlaze コ アが同 じ プ ロ グ ラ ム を実行 し ま す。 コ アの出力を比較 し て、 不正ア ク セ ス、 過渡エ ラ ー、 恒久的な ハー ド ウ ェ ア エ ラ ー と い っ た問題を検出 し ます。 シ ス テム コ ン フ ィ ギ ュ レーシ ョ ン マ ス タ ー コ ア (プ ラ イ マ リ コ ア) を 除 き 、 シ ス テ ム の ス レ ー ブ MicroBlaze コ ア すべ て で、 パ ラ メ ー タ ー C_LOCKSTEP_SLAVE は 1 に設定 さ れます。 マ ス タ ー コ アはその出力信号のすべて を駆動 し 、 デバ ッ グ機能を処理 し ま す。 マ ス タ ー の ポ ー ト Lockstep_Master_Out は、 デ バ ッ グ を 処理す る た め、 ス レ ー ブ の ポ ー ト Lockstep_Slave_In に接続 さ れてい ます。 ス レーブ コ アは出力信号を駆動せず、 入力信号を受信す る だけです。 こ のためには、 必ずス レーブの入力ポー ト に信 号を接続 し て く だ さ い。 バ ス の場合は、 個々の入力ポー ト を明示的に接続 し てお く 必要があ り ます。 マ ス タ ーお よ び ス レーブ コ アのポー ト Lockstep_Out は比較のための出力信号をすべて提供 し ます。 エ ラ ーが発 生 し ない限 り 、 各 コ アか ら の個々の信号はど の ク ロ ッ ク サ イ ク ルで も 同 じ です。 ロ ッ ク ス テ ッ プ操作を正 し く 機能 さ せ る には、 コ アへのすべての入力信号は同期 し てい る 必要があ り ます。 外部同期 が必要な入力信号は、 Interrupt、 Reset、 Ext_Brk、 お よ び Ext_Nm_Brk です。 使用例 一般的な使用例を 2 つ、 こ こ で説明 し ます。 ま た、 ロ ッ ク ス テ ッ プ操作は、 MicroBlaze コ ア レベルで 3 重モジ ュ ール 式冗長を イ ンプ リ メ ン ト す る ためのベース を提供 し ます。 不正ア ク セス保護 こ のアプ リ ケーシ ョ ンは、 不正ア ク セ ス に対する 保護機能がついたシ ス テ ムが必要な使用例です。 一般的な例は暗号 アプ リ ケーシ ョ ンです。 こ のアプ ロ ーチでは、 2 つの冗長 MicroBlaze プ ロ セ ッ サを使用 し 、 専用 ロ ーカル メ モ リ お よ び冗長 コ ンパレー タ を そ れぞれ保護エ リ アに配置 し ます。 各プ ロ セ ッ サか ら の出力は、 2 つの コ ンパレー タ に入力 さ れ、 それぞれのプ ロ セ ッ サがすべての入力信号の コ ピーを受信 し ます。 冗長 MicroBlaze プ ロ セ ッ サは機能的に同 じ ですが、 互いに完全に独立 し ていて、 2 つを接続 し てい る 信号はあ り ませ ん。 唯一の例外はデバ ッ グ ロ ジ ッ ク と 関連信号ですが、 デバ ッ グは製品化やシ ス テ ム認証の前にデ ィ ス エーブルにな る も のだか ら です。 マ ス タ ーの MicroBlaze コ アか ら の出力はシ ス テ ムのペ リ フ ェ ラ ルを駆動 し ます。保護エ リ ア を離れ る デー タ はすべて イ ン ヒ ビ タ ーを通過 し ます。 各 イ ン ヒ ビ タ ーは関連付け ら れてい る コ ンパレー タ か ら 制御 さ れます。 デザ イ ンの各保護エ リ アは、 階層 SCC (Single Chip Cryptography) フ ロ ーを使用 し て、 それぞれのパーテ ィ シ ョ ン内に イ ン プ リ メ ン ト す る 必要が あ り ま す。 こ の フ ロ ーの詳細、 参考資料に関 し て は、 『階層デザ イ ン 設計手法ガ イ ド 』 (UG748) を参照 し て く だ さ い。 図 2-41 に、 シ ス テ ムのブ ロ ッ ク 図を示 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 97 第 2 章 : MicroBlaze アーキテ ク チ ャ 出力 DLMB BRAM コン ト ローラー マス タ ー ILMB デバ ッ グ モ ジ ュ ール MicroBlaze パー テ ィ シ ョ ン パー テ ィ シ ョ ン コ ンパレ ー タ パー テ ィ シ ョ ン BRAM コン ト ローラー MicroBlaze ペ リ フ ェ ラル 入力 MicroBlaze BRAM イン ヒ ビ ター C_LOCKSTEP_SLAVE = 0 インヒビター MicroBlaze パー テ ィ シ ョ ン Lockstep_Out コ ンパレータ デバ ッ グ I/O イ ン タ ー フ ェ イ ス Lockstep_Master_Out Lockstep_Slave_In 外部 メ モ リ イン ターフ ェ イス デバ ッ グ 入力 DLMB BRAM コン ト ローラー BRAM コ ン パレ ー タ パーテ ィ シ ョ ン MicroBlaze ス レーブ Lockstep_Out ILMB コ ンパレータ BRAM コン ト ローラー C_LOCKSTEP_SLAVE = 1 デバ ッ グ イ ン タ ー フ ェ イ ス - 製品化の と き に削除 図 2‐41 : ロ ッ ク ス テ ッ プ不正ア ク セス保護ア プ リ ケーシ ョ ン エ ラ ー検出 エ ラ ー検出の使用例では、 過渡エ ラ ーお よ び恒久的エ ラ ーをすべて検出する 必要があ り ます。 シ ス テ ム を使用可能な 状態に保つために冗長機能が利用 さ れ る よ う な フ ェ ールセーフお よ びフ ォール ト ト レ ン ラ ン ト アプ リ ケーシ ョ ン で は、 こ れは重要な こ と です。 こ のシ ス テ ムでは、 2 つの冗長 MicroBlaze プ ロ セ ッ サが ロ ッ ク ス テ ッ プで実行 さ れます。 2 つのプ ロ セ ッ サの出力に 不一致が検出 さ れた と き エ ラ ーを出力す る ため、 コ ンパレー タ が使用 さ れます。 ど んなエ ラ ーが発生 し て も 両方のプ ロ セ ッ サがす ぐ に停止 し 、 それ以上エ ラ ーが広が ら ない よ う に し ます。 デバ ッ グ ロ ジ ッ ク と 関連信号を除いて、 冗長 MicroBlaze プ ロ セ ッ サは機能的に同 じ です。 マ ス タ ーの MicroBlaze コ アの出力はシ ス テ ムのペ リ フ ェ ラ ルを駆動 し ます。 ス レーブの MicroBlaze コ アには入力が接続 さ れてい る だけで、 出 力はすべてオープ ンの ま ま です。 シ ス テ ムには、 完全な フ ォール ト ト ラ レ ン ト のアプ リ ケーシ ョ ン を設計する ための基本ブ ロ ッ ク が含まれていて、冗 長性を持たせ る には、 1 つま たは複数の追加ブ ロ ッ ク を追加する 必要があ り ます。 図 2-42 に、 こ の使用例を示 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 98 第 2 章 : MicroBlaze アーキテ ク チ ャ エラー リ セ ッ ト C_LOCKSTEP_SLAVE = 0 DLMB 出力 BRAM コ ン ト ローラー MicroBlaze BRAM 入力 マス タ ー ILMB BRAM コ ン ト ローラー Lockstep_Out MicroBlaze デバ ッ グ I/O イ ン タ ー フ ェ イ ス デバ ッ グ モ ジ ュ ール コンパレータ 外部 メ モ リ イン ターフ ェ イス デバ ッ グ Lockstep_Out MicroBlaze 入力 入力 ス レーブ 入力 C_LOCKSTEP_SLAVE = 1 図 2‐42 : ロ ッ ク ス テ ッ プ エ ラ ー検出ア プ リ ケーシ ョ ン コ ヒ ーレ ン シ MicroBlaze は、 キ ャ ッ シ ュ コ ヒ ーレ ン シ をサポー ト する だけでな く 、『AMBA® AXI and ACE Protocol Specification』 (ARM IHI 0022E) で定義 さ れてい る AXI コ ヒ ーレ ン シ拡張 (ACE) を使用 し て、キ ャ ッ シ ュ お よ び変換ル ッ ク アサ イ ド バ ッ フ ァ ーの無効化 も サポー ト し ます。 コ ヒ ーレ ン シ サポー ト は、 C_INTERCONNECT が 3 (ACE) に設定 さ れてい る と き に有効に な り ま す。 ACE を使用す る と 、 コ ヒ ーレ ン シ ド メ イ ンの MicroBlaze プ ロ セ ッ サのすべてのキ ャ ッ シ ュ 間の コ ヒ ーレ ン シ を保つ こ と がで き ます。 ペ リ フ ェ ラ ル ポー ト (AXI_IP、 AXI_DP) お よ び ロ ーカル メ モ リ (ILMB、 DLMB) は コ ヒ ーレ ン シ ド メ イ ン外にな り ます。 ラ イ ト バ ッ ク デー タ キ ャ ッ シ ュ 、 ワ イ ド キ ャ ッ シ ュ イ ン タ ーフ ェ イ ス (32 ビ ッ ト を超え る デー タ )、 命令キ ャ ッ シ ュ ス ト リ ーム、 命令キ ャ ッ シ ュ ビ ク テ ィ ム に対 し て、 ま たはエ リ ア最適化が有効にな っ てい る と 、 コ ヒ ーレ ン シはサ ポー ト さ れません。 さ ら に、 C_ICACHE_ALWAYS_USED お よ び C_DCACHE_ALWAYS_USED の両方を 1 に設定す る 必要があ り ます。 無効化 コ ヒ ーレ ン シ ハー ド ウ ェ アは、 次のケース で無効化を処理 し ます。 • デー タ キ ャ ッ シ ュ 無効化 : コ ヒ ー レ ン シ ド メ イ ン の MicroBlaze コ ア が、 外部 キ ャ ッ シ ュ 無効化命令 (WDC.EXT.CLEAR ま た は WDC.EXT.FLUSH) を使用 し てデー タ キ ャ ッ シ ュ ラ イ ン を無効化にす る と 、 ハー ド ウ ェ ア メ ッ セージが表示 さ れ、 コ ヒ ーレ ン シ ド メ イ ンのその他すべての コ アが同 じ こ と を実行 し ます。 物理ア ド レ ス が常に使用 さ れます。 • 命令キ ャ ッ シ ュ 無効化 : コ ヒ ーレ ン シ ド メ イ ンの MicroBlaze コ アが命令キ ャ ッ シ ュ ラ イ ン を無効化にす る と 、 ハー ド ウ ェ ア メ ッ セージ MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 99 第 2 章 : MicroBlaze アーキテ ク チ ャ が表示 さ れ、 コ ヒ ーレ ン シ ド メ イ ンのその他すべての コ アが同 じ こ と を実行 し ます。 MMU が仮想モー ド の場合 は、 仮想ア ド レ ス が使用 さ れ、 そ う でない場合は物理ア ド レ ス が使用 さ れます。 • MMU TLB 無効化 : コ ヒ ーレ ン シ ド メ イ ンの MicroBlaze コ アが UTLB のエン ト リ を無効化す る と (0 の有効フ ラ グで TLBHI を書 き 込むな ど)、 ハー ド ウ ェ ア メ ッ セージが表示 さ れ、 コ ヒ ーレ ン シ ド メ イ ンのその他すべての コ アが、 それぞれの コ アの UTLB のエン ト リ で無効化 さ れた仮想ア ド レ ス に一致す る タ ブを持つ も のを無効化 し 、ま たそのシ ャ ド ウ TLB を空に し ます。 エン ト リ を一致 さ せ る と き TID は考慮 さ れないので、ほかのプ ロ セ ス に属すエン ト リ を無効化 し て し ま う 可能性 があ り ます。 こ う し たエ ン ト リ に後でア ク セ スす る と 、 ソ フ ト ウ ェ アで処理す る 必要のあ る TLB ミ ス例外が生 成 さ れます。 MMU ページ を無効化す る 前に、 まず、 コ ヒ ーレ ン シ ド メ イ ン内でハー ド ウ ェ ア無効化が伝搬 さ れてい る こ と を 確認す る ため、 UTLB にそのページ を ロ ー ド す る 必要があ り ます。 コ ヒ ーレ ン シ ド メ イ ンのほかのプ ロ セ ッ サの TLB に こ のエン ト リ が格納 さ れてい る 可能性があ る ので、 メ モ リ のページ を無効化にする だけでは不十分です。 MicroBlaze コ アが 1 つ以上のエン ト リ を無効化に し た ら 、 すべての ピ ア プ ロ セ ッ サがそれぞれの TLB 無効化を 完了 し た こ と を確認す る ため、 メ モ リ バ リ ア命令 (MBAR) を実行する 必要があ り ます。 • 分岐先キ ャ ッ シ ュ 無効化 : コ ヒ ーレ ン シ ド メ イ ンの MicroBlaze コ アが、 メ モ リ バ リ ア命令ま たは同期分岐を使用 し て、 分岐先キ ャ ッ シ ュ を無効化にす る と 、 ハー ド ウ ェ ア メ ッ セージが表示 さ れ、 コ ヒ ーレ ン シ ド メ イ ン のその他すべての コ アが同 じ こ と を実行 し ます。 特に、 こ れは、 「自己変更 コ ー ド 」 にあ る ガ イ ド ラ イ ンに沿っ ていれば、 マルチプ ロ セ ッ サ シ ス テ ムの コ ヒ ーレ ン シ ド メ イ ン内で自己変更 コ ー ド を透過的に使用で き る と い う こ と です。 プ ロ ト コ ル準拠 MicroBlaze の命令キ ャ ッ シ ュ イ ン タ ーフ ェ イ ス は、 ACE ト ラ ンザ ク シ ョ ンの次のサブセ ッ ト を出力 し ます。 • ReadClean キ ャ ッ シ ュ ラ イ ンが割 り 当て ら れ る と 出力 さ れ る • ReadOnce キ ャ ッ シ ュ がオ フ の と き 、 ま たは MMU の抑止キ ャ ッ シ イ ン グ ビ ッ ト がキ ャ ッ シ ュ ラ イ ンに対 し てセ ッ ト さ れ る と 、 出力 さ れ る MicroBlaze のデー タ キ ャ ッ シ ュ イ ン タ ーフ ェ イ ス は、 ACE ト ラ ンザ ク シ ョ ンの次のサブセ ッ ト を出力 し ます。 • ReadClean キ ャ ッ シ ュ ラ イ ンが割 り 当て ら れ る と 出力 さ れ る • CleanUnique 排他的ア ク セ ス シーケ ン ス の一部 と し て SWX 命令が実行 さ れ る と 出力 さ れ る • ReadOnce キ ャ ッ シ ュ がオ フ の と き 、 ま たは MMU の抑止キ ャ ッ シ イ ン グ ビ ッ ト がキ ャ ッ シ ュ ラ イ ンに対 し てセ ッ ト さ れ る と 、 出力 さ れ る • WriteUnique ス ト ア命令が書 き 込みを実行す る たびに出力 さ れ る • CleanInvalid WDC.EXT.FLUSH 命令が実行 さ れ る と 出力 さ れ る • MakeInvalid WDC.EXT.CLEAR 命令が実行 さ れ る と 出力 さ れ る MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 100 第 2 章 : MicroBlaze アーキテ ク チ ャ 両方の イ ン タ ーフ ェ イ ス が、 分散仮想 メ モ リ (DVM) ト ラ ンザ ク シ ョ ンの次のサブセ ッ ト を出力 し ます。 • • DVM 操作 ¨ TLB 無効化 : VA に よ る ハ イ パーバ イ ザー TLB 無効化 ¨ 分岐予測無効化 : 分岐予測すべて無効化 ¨ 物理命令キ ャ ッ シ ュ 無効化 : PA に よ る 非セキ ュ ア な物理命令キ ャ ッ シ ュ 無効化 (仮想 イ ンデ ッ ク ス な し ) ¨ 仮想命令キ ャ ッ シ ュ 無効化 : VA に よ る ハ イ パーバ イ ザー無効化 DVM 同期 ¨ • 同期化 DVM 完了 ¨ ¨ 上記の DVM ト ラ ンザ ク シ ョ ンに加え、 イ ン タ ーフ ェ イ スは、 CleanInvalid お よ び MakeInvalid ト ラ ンザ ク シ ョ ン のみを受け付け ま す。 こ れ ら の ト ラ ン ザ ク シ ョ ン は命令キ ャ ッ シ ュ では効力がな く 、 示 さ れてい る デー タ キ ャ ッ シ ュ ラ イ ン を無効化 し ます。 ほかの ト ラ ンザ ク シ ョ ンが受信 さ れ る と 、 動作は未定義にな り ます。 「キ ャ ッ シ ュ イ ン タ ーフ ェ イ ス」 で説明 さ れてい る よ う に、AXI4 ト ラ ンザ ク シ ョ ンのサブセ ッ ト のみが イ ン タ ーフ ェ イ ス で使用 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 101 第 3 章 MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 こ の章では、 MicroBlaze™ を接続す る ために使用可能な信号 イ ン タ ーフ ェ イ ス の種類を説明 し ます。 概要 MicroBlaze コ アは、 デー タ と 命令のア ク セ ス それぞれにバ ス イ ン タ ーフ ェ イ ス ユニ ッ ト を持つハーバー ド アーキ テ ク チ ャ と し て構成 さ れて い ま す。 サポー ト さ れて い る メ モ リ イ ン タ ー フ ェ イ ス は、 ロ ーカ ル メ モ リ バ ス (LMB)、 AMBA® AXI4 イ ン タ ーフ ェ イ ス (AXI4) お よ び ACE イ ン タ ーフ ェ イ ス (ACE) です。 LMB は、 オンチ ッ プのデ ュ アル ポー ト ブ ロ ッ ク RAM へのシ ン グル サ イ ク ル ア ク セ ス を提供 し 、 AXI4 イ ン タ ーフ ェ イ ス は、 オンチ ッ プ と オ フチ ッ プ両方のペ リ フ ェ ラ ルお よ び メ モ リ への接続を提供 し 、 ACE イ ン タ ーフ ェ イ ス は、 メ モ リ へのキ ャ ッ シ ュ コ ヒ ーレ ン ト 接続を提供 し ます。 ま た、 MicroBlaze では、 最大 16 個の AXI4-Stream イ ン タ ーフ ェ イ ス ポー ト がサポー ト さ れ、 各ポー ト にマ ス タ ーが 1 つ、 ス レーブ イ ン タ ーフ ェ イ ス が 1 つあ り ます。 機能 MicroBlaze は、 次のバス イ ン タ ーフ ェ イ ス で コ ン フ ィ ギ ュ レー ト 可能です。 • • • • • ペ リ フ ェ ラ ル イ ン タ ーフ ェ イ ス用の AMBA AXI4 イ ン タ ーフ ェ イ ス、 キ ャ ッ シ ュ イ ン タ ーフ ェ イ ス用の AMBA AXI4 ま た は ACE イ ン タ ー フ ェ イ ス (詳細は 『ARM® AMBA® AXI and ACE Protocol Specification』 、 ARM IHI 0022Eを参照) 効率 よ く ブ ロ ッ ク RAM 転送す る ための簡単な同期プ ロ ト コ ルを提供する LMB 高速で ノ ン アービ ト レーテ ッ ド の ス ト リ ー ミ ン グ通信を提供す る AXI4-Stream MDM (Microprocessor Debug Module) コ アで使用する デバ ッ グ イ ン タ ーフ ェ イ ス パフ ォーマ ン ス解析用の ト レース イ ン タ ーフ ェ イ ス MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 102 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 MicroBlaze の I/O 概要 図 3-1 お よ び次の表 3-1 で、 コ ア イ ン タ ーフ ェ イ ス は次の よ う に定義 さ れてい ます。 M_AXI_DP : ペ リ フ ェ ラ ル デー タ イ ン タ ーフ ェ イ ス、 AXI4-Lite ま たは AXI4 イ ン タ ーフ ェ イ ス DLMB : M_AXI_IP : ILMB : M0_AXIS..M15_AXIS : S0_AXIS..S15_AXIS : M_AXI_DC : M_ACE_DC : M_AXI_IC : M_ACE_IC : コア: デー タ イ ン タ ーフ ェ イ ス、 ロ ーカル メ モ リ バ ス ( ブ ロ ッ ク RAM のみ ) ペ リ フ ェ ラ ル命令 イ ン タ ーフ ェ イ ス、 AXI4-Lite イ ン タ ーフ ェ イ ス 命令 イ ン タ ーフ ェ イ ス、 ロ ーカル メ モ リ バス ( ブ ロ ッ ク RAM のみ ) AXI4-Stream イ ン タ ーフ ェ イ ス マ ス タ ー直接接続 イ ン タ ーフ ェ イ ス AXI4-Stream イ ン タ ーフ ェ イ ス ス レーブ直接接続 イ ン タ ーフ ェ イ ス デー タ 側キ ャ ッ シ ュ AXI4 イ ン タ ーフ ェ イ ス デー タ 側キ ャ ッ シ ュ ACI コ ヒ ーレ ン シ拡張 (ACE) イ ン タ ーフ ェ イ ス 命令側キ ャ ッ シ ュ AXI4 イ ン タ ーフ ェ イ ス 命令側キ ャ ッ シ ュ ACI コ ヒ ーレ ン シ拡張 (ACE) イ ン タ ーフ ェ イ ス ク ロ ッ ク 、 リ セ ッ ト 、 割 り 込み、 デバ ッ グ、 ト レース用の さ ま ざ ま な信号 命令側 デー タ 側 バス イ ン タ ー フ ェ イ ス バス イ ン タ ー フ ェ イ ス メ モ リ 管理ユニ ッ ト (MMU) M_AXI_IC M_ACE_IC UTLB ITLB シフ ト 特殊 用途 レジス タ バレル シ フ ト 乗算器 ILMB FPU 命令 バッ フ ァー M_AXI_DP 分周器 バス IF D キャ ッ シュ I キャ ッ シュ ALU プ ログ ラ ム カ ウン タ ー 分岐 タ ーゲ ッ ト キャ ッ シュ M_AXI_IP M_AXI_DC M_ACE_DC DTLB バス IF DLMB 命令 デコー ド レ ジ ス タ フ ァ イル 32 X 32b M0_AXIS.. M15_AXIS S0_AXIS.. S15_AXIS オプ シ ョ ンの MicroBlaze 機能 図 3‐1 : MicroBlaze コ アのブ ロ ッ ク図 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 103 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐1 : MicroBlaze コ ア I/O のま と め イ ン ターフ ェ イス I/O M_AXI_DP_AWID M_AXI_DP O マ ス タ ー書き 込みア ド レ ス ID M_AXI_DP_AWADDR M_AXI_DP O マ ス タ ー書き 込みア ド レ ス M_AXI_DP_AWLEN M_AXI_DP O マ ス タ ー バース ト 長 M_AXI_DP_AWSIZE M_AXI_DP O マ ス タ ー バース ト サ イ ズ M_AXI_DP_AWBURST M_AXI_DP O マ ス タ ー バース ト タ イ プ M_AXI_DP_AWLOCK M_AXI_DP O マス ター ロ ッ ク タ イ プ M_AXI_DP_AWCACHE M_AXI_DP O マス ター キ ャ ッ シ ュ タ イ プ M_AXI_DP_AWPROT M_AXI_DP O マ ス タ ー保護 タ イ プ M_AXI_DP_AWQOS M_AXI_DP O マ ス タ ーのサービ ス品質 (QoS) M_AXI_DP_AWVALID M_AXI_DP O マ ス タ ー書き 込みア ド レ ス有効 M_AXI_DP_AWREADY M_AXI_DP I ス レーブ書き 込みア ド レ ス準備完了 M_AXI_DP_WDATA M_AXI_DP O マ ス タ ー書き 込みデー タ M_AXI_DP_WSTRB M_AXI_DP O マ ス タ ー書き 込みス ト ロ ーブ M_AXI_DP_WLAST M_AXI_DP O マ ス タ ー書き 込み最終 M_AXI_DP_WVALID M_AXI_DP O マ ス タ ー書き 込み有効 M_AXI_DP_WREADY M_AXI_DP I ス レーブ書き 込み準備完了 M_AXI_DP_BID M_AXI_DP I ス レーブ応答 ID M_AXI_DP_BRESP M_AXI_DP I ス レーブ書き 込み応答 M_AXI_DP_BVALID M_AXI_DP I ス レーブ書き 込み応答有効 M_AXI_DP_BREADY M_AXI_DP O マ ス タ ー応答準備完了 M_AXI_DP_ARID M_AXI_DP O マ ス タ ー読み出 し ア ド レ ス ID M_AXI_DP_ARADDR M_AXI_DP O マ ス タ ー読み出 し ア ド レ ス M_AXI_DP_ARLEN M_AXI_DP O マ ス タ ー バース ト 長 M_AXI_DP_ARSIZE M_AXI_DP O マ ス タ ー バース ト サ イ ズ M_AXI_DP_ARBURST M_AXI_DP O マ ス タ ー バース ト タ イ プ M_AXI_DP_ARLOCK M_AXI_DP O マス ター ロ ッ ク タ イ プ M_AXI_DP_ARCACHE M_AXI_DP O マス ター キ ャ ッ シ ュ タ イ プ M_AXI_DP_ARPROT M_AXI_DP O マ ス タ ー保護 タ イ プ M_AXI_DP_ARQOS M_AXI_DP O マ ス タ ーのサービ ス品質 (QoS) M_AXI_DP_ARVALID M_AXI_DP O マ ス タ ー読み出 し ア ド レ ス有効 M_AXI_DP_ARREADY M_AXI_DP I ス レーブ読み出 し ア ド レ ス準備完了 M_AXI_DP_RID M_AXI_DP I ス レーブ読み出 し ID タ グ M_AXI_DP_RDATA M_AXI_DP I ス レーブ読み出 し デー タ M_AXI_DP_RRESP M_AXI_DP I ス レーブ読み出 し 応答 信号 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 説明 japan.xilinx.com 104 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐1 : MicroBlaze コ ア I/O のま と め (続き) イ ン ターフ ェ イス I/O M_AXI_DP_RLAST M_AXI_DP I ス レーブ読み出 し 最終 M_AXI_DP_RVALID M_AXI_DP I ス レーブ読み出 し 有効 M_AXI_DP_RREADY M_AXI_DP O マ ス タ ー読み出 し 準備完了 M_AXI_IP_AWID M_AXI_IP O マ ス タ ー書き 込みア ド レ ス ID M_AXI_IP_AWADDR M_AXI_IP O マ ス タ ー書き 込みア ド レ ス M_AXI_IP_AWLEN M_AXI_IP O マ ス タ ー バース ト 長 M_AXI_IP_AWSIZE M_AXI_IP O マ ス タ ー バース ト サ イ ズ M_AXI_IP_AWBURST M_AXI_IP O マ ス タ ー バース ト タ イ プ M_AXI_IP_AWLOCK M_AXI_IP O マス ター ロ ッ ク タ イ プ M_AXI_IP_AWCACHE M_AXI_IP O マス ター キ ャ ッ シ ュ タ イ プ M_AXI_IP_AWPROT M_AXI_IP O マ ス タ ー保護 タ イ プ M_AXI_IP_AWQOS M_AXI_IP O マ ス タ ーのサービ ス品質 (QoS) M_AXI_IP_AWVALID M_AXI_IP O マ ス タ ー書き 込みア ド レ ス有効 M_AXI_IP_AWREADY M_AXI_IP I ス レーブ書き 込みア ド レ ス準備完了 M_AXI_IP_WDATA M_AXI_IP O マ ス タ ー書き 込みデー タ M_AXI_IP_WSTRB M_AXI_IP O マ ス タ ー書き 込みス ト ロ ーブ M_AXI_IP_WLAST M_AXI_IP O マ ス タ ー書き 込み最終 M_AXI_IP_WVALID M_AXI_IP O マ ス タ ー書き 込み有効 M_AXI_IP_WREADY M_AXI_IP I ス レーブ書き 込み準備完了 M_AXI_IP_BID M_AXI_IP I ス レーブ応答 ID M_AXI_IP_BRESP M_AXI_IP I ス レーブ書き 込み応答 M_AXI_IP_BVALID M_AXI_IP I ス レーブ書き 込み応答有効 M_AXI_IP_BREADY M_AXI_IP O マ ス タ ー応答準備完了 M_AXI_IP_ARID M_AXI_IP O マ ス タ ー読み出 し ア ド レ ス ID M_AXI_IP_ARADDR M_AXI_IP O マ ス タ ー読み出 し ア ド レ ス M_AXI_IP_ARLEN M_AXI_IP O マ ス タ ー バース ト 長 M_AXI_IP_ARSIZE M_AXI_IP O マ ス タ ー バース ト サ イ ズ M_AXI_IP_ARBURST M_AXI_IP O マ ス タ ー バース ト タ イ プ M_AXI_IP_ARLOCK M_AXI_IP O マス ター ロ ッ ク タ イ プ M_AXI_IP_ARCACHE M_AXI_IP O マス ター キ ャ ッ シ ュ タ イ プ M_AXI_IP_ARPROT M_AXI_IP O マ ス タ ー保護 タ イ プ M_AXI_IP_ARQOS M_AXI_IP O マ ス タ ーのサービ ス品質 (QoS) M_AXI_IP_ARVALID M_AXI_IP O マ ス タ ー読み出 し ア ド レ ス有効 M_AXI_IP_ARREADY M_AXI_IP I ス レーブ読み出 し ア ド レ ス準備完了 M_AXI_IP_RID M_AXI_IP I ス レーブ読み出 し ID タ グ 信号 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 説明 japan.xilinx.com 105 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐1 : MicroBlaze コ ア I/O のま と め (続き) イ ン ターフ ェ イス I/O M_AXI_IP_RDATA M_AXI_IP I ス レーブ読み出 し デー タ M_AXI_IP_RRESP M_AXI_IP I ス レーブ読み出 し 応答 M_AXI_IP_RLAST M_AXI_IP I ス レーブ読み出 し 最終 M_AXI_IP_RVALID M_AXI_IP I ス レーブ読み出 し 有効 M_AXI_IP_RREADY M_AXI_IP O マ ス タ ー読み出 し 準備完了 M_AXI_DC_AWADDR M_AXI_DC O マ ス タ ー書き 込みア ド レ ス M_AXI_DC_AWLEN M_AXI_DC O マ ス タ ー バース ト 長 M_AXI_DC_AWSIZE M_AXI_DC O マ ス タ ー バース ト サ イ ズ M_AXI_DC_AWBURST M_AXI_DC O マ ス タ ー バース ト タ イ プ M_AXI_DC_AWLOCK M_AXI_DC O マス ター ロ ッ ク タ イ プ M_AXI_DC_AWCACHE M_AXI_DC O マス ター キ ャ ッ シ ュ タ イ プ M_AXI_DC_AWPROT M_AXI_DC O マ ス タ ー保護 タ イ プ M_AXI_DC_AWQOS M_AXI_DC O マ ス タ ーのサービ ス品質 (QoS) M_AXI_DC_AWVALID M_AXI_DC O マ ス タ ー書き 込みア ド レ ス有効 M_AXI_DC_AWREADY M_AXI_DC I ス レーブ書き 込みア ド レ ス準備完了 M_AXI_DC_AWUSER M_AXI_DC O マ ス タ ー書き 込みア ド レ ス ユーザー信号 M_AXI_DC_AWDOMAIN M_ACE_DC O マ ス タ ー書き 込みア ド レ ス ド メ イ ン M_AXI_DC_AWSNOOP M_ACE_DC O マ ス タ ー書き 込みア ド レ ス ス ヌープ M_AXI_DC_AWBAR M_ACE_DC O マ ス タ ー書き 込みア ド レ ス バ リ ア M_AXI_DC_WDATA M_AXI_DC O マ ス タ ー書き 込みデー タ M_AXI_DC_WSTRB M_AXI_DC O マ ス タ ー書き 込みス ト ロ ーブ M_AXI_DC_WLAST M_AXI_DC O マ ス タ ー書き 込み最終 M_AXI_DC_WVALID M_AXI_DC O マ ス タ ー書き 込み有効 M_AXI_DC_WREADY M_AXI_DC I ス レーブ書き 込み準備完了 M_AXI_DC_WUSER M_AXI_DC O マ ス タ ー書き 込みユーザー信号 M_AXI_DC_BRESP M_AXI_DC I ス レーブ書き 込み応答 M_AXI_DC_BID M_AXI_DC I ス レーブ応答 ID M_AXI_DC_BVALID M_AXI_DC I ス レーブ書き 込み応答有効 M_AXI_DC_BREADY M_AXI_DC O マ ス タ ー応答準備完了 M_AXI_DC_BUSER M_AXI_DC I ス レーブ書き 込み応答ユーザー信号 M_AXI_DC_WACK M_ACE_DC O ス レーブ書き 込み肯定応答 M_AXI_DC_ARID M_AXI_DC O マ ス タ ー読み出 し ア ド レ ス ID M_AXI_DC_ARADDR M_AXI_DC O マ ス タ ー読み出 し ア ド レ ス M_AXI_DC_ARLEN M_AXI_DC O マ ス タ ー バース ト 長 M_AXI_DC_ARSIZE M_AXI_DC O マ ス タ ー バース ト サ イ ズ 信号 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 説明 japan.xilinx.com 106 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐1 : MicroBlaze コ ア I/O のま と め (続き) イ ン ターフ ェ イス I/O M_AXI_DC_ARBURST M_AXI_DC O マ ス タ ー バース ト タ イ プ M_AXI_DC_ARLOCK M_AXI_DC O マス ター ロ ッ ク タ イ プ M_AXI_DC_ARCACHE M_AXI_DC O マス ター キ ャ ッ シ ュ タ イ プ M_AXI_DC_ARPROT M_AXI_DC O マ ス タ ー保護 タ イ プ M_AXI_DC_ARQOS M_AXI_DC O マ ス タ ーのサービ ス品質 (QoS) M_AXI_DC_ARVALID M_AXI_DC O マ ス タ ー読み出 し ア ド レ ス有効 M_AXI_DC_ARREADY M_AXI_DC I ス レーブ読み出 し ア ド レ ス準備完了 M_AXI_DC_ARUSER M_AXI_DC O マ ス タ ー読み出 し ア ド レ ス ユーザー信号 M_AXI_DC_ARDOMAIN M_ACE_DC O マ ス タ ー読み出 し ア ド レ ス ド メ イ ン M_AXI_DC_ARSNOOP M_ACE_DC O マ ス タ ー読み出 し ア ド レ ス ス ヌープ M_AXI_DC_ARBAR M_ACE_DC O マ ス タ ー読み出 し ア ド レ ス バ リ ア M_AXI_DC_RID M_AXI_DC I ス レーブ読み出 し ID タ グ M_AXI_DC_RDATA M_AXI_DC I ス レーブ読み出 し デー タ M_AXI_DC_RRESP M_AXI_DC I ス レーブ読み出 し 応答 M_AXI_DC_RLAST M_AXI_DC I ス レーブ読み出 し 最終 M_AXI_DC_RVALID M_AXI_DC I ス レーブ読み出 し 有効 M_AXI_DC_RREADY M_AXI_DC O マ ス タ ー読み出 し 準備完了 M_AXI_DC_RUSER M_AXI_DC I ス レーブ読み出 し ユーザー信号 M_AXI_DC_RACK M_ACE_DC O マ ス タ ー読み出 し 肯定応答 M_AXI_DC_ACVALID M_ACE_DC I ス レーブ ス ヌープ ア ド レ ス有効 M_AXI_DC_ACADDR M_ACE_DC I ス レーブ ス ヌープ ア ド レ ス M_AXI_DC_ACSNOOP M_ACE_DC I ス レーブ ス ヌープ ア ド レ ス ス ヌープ M_AXI_DC_ACPROT M_ACE_DC I ス レーブ ス ヌープ ア ド レ ス保護 タ イ プ M_AXI_DC_ACREADY M_ACE_DC O マ ス タ ー ス ヌープ準備完了 M_AXI_DC_CRREADY M_ACE_DC I ス レーブ ス ヌープ応答準備完了 M_AXI_DC_CRVALID M_ACE_DC O マ ス タ ー ス ヌープ応答有効 M_AXI_DC_CRRESP M_ACE_DC O マ ス タ ー ス ヌープ応答 M_AXI_DC_CDVALID M_ACE_DC O マ ス タ ー ス ヌープ デー タ 有効 M_AXI_DC_CDREADY M_ACE_DC I ス レーブ ス ヌープ デー タ 準備完了 M_AXI_DC_CDDATA M_ACE_DC O マ ス タ ー ス ヌープ デー タ M_AXI_DC_CDLAST M_ACE_DC O マ ス タ ー ス ヌープ デー タ 最終 M_AXI_IC_AWID M_AXI_IC O マ ス タ ー書き 込みア ド レ ス ID M_AXI_IC_AWADDR M_AXI_IC O マ ス タ ー書き 込みア ド レ ス M_AXI_IC_AWLEN M_AXI_IC O マ ス タ ー バース ト 長 M_AXI_IC_AWSIZE M_AXI_IC O マ ス タ ー バース ト サ イ ズ 信号 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 説明 japan.xilinx.com 107 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐1 : MicroBlaze コ ア I/O のま と め (続き) イ ン ターフ ェ イス I/O M_AXI_IC_AWBURST M_AXI_IC O マ ス タ ー バース ト タ イ プ M_AXI_IC_AWLOCK M_AXI_IC O マス ター ロ ッ ク タ イ プ M_AXI_IC_AWCACHE M_AXI_IC O マス ター キ ャ ッ シ ュ タ イ プ M_AXI_IC_AWPROT M_AXI_IC O マ ス タ ー保護 タ イ プ M_AXI_IC_AWQOS M_AXI_IC O マ ス タ ーのサービ ス品質 (QoS) M_AXI_IC_AWVALID M_AXI_IC O マ ス タ ー書き 込みア ド レ ス有効 M_AXI_IC_AWREADY M_AXI_IC I ス レーブ書き 込みア ド レ ス準備完了 M_AXI_IC_AWUSER M_AXI_IC O マ ス タ ー書き 込みア ド レ ス ユーザー信号 M_AXI_IC_AWDOMAIN M_ACE_IC O マ ス タ ー書き 込みア ド レ ス ド メ イ ン M_AXI_IC_AWSNOOP M_ACE_IC O マ ス タ ー書き 込みア ド レ ス ス ヌープ M_AXI_IC_AWBAR M_ACE_IC O マ ス タ ー書き 込みア ド レ ス バ リ ア M_AXI_IC_WDATA M_AXI_IC O マ ス タ ー書き 込みデー タ M_AXI_IC_WSTRB M_AXI_IC O マ ス タ ー書き 込みス ト ロ ーブ M_AXI_IC_WLAST M_AXI_IC O マ ス タ ー書き 込み最終 M_AXI_IC_WVALID M_AXI_IC O マ ス タ ー書き 込み有効 M_AXI_IC_WREADY M_AXI_IC I ス レーブ書き 込み準備完了 M_AXI_IC_WUSER M_AXI_IC O マ ス タ ー書き 込みユーザー信号 M_AXI_IC_BID M_AXI_IC I ス レーブ応答 ID M_AXI_IC_BRESP M_AXI_IC I ス レーブ書き 込み応答 M_AXI_IC_BVALID M_AXI_IC I ス レーブ書き 込み応答有効 M_AXI_IC_BREADY M_AXI_IC O マ ス タ ー応答準備完了 M_AXI_IC_BUSER M_AXI_IC I ス レーブ書き 込み応答ユーザー信号 M_AXI_IC_WACK M_ACE_IC O ス レーブ書き 込み肯定応答 M_AXI_IC_ARID M_AXI_IC O マ ス タ ー読み出 し ア ド レ ス ID M_AXI_IC_ARADDR M_AXI_IC O マ ス タ ー読み出 し ア ド レ ス M_AXI_IC_ARLEN M_AXI_IC O マ ス タ ー バース ト 長 M_AXI_IC_ARSIZE M_AXI_IC O マ ス タ ー バース ト サ イ ズ M_AXI_IC_ARBURST M_AXI_IC O マ ス タ ー バース ト タ イ プ M_AXI_IC_ARLOCK M_AXI_IC O マス ター ロ ッ ク タ イ プ M_AXI_IC_ARCACHE M_AXI_IC O マス ター キ ャ ッ シ ュ タ イ プ M_AXI_IC_ARPROT M_AXI_IC O マ ス タ ー保護 タ イ プ M_AXI_IC_ARQOS M_AXI_IC O マ ス タ ーのサービ ス品質 (QoS) M_AXI_IC_ARVALID M_AXI_IC O マ ス タ ー読み出 し ア ド レ ス有効 M_AXI_IC_ARREADY M_AXI_IC I ス レーブ読み出 し ア ド レ ス準備完了 M_AXI_IC_ARUSER M_AXI_IC O マ ス タ ー読み出 し ア ド レ ス ユーザー信号 信号 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 説明 japan.xilinx.com 108 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐1 : MicroBlaze コ ア I/O のま と め (続き) イ ン ターフ ェ イス I/O M_AXI_IC_ARDOMAIN M_ACE_IC O マ ス タ ー読み出 し ア ド レ ス ド メ イ ン M_AXI_IC_ARSNOOP M_ACE_IC O マ ス タ ー読み出 し ア ド レ ス ス ヌープ M_AXI_IC_ARBAR M_ACE_IC O マ ス タ ー読み出 し ア ド レ ス バ リ ア M_AXI_IC_RID M_AXI_IC I ス レーブ読み出 し ID タ グ M_AXI_IC_RDATA M_AXI_IC I ス レーブ読み出 し デー タ M_AXI_IC_RRESP M_AXI_IC I ス レーブ読み出 し 応答 M_AXI_IC_RLAST M_AXI_IC I ス レーブ読み出 し 最終 M_AXI_IC_RVALID M_AXI_IC I ス レーブ読み出 し 有効 M_AXI_IC_RREADY M_AXI_IC O マ ス タ ー読み出 し 準備完了 M_AXI_IC_RUSER M_AXI_IC I ス レーブ読み出 し ユーザー信号 M_AXI_IC_RACK M_ACE_IC O マ ス タ ー読み出 し 肯定応答 M_AXI_IC_ACVALID M_ACE_IC I ス レーブ ス ヌープ ア ド レ ス有効 M_AXI_IC_ACADDR M_ACE_IC I ス レーブ ス ヌープ ア ド レ ス M_AXI_IC_ACSNOOP M_ACE_IC I ス レーブ ス ヌープ ア ド レ ス ス ヌープ M_AXI_IC_ACPROT M_ACE_IC I ス レーブ ス ヌープ ア ド レ ス保護 タ イ プ M_AXI_IC_ACREADY M_ACE_IC O マ ス タ ー ス ヌープ準備完了 M_AXI_IC_CRREADY M_ACE_IC I ス レーブ ス ヌープ応答準備完了 M_AXI_IC_CRVALID M_ACE_IC O マ ス タ ー ス ヌープ応答有効 M_AXI_IC_CRRESP M_ACE_IC O マ ス タ ー ス ヌープ応答 M_AXI_IC_CDVALID M_ACE_IC O マ ス タ ー ス ヌープ デー タ 有効 M_AXI_IC_CDREADY M_ACE_IC I ス レーブ ス ヌープ デー タ 準備完了 M_AXI_IC_CDDATA M_ACE_IC O マ ス タ ー ス ヌープ デー タ M_AXI_IC_CDLAST 信号 説明 M_ACE_IC O マ ス タ ー ス ヌープ デー タ 最終 Data_Addr[0:31] DLMB O デー タ イ ン タ ーフ ェ イ ス LMB ア ド レ ス バ ス Byte_Enable[0:3] DLMB O デー タ イ ン タ ーフ ェ イ ス LMB バ イ ト イ ネーブル Data_Write[0:31] DLMB O デー タ イ ン タ ーフ ェ イ ス LMB 書き 込みデー タ バ ス D_AS DLMB O デー タ イ ン タ ーフ ェ イ ス LMB ア ド レ ス ス ト ロ ーブ Read_Strobe DLMB O デー タ イ ン タ ーフ ェ イ ス LMB 読み出 し ス ト ロ ーブ Write_Strobe DLMB O デー タ イ ン タ ーフ ェ イ ス LMB 書き 込みス ト ロ ーブ Data_Read[0:31] DLMB I デー タ イ ン タ ーフ ェ イ ス LMB 読み出 し デー タ バ ス DReady DLMB I デー タ イ ン タ ーフ ェ イ ス LMB 読み出 し 準備完了 DWait DLMB I デー タ イ ン タ ーフ ェ イ ス LMB デー タ 待機 DCE DLMB I デー タ イ ン タ ーフ ェ イ ス LMB 訂正可能エ ラ ー DUE DLMB I デー タ イ ン タ ーフ ェ イ ス LMB 訂正不可能エ ラ ー Instr_Addr[0:31] ILMB O 命令 イ ン タ ーフ ェ イ ス LMB ア ド レ ス バ ス MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 109 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐1 : MicroBlaze コ ア I/O のま と め (続き) イ ン ターフ ェ イス I/O I_AS ILMB O 命令 イ ン タ ーフ ェ イ ス LMB ア ド レ ス ス ト ロ ーブ IFetch ILMB O 命令 イ ン タ ーフ ェ イ ス LMB 命令フ ェ ッ チ Instr[0:31] ILMB I 命令 イ ン タ ーフ ェ イ ス LMB 読み出 し デー タ バ ス IReady ILMB I 命令 イ ン タ ーフ ェ イ ス LMB デー タ 準備完了 IWait ILMB I 命令 イ ン タ ーフ ェ イ ス LMB デー タ 待機 ICE ILMB I 命令 イ ン タ ーフ ェ イ ス LMB 訂正可能エ ラ ー IUE ILMB I 命令 イ ン タ ーフ ェ イ ス LMB 訂正不可能エ ラ ー Mn_AXIS_TLAST M0_AXIS.. M15_AXIS O マ ス タ ー イ ン タ ーフ ェ イ ス出力 AXI4 チ ャ ネル 書き 込み最終 Mn_AXIS_TDATA M0_AXIS.. M15_AXIS O マ ス タ ー イ ン タ ーフ ェ イ ス出力 AXI4 チ ャ ネル 書き 込みデー タ Mn_AXIS_TVALID M0_AXIS.. M15_AXIS O マ ス タ ー イ ン タ ーフ ェ イ ス出力 AXI4 チ ャ ネル 書き 込み有効 Mn_AXIS_TREADY M0_AXIS.. M15_AXIS I マ ス タ ー イ ン タ ーフ ェ イ ス入力 AXI4 チ ャ ネル 書き 込み準備完了 Sn_AXIS_TLAST S0_AXIS.. S15_AXIS I ス レーブ イ ン タ ーフ ェ イ ス入力 AXI4 チ ャ ネル 書き 込み最終 Sn_AXIS_TDATA S0_AXIS.. S15_AXIS I ス レーブ イ ン タ ーフ ェ イ ス入力 AXI4 チ ャ ネル 書き 込みデー タ Sn_AXIS_TVALID S0_AXIS.. S15_AXIS I ス レーブ イ ン タ ーフ ェ イ ス入力 AXI4 チ ャ ネル 書き 込み有効 Sn_AXIS_TREADY S0_AXIS.. S15_AXIS O ス レーブ イ ン タ ーフ ェ イ ス出力 AXI4 チ ャ ネル 書き 込み準備完了 Interrupt コア I 割 り 込み Interrupt_Address1 コア I 割 り 込みベ ク タ ー ア ド レ ス Interrupt_Ack1 コア O 割 り 込み肯定応答 Reset コア I コ ア リ セ ッ ト 、 ア ク テ ィ ブ High。 最低 1 Clk ク ロ ッ ク サ イ ク ル間保持する 必要があ る 。 Reset_Mode[0:1] コア I リ セ ッ ト モー ド 。 リ セ ッ ト がア ク テ ィ ブの と き にサンプル。 詳細は、 表 3-2 を参照。 Clk コア I ク ロ ッ ク2 Ext_BRK コア I MDM か ら のブ レー ク 信号 Ext_NM_BRK コア I MDM か ら のマ ス ク 不可能なブ レー ク 信号 MB_Halted コア O デバ ッ グ イ ン タ ーフ ェ イ ス を介 し て、Dbg_Stop を セ ッ ト し て、 ま たは Reset_Mode[0:1] を 10 に設定 し て、パ イ プ ラ イ ン を停止 Dbg_Stop コア I で き る だ け 早 く 無条件で パ イ プ ラ イ ン を 停止。 立 ち 上が り エ ッ ジ で検出 さ れた信号を 最低 1Clk ク ロ ッ ク サ イ ク ル間保 持する 必要があ る 。 信号は C_DEBUG_ENABLED が 0 よ り 大 き い場合にのみ効力があ る 。 信号 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 説明 japan.xilinx.com 110 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐1 : MicroBlaze コ ア I/O のま と め (続き) イ ン ターフ ェ イス I/O 説明 Dbg_Intr コア O デバ ッ グ割 り 込み出力で、 パ フ ォ ーマ ン ス 監視カ ウ ン タ ーが オーバーフ ロ ーす る と セ ッ ト さ れ、 C_DEBUG_ENABLED が 2 ( 拡張) の と き に利用可能。 MB_Error コア O C_FAULT_TOLERANT が 1 の と き 、 ミ ス し た例外が原因でパ イ プ ラ イ ンが停止する 。 Sleep コア O SLEEP 命令の実行後 ま たは Reset_Mode[0:1] を 10 に設定 し 、 MicroBlaze は ス リ ープ モー ド にな り 、 外部ア ク セ ス はすべて 完了 し 、 パ イ プ ラ イ ンは停止。 Wakeup[0:1] コア I ど ち ら かの ビ ッ ト ま たは両方の ビ ッ ト が 1 の と き 、 MicroBlaze が ス リ ープ モー ド か ら 復帰す る 。 MicroBlaze が ス リ ープ モー ド でない と き は無視 さ れ る 。 Dbg_Wakeup コア O 外部 ロ ジ ッ ク が ウ ェ ー ク ア ッ プ信号を使用 し て、MicroBlaze を ス リ ープ モー ド か ら 復帰 さ せ る デバ ッ グ リ ク エ ス ト Lockstep_... コア IO ハ イ イ ン テ グ リ テ ィ アプ リ ケーシ ョ ン用の ロ ッ ク ス テ ッ プ信 号。 詳細は、 表 3-11 を参照。 Dbg_... コア IO MDM か ら のデバ ッ グ信号。 詳細は、 表 3-13 を参照。 Trace_... コア O リ ア ル タ イ ム ハー ド ウ ェ ア 解析の ト レ ー ス 信号。 詳細は、 表 3-14 を参照。 信号 1. C_USE_INTERRUPT = 2 の場合のみ使用 (低レ イ テ ン シ割 り 込みサポー ト ) 2. MicroBlaze は Clk 信号の ク ロ ッ ク 供給を受け る 同期デザ イ ンです (Dbg_Clk 信号の ク ロ ッ ク 供給を受け る ハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク を除 く )。 ハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク が使用 さ れていない場合は、 Clk に対 し 、 最 小周波数制限はあ り ません。 し か し 、 ハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク が使用 さ れてい る 場合は、 2 つの ク ロ ッ ク 領域の間を転送 さ れ る 信号があ り ます。こ の場合、Clk の周波数は Dbg_Clk の も の よ り も 高 く なければな り ません。 表 3‐2 : リ セ ッ ト モー ド 入力の効果 Reset_Mode[0:1] 説明 0 C_BASE_VECTORS で定義 さ れてい る よ う に、 MicroBlaze は リ セ ッ ト ベ ク タ ーで実行開始。 標準デフ ォ ル ト 動作。 01 SLEEP 命令が実行 さ れてい る かの よ う に、 MicroBlaze はバ ス ア ク セ ス を実行せずに、 すぐ に ス リ ープ モー ド に入 る 。 SLEEP の出力は 1 にセ ッ ト さ れ る 。 Wakeup[0:1] 信号のいずれ かがセ ッ ト さ れてい る と 、 C_BASE_VECTORS で定義 さ れてい る よ う に、 MicroBlaze は リ セ ッ ト ベ ク タ ーで実行開始。 こ の機能はマルチプ ロ セ ッ サ コ ン フ ィ ギ ュ レーシ ョ ンで有用で、 セカ ン ダ リ プ ロ セ ッ サを LMB メ モ リ な し で コ ン フ ィ ギ ュ レー ト 可能。 10 C_DEBUG_ENABLED が 0 の場合、 動作は Reset_Mode[0:1] = 00 の と き と 同 じ にな る 。 C_DEBUG_ENABLED が 0 よ り 大き い場合、 MicroBlaze はバ ス ア ク セ ス を実行せずにすぐ に デバ ッ グ停止に入 り 、 MB_Halted 出力が 1 にセ ッ ト さ れ る 。 デバ ッ グ イ ン タ ーフ ェ イ ス を 介 し て実行を継続す る と き は、 C_BASE_VECTORS で定義 さ れてい る よ う に、 MicroBlaze は リ セ ッ ト ベ ク タ ーで実行開始。 11 予約 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 111 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 AXI4 および ACE イ ン タ ー フ ェ イ スについて メ モ リ マ ッ プ ド のイ ン タ ー フ ェ イ ス ペ リ フ ェ ラル イ ン タ ー フ ェ イ ス MicroBlaze の AXI4 メ モ リ マ ッ プ ド ペ リ フ ェ ラ ル イ ン タ ーフ ェ イ ス は、 32 ビ ッ ト のマ ス タ ー と し て イ ンプ リ メ ン ト さ れます。 こ う し た イ ン タ ーフ ェ イ ス では、 1 度に 1 ト ラ ンザ ク シ ョ ンのみが処理 さ れ、 すべての ト ラ ンザ ク シ ョ ン が順番に完了 し ます。 • 命令ペ リ フ ェ ラ ル イ ン タ ーフ ェ イ ス (M_AXI_IP) は、 1 ワー ド の読み出 し ア ク セ ス のみを実行 し 、 常に AXI4-Lite サブセ ッ ト を使用す る よ う に設定 さ れてい ます。 • デー タ ペ リ フ ェ ラ ル イ ン タ ーフ ェ イ ス (M_AXI_DP) は、1 ワ ー ド ア ク セ ス を実行 し 、デフ ォ ル ト で AXI4-Lite サ ブセ ッ ト を使用す る よ う に設定 さ れてい ますが、LWX お よ び SWX 命令の排他的な ア ク セ ス を イ ネーブルにす る と き は AXI4 を使用す る よ う に設定 さ れます。 ハーフ ワー ド お よ びバ イ ト の書 き 込みは、 適切なバ イ ト ス ト ロ ー ブ を セ ッ ト し て行われます。 キ ャ ッ シ ュ イ ン タ ー フ ェ イ ス AXI4 メ モ リ マ ッ プ ド キ ャ ッ シ ュ イ ン タ ーフ ェ イ ス は、 キ ャ ッ シ ュ ラ イ ンの長 さ お よ びデー タ 幅のパ ラ メ ー タ ーの 設定次第で、 32、 128、 256、 ま たは 512 ビ ッ ト のマ ス タ ー と し て イ ンプ リ メ ン ト さ れますが、 AXI コ ヒ ーレ ン シ拡張 (ACE) イ ン タ ーフ ェ イ スは 32 ビ ッ ト マ ス タ ー と し て イ ンプ リ メ ン ト さ れます。 • 32 ビ ッ ト マ ス タ ーの場合、 命令キ ャ ッ シ ュ イ ン タ ーフ ェ イ ス (M_AXI_IC ま たは M_ACE_IC) は、 キ ャ ッ シ ュ ラ イ ンの長 さ に よ り ますが、 4、 8、 ま たは 16 ワ ー ド のバース ト 読み出 し ア ク セ ス を実行 し ます。 128、 256、 ま た は 512 ビ ッ ト マ ス タ ーの場合は、 シ ン グル読み出 し ア ク セ ス のみが実行 さ れます。 32 ビ ッ ト マ ス タ ーの場合、こ の イ ン タ ーフ ェ イ ス では 2 ト ラ ンザ ク シ ョ ン ま で処理で き ます。ス ト リ ーム キ ャ ッ シ ュ が イ ネーブルにな っ てい る 場合は、 5 ト ラ ンザ ク シ ョ ン ま で処理で き ます。 ス ト リ ーム キ ャ ッ シ ュ は事前に 2 つのキ ャ ッ シ ュ ラ イ ン を リ ク エ ス ト で き ます。 つま り 、 場合に よ っ ては 5 ト ラ ンザ ク シ ョ ン処理で き る と い う こ と です。 こ の場合、 読み出 し の数は 2 のべ き 数でなければな ら ないため、 8 に設定 さ れます。 128、 256、 ま た は 512 ビ ッ ト マ ス タ ーの場合は、 イ ン タ ーフ ェ イ ス では ト ラ ンザ ク シ ョ ンは 1 つ し か処理 さ れません。 ア ク セ ス す る メ モ リ ロ ケーシ ョ ン の数は、 C_ICACHE_ALWAYS_USED と い う パ ラ メ ー タ ーの設定で決 ま り ま す。 こ のパ ラ メ ー タ ーが 1 の場合は、 キ ャ ッ シ ュ メ モ リ 範囲は常に、AXI4 ま たは ACE キ ャ ッ シ ュ イ ン タ ーフ ェ イ ス を介 し て ア ク セ ス さ れ ます。 0 の場合は、 キ ャ ッ シ ュ が ソ フ ト ウ ェ アでデ ィ ス エーブルにな っ てい る と (す なわち MSR[ICE]=0)、 キ ャ ッ シ ュ メ モ リ 範囲は AXI4 ペ リ フ ェ ラ ル イ ン タ ーフ ェ イ ス を介 し て ア ク セ ス さ れ ま す。 • 32 ビ ッ ト マ ス タ ーの場合、 デー タ キ ャ ッ シ ュ イ ン タ ーフ ェ イ ス (M_AXI_DC ま たは M_ACE_DC) は、 1 ワー ド ア ク セ ス を実行す る か、 ま たはキ ャ ッ シ ュ ラ イ ンの長 さ に よ り ますが、 4、 8、 16 ワ ー ド のバー ス ト 読み出 し ア ク セ ス を実行 し ます。 AXI4 で ラ イ ト バ ッ ク キ ャ ッ シ ュ が使用 さ れ る 場合は、 バース ト 書 き 込みア ク セ ス のみが 実行 さ れます。 128、 256、 ま たは 512 ビ ッ ト の AXI4 マ ス タ ーの場合は、 シ ン グル ア ク セ ス のみにな り ます。 こ の イ ン タ ーフ ェ イ ス では複数の ト ラ ンザ ク シ ョ ン を処理で き 、 読み出 し の場合は 2 ト ラ ンザ ク シ ョ ン ま で、 書 き 込みの場合は 32 ト ラ ンザ ク シ ョ ン ま で処理で き ます。 MicroBlaze は順次 メ モ リ モデルを維持す る 必要があ る の ですが、 AXI4 や ACE は、 順序に関係な く 、 読み出 し /書 き 込みの それぞれに対 し て チ ャ ネ ルが あ る た め、 MicroBlaze は読み出 し の前にすべての書き 込みを完了 さ せます。 MicroBlaze はパ イ プ ラ イ ン を ス ト ール さ せずに 複数の書 き 込みを処理で き る ので、 最高 32 個の書 き 込み ト ラ ンザ ク シ ョ ン を使用す る こ と でパフ ォーマ ン ス を 改善で き ます。 ワー ド 、 ハーフ ワー ド 、 お よ びバ イ ト の書 き 込みは、 適切なバ イ ト ス ト ロ ーブ を セ ッ ト し て行われます。 LWX お よ び SWX 命令に対 し ては、 排他的ア ク セ ス を イ ネーブルにする こ と がで き ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 112 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 ア ク セ ス す る メ モ リ ロ ケーシ ョ ン の数は、 C_DCACHE_ALWAYS_USED と い う パ ラ メ ー タ ーの設定で決 ま り ま す。 こ のパ ラ メ ー タ ーが 1 の場合は、 キ ャ ッ シ ュ メ モ リ 範囲は常に、AXI4 ま たは ACE キ ャ ッ シ ュ イ ン タ ーフ ェ イ ス を介 し て ア ク セ ス さ れ ます。 0 の場合は、 キ ャ ッ シ ュ が ソ フ ト ウ ェ アでデ ィ ス エーブルにな っ てい る と (す なわち MSR[DCE]=0)、 キ ャ ッ シ ュ メ モ リ 範囲は AXI4 ペ リ フ ェ ラ ル イ ン タ ーフ ェ イ ス を介 し てア ク セ ス さ れま す。 イ ン タ ー フ ェ イ ス パラ メ ー タ ーおよび信号 パ ラ メ ー タ ーが ツールで割 り 当て ら れ る 場合の MicroBlaze のパ ラ メ ー タ ー設定 と AXI4 イ ン タ ー フ ェ イ ス の動作の 関係が、 表 3-3 に ま と め ら れてい ます。 表 3‐3 : AXI メ モ リ マ ッ プ ド イ ン タ ー フ ェ イ ス パラ メ ー タ ー イ ン ターフ ェ イス パラ メ ー タ ー 説明 M_AXI_DP C_M_AXI_DP_PROTOCOL AXI4-Lite : デフ ォ ル ト AXI4 : C_M_AXI_DP_EXCLUSIVE_ACCESS が 1 の と き 、 排他的 ア ク セ ス を可能にする ために使用 M_AXI_IC M_ACE_IC C_M_AXI_IC_DATA_WIDTH 32 : デフ ォ ル ト 。1 ワ ー ド ア ク セ ス、お よ び C_ICACHE_LINE_LEN の ワー ド バース ト でバース ト ア ク セ ス (AXI4 お よ び ACE で使用) 128 : C_ICACHE_DATA_WIDTH が 1 に、C_ICACHE_LINE_LEN が 4 に設定 さ れてい る と き に AXI4 で使用。シ ン グル ア ク セ ス のみが 発生。 256 : C_ICACHE_DATA_WIDTH が 1 に、C_ICACHE_LINE_LEN が 8 に設定 さ れてい る と き に AXI4 で使用。シ ン グル ア ク セ ス のみが 発生。 512 : C_ICACHE_DATA_WIDTH が 2 に設定 さ れてい る と き 、 ま た は、 AXI4 で こ れが 1 で、 C_ICACHE_LINE_LEN が 16 に設定 さ れ てい る と き に使用シ ン グル ア ク セ ス のみが発生。 M_AXI_DC M_ACE_DC C_M_AXI_DC_DATA_WIDTH 32 : デフ ォ ル ト 。1 ワ ー ド ア ク セ ス、お よ び C_DCACHE_LINE_LEN の ワー ド バース ト でバース ト ア ク セ ス (AXI4 お よ び ACE で使用) C_DCACHE_USE_WRITEBACK が 1 の と き AXI4 でのみ書き 込み バース ト を使用。 128 : C_DCACHE_DATA_WIDTH が 1 に、 C_DCACHE_LINE_LEN が 4 に設定 さ れてい る と き に AXI4 で使用。 シ ン グル ア ク セ ス の みが発生。 256 : C_DCACHE_DATA_WIDTH が 1 に、 C_DCACHE_LINE_LEN が 8 に設定 さ れてい る と き に AXI4 で使用。 シ ン グル ア ク セ ス の みが発生。 512 : C_DCACHE_DATA_WIDTH が 2 に設定 さ れてい る と き 、ま た は、 AXI4 で こ れが 1 で、 C_DCACHE_LINE_LEN が 16 に設定 さ れ てい る と き に使用シ ン グル ア ク セ ス のみが発生。 M_AXI_IC M_ACE_IC NUM_READ_OUTSTANDING 1 : 128、 256、 512 ビ ッ ト のマ ス タ ーのデフ ォ ル ト 。 読み出 し を 1 つ処理。 2 : 32 ビ ッ ト マ ス タ ーのデフ ォ ル ト 。 同時に読み出 し を 2 つ処理 可能。 8 : C_ICACHE_STREAMS が 1 の と き 32 ビ ッ ト マ ス タ ーで使用。 同時に読み出 し を 8 つ処理可能。 値は 1、 2 ま たは 8 に設定可能。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 113 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐3 : AXI メ モ リ マ ッ プ ド イ ン タ ー フ ェ イ ス パラ メ ー タ ー (続き) イ ン ターフ ェ イス パラ メ ー タ ー 説明 M_AXI_DC M_ACE_DC NUM_READ_OUTSTANDING 1 : 128、 256、 512 ビ ッ ト のマ ス タ ーのデフ ォ ル ト 。 読み出 し 1 つ 処理。 2 : 32 ビ ッ ト マ ス タ ーのデフ ォ ル ト 。 同時に読み出 し 2 つ処理可 能。 値は 1 ま たは 2 に設定可能。 M_AXI_DC M_ACE_DC NUM_WRITE_OUTSTANDING 32 : デフ ォ ル ト 。 32 個の同時書き 込み。 値は 1、 2、 4、 8、 16、 ま たは 32 に設定可能。 ア ク セ ス権限、 メ モ リ タ イ プ、 サービ ス品質 (QoS)、 共有 ド メ イ ンの値は、 表 3-4 で定義 さ れてい ます。 表 3‐4 : AXI イ ン タ ー フ ェ イ ス信号定義 イ ン ターフ ェ イス 信号 説明 M_AXI_IP C_M_AXI_IP_ARPROT ア ク セ ス権限 : • 権限な し 、 セキ ュ ア命令ア ク セ ス (100) M_AXI_DP C_M_AXI_DP_ARCACHE C_M_AXI_DP_AWCACHE メ モ リ タ イ プ、 AXI4 プ ロ ト コ ル : • 標準 ノ ン キ ャ ッ シ ャ ブル、 バ ッ フ ァ ラ ブル (0011) C_M_AXI_DP_ARPROT C_M_AXI_DP_AWPROT ア ク セ ス権限、 AXI4 お よ び AXI4-Lite プ ロ ト コ ル : • 権限な し 、 セキ ュ ア デー タ ア ク セ ス (000) C_M_AXI_DP_ARQOS C_M_AXI_DP_AWQOS サービ ス品質 (QoS)、 AXI4 プ ロ ト コ ル : • 優先度 8 (1000) M_AXI_IC C_M_AXI_IC_ARCACHE メ モ リ タ イプ : • ラ イ ト バ ッ ク の読み出 し お よ び書き 込み割 り 当て (1111) M_ACE_IC C_M_AXI_IC_ARCACHE メ モ リ タ イ プ、 標準ア ク セ ス : • ラ イ ト バ ッ ク の読み出 し お よ び書き 込み割 り 当て (1111) メ モ リ タ イ プ、 DVM ア ク セ ス : • 標準 ノ ン キ ャ ッ シ ャ ブル、 ノ ンバ ッ フ ァ ラ ブル (0010) C_M_AXI_IC_ARDOMAIN 共有 ド メ イ ン : • 内部共有可能 (01) C_M_AXI_IC_ARPROT ア ク セ ス権限 : • 権限な し 、 セキ ュ ア命令ア ク セ ス (100) C_M_AXI_IC_ARQOS サービ ス品質 (QoS) : • 優先度 7 (0111) M_AXI_DC C_M_AXI_DC_ARCACHE メ モ リ タ イ プ、 標準ア ク セ ス : • ラ イ ト バ ッ ク の読み出 し お よ び書き 込み割 り 当て (1111) メ モ リ タ イ プ、 排他的ア ク セ ス : • 標準 ノ ン キ ャ ッ シ ャ ブル、 ノ ンバ ッ フ ァ ラ ブル (0010) M_ACE_DC C_M_AXI_DC_ARCACHE メ モ リ タ イ プ、 標準お よ び排他的ア ク セ ス : • ラ イ ト バ ッ ク の読み出 し お よ び書き 込み割 り 当て (1111) メ モ リ タ イ プ、 DVM ア ク セ ス : • 標準 ノ ン キ ャ ッ シ ャ ブル、 ノ ンバ ッ フ ァ ラ ブル (0010) C_M_AXI_DC_ARDOMAIN C_M_AXI_DC_AWDOMAIN 共有 ド メ イ ン : • 内部共有可能 (01) M_AXI_IC M_ACE_IC MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 114 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐4 : AXI イ ン タ ー フ ェ イ ス信号定義 イ ン ターフ ェ イス M_AXI_DC M_ACE_DC 信号 説明 C_M_AXI_DC_AWCACHE メ モ リ タ イ プ、 標準ア ク セ ス : • ラ イ ト バ ッ ク の読み出 し お よ び書き 込み割 り 当て (1111) メ モ リ タ イ プ、 排他的ア ク セ ス : • 標準 ノ ン キ ャ ッ シ ャ ブル、 ノ ンバ ッ フ ァ ラ ブル (0010) C_M_AXI_DC_ARPROT C_M_AXI_DC_AWPROT ア ク セ ス権限 : • 権限な し 、 セキ ュ ア デー タ ア ク セ ス (000) C_M_AXI_DC_ARQOS サービ ス品質 (QoS)、 読み出 し ア ク セ ス : • 優先度 12 (1100) C_M_AXI_DC_AWQOS サービ ス品質 (QoS)、 書 き 込みア ク セ ス : • 優先度 8 (1000) 詳細は、 『AMBA AXI and ACE Protocol Specification』 (ARM IHI 0022E) を参照 し て く だ さ い。 ス ト リ ーム イ ン タ ー フ ェ イ ス MicroBlaze の AXI4-Stream イ ン タ ーフ ェ イ ス (M0_AXIS..M15_AXIS、 S0_AXIS..S15_AXIS) は 32 ビ ッ ト のマ ス タ ーお よ びス レーブ と し て イ ンプ リ メ ン ト さ れます。詳細は、『AMBA 4 AXI4-Stream Protocol Specification, Version 1.0』 (ARM IHI 0051A) を参照 し て く だ さ い。 書き込み ス ト リ ーム イ ン タ ーフ ェ イ スへの書き 込みは、 put ま たは putd 命令の 1 つを使用 し て、 MicroBlaze に よ り 実行 さ れま す。 書 き 込み操作に よ り 、 出力 AXI4 イ ン タ ーフ ェ イ スへレ ジ ス タ の内容が転送 さ れます。 ブ ロ ッ キ ン グ モー ド の書 き 込み (put お よ び cput 命令) の場合は、 イ ン タ ーフ ェ イ ス がビ ジーでなければ、 転送は 1 ク ロ ッ ク サ イ ク ルで完了 し ます。 イ ン タ ーフ ェ イ ス がビ ジーな ら 、 イ ン タ ーフ ェ イ ス が利用可能にな る ま で、 プ ロ セ ッ サが ス ト ール し ます。 ノ ンブ ロ ッ キ ン グ命令 (接頭辞 n) は、 イ ン タ ーフ ェ イ ス がビ ジー状態で も 、 常に 1 ク ロ ッ ク サ イ ク ルで完了 し ます。 イ ン タ ーフ ェ イ ス がビ ジーな場合は、 書 き 込みは抑止 さ れ、 MSR でキ ャ リ ー ビ ッ ト がセ ッ ト さ れます。 制御命令 (接頭辞 c) は AXI4-Stream の TLAST 出力を 1 にセ ッ ト し ます。 こ れはパケ ッ ト の境界を示すのに使用 さ れ ます。 読み出 し ス ト リ ーム イ ン タ ーフ ェ イ ス か ら の読み出 し は、 get ま たは getd 命令の 1 つを使用 し て、 MicroBlaze に よ り 実行 さ れ ます。 読み出 し 操作は、 入力 AXI4 イ ン タ ーフ ェ イ ス の内容を汎用レ ジ ス タ に転送 し ます。 ブ ロ ッ キ ン グ モー ド の読 み出 し の場合、 デー タ が使用可能であれば、 転送通常 2 ク ロ ッ ク サ イ ク ルで完了 し ます。 デー タ が使用で き ない場合 は、 使用可能にな る ま で、 こ の命令でプ ロ セ ッ サが ス ト ール し ます。 ノ ン ブ ロ ッ キ ン グ モー ド (接頭辞 n の命令) で は、 デー タ が使用可能であ る か ど う かにかかわ ら ず、 転送は 1 ま たは 2 ク ロ ッ ク サ イ ク ルで完了 し ます。 デー タ が使 用可能でない場合、 デー タ は転送 さ れず、 キ ャ リ ー ビ ッ ト が MSR でセ ッ ト さ れます。 デー タ の get 命令 (接頭辞 c な し ) は、 AXI4-Stream の TLAST 入力が 0 に ク リ ア さ れ る も の と し ます。 そ う でない場合 は、 こ の命令は MSR[FSL] を 1 にセ ッ ト し ます。 制御の get 命令 (接頭辞 c あ り ) は、 AXI4-Stream の TLAST 入力が 1 にセ ッ ト さ れてい る も の と し ます。 そ う でない場合は、 こ の命令は MSR[FSL] を 1 にセ ッ ト し ます。 こ れはパケ ッ ト の境界をチ ェ ッ ク す る のに使用 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 115 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 ローカル メ モ リ バス (LMB) イ ン ターフ ェ イスについて LMB は同期バ ス で、 主にオンチ ッ プのブ ロ ッ ク RAM にア ク セ スす る ために使用 さ れます。 こ のバ ス は、 最小限の数 の制御信号 と 単純なプ ロ ト コ ルを使用 し て、 1 ク ロ ッ ク サ イ ク ルで ロ ーカルのブ ロ ッ ク RAM にア ク セ スす る よ う に し ます。 LMB 信号 と その定義は次の表に リ ス ト さ れてい ます。 LMB 信号はすべて ア ク テ ィ ブ High です。 LMB 信号イ ン タ ー フ ェ イ ス 表 3‐5 : LMB バス信号 信号 デー タ イ ン タ ー フ ェ イス 命令イ ン タ ー フ ェ イ タ イ ス プ 説明 Addr[0:31] Data_Addr[0:31] Instr_Addr[0:31] O ア ド レ ス バス Byte_Enable[0:3] Byte_Enable[0:3] 使用 さ れない O バ イ ト イ ネーブル Data_Write[0:31] Data_Write[0:31] 使用 さ れない O 書き 込みデー タ バ ス D_AS I_AS O ア ド レ ス ス ト ロ ーブ Read_Strobe Read_Strobe IFetch O 読み出 し 処理中 Write_Strobe Write_Strobe 使用 さ れない O 書き 込み処理中 Data_Read[0:31] Instr[0:31] I 読み出 し デー タ バ ス Ready DReady IReady I 次の転送の準備完了 Wait1 DWait IWait I 承認 さ れ た転送が準備完了に な る ま で待機 CE1 DCE ICE I 訂正可能エ ラ ー UE1 DUE IUE I 訂正不可能エ ラ ー Clk Clk Clk I バス ク ロ ッ ク AS Data_Read[0:31] 1. MicroBlaze v8.00 で LMB に追加 Addr[0:31] こ のア ド レ ス バ ス は コ アか ら の出力で、 現在の転送でア ク セ ス さ れてい る メ モ リ ア ド レ ス を示 し ます。 AS が High の場合のみ有効です。 マルチサ イ ク ル ア ク セ ス の場合 ( ア ク セ ス が完了す る ま で に 2 ク ロ ッ ク 以上か か る も の)、 Addr[0:31] は転送の最初の ク ロ ッ ク サ イ ク ルでのみ有効です。 Byte_Enable[0:3] こ のバ イ ト イ ネーブル信号は コ アか ら の出力で、 デー タ バ ス の ど のバ イ ト レーンに有効なデー タ が含まれてい る の か を示 し ます。 Byte_Enable[0:3] は AS が High の場合のみ有効です。 マルチサ イ ク ル ア ク セ ス の場合 (ア ク セ ス が完了す る ま でに 2 ク ロ ッ ク 以上かか る も の)、Byte_Enable[0:3] は転送の最初の ク ロ ッ ク サ イ ク ルでのみ有効で す。 Byte_Enable[0:3] の有効値は次の表に リ ス ト さ れてい ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 116 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 : 表 3‐6 : Byte_Enable[0:3] の有効値 Byte_Enable[0:3] 使用バイ ト レーン Data[0:7] Data[8:15] Data[16:23] · 0001 · 0010 · 0100 1000 · 0011 1100 1111 Data[24:31] · · · · · · · · Data_Write[0:31] こ の書 き 込みデー タ バ ス は コ アか ら の出力で、 メ モ リ に書き 込まれたデー タ が含まれてい ます。AS が High の場合の み有効です。 Byte_Enable[0:3] で指定 さ れたバ イ ト レーンにのみ有効デー タ が含まれてい ます。 AS こ のア ド レ ス ス ト ロ ーブは コ アか ら の出力で、 転送の開始を示 し 、 ア ド レ ス バ スお よ びバ イ ト イ ネーブルを修飾 し ます。 こ れは転送の最初の ク ロ ッ ク サ イ ク ルでのみ High で、 その後は次の転送の開始ま で Low の ま ま にな り ます。 Read_Strobe こ の読み出 し ス ト ロ ーブは コ アか ら の出力で、 読み出 し 転送が処理中であ る こ と を示 し ます。 こ の信号は、 転送の最 初の ク ロ ッ ク サ イ ク ルで High にな り 、 Ready 信号が High にな っ た ク ロ ッ ク サ イ ク ルが終わ る ま で High の ま ま にな る 可能性があ り ます。 新 し い読み出 し 転送が次の ク ロ ッ ク サ イ ク ルです ぐ に開始 し た場合、 Read_Strobe は High の ま ま にな り ます。 Write_Strobe こ の書 き 込みス ト ロ ーブは コ アか ら の出力で、 書 き 込み転送が処理中であ る こ と を示 し ます。 こ の信号は、 転送の最 初の ク ロ ッ ク サ イ ク ルで High にな り 、 Ready 信号が High にな っ た ク ロ ッ ク サ イ ク ルが終わ る ま で High の ま ま にな る 可能性があ り ます。 新 し い書 き 込み転送が次の ク ロ ッ ク サ イ ク ルですぐ に開始 し た場合、 Write_Strobe は High の ま ま にな り ます。 Data_Read[0:31] こ の読み出 し デー タ バ ス は コ アへの入力で、 メ モ リ か ら 読み出 さ れたデー タ を含んでい ます。 Data_Read は、 Ready が High の と き の ク ロ ッ ク の立ち上が り エ ッ ジで有効にな り ます。 Ready こ の Ready 信号は コ アへの入力で、 現在の転送が完了 し た こ と と 、 次の転送が次の ク ロ ッ ク サ イ ク ルで開始可能で あ る こ と を 示 し ま す。 こ れは ク ロ ッ ク の立 ち 上が り エ ッ ジ で サ ン プ ル さ れ ま す。 こ の信号は、 読み出 し の場合 Data_Read[0:31] バ ス が有効であ る こ と を示 し 、 書 き 込みの場合 Data_Write[0:31] バ ス が ロ ーカル メ モ リ に 書 き 込まれた こ と を示 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 117 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 Wait Wait 信号は コ アへの入力で、現在の転送は受け入れ ら れたが、 ま だ完了は し ていない こ と を示 し ます。 こ れは ク ロ ッ ク の立ち上が り エ ッ ジでサンプル さ れます。 CE CE 信号は コ アへの入力で、 現在の転送に訂正可能なエ ラ ーがあ る こ と を示 し ます。 Ready が High の と き の ク ロ ッ ク の立ち上が り エ ッ ジで有効にな り ます。 こ の信号は、 読み出 し の場合、 Data_Read[0:31] バ ス でエ ラ ーが訂正 さ れ た こ と を示 し 、 バ イ ト お よ びハーフ ワー ド の書 き 込みの場合は、 ロ ーカル メ モ リ の対応デー タ ワー ド が、新 し いデー タ を書 き 込む前に訂正 さ れた こ と を示 し ます。 UE UE 信号は コ アへの入力で、 現在の転送に訂正不可能なエ ラ ーがあ る こ と を示 し ます。 Ready が High の と き の ク ロ ッ ク の立ち上が り エ ッ ジで有効にな り ます。 こ の信号は、 読み出 し の場合、 Data_Read[0:31] バ ス の値が間違っ てい る こ と を示 し 、 バ イ ト お よ びハーフ ワ ー ド の書き 込みの場合は、 新 し いデー タ を書 き 込む前の、 ロ ーカル メ モ リ の対 応デー タ ワ ー ド が間違っ てい る こ と を示 し ます。 Clk LMB のすべての操作は MicroBlaze コ ア ク ロ ッ ク に同期 し てい ます。 LMB ト ラ ンザ ク シ ョ ン 次の図は、 LMB バ ス操作の例を説明 し てい ます。 一般的な書き込み操作 Clk Addr A0 Byte_Enable BE0 Data_Write D0 AS Read_Strobe Write_Strobe Data_Read Ready Wait Don’t Care CE UE 図 3‐2 : LMB の一般的な書き込み操作、 0 待機ス テー ト MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 118 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 Clk Addr A0 Byte_Enable BE0 Data_Write D0 AS Read_Strobe Write_Strobe Data_Read Ready Wait Don’t Care CE UE 図 3‐3 : LMB の一般的な書き込み操作、 N 待機ス テー ト 一般的な読み出 し 操作 Clk Addr A0 Byte_Enable Data_Write AS Read_Strobe Write_Strobe Data_Read D0 Ready Wait Don’t Care CE UE 図 3‐4 : LMB の一般的な読み出 し 操作、 0 待機ス テー ト MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 119 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 Clk Addr A0 Byte_Enable Data_Write AS Read_Strobe Write_Strobe Data_Read D0 Ready Wait Don’t Care CE UE 図 3‐5 : LMB の一般的な読み出 し 操作、 N 待機ス テー ト MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 120 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 連続書き込み操作 Clk Addr A0 A1 A2 A3 A4 Byte_Enable BE0 BE1 BE2 BE3 BE4 Data_Write D0 D1 D2 D3 D4 AS Read_Strobe Write_Strobe Data_Read Ready Wait Don’t Care Don’t Care Don’t Care CE UE 図 3‐6 : LMB の連続書き込み操作 連続読み出 し 操作 Clk Addr A0 A1 A2 A3 A4 D0 D1 D2 D3 Don’t Care Don’t Care Byte_Enable Data_Write AS Read_Strobe Write_Strobe Data_Read D4 Ready Wait Don’t Care CE UE 図 3‐7 : LMB の連続読み出 し 操作 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 121 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 連続混合書き込み/読み出 し 操作 Clk Addr A0 Byte_Enable BE0 BE2 Data_Write D0 D2 A1 A2 AS Read_Strobe Write_Strobe Data_Read D1 Ready Wait Don’t Care CE UE 図 3‐8 : 連続混合書き込み/読み出 し 操作、 0 待機ス テー ト Clk Addr A0 A1 A2 Byte_Enable BE0 BE2 Data_Write D0 D2 AS Read_Strobe Write_Strobe Data_Read D1 Ready Wait Don’t Care Don’t Care Don’t Care CE UE 図 3‐9 : 連続混合書き込み/読み出 し 操作、 N 待機ス テー ト MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 122 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 読み出 し および書き込みデー タ ス テ ア リ ング MicroBlaze のデー タ 側バス イ ン タ ーフ ェ イ ス は、次の転送のサポー ト に必要な読み出 し ス テ ア リ ン グお よ び書 き 込み ス テア リ ン グ を実行 し ます。 • ワー ド デバ イ スへのバ イ ト 、 ハーフ ワ ー ド 、 お よ びワ ー ド 転送 • ハーフ ワー ド デバ イ スへのバ イ ト お よ びハーフ ワ ー ド 転送 • バ イ ト デバ イ スへのバ イ ト 転送 MicroBlaze は、 ア ド レ ス指定 さ れてい る デバ イ ス よ り も サ イ ズが大 き な転送をサポー ト し てい ません。 こ う し た タ イ プの転送には、 MicroBlaze のバ ス イ ン タ ーフ ェ イ ス ではサポー ト さ れていないダ イ ナ ミ ッ ク バ ス サ イ ズ調整や変換 サ イ ク ルが必要にな り ます。 読み出 し サ イ ク ルのデー タ ス テ ア リ ン グは、 表 3-7 お よ び表 3-8 に、 書 き 込みサ イ ク ル のデー タ ス テ ア リ ン グは、 表 3-9 お よ び表 3-10 に ま と め ら れてい ます。 表 3‐7 : ビ ッ グ エ ンデ ィ ア ン読み出 し デー タ ス テ ア リ ング(レ ジス タ rD へロー ド ) レ ジス タ rD デー タ Address [30:31] Byte_Enable [0:3] 転送サイ ズ 11 0001 バイ ト バイ ト 3 10 0010 バイ ト バイ ト 2 01 0100 バイ ト バイ ト 1 00 1000 バイ ト バイ ト 0 10 0011 ハーフ ワー ド バイ ト 2 バイ ト 3 00 1100 ハーフ ワー ド バイ ト 0 バイ ト 1 00 1111 ワー ド バイ ト 2 バイ ト 3 rD[0:7] バイ ト 0 rD[8:15] バイ ト 1 rD[16:23] rD[24:31] 表 3‐8 : リ ト ル エ ンデ ィ ア ン読み出 し デー タ ス テ ア リ ング(レ ジス タ rD へロー ド ) レ ジス タ rD デー タ Address [30:31] Byte_Enable [0:3] 転送サイ ズ 11 1000 バイ ト バイ ト 0 10 0100 バイ ト バイ ト 1 01 0010 バイ ト バイ ト 2 00 0001 バイ ト バイ ト 3 10 1100 ハーフ ワー ド バイ ト 0 バイ ト 1 00 0011 ハーフ ワー ド バイ ト 2 バイ ト 3 00 1111 ワー ド バイ ト 2 バイ ト 3 rD[0:7] バイ ト 0 rD[8:15] バイ ト 1 rD[16:23] rD[24:31] 表 3‐9 : ビ ッ グ エ ンデ ィ ア ン書き込みデー タ ス テ ア リ ング(レ ジス タ rD から ス ト ア) Address [30:31] Byte_Enable [0:3] 転送サイ ズ 11 0001 バイ ト 10 0010 バイ ト 01 0100 バイ ト MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 書き込みデー タ バス バイ ト バイ ト 0 バイ ト 1 バイ ト 2 バイ ト 3 rD[24:31] rD[24:31] rD[24:31] 123 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐9 : ビ ッ グ エ ンデ ィ ア ン書き込みデー タ ス テ ア リ ング(レ ジス タ rD から ス ト ア) 書き込みデー タ バス バイ ト Address [30:31] Byte_Enable [0:3] 転送サイ ズ 00 1000 バイ ト 10 0011 ハーフ ワ ー ド 00 1100 ハーフ ワ ー ド rD[16:23] rD[24:31] 00 1111 ワー ド rD[0:7] rD[8:15] バイ ト 0 バイ ト 1 バイ ト 2 バイ ト 3 rD[16:23] rD[24:31] rD[16:23] rD[24:31] rD[24:31] 表 3‐10 : リ ト ル エ ンデ ィ ア ン書き込みデー タ ス テ ア リ ング(レ ジス タ rD から ス ト ア) Address [30:31] Byte_Enable [0:3] 転送サイ ズ 11 1000 バイ ト 10 0100 バイ ト 01 0010 バイ ト 00 0001 バイ ト 10 1100 ハーフ ワー ド 00 0011 ハーフ ワー ド 00 1111 ワー ド 書き込みデー タ バス バイ ト バイ ト 3 バイ ト 2 バイ ト 1 バイ ト 0 rD[24:31] rD[24:31] rD[24:31] rD[24:31] rD[16:23] rD[0:7] rD[24:31] rD[8:15] rD[16:23] rD[24:31] rD[16:23] rD[24:31] 注記 : ほかのマ ス タ ーには、 MicroBlaze で認め ら れてい る も の よ り も 、 バ イ ト レーンに関 し て厳 し い要件が課せ ら れ てい る も のがあ る 場合があ り ます。 ス レーブ デバ イ ス は通常、 バ イ ト デバ イ ス な ら 最上位バ イ ト レーンに、 ハーフ ワ ー ド デバ イ ス な ら 最上位ハーフ ワ ー ド レーンに接続 さ れ る 「左揃え」 にな っ てい ます。 MicroBlaze の ス テ ア リ ン グ ロ ジ ッ ク は こ の接続方法を完全サポー ト し てい ます。 ロ ッ ク ス テ ッ プ イ ン タ ー フ ェ イ スについて MicroBlaze の ロ ッ ク ス テ ッ プ イ ン タ ーフ ェ イ ス は、1 つのマ ス タ ーお よ び 1 つ以上の ス レーブ MicroBlaze イ ン ス タ ン ス を接続す る よ う 設計 さ れてい ます。 MicroBlaze の ロ ッ ク ス テ ッ プ信号は、 表 3-11 に リ ス ト さ れてい ます。 表 3‐11 : MicroBlaze ロ ッ ク ス テ ッ プ信号 信号名 説明 VHDL タ イ プ 方向 Lockstep_Master_Out マ ス タ ーか ら ス レ ーブ MicroBlaze への信号で出 力。 ス レーブでは接続 さ れない。 std_logic 出力 Lockstep_Slave_In マ ス タ ーか ら ス レ ーブ MicroBlaze への信号で入 力。 マ ス タ ーでは接続 さ れない。 std_logic 入力 Lockstep_Out マ ス タ ー と ス レーブ両方か ら のすべての比較信号 で出力。 std_logic 出力 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 124 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 Lockstep_Out で提供 さ れ る 比較信号は表 3-12 に リ ス ト さ れてい ます。 表 3‐12 : MicroBlaze ロ ッ ク ス テ ッ プ比較信号 信号名 バス イ ンデ ッ ク ス範囲 VHDL タ イ プ MB_Halted 0 std_logic MB_Error 1 std_logic IFetch 2 std_logic I_AS 3 std_logic Instr_Addr 4 ~ 35 std_logic_vector Data_Addr 36 ~ 67 std_logic_vector Data_Write 68 ~ 99 std_logic_vector D_AS 100 std_logic Read_Strobe 101 std_logic Write_Strobe 102 std_logic Byte_Enable 103 ~ 106 std_logic_vector Reserved 107 ~ 736 M_AXI_IP_AWID 737 std_logic M_AXI_IP_AWADDR 738 ~ 769 std_logic_vector M_AXI_IP_AWLEN 770 ~ 777 std_logic_vector M_AXI_IP_AWSIZE 778 ~ 780 std_logic_vector M_AXI_IP_AWBURST 781 ~ 782 std_logic_vector M_AXI_IP_AWLOCK 783 std_logic M_AXI_IP_AWCACHE 784 ~ 787 std_logic_vector M_AXI_IP_AWPROT 788 ~ 790 std_logic_vector M_AXI_IP_AWQOS 791 ~ 794 std_logic_vector M_AXI_IP_AWVALID 795 std_logic M_AXI_IP_WDATA 796 ~ 827 std_logic_vector M_AXI_IP_WSTRB 828 ~ 831 std_logic_vector M_AXI_IP_WLAST 832 std_logic M_AXI_IP_WVALID 833 std_logic M_AXI_IP_BREADY 834 std_logic M_AXI_IP_ARID 835 std_logic M_AXI_IP_ARADDR 836 ~ 867 std_logic_vector M_AXI_IP_ARLEN 868 ~ 875 std_logic_vector M_AXI_IP_ARSIZE 876 ~ 878 std_logic_vector M_AXI_IP_ARBURST 879 ~ 880 std_logic_vector M_AXI_IP_ARLOCK 881 std_logic M_AXI_IP_ARCACHE 882 ~ 885 std_logic_vector M_AXI_IP_ARPROT 886 ~ 888 std_logic_vector M_AXI_IP_ARQOS 889 ~ 892 std_logic_vector M_AXI_IP_ARVALID 893 std_logic M_AXI_IP_RREADY 894 std_logic M_AXI_DP_AWID 895 std_logic M_AXI_DP_AWADDR 896 ~ 927 std_logic_vector MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 125 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐12 : MicroBlaze ロ ッ ク ス テ ッ プ比較信号 (続き) 信号名 バス イ ンデ ッ ク ス範囲 VHDL タ イ プ M_AXI_DP_AWLEN 928 ~ 935 std_logic_vector M_AXI_DP_AWSIZE 936 ~ 938 std_logic_vector M_AXI_DP_AWBURST 939 ~ 940 std_logic_vector M_AXI_DP_AWLOCK 941 std_logic M_AXI_DP_AWCACHE 942 ~ 945 std_logic_vector M_AXI_DP_AWPROT 946 ~ 948 std_logic_vector M_AXI_DP_AWQOS 949 ~ 952 std_logic_vector M_AXI_DP_AWVALID 953 std_logic M_AXI_DP_WDATA 954 ~ 985 std_logic_vector M_AXI_DP_WSTRB 986 ~ 989 std_logic_vector M_AXI_DP_WLAST 990 std_logic M_AXI_DP_WVALID 991 std_logic M_AXI_DP_BREADY 992 std_logic M_AXI_DP_ARID 993 std_logic M_AXI_DP_ARADDR 994 ~ 1025 std_logic_vector M_AXI_DP_ARLEN 1026 ~ 1033 std_logic_vector M_AXI_DP_ARSIZE 1034 ~ 1036 std_logic_vector M_AXI_DP_ARBURST 1037 ~ 1038 std_logic_vector M_AXI_DP_ARLOCK 1039 std_logic M_AXI_DP_ARCACHE 1040 ~ 1043 std_logic_vector M_AXI_DP_ARPROT 1044 ~ 1046 std_logic_vector M_AXI_DP_ARQOS 1047 ~ 1050 std_logic_vector M_AXI_DP_ARVALID 1051 std_logic M_AXI_DP_RREADY 1052 std_logic Reserved 1053 ~ 1644 Mn_AXIS_TLAST 1645 + n * 35 std_logic Mn_AXIS_TDATA 1646 + n * 35 ~ 1677 + n * 35 std_logic_vector Mn_AXIS_TVALID 1678 + n * 35 std_logic Sn_AXIS_TREADY 1679 + n * 35 std_logic M_AXI_IC_AWID 2205 std_logic M_AXI_IC_AWADDR 2206 ~ 2237 std_logic_vector M_AXI_IC_AWLEN 2238 ~ 2245 std_logic_vector M_AXI_IC_AWSIZE 2246 ~ 2248 std_logic_vector M_AXI_IC_AWBURST 2249 ~ 2250 std_logic_vector M_AXI_IC_AWLOCK 2251 std_logic M_AXI_IC_AWCACHE 2252 ~ 2255 std_logic_vector M_AXI_IC_AWPROT 2256 ~ 2258 std_logic_vector M_AXI_IC_AWQOS 2259 ~ 2262 std_logic_vector M_AXI_IC_AWVALID 2263 std_logic M_AXI_IC_AWUSER 2264 ~ 2268 std_logic_vector MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 126 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐12 : MicroBlaze ロ ッ ク ス テ ッ プ比較信号 (続き) 信号名 バス イ ンデ ッ ク ス範囲 VHDL タ イ プ M_AXI_IC_AWDOMAIN1 2269 ~ 2270 std_logic_vector M_AXI_IC_AWSNOOP1 2271 ~ 2273 std_logic_vector M_AXI_IC_AWBAR1 2274 ~ 2275 std_logic_vector M_AXI_IC_WDATA 2276 ~ 2787 std_logic_vector M_AXI_IC_WSTRB 2788 ~ 2851 std_logic_vector M_AXI_IC_WLAST 2852 std_logic M_AXI_IC_WVALID 2853 std_logic M_AXI_IC_WUSER 2854 std_logic M_AXI_IC_BREADY 2855 std_logic M_AXI_IC_WACK 2856 std_logic M_AXI_IC_ARID 2857 std_logic_vector M_AXI_IC_ARADDR 2858 ~ 2889 std_logic_vector M_AXI_IC_ARLEN 2890 ~ 2897 std_logic_vector M_AXI_IC_ARSIZE 2898 ~ 2900 std_logic_vector M_AXI_IC_ARBURST 2901 ~ 2902 std_logic_vector M_AXI_IC_ARLOCK 2903 std_logic M_AXI_IC_ARCACHE 2904 ~ 2907 std_logic_vector M_AXI_IC_ARPROT 2908 ~ 2910 std_logic_vector M_AXI_IC_ARQOS 2911 ~ 2914 std_logic_vector M_AXI_IC_ARVALID 2915 std_logic M_AXI_IC_ARUSER 2916 ~ 2920 std_logic_vector M_AXI_IC_ARDOMAIN1 2921 ~ 2922 std_logic_vector M_AXI_IC_ARSNOOP1 2923 ~ 2926 std_logic_vector M_AXI_IC_ARBAR1 2927 ~ 2928 std_logic_vector M_AXI_IC_RREADY 2929 std_logic M_AXI_IC_RACK1 2930 std_logic M_AXI_IC_ACREADY1 2931 std_logic M_AXI_IC_CRVALID1 2932 std_logic M_AXI_IC_CRRESP1 2933 ~ 2937 std_logic_vector M_AXI_IC_CDVALID1 2938 std_logic M_AXI_IC_CDLAST1 2939 std_logic M_AXI_DC_AWID 2940 std_logic M_AXI_DC_AWADDR 2941 ~ 2972 std_logic_vector M_AXI_DC_AWLEN 2973 ~ 2980 std_logic_vector M_AXI_DC_AWSIZE 2981 ~ 2983 std_logic_vector M_AXI_DC_AWBURST 2984 ~ 2985 std_logic_vector M_AXI_DC_AWLOCK 2986 std_logic M_AXI_DC_AWCACHE 2987 ~ 2990 std_logic_vector M_AXI_DC_AWPROT 2991 ~ 2993 std_logic_vector M_AXI_DC_AWQOS 2994 ~ 2997 std_logic_vector M_AXI_DC_AWVALID 2998 std_logic MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 127 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐12 : MicroBlaze ロ ッ ク ス テ ッ プ比較信号 (続き) 信号名 バス イ ンデ ッ ク ス範囲 VHDL タ イ プ M_AXI_DC_AWUSER 2999 ~ 3003 std_logic_vector M_AXI_DC_AWDOMAIN1 3004 ~ 3005 std_logic_vector M_AXI_DC_AWSNOOP1 3006 ~ 3008 std_logic_vector M_AXI_DC_AWBAR1 3009 ~ 3010 std_logic_vector M_AXI_DC_WDATA 3011 ~ 3522 std_logic_vector M_AXI_DC_WSTRB1 3523 ~ 3586 std_logic_vector M_AXI_DC_WLAST 3587 std_logic M_AXI_DC_WVALID 3588 std_logic M_AXI_DC_WUSER 3589 std_logic M_AXI_DC_BREADY 3590 std_logic M_AXI_DC_WACK1 3591 std_logic M_AXI_DC_ARID 3592 std_logic M_AXI_DC_ARADDR 3593 ~ 3624 std_logic_vector M_AXI_DC_ARLEN 3625 ~ 3632 std_logic_vector M_AXI_DC_ARSIZE 3633 ~ 3635 std_logic_vector M_AXI_DC_ARBURST 3636 ~ 3637 std_logic_vector M_AXI_DC_ARLOCK 3638 std_logic M_AXI_DC_ARCACHE 3639 ~ 3642 std_logic_vector M_AXI_DC_ARPROT 3643 ~ 3645 std_logic_vector M_AXI_DC_ARQOS 3646 ~ 3649 std_logic_vector M_AXI_DC_ARVALID 3650 std_logic M_AXI_DC_ARUSER 3651 ~ 3655 std_logic_vector M_AXI_DC_ARDOMAIN1 3656 ~ 3657 std_logic_vector M_AXI_DC_ARSNOOP1 3658 ~ 3661 std_logic_vector M_AXI_DC_ARBAR1 3662 ~ 3663 std_logic_vector M_AXI_DC_RREADY 3664 std_logic M_AXI_DC_RACK1 3665 std_logic M_AXI_DC_ACREADY1 3666 std_logic M_AXI_DC_CRVALID1 3667 std_logic M_AXI_DC_CRRESP1 3668 ~ 3672 std_logic_vector M_AXI_DC_CDVALID1 3673 std_logic M_AXI_DC_CDLAST1 3674 std_logic Trace_Instruction 3675 ~ 3706 std_logic_vector Trace_Valid_Instr 3707 std_logic Trace_PC 3708 ~ 3739 std_logic_vector Trace_Reg_Write 3740 std_logic Trace_Reg_Addr 3741 ~ 3745 std_logic_vector Trace_MSR_Reg 3746 ~ 3760 std_logic_vector Trace_PID_Reg 3761 ~ 3768 std_logic_vector Trace_New_Reg_Value 3769 ~ 3800 std_logic_vector Trace_Exception_Taken 3801 std_logic MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 128 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐12 : MicroBlaze ロ ッ ク ス テ ッ プ比較信号 (続き) 信号名 バス イ ンデ ッ ク ス範囲 VHDL タ イ プ Trace_Exception_Kind 3802 ~ 3806 std_logic_vector Trace_Jump_Taken 3807 std_logic Trace_Delay_Slot 3808 std_logic Trace_Data_Address 3809 ~ 3840 std_logic_vector Trace_Data_Write_Value 3841 ~ 3872 std_logic_vector Trace_Data_Byte_Enable 3873 ~ 3876 std_logic_vector Trace_Data_Access 3877 std_logic Trace_Data_Read 3878 std_logic Trace_Data_Write 3879 std_logic Trace_DCache_Req 3880 std_logic Trace_DCache_Hit 3881 std_logic Trace_DCache_Rdy 3882 std_logic Trace_DCache_Read 3883 std_logic Trace_ICache_Req 3884 std_logic Trace_ICache_Hit 3885 std_logic Trace_ICache_Rdy 3886 std_logic Trace_OF_PipeRun 3887 std_logic Trace_EX_PipeRun 3888 std_logic Trace_MEM_PipeRun 3889 std_logic Trace_MB_Halted 3890 std_logic Trace_Jump_Hit 3891 std_logic 将来使用す る ために予約 3892 ~ 4095 1. こ の信号は、 C_INTERCONNECT = 3 (ACE) の場合のみ使用 し ます。 デバ ッ グ イ ン タ ー フ ェ イ スについて MicroBlaze のデバ ッ グ イ ン タ ーフ ェ イ ス は、 ザ イ リ ン ク ス の MDM (Microprocessor Debug Module) IP コ ア を使用 し て 機能す る よ う に設計 さ れてい ます。 MDM は、 FPGA の JTAG ポー ト を介 し XMD (Xilinx Microprocessor Debugger) に よ っ て制御 さ れます。 MDM は 1 度に複数の MicroBlaze プ ロ セ ッ サを制御で き ます。 デバ ッ グ信号は DEBUG バ ス に グループ と し て ま と め ら れます。 MicroBlaze のデバ ッ グ信号は表 3-13 に リ ス ト さ れてい ます。 表 3‐13 : MicroBlaze デバ ッ グ信号 信号名 説明 VHDL タ イ プ 方向 Dbg_Clk MDM か ら の JTAG ク ロ ッ ク std_logic 入力 Dbg_TDI MDM か ら の JTAG TDI std_logic 入力 Dbg_TDO MDM への JTAG TDO std_logic 出力 Dbg_Reg_En MDM か ら のデバ ッ グ レ ジ ス タ イ ネーブル std_logic_vector 入力 Dbg_Shift1 MDM か ら の JTAG BSCAN シ フ ト 信号 std_logic 入力 Dbg_Capture MDM か ら の JTAG BSCAN キ ャ プチ ャ 信号 std_logic 入力 Dbg_Update MDM か ら の JTAG BSCAN ア ッ プデー ト 信号 std_logic 入力 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 129 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐13 : MicroBlaze デバ ッ グ信号 信号名 Debug_Rst1 Dbg_Trig_In2 Dbg_Trig_Ack_In2 Dbg_Trig_Out2 Dbg_Trig_Ack_Out2 Dbg_Trace_Data3 Dbg_Trace_Valid3 Dbg_Trace_Ready3 Dbg_Trace_Clk3 説明 VHDL タ イ プ 方向 MDM か ら の リ セ ッ ト 信号、 ア ク テ ィ ブ High。 std_logic 最低 1 Clk ク ロ ッ ク サ イ ク ル間保持す る 必要 があ る 。 std_logic_vector MDM への ク ロ ス ト リ ガー イ ベン ト 入力 入力 MDM か ら の ク ロ ス ト リ ガー イ ベン ト 入力肯 std_logic_vector 定応答 MDM か ら の ク ロ ス ト リ ガー ア ク シ ョ ン出力 std_logic_vector 入力 MDM への ク ロ ス ト リ ガー ア ク シ ョ ン出力肯 std_logic_vector 定応答 MDM への外部プ ロ グ ラ ム ト レー ス デー タ 出 std_logic_vector 力 std_logic MDM への外部プ ロ グ ラ ム ト レース有効 出力 MDM か ら の外部プ ロ グ ラ ム ト レ ー ス 準備完 std_logic 了 MDM か ら の外部プ ロ グ ラ ム ト レー ス ク ロ ッ std_logic ク 入力 出力 入力 出力 出力 入力 1. MicroBlaze v7.00 用にア ッ プデー ト : Dbg_Shift を追加、 Debug_Rst を DEBUG バ ス に含め る 2. MicroBlaze v9.3 用にア ッ プデー ト : Dbg_Trig 信号を DEBUG バ ス に追加 3. MicroBlaze v9.4 用にア ッ プデー ト : 外部プ ロ グ ラ ム ト レース信号を DEBUG バ ス に追加 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 130 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 ト レース イ ン タ ー フ ェ イ スについて MicroBlaze は ト レース目的で さ ま ざ ま な内部信号をエ ク ス ポー ト し ます。 こ の信号 イ ン タ ーフ ェ イ ス は標準化 さ れて お ら ず、 新 し い リ ビ ジ ョ ンのプ ロ セ ッ サでは、 信号選択や機能性において、 下位互換性が得 ら れない可能性があ り ま す。 こ れ ら の信号のカ ス タ ム ロ ジ ッ ク を設計せず、 ザ イ リ ン ク ス提供の解析 IP を介 し て信号を使用す る こ と を推奨 し ます。 ト レース信号は TRACE バス でグループに ま と め ら れます。 ト レース信号の現在のセ ッ ト は、MicroBlaze v7.30 でア ッ プデー ト さ れた も ので、 表 3-14 に リ ス ト さ れてい ます。 MSR ビ ッ ト のマ ッ ピ ン グは表 3-15 に ま と め ら れてい ま す。 マシ ン ス テー タ ス レ ジ ス タ (MSR) の詳細については、 「特殊用途レ ジ ス タ 」 を参照 し て く だ さ い。 ト レース例外 タ イ プは表 3-16 を参照 し て く だ さ い。 すべての未使用の ト レース例外 タ イ プは予約 さ れてい ます。 表 3‐14 : MicroBlaze ト レース信号 信号名 Trace_Valid_Instr Trace_Instruction Trace_PC 説明 1 方向 std_logic 出力 命令 コ ー ド std_logic_vector (0 ~ 31) 出力 プロ グ ラ ム カ ウ ン ター std_logic_vector (0 ~ 31) 出力 std_logic 出力 ト レース ポー ト での有効命令 1 VHDL タ イ プ Trace_Reg_Write 1 レ ジ ス タ フ ァ イ ルへの命令書き 込み Trace_Reg_Addr 1 デス テ ィ ネーシ ョ ン レ ジ ス タ ア ド レ ス std_logic_vector (0 ~ 4) 出力 Trace_MSR_Reg1 マシ ン ス テー タ ス レ ジ ス タ 。レ ジ ス タ ビ ッ ト のマ ッ ピ ン グは以下参照。 Trace_PID_Reg1 プ ロ セ ス ID レ ジ ス タ std_logic_vector (0 ~ 7) 出力 Trace_New_Reg_Value1 デ ス テ ィ ネーシ ョ ン レ ジ ス タ ア ッ プデー ト値 std_logic_vector (0 ~ 31) 出力 Trace_Exception_Taken1,2 例外の命令値 std_logic 出力 Trace_Exception_Kind1 例外 タ イ プ。 例外 タ イ プの説明は以下参照。 std_logic_vector (0 ~ 4)2 出力 Trace_Jump_Taken1 True 評価 さ れた分岐命令 (分岐 し た、 な ど) std_logic 出力 Trace_Jump_Hit1,3 分岐先キ ャ ッ シ ュ ヒ ッ ト std_logic 出力 Trace_Delay_Slot1 命令が分岐 し た分岐の遅延ス ロ ッ ト にあ る std_logic 出力 Trace_Data_Access1 有効な D 側の メ モ リ ア ク セ ス std_logic 出力 Trace_Data_Address1 D 側の メ モ リ ア ク セ ス のア ド レ ス std_logic_vector (0 ~ 31) 出力 Trace_Data_Write_Value1 D 側の メ モ リ 書き 込みア ク セ ス の値 std_logic_vector (0 ~ 31) 出力 Trace_Data_Byte_Enable1 D 側の メ モ リ ア ク セ ス のバ イ ト イ ネーブル std_logic_vector (0 ~ 3) 出力 Trace_Data_Read1 D 側の メ モ リ ア ク セ ス が読み出 し std_logic 出力 Trace_Data_Write1 D 側の メ モ リ ア ク セ ス が書 き 込み std_logic 出力 Trace_DCache_Req デー タ メ モ リ ア ド レ ス がD キ ャ ッ シ ュ 範囲 内にあ る std_logic 出力 Trace_DCache_Hit デー タ メ モ リ ア ド レ ス が D キ ャ ッ シ ュ に ある std_logic 出力 Trace_DCache_Rdy デー タ ア ド レ ス が D キ ャ ッ シ ュ 範囲内にあ り 、 ア ク セ ス が完了 し てい る std_logic 出力 Trace_DCache_Read,4 D キ ャ ッ シ ュ リ ク エ ス ト は読み出 し 。 std_logic 出力 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com std_logic_vector (0 ~ 14)2 出力 131 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐14 : MicroBlaze ト レース信号 (続き) 信号名 Trace_ICache_Req 説明 VHDL タ イ プ 方向 命令 メ モ リ ア ド レ ス が I キ ャ ッ シ ュ 範囲内にあ る std_logic 出力 Trace_ICache_Hit 命令 メ モ リ ア ド レ ス が I キ ャ ッ シ ュ にあ る I キ ャ ッ シ ュ std_logic 出力 Trace_ICache_Rdy 命令 メ モ リ ア ド レ ス が I キ ャ ッ シ ュ 範囲内にあ り 、 ア ク セ ス が完了 し てい る std_logic 出力 Trace_OF_PipeRun デ コ ー ド 段のパ イ プ ラ イ ン ア ド バン ス std_logic 出力 Trace_EX_PipeRun3 実行段のパ イ プ ラ イ ン ア ド バン ス std_logic 出力 Trace_MEM_PipeRun3 メ モ リ 段のパ イ プ ラ イ ン ア ド バン ス std_logic 出力 Trace_MB_Halted デバ ッ グに よ り パ イ プ ラ イ ンが停止 std_logic 出力 1. Trace_Valid_Instr = 1 の場合のみ有効 2. Trace_Exception_Taken = 1 の場合のみ有効 3. エ リ ア最適化機能 と 一緒には使用で き ない。 4. Trace_DCache_Req = 1 の場合のみ有効 表 3‐15 : ト レース MSR のマ ッ ピ ング Trace_MSR_Reg マ シ ン ス テー タ ス レ ジ ス タ ビッ ト ビッ ト 0 17 VMS 仮想保護モー ド 保存 1 18 VM 仮想保護モー ド 2 19 UMS ユーザー モー ド 保存 3 20 UM ユーザー モー ド 4 21 PVR プ ロ セ ッ サ バージ ョ ン レ ジ ス タ が存在する 。 5 22 EIP 処理中例外 6 23 EE 例外 イ ネーブル 7 24 DCE デー タ キ ャ ッ シ ュ イ ネーブル 8 25 DZO ゼ ロ 除算、 ま たは除算オーバーフ ロ ー 9 26 ICE 命令キ ャ ッ シ ュ イ ネーブル 10 27 FSL AXI4-Stream エ ラ ー 11 28 BIP 処理中ブ レー ク 12 29 C 演算キ ャ リ ー 13 30 IE 割 り 込み イ ネーブル 14 31 Reserved 予約 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 名前 japan.xilinx.com 説明 132 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐16 : ト レース例外の タ イ プ Trace_Exception_Kind [0:4] 説明 00000 ス ト リ ーム例外 00001 ア ラ イ ン さ れていない例外 00010 無効なオペ コ ー ド 例外 00011 命令バス例外 00100 デー タ バス例外 00101 除算例外 00110 FPU 例外 00111 特権命令例外 01010 割 り 込み 01011 外部のマス ク 不可能な ブ レー ク 01100 外部のマス ク 可能な ブ レー ク 10000 デー タ ス ト レージ例外 10001 命令ス ト レージ例外 10010 デー タ TLB ミ ス例外 10011 命令 TLB ミ ス例外 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 133 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 MicroBlaze コ アの コ ン フ ィ ギ ュ レーシ ョ ン MicroBlaze コ アは、 ユーザーが細か く 設定で き る よ う に開発 さ れてい ます。 つま り 、 具体的な コ ス ト やパフ ォーマ ン ス の要件を満たす こ と がで き る よ う に、 プ ロ セ ッ サを設定す る こ と がで き ます。 コ ン フ ィ ギ ュ レーシ ョ ンは、 通常、 機能のオ ン/オ フやサ イ ズ を決めた り 、 プ ロ セ ッ サの機能を選択す る ためのパ ラ メ ー タ ーを使用 し て行い ます。 た と えば、 命令キ ャ ッ シ ュ は C_USE_ICACHE パ ラ メ ー タ ーを設定す る と イ ネーブル に な り ま す。 命 令 キ ャ ッ シ ュ の サ イ ズ、 キ ャ ッ シ ュ 可 能 な メ モ リ の 範 囲 の 設 定 は、 C_CACHE_BYTE_SIZE、 C_ICACHE_BASEADDR、 C_ICACHE_HIGHADDR を それぞれ設定 し て コ ン フ ィ ギ ュ レー ト で き ます。 MicroBlaze v9.2 で有効なパ ラ メ ー タ ーは表 3-17 に リ ス ト さ れてい ます。 こ の表に リ ス ト さ れてい る パ ラ メ ー タ ーが すべて古いバージ ョ ンの MicroBlaze で認識 さ れ る わけではあ り ませんが、コ ン フ ィ ギ ュ レーシ ョ ンは完全に下位互換 性があ り ます。 注記 : グ レーで色分け さ れてい る 行は、 パ ラ メ ー タ ーの値が固定値であ っ て、 変更で き ない こ と を示 し てい ます。 表 3‐17 : MPD パラ メ ー タ ー パラ メ ー タ ー名 機能/説明 設定可能な値 ツール デ フ ォル で割 り VHDL タ イ プ ト値 当て C_FAMILY タ ーゲ ッ ト フ ァ ミ リ 表 3-18 に リ ス ト virtex7 可 string C_DATA_SIZE デー タ サ イ ズ 32 32 該当 なし integer C_DYNAMIC_BUS_SIZING レ ガシ 1 1 該当 なし integer C_SCO ザ イ リ ン ク ス内部 0 0 該当 なし integer C_AREA_OPTIMIZED 低い命令スループ ッ ト で エ リ ア を最適化す る ため の イ ンプ リ メ ン テーシ ョ ン を選択 0、 1 0 0 0 C_OPTIMIZATION 将来使用す る ために予約 C_INTERCONNECT イ ン タ ー コ ネ ク ト を選択 2 = AXI4 のみ 3 = AXI4 お よ び ACE 2、 3 2 C_ENDIANNESS エンデ ィ ア ン を選択 1 = リ ト ル エンデ ィ ア ン 1 1 C_BASE_VECTORS1 コ ン フ ィ ギ ュ レーシ ョ ン 可能なベース ベ ク タ ー 0x000000000xffffff80 0x00000 000 C_FAULT_TOLERANT フ ォール ト ト レ ラ ン ス を イ ンプ リ メ ン ト 0、 1 0 C_ECC_USE_CE_EXCEPTION 訂正可能な ECC エ ラ ーに 対 し 例外を生成 0、 1 0 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com integer 該当 なし integer integer 可 integer std_logic_vector 可 integer integer 134 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐17 : MPD パラ メ ー タ ー (続き) パラ メ ー タ ー名 機能/説明 設定可能な値 ツール デ フ ォル で割 り VHDL タ イ プ ト値 当て C_LOCKSTEP_SLAVE ロ ッ ク ス テ ッ プ ス レーブ 0、 1 0 integer C_AVOID_PRIMITIVES FPGA プ リ ミ テ ィ ブ を使用 禁止 0 = なし 1 = SRL 2 = LUTRAM 3 = 両方 0、 1、 2、 3 0 integer C_PVR integer プ ロ セ ッ サ バージ ョ ン レ ジ ス タ モー ド の選択 0 = なし 1 = 基本 2 = フル 0、 1、 2 0 C_PVR_USER1 プ ロ セ ッ サ バージ ョ ン レ ジ ス タ USER1 定数 0x00-0xff 0x00 std_logic_vector (0 ~ 7) C_PVR_USER2 プ ロ セ ッ サ バージ ョ ン レ ジ ス タ USER2 定数 0x000000000xffffffff 0x00000 000 std_logic_vector (0 ~ 31) C_RESET_MSR MSR レ ジ ス タ の リ セッ ト値 0x00、 0x20、 0x80、 0xa0 0x00 C_INSTANCE イ ン ス タ ン ス名 任意の イ ン ス タ ン ス名 micro blaze C_D_AXI デー タ 側 AXI イ ン タ ー フェイス 0、 1 0 C_D_LMB デー タ 側 LMB イ ン タ ー フェイス 0、 1 1 C_I_AXI 命令側 AXI イ ン タ ーフ ェ イス 0、 1 0 C_I_LMB 命令側 LMB イ ン タ ーフ ェ イス 0、 1 1 C_USE_BARREL バレル シ フ タ ーを含め る 0、 1 0 C_USE_DIV ハー ド ウ ェ ア ド ラ イ バー を含め る 0、 1 0 C_USE_HW_MUL ハー ド ウ ェ ア乗算器を含 める 0 = なし 1 = Mul32 2 = Mul64 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com std_logic_vector 可 string integer integer integer integer integer integer integer 0、 1、 2 1 135 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐17 : MPD パラ メ ー タ ー (続き) パラ メ ー タ ー名 C_USE_FPU 機能/説明 設定可能な値 ツール デ フ ォル で割 り VHDL タ イ プ ト値 当て integer ハー ド ウ ェ ア浮動小数点 ユニ ッ ト を含め る 0 = なし 1 = 基本 2 = 拡張 0、 1、 2 0 C_USE_MSR_INSTR MSRSET お よ び MSRCLR 命令を使用 0、 1 1 C_USE_PCMP_INSTR CLZ、 PCMPBF、 PCMPEQ、 PCMPNE 命令 を使用 0、 1 1 C_USE_REORDER_INSTR 逆 ロ ー ド 、 逆ス ト ア、 ス ワ ッ プ命令を使用 0、 1 1 C_UNALIGNED_EXCEPTIONS ア ラ イ ン さ れていない デー タ ア ク セ ス の例外処 理を行 う 0、 1 0 C_ILL_OPCODE_EXCEPTION 無効なオペ コ ー ド の例外 処理を行 う 0、 1 0 C_M_AXI_I_BUS_EXCEPTION M_AXI_I バス エ ラ ーの例 外処理を行 う 0、 1 0 C_M_AXI_D_BUS_EXCEPTION M_AXI_D バ ス エ ラ ーの例 外処理を行 う 0、 1 0 C_DIV_ZERO_EXCEPTION ゼ ロ 除算ま たは除算オー バーフ ロ ーの例外処理を 行う 0、 1 0 ハー ド ウ ェ ア浮動小数点 ユニ ッ ト の例外処理を行 う 0、 1 0 C_OPCODE_0x0_ILLEGAL opcode 0x0 を無効な命令 と し て検出 0、 1 0 C_FSL_EXCEPTION ス ト リ ーム リ ン ク の例外 処理を行 う 0、 1 0 C_ECC_USE_CE_EXCEPTION 訂正可能なエ ラ ーに対 し バ ス エ ラ ー例外を生成 0、 1 0 C_USE_STACK_PROTECTION ス タ ッ ク オーバーフ ロ ー ま たは ス タ ッ ク ア ン ダー フ ロ ーに対 し 例外を生成 0、 1 0 LMB メ モ リ の ECC 訂正可 能エ ラ ーに対 し 、 曖昧例 外を許可 0、 1 0 C_FPU_EXCEPTION C_IMPRECISE_EXCEPTIONS MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com integer integer integer integer integer integer integer integer integer integer integer integer integer integer 136 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐17 : MPD パラ メ ー タ ー (続き) パラ メ ー タ ー名 C_DEBUG_ENABLED 機能/説明 設定可能な値 ツール デ フ ォル で割 り VHDL タ イ プ ト値 当て integer MDM デバ ッ グ イ ン タ ー フェイス 0 = なし 1 = 基本 2 = 拡張 0、 1、 2 1 C_NUMBER_OF_PC_BRK ハー ド ウ ェ ア ブ レー ク ポ イ ン ト の数 0~8 1 integer C_NUMBER_OF_RD_ADDR_BRK 読み出 し ア ド レ ス ウ オ ッ チポ イ ン ト の数 0~4 0 integer C_NUMBER_OF_WR_ADDR_BRK 書 き 込みア ド レ ス ウ オ ッ チポ イ ン ト の数 0~4 0 integer C_DEBUG_EVENT_COUNTERS パフ ォーマ ン ス監視 イ ベ ン ト カ ウ ン タ ーの数 0 ~ 48 5 integer C_DEBUG_LATENCY_COUNTERS パフ ォーマ ン ス監視レ イ テ ン シ カ ウ ン タ ーの数 0~7 1 integer C_DEBUG_COUNTER_WIDTH パフ ォーマ ン ス監視カ ウ ン タ ー幅 32、 48、 64 32 integer C_DEBUG_TRACE_SIZE ト レース バ ッ フ ァ ー サイズ 0、 8192、 16384、 32768、 65536、 131072 8192 integer 0、 4096、 8192、 16384、 32768、 65536、 131072 0 integer C_DEBUG_PROFILE_SIZE プロ フ ァ イル バッ フ ァー サイズ C_DEBUG_EXTERNAL_TRACE 外部プ ロ グ ラ ム ト レース 0、 1 0 可 integer C_INTERRUPT_IS_EDGE レベル/エ ッ ジ イ ン ク リ メ ント 0、 1 0 可 integer C_EDGE_IS_POSITIVE 負/正のエ ッ ジ割 り 込み 0、 1 1 可 integer C_FSL_LINKS AXI4-Stream イ ン タ ーフ ェ イ ス の数 0 ~ 16 0 C_USE_EXTENDED_FSL_INSTR 拡張ス ト リ ーム命令を使 用 0、 1 0 C_ICACHE_BASEADDR 命令キ ャ ッ シ ュ ベース ア ド レス 0x00000000 0xFFFFFFFF 0x00000 000 std_logic_vector C_ICACHE_HIGHADDR 命令キ ャ ッ シ ュ ハ イ ア ド レス 0x00000000 0xFFFFFFFF 0x3FFF FFFF std_logic_vector MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com integer integer 137 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐17 : MPD パラ メ ー タ ー (続き) パラ メ ー タ ー名 機能/説明 設定可能な値 ツール デ フ ォル で割 り VHDL タ イ プ ト値 当て C_USE_ICACHE 命令キ ャ ッ シ ュ 0、 1 0 C_ALLOW_ICACHE_WR 命令キ ャ ッ シ ュ ラ イ ト イ ネーブル 0、 1 1 C_ICACHE_LINE_LEN 命令キ ャ ッ シ ュ ラ イ ンの 長さ 4、 8、 16 4 C_ICACHE_ALWAYS_USED 命令キ ャ ッ シ ュ イ ン タ ー フ ェ イ ス が、 キ ャ ッ シ ュ 可能範囲内のすべての メ モ リ ア ク セ ス に対 し て使 用される 0、 1 1 命令キ ャ ッ シ ュ タ グは分 散 RAM を使用 し て常に イ ンプ リ メ ン ト 0、 1 0 C_ICACHE_STREAMS 命令キ ャ ッ シ ュ ス ト リ ー ム 0、 1 0 C_ICACHE_VICTIMS 命令キ ャ ッ シ ュ ビ ク テ ィ ム 0、 2、 4、 8 0 C_ICACHE_DATA_WIDTH 命令キ ャ ッ シ ュ デー タ 幅 0 = 32 ビ ッ ト 1 = フル キ ャ ッ シ ュ ラ イ ン 2 = 512 ビ ッ ト 0、 1、 2 0 C_ADDR_TAG_BITS 命令キ ャ ッ シ ュ ア ド レ ス タグ 0 ~ 25 17 C_CACHE_BYTE_SIZE 命令キ ャ ッ シ ュ サ イ ズ C_ICACHE_FORCE_TAG_LUTRAM integer integer integer integer integer integer integer integer 可 integer integer 64、 128、 256、 512、 1024、 2048、 4096、 8192、 16384、 32768、 655362 8192 C_DCACHE_BASEADDR デー タ キ ャ ッ シ ュ ベース アド レス 0x00000000 0xFFFFFFFF 0x00000 000 std_logic_vector C_DCACHE_HIGHADDR デー タ キ ャ ッ シ ュ ハ イ ア ド レス 0x00000000 0xFFFFFFFF 0x3FFF FFFF std_logic_vector C_USE_DCACHE デー タ キ ャ ッ シ ュ 0、 1 0 integer C_ALLOW_DCACHE_WR デー タ キ ャ ッ シ ュ ラ イ ト イ ネーブル 0、 1 1 C_DCACHE_LINE_LEN デー タ キ ャ ッ シ ュ ラ イ ン の長 さ 4、 8、 16 4 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com integer integer 138 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐17 : MPD パラ メ ー タ ー (続き) パラ メ ー タ ー名 C_DCACHE_ALWAYS_USED 機能/説明 設定可能な値 デー タ キ ャ ッ シ ュ イ ン タ ーフ ェ イ ス が、 キ ャ ッ シ ュ 可能範囲内のすべて のア ク セ ス に対 し て使用 される ツール デ フ ォル で割 り VHDL タ イ プ ト値 当て integer 0、 1 1 デー タ キ ャ ッ シ ュ タ グは 分散 RAM を使用 し て常に イ ンプ リ メ ン ト 0、 1 0 デー タ キ ャ ッ シ ュ ラ イ ト バ ッ ク ス ト レージ ポ リ シーを使用 0、 1 0 C_DCACHE_VICTIMS デー タ キ ャ ッ シ ュ ビ ク ティム 0、 2、 4、 8 0 C_DCACHE_DATA_WIDTH デー タ キ ャ ッ シ ュ デー タ 幅 0 = 32 ビ ッ ト 1 = フル キ ャ ッ シ ュ ラ イ ン 2 = 512 ビ ッ ト 0、 1、 2 0 C_DCACHE_ADDR_TAG デー タ キ ャ ッ シ ュ ア ド レ ス タグ 0 ~ 25 17 C_DCACHE_BYTE_SIZE デー タ キ ャ ッ シ ュ サ イ ズ C_DCACHE_FORCE_TAG_LUTRAM C_DCACHE_USE_WRITEBACK C_USE_MMU3 C_MMU_DTLB_SIZE3 C_MMU_ITLB_SIZE3 C_MMU_TLB_ACCESS3 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 integer integer integer integer 可 integer integer 64、 128、 256、 512、 1024、 2048、 4096、 8192、 16384、 32768、 65536 8192 メ モ リ 管理 : 0 = なし 1 = ユーザー モー ド 2 = 保護 3 = 仮想 0、 1、 2、 3 0 integer デー タ シ ャ ド ウ変換ル ッ ク アサ イ ド バ ッ フ ァ ー サ イズ 1、 2、 4、 8 4 integer 命令シ ャ ド ウ変換ル ッ ク アサ イ ド バ ッ フ ァ ー サ イ ズ 1、 2、 4、 8 2 integer メ モ リ 管理特殊レ ジ ス タ へのア ク セ ス : 0 = 最小 1 = 読み出 し 2 = 書 き 込み 3 = フル 0、 1、 2、 3 3 integer japan.xilinx.com 139 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐17 : MPD パラ メ ー タ ー (続き) パラ メ ー タ ー名 機能/説明 設定可能な値 ツール デ フ ォル で割 り VHDL タ イ プ ト値 当て C_MMU_ZONES3 メ モ リ 保護ゾーンの数 0 ~ 16 16 integer C_MMU_PRIVILEGED_INSTR3 特権命令 0 = フル保護 1 = ス ト リ ーム命令を許可 0、 1 0 integer 割 り 込み処理を使用 0 = 割 り 込みな し 1 = 標準割 り 込み 2 = 低レ イ テ ン シ割 り 込み 0、 1、 2 1 可 integer C_USE_EXT_BRK 外部ブ レー ク 処理を使用 0、 1 0 可 integer C_USE_EXT_NM_BRK 外部のマ ス ク 不可能なブ レー ク 処理を使用 0、 1 0 可 integer C_USE_BRANCH_TARGET_CACHE3 分岐先キ ャ ッ シ ュ を使用 0、 1 0 integer C_BRANCH_TARGET_CACHE_SIZE3 分岐先キ ャ ッ シ ュ サ イ ズ : 0 = デフ ォ ル ト 1 = 8 エン ト リ 2 = 16 エン ト リ 3 = 32 エン ト リ 4 = 64 エン ト リ 5 = 512 エン ト リ 6 = 1024 エン ト リ 7 = 2048 エン ト リ 0~7 0 integer C_M_AXI_DP_ THREAD_ID_WIDTH デー タ 側 AXI ス レ ッ ド ID の幅 1 1 C_M_AXI_DP_DATA_WIDTH デー タ 側 AXI デー タ 幅 32 32 integer C_M_AXI_DP_ADDR_WIDTH デー タ 側 AXI ア ド レ ス幅 32 32 integer C_M_AXI_DP_ SUPPORTS_THREADS デー タ 側 AXI は ス レ ッ ド を使用 0 0 C_M_AXI_DP_SUPPORTS_READ 読み出 し ア ク セ ス のため のデー タ 側 AXI サポー ト 1 1 C_M_AXI_DP_SUPPORTS_WRITE 書 き 込みア ク セ ス のため のデー タ 側 AXI サポー ト 1 1 C_M_AXI_DP_SUPPORTS_ NARROW_BURST デー タ 側 AXI ナ ロ ー バー ス ト サポー ト 0 0 C_M_AXI_DP_PROTOCOL デー タ 側 AXI プ ロ ト コ ル AXI4、 AXI4LITE AXI4 LITE C_M_AXI_DP_ EXCLUSIVE_ACCESS デー タ 側 AXI 排他的ア ク セ ス サポー ト 0、 1 0 C_USE_INTERRUPT MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com integer integer integer integer integer 可 string integer 140 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐17 : MPD パラ メ ー タ ー (続き) パラ メ ー タ ー名 機能/説明 設定可能な値 ツール デ フ ォル で割 り VHDL タ イ プ ト値 当て C_M_AXI_IP_ THREAD_ID_WIDTH 命令側 AXI ス レ ッ ド ID の 幅 1 1 C_M_AXI_IP_DATA_WIDTH 命令側 AXI デー タ 幅 32 32 integer C_M_AXI_IP_ADDR_WIDTH 命令側 AXI ア ド レ ス幅 32 32 integer C_M_AXI_IP_ SUPPORTS_THREADS 命令側 AXI は ス レ ッ ド を 使用 0 0 C_M_AXI_IP_SUPPORTS_READ 読み出 し ア ク セ ス のため の命令側 AXI サポー ト 1 1 C_M_AXI_IP_SUPPORTS_WRITE 書 き 込みア ク セ ス のため の命令側 AXI サポー ト 0 0 C_M_AXI_IP_SUPPORTS_ NARROW_BURST 命令側 AXI ナ ロ ー バース ト サポー ト 0 0 C_M_AXI_IP_PROTOCOL 命令側 AXI プ ロ ト コ ル AXI4LITE AXI4 LITE C_M_AXI_DC_ THREAD_ID_WIDTH デー タ キ ャ ッ シ ュ AXI ID の幅 1 1 C_M_AXI_DC_DATA_WIDTH デー タ キ ャ ッ シ ュ AXI デー タ 幅 32、 64、 128、 256、 512 32 C_M_AXI_DC_ADDR_WIDTH デー タ キ ャ ッ シ ュ AXI ア ド レ ス幅 32 32 C_M_AXI_DC_ SUPPORTS_THREADS デー タ キ ャ ッ シ ュ AXI は ス レ ッ ド を使用 0 0 C_M_AXI_DC_SUPPORTS_READ 読み出 し ア ク セ ス のため のデー タ キ ャ ッ シ ュ AXI サポー ト 1 1 書 き 込みア ク セ ス のため のデー タ キ ャ ッ シ ュ AXI サポー ト 1 1 C_M_AXI_DC_SUPPORTS_ NARROW_BURST デー タ キ ャ ッ シ ュ AXI ナ ロ ー バース ト サポー ト 0 0 C_M_AXI_DC_SUPPORTS_ USER_SIGNALS デー タ キ ャ ッ シ ュ AXI ユーザー信号サポー ト 1 1 C_M_AXI_DC_PROTOCOL デー タ キ ャ ッ シ ュ AXI プ ロ ト コル AXI4 AXI4 C_M_AXI_DC_AWUSER_WIDTH デー タ キ ャ ッ シ ュ AXI ユーザー幅 5 5 C_M_AXI_DC_SUPPORTS_WRITE MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com integer integer integer integer integer string integer integer integer integer integer integer integer integer string integer 141 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐17 : MPD パラ メ ー タ ー (続き) パラ メ ー タ ー名 機能/説明 設定可能な値 ツール デ フ ォル で割 り VHDL タ イ プ ト値 当て C_M_AXI_DC_ARUSER_WIDTH デー タ キ ャ ッ シ ュ AXI ユーザー幅 5 5 C_M_AXI_DC_WUSER_WIDTH デー タ キ ャ ッ シ ュ AXI ユーザー幅 1 1 C_M_AXI_DC_RUSER_WIDTH デー タ キ ャ ッ シ ュ AXI ユーザー幅 1 1 C_M_AXI_DC_BUSER_WIDTH デー タ キ ャ ッ シ ュ AXI ユーザー幅 1 1 C_M_AXI_DC_ EXCLUSIVE_ACCESS デー タ キ ャ ッ シ ュ AXI 排 他的ア ク セ ス サポー ト 0、 1 0 C_M_AXI_DC_USER_VALUE デー タ キ ャ ッ シ ュ AXI ユーザー値 0-31 31 C_M_AXI_IC_ THREAD_ID_WIDTH 命令キ ャ ッ シ ュ AXI ID の 幅 1 1 C_M_AXI_IC_DATA_WIDTH 命令キ ャ ッ シ ュ AXI デー タ幅 32、 64、 128、 256、 512 32 C_M_AXI_IC_ADDR_WIDTH 命令キ ャ ッ シ ュ AXI デー タ幅 32 32 C_M_AXI_IC_ SUPPORTS_THREADS デー タ キ ャ ッ シ ュ AXI は ス レ ッ ド を使用 0 0 C_M_AXI_IC_SUPPORTS_READ 読み出 し ア ク セ ス のため の命令キ ャ ッ シ ュ AXI サ ポー ト 1 1 書 き 込みア ク セ ス のため の命令キ ャ ッ シ ュ AXI サ ポー ト 0 0 C_M_AXI_IC_SUPPORTS_ NARROW_BURST 命令キ ャ ッ シ ュ AXI ナ ロ ー バース ト サポー ト 0 0 C_M_AXI_IC_SUPPORTS_ USER_SIGNALS 命令キ ャ ッ シ ュ AXI ユー ザー信号サポー ト 1 1 C_M_AXI_IC_PROTOCOL 命令キ ャ ッ シ ュ AXI プ ロ ト コル AXI4 AXI4 C_M_AXI_IC_AWUSER_WIDTH 命令キ ャ ッ シ ュ AXI ユー ザー幅 5 5 C_M_AXI_IC_ARUSER_WIDTH 命令キ ャ ッ シ ュ AXI ユー ザー幅 5 5 C_M_AXI_IC_SUPPORTS_WRITE MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com integer integer integer integer integer integer integer integer integer integer integer integer integer integer string integer integer 142 第 3 章 : MicroBlaze 信号イ ン タ ー フ ェ イ スの説明 表 3‐17 : MPD パラ メ ー タ ー (続き) パラ メ ー タ ー名 機能/説明 設定可能な値 ツール デ フ ォル で割 り VHDL タ イ プ ト値 当て C_M_AXI_IC_WUSER_WIDTH 命令キ ャ ッ シ ュ AXI ユー ザー幅 1 1 integer C_M_AXI_IC_RUSER_WIDTH 命令キ ャ ッ シ ュ AXI ユー ザー幅 1 1 C_M_AXI_IC_BUSER_WIDTH 命令キ ャ ッ シ ュ AXI ユー ザー幅 1 1 C_M_AXI_IC_USER_VALUE 命令キ ャ ッ シ ュ AXI ユー ザー値 0 ~ 31 31 C_STREAM_INTERCONNECT AXI4-Stream イ ン タ ー コ ネ ク ト を選択 0、 1 0 C_Mn_AXIS_PROTOCOL AXI4-Stream プ ロ ト コ ル GENERIC GENERI C string C_Sn_AXIS_PROTOCOL AXI4-Stream プ ロ ト コ ル GENERIC GENERI C string C_Mn_AXIS_DATA_WIDTH AXI4-Stream マ ス タ ー デー タ 幅 32 32 該当 なし integer C_Sn_AXIS_DATA_WIDTH AXI4-Stream ス レーブ デー タ 幅 32 32 該当 なし integer integer integer integer integer 1. 最下位ビ ッ ト か ら 7 つのビ ッ ト はすべて 0。 2. アーキ テ ク チ ャ に よ っ て指定で き る サ イ ズは変わ り ます。 キ ャ ッ シ ュ は、 0 か ら 32 ま での RAMB プ リ ミ テ ィ ブを使用 し ま す (キ ャ ッ シ ュ サ イ ズが 2048 未満の場合は 0) 3. C_AREA_OPTIMIZED が 1 に設定 さ れてい る と き は使用で き ません。 表 3‐18 : パ ラ メ ー タ ー C_FAMILY で使用可能な値 設定可能な値 Artix aartix7 artix7 artix7l qartix7 qartix7l Kintex kintex7 kintex7l qkintex7 qkintex7l kintexu Virtex qvirtex7 virtex7 virtexu Zynq azynq zynq qzynq MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 143 第 4 章 MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン ターフ ェ イス こ の章では、 MicroBlaze™ 用にアセ ン ブ リ 言語で ソ フ ト ウ ェ ア を開発す る のに重要な アプ リ ケーシ ョ ン バ イ ナ リ イ ン タ ーフ ェ イ ス (ABI) を説明 し ます。 MicroBlaze の GNU コ ンパ イ ラ は、 本書で説明 さ れてい る 規則に従い ます。 ア セ ンブ リ プ ロ グ ラ ムに よ っ て記述 さ れ る コ ー ド も すべて、 コ ンパ イ ラ で生成 さ れた コ ー ド と の互換性を保つために、 同 じ 規則に従い ます。 ま た、 割 り 込みお よ び例外処理 も 手短に説明 し ます。 デー タ 型 MicroBlaze のアセ ン ブ リ プ ロ グ ラ ム で使用 さ れ る デー タ 型は、 表 4-1 に ま と め ら れてい ます。 data8、 data16、 data32 な ど のデー タ 型が、 バ イ ト 、 ハーフバ イ ト 、 ワー ド レ ジ ス タ の代わ り に使用 さ れます。 表 4‐1 : MicroBlaze アセ ン ブ リ プ ログ ラ ムのデー タ 型 MicroBlaze デー タ 型 (アセ ン ブ リ プ ロ グ ラ ム) 対応する ANSI C デー タ 型 サイ ズ (バイ ト ) data8 char 1 data16 short 2 data32 int 4 data32 long int 4 data32 float 4 data32 enum 4 data16/data32 pointer1 2/4 1. グ ロ ーバル ポ イ ン タ ーでア ク セ ス で き る 、 ス モール デー タ エ リ アへのポ イ ン タ ーは data16 です。 レ ジス タ の使用規則 MicroBlaze での レ ジ ス タ 使用規則は表 4-2 に ま と め ら れてい ます。 表 4‐2 : レ ジ ス タ の使用規則 レ ジス タ 種類 SW/HW 用途 R0 専用 HW 値0 R1 専用 SW ス タ ッ ク ポ イ ン ター R2 専用 SW 読み出 し 専用の ス モール デー タ エ リ ア ア ン カー MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 144 第 4 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス 表 4‐2 : レ ジ ス タ の使用規則 レ ジス タ 種類 SW/HW 用途 R3-R4 揮発性 SW 戻 り 値/暫定値 R5-R10 揮発性 SW パ ラ メ ー タ ー /暫定値 R11-R12 揮発性 SW 暫定値 R13 専用 SW 読み出 し -書き 込みの ス モール デー タ エ リ ア ア ン カー R14 専用 HW 割 り 込みの戻 り ア ド レ ス R15 専用 SW サブルーチンの戻 り ア ド レ ス R16 専用 HW ト ラ ッ プ (デバ ッ ガー ) の戻 り ア ド レ ス R17 専用 HW/SW R18 専用 SW アセ ンブ ラ / コ ンパ イ ラ の暫定値のため予約 svc_table_handler 属性でサービ ス ID に使用 R19 例外の戻 り ア ド レ ス ハー ド ウ ェ ア例外をサポー ト する 場合は HW、 そ う でなければ SW 不揮発性 SW 関数コ ール全体で保存 し てお く 必要があ る 。 コ ー リ ーセーブ。 R20 専用 ま たは 不揮発性 SW 位置独立コ ー ド (PIC) のグ ロ ーバル オ フ セ ッ ト テーブル (GOT) への ポ イ ン タ ー を 格納す る た めに予約非 PIC コ ー ド で不揮発性。 関数 コ ール全体で保存 し てお く 必要があ る 。 コ ー リ ーセーブ。 R21-R31 不揮発性 SW 関数コ ール全体で保存 し てお く 必要があ る 。 コ ー リ ーセーブ。 特殊 HW プロ グ ラ ム カ ウ ン ター 特殊 HW マシ ン ス テー タ ス レ ジ ス タ 特殊 HW 例外ア ド レ ス レ ジ ス タ 特殊 HW 例外ス テー タ ス レ ジ ス タ 特殊 HW 浮動小数点ス テー タ ス レ ジ ス タ 特殊 HW 分岐先レ ジ ス タ 特殊 HW 例外デー タ レ ジ ス タ 特殊 HW プ ロ セ ス ID レ ジ ス タ 特殊 HW ゾーン保護レ ジ ス タ 特殊 HW 変換ル ッ ク アサ イ ド バ ッ フ ァ ー ロ ウ レ ジ ス タ 特殊 HW 変換ル ッ ク アサ イ ド バ ッ フ ァ ー ハ イ レ ジ ス タ 特殊 HW 変換ル ッ ク アサ イ ド バ ッ フ ァ ー イ ンデ ッ ク ス レ ジ ス タ 特殊 HW 変換ル ッ ク アサ イ ド バ ッ フ ァ ー検索 イ ンデ ッ ク ス 特殊 HW プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 0 か ら 12 ま で RPC RMSR REAR RESR RFSR RBTR REDR RPID RZPR RTLBLO RTLBHI RTLBX RTLBSX RPVR0-12 MicroBlaze のアーキ テ ク チ ャ は 32 個の汎用レ ジ ス タ (GPR) を定義 し ます。 こ れ ら の レ ジ ス タ は、 揮発性、 不揮発性、 専用の 3 つに分類 さ れます。 • 揮発性レ ジ ス タ ( コ ー ラ ーセーブ と も い う ) は、 一時的な も の と し て使用 さ れ、 関数 コ ールの間は値を保持 し ませ ん。 レ ジ ス タ R3 か ら R12 ま では揮発性 タ イ プで、 R3 お よ び R4 は、 あればコ ー ラ ー フ ァ ン ク シ ョ ンに値を返す ために使用 さ れます。 レ ジ ス タ R5 か ら R10 ま では、 サブルーチン間のパ ラ メ ー タ ー渡 し に使用 さ れます。 • レ ジ ス タ R19 か ら R31 ま では、 関数 コ ールの間レ ジ ス タ の内容を保持す る ので、 不揮発性レ ジ ス タ と 呼ばれま す ( コ ー リ ーセーブ と も い う )。 コ ー リ ー関数は、 使用 さ れてい る 不揮発性レ ジ ス タ に値を保存 し ます。 通常、 プ ロ ロ ーグ中に ス タ ッ ク に保存 さ れ、 その後、 エ ピ ロ ーグ中に リ ロ ー ド さ れます。 • 一部の レ ジ ス タ は専用レ ジ ス タ と し て使用 さ れ、 プ ロ グ ラ マはその決め ら れた目的以外の こ と で こ の レ ジ ス タ を 使用す る こ と はあ り ません。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 145 第 4 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス ¨ ¨ • レ ジ ス タ R14 か ら R17 は、 割 り 込み、 サブルーチン、 ト ラ ッ プ、 例外の順序で戻 り ア ド レ ス を格納す る の に使用 さ れます。 サブルーチンは分岐お よ び リ ン ク 命令を使用 し て呼び出 さ れます。 こ の命令は現在のプ ロ グ ラ ム カ ウ ン タ ー (PC) を レ ジ ス タ R15 に保存 し ます。 ス モール デー タ エ リ ア ポ イ ン タ ーは、16 ビ ッ ト の即値で、 あ る メ モ リ ロ ケーシ ョ ンにア ク セ スす る ために 使用 さ れます。 こ う し たエ リ アについては、 本書の メ モ リ モデルに関する セ ク シ ョ ンで説明 し ます。 読み出 し 専用の ス モール デー タ エ リ ア (SDA) ア ン カー R2 (読み出 し 専用) は、リ テ ラ ルな ど の定数にア ク セ スす る ために使用 さ れます。 も う 1 つの SDA ア ン カー R13 (読み出 し -書 き 込み) は、 ス モール デー タ の読み出 し 書 き 込みセ ク シ ョ ンの値にア ク セ スす る のに使用 さ れます。 ¨ レ ジ ス タ R1 は ス タ ッ ク ポ イ ン タ ー値を格納 し 、 関数に入 る と き お よ びそ こ か ら 出 る と き にア ッ プデー ト さ れます。 ¨ レ ジ ス タ R18 はアセ ンブ ラ 操作用の一時的な レ ジ ス タ と し て使用 さ れます。 MicroBlaze には特殊レ ジ ス タ が含まれます。 た と えば、 プ ロ グ ラ ム カ ウ ン タ ー (rpc)、 マシ ン ス テー タ ス レ ジ ス タ (rmsr)、 例外ス テー タ ス レ ジ ス タ (resr)、 例外ア ド レ ス レ ジ ス タ (rear)、 浮動小数点ス テー タ ス レ ジ ス タ (rfsr)、 分岐先レ ジ ス タ (rbtr)、 例外デー タ レ ジ ス タ (redr)、 メ モ リ 管理レ ジ ス タ (rpid、 rzpr、 rtlblo、 rtlbhi、 rtlbx、 rtlbsx)、 プ ロ セ ッ サ バージ ョ ン レ ジ ス タ (0 か ら 12 ま で) な ど です。 こ れ ら の レ ジ ス タ は、 レ ジ ス タ フ ァ イ ルには直接 マ ッ プ さ れていないため、 その使用方法は汎用レ ジ ス タ と は異な り ます。 特殊レ ジ ス タ の値は、 mts お よ び mfs 命令をぞれぞれ使用 し て汎用レ ジ ス タ か ら 、 ま たは汎用レ ジ ス タ へ と 転送で き ます。 ス タ ッ ク規則 MicroBlaze に よ っ て使用 さ れてい る ス タ ッ ク 規則は表 4-3 に ま と め ら れてい ます。 表 4-3 の赤枠で囲まれてい る 箇所は、 コ ー ラ ー関数の ス タ ッ ク フ レームの一部を表 し 、 それ以外の箇所は、 コ ー リ ー フ レーム関数を表 し てい ます。 ス タ ッ ク フ レームの ABI 規則は、 パ ラ メ ー タ ー渡 し 、 不揮発性レ ジ ス タ の値の保持、 関数の ロ ーカル変数の スペース の割 り 当てに関す る プ ロ ト コ ルを定義 し てい ます。 ほかのサブルーチン を呼び出す コ ールが含ま れてい る 関数は非 リ ーフ関数 と 呼ばれ ます。 こ れ ら の非 リ ーフ関数は、 それ用に新た な ス タ ッ ク フ レーム エ リ ア を作成す る 必要があ り ます。 プ ロ グ ラ ムの実行が開始す る と き 、 ス タ ッ ク ポ イ ン タ ーの値は最大値です。 関数が呼び出 さ れてい く と 、 その値は、 ス タ ッ ク フ レームの各関数に必要な ワー ド 数 分デ ク リ メ ン ト し てい き ます。 コ ー ラ ー関数の ス タ ッ ク ポ イ ン タ ーの値は、 常に、 コ ー リ ー関数 よ り も 大 き な値にな り ます。 表 4‐3 : ス タ ッ ク 規則 上位ア ド レ ス 呼び出 さ れたサブルーチンの関数パ ラ メ ー タ ー (Arg n .. Arg1) (オプシ ョ ン : 現在のプ ロ シージ ャ か ら 呼び出 さ れたプ ロ シージ ャ に 必要な引数の最大数) 古い ス タ ッ ク ポ イ ン ター リ ン ク レ ジ ス タ (R15) コ ー リ ー セーブ ド レ ジ ス タ (R31....R19) (オプシ ョ ン : 現在のプ ロ シージ ャ で使用 さ れ る レ ジ ス タ のみを保存) 現在のプ ロ シージ ャ の ロ ーカル変数 (オプシ ョ ン : プ ロ シージ ャ で定義 さ れてい る ロ ーカル変数の場合に のみあ る ) フ ァ ン ク シ ョ ン パ ラ メ ー タ ー (Arg n .. Arg 1) (オプシ ョ ン : 現在のプ ロ シージ ャ か ら 呼び出 さ れたプ ロ シージ ャ に 必要な引数の最大数) 新しいス タ ッ ク ポ イ ン ター リ ン ク レジス タ 低位ア ド レ ス MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 146 第 4 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス 関数 1 が関数 2 を呼び出 し 、 その後、 関数 2 が関数 3 を呼び出す例を と っ てみます。 それぞれの イ ン ス タ ン ス での ス タ ッ ク は図 4-1 の よ う にな り ます。 関数 1 が関数 2 を呼び出 し た後、 ス タ ッ ク ポ イ ン タ ー (SP) の値はデ ク リ メ ン ト し ます。 こ の SP の値は、 関数 3 の ス タ ッ ク フ レーム分、 さ ら にデ ク リ メ ン ト し ます。 関数 3 か ら 戻 る と 、 こ の値は、 関数 2 での元の値に イ ン ク リ メ ン ト し ます。 図 4-1 を見 る と 、 ス タ ッ ク が ど の よ う に維持 さ れてい る かがわか り ます。 X-Ref Target - Figure 4-1 ハイ メ モ リ 関数 1 関数 1 関数 1 関数 1 関数 2 関数 2 関数 2 SP SP SP 関数 3 ロウ メ モ リ SP 図 4‐1 : ス タ ッ ク フ レーム 呼び出 し 規則 コ ー ラ ー関数は、 レ ジ ス タ (R5 か ら R10) を使用する か、 それ自体の ス タ ッ ク フ レーム で、 コ ー リ ー関数にパ ラ メ ー タ ーを渡 し ます。 コ ー リ ーに渡 さ れたパ ラ メ ー タ ーを格納す る のに、 コ ー リ ーは コ ー ラ ーの ス タ ッ ク エ リ ア を使用 し ます。 図 4-1 を参照 し て く だ さ い。 関数 2 のパ ラ メ ー タ ーは R5 か ら R10 ま での レ ジ ス タ か、 ま たは関数 1 に割 り 当て ら れ てい る ス タ ッ ク フ レームに格納 さ れてい ます。 関数 2 に 7 つ以上の整数パ ラ メ ー タ ーがあ る 場合、 最初の 6 つは R5 か ら R10 ま での レ ジ ス タ で渡す こ と がで き ます が、 その後のパ ラ メ ー タ ーは、 SP + 28 のオ フ セ ッ ト か ら 、 関数 1 に割 り 当て ら れてい る ス タ ッ ク フ レーム で渡す必 要があ り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 147 第 4 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス メ モ リ モデル MicroBlaze の メ モ リ モデルは、 ス モール デー タ エ リ ア、 デー タ エ リ ア、 共通の未初期化エ リ ア、 リ テ ラ ル/定数 と い う 4 つの箇所にデー タ を分類 し ます。 ス モール デー タ エ リ ア グ ロ ーバルな初期化 さ れた変数でサ イ ズの小 さ な も のが、 こ のエ リ アに格納 さ れ ます。 変数を ス モール デー タ エ リ アに格納す る か ど う か決め手 と な る サ イ ズは、 MicroBlaze の C コ ンパ イ ラ (mb-gcc) で 8 バ イ ト に設定 さ れてい ます が、 コ ンパ イ ラ で コ マ ン ド ラ イ ン オプシ ョ ン を指定す る と 変更で き ます。 こ のオプシ ョ ンの詳細は、 『エンベデ ッ ド シ ス テ ム ツール リ フ ァ レ ン ス マニ ュ アル』 の 「GNU コ ンパ イ ラ ツール」 の章で説明 さ れてい ます。 ス モール デー タ エ リ アには 64KB の メ モ リ が割 り 当て ら れてい ます。 こ のエ リ アには、 読み出 し -書 き 込みの ス モール デー タ エ リ ア ア ン カー (R13) お よ び 16 ビ ッ ト のオ フ セ ッ ト を使用 し て、 ア ク セ ス し ます。 こ のエ リ アに小 さ な変数を割 り 当て てお く と 、 グ ロ ーバル変数にア ク セ スす る ための コ ー ド に IMM 命令を あ ま り 追加せずに済みます。 ス モール デー タ エ リ アの変数には、 絶対ア ド レ ス を使用 し て ア ク セ スす る こ と も で き ます。 デー タ エ リ ア 比較的大 き な初期化 さ れた変数がデー タ エ リ アに割 り 当て ら れます。 こ のエ リ アには、 コ ンパ イ ラ に指定す る コ マ ン ド ラ イ ンのオプシ ョ ンに よ っ て異な り ますが、 読み出 し -書き 込みの SDA ア ン カー R13、 ま たは絶対ア ド レ ス を使用 し てア ク セ ス で き ます。 共通の未初期化エ リ ア 初期化 さ れていないグ ロ ーバル変数は共通エ リ アに割 り 当て ら れ、絶対ア ド レ ス、 ま たは読み出 し -書 き 込みの ス モー ル デー タ エ リ ア ア ン カー (R13) を使用 し て、 ア ク セ ス で き ます。 リ テ ラルまたは定数 定数は、 読み出 し 専用の ス モール デー タ エ リ ア (SDA) に格納 さ れ、 読み出 し 専用の SDA ア ン カー R2 を使用 し てア ク セ ス し ます。 コ ンパ イ ラ は、 ベース ポ イ ン タ ー と し て動作す る 適切な グ ロ ーバル ポ イ ン タ ーを生成 し ます。 SDA ア ン カーの実際 の値は、最終の リ ン ク ス テージで、 リ ン カーに よ っ て定め ら れます。 メ モ リ の さ ま ざ ま なセ ク シ ョ ンに関 し ては、『エ ンベデ ッ ド シ ス テ ム ツール リ フ ァ レ ン ス マニ ュ アル』 の 「MicroBlaze リ ン カー ス ク リ プ ト 」 のセ ク シ ョ ン を参照 し て く だ さ い。 コ ンパ イ ラ は、 コ マ ン ド ラ イ ン のオプシ ョ ン に従っ て適切なセ ク シ ョ ン を生成 し ま す。 こ れ ら のオプ シ ョ ンの詳細については、 『エンベデ ッ ド シ ス テ ム ツール リ フ ァ レ ン ス マニ ュ アル』 の 「GNU コ ンパ イ ラ ツール」 の章を参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 148 第 4 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス 割 り 込み、 ブ レー ク、 例外処理 MicroBlaze は、 表 4-4 にあ る よ う に、 割 り 込みお よ び例外処理のためのア ド レ ス ロ ケーシ ョ ン を想定 し ます。 こ れ ら の ロ ケーシ ョ ンで、 コ ー ド は適切なハン ド ラ にジ ャ ンプす る よ う に記述 さ れてい ます。 表 4‐4 : 割 り 込みおよび例外処理 イ ベン ト ハー ド ウ ェ アがジ ャ ン プする位置 ソ フ ト ウ ェ ア ラ ベル 開始 / リ セ ッ ト C_BASE_VECTORS + 0x0 _start ユーザー例外 C_BASE_VECTORS + 0x8 _exception_handler 0x101 割 り 込み C_BASE_VECTORS + ブ レー ク (HW/SW) C_BASE_VECTORS + 0x18 ハー ド ウ ェ ア例外 C_BASE_VECTORS + 0x20 今後のサポー ト のためザ イ リ ン ク ス に よ り 予約 C_BASE_VECTORS + 0x28 C_BASE_VECTORS + 0x4F _interrupt_handler _hw_exception_handler - 1. 低レ イ テ ン シ割 り 込みモー ド の場合、 ベ ク タ ー ア ド レ ス は割 り 込み コ ン ト ロ ー ラ ーに よ り 提供 さ れます。 こ れ ら の ロ ケーシ ョ ンで予期 さ れ る コ ー ド は、 次の よ う にな り ます。 crt0.o 初期化フ ァ イ ルは、 mb-gcc コ ンパ イ ラ に よ り 、 リ ン キ ン グのため mb-ld に渡 さ れます。 こ の フ ァ イ ルは、 例外ハン ド ラ に適切な ア ド レ ス を設定 し ます。 次の コ ー ド は、 例外、 ブ レ ー ク 、 割 り 込みハ ン ド ラ に制御を渡す コ ー ド で、 C_BASE_VECTORS にはデフ ォ ル ト の 0x00000000 が設定 さ れてい る も の と し ます。 0x00: 0x04: 0x08: 0x0c: 0x10: 0x14: 0x18: 0x1c: 0x20: 0x24: bri nop imm bri imm bri imm bri imm bri _start1 high bits of address (user exception handler) _exception_handler high bits of address (interrupt handler) _interrupt_handler high bits of address (break handler) low bits of address (break handler) high bits of address (HW exception handler _hw_exception_handler 低レ イ テ ン シの割 り 込みモー ド の場合、 こ のモー ド を使用 し てい る 各割 り 込みに対 し 、 直接、 制御は割 り 込みハン ド ラ に渡 さ れます。 こ の場合、 使用 さ れてい る レ ジ ス タ の格納お よ び復帰は各ハン ド ラ が行い ます。 MicroBlaze C コ ン パ イ ラ (mb-gcc) の fast_interrupt と い う 属性を使用する と 、こ の タ ス ク を コ ンパ イ ラ で実行す る よ う に設定で き ます。 void interrupt_handler_name() __attribute__((fast_interrupt)); MicroBlaze では 32 ビ ッ ト を使用 し て指定可能な ア ド レ ス ロ ケーシ ョ ンに例外お よ び割 り 込みのハン ド ラ ルーチン を 配置す る こ と がで き ます。 ユーザー例外ハン ド ラ の コ ー ド は _exception_handler と い う ラ ベル、 ハー ド ウ ェ ア例外ハン ド ラ は _hw_exception_handler と い う ラ ベルで始ま り ますが、 低レ イ テ ン シ ハン ド ラ を使用 し ない割 り 込みの場合は、 割 り 込みハン ド ラ コ ー ド は _interrupt_handler と い う ラ ベルで始ま り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 149 第 4 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス 現在の MicroBlaze シ ス テ ムには、 割 り 込み、 ブ レー ク 、 ユーザー例外処理に対 し ダ ミ ー ルーチンがあ り 、 ユーザー が変更す る こ と がで き ます。 こ れ ら のルーチン を上書き し 、 ユーザーの割 り 込みお よ び例外ハン ド ラ を リ ン ク す る に は、 特定の属性を使用 し てハン ド ラ コ ー ド を定義す る 必要があ り ます。 使用 さ れてい る レ ジ ス タ を格納お よ び復帰 さ せ、 ハン ド ラ か ら 戻る ための rtid 命令を省 く コ ー ド を コ ンパ イ ラ が生 成す る よ う に、 interrupt_handler と い う 属性を使用 し て、 割 り 込みハン ド ラ コ ー ド を定義す る 必要があ り ます。 void function_name() __attribute__((interrupt_handler)); 使用 さ れてい る レ ジ ス タ を格納お よ び復帰 さ せ、ハン ド ラ か ら 戻る ための rtid 命令を省 く コ ー ド を コ ンパ イ ラ が生成 す る よ う に、 break_handler と い う 属性を使用 し て、 ブ レー ク ハン ド ラ コ ー ド を定義す る 必要があ り ます。 void function_name() __attribute__((break_handler)); ユーザー例外ハン ド ラ コ ー ド は、 svc_handler ま たは svc_table_handler の属性を使用 し て、 定義す る 必要が あ り ます。 void function_name() __attribute__((svc_handler)); void function_name() __attribute__((svc_table_handler (ID))); 最初の属性は、 コ ンパ イ ラ が brki rD,0x8 命令を使用 し て、 ハン ド ラ への間接的な コ ールを省 く よ う に し 、 ま たハ ン ド ラ か ら 戻 る ための rtbd 命令を省 く よ う に し ます。 つま り 、 MMU が イ ネーブルにな っ てい る 場合、 ハン ド ラ 関 数は特権モー ド で実行 さ れ る と い う こ と です。 2 番目の属性はサービ ス ID を使用 し て宣言 さ れてい ます。 こ の場合、 コ ンパ イ ラ は brki rD,0x8 命令を使用 し て、 レ ジ ス タ R18 の こ の ID と 、それに続 く _exception_handler への間接的な コ ールを格納す る ための コ ー ド を省 き 、 ま た ハ ン ド ラ か ら 戻 る た め の rtbd 命令 を 省 き ま す。 R18 の ID に 基づ い て、 該当す る ハ ン ド ラ を 呼び出す _exception_handler 関数を上書 き す る 必要があ り ます。 割 り 込みハン ド ラ の属性の使用方法や構文に関 し ては、『エンベデ ッ ド シ ス テ ム ツール リ フ ァ レ ン ス マニ ュ アル』 の 「GNU コ ンパ イ ラ ツール」 の章を参照 し て く だ さ い。 XMD (Xilinx Microprocessor Debug) ま たは SDK (Software Development Kit) で ソ フ ト ウ ェ ア ブ レー ク ポ イ ン ト が使用 さ れ る 場合は、 ブ レー ク (HW/SW) ア ド レ ス ロ ケーシ ョ ンは、 ソ フ ト ウ ェ ア ブ レー ク ポ イ ン ト を処理す る ために予約 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 150 第 5 章 MicroBlaze 命令セ ッ ト アーキテ ク チ ャ こ の章では、 MicroBlaze™ の命令セ ッ ト アーキ テ ク チ ャ について説明 し ます。 記号の説明 こ の章で使用 さ れてい る 記号は表 5-1 に定義 さ れてい ます。 表 5‐1 : 記号の説明 記号 意味 + 加算 - 減算 乗算 / 除算 ビ ッ ト 単位の論理演算子 AND ビ ッ ト 単位の論理演算子 OR ビ ッ ト 単位の論理演算子 XOR x ビ ッ ト 単位の x の補数 代入 >> 右シ フ ト << 左シ フ ト rx レジス タ x x[i] レ ジ ス タ x のビ ッ ト i x[i:j] レ ジ ス タ x のビ ッ ト i か ら j まで = 相等 不一致 > 大な り >= それ以上 < 小な り <= それ以下 | 信号選択 sext(x) 符号拡張 x MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 151 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 表 5‐1 : 記号の説明 (続き) 記号 Mem(x) FSLx 意味 ア ド レ ス x での メ モ リ ロ ケーシ ョ ン AXI4-Stream イ ン タ ーフ ェ イ ス x LSW(x) x の最下位 ワー ド isDnz(x) 浮動小数点 : x が非正規化数な ら True isInfinite(x) 浮動小数点 : x が +¥ ま たは -¥ な ら True isPosInfinite(x) 浮動小数点 : x が +¥ な ら True isNegInfinite(x) 浮動小数点 : x -¥ な ら True isNaN(x) 浮動小数点 : x が quiet NaN ま たは signaling NaN な ら True isZero(x) 浮動小数点 : x が +0ま たは -0な ら True isQuietNaN(x) 浮動小数点 : x が quiet NaN な ら True isSigNaN(x) 浮動小数点 : x が signaling NaN な ら True signZero(x) 浮動小数点 : x > 0 な ら +0 を返 し 、 x < 0 な ら -0 を返す signInfinite(x) 浮動小数点 : x > 0 な ら +¥ を返 し 、 x < 0 な ら -¥ を返す MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 152 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ フ ォ ーマ ッ ト MicroBlaze は タ イ プ A お よ び タ イ プ B と い う 2 つの命令フ ォ ーマ ッ ト を使用 し ます。 タ イ プ A タ イ プ A は レ ジ ス タ 間の命令に使用 さ れ ます。 オペ コ ー ド 、 デス テ ィ ネーシ ョ ン レ ジ ス タ を 1 つ、 ソ ー ス レ ジ ス タ を 2 つ含んでい ます。 オペ コ ー ド 0 デス テ ィ ネーシ ョ ン レ ジス タ ソ ース レ ジ ス タ A ソ ース レ ジ ス タ B 0 6 11 21 16 0 0 0 0 0 0 0 0 0 0 31 タ イ プ B タ イ プ B は レ ジ ス タ と 即値の命令に使用 さ れ ま す。 オペ コ ー ド 、 デ ス テ ィ ネーシ ョ ン レ ジ ス タ を 1 つ、 ソ ース レ ジ ス タ を 1 つ、 ソ ース の 16 ビ ッ ト の即値を含んでい ます。 オペ コ ー ド 0 デス テ ィ ネーシ ョ ン レ ジス タ ソ ース レ ジ ス タ A 6 11 即値 16 31 命令 こ のセ ク シ ョ ン では MicroBlaze の命令について説明 し ま す。 命令はアル フ ァ ベ ッ ト 順に リ ス ト さ れてい ます。 各命令に対 し 、 ニーモニ ッ ク 、 エ ン コ ーデ ィ ン グ、 説明、 セマ ン テ ィ ク ス の擬似 コ ー ド 、 変更 さ れ る レ ジ ス タ の リ ス ト がザ イ リ ン ク ス か ら 提供 さ れてい ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 153 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ add 0 Arithmetic Add add rD、 rA、 rB 加算 addc rD、 rA、 rB キ ャ リ ー付 き 加算 addk rD、 rA、 rB 加算お よ びキ ャ リ ー保持 addkc rD、 rA、 rB キ ャ リ ー付 き 加算お よ びキ ャ リ ー保持 0 0 K C 0 0 rD 6 rA 1 1 rB 1 6 0 0 0 0 0 2 1 0 0 0 0 0 0 3 1 説明 レ ジ ス タ rA お よ び rB の内容の合計は、 レ ジ ス タ rD に配置 さ れます。 命令の ビ ッ ト 3 (図では K) は、 ニーモニ ッ ク addk の場合 1 にセ ッ ト さ れ ます。 命令の ビ ッ ト 4 (図では C) は、ニーモニ ッ ク addc の場合 1 にセ ッ ト さ れ ます。ニーモニ ッ ク addkc の場合は両方の ビ ッ ト が 1 にセ ッ ト さ れます。 add 命令で ビ ッ ト 3 がセ ッ ト さ れてい る と (addk、 addkc)、 命令実行の結果にかかわ ら ず、 キ ャ リ ー フ ラ グは前の値を維持 し ます。 ビ ッ ト 3 が ク リ アにな る と (add、 addc)、 キ ャ リ ー フ ラ グは命令の実行の影響 を受け ます。 命令の ビ ッ ト 4 が 1 にセ ッ ト さ れてい る 場合 (addc、 addkc)、 キ ャ リ ー フ ラ グの内容 (MSR[C]) が、 命令実 行に影響 し ます。 ビ ッ ト 4 が ク リ アにな る と (add、 addk)、 キ ャ リ ー フ ラ グの内容は命令実行には影響 し ません (標準加算の場合)。 擬似 コ ー ド if C = 0 then (rD) (rA) + (rB) else (rD) (rA) + (rB) + MSR[C] if K = 0 then MSR[C] CarryOut 変更 さ れる レ ジ ス タ • rD • MSR[C] レ イテンシ 1 サイ クル 注記 命令オペ コ ー ド の C ビ ッ ト は、 MSB のキ ャ リ ー ビ ッ ト と は同 じ ではあ り ません。 “add r0, r0, r0” (= 0x00000000) 命令は、 コ ンパ イ ラ では決 し て使用 さ れず、 通常、 メ モ リ が初期化 さ れてい な い こ と を 示 し ま す。 無 効 な 命 令 例 外 を 使 用 し て い る 場 合 は、 MicroBlaze のパ ラ メ ー タ ーを C_OPCODE_0x0_ILLEGAL=1 に設定 し て、 こ れ ら の命令を捕捉す る こ と がで き ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 154 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ addi Arithmetic Add Immediate 0 addi rD、 rA、 IMM 即値加算 addic rD、 rA、 IMM addik rD、 rA、 IMM 即値加算お よ びキ ャ リ ー保持 addikc rD、 rA、 IMM 0 1 K C 0 0 キ ャ リ ー付 き 即値加算 キ ャ リ ー付 き 即値加算お よ びキ ャ リ ー保持 rD 6 rA IMM 1 1 1 6 3 1 説明 レ ジ ス タ rA の内容お よ び IMM フ ィ ール ド の値 (32 ビ ッ ト に符号拡張 さ れた も の) の合計が レ ジ ス タ rD に配置 さ れ ます。 命令の ビ ッ ト 3 (図では K) は、 ニーモニ ッ ク addik の場合 1 にセ ッ ト さ れ ます。 命令の ビ ッ ト 4 (図では C) は、 ニーモニ ッ ク addic の場合 1 にセ ッ ト さ れ ます。 ニーモニ ッ ク addikc の場合は両 方の ビ ッ ト が 1 にセ ッ ト さ れ ます。 addi 命令で ビ ッ ト 3 がセ ッ ト さ れてい る と (addik、 addikc)、 命令実行の結果にかかわ ら ず、 キ ャ リ ー フ ラ グは前の値を維持 し ます。 ビ ッ ト 3 が ク リ アにな る と (addi、 addic)、 キ ャ リ ー フ ラ グは命令の実行の影響 を受け ます。 命令の ビ ッ ト 4 が 1 にセ ッ ト さ れてい る 場合 (addic、 addikc)、 キ ャ リ ー フ ラ グの内容 (MSR[C]) が、 命令 実行に影響 し ま す。 ビ ッ ト 4 が ク リ アにな る と (addi、 addik)、 キ ャ リ ー フ ラ グの内容は命令実行には影 響 し ません (標準加算の場合)。 擬似 コ ー ド if C = 0 then (rD) (rA) + sext(IMM) else (rD) (rA) + sext(IMM) + MSR[C] if K = 0 then MSR[C] CarryOut 変更 さ れる レ ジ ス タ • rD • MSR[C] レ イテンシ 1 サイ クル 注記 命令オペ コ ー ド の C ビ ッ ト は、 MSB のキ ャ リ ー ビ ッ ト と は同 じ ではあ り ません。 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 155 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ and Logical AND and 1 0 0 rD、 rA、 rB 0 0 1 0 rD 6 rA 1 1 rB 1 6 0 2 1 0 0 0 0 0 0 0 0 0 0 3 1 説明 レ ジ ス タ rA の内容が レ ジ ス タ rB の内容 と 一緒に AND さ れていて、 その結果が レ ジ ス タ rD に配置 さ れ ます。 擬似 コ ー ド (rD) (rA) (rB) 変更 さ れる レ ジ ス タ • rD レ イテンシ 1 サイ クル MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 156 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ andi Logial AND with Immediate andi 1 0 1 rD、 rA、 IMM 0 0 1 0 rD 6 rA 1 1 IMM 1 6 3 1 説明 レ ジ ス タ rA の内容が IMM フ ィ ール ド の値 (32 ビ ッ ト に符号拡張 さ れた も の) と 一緒に AND さ れていて、 その結果が レ ジ ス タ rD に配置 さ れ ます。 擬似 コ ー ド (rD) (rA) sext(IMM) 変更 さ れる レ ジ ス タ • rD レ イテンシ 1 サイ クル 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 157 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ and n 1 Logical AND NOT andn 0 0 rD、 rA、 rB 0 1 1 0 rD 6 rA 1 1 rB 1 6 0 2 1 0 0 0 0 0 0 0 0 0 0 3 1 説明 レ ジ ス タ rA の内容が レ ジ ス タ rB の内容の論理補数 と 一緒に AND さ れていて、 その結果が レ ジ ス タ rD に配置 さ れ ます。 擬似 コ ー ド (rD) (rA) (rB) 変更 さ れる レ ジ ス タ • rD レ イテンシ 1 サイ クル MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 158 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ andni Logical AND NOT with Immediate andni 1 0 1 rD、 rA、 IMM 0 1 1 0 rD 6 rA 1 1 IMM 1 6 3 1 説明 IMM フ ィ ール ド は 32 ビ ッ ト に符号拡張 さ れてい ます。 レ ジ ス タ rA の内容が拡張 さ れた IMM フ ィ ー ル ド の論理補数 と 一緒に AND さ れていて、 その結果が レ ジ ス タ rD に配置 さ れ ます。 擬似 コ ー ド (rD) (rA) (sext(IMM)) 変更 さ れる レ ジ ス タ • rD レ イテンシ 1 サイ クル 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡 張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を 参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 159 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ beq 1 Branch if Equal beq rA、 rB 等 し い場合は分岐 beqd rA、 rB 遅延 を 含め て等 し い場合は分岐 0 0 1 1 1 0 D 0 0 0 0 6 rA 1 1 rB 1 6 0 2 1 0 0 0 0 0 0 0 0 0 0 3 1 説明 rA が 0 な ら ば、 rB のオ フ セ ッ ト 値にあ る 命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + rB にあ る 命令に な り ます。 ニーモニ ッ ク beqd は D ビ ッ ト を セ ッ ト し ます。 D ビ ッ ト は、 分岐遅延ス ロ ッ ト があ る かないか を判断 し ます。 D ビ ッ ト がセ ッ ト さ れてい る 場合、 遅延ス ロ ッ ト があ り 、 分岐の後に続 く 命令 (すなわち分岐遅延 ス ロ ッ ト にあ る 命令) は、 分岐先の命令を実行す る 前に実行完了す る こ と がで き ます。 D ビ ッ ト がセ ッ ト さ れていない場合は、 遅延ス ロ ッ ト はな く 、 分岐後に実行 さ れ る 命令は、 分岐先の命令にな り ます。 擬似 コ ー ド If rA = 0 then PC PC + rB else PC PC + 4 if D = 1 then allow following instruction to complete execution 変更 さ れる レ ジ ス タ • PC レ イテンシ • 1 サ イ ク ル (分岐 し ていない場合) • 2 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れてい る 場合) • 3 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れていない場合) 注記 遅延 ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レ ー ク の命令で使用す る こ と はで き ま せん。 割 り 込みお よ び外 部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で先送 り さ れ ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 160 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ beqi Branch Immediate if Equal 1 beqi rA、 IMM 等 し い場合は即値分岐 beqid rA、 IMM 遅延 を 含め て等 し い場合は即値分岐 0 1 1 1 1 0 D 0 0 0 0 6 rA 1 1 IMM 1 6 3 1 説明 rA が 0 な ら ば、 IMM のオ フ セ ッ ト 値にあ る 命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + IMM にあ る 命 令にな り ます。 ニーモニ ッ ク beqid は D ビ ッ ト を セ ッ ト し ます。 D ビ ッ ト は、 分岐遅延ス ロ ッ ト があ る かないか を判断 し ます。 D ビ ッ ト がセ ッ ト さ れてい る 場合、 遅延ス ロ ッ ト があ り 、 分岐の後に続 く 命令 (すなわち分岐遅延 ス ロ ッ ト にあ る 命令) は、 分岐先の命令を実行す る 前に実行完了す る こ と がで き ます。 D ビ ッ ト がセ ッ ト さ れていない場合は、 遅延ス ロ ッ ト はな く 、 分岐後に実行 さ れ る 命令は、 分岐先の命令にな り ます。 擬似 コ ー ド If rA = 0 then PC PC + sext(IMM) else PC PC + 4 if D = 1 then allow following instruction to complete execution 変更 さ れる レ ジ ス タ • PC レ イテンシ • 1 サ イ ク ル (分岐 し ていない、 ま たは正 し く 分岐予測が行われ る 場合) • 2 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れてい る 場合) • 3 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れていない場合、 ま たは分岐予測が間違っ てい る 場合) 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を参照 し て く だ さ い。 遅延 ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レ ー ク の命令で使用す る こ と はで き ま せん。 割 り 込みお よ び外 部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で先送 り さ れ ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 161 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ bge 1 Branch if Greater or Equal bge rA、 rB その値以上の場合は分岐 bged rA、 rB 遅延 を 含め て その値以上の場合は分岐 0 0 1 1 1 0 D 0 1 0 1 6 rA 1 1 rB 1 6 0 2 1 0 0 0 0 0 0 0 0 0 0 3 1 説明 rA が 0 以上な ら ば、 rB のオ フ セ ッ ト 値にあ る 命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + rB にあ る 命 令にな り ます。 ニーモニ ッ ク bged は D ビ ッ ト を セ ッ ト し ます。 D ビ ッ ト は、 分岐遅延ス ロ ッ ト があ る かないか を判断 し ます。 D ビ ッ ト がセ ッ ト さ れてい る 場合、 遅延ス ロ ッ ト があ り 、 分岐の後に続 く 命令 (すなわち分岐遅延 ス ロ ッ ト にあ る 命令) は、 分岐先の命令を実行す る 前に実行完了す る こ と がで き ます。 D ビ ッ ト がセ ッ ト さ れていない場合は、 遅延ス ロ ッ ト はな く 、 分岐後に実行 さ れ る 命令は、 分岐先の命令にな り ます。 擬似 コ ー ド If rA >= 0 then PC PC + rB else PC PC + 4 if D = 1 then allow following instruction to complete execution 変更 さ れる レ ジ ス タ • PC レ イテンシ • 1 サ イ ク ル (分岐 し ていない場合) • 2 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れてい る 場合) • 3 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れていない場合) 注記 遅延 ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レ ー ク の命令で使用す る こ と はで き ま せん。 割 り 込みお よ び外 部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で先送 り さ れ ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 162 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ bgei 1 Branch Immediate if Greater or Equal bgei rA、 IMM その値以上の場合は即値分岐 bgeid rA、 IMM 遅延 を 含め て その値以上の場合は即値分岐 0 1 1 1 1 0 D 0 1 0 1 6 rA 1 1 IMM 1 6 3 1 説明 rA が 0 以上な ら ば、 IMM のオ フ セ ッ ト 値にあ る 命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + IMM にあ る 命令にな り ます。 ニーモニ ッ ク bgeid は D ビ ッ ト を セ ッ ト し ます。 D ビ ッ ト は、 分岐遅延ス ロ ッ ト があ る かないか を判断 し ます。 D ビ ッ ト がセ ッ ト さ れてい る 場合、 遅延ス ロ ッ ト があ り 、 分岐の後に続 く 命令 (すなわち分岐遅延 ス ロ ッ ト にあ る 命令) は、 分岐先の命令を実行す る 前に実行完了す る こ と がで き ます。 D ビ ッ ト がセ ッ ト さ れていない場合は、 遅延ス ロ ッ ト はな く 、 分岐後に実行 さ れ る 命令は、 分岐先の命令にな り ます。 擬似 コ ー ド If rA >= 0 then PC PC + sext(IMM) else PC PC + 4 if D = 1 then allow following instruction to complete execution 変更 さ れる レ ジ ス タ • PC レ イテンシ • 1 サ イ ク ル (分岐 し ていない、 ま たは正 し く 分岐予測が行われ る 場合) • 2 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れてい る 場合) • 3 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れていない場合、 ま たは分岐予測が間違っ てい る 場合) 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を参照 し て く だ さ い。 遅延 ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レ ー ク の命令で使用す る こ と はで き ま せん。 割 り 込みお よ び外 部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で先送 り さ れ ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 163 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ bgt 1 Branch if Greater Than bgt rA、 rB その値 よ り 大 き い場合は分岐 bgtd rA、 rB 遅延 を 含め て その値 よ り 大 き い場合は 分岐 0 0 1 1 1 0 D 0 1 0 0 6 rA 1 1 rB 1 6 0 2 1 0 0 0 0 0 0 0 0 0 0 3 1 説明 rA が 0 よ り 大 き ければ、 rB のオ フ セ ッ ト 値にあ る 命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + rB にあ る 命令にな り ます。 ニーモニ ッ ク bgtd は D ビ ッ ト を セ ッ ト し ます。 D ビ ッ ト は、 分岐遅延ス ロ ッ ト があ る かないか を判断 し ます。 D ビ ッ ト がセ ッ ト さ れてい る 場合、 遅延ス ロ ッ ト があ り 、 分岐の後に続 く 命令 (すなわち分岐遅延 ス ロ ッ ト にあ る 命令) は、 分岐先の命令を実行す る 前に実行完了す る こ と がで き ます。 D ビ ッ ト がセ ッ ト さ れていない場合は、 遅延ス ロ ッ ト はな く 、 分岐後に実行 さ れ る 命令は、 分岐先の命令にな り ます。 擬似 コ ー ド If rA > 0 then PC PC + rB else PC PC + 4 if D = 1 then allow following instruction to complete execution 変更 さ れる レ ジ ス タ • PC レ イテンシ • 1 サ イ ク ル (分岐 し ていない場合) • 2 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れてい る 場合) • 3 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れていない場合) 注記 遅延 ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レ ー ク の命令で使用す る こ と はで き ま せん。 割 り 込みお よ び外 部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で先送 り さ れ ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 164 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ bgti 1 Branch Immediate if Greater Than bgti rA、 IMM その値 よ り 大 き い場合は即値分岐 bgtid rA、 IMM 遅延 を 含め て その値 よ り 大 き い場合は即値分岐 0 1 1 1 1 0 D 0 1 0 0 6 rA 1 1 IMM 1 6 3 1 説明 rA が 0 よ り 大 き ければ、 IMM のオ フ セ ッ ト 値にあ る 命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + IMM にあ る 命令にな り ます。 ニーモニ ッ ク bgtid は D ビ ッ ト を セ ッ ト し ます。 D ビ ッ ト は、 分岐遅延ス ロ ッ ト があ る かないか を判断 し ます。 D ビ ッ ト がセ ッ ト さ れてい る 場合、 遅延ス ロ ッ ト があ り 、 分岐の後に続 く 命令 (すなわち分岐遅延 ス ロ ッ ト にあ る 命令) は、 分岐先の命令を実行す る 前に実行完了す る こ と がで き ます。 D ビ ッ ト がセ ッ ト さ れていない場合は、 遅延ス ロ ッ ト はな く 、 分岐後に実行 さ れ る 命令は、 分岐先の命令にな り ます。 擬似 コ ー ド If rA > 0 then PC PC + sext(IMM) else PC PC + 4 if D = 1 then allow following instruction to complete execution 変更 さ れる レ ジ ス タ • PC レ イテンシ • 1 サ イ ク ル (分岐 し ていない、 ま たはエ ラ ーな く 分岐予測が行われ る 場合) • 2 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れてい る 場合) • 3 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れていない場合、 ま たは分岐予測が間違っ てい る 場合) 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を参照 し て く だ さ い。 遅延 ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レ ー ク の命令で使用す る こ と はで き ま せん。 割 り 込みお よ び外 部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で先送 り さ れ ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 165 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ ble Branch if Less or Equal 1 ble rA、 rB その値以下の場合は分岐 bled rA、 rB 遅延 を 含め て その値以下の場合は分岐 0 0 1 1 1 0 D 0 0 1 1 6 rA 1 1 rB 1 6 0 2 1 0 0 0 0 0 0 0 0 0 0 3 1 説明 rA が 0 以下な ら ば、 rB のオ フ セ ッ ト 値にあ る 命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + rB にあ る 命 令にな り ます。 ニーモニ ッ ク bled は D ビ ッ ト を セ ッ ト し ます。 D ビ ッ ト は、 分岐遅延ス ロ ッ ト があ る かないか を判断 し ます。 D ビ ッ ト がセ ッ ト さ れてい る 場合、 遅延ス ロ ッ ト があ り 、 分岐の後に続 く 命令 (すなわち分岐遅延 ス ロ ッ ト にあ る 命令) は、 分岐先の命令を実行す る 前に実行完了す る こ と がで き ます。 D ビ ッ ト がセ ッ ト さ れていない場合は、 遅延ス ロ ッ ト はな く 、 分岐後に実行 さ れ る 命令は、 分岐先の命令にな り ます。 擬似 コ ー ド If rA <= 0 then PC PC + rB else PC PC + 4 if D = 1 then allow following instruction to complete execution 変更 さ れる レ ジ ス タ • PC レ イテンシ • 1 サ イ ク ル (分岐 し ていない場合) • 2 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れてい る 場合) • 3 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れていない場合) 注記 遅延 ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レ ー ク の命令で使用す る こ と はで き ま せん。 割 り 込みお よ び外 部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で先送 り さ れ ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 166 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ blei 1 Branch Immediate if Less or Equal blei rA、 IMM その値以下の場合は即値分岐 bleid rA、 IMM 遅延 を 含め て その値以下の場合は即値分岐 0 1 1 1 1 0 D 0 0 1 1 6 rA 1 1 IMM 1 6 3 1 説明 rA が 0 以下な ら ば、 IMM のオ フ セ ッ ト 値にあ る 命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + IMM にあ る 命令にな り ます。 ニーモニ ッ ク bleid は D ビ ッ ト を セ ッ ト し ます。 D ビ ッ ト は、 分岐遅延ス ロ ッ ト があ る かないか を判断 し ます。 D ビ ッ ト がセ ッ ト さ れてい る 場合、 遅延ス ロ ッ ト があ り 、 分岐の後に続 く 命令 (すなわち分岐遅延 ス ロ ッ ト にあ る 命令) は、 分岐先の命令を実行す る 前に実行完了す る こ と がで き ます。 D ビ ッ ト がセ ッ ト さ れていない場合は、 遅延ス ロ ッ ト はな く 、 分岐後に実行 さ れ る 命令は、 分岐先の命令にな り ます。 擬似 コ ー ド If rA <= 0 then PC PC + sext(IMM) else PC PC + 4 if D = 1 then allow following instruction to complete execution 変更 さ れる レ ジ ス タ • PC レ イテンシ • 1 サ イ ク ル (分岐 し ていない、 ま たはエ ラ ーな く 分岐予測が行われ る 場合) • 2 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れてい る 場合) • 3 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れていない場合、 ま たは分岐予測が間違っ てい る 場合) 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を参照 し て く だ さ い。 遅延 ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レ ー ク の命令で使用す る こ と はで き ま せん。 割 り 込みお よ び外 部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で先送 り さ れ ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 167 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ blt Branch if Less Than 1 blt rA、 rB その値 よ り 小 さ い場合は分岐 bltd rA、 rB 遅延 を 含め て その値未満の場合は分岐 0 0 1 1 1 0 D 0 0 1 0 6 rA 1 1 rB 1 6 0 2 1 0 0 0 0 0 0 0 0 0 0 3 1 説明 rA が 0 よ り 小 さ ければ、 rB のオ フ セ ッ ト 値にあ る 命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + rB にあ る 命令にな り ます。 ニーモニ ッ ク bltd は D ビ ッ ト を セ ッ ト し ます。 D ビ ッ ト は、 分岐遅延 ス ロ ッ ト があ る かないか を判断 し ます。 D ビ ッ ト がセ ッ ト さ れてい る 場合、 遅延ス ロ ッ ト があ り 、 分岐の後に続 く 命令 (すなわち分岐遅延 ス ロ ッ ト にあ る 命令) は、 分岐先の命令を実行す る 前に実行完了す る こ と がで き ます。 D ビ ッ ト がセ ッ ト さ れていない場合は、 遅延ス ロ ッ ト はな く 、 分岐後に実行 さ れ る 命令は、 分岐先の命令にな り ます。 擬似 コ ー ド If rA < 0 then PC PC + rB else PC PC + 4 if D = 1 then allow following instruction to complete execution 変更 さ れる レ ジ ス タ • PC レ イテンシ • 1 サ イ ク ル (分岐 し ていない場合) • 2 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れてい る 場合) • 3 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れていない場合) 注記 遅延 ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レ ー ク の命令で使用す る こ と はで き ま せん。 割 り 込みお よ び外 部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で先送 り さ れ ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 168 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ blti 1 Branch Immediate if Less Than blti rA、 IMM その値 よ り 小 さ い場合は即値分岐 bltid rA、 IMM 遅延 を 含め て その値未満の場合は即値分岐 0 1 1 1 1 0 D 0 0 1 0 6 rA 1 1 IMM 1 6 3 1 説明 rA が 0 よ り 小 さ ければ、 IMM のオ フ セ ッ ト 値にあ る 命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + IMM にあ る 命令にな り ます。 ニーモニ ッ ク bltid は D ビ ッ ト を セ ッ ト し ます。 D ビ ッ ト は、 分岐遅延ス ロ ッ ト があ る かないか を判断 し ます。 D ビ ッ ト がセ ッ ト さ れてい る 場合、 遅延ス ロ ッ ト があ り 、 分岐の後に続 く 命令 (すなわち分岐遅延 ス ロ ッ ト にあ る 命令) は、 分岐先の命令を実行す る 前に実行完了す る こ と がで き ます。 D ビ ッ ト がセ ッ ト さ れていない場合は、 遅延ス ロ ッ ト はな く 、 分岐後に実行 さ れ る 命令は、 分岐先の命令にな り ます。 擬似 コ ー ド If rA < 0 then PC PC + sext(IMM) else PC PC + 4 if D = 1 then allow following instruction to complete execution 変更 さ れる レ ジ ス タ • PC レ イテンシ • 1 サ イ ク ル (分岐 し ていない、 ま たはエ ラ ーな く 分岐予測が行われ る 場合) • 2 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れてい る 場合) • 3 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れていない場合、 ま たは分岐予測が間違っ てい る 場合) 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を参照 し て く だ さ い。 遅延 ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レ ー ク の命令で使用す る こ と はで き ま せん。 割 り 込みお よ び外 部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で先送 り さ れ ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 169 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ bne 1 Branch if Not Equal bne rA、 rB 等 し く な い場合は分岐 bned rA、 rB 遅延 を 含め て等 し く な い場合は分岐 0 0 1 1 1 0 D 0 0 0 1 6 rA 1 1 rB 1 6 0 2 1 0 0 0 0 0 0 0 0 0 0 3 1 説明 rA が 0 でないな ら ば、 rB のオ フ セ ッ ト 値にあ る 命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + rB にあ る 命令にな り ます。 ニーモニ ッ ク bned は D ビ ッ ト を セ ッ ト し ます。 D ビ ッ ト は、 分岐遅延ス ロ ッ ト があ る かないか を判断 し ます。 D ビ ッ ト がセ ッ ト さ れてい る 場合、 遅延ス ロ ッ ト があ り 、 分岐の後に続 く 命令 (すなわち分岐遅延 ス ロ ッ ト にあ る 命令) は、 分岐先の命令を実行す る 前に実行完了す る こ と がで き ます。 D ビ ッ ト がセ ッ ト さ れていない場合は、 遅延ス ロ ッ ト はな く 、 分岐後に実行 さ れ る 命令は、 分岐先の命令にな り ます。 擬似 コ ー ド If rA 0 then PC PC + rB else PC PC + 4 if D = 1 then allow following instruction to complete execution 変更 さ れる レ ジ ス タ • PC レ イテンシ • 1 サ イ ク ル (分岐 し ていない場合) • 2 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れてい る 場合) • 3 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れていない場合) 注記 遅延 ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レ ー ク の命令で使用す る こ と はで き ま せん。 割 り 込みお よ び外 部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で先送 り さ れ ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 170 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ bnei Branch Immediate if Not Equal 1 bnei rA、 IMM 等 し く な い場合は即値分岐 bneid rA、 IMM 遅延 を 含め て等 し く な い場合は即値分岐 0 1 1 1 1 0 D 0 0 0 1 6 rA 1 1 IMM 1 6 3 1 説明 rA が 0 でないな ら ば、 IMM のオ フ セ ッ ト 値にあ る 命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + IMM に あ る 命令にな り ます。 ニーモニ ッ ク bneid は D ビ ッ ト を セ ッ ト し ます。 D ビ ッ ト は、 分岐遅延ス ロ ッ ト があ る かないか を判断 し ます。 D ビ ッ ト がセ ッ ト さ れてい る 場合、 遅延ス ロ ッ ト があ り 、 分岐の後に続 く 命令 (すなわち分岐遅延 ス ロ ッ ト にあ る 命令) は、 分岐先の命令を実行す る 前に実行完了す る こ と がで き ます。 D ビ ッ ト がセ ッ ト さ れていない場合は、 遅延ス ロ ッ ト はな く 、 分岐後に実行 さ れ る 命令は、 分岐先の命令にな り ます。 擬似 コ ー ド If rA 0 then PC PC + sext(IMM) else PC PC + 4 if D = 1 then allow following instruction to complete execution 変更 さ れる レ ジ ス タ • PC レ イテンシ • 1 サ イ ク ル (分岐 し ていない、 ま たはエ ラ ーな く 分岐予測が行われ る 場合) • 2 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れてい る 場合) • 3 サ イ ク ル (分岐 し ていて D ビ ッ ト がセ ッ ト さ れていない場合、 ま たは分岐予測が間違っ てい る 場合) 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を参照 し て く だ さ い。 遅延 ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レ ー ク の命令で使用す る こ と はで き ま せん。 割 り 込みお よ び外 部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で先送 り さ れ ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 171 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ br Unconditional Branch 1 br rB 分岐 bra rB 絶対分岐 brd rB 遅延付 き 分岐 brad rB 遅延付 き 絶対分岐 brld rD、 rB 遅延付 き 分岐 と リ ン ク brald rD、 rB 遅延付 き 絶対分岐 と リ ン ク 0 0 1 1 0 0 rD 6 D A L 0 0 1 1 rB 1 6 0 2 1 0 0 0 0 0 0 0 0 0 0 3 1 説明 rB で決定 さ れた ア ド レ ス にあ る 命令に分岐 し ます。 ニーモニ ッ ク の brld お よ び brald は L ビ ッ ト を セ ッ ト し ます。 L ビ ッ ト がセ ッ ト さ れ る と 、 リ ン ク が実行 さ れ ます。 PC の現在値は rD に格納 さ れ ます。 ニーモニ ッ ク の bra、 brad、 お よ び brald は A ビ ッ ト を セ ッ ト し ます。 A ビ ッ ト がセ ッ ト さ れ る と 、 絶対値 に分岐 し 、 タ ーゲ ッ ト は rB の値にな り ます。 そ う でない場合は、 こ れは相対分岐で、 タ ーゲ ッ ト は PC + rB にな り ます。 ニーモニ ッ ク の brd、 brad、 brld、 お よ び brald は D ビ ッ ト を セ ッ ト し ます。 D ビ ッ ト は、 分岐遅延ス ロ ッ ト があ る かないか を判断 し ます。 D ビ ッ ト がセ ッ ト さ れてい る 場合、 遅延ス ロ ッ ト があ り 、 分岐の後に続 く 命令 (すなわち分岐遅延 ス ロ ッ ト にあ る 命令) は、 分岐先の命令を実行す る 前に実行完了す る こ と がで き ます。 D ビ ッ ト がセ ッ ト さ れていない場合は、 遅延ス ロ ッ ト はな く 、 分岐後に実行 さ れ る 命令は、 分岐先の命令 にな り ます。 擬似 コ ー ド if L = 1 then (rD) PC if A = 1 then PC (rB) else PC PC + (rB) if D = 1 then allow following instruction to complete execution 変更 さ れる レ ジ ス タ • rD • PC レ イテンシ • 2 サ イ ク ル (D ビ ッ ト がセ ッ ト さ れてい る 場合) • 3 サ イ ク ル (D ビ ッ ト がセ ッ ト さ れていない場合) MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 172 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 注記 命令 brl お よ び bral は使用で き ません。 遅延ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レー ク の命令で使用す る こ と はで き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延 ス ロ ッ ト の分岐が完了す る ま で 先送 り さ れ ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 173 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ bri Unconditional Branch Immediate 1 bri IMM 即値分岐 brai IMM 絶対即値分岐 brid IMM 遅延付 き 即値分岐 braid IMM 遅延付 き 絶対即値分岐 brlid rD、 IMM 遅延付 き 分岐 と 即値 リ ン ク bralid rD、 IMM 遅延付 き 絶対分岐 と 即値 リ ン ク 0 1 1 1 0 0 rD 6 D 1 1 A L 0 0 IMM 1 6 3 1 説明 IMM (32 ビ ッ ト に符号拡張) で決定 さ れた ア ド レ ス にあ る 命令に分岐 し ます。 ニーモニ ッ ク の brlid お よ び bralid は L ビ ッ ト を セ ッ ト し ます。 L ビ ッ ト がセ ッ ト さ れ る と 、 リ ン ク が実 行 さ れます。 PC の現在値は rD に格納 さ れます。 ニーモニ ッ ク の brai、 braid 、 お よ び bralid は A ビ ッ ト を セ ッ ト し ま す。 A ビ ッ ト がセ ッ ト さ れ る と 、 絶 対値に分岐 し 、 タ ーゲ ッ ト は IMM の値にな り ます。 そ う でない場合は、 こ れは相対分岐で、 タ ーゲ ッ ト は PC + IMM にな り ます。 ニーモ ニ ッ ク の brid、 braid、 brlid、 お よ び bralid は D ビ ッ ト を セ ッ ト し ま す。 D ビ ッ ト は、 分岐遅延 ス ロ ッ ト があ る かないか を判断 し ます。 D ビ ッ ト がセ ッ ト さ れてい る 場合、 遅延ス ロ ッ ト があ り 、 分岐の後 に続 く 命令 (すなわち分岐遅延 ス ロ ッ ト にあ る 命令) は、 分岐先の命令を実行す る 前に実行完了す る こ と がで き ます。 D ビ ッ ト がセ ッ ト さ れていない場合は、 遅延ス ロ ッ ト はな く 、 分岐後に実行 さ れ る 命令は、 分岐先の命令にな り ます。 特別な ケース と し て、MicroBlaze が MMU を使用す る よ う に設定 さ れていて (C_USE_MMU >= 1)、ユーザー ベ ク タ ー例外 を 実行す る ため 「bralid rD, C_BASE_VECTORS+0x8」 を 使用 し て い る 場合、 マ シ ン ス テー タ ス レ ジ ス タ ビ ッ ト のユーザー モー ド と 仮想モー ド が ク リ アにな り ます。 擬似 コ ー ド if L = 1 then (rD) PC if A = 1 then PC sext(IMM) else PC PC + sext(IMM) if D = 1 then allow following instruction to complete execution if D = 1 and A = 1 and L = 1 and IMM = C_BASE_VECTORS+0x8 then MSR[UMS] MSR[UM] MSR[VMS] MSR[VM] MSR[UM] 0 MSR[VM] 0 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 174 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 変更 さ れる レ ジ ス タ • rD • PC • MSR[UM]、 MSR[VM] レ イテンシ • 1 サ イ ク ル (正 し く 分岐予測が行われ る 場合) • 2 サ イ ク ル (D ビ ッ ト がセ ッ ト さ れてい る 場合) • 3 サ イ ク ル (D ビ ッ ト がセ ッ ト さ れていない場合、 ま たは分岐予測が間違っ てい る 場合) 注記 命令 brli お よ び brali は使用で き ません。 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を参照 し て く だ さ い。 遅延 ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レ ー ク の命令で使用す る こ と はで き ま せん。 割 り 込みお よ び外 部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で先送 り さ れ ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 175 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ brk Break brk 1 0 rD、 rB 0 1 1 0 0 rD 6 0 1 1 0 11 0 rB 16 0 21 0 0 0 0 0 0 0 0 0 0 31 説明 rB のア ド レ ス値にあ る 命令に分岐お よ び リ ン ク し ます。 PC の現在値は rD に格納 さ れます。 MSR の BIP フ ラ グがセ ッ ト さ れ、 予約ビ ッ ト が ク リ アにな り ます。 MicroBlaze が MMU を使用す る よ う に (C_USE_MMU >= 1) コ ン フ ィ ギ ュ レー ト さ れてい る 場合、 こ の命 令は特権命令です。 つま り 、 命令がユーザー モー ド (MSR[UM] = 1) で実行 さ れ る と 、 特権命令例外が発 生 し ます。 擬似 コ ー ド if MSR[UM] = 1 then ESR[EC] 00111 else (rD) PC PC (rB) MSR[BIP] Reservation 変更 さ れる レ ジ ス タ • rD • PC • MSR[BIP] • ESR[EC] (特権命令例外が生成 さ れ る 場合) レ イテンシ • 3 サイ クル MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 176 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ brki Break Immediate brki 1 0 1 rD、 IMM 1 1 0 0 rD 6 0 1 1 0 11 0 IMM 16 31 説明 IMM (32 ビ ッ ト に符号拡張) のア ド レ ス値にあ る 命令に分岐お よ び リ ン ク し ます。 PC の現在値は rD に格 納 さ れます。 MSR の BIP フ ラ グがセ ッ ト さ れ、 予約ビ ッ ト が ク リ アにな り ます。 MicroBlaze が MMU を使用す る よ う に設定 さ れてい る と (C_USE_MMU >= 1)、 こ の命令は特権命令ですが、 ソ フ ト ウ ェ ア ブ レ ー ク を 実 行 す る た め 「brki rD, C_BASE_VECTORS+0x8」 ま た は 「brki rD, C_BASE_VECTORS+0x18」 が使用 さ れて い る と き は特殊ケー ス な ので、 こ の場合 を除 き ま す。 つ ま り 、 こ の特殊な ケース を除いて、 命令がユーザー モー ド ((MSR[UM] = 1) で実行 さ れ る と 、 特権命令例外が発 生 し ます。 特別な ケース と し て、 MicroBlaze が MMU を使用す る よ う に設定 さ れていて (C_USE_MMU >= 1)、 ソ フ ト ウ ェ ア ブ レー ク を実行す る ため 「brki rD, C_BASE_VECTORS+0x8」 ま たは 「brki rD, C_BASE_VECTORS+0x18」 を使用 し てい る 場合、 マシ ン ス テー タ ス レ ジ ス タ ビ ッ ト のユーザー モー ド と 仮想モー ド が ク リ アにな り ます。 擬似 コ ー ド if MSR[UM] and IMM C_BASE_VECTORS+0x8 and IMM C_BASE_VECTORS+0x18 then ESR[EC] 00111 else (rD) PC PC sext(IMM) MSR[BIP] Reservation if IMM = C_BASE_VECTORS+0x8 or IMM = C_BASE_VECTORS+0x18 then MSR[UMS] MSR[UM]MSR[UM] 0 MSR[VMS] MSR[VM]MSR[VM] 0 変更 さ れる レ ジ ス タ • rD (例外が生成 さ れない場合。 例外が生成 さ れ る と こ の レ ジ ス タ は変更 さ れません) • PC • MSR[BIP]、 MSR[UM]、 MSR[VM] • ESR[EC] (特権命令例外が生成 さ れ る 場合) レ イテンシ • 3 サイ クル 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を参照 し て く だ さ い。 特殊な ケース と し て、 IMM 命令の後に ソ フ ト ウ ェ ア ブ レー ク を許可す る C_BASE_VECTORS の値に関係 な く 、 C_USE_DEBUG が設定 さ れてい る と 、 IMM 命令は ソ フ ト ウ ェ ア ブ レー ク 「brki rD, 0x18」 を上 書 き し ません。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 177 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ bs Barrel Shift 0 bsrl rD、 rA、 rB バ レ ル シ フ ト ( 右、 論理 ) bsra rD、 rA、 rB バ レ ル シ フ ト ( 右、 算術 ) bsll rD、 rA、 rB バ レ ル シ フ ト ( 左、 論理 ) 1 0 0 0 1 0 rD 6 rA 1 1 rB 1 6 S T 0 0 0 0 0 0 0 0 2 1 0 3 1 説明 レ ジ ス タ rB で指定 し た値分、 レ ジ ス タ rA の内容を シ フ ト し 、 レ ジ ス タ rD に結果を出力 し ます。 ニーモニ ッ ク bsll は S ビ ッ ト (サ イ ド ビ ッ ト ) を セ ッ ト し ます。 S ビ ッ ト がセ ッ ト さ れてい る 場合は、 バ レ ル シ フ ト は左にシ フ ト し ます。 ニーモニ ッ ク の bsrl お よ び bsra は S ビ ッ ト を ク リ アに し 、 右にシ フ ト し ます。 ニーモニ ッ ク bsra は T ビ ッ ト ( タ イ プ ビ ッ ト ) を セ ッ ト し ます。 T ビ ッ ト がセ ッ ト さ れてい る 場合、 バ レ ル シ フ ト は算術型にな り ます。 ニーモニ ッ ク の bsrl お よ び bsll は T ビ ッ ト を ク リ アに し 、 シ フ ト は論理 型な り ます。 擬似 コ ー ド if S = 1 then (rD) (rA) (rB)[27:31] else if T = 1 then if ((rB)[27:31]) 0 then (rD)[0:(rB)[27:31]-1] (rA)[0] (rD)[(rB)[27:31]:31] (rA) (rB)[27:31] else (rD) (rA) else (rD) (rA) (rB)[27:31] 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 こ れ ら の命令はオプ シ ョ ン です。 こ れ ら の命令 を 使用す る には、 バ レ ル シ フ ト 命令 を 使用す る よ う に (C_USE_BARREL=1)、 MicroBlaze を コ ン フ ィ ギ ュ レー ト す る 必要があ り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 178 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ bsi Barrel Shift Immediate 0 bsrli rD、 rA、 IMM バ レ ル シ フ ト ( 右、 論理即値 ) bsrai rD、 rA、 IMM バ レ ル シ フ ト ( 右、 算術即値 ) bslli rD、 rA、 IMM バ レ ル シ フ ト ( 左、 論理即値 ) 1 1 0 0 1 0 rD 6 rA 0 1 1 0 1 6 0 0 0 S 2 1 T 0 0 0 0 IMM 2 7 3 1 説明 IMM で指定 し た値分、 レ ジ ス タ rA の内容を シ フ ト し 、 レ ジ ス タ rD に結果を出力 し ます。 ニーモニ ッ ク bsll は S ビ ッ ト (サ イ ド ビ ッ ト ) を セ ッ ト し ます。 S ビ ッ ト がセ ッ ト さ れてい る 場合は、 バ レ ル シ フ ト は左にシ フ ト し ます。 ニーモニ ッ ク の bsrl お よ び bsra は S ビ ッ ト を ク リ アに し 、 右にシ フ ト し ます。 ニーモニ ッ ク bsra は T ビ ッ ト ( タ イ プ ビ ッ ト ) を セ ッ ト し ます。 T ビ ッ ト がセ ッ ト さ れてい る 場合、 バ レ ル シ フ ト は算術型にな り ます。 ニーモニ ッ ク の bsrl お よ び bsll は T ビ ッ ト を ク リ アに し 、 シ フ ト は論理 型な り ます。 擬似 コ ー ド if S = 1 then (rD) (rA) IMM else if T = 1 then if IMM 0 then (rD)[0:IMM-1] (rA)[0] (rD)[IMM:31] (rA) IMM else (rD) (rA) else (rD) (rA) IMM 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 こ れ ら は タ イ プ B の命令ではあ り ません。 先行す る IMM 命令か ら の影響はあ り ません。 こ れ ら の命令はオプ シ ョ ン です。 こ れ ら の命令 を 使用す る には、 バ レ ル シ フ ト 命令 を 使用す る よ う に (C_USE_BARREL=1)、 MicroBlaze を コ ン フ ィ ギ ュ レー ト す る 必要があ り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 179 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ clz Count Leading Zeros clz 1 0 rD、 rA 0 1 0 0 0 rA で前ゼ ロ を カ ウ ン ト rD 6 rA 1 1 0 0 1 6 0 0 0 0 0 0 1 1 1 0 0 0 0 0 2 1 3 1 説明 こ の命令は、 レ ジ ス タ rA にあ る 前ゼ ロ を最下位ビ ッ ト か ら カ ウ ン ト し ます。 0 か ら 32 ま でのカ ウ ン ト 値 は レ ジ ス タ rD に格納 さ れます。 rA が 0 の と き rD の結果値は 32 で、 rA が 0xFFFFFFFF の と き 結果値は 0 にな り ます。 擬似 コ ー ド n 0 while (rA)[n] = 0 n n + 1 (rD) n 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サイ クル 注記 こ の命令は C_USE_PCMP_INSTR を 1 に設定 し てい る 場合のみ使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 180 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ cmp Integer Compare 0 cmp rD、 rA、 rB rB を rA と 比較 (符号付 き ) cmpu rD、 rA、 rB rB を rA と 比較 (符号な し ) 0 0 1 0 1 0 rD 6 rA 1 1 rB 1 6 0 2 1 0 0 0 0 0 0 0 0 U 1 3 1 説明 レ ジ ス タ rA の内容が レ ジ ス タ rB の内容か ら 差 し 引かれ、 その結果が レ ジ ス タ rD に配置 さ れ ます。 rD の MSB ビ ッ ト は、 rA と rB の真の関係を示すため調節 さ れ ます。 U ビ ッ ト がセ ッ ト さ れてい る 場合、 rA お よ び rB は符号な し の値 と みな さ れます。 U ビ ッ ト が ク リ アの場合、 rA お よ び rB は符号付 き の値 と みな さ れます。 擬似 コ ー ド (rD) (rB) + (rA) + 1 (rD)(MSB) (rA) > (rB) 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サイ クル MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 181 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ fadd Floating Point Arithmetic Add fadd 0 1 0 rD、 rA、 rB 1 1 0 0 加算 rD 6 rA 11 rB 16 0 0 0 0 0 0 0 0 0 21 0 0 31 説明 レ ジ ス タ rA お よ び rB の浮動小数点数の和は、 レ ジ ス タ rD に配置 さ れます。 擬似 コ ー ド if isDnz(rA) or isDnz(rB) then (rD) 0xFFC00000 FSR[DO] 1 ESR[EC] 00110 else if isSigNaN(rA) or isSigNaN(rB)or (isPosInfinite(rA) and isNegInfinite(rB)) or (isNegInfinite(rA) and isPosInfinite(rB))) then (rD) 0xFFC00000 FSR[IO] 1 ESR[EC] 00110 else if isQuietNaN(rA) or isQuietNaN(rB) then (rD) 0xFFC00000 else if isDnz((rA)+(rB)) then (rD) signZero((rA)+(rB)) FSR[UF] 1 ESR[EC] 00110 else if isNaN((rA)+(rB)) then (rD) signInfinite((rA)+(rB)) FSR[OF] 1 ESR[EC] 00110 else (rD) (rA) + (rB) 変更 さ れる レ ジ ス タ • rD (FP 例外が生成 さ れない場合。 例外が生成 さ れ る と こ の レ ジ ス タ は変更 さ れません) • ESR[EC] (FP 例外が生成 さ れ る 場合) • FSR[IO,UF,OF,DO] レ イテンシ • 4 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 6 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 こ の命令は、 MicroBlaze のパ ラ メ ー タ ー C_USE_FPU が 0 よ り 大 き い場合のみ使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 182 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ frsub Reverse Floating Point Arithmetic Subtraction frsub 0 1 0 rD、 rA、 rB 1 1 0 0 逆減算 rD 6 rA rB 11 16 0 0 0 1 0 0 0 0 0 0 21 0 31 説明 レ ジ ス タ rA の浮動小数点値が レ ジ ス タ rB の浮動小数点値か ら 差 し 引かれ、 その結果が レ ジ ス タ rD に 配置 さ れ ます。 擬似 コ ー ド if isDnz(rA) or isDnz(rB) then (rD) 0xFFC00000 FSR[DO] 1 ESR[EC] 00110 else if (isSigNaN(rA) or isSigNaN(rB) or (isPosInfinite(rA) and isPosInfinite(rB)) or (isNegInfinite(rA) and isNegInfinite(rB))) then (rD) 0xFFC00000 FSR[IO] 1 ESR[EC] 00110 else if isQuietNaN(rA) or isQuietNaN(rB) then (rD) 0xFFC00000 else if isDnz((rB)-(rA)) then (rD) signZero((rB)-(rA)) FSR[UF] 1 ESR[EC] 00110 else if isNaN((rB)-(rA)) then (rD) signInfinite((rB)-(rA)) FSR[OF] 1 ESR[EC] 00110 else (rD) (rB) - (rA) 変更 さ れる レ ジ ス タ • rD (FP 例外が生成 さ れない場合。 例外が生成 さ れ る と こ の レ ジ ス タ は変更 さ れません) • ESR[EC] (FP 例外が生成 さ れ る 場合) • FSR[IO,UF,OF,DO] レ イテンシ • 4 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 6 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 こ の命令は、 MicroBlaze のパ ラ メ ー タ ー C_USE_FPU が 0 よ り 大 き い場合のみ使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 183 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ fmul Floating Point Arithmetic Multiplication fmul 0 1 0 rD、 rA、 rB 1 1 0 0 乗算 rD 6 rA 11 rB 16 0 0 1 0 0 0 0 0 0 21 0 0 31 説明 レ ジ ス タ rA の浮動小数点値 と レ ジ ス タ rB の浮動小数点値 と を掛け、 その結果が レ ジ ス タ rD に配置 さ れ ます。 擬似 コ ー ド if isDnz(rA) or isDnz(rB) then (rD) 0xFFC00000 FSR[DO] 1 ESR[EC] 00110 else if isSigNaN(rA) or isSigNaN(rB) or (isZero(rA) and isInfinite(rB)) or (isZero(rB) and isInfinite(rA)) then (rD) 0xFFC00000 FSR[IO] 1 ESR[EC] 00110 else if isQuietNaN(rA) or isQuietNaN(rB) then (rD) 0xFFC00000 else if isDnz((rB)*(rA)) then (rD) signZero((rA)*(rB)) FSR[UF] 1 ESR[EC] 00110 else if isNaN((rB)*(rA)) then (rD) signInfinite((rB)*(rA)) FSR[OF] 1 ESR[EC] 00110 else (rD) (rB) * (rA) 変更 さ れる レ ジ ス タ • rD (FP 例外が生成 さ れない場合。 例外が生成 さ れ る と こ の レ ジ ス タ は変更 さ れません) • ESR[EC] (FP 例外が生成 さ れ る 場合) • FSR[IO,UF,OF,DO] レ イテンシ • 4 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 6 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 こ の命令は、 MicroBlaze のパ ラ メ ー タ ー C_USE_FPU が 0 よ り 大 き い場合のみ使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 184 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ fdiv Floating Point Arithmetic Division fdiv 0 1 0 rD、 rA、 rB 1 1 0 0 除算 rD 6 rA 11 rB 16 0 0 1 1 0 0 0 0 0 21 0 0 31 説明 レ ジ ス タ rB の浮動小数点値を レ ジ ス タ rA の浮動小数点値で割 り 、 その結果が レ ジ ス タ rD に配置 さ れま す。 擬似 コ ー ド if isDnz(rA) or isDnz(rB) then (rD) 0xFFC00000 FSR[DO] 1 ESR[EC] 00110 else if isSigNaN(rA) or isSigNaN(rB) or (isZero(rA) and isZero(rB)) or (isInfinite(rA) and isInfinite(rB)) then (rD) 0xFFC00000 FSR[IO] ESR[EC] 00110 else if isQuietNaN(rA) or isQuietNaN(rB) then (rD) 0xFFC00000 else if isZero(rA) and not isInfinite(rB) then (rD) signInfinite((rB)/(rA)) FSR[DZ] 1 ESR[EC] 00110 else if isDnz((rB) / (rA)) then (rD) signZero((rB) / (rA)) FSR[UF] 1 ESR[EC] 00110 else if isNaN((rB)/(rA)) then (rD) signInfinite((rB) / (rA)) FSR[OF] 1 ESR[EC] 00110 else (rD) (rB) / (rA) 変更 さ れる レ ジ ス タ • rD (FP 例外が生成 さ れない場合。 例外が生成 さ れ る と こ の レ ジ ス タ は変更 さ れません) • ESR[EC] (FP 例外が生成 さ れ る 場合) • FSR[IO,UF,OF,DO,DZ] レ イテンシ • 28 サ イ ク ル (C_AREA_OPTIMIZED=0)、 30 サ イ ク ル (C_AREA_OPTIMIZED=1) 注記 こ の命令は、 MicroBlaze のパ ラ メ ー タ ー C_USE_FPU が 0 よ り 大 き い場合のみ使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 185 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ fcm p 0 Floating Point Number Comparison fcmp.un rD、 rA、 rB 浮動小数点数の比較 (順不同) fcmp.lt rD、 rA、 rB 浮動小数点数の比較 (小な り ) fcmp.eq rD、 rA、 rB 浮動小数点数の比較 (相等) fcmp.le rD、 rA、 rB 浮動小数点数の比較 (以下) fcmp.gt rD、 rA、 rB 浮動小数点数の比較 (大な り ) fcmp.ne rD、 rA、 rB 浮動小数点数の比較 (不一致) fcmp.ge rD、 rA、 rB 浮動小数点数の比較 (以上) 1 0 1 1 0 0 rD 6 rA rB 11 16 0 1 21 0 0 OpSel 25 0 28 0 0 0 31 説明 レ ジ ス タ rB の浮動小数点値を レ ジ ス タ rA の浮動小数点値 と 比較 し 、 その結果が レ ジ ス タ rD に配置 さ れ ます。 命令 コ ー ド の OpSel フ ィ ール ド は、 実行 さ れ る 比較の タ イ プ を決定 し ます。 擬似 コ ー ド if isDnz(rA) or isDnz(rB) then (rD) 0 FSR[DO] 1 ESR[EC] 00110 else {read out behavior from 表 5-2} 変更 さ れる レ ジ ス タ • rD (FP 例外が生成 さ れない場合。 例外が生成 さ れ る と こ の レ ジ ス タ は変更 さ れません) • ESR[EC] (FP 例外が生成 さ れ る 場合) • FSR[IO,DO] レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 3 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 こ れたの命令は、 MicroBlaze のパ ラ メ ー タ ー C_USE_FPU が 0 よ り 大 き い場合のみ使用可能です。 187 ページの表 5-2には、 浮動小数点の比較演算が リ ス ト さ れてい ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 186 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 表 5‐2 : 浮動小数点比較演算 比較 タ イ プ 説明 オペ ラ ン ド 関係 OpSel (rB) > (rA) (rB) < (rA) (rB) = (rA) isSigNaN(rA) または isSigNaN(rB) isQuietNaN(rA) または isQuietNaN(rB) 順不同 000 (rD) 0 (rD) 0 (rD) 0 (rD) 1 FSR[IO] ESR[EC] 00110 (rD) 1 小な り 001 (rD) 0 (rD) 1 (rD) 0 (rD) 0 FSR[IO] ESR[EC] 00110 (rD) 0 FSR[IO] ESR[EC] 00110 相等 010 (rD) 0 (rD) 0 (rD) 1 (rD) 0 FSR[IO] ESR[EC] 00110 (rD) 0 以下 011 (rD) 0 (rD) 1 (rD) 1 (rD) 0 FSR[IO] ESR[EC] 00110 (rD) 0 FSR[IO] ESR[EC] 00110 大な り 100 (rD) 1 (rD) 0 (rD) 0 (rD) 0 FSR[IO] ESR[EC] 00110 (rD) 0 FSR[IO] ESR[EC] 00110 不一致 101 (rD) 1 (rD) 1 (rD) 0 (rD) 1 FSR[IO] ESR[EC] 00110 (rD) 1 以上 110 (rD) 1 (rD) 0 (rD) 1 (rD) 0 FSR[IO] ESR[EC] 00110 (rD) 0 FSR[IO] ESR[EC] 00110 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 187 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ flt Floating Point Convert Integer to Float flt 0 1 rD、 rA 0 1 1 0 0 rD 6 rA 11 0 16 0 1 0 1 0 0 0 21 0 0 0 0 31 説明 レ ジ ス タ rA の符号付 き 整数を浮動小数点に変換 し 、その結果を レ ジ ス タ rD に配置 し ます。こ れは 32 ビ ッ ト の丸め符号付 き 変換で、 32 ビ ッ ト の浮動小数点値を出力 し ます。 擬似 コ ー ド (rD) float ((rA)) 変更 さ れる レ ジ ス タ • rD レ イテンシ • 4 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 6 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 こ の命令は、 MicroBlaze のパ ラ メ ー タ ー C_USE_FPU が 2 (拡張) 場合のみ使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 188 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ fint Floating Point Convert Float to Integer fint 0 1 rD、 rA 0 1 1 0 0 rD 6 rA 11 0 16 0 1 1 0 0 0 0 21 0 0 0 0 31 説明 レ ジ ス タ rA の浮動小数点数を符号付 き 整数に変換 し 、 その結果を レ ジ ス タ rD に配置 し ます。 こ れは 32 ビ ッ ト の符号付 き 変換で、 32 ビ ッ ト の整数値を出力 し ます。 擬似 コ ー ド if isDnz(rA) then (rD) 0xFFC00000 FSR[DO] 1 ESR[EC] 00110 else if isNaN(rA) then (rD) 0xFFC00000 FSR[IO] 1 ESR[EC] 00110 else if isInf(rA) or (rA) < -231 or (rA) > 231 - 1 then (rD) 0xFFC00000 FSR[IO] 1 ESR[EC] 00110 else (rD) int ((rA)) 変更 さ れる レ ジ ス タ • rD (FP 例外が生成 さ れない場合。 例外が生成 さ れ る と こ の レ ジ ス タ は変更 さ れません) • ESR[EC] (FP 例外が生成 さ れ る 場合) • FSR[IO,DO] レ イテンシ • 5 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 7 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 こ の命令は、 MicroBlaze のパ ラ メ ー タ ー C_USE_FPU が 2 (拡張) 場合のみ使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 189 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ fsqrt Floating Point Arithmetic Square Root fsqrt 0 1 0 rD、 rA 1 1 0 0 平方根 rD 6 rA 11 0 16 0 1 1 1 0 0 0 21 0 0 0 0 31 説明 rA の値で浮動小数点の平方根計算を実行 し 、 結果を rD に配置 し ます。 擬似 コ ー ド if isDnz(rA) then (rD) 0xFFC00000 FSR[DO] 1 ESR[EC] 00110 else if isSigNaN(rA) then (rD) 0xFFC00000 FSR[IO] 1 ESR[EC] 00110 else if isQuietNaN(rA) then (rD) 0xFFC00000 else if (rA) < 0 then (rD) 0xFFC00000 FSR[IO] 1 ESR[EC] 00110 else if (rA) = -0 then (rD) -0 else (rD) sqrt ((rA)) 変更 さ れる レ ジ ス タ • rD (FP 例外が生成 さ れない場合。 例外が生成 さ れ る と こ の レ ジ ス タ は変更 さ れません) • ESR[EC] (FP 例外が生成 さ れ る 場合) • FSR[IO,DO] レ イテンシ • 27 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 29 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 こ の命令は、 MicroBlaze のパ ラ メ ー タ ー C_USE_FPU が 2 (拡張) 場合のみ使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 190 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ get get from stream interface 0 tneaget rD、 FSLx リ ン ク x か ら デー タ を取得 t = テ ス ト のみ n = ノ ンブ ロ ッ キング e = 制御ビ ッ ト がセ ッ ト さ れてい る 場合は 例外 a=アト ミ ック tnecaget rD、 FSLx リ ン ク x か ら 制御を取得 t = テ ス ト のみ n = ノ ンブ ロ ッ キング e = 制御ビ ッ ト がセ ッ ト さ れていない場合 は例外 a=アト ミ ック 1 1 0 0 1 1 rD 6 0 0 0 0 0 11 0 n 16 c t a e 0 0 0 0 0 0 FSLx 28 31 説明 MicroBlaze は リ ン ク x イ ン タ ー フ ェ イ ス か ら 読み出 し を 実行 し 、 レ ジ ス タ rD に結果 を 配置 し ま す。 C_FSL_LINKS に よ り 設定 さ れてい る リ ン ク 数が FSLx 以下の場合、 リ ン ク 0 が使用 さ れ ます。 get 命令には 32 個のバ リ エーシ ョ ンがあ り ます。 ブ ロ ッ キ ン グ バージ ョ ン (n ビ ッ ト が 0 の と き ) は、 イ ン タ ー フ ェ イ ス か ら のデー タ が有効に な る ま で MicroBlaze を ス ト ール し ま す。 ノ ン ブ ロ ッ キ ン グ バージ ョ ン は、 MicroBlaze を ス ト ール し 、 デー タ が有 効であればキ ャ リ ーを 0 に、 デー タ が無効であればキ ャ リ ーを 1 にセ ッ ト し ます。 ア ク セ ス が無効な場合 は、 デス テ ィ ネーシ ョ ン レ ジ ス タ の内容は未定義にな り ます。 すべてのデー タ get 命令 (c ビ ッ ト が 0 の と き ) は、 イ ン タ ーフ ェ イ ス か ら の制御ビ ッ ト が 0 にな る も の と し ます。 そ う でない場合は、 命令は MSR[FSL] を 1 にセ ッ ト し ます。 すべての制御 get 命令 (c ビ ッ ト が 1 の と き ) は、 イ ン タ ー フ ェ イ ス か ら の制御 ビ ッ ト が 1 に な る も の と し ま す。 そ う で ない場合は、 命令は MSR[FSL] を 1 にセ ッ ト し ます。 例外バージ ョ ン (e ビ ッ ト が 1 の と き ) は、 制御ビ ッ ト が一致 し ない場合に例外を生成 し ます。 こ の場合、 ESR が、 例外の原因に設定 さ れてい る EC と 、 リ ン ク イ ンデ ッ ク ス に設定 さ れてい る ESS でア ッ プデー ト さ れ ま す。 タ ーゲ ッ ト レ ジ ス タ rD は、 例外が生成 さ れ る と ア ッ プデー ト さ れず、 代わ り にデー タ が EDR に格納 さ れ ます。 テ ス ト バージ ョ ン (t ビ ッ ト が 1 の と き ) は、 リ ン ク への読み出 し 信号がアサー ト さ れていない場合を除 き 、 標準ケース と し て処理 さ れ ます。 ア ト ミ ッ ク バージ ョ ン (a ビ ッ ト が 1 の と き ) は、 割 り 込みで き ま せん。 つ ま り 、 ア ト ミ ッ ク 命令のシー ケ ン ス は、 プ ロ グ ラ ム フ ロ ーを割 り 込む こ と な く 、 グループに ま と め る こ と がで き ます。 ただ し 、 それ で も 例外は発生す る 可能性があ り ます。 MicroBlaze が MMU を 使用す る よ う に コ ン フ ィ ギ ュ レ ー ト さ れ て い て (C_USE_MMU >= 1)、 明示的 に C_MMU_PRIVILEGED_INSTR が 1 に設定 さ れていない場合は、 こ れ ら の命令は特権にな り ます。 つま り 、 命令がユーザー モー ド (MSR[UM]=1) で実行 さ れ る と 、 特権命令例外が発生 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 191 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 擬似 コ ー ド if MSR[UM] = 1 then ESR[EC] 00111 else x FSLx if x >= C_FSL_LINKS then x 0 (rD) Sx_AXIS_TDATA if (n = 1) then MSR[Carry] Sx_AXIS_TVALID if Sx_AXIS_TLAST c and Sx_AXIS_TVALID then MSR[FSL] 1 if (e = 1) then ESR[EC] 00000 ESR[ESS] instruction bits [28:31] Sx_AXIS_TDATA EDR 変更 さ れる レ ジ ス タ • rD (例外が生成 さ れない場合。 例外が生成 さ れ る と こ の レ ジ ス タ は変更 さ れません) • MSR[FSL] • MSR[Carry] • ESR[EC] (ス ト リ ーム例外ま たは特権命令例外が生成 さ れ る 場合) • ESR[ESS] (ス ト リ ーム例外が生成 さ れ る 場合) • EDR (ス ト リ ーム例外が生成 さ れ る 場合) レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) こ の命令のブ ロ ッ キ ン グ バージ ョ ンは、 命令が完了で き る ま で MicroBlaze のパ イ プ ラ イ ン を ス ト ール さ せ ます。 C_USE_EXTENDED_FSL_INSTR が 1 に設定 さ れていて、 命令がア ト ミ ッ ク でない場合に、 割 り 込みが行われ ます。 注記 アセ ンブ リ 言語で FSLx イ ン タ ーフ ェ イ ス を参照す る には、 rfsl0、 rfsl1、 ... rfsl15 を使用 し て く だ さ い。 割 り 込みが実行 さ れな く な っ て し ま う ので、C_USE_EXTENDED_FSL_INSTR が 1 に設定 さ れてい る と き に、 こ の命令のブ ロ ッ キ ン グ バージ ョ ン を遅延ス ロ ッ ト に配置 し ないで く だ さ い。 ノ ン ブ ロ ッ キ ン グ バージ ョ ン の場合は、 イ ンデ ッ ク ス 変数をデ ク リ メ ン ト す る のに rsubc 命令を使用 で き ます。 C_FSL_EXCEPTION が 1 でない限 り 、 e ビ ッ ト に効力はあ り ません。 こ れたの命令は、 MicroBlaze のパ ラ メ ー タ ー C_FSL_LINKS が 0 よ り 大 き い場合のみ使用可能です。 拡張命令 (例外、 テ ス ト 、 ア ト ミ ッ ク バージ ョ ン) は、 MicroBlaze のパ ラ メ ー タ ー C_USE_EXTENDED_FSL_INSTR が 1 に設定 さ れてい る 場合にのみ使用可能です。 パフ ォ ーマ ン ス上の理由か ら ど う し て も こ の命令を ユーザー モー ド で実行 し なければな ら ない場合を 除 き 、 こ の命令を ユーザー モー ド で実行 し ない よ う に し て く だ さ い。 リ ン ク の誤用を防 ぐ ためのハー ド ウ ェ ア保護がすべて削除 さ れて し ま い ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 192 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ getd get from stream interface dynamic 0 tneagetd rD、 rB リ ン ク rB[28:31] か ら デー タ を取得 t = テ ス ト のみ n = ノ ンブ ロ ッ キング e = 制御ビ ッ ト がセ ッ ト さ れてい る 場合は 例外 a=アト ミ ック tnecagetd rD、 rB リ ン ク rB[28:31] か ら 制御を取得 t = テ ス ト のみ n = ノ ンブ ロ ッ キング e = 制御ビ ッ ト がセ ッ ト さ れていない場合 は例外 a=アト ミ ック 1 0 0 0 1 1 rD 6 0 11 0 0 0 0 rB 16 0 21 n c t a e 0 0 0 0 0 31 説明 MicroBlaze は、 rB の最下位か ら 4 つの ビ ッ ト で定義 さ れた イ ン タ ーフ ェ イ ス か ら 読み出 し を実行 し 、 レ ジ ス タ rD を結果に配置 し ます。 C_FSL_LINKS に よ り 設定 さ れてい る リ ン ク 数が、 rB の最下位か ら 4 つ の ビ ッ ト 以下の場合、 リ ン ク 0 が使用 さ れ ます。 getd 命令には 32 個のバ リ エーシ ョ ン があ り ます。 ブ ロ ッ キ ン グ バージ ョ ン (n ビ ッ ト が 0 の と き ) は、 イ ン タ ー フ ェ イ ス か ら のデー タ が有効に な る ま で MicroBlaze を ス ト ール し ま す。 ノ ン ブ ロ ッ キ ン グ バージ ョ ン は、 MicroBlaze を ス ト ール し 、 デー タ が有 効であればキ ャ リ ーを 0 に、 デー タ が無効であればキ ャ リ ーを 1 にセ ッ ト し ます。 ア ク セ ス が無効な場合 は、 デス テ ィ ネーシ ョ ン レ ジ ス タ の内容は未定義にな り ます。 すべてのデー タ get 命令 (c ビ ッ ト が 0 の と き ) は、 イ ン タ ーフ ェ イ ス か ら の制御ビ ッ ト が 0 にな る も の と し ます。 そ う でない場合は、 命令は MSR[FSL] を 1 にセ ッ ト し ます。 すべての制御 get 命令 (c ビ ッ ト が 1 の と き ) は、 イ ン タ ー フ ェ イ ス か ら の制御 ビ ッ ト が 1 に な る も の と し ま す。 そ う で ない場合は、 命令は MSR[FSL] を 1 にセ ッ ト し ます。 例外バージ ョ ン (e ビ ッ ト が 1 の と き ) は、 制御ビ ッ ト が一致 し ない場合に例外を生成 し ます。 こ の場合、 ESR が、 例外の原因に設定 さ れてい る EC と 、 リ ン ク イ ンデ ッ ク ス に設定 さ れてい る ESS でア ッ プデー ト さ れ ま す。 タ ーゲ ッ ト レ ジ ス タ rD は、 例外が生成 さ れ る と ア ッ プデー ト さ れず、 代わ り にデー タ が EDR に格納 さ れ ます。 テ ス ト バージ ョ ン (t ビ ッ ト が 1 の と き ) は、 リ ン ク への読み出 し 信号がアサー ト さ れていない場合を除 き 、 標準ケース と し て処理 さ れ ます。 ア ト ミ ッ ク バージ ョ ン (a ビ ッ ト が 1 の と き ) は、 割 り 込みで き ま せん。 つ ま り 、 ア ト ミ ッ ク 命令のシー ケ ン ス は、 プ ロ グ ラ ム フ ロ ーを割 り 込む こ と な く 、 グループに ま と め る こ と がで き ます。 ただ し 、 それ で も 例外は発生す る 可能性があ り ます。 MicroBlaze が MMU を 使用す る よ う に コ ン フ ィ ギ ュ レ ー ト さ れ て い て (C_USE_MMU >= 1)、 明示的 に C_MMU_PRIVILEGED_INSTR が 1 に設定 さ れていない場合は、 こ れ ら の命令は特権にな り ます。 つま り 、 命令がユーザー モー ド (MSR[UM]=1) で実行 さ れ る と 、 特権命令例外が発生 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 193 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 擬似 コ ー ド if MSR[UM] = 1 then ESR[EC] 00111 else x rB[28:31] if x >= C_FSL_LINKS then x 0 (rD) Sx_AXIS_TDATA if (n = 1) then MSR[Carry] Sx_AXIS_TVALID if Sx_AXIS_TLAST c and Sx_AXIS_TVALID then MSR[FSL] 1 if (e = 1) then ESR[EC] 00000 ESR[ESS] rB[28:31] Sx_AXIS_TDATA EDR 変更 さ れる レ ジ ス タ • rD (例外が生成 さ れない場合。 例外が生成 さ れ る と こ の レ ジ ス タ は変更 さ れません) • MSR[FSL] • MSR[Carry] • ESR[EC] (ス ト リ ーム例外ま たは特権命令例外が生成 さ れ る 場合) • ESR[ESS] (ス ト リ ーム例外が生成 さ れ る 場合) • EDR (ス ト リ ーム例外が生成 さ れ る 場合) レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) こ の命令のブ ロ ッ キ ン グ バージ ョ ンは、 命令が完了で き る ま で MicroBlaze のパ イ プ ラ イ ン を ス ト ール さ せます。 命令がア ト ミ ッ ク でなければ割 り 込みは実行 さ れます。 ア ト ミ ッ ク だ と 割 り 込みは実行 さ れませ ん。 注記 割 り 込みが実行 さ れな く な っ て し ま う ので、 こ の命令のブ ロ ッ キ ン グ バージ ョ ンは、 遅延 ス ロ ッ ト に配 置 し ないで く だ さ い。 ノ ン ブ ロ ッ キ ン グ バージ ョ ン の場合は、 イ ンデ ッ ク ス変数をデ ク リ メ ン ト す る のに rsubc 命令を使用で き ます。 C_FSL_EXCEPTION が 1 でない限 り 、 e ビ ッ ト に効力はあ り ません。 MicroBlaze パ ラ メ ー タ ー C_FSL_LINKS が 0 よ り 大 き く 、 パ ラ メ ー タ ー C_USE_EXTENDED_FSL_INSTR が 1 に設定 さ れてい る 場合にのみ、 こ れ ら の命令は使用可能です。 パ フ ォ ーマ ン ス 上の理由か ら ど う し て も こ の命令を ユーザー モー ド で実行 し な ければな ら ない場合を除 き 、 こ の命令を ユーザー モー ド で実行 し ない よ う に し て く だ さ い。 リ ン ク の誤用を防 ぐ ためのハー ド ウ ェ ア保護がすべて削除 さ れて し ま い ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 194 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ idiv 0 Integer Divide idiv rD、 rA、 rB rB を rA で割 る (符号付 き ) idivu rD、 rA、 rB rB を rA で割 る (符号な し ) 1 0 0 1 0 0 rD 6 rA 1 1 rB 1 6 0 0 0 0 0 0 0 0 0 2 1 U 0 3 1 説明 レ ジ ス タ rB の内容を レ ジ ス タ rA の内容で割 り 、 その結果が レ ジ ス タ rD に配置 さ れます。 U ビ ッ ト がセ ッ ト さ れてい る 場合、 rA お よ び rB は符号な し の値 と みな さ れ ます。 U ビ ッ ト が ク リ アの場 合、 rA お よ び rB は符号付 き の値 と みな さ れ ます。 rA の値が 0 (ゼ ロ に よ る 除算) の場合、 例外が生成 さ れなければ、 MSR の DZO ビ ッ ト がセ ッ ト さ れ、 rD の値は 0 にな り ます。 U ビ ッ ト が ク リ アで、 rA の値が -1 で、 rB の値が -2147483648 (除算オーバーフ ロ ー ) の場合、 例外が生成 さ れなければ、 MSR の DZO ビ ッ ト がセ ッ ト さ れ、 rD の値は -2147483648 にな り ます。 擬似 コ ー ド if (rA) = 0 then (rD) <- 0 MSR[DZO] <- 1 ESR[EC] <- 00101 ESR[DEC] <- 0 else if U = 0 and (rA) = -1 and (rB) = -2147483648 then (rD) <- -2147483648 MSR[DZO] <- 1 ESR[EC] <- 00101 ESR[DEC] <- 1 else (rD) (rB) / (rA) 変更 さ れる レ ジ ス タ • rD (除算例外が生成 さ れない場合。 例外が生成 さ れ る と こ の レ ジ ス タ は変更 さ れません) • MSR[DZO] (ゼ ロ に よ る 除算ま たは除算オーバーフ ロ ーが発生 し た場合) • ESR[EC] (ゼ ロ に よ る 除算ま たは除算オーバーフ ロ ーが発生 し た場合) レ イテンシ • 1 サ イ ク ル ((rA) = 0 の場合)、 そ う でない場合は 32 サ イ ク ル (C_AREA_OPTIMIZED=0) • 1 サ イ ク ル ((rA) = 0 の場合)、 そ う でない場合は 34 サ イ ク ル (C_AREA_OPTIMIZED=1) 注記 MicroBlaze がハー ド ウ ェ ア除算を使用す る よ う に コ ン フ ィ ギ ュ レー ト さ れてい る 場合にのみ (C_USE_DIV = 1)、 こ の命令は有効です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 195 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ imm Immediate imm 1 0 1 IMM 1 0 0 0 0 0 0 0 0 6 0 1 1 0 0 0 0 IMM 1 6 3 1 説明 imm 命令は一時レ ジ ス タ に IMM 値を ロ ー ド し ます。 ま た、 それに続 く 命令が使用で き る よ う に、 こ の命 令は こ の値を ロ ッ ク し 、 32 ビ ッ ト の即値にな り ます。 imm 命令は、 タ イ プ B の命令 と 一緒に使用 さ れ ます。 タ イ プ B の命令には 16 ビ ッ ト の即値フ ィ ール ド が あ る ため、 32 ビ ッ ト の即値は直接使用で き ません。 し か し 、 32 ビ ッ ト の即値は MicroBlaze で使用で き ま す。 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号 拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 imm 命令は、 次の命令用に 16 ビ ッ ト の IMM 値を一時的に ロ ッ ク し ます。 次に、 imm 命令のす ぐ 後に続 く タ イ プ B の命令は、 imm 命令の 16 ビ ッ ト の IMM 値 (上位 16 ビ ッ ト ) と 16 ビ ッ ト の即値フ ィ ール ド (下位 16 ビ ッ ト ) か ら 32 ビ ッ ト の即値を形成 し ます。 タ イ プ B の 命令が imm 命令に続かない場合は、 ロ ッ ク さ れた値はア ン ロ ッ ク さ れ無用にな り ます。 レ イテンシ • 1 サイ クル 注記 imm 命令 と 、 それに続 く タ イ プ B の命令はア ト ミ ッ ク なので、 こ の 2 つの間には割 り 込みは認め ら れ ま せん。 ザ イ リ ン ク か ら 提供 さ れ る ア セ ン ブ ラ は、 imm 命令が必要か ど う か を自動的に検出 し ます。 32 ビ ッ ト の IMM 値が タ イ プ B 命令で指定 さ れ る と 、 アセ ンブ ラ は、 命令を アセ ンブルす る ため IMM 値を 16 ビ ッ ト の も のに変換 し 、 実行フ ァ イ ルでその値の前に imm 命令を挿入 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 196 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ lbu 1 Load Byte Unsigned lbu rD、 rA、 rB lbur rD、 rA、 rB 1 0 0 0 0 0 rD 6 rA rB 11 16 0 R 0 0 0 0 0 0 21 0 0 0 31 説明 レ ジ ス タ rA お よ び rB の内容を加算 し た結果の メ モ リ ロ ケーシ ョ ン か ら 1 バ イ ト (8 ビ ッ ト ) ロ ー ド し ま す。 デー タ は レ ジ ス タ rD の最下位バ イ ト に配置 さ れ、 rD のほかの 3 バ イ ト は ク リ アにな り ます。 R ビ ッ ト がセ ッ ト さ れてい る 場合、 バ イ ト 反転 メ モ リ ロ ケーシ ョ ン が使用 さ れ、 E ビ ッ ト で定義 さ れてい る エ ンデ ィ ア ン と は逆の も のでデー タ を ロ ー ド し ます (仮想保護モー ド が イ ネーブルにな っ てい る 場合)。 仮想保護モー ド が イ ネーブルにな っ てい る 場合、 デー タ TLB ミ ス例外が発生 し 、 ア ド レ ス に対応す る 有 効な変換エ ン ト リ は TLB では検出 さ れ ません。 ノ ー ア ク セ ス ゾーン保護に よ り ア ク セ ス が禁止 さ れてい る 場合は、デー タ ス ト レージ例外が発生 し ます。 こ れはユーザー モー ド お よ び仮想保護モー ド が イ ネーブルにな っ てい る ア ク セ ス のみに適用 さ れます。 擬似 コ ー ド Addr rA) + (rB) if TLB_Miss(Addr) and MSR[VM] = 1 then ESR[EC] 10010;ESR[S] 0 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Access_Protected(Addr) and MSR[UM] = 1 and MSR[VM] = 1 then ESR[EC] 10000;ESR[S] 0; ESR[DIZ] 1 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else (rD)[24:31] Mem(Addr) (rD)[0:23] 0 変更 さ れる レ ジ ス タ • rD (例外が生成 さ れない場合。 例外が生成 さ れ る と こ の レ ジ ス タ は変更 さ れません) • MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (例外が生成 さ れ る 場合) • ESR[EC]、 ESR[S] (例外が生成 さ れ る 場合) • ESR[DIZ] (デー タ ス ト レージ例外が生成 さ れ る 場合) レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 MicroBlaze が再順序付け命令を使用す る よ う に コ ン フ ィ ギ ュ レー ト さ れてい る 場合にのみ (C_USE_REORDER_INSTR = 1)、 こ のバ イ ト 反転命令は有効です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 197 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ lbui Load Byte Unsigned Immediate lbui 1 1 1 rD、 rA、 IMM 0 0 0 0 rD 6 rA IMM 11 16 31 説明 レ ジ ス タ rA の内容に IMM の 32 ビ ッ ト へ符号拡張 し た も のを加算 し た結果の メ モ リ ロ ケーシ ョ ン か ら 1 バ イ ト (8 ビ ッ ト ) ロ ー ド し ます。 デー タ は レ ジ ス タ rD の最下位バ イ ト に配置 さ れ、 rD のほかの 3 バ イ ト は ク リ アにな り ます。 仮想保護モー ド が イ ネーブルにな っ てい る 場合、 デー タ TLB ミ ス例外が発生 し 、 ア ド レ ス に対応す る 有 効な変換エ ン ト リ は TLB では検出 さ れ ません。 ノ ー ア ク セ ス ゾーン保護に よ り ア ク セ ス が禁止 さ れてい る 場合は、デー タ ス ト レージ例外が発生 し ます。 こ れはユーザー モー ド お よ び仮想保護モー ド が イ ネーブルにな っ てい る ア ク セ ス のみに適用 さ れます。 擬似 コ ー ド Addr rA) + sext(IMM) if TLB_Miss(Addr) and MSR[VM] = 1 then ESR[EC] 10010;ESR[S] 0 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Access_Protected(Addr) and MSR[UM] = 1 and MSR[VM] = 1 then ESR[EC] 10000;ESR[S] 0; ESR[DIZ] 1 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else (rD)[24:31] Mem(Addr) (rD)[0:23] 0 変更 さ れる レ ジ ス タ • rD (例外が生成 さ れない場合。 例外が生成 さ れ る と こ の レ ジ ス タ は変更 さ れません) • MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (例外が生成 さ れ る 場合) • ESR[EC]、 ESR[S] (例外が生成 さ れ る 場合) • ESR[DIZ] (デー タ ス ト レージ例外が生成 さ れ る 場合) レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 198 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ lhu 1 Load Halfword Unsigned lhu rD、 rA、 rB lhur rD、 rA、 rB 1 0 0 0 1 0 rD 6 rA 11 rB 16 0 R 0 0 0 0 0 0 21 0 0 0 31 説明 レ ジ ス タ rA お よ び rB の内容を加算 し た、 ハーフ ワ ー ド ア ラ イ ン さ れた結果の メ モ リ ロ ケーシ ョ ンか ら 1 ハーフ ワ ー ド (16 ビ ッ ト ) ロ ー ド し ます。 デー タ は レ ジ ス タ rD の最下位ハーフ ワー ド に配置 さ れ、 rD の 最上位ハーフ ワ ー ド は ク リ アにな り ます。 R ビ ッ ト がセ ッ ト さ れてい る 場合、 ハーフ ワー ド 反転 メ モ リ ロ ケーシ ョ ンが使用 さ れ、 ハーフ ワー ド の 2 バ イ ト が反転 し 、 E ビ ッ ト で定義 さ れてい る エ ンデ ィ ア ン と は逆の も のでデー タ を ロ ー ド し ます (仮想保 護モー ド が イ ネーブルにな っ てい る 場合)。 仮想保護モー ド が イ ネーブルにな っ てい る 場合、 デー タ TLB ミ ス例外が発生 し 、 ア ド レ ス に対応す る 有 効な変換エ ン ト リ は TLB では検出 さ れ ません。 ノ ー ア ク セ ス ゾーン保護に よ り ア ク セ ス が禁止 さ れてい る 場合は、デー タ ス ト レージ例外が発生 し ます。 こ れはユーザー モー ド お よ び仮想保護モー ド が イ ネーブルにな っ てい る ア ク セ ス のみに適用 さ れます。 ア ド レ ス の最下位ビ ッ ト がゼ ロ でない場合は、 ア ラ イ ン さ れていないデー タ ア ク セ ス例外が発生 し ます。 擬似 コ ー ド Addr (rA) + (rB) if TLB_Miss(Addr) and MSR[VM] = 1 then ESR[EC] 10010;ESR[S] 0 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Access_Protected(Addr) and MSR[UM] = 1 and MSR[VM] = 1 then ESR[EC] 10000;ESR[S] 0; ESR[DIZ] 1 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Addr[31] 0 then ESR[EC] 00001; ESR[W] 0; ESR[S] 0; ESR[Rx] rD else (rD)[16:31] Mem(Addr); (rD)[0:15] 0 変更 さ れる レ ジ ス タ • • • • • rD (例外が生成 さ れない場合。 例外が生成 さ れ る と こ の レ ジ ス タ は変更 さ れません) MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (例外が生成 さ れ る 場合) ESR[EC]、 ESR[S] (例外が生成 さ れ る 場合) ESR[DIZ] (デー タ ス ト レージ例外が生成 さ れ る 場合) ESR[W]、 ESR[Rx] (ア ラ イ ン さ れていないデー タ ア ク セ ス例外が生成 さ れ る 場合) レ イテンシ • • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 MicroBlaze が再順序付け命令を使用す る よ う に コ ン フ ィ ギ ュ レー ト さ れてい る 場合にのみ (C_USE_REORDER_INSTR = 1)、 こ のハーフ ワ ー ド 反転命令は有効です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 199 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ lhui Load Halfword Unsigned Immediate lhui 1 1 1 rD、 rA、 IMM 0 0 1 0 rD 6 rA 11 IMM 16 31 説明 レ ジ ス タ rA の内容 と IMM の 32 ビ ッ ト に符号拡張 し た も のを加算 し た結果の、ハーフ ワ ー ド ア ラ イ ン さ れた メ モ リ ロ ケーシ ョ ン か ら 、 1 ハーフ ワー ド (16 ビ ッ ト ) ロ ー ド し ます。 デー タ は レ ジ ス タ rD の最下位 ハーフ ワ ー ド に配置 さ れ、 rD の最上位ハーフ ワー ド は ク リ アにな り ます。 仮想保護モー ド が イ ネーブルにな っ てい る 場合、 デー タ TLB ミ ス例外が発生 し 、 ア ド レ ス に対応す る 有 効な変換エ ン ト リ は TLB では検出 さ れ ません。 ノ ー ア ク セ ス ゾーン保護に よ り ア ク セ ス が禁止 さ れてい る 場合は、 デー タ ス ト レージ例外が発生 し ます。 こ れはユーザー モー ド お よ び仮想保護モー ド が イ ネー ブルにな っ てい る ア ク セ ス のみに適用 さ れます。 ア ド レ ス の最下位ビ ッ ト がゼ ロ でない場合は、 ア ラ イ ン さ れていないデー タ ア ク セ ス例外が発生 し ます。 擬似 コ ー ド Addr (rA) + sext(IMM) if TLB_Miss(Addr) and MSR[VM] = 1 then ESR[EC] 10010;ESR[S] 0 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Access_Protected(Addr) and MSR[UM] = 1 and MSR[VM] = 1 then ESR[EC] 10000;ESR[S] 0; ESR[DIZ] 1 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Addr[31] 0 then ESR[EC] 00001; ESR[W] 0; ESR[S] 0; ESR[Rx] rD else (rD)[16:31] Mem(Addr) (rD)[0:15] 0 変更 さ れる レ ジ ス タ • • • • • rD (例外が生成 さ れない場合。 例外が生成 さ れ る と こ の レ ジ ス タ は変更 さ れません) MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ ス ト レージ例外が生成 さ れ る 場合) ESR[EC]、 ESR[S] (例外が生成 さ れ る 場合) ESR[DIZ] (デー タ ス ト レージ例外が生成 さ れ る 場合) ESR[W]、 ESR[Rx] (ア ラ イ ン さ れていないデー タ ア ク セ ス例外が生成 さ れ る 場合) レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 200 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ lw Load Word 1 lw rD、 rA、 rB lwr rD、 rA、 rB 1 0 0 1 0 0 rD 6 rA 11 rB 16 0 R 0 0 0 0 0 0 21 0 0 0 31 説明 レ ジ ス タ rA お よ び rB の内容を加算 し た、 ワ ー ド ア ラ イ ン さ れた結果の メ モ リ ロ ケーシ ョ ンか ら 1 ワー ド (32 ビ ッ ト ) ロ ー ド し ます。 デー タ は レ ジ ス タ rD に配置 さ れ ます。 R ビ ッ ト がセ ッ ト さ れてい る 場合、 ロ ー ド さ れた ワー ド のバ イ ト が反転 さ れ、 E ビ ッ ト で定義 さ れてい る エ ンデ ィ ア ン と は逆の も のでデー タ を ロ ー ド し ます (仮想保護モー ド が イ ネーブルにな っ てい る 場合)。 仮想保護モー ド が イ ネーブルにな っ てい る 場合、 デー タ TLB ミ ス例外が発生 し 、 ア ド レ ス に対応す る 有 効な変換エ ン ト リ は TLB では検出 さ れ ません。 ノ ー ア ク セ ス ゾーン保護に よ り ア ク セ ス が禁止 さ れてい る 場合は、デー タ ス ト レージ例外が発生 し ます。 こ れはユーザー モー ド お よ び仮想保護モー ド が イ ネーブルにな っ てい る ア ク セ ス のみに適用 さ れます。 ア ド レ ス の最下位ビ ッ ト 2 つがゼ ロ でない場合は、 ア ラ イ ン さ れていないデー タ ア ク セ ス 例外が発生 し ます。 擬似 コ ー ド Addr (rA) + (rB) if TLB_Miss(Addr) and MSR[VM] = 1 then ESR[EC] 10010;ESR[S] 0 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Access_Protected(Addr) and MSR[UM] = 1 and MSR[VM] = 1 then ESR[EC] 10000;ESR[S] 0; ESR[DIZ] 1 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Addr[30:31] 0 then ESR[EC] 00001; ESR[W] 1; ESR[S] 0; ESR[Rx] rD else (rD) Mem(Addr) 変更 さ れる レ ジ ス タ • • • • • rD (例外が生成 さ れない場合。 例外が生成 さ れ る と こ の レ ジ ス タ は変更 さ れません) MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ ス ト レージ例外が生成 さ れ る 場合) ESR[EC]、 ESR[S] (例外が生成 さ れ る 場合) ESR[DIZ] (デー タ ス ト レージ例外が生成 さ れ る 場合) ESR[W]、 ESR[Rx] (ア ラ イ ン さ れていないデー タ ア ク セ ス例外が生成 さ れ る 場合) レ イテンシ • • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 MicroBlaze が再順序付け命令を使用す る よ う に コ ン フ ィ ギ ュ レー ト さ れてい る 場合にのみ (C_USE_REORDER_INSTR = 1)、 こ の ワ ー ド 反転命令は有効です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 201 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ lwi Load Word Immediate lwi 1 1 rD、 rA、 IMM 1 0 1 0 0 rD 6 rA IMM 11 16 31 説明 レ ジ ス タ rA の内容 と IMM の 32 ビ ッ ト に符号拡張 し た も のを加算 し た結果の、 ワ ー ド ア ラ イ ン さ れた メ モ リ ロ ケーシ ョ ン か ら 、 1 ワー ド (32 ビ ッ ト ) ロ ー ド し ます。 デー タ は レ ジ ス タ rD に配置 さ れます。 仮想 保護モー ド が イ ネーブルにな っ てい る 場合、 デー タ TLB ミ ス例外が発生 し 、 ま た、 ノ ー ア ク セ ス ゾーン 保護に よ り ア ク セ ス が禁止 さ れてい る 場合は、 ア ド レ ス に対応す る 有効な変換エ ン ト リ は TLB デー タ ス ト レージ例外では検出 さ れ ま せん こ れはユーザー モー ド お よ び仮想保護モー ド が イ ネーブルにな っ てい る ア ク セ ス のみに適用 さ れ ます。 ア ド レ ス の最下位ビ ッ ト 2 つがゼ ロ でない場合は、 ア ラ イ ン さ れていな いデー タ ア ク セ ス例外が発生 し ます。 擬似 コ ー ド Addr (rA) + sext(IMM) if TLB_Miss(Addr) and MSR[VM] = 1 then ESR[EC] 10010;ESR[S] 0 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Access_Protected(Addr) and MSR[UM] = 1 and MSR[VM] = 1 then ESR[EC] 10000;ESR[S] 0; ESR[DIZ] 1 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Addr[30:31] 0 then ESR[EC] 00001; ESR[W] 1; ESR[S] 0; ESR[Rx] rD else (rD) Mem(Addr) 変更 さ れる レ ジ ス タ • rD (例外が生成 さ れない場合。 例外が生成 さ れ る と こ の レ ジ ス タ は変更 さ れません) • MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ ス ト レージ例外が生成 さ れ る 場合) • ESR[EC]、 ESR[S] (例外が生成 さ れ る 場合) • ESR[DIZ] (デー タ ス ト レージ例外が生成 さ れ る 場合) • ESR[W]、 ESR[Rx] (ア ラ イ ン さ れていないデー タ ア ク セ ス例外が生成 さ れ る 場合) レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 202 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ lwx Load Word Exclusive lwx 1 1 0 rD、 rA、 rB 0 1 0 0 rD 6 rA 11 rB 16 1 0 0 0 0 0 0 0 21 0 0 0 31 説明 レ ジ ス タ rA お よ び rB の内容を加算 し た、 ワ ー ド ア ラ イ ン さ れた結果の メ モ リ ロ ケーシ ョ ンか ら 1 ワー ド (32 ビ ッ ト ) ロ ー ド し ます。 デー タ は レ ジ ス タ rD に配置 さ れ、 予約ビ ッ ト がセ ッ ト さ れます。 排他的ア ク セ ス が イ ネーブルにな っ てい る AXI4 イ ン タ ー コ ネ ク ト が使用 さ れ、イ ン タ ー コ ネ ク ト 応答が EXOKAY でない場合、 キ ャ リ ー フ ラ グ (MSR[C]) がセ ッ ト さ れ ま す。 そ う でない場合はキ ャ リ ー フ ラ グは ク リ ア にな り ます。 仮想保護モー ド が イ ネーブルにな っ てい る 場合、 デー タ TLB ミ ス例外が発生 し 、 ア ド レ ス に対応す る 有 効な変換エ ン ト リ は TLB では検出 さ れ ません。 ノ ー ア ク セ ス ゾーン保護に よ り ア ク セ ス が禁止 さ れてい る 場合は、デー タ ス ト レージ例外が発生 し ます。 こ れはユーザー モー ド お よ び仮想保護モー ド が イ ネーブルにな っ てい る ア ク セ ス のみに適用 さ れます。 ア ド レ ス の最下位ビ ッ ト 2 つがゼ ロ でない場合は、 ア ラ イ ン さ れていないデー タ ア ク セ ス 例外が発生 し ません。 排他的ア ク セ ス が イ ネーブルにな っ てい る AXI4 イ ン タ ー コ ネ ク ト が使用 さ れ、 イ ン タ ー コ ネ ク ト 応答が EXOKAY でない と (つま り 排他的ア ク セ ス が処理で き ない)、 デー タ バ ス例外が発生す る 可能性があ り ま す。 AXI の排他的ア ク セ ス を イ ネーブルにす る と 、 ほかのバ ス マ ス タ ーか ら 操作が保護 さ れますが、 ア ド レ ス指定 し た ス レーブで排他的ア ク セ ス をサポー ト す る よ う に し てお く 必要があ り ます。 排他的ア ク セ ス が イ ネーブルにな っ ていない と 、 内部予約ビ ッ ト のみが使用 さ れ ます。 排他的ア ク セ ス は、 ペ リ フ ェ ラ ルお よ びキ ャ ッ シ ュ イ ン タ ー コ ネ ク ト にそれぞれ、 C_M_AXI_DP_EXCLUSIVE_ACCESS お よ び C_M_AXI_DC_EXCLUSIVE_ACCESS と い う 2 つのパ ラ メ ー タ ーを設定す る と イ ネーブルにな り ます。 擬似 コ ー ド Addr (rA) + (rB) if TLB_Miss(Addr) and MSR[VM] = 1 then ESR[EC] 10010;ESR[S] 0 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Access_Protected(Addr) and MSR[UM] = 1 and MSR[VM] = 1 then ESR[EC] 10000;ESR[S] 0; ESR[DIZ] 1 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if AXI_Exclusive(Addr) and AXI_Response EXOKAY and MSR[EE] then ESR[EC] 00100;ESR[ECC] 0; MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else (rD) Mem(Addr); Reservation 1; if AXI_Exclusive(Addr) and AXI_Response EXOKAY then MSR[C] 1 else MSR[C] 0 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 203 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 変更 さ れる レ ジ ス タ • rD お よ び MSR[C] (例外が生成 さ れない場合。 生成 さ れ る と こ の 2 つは変更 さ れない) • MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ ス ト レージ例外が生成 さ れ る 場合) • ESR[EC]、 ESR[S] (例外が生成 さ れ る 場合) • ESR[DIZ] (デー タ ス ト レージ例外が生成 さ れ る 場合) レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 こ の命令は、 セマ フ ォ やス ピ ン ロ ッ ク な ど、 排他的ア ク セ ス を イ ン プ リ メ ン ト す る ために、 SWX と 一緒 に使用 さ れ ます。 キ ャ リ ー フ ラ グ (MSR[C]) はす ぐ にはセ ッ ト さ れない可能性があ り ます (パ イ プ ラ イ ン ス ト ールの動作に よ る )。 キ ャ リ ー フ ラ グ の正 し い値を得 る ため、 LWX 命令は、 MSRCLR、 MSRSET、 MTS、 ま たは SRC 命令のす ぐ 後に続け る こ と はで き ません。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 204 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ mbar Memory Barrier mbar 1 0 1 1 IMM 1 0 0 IMM 6 メモリ バリア 0 0 0 1 11 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 1 0 0 31 説明 こ の命令は、 メ モ リ イ ン タ ーフ ェ イ ス の未処理の メ モ リ ア ク セ ス が、 後に続 く 命令が実行 さ れ る 前に 完了す る よ う に し ます。 こ れは、 自己変更 コ ー ド が正 し く 処理 さ れ る よ う にす る ため、 そ し て DMA 転 送が問題な く 開始で き る よ う にす る ために必要です。 自己変更 コ ー ド の場合、 まず、 デー タ ア ク セ ス があ る ま で待機す る ため、 IMM を 1 に設定 し 、 MBAR 命令を使用す る 必要があ り ます。 次に、 分岐先キ ャ ッ シ ュ を ク リ アに し 、 命令プ リ フ ェ ッ チ バ ッ フ ァ ー を空にす る ために、 IMM を 2 に設定 し 、 別の MBAR 命令を使用す る 必要があ り ます。 DMA ユニ ッ ト に よ っ て読み出 さ れ る デー タ が メ モ リ に書 き 込まれた こ と を確認す る には、 IMM を 1 に 設定 し 、 デー タ ア ク セ ス があ る ま で待機す る だけです。 MicroBlaze を MMU を 使用す る よ う に コ ン フ ィ ギ ュ レ ー ト す る と (C_USE_MMU >= 1)、 IMM の最上位 ビ ッ ト が 1 にセ ッ ト さ れてい る 場合、 こ の命令は特権命令にな り ます。 つ ま り 、 命令がユーザー モー ド (MSR[UM] = 1) で実行 さ れ る と 、 特権命令例外が発生 し ます。 IMM の最上位ビ ッ ト が 1 にセ ッ ト さ れていて、 例外が発生 し ない場合、 未処理ア ク セ ス がすべて完了 し た後に、 MicroBlaze は ス リ ープ モー ド に入 り 、 それを示すために ス リ ープ出力信号を セ ッ ト し ます。 パ イ プ ラ イ ンは停止 し 、 ウ ェー ク ア ッ プ入力信号の 1 ビ ッ ト がアサー ト さ れ る ま で、 MicroBlaze は実行 を継続 し ません。 擬似 コ ー ド if (IMM & 1) = 0 then wait for instruction side memory accesses if (IMM & 2) = 0 then wait for data side memory accesses PC PC + 4 if (IMM & 16) = 16 then enter sleep mode 変更 さ れる レ ジ ス タ • • PC ESR[EC] (特権命令例外が生成 さ れ る 場合) レ イテンシ • 1 + N サ イ ク ル (N は メ モ リ ア ク セ ス が完了す る のを待機す る サ イ ク ル数) 注記 こ の命令の前に imm 命令を先行 さ せ る こ と はで き ま せん。 ま た遅延 ス ロ ッ ト に配置す る こ と も で き ま せん。 アセ ン ブ ラ の擬似命令ス リ ープは、 ス リ ープ モー ド に入 る ために 「mbar 16」 の代わ り に使用す る こ と がで き ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 205 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ mfs Move From Special Purpose Register mfs 1 0 0 rD、 rS 1 0 1 0 rD 6 0 11 0 0 0 0 1 0 16 rS 18 31 説明 特殊レ ジ ス タ rS の内容を レ ジ ス タ rD に コ ピー し ます。 特殊レ ジ ス タ TLBLO お よ び TLBHI は、 TLBX に よ り イ ンデ ッ ク ス化 さ れた統合 TLB エ ン ト リ の内容を コ ピーす る のに使用 さ れ ます。 擬似 コ ー ド switch (rS): case 0x0000 : (rD) PC case 0x0001 : (rD) MSR case 0x0003 : (rD) EAR case 0x0005 : (rD) ESR case 0x0007 : (rD) FSR case 0x000B : (rD) BTR case 0x000D : (rD) EDR case 0x0800 : (rD) SLR case 0x0802 : (rD) SHR case 0x1000 : (rD) PID case 0x1001 : (rD) ZPR case 0x1002 : (rD) TLBX case 0x1003 : (rD) TLBLO case 0x1004 : (rD) TLBHI case 0x200x : (rD) PVR[x] (where x = 0 to 12) default : (rD) Undefined 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サイ クル 注記 アセ ン ブ リ 言語で特殊レ ジ ス タ を参照す る には、 PC には rpc、 MSR には rmsr、 EAR には rear、 ESR には resr、 FSR には rfsr、 BTR には rbtr、 EDR には redr、 SLR には rslr、 SHR には rshr、 PID には rpid、 ZPR に は rzpr、 TLBLO には rtlblo、 TLBHI には rtlbhi、 TLBX には rtlbx、 PVR0 か ら PVR12 には rpvr0 か ら rpvr12 を使用 し ます。 MSR か ら 読み出 さ れた値には、 そのす ぐ 前に先行す る 命令の効果を含め る こ と がで き ない場合があ り ま す (パ イ プ ラ イ ン ス ト ールの動作に よ る )。 MSR に影響 し な い命令は、 正 し い MSR 値 を 確約す る ため、 MFS 命令 よ り 先行 さ せ る 必要があ り ます。 FSR か ら 読み出 さ れた値には、そのす ぐ 前に先行す る 命令の効果を含め る こ と がで き ない場合があ り ます (パ イ プ ラ イ ン ス ト ールの動作に よ る )。 FSR に影響 し ない命令は、 正 し い FSR 値を確約す る ため、 MFS 命令 よ り 先行 さ せ る 必要があ り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 206 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ MicroBlaze のパ ラ メ ー タ ー C_*_EXCEPTION が少な く と も 1 つ 1 に設定 さ れてい る と 、 EAR、 ESR、 お よ び BTR はオペ ラ ン ド と し てのみ有効です。 C_FSL_EXCEPTION が 1 に設定 さ れて い て、 C_FSL_LINKS が 0 よ り も 大 き な値に設定 さ れて い る と 、 EDR はオペ ラ ン ド と し てのみ有効です。 C_USE_FPU が 0 よ り も 大 き な値に設定 さ れてい る と 、 FSR はオペ ラ ン ド と し てのみ有効です。 C_USE_STACK_PROTECTION が 1 に設定 さ れてい る と 、SLR お よ び SHR はオペ ラ ン ド と し てのみ有効で す。 C_USE_MMU > 1 (ユーザー モー ド ) お よ び C_MMU_TLB_ACCESS = 1 (読み出 し ) ま たは 3 (フル) に設定 さ れてい る と 、 PID、 ZPR、 TLBLO、 お よ び TLBHI はオペ ラ ン ド と し てのみ有効です。 C_USE_MMU > 1 (ユーザー モー ド ) お よ び C_MMU_TLB_ACCESS > 0 (最小) に設定 さ れてい る と 、 TLBX は オペ ラ ン ド と し てのみ有効です。 C_PVR が 1 (基本) ま たは 2 (フル) に設定 さ れてい る と 、 PVR0 はオペ ラ ン ド と し てのみ有効です。 ま た、 C_PVR が 2 (フル) に設定 さ れてい る と 、 PVR1 か ら PVR12 ははオペ ラ ン ド と し てのみ有効です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 207 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ msrcl r 1 0 Read MSR and clear bits in MSR msrclr 0 1 rD、 Imm 0 1 0 rD 6 1 0 0 0 1 11 0 Imm15 16 17 31 説明 特殊レ ジ ス タ MSR の内容を レ ジ ス タ rD に コ ピー し ます。 IMM 値で ビ ッ ト 位置が 1 の も のは MSR で ク リ アにな り ます。 IMM 値で ビ ッ ト 位置が 0 の も のはその ま ま にな り ます。 MicroBlaze が MMU を使用す る よ う に コ ン フ ィ ギ ュ レー ト さ れてい る 場合 (C_USE_MMU >= 1)、 こ の 命令は、 C のみに影響を与え る も の を除 き 、 すべての IMM 値に対 し て特権命令にな り ます。 すなわち、 こ の場合に命令がユーザー モー ド (MSR[UM] = 1) で実行 さ れ る と 、 特権命令例外が発生 し ます。 擬似 コ ー ド if MSR[UM] = 1 and IMM 0x4 then ESR[EC] 00111 else (MSR) (rD) (MSR) (MSR) IMM)) 変更 さ れる レ ジ ス タ • rD • MSR • ESR[EC] (特権命令例外が生成 さ れ る 場合) レ イテンシ • 1 サイ クル 注記 MSRCLR はす ぐ にキ ャ リ ー ビ ッ ト に影響 し ますが、 残 り の ビ ッ ト は、 命令実行後 1 ク ロ ッ ク し て効力 を持ち ます。 IE ビ ッ ト を ク リ アにす る と 、 後続の命令に対す る 割 り 込みにはプ ロ セ ッ サは反応 し な く な り ます。 MSR か ら 読み出 さ れた値には、 そのす ぐ前に先行す る 命令の効果を含め る こ と がで き ない場合があ り ます (パ イ プ ラ イ ン ス ト ールの動作に よ る )。 MSR に影響 し ない命令は、 正 し い MSR 値を確約す る た め、 MSRCLR 命令 よ り 先行 さ せ る 必要があ り ます。 こ れは、 レ ジ ス タ rD に コ ピー さ れた値お よ び変更 さ れた MSR 値自体の両方に適用 さ れ ます。 即値は、 C_USE_MMU >= 1 (ユーザー モー ド ) の と き 215 未満で、 それ以外の と き は 214 未満にな る 必 要があ り ます。 C_USE_MMU >= 1 (ユーザー モー ド ) の と き 、 MSR の ビ ッ ト 17 か ら 31 ま でのみが ク リ アにな り 、 それ以外の と き はビ ッ ト 18 か ら 31 ま でが ク リ アにな り ます。 こ の命令は C_USE_MSR_INSTR を 1 に設定 し てい る 場合のみ使用可能です。 MSR[VM] を ク リ アす る と き 、 こ の命令の後には、 常に、 BRI 4 な ど の同期分岐命令が続 く 必要があ り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 208 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ msrse t 1 0 Read MSR and set bits in MSR msrset 0 1 rD、 Imm 0 1 0 rD 6 1 0 0 0 0 11 0 IMM 16 17 31 説明 特殊レ ジ ス タ MSR の内容を レ ジ ス タ rD に コ ピー し ます。 IMM 値で ビ ッ ト 位置が 1 の も のは MSR で セ ッ ト さ れます。 IMM 値で ビ ッ ト 位置が 0 の も のはその ま ま にな り ます。 MicroBlaze が MMU を使用す る よ う に コ ン フ ィ ギ ュ レー ト さ れてい る 場合 (C_USE_MMU >= 1)、こ の命 令は、 C のみに影響を与え る も の を除 き 、 すべての IMM 値に対 し て特権命令にな り ます。 すなわち、 こ の場合に命令がユーザー モー ド (MSR[UM] = 1) で実行 さ れ る と 、 特権命令例外が発生 し ます。 低 レ イ テ ン シ割 り 込みモー ド では (C_USE_INTERRUPT = 2)、 こ の命令を実行 し て MSR{IE] ビ ッ ト が セ ッ ト さ れ る 場合に、 Interrupt_Ack 出力ポー ト が 1 にセ ッ ト さ れ ます。 擬似 コ ー ド if MSR[UM] = 1 and IMM 0x4 then ESR[EC] 00111 else (MSR) (rD) (MSR) (MSR) (IMM) if (IMM) & 2 Interrupt_Ack 11 変更 さ れる レ ジ ス タ • rD • MSR • ESR[EC] (特権命令例外が生成 さ れ る 場合) レ イテンシ • 1 サイ クル 注記 MSRSET はす ぐ にキ ャ リ ー ビ ッ ト に影響 し ますが、 残 り の ビ ッ ト は、 命令実行後 1 ク ロ ッ ク し て効力 を持ち ま す。 EIP ま たは BIP ビ ッ ト を セ ッ ト す る と 、 後続の命令に対す る 割 り 込み ま たは標準ハー ド ウ ェ ア ブ レー ク にはプ ロ セ ッ サは反応 し な く な り ます。 MSR か ら 読み出 さ れた値には、 そのす ぐ前に先行す る 命令の効果を含め る こ と がで き ない場合があ り ます (パ イ プ ラ イ ン ス ト ールの動作に よ る )。 MSR に影響 し ない命令は、 正 し い MSR 値を確約す る た め、 MSRSET 命令 よ り 先行 さ せ る 必要があ り ます。 こ れは、 レ ジ ス タ rD に コ ピー さ れた値お よ び変更 さ れた MSR 値自体の両方に適用 さ れ ます。 即値は、 C_USE_MMU >= 1 (ユーザー モー ド ) の と き 215 未満で、 それ以外の と き は 214 未満にな る 必 要があ り ます。 C_USE_MMU >= 1 (ユーザー モー ド ) の と き 、 MSR の ビ ッ ト 17 か ら 31 ま でのみが ク リ アにな り 、 それ以外の と き はビ ッ ト 18 か ら 31 ま でがセ ッ ト さ れ ます。 こ の命令は C_USE_MSR_INSTR を 1 に設定 し てい る 場合のみ使用可能です。 MSR[VM] を セ ッ ト す る と 、こ の命令の後には、常に、BRI 4 な ど の同期分岐命令が続 く 必要があ り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 209 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ mts Move To Special Purpose Register mts 1 0 0 rS、 rA 1 0 1 0 0 0 0 0 0 6 rA 1 11 1 16 rS 18 31 説明 レ ジ ス タ rD の内容を特殊レ ジ ス タ rS に コ ピー し ます。 特殊レ ジ ス タ TLBLO お よ び TLBHI は、 TLBX に よ り イ ンデ ッ ク ス化 さ れた統合 TLB エ ン ト リ に コ ピーす る のに使用 さ れます。 MicroBlaze が MMU を使用す る よ う に (C_USE_MMU >= 1) コ ン フ ィ ギ ュ レー ト さ れてい る 場合、 こ の命令 は特権命令です。 つ ま り 、 命令がユーザー モー ド (MSR[UM] = 1) で実行 さ れ る と 、 特権命令例外が発生 し ます。 低レ イ テ ン シ割 り 込みモー ド では (C_USE_INTERRUPT = 2)、 こ の命令を実行 し て MSR{IE] ビ ッ ト がセ ッ ト さ れ る 場合に、 Interrupt_Ack 出力ポー ト が 1 に設定 さ れ ます。 擬似 コ ー ド if MSR[UM] = 1 then ESR[EC] 00111 else switch (rS) case 0x0001 : MSR (rA) case 0x0007 : FSR (rA) case 0x0800 : SLR (rA) case 0x0802 : SHR (rA) case 0x1000 : PID (rA) case 0x1001 : ZPR (rA) case 0x1002 : TLBX (rA) case 0x1003 : TLBLO (rA) case 0x1004 : TLBHI (rA) case 0x1005 : TLBSX (rA) if (rS) = 0x0001 and (rA) & 2 Interrupt_Ack 11 変更 さ れる レ ジ ス タ • rS • ESR[EC] (特権命令例外が生成 さ れ る 場合) レ イテンシ • 1 サイ クル 注記 MTS を使用 し て MSR を書 き 込む と き 、 こ の命令の実行後 1 サ イ ク ルで、 すべての ビ ッ ト が効力を持ち ま す。 MSR を書 き 込む MTS 命令の後に、 MSR の内容を使用す る 命令が連続 し て続 く こ と はで き ません。 IE ビ ッ ト を ク リ アにす る と 、 後続の命令に対す る 割 り 込みにはプ ロ セ ッ サは反応 し な く な り ます。 EIP ま た は BIP ビ ッ ト を セ ッ ト す る と 、 後続の命令に対す る 割 り 込みま たは標準ハー ド ウ ェ ア ブ レー ク にはプ ロ セ ッ サは反応 し な く な り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 210 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ アセ ン ブ リ 言語で特殊レ ジ ス タ を参照す る には、 MSR には rmsr、 FSR には rfsr、 SLR には rslr、 SHR には rshr、 PID には rpid、 ZPR には rzpr、 TLBLO には rtlblo、 TLBHI には rtlbhi、 TLBX には rtlbx、 TLBSX に は rtlbsx を使用 し ます。 PC、 ESR、 EAR、 BTR、 EDR、 お よ び PVR0 か ら PVR12 は、 MTS 命令で書 き 込む こ と はで き ません。 MicroBlaze のパ ラ メ ー タ ー C_USE_FPU が 0 よ り も 大 き な値の と き 、FSR はデス テ ィ ネーシ ョ ン と し ての み有効です。 MicroBlaze のパ ラ メ ー タ ー C_USE_STACK_PROTECTION が 1 に設定 さ れてい る と 、 SLR お よ び SHR は デス テ ィ ネーシ ョ ン と し てのみ有効です。 C_USE_MMU > 1 (ユーザー モー ド ) お よ び C_MMU_TLB_ACCESS > 1 (読み出 し ) に設定 さ れてい る と 、PID、 ZPR、 お よ び TLBSX はデス テ ィ ネーシ ョ ン と し てのみ有効です。 C_USE_MMU > 1 (ユーザー モー ド ) の と き 、 TLBLO、 TLBHI、 お よ び TLBX はですテ ィ ーネーシ ョ ン と し てのみ有効です。 MSR[VM] ま たは PID を変更す る と き 、 こ の命令の後には、 常に、 BRI 4 な ど の同期分岐命令が続 く 必要 があ り ます。 UTLB エ ン ト リ を 1 つ以上無効化す る ため TLBHI に書 き 込んだ後は、 コ ヒ ーレ ン ト のマルチプ ロ セ ッ サ シ ス テ ム で コ ヒ ーレ ン シが保持 さ れ る よ う にす る ため、 MBAR 1 命令を出力す る 必要があ り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 211 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ mul Multiply mul 0 1 0 rD、 rA、 rB 0 0 0 0 rD 6 rA 1 1 rB 1 6 0 2 1 0 0 0 0 0 0 0 0 0 0 3 1 説明 レ ジ ス タ rA お よ び rB の内容を乗算 し 、 レ ジ ス タ rD に結果を出力 し ます。 こ れは 32 ビ ッ ト 値を 32 ビ ッ ト の値で乗算 し た も ので、 64 ビ ッ ト を出力 し ます。 こ の値の最下位 ワー ド は rD に配置 さ れ ます。 最上位 ワ ー ド は破棄 さ れます。 擬似 コ ー ド (rD) LSW( (rA) (rB) ) 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 3 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 こ の命令は、 タ ーゲ ッ ト アーキ テ ク チ ャ に乗算器プ リ ミ テ ィ ブがあ る 場合にのみ有効で、 も し そのプ リ ミ テ ィ ブがあ る 場合は、 MicroBlaze のパ ラ メ ー タ ー C_USE_HW_MUL は 0 よ り も 大 き な値にな り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 212 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ mulh Multiply High mulh 0 1 0 0 0 rD、 rA、 rB 0 0 rD 6 rA rB 1 1 1 6 0 2 1 0 0 0 0 0 0 0 0 0 1 3 1 説明 レ ジ ス タ rA お よ び rB の内容 を乗算 し 、 レ ジ ス タ rD に結果 を出力 し ま す。 こ れは 32 ビ ッ ト 値 を 32 ビ ッ ト の符号付 き の値で乗算 し た も ので、 64 ビ ッ ト を出力 し ます。 こ の値の最上位 ワー ド は rD に配置 さ れます。 最下位ワ ー ド は破棄 さ れ ます。 擬似 コ ー ド (rD) MSW( (rA) (rB) ), signed 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 3 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 こ の命令は、 タ ーゲ ッ ト アーキ テ ク チ ャ に乗算器プ リ ミ テ ィ ブがあ る 場合にのみ有効で、 も し そのプ リ ミ テ ィ ブがあ る 場合は、 MicroBlaze のパ ラ メ ー タ ー C_USE_HW_MUL は 2 (Mul64) に設定 さ れます。 MULH が使用 さ れてい る 場合は、 MUL 命令の ビ ッ ト 30 お よ び 31 は、 こ の 2 つの命令を区別す る た め、 0 にす る 必要があ り ます。 古いバージ ョ ン の MicroBlaze では、 こ れ ら の ビ ッ ト は 0 に定義 さ れて い ま し たが、 実際の値は関係があ り ませんで し た。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 213 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ mulhuMultiply High Unsigned mulhu 0 1 0 0 0 rD、 rA、 rB 0 0 rD 6 rA rB 1 1 1 6 0 2 1 0 0 0 0 0 0 0 0 1 1 3 1 説明 レ ジ ス タ rA お よ び rB の内容を乗算 し 、 レ ジ ス タ rD に結果を出力 し ます。 こ れは 32 ビ ッ ト の値を 32 ビ ッ ト の符号な し の値で乗算 し た も ので、 符号な し 64 ビ ッ ト を出力 し ます。 こ の値の最上位 ワー ド は rD に配置 さ れます。 最下位 ワー ド は破棄 さ れ ます。 擬似 コ ー ド (rD) MSW( (rA) (rB) ), unsigned 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 3 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 こ の命令は、 タ ーゲ ッ ト アーキ テ ク チ ャ に乗算器プ リ ミ テ ィ ブがあ る 場合にのみ有効で、 も し そのプ リ ミ テ ィ ブがあ る 場合は、 MicroBlaze のパ ラ メ ー タ ー C_USE_HW_MUL は 2 (Mul64) に設定 さ れます。 MULHU が使用 さ れてい る 場合は、 MUL 命令の ビ ッ ト 30 お よ び 31 は、 こ の 2 つの命令を区別す る た め、 0 にす る 必要があ り ます。 古いバージ ョ ン の MicroBlaze では、 こ れ ら の ビ ッ ト は 0 に定義 さ れて い ま し たが、 実際の値は関係があ り ませんで し た。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 214 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ mulhsu Multiply High Signed Unsigned mulhsu 0 1 0 0 0 0 rD、 rA、 rB 0 rD 6 rA rB 1 1 1 6 0 0 2 1 0 0 0 0 0 0 0 1 0 3 1 説明 レ ジ ス タ rA お よ び rB の内容を乗算 し 、 レ ジ ス タ rD に結果を出力 し ます。 こ れは 32 ビ ッ ト の符号付 き の値を 32 ビ ッ ト の符号な し の値で乗算 し た も ので、 符号な し 64 ビ ッ ト を出力 し ます。 こ の値の最 上位ワ ー ド は rD に配置 さ れ ます。 最下位 ワー ド は破棄 さ れ ます。 擬似 コ ー ド (rD) MSW( (rA), signed (rB), unsigned ), signed 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 3 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 こ の命令は、 タ ーゲ ッ ト アーキ テ ク チ ャ に乗算器プ リ ミ テ ィ ブがあ る 場合にのみ有効で、 も し その プ リ ミ テ ィ ブがあ る 場合は、 MicroBlaze のパ ラ メ ー タ ー C_USE_HW_MUL は 2 (Mul64) に設定 さ れ ま す。 MULHSU が使用 さ れてい る 場合は、 MUL 命令の ビ ッ ト 30 お よ び 31 は、 こ の 2 つの命令を区別す る ため、 0 にす る 必要があ り ます。 古いバージ ョ ン の MicroBlaze では、 こ れ ら の ビ ッ ト は 0 に定義 さ れ てい ま し たが、 実際の値は関係があ り ませんで し た。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 215 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ muli Multiply Immediate muli 0 1 1 rD、 rA、 IMM 0 0 0 0 rD 6 rA IMM 1 1 1 6 3 1 説明 レ ジ ス タ rA の内容 と IMM の 32 ビ ッ ト に符号拡張 さ れた値を乗算 し 、 レ ジ ス タ rD に結果を出力 し ます。 こ れは 32 ビ ッ ト 値を 32 ビ ッ ト の値で乗算 し た も ので、 64 ビ ッ ト を出力 し ます。 こ の値の最下位 ワ ー ド は rD に配置 さ れ ます。 最上位 ワー ド は破棄 さ れ ます。 擬似 コ ー ド (rD) LSW( (rA) sext(IMM) ) 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 3 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を参照 し て く だ さ い。 こ の命令は、 タ ーゲ ッ ト アーキ テ ク チ ャ に乗算器プ リ ミ テ ィ ブがあ る 場合にのみ有効で、 も し そのプ リ ミ テ ィ ブがあ る 場合は、 MicroBlaze のパ ラ メ ー タ ー C_USE_HW_MUL は 0 よ り も 大 き な値にな り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 216 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ or Logical OR or 1 0 rD、 rA、 rB 0 0 0 0 0 rD 6 rA 1 1 rB 1 6 0 0 0 0 2 1 0 0 0 0 0 0 0 3 1 説明 レ ジ ス タ rA の内容が レ ジ ス タ rB の内容 と OR さ れていて、 その結果が レ ジ ス タ rD に配置 さ れます。 擬似 コ ー ド (rD) (rA) (rB) 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サイ クル 注記 アセ ン ブ ラ の擬似命令 nop は 「or r0, r0, r0」 と し て イ ン プ リ メ ン ト さ れ ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 217 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ ori Logical OR with Immediate ori 1 0 rD、 rA、 IMM 1 0 0 0 0 rD 6 rA 1 1 IMM 1 6 3 1 説明 レ ジ ス タ rA の内容が IMM フ ィ ール ド の値 (32 ビ ッ ト に符号拡張 さ れた も の) で OR さ れ、 その結果が レ ジ ス タ rD に配置 さ れ ます。 擬似 コ ー ド (rD) (rA) sext(IMM) 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サイ クル 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 218 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ pcmpb Pattern Compare Byte Find f pcmpbf rD、 rA、 rB 1 0 0 0 0 0 0 rD 6 バ イ ト 単位の比較で、 最初に一致 し た位 置を返す rA 1 1 rB 1 6 1 0 0 0 0 0 2 1 0 0 0 0 0 3 1 説明 レ ジ ス タ rA の内容が レ ジ ス タ rB の内容 と ビ ッ ト 単位で比較 さ れます。 • rD は最初に一致 し たバ イ ト のペアの位置で ロ ー ド さ れ、 位置 1 の MSB か ら 始ま り 、 位置 4 の LSB ま で比 較 さ れます。 • バ イ ト ペアが どれ も 一致 し ない場合は、 rD は 0 にセ ッ ト さ れます。 擬似 コ ー ド if rB[0:7] = rA[0:7] then (rD) 1 else if rB[8:15] = rA[8:15] then (rD) 2 else if rB[16:23] = rA[16:23] then (rD) 3 else if rB[24:31] = rA[24:31] then (rD) 4 else (rD) 0 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サイ クル 注記 こ の命令は C_USE_PCMP_INSTR を 1 に設定 し てい る 場合のみ使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 219 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ pcmpeqPattern Compare Equal 1 0 pcmpeq rD、 rA、 rB 0 1 0 rD 0 0 6 正のブール値に等 し いか ど う か を比較 rA 1 1 rB 1 6 1 0 0 0 0 0 0 0 2 1 0 0 0 3 1 説明 レ ジ ス タ rA の内容が レ ジ ス タ rB の内容 と 比較 さ れます。 • こ の 2 つが一致 し ない と 、 rD は 1 で ロ ー ド さ れ、 そ う でない場合は 0 で ロ ー ド さ れます。 擬似 コ ー ド if (rB) = (rA) then (rD) 1 else (rD) 0 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サイ クル 注記 こ の命令は C_USE_PCMP_INSTR を 1 に設定 し てい る 場合のみ使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 220 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ pcmpnePattern Compare Not Equal 1 0 pcmpne rD、 rA、 rB 0 1 1 rD 0 0 6 負のブール値に等 し いか ど う か を比較 rA 1 1 rB 1 6 1 0 0 0 0 0 0 0 0 2 1 0 0 3 1 説明 レ ジ ス タ rA の内容が レ ジ ス タ rB の内容 と 比較 さ れます。 • こ の 2 つが一致 し ない と 、 rD には 0 が ロ ー ド さ れ、 そ う でない場合は 1 が ロ ー ド さ れます。 擬似 コ ー ド if (rB) = (rA) then (rD) 0 else (rD) 1 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サイ クル 注記 こ の命令は C_USE_PCMP_INSTR を 1 に設定 し てい る 場合のみ使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 221 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ put Put to stream interface naput rA、 FSLx リ ン ク x にデー タ を配置 n = ノ ンブ ロ ッ キング a=アト ミ ック tnaput FSLx リ ン ク x にデー タ を配置 (テ ス ト のみ) n = ノ ンブ ロ ッ キング a=アト ミ ック ncaput rA、 FSLx リ ン ク x に制御を配置 n = ノ ンブ ロ ッ キング a=アト ミ ック tncaput FSLx リ ン ク x に制御を配置 (テ ス ト のみ) n = ノ ンブ ロ ッ キング a=アト ミ ック 0 1 0 1 0 1 1 0 0 0 0 0 6 rA 11 1 16 n c t a 0 0 0 0 0 0 0 FSLx 28 31 説明 MicroBlaze は レ ジ ス タ rA か ら の値を リ ン ク x イ ン タ ーフ ェ イ ス へ書 き 込みます。 C_FSL_LINKS に よ り 設定 さ れてい る リ ン ク 数が FSLx 以下の場合、 リ ン ク 0 が使用 さ れ ます。 put 命令には 16 個のバ リ エーシ ョ ン があ り ます。 ブ ロ ッ キ ン グ バージ ョ ン (n が 0 の と き ) は、 イ ン タ ーフ ェ イ ス に空 き がで き る ま で MicroBlaze を ス ト ー ル し ます。 ノ ン ブ ロ ッ キ ン グ バージ ョ ンは、 MicroBlaze を ス ト ール し 、 空 き があればキ ャ リ ーを 0 に、 空 き がなければキ ャ リ ーを 1 にセ ッ ト し ます。 すべてのデー タ put 命令 (c が 0 の と き ) は イ ン タ ーフ ェ イ スへの制御ビ ッ ト を 0 にセ ッ ト し 、 すべての制 御 put 命令 (c が 1 の と き ) は制御ビ ッ ト を 1 にセ ッ ト し ます。 テ ス ト バージ ョ ン (t ビ ッ ト が 1 の と き ) は、 リ ン ク への書 き 込み信号がアサー ト さ れていない場合を除 き 、 標準ケース と し て処理 さ れます (つま り ソ ース レ ジ ス タ は不要)。 ア ト ミ ッ ク バージ ョ ン (a ビ ッ ト が 1 の と き ) は、 割 り 込みで き ま せん。 つ ま り 、 ア ト ミ ッ ク 命令のシー ケ ン ス は、 プ ロ グ ラ ム フ ロ ーを割 り 込む こ と な く 、 グループに ま と め る こ と がで き ます。 ただ し 、 それ で も 例外は発生す る 可能性があ り ます。 MicroBlaze が MMU を 使用す る よ う に コ ン フ ィ ギ ュ レ ー ト さ れ て い て (C_USE_MMU >= 1)、 明示的 に C_MMU_PRIVILEGED_INSTR が 1 に設定 さ れていない場合は、 こ れ ら の命令は特権にな り ます。 つま り 、 命令がユーザー モー ド (MSR[UM]=1) で実行 さ れ る と 、 特権命令例外が発生 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 222 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 擬似 コ ー ド if MSR[UM] = 1 then ESR[EC] 00111 else x FSLx if x >= C_FSL_LINKS then x 0 Mx_AXIS_TDATA (rA) if (n = 1) then MSR[Carry] Mx_AXIS_TVALID Mx_AXIS_TREADY Mx_AXIS_TLAST C 変更 さ れる レ ジ ス タ • MSR[Carry] • ESR[EC] (特権命令例外が生成 さ れ る 場合) レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) こ の命令のブ ロ ッ キ ン グ バージ ョ ンは、 命令が完了で き る ま で MicroBlaze のパ イ プ ラ イ ン を ス ト ール さ せます。 C_USE_EXTENDED_FSL_INSTR が 1 に設定 さ れていて、 命令がア ト ミ ッ ク でない場合に、 割 り 込みが行われ ます。 注記 アセ ンブ リ 言語で FSLx イ ン タ ーフ ェ イ ス を参照す る には、 rfsl0、 rfsl1、 ... rfsl15 を使用 し て く だ さ い。 こ の命令のブ ロ ッ キ ン グ バージ ョ ンは、 割 り 込みが実行 さ れな く な る ので、 C_USE_EXTENDED_FSL_INSTR が 1 に設定 さ れてい る と き に遅延ス ロ ッ ト に配置 し ないで く だ さ い。 こ れたの命令は、 MicroBlaze のパ ラ メ ー タ ー C_FSL_LINKS が 0 よ り 大 き い場合のみ使用可能です。 拡張命令 (テ ス ト お よ びア ト ミ ッ ク バージ ョ ン) は、 MicroBlaze のパ ラ メ ー タ ー C_USE_EXTENDED_FSL_INSTR が 1 に設定 さ れてい る 場合にのみ使用可能です。 パ フ ォ ーマ ン ス 上の理由か ら ど う し て も こ の命令を ユーザー モー ド で実行 し な ければな ら ない場合を除 き 、 こ の命令を ユーザー モー ド で実行 し ない よ う に し て く だ さ い。 リ ン ク の誤用を防 ぐ ためのハー ド ウ ェ ア保護がすべて削除 さ れて し ま い ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 223 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ putd Put to stream interface dynamic naputd rA、 rB デー タ を リ ン ク rB[28:31] に配置 n = ノ ンブ ロ ッ キング a=アト ミ ック tnaputd rB デー タ を リ ン ク rB[28:31] に配置 (テ ス ト のみ) n = ノ ンブ ロ ッ キング a=アト ミ ック ncaputd rA、 rB 制御を リ ン ク rB[28:31] に配置 n = ノ ンブ ロ ッ キング a=アト ミ ック tncaputd rB 制御を リ ン ク rB[28:31] テ ス ト のみに配置 n = ノ ンブ ロ ッ キング a=アト ミ ック 0 1 0 0 0 1 1 0 0 0 0 0 6 rA 11 rB 16 1 21 n c t a 0 0 0 0 0 0 31 説明 MicroBlaze は、 レ ジ ス タ rA か ら の値を、 rB の最下位か ら 4 つの ビ ッ ト で定義 さ れた リ ン ク イ ン タ ーフ ェ イ ス に書 き 込みます。C_FSL_LINKS に よ り 設定 さ れてい る リ ン ク 数が、rB の最下位か ら 4 つの ビ ッ ト 以 下の場合、 リ ン ク 0 が使用 さ れ ます。 putd 命令には 16 個のバ リ エーシ ョ ン があ り ます。 ブ ロ ッ キ ン グ バージ ョ ン (n が 0 の と き ) は、 イ ン タ ーフ ェ イ ス に空 き がで き る ま で MicroBlaze を ス ト ー ル し ます。 ノ ン ブ ロ ッ キ ン グ バージ ョ ンは、 MicroBlaze を ス ト ール し 、 空 き があればキ ャ リ ーを 0 に、 空 き がなければキ ャ リ ーを 1 にセ ッ ト し ます。 すべてのデー タ putd 命令 (c が 0 の と き ) は イ ン タ ーフ ェ イ ス への制御ビ ッ ト を 0 にセ ッ ト し 、 すべての 制御 putd 命令 (c が 1 の と き ) は制御ビ ッ ト を 1 にセ ッ ト し ます。 テ ス ト バージ ョ ン (t ビ ッ ト が 1 の と き ) は、 リ ン ク への書 き 込み信号がアサー ト さ れていない場合を除 き 、 標準ケース と し て処理 さ れます (つま り ソ ース レ ジ ス タ は不要)。 ア ト ミ ッ ク バージ ョ ン (a ビ ッ ト が 1 の と き ) は、 割 り 込みで き ま せん。 つ ま り 、 ア ト ミ ッ ク 命令のシー ケ ン ス は、 プ ロ グ ラ ム フ ロ ーを割 り 込む こ と な く 、 グループに ま と め る こ と がで き ます。 ただ し 、 それ で も 例外は発生す る 可能性があ り ます。 MicroBlaze が MMU を 使用す る よ う に コ ン フ ィ ギ ュ レ ー ト さ れ て い て (C_USE_MMU >= 1)、 明示的 に C_MMU_PRIVILEGED_INSTR が 1 に設定 さ れていない場合は、 こ れ ら の命令は特権にな り ます。 つま り 、 命令がユーザー モー ド (MSR[UM]=1) で実行 さ れ る と 、 特権命令例外が発生 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 224 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 擬似 コ ー ド if MSR[UM] = 1 then ESR[EC] 00111 else x rB[28:31] if x >= C_FSL_LINKS then x 0 Mx_AXIS_TDATA (rA) if (n = 1) then MSR[Carry] Mx_AXIS_TVALID Mx_AXIS_TREADY Mx_AXIS_TLAST C 変更 さ れる レ ジ ス タ • MSR[Carry] • ESR[EC] (特権命令例外が生成 さ れ る 場合) レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) こ の命令のブ ロ ッ キ ン グ バージ ョ ンは、 命令が完了で き る ま で MicroBlaze のパ イ プ ラ イ ン を ス ト ール さ せ ます。 命令がア ト ミ ッ ク でな ければ割 り 込みは実行 さ れ ま す。 ア ト ミ ッ ク だ と 割 り 込みは実行 さ れません。 注記 割 り 込みが実行 さ れな く な っ て し ま う ので、 こ の命令のブ ロ ッ キ ン グ バージ ョ ンは、 遅延ス ロ ッ ト に 配置 し ないで く だ さ い。 MicroBlaze パ ラ メ ー タ ー C_FSL_LINKS が 0 よ り 大 き く 、 パ ラ メ ー タ ー C_USE_EXTENDED_FSL_INSTR が 1 に設定 さ れてい る 場合にのみ、 こ れ ら の命令は使用可能です。 パフ ォ ーマ ン ス上の理由か ら ど う し て も こ の命令を ユーザー モー ド で実行 し なければな ら ない場合を 除 き 、 こ の命令を ユーザー モー ド で実行 し ない よ う に し て く だ さ い。 リ ン ク の誤用を防 ぐ ためのハー ド ウ ェ ア保護がすべて削除 さ れて し ま い ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 225 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ rsub Arithmetic Reverse Subtract 0 rsub rD、 rA、 rB 減算 rsubc rD、 rA、 rB キ ャ リ ー付 き 減算 rsubk rD、 rA、 rB 減算お よ びキ ャ リ ー保持 rsubkc rD、 rA、 rB キ ャ リ ー付 き 減算お よ びキ ャ リ ー保持 0 0 K C 1 0 rD 6 rA 1 1 rB 1 6 0 2 1 0 0 0 0 0 0 0 0 0 0 3 1 説明 レ ジ ス タ rA の内容が レ ジ ス タ rB の内容か ら 差 し 引かれ、 その結果が レ ジ ス タ rD に配置 さ れます。 命令 の ビ ッ ト 3 (図では K) は、 ニーモニ ッ ク rsubk の場合 1 にセ ッ ト さ れ ます。 命令の ビ ッ ト 4 (図では C) は、 ニーモニ ッ ク rsubc の場合 1 にセ ッ ト さ れ ます。 ニーモニ ッ ク rsubkc の場合は両方の ビ ッ ト が 1 にセ ッ ト さ れます。 rsub 命令で ビ ッ ト 3 がセ ッ ト さ れてい る と (rsubk、 rsubkc)、 命令実行の結果にかかわ ら ず、 キ ャ リ ー フ ラ グは前の値を維持 し ます。 ビ ッ ト 3 が ク リ アにな る と (rsub、 rsubc)、 キ ャ リ ー フ ラ グは命令の実行の影響 を受け ます。 命令の ビ ッ ト 4 が 1 にセ ッ ト さ れてい る 場合 (rsubc、 rsubkc)、 キ ャ リ ー フ ラ グの内容 (MSR[C]) が、 命令 実行に影響 し ま す。 ビ ッ ト 4 が ク リ アにな る と (rsub、 rsubk)、 キ ャ リ ー フ ラ グの内容は命令実行には影 響 し ません (標準減算の場合)。 擬似 コ ー ド if C = 0 then (rD) (rB) + (rA) + 1 else (rD) (rB) + (rA) + MSR[C] if K = 0 then MSR[C] CarryOut 変更 さ れる レ ジ ス タ • rD • MSR[C] レ イテンシ • 1 サイ クル 注記 減算では、 キ ャ リ ー = (ボ ロ ー ) です。 減算でキ ャ リ ー (繰 り 上が り ) が設定 さ れ る場合は、 ボ ロ ー (繰 り 下 が り ) がない と い う こ と で、 キ ャ リ ーが ク リ アにな る と 、 ボ ロ ーがあ る と い う こ と にな り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 226 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ rsub Arithmetic Reverse Subtract Immediate i rsubi rD、 rA、 IMM 即値減算 0 rsubic rD、 rA、 IMM rsubik rD、 rA、 IMM 即値減算お よ びキ ャ リ ー保持 rsubikc rD、 rA、 IMM 0 1 K C 1 0 キ ャ リ ー付 き 即値減算 キ ャ リ ー付 き 即値減算お よ びキ ャ リ ー保持 rD 6 rA IMM 1 1 1 6 3 1 説明 レ ジ ス タ rA の内容が IMM の 32 ビ ッ ト に符号拡張 さ れた値か ら 差 し 引かれ、 その結果が レ ジ ス タ rD に 配置 さ れ ま す。 命令の ビ ッ ト 3 (図では K) は、 ニーモニ ッ ク rsubik の場合 1 にセ ッ ト さ れ ま す。 命令の ビ ッ ト 4 (図では C) は、 ニーモニ ッ ク rsubic の場合 1 にセ ッ ト さ れ ます。 ニーモニ ッ ク rsubikc の場合は 両方の ビ ッ ト が 1 にセ ッ ト さ れ ます。 rsubi 命令で ビ ッ ト 3 がセ ッ ト さ れてい る と (rsubik、 rsubikc)、 命令実行の結果にかかわ ら ず、 キ ャ リ ー フ ラ グは前の値を維持 し ます。 ビ ッ ト 3 が ク リ アにな る と (rsubi、 rsubic)、 キ ャ リ ー フ ラ グは命令の実行の 影響を受け ます。 命令の ビ ッ ト 4 が 1 にセ ッ ト さ れてい る 場合 (rsubic、 rsubikc)、 キ ャ リ ー フ ラ グの内容 (MSR[C]) が、 命令実行に影響 し ます。 ビ ッ ト 4 が ク リ アにな る と (rsubi、 rsubik)、 キ ャ リ ー フ ラ グの内容 は命令実行には影響 し ません (標準減算の場合)。 擬似 コ ー ド if C = 0 then (rD) sext(IMM) + (rA) + 1 else (rD) sext(IMM) + (rA) + MSR[C] if K = 0 then MSR[C] CarryOut 変更 さ れる レ ジ ス タ • rD • MSR[C] レ イテンシ • 1 サイ クル 注記 減算では、 キ ャ リ ー = (ボ ロ ー ) です。 減算でキ ャ リ ー (繰 り 上が り ) が設定 さ れ る場合は、 ボ ロ ー (繰 り 下 が り ) がない と い う こ と で、 キ ャ リ ーが ク リ アにな る と 、 ボ ロ ーがあ る と い う こ と にな り ます。 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即 値オぺ ラ ン ド と し て使用 し ま す。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。32 ビ ッ ト の即値の使用に関 し ては、196 ページの「imm」 を参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 227 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ rtbd Return from Break rn from Interrupt rtbd 1 0 1 rA、 IMM 1 0 1 0 1 0 0 1 0 6 rA IMM 11 16 31 説明 ブ レー ク か ら 戻 る と 、rA の内容 と IMM フ ィ ール ド (32 ビ ッ ト に符号拡張 さ れた も の) で指定 さ れた ロ ケー シ ョ ン に分岐 し ます。 ま た、 MSR の BIP フ ラ グ を ク リ アにす る こ と に よ り 実行後ブ レー ク を イ ネーブル に し ます。 こ の命令には常に遅延 ス ロ ッ ト が あ り ま す。 RTBD の後に続 く 命令は、 常に、 分岐先の前に実行 さ れ ま す。 その遅延ス ロ ッ ト 命令ではブ レー ク はデ ィ ス エーブルにな っ てい ます。 MicroBlaze が MMU を使用す る よ う に (C_USE_MMU >= 1) コ ン フ ィ ギ ュ レー ト さ れてい る 場合、 こ の命令 は特権命令です。 つ ま り 、 命令がユーザー モー ド (MSR[UM] = 1) で実行 さ れ る と 、 特権命令例外が発生 し ます。 擬似 コ ー ド if MSR[UM] = 1 then ESR[EC] 00111 else PC (rA) + sext(IMM) allow following instruction to complete execution MSR[BIP] 0 MSR[UM] MSR[UMS] MSR[VM] MSR[VMS] 変更 さ れる レ ジ ス タ • PC • MSR[BIP]、 MSR[UM]、 MSR[VM] • ESR[EC] (特権命令例外が生成 さ れ る 場合) レ イテンシ • 2 サイ クル 注記 変換は汎用レ ジ ス タ r16 を rA と し て使用す る ための も のです。 遅延 ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レ ー ク の命令で使用す る こ と はで き ま せん。 割 り 込みお よ び外 部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で先送 り さ れ ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 228 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ rtid Return from Interrupt rn from Interrupt rtid 1 0 1 rA、 IMM 1 0 0 1 1 0 0 0 1 6 rA IMM 11 16 31 説明 割 り 込みか ら 戻 る と 、 rA の内容 と IMM フ ィ ール ド (32 ビ ッ ト に符号拡張 さ れた も の) で指定 さ れた ロ ケーシ ョ ンに分岐 し ます。 ま た、 実行後に割 り 込みが イ ネーブルにな り ます。 こ の命令には常に遅延ス ロ ッ ト があ り ます。 RTID の後に続 く 命令は、 常に、 分岐先の前に実行 さ れま す。 その遅延ス ロ ッ ト 命令では割 り 込みはデ ィ ス エーブルにな っ てい ます。 MicroBlaze が MMU を使用す る よ う に (C_USE_MMU >= 1) コ ン フ ィ ギ ュ レー ト さ れてい る 場合、 こ の命 令は特権命令です。 つま り 、 命令がユーザー モー ド (MSR[UM] = 1) で実行 さ れ る と 、 特権命令例外 が発生 し ます。 低レ イ テ ン シ割 り 込みモー ド だ と C_USE_INTERRUPT = 2)、 こ の命令が実行 さ れ る と Interrupt_Ack 出 力ポー ト が 10 にセ ッ ト さ れ、 その後で MSR{IE] ビ ッ ト がセ ッ ト さ れ る と 11 にな り ます。 擬似 コ ー ド if MSR[UM] = 1 then ESR[EC] 00111 else PC (rA) + sext(IMM) Interrupt_Ack 10 allow following instruction to complete execution MSR[IE] 1 MSR[UM] MSR[UMS] MSR[VM] MSR[VMS] Interrupt_Ack 11 変更 さ れる レ ジ ス タ • PC • MSR[IE]、 MSR[UM]、 MSR[VM] • ESR[EC] (特権命令例外が生成 さ れ る 場合) レ イテンシ • 2 サイ クル 注記 変換は汎用レ ジ ス タ r14 を rA と し て使用す る ための も のです。 遅延 ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レー ク の命令で使用す る こ と はで き ません。 割 り 込みお よ び 外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で先送 り さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 229 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ rted Return from Exception rted 1 0 1 rA、 IMM 1 0 1 0 1 0 1 0 0 6 rA IMM 11 16 31 説明 例外か ら 戻 る と 、rA の内容 と IMM フ ィ ール ド (32 ビ ッ ト に符号拡張 さ れた も の) で指定 さ れた ロ ケーシ ョ ンに分岐 し ます。 ま た、 実行後に例外が イ ネーブルにな り ます。 こ の命令には常に遅延ス ロ ッ ト があ り ます。 RTED の後に続 く 命令は、 常に、 分岐先の前に実行 さ れます。 MicroBlaze が MMU を使用す る よ う に (C_USE_MMU >= 1) コ ン フ ィ ギ ュ レー ト さ れてい る 場合、 こ の命令 は特権命令です。 つ ま り 、 命令がユーザー モー ド (MSR[UM] = 1) で実行 さ れ る と 、 特権命令例外が発生 し ます。 擬似 コ ー ド if MSR[UM] = 1 then ESR[EC] 00111 else PC (rA) + sext(IMM) allow following instruction to complete execution MSR[EE] 1 MSR[EIP] 0 MSR[UM] MSR[UMS] MSR[VM] MSR[VMS] ESR 変更 さ れる レ ジ ス タ • • • PC MSR[EE]、 MSR[EIP]、 MSR[UM]、 MSR[VM] ESR レ イテンシ • 2 サイ クル 注記 変換は汎用レ ジ ス タ r17 を rA と し て使用す る ための も のです。 こ の命令の場合、 MicroBlaze のパ ラ メ ー タ ー C_*_EXCEPTION が 1 つ以上 1 に設定 さ れてい る か、 C_USE_MMU > 0 であ る 必要があ り ます。 遅延 ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レ ー ク の命令で使用す る こ と はで き ま せん。 割 り 込みお よ び外 部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で先送 り さ れ ます。 遅延ス ロ ッ ト の命令が例外を引 き 起 こ す場合、 例外ハン ド ラ には、 例外が イ ネーブルにな っ ていない と 入 れないため、 MSR[EE] がセ ッ ト さ れてい る と き は、 こ の命令を通常は使用 し ないで く だ さ い。 注記 : MSR[DS] がセ ッ ト さ れてい る 場合は、 まず例外か ら 戻 る コ ー ド を チ ェ ッ ク す る 必要があ り 、 その場合は BTR のア ド レ ス に戻 り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 230 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ rtsd Return from Subroutine rtsd 1 0 1 1 0 rA、 IMM 0 1 1 0 0 0 0 6 rA IMM 1 1 1 6 3 1 説明 サブルーチンか ら 戻 る と 、 rA の内容 と IMM フ ィ ール ド (32 ビ ッ ト に符号拡張 さ れた も の) で指定 さ れ た ロ ケーシ ョ ン に分岐 し ます。 こ の命令には常に遅延ス ロ ッ ト があ り ます。 RTSD の後に続 く 命令は、 常に、 分岐先の前に実行 さ れま す。 擬似 コ ー ド PC (rA) + sext(IMM) allow following instruction to complete execution 変更 さ れる レ ジ ス タ • PC レ イテンシ • 1 サ イ ク ル (正 し く 分岐予測が行われ る 場合) • 2 サ イ ク ル (分岐先キ ャ ッ シ ュ がデ ィ ス エーブルの場合) • 3 サ イ ク ル (分岐予測が間違っ てい る 場合) 注記 変換は汎用レ ジ ス タ r15 を rA と し て使用す る ための も のです。 遅延 ス ロ ッ ト は、 IMM、 分岐、 ま たはブ レー ク の命令で使用す る こ と はで き ません。 割 り 込みお よ び 外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で先送 り さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 231 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ sb Store Byte 1 sb rD、 rA、 rB sbr rD、 rA、 rB 1 0 1 0 0 0 rD 6 rA rB 11 16 0 R 0 0 0 0 0 0 21 0 0 0 31 説明 レ ジ ス タ rD の最下位バ イ ト の内容を、 レ ジ ス タ rA お よ び rB の内容を足 し た結果の メ モ リ ロ ケーシ ョ ン に格納 し ます。 R ビ ッ ト がセ ッ ト さ れてい る 場合、 バ イ ト 反転 メ モ リ ロ ケーシ ョ ン が使用 さ れ、 E ビ ッ ト で定義 さ れてい る エ ンデ ィ ア ン と は逆の も のでデー タ を格納 し ます (仮想保護モー ド が イ ネーブルにな っ てい る 場合)。 仮想保護モー ド が イ ネーブルにな っ てい る 場合、 デー タ TLB ミ ス例外が発生 し 、 ア ド レ ス に対応す る 有 効な変換エ ン ト リ は TLB では検出 さ れ ません。 仮想保護モー ド が イ ネーブルにな っ てい る と デー タ ス ト レージ例外が発生 し 、 ノ ー ア ク セ ス ま たは読み 出 し 専用ゾーン保護に よ っ て ア ク セ ス が禁止 さ れ ます。 ノ ー ア ク セ ス許可はユーザー モー ド の場合にの み発生 し ます。 擬似 コ ー ド Addr (rA) + (rB) if TLB_Miss(Addr) and MSR[VM] = 1 then ESR[EC] 10010;ESR[S] 1 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Access_Protected(Addr) and MSR[VM] = 1 then ESR[EC] 10000;ESR[S] 1; ESR[DIZ] No-access-allowed MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else Mem(Addr) rD)[24:31] 変更 さ れる レ ジ ス タ • MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (例外が生成 さ れ る 場合) • ESR[EC]、 ESR[S] (例外が生成 さ れ る 場合) • ESR[DIZ] (デー タ ス ト レージ例外が生成 さ れ る 場合) レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 MicroBlaze が再順序付け命令を使用す る よ う に コ ン フ ィ ギ ュ レー ト さ れてい る 場合にのみ (C_USE_REORDER_INSTR = 1)、 こ のバ イ ト 反転命令は有効です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 232 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ sbi Store Byte Immediate sbi 1 1 rD、 rA、 IMM 1 1 0 0 0 rD 6 rA IMM 11 16 31 説明 レ ジ ス タ rD の最下位バ イ ト の内容に、 レ ジ ス タ rA の内容 と IMM の 32 ビ ッ ト に符号拡張 し た値を足 し た結果の メ モ リ ロ ケーシ ョ ン に格納 し ます。 仮想保護モー ド が イ ネーブルにな っ てい る 場合、 デー タ TLB ミ ス例外が発生 し 、 ア ド レ ス に対応す る 有 効な変換エ ン ト リ は TLB では検出 さ れ ません。 仮想保護モー ド が イ ネーブルにな っ てい る と デー タ ス ト レージ例外が発生 し 、 ノ ー ア ク セ ス ま たは読み 出 し 専用ゾーン保護に よ っ て ア ク セ ス が禁止 さ れ ます。 ノ ー ア ク セ ス許可はユーザー モー ド の場合にの み発生 し ます。 擬似 コ ー ド Addr (rA) + sext(IMM) if TLB_Miss(Addr) and MSR[VM] = 1 then ESR[EC] 10010;ESR[S] 1 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Access_Protected(Addr) and MSR[VM] = 1 then ESR[EC] 10000;ESR[S] 1; ESR[DIZ] No-access-allowed MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else Mem(Addr) rD)[24:31] 変更 さ れる レ ジ ス タ • MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (例外が生成 さ れ る 場合) • ESR[EC]、 ESR[S] (例外が生成 さ れ る 場合) • ESR[DIZ] (デー タ ス ト レージ例外が生成 さ れ る 場合) レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 233 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ sext16 Sign Extend Halfword sext16 1 0 0 1 0 rD、 rA 0 0 rD 6 rA 1 1 0 0 1 6 0 0 0 0 0 0 0 1 1 0 0 0 0 1 3 1 説明 こ の命令は 1 ハーフ ワ ー ド (16 ビ ッ ト ) を 1 ワ ー ド (32 ビ ッ ト ) に符号拡張 し ます。rA のビ ッ ト 16 は rD の ビ ッ ト 0 か ら 15 に コ ピー さ れ ます。 rA の ビ ッ ト 16 か ら 31 は rD の ビ ッ ト 16 か ら 31 に コ ピー さ れ ます。 擬似 コ ー ド (rD)[0:15] (rA)[16] (rD)[16:31] (rA)[16:31] 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サイ クル MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 234 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ sext8 Sign Extend Byte sext8 1 0 0 1 0 rD、 rA 0 0 rD 6 rA 1 1 0 0 1 6 0 0 0 0 0 0 0 1 1 0 0 0 0 0 3 1 説明 こ の命令は 1 バ イ ト (8 ビ ッ ト ) を 1 ワー ド (32 ビ ッ ト ) に符号拡張 し ます。rA の ビ ッ ト 24 は rD の ビ ッ ト 0 か ら 23 に コ ピー さ れます。 rA の ビ ッ ト 24 か ら 31 は rD のビ ッ ト 24 か ら 31 に コ ピー さ れます。 擬似 コ ー ド (rD)[0:23] (rA)[24] (rD)[24:31] (rA)[24:31] 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サイ クル MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 235 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ sh Store Halfword 1 1 sh rD、 rA、 rB shr rD、 rA、 rB 0 1 0 1 0 rD 6 rA rB 11 16 0 R 0 0 0 0 0 0 0 21 0 0 31 説明 レ ジ ス タ rD の最下位ハー フ ワ ー ド の内容を、 レ ジ ス タ rA お よ び rB の内容を足 し た結果の、 ハーフ ワ ー ド にア ラ イ ン さ れた メ モ リ ロ ケーシ ョ ンに格納 し ます。 R ビ ッ ト がセ ッ ト さ れてい る 場合、 ハーフ ワ ー ド 反転 メ モ リ ロ ケーシ ョ ン が使用 さ れ、 ハーフ ワ ー ド の 2 バ イ ト が反転 し 、 E ビ ッ ト で定義 さ れてい る エ ンデ ィ ア ン と は逆の も のでデー タ を格納 し ます (仮 想保護モー ド が イ ネーブルにな っ てい る 場合)。 仮想保護モー ド が イ ネーブルにな っ てい る 場合、 デー タ TLB ミ ス例外が発生 し 、 ア ド レ ス に対応す る 有効な変換エ ン ト リ は TLB では検出 さ れ ません。 仮想保護モー ド が イ ネーブルにな っ てい る と デー タ ス ト レージ例外が発生 し 、 ノ ー ア ク セ ス ま たは読 み出 し 専用ゾーン保護に よ っ て ア ク セ ス が禁止 さ れ ます。 ノ ー ア ク セ ス許可はユーザー モー ド の場合 にのみ発生 し ます。 ア ド レ ス の最下位ビ ッ ト がゼ ロ でない場合は、 ア ラ イ ン さ れていないデー タ ア ク セ ス例外が発生 し ま す。 擬似 コ ー ド Addr (rA) + (rB) if TLB_Miss(Addr) and MSR[VM] = 1 then ESR[EC] 10010;ESR[S] 1 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Access_Protected(Addr) and MSR[VM] = 1 then ESR[EC] 10000;ESR[S] 1; ESR[DIZ] No-access-allowed MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Addr[31] 0 then ESR[EC] 00001; ESR[W] 0; ESR[S] 1; ESR[Rx] rD else Mem(Addr) (rD)[16:31] 変更 さ れる レ ジ ス タ • • • • MSR[UM]、MSR[VM]、MSR[UMS]、MSR[VMS] (TLB ミ ス例外ま たはデー タ ス ト レージ例外が生成 さ れ る 場合) ESR[EC]、 ESR[S] (例外が生成 さ れ る 場合) ESR[DIZ] (デー タ ス ト レージ例外が生成 さ れ る 場合) ESR[W]、 ESR[Rx] (ア ラ イ ン さ れていないデー タ ア ク セ ス例外が生成 さ れ る 場合) レ イテンシ • • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 MicroBlaze が再順序付け命令を使用す る よ う に コ ン フ ィ ギ ュ レー ト さ れてい る 場合にのみ (C_USE_REORDER_INSTR = 1)、 こ のハーフ ワー ド 反転命令は有効です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 236 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ shi Store Halfword Immediate shi 1 1 1 rD、 rA、 IMM 1 0 0 1 rD 6 rA IMM 11 16 31 説明 レ ジ ス タ rD の最下位ハーフ ワー ド の内容を、 レ ジ ス タ rA の内容 と IMM の 32 ビ ッ ト に符号拡張 し た 値を足 し た結果の、 ハーフ ワ ー ド にア ラ イ ン さ れた メ モ リ ロ ケーシ ョ ンに格納 し ます。 仮想保護モー ド が イ ネーブルにな っ てい る 場合、 デー タ TLB ミ ス例外が発生 し 、 ア ド レ ス に対応す る 有効な変換エ ン ト リ は TLB では検出 さ れ ません。 仮想保護モー ド が イ ネーブルにな っ てい る と デー タ ス ト レージ例外が発生 し 、 ノ ー ア ク セ ス ま たは読み出 し 専用ゾーン保護に よ っ て ア ク セ ス が禁止 さ れ ます。 ノ ー ア ク セ ス許可はユーザー モー ド の場合にのみ発生 し ます。 ア ド レ ス の最下位ビ ッ ト がゼ ロ でない場合は、 ア ラ イ ン さ れていないデー タ ア ク セ ス例外が発生 し ます。 擬似 コ ー ド Addr (rA) + sext(IMM) if TLB_Miss(Addr) and MSR[VM] = 1 then ESR[EC] 10010;ESR[S] 1 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Access_Protected(Addr) and MSR[VM] = 1 then ESR[EC] 10000;ESR[S] 1; ESR[DIZ] No-access-allowed MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Addr[31] 0 then ESR[EC] 00001; ESR[W] 0; ESR[S] 1; ESR[Rx] rD else Mem(Addr) rD)[16:31] 変更 さ れる レ ジ ス タ • MSR[UM]、MSR[VM]、MSR[UMS]、MSR[VMS] (TLB ミ ス例外ま たはデー タ ス ト レージ例外が生成 さ れ る 場合) • ESR[EC]、 ESR[S] (例外が生成 さ れ る 場合) • ESR[DIZ] (デー タ ス ト レージ例外が生成 さ れ る 場合) • ESR[W]、 ESR[Rx] (ア ラ イ ン さ れていないデー タ ア ク セ ス例外が生成 さ れ る 場合) レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡 張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を 参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 237 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ sra Shift Right Arithmetic sra 1 0 0 1 rD、 rA 0 0 0 rD 6 rA 1 1 0 0 1 6 0 0 0 0 0 0 0 0 0 0 0 0 0 1 3 1 説明 rA の内容を 1 ビ ッ ト 右にシ フ ト さ せ、 結果を rD に配置 し ます。 rA の最上位ビ ッ ト (つま り 符号ビ ッ ト ) は、rD の最上位ビ ッ ト に配置 さ れ ます。 シ フ ト チ ェ ーン か ら 出力 さ れ る 最下位ビ ッ ト はキ ャ リ ー フ ラ グに配置 さ れ ます。 擬似 コ ー ド (rD)[0] (rA)[0] (rD)[1:31] (rA)[0:30] MSR[C] (rA)[31] 変更 さ れる レ ジ ス タ • rD • MSR[C] レ イテンシ • 1 サイ クル MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 238 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ src Shift Right with Carry src 1 0 rD、 rA 0 1 0 0 0 rD 6 rA 1 1 0 0 1 6 0 0 0 0 0 0 0 0 1 0 0 0 0 1 3 1 説明 rA の内容を 1 ビ ッ ト 右にシ フ ト さ せ、 結果を rD に配置 し ます。 キ ャ リ ー フ ラ グはシ フ ト チ ェ ーン でシ フ ト さ れ、 rD の最上位ビ ッ ト に配置 さ れ ます。 シ フ ト チ ェ ーン か ら 出力 さ れ る 最下位ビ ッ ト はキ ャ リ ー フ ラ グに配置 さ れます。 擬似 コ ー ド (rD)[0] MSR[C] (rD)[1:31] rA)[0:30] MSR[C] (rA)[31] 変更 さ れる レ ジ ス タ • rD • MSR[C] レ イテンシ • 1 サイ クル MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 239 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ srl Shift Right Logical srl 1 0 rD、 rA 0 1 0 0 0 rD 6 rA 1 1 0 0 1 6 0 0 0 0 0 0 0 1 0 0 0 0 0 1 3 1 説明 rA の内容を論理的に 1 ビ ッ ト 右にシ フ ト さ せ、 結果を rD に配置 し ます。 0 はシ フ ト チ ェーン でシ フ ト さ れ、 rD の最上位ビ ッ ト に配置 さ れ ます。 シ フ ト チ ェーン か ら 出力 さ れ る 最下位ビ ッ ト はキ ャ リ ー フ ラ グ に配置 さ れ ます。 擬似 コ ー ド (rD)[0] 0 (rD)[1:31] rA)[0:30] MSR[C] (rA)[31] 変更 さ れる レ ジ ス タ • rD • MSR[C] レ イテンシ • 1 サイ クル MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 240 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ sw Store Word 1 sw rD、 rA、 rB swr rD、 rA、 rB 1 0 1 1 0 0 rD 6 rA 11 rB 16 0 R 0 0 0 0 0 0 21 0 0 0 31 説明 レ ジ ス タ rD の内容に、 レ ジ ス タ rA お よ び rB の内容を足 し た結果を、 ワー ド にア ラ イ ン さ れた メ モ リ ロ ケーシ ョ ン に格納 し ます。 R ビ ッ ト がセ ッ ト さ れてい る 場合、 格納 さ れた ワー ド のバ イ ト が反転 さ れ、 E ビ ッ ト で定義 さ れてい る エ ンデ ィ ア ン と は逆の も のでデー タ を格納 し ます (仮想保護モー ド が イ ネーブルにな っ てい る 場合)。 仮想保護モー ド が イ ネーブルにな っ てい る 場合、 デー タ TLB ミ ス例外が発生 し 、 ア ド レ ス に対応す る 有 効な変換エ ン ト リ は TLB では検出 さ れ ません。 仮想保護モー ド が イ ネーブルにな っ てい る と デー タ ス ト レージ例外が発生 し 、 ノ ー ア ク セ ス ま たは読み 出 し 専用ゾーン保護に よ っ て ア ク セ ス が禁止 さ れ ます。 ノ ー ア ク セ ス許可はユーザー モー ド の場合にの み発生 し ます。 ア ド レ ス の最下位ビ ッ ト 2 つがゼ ロ でない場合は、 ア ラ イ ン さ れていないデー タ ア ク セ ス 例外が発生 し ます。 擬似 コ ー ド Addr (rA) + (rB) if TLB_Miss(Addr) and MSR[VM] = 1 then ESR[EC] 10010;ESR[S] 1 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Access_Protected(Addr) and MSR[VM] = 1 then ESR[EC] 10000;ESR[S] 1; ESR[DIZ] No-access-allowed MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Addr[30:31] 0 then ESR[EC] 00001; ESR[W] 1; ESR[S] 1; ESR[Rx] rD else Mem(Addr) rD)[0:31] 変更 さ れる レ ジ ス タ • • • • MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ ス ト レージ例外が生成 さ れ る 場合) ESR[EC]、 ESR[S] (例外が生成 さ れ る 場合) ESR[DIZ] (デー タ ス ト レージ例外が生成 さ れ る 場合) ESR[W]、 ESR[Rx] (ア ラ イ ン さ れていないデー タ ア ク セ ス例外が生成 さ れ る 場合) レ イテンシ • • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 MicroBlaze が再順序付け命令を使用す る よ う に コ ン フ ィ ギ ュ レー ト さ れてい る 場合にのみ (C_USE_REORDER_INSTR = 1)、 こ の ワ ー ド 反転命令は有効です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 241 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ swapb Swap Bytes swapb 1 0 0 1 0 0 rD、 rA 0 rD rA 6 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 1 6 0 0 3 1 説明 4 バ イ ト と し て処理 さ れた レ ジ ス タ rA の内容を ス ワ ッ プ し 、 結果を rD に配置 し ま す。 リ ト ル エ ン デ ィ ア ン か ら ビ ッ グ エ ンデ ィ ア ン、 ま たはその逆へ、 レ ジ ス タ のバ イ ト シーケ ン ス の フ ォ ーマ ッ ト を効果的に変換 し ます。 擬似 コ ー ド (rD)[24:31] (rD)[16:23] (rD)[8:15] (rD)[0:7] (rA)[0:7] (rA)[8:15] (rA)[16:23] (rA)[24:31] 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サイ クル 注記 MicroBlaze が再順序付け命令を使用す る よ う に コ ン フ ィ ギ ュ レー ト さ れてい る 場合にのみ (C_USE_REORDER_INSTR = 1)、 こ の命令は有効です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 242 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ swaph Swap Halfwords swaph 1 0 0 1 0 0 rD、 rA 0 rD 6 rA 1 1 0 0 1 6 0 0 0 0 0 1 1 1 1 0 0 0 1 0 3 1 説明 2 ハーフ ワ ー ド と し て処理 さ れた レ ジ ス タ rA の内容を ス ワ ッ プ し 、 結果を rD に配置 し ます。 リ ト ル エ ンデ ィ ア ン か ら ビ ッ グ エ ンデ ィ ア ン、 ま たはその逆へ、 レ ジ ス タ の 2 ハーフ ワ ー ド の フ ォ ー マ ッ ト を効果的に変換 し ます。 擬似 コ ー ド (rD)[0:15] rA)[16:31] (rD)[16:31] rA)[0:15] 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サイ クル 注記 MicroBlaze が 再 順 序 付 け 命 令 を 使 用 す る よ う に コ ン フ ィ ギ ュ レ ー ト さ れ て い る 場 合 に の み (C_USE_REORDER_INSTR = 1)、 こ の命令は有効です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 243 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ swi Store Word Immediate swi 1 1 1 1 rD、 rA、 IMM 1 0 0 rD 6 rA IMM 11 16 31 説明 レ ジ ス タ rD の内容を、 レ ジ ス タ rA の内容 と IMM の 32 ビ ッ ト に符号拡張 し た値を足 し た結果の、 ワ ー ド にア ラ イ ン さ れた メ モ リ ロ ケーシ ョ ンに格納 し ます。 仮想保護モー ド が イ ネーブルにな っ てい る 場合、 デー タ TLB ミ ス例外が発生 し 、 ア ド レ ス に対応す る 有効な変換エ ン ト リ は TLB では検出 さ れ ません。 仮想保護モー ド が イ ネーブルにな っ てい る と デー タ ス ト レージ例外が発生 し 、 ノ ー ア ク セ ス ま たは 読み出 し 専用ゾーン保護に よ っ て ア ク セ ス が禁止 さ れ ます。 ノ ー ア ク セ ス許可はユーザー モー ド の 場合にのみ発生 し ます。 ア ド レ ス の最下位ビ ッ ト 2 つがゼ ロ でない場合は、 ア ラ イ ン さ れていないデー タ ア ク セ ス例外が発 生 し ます。 擬似 コ ー ド Addr (rA) + sext(IMM) if TLB_Miss(Addr) and MSR[VM] = 1 then ESR[EC] 10010;ESR[S] 1 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Access_Protected(Addr) and MSR[VM] = 1 then ESR[EC] 10000;ESR[S] 1; ESR[DIZ] No-access-allowed MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Addr[30:31] 0 then ESR[EC] 00001; ESR[W] 1; ESR[S] 1; ESR[Rx] rD else Mem(Addr) (rD)[0:31] 変更 さ れる レ ジ ス タ • • • • MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ ス ト レージ例外が生成 さ れ る 場合) ESR[EC]、 ESR[S] (例外が生成 さ れ る 場合) ESR[DIZ] (デー タ ス ト レージ例外が生成 さ れ る 場合) ESR[W]、 ESR[Rx] (ア ラ イ ン さ れていないデー タ ア ク セ ス例外が生成 さ れ る 場合) レ イテンシ • • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号 拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先 行 さ せ る こ と で、 上書 き す る こ と がで き ま す。 32 ビ ッ ト の即値の使用に関 し て は、 196 ページ の 「imm」 を参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 244 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ swx Store Word Exclusive swx 1 1 0 rD、 rA、 rB 1 1 0 0 rD 6 rA 11 rB 16 1 0 0 0 0 0 0 0 21 0 0 0 31 説明 レ ジ ス タ rD の内容を、 レ ジ ス タ rA お よ び rB の内容を足 し た結果の、 ワー ド にア ラ イ ン さ れた メ モ リ ロ ケーシ ョ ン に条件付 き で格納 し ます。 排他的ア ク セ ス が イ ネーブルにな っ てい る AXI4 イ ン タ ー コ ネ ク ト を使用 し てい る 場合、 イ ン タ ー コ ネ ク ト 応答が EXOKAY で、 予約ビ ッ ト がセ ッ ト さ れ る と 、 格納 さ れま す。 それ以外の場合は、 予約ビ ッ ト がセ ッ ト さ れ る と 格納 さ れ ます。 格納 さ れない場合は、 キ ャ リ ー フ ラ グ (MSR[C]) がセ ッ ト さ れ ます。 それ以外の場合はキ ャ リ ーフ ラ グは ク リ アにな り ます。 予約ビ ッ ト は ク リ アにな り ます。 仮想保護モー ド が イ ネーブルにな っ てい る 場合、 デー タ TLB ミ ス例外が発生 し 、 ア ド レ ス に対応す る 有 効な変換エ ン ト リ は TLB では検出 さ れ ません。 仮想保護モー ド が イ ネーブルにな っ てい る と デー タ ス ト レージ例外が発生 し 、 ノ ー ア ク セ ス ま たは読み 出 し 専用ゾーン保護に よ っ て ア ク セ ス が禁止 さ れ ます。 ノ ー ア ク セ ス許可はユーザー モー ド の場合にの み発生 し ます。 ア ド レ ス の最下位ビ ッ ト 2 つがゼ ロ でない場合は、 ア ラ イ ン さ れていないデー タ ア ク セ ス 例外が発生 し ません。 AXI の排他的ア ク セ ス を イ ネーブルにす る と 、 ほかのバ ス マ ス タ ーか ら 操作が保護 さ れますが、 ア ド レ ス指定 し た ス レーブで排他的ア ク セ ス をサポー ト す る よ う に し てお く 必要があ り ます。 排他的ア ク セ ス が イ ネーブルにな っ ていない と 、 内部予約ビ ッ ト のみが使用 さ れ ます。 排他的ア ク セ ス は、 ペ リ フ ェ ラ ルお よ びキ ャ ッ シ ュ イ ン タ ー コ ネ ク ト にそれぞれ、 C_M_AXI_DP_EXCLUSIVE_ACCESS お よ び C_M_AXI_DC_EXCLUSIVE_ACCESS と い う 2 つのパ ラ メ ー タ ーを設定す る と イ ネーブルにな り ます。 擬似 コ ー ド Addr (rA) + (rB) if Reservation = 0 then MSR[C] 1 else if TLB_Miss(Addr) and MSR[VM] = 1 then ESR[EC] 10010;ESR[S] 1 MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else if Access_Protected(Addr) and MSR[VM] = 1 then ESR[EC] 10000;ESR[S] 1; ESR[DIZ] No-access-allowed MSR[UMS] MSR[UM]; MSR[VMS] MSR[VM]; MSR[UM] 0; MSR[VM] 0 else Reservation if AXI_Exclusive(Addr) and AXI_Response EXOKAY then MSR[C] else Mem(Addr) rD)[0:31] MSR[C] MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 245 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 変更 さ れる レ ジ ス タ • MSR[C] (予約が生成 さ れない限 り ) • MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ ス ト レージ例外が生成 さ れ る 場合) • ESR[EC]、 ESR[S] (例外が生成 さ れ る 場合) • ESR[DIZ] (デー タ ス ト レージ例外が生成 さ れ る 場合) レ イテンシ • 1 サ イ ク ル ( C_AREA_OPTIMIZED=0) • 2 サ イ ク ル ( C_AREA_OPTIMIZED=1) 注記 こ の命令は、 セマ フ ォ やス ピ ン ロ ッ ク な ど、 排他的ア ク セ ス を イ ン プ リ メ ン ト す る ために、 LWX と 一緒 に使用 さ れ ます。 キ ャ リ ー フ ラ グ (MSR[C]) はす ぐ にはセ ッ ト さ れない可能性があ り ます (パ イ プ ラ イ ン ス ト ールの動作に よ る )。 キ ャ リ ー フ ラ グ の正 し い値を得 る ため、 SWX 命令は、 MSRCLR、 MSRSET、 MTS、 ま たは SRC 命令のす ぐ 後に続け る こ と はで き ません。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 246 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ wdc 1 Write to Data Cache wdc wdc.flush wdc.clear wdc.ext.flush wdc.ext.clear rA、 rA、 rA、 rA、 rA、 0 0 0 1 0 0 0 0 rB rB rB rB rB 0 0 0 6 rA 11 rB 16 E 21 0 0 0 1 1 F 27 0 1 T 0 31 説明 キ ャ ッ シ ュ ラ イ ン を無効化ま たはフ ラ ッ シ ュ す る ため、 デー タ キ ャ ッ シ ュ タ グに書 き 込みます。 F ビ ッ ト を セ ッ ト す る にはニーモニ ッ ク wdc.flush を、 T ビ ッ ト を セ ッ ト す る には wdc.clear を、 E、 F、 T ビ ッ ト を セ ッ ト す る には wdc.ext.flush を、 E お よ び T ビ ッ ト を セ ッ ト す る には wdc.ext.clear を使用 し ます。 C_DCACHE_USE_WRITEBACK が 1 に設定 さ れてい る 場合、 F ビ ッ ト がセ ッ ト さ れていれば、 こ の命令 はキ ャ ッ シ ュ ラ イ ン を フ ラ ッ シ ュ し て無効化 し ます。 そ う でない場合は、 キ ャ ッ シ ュ ラ イ ン を無効化に す る だけで、 メ モ リ に書 き 込まれていないデー タ を破棄 し ます。 T ビ ッ ト がセ ッ ト さ れてい る 場合は、 一 致 し てい る ア ド レ ス のキ ャ ッ シ ュ ラ イ ン のみが無効にな り ま す。 rB を加え た レ ジ ス タ rA は、 関係す る キ ャ ッ シ ュ ラ イ ンのア ド レ ス です。 E ビ ッ ト は考慮 さ れ ません。 C_DCACHE_USE_WRITEBACK が 0 に ク リ ア さ れ る 場合は、 E ビ ッ ト がセ ッ ト さ れていな ければ、 こ の 命令はキ ャ ッ シ ュ ラ イ ン を無効に し ます。レ ジ ス タ rA には関係す る キ ャ ッ シ ュ ラ イ ンのア ド レ ス が含ま れ、 レ ジ ス タ rB の値は使用 さ れ ません。 E ビ ッ ト が 1 にセ ッ ト さ れてい る 場合は、 外部キ ャ ッ シ ュ の一 致 し てい る ア ド レ ス を、 E ビ ッ ト の値に よ っ て、 無効化す る か フ ラ ッ シ ュ す る よ う に、 MicroBlaze が リ ク エ ス ト し ます。 C_INTERCONNECT が 3 (ACE) に設定 さ れてい る と き にのみ、 E ビ ッ ト は考慮 さ れます。 MicroBlaze が MMU を使用す る よ う に (C_USE_MMU >= 1) コ ン フ ィ ギ ュ レー ト さ れてい る 場合、 こ の命令 は特権命令です。 つ ま り 、 命令がユーザー モー ド (MSR[UM] = 1) で実行 さ れ る と 、 特権命令例外が発生 し ます。 擬似 コ ー ド if MSR[UM] = 1 then ESR[EC] 00111 else if C_DCACHE_USE_WRITEBACK = 1 then address (Ra) + (Rb) else address (Ra) if E = 0 then if C_DCACHE_LINE_LEN = 4 then cacheline_mask (1 << log2(C_DCACHE_BYTE_SIZE) - 4) - 1 cacheline (DCache Line)[(address >> 4) cacheline_mask] cacheline_addr address xfffffff0 if C_DCACHE_LINE_LEN = 8 then cacheline_mask (1 << log2(C_DCACHE_BYTE_SIZE) - 5) - 1 (DCache Line)[(address >> 5) cacheline_mask] cacheline cacheline_addr address xffffffe0 if C_DCACHE_LINE_LEN = 16 then cacheline_mask (1 << log2(C_DCACHE_BYTE_SIZE) - 6) - 1 (DCache Line)[(address >> 6) cacheline_mask] cacheline cacheline_addr address xffffffc0 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 247 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ if F = 1 and cacheline.Dirty then for i 0 ..C_DCACHE_LINE_LEN - 1 loop if cacheline.Valid[i] then Mem(cacheline_addr + i * 4) cacheline.Data[i] if T = 0 then cacheline.Tag 0 else if cacheline.Address = cacheline_addr then cacheline.Tag 0 if E = 1 then if F = 1 then request external cache flush with address else request external cache invalidate with address 変更 さ れる レ ジ ス タ • ESR[EC] (特権命令例外が生成 さ れ る 場合) レ イテンシ • • • • 2 サ イ ク ル (wdc.clear) 2 サ イ ク ル ( C_AREA_OPTIMIZED=1 の wdc) 3 サ イ ク ル ( C_AREA_OPTIMIZED=0 の wdc) 2 + N サ イ ク ル (wdc.flush。 N は随時 メ モ リ にキ ャ ッ シ ュ ラ イ ン を フ ラ ッ シ ュ す る のに必要な ク ロ ッ ク サ イ ク ル 数) 注記 wdc, wdc.flush お よ び wdc.clear 命令は、 デー タ キ ャ ッ シ ュ イ ネーブル (MSR[DCE]) か ら は独立 し ていて、 デー タ キ ャ ッ シ ュ が イ ネーブルにな っ ていて も デ ィ ス エーブルにな っ ていて も 使用で き ます。 wdc.clear 命令は、 ダ イ レ ク ト メ モ リ ア ク セ ス デバ イ ス に よ っ て書 き 込まれ る バ ッ フ ァ ーな ど、 メ モ リ の 特定エ リ ア を無効化す る ための も のです。 こ の命令を使用す る こ と に よ り 、 ほかのキ ャ ッ シ ュ ラ イ ン が 誤っ て無効化 さ れた り 、 メ モ リ に ま だ書 き 込まれていないデー タ を破棄 し て し ま わない よ う にす る こ と が で き ます。 パ ラ メ ー タ ー C_USE_MMU の設定にかかわ ら ず、ま た MMU が仮想モー ド であ っ て も リ アル モー ド であ っ て も 、 影響す る キ ャ ッ シ ュ ラ イ ンのア ド レ ス は常に物理ア ド レ ス です。 キ ャ ッ シ ュ 全体を フ ラ ッ シ ュ す る のにループで wdc.flush を使用 し てい る 場合、キ ャ ッ シ ュ ベース ア ド レ ス に Ra、 ループ カ ウ ン タ ーに Rb を使用す る こ と に よ り 、 ループ を最適化で き ます。 addik addik loop: wdc.flush bgtid addik r5,r0,C_DCACHE_BASEADDR r6,r0,C_DCACHE_BYTE_SIZE-C_DCACHE_LINE_LEN*4 r5,r6 r6,loop r6,r6,-C_DCACHE_LINE_LEN*4 キ ャ ッ シ ュ のあ る メ モ リ エ リ ア をす る のにループで wdc.clear を使用 し てい る 場合、 メ モ リ エ リ ア ベー ス ア ド レ ス に Ra、 ループ カ ウ ン タ ーに Rb を使用す る こ と に よ り 、 ループ を最適化で き ます。 addik addik loop: wdc.clear bgtid addik r5,r0,memory_area_base_address r6,r0,memory_area_byte_size-C_DCACHE_LINE_LEN*4 r5,r6 r6,loop r6,r6,-C_DCACHE_LINE_LEN*4 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 248 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ wic Write to Instruction Cache wic 1 0 0 rA、 rB 1 0 0 0 0 0 0 0 0 6 rA rB 1 1 0 0 0 0 1 6 1 1 0 1 0 0 0 3 1 説明 キ ャ ッ シ ュ ラ イ ン を無効化す る ため、 命令キ ャ ッ シ ュ タ グに書 き 込みます。 レ ジ ス タ rB の値は使用 さ れ ません。 レ ジ ス タ rA には関係す る キ ャ ッ シ ュ ラ イ ン のア ド レ ス が含まれ ます。 MicroBlaze が MMU を使用す る よ う に (C_USE_MMU >= 1) コ ン フ ィ ギ ュ レー ト さ れてい る 場合、 こ の命令 は特権命令です。 つ ま り 、 命令がユーザー モー ド (MSR[UM] = 1) で実行 さ れ る と 、 特権命令例外が発生 し ます。 擬似 コ ー ド if MSR[UM] = 1 then ESR[EC] 00111 else if C_ICACHE_LINE_LEN = 4 then cacheline_mask (1 << log2(C_CACHE_BYTE_SIZE) (ICache Line)[((Ra) >> 4) cacheline_mask].Tag if C_ICACHE_LINE_LEN = 8 then cacheline_mask (1 << log2(C_CACHE_BYTE_SIZE) (ICache Line)[((Ra) >> 5) cacheline_mask].Tag if C_ICACHE_LINE_LEN = 16 then cacheline_mask (1 << log2(C_CACHE_BYTE_SIZE) (ICache Line)[((Ra) >> 6) cacheline_mask].Tag - 4) - 1 0 - 5) - 1 0 - 6) - 1 0 変更 さ れる レ ジ ス タ • ESR[EC] (特権命令例外が生成 さ れ る 場合) レ イテンシ • 2 サイ クル 注記 WIC 命令は、 命令キ ャ ッ シ ュ イ ネーブル (MSR[ICE]) か ら は独立 し ていて、 命令キ ャ ッ シ ュ が イ ネーブル にな っ ていて も デ ィ ス エーブルにな っ ていて も 使用で き ます。 パ ラ メ ー タ ーが C_USE_MMU = 3 で MMU が仮想モー ド の と き 、 影響を受け る キ ャ ッ シ ュ ラ イ ン のア ド レ ス は仮想ア ド レ ス にな り ます。 それ以外の と き は物理ア ド レ ス です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 249 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ xor Logical Exclusive OR xor 1 0 rD、 rA、 rB 0 0 1 0 0 rD 6 rA 1 1 rB 1 6 0 2 1 0 0 0 0 0 0 0 0 0 0 3 1 説明 レ ジ ス タ rA の内容が レ ジ ス タ rB の内容 と XOR さ れていて、 その結果が レ ジ ス タ rD に配置 さ れます。 擬似 コ ー ド (rD) (rA) (rB) 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サイ クル MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 250 第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ xori Logical Exclusive OR with Immediate xori 1 0 1 rD、 rA、 IMM 0 1 0 0 rD 6 rA 1 1 IMM 1 6 3 1 説明 左側の 16 個の 0 ビ ッ ト を連結 さ せて、 IMM フ ィ ール ド は 32 ビ ッ ト に拡張 さ れます。 レ ジ ス タ rA の内容 は拡張 さ れた IMM フ ィ ール ド と XOR さ れて、 その結果が レ ジ ス タ rD に配置 さ れます。 擬似 コ ー ド (rD) (rA) sext(IMM) 変更 さ れる レ ジ ス タ • rD レ イテンシ • 1 サイ クル 注記 デフ ォ ル ト で、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド 値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オぺ ラ ン ド と し て使用 し ます。 こ の動作は、 IMM 命令を使用 し て タ イ プ B 命令を先行 さ せ る こ と で、 上書 き す る こ と がで き ます。 32 ビ ッ ト の即値の使用に関 し ては、 196 ページの 「imm」 を参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 251 付録 A パフ ォ ーマ ン スおよび リ ソ ース使用率 パフ ォ ーマ ン ス こ の コ アのパフ ォーマ ン ス特性化は、 マージ ン シ ス テ ム手法を用いて行われてい ます。 マージ ン シ ス テ ム特性化の 詳細は、 『Vivado Design Suite ユーザー ガ イ ド : IP を使用 し た設計』 (UG896) の 「IP Characterization and fMAX Margin System Methodology」 を参照 し て く だ さ い。 最大周波数 MicroBlaze コ ア の最大周波数は、 表 A-1 に リ ス ト さ れてい ます。 注記 : Zynq®-7000 の結果は、 7 シ リ ーズの結果に類似 し てい る と 予想 さ れます。 表 A‐1 : 最大周波数 ファミ リ Fmax (MHz) Virtex®-7 373 Kintex®-7 385 Artix®-7 254 Virtex UltraScale™ 458 Kintex UltraScale 430 リ ソ ース使用量 さ ま ざ ま なパ ラ メ ー タ ー コ ン フ ィ ギ ュ レーシ ョ ンの MicroBlaze コ アの リ ソ ース使用率は、 Virtex-7 (表 A-2)、 Kintex7 (表 A-3)、Artix-7 (表 A-4)、Virtex UltraScale (表 A-5)、お よ び Kintex UltraScale (表 A-6) デバ イ ス で計測 さ れてい ます。 注記 : Zynq®-7000 の結果は、 7 シ リ ーズの結果に類似 し てい る と 予想 さ れます。 計測 さ れた コ ン フ ィ ギ ュ レ ーシ ョ ン ぞれそれのパ ラ メ ー タ ー値は表 A-7 に リ ス ト さ れてい ます。 こ れ ら の コ ン フ ィ ギ ュ レーシ ョ ンは、MicroBlaze の コ ン フ ィ ギ ュ レーシ ョ ン ウ ィ ザー ド に含まれてい る テ ンプ レー ト に直接対応 し てい ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 252 付録 A : パフ ォ ーマ ン スおよび リ ソ ース使用率 表 A‐2 : デバイ ス使用率 ‐ Virtex‐7 FPGA (XC7VX485T ffg1761‐3) デバイ ス リ ソ ース コ ン フ ィ ギ ュ レーシ ョ ン LUT FF Fmax (MHz) 最小エ リ ア 663 228 362 最大パフ ォーマ ン ス 3863 3063 223 最大周波数 909 546 362 MMU を使用 し た Linux 3646 3223 225 MMU を使用 し た低性能 Linux 3121 2588 219 標準 2066 1777 244 表 A‐3 : デバイ ス使用率 ‐ Kintex‐7 FPGA (XC7K325T ffg900‐3) デバイ ス リ ソ ース コ ン フ ィ ギ ュ レーシ ョ ン LUT FF Fmax (MHz) 最小エ リ ア 654 220 355 最大パフ ォーマ ン ス 3972 3063 212 最大周波数 912 546 355 MMU を使用 し た Linux 3668 3213 221 MMU を使用 し た低性能 Linux 3101 2576 219 標準 2064 1777 237 表 A‐4 : デバイ ス使用率 ‐ Artix‐7 FPGA (XC7A200T fbg676‐3) デバイ ス リ ソ ース コ ン フ ィ ギ ュ レーシ ョ ン LUT FF Fmax (MHz) 最小エ リ ア 648 214 234 最大パフ ォーマ ン ス 3879 3064 154 最大周波数 906 545 234 MMU を使用 し た Linux 3653 3218 142 MMU を使用 し た低性能 Linux 3108 2582 153 標準 2070 1777 190 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 253 付録 A : パフ ォ ーマ ン スおよび リ ソ ース使用率 表 A‐5 : デバイ ス使用率 ‐ Virtex UltraScale FPGA (XCVU095 ffvd1924‐3) デバイ ス リ ソ ース コ ン フ ィ ギ ュ レーシ ョ ン LUT FF Fmax (MHz) 最小エ リ ア 584 214 404 最大パフ ォーマ ン ス 3923 3061 263 最大周波数 908 545 404 MMU を使用 し た Linux 3618 3204 251 MMU を使用 し た低性能 Linux 3086 2575 254 標準 2052 1776 320 表 A‐6 : デバイ ス使用率 ‐ Kintex UltraScale FPGA (XCKU040 ffva1156‐3) デバイ ス リ ソ ース コ ン フ ィ ギ ュ レーシ ョ ン LUT FF Fmax (MHz) 最小エ リ ア 576 217 410 最大パフ ォーマ ン ス 3938 3061 272 最大周波数 906 545 410 MMU を使用 し た Linux 3613 3204 241 MMU を使用 し た低性能 Linux 3080 2575 244 標準 2062 1776 285 表 A‐7 : パラ メ ー タ ー コ ン フ ィ ギ ュ レーシ ョ ン 標準 低性能 Linux (MMU を使用) Linux (MMU を使用) パラ メ ー タ ー 最大 周波数 最小 エ リ ア 最大 パフ ォ ーマ ン ス コ ン フ ィ ギ ュ レーシ ョ ン パラ メ ー タ ー値 C_ALLOW_DCACHE_WR 1 1 1 1 1 1 C_ALLOW_ICACHE_WR 1 1 1 1 1 1 C_AREA_OPTIMIZED 1 0 0 0 0 0 C_CACHE_BYTE_SIZE 4096 32768 4096 16384 8192 8192 C_DCACHE_BYTE_SIZE 4096 32768 4096 16384 8192 8192 C_DCACHE_LINE_LEN 4 8 4 4 4 4 C_DCACHE_USE_WRITEBACK 0 1 0 0 0 0 C_DEBUG_ENABLED 0 1 0 1 1 1 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 254 付録 A : パフ ォ ーマ ン スおよび リ ソ ース使用率 表 A‐7 : パラ メ ー タ ー コ ン フ ィ ギ ュ レーシ ョ ン (続き) 標準 低性能 Linux (MMU を使用) Linux (MMU を使用) パラ メ ー タ ー 最大 周波数 最小 エ リ ア 最大 パ フ ォ ーマ ン ス コ ン フ ィ ギ ュ レーシ ョ ン パラ メ ー タ ー値 C_DIV_ZERO_EXCEPTION 0 0 0 1 0 0 C_M_AXI_D_BUS_EXCEPTION 0 0 0 1 1 1 C_FPU_EXCEPTION 0 0 0 0 0 0 C_FSL_EXCEPTION 0 0 0 0 0 0 C_FSL_LINKS 0 0 1 0 0 0 C_ICACHE_LINE_LEN 4 8 4 8 4 8 C_ILL_OPCODE_EXCEPTION 0 0 0 1 1 0 C_M_AXI_I_BUS_EXCEPTION 0 0 0 1 1 0 C_MMU_DTLB_SIZE 2 4 2 4 4 4 C_MMU_ITLB_SIZE 1 2 1 2 2 2 C_MMU_TLB_ACCESS 3 3 3 3 3 3 C_MMU_ZONES 2 2 2 2 2 2 C_NUMBER_OF_PC_BRK 0 1 1 1 1 2 C_NUMBER_OF_RD_ADDR_BRK 0 0 0 0 0 0 C_NUMBER_OF_WR_ADDR_BRK 0 0 0 0 0 0 C_OPCODE_0x0_ILLEGAL 0 0 0 1 1 0 C_PVR 0 0 0 2 0 0 C_UNALIGNED_EXCEPTIONS 0 0 0 1 1 0 C_USE_BARREL 0 1 0 1 1 1 C_USE_DCACHE 0 1 0 1 1 1 C_USE_DIV 0 1 0 1 0 0 C_USE_EXTENDED_FSL_INSTR 0 0 0 0 0 0 C_USE_FPU 0 2 0 0 0 0 C_USE_HW_MUL 0 2 0 2 1 1 C_USE_ICACHE 0 1 0 1 1 1 C_USE_MMU 0 0 0 3 3 0 C_USE_MSR_INSTR 0 1 0 1 1 1 C_USE_PCMP_INSTR 0 1 0 1 1 1 C_USE_REORDER_INSTR 0 1 1 1 1 1 C_USE_BRANCH_TARGET_CACHE 0 1 0 0 0 0 C_BRANCH_TARGET_CACHE_SIZE 0 0 0 0 0 0 C_ICACHE_STREAMS 0 1 0 1 0 0 C_ICACHE_VICTIMS 0 8 0 8 0 0 C_DCACHE_VICTIMS 0 8 0 8 0 0 C_ICACHE_FORCE_TAG_LUTRAM 0 0 0 0 0 0 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.2) 2015 年 96 月 30 (v2015.3) 24 日 japan.xilinx.com 255 付録 A : パフ ォ ーマ ン スおよび リ ソ ース使用率 表 A‐7 : パラ メ ー タ ー コ ン フ ィ ギ ュ レーシ ョ ン (続き) 標準 低性能 Linux (MMU を使用) Linux (MMU を使用) パラ メ ー タ ー 最大 周波数 最小 エ リ ア 最大 パ フ ォ ーマ ン ス コ ン フ ィ ギ ュ レーシ ョ ン パラ メ ー タ ー値 C_DCACHE_FORCE_TAG_LUTRAM 0 0 0 0 0 0 C_ICACHE_ALWAYS_USED 0 1 0 1 1 0 C_DCACHE_ALWAYS_USED 0 1 0 1 1 0 C_D_AXI 0 1 0 1 1 0 C_USE_INTERRUPT 0 0 0 1 1 0 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 256 付録 B その他の リ ソ ースおよび法的通知 ザイ リ ン ク ス リ ソ ース ア ンサー、 資料、 ダ ウ ン ロ ー ド 、 フ ォー ラ ム な ど のサポー ト リ ソ ース は、 ザ イ リ ン ク ス サポー ト サ イ ト を参照 し て く だ さ い。 ソ リ ュ ーシ ョ ン セ ン タ ー デバ イ ス、 ツール、 IP のサポー ト については、 ザ イ リ ン ク ス ソ リ ュ ーシ ョ ン セ ン タ ーを参照 し て く だ さ い。 ト ピ ッ ク には、 デザ イ ン ア シ ス タ ン ト 、 ア ド バ イ ザ リ 、 ト ラ ブルシ ュ ー ト ヒ ン ト な ど が含まれます。 参考資料 次の資料は、 Vivado の イ ン ス ト ール デ ィ レ ク ト リ か ら ア ク セ ス で き ます。 参考資料には次の も のがあ り ます。 1. 『Vivado Design Suite ユーザー ガ イ ド : IP を使用 し た設計』 (UG896) 2. 『Vivado Design Suite ユーザー ガ イ ド : IP イ ン テ グ レー タ ーを使用 し た IP サブシ ス テ ムの設計』 (UG994) 3. 『Vivado Design Suite ユーザー ガ イ ド : エンベデ ッ ド プ ロ セ ッ サ ハー ド ウ ェ ア デザ イ ン』 (UG898) 4. 『ザ イ リ ン ク ス ソ フ ト ウ ェ ア開発キ ッ ト (SDK) ヘルプ』 (UG782) 5. 『エンベデ ッ ド シ ス テ ム ツール リ フ ァ レ ン ス マニ ュ アル』 (UG1043 : 英語版、 日本語版) 6. 『PowerPC プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド 』 (UG011) 7. 『AMBA 4 AXI4-Stream Protocol Specification, Version 1.0』 (ARM IHI 0051A) 8. 『AMBA AXI and ACE Protocol Specification』 (ARM IHI 0022E) 9. 『MicroBlaze Debug Module (MDM) 製品ガ イ ド 』 (PG115) 10. 『LogiCORE IP Soft Error Mitigation Controller 製品ガ イ ド 』 (PG036 : 英語版、 日本語版) 11. 『デバ イ ス信頼性レ ポー ト 』 (UG116) 12. 『LogiCore IP Processor LMB BRAM Interface Controller 製品ガ イ ド 』 (PG112) 13. 『階層デザ イ ン設計手法ガ イ ド 』 (UG748) MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 257 付録 B : その他の リ ソ ースおよび法的通知 次の追加資料には、 URL を直接 ク リ ッ ク し て ア ク セ ス で き ます。 14. GNU マニ ュ アル セ ッ ト http://www.gnu.org/manual 15. IEEE 754-1985 規格 http://en.wikipedia.org/wiki/IEEE_754-1985 ト レーニ ング リ ソ ース ザ イ リ ン ク ス では、 本書に含まれ る コ ン セプ ト を説明する さ ま ざ ま な QuickTake ビデオお よ び ト レーニ ン グ コ ース を 提供 し てい ます。 次の リ ン ク か ら 関連す る ト レーニ ン グ リ ソ ース を参照 し て く だ さ い。 1. Vivado Design Suite QuickTake ビデオ : Vivado IP イ ン テ グ レー タ ーを使用 し たデザ イ ン 2. Vivado Design Suite QuickTake ビデオ : IP イ ン テ グ レー タ ーを活用す る ための ヒ ン ト 3. Vivado Design Suite QuickTake ビデオ チ ュ ー ト リ アル 4. Vivado での FPGA 設計導入 ト レーニ ン グ コ ース 5. Vivado デザ イ ン ツール フ ロ ー ト レーニ ン グ コ ース 6. Zynq All Programmable SoC エンベデ ッ ド シ ス テ ム開発 7. エンベデ ッ ド シ ス テ ム開発 – 実践編 – 8. エンベデ ッ ド シ ス テ ム ソ フ ト ウ ェ ア開発 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 258 付録 B : その他の リ ソ ースおよび法的通知 お読み く だ さ い : 重要な法的通知 本通知に基づいて貴殿ま たは貴社 (本通知の被通知者が個人の場合には 「貴殿」 、 法人その他の団体の場合には 「貴社」 。 以下同 じ ) に開示 さ れ る 情報 (以下 「本情報」 と いい ます) は、 ザ イ リ ン ク ス の製品を選択お よ び使用す る こ と のためにのみ提供 さ れ ます。 適 用 さ れ る 法律が許容す る 最大限の範囲で、 (1) 本情報は 「現状有姿」、 お よ びすべて受領者の責任で (with all faults) と い う 状態で提供 さ れ、 ザ イ リ ン ク ス は、 本通知を も っ て、 明示、 黙示、 法定を問わず (商品性、 非侵害、 特定目的適合性の保証を含みますが こ れ ら に限 ら れません)、 すべての保証お よ び条件を負わない (否認す る ) も の と し ます。 ま た、 (2) ザ イ リ ン ク ス は、 本情報 (貴殿ま たは貴 社に よ る 本情報の使用を含む) に関係 し 、 起因 し 、 関連す る 、 いかな る 種類 ・ 性質の損失ま たは損害について も 、 責任を負わない (契約上、 不法行為上 (過失の場合を含む)、 その他のいかな る 責任の法理に よ る かを問わない) も の と し 、 当該損失ま たは損害には、 直接、 間接、 特別、 付随的、 結果的な損失 ま たは損害 (第三者が起 こ し た行為の結果被っ た、 デー タ 、 利益、 業務上の信用の損失、 その他あ ら ゆ る 種類の損失や損害を含みま す) が含 ま れ る も の と し 、 それは、 た と え当該損害や損失が合理的に予見可能で あ っ た り 、 ザ イ リ ン ク ス がそれ ら の可能性について助言を受け ていた場合であ っ た と し て も 同様です。 ザ イ リ ン ク ス は、 本情報に含ま れ る いかな る 誤 り も 訂正す る 義務を負わず、本情報ま たは製品仕様のア ッ プデー ト を貴殿ま たは貴社に知 ら せ る 義務 も 負い ません。事前 の書面に よ る 同意のない限 り 、 貴殿ま たは貴社は本情報を再生産、 変更、 頒布、 ま たは公に展示 し てはな り ません。 一定の製品は、 ザ イ リ ン ク ス の限定的保証の諸条件に従 う こ と と な る ので、 http://japan.xilinx.com/legal.htm#tos で見 ら れ る ザ イ リ ン ク ス の販売条件 を参照 し て く だ さ い。 IP コ アは、 ザ イ リ ン ク ス が貴殿ま たは貴社に付与 し た ラ イ セ ン ス に含ま れ る 保証 と 補助的条件に従 う こ と に な り ます。 ザ イ リ ン ク ス の製品は、 フ ェ イ ルセーフ と し て、 ま たは、 フ ェ イ ルセーフ の動作を要求す る アプ リ ケーシ ョ ンに使用す る ために、設計 さ れた り 意図 さ れた り し てい ません。 その よ う な重大な アプ リ ケーシ ョ ンにザ イ リ ン ク ス の製品を使用す る 場合の リ ス ク と 責任は、 貴殿ま たは貴社が単独で負 う も のです。 http://japan.xilinx.com/legal.htm#tos で見 ら れ る ザ イ リ ン ク ス の販売条件を参照 し て く だ さ い。 自動車用のア プ リ ケーシ ョ ンの免責条項 ザ イ リ ン ク ス の製品は、 フ ェ イ ルセーフ と し て設計 さ れた り 意図 さ れてはお ら ず、 ま た、 フ ェ イ ルセーフ の動作を要求す る アプ リ ケーシ ョ ン (具体的には、 (I) エアバ ッ グの展開、 (II) 車の コ ン ト ロ ール (フ ェ イ ルセーフ ま たは余剰性の機能 (余剰性を実行す る ため のザ イ リ ン ク ス の装置に ソ フ ト ウ ェ ア を使用す る こ と は含 ま れ ま せん) お よ び操作者が ミ ス を し た際の警告信号が あ る 場合を除 き ます)、 (III) 死亡や身体傷害を導 く 使用、 に関す る アプ リ ケーシ ョ ン) を使用す る ために設計 さ れた り 意図 さ れた り も し てい ません。 顧客は、 その よ う な アプ リ ケーシ ョ ンにザ イ リ ン ク ス の製品を使用す る 場合の リ ス ク と 責任を単独で負い ます。 © Copyright 2013-2015 Xilinx, Inc. Xilinx、 Xilinx の ロ ゴ、 Artix、 ISE、 Kintex、 Spartan、 Virtex、 Vivado、 Zynq、 お よ び こ の文書に含ま れ る その他の指定 さ れたブ ラ ン ド は、 米国お よ びその他各国のザ イ リ ン ク ス社の商標です。 すべてのその他の商標は、 それぞれの保 有者に帰属 し ます。 こ の資料に関す る フ ィ ー ド バ ッ ク お よ び リ ン ク な ど の問題につ き ま し ては、 [email protected] ま で、 ま たは各ページの 右下にあ る [フ ィ ー ド バ ッ ク 送信] ボ タ ン を ク リ ッ ク す る と 表示 さ れ る フ ォ ーム か ら お知 ら せ く だ さ い。 フ ィ ー ド バ ッ ク は日本語で 入力可能です。 いただ き ま し た ご意見を参考に早急に対応 さ せていただ き ます。 なお、 こ の メ ール ア ド レ スへのお問い合わせは受 け付けてお り ません。 あ ら か じ めご了承 く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG984 (v2015.1) 2015 年 4 月 15 日 UG984 (v2015.3) (v2015.2) 2015 年 96 月 30 24 日 japan.xilinx.com 259
© Copyright 2024 Paperzz